No description or website provided.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
README.md ランニングを始めました Nov 9, 2014

README.md

2014-11-09

ランニングを始めました

  • 何か新しい趣味始めたい
  • 卓球は京都だとなかなかやる場所が見つからないし、そもそも2人以上いないとできないから厳しい
  • ボルダリング体験してみたけど、楽しさ分かる前に筋肉痛で続かない
  • ybenjoがランニングをずっと続けているので、じゃあ自分もやってみよう

ということでやり始めました。9月終わり頃から始めたので、一ヶ月半くらい続いています。何か定期的に記録を取らないとモチベーションが続かないかも、ってことで木津川マラソンのハーフにエントリしてみました。2/1に走る。2時間前後くらいでゴールを目指したいなぁ。

1kmくらい走ると息上がるかと思ってたんですが、以外ともうちょい走れた。10km走るとかなり疲れが残るけど、一回5kmくらいだと丁度よい感じ。5:30/kmくらいならペース維持できるってのが分かってきました。毎回記録を取っておくことでかなりモチベーションの維持につながっています。会社帰りで最初は走っていたんだけど、なかなか時間が取れないこともあって、朝から走っています。朝だと出社しないといけない時間が後ろにあるからダラダラしなくなっていい感じです。

走るときに身に付けているもの

スニーカーで走ると明らかに足の負担がよくなさそうだったので、ABCマートとか入って店員さんに聞きながら1万くらいのやつを選びました。ランニング初心者はちょっとくらい重くてもクッションがちゃんとあるやつを買ったほうがいいということ。

pebble

Runkeeperでタイムとかをはかって、pebbleでペースを見ながら走る、というやり方。簡単に時間が見れて、信号で止まるときに簡単に止められるのですごくよい。

ウエストポーチ

お腹に巻くやつ。iphoneをポケットに入れているとポケットの中で暴れて大変気をそぐ。このポーチはお腹にかなりフィットして、全く暴れない。もうこれがないと走れないって感じです。

イヤーマフ

秋から冬にかけて走ると耳が冷たくなり気分が悪くなることが多いので、耳が冷たくならないようにすることは必須。それでイヤーマフを買った。

2014-08-10

机の上をプリントだらけにしないために

8月からインターン生がくることもあり、(見栄で)机の上を整理しようと少し試行錯誤していた。仕事柄、論文を印刷しまくるので気を抜くと机の上が論文の海になって、必要な書類が出てこないなどの事態を引き起こす。院生のときは論文をカテゴリに分けていたが、大抵面倒で続かないということが起きた。よって手間がかからない方法が必要である。

今、手帳を日付毎に書いていているが、時系列に書くというのは特別なルールを必要としないし、自分の頭というのはいつ頃書いたというのは意外と覚えている。これを参考に、プリントも時系列で管理することを考えた。よくよく考えると43foldersというやつと同じかもしれない。

毎日のプリント管理

管理といってもこれに挟んでおくだけである。

これは31個のポケット(?)からなっているので、その日使ったプリントは基本的にその日のところに入れておけばよい。職場から帰るときに、その辺に散らかっているプリントをその日のポケットに放り込むだけである。頭を使う必要がない。アクセスが多い資料は基本的に最近のところに並ぶし、アクセスが少ない資料は最初の日のポケットに残り続ける。今はこれを2つ買っておいて、月が変わるときに入れ替える。また、「来週のこの日にこの資料が必要!」というのはその日のポケットに入れておけば存在を忘れておける、というのもなかなかうれしい。例えば、インターン生がくる初日に必要な資料はその日のポケットに入れておけばよい、というわけである

このファイルのいいところは、挟んでおくだけで資料が落ちないという仕掛けになっているので、プリンタを出し入れするコストが低い、ということである。

プリント落ちそうに思うでしょ?落ちないんです、これが。

毎月のプリント管理

毎日のプリント管理は上のやつで困っていないんだけど、毎月の資料というのをどうするか。毎月の整理にはこれを使っている。

今度はポケットが12個あるので、毎月月初めにLIHIT LAB スケジュール&仕分けファイルに挟んである資料を今月のポケットに放り込む。これだけである、簡単。あとは半年とか一年のスパンで資料を整理すればよい(このくらいのときは論文をカテゴリ毎に分類すればよい)。印刷した論文って、そのときは大事に思うからなかなか捨てにくいんだけど、半年くらい経つと何で印刷したのかよく分からない、ってことがかなりあると思う。なので、半年後には捨てていいかの判断がやりやすい、というのがメリットである。不必要なものはとにかく捨てる。

完全に43foldersのパクりっぽいけど、今のところはこれで結構うまく行っている。時系列というのは何も考えてないで勝手に整理されていくので本当に便利である。

2014-07-01

散財メモ

上半期が終わりましたね。上半期の散財メモを書いておきます...。

野鳥

一冊180円なので散財というかは微妙だけど。野鳥はとにかく頑丈なので、適用に扱っても問題ないし、一冊40枚しかないので一ヶ月程度で使い切れる(一冊のノードを使い切ったのとかいつぶりだろう)。すでに三冊目に突入した。野鳥にベルクロ付けて、文具王手帳にぺたっと張り付けています。パラパラするのは嫌なのでゴムを上から付けている。

シールプリンタ

野鳥に実験結果のグラフをペタペタ張り付けているが、色んなところに旅行や遊びにいったら、それも張り付けておきたい。ということで、シールで貼れるタイプのプリンタを買った。

シールタイプはあまりコスパ(1枚50円程度)はよくないといえばそうなんだけど、写真があるとないとでは思い出す度合いが全然違うので、しばらく使ってみる(「写真はBlogに張っておけばいいじゃない」というがまともな意見かもしれないが、Blogだとメモを全然見直さないなと思って紙に回帰したのである)。二ヶ月で30枚を消費するくらいのペースで使っている。BluetoothでiPhoneと通信して写真を印刷できるのでケーブルがいらないし、充電もmicro USBでできるので鞄の底に入れておくと旅行にも持っていける。

Boogie Board Sync

Syncではないboogie board(BB-2など)は自宅でのコミュニケーションツールになったり、研究での殴り書きメモになっていて、大変役に立ってる。ただ、書いた結果をiPhoneに撮っておこうとすると光が反射するのでなかなか綺麗に取れない。Boogie Board SyncはiPhoneとbluetoothで書いたメモを同期してくれるので、その辺に書き散らしたものもiPhoneにどんどんためていける。研究会のポスター発表のときなどは特に重宝しそうだ。

Pebble

スマートウォッチ。iPhoneの通知を時計に飛ばしたり、fitbitの今日の歩数みたいなのを表示したり、音楽プレーヤーの操作ができたり、明日の天気が表示できたり。自分のiPhoneケースは予備バッテリ込みのものになっていてかなり厚いのだが、pebbleがあると頻繁に取り出さなくて済むので便利。あと充電しなくても5日くらい持つので、電池の持ちもまあまあかな。さすがに自分でアプリを作ってまではいない(時間がない)。

2014-02-26

使用しているリフィル等メモ

後で買うときにメモっておかないと色々不便なので。

2014-02-23

エンボディチェアが届いた

相当でかい箱だったけど、IDC大塚さんがゴミ一つ残さず届けてくれた。10分もかからなかった、恐るべし。約2週間くらいで届いた。

キャップレス万年筆を購入

手帳に使うペンをあれこれ試行錯誤している。最初はLAMY Safariの4色ボールペンを使っていたが、書くときに少しカチャカチャと音がするのが気になる。それと最近万年筆を使うようになったのだが、キャップが付いていると移動中だと付け外しが面倒(でも、さぼるとペン先が乾く)。キャップが付いてなくて万年筆で、という条件で探していった結果、これを買った(細字)。

ネットで調べた感じだと、キャップレス万年筆はLAMY dialog 3というのも有名らしいのだが、Lamyの万年筆は少し太いのである。万年筆初心者なので、高島屋に行って店員さんにあれこれ教えてもらいつつ試しながら決められたのでよかった。こういうものを買うときはネットより有名百貨店みたいなところがいいですね。ロフトでも万年筆は扱ってるけど、高島屋のほうが断然色々試させてくれて納得して買うことができた。手帳に書くので極細のほうがよいものかと思っていたのだが、実際書いてみると細字で十分だったし、書き味は細字のほうが好みだったので行って自分で試してみたほうがよさそうである。

2014-02-10

文具王手帳続報

若干衝動気味で買った文具王だったけど、予想よりもずっとよかったので続報。

ジョッターが素晴しい

これは文具王手帳に限らないのかもしれないけど、ジョッターが素晴しい。この手帳を買うまでジョッターという存在を恥ずかしながらそもそも知らなかった(こんな感じの)。手帳を開かなくても書けるから書くところを探すという行為をしなくてよいのですぐ書ける。電車とかバスの中でメモをするときにはうってつけな感じである(一日計2時間はあるのであなどってはいけない)。文具王手帳にはA4を4つ折りにしたやつを裏表で書けるので、かなりの量が書ける。ペンを付けるところも付いているから「紙はあるけど、ペンがない!」という事態が起きない。

バイブルサイルのリフィルの充実

最近、システム手帳を使っていなかったのでうとかったのだが、リフィル最近はすごい充実しているのね。monthlyとweeklyのスケジュールと普通にメモできる横罫の3種類を使っている。

  • monthlyにはある程度決まった締め切り
  • weeklyには今日のToDoとかやったこと
  • 横罫には論文読んだメモ、本のクリッピング(引用とか)、今年読んだ本一覧、今年の目標

みたいな感じで使い分けている。手帳はデジタルツールと違って書き直しができない(or しづらい)という欠点があるけど、ポストイットを使うとあちこち行ったりきたりすることができるようになった。メモみたいなのはなぐり書きなので、修正ペンを使わずにぐちゃぐちゃっと塗りつぶす。

小銭入れ

弊社の自販機は1000円より大きい紙幣を受け入れないので、「万札しかない」という事態が割と起こってしまう。そういうときとかに役に立っている。バイブルとA4の大きさの違いをうまく利用していてよい。

カンガルーフォルダ

これは案外うまく使えていない。単語帳をしこんでみているが、それが続いていないのが大きい。

2014-02-09

最近取り上げたい話題

取り上げたいが、書くの面倒とか時間がないなどの話題。忘れないようにメモだけしておく。

  • 確定拠出年金
    • これがきっかけで投資(特にインデックス投資)に興味が出てきた
  • アーロンチェア
    • 腰が壊滅的にダメになってきたため、ついに購入。引っ越す前後から買う買うといっていたのだが、実際に座れるところがなかなかないので。IDC大塚家具というお店にはるばる行ってきたが、店員さんがアドバイザという形で一人ずつ付いてくれるので大変分かりやすかった。アーロンチェアの後継者であるというエンボディチェアというものを買った。再来週くらいにくる予定

2014-01-18

新年散財キャンペーン

文具を中心に色々買いました。

BB-2 | ブギーボード | KINGJIM

英単語を暗記するときに殴り書きとか、アイディアをなぐり書きとかをするときに重宝。書いてる感覚が紙に書いてるのと近いのがよい。一番大きいサイズを家と会社用に2枚ずつ買ってみました。iPadのメモアプリとかでもいいかなって思ったけど(実際、スタイラスとか数本買ってみた)、書くときに書く人間が気を使ってかかないといけない付近が気に食わなくて使わなかった。Boogie boardだとその辺気にしなくてよい。道具のほうが合わせろよと。

薄いメモ帳abrAsus(アブラサス) | 薄くてコンパクトなメモ帳 - abrAsus(アブラサス)ブランド通販サイ

高いけど、これはいい買い物したと思う。ズボンのポケットにいつでもメモできるようにしておこうとしたことは前もあって、以前はPocketModとかを使っていたりしたけど、ペンがいいの見つからないとか肝心の紙がグチャグチャになってしまって使うときに萎えるという事態が多発した。薄いメモ帳はペンが常にセットになっているから肝心な時に書けないということがないし、皮のしっかりしたカバーが付いているので紙がぐちゃぐちゃになることがない。どこにでもあるA4を折り曲げるだけなので、気軽にメモできる(いい紙だと、気軽に書くのに心理的ハードルが上がってメモしないという悪循環がある)。A4一枚しか入っていないので、ポケットの中でかさばらない。あと、この折り曲げ方はすごいアイディアだと思う。プレゼントとかにも悪くないものだと思います。小さいポケットみたいなのが付いているので、ICCOCAを入れて使っております。

文具王手帳 tecyo@bungu_o 高畑正幸 | 文具王が提案するシンプルなメモ手帳(スケジュール)- abrAsu

最近のメモはDay Oneに二年くらいとにかく取っているんだけど、思い付いたアイディアを時系列で眺めたいときはやっぱりアナログのほうがよくって紙の手帳に戻ろうかなと考えていた。薄い手帳を買うときに、丁度文具王手帳が目に入ってコンセプトが気に入って買ってみた(という割には高いのだが...)。購入時はリフィルやペンも付いていないのでそっけない感じに見えるのだが、手帳が厚くならないようにとかそれぞれのパーツの配置がよく考えられている。文具王の名に恥じない感じである。

ボールペンはLAMY 2000 4色ボールペンを入れて使っている。カンガルーホルダには連想式にみるみる身につく語源で英単語をA4 2ページくらいを自分でPDFに吐いた一覧表みたいなのを入れてる。ジョッターですぐにメモできる付近もなかなかすごいアイディアである。

2013-11-01

今年買ってよかったもの

今年はまだ二月くらいあるけれども...。まとめてみたところ、(前からそうだが)本当に本当に面倒なことが嫌いな人間であるということが分かった。何かができるようになったことより、何かをしなくなってよかったことに対して幸福感を感じる人間である。面倒なことをいかに頑張るかを考えるよりいかに面倒なことをしないでいいかを頑張ったほうがよい。

Fitbit

fitbit oneは誕生日プレゼントでもらったもの、fitbit ariaは自分で買った。

Fitbit Oneは「何もしないでいい」ところがよいところ

Fitbit Oneは

  • 歩いた歩数
  • 距離
  • 階段の段数
  • 消費カロリー
  • アクティブな時間

を計測してくれるのだけれども、ズボンのポケットに付けておくだけでよい。充電も週に一度やれば十分。半年近く使ってて電池が切れたって状態になったことがない。継続させるにはいかに面倒でないか、意識しないでよいかが大事だと個人的に思っているけれども、邪魔にならないし面倒でもない(存在感がないので洗濯してしまわないように注意が必要である)。勝手にログが溜っていく。

父親にも父の日でプレゼントしたのだが、SNSの機能が付いていてFriendsにいる人がこの一週間でどれくらい歩いているかが分かる(一日の詳細レベルでは分からないようになっている)。父に負けるとなんか悔しい気がするので頑張るかという気がしてくるのと、一日頑張るより継続的に頑張るほうが楽であるというのを知ることができるという意味で割とよかった。あと多分実家へは生存確認できるという意味でいいのだと思う(三日くらい歩いてなかったら風邪引いてるのか分かる、みたいな)。

Fitbit ariaのいいところも「何もしないでいい」

体重計に乗るだけでwifi経由でアップロードされ、長期間の体重がトラックされるというのは自分ではほとんど何もしなくていいので楽チン。ボタン押すとかアップロードされるまで待たないといけないとかそういう面倒なことがない。

イヤホン

元々Bluetoothのイヤホンを使っていた。Bluetoothなので、iPhoneからは切り離されたのだが、結局Bluetoothのコントローラーとイヤホンがコードでつながっているのでコードの呪縛からは解き放たれることはない。首にかけるものや後頭部に付けるタイプのものを買って使ってみたことはあるものの、存在感がありすぎて邪魔だったり、耳が痛くなったりしてよろしくなかった。

今度買ったこいつはそもそもコードというものが存在しないし、すごくコンパクトなので付けているのを忘れるときがあるのが心配なくらい。欠点といえば

  • イヤホン側だけで音楽の前の曲次の曲に移動できないこと
  • (前のBluetoothが8時間くらい持ったこともあり)バッテリの持ちが少し短かく感じられること

だがコードという面倒な存在が消えさったのがとても大きいのでよい買い物だった。片耳ばかりで聞いていると耳が悪くなってしまうのは心配だったから両耳用買ってしまっている。

デスク

IKEAで買って組立サービスで組み立ててもらった。引っ越した直後に組み立てたので場所があったが、そうじゃないと割と場所がいるので気を付けたほうがいいかもしれない。

ディスプレイ2枚並べて作業したいとか論文ちらかしつつ作業したいという欲求があるのだけど、横に長い机だと自分があちこち移動しないといけないので面倒。この机はL字型にできるので椅子のでくるくる回るとディスプレイを見るのと論文を見る、とかっていうのがシームレスにできてよい。また、別々に買ったものをL字型に組合せて使うと接続部分の段差が気になったりするが、このデスクの場合そういうことがなくてストレスなく作業できる(結構重要)。

確かここを見ていいなと思ったのであった。いいイスも買いたい...。

2013-06-12

core.typedを使ってみました

日本のClojure界隈では使ってみた系のエントリをほとんど見たことがない気がしますが、coreに最近入ったcore.typedを使ってみました。clojure自体のtype hintsは高速化には寄与するけど、型レベルの誤りなどを教えてくれるわけではありません。一方、core.typedは「コンパイル時に」型レベルのエラーを検知できます。最近、ネストしたリストなどを扱うことが多く、ネストのレベルを間違ってデータを突っ込んでしまうetcなどで困っていたので導入しよう、と思いました。

とりあえず練習用として、ネストしたvectorと再帰的な構造を例として書いてみました。

型レベルのエラーを出すことができるのもうれしいんですが、関数の引数の型を知ることができるのもうれしいところです。こんな感じで調べることができる。

(t/cf first)
(All [x]
     (Fn
      [(t/Option (I (Seqable x) (ExactCount 0))) -> nil]
      [(I (Seqable x) (CountRange 1)) -> x]
      [(t/Option (Seqable x)) -> (t/Option x)]))

clojureは例えばlistとかvectorのようなコレクション系の変数にはcollのような名前を付ける、とか暗黙的な命名規則(?)はあるけれども、型はないので保証まではしてくれない。だけれども、core.typeで型を付けておくと上のように変数の型を知ることができるので、何を投げればいいか実行せずともある程度知ることができます(これまではclojuredocからexampleを動かさないと分からない...ということ多数だった)。単純に型を付けることができるだけでなく、C++のtypedefのようなこともできるので、意味のある型の情報(例えばSeqableが入力でSeqableが出力、程度ではなくてDocument型からSentence型を返すなどの情報が分かる)を得ることができるのも重要なことかな、と思います。

2013-05-16

Jenkinsを導入しました

「testは書いてたんだけど、実行するの忘れいていつの間にかtestが通らなくなっていた...」とか「いつの間にかbuildできなくなっていた...」とかが多発したのでJenkinsを導入してみることにしました。あれこれ設定するのめんどくせぇ、ということでwarファイルを直接動かしている。~/.jenkinsとかに色々保存されている模様。jenkinsを導入したことで

  • いつこけるようになったかを知ることができるようになった
  • 通らなくなったのをそもそも早く知ることができるようになった
  • これらを無意識(これ重要)のうちにできるようになった

付近がうれしいことです。特にテストの時間がかかるようになったとかはテストを動かすの面倒...ということにつながってくるので、自動化できるとうれしい。自分はGrowl連携とかでやっています。

2013-05-05

Flickrのプロアカウントを取得しました

趣味となって8ヶ月くらいは経過した写真撮影ですが、割と続いています(割と早く飽きるかと思っていた)。そういうわけで、Flickrのプロのアカウントを取得してみました。プロアカウントだと

  • 枚数の上限なし(これはproじゃなくてもあるのかも)
  • サムネイル画像の生成
  • オリジナル画像の保持
  • ISOやF値などの情報(Exif)が表示(これはproじゃなくてもあるのかも)

などがあります。写真を撮ってもっと上達したいなぁと思ったらあると助かる機能なので、使っていってもっとうまくなりたい。

2013-04-31

ドラゴンボールZ 神と神を見てきた

ドラゴンボールの映画とか小学生(?)以来って感じですが、気になったので見てきた。

戦闘シーンとかは結構微妙な感じだったけど、ベジータが映画内でいいキャラになっていたのでよしとするw。

2013-04-25

「舟を編む」を見てきました

言語処理のアノテーター職人っぽい感じで見ていてよかった。

ただし、自分には向いていないように思う...。

2013-04-10

マクロを使って関数定義するときに関数にメタデータを付与する方法

タイトルがすでに複雑。マクロを使って関数を定義しまくるときに、関数にメタデータを付与したい。どういうメタデータを付与するかはマクロの引数によって決まるので決め打ちではない。以下のページを見ていると、vary-metaという関数がまさにそれっぽい感じであった。

これを使うと関数定義時にメタデータをばしばし付与することができる。

(defmacro def-fn-with-meta [meta-map func-name args & body]
  `(defn ~(apply vary-meta func-name merge meta-map) ~args ~@body))

(def-fn-with-meta {:feature-type "a" :bool true}
  func-a [x] x)

(meta #'func-a) ; {:arglists ([x]), :ns #<Namespace user>, :name func-a, :feature-type "a", :bool true, :line 1, :file "NO_SOURCE_FILE"}

これがどんなときに役に立つかというと、適用する関数をある基準で選別したい、例えば上の例なら

  • 素性のタイプがあるものだけフィルタリング
  • 戻り値がboolのものだけ使う

とか、そんなことを後々したいときに便利に使うことができる。Clojure、マクロと名前空間のあれこれを抑え始めると大分パワーが上がってくる気がする。

追記

この用途に関してはalter-meta!というそのままな関数が存在したので、それでよさそうです。

(defn hoge [x] x)
(meta #'hoge) ; {:arglists ([x]), :ns #<Namespace example>, :name hoge, :line 1, :file "NO_SOURCE_FILE"}
(alter-meta! #'hoge assoc :aaa "yeah!!")
(meta #'hoge) ; {:arglists ([x]), :aaa "yeah!!", :ns #<Namespace example>, :name hoge, :line 1, :file "NO_SOURCE_FILE"}

2013-04-09

テキストファイルを介さないでread.csvとかをやる

久しぶりにRです。しかし、最近Rを使わなさすぎる。。。ちゃんとした実験っていうより予備予備実験程度のものは出力のファイル名すら考えるのが面倒、さらにそれをplotするためのスクリプトのファイル名を考えるのも面倒ってことがよくあります(怠惰)。そんなときはスクリプトの断片とかをDayOneとか(人によってはevernoteとか?)にペタペタ張っていくんでしょうが、そういうときにデータとコードが分離してしまうのは、それをリンクして考えないといけないコストが発生します。つまり、csvみたいなデータもコード中に含めてしまいたい。しかし、Rのread.csvは文字列じゃなくてファイルを第一引数に取る...ということで少し考え込んだんですが、以下のようにtextConnectionを間に挟むとファイルっぽく見せてくれるようなので、便利でした。

raw_input <- "Number of documents, F-value
30, 0.418
50, 0.433
100, 0.472
200, 0.493
300, 0.506
342, 0.51"

d <- read.csv(textConnection(raw_input))
plot(d, type="b")

2013-04-04

出力を見つつ、同じ内容をメールで送る

「実験しながら結果は見ておきたい、しかしログにも残しておきたい」というような要望があったときにteeコマンドを使えば結果を見つつ、ファイルに出力する、ということができます。しかし、さらにパイプでつなぎたい場合(例えば結果をメールに転送しておきたい)はどうすればいいか?という場合にちょっと分からなくなったのでメモ。結論からいうと/dev/stderrに送ってやればよい。

lein run | tee /dev/stderr | mail syou6162@localhost

/dev/stderrで結果が表示されつつ、元の標準出力はmailのほうに流れてくれる、という仕組み。

2013-03-31

御所にお花見に行ってきました

本当は自転車であちこち見に行こうと思ったけど、平日で結構疲れていたので、御所だけ見に行くことに。年度末ということもあって死ぬほどの人込みを予想していましたが、御所はそんなに混みまくっているわけではなく、桜自体もいい感じだったのでいいときに行けたようです。

さくら1 しだれ桜 梅とか桃とか さくら2

望遠レンズが威力を発揮した! さくら3 さくら4

恒例の甘いものとかももちろん。 いえもん

よい年度末でした!

2013-03-21

finalを乗り越えろ、リフレクション入門

(よく知られた)黒魔術系です。よい子は安易には真似しないほうがよいらしいです。

Clojureはjavaの豊富なライブラリが使えてとてもよろしいのですが、ときどきjava側のライブラリの挙動を変更したくなります。with-redefなどで一時的に挙動を変えることやjavaのクラスを継承して元のソースを変更することなく、java側のライブラリの挙動を変更するという要望に応えることができます。しかし、java側のクラスに(protectedならまだしも)privateが付いていると継承できなくなってしまうので困ります。

javaはほとんど知らないので初めて知ったのですが、リフレクションというものを使うとそのようなprivateが付いたメソッドの継承やprivateのフィールドにアクセス、変更することが可能になるようです。いわゆる黒魔術系?もちろん非推奨の技術だとは思うけど、privateなメソッドのテストを書きたいときなどに使われるようです(このようなケースでテストを書くべきかについては議論の余地があるっぽいけど、今回は知らないものとして扱う)。

そんなわけでリフレクションを使いたい。javaでリフレクションを使ってprivateなメソッドやフィールドにアクセスするためには、まず

import java.lang.reflect.Field;
import java.lang.reflect.Method;

をしておきます。

privateなフィールドにアクセスしたい

例えばobjというオブジェクトのtextというフィールドがprivateで修飾されているけど、アクセスしたいという場合には

Field field = obj.getClass().getDeclaredField("text");
field.setAccessible(true);

System.out.println((String)field.get(obj));

などとやるとよいようです。getClassメソッドはオブジェクトの属するクラスを返すようなメソッドらしく(?)、継承元のクラスを得たい場合などはgetSuperclassメソッドをさらにチェーンさせればよいようです(getClass().getSuperclass().getDeclaredField("text");など)。field.get(obj)の戻り値の方はObject型なので、適当にキャストしてあげる必要があるようです。intが欲しい場合などはfield.getInt(obj)などとする必要があるっぽい。詳しくはjavadoc参照。

privateなメソッドにアクセスしたい

privateなメソッドにアクセスしたい場合も上記とほぼ同様です。Field fieldとやっていたのをMethod methodgetDeclaredFieldとやっていたのをgetDeclaredMethodとすれば動きます。呼び出したい場合はmethod.invoke(obj, arg1, arg2);という具合。clojureで もinvokeというのをたまに見かけるけど、リフレクションを使っていたのね。

ただし、privateなメソッドがstaticだった場合、これだけじゃいけないらしくしばらくはまっていました。欲しいメソッドの引数がStringだった場合

Method method = TargetClass.class.getDeclaredMethod("wantedMethod", String.class);
method.setAccessible(true);

という感じで指定して、呼び出す際には

method.invoke(null, "hogehoge");

などとやる必要があるらしい。インスタンスが必要ないからこういう感じか。

2013-03-09

夜の清水寺に行ってきました

花灯路の期間中ということで、高台寺と清水寺に行ってきました。きつねの嫁入りを見れたんですが、写真はうまく取りきれなかった。。。

夜なのになかなかの人込み。お祭りみたい。 人込み

レーザーが出ていてかっちょいい。 レーザー

ライトアップがされていて、デートにもいい感じです。 ライトアップ

清水寺でこんだけ人がいないっていうのも珍しい。 終わり間際 階段 静か

これ、最初に水面に映っているのに気がつかなかった。澄みきっている。 水面1 水面2

というわけで、夜の清水寺もいつもと雰囲気が違ってなかなか楽しめました。

2013-02-10

pptxのスライド1ページをpdfに変換して、LaTeXで書いたものに挿入

ご無沙汰です。大変忙しく過しております。スライドとか原稿を作りまくるお仕事ばかりでコードが書きたいです。

pptxで図を作っていて、そいつをLaTeXの原稿に挿入したいってことがありました。まず、pptの印刷のところを選択して、現在のページのみを出力します。そして、実際にプリントアウトするのではなく、プレビューでpdfを開くを選択します。そのままでよければpdfとして出力し、余白を削る必要などがあれば選択して、コピー、クリップボードから新規作成をします。

これでpdfはできるのですが、LaTeXから吐いたときに余白ができてしまって困りました。以下のページを参考にするとうまくいきました。

\begin{figure*}[htbp]
  \centering
  \includegraphics[mediaboxonly=/CropBox,scale=0.30]{hoge.pdf}
  \caption{I'm 6162!}
  \label{This is label}
\end{figure*}

とりあえずこれでうまく行った。Omnigraffleだったらこんなことをしなくても素直にやってくれるのに。。。

2013-01-26

京都水族館に行ってきました

関西方面にきていたyag_aysと京都水族館に行ってきました。8月に一度きたことがあるので、二度目の来館です。3回以上くることがあるなら年間パスを作っておくとよい感じだったので、作っておけばよかった。。。

京都駅から徒歩でも15分、市バスなら10分もかからずに着くところにあります。海がないのに水族館。 京都水族館1 京都水族館1

喧嘩してた。 アザラシ

癒し系笑顔。 癒し系

生まれて一ヶ月も経ってない赤ちゃんペンギン。ご飯食べてた。かわいい。。。 赤ちゃんペンギン

顔っぽく見える。 エイ

みんなで一斉にプールに向かっててシャッター切りまくっていた。 ペンギン1 ペンギン2 ペンギン3

イルカショー。あんまり前のほうに座ると水食らいます。 イルカ1 イルカ2 イルカ3

ちっちゃい子と握手したり。 握手

ヒトデマン。 ヒトデマン

クラゲは壁一面にこんな感じでイルミネーションみたいだった。 クラゲ

また行きましょう。

2013-01-23

LaTeXの原稿で"。、"を".,"に変換

この日記でもそうだけど、句読点は「。、」で書いている。でも、日本語の論文の原稿とかは「.,」であることが慣例である。IMEの設定とかEmacsの設定で変えてしまえばいいんだけど、変えるのはこの原稿だけでいいって場合がある。Omakeを使ってTeXのファイルをコンパイルしているので、その前処理でそういうのをやってくれればいいなと思ったのでメモ。置換しているだけ。hoge.texってファイルを編集していて、置換後のがfuga.texになっている。あとはいつも通り。

LATEX = platex
DVIPDFM = dvipdfmx
BIBTEX = jbibtex
DVIPDFMFLAGS = -p a4

LaTeXDocument(fuga, fuga)

fuga.tex: hoge.tex
.DEFAULT: fuga.pdf fuga.dvi

.BUILD_BEGIN:
    nkf hoge.tex | tr "。、" ".," > fuga.tex

2013-01-18

最近読んだ本

ちょこちょこ読んでます。

プロゲーマーの本は思ったよりすごかった。

職場の先輩が貸してくれた本。

本じゃないけど、これはよい買い物だった。ダメ人間製造機。

2013-01-13

実験するときに意識してることまとめ

重複または不足多々あるけど、忘備録的な感じで。

まとめ

  • 自分の記憶力を当てにするな
  • 再現性を確保しろ

前処理、後処理の仕方をログに残しておく

  • データの前処理をしたのは一ヶ月前で、粛々と実験してたけど、前処理変更が必要。あれ、この前処理どうやったっけ
  • 論文に貼り付ける図、csvファイルから作ってるんだけど、このcsvファイルはどのコマンドをパイプでつないで作ったファイルやねん...

というあるあるなこと。linuxのコマンドをペタっと貼っておくだけなんだからサボらずメモしておく。guiなソフトはこの辺、記録を元に同じのを作るのが不便なのでなるべくcuiで完結していたいところ。

gxpcなどでいくつものマシンにタスクを放り投げる際はコマンドの実行時から実行バイナリを上書きしてしまう可能性がありうる(ついさっきやってしまった…)ので、コンパイル済み or jarで固めたものは日付付きで取っておいて、そいつを指定するようにするとよいかもしれない。

ログを取る

標準出力とかに出しててもいいんだけど、いくつも並列で走らせてると覚えてるのが面倒。タスクの特徴を表すような名前のファイル(毎回考えるのが面倒ならある程度名前を表しているファイル名の生成規則で自動生成)にログを吐いたりすると後から安心して確認できたり、加工できる。多少多めにログを吐いておいたほうが何かと助かる。ディスク容量はあんまり気にしても仕方ない。ロガーを使いこなそう。容量が気になるのなら、全部終わった後に、目的のディレクトリに移動してtar zcvf hoge.tar.gz .などとやれば圧縮もできる。

コマンドライン引数、食わせたファイルなどの情報も必ず吐かせて再現性の確保に努める。

テストを書く

動作の保証にもなるし、バグったときの足がかりになるし、動的言語だと入出力の型はどういうの食わせればいいか分からなくなるし。100%どうにかできるというものでもないが、確実にコストはペイできる見込みがあるのにどうして書かないのか。

処理は小さめにまとめておく

前処理からパラメータ推定、デコード、グラフに出力とかまで全部一個のコマンドで済むのなら覚えておくことが一個だしよさげに見える。しかし、それは一回で済むのならという前提付きだ。そしてその前提は大抵成り立たない。実験は何回もやってうまくいくもんだし、グラフのlegendはよく変えたくなる。一個にまとまってるとどこかでミスをしていたときに全部やり直しになる。小さいのが複数あれば失敗したところからやり直せる。機能は細かく作ってcomposableなようにしておこう。

設定可用性を確保する

設定可用性なんて日本語があるのか知らないけど。実験の設定とかで変わりうるもの(食わせるデータ数、パラメータの初期値など)はとりあえず固定しておくのは簡単ではあるけど、あとあと変わってくるもの。with-redefとかを使いまくるのはよくないけど、必要な設定はあとでrebindできるようにしておこう。設定するのが面倒ならばディフォルト引数を与えるようにするとか色々やりようはある。コンパイルが必要な言語では設定ファイルは別のリソースディレクトリにあると便利だろう。

MCMC系は乱数のSEEDを意識するのは重要だし、shuffle関数とかもseedを与えれるものを作っておくと便利だろう。

2013-01-07

年末年始

今年の年末年始はあっちへこっちへ行っていました。濃密で楽しかったです(えっ、これから2月終わりくらいまで忙しいんだからいいじゃないですか...)。

東京へ

某イベントで友達と会うために東京へ。それぞれにお土産買ってたらすごい量になっていた。喜んでもらえたようでよかった。

cuteなやつはしお菓子 泊まってたホテル 23階はなかなかよい眺めだった

年越し

年越しは@yag_ays宅で。ガキの使い見てたら年があけてた。

年越し蕎麦

明けてから浅草寺へ初詣にも行った。

東京スカイツリー 雷門 よい天気 五重の塔 小舟町 大吉だった 非常に強力なあんこ

帰省

7時間くらいかけて新幹線で実家に帰ったけど、さすがに疲れた。実家ではゲームしたり、寝たりしていた。

刺身 エビチリうまい 実家にてゆびーと対戦 すーふぁみでぼんばーまん

北野天満宮&下鴨神社

彼女と初詣に行ってきました。あちこち行きまくって楽しかった。

長くて太いうどん 北野天満宮入口 今年は巳年です 下鴨神社 下鴨神社 今出川のカフェ 下鴨神社付近にて

まったり

今年もうまいもの食べていきたい。

お好み焼き 前菜 ケーキ 久しぶりのお酒

2012-12-30

2012年まとめ

職場では「2012年まとめ記事とか書くとあとで黒歴史化する」とか言われましたが、聞かなかったことにしよう。

本業

恐れ多くも企業研究者の一員になってしまいました(ひよっこながらも)。インターンで来てたときからも感じていたけど、本当に自由にやらせてもらえる職場で、周りに優秀な人ばっかりいる職場です。一日に三回くらいは「俺ここにいていいんだろうか?」って思うくらい恵まれた職場です。「俺くる(能力的な意味で)場所間違えたんじゃないんだろうか」とか「もしかして取る人間違えたんじゃね?」とか思いまくりですが、この環境で何もできないんだったら俺はどこでもやっていけないような気がするので、必死にやっています。修士の頃とはテーマが結構変わったので、今やっている分野の基礎事項が分かってなかったりして研究的にはまだ何もできていない状態に近いです。もどかしいです。(人的にも計算機資源などの意味でも)環境が素晴しいだけに、言い訳はできません。成果を残していくしかない、それだけ。

研修

始まる前までは、というより始まってからもしばらくは「早く終わって研究したい」とかしか思っていなかった研修ですが、終わってみると自分の中に大きく影響を与えていることが分かります。特に同期の仲間ができた、というのは大きいことです(うちのロケでは同期が自分以外1人しかいないから...)。バックグラウンドや今やってる仕事はもう全然違うけど、販売研修を通して同じ苦労喜びを分かちあった仲間ができたというのは自分にとっての財産となりました。今でもときどき相談とかに乗ってもらっているし、人間的にも尊敬できるやつばっかりなので、今後も仲良くしていきたい。

あと、販売研修という大変つらくもあったものを通して人間力というかコミュニケーション力というかその付近のところに自分の中で大きな変化があったように感じています。NAISTでずっと研究やってたらこれは感じれなかったことだと思う。自分の枠を広げていくうえでこれは大事なものになっていくと思うので、もっとうまく自分の中に取り込んでいきたい。

プライベート

例年になく充実していました:)。基本的に引き込もりな性格だけど、8月にカメラを買ってからこの日記にも書いているように色んなところに行きました。一緒に行く人がいたから楽しかったってのもありますし、来年もまた色んなところ一緒に行きましょう。よろしく。会社のロケが京都で本当によかった。

あと、小説とかも近年には珍しく読むようになってきていて、これも継続して読んでいきたいな。

2012-12-28

読了

しばらく通勤読書がおざなりになっていたけど、復活させた。

出たばっかりに買ってみた。

あの二人がついに...!不器用な彼等がああなってくれてよかった。

2012-12-15

Destructuring with clojure

letの車輪の再発明。On Lispの勉強中なのです。パターンマッチとかできるようにして、クエリコンパイラとか作りたい(core.matchでできるとか言うな、そこ)。

まず、こんなのを

(destruc '(a (b c) d) 'seq 0)

こんな感じで

((a (clojure.core/nth seq 0))
 ((G__9671 (clojure.core/nth seq 1))
  (b (clojure.core/nth G__9671 0))
  (c (clojure.core/nth G__9671 1)))
 (d (clojure.core/nth seq 2)))

変形させる関数を用意。

(defn atom? [x] (not (seq? x)))

(defn destruc [pattern seq-name n]
  (if (empty? pattern)
    nil
    (let [r (cond (atom? pattern) pattern
                  (= (first pattern) '&) (second pattern)
                  :else nil)]
      (if r
        `((~r (drop ~n ~seq-name)))
        (let [p (first pattern)
              rec (destruc (rest pattern) seq-name (inc n))]
          (if (atom? p)
            (cons `(~p (nth ~seq-name ~n))
                  rec)
            (let [v (gensym)]
              (cons (cons `(~v (nth ~seq-name ~n))
                          (destruc p v 0))
                    rec))))))))

次に、上で生成されるようなネストしたリストをネストしたletに割り当てるような関数を用意。

(defn dbind-ex [binds body]
  (if (empty? binds)
    `(do ~@body)
    `(let ~(->> binds
                (map (fn [b] (if (seq? (first b)) (first b) b)))
                (apply concat)
                (vec))
       ~(dbind-ex (->> binds
                       (map (fn [b] (if (seq? (first b)) (rest b))))
                       (apply concat)
                       (vec))
                  body))))

こんな感じのを

(dbind-ex (destruc '(a (b c) d) 'seq 0) '((+ x y)))

こんな感じに変形できます。

(clojure.core/let [a (clojure.core/nth seq 0)
                   G__9030 (clojure.core/nth seq 1)
                   d (clojure.core/nth seq 2)]
                  (clojure.core/let [b (clojure.core/nth G__9030 0)
                                     c (clojure.core/nth G__9030 1)]
                                    (do (+ x y))))

あとは、これを包んでやるマクロを書くだけ。

(defmacro dbind [pat s & body]
  (let [gseq (gensym)]
    `(let [~gseq ~s]
       ~(dbind-ex (destruc pat gseq 0) body))))

letとできること同じだけど、これはこれで面白い。

(dbind (a b c) '(1 2 3) (list a b c)) ; (1 2 3)
(dbind (a (b c) & d) '(1 (2 3) 4 5) (list a (list b c) d)) ; (1 (2 3) (4 5))

今度はパターンマッチをやってみよー。

2012-12-08

神戸ルミナリエに行ってきました

というわけで行ってきました。久々の神戸。

京都駅から特急で一時間くらいで着くので意外と近い。研修でお世話になっていた付近のビル周辺にあんなすごいのができるとは思ってもみなかったのでびっくりしました。 入口付近 ガラスに反射してめちゃくちゃ綺麗

番外編

神戸は研修のときにうまいお店を結構知ることができたので、うまいところにもまた行ってきました。

洋食のアサヒ。あそこのビフカツは本当においしい。 アサヒのビフカツ

元町駅前の海鮮丼。安いしおいしい。 海鮮丼

2012-11-18

高台寺に行ってきました

高台寺

そろそろ京都の紅葉を取りに行かねば...!ってことで高台寺に紅葉を取りに行きました。今週から3週間くらいがどうやら紅葉のピークっぽいけど、人手もピークっぽいので市バスとかは死にそう。

高台寺入口 高台寺周辺 お線香1 お線香2 大仏 大吉 猛烈に欲しがっている鯉 紅葉1 紅葉2 紅葉3 紅葉4 龍1 砂がすごい 赤がすごい 竹林 紅葉5 うしー 京都っぽい通り

はこぶキッチン

はてなインターンのときのお世話になったさっこさんがやられているHACOBU KITCHEN@五条に遅めの昼御飯に行ってきました。名前覚えててもらえて嬉しかったw。相変わらずのおいしさだったので、また来たいなーと思います。

はこぶキッチン入口 はこぶキッチンカレー おからチーズケーキ おからクッキー

その後は京都国際マンガミュージアムに行ってスラムダンクを読み漁ったり、夜はやきうどんを食べて帰ってきました。

やきうどん

最近へ平日のペースで休日もいると死ぬなって思うことが多いので、休日は意図的に外に出ることを多くしています。学生のときがいかにオンオフの切り替えができていなかったかという。。。

ソートでshuffle

sort -rとかってやるとシャッフルしてくれるので便利なんだけど、Macのsortにはこの機能がないっぽい。そういうわけでsudo port install coreutils

% echo "hoge\nfuga\npiyo" > tmp.txt
% cat tmp.txt
hoge
fuga
piyo
% cat tmp.txt | gsort -R >! tmp.txt
% cat tmp.txt
hoge
piyo
fuga

オンラインアルゴリズムでシャッフルが必要なときに、とか。

2012-11-14

無名再帰関数をメモ化する

以下の問題点などがあって、タイトルのようなことをやってくれるものが欲しくなった。

  • Clojureのmemoizeは再帰関数にはメモ化してくれない
  • 再帰関数に名前が付いていれば(普通は付いていると思うが...)、メタデータにくっつけてメモ化することも可能
  • しかしながら、上の方法を使っても無名関数だと厳しい...

そもそもなんで無名の再帰関数をメモ化するような事態があるかというと、CYKアルゴリズム(文が与えられたときに、その文を作る確率最大の文脈自由文法はどれか、みたいなのを動的計画法を使って効率的にやる方法)みたいなものをtable使うんじゃなくって再帰っぽく書きたいから。フィボナッチみたいな例だとglobalに一つそういう関数があればよいが、CYKアルゴリズムみたいなものだと文毎にそういう再帰関数が必要(なので無名にしたい)。tableを使ってもいいんだけど、関数型で書いているとどうにも合わないので。。。


ここでは簡単のため、フィボナッチ数でやってみる。まともに全展開してしまうとそりゃまぁ時間がかかります。

(->> (range 35)
     (map (fn fib [n] (if (< n 2) n (+ (fib (- n 2)) (fib (- n 1))))))
     (dorun)
     (time))
; "Elapsed time: 1882.521 msecs"

globalにはfibって名前を付けないけど、メモ化するときにはその名前が必要...。というのをあれこれ考えていたらwith-local-varsというのでそれができそうだった。

(with-local-vars [fib (memoize
                       (fn [n] (if (< n 2)
                                 n
                                 (+ (fib (- n 2)) (fib (- n 1))))))]
  (time (dorun (map fib (reverse (range 35))))))
; "Elapsed time: 1.132 msecs"

無名のvarを作ってくれるそうな(letはvarを作ってくれないことに注意)。CYKみたいなのは相互再帰の形になっているので、単純にこれが適用できるかは分からないけど、足掛かり、ということで。

現在のところ、こんな感じだったら解決できるんじゃないかと考えている。

(def ^:dynamic fib)
(binding [fib ...] ...)

本日の衝撃

Clojureでは無名関数に名前が付けれた。これはびびった。

((fn fib [n] (if (< n 2) n (+ (fib (- n 2)) (fib (- n 1))))) 10) ; 55

2012-11-07

読了

思っていたよりも、ずっともっとベタベタだった。

はー、読んでるこっちが辛くなってきた。

2012-11-06

ひらかたパークに行ってきました

遊園地とか何年(10年?)振りだよって感じでちょっと懐しかった。

ひらパー

思ったより小さめの遊園地で、ジェットコースター系のやつ、3回くらい同じの乗ったしていた。調子に乗りすぎたようで、後半は割とクラクラになっていた。三半規管が弱くなっている。。。

2012-11-05

読了

3-4日かけて一冊を通勤で読むことが最近多かったんだけど、1日で読んでしまった。

やっぱり高校スポーツ、大好きだなー。3年間の思いを1つの試合にかけるっていうあのはかないような、あの独特の空気が好き。

2012-11-04

lein2で無理やりライブラリを再ダウンロードさせる

自分で作ったライブラリのバージョンは上げたくないんだけど、少し変わった、みたいな場合のときに(ディフォルトだと1日に一回しかclojars.orgとかを見に行ってくれない)。

lein -U deps

ikoma sicp再開します&&図形言語のエッセンス

各位忙しかったり何だかんだで止まっていたsicp勉強会ですが、ozaさんに声をかけてもらったので再開することにしました。

Clojureでやる際に図形言語が面倒だったのですが(というかswing)、そこは再開のときは飛ばすことにしました。自分は図形言語を一応やっていたので、そこの付近のエッセンスについて書いておくと、「入力と出力の型を一緒にしておく」ってことがこの付近のエッセンスだったと思います。clojureはhaskellみたいに型を書かなくていいけど、逆に書かないことによりその付近を意識できなくなってしまうので、少々厄介なところ。図形言語で言うと「ペインタをbeloやbesideしたものもまたペインタである」というところを強く意識すると得るものがかなりあります。

上の考え方が役に立った例だとshift-reduce parsingがあります。shift-reduce parsingはstackとqueue(まとめてconfigurationと呼ぶ)に対してleftとかright、shiftやreduceといった操作をしていくのですが、これらの入力も出力もconfigurationになります。このことを考えると、初期のconfigurationからleftとかshiftとかを合成することが可能になってきます。

つまり

(reduce (shift (left config)))

みたいに書いていたものが

((compose reduce shift left) config)

といった風に書けるということです(関数を合成して、まとめて適用している)。できることは同じですが、関数のリストを一気にcomposeして、といったことができるようになってくると色々見通しがよくなってきます。この辺の考え方はhaskellをやると分かりやすくなった気もするし、モナドは下の本でやっと分かるようになってきました。

2012-11-02

読了

とてもよかった。続きが気になるから早く読みたいけど、終わって欲しくもない。

ところで、この本kindleでも読めるようになってる。

2012-10-31

限度額

今月やたらと研修で東京に呼び出されていたら、帰りの新幹線が限度額越えたということで予約ができない事態が発生。。。しかし、これでしばらく東京へは行かなくていいはず。

clj-logging-config

できることはそんなに変わらないけど、使いやすさが上がっていてよい。研究だと引数に何指定したときにどういう結果が出たとか、意識しなくても勝手にlogが残っていく、みたいな感じだと理想的かな、と思ったりているので、そんなのを実現するために。

2012-10-28

What's Wrong???

係り受け解析とかアライメントとかある程度高次のNLPのタスクを扱っているとエラー分析が割と大変になってくる(CoNLLのフォーマットだけ見てエラー分析はつらい...)。どう改善すればよいかの糸口を得るためにもエラー分析は重要。それをビジュアルにできるツールがあるので紹介。

同時解析とかJoint Inferenceとかの研究で有名なSebastian Riedelさんが作ったツール。

  • syntactic dependency graphs
  • semantic dependency graphs (a la CoNLL 2008)
  • Chunks (such as syntactic chunks, NER chunks, SRL chunks etc.)
  • Bilingual alignments
  • BioNLP events, proteins, locations

などなど、shared-taskをベースにしてやる人にはありがたいツールである。ちなみに、こんな感じの出力が出る。

bionlp09 CoNLL2003

黒はgoldのデータと予測したものが一致した箇所、青は(予測のほうは外れてて)goldが出したところ、赤は予測のほうが外して出しちゃったやつ、となる。ちなみにdependency parsingの出力をclojureから出すだけならこんな感じで割と簡単にやることができる。

2012-10-26

読了

はー、ベタベタでよかった。別冊も引き続き読みたい。

2012-10-18

読了

よいのだけれども、朝からにやけてしまうので通勤の読書に向いているか分からなくなってきたw。

2012-10-13

まどマギ映画

気晴らしに遊びにでも行かんとやってられん、ってことでまどマギの友達と一緒に前後編を一日で見てきました。

今日から後編が見れるようになったってことで結構混んでいた。。。さやかに妙に感情移入してしまっていた。

2012-10-12

ex-ic

研修の移動で新幹線をよく利用することになりそうなのでex-icを使うようになったのだが、直前でも予約できてなかなか便利。ただ、スマホだと若干使い勝手が悪いなぁ。。。

あと、icocaをsmart icocaに進化させた。

読了

笠原いいね。展開的に続きが気になってきた。

3巻以降を買った&貸してもらった。

2012-10-07

Clojureで多クラス分類器

今年の春の開発合宿でFOBOSを使ってお手軽単語分割器を書いた(デモはここに置いてる)のだけど、そのときには2値分類器を作っていた。そういえば多クラス分類器は作ってなかったなーと思ったので、これをベースにして作った。

といっても1 vs restでやるだけの簡単なやつです。でも、clojureだけで動くと何かと便利なので。libsvm形式とかに一回用意しないといけないとかは面倒だけど、このライブラリだと

(def training-example
  [["A" ["hoge" 1] ["fuga" 1]]
   ["B" ["piyo" 1] ["nyan" 1]]
   ["A" ["hoge" 1]]])

みたいな形でデータとラベルをつっこめるような感じにした。

2012-10-06

24を見た

毎回気の抜けないストーリー展開だったので、見終わって非常に疲れた。。。色んな正義が交錯。

2012-10-05

Clojureでtemp fileを操作する

with-openっぽくやりたいですよね、ってことで。

(require [clojure.java.io :as io])

(defmacro with-temp-file
  [[varname & [content]] & body]
  `(let [~varname (java.io.File/createTempFile "stevedore", ".tmp")]
     (when-let [content# ~content]
       (io/copy content# ~varname))
     (let [rv# (do ~@body)]
       (.delete ~varname)
       rv#)))

;; 使い方
(with-temp-file [file-obj (str (repeat 100000 "content"))]
  (.length file-obj))

leinでlocalのjarを参照する

clojarsとかに入っていなかった場合などなど。ここではJavaのハイパフォーマンスなコレクションのライブラリであるTroveのjarをleinで追加したい場合を考える。以下のリポジトリを使う。

project.cljにこんな感じで記述する。

(defproject seq-dep "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [fobos_clj "0.0.2"]
                 [gnu/trove "1.0"]]
  :plugins [[lein-swank "1.4.4"]
            [lein-localrepo "0.4.1"]]
  :java-source-paths ["src/java/"]
  :main seq-dep.core)

これでいい感じにjarを配置してくれる。

% lein localrepo install src/java/lib/trove.jar gnu/trove 1.0

2012-10-03

読了

2012-10-01

  • 今年度も下期に突入
  • 10月はやたらと研修があって、何回も東京に行かないといけない
    • 京阪奈はこういうときに少しあれだ

2012-09-30

hulu

台風がきていて外に出れねーと思っていて気がついたらアカウントを作っていた。

2012-09-28

生のJavaファイルをClojureから使う

例えばこの辺をclojureから触りたいなーって思ったとしよう。こいつはjarで固められていないので、自分でどうにかしないといけない。そのやり方とかがちょっと分からなくなったのでメモしておく。

まず、project.cljを用意する。java-source-pathsとかをきちんと書いてやる。

(defproject hoge "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [log4j/log4j "1.2.16"]
                 [commons-primitives/commons-primitives "1.0"]
                 [org.yaml/snakeyaml "1.5"]
                 [net.htmlparser.jericho/jericho-html "3.1"]]
  :java-source-paths ["edu/"])

(cljファイルではなく)javaファイルをコンパイルする。若干警告が出てるけど、気にしない。

% lein javac
Compiling 95 source files to /Users/yasuhisa/Desktop/umass-nlp/src/main/java/hoge/target/classes
注:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。

このディレクトリで

% pwd
/Users/yasuhisa/Desktop/umass-nlp/src/main/java/hoge/target/classes

こういう感じのクラスパスを付けてあげれば動く。これでとりあえずjarが提供されていないようなものについても触れるようになったのでちょっと安心である。

% java -classpath /Users/yasuhisa/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar:/Users/yasuhisa/.m2/repository/commons-primitives/commons-primitives/1.0/commons-primitives-1.0.jar:. edu.umass.nlp.examples.HMMTest

2012-09-26

git rebase関係

つぎはぎになっていた付近をきちんとgitに追加していく簡単ではないお仕事。「あー、あのコミットに追加しそこねた!!」ってやつがあったときに初めてgit rebaseを使った。ここが分かりやすかった。

基本的には書き換えたいコミットの一つ前に戻ってgit commit --amend、終わったらgit rebase --continueしていけばよい。ミスったらgit rebase --abortで戻れます。


rebaseするときにとりあえずstashで退避しておいて、戻したらconflictってことがときどきある。そのときはファイルを選択してcheckout、みたいなことができる。

git stash list

で今あるスタッシュのリストを見て、具体的なファイルの変更点が知りたかったら

git show stash@{0}:test/PivotGenerativeModel/test/util.clj

で見ればよく、戻したかったらこんな感じで戻せる。

git checkout stash@{0} test/PivotGenerativeModel/test/util.clj

読了

2012-09-25

Linuxで同じファイルを書き換える

例えばfile.txtっていうファイルがあったときに、行毎にシャッフルしてから同じfile.txtにまたそれを書きたい。nkf --overwriteみたいなことがしたい。リダイレクトだとそういうことできないのかと思って中間ファイルを作っていたけど、ちゃんとありました。

% echo hoge fuga piyo > test.txt
% cat test.txt
hoge fuga piyo
% echo xxxxx >! test.txt
% cat test.txt
xxxxx

Gitで日本語ファイル名を扱う

普段ならそんなことしないんだが、会社的な都合でファイルの命名規則が決まっていたりする場合があって、そういうとき用に。以下で設定ができる。

git config --global core.quotepath false

2012-09-24

HandBrakeのCUIで字幕を埋め込む

以前はGUIでポチポチ押していってたんですが、やる量が多くなると面倒なことこの上ないので自動化自動化。

こんなスクリプトを適当に書きました。字幕を埋め込みにしないとiPhoneじゃ見れないのでちょっと苦労した。

読了

読み終わった。面白かったので、続きも買おっと。

最近、朝の通勤時間は読書時間に割り当てられております。

2012-09-22

関東に遊びに行きました

これまた一ヶ月くらい前の(ry、ですが。夏期休暇を使って東京に行きました。主に人と会っていたのですが、人の写真は勝手に上げれないので必然的に食べものの写真ばかりに。横須賀の刺身がおいしかったです。パンは渋谷の駅に最近できたパン屋さん。

きゅうり サラダ ハモ 刺身

最後はビール飲んでた。

京都、自転車旅

もう一ヶ月前くらいですけど、カメラの練習がてら(最近そればっかりですw)京都市内を自転車で周りました。この本を参考にしてルートを決めました。

出発

当日乗って行った自転車

八坂の塔

八坂の塔

円塔公園

円塔公園

八坂神社

京都っぽい雰囲気の人力車

御所

御所

ご飯系

昼御飯 白玉

夜景

月 京都タワー 夜景

2012-09-21

コマンドラインユーティリティツール群

調べものしてたら便利そうなの見つけた。

Rとかを使っていたら、meanとかsdとかsummaryとかやりたくなってしまうから

# alias for stats functions
for f in mean sd max min
do
    alias $f="R --vanilla --slave -e \"x <- scan('stdin', quiet=TRUE); cat($f(x), fill=TRUE)\""
done

とかやっていたのだけれど、上のちっちゃいユーティリティツールみたいなののほうが使い勝手よさそう。

JSONで配列のある要素の統計量取りたい、みたいなときとか

% cat all.json | jsonrb 'puts self.map{|doc| doc.domain}' | summary
N = 26147       17 unique values
Min   :  0
    25:  4
Median:  7  Mean: 7.757     SD: 4.901
    75:  11
Max   :  16

のようにできて便利。別に普通にスクリプトを書けばいいんだけど、ワンライナーでできるっていうのがいいところ。他にはこんなのが入ってた。

  • approxwc => すんげーでかいファイルの行数とかおおまかに知る
  • dateseq => 日付連番を作る
    • dateseq 2012-09-21 2012-09-30
  • jsonpp => json整形してくれる
  • mapagg => 入力の各行に対して何かやって、何かにまとめる。map reduceっぽい何か
  • summary => Rのsummaryっぽい表示をしてくれる

2012-09-19

画像の縮小

markdownは画像のサイズを指定できないっぽいので、カメラで取った写真をそのまま貼るとアホみたいにでかくなる。というわけでその前に縮小したい。いっぱいあるのでコマンドラインで一括処理。

# convertコマンドはが入っていないなら以下で入れる
sudo port install ImageMagick +lcms +jpeg2
ls IMGP*.jpg | xargs -I@ convert -resize 20% @ shrinked-@

2012-09-18

コマンドラインで簡単にお手軽markdownブラウザを作る

markdownのviewer(?)で何を使っているかと聞かれたので。

cd ~/bin
wget --no-check-certificate https://gist.github.com/raw/152480/41cf559e358fd4dc505af6679d382c3a5bcda3ad/kansit
sudo gem1.9 install kramdown
kansit -s "**/*.md" -c "kramdown < hoge.md  | nkf -w > test.html && open -g test.html"

これで自分の好きなエディタを使いながら、リアルタイムpreviewできるからそれでもうよくね?

2012-09-17

鞍馬と貴船に行ってきました

祝日ということだったので、友達と鞍馬と貴船に遊びに行ってきました。カメラの練習という意味を込めて写真多めでお送りします。

出発の出町柳駅。叡山電鉄には初めて乗りました。

出町柳駅

京阪奈も静かなところですが、いつもよりさらに静かでした。

貴船駅

下を川が流れている。雨天時は中止。

貴船神社入口1 貴船神社入口2 貴船神社1 貴船神社2

水占い。何も書いてないけど...?

水占いbefore

水に付けると出てきました。大吉!

大吉

突然のそうめん!

人生初めての流しそうめんを体験しました。思ってたよりもどんどんくるので、写真取るの交代しながらじゃないと無理w。

ひろ文 そうめん待ち そうめんセット そうめん1 そうめん2 そうめん3 そうめん4 そうめん5

鞍馬寺

天狗1 天狗2

お寺入口 ケーブルカー1 ケーブルカー2

のぼっている途中 本殿 上からの景色

2012-09-16

compojureでrestartかけずにファイルの反映をさせる

起動になかなか時間がかかるので。。。[ring-reload-modified "0.1.1"]をproject.cljに記述して。[ring.middleware.reload-modified]をuseした後に

(def app (wrap-reload-modified #'routes ["src"]))

などとやればおk。