O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

ホームディレクトリに埋もれた便利なコードをさがせ!

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Yapc2012資料
Yapc2012資料
Carregando em…3
×

Confira estes a seguir

1 de 64 Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a ホームディレクトリに埋もれた便利なコードをさがせ! (20)

Anúncio

Mais recentes (20)

Anúncio

ホームディレクトリに埋もれた便利なコードをさがせ!

  1. 1. ホームディレクトリに 埋もれた 便利なコードをさがせ! id:hakobe932 1
  2. 2. こんにちは
  3. 3. id:hakobe932
  4. 4. 京都
  5. 5. Perl/JavaScript/ Objective-C/Java
  6. 6. 最近の仕事 ❖ はてなブックマーク •コードレビュー/計測ツール,CI,テスト 整備/運用ツール開発/スマフォ •‣id:yanbe ソーシャルブックマーク神 ‣ Solr神 • id:nobuoka ‣ とても優秀な若者 7
  7. 7. 最近のYAPCでの活動 ❖ 2010年 LT • ページャ実装マニアックス ‣ 108のページャ実装を紹介 ❖ 2011年 LT • Enhance Anime Watching with Programming ‣ アニメ試聴支援ツールを紹介 9
  8. 8. これ
  9. 9. WebService::SyoboiCalendar https://github.com/hakobe/ WebService-SyoboiCalendar
  10. 10. アニメの話はありません
  11. 11. 突然ですが
  12. 12. ls ~/tmp
  13. 13. ls ~/bin
  14. 14. > ls ~/bin ab.rb* gita* pod2pdf* check_config.sh* gitolite@ repo* cpan-chm.pl* hakobe-pmsetup* reposh.rb* cpan-tags.sh* hatena-tags* ri* cpan-update.sh* icssh.scpt screen* cron_minicpan.sh* icssh.sh* subl@ efm_perl.pl* irb* testrb* fork.sh* lingr-ircd.pl* time_bell.rb* forwarding.sh* list_config.pl todo_progress.rb* gistp@ memo* touch_pm* git-branch-recent* memo.rb* tov* git-grep-submodule* myd.sh* ts* git-hatena@ notify.rb* twitter2ircd.pl* git-hatenana* pb_client.pl* update-chrome.sh* git-rebase-recover* pb_server.pl* vimwhich* git-review* pcd* yappo-pmsetup* git_lazy_add.sh* pmsetup* 雑多なコードの巣窟
  15. 15. 1 use strict; 2 use warnings; 3 4 use Text::Xslate; 5 6 my $xslate = Text::Xslate->new( 7 module => ['Text::Xslate::Bridge::TT2'], 8 syntax => 'TTerse', 9 ); 10 11 my $params = { 12 values => [qw(1 2 3 4 5 6 7)], 13 }; 14 15 print $xslate->render_string(<<"TMPL_END", $params); 16 17 [% FOREACH val IN values %] 18 [% val %] 19 [% END # FOREACH val IN values %] 20 21 TMPL_END
  16. 16. 1 use strict; 2 use warnings; 3 4 my $words = [" ", """, """]; 5 6 print "1" if scalar grep { /[^"s]/ } @$words == 0; 7 print "2" if scalar( grep { /[^"s]/ } @$words) == 0; 8 9 __END__ 10 2 しか表示されない
  17. 17. 1 #!/bin/sh 2 CPUS= `cat /proc/cpuinfo | grep -E '^processor' | wc -l` 3 SERVERS= `grep StartServers /etc/httpd/conf/httpd.conf | cut -d' ' - 4 CLIENTS= `grep Clients /etc/httpd/conf/httpd.conf | cut -d' ' -f2` 5 RAM=`free -m | grep '^Mem' | awk '{printf $2}'` 6 7 echo $CPUS $SERVERS $CLIENTS $RAM
  18. 18. もしかして 価値あるコードが 眠っているかも?
  19. 19. 本日のテーマ
  20. 20. ホームディレクトリに 埋もれた 便利なコードをさがせ!
  21. 21. ちょっとしたコード ❖ ホームディレクトリに眠った 便利なコード ❖ バグを再現させるコードや エラーメッセージ ❖ その場しのぎ確認スクリプト ❖ 運用でいつも使っているワンライナー ❖ etc... 23
  22. 22. ちょっとした コードを共有して 互いに役立てよう!
  23. 23. 現状
  24. 24. nopaste
  25. 25. gist
  26. 26. gist ❖ コードスニペットの共有ツール • gitリポジトリとして扱える ‣ 履歴/gitコマンド使える •fork •シンタックスハイライティング •Markdown 28
  27. 27. 課題
  28. 28. 社内で使えない (研究室内,グループ内)
  29. 29. GitHubEnterprise はお高い
  30. 30. 会社にあるマシン ホームディレクトリにこそ 価値あるコードが 埋もれている
  31. 31. 社内でこそ ちょっとしたコードの 共有が大事
  32. 32. 解決
  33. 33. open source gist clone
  34. 34. Perl
  35. 35. Guita
  36. 36. Guita ❖ gist clone • コードスニペットの共有ツール • みんな大好き安心のPerl製 • gitリポジトリとして利用可能 • fork • syntax highlighting 38
  37. 37. デモ
  38. 38. Guita 社内で使える gist clone
  39. 39. 実装
  40. 40. 構成 ❖ ぼくがかんがえたさいきょうのうぇ ぶふれーむわーくの亜種 •M: POPO ‣ DBIx::Lite ‣ Git::Repository •V: Text::Xslate •C: Router::Simple + Handler 42
  41. 41. Git ❖ 1コードあたり1gitリポジトリ ❖ Git::Repository • • git コマンドの実行 https://metacpan.org/module/Git::Repository ❖ Gitolite • • リポジトリの権限管理 https://github.com/sitaramc/gitolite 43
  42. 42. プログラムからのGit ❖ libgit2 • http://libgit2.github.com/ • Cで書かれたGit操作ライブラリ • available as bindings for all major scripting languages Ruby/Objective-C/Python/.Net/PHP/ Lua/Delphi/node.js/go/Erlang/parrot 44
  43. 43. PerlからのGit ❖ Git.pm • gitに付属してる • CPANモジュールじゃない ❖ Git::Class/Git::Wrapper • interactiveなコマンドが使えない ❖ Git::Repository • APIがシンプルで割り切ってる see: http://search.cpan.org/ book/Git-Repository-1.25/lib/Git/ Repository.pm#OTHER_PERL_GIT_WRAPPERS 45
  44. 44. Git::Repository 1 use Git::Repository; 2 3 # リポジトリの指定 4 my $git; 5 $git = Git::Repository->new( 6 git_dif => '/path/to/.git' ); 7 $git = Git::Repository->new( 8 work_tree => '/path/to/working_copy' ); 9 18 46
  45. 45. Git::Repository 10 # コマンドの実行 11 my $status = $git->run('status'); 12 my @diff = $git->run('diff', 'HEAD^...HEAD'); 13 14 # コマンドの実行時に入出力を制御 15 my $cmd = $git->command('add', '-p', '-u'); 16 $cmd->stdout; 17 $cmd->stdin; 18 47
  46. 46. Gitolite ❖ リポジトリの権限管理 • 専用のユーザにインストール • 設定を書き込むとリポジトリ作成 • 権限をhookで判定 gitolite-admin/conf/gitolite.conf 1 repo myrepository 2 RW+ = hakobe 48
  47. 47. Guitaの動作の例 ❖ コードスニペットの作成 •DBにレコードを作成 •Gitolite経由でリポジトリを作成 •‣リポジトリにコードを登録 git clone ‣ git add ‣ git push 49
  48. 48. 競合条件が発生し得る ❖ 勢いよくコードを登録/編集 •複数のプロセスが同時にgit push しまくるので.... ❖ 解決方法 •Gitoliteの操作をflockして待つ •シングルスレッドのジョブキューに なげる 50
  49. 49. 評価
  50. 50. はてな社内で使ってみた ❖ 期間: 3ヶ月 ❖ コード数: 112 ❖ 内容: • • 便利系 検証系 • • ドキュメント系 おもしろ系 52
  51. 51. 便利系 • “perl version” • “AnyThing Git Grep” • “apache のプロセス数調査” 有用なスクリプトの共有 53
  52. 52. 検証系 • “dump方法によるSVの型の違い” • “reCaptureを試すためのapp.psgi” • “モジュールのバージョン確認方法 微妙な振舞い違い” 問題/認識の共有 54
  53. 53. ドキュメント系 •“SolrのDataImportHandlerでJDBC 経由でMySQLのセッション変数を設 定する方法” •“インターン用の課題(テンプレー トエンジンをつくろう!)” ‣ push/pullしながらGuita上で確認 55
  54. 54. おもしろ系 • “眠気を覚ます方法を集めましょう” • “2009/4/21 うごメモ春のコンフリ クト祭り” • “カルチョビット変換コード” 56
  55. 55. 112の埋もれてし まったかもしれない コードが得られた
  56. 56. まとめ
  57. 57. まとめ ❖ ちょっとしたコードは共有すると みんなの役に立つ ❖ gistが便利 ❖ 社内用にはGuita • 今つくってる •はてなでは有用な知識が共有 できるようになった 59
  58. 58. Guita 開発について ❖ GitHubで開発中 • 基本機能は動作 • ドキュメントは不十分 • ❖ UI ちゃんとする インストールエントリ書きます 60
  59. 59. ホームディレクトリに 埋もれた 便利なコードをさがせ! Guita https://github.com/hakobe/Guita
  60. 60. 社内にgistが欲しかったので作りはじめてどうや ら動くようにはなったところで、社内に GitHubEnterprise導入の流れ。そういえば、君、 git関係のこといろいろやっていたよねという話に なりまして、あれよあれよという間に導入係に...
  61. 61. ホームディレクトリに 埋もれた 便利なコードをさがせ! Guita https://github.com/hakobe/Guita

×