入院中、そして伝えたいこと少し

おがた (@xtetsuji) です。

ひょんなことから、2013年12月11日から一週間以上の長期入院をすることになってしまいました。しかも何の心の準備もないまま救急車で搬送されて緊急入院という形で。

緊急入院までのいきさつ

Twitterでも同報通信的意味合いでツイートしていたのですが、いきさつを書いておきます。

  • 2013年12月6日(金曜日)から腹の調子が悪くなる
  • 土日は病院休みだし、すぐ直るかなと思って放置していた
  • 月火と勉強会などで動いていたものの、腹の調子は良くならず
  • 水曜日に静岡の三島に行く予定だったが、その前に内科に行って診てもらって薬でももらおうと近所の病院に行く
  • 近所の病院で即座に胃カメラ(口から)ということになった
  • 胃からすごい出血しているのが分かって、病院の先生から「今すぐ緊急入院」と言われる。三島行きは当然キャンセルに
  • 救急車が到着。三島に行く装備で、今いる入院設備が整った病院に搬送される。
  • また胃カメラ(鼻から)。連続胃カメラつらい
  • 病変を確認。胃潰瘍という診断
  • 床上安静ということになって、ベッドから出られない状況に

めまぐるしくて、自分でも状況がよくわかりませんでした。深刻なのか楽観なのかとか。

入院先

少なくとも2013年12月18日までは入院しています。お見舞い歓迎しています。お見舞いの際は何らかのメッセージ手段(Twitter、Facebook、LINE、メールなど)で事前にご一報いただけると幸いです。

  • 2013年12月20日 追記: クリスマスあたりまでは入院しているっぽいです。身軽にはなったのですが、生体検査と食事療法に時間がかかるとのこと。
  • 2013年12月20日 追記: 順調に行けば12月24日の昼に退院できることになりました。
  • 2013年12月24日 追記: 12月24日に退院しました。

ソーシャルストリームに状況を流したこと

今回は状況をTwitterにアップしていきました。家族親戚が東京におらず単身なので、まずは身動きがとれるうちに同報通信をしようというとっさの判断でした。

あまり私は「承認欲求」と言われるものの類が強い人ではなくて、ブログ記事も一人に共感してもらえれば後は反感買わなければいいかなーといった感じの人です。なので、今回のソーシャルストリームに状況を流したことは、同情を得たいとか目立ちたいというよりも、単に自由のきくうちに同報通信をしたいという考えでしかありませんでした。

TLを見ていると、心配の声を多く頂いて非常にありがたかったのですが、中には暗に「こんな情報でソーシャルストリームを埋められても反応に困る」といった内容もあったような気がします。そこは非常に申し訳ない部分もありますが、心理的物理的距離感というのもありますし「あー @xtetsuji なんか大変そうだなー」くらいに受け流してもらっても全然問題無いですよ。私だってあまり面識のない人が同じ状況だった場合、どういう対応していいか分からないと思います。

これは見なかった意見ですが、ソーシャルストリームに状況を流すことで起こるリスクというのも少なからずあるとは思いました。私は心配性なので、出せばいくらでも出てきそう。だけど今回はリスクよりもメリットのほうが大きいととっさに判断して状況を随時流すことにしました

単身者はホットラインの類を事前に準備確認しておきたい

今回は突然の入院で、上述の通り、正直自分でも最初は状況がよくわからなかったです。胃カメラ本当大変といった程度。そして搬送されて入院して、だいぶ状況がわかるようになってきました。

入院は以前もしたことがありますが「一泊二日」といった軽いものでした。しかし今回は少なくとも一週間、しかも緊急入院。何の準備もしていませんでした。三島行きの装備をしていたので、コンピュータ機器などの連絡手段を持っていたのが唯一幸いでした。

今回痛感したのは、こういう緊急の時に連絡を取って助けてもらえる人を日頃から作っておくべきだなということでした。もちろん、身近に家族親戚やそれに類する人がいればその人に頼れば良いでしょうし、例えば「妻に頼ればいい」と内心思っている人はそれでいいかなと思います。羨ましい。ただ、私のように単身一人暮らしで地元から離れて生活しているという人は少なくないと思います。誰もが突然事故や病気にあうリスクを持っています。万が一の時に備えることは重要だなと痛感しました。

今回はTwitterで流した同報通信を見てくださった人の中から、最も病院に近いところに住んでいる友人をまず頼って身の回りの生活用品などを買ってきてもらいました。多くの人に声をかけてもらえる事は嬉しいのですが、みなさん暇じゃないし、誰にお願いするか、お願いする決め手に欠けて悩む部分もありました。親友や無二の友が「今すぐ駆けつけたい!」と言われても、それが帯広や札幌とかだと、さすがに気軽に「東京まで来て下さい」とは言えませんからね。ともかく、様々な方に心配していただいたことは本当にありがたいです。

特に2011年から積極的に参加させていただいているPerlなどの各所のエンジニアコミュニティの方々からは本当に多くの心配の声をいただいて、感謝してもしきれません。直接ソーシャルストリームでつながっていないはずの方からも声を掛けてくださったり、エンジニアコミュニティの人達の横のつながりを感じました。私も逆の立場になったときには、優秀なエンジニアの方々を助けられるようになりたいです。本当にありがとうございます。

その他

退院したら、入院中のあれこれとか、胃潰瘍の人に参考になる情報などをブログで書こうと思います。闘病記というほどではありませんが、せっかくの貴重な体験、記録して後の人の参考なれば幸いです。

Foursquareのプライベートチェックイン機能が削除された

おがた (@xtetsuji) です。

2013年12月6日の Foursquare (4sq) iOS アプリのアップデートで、プライベートチェックイン機能が削除されてしまったようです。新しいアプリでプライベートチェックインに関わるインターフェイスが見つからなかったので、@4sqSupport で聞いてみたら、無くなった旨、返答をもらいました。

その代わりなのか、近くのベストプレイスを見つけやすいインターフェースにしたというFoursquare社からのアナウンスがありました。確かにアプリ全体としては、UIも洗練されて、体感速度も向上して、情報を探すサービスであるという位置付けを更に明確にしつつあります。ゲーミフィケーションはオマケでしかないことは4sqを続けると分かるのですが、いよいよ全世界的にO2Oマーケティングをしていくという布石なのかもしれません。

プライベートチェックイン機能は、バッジなどのゲーミフィケーション要素のパラメータにはなりませんが、ライフログとしての4sqというツールとしての存在価値がありました。ただ、今回の変更となってしまい、個人的には少々残念であります。

プライベートチェックイン機能が削除された以外は、アプリ全般的に改善と言える修正を大胆に行う部分、日本のサービスとは違ってすごいなと思わされます。特に4sqは変化のスピードが速く、世界最大のロケーションベースサービスとして事業としても本気なんだなと思わされます。

ともかく、今後の4sqの動向にも要注目していきたいです。

2013/12/11 追記About Foursquare でも今件取り上げられているようです。

2014/03/10 追記: QuickInというiPhoneアプリでプライベートチェックインができるという話もありました。

QuickIn
カテゴリ: ソーシャルネットワーキング
現在の価格: 無料

進化するDeliciousブックマーク2013年版

おがた (@xtetsuji) です。これを書いている今はちょうど2013年の師走です。

2011年4月に米Yahoo!からAVOSに買収されたソーシャルブックマークサイト「Delicious」ですが、2年近く時を経て、だいぶ使い勝手の良いウェブサービスに仕上がっています。

手元のブックマークが溢れていて、公開しても特に問題無いんだけど、はてなのはてブもちょっと…という人にとって、使い勝手の良いブックマークサービスがないか検討している人の有力な候補になりそうな気がしています。

  • iPhone/Androidアプリ (これは現状進化途中といえそうですが日々更新されています)
  • 使い勝手の良いブックマークレット (XHR2の技術を使って素早いブックマークができます)
  • Google Chrome 拡張機能 (ブックマークレットの進化系で、ショートカットキーを割り当てたりしてさらに素早くブックマークができます)
  • Twitter/Facebook共有 (米Yahoo!時代から消えたり現れていたりした機能)
  • 自らのTwitterのタイムラインに流れたURLを閲覧する機能

などなど。素朴ではありますが、よく使う機能がより素早くできるよう、日々ブラッシュアップが重ねられている印象があります。

はてブではなくてDeliciousな理由

日本だと「はてブ」の略称で有名なはてな社の「はてなブックマーク」が多くの人に使われています。ただ、はてブの「ブコメ」で自分のウェブサイトやTwitterのツイートに悪口を書かれていた嫌な経験を持っている人も一定数いて、はてな村と呼ばれるはてなやはてブの世界観を嫌う人もいます。

また、Deliciousは少なくとも日本語圏ではほどよく静かなブックマークサイトでもあり、だからこそ情報が際立って見えるという特性もあります。はてブ同様「何番目のブックマーク」であるとか「ブックマーク総数」というものが見えますが、そういう情報ははてブより母数や数量は少ないものの、はてブではなくDeliciousという「尖ったもの」を使う人がブックマークしたものとして、より指標として高いと考えられる側面もあります。

ソーシャルブックマーク黎明期から現在まで

日本でもはてブやDeliciousといったサービスが台頭したソーシャルブックマーク黎明期、日本や海外では沢山のソーシャルブックマークサービスが登場しましたが、そのようなサービスのほとんどが既にサービス終了したか低空飛行を続け事実上埋もれてしまっています。後者のようなサービスは今後の継続性が疑わしく、これから使うものでもないでしょう。

Deliciousは英語のインターフェースではありますが、簡潔な機能しかなく使う上で大した問題ではない事と、日本語のサイトをブックマークすることに問題もないので、心配するに足ることではないでしょう。

どんなサービスがあるのか・あったのか、Wikipediaのカテゴリが参考になります。

Delicious今昔物語

Wikipediaの解説が詳しいですが、もともとカナダの企業が作っていたサービスを米Yahoo!が買収し、その後紆余曲折を経てAVOSという会社が2011年に米Yahoo!から買収して今に至ります。

米Yahoo!は「買収した企業のサービスをことごとく腐らせる」企業として有名ではあるのですが、米Yahoo!時代のDeliciousは本当に力が入らず、他のソーシャルブックマークサイトに後塵を拝すだけでなく、競合と共にソーシャルブックマークという市場すら無くしてしまう体たらくでした。日本の「はてブ」は局所的なもので、欧米では公開するブックマークとしてのソーシャルブックマークサイトよりも、Diggのようなソーシャルニュースサイトであるとか情報を自動選別してくれるキュレーションサイトのほうが流行していきました。逆に「はてブ」自身がソーシャルニュースサイトの一極を日本で確立している部分もあります。この流れは、日本でも似たようなものがあるでしょう。

米Yahoo!からAVOSに移ってから、Twitterアカウント @Delicious が開設されて定期的に機能追加の情報が流れたり、サポート用Twitterアカウント @Delicious_Help に英語で問い合わせをするとすぐに応答が返ってきたりとサポート面が非常に充実しました。また、iOS/Androidアプリも公開され、より多くの利用者を取り込もうという姿勢も見られます(まだアプリは荒削りな印象を受けますが、日々改善していっています)。さらに、数回のウェブサイトのリニューアルで、ウェブサービスとしてAjaxをフル活用した使いやすいインターフェースに進化しており、ブックマークとしての「あとで参照する」という事も容易にできるようになっています。ソーシャルブックマークとはいえ、非公開ブックマークも登録することができ、個人的なブックマークとして使うこともできます。野心的な活動の数々は、今後のサービス継続性にも安心感が持てます。

とかくブラウザのブックマークは何千何万のオーダーになると管理が非常に煩雑になり、ブラウザ自体の動作を重くする原因にもなるので、そういう意味でも公開しても問題無い多くのブックマークをソーシャルブックマークサービスに預けるというやり方は、良い方法の一つではないかと思います。

しかしまぁ本当、私やあなたの愛するサービスが米Yahoo!に買収されないことを祈るばかりです。

Deliciousの作法

これからDeliciousを使う人も、今までDeliciousを使う人も、とりあえずタグの概念を覚えておくことから始めるとよい思います。

最近のDeliciousでは「タグガイドライン」を公開していて、多くの人が共通で使えるタグについて提案しています。

Deliciousタグガイドライン

  • 小文字のほうが好まれる。WebDevよりwebdevのように。
  • スペースはタグとして許可された文字だけど推奨されない。Machine Learning より machine-learning のほうがよい
  • ありうる範囲にあなたのタグとコミュニティのタグは再利用される
  • リンクの内容に関係ないタグは ! で始めましょう: !unread, !saveforlater のように

これは英語のガイドラインではありますが、タグ選択時の補完が便利だったりするので、日本語でしか表現できないタグ以外はこれに従っておくとよいでしょう。特に私も結構使っている「あとで読む」「何度も読みたい」系はリンクの内容に関係ないものであって「!あとで読む」「!何度も読みたい」のほうがいいのかもしれません。

その他にも、タグバンドルというタグを整理する上位概念もありますが、それはタグを使っていって使いどころが出てきたら使うくらいでよいでしょう。また、ブックマークした日付での参照も現在可能になっています。その他にもこれから機能強化によって追加される機能も期待できます。

最初は参考になるDeliciousユーザのページを見て、タグの雰囲気をつかむのがよいと思います。例えば私のDeliciousブックマークページはどうでしょうか。

Deliciousのエコシステム

Deliciousブックマークした結果を他のサイトにフィードしたい、他のタイムラインに流れたURLを自動的にDeliciousブックマークしたいといった場合はIFTTT(イフトと読む)というサービスが有効です。

IFTTTのDeliciousチャンネルの概要

 

IFTTTを使うと、IFTTTで使える数々のサービスをフックにしてDeliciousブックマークができたり、Deliciousブックマークをフックとして他のサービスへ連携をしたりできます。

IFTTTのポピュラーなDeliciousレシピ

上記画像はDeliciousブックマークを使ったポピュラーなIFTTTレシピとして出てきたものです。YouTubeのお気に入りを自動的にDeliciousブックマークしたり、Deliciousブックマークを「あとで読む」系サービスに転送したり、Googleドライブにバックアップを取ったり…等々。

Delicious単体でもTwitterやFacebookへのブックマーク時の投稿ができますが、IFTTTを使えば特定のタグがついたものを自動で投稿してくれたり、Twitterアカウントが違っていたり、Facebookページのほうであったり、色々融通が利きます(一つのレシピに登録できるアカウントが一つなのがIFTTTの融通が利かないところでしょうか)。

IFTTTは無料で利用できる海外のサービスでインターフェースは英語ですが、Delicious同様、それほど使用に障壁のあるほどの英語ではないと思います。また、IFTTTが対応するサービスである「チャンネル」は日々増加しており、こういったところが海外の事実上の標準のブックマークサービスであるDeliciousの強みと言えましょう。

IFTTTにはてブが加わる可能性は少ないものの、はてブが出力するRSSフィードを使ったIFTTT連携もあるようで、はてブとIFTTTを組み合わせる手段がないわけではありませんが、「IFTTT→はてブ」方向の連携は依然として難しいでしょう。

私の利用方法

まず、Deliciousブックマークした結果をTwitterとFacebookにフィードしています。ただ、私は相当気軽にDeliciousブックマークするので、それでTLとウォールを埋め尽くすと相当迷惑になるのが分かっているのと、流すブックマークと流さないブックマークを選別するのが面倒なので、Twitterではメイン @xtetsuji とは別のアカウント @xtetsuji_ に流すようにしています(IFTTTのTwitterのレシピは @xtetsuji_ を設定しています)。また、Facebookはウォールではなく専用の別ページに流すようにしています。見たい人だけ見られるという感じ。

IFTTT - Delicious to Twitter

 

IFTTT - Delicious to Facebook Page

「あとで読む」は、大抵あとで読まない法則があるのですが、とりあえず「あとで読む」タグがあるDeliciousブックマークをPocket等に入れるようにしています。全然見ていません。

IFTTT - Delicious to Pocket

あとはDeliciousブックマークの内容をGoogleドライブにバックアップするレシピもあります。心配性なだけかもしれませんが、Deliciousが突然無くなった時のバックアップ目的です。Delicious自体にもブックマークのエクスポート機能はあります。

IFTTT - Delicious to Gogole Drive

まとめ

海外のサービスですがDeliciousはAVOSに買収されてから非常に元気になってきています。以前の米Yahoo!時代に腐りかけていたDeliciousの印象が大きい人で、最近になってソーシャルブックマークをやってみようという方は、一度Deliciousを触ってみると、その軽快さに驚くかもしれません。まだ大胆な機能拡張で荒削りな部分もありますが、今後に期待が持てるという裏返しでもありましょう。

サポートが非常に親切です。英語で質問する必要がありますが、本当にカジュアルに質問ができて、結構早く回答が返ってきます。広告も無いしどういう収益モデルなのか全くわからない無料サービスという不安な部分もありますが、AVOSすごいと思わせる部分であります。

IFTTTとの連携は強力で、IFTTTの存在そのものがDeliciousのエコシステムとも言えましょう。日本発のサービスは無いに等しいですが、IFTTTはその他の連携も色々あって、海外のサービスを多く使っている人には嬉しいサービスとも言えます。

そんなわけで、Deliciousにはソーシャル機能もありますので、ぜひとも私とつながりませんか。https://delicious.com/ogata でお待ちしています。

Delicious Official App
カテゴリ: 仕事効率化
現在の価格: 無料
  • 2014/04/08 追記: 広告はあります。逆にちょっと安心しました。ただ、iPhoneのブラウザで見たときにdevice-widthを越えた横幅のバナーが出る件は鬱陶しいので @Delicious_Help に問い合わせようかと思っています

WordPressで新規投稿ができなくなった原因がプラグインだった

おがた (@xtetsuji) です。

このブログ、2013年の夏から自分で契約したVPSにWordPressを入れて運用しているのですが、2013年の11月頃から新規投稿ができなくなってしまいました。新規投稿URL wp-admin/post-new.php にアクセスすると画面真っ白。個々のブログの画面表示も重くなった感じ。複数の投稿をDBから引っ張ってくるだろうトップページもまた画面真っ白という状況。

何が悪いのか原因を調査してもよく分からず。閲覧は重いながらもできたので、しばらく放置していました。

最近コメントスパム爆撃を受けた

結果的にこれは直接の関係は無かったのですが、2013年11月に大規模にコメントスパム爆撃をくらって、サーバがたびたび無反応になるケースが増えてきました。VPSのバーチャルシリアルコンソールでもログインができず、OOM (Out of Memory) Killer によってApacheがkillされる光景だけが見えるというもの。

Apacheのprefork MPMとmod_phpでPHP運用するケースは多いと思いますが、prefork MPM のパラメータ調整をしておかないと、Apacheの子プロセスのメモリサイズが増え続けることがあるので注意したいところです。

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    #MaxSpareServers         10
    MaxSpareServers         15
    #MaxClients             150
    MaxClients              50
    MaxRequestsPerChild    500
</IfModule>

Debianのパッケージの素で入れたApache2とprefork MPM (libapache2-mpm-prefork) の場合、MaxRequestsPerChild が0になっています。これは「子プロセスはどんなにリクエストを受けても刷新されない」という意味。

PHPも大きなファイルを扱ったりやコメントスパムなどの大量爆撃を受けたりすると、解放されないメモリが出てきたりします。PHP、すなわちmod_phpとApacheは渾然一体なので、これはApacheの子プロセスのメモリサイズが肥大化していく事を意味します。

だいたい、サーバでApacheが使える合計メモリサイズを計算し、だいたい1プロセス辺りに期待する最大プロセスサイズを割った数くらいをMaxSpareServersに設定するとよいでしょう。

「Apacheの子プロセスが実際にこれだけのサイズになったら自動的に終了(child terminate)してほしい」という要求はPHPでも出来るとは思うのですが、私はあまりPHPに詳しくないPerlプログラマだったので、mod_perl2のApache2::SizeLimitというモジュールで行いました。Debianであればmod_perl2 (libapache2-mod-perl2) を入れておけば使えるようになるでしょう。

mod_perl2を有効にして (Debian であれば sudo a2enmod perl として Apache を再起動すれば良い) 以下の記述を Apache の設定ファイル (Debian であれば apache2.conf) に書いて再起動して反映すればよいです。

<Perl>
use Apache2::SizeLimit;
# sizes are in KB
$Apache2::SizeLimit::MAX_PROCESS_SIZE  = 12000; # 12MB
$Apache2::SizeLimit::MIN_SHARE_SIZE    = 6000;  # 6MB
$Apache2::SizeLimit::MAX_UNSHARED_SIZE = 5000;  # 5MB
</Perl>
PerlCleanupHandler Apache2::SizeLimit

使用できるメモリを確認する

ネットを検索すると、特にレンタルサーバでは使用できるメモリ容量に制限があることで画面真っ白現象に見舞われることがあるとのことでした。

対処法としては

  • wp-config.php に define(‘WP_MEMORY_LIMIT’, ’64M’); と書く
  • .htaccess か ApacheのVirtualHostの設定ファイルに php_value memory_limit 64M と書く
  • php.ini に memory_limit = 64M と書く

などといった解決方法が見つかりました。ただ、Debian wheezy の標準の PHP では既にphp.iniで64MBになっているようで、あまりこの部分は関係ないと思われます。

デバッグモードにする

手がかりを得るために、WordPressにあるデバッグモードをオンにしました。

具体的には wp-config.php にある以下の false を true にすること。PHPファイルは都度読み込まれるのでApacheの再起動などは必要ありません。

define('WP_DEBUG', false);

これでブラウザの画面やApacheのエラーログに情報が出力されるようになります。

ただ、これで得られたのは「GoogleアナリティクスのプラグインがWordPressの変数を再定義している」というNoticeくらい。Noticeなので大した影響もないわけで、途方にくれました。

チャット(Yancha)で聴いてみたら「プラグイン、テンプレート、これらが怪しい」ということで、最近入れたプラグインを無効化して一つ一つ試していくことにしました。

そうしたところ、数回のアクセスで以下のような出力を得ることができました。

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 12565 bytes) in /var/www/sites/post.tetsuji.jp/wp-content/plugins/crayon-syntax-highlighter/crayon_wp.class.php on line 261

私の場合、Crayon Syntax Highlighterというプラグインがメモリをバカ食いしていたようです。何かのサイトでシンタックスハイライトの便利なプラグインとして紹介されていたので導入したのは10月頃だった気がするのですが、これを無効化したところ、wp-admin/post-new.php で新規投稿もできるようになり、トップページの表示も非常に早くなりました。

このプラグイン、もともと動作が遅いことで有名なようで、検索してみると色々な情報がひっかかりました。設定を改善することで多少は速くなるのかもしれません。

WordPressでトラブルにあったら

まずは落ち着いて WP_DEBUG を true にしてデバッグ出力を観察。

今まで出来ていたことが出来なくなった系は、大抵は最近入れたプラグインかテンプレートに起因すると見て良いので、デバッグ出力を観察しながら確認。

参考サイト

様々なサイトを参考にさせていただきましたが、一部を列挙します。

結論

自分でブログを運用するのは、安価で自由度が高い反面、トラブルに会うと自分で解決しなきゃならないので、面倒なことを経験したくない人は、多少課金してでも商用のブログサイトを使いましょう

シンタックスハイライトについては、最近ではGistが標準となっているので、Gistに投稿したうえでそれを埋め込むというのが速度的には有利かもしれません。Gist埋め込みはEmbed GitHub Gistというプラグインを使っています。これに関しては特に問題は起こっていません。

Crayon Syntax Highlighterはとにかく重い。また、投稿画面の拡張も行うので、投稿画面 (post-new.php) にもその影響が波及することになります(これは正直わからなかった)。またサイト全体も目に見えて重くなります。コメントスパム等の絨毯爆撃を食らうとさらに深刻なことになるわけです。ただ設定で回避できるという話もあるので、試してみるのは悪くないかもしれません。

コミュニティは素晴らしい。実際に質問できる人がいる。これ以上に心強いものはありません。みなさんも私が通っている勉強会にいらっしゃいませんか?

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業界全体が良くなっていくのではないか。私はそう信じています。