k0kubun's blog

railsへの執着はもはや煩悩の域であり、開発者一同は瞑想したほうがいいと思います。

Ruby コミッターになりました

m_sekiさんとhsbtさんの推薦で、ERBのメンテナとしてRubyのコミット権をいただきました。 以下が初コミットです。 github.com 普段テンプレート言語Hamlの高速化やその更に高速な別実装Hamlitの実装をやっていてテンプレートエンジンの高速化に知見があり、…

Treasure Data に入社しました

3月から Treasure Data で働いています。入社初日からタスクをアサインされ、RailsでAPIの開発をやりました。 なぜ Treasure Data に転職したのか 前職もやりたいことができて優秀な同僚に囲まれ文句ない環境だったのですが、アルバイト入社から数えるともう…

Hamlを3倍速くした

Hamlコミッターになった RubyKaigi 2015で「Hamlは遅いしメンテされてないので使わない方がいい」と言ったところ、じゃあ自分でメンテして速くしろということになりコミッターになった*1。 当時から2年ごしなのは、当時のHamlのオーナーがあまりアクティブで…

Linux デスクトップ環境 2017

Linux デスクトップ環境 2016 - eagletmt's blogの人に影響を受けて自作PCでLinuxデスクトップを使い始めてから約1年半が経ち、僕の使う環境が一通り満足な状態になったので今どういう構成なのか書いておく。 僕はKeynoteを使う時とか会社のマシンでmacOSも…

2016年にやったこと

クックパッドで働くのは4年目、社会人としては2年目になった。2015年にやったことと同じフォーマットでまとめておく。 発表 今年は6本発表した。去年RubyKaigi前後にいろいろ集中してて死にかけたので、2か月に1回というのが僕にとってはちょうど良いペース…

Linux向けの最強のキーリマッパーを作った

X Window Systemで動作するキーリマッパー「xremap」を作った 2017/1/9追記: xkremap→xremapにリネームしました 僕はKarabiner用のRuby DSLを作ったりそれを使って大量の設定を既述する程度にはKarabinerのヘビーユーザーなんだけど、デスクトップ環境にLinu…

RubyConf 2016 で話してきた & MItamae v1.0.0をリリースした

RubyConf 2016で登壇してきた 2016/11/10〜11/12にアメリカのオハイオ州シンシナティでRubyConfというイベントがあって、Ruby DSLによって設定できるCLIツールをRubyインタプリタやgemの存在に依存しないシングルバイナリとして実装するための知見を「Evalua…

Itamaeのmruby実装「MItamae」が大体いい感じになった話

Roppongi.rb #2 で「MItamae」について話してきた Roppongi.rb #2が "Infrastructure x Ruby" をテーマに開催され、そこで RubyなしでItamaeレシピを実行できる「itamae-go」を作った - k0kubun's blog 話と pure mrubyで実装されたItamae「itamae-mruby」を…

SSEを使ってHTMLエスケープを高速化してみた

高速なHTMLエスケープをするライブラリを作った ある日HTMLエスケープを速くしたくなって、hescapeというライブラリを作った。 github.com とにかく速いHTMLエスケープがしたい Railsアプリのビューのレンダリングにおいて、CGI.escapeHTMLを高速化*1するこ…

pure mrubyで実装されたItamae「itamae-mruby」を作った

itamae-goを作り直してitamae-mrubyを作った 先週Goからmrubyを使ってRubyなしでItamaeレシピを実行できる「itamae-go」を作ったんだけど、全く同じコンセプトの、RubyなしでItamaeレシピを実行できる「itamae-mruby」を作った。 github.com itamae-goの問題…

RubyなしでItamaeレシピを実行できる「itamae-go」を作った

Goとmrubyを使ってitamae-goを作った github.com Pokemon Goが流行っていたので流行に乗じてItamae Goを作った。 というのは冗談で、手元の開発環境のセットアップにitamaeを使っているのだけど、まっさらな環境でitamaeを実行したい時にRubyやitamaeをどう…

ErgoDox2枚持ちがKinesis Contoured Keyboardを併用した感想

お借りしています pic.twitter.com/zzwmj2QEjp— k0kubun (@k0kubun) 2016年7月5日 Kinesis Contoured Keyboardをお借りしている id:ursm さんがKinesis Contoured Keyboardの2週間無料貸し出しをやっていて、Kinesisはずっと気になっていたキーボードだった…

#tqrk10 で「私がRails 5に送ったパッチとその背景」について話してきた

TokyuRuby会議10でLTしてきた 去年に引き続き、今年もTokyuRuby会議10のLTに応募したら通ったので最近railsにマージされた僕のパッチで思い入れのある3つについて喋ってきた。今年はCookpad TechConfとかRails Upgrade Casual TalksでもRailsの話をしていて…

ErgoDoxを2枚買ってキースイッチを交換した

ErgoDox始めました pic.twitter.com/lm2kCCwj3K— 体調悪太郎 (@k0kubun) 2016年5月2日 なぜErgoDoxを2枚買ったのか 直近で使っていたキーボードは1300円で買える奴で、金に余裕ができたらいい奴を買おうと思っていた。HHKBとRealforceは以前所持していたこと…

Coffee, jQueryで書いていたElectronアプリをES6, React, Reduxで書き直した

ElectronベースのTwitterクライアント: Nocturn ElectronでYoruFukurou風のTwitterクライアントを作った - k0kubun's blog の時にCoffeeScriptとjQueryで作っていたNocturnというTwitterクライアントがあり、これをES6, React, Reduxを使って書き直した。こ…

#CookpadTechConf 2016で「Railsアプリ開発環境の高速化」について話した

クックパッドの社員が発表するCookpad TechConfというイベントの第一回が今日行われ、「Railsアプリ開発環境の高速化」というテーマで話してきた。 開発環境の改善について 僕が技術部に入る前、サービス開発をやる中で一番不満だったのが開発環境のパフォー…

2015年にやったこと

今年は卒論を書いて大学卒業後社会人になり、新卒研修を3ヶ月やり、部署に配属されて6ヶ月働いた。 以下、2015年にやったことをまとめる。 発表 2014年はどの勉強会にいっても誰にも知られてなくて寂しかったので、2015年はたくさん外部で発表するというのが…

#RubyKaigi 2015 でテンプレートエンジンの高速化について話しました

FamlとHamlitがなぜ高速かについて話しました RubyKaigi 2015の1日目に、「High Performance Template Engine」というタイトルで発表しました。 @eagletmtさんが作ったFamlと、僕が作ったHamlitがなぜオリジナルのHamlに比べ高速か話しました。 発表は以下の…

#itamae_meetup で「itamaeを楽しく使うための工夫」について発表してきた

Itamae meetup #1 で発表した 趣味でちょくちょくコミットしているItamaeという構成管理ツールの第一回Meetupがあり、Itamaeについてどこかで話したいな〜とずっと思ってたので話してきた。個人的には、僕が作った機能のうち特に最近実装した以下のものを各…

Hamlit v2.0をリリースしました & RubyKaigi登壇します

Slimより高速なHaml実装「Hamlit」 RubyでHTMLを生成するのにERB以外でよく使われるテンプレート言語にHamlやSlimがあります。haml *1 をやめて高速なslimに移行する人が多かったのですが、私はHamlのシンタックスの方が好きなので、slimが用意したベンチマ…

byebugやpry-byebugを使った後の挙動を10倍高速にしました

byebugとpry-byebugのbundle updateをしましょう byebugはRails標準でインストールされるRuby 2.1, 2.2向けのデバッガで、pry-byebugはpry *1 にデバッガの機能を追加するpryのプラグインです。 一昨日から今日にかけて、以下のパフォーマンス改善を含む bye…

ISUCON5予選に「railsへの執着はもはや煩悩の域であり、開発者一同は瞑想したほうがいいと思います。 」チームで参加してきた #isucon

学生枠で出場した去年に引き続き、今年は新卒社員になった@cnosukeと@rkmathiと僕@k0kubunの3人でISUCON5予選に出場した。 僕らが最後に確認できたスコアは11045で、その時のスクショだと2日目の16位という感じで、予選通過はなりませんでした。 id:rkmathi…

#tqrk09 で「Rubyを使った開発環境構築の自動化」についてLTしてきた

TokyuRuby会議09でLTした あんまり外部でRubyについて話したことなくて、こないだshibuya.rbでactiverecord-precountについてLTしたけど、それ以外にもまだ紹介したいgemがあったのでTokyuRuby会議にLT応募したら通ったので話してきた。 rebuild gem k0kubun…

ElectronでYoruFukurou風のTwitterクライアントを作った

最強のTwitterクライアント戦争 なんか戦争をやってる人たちがいたので乱入することにした。 日記書いた / 最強のTwitterクライアント作り始めた - 9mのブログ http://t.co/ecq7nT40qp— 友緒利奈 (@9m) August 22, 2015 最強のTwitterクライアント戦争参戦し…

PCを自作してArch Linuxを入れた

社会人になって経済的に余裕ができてきたので、はじめての自作PCに挑戦することにした。 入社直後に生活が苦しすぎてヤフオクでiMacを売ってしまったのでデスクトップPCが欲しかった。 材料 種類 型番 値段 CPU Intel Core i7 4790K (4 core / 8 threads, 4.…

markdownからkeynoteを生成する「md2key」を作った

markdownからkeynoteを生成する奴作った LT資料作るのがめんどくさすぎてmarkdownからkeynote生成するやつ作ってた https://t.co/sK8XaBcj2T— ᴋᴏᴋᴜʙᴜɴ (@k0kubun) 2015, 8月 6 なんか昨日社内でLT頼まれててLTしたんだけど、前日に資料を作るモチベが沸かな…

#shibuyarb でRailsのN+1 countクエリについてLTしました

#shibuyarb でLTをした ぼくが一番長い期間書いている言語はRubyなんだけど、なぜかGoの話ばかりしていてRubyについての発表をしたことがなかった。 新卒研修も終わって平日やっている勉強会にも気軽に出れる感じになったので、以前作ったactiverecord-preco…

Go Conference 2015 summer でLTをしました

#gocon でLTしてきた GoCon、LTしたかったけど特に発表することないなあと思ってたら同僚に「ppとかあるじゃん」って言われて、確かにppについて話したことないなと思ったので申し込んでみたら通った。 話した内容について k0kubun/pp ppはGo Advent Calenda…

Ripperによるhamlのattributeパースの話

Hamlのパーサぶっ壊れてる問題 本家のHamlは以下の入力を与えるとSyntaxErrorになる。 %div{ foo: "}" } これはHamlが単に{と}の数だけ合わせてパースしているからである。 *1 通常この問題を解決するには字句解析器を使い、現在パースしているのが何のトー…

Hamlit v1.0.0をリリースしました

3月末に、Hamlit v0.1.0を作りSlimやErubisより高速なHaml実装「Hamlit」をリリースしましたという記事を書いた。 haml-specを通しているのでHamlと高い互換性と持っていてかつ速いという宣言をしたものの、実際にリリースしてみると随所からバグ報告が上が…

Slimより高速なHaml実装「Hamlit」をリリースしました

slim-template/slimのcompiled benchでオリジナルのhamlに比べ8倍高速に動作するhaml実装をリリースしました。 github.com なぜ高速なHaml実装を作ったのか 個人的にhamlのシンタックスのほうが好きなので、「hamlは遅いからslimを使う」みたいな人を減らし…

hikarie.go #4でGoのCLIにおけるマルチプラットフォーム対応についてLTした

LTしてきた 勉強会に参加するよりひたすら家にこもってプルリ書いてるほうが好きなので去年はそういう生活をしていたけど、今年はもうちょっとアウトプットしようと年の始めに考えていた。そこで、とりあえず一発目としてhikarie.go #4というGoの勉強会でLT…

卒研発表をした

Go

卒研終わった 2/17に卒研発表をした。 何研究してたの モデル検査とfault injectionを行うためのモデリング言語Sandalのコンパイラの拡張を行った。 いろんな人に何研究してるのか聞かれたんだけど、そのたびに一言で説明できなくて困った。自分がモデル検査…

RailsでN+1 countクエリを潰すactiverecord-precountを作った

N+1 countクエリを最大11.7倍速くできるactiverecord-precountというgemを作った。 *1 k0kubun/activerecord-precount N+1 countクエリ Tweet.all.each do |tweet| p tweet.favorites.count end # SELECT `tweets`.* FROM `tweets` # SELECT COUNT(*) FROM `…

ダイジェスト2014年

1〜3月 楽しい人生を送っていたのでコードを書いていなかった 4〜6月 社内のLTのネタのためにGoを始めた。Schemeの処理系とかTwitterクライアントとか書いた。 この影響で今は研究でもGoで言語処理系を書いている。 Goでテトリスを書いてDeNAでLTをした。 初…

RubyistのためのGolangメタプログラミング

Goでは、reflectパッケージを使うとリフレクションを行うことができる。 そこで、以下のことを任意のstringによる動的な指定で行うことができるかを調べた。 send (関数, メソッド呼び出し) define_method (関数, メソッドの定義) const_get (任意の型のオブ…

RubyとGoの思想を比較して思うこと

僕は主にRubyとGoを書く。この2つを使っていると、「(Rubyに比べて)Go辛いなあ」と思うことがあるのだが、なんで辛いのかはよくわかってなかった。 最近仕事にGoを使い始めたRubyistが社内ブログでGoのPros/Consを書いていたんだけど、そのConsも自分が辛…

Railsでデバイスの判定をするのに便利なgemを作った

rack-user_agent を作った rack-user_agentという、User-Agentに応じていろいろな判定ができるメソッドを生やすRack::Request拡張を作った。 tagomorisさんのWootheeを使ってRack middlewareでUser-Agentをパースしておいて、 その結果に応じてrequestから簡…

ISUCON4本戦に「railsへの執着はもはや煩悩」というチームで参加しました

@cnosukeと@rkmathiと僕で学生枠で予選通っていたので、ISUCON4本戦出てきた。 予選で反省して直した点 悲惨な前回の記録 予選の時は常に精神的に余裕がなかった上にチームワークが全く成立していなかったので、@cnosukeに指揮をとってもらってお互いの作業…

ISUCON4予選に参加しました

去年ISUCON3予選に参加していた id:cnosuke と id:rkmathii のチームが一人欠けたので、 そこに初出場の僕が入り「railsへの執着はもはや煩悩の域であり、開発者一同は瞑想したほうがいいと思います。」というチーム名でISUCON4予選に出場しました。1日目の…

Rack applicationのプロファイリングにはrack-lineprofが便利

RubyKaigi 2014行った。良い発表がいろいろ聞けたんだけど、最近ISUCONに向けてwebアプリのチューニングに興味があったので特にfinal keynoteが興味深かった。 その中で紹介されていたtmm1/rblineprofが行ごとの実行時間を表示してくれるのでとても便利そう…

ConoHaのVPSの初期設定をChef Soloでやってみた

普段はさくらのVPSに普通に手でソフトウェアをインストールしてWebアプリを動かしていたんだけど、 さすがにそろそろサーバーの状態管理を自動化したくなったのと、単純に面白そうなのでChefによるサーバー管理に挑戦することにした。 それで、気軽に壊して…

ActiveRecordでN+1 countクエリを潰す方法、あるいはactiverecord-count_loaderの使い方

追記:activerecord-count_loaderはactiverecord-precountに変わりました。使い方はこちら。 ActiveRecordでassociationを読むためにN+1クエリが出てしまった場合、 includesなどのメソッドを利用することで発行されるクエリの数を減らすことができる。*1 と…

ISUCON夏期講習に参加してきた

ISUCON、自分が興味ある人たちが去年参加していて、面白そうだなと思っていた。 僕の大学の友達はweb系っぽい人がいなくて、チームが組めないので、去年は指を加えて眺めていたんだけど、出場メンバー募集もアリでISUCON夏期講習がやってたので、参加してき…

Vim scriptテクニックバイブルを買って生活が豊かになった話

Vim

Vim script テクニックバイブル ~Vim使いの魔法の杖 を買った。 vim scriptのネットのチュートリアルはいくつか読んだんだけど、なかなか完全な説明が一箇所にまとまっていることはなく、よくわからない部分がいろいろ残されている状態だった。 僕は基本的に…

Karabinerの設定を楽に書けるやつ作った

経緯 いろいろ思うところあってエディタを乗り換えようと思ったんだけど、キーバインドを異常にカスタマイズしているおかげで、みんなが使うはずの基本的なキーバインドが衝突して押せないという事態が発生し、Karabinerの設定を大きく変える必要が出てきた…

私のpeco活用事例

pecoというインタラクティブに入力をフィルタして出力するコマンドがあって、使い始めてからシェルの操作方法が大幅にかわり、だいぶライフチェンジングだった。 最近このへんが流行ってるのでやたら記事あるけど、せっかくなので僕も使い道を紹介しようと思…

Gifzoのアップロード先をTwitterにした

元ネタ: http://blog.kksg.net/posts/gyazo-twitter Twitterがgifアニメのアップロードに対応した。 もうこれはGifzoでTwitterにgifアニメをあげられるようにするしかないと思った。 @null http://t.co/OZ52pUcNg2— たのしい人生 (@k0kubun) 2014, 6月 20 や…

hikarie.goでLTをしてきました

発表で紹介したやつのリンク https://github.com/k0kubun/gosick https://github.com/k0kubun/thunderbolt https://github.com/k0kubun/tetris https://github.com/k0kubun/go-termios

GithubにSlimのシンタックスハイライトを入れました

以前、ふととあるRailsアプリをerbからhamlかslimに移行しようということになって、どっちにしようか検討していた。 そのとき、GitHubはhamlをシンタックスハイライトしてくれるけどslimはしてくれないというのに気がついた。 hamlよりslimのほうがパフォー…