月別アーカイブ: 2013年11月

Shibuya Plack/PSGI Conference (shibuya.pl) #1 に参加してきました #plackcon

おがた (@xtetsuji) です。

2013年11月20日(水曜日) に「Shibuya Plack/PSGI Conference (shibuya.pl) #1」通称 #plackcon に行ってきました。

plackconの看板

私自身は、特に今回はトークする側ではなく、完全に聴衆側でした。

普段の勉強会では結構熱心にメモを取ったりしているのですが、今回は遅れて会場に入ったことや、スライドが見づらい席に座ったこともあって、あまり熱心にメモも取らずに、スライドに集中しつつTwitterで #plackcon ハッシュタグを付けてツイートすることに専念していた感じです。

詳細はATNDのページが詳しいです。

ダブル基調講演

まずは「ダブル基調講演」から。先日のISUCON3の出題者側の @fujiwara さんと、優勝者の @kazeburo さん。

色々な意味でISUCONの「出題者」と「優勝者」である2人。なかなか確信をついたトークが印象に残りました。両者、商用投入をしたときのパフォーマンスといった部分にフォーカスしていた印象ですが、@fujiwaraさんのほうはツールを組み合わせた多くの人にオススメな実直トーク、@kazeburoさんのほうが既存のPerl製ウェブサーバの魔改造トークといった色分けでした。普段多くの人は魔改造をあまりしないし、@kazeburoさん自身のトークでもアプリケーション層のほうがパフォーマンスでは目立つという話をしていたこともあって、すぐ応用とは行かないまでも、UNIXの根底理解は大切な局面もあるので、@kazeburoさんのトークも非常に参考になりました。というか、10年戦うための長く参考になるであろう話でした。

第二部

 「第二部」は10分トーク3つ。

@moznion さんのトークは、YAPC::Asia Tokyo 2013 の後日ハッカソンでPlackの作者の方々との議論の中で生まれた Plack::Request::WithEncoding の話と、それをMiddlwareにした話。確かにencode/decode処理は「職人が!心を込めて!書いている」状態なのを何とかしようとした話。マルチバイトを扱う日本人ならではの発想ですね。

ただ、PSGIの仕様としてはインプットやアウトプットはバイトストリームを期待すると書かれているそうで、うかつに全てを透過的にしてしまうと仕様との乖離や諸問題が起こるということも要注意。そもそも文字コードの判定は一般的に難しい。

@tokuhirom さんのトークは、理想を求めず実直に業務で使える考え方が満載でした。「application/jsonで来るHTTP Body」「vhostをけちっても意味が無い」「URLの v1 とかよりも X-API-Versionヘッダ」「結局頑張って内部仕様を作っても、iOS/Androidエンジニアに見てもらえなきゃかっこいいパンツを履いているだけ」等、小気味よい話が続きました。例えば 404 Not Foundは、APIが指し示すリソースが無かった場合は200 OKでカラBodyを返しておけばよくて、API自体が存在しない場合にのみ404 Not Foundを返せば良いなど。確かに、iOS/Androidエンジニアは404 Not Foundの解釈をするなら後者寄りなのかなと思いました。

@yusukebe さんのMojoliciousトークは、簡単ながらもRouterやBridgeを解説した実践的トーク。@yusukebe さんのやり方を含んだMojoliiousのカスタム的使い方も解説されていたりして、大規模商用サイトに投入されたMojoliciousがどのように使われているのかといった部分が分かる良いトークでした。また、ここでもJPA理事就任の話と「YAPC::Asia 2014」やるよ宣言。ここで大きな歓声と拍手。今後に期待です。

LT

その後、時間おしおしで休憩ナシで突入した「LT」でした。

@bayashi さんのトークは、plackup のワンライナーの解説が主でした。ただ、Middlewareの理解が甘い私みたいな人には、気軽にMiddlewareをワンライナーで試せるという事が分かって非常によかったです。確かに一度は plackup -e でワンライナーを書いたりするのですが、その後その存在を忘れてしまいがちなのは良くないなと思いました。

@azumakuniyuki さんのトークは、先日の YAPC::Asia Tokyo 2013 で発表した、Haineko のその後の話。jQueryからメールを送信したいという要望から生まれた、JSONをやり取りするplackベースのMUAの話でした。これは面白いプロダクトなので、一度どこかで使ってみたいと思いました。BounceHammerの導入事例も解説され、「あの会社もBounceHammerのユーザ」といったことがわかってよかったです。こういうPerlのキラーアプリが出てくることは良いことですね。

@songmu さんのトークは、.psgi ファイルからの卒業と題して、コマンドラインからplackupする際の *.psgi ファイルを最小限にするという提案。そのほうがテスタブルになるし、見通しも良くなるという話。あと、自作の Riji や Puncher の話など、Plackを応用した各種ツールについての解説も盛りだくさんでした。

トリ

最後は「グニャラくん」さんこと @tasukuchan さんによるトークだったのですが、引越作業が大変とのことで会場には来られず。代わりに「ビデオLT」となりました。生放送ではなく収録だったので、こちらの雰囲気(まいている)が分からず、まったりしたビデオLTとその独特の雰囲気に、周囲は和やかになりました。あのビデオと「Plack寄せ」という言葉の連発がとりわけ印象に残ったトークでした。

懇親会

最近のエンジニア飲み会の定番となった、リアル北海道にはない「居酒屋 北海道」での開催でした。

懇親会の風景

人の集まりは20人ほどでしたが、各テーブルで熱い話が繰り広げられたようです。自分は密度の低いほうのテーブルに座ったので、@uzullaさんのPHP話が特に印象に残っているという結論に。

ISUCONの勝者 @kazeburo さんと 出題者 @fujiwara さんが酒を飲み交わしながら熱く語っていたのが印象的でした。混ざりたかったけど、話の邪魔をする割には特に聴きたい具体的なこともなかったので、声はかけませんでした。あ、@uzullaさんに「ISUCONの賞金どうなったの?」って聞きに行けって言われたので聞きには行きました。みんな、本当お金には興味津々ですね。

23時過ぎには解散となりました。

今回、本会は遅く入ったこともあってバタバタしていてあまり写真が撮れず。とはいえ、それほど絵的に重要な部分も無かったし、ほとんどの人がスライドを公開しているので、あまり写真の重要性は無かったかな。地理的要因で行けなかった人からはUstreamが渇望されていましたが、スライドを見ればだいぶ雰囲気が分かるかと思います。

「Shibuya.pm」をやってしまうと100人以上の定員が即座に埋まってしまうのですが、今回は「Shibuya.pl」ということで80人定員が直前のキャンセルで定員割れするくらいの感じでした。これくらいの人数だとギリギリカジュアルに開催できるのかなと思いました。「秋の」と付いていることもありますし、四半期に一度くらいはPlack/PSGI祭を期待したいところです。

ブログ記事は、それがいつ書かれたかすぐに分かるようになっていてほしい

おがた (@xtetsuji) です。

結論はタイトルの通りなんですが、ブログ記事は「それがいつ書かれたかという日付」もしくは日付に準ずるものがすぐ分かるようになっていて欲しいという話。

書かれた日付を重要視する理由

それはネット上の情報はすぐに陳腐化するから。特に私が知りたいITエンジニア系情報の陳腐化の速度は相当なもので、「○○が今流行っている!」って書かれていても、それが3年前の記事だったりすると、今とはだいぶ情勢が違ったりするわけです。書かれた日付が見つけやすければいいものの、それを知る事が困難な場合もあったりして、やっとの思いで書かれた日付を見つけたら3年前だったりするとガッカリですよね。

逆に「○○は今や廃れた」というブログ記事はなかなか出てきません。それは、その○○を作っている人や、それを愛用している人へ喧嘩を売ること同然であることも一つの理由です。こういう情報はなかなかネットに上がらない。だからこそ勉強会やエンジニア同士のリアルな交流が必要なのですが、その話はまた別のブログ記事で。

書かれた日付を目立たせる方法

人によってどの部分を先に見るか分かれる部分でもありますが、最も目立つ明瞭な情報の一つはURL(ブログ記事のパーマリンク・固有のURL)であると言えます。URLの中に日付やそれに準ずる情報が入っていれば一目瞭然と言えましょう。

既に運用されているブログで、URLに日付やそれに準ずる情報が入っていない場合、それを変更するのは難しいでしょう。外部のブックマークなどを断ち切ることになったり、ソーシャルボタンのカウントを破棄することになったりするからです。

ちなみに私は2013年8月から自分のサーバ(VPS)上でWordPressを使ったブログ運用にしていますが、WordPressのブログ記事のURLはデフォルトである “/?p=数字” 形式から、”/年/月/記事スラッグ/” (スラッグとは記事の概要をURL用に要約した文字列)形式に変更しました。これでブログ記事自体を一切読まなくても、そのブログ記事が書かれた年月を知ることができます。ちなみに “/年/月/日/記事スラッグ” といった「日にち」を入れる設定にもできますが、個人ブログなので毎日更新するわけでもないし、月別アーカイブのURLが “/年/月/” であることがURLデザイン的に綺麗に対比していることから、この形式を選びました。WordPressユーザであれば、この設定は設定画面から簡単に変更することができます (上述の通り既に別形式で運用しているサイトでは気軽にこれを変更すべきではないでしょう)。

もう一つの簡単な方法は、自分が使っているブログのデザインテーマで書いた日付が目立つテーマを選ぶことでしょう。WordPressでも、ブログを書いた日付が目立つものもあれば、そんな事なんて全く考えられていないテーマもあります。まずはテーマ選びが大事。

ブログはファンがつけば毎日見てもらうものになります。そんな中でブログテーマはくどくどしくないものが良いような気がします。一画面に表示しきれないような巨大なヘッダ画像があるような「まるでアメブロのような」ブログテーマは、毎日閲覧する人のどれほどが嬉しいでしょうか。芸能人や有名人の端正な容姿の写真を毎日観て嬉しい人以外は、単なる一画面スクロールの手間を発生させ、無駄なデータをダウンロードさせるだけ (近年のスマートフォンではテザリング等で転送制限などもあります) ではないでしょうか。ブログパーツも一時期流行して、過剰に貼りつけているサイトもあります。適切に使えば他の情報源への誘導として効果的ではありますが、ブログパーツは調味料のようなもので、得てして役に立たないブログパーツを過剰に貼りつけているサイトがチラホラとあるように思えます。ブログパーツ自体を否定するわけではないですが、まずは上述のような問題点を鑑みて、各ブログ記事そのものこそが自分が見せたいコンテンツであり、それと比べて各ブログパーツがどれほど有用なのか、今一度比較してみてほしいと思わされるサイトもあります。必要ではない情報で本当に読者が求めている情報が目立たない・探しづらいというのは不幸そのものです。

URLでもテーマでも解決できない場合は、泥臭い方法ですが、ブログ記事中に手作業で日付を書いてしまうという方法もあります。私はよくブログ中に情報を載せる時、それが時代と共に流行り廃りの対象になりそうなものに対しては「(○年○月現在)」と書くようにしています。また、イベント参加などに関しては「○年○月○日に参加した…」といった事も書くようにしています。イベント参加のブログ記事はなるべく参加後すぐに書けるのが理想ではありますが、なかなかそうも行きません。ブログを書いた日付が分かっても、ブログで言及されている情報の日付が数ヶ月単位でズレていることもあるので、手作業で日付を書くことは手間ではありますが、良い習慣であると思います。

SNS全盛の今、ブログを書く事の重要性

これは「ブログ記事を書いた日付を目立たせよ」という本筋とは微妙に異なるのですが、FacebookなどのSNS全盛の今、ブログを選択する理由というものがあります。端的に言えば、Facebookを含んだ多くのSNSと呼ばれるサイトでは過去記事の検索が容易にはできないからです。ブログであればブログ自体が検索機能を持っていたり、検索エンジンの力を借りることだってできます。しかしFacebookの情報は数日もすれば埋もれてしまいます。しかもなんとFacebookは他人どころか自分が書いた投稿記事の検索すら通常のインターフェースではできません。驚きですね。長く参照されるべき情報まですぐに陳腐化させるもったいないプラットフォーム、それがSNSだと私は思っています。これについては、私はSNSの類を積極的に好んでいないことも加味した意見である事を差し引いて読んでいただければ幸いです。

私はプログラマーで、各種SNSから強引にデータを引っこ抜くプログラムも書けますが、自分が書いた情報を見てもらいたいのは、そういう手間をしない・できない多くの方々です。「それFQL(Facebookの情報問い合せ言語)でできるよ」という発言は、私だけを主体とした世界では命題の解決になっていますが、根本的な問題解決にはなっていません。

SNSにも良さがあって、レコメンドや承認の可視化というものが嬉しいというものもあります。また情報が刹那である反面、直近の情報が目立つということもあり、電話やIM的なその場限りの情報を展開する場としても有用です。それに閉じた(閉じることもできる)ネットワークである事の活用から、インターネット全体から見られたくない情報を仲間内だけで公開する用途としては良い場所でしょう。

それでも、せっかく自分が書いた情報の多くは、多くの人に末永く見てもらえるというのが、インターネットの良さであり、多くの人の情報利便性を高めることではないでしょうか。通常のブログであればGoogleなどの検索エンジンが拾ってくれて、それこそ「直近に更新された」記事の検索すらできます。情報の海から新しい情報を求めている人には、こういった検索エンジンの機能などエコシステムが揃っていることも心強いです。

SNSそのものについての功罪については長くなるので、また別記事で書こうと思います。

まとめ

ここまで読んでくださった方なら大体理解していただいたかと思いますが、まとめを書いておきます。

  • ネットの情報は陳腐化が激しい
  • 特にITエンジニアに関する情報の流行り廃りは激しい
  • 流行りは取り上げられるものの、廃りをネットで取り上げることに差し障りのあるケースが多く、古い流行りを取り上げた記事ばかり残り続けて、その時点では正しくない情報に翻弄されるという問題がある
  • ブログで書いた日付を目立たせる方法は、URL、適切なブログテーマの選択、もしくは愚直に手で書く
  • ブログ中で言及されたイベントなどの事象は、ブログを書いた日付より古いものもあるので、都度その日付を書くことも重要
  • SNSは刹那な情報ツールであり、それを理解した上で使うなら良いが、ナレッジベース的に情報を蓄積して再利用するといったツールではない
  • 今SNSではなくブログに情報を書くことは、検索エンジンなどのエコシステムに回収してもらって読者に選別してもらえるという利点もある

色々な意見があるかと思いますが、ブログを使い、ブログ記事を書いた日付だけを明瞭にするだけで、色々な人の利便性が上がる。それに共感していただければ幸いです。

カフェ「中庭ノ空」で開催されたパン教室に参加してきました

おがた (@xtetsuji) です。

2013年11月17日(日曜日)に「Poem & Gallery Cafe 中庭ノ空」で行われた「86Music Presents!森田さんのパン教室」に参加してきました。パンを作るのはたぶん初めて。

中庭ノ空は以下の場所にあるカフェです。

いきさつ

元々大学時代に上京してから大学院を卒業するまでの6年間は自炊をしていたのですが、自分が作る食事のマズさに辟易として、社会人になってから10年ほど自炊というか一切の料理をしなくなってしまいました。まさにネットの「嫁のメシがマズい」ならぬ「俺のメシがマズい」といった状態。本当に自分の作る料理のマズさは苦行だったし、大した節約にもならなかった気がする。

社会人になってから堂々と外食生活になったのですが「外食は身体に悪い」以前に「プログラマとしての素養を深めるには料理をするべき」という意見を何人もの方から頂き、さて長すぎるブランクの後でどこからとっかかろうかと思っていたところでした。プログラマとしての素養は料理に繋がっているかどうかはともかく、新しいことをしてみようということでとっかかりを探していました。

そんな中、最近よく通っているカフェ「中庭ノ空」でパン教室が開かれるとの話を店主さんから聞いて「あ、それ参加します」と即答で応募したという感じです。料理教室というものは探すのも参加するのも敷居が高いけど、まずは気軽に参加できるカフェでのパン教室で勘を取り戻そうという魂胆でした。

今回のテーマ

今回のパン教室は第2回目だそうです。第1回目は比較的実験的に小規模で行ったそうですが、結構うまくいったこともあって、大々的に募集したとのこと。ちなみに第1回目のテーマはベーグルとのことでした。この風景はお店のブログにも掲載されています

そして今回のテーマはバターロールでした。後述のように至れり尽くせりなのに参加費300円は安い。

当日参加前

当日はエプロン持参でしたが、持っていなかったというか見つからなかったので、江古田駅前まで行って購入。幸い、天気も良くて暖かかったので過ごしやすい。むしろ暑いくらいでした。気持ちの良いパン焼き日和です。

パン教室に参加

会場に11時30分頃到着。開始ちょうど。

店主の五十嵐さんの他、今回のパン教室の発起人である86Music代表の千坂さん、今回のパン教室の講師である森田さんの他、86Music所属のミュージシャンの女性の方々と、私と同じく興味を持って参加した女性2名が集まりました。やはりというか女性率高かった。

既に森田さんらによって会場では準備が進められていました。こんなにもお膳立てしてもらえると、料理の勘を失ってしまった私も本当に助かります。

パン教室開始前の準備の風景

今回のレシピを説明した紙が配られます。本当に手が込んでいる。

バターロールのレシピ

小麦粉、イースト、塩、バターがまだ原型で分けられています。

原材料が分けられた状態

それらを混ぜて、ひたすらこねて平べったくして、バターロールのように巻きます。この過程で、チョコチップやレーズンを練りこんだものも作りました。

原材料をこねて巻きます

みなさんの作業風景はこんな感じ。

皆さんの作業風景

それぞれの作品一つ一つをクッキングシートの上に乗せます。

クッキングシートの上に乗せられた焼く前のバターロール

熱湯を入れた金具の入れ物ごとビニールで先ほどのパンを覆って、風呂くらいの温度で発酵させます。

ビニールシートで覆って発酵させます

温度が下がらないよう、ときどき森田さんが熱湯を継ぎ足します。

発酵温度を保つために熱湯を注ぎ出します

この手法による発酵時間は40分ほど。待ち時間は86Musicの千坂さんらによるボーカル&ギターのライブ。

発酵待ちの間に行われた86Musicさんのライブ風景

発酵途中のパンと楽器のコラボ。

発酵途中のパンとライブ風景

タンバリンとピアニカもありました。ピアニカは結局使いませんでした。

タンバリンとピアニカ

発酵が済んだところで、パンにアーモンドクリームを塗ったりします。焼くパン全てには軽く卵黄を溶いたものを塗ります。

パンを焼く直前に色々と塗ります

焼き上がるのも時間がかかるし、オーブンの容量にも制限があるので、事前に森田さんが作ってきた生地を焼いた物が披露されました。甘い豆が練りこんであるパン。「できたておいしい」って何度も言っていました。

事前に焼いていたパン

私が練ったりしたパンが焼きあがりました。

焼きあがった自分のパン

近影。

焼きあがった自分のパンの近影

他の人達が焼いたパンも、続々と出来上がります。

他の人のパンも続々と焼けてきます

いまどきの人達って感じで、みんな自分のパンの写真撮影会。

各自パンの撮影会

余ったアーモンドクリームを焼いて作ったクッキーも出来ました。それらと共に、焼きたてパンと一緖にできたてのコーヒーをいただきます。「できたておいしい」。

コーヒー、焼きたてパン、焼き立てクッキー

食事しつつ、参加者の間で打ち解けてきた流れで雑談をしつつ、終了時間を迎えました。片付けをして退店。

その他のリンク

その他の関連リンクで見つけたものを列挙しておきます。こちらもご参照くださると雰囲気が分かっていいかもしれません。

カンファレンスや勉強会で撮影される事も多くてそのたびに毎回思っているのですが、自分が写っている写真を見て「もっと痩せて若くならないとダメだなー」と思った次第です。顔出しNGとか特にしていないんですが、料理だけでなく運動も頑張ろうと思った次第です。

以下、森田さんが出版された書籍です。

(一部の写真が横表示になっているかもしれませんが、画像情報の不整合のようなので、近いうちに直します)

個人的飲み会 #xtcup #01 を開いたら人が集まった話

おがた (@xtetsuji) です。

最近、人と話す機会が減少気味で、単なる飲み会でもしたいなと思っていたので、自主的に動いてみることにしました。去る2013年11月15日(金曜日)の夜に、主にエンジニアを対象とした飲み会を開催しました。

単なる飲み会なのに自分自身で名前 #xtcup まで付けて、エンジニアらしく ATND beta に告知ページを作ったりしたところ、自分を含めて7名の方々に参加していただけました。「xtetsujiと飲み会しようぜ」という独善的なサブタイトルをつけたにも関わらずです。嬉しい!まだ人徳あった!

ITエンジニアやプログラマは「名前重要」というほど名前を付けることが自然ですが、今回の #xtcup は、たんに私のハンドルネーム xtetsuji の頭2文字をprefixとして、飲み会のさかずきを表すcupを付けただけです。今回 #01 が非常に楽しいものだったので、是非とも #01 にとどまらず #02 以降も定期的に催していこうと思っています。会場は主に新宿〜渋谷界隈の居酒屋で、特に大きなエンジニア系イベントが無い日に、エンジニアが職場帰りに集まって最近の情勢を気軽に情報交換できる場の一つとして活用していただければ幸いです。情報は定期的に @xtetsuji 等で流しますので、もし興味があれば多くの方と懇親したいです。もちろん、エンジニア以外の方も大歓迎です。

今回は、@__papix__ さんと前々から一緖に飲みたいという話をしていて、ちょうど @__papix__ さんが東京にいるという11月15日を狙って開催したのでした。Hachioji.pmでもお馴染みの面々の他にも、先日のJPA理事変更で新理事に就任された肥後さんもいらっしゃって、昨今のPerl界隈のお話などができたことも良い経験でした。全ては @__papix__ さんのおかげという説もあり。独善的と言われても仕方が無い飲み会に、こんなスゴイ方々が来ていただき、いろんな楽しみや学びを与えていただいて、本当にありがたいです。来てくださった方々にこの場を借りてお礼をいたします。

xtcup #01 の風景

終盤で皆さんが集まっているときに、チャット(Yancha)で雰囲気が知りたいとリクエストがあったので、初めてツイキャスを試してみました。10分少々。こんな雰囲気でした。

#xtcup は定期的に開催していこうと考えています。大体2ヶ月から3ヶ月に一度、ふとした気分で開催するような気がするので、時間が合う方はぜひ参加して懇親しませんか?

GitHubにpushやpullできなくなったときの対処法

おがた (@xtetsuji) です。

今日、ふとGitHubにpushしようと思ったら以下のようなエラーが出てしまってできませんでした。

ogata@languedechat:~/git/@github/xtetsuji/dotfiles$ git push origin master
no matching cipher found: client arcfour256 server aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

なんでだろうと思ってSSH秘密鍵まわりを確認したりしたりしたのですがうまくいかず。

チャット(Yancha)で聞いてみたら「以前そうなったけど、放置してたらいつのまにか治った」という話もあったりして、放置しようか、でもこのままの状態がいつまでも続くのは嫌だなーと思ってさらに調べていたら、以下のようなSSH設定が ~/.ssh/config にあったのを削除(またはコメントアウト)することで回避することができました。

# https://gist.github.com/e05183045b0db0e0c674
Host github.com
	Compression yes
	Ciphers arcfour256

GitHub側でarcfour256を一時的に受け付けなくなったということでしょうか。たしかに上述のGitHub側からのエラーを見ると、暗号化に関係するような感じもします。

この設定を書いておくとGitHubでのSSHを使ったcloneが速くなるという話がウェブ上にあるのですが、こういうトラブルに巻き込まれることもあるようです。検索しても出てこなかった。もしpullやpushができないという状況に遭遇したら、このSSH設定が存在すればオフにして再施行してみると良さそうです、というメモでした。

追記 (2013/11/14 20:15): 「GitHubのSSHゲートウェイはユーザごとにロードバランシングしていて、一部のゲートウェイサーバの変更によって、特定のユーザだけ一時的にこういう症状が出るのではないか」という説もいただきました。確かに私がこの症状に見舞われていた時、特に世間は騒いでいなかったわけで、納得出来る仮説であります。

Postfixのログを行指向に変換するプログラム maillog-hashnize.pl のご紹介

おがた (@xtetsuji) です。

ずいぶん以前に公開したんですが、Postfixのメールログを行指向にする maillog-hashnize.pl というプログラムをご紹介します。

もともと社内で使っていたプログラムだったのですが、数年前の当時、上司等に掛けあってたぶん初めて会社発OSSとして世に出せたプログラムです。公開方法も当時は最善策が思いつかず、個人アカウントでGistに貼りつけて公開という感じ。その際、会社の製品ブログで会社の取り組みとしてこれの紹介をしたのですが、いつの間にかその製品ブログ自体が無くなってしまったので、これを紹介する日本語の文章は無くなってしまいました。

紹介記事も無くなり、私もこのプログラムの存在自体ずっと忘れていたのですが、つい先日、海外の方からこれを使っている旨書かれた英語のメールをいただきました。その方の要求にぴったりだったようです。あまり英語が読めない私にも、賞賛する英単語の数々に恐縮してしまうくらいでした。また「私はPerlプログラマーではなくて自力ではできないものの、こういった機能が欲しいのです」といった内容も書かれており、かつそれが私にとって妥当な機能拡張であると思えたので、それに関して対応する旨返信も行いました。

実際、Postfixのログをどうにかしてくれるプログラムがないか検索してみると、pflogsumm 等の「集計やサマリーを出してくれるプログラム」はあるのですが、Postfixのmaster配下の各デーモンが出力したログの行をキューIDで束ねて一通のメールがどうなったかを一行にしてくれるプログラムというのは珍しい存在でした。今現在探してもなかなか見つからないんじゃないでしょうか。

しかしながら私の業務では、こういう行指向に修正するプログラムの必要性がありました。一通一通のメールがどのような経緯でサーバに入ってきて、どのような最終処理がなされたか、開発者以外の人と詳細を議論するための見やすいデータを出力する必要があったのです。その時に活用されるアプリケーションは大体Excelになります。

以前は、MySQLやPostfixの業界で著名な「とみたまさひろ」さんという方が、この要望に合うRuby製のpflogというツールを公開していて、業務ではずっとこれを主に使っていたのですが、Postfixのバージョンが上がってPostfix2.3以降のログを入力すると謎のエラーが出るという現象に出会いました。原因を調査して納得したんですが何だったかな…。

そんなこんなで、Postfix2.3以降の対応を含めて、かつオリジナルのpflogにあったバークレーDB出力機能などの滅多に使わない機能を削ったPerlプログラム maillog-hashnize.pl を作成しました。pflog同様、キューIDで行指向に一行に束ねてCSVファイルとして出力します。pflogで時々ハマったExcelのデータ誤認対策も色々と入れました

RubyのプログラムをPerlに書きなおしたのはいくつか理由があって

  • 各所でDebianを使っていた都合、システムPerlの存在はRuby以上に身近だった
  • 生粋のPerlの会社なので、各種作業サーバにRubyインタプリタ自体が入っていなかった
  • RubyよりもPerlのほうが行読み込みや正規表現のパースが若干速かった
  • 今後機能拡張をするときRubyの知識が足りない事がネックになるのを心配した

という理由でした。特にRubyが嫌いだったわけでもなく、自分のRubyの勉強の教材になればいいかなとも思ったのですが、その時と将来的な事を考えて、一気にPerlに移植することにしました。社内にいるプログラマーの数が片手で数えられるほど少ないことも、個人的趣味を越えて不必要に社内採用プログラム言語を増やせない理由でした。機能拡張の要望があったときに業務では迅速に対応する必要がありますので。

私が思うに、Rubyが行読み込みや正規表現パースのパフォーマンスでPerlに劣るのは仕方が無いことで、Rubyのオブジェクト生成のコストやPerlの狂ったほどの正規表現チューニングが要因としてあるでしょう。実際にベンチマークを取った結果はほとんど優位な差は無かったのですが、業務では数千万行から数億行のログを処理する必要があったので、軽微な差が及ぼす時間的コストの違いは無視できませんでした。

後輩に業務を引き継いだ後は、会社のリポジトリ内の maillog-hashnize.pl を触ることはなくなりましたが、業務でもときどきこのプログラムが使われているようです。

とりあえずライセンスはArtisticとGPLのデュアルライセンスなので、私のほうでforkして、外部で使ってくださる方向けに機能拡張をしていこうと考えています。基本機能としてpflogとの互換性が保てれば色々と都合が良いので、その方向で拡張をしていきます。良い結果が出たらまたブログでご紹介します。

とりあえず「ザ・インタビューズ」から記事をバックアップする雑なPerlプログラムを書いた

おがた (@xtetsuji) です。

「ザ・インタビューズ」終了するというニュースが先日ありました。

一時、大ブームになったサービスですが、最近はめっきり話を聞かなくなったので「あぁ〜」といった感じ。ウェブの時代の過ぎ去る速度は早いですね。

終了のお知らせには以下のように書かれていました。

平素より、みなさまにご愛顧いただいております「ザ・インタビューズ」でございますが、誠に勝手ながら【2014年1月6日(月)】をもって、終了させていただくこととなりました。

【2014年1月6日(月)】をすぎますと閲覧・投稿、管理ページへのログインも含め、全ての機能がご利用いただけなくなります。

お手数ではございますが、必要な情報はあらかじめお手元に保存していただきますようお願いいたします。

ザ・インタビューズ終了のお知らせ画面

よく分からないんですが「必要な情報はあらかじめお手元に保存していただきますよう」って、手作業でやるんですか?探してもエクスポートツールも無さそうだし、雰囲気的に提供される感じがしなかったし、ペパボにどう問い合わせればいいか分からなかったので、自分用にエクスポートプログラムを書きました。もう面倒だと思って2時間くらいで書いた感じ。

Perlで書かれています。Web::Queryというモジュールを使っています。

あと2ヵ月もしないうちに無くなるサービスだし、GitHubにプロジェクトつくらず、Gistにあげました。

どういう動作をするんですか?

上記Gistのページからti-export.plをダウンロードして、以下のように実行します。

perl ti-export.pl ユーザ名

そうすると、指定した「ユーザ名」のユーザの全投稿を現在のディレクトリにダウンロードします。UTF-8で「投稿ID.txt」というテキストファイルを作って、添付画像がある場合には「投稿ID.jpg」という画像ファイルを作成します(jpg以外の拡張子にも対応しています)。

どんな形式でアウトプットすればいいか分からなかったので、とりあえずメールっぽい形式で出しておこうといった感じです。

Perlのセットアップはどうすればいいんですか?

perlbrew か plenv を操作できる方は cpanm で Web::Query モジュールをセットアップすることで使えるようになります。

ビルドに必要なツールさえ整っていれば、perlberw や plenv のセットアップは簡単です。検索してみてください。

Perlとかプログラムとかわからないんですがエクスポートしたいです

親切なエクスポートツールが他にあればいいんですが、無ければ私の方で代行しますので @xtetsuji にmentionくださるなど、お気軽にご連絡ください。要望が多ければウェブで操作可能なツールにしようと思います。

MT形式やWXR形式でアウトプットしたほうがいいんじゃないですか?

ファイル形式についてよく知らないので、そういう要望があればアドバイスくださると嬉しいです。

Macには2つの「クリップボード」がある

おがた (@xtetsuji) です。

「Mac OS X には2つのクリップボードがあります」と言われても、何のことか分からない人が多いかもしれません。

Macでの「クリップボード」の正式名称は「ペーストボード」ですが、ここでは「クリップボード」と呼ぶことにします。

通常は

  • Cmd-x で選択範囲をカット
  • Cmd-c で選択範囲をコピー
  • Cmd-v でペースト

なのは良く知られていることだと思います。Windowsでも似たようなキーバインドですよね。Cmd-x や Cmd-c で選択範囲をクリップボードに入れることができます。

新しい(Cocoaフレームワーク)で開発されたソフトウェアだと、Emacs的なキーバインドが使えます、具体的には

  • Ctrl-nでカーソル下移動
  • Ctrl-pでカーソル上移動
  • Ctrl-fでカーソル右移動
  • Ctrl-bでカーソル左移動
  • Ctrl-aでカーソルを行頭に移動
  • Ctrl-eでカーソルを行末に移動

などです。実際にテキスト入力欄でやってみるといいかもしれません。例えばChromeのtextareaであったり、Evernoteであったり。

この「Emacs的キーバインド」には、以下のようなEmacsにあるようなキーバインドもあります。

  • Ctrl-k で、カーソルがある場所から行末までを消す (キル)
  • Ctrl-y で、上記で直前にキルした文字列をカーソル以降に貼り付ける (ヤンク)

キルされた文字列は、ヤンクされるために一時的な記憶領域に格納されるわけですが、それはクリップボードの領域ではありません。なのでクリップボードにコピーしたデータとは排他です。またそれだけでなく、キルした文字列はそれぞれのテキスト入力エリアで別々の管理がなされます。つまり、Chromeのテキストエリアで Ctrl-k してキルしたデータを Evernote で Ctrl-y してヤンクすることはできないということです。ここはクリップボードとは違う挙動ですね。

キルの動作は癖がありますが、ヤンクを想定しなくても、カーソルから行末を消したいためだけにキルが使えると覚えておくだけでも便利でしょう。

実際に説明すると難しいですが、Evernoteなどの適当なCocoa時代の新しめのテキストエディタなどで上述の Ctrl- のキーバインドを実際に試してみるとよくわかると思います。MacではWindowsと違いCmdを使ったキーバインドが多いですが、Ctrlを使った上記のような操作を覚えておくと便利です。

キルやヤンクといった動作がアプリケーション内でMacのクリップボードと連携しているCocoa EmacsやCarbon Emacsというアプリケーションではまた別の動作となります。また、Macの「ペーストボード」のコマンドラインからの利用(pbpaste/pbcopy)や、Perlモジュールからの利用などのプログラマブルな利用については、また別のブログ記事で書きたいと思います。

Gistをgit cloneするコマンドライン情報を取得するブックマークレットを作った

いつのまにかGistの画面から git clone する情報が無くなっていたので、それを復活させるブックマークレット(またはGreasemonkey)を作りました。

そんなに頻繁に使うものではないので、Greasemonkeyではなくブックマークレットとしてブックマークに登録しておくくらいで十分だと思います。

参考情報ですが、以前Gist を git clone した時の私の手元の情報と、あとウェブで検索して出てきたいくつかの情報をいただきました。

こんな感じのreadonlyのテキストボックスが出るので、これをコピーしてターミナルにコピーしてEnterでOK!

Gistにgit cloneのための情報を表示

他にもHatena::Letには、いくつかブックマークレットを登録しています。もしかしたら便利ブックマークレットがあるかもしれませんので、お時間あれば見てみてくださると嬉しいです。

中野のスターバックスで「ちゃんみおスペシャル」を注文してきた

おがた (@xtetsuji) です。

いつかは注文してみたいとおもっていた「ちゃんみおスペシャル」。中野のスターバックス「Starbucks Coffee 中野通り店で注文してきました。詳しくは「ちゃんみおスペシャル」で検索すれば出てくると思います。特にTogetterの「ちゃんみおスペシャル」タグがまとまっています。

なにせメニューが呪文なので、注文はiPhoneでピクシブ百科事典の記事を店員さんに見せて「これください」って言いました。店員さん、戸惑ってた。実際の商品を出すときに店員さん忠実に言おうとして噛み噛みだったので「言わなくても大丈夫ですよ」って言ったくらい。アキバのスタバだと「ちゃんみお」で通るらしいですが、さすがに中野だとそういうわけには行かなかった。でもトッピングは全てできたので、めでたく中野でちゃんみおスペシャルを飲むことができました。

ちゃんみおスペシャル合計660円

ピクシブ百科事典の通り、本当に660円でした。

ちゃんみおスペシャルの写真

これが注文して出てきた「ちゃんみおスペシャル」だ!

ちゃんみおスペシャルを注文したレシート

レシートはこんな感じ。

飲んだ感想ですが、普通においしい。だけど飲み終わる頃には甘さにやられて水が飲みたくなってくる。そんな感じの飲み物でした。

 

元ネタは漫画「日常」の第4巻にあります。興味あればぜひ読んでみてください。アニメでも何度か放送された作品ですが、原作も1巻から最新刊まで、平凡を装ったぶっ飛んだ漫画です。


私が考える退職エントリのありかた

最近よく、退職エントリが良い悪いといった記事をよくネットで見かけるので、私なりの考えも書いてみようと思いました。

一点注意ですが、これは私の主観的な考えです。客観的な一般論として押し付けるものではないので、その点ご注意ください。

時々ネットで上がる議論の一つに「技術者がよく書く退職エントリは是か非か」というものがあります。色々な意見はあると思うのですが、総合的に考えてみると「強制はしないけど、書きたい人はどんどん書いたほうがいいんじゃないか」というのが私の今の考えです。その考えの詳細は以下の長文を読んでみてください。

そもそも転職の理由なんて一つなんかじゃない、本当に大量の理由が積み重なったところに、とある何かのキッカケが降りかかってきてふと腰をあげる、そういうものだと思います。もちろん「今逃げないとヤラレル」といった切迫したブラックな状況に置かれている事も考えられますが、それは別として。

私は転職理由にポジティブもネガティブも無いと考えます。というかポジティブとネガティブは互いに光と影の存在で、一つの理由はどちらにも解釈できる。例えば「次の会社で新たなチャレンジをしたい」と「今の会社では新たなチャレンジができない」、「次の会社で給料アップしたい」と「今の会社では給料は頭打ち」、「技術コミュニティに魅力を持って…」と「今の会社では技術コミュニティとの接点がない」…などなど。これらは同じことを言っているようなものでも、人にとって片方を書いたらもう片方を想像するような人がいて、とことんネガティブに捉える人は「退職エントリなんて書くものじゃない。前の会社に泥を塗るべきじゃない」といい、業界のポジティブなエネルギーを読んで活力にしたい人は「どんどん退職エントリを書くべきだ」という。私がそれらに対する議論を読んでいて思うのは、ポジティブに読まないと誰もが損だということ。せっかくの文章、ポジティブな側面を引き出して良い気分になりたいではありませんか。

転職理由には病気であるとか介護であるとか年齢であるとかUターンを求められたりとか、純粋な外的要因もあります。それらについては、その話題の詳細を除けば、退職・転職理由としてポジティブでもネガティブでもない単なる偶発的な理由にしかすぎないでしょう。そういうものも日々積み重なっていったり、ある日突然背後から迫ってきたりするもの、それが人生なのだと思います。

もっとも、ウェブ業界は今も人材流動も激しく、かつ成熟してきている側面もあって、転職という手段でも使わないとなかなか昇給したり環境を刷新したりできないという側面もあると聞きます。綺麗事なんて言う気はないけど、お金が無いと人間は生きていけないわけで、そういった問題は前の会社が悪いとかそういうわけではなく、転職をしないと抜本的に解決できない問題があるという業界の側面も、特のウェブ開発業界以外の人には理解して欲しい部分ではあります。特にそれが下っ端であれば「会社を変える」なんて事は会社の大小関係なく無理に近い。そういう意味でも「前の会社に泥を塗る」わけではなく、業界全体への提言という意味合いもあるんじゃないかなっていうのが私の意見。むしろ会社が持つ開発情報の流動性などからか「IT業界の会社は人が固定化している会社こそヤバい」という意見すら聞くくらいです。

ある側面から見れば、退職エントリとか転職エントリなんて、ポジティブでもネガティブでもない、顔の広いエンジニアの同報通信的意味合いしかない、全く大したことじゃないと思います。退職や転職に至った動機といった部分はオマケみたいなもの。少なくないエンジニアは外部での勉強やブログ等でのアウトプットを常にしているからそうなだけで、他の職種でも勉強会やコミュニティに属してアウトプットを常にしている人は、同報通信的意味合いで退職エントリを書くのは自然ではないかと思えます。セルフブランディング的意味合いで退職・転職エントリが語られる事もありますが、退職や転職の事実を書くことが、セルフブランディングになるのかは私にはちょっとよく分かりません。注目される事はわかりますし、目立つという意味では成功しているとは思いますが…。

当然のことながら世界は狭いし、去りゆく会社をことさら悪く書くのは当然良くないことでしょう。また同じ仕事を共にする機会がある可能性だってある。要は単に相性が悪かったのです。会社も人も日々変わります。しかも人と人といった関係性とは若干違って、人対組織というものは大体は互いと互いが関係ない状態で。互いの変化によって、相性の良い時期もあれば相性が悪くなる時期もある。しかもそういった相互関係を調整することは難しい。そういう事を経て、矩形波のように相性の良い時期悪い時期を経る間に、色々なタイミングで転職を考えるかどうかは人それぞれなのだと思います。ある時点で会社との相性が良い社員もいれば悪い社員もいる。仕事内容も待遇もまちまちなのですし、違う価値観を持つ違う人間なのですから、同じ会社の社員でも誰がどういう決断をするかというのは違ってくるのは当然でしょう。

退職・転職エントリ賛成派の中には「前の会社での犠牲者を増やさないために、書くべきことは書きましょう」といった穏健ではないことを言う人もいますが、残る人は何らかの積極的または消極的理由を持って残っているわけで、その人の「去る動機」というのは極めて主観的なものなんだと思います。また、退職・転職エントリを読む側も、そういった「退職者」の書いた文章が主観的なものであることを織り込んで読む必要がありますが、当然ながら万人がそういうことができずに扇動されたりするわけで、退職・転職エントリの扱いの微妙さが取り沙汰されることの一端となっているのでしょう。

とはいえ、多くの人が退職・転職エントリがもたらす効用を有益な方向に活かすようにして、退職・転職エントリはもっと出てきて欲しいというのが個人的な要望です。少なくとも私はそのエントリをポジティブな側面でしか読まないことでしょう。退職エントリで語られた会社に入社する人も在職している人もそれに臆さず、また残る人もそこに書かれた「その人が実現できなかった想い」という、愚痴や不満ではない「問題提起」をより良い方向に受け止めて、その会社を良くしていくという好循環が回れば、もっとIT業界全体が良くなっていくのではないか。私はそう信じています。

Foursquareでスーパーユーザ・レベル1になりました

Foursquare 大好き、ロケーションベースサービス大好き、おがたです。

  • 2014年4月16日追記: 4月16日は4sqDayです。東京でもイベントが行われます。興味のある方は参加してみませんか?See: Foursquareの本質とは何なのか

数年前から何度かチャレンジしていたのですが、先月2013年10月にFoursquareのスーパーユーザ・レベル1(以下SU1)になることができました。

スーパーユーザ(SU)とは

Foursquareには最近のゲーミフィケーションサービスではよくある「バッジ」というものがあって、初めて比較的すぐ「スーパーユーザ」というバッジが取得できますが、それとは全くの別物です。

スーパーユーザ(SU)とは、Foursquareの情報をレベルに応じて編集することができる、ある種の特権ユーザの事を言います。

通常のSUではないFoursquareユーザは、自分が作ったべニューのみ住所等のべニュー情報を編集することができますが、SUは自分が作ったものではないべニュー情報もレベルに応じて編集することができます。もちろん、現在(2013年11月現在)「修正提案」というインターフェースもあり、SUではないFoursquareユーザも間違ったべニュー情報への修正提案を投稿することができますが、これは即時反映されるものではなく、SUが妥当かどうかの検閲を入れて受理された後の反映となり、即時反映ではありません(そのためのスーパーユーザツールがあります)。

Wikipediaによれば、スーパーユーザには3種類のレベルがあり、以下のような種類分けがあります。

  • スーパーユーザ・レベル1はベニュー情報(所在地、交差道路、Twitter名)の編集、「閉鎖」印を付けること、重複したベニューについてfoursquareに知らせることができる。
  • スーパーユーザ・レベル2はベニュー情報の編集と重複したベニュー情報を統合することができるだけでなく、任意のベニューのためにベニュー種類を追加できる。
  • スーパーユーザ・レベル3はベニューの別名を作成することや偽物/スパムのベニュー情報を削除する能力が加わる。

スーパーユーザ(SU)になるにはどうすればいいの?

FoursquareユーザがSUになるには、Become a Foursquare Superuser ページに行って、なぜSUになりたいかという意気込みを書き、所定のテストを受けて合格する必要があります。そのために熟知しておく規約であるとかハウスルールの類の文章はそこからたどることができます。

Become a Foursquare Superuser

テストのために熟読が必要な文章やテスト自体は全て英語で行われます(2013年10月現在)。私は英語が苦手で、ハウスルールの理解やテスト項目の読解に相当苦労しました。

数年前に一度SUテストを受けたときは、テスト段階から間違いを指摘されたりして、相当(数ヶ月?)待ってから不合格であった旨メールが来ました。

それからハウスルールなどを都度読んで理解するようにして、ふと思い立って2013年10月に再度テストを受けたら、どうやら一次審査は通った模様。

ここから連絡が無かったのでもう一度 Become a Foursquare Superuser ページに行ってみたら、SUにふさわしいかべニューの編集を何度も繰り返すページに遷移され、ひたすら100件ほどのべニュー情報の修正を行いました。

SU1への最終修行

そこでの修正方針が良いと判断されたようで、後日晴れてSU1になることができました。

4sqのバッジとSU1の紋章

あまりFoursquareスーパーユーザへの道のりを解説した記事が無かったので、今回その過程を書いてみようと思った次第です。

当然ながら注意点として、SUは既存のユーザをSUにするためにテスト内容などを教えてはいけないとされます。また道は自分で切り開くものとして、そのための手引きすらしてはならないとも言う人がいます。ただ、SUはSUになるべきFoursquareユーザの推薦はできるようで、その推薦によって多少SUへの道が変わってくるのかもしれません。なので、ここではハウスルールの詳細やテスト内容については触れていません。

また、SUになるためのテストは、ある一定以上Foursquareを使っているユーザしか受けられないという話もあります。それの真偽や、ある一定以上のしきい値といったものは分かりません。

なぜスーパーユーザになりたかったのか

私がなぜFoursquareスーパーユーザになりたかったのか。それは私が大好きなFoursquareという世界を良くしたいという想いがあったからです。

Foursquareはゲーミフィケーションとして楽しむものとされていますが、最近ではライフログとして活用するケースが増えています。またあらゆる場所を「べニュー」という概念で包括的に扱う世界的サービスはほとんどなく、あらゆる場所のあらゆる情報が集積される場所としてのFoursquareの重要性は日に日に増しています。

位置情報を扱う非常に多くのアプリケーションは、最近ではFoursquareの情報を引用するようになっている事に気づいている人も多いでしょう。また、あのAppleでさえ自社のマップを良くするためにFoursquareと提携して作業をしているという話さえあります。Foursquareの情報は日に日に重要性を増しています。そういう一企業のサービスでありながら公共性すら感じられ毎日多くの人に使ってもらえる情報の編集の一端を担えるというのは非常にやりがいのあるものです。

スーパーユーザであることの自覚と注意点

これはテストに臨む前に読むべきハウスルールなどのFoursquareが提供している文章にも繰り返し書かれているものですが、スーパーユーザという権限を持つことは、それなりの責任も持たなければならないとされています。

私は一部の「べニュー内べニュー」というものについて否定的な考えを持っています。例えば「上野駅」というべニューはいいとして「上野駅1番ホーム」というべニュー内べニューには否定的といった感じ。ただハウスルールではこれはOKとされており、スーパーユーザはこれを拒否してはならないとされています。

スーパーユーザになった今、決して私情を優先すること無く、スーパーユーザの自覚としてFoursquareのガイドラインに適合した編集をしていく所存です。

また、ハウスルールには厳格には適合しない、日本独自というか日本のFoursquare SU独自の暗黙のポリシーもあるようで、そういう部分についても柔軟に対応していきたいと思います。

Foursquare以外のロケーションベースサービス

Foursquare好きの私ですが、今までそれ以外のロケーションベースサービスも色々試してみましたが、Foursquareとロケタッチの2つに集約しつつあります。

ロケタッチは日本国内としては非常に優秀なサービスであり、livedoorグルメなどと連携した非常に速い飲食店反映などに定評があります。最近であればLINEとの連携も魅力的です。

ただ、場所の修正などは運営元への提案以外の方法がなく、その点の修正が遅れる点、また海外での場所の登録が少ない点がFoursquareに一歩遅れている部分だと思いますが、それでも、Foursquareブームの後に日本で雨後の筍のように現れたロケーションベースサービスの中では、最も優秀なものと言ってもいいでしょう。比較的最近の概念であるO2Oを目論んだ後発の国産ロケーションベースサービスに比べても、うまくいっている事例ではないでしょうか。

そういう意味ではFoursquareのスーパーユーザ制度は、Foursquare社だけでは手に負えない程の全世界のべニューをある一定の品質を保ちつつ良くしていく仕組みとして、うまいなぁと感じることしきりです。

その点のロケーションベースサービスの比較であったり、Foursquareの使いこなし術といったものについては、別のブログ記事で書いていきたいと思います。