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

42,409 views

Published on

Published in: Technology

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

  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 ~/binab.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 );1011 my $params = {12 values => [qw(1 2 3 4 5 6 7)],13 };1415 print $xslate->render_string(<<"TMPL_END", $params);1617 [% FOREACH val IN values %]18 [% val %]19 [% END # FOREACH val IN values %]2021 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/sh2 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}`67 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 ); 918 46
  45. 45. Git::Repository10 # コマンドの実行11 my $status = $git->run(status);12 my @diff = $git->run(diff, HEAD^...HEAD);1314 # コマンドの実行時に入出力を制御15 my $cmd = $git->command(add, -p, -u);16 $cmd->stdout;17 $cmd->stdin;18 47
  46. 46. Gitolite❖ リポジトリの権限管理• 専用のユーザにインストール• 設定を書き込むとリポジトリ作成• 権限をhookで判定gitolite-admin/conf/gitolite.conf1 repo myrepository2 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. ホームディレクトリに 埋もれた 便利なコードをさがせ! Guitahttps://github.com/hakobe/Guita
  60. 60. 社内にgistが欲しかったので作りはじめてどうや ら動くようにはなったところで、社内にGitHubEnterprise導入の流れ。そういえば、君、git関係のこといろいろやっていたよねという話になりまして、あれよあれよという間に導入係に...
  61. 61. ホームディレクトリに 埋もれた 便利なコードをさがせ! Guitahttps://github.com/hakobe/Guita

×