2014年5月に3日間帰省しました

おがた (@xtetsuji) です。

2014年5月4日から5月6日まで、二泊三日で帰省しました。

最近は、近況報告とかブログに書いておくと、一部の読む人は読むし、自分にとってもまとまった情報としていいかなと思ったので、一応個人名刺にも刷ってあるこのメインブログに書くことにしました。Twitterで都度情報を流したりはしているのですが、まとめないとTwitterの情報は流れちゃうので、まとめるの大事かなと思います。

自分の場合、想定読者別にブログをいくつか分けて複数ブログに毛色の異なった記事を書いているんですが、まぁメインブログに何を書くかは私の自由ということで。読んで私の生活を知って楽しんでくだされば幸いです。

3月に帰省の予定を決めた

2月に転職をして1ヶ月経って、慣れないうちから仕事が忙しくなってきたので「転職してから3ヶ月経ったら精神的に疲れているかもなー」と思って気分転換がてら帰省しようと思いました。

マイルが余りまくっていたんですが、普段のゴールデンウィークだとマイル使って帰省とかできないんですよね。マイル枠の座席って相当限られているようで、すぐに埋まってしまう。

ただ、ゴールデンウィーク帰省を思い立ったのが3月だったので、2ヶ月前だったからかマイル枠が若干空いているのを発見して、ちょうど良い帰省プランを立てることが出来ました。有給は勤務半年後(8月初め)に付与されるので暦通りに行くしかなかったのですが、5月3日の便は満席だったものの、5月4日の便で帯広へ行けるので速攻抑えました。休暇は暦通りなので、6日に帰るしかなかったのですが、6日の便も最終便が空いていてラッキーでした。

普段なら先々の予定を決めるのが苦手でついつい先延ばしして、結局座席取りに苦労するというパターンなのですが、今回はすんなり決めることが出来ました。

今回の帰省の目的

二泊三日でできることは限られているんですが、以下の様なことができればいいなと思っていました。

  • 祖父の話を聞きに行く
  • cafe Jorro に行く
  • 母の日フライングとして、母にフォトビジョンをプレゼントして使い方を教える
  • 東京で出来なかった花見
  • @atashiro さんとバーベキュー
  • 先日の年末年始でうんともすんとも言わなくなった実家のWindows XPマシンをどうにかする
  • クラス会タスク

だいたい出来たこともあれば、出来なかったこともありました。@atashiro さんが別件で来れなくなってバーベキューは無しになったのと、時間と体力が足りなくてクラス会タスクができなかったことでしょうか。

Cafe Jorro に行く

子供の頃からこのすぐ近くに住んでいて、この古民家の前の住人の人も知っていたり、この付近を遊び場にしていたので、この田舎の古民家がまさかカフェに生まれ変わるとは驚きました。

開店は昨年2013年で、昨年秋に行ってみたのですが良い雰囲気で、帰省のたびに行っています。前回の来店時のことを店長さんに覚えてもらっていたようで声をかけてもらえて嬉しかったです。

祖父と話をする

以前から母づてに祖父が話したいことがあると言っていたと聞いていたので、空港から cafe Jorro に寄って、そのまま祖父母の家に行きました。高齢になって、昨年は入院することとかもあったものの、それでも健在で、今も毎日山登りしている元気な祖父なのですが、先々のことが心配になったのか、一時間くらい話を聞いてきました。自分の人生を左右しかねない話でもあったし、祖父とこんなに長い時間話したのは久々だったので疲れた。

フォトビジョンを母にあげる

Softbankから発売されているフォトフレーム「フォトビジョン」を、母にちょうどよいと思って2月あたりに買ったのですが、結局使い方を自分自身が把握するのは実家に持って行ってからになりました。転職してから仕事に慣れないうちから忙しかったのと、休日は勉強会か疲れて寝てるかのどっちかだったから。

とはいえ、シンプルな製品だったので、自分が操作するのを母に見てもらって覚えてもらいました。母には写真機能よりも、カレンダーと時計が大きく表示されて見やすい点がとても好評でした。前回iPad 2をプレゼントしたときのリアクションとぜんぜん違うので面白かったです。しかし、喜ぶポイントが見やすい時計かって感じですね。3Gの電波に時刻情報も乗っているし、電波時計並に正確な時計なので、時計としては月額840円の良質な時計なのかもしれません。

母には5年くらい前からSoftbankのガラケーを持たせていて、自分が支払う契約にしておいて家族間通話で無料にしているのですが、まぁ母親本人にあまりネットに興味が無いのに合わせて、年齢的にあの小さい画面でウェブを見たりはしないだろうと、S!ベーシックパックの契約はせずにSMS程度は送れる通話ケータイという感じにして費用を抑えていたのですが、写真くらいは手軽に送って見せたいなと思ったのでフォトビジョンを買ったのでした。

もともとそれは昨年iPad 2でやろうと思ったものの、あまり使ってもらえない割に通信コストがかかるのがあって、iPad 2の通信契約は解約してしまいました。

結果的に母には喜んでもらえたので、フォトビジョンはネットに対して能動的ではない親世代へのプレゼントとして良いかもしれないなと思いました。iPad だとどこかで能動的な操作が求められるのとは一線を画しています。フォトビジョンも操作があるといえばありますが、テレビと似た感覚なのがうまいところ。良いフライング母の日プレゼントとなりました

ちなみに実家にはインターネット回線がありません。母が使わないから。本人曰く、会社の昼休みにGoogleニュースを見るので十分らしい。会社ではパソコンを使って仕事をしているのですが、家に帰ってまでパソコンの画面を見て目を疲れさせたくないとは本人談。

個人的には帰省してインターネット回線が無いのは不自由なので、以前はADSLを引いていたのですが、新築して引っ越した街区が光化区域でADSLを引けなかったのと、戸建てで光回線を引くと相当コストがかかるので、普段使わないものにこんなに金は払えないと断念したのでした。ADSLの細い安い回線くらいなら引けたんですけどね。というわけで、自分が帰省した際は、普段は最低料金で寝かせているWiMAXルータを使って接続しています。

東京で出来なかった花見

今年の東京は、桜が咲いたと思ったら、あっという間に散ってしまった感じでした。週末に花見をしようと思ったけれど、天気が悪かったり悪条件も重なりました。

地元には「鈴蘭公園」という公園があって、ゴールデンウィークに帰省したときには花見に行っています。昨年も行きました。名所というほどではないのですが、いつ行ってもそれほど混雑もしていないし、隠れた穴場スポットです。

今年は4月末に突然夏日になるほど暑かったようで、すぐ咲いてすぐ散ってしまうんじゃないかと心配していたのですが、まだ若干残っていて安心しました。

桜の他にも色鮮やか

空が綺麗で桜も綺麗

桜の花の近影

 

写真管理ができていなくてどこにアップしていいものやら迷ったんですが、とりあえず撮影した写真をFacebookのアルバムにアップしました。アカウントがなくても閲覧可能です。

今後Flickrなどを整備してアルバムをそっちでも見られるようにしたいと思っています。

コンデジ(Canon CX3) を持っていったのですが電池切れに気づかず持ってきてしまい、結局iPhone 5で撮影したのですが、これでも結構十分なものですね。というかコンデジの電池切れに気づかない程度にはコンデジを普段使っていないというオチでした。

鈴蘭公園は、高校生まで住んでいた自宅が近くだったこともあって、よく行ったなーと思い出深い場所です。昔は名前の通りすずらんが鬱蒼と茂っている暗い公園だったのですが、今はすずらんに変わって芝生や木々が整備されて、日差しを取り入れて明るく開放感にあふれた、多くの人々がやってくる公園になっています。

実家のWindows XPマシンをどうにかする

学生時代か社会人になって早々に、Linuxノートパソコンを使っていた時、実家にもWindowsマシンがないと困ると思ってデスクトップマシンを買いました。いつ買ったのかすら覚えていないくらい昔です。当時はLinuxノートパソコンにVMwareとか入れて実用的な速度で動く時代ではありませんでした。

そのデスクトップマシン、先日の年末年始帰省で電源すら入らないことに気づいて、マザーボードのボタン電池を入れ替えたり色々と対策を講じたのですが、結局直らず、これをどうにかしようと思っていました。

とはいえ相当古いマシンで、既にサポート切れになったWindows XPときた。これが復旧したとしてもWindows 7を入れたりするのは非現実的だなと、ハードディスクからデータを吸い出す作戦に出ることにしました。このマシンがやっていることはせいぜい母のiPad 2の音楽データの管理くらいだったので、それさえ取り出せれば大したことありません。

分解が大変でしたが、とりあえずハードディスクを取り出したら容量がなんと80GB。

ハードディスクの中身を吸い出すためにパソコン工房に行ったんですが、ISAかSATAか分からずに結局接続キットを買えなかったというオチ。9割9分ISAだと思ったんですが。後で分解したらやっぱりISAでした。

母とパソコン工房でパソコンを見ていて、今ならデスクトップパソコンじゃなくてノートパソコンでもいいかもねなんて話をしていました。高性能なゲームマシンが欲しいとかじゃない限り、筐体開けてCPU取り替えたりPCIカードを挿して云々する時代じゃないですからね。

最終日の3日目はダラダラしていた

初日二日目と動き続けて疲れたのか、最終日の3日目はダラダラ過ごしていました。本当は2015年年始に行いたい同窓会タスクとかこなそうと思っていたんだけど、全然着手できず。

飛行機の予約が夜だったので、夕方に出る準備をして、母の自動車に乗せられて夕食を食べて、とかち帯広空港に向かいました。早く空港に到着したのと飛行機が遅れていたこともあって、とかち帯広空港に出来た新しいカフェで母とダラダラしゃべっていました。

最近は家族間通話無料でもあるし、電話も含めて親とのコミュニケーションは取るようにしています。それだけでも親孝行になると思っているし、早いうちから親孝行しておいたほうが色々と後悔が少ないっていうのはよく言われる話ですからね。

まとめ

このエントリ、単なる個人的なエッセーでしたが、短い帰省の日程を多少は有効活用できたかなと思います。長く帰省してもダラダラしちゃうことが多い中、こういう帰省も悪くないかなと。

あと、北海道の東側って桜の見頃はゴールデンウィーク前後であることが多いので、ゴールデンウィークの旅行に北海道を選ぶと、自分の土地と北海道で二回花見ができるかもしれませんよ。桜は東京の桜とは違う色合いですが、それもまた好き好きだし一興だと思います。

Perl入学式 #1 に参加してきました #Perl入学式

おがた (@xtetsuji) です。

2014年4月26日(土曜日)に行われた「Perl入学式in東京#1」に参加してきました。サポーターや講師側での参加です。

カレンダーを見ると、昨年度(2013年度)の「in東京#2」からサポーターとして参加していたのですが、今まで参加したというブログ記事を書いていなかったなーと思って、ちょっとでも感想を書いてみようと思った次第です。

昨年度のPerl入学式もサポーターとしてだいたい毎回参加していて、そこで得られた様々な人との貴重な出会いや知見などもまとめたいと思ってはいるのですが、それはまたの機会にします。長くなりそうだから。昨年度は本当に貴重な体験でした。

今回はサポーターだけでなく、より運営側に近い側で作業させてもらい、資料作成や後半の講義まで行いました。特に資料作成は想像以上に大変で、これを前2年間、校長を含む数人だけで回していたことを考えると、もっと運営側にコミットして助けていかないとなーと思った次第です。

Perl入学式の歴史

適当なことを書いているかもしれませんが、だいたいこんな感じです。

  • 2012年度に大阪で @__papix__ 校長がプログラミング初心者向け勉強会として開始。当時は毎月合計12回のペースだったらしい。
  • 2013年度は大阪の他に東京でも行われる。毎月から隔月合計6回のペースになり、in東京では各月の次月は同じ内容を話す「補講」が行われて、用事で来られない人向けの体制となった。当時大学院生である @__papix__ 校長が自腹で毎月大阪から上京していたというのは結構驚かれる話。
  • 2014年度はJPAの支援も受けつつ、福岡でも開催され、東京・大阪・福岡という三大都市での開催となる。この最初の「Perl入学式 in東京 #1」が先日2014年4月26日にありました。

そういえば今回、Perl入学式とは…といった部分のスライドも自分が書いたんでした。途中からサポーターで入った自分が書いてもいいものかなと思いながら書きましたが、校長チェックは通ったので、大きく間違ったことは書いていなかったと思います。

Perl入学式の体制

前年度までを踏襲して、今年度も以下のような感じになっています。

  • 講師:in東京であれば、だいたい @__papix__ 「校長」。他の都市は別途校長に依頼された人が担当する
  • 運営:グループウェア上で開催日時や会場の議論をしたり、資料を書いたりする人達
  • サポーター:当日会場内をまわって分からない人の個別サポートをする人達
  • 受講生:来てくださる方々

講師も運営もサポーターも有志で結成されていて、原則的に手弁当でやっています。また、パソコンを持ち込んでもらう必要がありますが、受講者(生徒)の皆さんの参加費は無料です(懇親会費は有料です)。パソコンを持ち込んでもらうのは、パソコンの貸出の手間やコストというよりも、学習環境を持ち帰って自習してもらいたいという考えのほうが先立っています。

運営・サポーターは何を目的に毎月手弁当で無料勉強会をやっているのか疑問に思う人もいるかもしれませんが、だいたいの人達がPerlコミュニティの促進だったり、Perlプログラマの育成といったことに大きな興味を持って集まっているわけです。とかくPerlは古いと揶揄されることも多い中、学びやすい言語であることも確かで、そういうことを伝えていきつつ、Perlの雇用促進までつなげていければいいなという感じ。これは私が思っていることで、運営・サポーターの人によって若干の考え方の違いはあるかもしれないけど、だいたい似たようなものでしょう。

今回私が担当したこと

前述ですが、今回は前年度のサポーター以上に踏み込んだ活動をさせてもらいました

  • 資料作成:後半部分を担当
  • 講義:後半部分の一部を担当
  • サポーター

後半の資料、半分くらいは昨年の資料をベースに2014年版として書きなおしただけなのですが、新たに書き起こす部分が校長から指示されていて、それを書き過ぎないように気をつけながら書いたものの、結構書きすぎて当日(4月26日)は30分オーバーしてしまったという感じです。

時間は常に気にしていたのですが、私の壇上でトークする経験って長くてせいぜい20分程度で、2時間の長丁場の時間見積もりができていなかったのは反省点ですね。

当日のお話

例年、1回目は環境構築から入ります。後々システムPerlを汚さないようにユーザPerlを作ることと、そのためにMac/Linuxでビルド環境を用意することを教えます。

だいたい人の集まりを待つので、13時を少し過ぎたあたりから開始。

自分は前年度の1回目を知らなかったのですが(顔を出し始めたのは2回目から)、これがなかなか大変。一歩間違えると、生徒さんの私物のパソコンの環境を壊したりしかねないのでハラハラものです。

MavericksからのMacは環境構築が楽なほうですが、それでもみんなが一斉にXcodeのダウンロードをしたらネットワークが詰まるということで、ここは次回の補講での課題となりました。

Windowsの人にLinux環境を作ってもらうという部分、今年度はUSBメモリによるブートできるUbuntuを使った方法も紹介したのですが、前年度同様にVMwareを使った方法も一緒に解説して、サポートコストが倍近くになったのは大変でした。結局、USBメモリによるブートの方法は、慣れていなくて会場で対応が疎かになってしまったのは反省点でした。

会場であるガイアックスさんの会場が先日最新鋭になったことで、環境構築の部分では、最初は1つの内容を投影していた2つのスクリーンを突然分けて、Mac編とLinux/Windows編で別進行となって、Mac側は急遽@tsucchiさんが壇上に立って講義をするという校長の無茶ぶりが面白かったです。そのために校長は、Macの人とLinux/WIndowsの人を最初から会場の真ん中で二分して座らせていたというのには、会場の設備を最大限に利用した良いアイデアだなぁと思った次第です。

2時間かけて環境構築を完了。15時からの後半は、校長が冒頭に話をしたあとは私のターンです。

とはいえ、スライドのビルドの方法を聴いていなかったのは段取りが悪かったと反省しています。Perl入学式用に魔改造(?)されたImpress.jsとは…。これも補講までになるべくプレーンな環境に近づけたいなと思いました。

私の書いた資料で私が壇上に立って、Perlの歴史やPerlでできること、そしてワンライナーからエディタを立ち上げて最初のプログラムを書くところまで話したのですが、資料の盛り込み過ぎだったり、講義の段取りが悪かったりで、結局30分オーバーとなってしまいました。色々反省点多い…。

運営・サポーターの人達と、懇親会に参加するために残った受講生の皆さんと会場の片付けをして、18時前に会場を後にしました。

懇親会

五反田のガイアックスさんでPerl入学式を開催したときのお約束 「居酒屋北海道 五反田店」。今回もそこでした。

色々と大変だった分、ビールがうまい。そして居酒屋北海道、食事もうまい。

今回初参加の受講生の方々や、いつものサポーターの方々と歓談をして、22時前には解散しました。

参考

「校長」として日々手弁当で講師をしている@__papix__さん、そしてJPAの理事として2014年度からPerl入学式の事業化に向けて尽力している@yusukebeさんが参加されている回のポッドキャスト「職質テックトーク」(by @moznion)を聴いてみると、Perl入学式についての思い、そしてPerlの様々な話題を聴くことができます。時間があればどうぞ。

今後の開催日程など

今回と同じ内容を行う「in東京 #1 補講」は、5月最終土曜日である2014年5月31日の予定です。また、in福岡#1が2014年5月10日、in大阪#1が2014年5月17日の開催となっています。

開催日程や詳細は公式ウェブサイトやTwitter @Perl_Entranceでアナウンスされるので、興味のある方はぜひチェックしてみてください。

Perlや他のプログラム言語、それを使ったテキスト処理やウェブ開発に興味があるけれど、プログラム言語を学ぶ取っ掛かりが見つからなくて…といった皆さんの参加を、運営・サポーター一同、お待ちしています。

MacBookやLinuxノートパソコンのバッテリー残量をウォッチしてImKayacでiPhoneに通知を送るPerlプログラムを作ったら地味に便利だった

仕事と個人で合計MacBook Air 3台に囲まれている おがた (@xtetsuji) です。

最近は複数のMacBook Airに囲まれている生活をしているのですが、現状バッテリーは自宅も会社も一つしかコンセントに繋いでいないという状況でなんとかなっています。ひとえにMacBook Airのバッテリーが持つから。一方の充電が完了したら、もう一方に充電ケーブルをつなぎ替えるだけで良いんです。当然ながら製品購入時に付いてくるものや予備で買ったものも含めて、ACアダプタは複数持ってはいますが、電源を挿す口が近くに足りていなかったり、会社に予備を置くのが面倒とか、そんな背景があります。

とはいえズボラな性格なので、こっちのバッテリーに充電してそのまま放置していたら、あっちのバッテリー残量がピンチということも結構あります。そこでMacBook Airのバッテリー残量を定期的に監視して、必要に応じて手元のiPhoneにプッシュ通知してくれるプログラムが欲しいと思って、思うままにサッと書いてみました。それが思いのほか便利だったので、せっかくなのでブログでご紹介してみようと思って記事を書いてみた次第です。

必要なのはPerlです。できればシステムPerlではなくユーザPerlが良いでしょう。モジュールはコアモジュール以外ではAnyEvent、Cocoa::Growl (存在する場合) 、WebService::ImKayac::Simple に依存します。Cocoa::GrowlはMacにしか対応していないし、WebService::ImKayac::Simple は最近登場したモジュールなので、Debian/Ubuntu のパッケージにもなっていません。そういうことを考えるとやはりユーザPerlを作る必要がありますが、そのあたりはPerlbrewやplenvの記事に譲りたいと思います。

やっていること自体は単純なので、最近のPerlのコアのみでも、もしくはシェルスクリプトでも頑張れば書くことはできると思います。

デーモン化とかは全然考えていないプログラムで、”&” でバックグラウンドに回して使う系のコマンドです。個人ユースのプログラムは面倒なので無闇にデーモン化しないというのが個人的な趣味なだけです。デーモン化が好きな方はApp::Daemonなどを使って改造していただくか、nohup や disown などを使ってください。詳細はプログラム内のPODを見てみてください。

標準ではホームディレクトリに WebService::ImKayac::Simple の設定ファイルが “.imkayac.yml” という名前で存在する必要があります。当然ながらiPhoneでImKayacのアプリをダウンロードして登録している必要があります。設定ファイルの書式は WebService::ImKayac::Simple のドキュメントを参考にして下さい。

上記のようなお膳立てでバックグランドジョブとして起動すると、バッテリー残量を10分おきにウォッチして、20% 50% 80% を上回ったり下回ったりした場合にImKayacで通知を送信します。また現在のバージョンでは、Cocoa::GrowlがインストールされていればGrowlでの通知も行い、要らないかもしれませんがお節介にも標準出力にも出してくれます。また充電が100%になったときに満充電になったこともお知らせしてくれます。監視のインターバルやバッテリー残量のしきい値の数々は、コマンドライン引数で変更可能です。詳細はプログラム内ドキュメントを参照してください。

こんな感じで通知が来ます。便利。

battery-watchdの通知の様子

適切なGitHubのリポジトリがあれば入れようかと思ったんですが、どこに入れてよいかわからない書き捨てプログラムとなってしまったので、とりあえず現状のものを $VERSION = “0.01” としてGistに貼りました。

Linuxラップトップでも acpi コマンドでバッテリー残量を取得することが可能なので、それにも対応してみたつもりですが、現状Linuxラップトップが手元になかったので、この部分のコードはテストしていません。レポートお待ちしています。

まだ作りたてなので、色々と不具合のようなものがあるでしょう。レポートお待ちしています。

適切なリポジトリやパッケージ化の続報があれば、随時追記しています。要望ありましたら、Twitter @xtetsuji などにお気軽にお知らせください。

#!/usr/bin/env perl
# xtetsuji by 2014/04/19

our $VERSION = "0.01";

use strict;
use warnings;
use utf8;

use AnyEvent;
use Config;
#use Cocoa::Growl ':all';
use File::Basename qw(basename);
use Getopt::Long ();
use WebService::ImKayac::Simple;

use constant HAVE_COCOA_GROWL => eval {
    require Cocoa::Growl;
    import  Cocoa::Growl ':all';
    1;
};

if ( !HAVE_COCOA_GROWL ) {
    # Cocoa::Growl の無い環境ではとりあえず何もしないコマンドとして定義しておく
    *growl_register = sub {};
    *growl_notify   = sub {};
}

use constant APPLICATION_NAME => basename($0);
use constant GRAPH_DOWN       => -1;
use constant GRAPH_UP         =>  1;
use constant GRAPH_RELAX      =>  0;
use constant OSNAME           => $Config{osname};

my $p = Getopt::Long::Parser->new(
    config => [qw(posix_default no_ignore_case auto_help)]
);
$p->getoptions(
    'watch-percents=s'        => \my $watch_percents,
    'imkayac-config=s'        => \my $imkayac_config,
    'interval=i'              => \my $interval,
);

our $DEFAULT_INTERVAL = 600;

growl_register(
    app => APPLICATION_NAME,
    #icon => '',
    notifications => [qw/info/],
);

my $IMKAYAC_CONFIG_FILE = $imkayac_config || "$ENV{HOME}/.imkayac.yml";

if ( !-f $IMKAYAC_CONFIG_FILE ) {
    die qq(ImKayac config file "$IMKAYAC_CONFIG_FILE" is not found\n);
}

binmode STDOUT, ':utf8';

my @watch_percents = (20, 50, 80);

if ( $watch_percents ) {
    @watch_percents = split /,/, $watch_percents;
    if ( grep { !/^\d+$/ } @watch_percents ) {
        die "watch-percent option specify comma separated digits.\n";
    }
}

#chomp(my $hostname = `hostname`);
my $hostname = $Config{myhostname};

my $previous_percent = get_remaining(); # initialize

my $cv = AnyEvent->condvar;

my $im = WebService::ImKayac::Simple->new($IMKAYAC_CONFIG_FILE);

my $notify_callback = sub {
    my $response = shift;
    print $response . "\n"; # DEBUG?
    growl_notify(
        name => 'info',
        title => APPLICATION_NAME,
        description => $response,
    );
    $im->send(APPLICATION_NAME . ": " . $response . " ($hostname)"); # ok either flagged utf-8 or not.
};

my $timer = AnyEvent->timer(
    after    => 10,
    interval => $interval || $DEFAULT_INTERVAL,
    cb       => sub {
        my $current_percent = get_remaining();
        my $response = '';
        # process...
        for my $key (@watch_percents) {
            if ( my $res = graph_direction( $previous_percent => $current_percent, $key ) ) {
                if ( $res == GRAPH_UP ) {
                    $response = "${key}% を上回りました。現在${current_percent}%です。";
                }
                elsif ( $res == GRAPH_DOWN ) {
                    $response = "${key}% を下回りました。現在${current_percent}%です。";
                }
            }
        }
        if ( $previous_percent != 100 && $current_percent == 100 ) {
            $response = "満充電されました。";
        }

        if ( $response ) {
            $notify_callback->($response);
        }

        # reinitialize
        $previous_percent = $current_percent;
    },
);

$cv->recv();

sub get_remaining {
    if ( OSNAME eq 'darwin' ) {
        return get_remaining_mac()
    } elsif ( OSNAME eq 'linux' ) {
        return get_remaining_linux();
    } else {
        die "Unsupported your architecture yet\nPlease contact to \@xtetsuji by Twitter if you want to use this program!\n";
    }
}

sub get_remaining_mac {
    my $pmset = `pmset -g ps`;
    my ($percent) = $pmset =~ /(\d+)%; /;
    return $percent;
}

# 追加してみたけどまだ試していない
sub get_remaining_linux {
    my $acpi = `acpi -b`;
    my ($percent) = $acpi =~ /(\d+)%, /;
    return $percent;
}
# see: http://polamjag.hatenablog.jp/entry/2013/10/23/125843

sub graph_direction {
    my ($prev, $cur, $thr) = @_;
    if ( grep { !/^\d+$/ } ($prev, $cur, $thr)  ) {
        require Carp;
        Carp::croak "graph_direction error. ($prev, $cur, $thr)";
    }
    if ( $cur < $thr && $thr < $prev ) {
        return GRAPH_DOWN;
    }
    elsif ( $prev < $thr && $thr < $cur ) {
        return GRAPH_UP;
    }
    else {
        return GRAPH_RELAX;
    }
}

=pod

=head1 NAME

battery-watchd - battery watcher and observer for Mac and Linux laptop

=head1 SYNOPSIS

 battery-watchd &

=head1 OPTIONS

=head2 --watch-percents

 battery-watchd --watch-percents=5,10,15,20

Specify watch percents separated by comma.

=head2 --imkayac-config

 battery-watchd --imkayac-config=/path/to/config.yml

Specify your ImKayac config file path.

Default path is "$ENV{HOME}/.imkayac.yml".

This file format is YAML format. See below CONFIG FILE SYNTAX section.

=head2 --interval

 battery-watchd --interval=600

Specify watching interval seconds.

Default may be 600 seconds. You confirm it by following command.

 grep DEFAULT_INTERAVAL `which battery-watched`

=head1 CONFIG FILE SYNTAX

You can give a battery state by ImKayac.
So you have to tell this program ImKayac setting.
This program gives ImKayac setting file of YAML file.
It syntax is same as L<WebService::ImKayac::Simle>'s format.

Setting file's path is below "--imkayac-config" section.

=head1 DEPENDENCIES

L<AnyEvent>,
L<Cocoa::Growl>,
L<WebService::ImKayac::Simple>,
and some Perl5 core modules.

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2014 by OGATA Tetsuji

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

WWW::PushoverをCPANで公開しました

おがた (@xtetsuji / PAUSE: OGATA) です。

WWW::Pushover というモジュールを CPAN で公開しました。2014年4月15日現在のバージョンは、初期バージョンの0.01です。Mac OS X のクリップボード監視モジュールAnyEvent::Mac::Pasteboard以降、久々にCPANにモジュールをアップロードしました。

これはPushoverという海外のスマートフォン向けプッシュ通知サービスへのインターフェースです。もともとWebService::Pushoverというモジュールがあったのですが、重量級のモジュールをいくつも使っていたのと、PushoverにあるAPIでサポートしていないAPIが一部あったので、Perl5.14以降のコアモジュールだけで事足りるようなものを作りたくて、ずいぶん以前に作ったものをアップロードした次第です。

今回は Minilla の minil コマンドでひな形を作って作業していたのですが、念のためと FAKE_RELEASE=1 minil release をした後からおかしな状況になってしまい、結局 minil build したものを PAUSE の管理画面からアップロードするなど、混乱してしまいました。そのせいか、2014年4月15日時点でsearch.cpan.org/~ogata/metacpan.org/author/OGATA の一覧に WWW::Pushover が出てこないとか色々あってどうしたものかなと思ってはいるのですが、ひとまず cpanm WWW::Pushover と打つことでインストールはできるようです。このあたりは、次にPerlの勉強会に行った時にでもCPAN Authorの方に質問してみようかと思っています。頼れる人がいるの大事。

CPANにアップロードしたいものの色々な理由で踏ん切りがつかずGitHub止まりになっているモジュールはいくつもあるのですが、今後多くの人に有用なものは少しずつCPANにアップロードしていきたいと考えています。まだまだCPANへのアップロードは不慣れな点が多いのは、場数を踏んで解消していきたいところです。

英語ですが、ドキュメントにも書いてある通りいくつかの注意点があります。

  • Pushoverのスマートフォンアプリは、買い切りの有料アプリ
  • WWW::Pushoverを使うためには現状ログインをして自分専用の「アプリ」を作ってAPIキーを発行する必要がある

後者に関しては利用者の利便性のためにAPIキーを同梱しようか結構悩んだのですが、現時点では同梱していません。そのあたりはドキュメントにも書いてある通りです。

「日本だとImKayacがあるだろう」という意見もあるのですが、さすが有料のPushoverは高機能で、例えば以下の点がImKayacより優れているポイントでしょう。

  • Pushoverは通知のサウンドを選べる
  • Pushoverは通知の優先度を選べる
  • PushoverにはiOS版だけでなくAndroid版もあるし、iPadにもユニバーサルアプリ対応している
  • …その他色々

ImKayacは無料です(有料版もあります)が、ちょっと通知ごとにサウンドを替えてみようかなとか、AndroidユーザでImKayacを使えなかったユーザへの、もう一つの選択肢になるのではないでしょうか。

ちなみにAndroidには他にもプッシュ通知系アプリもあってAPI公開されているものもあるので、そのAPIラッパーも暇があったら書いてみたいと思っています。

Foursquareの本質とは何なのか

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

ここ最近、私の周囲ではGoogleからリリースされたAndroidアプリ「Ingress」が少しずつブームになってきています。いわゆる位置情報が取れるようになってから定期的に出てきた「陣取りゲーム」のようなものなのですが、グラフィックの秀逸さなどから、一部に熱狂的なファンを生み出しつつあるようです。 そんな中、「IngressはFoursquareより面白い」といった声も聞かれるようになりました。ただ、なんだか違和感を感じます。「Ingressってゲームだよな。FoursquareってIngressと比較されるようなゲームだったっけ?」と。

Foursquareは今や世界でも有数の位置情報のビッグデータを持った企業でありサービスです。FoursquareユーザがFoursquareでチェックインし続ける目的はそれぞれあるでしょう。そんなことを考察していき、私が考えるFoursquareの本質と、今後の展望について文章の形で考えてみることにしました。

とりとめもない長文になってしまったので、最初に結論を書きます。あとは興味と時間のある人だけ読んでいただければ満足です。また、太字だけを流し読みしていただいても嬉しいです。

結論としては

長文を読むのが面倒(いわゆる tl;dr)という人向けに結論だけ書いておきます。

  • 私が考える上でFoursquareの本質はゲームではない。新規ユーザを取り込むためにバッジといった「ゲーミフィケーション」を設けているのは呼びこみの一つに過ぎない。バッジ目的でFoursquareをしても、早晩頭打ちになる。
  • Foursquareは位置情報のビックデータを持つ有数の企業になった。今後はこの情報を使って、O2Oを仕掛けてくる。また、位置情報を欲する企業や団体と連携して音頭をとって収益モデルを築いていく。
  • ユーザがFoursquareを使う大きなメリットの一つは、ライフログであり、それは個人のビッグデータである。また、Foursquareが仕掛けてきつつあるO2Oの情報を使うことで、いわゆる食べログよりももっと汎用的なべニューランキングツールとしてユーザにメリットをもたらす。
  • 実際に興味のある人は、熱心なFoursquareユーザ(4sqer)と顔を合わせて語ると良い。4月16日のFoursquareの日に、全世界で4sqDay Meetupが行われる。2014年も東京でも行われる予定。私も行く予定です。

Foursquareはゲームではない

Foursquare自体、仕組みとして「バッジ」などといったコレクション要素のあるゲーミフィケーションの仕掛けを用意していますが、Foursquareの本質はここにはないと思います。 バッジを集めるためにわざわざ外出するという動機付けのもとに頑張っている人もいることは確かですが、多くの人はそうではないでしょう。後述の「位置ゲー」企業の中の一部は、自治体などとタイアップして観光誘導などで成功している例もありますが、Foursquareはそういうことを直近では行わないと思います。不正チェックインは論外です。

そうなると普段の生活圏内でチェックインをしてどれだけバッジが収集できるかといった話になるわけですが、一通り数十種類のバッジが集まったら、あとはほとんど手に入らなくなってしまうでしょう。 またメイヤーについてもゲーミフィケーション的要素ですが、これは「ユーザの中でも最も常連である」的意味合いしかなく、奪い合うものではないと思います。これも普段の生活圏内でチェックインしている限りは、それほど増えるものではありません。

要するにバッジやメイヤーといったゲーミフィケーション要素は、Foursquareの本質ではないと私は考えています。 もちろん、Foursquareユーザの中には様々な場所に足げく通い、バッジやメイヤーの収集に楽しみを覚えている人もいます。当然ながら、楽しみ方や活用方法は人それぞれではありますが、それがFoursquareユーザの大多数かと言われると私は否定的な方です。

位置情報とその実用と遊びの前史

いわゆるガラケー、ドコモなどでは基地局によるキロ単位の位置情報が取れる機能がありました(オープンiエリアなど)。その頃から、地図などを表示するという実用アプリが徐々に出てき始めました。まだ、精度的にもゲームに利用するには早い時期でした。 その後、多くのガラケーがGPS機能を搭載して、地図アプリなどが高機能化します。ガラケーにもGoogleマップといったPCでお馴染みの「実用アプリ」がガラケー向けにブラッシュアップして登場します。 そのなかでGPSの位置情報が、「実用」と対比される「遊び」(=非実用)に利用される事例が現れ始めました。スマートフォンの前の時代は、世界的には日本のケータイ(ガラケー)が性能的にも最高峰の携帯電話でした。この点でも日本が先行していたと言えるでしょう。特に「位置ゲー」という登録商標をひっさげて市場に切りこんできたコロプラはよく知られた企業です。このころ、コロプラという企業の前身である「コロニーな生活」が作られた頃から、企業や個人が多くの位置情報を活用したゲームを公開します。 しばらくは日本のガラケーによる位置情報を活用したゲームが先進していました。

その状況を塗り替えることになるのがスマートフォン、特にiPhoneの登場です。このころから、Foursquareのような位置情報サービス・ロケーションベースサービスと呼ばれる毛色の違うものが登場するのですが、その詳細は後述します。

Foursquareに至るまでのロケーションベースサービスの歴史、そしてGoogleの戦略

スマートフォンが登場する前後に、アメリカで「Dodgeball」というサービスが生まれました。これは実は今のFoursquareを作った人達によって作られた位置情報サービス・ロケーションベースサービスなのですが、ほどなくしてGoogleに買収されてしまい、そしてサービスが終了してしまいます。

Googleはというと、買収したDodgeballを無駄にしたというよりも、そのノウハウなどを利用して新しいものを作ったと想像しています。それが記憶にある人もいるだろう「Google Latitude」です。これはスマートフォンの位置情報を送信し続け、仲間達の間で位置情報を共有しあうというサービスだったのですが、セキュリティ上の懸念が優先してしまい、いまいち流行らず、そして数年ののち終了してしまいました。

Dodgeballを作った人達は、GoogleにDodgeballを売却した後、新しいロケーションベースサービスを作ります。それが今のFoursquareです。ちょうど高機能なスマートフォンが出てきた時代であったり、Gooogleにサービスを売却した人達が再度類似サービスを作ったという状況などが話題となり、Foursquareは一気に有名になっていきます。

当初は、日本も世界もスマートフォンをゲームに活用しようという機運が非常に高く、その括りでFoursquareも位置情報ゲームとし捉えられることが多かったように思います。ちょうど日本でのガラケー時代からのコロプラ勢などの影響もあるでしょう。ただ、当時のFoursquareの経営陣はゲーミフィケーション的要素はユーザ獲得の入口に過ぎないとしていたのだと思います。当時のFoursquareは収益モデルも確立しておらず、多くの人が先行きを不安視したりしましたが、現在は位置情報のビッグデータを持つ有数の企業として、対企業向けにそれを元に商売をしていることは知る人ぞ知るFoursquareの顔です。

ここで話を戻して、Googleはせっかく買収したDodgeballを閉鎖し、その後のLatitudeもサービス終了して、位置情報サービスの負け組となったのかというと、そうでもないようです。ユーザ数ではTwitterやFacebookに大きく水を開けられているGoogle+ではGoogleマップと連携したチェックインの概念を持ち込み、最新のAndroid端末のウリとなっている「Google Now」でLatitudeのような機能を持ち込み、そこそこの好評を得ています。また、冒頭に出てきた「Ingress」などにも経験が生きているのかもしれません。

Googleくらいの大きな企業ともなると、位置情報への投資と失敗は些細な出費なのでしょう。Googleがここまで失敗を繰り返してもロケーションベースサービスに興味をもったのは、一つはソーシャルメディアへの強いあこがれと、もう一つは自社のメインサービスとなったGoogleマップやGoogle Earthの進化といった理由があるのではないかと私は見ています。

FoursquareとGoogleは仲が良いかと言われると、そうでは無いように見えるところが面白いです。Googleマップの企業向けの利用料が格段に上がったときにいち早くGoogleマップの使用をやめた企業の一つがFoursquareです。FoursquareはOpenStreetMapを使う選択をしました。Foursquare自身も自分たちが作ったサービスを潰されて、しかもFoursquareの対抗サービスを定期的に出してくるGoogleに、あまり良い気分をしなかったことは大いに想像できるところです。

またFoursquareはGoogleのライバルとも言えるAppleとの接触を何度か図っています。記憶に新しいところでは、新しいiOSで採用されて大不評となったAppleマップのデータ改善にFoursquareが情報提供をしたという報道。これが事実であるかは不明ではありますが、FoursquareはどちらかというとGoogleよりもAppleに寄っているという見方は正しいのではないかと思います。

GoogleとFoursquareという軸で話をしてきましたが、私の想像なども入っているので、全て事実であるという保証は無いところはご注意ください。また、日本語のWikipediaの以下の記事を参考にさせていただきました。

今もFoursquareに熱心なユーザは何を目的に使っているのか

どの無料サービスにも言えることですが、サービスを何年も継続していると、登録はしたものの使わなくなったユーザと熱心に使い続けるユーザの二通りに分かれるのは常といえます。

では今もFoursquareをしているユーザのモチベーションとはなんなんでしょうか。

少なくともゲーミフィケーション要素は、何年もFoursquareを続けていくと薄れてきます。バッジも取れなくなるし、メイヤーも取れなくなる。

ユーザの目的の一つは「同報通信」的目的があるでしょう。Twitterの「○○なう」の代わりにFoursquareを使う人です。私もそれを実践して、カフェにいたら私に会いたい後輩がやってきたという出会いがありました。位置情報を公開する事のリスクばかりが取り沙汰されますが、一定のプライバシールールを意識することで、有用な出会いのツールになるのではないかと思います。

もう一つ、これが重要なのですが、ライフログ的使い方があります。FoursquareはiCalなどのフィードもしていて、いつどこに行ったのかという情報を後から振り返る機能をいくつも提供しています。GoogleカレンダーにiCalファイルを登録すると、何年も前のチェックイン情報を振り返ることができます。これが数年分たまると、とても興味深い自分のライフログ・個人版ビッグデータとなるのです。

今後のFoursquareはどこに向かうのか

Foursquareの本質が、少なくとも多くの人にとってゲームではないことは前述した通りです。

ではFoursquareの本質は何なんでしょうか。いったいFoursquareは今後どういった方向に向かうのでしょうか。

一つは位置情報のビッグデータを使って対企業に商売をするという方向性があります。これは純粋に位置情報が欲しい企業への情報提供というものでしょう。あまり一般ユーザには関係ない話かもしれませんが、AppleマップやOpenStreetMapが改善するかもしれないことを考えると、我々に無関係な話でもなさそうです。

また、日本でいうところの「食べログ」的な情報発信源になろうという目論見も垣間見えます。つまり、いまどきの言葉で説明すればO2O事業への参入です。既にFoursquareは、飲食店などのビジネスパートナー向けのアプリケーションをリリースしています。今後、日本での活動が活発化した際には、この分野での攻めもあることでしょう。以前からアメリカでは「Yelp」と競合すると言われてきました。2014年春、ついに日本にもYelpが遅れて上陸したわけで、Foursquareの動向には注目が集まります。Foursquareの経営陣は「世界で一番多いチェックインは新宿駅」などといった、日本を注目しているといった発言もたびたびしており、日本でのFoursquareの本格的な活動が楽しみであるというのが、Foursquareの一ファンである私の意見です。

飲食店に限らず、全世界の全ての場所「ベニュー」を包括的にレーティングし、それを一時発信元として発信できるのは、Foursquareなど一部の限られた企業だけでしょう。また、一連のステマ騒動や星3つ収斂問題を抱えている食べログの牙城が誰によって切り崩されるのかといった興味もあります。それはYelpかもしれないし、Foursquareかもしれません。外来のO2Oプレイヤーの活動から今後も目が離せません。

Foursquareのユーザと交流することでFoursquareの色々な面が見えてくる

既に周囲でFoursquareをやっているユーザがいないけど、なんとなく好きだからやっているというユーザは、FoursquareのMeetupなどに参加してみるとよいでしょう。

4月16日は4の2乗(square)が16であることから「Foursquareの日」とされており、その日に全世界でMeetupイベントが行われます。今年2014年も東京でイベントが行われます。

私も2012年に参加して、様々な目的でFoursquareをプレイする人達の様々な意見を聴き、非常に興味の持てる、幅の広いサービスだという印象を持ち、さらにFoursquareが好きになりました。

もしFoursquareに漠然とした興味はあるけど、その本質が何か分からないという人は、FoursquareのMeetupに顔を出すなどして、実際にFoursquareのコアユーザと話をしてみることで新たな視点が得られることは間違いないでしょう。初心者から開発者まで、様々な人達が集まった過去の4sqDay Meetupでしたが、みなさん非常に楽しんでいました。

上述の、2014年東京のFoursquare Meetupには私も参加します。後日レポートを書く予定ではいますので、もし興味があるけど出られないという方は、楽しみに待っていてくださると嬉しいです。

過去の4sqDay Meetupのまとめなどを引用して、この文章を締めくくりたいと思います。

皆さんのFoursquareライフが充実したものになることを願っています。

MacBook Air でハズレのLG製ディスプレイを引いた場合の対処方法

おがた (@xtetsuji) です。

2014年4月、個人でも会社でも「MacBook Air 13インチ 2013年モデル」を使っています。中のSSDのサイズが違うくらいで、あとはほとんど同じスペック。2014年1月に会社で使いたい機種を選ばせてもらえることになったとき、個人で使っているものと違うのがいいかなぁと一瞬思ったけど、まぁ同じ方が色々と無難かなと思った結果です。個人で買ったのは2013年6月、発売すぐです。

とはいえ最近気づいたのですが、会社で2台並べてみると、ディスプレイの色合いがぜんぜん違う。最初は会社のMacBook Airは外部ディスプレイに接続しているからカラープロファイルが違うのかなとか適当なことを思っていたのですが、個人で使っているMacBook Airの色合いの悪さが日に日に気になっていたので検索してみたら、見事にそういう記事がありました。

この記事は2012年モデルについての解説ですが、2013年モデルでも同様です。

Macでディスプレイの製造メーカーを調べる方法

ターミナルで以下のコマンドを実行すると、ディスプレイの製造メーカーが分かります。

ioreg -lw0 | grep IODisplayEDID | sed "/[^<]*</s///" | xxd -p -r | strings -6

もし「stringsコマンドが無い」といったメッセージが出てXcodeを入れるのに抵抗のある方は、システムに標準で入っている perl が使えます (2014/04/09 追記)。

ioreg -lw0 | grep IODisplayEDID | sed "/[^<]*</s///" | xxd -p -r | perl -E '$str = do { local $/; <>; }; say for $str =~/([x20-x6f]{6,})/g'

stringsコマンドはXcode Command Line Toolsが必要なようです。

stringsにはXcodeが必要

出力される結果は以下のパターンがあります。

  • LPから始まる文字列 → LG製造 → ハズレ
  • LTH、LSNから始まる文字列 → Samsung製造
  • Bから始まる文字列 → AU Optronics製造

自分個人のMacBook Airで実行したら以下の結果になりました。

LP133WP1-TJA7
Color LCD

見事にハズレorz。

会社のディスプレイは以下の結果になりました。

LSN133BT01A02
Color LCD

Sumsung製。やはり発色が良いのはこの違いだったか…。

具体的に言うと、LG製のディスプレイは白も黒もしまりがない感じになります。Sumsung製のディスプレイを見慣れると、薄ぼけた感じになるというか…。

ありがたい事に、LG製のハズレのディスプレイの発色をマトモにする方法があるということで、早速やってみました。

ハズレのLGディスプレイで発色をマトモにする方法

以下の方法はLG製のハズレのディスプレイへの方法です。他のアタリのディスプレイに施す必要はありません。逆に色が濃くなりすぎて見づらくなるのでやめたほうがよいでしょう。

  1. 有志が補正したプロファイルをダウンロードします。
  2. Finder で “/Library/ColorSync/Profiles/Displays/” を開く。さっきターミナルを開いているなら、open /Library/ColorSync/Profiles/Displays/ というコマンドを打てばOK。
  3. ターミナルで開いた Displays フォルダに、先ほどダウンロードした CustomMacRumors.icc をコピー。ここで認証が求められますが、適切なものなので承認します。
  4. システム環境設定 → ディスプレイ、と進みます。
  5. 「カラー」タブを開き、「このディスプレイのプロファイルのみを表示」のチェックを外します。表示項目が増えますが、下にあるほうの「カラー LCD」を選択します。
  6. 選択した途端に色鮮やかになったら成功です。黒色のしまり具合を見てみると違いがよくわかります。

チェックボックスを外して増えたカラープロファイル群

認証ダイアログが出た場合には「認証」を押して、管理者パスワードを入れて進めましょう。

Displayには認証が必要

これでLGのハズレディスプレイでも色鮮やかなMacBook Air 13インチ 2013年モデルになりました。Sumsung製のディスプレイと並べても遜色の無い色合いになりました。

その他

AppleがSumsungと喧嘩をしていることは有名で、今後はSumsung製ディスプレイの供給は減っていくのかもしれませんが、そこのところどうなんだろう…。

LGといえばNexus 5を作ったところとして記憶に新しいです。ただ、Nexus 5 の液晶ディスプレイには特に不満を覚えないのですが、これはLGが製造していないということなんでしょうか。それとも比較対象が無いから分からないだけとか?

参考

その他にも、検索をしてみると世界中で話題になっているようです。

比較対象が無くて、特にLG製でもいいやと思っているMacBook Airユーザの方、面倒がらずにカラープロファイルを入れ替えてみたら、見違えるほどMacBook Airの向こうに広がる世界が良くなりますよ。

最近の私とmod_perlとの関わり

おがた (@xtetsuji) です。

以前からこのブログにも書いていますが、2011年からコミュニティ活動を始めて、各地のPerlの勉強会や、2012年と2013年のYAPC::Asia Tokyoでmod_perlのトークを頻繁にしてきたからか、今も「mod_perlといえば@xtetsuji」とか「モドパール神」とかたまに言われます。恐れ多い。

新年度になって振り返りの余裕もできたので、最近の私とmod_perlとの関わりを書いてみたいと思っています。

今の業務でmod_perlは全然使っていないし使う予定もない

1月末に退職して2月初めに転職したことをご報告したのですが、現在の職場はPerlの会社ではあるものの、mod_perlは使っていません。それなのに、よく採用していただけたなと、ありがたい限りです。

前職でも案件が入れば必要に応じて書くという感じだったので、年がら年中mod_perlのコードを書いていたというわけではありませんでしたが、今の会社では入社から今まで2ヶ月の間、mod_perlとの接点は当然ながら全くありません。

以前のエントリにも書きましたが、数社面接を受けて、mod_perlを使っている会社から不採用で、mod_perlを使っていない会社から内定をもらうという事実が人生のネタみたいなものでした。

今の職場で配属された部署では、以前からの案件ではCGI(SpeedyCGI)上に乗った独自フレームワーク(OSSにもなっているけど、ほぼほぼ自社フレームワーク)。新しい案件ではモダンにNginxをリバースプロキシ役として前面に立たせて、Plack+Starletに載せたAmon2改造フレームワークを使って開発しています。

エンジニアの上司や偉い人もしばしば「mod_perlは使う予定もないからねー」と言っています。適材適所なので、使わせてくれと言ったことはないし、現状うまくいっているので良い感じなんですが、なんか私がmod_perlの人と思われているようで、mod_perlの話が出るとそんなことを言われます。

個人的な開発環境ではApacheとmod_perlは現役

個人ではというと、借りているVPS(さくらのVPS)では、ウェブサーバはApache2.2+mod_perl2という構成で動かしていて、何か込み入ったことをやりたいと思ったときには、時々mod_perlハンドラを書いたりしています。

OAuthを使ったサービスを作るためのスクラッチはmod_perlハンドラだと面倒だったので、Mojolicious::Liteを使ったりしています(面倒だったのでApacheのmod_proxyでリバースプロキシさせました)。会社がAmon2寄りとはいえ、Mojoliciousも使ったりしているのは、Mojoliciousの可搬性を個人的に気に入っているからです。

自宅サーバでは今もApache1.3が動作しています。過去の環境を意図的に残す意味で、わざとやっている部分もあるんですが、そこでmod_perl1のハンドラを書いたりすることもあります。

実際に個人的に作りたいサービスもあるのですが、MojoliciousとAmon2を作る対象物に応じて分けて使って、小さいものはmod_perl (PlackのPlack::Handler::Apache2) で動かしたいと考えています。なぜって、ログを見るのが簡単だから。

先日業務で、NginxからPlack+Starletへリバースプロキシして、plackupはSupervisorで起動するっていうのをやったんですが、もうデバッグ時にログを見るのが大変でした。何かあったときに、Nginxのログ、Plackのログ、Supervisorのログがあって、どれを見ていいものかとか、なかなか戸惑いました。慣れの問題だったり、あとアプリケーション仕様のURL設計が難儀だった(これは私が設計したものではないです)ってのもあるんですが、ミドルウェアが増えるとログも増えて大変だなーと思った次第です。個人レベルで小さなウェブサービスを作るのであれば、ミドルウェアを不必要に・扱いきれないほど多くする必要はないかなと感じています。Apacheなら堅牢だし。

前職でmod_perlを突き詰めていた理由

前職でmod_perlを劇推ししていたのは、自分がmod_perlが好きという他にも、インフラ部署がほとんどのミドルウェアの使用を許可しないという理由があったからでした。それは退職エントリにも書いたのですが、彼らの言い分は「ミドルウェアが多くなればなるほど監視対象が増えて自分らの仕事が増える」ということらしい。まぁごもっともではあるのですが、memcachedとか既に市民権を得ているようなミドルウェアまで危険視されて入れさせてくれなかったのは、自分のキャリア的に多様な経験を積む機会を奪われたとしか言いようがありません。結局memcachedのようなものもmod_perlで書きました。それならOK!

世間でmod_perlを必要としている人もいる

先日PerlBeginners#12に参加したときに、「会社でインフラを担当している」という方からmod_perlの質問を受けました。やはりmod_perlにもまだ一定の需要はあるんだと感じました。

私だって転職活動時にmod_perlを使っている会社を聞きつけたりもしたくらいですから、好きか嫌いかは別として、使っている会社や使おうとしている会社があるというのはわかります。

前述の通り「ミドルウェアが集約されて簡潔な構成になる」「監視対象のデーモンや永続プロセスの類が減る」といったことをメリットとして捉えてApache+mod_perl構成を取る会社もあるだろうし、そういう選択もあるんじゃないかなーと思います。静的ファイルはフロントエンドに立たせたNginxが出力して、動的な画面はバックエンドのPlackが…といった構成は、中小規模の開発(漠然としていますが)であれば、それほど求められないと思います。古いもの=悪、新しいもの=善、の構図は全ての文脈で当てはまるとは言えないでしょう。

私にできることはmod_perlの活きた知識を残すこと

幸か不幸か、mod_perlの活きた知識だけは頭の中にたまっているので、そういったmod_perlをこれから使っていく人のために情報を出していったりコンサルタントをしていったりしたいと考えています。

Twitterアカウント @mod_perl_info がありますが、あまり活動をしていません…。とりあえずその辺りから活動を初めて、mod_perl関連の文章の翻訳などをしていければと思っています。英語が得意なわけではないのですが、mod_perl自体の知識があるので、翻訳兼監訳的な立ち位置で翻訳作業ができるかなと考えています。とはいえ今は時間がない。

なんとなくまとめ

前職で10年間Perlをやっていた半分以上はApacheのmod_perlを突き詰めて研究して、それ以外のサーバやミドルウェアはほとんど(少なくとも)業務では触りませんでした。というか最後のほうは触らせてすらくれませんでした。

なので「Perl歴10年くらいです」といっても、mod_perl以外の知識が全然無いというある種面白いPerlプログラマーなのですが、そういった私を重宝してくれるPerlの勉強会や職場があることに本当に感謝しています。

今の環境で学んでいる「新しいこと」も伸ばしていきつつ、それもまたブログやトークの形などでフィードバックしていければと思っています。それと同時に、mod_perlの知識も「生き証人」として、後世の人に分かりやすい形で残していければいいなと、強く願って実行に移そうとしています。

こんな私に要望などがありましたら、遠慮無くどんどんリクエストしてくださると嬉しいです。

Qiitaとブログの使い分け

おがた (@xtetsuji) です。

Qiitaという「プログラミングに関する知識を記録、共有する最適なサービス」が最近活発です。見やすく使いやすいインターフェースや、ウェブ開発者に人気のMac向けに専用エディタKobitoを提供したり、アドベントカレンダーの提供インフラを提供したりと、様々な工夫があります。

実際Qiitaは便利で、そっちに書き始めると、今まで開発系の話題を提供していた自分のブログとの使い分けに悩んだりすることがあったのですが、今のところ私は以下のような基準で使い分けています。

Qiitaの「趣旨」に明らかにそぐわない記事は自分のブログへ

Qiitaは「プログラミングに関する知識を記録、共有する最適なサービス」なわけで、一見技術的な話題でも「プログラミングに関する知識」とはいえないコンピュータの記事は自分のブログに書くようにしています。例えばGoogleドライブのフォルダ名称変更とかは、操作自体はsqlite3を使ったり技術的な話題なのですが、プログラミングに関する…とは若干離れていたので、Qiitaに書きかけたものの、最終的には自分のブログで記事を公開しました。

コンピュータからかけ離れたエッセーとかをQiitaに書くのは明らかに違いますよね。

あとどこかで指摘があったのですが、「自分のプログラミング勉強日記」といったタイトルのような連載ものもQiitaに書くべきではないといった意見もありました。そういう体裁のものは、得てして他の人に役立たない、他の有用な記事を埋もれさせるという理由もあると思います。そういうのは個人のブログを使うのが正解なのでしょう。

コンピュータの話題がTwitterで展開された場合も、直接Qiitaを使わずTogetterで「プログラミング」カテゴリとしてまとめて、Qiitaを使う場合もそれを引用する形にしたほうが再利用性も上がって良さそうな気がします。

自分の作ったものの紹介は自分のブログに書く

「○○を作りました」「○○をリリースしました」系の話題は、Qiitaよりも個人のブログのほうが良い気がします。紹介は知識というよりアナウンスに近いような気がするからです。

アナウンスを自分のブログで行った後で、それを引用する形で実際の使用例をQiitaに書くのは良い流れかもしれません。

自分のブログを育てるか、QiitaのSEOの力を借りるか

「共有すべきプログラミングの知識」があったとして、それをブログに書くかQiitaに書くか、悩ましい部分もあると思います。

まず自分のブログを育てたい、自分のブログ記事を多くしたいという思い。この場合は自分のブログに書くべきでしょう。

ただ、QiitaはKobitoを提供したり、もしかしたらあなたのブログよりもプログラミングの知識を書くための良いインターフェースを提供していることも事実です。

また、Qiitaには自分のGoogleアナリティクスを設定できるので、それをして計測してみるとわかるのですが、外部からの流入が自分のブログの比ではない事が多いと思います。Qiitaは相当SEO(検索エンジン最適化)に気を使っていると言えましょう。そこそこ有名なブログでない限り、自分のブログに書くよりQiitaに書いたほうがアクセス数は断然多くなります。せっかく書いたプログラミングの知識、より多くの人に見てもらいたいと誰もが思うわけで、そういう場合にはQiitaを使うのが正解と言えそうです。

こちらは質問サイト寄りですが、海外のStackOverflowも(2015年現在は日本語版サイトもありますが活発ではありません)SEOに相当力を入れていることが垣間見えて、日本語サイトを検索エンジンで検索してもStackOverflowが引っかかるくらいです。SEOの重要性をQiitaの中の人も意識しているのでしょう。

承認やコミュニケーションを求めている場合はQiitaを選ぶ

自分のブログを育てたいと思っても、プログラミングの知識を書くのもそうですが、多くのブログは他者とそれでコミュニケーションを取るインターフェースが不足していることが多いと思います。

Qiitaはコメント欄でもMarkdown、しかもGitHub Flavorに近いMarkdownが使えたり、他者からのフィードバックがもらいやすい環境となっています。

また「ストック」という仕組みがある種の承認欲求を満たしてくれるということを歓迎する人もいるでしょう。本来はサイト内ブックマークとしての役割の一つですが、それが可視化されているために、はてブ数やイイね数のような指標としても使われます(投稿が信頼できるものかの絶対的指標ではありませんが、参考にはなります)。また、多く「ストック」されている記事が分かるので、そういう記事は多くの人の役に立っていたり興味をひいていたりといった指標にもなるので、使う側も嬉しい機能でしょう。

アフィリエイトを中心にしたい場合には自分のブログを使う

先ほど挙げた「プログラミング勉強日記」にも似ていますが、多くの書籍を読んだ勉強結果を書いた上で、それらの書籍のAmazonアフィリエイトリンクを貼って誘導させようという記事はQiitaより自分のブログのほうが良いです。

Qiitaでのアフィリエイトに関する規定はどうもグレーなのですが、サービス利用規約第8条第4項第2号を読むと「広告、宣伝および検索サイト最適化を目的としてユーザー登録、投稿する行為」は「行ってはなりません」と書かれています。常識的な文献の引用として補足的にアフィリエイトリンクを貼った書籍へのリンクは問題とはされないと思いますが、全面的にアフィリエイトを目的としたような記事はQiitaの禁止事項にひっかかりかねないと解釈できます。そういう小遣い稼ぎを狙った記事は自分のブログに書くのが安全でしょう。

Qiitaの将来性

せっかく書いた記事も、Qiitaというサービスが無くなってしまったら消えてしまいます。そういったサービス継続性の心配は、どんなサービスを使う上でも心得ておく必要があるでしょう。

私が見るに、Qiitaを作っているIncrements株式会社は、Qiita:Teamといった課金プランも用意していて、いわゆるGitHubなどに見られるようなフリーミアムモデルを採用しています。つまり広告収入以外の収益源があるということです。これはサービス継続性を見極める一つの基準となるでしょう。

またIncrements株式会社の人達のインタビューなどが多数ネット上で公開されていて、そのサービス継続性やサービス育成への期待感が感じられること。GitHubとの連携や、GitHubとの機能補完といった、今や開発者の素養となったGitHubとQiitaの関係を見極めているといった部分は大いに評価できると思います。

私は、そういった判断材料を総合して、Qiitaがすぐに無くなってしまったりはしないと判断しています (あくまで私個人の判断なので、責任は持てませんが)。

Qiitaとブログを緩く連携させる

最後になりますが、Qiitaとブログを「連携」させる方法は色々考えられるでしょう。

Qiita側からは、ユーザのURLを設定できるので、そこにブログのアドレスを書いておけばよいでしょう。

ブログ側からは、Qiitaが出力するフィードをブログパーツとして載せる手が考えられます。フィードをブログパーツにするサービスはFeedWindなどがあります。探してみるとよいでしょう。

この情報がQiitaとブログを効果的に使い分けしたい人の一助となれば幸いです。

PerlBeginners#12 に参加してきました #perlbeginners

おがた (@xtetsuji) です。

2014年3月21日に行われた「PerlBeginners#12」に参加してきました。

今回は2月に転職して最初のPerlBeginnersだったのですが、今の会社の同僚の方とインターンの方々と一緒に行くという感じでした。

毎回人が足りないといった理由でトークしたりしていているのですが、今回はトークする人も当初から多かったし、環境が変わってトークする資料作りする余裕もなかったということもあって、トークはしないで聴く側に回ることにしました。

場所は水天宮駅近くの「日本橋公会堂」

今回はUstream無し

とはいえ前回に引き続きUstream配信をしようと思っていたのですが、当日の会場が建物の内側にある会議室で全然電波が入らなかったこともあって、Ustreamは断念。

当日のタイムテーブル

当日のタイムテーブルは結果的にこんな感じになりました。

ビギナーズという名前に相応しい程度の難易度が維持できているのも特徴でしょう。

詳細は割愛しますが、少し撮影した写真から。今回は iPhone 5 をテザリング用に入口近くに置いておいたので、Nexus 5での撮影です。Nexus 5を撮影用に使ったのは初めてだったのですが、ちょっと iPhone 5 より画質が悪いなって感じました。

パールビジナーズ?

まさかの「パールビジナーズ」。

PBパールビジナーズ

予約の際に聞き間違えたとかでしょうか。

基調講演 by @dokechin

基調講演の冒頭より、@dokechin さん。この写真だと白バックで飛んでしまって見えないですが、スライドのキャラクターは娘に書いてもらったとのこと。資料公開に期待しましょう。

PB基調講演の様子

もともと、Mojoliciousを使って色々なサービスを作って公開している@dokechinさん。「テストではまったお話」は Test::More の is 関数の内部で悩んだという話など。

この辺りのブログ記事が発端でしょう。

このあとのビギナーズセッションでもNYTProfの読み方について質問したりといったやりとりが続きました。

ビギナーズセッションより

ビギナーズセッションの中で、仕事で主にインフラを担当されているという方からmod_perlについての質問が出て、なんか会場の雰囲気から私が回答する感じになって、少し語らせてもらいました。

最近のmod_perlはApacheやPerlの最新版に対応していない部分はあるのですが、Perlの後方互換性の高さから、特に理由がなければ最新版の一つ前を使うという方針でも問題無いのではないかといった話。また、RHEL7ではApache2.4採用の兼ね合いから、Apache2.4にまだ対応していないmod_perl2がコアモジュールから排除されてしまったことへの注意点などをお話させていただきました。ただ、mod_perlの開発は他の mod_{プログラミング言語} の開発と比べても昔も今も活発に行われているほうなので、心配ある方はmod_perlのSubversion http24開発ブランチをウォッチしたりしてみると良いかなと思います。

mod_perl で何か質問がありましたら、@xtetsuji にお気軽に質問ください。応えられる範囲でお答えします。

YAPCでやりますと言ったものの出来ていないmod_perl系の活動もそろそろやらんきゃなぁと思った次第です。あと、自分が自己満足でネットに書いた記事が実際に読まれて参考にされているということに少し驚きました。今は少し私生活に余裕が無い感じですが、これから少しずつ自分が持っている情報を出していければと思った次第です。

@maka2_donzoko さんがいらしていて、「Acme大全2013」の宣伝をしていました。あの書籍は良書なので、1500円のもとは取れると思います。

LT

LTは @__papix__ さん、@tsucchi さん、そして主宰の @ytnobody さん、最後に飛び入りで @magnolia_k_ さんがお話されました。コード無しの精神論(スピリチュアルトーク)から、コードを交えた解説まで、バランスが良かった印象でした。

@__papix__ さんが語っていた話は、コミュニティやオープンに活動しようと思いつつできない人が恐れていることが杞憂であることを突いた、良い指摘だったと思います。ネットの向こうにいるプロのプログラマの人達は、ほぼみんな業界を良くしていこうという優しい人達ばかりです。変なコードを公開しても優しく指摘してくれたり直してくれたりすることが多いので、それだけでも勉強になると言って良いでしょう。

@tsucchi さんのお話では、異常な努力のもとに成り立っているモジュールの紹介がありましたが、一時期誰もが使ったCGI.pmの中身の異常さは語り尽くせないものがありますね。また、SQLなどのパーサ系のバッドノウハウ満載モジュールも、中身を見てその異常な努力に驚愕することがあったり…。そういう異常な努力の上に出来たモジュールを使わせてもらうことは良いとしても、自分自身が異常な努力をすることは、時間的にも健康的にも良くないなと感じました。時には自分自身が率先して異常な努力をしないといけないことも人生の中にありますが、そういうときのために普段は体力を温存して普通の勉強をしてレベルアップしていったほうがいいと思います。

以下のまとめが的を射ているなと思いました。どうしても難しい処理にたいして難しいコードを書いてしまうときはきっとあるけど、簡単な処理を難しく書くことはやめてほいたほうがよい。

  • 難しい処理をしているときに難しいコードを書いてしまうのはしょうがない
  • 簡単な処理を難しく書いてしまっていないか

メールの仕様も深く立ち入っていくと尋常ならざる複雑さになっていくといった話の中で触れられたYAPC::Asia Tokyo 2011 での RJBS氏によるトークは以下です。

主宰でもある @ytnobody さんのお話では「べからず」のお話。氏が今まで指摘されてきた色々な「クールではない」点について一つずつ解説したお話でした。これも時代によって変わる価値観ではありますが、一頃に比べてだいぶ落ち着いたPerl界隈では、今もしばらくはこの価値観で行って問題はないと思います。

こういうプロ同士の実践の中から題材に上がる情報が生で聴けるのも、PerlBeginnersのような勉強会の魅力ですね。

飛び入りLTをした @magnolia_k_ さん、brewっぽいビルドツールをCPANで公開したりといったアクティブな方。今回も、自分が使ってバグを踏んだモジュールの作者に、英語で意見を送ったりパッチを送ったりということを臆することなくやっても意外と大丈夫なんだよといったことを語って私を含めた聴衆を勇気づけていました。良い話。

懇親会

木曜日とはいえ、次の日は春分の日で祭日だったため、期せずして「週末」となってしまい、ただでさえ居酒屋が少ない水天宮駅周辺で居酒屋難民になってしまいました。

とはいえ、多少さまよって店を見つけて入ることができました。3500円で2時間飲み食い放題はお得でした。

確か8人集まりました。懇親会でディープな話が聴けるのも、こういった勉強会の醍醐味。

各人の最近の業務やPerlとの関わりとか、次回に向けてどうするかとか、色々な話で盛り上がりました。

次回は5月あたりになりそうな予感。PerlBeginners#13も楽しみです。

Station TV i for Macから映像も音も出なかった意外な原因

おがた (@xtetsuji) です。

ずいぶん以前に、iPhoneやiPadでフルセグが観られる「SoftBank SELECTION デジタルTVチューナー SB-TV02-WFPL」というものを買って、iPhoneやiPadでフルセグを観ていました。iOSでの視聴は問題無く、それだけでもそこそこ重宝するものでした。

私は普段はMacBook Airを使っているので、これがMacでも使えると聞いて、2000円の追加出費をしてソフトウェア「Station TV i for Mac」を買いました。iPhone/iPadアプリは無料だというのに…。

その時はAmazonダウンロード販売を利用して購入しましたが、結果的にソフトウェアを起動してもEPG番組情報を取れるところまで進むものの黒い画面のまま画面も映らないし音も出ないという状況が続いていました。

もともと Station TV i for Mac は、画面キャプチャ能力を持っているアプリが起動していると、起動すらできないという厳しすぎる制限があって、Evernoteすら終了させないと起動すらできないというソフトウェアです。Evernoteに画面キャプチャ能力があるのかすらよく知らないのですが、とりあえずStation TV i for Macが起動できるところまで、普段常駐しているソフトウェアを終了させても、黒い画面のままという状態は脱することができませんでした。

サポートに電話してもそういう症状は無いらしく、諦めてiPhone/iPadのみで使っていましたが、今日古いMacBook Airを出してきて、ふとStation TV i for Macを起動させたら、なんと長い時を経て動いたのです。もしやと問題の切り分けをしていたら意外なことが分かりました。

  • ローカルマシンの8080番ポートが開いていると、黒い画面のままという症状になる

私は自分のMacBook Airからは自宅サーバにSSHをして使っていて、自宅サーバで8080番ポートで待ち受けているのSquid HTTPプロキシサーバへ SSH の ~/.ssh/config で「LocalForward 8080:localhost:8080」という設定を入れていました。つまり手元の8080番のTCPポートが自宅サーバのSquidの8080番ポートに繋がっている状態、手元の8080番ポートがHTTPプロキシサーバに見える状態になっていたのです。

この設定をオフにして新しいMacBook AirでStation TV i for Macを起動させてみると、なんと画面が映るではありませんか。

「起動時に手元にHTTPプロキシサーバが起動しているかポートスキャンしているのか?」と新たな謎仕様を疑ったりしたのですが、ローカルの8080番ポートにLocalForwardしている設定を試しに1080番ポートにしてStation TV i for Macを起動して、sshとStation TV i for Macを再起動してみても映るではありませんか。よく分かりませんが、Station TV i for Macは、起動したマシンの8080番ポートを見て、開いている(もしくは開いていてそれがHTTPプロキシサーバのポートである)ことを確認すると、映像も音も出さないらしいということが分かりました。

自宅限定ではありますが、普段使いのMacBook Airでフルセグが観られるようになって、ようやく快適になりました。

録画対応のマシンも今ではだいぶ安くなりました。欲しい。

浄輪寺にある関孝和の墓に行ってきました

昔は数学をやっていた、おがた (@xtetsuji) です。

3月15日(土曜日)に関孝和の墓に行ってお参りしてきました。江戸時代の大数学者です。

行ってみたかった

よく「東京の人は東京タワーに行かない」とか言われますよね。いつでも行けると思って行けない効果。最近も、札幌にずっと住んでいる人が北大のポプラ並木を見たことがなかったとかそんな話があって、自分も東京に相当長く住んでいるけど、そういう場所あったかなぁと考え直しました。

確かに東京タワーにも東京スカイツリーにも行ったことがない。かろうじて、都庁は良く行っているし東京ディズニーランドには行ったことがある程度。

昔勉強していて、今も勉強しなおしたいと思っている数学。そうだ、前々から興味があった関孝和の墓に行ってみようと思ったのでした。江戸時代の大数学科のお墓参りをして、改めて数学を勉強するぞと気合いを入れようと

行ってみた

検索してみるとすぐ場所が分かります。

一番近い場所に至る方法は、都営バスの「白61」という新宿と練馬車庫を大回りして運行している系統に乗って「牛込弁天町」というバス停で降りること。降りたすぐ近くに関孝和の墓がある「浄輪寺」にたどり着けます。

浄輪寺への入口

浄輪寺への道路からの入口はこんな感じ。「都史跡 浄輪寺」という石碑があるのですぐ分かると思います。

浄輪寺の入口の石碑 関孝和の墓、浄輪寺の入口

特に入るのに何か必要なわけではないので、とりあえず気を使いつつ入ります。

境内は普通の寺で普段は静かな場所です。通常の墓地となっており、関孝和の墓はその奥まった部分にあります。道は狭いので、知らずに入っていくにはちょっと勇気が要りますが、入っていくとすぐ分かります。

関孝和の墓

境内はそれほど広くないし大体一本道なので、都によって立てられた看板が目に入って、すぐ関孝和の墓の場所は分かると思います。

関孝和の墓の正面

看板には生い立ちや、その偉業の数々が書かれています。とても簡潔に分かります。

関孝和ってどんな人

江戸時代の数学者(和算家)です。詳しくはWikipediaの解説を読むと良いと思います。

例えば、高校時代に習ったことがある人もいる、あの「行列式」を世界で最初に見出した人でもあります。江戸時代に中国からもたらされた算術が日本国内で高度に発展した「和算」の中でも、取り分け「算聖」と呼ばれるまでになった人。後になって数学史研究者によって、西洋数学よりも数々の事実を先に発見していた人として、今に知られるようになりました。

墓はパワースポット?

大学が池袋の近くにあったころは、ときどき雑司が谷霊園を通り道にしていたことがありますが、あの墓地にも文豪の墓があったりして、良い散歩スポットだったことを思い出しました。

関孝和の墓、今あるのは二代目の墓とのことですが、ここにもともと関孝和が埋葬されたのかと感じると、特に何かをお願いしたわけではないですが、何かパワーがもらえたように感じます。そんな清々しい気分を味わいました。

暗いイメージが先行する墓場ですが、今を切り開いてくれた偉大な先人に敬意を表すキッカケになることは良い事はないか、今回の「墓参り」を通じてそう思わせてもらいました。

最近は帰省時期が悪く、自分の先祖への墓参りがここ数年できていないことが思い出されます。良くないですね。今年は彼岸の時期に帰省して、先祖の墓参りができるようにしたいと思います。

おまけ画像

3月15日、今年は厳冬でまだまだ冷えている感じではありましたが、境内の入口近くの木には元気に花が咲いていました。桜はまだとして、梅とかかな。病気の連続、そして2月からの新生活で色々忙殺されている中、少し心が癒された感じがしました。

関孝和の墓の近くに咲いていた花

 

Twitterのお気に入りツイートを振り返ってみて気づいたこと

おがた (@xtetsuji) です。

今回の記事は、ちょっと「気がついたから考えてみた系」のただのエッセーです。

Twitterにはツイートの「お気に入り」という機能があります。よく「ふぁぼ」とか言われるものです。ここではRTのように、Favということにします。

「あとで読む」はもう読まない

Favは「あとで読む」的な意味合いもあるとは思うんですが、世の中「あとで読む」とタグ付けされたものは、大抵あとで読まれないという法則があります。

自分も大量のブックマークをDeliciousに投稿したりしていますが、「あとで読む」というタグ付けは使わないようにしています。逆に「何度も読みたい」というタグ付けにして、一度は必ず目を通す、目を通すまでブラウザのタブは閉じないようにするという流れにしています。そういうようなタグ付けの工夫をすることによって、Deliciousブックマークの内容をあとで活用できることが多くなってきました。Delicious側が過去ブックマークの表示機能を高速化したというのも大きいです。使いやすい。

TwitterのFavも、この「あとで読む」的意味合いが多少なりともあると思います。もちろん、Fav結果がツイート主などにも伝わるのでそのツイートへの同意を示す意味合いや承認的意味合いもあるでしょう。ただ、このFav、あとで見返すことができるようになっているのに、しないのはもったいないなと感じた次第です。Deliciousブックマークの振り返り運用が最近うまくいっているからこそ思ったことなのかもしれません。

サードパーティのTwitterクライアントでは既に全てのFavをたどれないかもしれません。その場合はTwitterの公式クライアントか公式ウェブを使えば、少なくとも1000ツイートFav程度ならたどることができます。この理由は後述。

Favより自分の手法でメモしておいたほうがあとで検索できる

自分の場合、メモっておきたいツイートは自分専用のプログラムで自分用IRCチャンネルに投稿してIRCボットにログを取ってもらうようして (簡単なコンセプトは以前トークした「クリップボード監視と外部コマンド実行 #chibapm」のスライドを参照) います。ボタンひとつでログファイルに残るので、便利でガンガン使っています。ログファイルの検索も簡単なので、あとで「あのツイート、コピーしておいたけどなんだったけなー」といった時にも役立ちます。

TwitterのFavツイートは事実上あとで検索できないし、自分で書いたプログラムで回収しようとしてもTwitter API1.1のレートリミットの制限で指定時間内に数百ツイートしか回収できないようで、自分がFavするツイートは「これぞ」といったもののみに最近はしています。Tweetbot for iOSというクライアントでも2012年くらいのツイートまでしかたどれませんでした。これはTwitterクライアントが悪いわけではなく、Twitter社の提供するTwitter API1.1での制限です。

気になったツイートのロギング手法については、こんどいくつか解説してみたいと思います。

というわけで、私のFavには特別な思いがこもったものが多いのですが、それを振り返ってみようとして気づいたことを書いてみたいと思います。実際にツイートを列挙して振り返るのは今度にしようと思います。

Twitterを始めたきっかけ

Twitterは2006年頃からあるサービスですが、当時ブログや公での発言にあまり積極的でなかった私は「マイクロブログ」と称していたTwitterに対しては距離を置いていました。

ただ、2008年頃からジワジワとTwitterは日本でも影響力を増していきます。2009年9月のYAPC::Asia TokyoではTwitterを主要な連絡手段にするというアナウンスがあって、そこで半ば負けた気持ちでTwitterに登録したのが2009年9月9日でした。

最初のツイート。敗北を認めた感じが伝わってきます。当時は2008年くらいまで多忙を極めていて、ネットのトレンドなどが追えていなかったことがあって、Twitterは流行らず消えると考えていたり、とにかく勘が鈍っていたような気がします。

その後、試行錯誤しながらツイートしていきますが、Twitterの楽しさというか活用法も分かってきて、同報通信的用途や自分のライフログ的用途に活用していくようになります。特に2011年3月の東日本大震災前後でTwitterの活用が広がっていったり変化していったような気がします。

他のブログ記事でも書きましたが、2011年からは勉強会でトークするようになったり、ブログを開設したり、対外的な発言も積極的に行うようになって、Twitterとの連動も広がっていきました。

震災に対外的活動デビューにと、2011年は節目の年でした。

Favを振り返って分かったこと

2009年9月9日から2014年3月16日までの間に、私のFavツイートは1000ちょっとあるようです。https://twitter.com/xtetsuji/favorites にアクセスして、たどれる最初のFavまでたどって、Chromeのデベロッパーコンソールで document.getElementsByClassName(“tweet-text”).length を打った結果です。最初はよく分からずブックマーク代わり程度にFavを使っていたので、厳選してこの数というわけではないです。

とはいえ、Twitterのウェブインターフェースでは、たどれるFavの数に制限は無さそう(3200制限はあるかもしれない)なんですが、どうも2012年11月4日以前のツイートのFavの取り消しができないっぽい。もしかしたら私だけの現象かもしれませんが、Twitterは定期的に仕様を変えてきているので、何らかの要因はあるのかもしれません。特定の人にだけ起こる不具合というのもTwitterにはあって、それを踏んでいるのかもしれません。

当時はフィードリーダーの代わりにTwitterのURL付き投稿をブックマーク感覚でFavしていたのですが、あとで検索できないということもあって、このフィードリーダーのブックマークがわりとしてFavを使うのは、本当に大切なFavツイートを見返せないから良くないなと今になって追っている次第です。

次回は

実際に同感して付けたFavツイートを振り返って、当時または今の自分がどう考えるか、時間を見つけて少しずつ振り返ってみたいと思います。

Mac版Googleドライブのディレクトリを変更する方法

おがた (@xtetsuji) です。

Mac OS X 版の日本語「Googleドライブ」アプリを入れると、ホームディレクトリに「Google ドライブ」という名前のディレクトリが作られて、特にコマンドラインで扱いづらいので名前を変更したいんだけど…という話です。

はじめに

$ cd ~/Library/Application Support/Google/Drive/

ls をすると

$ ls 
CrashReports/                   snapshot.db-shm
FinderExt.bundle/               snapshot.db-wal
cacerts                         sync_config.db
cloud_graph/                    sync_config.db-shm
lockfile                        sync_config.db-wal
mach_inject_bundle_stub.bundle/ sync_log.log
snapshot.db

といった感じ。今回は設定が入った sync_config.db が主役です。

念のためバックアップ

$ cp sync_config.db sync_config.db.bak

情報書き換え

sqlite3コマンドを使って設定情報をUPDATEします。今回はホームディレクトリ直下に “Google Drive” というディレクトリとすることにしましょう。

Googleドライブアプリをいったん終了させて、以下のように

$ sqlite3 sync_config.db "UPDATE data SET data_value='$HOME/Google Drive' WHERE entry_key='local_sync_root_path'"

とコマンド入力をすれば良いです。date_value= 部分を適宜書き換えればOK。

実際のディレクトリ名の変更も忘れずに。Googleドライブアプリを終了したあと

$ cd
$ mv "Google ドライブ" "Google Drive"

を実行してリネーム(Finderでやってもいいです)。そしてアプリを再度起動するとよいでしょう。

エラー「Googleドライブ フォルダが見つからないため…」が出た場合は設定が間違っている可能性があるので、バックアップを戻してもう一度精査してください。

設定は自己責任でお願いいたします。

今回は「Google ドライブ」アプリ バージョン 1.8.4357.4863 で検証しました。

実際いまはどうしているの?

結局Googleドライブアプリはアンインストールしてしまいました。どうも馴染めなかった。どうせGoogleドライブ特有のファイルをダブルクリックしたらブラウザに飛ばされるのであれば、最初からGoogleドライブのトップ画面にブラウザで飛んだほうが便利だし、ブラウザ上ではドラッグアンドドロップでアップロードとかが出来るので、特にブラウザで不便を感じないというのもありました。

同期系のストレージであればDropboxが、WebDAV系ストレージであればBox.comがあるので、ひとまずGoogleドライブはそれらとは違う使い方をしているという感じです。

参考

Mac OS X で /var/folder の中身を削除したら画面からアイコン画像が消失した

おがた (@xtetsuji) です。

今回は完全に「やっちゃダメ」シリーズと、日頃からどうするべきか考えるシリーズ。

/var/folders 消してアイコンが消えていった事件

酔っていて電車に座れたので、MacBook Airを開いてファイル整理をしていたんですが、find / -size +250MB などとして無駄な大きなディレクトリを探そうとしていたら、”/var/folders” というのがあって、中を見ても明らかにキャッシュでしかなかったので躊躇なく rm -rf しました。

そうしたら、しばらくしたらドックや(Command-Tabで出てくる)タスクスイッチャーや、デスクトップ上のアイコン画像がどんどん消え始めました。名前だけ出てきてアイコンはないけど存在しないはずのアイコンの影はあるといった感じ。Finderから見えるファイルのアイコンも消えていきました。恐ろしい!

ドックから消えたアイコン画像

Windowsでも似たようなことがあったときに再移動したらアイコンキャッシュが戻ったので再起動してみたものの、全く直る様子なし。

あとで調べてみたら、やはり /var/folders はキャッシュディレクトリのようでした。例えば 新・OS X ハッキング! (56) 新世代のOS Xユーザへ(4):情報の宝庫「/var」 | マイナビニュース が詳しい。その他にも /var/folders で検索してみると出てくるのですが、これ関連でトラブルに陥って結局直せない人が多いという印象でした。前出の記事ではログアウトしたら消えるディレクトリのはずが、再起動しても戻らなかったりしました。

私も色々やってみた挙句、自分の症状も治らなかったので、結局6日前に取っていたTime Machineのバックアップを引き上げて復帰させたという感じ。ちょうど平日は仕事で忙しくてそれほど個人用MacBook Airにファイルを置いたりしていなかったので、まだ傷口が浅かったです。

ちなみにTime Machineからの復元方法は、いったんMacを終了させて、Time Machineディスクをつないでおいて電源投入時にCommand-R を押しっぱなしで起動させること。これで復元ウィザードが出るので、あとは画面に従って復帰していきます。この方法だとOSイメージごとまるまる復元されるので、たとえばMountain LionのTime MachineイメージをMavericksに復元させるとMountain Lionに戻るくらいまるまる書き換えてくれるものです。

とりあえず6日前に戻して、あとは取り戻す必要のあるファイルを、GitHubやBitbucketから取ってきたり、Dropboxを同期させたりして対応しました。

既にトラブルが起こっているときにTime Machineを接続して、その時の記録も取られているので、バージョン管理やオンラインストレージの管理下ではないディレクトリのファイルも部分的にTime Machineで取り戻せるとは思いますが、まぁ自分の場合は6日の変更内容がほとんどGitHub、BitBucket、Dropbox上のものだったので助かった感じ。

教訓

  • /var/folders はキャッシュディレクトリだけど、巨大だからといって軽く扱ってはダメ
  • Time Machineは日頃から励行したい
  • 何かあったときに面倒なので、Time MachineディスクはローカルUSB接続が面倒だけど速いしオススメ
  • ファイル類はなるべくバージョン管理して外に出すようにして、GitHubやBitbucketに日々pushする習慣をつけておくとよい。またDropboxなどのオンラインストレージを活用するのもよい
  • Google Chromeのオンライン同期は素晴らしい。ブックマークとかは直前のものがそのまま同期された
  • 酔ってパソコンを操作するときは、ファイル整理とか失敗すると危険な作業はしない

色々と教訓を得ることができました。

Yokohama.pm#10 に参加してきました #yokohamapm

おがた (@xtetsuji) です。

2014年2月21日に行われた Yokohama.pm#10 に参加してきました。

Yokohama.pm#10 の看板

参加といっても、今回は完全に聴講する側で、しかも少し遅れて会場入りしたのですが、なかなか楽しめるイベントでした。

 

PRONTOでのYokohama.pm#10の風景

ビール片手に立食パーティーなYokohama.pm#10

というわけで結局、終始メモを取ることができなかったのですが、実際に発表が行われている場所で雰囲気を感じ取ったり、来ていた知り合いの方々と懇親したり、飲んだり食べたりができたり、色々と有意義な勉強会となりました。

私の2013年12月の入院の心配をしてくれる人がいたりと、色々と挨拶してくださる方も結構いて、本当ありがたい限りです。

本トークも色々と参考になりましたが、LTのトークの内容も良かったです。後日の資料公開が期待されます。

本来であれば自分のメモをまとめたものをブログ記事に載せているのですが、今回はメモが無いので、雰囲気だけ伝える感じ。その代わり、Togetterに参加者の関連ツイートをまとめました。

都心から来ている人も結構多くて「横浜遠い」という話も結構聞こえたのですが、Yokohama.pmですからまぁ横浜ですよね。それでも昔に比べれば副都心線でかなりアクセスが良くなったので、また開催されるならぜひ行きたいです。今回は1年ぶりくらいの開催だったようですが、今後は数カ月おきに開催していくという話なので、期待したいです。