読者です 読者をやめる 読者になる 読者になる

詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

YAPC::Kansai 2017 OSAKAで『はてなシステムの考古学』というトークをおこないました #yapcjapan

先日開催された YAPC::Kansai 2017 OSAKAで、『はてなシステムの考古学』というタイトルで発表しました。

スライド中のリンクが効かないのであまり意味がないのですが、一応 Speakerdeck にも上げてあります: はてなシステムの考古学 / History of development at Hatena // Speaker Deck

はてなの開発の歴史を Perl エンジニア視点からふり返るというもので、どちらかというと『はてなの開発の歴史学』とでも読んだほうがしっくりくる内容になりました。

具体的な成果物を伴わない話をするのは苦手なほうだと思っていましたが、今回はあえてこんな内容でトークすることになりました。その背景には、いつの間にか自分が社内でも古参のエンジニアになっていたこと、また、事業や組織の拡大とともに開発のあり方が多様化してきて、それまで暗黙的に共有されてきたものに頼ることが困難になってきた感覚があったのだと思います。

なぜ歴史を語るのか

発表の参考にした『歴史とは何か』より、

歴史とは歴史家と事実との間の相互作用の不断の過程であり、現在と過去との間の尽きることを知らぬ対話なのであります。

と発表中に引用したとおり、歴史とは過去を語るだけでなく、過去のほうからも現在(と自分自身)を語ることでもあります。たとえばスライドでいうところの近代以降、フレームワークは時代の空気とでも呼べるものになったわけですが、普通にしていては明らかではないその実体に、歴史を通じて光を当てることができるのではないかという試みでもありました。

また同書より、

歴史というのは、獲得された技術が世代から世代へと伝達されて行くことを通じての進歩ということなのです。

歴史における進歩は、[…]獲得された資産の伝達を基礎とすること、[…]この資産は、物質的所有物と、自分の環境を支配し変更し利用する能力との両方を含んでいます。

……ということで、継承されてきた技術や思想、という観点から現在の自分たちの開発の現状を省みることで、新たに入社した人たちにもなぜ今がそうあり、未来にどうなっていくべきなのかということが、点ではなく線のようにイメージできるのではないかと考えたのでした。

準備にあたっては、エンジニアたちの過去の発表資料が当時を語るものとして非常に役に立ちました。少し前までは、はてなのエンジニアの大きな発表機会といえば YAPC::Asia で、京都から何人も出張するのでお祭り感があった(今もそうだけど)ものでしたが、つい最近であれば try! Swift や DroidKaigi ほか、それぞれの言語や技術分野コミュニティの大きな集まりにエンジニアたちが積極的に顔を出していて、あるべき姿に多様化してきているのだなと感じます。

そして振り返ってみるとこういう外部への発表こそが、自分たちの内に暗黙知として蓄えられていたものを整理する、SECIモデルでいうところの形式知への表出化の機会でもあったのかな、とも思います(この発表も、それがないとここまでちゃんと考えなかっただろうということも含めて)。

歴史とは何か (岩波新書)

歴史とは何か (岩波新書)

知識創造企業

知識創造企業

リンク集

スライド中で言及した・作成の参考にした資料へのリンクを記しておきます。

go-sql-driver/mysql の接続に SOCKS5 プロキシを利用する

Go では proxychains みたいな方法が利用できないので、プログラム側で対応してやる必要がある。Go で SOCKS5 プロキシを利用する - 詩と創作・思索のひろば と同様に golang.org/x/net/proxy を利用して実現できる。

import (
    "database/sql"
    "net"
    "golang.org/x/net/proxy"
    "github.com/go-sql-driver/mysql"
)

func main() {
    dialer := proxy.FromEnvironment()
    mysql.RegisterDial("tcp", func(network string) (net.Conn, error) {
        return dialer.Dial("tcp", network)
    })

    db, err := sql.Open("mysql", dsn)
    ....
}

という感じ。DSN を変える必要はない。

all_proxy=socks5://127.0.0.1:10000 などと環境変数を設定して起動してやる。

Google Apps Script を使ってブックオフオンラインで購入した書籍を Google Spreadsheet に記録する

今年は読んだ本をちゃんと記録していくぞ! と思ったものの読書管理系のサービスは記録が面倒で続かないことが目にみえている。とりあえず買った本だけでもどこかで一覧できればよいのでは? ということで、Gmail に届くレシートから Google Spreadsheet に追記していく戦略をとることにした。最近はブックオフオンラインを使うこともあるので、これに対応してみる。

そこでできたのがこちら。

GitHub - motemen/gas-gmail-to-spreadsheet-bookoffonline-receipt

  1. 書籍購入情報を記録するスプレッドシートを作成し、スプレッドシートのキー(https://docs.google.com/spreadsheets/d/***/edit)をメモしておく
    • カラムは「日付」「書名」「価格」「個数」「注文URL」
  2. Google ドライブ から左上 [新規] ボタン → [その他] → [Google Apps Script] でスクリプトを作成し、src/Main.js のコードをコピペ
  3. [ファイル] メニュー → [プロジェクトのプロパティ] → [スクリプトのプロパティ] に SpreadsheetId という名前のプロパティを追加し、値を先ほどのキーにする
    • f:id:motemen:20170104131959p:plain
  4. [実行] メニュー → [main] でスクリプト実行。初回は権限の確認が行われる
  5. スプレッドシートを確認して、動いてそうなら [リソース] メニュー → [現在のプロジェクトのトリガー] で main を定期的に実行するようにすれば OK(のはず。まだ動いてないのでわからない)
    • f:id:motemen:20170104132155p:plain

スクリプトで処理したメールには gas-{scriptId}-processed なるラベルがつく。

f:id:motemen:20170104132424p:plain

以上。Amazon 版だれか作ってください。今年もよろしくお願いします。