D-7 <altijd in beweging>

Day to day life of a Perl/Go/C/C++/whatever hacker. May include anything from tech, food, and family.

tl;dr: 別にPerl捨ててないです。Perl大好き。俺はLLはPerlでいい。でも別ドメインの事もやってもいいよね!

Rebuild.fmに限らず、公の場でYAPC/Perl以外の話をする事があるとは正直思っていなかったが、このたびRebuild.fm ep 42に置いて1時間Goについてしゃべりまくってきた。1時間ぶっつけ本番でしゃべりたい事はだいたいしゃべってきたのだけど、その後のフィードバック等もふまえてまとめておきたいと思ったのでこのエントリでまとめてみます

続きを読む
    このエントリーをはてなブックマークに追加 mixiチェック

長男1歳9ヶ月、次男3ヶ月半。今月から次男が長男と同じ保育園に行くようになった。

保育園不足が叫ばれる中無認可とは言え二人とも保育園には入れた事は喜ぶべきことだが、残念ながら保育園のある場所が微妙な距離。大人の足で30分強くらいの距離。残念ながらバスなども直接保育園の位置までいく路線がない。これまで長男だけの時は長男をベビーカーにのせて行きは歩き、帰りはバスを乗り継ぐという方法を使っていたが、ベビーカーの幼児一人だけでも辛いのに、今度からは次男はエルゴで抱えることになるのでバスは正直きつい。

というわけで2週間ほどこれまでと同じように長男をベビーカー+次男はエルゴで徒歩で送り、帰りは諦めてタクシーに乗るということをしていた。正直次男は保育園に入れる予定はなかったのでベビーシッターを覚悟していたためタクシー代くらいはまぁいいかと思っていた。

・・・が、もうとにかく行きも結構辛い!タクシーの乗り降りも楽じゃない!うがー!ということで自転車を考えていたところ、この間「電動自転車いいよ!」と最後のプッシュをもらったので翌日にさくっと購入して、今週から乗り始めている。

結論: 最初からこれにしておけばよかった!

ということで以下を買った:



なにがいいって、とにかく色々考えられているのを感じる。子供を抱いていたりしても簡単に乗れる程度の間口があるし、全体的に低い車体になってるのもいいし、コントロール系もキレイにまとまってるし、安定度も抜群。アシストもすごく良い感じの調整をしてくれる。今はオプションでカゴをつけてるだけだけど、次男が大きくなったらもう一個席を前につけられるのも良い。

これまで子供を途中で歩かせたりして40分〜50分かかってたのが15分弱でつけるし、もーうとにかく楽の一言につきる。電動アシスト自転車の値段で躊躇してしまってたけど、これはもっと前に買っても良かったわ・・・。超おすすめです。

DSC03606



そして何より息子が超気に入っている。保育園についておろすと「もっと乗せろ〜」と大泣きを毎回しているくらい気に入っている。これからも登園時の自転車を好きだといいなー
    このエントリーをはてなブックマークに追加 mixiチェック

このところ情熱を燃やしていた go-xslate プロジェクトですが、大分使えるようになってきたしかなりの処理速度も出るようになったしgo-nutsで宣伝もしたし、小さいプロジェクトで使い始めたし・・・ってことで 手軽に遊べる用に Go PlaygroundをぱくってGo-Xslate Playgroundってのを書いた。

外部テンプレートを使うWRAPPERやINCLUDEは使えないけど、それ以外の機能は一通り使えるはず。是非遊んでみて、問題がありそうだったら "Share"ボタンを押してpermalinkを作成の上、permalinkをissueにはりつけて教えてください。よろしくお願いいたします。

ちなみに書いたそばから mattnさんにぱくられたけど、自分もぱくってるし、ぱくられたのは良い物を書いたからなのでつまり全体的に大変よい。なおGo-Xslate Playground自体のソースはこちらにあります。なにか問題等ありましたら教えてくださいませ。
    このエントリーをはてなブックマークに追加 mixiチェック

なんか前回長男が楽しんでいる絵本という記事に予想以上のアクセスがあったので、本が増えて読んでほしい本のリストが少し変わってきた長男の楽しんでいる本をミニランキング形式で紹介します。

前回から引き続き楽しんでいる本たち

まず、前回から引き続き楽しんでいる本たち:「だるまさんと」とそのシリーズ、「おつきさま こんばんは」このあたりは相変わらず読んでます。

第五位「はたらくくるま」有沢重雄



これはまぁ・・・男の子はなぜか好きなはたらくくるま系ですね。うちの息子はなぜか「バス」が大好きで、もう道すがらバスが横を通るとなぜかずっと「バス!バス!」と連呼してます。なのでそれ以外のページをどうやって楽しませるかが勝負、みたいな本になってます。

第四位 「いないいないばあ」 松谷みよ子



まぁこれもクラシックですね。Amazonでは「発売から40年以上愛されている、日本で一番売れている絵本です」とまでありますね。こんなにシンプルなのになぜ受けるんだ。赤ちゃんは奥が深い

第三位 「わんわんおかお」 とよたかずひこ



犬やら豚やら猫やらの顔や体の部位について「○○はどこですか?」と問いかけるタイプの本。うちの息子は「おみみ」と「おめめ」が聞き取りづらいらしく時々その二つは間違えるが、基本的にはもうそれぞれの部位の名前はわかってくれている模様。

第二位 「がたん ごとん」安西水丸



もう「のせてくださーい」という台詞と最後に全員汽車から投げ出される絵を見たいというだけなんだと思います。「のせてくださーい」って読む度に笑う。

第一位 「きんぎょがにげた」五味太郎



これももう昔からあるヤツですね。きんぎょを追っていくのはもちろん、いろんなものがあふれた部屋の中で「象さん」「キリンさん」「くつした」「帽子」などの他のものを探してもらったり、聞き手の息子のほうがページをめくるとまずきんぎょを手で隠したりとさまざまなバリエーションで楽しめています。あと長男はなぜか「ビスケット」指差してそれと答えてあげると受ける。なんでだ・・・

毎晩読んでるから息子のほうもそろそろ飽きそうなもんだけどな・・・





今回はこんな感じ。全体的に自分からいろいろ指差せるタイプの本がお気に入りの様子ですね。でもおかげで語彙がちょっと前に比べてだいぶ豊富になってきた様子。



番外編 「おふとんかけたら」かがくいひろし



こちら、前回の圧倒的一位の「だるまさんが」しりーずのかがくいひろし氏の作品で我々親が「もっとうまく寝てくれないかなー」と思いつつ買ってきた本なんですが・・・なんだろ、もう少しうけてもいいかなーと思ったんだけどあんまりうけません。きっと対象年齢がもう少し上なんでしょうね。中に出てくる「トイレットペーパー」「ソフトクリーム」等はまだ一人でトイレにいかないしその手の甘いものも食べさせてもらえてない息子からすると「これはなんだ?」状態なのでしょう。唯一「ありさん」が出てくるところは声を落として読むので大受けしてくれます。
    このエントリーをはてなブックマークに追加 mixiチェック

3年たって思い起こすと、まだ当時は長男が産まれていなかったので本当に気持ちが楽だった。子供がいたらもっともっと辛いよなぁ。
3/11 の思い出
会社の比較的近くに住んでいたり、妻と自分二人とも健脚で歩くこと自体は何も問題がなかったり、家のあたりに停電等にもなかったり、本当にラッキーだった。
    このエントリーをはてなブックマークに追加 mixiチェック

golangでNgram処理をするためにgo-ngramを書きました。ngramによる類似文字列検索に関してはコードを読みながら逆算してこういうことか、という書き方をしたのでちょっと実装に自信はないのですが、まぁだいたい動くな、というところまでは確認しました。問題がありそうでしたら是非ご連絡ください。

使い方は以下の通り。まずただngramでトークナイズするならngram.NewTokenize()を使います。以下はいわゆるTrigramを使った例:

import (
"fmt"
"github.com/lestrrat/go-ngram"
)
func main() {
tok := ngram.NewTokenize(3, "ハローハローハロー") for _, token := range tok.Tokens() {
fmt.Printf("token = %s\n", token)
}

ちゃんと日本語も対応してます。

ユニークなトークンだけがほしい場合はTokenSet()を使ってください。
import (
"fmt"
"github.com/lestrrat/go-ngram"
)

func main () {
tok := ngram.NewTokenize(3, "ハローハローハロー")
set := tok.TokenSet() // see http://github.com/dackarep/golang-set
for x := range set.Iter() {
fmt.Printf("token = %s\n", x)
}
}

一応簡単なインメモリインデックスも作りました

import (
"fmt"
"github.com/lestrrat/go-ngram"
)

func main() {
index := ngram.NewIndex(3)
index.AddString(`....`) // 検索対象の文字列を登録しておく
....
matches := index.FindSimilarStrings(`ハロー`) // AddString()された物の中から`ハロー`に似ている文字列を持ってくる
for _, str := range matches {
fmt.Printf("matched %s\n", str)
}
}

これで登録されている文字列の中から似た単語を抽出できます。 デフォルト設定だと一個でもngramがマッチするとあたってしまいますが、SetMinScore()で閾値を設定することによって検索結果を絞り込めます。

さらに、一番良いマッチだけを持ってくる場合にはFindBestMatch()を使ってください。

あと自分で検索結果をフィルターする場合はIterateSimilar()を見てください。

ツッコミ、コメントお待ちしております。
    このエントリーをはてなブックマークに追加 mixiチェック

ちょっと前から私が関わらせてもらっているThe Perl FoundationのGrants CommitteeはPerl関連で広い範囲において有用性が認められるプロジェクトにたいして定期的に助成金を交付しています(詳細はこちら)。基本的に誰でも応募可能です(応募方法はこちら)。

この活動ルールにいくつか変更が加えられました(原文はこちら)。なおTPF Grants Committeeには現在自分とMakoto Nozaki(筆頭メンバー)さんの二人の日本人が関わっておりますので、日本からの応募が今までのどの時点よりも通りやすい(便宜を図るという事ではなく応募に不備があった場合などの対応について日本向けの対応がちゃんとできるという意味です)ので、皆様是非ご検討ください。

なお変更内容については以下の通りです:

1. 二ヶ月おきに応募審査が行われる

これまでは四半期ごとでしたが、 もっと頻繁に審査・受付が行われるようになります。

2. 助成金の上限が大幅にあげられました

これまでは$3000が上限だったのですが、これが$10000まであげられました。原文には「上限がなくなった」ともありますがその後に書いてあるとおり諸々の理由により規則上は$10000が上限です。ただしこれは「お金があれば」なので、その時々によって交付可能な助成金の上限は変動します。

重要な事なのでもう一度書きますが、応募方法はこちらです。英語や応募方法に関するヘルプが必要な場合は@lestrratまでご一報ください。皆様のご応募をお待ちしております!また、この制度を活用できそうな人にこの情報が届くように拡散していただけると助かります。

    このエントリーをはてなブックマークに追加 mixiチェック

長男が「本が楽しくてしょうがないから何回でもリピート朗読してください」フェーズに突入しました。そこで今のところ長男が実際に楽しんでいる絵本をいくつか紹介します。

第五位「どうぶつ絵本 はじめまして」Xavier Deneux



代官山蔦屋でこどもがよだれで汚れた手で触ってしまったのでしょうがなく買った本。だけど本人は結構気に入ったみたいでいろんな動物を見ながら全部「わんわん!」って言ってる。そのうちわかるでしょうから別にいいです。

第四位「父さんのたこはせかいいち」あまん きみこ



これは当然1歳児には難しすぎる。妻がもともとこういうのが好きなので「いつか来るべき日のために」ずいぶん前から持っていたらしい。長男も当然よくわかってないくさいが、なんか好きで何回も持ってくる。

第三位「おててがでたよ」林明子



やっぱり毎日着替えをしているからわかりやすいのだと思う。ちゃんと自分の手やら足やら目やらの位置を確認しながら聞いてくれる。

第二位「おつきさま こんばんは」林明子



この話のなにがいいんでしょうね。まぁそこは大人の知る由ではないので、とにかくもう何百回と読んでます。どうも雲が出てくるシーンで月が泣きそうになるところと、雲が「さようなら」というシーンが好きみたい。泣くところでは自分も泣く真似をするし、さようならのシーンでは手を振って雲にバイバイする。

第一位「だるまさんと」かがくいひろし



これは親のほうからのバイアスでダントツ一位。この本、基本的に「だるまさんがころんだ」の調子で「○○○さんと」というページがあってその次にその○○○とだるまが何かを一緒にしてるんだけど、その中に「○○○さんと」「ぎゅっ」っていうページがあって、これがだるまとハグしてる(・・・ような)絵なのですね。そしてこのページを読むと毎回子供がかけよってきてギュッとハグしてくれるのです。たまらん。何回でも読んでやる。






というわけでこれまで本なんてたいして興味もなかったのにここ1ヶ月くらいで突然目覚めた息子が楽しんでいる絵本の紹介でした。本当は英語の本とか読んであげたいんだけど、まぁここでこれ以上こんがらがらせてもしょうがないし、語りかけるのに英語を使うようにするくらいで今は我慢してる。もう少し大きくなってからでいいや。なにはともあれ、本を楽しめているようでよかった。
    このエントリーをはてなブックマークに追加 mixiチェック

GrowthForecast のgolang用クライアントライブラリgo-growthforecast-clientを書きました。以上!
    このエントリーをはてなブックマークに追加 mixiチェック

goで書いたwebappでもApache形式のログを出したい!ということでgo-apache-logformatを書きました。

最初はこのツールを使って毎回ServeHTTP()関数の中でログを出力する関数を呼び出すようにしようと思ったんだけど簡単なラッパーを用意したので多分かなり簡単にApacheログを出力できるようになるはず

まず最初にやらないといけないのがApacheLog構造体を作るところ。出力先のio.Writerと出力フォーマットを指定して作成するんだけど、いわゆるcombined logフォーマットだったらもうすでに作ってあるので、それをClone()しちゃえば簡単:

import (
"github.com/lestrrat/go-apache-logformat"
)

....
logger := apachelog.CombinedLog.Clone()
logger.SetOutput(...) // io.Writer. os.FileとかでもOK. デフォルトはos.Stderr

で、あとはそれをhttp.HandlerFuncで使用されるようにすればいい。もしServeHTTP()関数を実装した構造体があればそれをラップするだけでもOK:

http.ListenAndServe(":8080", apachelog.WrapLoggingWriter(handler.ServeHTTP, logger)

もし色々自分でやりたいなら、ServeHTTP関数の中で自分で以下のようにフックしてもいい:

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
...
lw := apachelog.NewLoggingWriter(w, r, logger)
defer lw.EmitLog() ...
}

ここでひとつ気をつけないといけないのが、上記のServeHTTPの中ではw ではなく lw (LoggingWriter)のほうを使う事。そうしないと諸々必要な値が取れない。

最後にもしこれをログファイルにはき出しつつローテーションも行いたいならgo-file-rotatelogsを最初のloggerにかませばそれでおしまい:

import (
"github.com/lestrrat/go-file-rotatelogs"
"github.com/lestrrat/go-apache-logformat"
) ...
logfile := rotatelogs.NewRotateLogs("/path/to/accesslog.%Y%m%d")
logfile.LinkName = "/path/to/accesslog" logger := apachelog.CombinedLog.Clone()
logger.SetOutput(logfile)

というわけで是非お試しください。ツッコミ、PR、お待ちしております
    このエントリーをはてなブックマークに追加 mixiチェック

このページのトップヘ