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.

先週 @k0kubunさんがpecoで複数キーの入力シーケンスに対してアクションを起こす(例:C-x, C-cで終了する、みたいなの)PRをしてくれたのでそれをマージした。pecoには楽しいお兄さんが色々コントリビュートしてくれているので、そのPRを見た瞬間にこんなコメントが

おお、いいですね、ということで実装してみようとしたところ… うっ… 設定ファイルから読み込んで動的に作る無名関数からレキシカルな変数へのスイッチングしてて、これをプログラム内部から他に作る方法がねぇ!w 設定ファイルからはできるのに!w むきー!

ということでその後、基本的な設計構造を変えないでその辺りを奇麗にできる方法は ないかと一日くらい費やした。が、やはりうまくいかない。薄々気づいていたけどこれFSMとかの出番だよな… 一から実装面倒くせぇなーと、つぶやいたらすぐ返信が:


うほ!goでahocorasickの実装があるwwww ありがとうございます!全部ぱくります!

コードを眺めているとトップレベルではstringに対しての実装で、 中身はruneに対してノードを返すみたいな事になってるので、これまぁ用はstring = []rune として考えられるので、キーシーケンス= []キー で代用できるね、って分かったのでガツガツ変更。といっても検索キーとか、ちょっと再起的に使うためにinterfaceを足した程度で、基本は何も変えていない。

そんなこんなで最初にpecoを書き始めてから一番大きいPRをマージして、キー入力周りがそれまでのコードと一変した。コードを提示してもらったおかげで任意の長さのキーシーケンスを特定のコマンドを高速かつ分かりやすい形で検索+ディスパッチできるようになった。

これも含めて先ほどpeco v0.2.0としてリリースした。このリリースはかなりの数の変更が入っているので、pecoヘビーユーザーには嬉しい機能が結構あると思う。是非お試し有れ!

本日の教訓:この一つ前の記事もパクリの話だったけど、こういう汎用的な方法論についての助言はどんどん受け入れるべきだし、コードもがんがん再利用してやればいいと思う。

プログラムを書く作業は孤独だけど、わからない事は「分からない!どこから始めるか教えて!」って聞けば誰でもヒントをくれるので人に頼る事を恐れないほうが良い(ただし、そこから先は自己責任でちゃんと勉強しましょうね)。そういえばgo-xslate書いた時もgfxに「これ、どこのサイト読むとxslateで使ってるVMのモデルの概要わかるの?」って聞いたな。

年を取れば取るほど経験値はたまっていくけど、それと同時に自分の知らない事が世界にはまだまだあるのがわかる。もちろんそれらを全部吸収できればベストなんだけど、脳にも限界があるので他人に聞く事によって自分の知らない事を素早く正しく補完できるのであればそれを活用できるようにつながりを作ったり、素直に質問できるようにしていくのが老いてゆくエンジニアの進む正しい道な気がする。おすすめです。
    このエントリーをはてなブックマークに追加 mixiチェック

pecoでは何個か前のリリースからバイナリビルドをリリースの成果物として登録するようにしている。これのおかげでpecoはそもそもの存在理由である「2014年だしこういうツールはバイナリ一個置いておくだけで動いてほしい!」というをより簡単に実現できている。


で、その実装方法。基本motemenさんのスクリプトにmattnさんがツッコミを入れたりしてるのを見ながら「よし!パクろう!」と思ってパクったんだけど、一つだけpecoでは意図的に変えたところがあって、それはboxの選定のところ。

motemenさんのgolang-goxc box自体に基本何も問題がないのだけど、pecoで色々やっているうちにgo1.3がリリースされたのにこのボックスを使っているといつまでもgo1.2.1だった(今はもう違うかもしれない)。まぁ当たり前ですよね。そこは他人の褌で相撲を取ろうとしている俺が文句言うところではない。

ただやっぱりバイナリのサイズが小さくなったり、多少パフォーマンス改善も見られている1.3系を使いたいと思いが募ったのと「これから先もきっとこういう事があるだろうし、そういうことがあるごとに文句を言わないといけないのか?」という思いがあり、pecoにはpeco専用のビルドボックスを作る事にした。それがこちら。もちろんgo1.3とgoxcを入れているところ以外はたいした事してない。

たいしたことはしてないんだけど、よくよく考えればライブラリとかではなくpecoのようにエンドユーザーに直接届くプログラムに関してはあまり自分が制御できていない環境に依存するのもどうかなーと思ったのでもうボックスから作る事にしてしまった。これなら自分がやりたいタイミングでgo1.4が出たらgo1.4にすることもできるし、goxcの特定のバージョンが欲しい、とかにも対応できる。

あとはmotemenさんの元記事と一緒。タグ打ってgit pushすれば勝手にファイルがあがってくる。おっさんは何もする必要がありません。大変すばらしい。また時間のある時にはhomebrewのレシピも自動的に作成しようとは思ってるけどそこまで至っていない。ともあれ、自動化はすばらしい。





ちなみに、drone.ioも一応登録はしてあって、こっちでもリリースとかできるかやってみたんだけど失敗して、ただただコンパイルして成果物を残しているだけ(基本前のやつは上書き)。あんまり必要じゃないけど、別の環境でコンパイルするとたまにバグが見つかったりもするので悪くはないと思ってる。まぁそのうち消すかも。
    このエントリーをはてなブックマークに追加 mixiチェック

諸事情によりうちにまともなバスマットがないまま暮らしてきて5年?くらいたった。あんまり気にしてなかったんだけど、この間からバスマット代わりに使っているタオルの繊維が浴室に入るのが気に入らず俺がキレて「値段が高くてもいい!高性能バスマットを買おう!」と宣言した。

そしたら妻がこれにしない?と提案してきたので「よっしゃそれだ!」と買ったのがこちら




やー、これすごい!シャワーを浴びて普通に体を拭いて浴室からでてきたら足の裏がサラサラしている…ッ!すごい、サラサラだ!何回も言うけどサラサラだ!足の裏の革命だ!なんでもっと前に買っておかなかったんだー!

何日かに一回陰干しして乾燥させる必要があるけど、これはたまらん。このサラサラ感、ちょっと説明できないくらいサラサラなので是非試して欲しい。布で水分を取るのとはわけが違う感じ。

あとはこれがいつまでも持つのかとかが気になるが、もしすぐに使えない とかになったらここのページをアップデートすることを約束します。が、その日までは僕は毎日足の裏のサラサラを楽しんでいることでしょう

8/1 追記 購入から1ヶ月ちょいがたちました。というわけで現状の報告です。マットは相変わらず現役、基本的には何も文句はありませんが、正直に言うと吸水率は最初に比べると一回がくっと落ちて、一瞬でさらさら!というのはなくなりました。ただし、1、2回足踏みすれば完全に乾きます。で、吸水率が一度がくっと落ちたあとはその状態で保っているという感じです。我が家は子供が二人いるので大人だけの家庭よりかはお風呂を使う事が多いですが、基本使用には問題ありません。ただし、慌てん坊さんがささっとマットに足を載せただけで水分吸収!というのはちょっとできなくなりました。個人的にはこの状態で1年もてばいいかな、という感じです。
    このエントリーをはてなブックマークに追加 mixiチェック

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

これは笑ってしまった。The Open Source Report Cardという、githubのデータを持ってきて色々統計情報を見せてくれるサイトがあるんだけど、ここで今日とうとう「Exceptional Regexer」とか、そういうPerl Monger系の名称から「High Caliber Gopher」みたいな名称になって、さらによくみると「one of the 5% most active Go users」(6/18現在)だったのでツイートしたら、
GoプロジェクトにとてもゆかりのあるDave Cheneyさんからこんなツイートが…

よくみると彼は上位9%という位置だったw まぁGithubに対するコミット数とかだからそれ以外のところはカウントされないのでしょうがないw 彼がgithubにもっとコミットするようになったら一瞬で抜かされるだろうなー こういうのを"15 minutes of fame"とかいいますねw
    このエントリーをはてなブックマークに追加 mixiチェック

pecoそのものについてはここで読むよりREADMEを見た方が早いです

今月の初めくらいにpercolという便利なものがあるという話を聞き、「ほう、使おうかな」と思ったら普段あまり使い慣れていないpython製ツールでまるでcpanmを使うのがいやなPerlに慣れていない人のような反応で「まぁ必須アイテムじゃないし…」と思って諦めかけたところ


とか言われ「そこまでいいツールなのかなー」と思ったけど、使ったことないし、まずはツールがどういうものなのかをわかるためにGoで実装する事にした(はい、本当にこういう順番です)。
続きを読む
    このエントリーをはてなブックマークに追加 mixiチェック

3回目。寝る前に本を読むのも定着し、問いかけながら本を読んだり、声色を使うとうけたり、いろいろと幅が広がってきた。とりあえず3回目だし、さくっと:


第五位「どうぞのいす」 香山美子


多分まだこの話の内容を理解はしてないけれども、なんだかわりと毎回読まされてる。動物達が何か食べ物を持ってきてるのはわかってるみたい。

第四位 「しーっ」 たしろちさと


やっぱりこういう単純な繰り返しものは受けますね。難を言えばもうすぐ2歳児にはちょっと短すぎ… 長男も好きらしいんだけど、なんか物足りない感を感じる。


第三位 「バスがきました」 三浦太郎


これも単純な繰り返し系。この本で「ちゅーちゅー」「がおー」「ぴょんぴょん」あたりを理解したくさい。最近いろんな鳴き真似をしてくれるようになってきた。


第二位 「トイレですっきり」 なかやみわ


トイレに興味はあるっぽいんだけどまだ自分からトイレには行きません… とりあえずおしっこが出るところとうんちが「くうぴい、ばいばーい」と言うところで毎回大受けです。なんかやっぱりトイレトレーニングはこういうのでイメージふくらませたほうがいいのかなー。ってまだ何も出来てないんだけど。

第一位 「ふたつのいちご」林明子 


季節はずれも甚だしい!しかしこの2ヶ月くらいでいちごのおいしさに目覚めた長男は毎晩のようにこの本を読むのをせがんでくる… 絶対話を理解しているとは思えないんだがなー。でもとにかくいちごに興味津々のようです。1歳児にあってるかどうかとかじゃなくて、長男がいちごが好きなだけです。

しかし前回前々回の内容と比べるとなかなかおもしろいな。紹介ももちろんしたいだんけど、自分がおもしろいのでもう少しこのシリーズ続けたいと思う。
    このエントリーをはてなブックマークに追加 mixiチェック

(以下はgo 1.2.x時点での話です。将来的に仕様がかわるかどうかはわかりません)

これを読んでいて、こういうの気にしてない人多いんだろうなーと思って、書いてみます。元のポストはdeferの挙動について語っているように見受けられるけれども、これは要は複数スレッドで実行されるコードについて、プログラム終了時に同期とか取りたくない、という話だと思ったので、このポストのdeferを正しく動かすには…というところからどういう形でgoroutine同士で同期を取る方法があるのか、一例を書き出していきます。

TL;DR;

goでいくらgoroutineが気軽にかけるからと言って、複数スレッドで処理が行われているので同期はキチンとやらないとダメですよ。

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

なんかごく一部に補足されているので、念のため軽く説明しておきます。


これ、ベストな方法だとは思っていないんだけど、最初にこれを書いた当時の考え方は以下の通り:

  1. これは自分の部署で初めて 本番に設置するgoアプリである
  2. 一次対応をする人は自分とは限らない
  3. 細かいコード内容の修正はともかく、明らかなバグっぽいものの修正(例:SQL文の変更)などを自分以外の人間が施した後にサーバーを簡単に再コンパイル+再起動するする方法がないと椅子が降ってくる事が容易に予想される
というところから、どうするのがベストか考えたのがきっかけ。以下、やった事の詳細。

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

The Perl Foundation (TPF)の助成金プログラムの5月ラウンドの募集が始まりました。本文はこちらです

助成金の仕組みはPerlに関連する公共性の高いプロジェクトに対して金銭的サポートをするために作られました。採択されると平均的には数万円〜数十万円の助成金がプロジェクトのゴール完了とともに交付されます。本当に有益で実現性の高い物であれば、100万円程度の助成金まで交付される可能性があります。

助成金利用者にとっては助成金そのものがうれしいだけではなく、コミュニティに支持されたプロジェクトを牽引・実装したという実績になりますので、その後役立つはずです。是非応募の検討をお願いいたします。

なお前回日本からひとつの応募が採択され、助成金が交付される運びになりました。今回も日本からなにか応募されると大変うれしいので、もしなにかPerl関連のプロジェクト(Perlコミュニティを支援するなにか - ドキュメントやサポートプロジェクト・サイトなど、Perl利用者みんなが助かるツール・モジュールなど)のアイデアや、今すでに作業途中のものがあれば是非応募してみてください。参考までに、前回採択されたプロポーザルがこちらです

英文に自信がない方でも 私に連絡をいただければ清書等のお手伝いはできますので@lestrratまで是非ご相談ください。

ひとつ残念な事は募集開始から締め切りまでが10日ほどしかないことです。今回の応募締め切りは5/10です。ただし、前回(3月)のラウンドから始まった試みのひとつとして1年間に募集回数を増やすというのがあるので、今回もし準備が間に合わないようでもすぐ次のラウンドが始まる予定ですので、是非ご相談ください。

皆様のご応募をお待ちしております
    このエントリーをはてなブックマークに追加 mixiチェック

このページのトップヘ