サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
tomykaira.hatenablog.com
2013-12-06 「CSSポストプロセッサー時代の到来」の現状認識が理解できなかった css web CSSポストプロセッサー時代の到来 の現状把握が私の認識とちがったので、議論します。 背景 私の背景を説明します。 たぶん立場や利用しているフレームワークによって全然意見がことなるし、そもそも私は CSS を深くとりあつかっているわけではないということを明確にしておきたいです。 おもにバックエンド(サーバのアプリケーション実装、インフラ、分析等)を担当している自称フルスタックエンジニア おもに Rails で Web 開発。複数のプロジェクトにジョインしている デザインはできない(すごく苦手で書き直し必須になる) 比較的レビュアーの立場にあり、デザイナさんの書いた HTML, SCSS のレビューとかもしてる(完全にできてるわけではない) 画面ががちゃがちゃするので、 CSS, JS
2013-12-04 Fluentdとはどのようなソフトウェア「ではない」のか Fluentdとはどのようなソフトウェアなのか - たごもりすメモに触発されて。 設定が簡単なのに惹かれて Fluentd を利用したら、ひどい目にあった。 でもそれは我々のソフトウェアへの理解が不十分だったから。 最初の段階で気が付いていたんだけど、 quick fix で動きそうだからそのまま突き通してしまい、結局ダメになった。 自分でつかってみた人は、だれもそんな使い方しねえだろって思うだろうけど、噂しか聞いていない人はおなじ間違いすると思う。 Fluentdとはどのようなソフトウェア「ではない」のか Fluentd は「リアルタイム転送のためのツールではない」。 リアルタイム処理のためにつかったら破綻する。 なぜ使えないか そもそもの転送速度が低速 (MQ 系や memcached のプロトコルと比較し
2013-11-08 開発チームのコミュニケーションツールを吟味してみた team チーム開発ではコミュニケーションツールが必須。 いま複数のチームに参加していて(5くらい、すべてリモート)、母体組織がおなじでも違うツールをつかっている部分もあり、考える事があるのでまとめる。 なにが必要か だいたいどんなプロジェクトでもこれらが必要。 なかったらきっと導入してもらう。 例はメジャーなもの、自分が使っているものから採用。 リポジトリ: Github, Bitbucket, gitlab, backlog, 生のリポジトリ タスク管理ツール: Asana, Redmine, Github Issues, backlog 文字チャット: IRC, Skype, Idobata, HipChat (音声、ビデオチャット): Skype, Google Hangout 情報や知見を貯める場所: Wi
2013-09-02 レビューフレンドリーな開発のしかた git dev 最近は多くのチームでレビューの習慣が定着してきました。おもにレビュアーとしての仕事を依頼されることもあります。 コミット・ブランチの作りかた一つでこのレビューのしやすさが格段に違ってきます。 自分が普段の開発でこころがけていることをまとめてみます。 前提 レビュイーとレビュアーの間に上下関係があるわけではないですが、レビュイーは多少手数が増えても、レビュアーのことを最大限配慮すべきです。 なぜなら、レビュイーはその機能の開発に集中して取り組んでいますが、レビュアーはすこし見るだけです。 なにかするとしたら、レビュイーがやったほうが時間も手間も少なくなります。 レビュアーはレビュイーよりも、変更について詳しくありません。 レビュイーは開発にいろんな部分を見てまわり、他のモジュールとの関連性や実装のこまかな意図を把握して
2013-08-02 Pry が入っていない bundler 環境でも pry を使う pry irb Gemfile をつかってライブラリを管理しているプロジェクトで、 pry が Gemfile に書かれていないと、当然 Pry は使えない。 OSS のプロジェクトでは勝手に Pry を入れることはできない。 そもそも、 Pry を Gemfile に書いて強制するのは、開発者に zsh を使うことを強制するようなもので、態度として良くないと思う。 各自が使いたいツールを使うことができ、必要最低限のものだけをインストールするようにしたい。 bundle exec irb で irb を起動したときでも、もしローカルに Pry が入っていれば、そっちを使うように設定した。 Pry Everywhere に掲載されていたスクリプトが rbenv 環境では動作しないようだったので、より一般的
2013-07-17 Ruby (とか直和型がない言語)でも case の網羅性をテストしたい test 状態コードがあって、もとは waiting, running, exited だったところに、新しい状態 failed を追加するような場合を考える。 直和型がある言語 (Haskell, OCaml, Scala など。strictly typed functional language に分類される言語が中心) なら、 直和型に要素を追加したとき、ワイルドカードを書いていないすべての case 文で警告が出る。 C や Java では生の数値や enum で状態コードを扱い、 ruby ではシンボルや文字列で扱うのが一般的である。 これらの言語では網羅性をコンパイラがチェックするようなサポートは提供されない。 Ruby に至ってはコンパイルが実行直前まで行なわれない! Ruby の
2013-07-13 continuous commit のお供、git rebase を決定的に刷新する最強ツール Uchronie をリリースしました Scala Git いままで git rebase -i に何度泣かされたことでしょう。 git は最高のツールですが(他の SCM に勝るという意味ではありません)、あれは非常に出来がわるい。 テストを回すたびに自動コミットする continuous commit のプラクティスを採用している私達にとって、 interactive rebase は頭痛の種でした。 (continuous commit については Continuous Commit (kyon_mm さんの発表資料)、最近の git の使い方について - tomykaira makes love with codes など)。 git-rebase--interact
2013-07-14 git push 前に自動でテストを回そう git git push する前にテストを回しわすれ、 pull request が CI にはねられて悲しい思いをすることが多かったので、忘れないように自動化した。 git には pre-push hook が 1.8.2 から導入された。 以前 temporary なコミットが含まれる場合、push をやめるというのを作ってとても重宝した。 git-now したコミットの誤送信をふせぐ - tomykaira makes love with codes テストを回すのはチェックに時間がかかるけど、それで円滑な開発と綺麗なコミットグラフが促進されるなら、30秒ほどまつ価値はあると思う。 .git/hooks/pre-push の内容は次のような感じ。以前のに足したところから、関係なさそうなところを消したので、余計なものが混
2013-07-10 Rails の validation 論争批判 Rails 容赦なく批判するので、気分悪く思う方は読まないでください(後半だけよむといいかも)。 twitter での議論は、徳丸さんがまとめられている分はみましたが、それ以外は見落としがあるかもしれません。 TL; DR: これまでの議論は教条的であり、技術を誤解したうえで過信している。 バリデーションは広い意味をもつが、重要なドメインについての観点が見落とされている。 技術者として、なにが必要で、どう実装すべきか自分の頭で考えよう。 validation (バリデーション) とは バリデーションとは 【validation】 〔バリデート〕 - 意味/解説/説明/定義 : IT用語辞典 検証(する)、実証(する)、認可(する)、妥当性確認、などの意味を持つ英単語。ITの分野では、対象がその仕様や文法などに照らして適切
2013-07-05 Rails のモデルはどうあるべきか rails TL;DR: Rails の model が太りやすいのは、生まれつき責務過剰だから。開発者が設計段階で責務を絞り、食べる量を減らしてあげよう。 Rails の model というのは、概念も実装も、とても奇妙な使われ方をしている。 いささか不気味だし、実害もある。 fat model はずっと Rails 界で話題になりつづけている。 すでに Rails のプロフェッショナルは抜け出せているのかもしれないが、まだ議論の余地のある話題ではあるようだ。 なぜ model が太るかというと、なんでもかんでも model に食べさせるからである。 一日中食べてれば元々どんなにスレンダーでも太るに決まってる。 コードのダイエットは食べる量を減らすか、外に出すしかない。 太ってから外に出すのがリファクタリングである。 後知恵的に
2013-07-03 Rails はどのようにして ETag を設定しているか Rack Rails Rails と Rack でのキャッシュ、とくに ETag の動作について調べた。 ネット上にはまともな情報がみつからなかったので、まとめておく。 Rails: 3.2.11 Rack: 1.4.5 クライアント: Firefox 22.0 Rails 4 ではキャッシュの扱いが変わったようだが、より繊細な扱いができるようになったというだけで、たんなる HTTP server として使う時のデフォルト動作は変わらないのかな? ETag のしくみ 事例に学ぶWebシステム開発のワンポイント(12):ブラウザキャッシュでパフォーマンス向上―負荷分散装置の落とし穴に注意- - @IT サーバがレスポンスヘッダに ETag フィールドを混ぜて返す。 値は通常レスポンスの内容をダイジェスト化したもの
2013-06-29 HATEOAS は API のニーズを勘違いした失敗設計である REST HTTP REST: From GET to HATEOAS from josdirksen これを見て HATEOAS という概念について知ったが、ここで主要な主張となっている、"hypertext-driven" というのは鵜呑みにしていい主張じゃないと思う。 REST APIs must be hypertext-driven » Untangled : もとの論文発表者による記事 HATEOAS(Hypermedia As The Engine Of Application State) の中心となる主張は、 HTML のように、次の操作に対するリンクを、APIレスポンスのなかに埋め込むもうというものだ。 ブログ記事から引用する。 A REST API should be entere
2013-06-25 Rails、あんたなんか嫌いよ - Rails での OO 設計について ruby rails 最近はずっと Rails 書いてるんですが、書けば書くほど嫌いになってくるんです。 倦怠期的なやつなんですが、 Rails さんの悪いところばっかり見えてきて、もう一緒にいたくないんです。 でも別れるほどじゃないし… という愚痴にみせかけた Rails での設計についての議論です。 長いけどコードは一切出てこないので通勤中にでもよんでください。 注意 一部にはげしい言葉遣いがでてくるので、読んで不快になるかもしれません。 不快になったとしても責任は負いかねます。 次のような方の期待に沿う結論はでません。残念でした。 Sinatra, Padrino の人 関数型の人 静的型付けの人 C の人 TL;DR Rails にだまされない。 自分の道を見定める。 欺瞞にみちた Ra
2013-06-18 RSpec を効率的に記述するために yasnippet 紹介 ruby rspec rspec は testing framework のなかでは簡潔な記述ですが、それでもテストを書いていると繰り返しが多くなる。 とくに its の連続などはなかなか手でやっていると大変。 私は基本的に emacs で補完をつかって書いている。 hippie-expand と yasnippet を併用しているが、 yasnippet のスニペットは rspec 環境で悩んでいる人に役立ちそうなので公開する。 https://github.com/tomykaira/rspec_yasnippets タイトルが key で展開先が code block という形でいくつか紹介してみる。 一行展開系 it や describe before などの非常に頻繁に使うメソッドを展開する。
2013-06-05 複数の例外を別の例外にして送出し直す速度比較 ruby あるメソッドが複数種類のエラーを上げてくるので、それをまとめて別の種類のエラーに読みなおすという場面がある。 たとえば Rails で ActiveRecord が上げてきたエラーをコントローラで扱いレスポンスを操作するためのエラーに読み替えるとか、 通信ライブラリのエラーをアプリケーション内の対応するエラーに読み替えるとか。 この書き方がふたつあって、どちらが速いか。 私は rescue 文の連続より case のほうがコストが低いので、 B のほうが速いと予想した。事実そのとおりだった。 (この例ではまとめて捉えてしまって StandardError(ex.message) ひとつで済むわけだが、当然、中身の処理がちがう場合を想定している)。 A begin err = [AError, BError, CE
2013-06-02 Response to "7 Patterns to Refactor Fat ActiveRecord Models" rails This is the English version. The Japanese version with the same content is at the bottom of this article. Original article: 7 Patterns to Refactor Fat ActiveRecord Models - Code Climate Blog The video of presentation recorded in RubyKaigi 2013, 2nd day The problem -- Where they should be? "7 Patterns to Refactor Fat Acti
2013-06-02 テストを parallel_tests の2倍以上高速にする Qspec ruby rails qspec テストが遅いので parallel_tests で高速化しようとしたが、効率わるすぎて腹がたってきたのでより効率的な Qspec をつくった。 いくつかの rails プロジェクトでベンチマークしたところ、2倍以上の高速化効果が得られた。 高速化に貢献しているのは次の要素。 テストファイルのふりわけを Redis 上の Queue をつかって動的におこなう。 Spork ですべてのテスト実行プロセスを事前に起動する GC を切る(ファイルごとに有効にして明示的にGCするので、十分なメモリがあればたいてい問題なく動作する。capybara 系をつかうとあぶない) ダウンロード & インストール: tomykaira/qspec · GitHub くわしくは #ru
2013-05-26 Rails Runner からコントローラ経由のアクセスを模倣する rails テスト(RequestSpec や Integration test)でできるような、 get '/hoge/huga' として、 response で結果をとるようなことを、テストの外からやる方法。 あまりお手軽にできる感じではなく、結構あちこち調べる必要があった。 rails は 3.2.13。 まず、これらの機能がどこで定義されているかというと、 ActionDispatch::Integration::Runner にある。 しかしこれは module なのでそのままは使えず、さらに include しても使えない。 include したうえで、 app がちゃんとした値を返すようにしなければならない(Runner のなかではつねに nil になる)。 class Tester i
2013-05-22 local repository をよいかんじに remote に同期させる git update git git-update というコマンドがあるわけではありません。エイリアスです github などで PR ベースのチーム開発をしていると、頻繁に branch を切り、 push し、それを誰かが master に merge し、 PR の branch を消す、という流れが発生する。 チームの規模にもよるが、小規模〜中規模なチームでも日によっては5回じゃ効かない。 これを繰替えしているとどうなるかというと、私のようにズボラな場合、 ローカルに、マージ済みの branch がたまる branch 名の補完がききにくくなり、 TAB をばかばか連打して隣の人におこられたり、キーボードがこわれて怒られたりする いつのまにか master が更新されていて、追従する
2013-05-12 git + percol(anything on terminal) が便利 git percol git ではよく sha-1 を入力させられる場面がある。 branch や tag がついている場合はそちらを使えばいいが、たとえば「さっきのコミットでなにを変更したかみたい」というような場合、 一度 git log を起動し、commit id を確認するなり、 HEAD からの距離を確認して、 git show を再度実行するということになる。 HEAD からの距離がとおいと sha-1 指定することになり、わざわざマウスに手をのばしてコピー&ペーストしなきゃいけないかもしれない。 はじめから HEAD^^ みたいに指定できればそれでもいいが、2つ以上前になると、大体いくつ前だかわからないし、まちがって何度も再実行するのもイライラする。 見るだけなら gitk な
2013-05-07 git-now したコミットの誤送信をふせぐ git-now やテスト時に自動コミットをおこなうようなものを使っていると、まちがって git-now なコミットを rebase や squash で消さないで push してしまうことがよくある。 これを防ぐために、 git 1.8.2 から導入された git-push を使ってみよう。 git 1.8.2 はかなり新しいバージョンなので、試す前にバージョンを確認すること。 pre-receive hook でサーバ側で確認することもできる。しかしこの方法ではすべてのプロジェクトのサーバ側に設定する必要があるし、その権限が与えられていない場合もある。 .git/hooks/pre-push の用意 新しめの git で git init すると .git/hooks/pre-push.sample というのが生成される
2013-04-19 あなたのプロジェクトに愛をささやきましょう ネタ Makefile に次の内容を足しておきます。 .PHONY : love love : @echo " ♥♥♥♥♥♥ ♥♥♥♥♥♥\n\ ♥♥♥♥♥♥♥♥♥♥ ♥♥♥♥♥♥♥♥♥♥\n\ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥\n\ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥\n\ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥\n\ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥\n\ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥\n\ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥\n\ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
2013-04-09 使う rbenv-gemset をスクリプト内で指定する ruby rbenv rbenv-gemset rbenv の gemset をつかうと、ちょっと試したい gem をグローバルの gem list を汚さずに利用できる。 rvm の gemset とほぼ同等の機能を提供するが、使い勝手がすこしちがい、 rbenv のほうがスクリプトをもちいた拡張に向いている。 複数の gem に依存する大きなプロジェクトやスクリプトを配布する場合は、 gem するか、bundler を使えばよい。 しかし、すこし試したい場合や普段づかいの書く場合にいちいち gem するのは面倒である。 かといって、グローバルの gem list にいろいろ入れると、散らかっているようで気分がわるいし、再セットアップのときになにを入れたらいいのか分からなくなりうる。 そこで、 rbenv-g
2013-01-28 Valgrind でメモリリークをデバッグ C++ C/C++ でメモリリークをデバッグするツールはいくつかある。代表的なものだと mtrace ccmalloc dmalloc LeakTracer valgrind など。 OpenCV と X11 を使ったプログラムのデバッグにおいて、 valgrind が役にたった。 使い方を他のツールのものもあわせてメモしておく。 紹介しているブログ記事や、それぞれのツールの example では通常短いプログラムを例に出している。 短いプログラムでそれなりの結果がでるのはあたりまえで、ライブラリを使って長時間動く複雑なプログラムにどれだけ対処できるかが腕のみせどころである。 今回は再現が簡単で、実行時間もせいぜい10分もとれば十分だったので、ケースとしてはそんなに難しくなかったが、規模が大きくなると解析結果を見ることすら困
2013-01-25 使っていなかったが、今後使っていきたい emacs 拡張 emacs emacs の設定は放置しておくとどんどん肥大化していく。 最近 emacs の動作が不安定になったり、拡張の衝突でうまく動作しない場合があったりしたので、一回全体を整理してみた。 「あ、これ便利そう」と思って入れてみても、次の日までそのバインドを覚えてられないので結局使わない、みたいなことがよくある。 そこで普段あまり使っていない機能は便利なものでもバッサリ削除し、必要最小限に留めた。 実際に動作効率が向上したかはよくわからないが、すくなくともなにが入っているかの頭の整理にはなった。 整理したうえで、普段使ってなかったけどこれからは積極的に使わなきゃな、と思ったものを忘備をかねて書いておく。 highlight-symbol.el http://emacsmode.googlecode.com/s
2012-12-09 OMake で快適なビルド環境を構築する ocaml emacs flymake この記事は OCaml Advent Calendar の 12/9 の記事です。 PARTAKE - OCaml Advent Calendar 2012 OMake の話をしますが、じつはほとんどのテクニックは Make でも使えるので、あまり OMake Specific というわけではありません。 OMake の使い方とか便利さアピールというより、環境構築の参考にしていただけると幸いです。 この記事は次のバージョン構成のもとに記述しています。 OCaml version 4.00.0 OMake 0.9.8.6 (release candidate 1) Emacs 24.1 OMakeとは OMake は OCaml 製のビルドツールで、make によく似た作りになっています
2012-07-13 html_safe と sanitize と simple_format と raw rails このへんの HTML をあつかう仕組みがよくわかってなかったので調べた。 ソースコードの引用はすべて現時点での github から。 4b4a85515b simple_format text_area に入力された文字列に、p とか br を適宜いれて HTML として表示したときにうつくしく見えるようにするやつ。 https://github.com/rails/rails/blob/c5205041f65206a1490063b08915e7b2a2151a61/actionpack/lib/action_view/helpers/text_helper.rb#L266 def simple_format(text, html_options={}, optio
先日の #shibuyarb の懇親会ですこし話したら、わりと食い付いてもらえたので、 knowledge worth spreading だと感じた。git の設定を中心に共有する。 ワークフロー @kyon_mm さんの Continuous Commit の熱心な信奉者である。 Continuous commit とは continuous integration, continuous delivery とおなじように、開発中のコミットを自動化する試みである。 continuous commit という言葉はなくても、おなじようなことを自分でやっているひとは多そうだ。 continuous commit は大量のコミットログを残すので、これを整理する作業はけっこう負荷が大きくなる。 最近はこのあたりを改善している。似たようなワークフローを採っている人には役にたつと思う。 コミットを
飛びいりでしたが混ぜていただけて大変楽しい時間を過せました。 ruby コミュニティはどこもそうですが、 shibuya.rb もレベルの高い方が多く、刺激になりました。もっと勉強せんと。 「Jubatus 5 分クッキング」という題で、 Jubatus の簡単にはじめられる側面を紹介し、こないだの Qiita Hackathon で @kumagi さんと一緒に作成したアプリケーションを紹介しました。 今後、 qiita も Jubatus も機会をみつけて触っていきたいなと思います。 Jubatus とは Jubatus(ユバタス)は、大規模分散上でリアルタイムで機械学習を行うためのフレームワークです。 Jubatusを公開しました | Preferred Research しかも、簡単です。 インストール jubatus は依存性解決が大変… glog-0.3.2 libevent-
次のページ
このページを最初にブックマークしてみませんか?
『tomykaira makes love with codes』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く