SlideShare a Scribd company logo
1 of 71
GitHubを使った
開発とデプロイ
 2012/09/28 YAPC資料
自己紹介

•   twitter_id: @matsukena

•   松尾健司/Kenji Matsuo

•   paperboy&co.でロリポップの開発やってます。

•   普段はperlとかph        やってます。
今日の内容

• GitHubの機能紹介
• GitHubに移行したしている背景
• How To Svn to GitHub
• デプロイの自動化に向けて
GitHubってなに?
 •   gitのプロジェクトホスティングサービス

 •   gitのリポジトリを自分で作って公開できる

 •   web上から変更履歴などが参照可能

 •   GitHubで公開されているOSSのコードをforkして開
     発する事が可能

 •   100Mまで無料で使える

 •   プライベートレポジトリも作成可能(有料)

     *出展はてなキーワード: http://d.hatena.ne.jp/keyword/GitHub
GitHubの機能紹介
contibutors
このファイルに関係している人が誰
かわかります。
blame
そのコードを誰が書いたかが表示さ
れます。
history
そのファイルのにどんな歴史があっ
たのか?
もちろんどのような変更があったか
も表示されます。
その場で編集
gitなんて使えなくてもその場で編集
できます。
Issues
バグ報告、機能の追加、方向性の議
論をしたい時にも。
Pull Request
自分の変更をFork元に取り込んでほ
しい時に。
もちろん議論したい時にも。
gist
リポジトリを作る程でもないものを
公開したい時に。
Graphs
    いろんな情報を可視化してくれます。
•   Contributors: ストーキングに便利w

•   Commit Activity: 週にどれくらいコミットされてるかを1年分のグラフ

•   Code Frequency: コードの行数に対する増減のグラフ

•   Impact: 書いたコードの追加・削除がリポジトリにどれくらいの影響を与
    えてるか視覚的にグラフ表示

•   Punchcard: 何曜日の何時に頻繁にコミットが行われているか表示
小ネタ
GitHub 404ページ

マウスに追従します。
iPhoneだとジャイロセンサーに
反応します。
キーボードショートカット

GitHubはキーボードで操作できます。

”?”を入力するとhelpがでます。
画像の差分

画像の差分だって、みれます。
GitHubを使う時に知って
 得する便利ツール
hubコマンド

・GitHubの操作をコマンドラインでできるようになります。

インストール

$ brew install hub
もしくは
$ curl http://defunkt.io/hub/standalone -sLo ~/bin/hub &&
   chmod +x ~/bin/hub
hubコマンド よく使うオプション。

$ hub browse [user/repo]
browseは打ちにくいのでseeにエイリアスするといいかも。

$ hub clone user/repo

$ hub pull-request
      他にもあるのでREADMEを読んでください。
url https://github.com/defunkt/hub/blob/master/README.md
デザイナーさんの為のGithub for Mac


GUIのGitクライアントアプリです。
黒い画面を使わずに簡単にGitが使えます。

インストール
http://mac.github.com/ からできます。

IDとPASSWORDだけで
公開    と秘密   は不要です。

      * windowsもちゃんとあります。
OctoDroid

Android用のGitHubクライアントです。
認証機能がついているので、ログインしないとみれな
い情報もみれます。
何故GitHubに移したのか?
GitHubに移行するまで
           (個人的に色々試してみました。)


SVN → Gitosis → Gitlite →
               Plack-App-GitSmartHttp → GitHub

Plack-App-GitSmartHttpは手軽な感じがすごく
便利でした。
http://search.cpan.org/~yamamoto/Plack-App-GitSmartHttp-0.02/
• 人数が増えて、マージ・ブランチするの
 が面倒。

• 何故かコミットされてないファイルとか
 あってちゃんと整理したかった。

• Gitサーバの管理をしなくていい。
• 社外でもソースがみれる。
• やりたいという気持ち ← これが大事
GitHubへの移行について
  問題になった事
GitHubがメンテナンス中
 になる事がある。
解決策!



•   リポジトリをbitbucketに同期して冗長化する。

•   wikiについてもローカルにバックアップを作成する。



    どちらのスクリプトも@gosukenatorさんが書いてくださりました。
    ありがとうござます。
デザイナーさんもgitを覚
えてもらう必要がある。
解決策!!

•   社内で勉強会を開く。

•   GitHub for MacなどのGUIのtoolを使う。    
    (黒い画面なんて嫌って人向け)

•   初心者向けのサイトも増えてきたので、    
    実際にやってもらうのが一番

      master ブランチさへ変更しなければ
      なんとでもなる!
移行のタイミングが
  難しい。
解決策!!1


•   やると決めたら時期を決めて作業を行う。

•   プロジェクトのリリースをその日だけ止めてもらう。

•   あとは一気にやってしまう。(勢い大事)
移行の
タイミングは
上長と
要相談!!1
本当にコードを社外に置
 いて大丈夫なの?
解決策?

      •     セキュリティポリシーを読んでみましょう。

          url https://help.github.com/articles/github-security

•   GitHubのコード自身もGitHubにホスティグしてます。


•   24*7でオンサイトのスタッフが不正な侵入を防ぐ為詰めています。


•   物理的なセキュリティは独立した監査法人による監査をうけています。


•   不正なシステムアクセスをブロックする為、専用のファイアウォールとVPNを利用しています。


•   ラックスペース社によって管理されたバックアップソリーションによってデータは保護されています。


•   不正なシステムアクセスから保護する為さらなるレイヤーとして専用の侵入検知装置を導入しています。



                                    などなど・・・
それでも脆弱性はあった
  りするので・・・
*でも利用できると便利!!!
偉い人に
要相談!!1
社外ホスティングサービスに
コードを持ち出せない場合は   
GitHub Enterpriseを利用しましょう。
How To SVN to GitHub
git svnコマンド

svnのリポジトリをgitコマンドで
直接さわれるようになります。
①auther変換定義ファイルを作る

②svnリポジトリからgitでコードを引っ張りだす

③localに作業用レポジトリを切る

④svnのtrunkを作業リポジトリのmasterとしてpush

⑤svnのbranchを作業リポジトリのbranchとしてpush

⑥svnのtagを作業リポジトリのtagとしてpush

⑦作業リポジトリを丸ごとremoteへpush
デプロイ自動化に向けて
開発チームで
やりたかった事
旧開発環境
• FTPとかもうオワコンだしwww
• 手動でやるとあげ忘れたりするし。
• 面倒なことはやりたくない。
• リリースするのに時間がかかる。
• エクセルファイルでリリースするファイ
 ルを管理された・・・
これはなんとか、
解決しないと・・・
やりたい事は、手作業を減らして、
リリースまでの作業をもっと楽にする。
    (開発の速度を上げる)
新開発環境
• デプロイを自動化する。
• 個人個人のテスト環境を作る。
• もちろんGitHubで管理。
• あえてgit-flowは使わない。
デプロイを自動化

cpistrano, webistranoで簡単にデプロイ

デプロイ時はircに通知

Ikachanが大活躍です!

   FTPとはサヨナラ
環境は、@kentaroさんに用意して頂きました。
ありがとうございます。
これでみんな
HAPPYになれる
(はず。。。)
インフラチームで
やりたかった事
インフラの処理では結構
Perlが使われてる。
(開発チームはPH )
実際動いているPerlの処理

• server-api
• qpsmtpd
• sendmail の wrapper
• その他 cron で動いているbatch処理
server-apiの話

・@gosukenatorさん、 @hibomaさんが作ってくださった
 サーバサイドのAPI。

・ロリポップのリニューアル時から運用。

・運用は福岡支社の方で、主に僕が担当。

・開発がサーバサイドの事を気にしなくていいように、
 webとサーバの中間レイヤーのAPIとして作成されました。
server-apiの今後の話


• rpmで管理してるけど、修正加えるたび
 にパッケージ作るのが面倒。

• HTTPエンジンベースなのでPSGIに置き
 換えたい。

• Perlのバージョンもあげたいっ!!1
って思ってましたが。
  すいません。
間に合いませんでした。
来年までには必ず!
弊社での個人的な
悩み事。
実はペパボ福岡支社には
  Perlを書く人が
僕しかいないのです!!1
そして東京本社の方は
ルビーストになっていく。
社内IRCはこんな感じ。
Rubyのチャンネル
Perlのチャンネル
ぼっちとか嫌だ!!1
レビューしてほしい!
ここでも
偉い人に
相談!!1
GitHubを利用すれば場所が離れてても簡
単にレビューしてもらえる。

ソーシャルコーディング
万歳!
これで僕はぼっち、
じゃない!!1
GitHubはSNSです!
みんなで楽しくプロ
ジェクトを進めて行き
ましょう。
といっても福岡支社には
Perlを書いてくれる人が
いないので・・・
ご清聴ありがとうござい
ました。

More Related Content

What's hot

会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話Shuji Yamada
 
GitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろうGitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろうNobuhiro Ueda
 
【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用Reimi Kuramochi Chiba
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門Tomohiko Himura
 
Git for Begineers GitHub ハンズオン
Git for Begineers GitHub ハンズオンGit for Begineers GitHub ハンズオン
Git for Begineers GitHub ハンズオンEmma Haruka Iwao
 
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料mihararyosuke
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門dsuke Takaoka
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーSaeko Yamamoto
 
スッとGoを取り入れる
スッとGoを取り入れるスッとGoを取り入れる
スッとGoを取り入れるYusuke Wada
 
Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回kinme modoki
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理H2O Space. Co., Ltd.
 
大容量ファイルもGitで管理。 Git LFSの使い方
大容量ファイルもGitで管理。 Git LFSの使い方大容量ファイルもGitで管理。 Git LFSの使い方
大容量ファイルもGitで管理。 Git LFSの使い方hibiki443
 
@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門Takashi Imagire
 
Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)Tadahiro Ishisaka
 
新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)pupupopo88
 
私が複数人開発で感じている Git・GitHubのうまみ
私が複数人開発で感じている Git・GitHubのうまみ私が複数人開発で感じている Git・GitHubのうまみ
私が複数人開発で感じている Git・GitHubのうまみShihomi Katayama
 
日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 github日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 githubTomohiko Himura
 
ノンプログラマのGit入門
ノンプログラマのGit入門ノンプログラマのGit入門
ノンプログラマのGit入門Muyuu Fujita
 
Gitのつくりかた YAPC::Asia 2015 @DQNEO
Gitのつくりかた YAPC::Asia 2015 @DQNEOGitのつくりかた YAPC::Asia 2015 @DQNEO
Gitのつくりかた YAPC::Asia 2015 @DQNEODQNEO
 

What's hot (20)

会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話
 
GitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろうGitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろう
 
【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用【社内勉強会】弊社でGit!実案件での運用
【社内勉強会】弊社でGit!実案件での運用
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門
 
Git for Begineers GitHub ハンズオン
Git for Begineers GitHub ハンズオンGit for Begineers GitHub ハンズオン
Git for Begineers GitHub ハンズオン
 
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダー
 
スッとGoを取り入れる
スッとGoを取り入れるスッとGoを取り入れる
スッとGoを取り入れる
 
Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
大容量ファイルもGitで管理。 Git LFSの使い方
大容量ファイルもGitで管理。 Git LFSの使い方大容量ファイルもGitで管理。 Git LFSの使い方
大容量ファイルもGitで管理。 Git LFSの使い方
 
@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門
 
Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)Windows環境でのgitまとめ(2016.1)
Windows環境でのgitまとめ(2016.1)
 
新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)
 
はじめてのgithub
はじめてのgithubはじめてのgithub
はじめてのgithub
 
私が複数人開発で感じている Git・GitHubのうまみ
私が複数人開発で感じている Git・GitHubのうまみ私が複数人開発で感じている Git・GitHubのうまみ
私が複数人開発で感じている Git・GitHubのうまみ
 
日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 github日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 github
 
ノンプログラマのGit入門
ノンプログラマのGit入門ノンプログラマのGit入門
ノンプログラマのGit入門
 
Gitのつくりかた YAPC::Asia 2015 @DQNEO
Gitのつくりかた YAPC::Asia 2015 @DQNEOGitのつくりかた YAPC::Asia 2015 @DQNEO
Gitのつくりかた YAPC::Asia 2015 @DQNEO
 

Similar to Yapc2012資料

一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
オープンセミナー香川2012 LT
オープンセミナー香川2012 LTオープンセミナー香川2012 LT
オープンセミナー香川2012 LTKouta Imanaka
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築You&I
 
GitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へGitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へKazumi IWANAGA
 
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整えるAzure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整えるKazumi IWANAGA
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたTakako Miyagawa
 
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOpsGitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOpsKazumi IWANAGA
 
Gitを使いこなしてみよう!
Gitを使いこなしてみよう!Gitを使いこなしてみよう!
Gitを使いこなしてみよう!Hiroshi Maekawa
 
Metahub for github
Metahub for githubMetahub for github
Metahub for githubSuguru Oho
 
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれKazumi IWANAGA
 
GitHub Releasesからインストールしたコマンドを管理する
GitHub Releasesからインストールしたコマンドを管理するGitHub Releasesからインストールしたコマンドを管理する
GitHub Releasesからインストールしたコマンドを管理するjiro4989
 
GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月Kazumi IWANAGA
 
今日から始めるGithub
今日から始めるGithub今日から始めるGithub
今日から始めるGithublion-man
 
デザイナー、フロントエンジニア向けgithub勉強会ワークショップ資料
デザイナー、フロントエンジニア向けgithub勉強会ワークショップ資料デザイナー、フロントエンジニア向けgithub勉強会ワークショップ資料
デザイナー、フロントエンジニア向けgithub勉強会ワークショップ資料ichikaway
 

Similar to Yapc2012資料 (20)

一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
オープンセミナー香川2012 LT
オープンセミナー香川2012 LTオープンセミナー香川2012 LT
オープンセミナー香川2012 LT
 
GitHub Handson
GitHub HandsonGitHub Handson
GitHub Handson
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
GitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へGitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へ
 
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整えるAzure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
 
今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみました
 
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOpsGitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
 
Gitを使いこなしてみよう!
Gitを使いこなしてみよう!Gitを使いこなしてみよう!
Gitを使いこなしてみよう!
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
 
01.app
01.app01.app
01.app
 
GitHub Releasesからインストールしたコマンドを管理する
GitHub Releasesからインストールしたコマンドを管理するGitHub Releasesからインストールしたコマンドを管理する
GitHub Releasesからインストールしたコマンドを管理する
 
Git tutorial
Git tutorialGit tutorial
Git tutorial
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月
 
Git超入門
Git超入門Git超入門
Git超入門
 
今日から始めるGithub
今日から始めるGithub今日から始めるGithub
今日から始めるGithub
 
デザイナー、フロントエンジニア向けgithub勉強会ワークショップ資料
デザイナー、フロントエンジニア向けgithub勉強会ワークショップ資料デザイナー、フロントエンジニア向けgithub勉強会ワークショップ資料
デザイナー、フロントエンジニア向けgithub勉強会ワークショップ資料
 

Yapc2012資料

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n