2013-01-01から1年間の記事一覧

より低レベルな Git コマンドを使って他のプログラム (e.g. Vim) と連携する

このエントリはGit advent calendar 2013の24日目のエントリです。私は普段から Vim というテキストエディタを使ってコードを書いています。また unite.vim というプラグインをファイルやバッファを選択して開くといった用途などに利用しています。unite.vim…

Clojure で前景色と背景色が見やすいか検証するライブラリを書いた

aereal/clj-visible-colors · GitHubClojure で遊ぶためにある2つの色がじゅうぶんに見やすい輝度差と色相差を持っているかを検証するコードを書いた。アルゴリズムはTechniques For Accessibility Evaluation And Repair Toolsから拝借した。 レコードを定…

pkgutil(1) の zsh 補完関数を書いた

自分は zsh の補完関数をシェルのプロンプトからシームレスに読めるドキュメントだと考えているので、コマンドを使う頻度に関わらず補完関数の存在に頼っているところが大きい。最近使う機会がいくらかあったので pkgutil(1) の補完関数を書いた。dotfiles/.…

Travis CI 上の Poltergeist で撮ったスクリーンショットを確認する方法

Capybara + Poltergeist を使った統合テストがローカルの開発環境 (OS X) では成功するが Travis CI では失敗するという現象に遭遇して困っていたら、Poltergeist の README に「とりあえずスクリーンショットを撮ってみなよ」と書いてあった。 Depending on…

metarw を試す

Vim

ふと metarw というファイルのように読み書きできるインターフェースをつくるためのフレームワークを使ってみたくなったので試した。 metarw is a Vim plugin to provide a framework to read/write a file-like argument of which name is written in URI-l…

ソフトウェア・テストと安全なソフトウェアを作ることについての思索

テスト書かずに退職する人間にだけはならない— 川 (@aereal) 2013, 10月 14「重要な役回りを担っていたエンジニアが大部分の仕様を握ったまま退職して炎上」みたいなの、重要なエンジニアを引き止められなかった会社が悪いし、テストや文書に仕様を残さない…

喫茶葦島の休業日を iCalendar 形式で出力する Web サービスを作った

葦島 定休日カレンダー aereal/ashijima-holidays-calendar · GitHub 喫茶葦島は不定休なので気が向いたときに行こうと思って休みだと悲しいので、いつも行く前にチェックするようにしているのだけれど、いい加減ばからしくなってきたのでカレンダーに入れる…

Pry で試行錯誤しながらスクリプトを書く

DB からレコードを引いてきて、その値をもとに HTTP API を叩くとか、そういったコードを書くこと機会はたくさんある。むずかしいことを一度にたくさん考えられないので、逐次、自分が正しい (= 意図した) 状態にあるか、ということを確認しないとこういう複…

最近試しているフォント

Vim で https://github.com/ddollar/foreman/blob/master/lib/foreman/engine.rb を開いている。 slashed-zero であること (好み、O (Large Oh) と区別できればよい) l (small L), 1 (number one), | (bar, pipe), I (large I, eye) が区別できる Monaco OS …

Foreman で Test::mysqld のようにテスト用のデータベースを起動する

Test::mysqld とは Perl に Test::mysqld というモジュールがある。テストを実行するときに MySQL のインスタンスをよしなに起動してくれる。同じテストスイート (プロジェクト、リポジトリ) を並行して実行する場合、データベースの接続先は同じなので複数…

YAPC::Asia 2013 に参加してトークを聞いた感想

生まれてはじめて YAPC::Asia に参加した。 PSGI/Plack・Monocerosで学ぶハイパフォーマンスWebアプリケーションサーバの作り方 - YAPC::Asia Tokyo 2013 Perl and Riak - 分散データストア Riak を Perl から "爆速" で使うために - - YAPC::Asia Tokyo 201…

YAPC::Asia 2013 で『Vagrant と Chef で プログラマブルな 開発環境をつくる』話をした

Vagrant と Chef で プログラマブルな 開発環境をつくる // Speaker DeckYAPC::Asia 2013 に参加した。「どうやってつくるか」みたいな実践的な話は、どうせもっと使い込んでいる人たちのほうがおもしろい話ができるので、今回の発表ではそういった話に重き…

Chrome Web Store から Microdata を抽出して JSON にするサービス

Chrome Web Store の permalink はバージョン番号とかが WebApplication のプロパティとしてマークアップされていて簡単に抽出できそうだったのでやってみた。 Microjson :: Microdata -> JSONたとえば https://chrome.google.com/webstore/detail/%E3%81%AF…

Sinatra + Sprockets で assets のテスト

config.ru に map "/assets" do run Sinatra::Application.sprockets end とか書いてもテストでは config.ru が暗黙のうちに読まれることはないのでマウントされず必ず 404 になる。テストで使う Rack アプリケーションのインスタンスを渡す際にも map すれ…

ActiveRecord::Tasks::DatabaseTasks のつかいかた

ActiveRecord には ActiveRecord::Tasks::DatabaseTasks というモジュールが定義されている。Rails の db:create などの Rake タスクは実質的にこのモジュールで定義されている create_current などのメソッドを呼び出している。ActiveRecord 単体でこれら A…

Git リポジトリのトップからの相対パスをプロンプトに表示する

zsh

今、どこにいるか知りたいので、zsh のプロンプトにワーキングディレクトリを表示している。しかし、リポジトリの中ではそのリポジトリがどこにあるかということはあまり重要ではなくて、リポジトリの中のどのディレクトリにいるか、ということのほうが重要…

vimrc 読書会で自分の .vimrc を取り上げられた

Vim

vimrc 読書会という催しがかれこれ1年以上続いているようで *1 ちょくちょく取り上げられた vimrc を眺めつつ設定を参考にしたりプラグインを試したりしてみていた。 過去に取り上げられた vimrc を見ると自分でプラグインを書くくらいハードコアな方の設定…

Evil (Emacs) を使ってみようとする

aereal/emacs.d · GitHub 猛暑で頭がおかしくなって Evil 使ってみることにした。頭がおかしくなったというのは、「ほげ言語のパラドックス」よろしく、自分が満足している現状というのは本当に理解してその上で納得しているのか、それとも単に知らないだけ…

cpanfile の構文を watchdogs.vim (+ quickrun.vim) で検証する

最近は Perl で書かれたプロジェクトの依存モジュール管理は cpanfile で行われていることが多い*1ので自然と cpanfile を読み書きする機会も増える。cpanfile もきちんと構文が定められているので、些細な構文間違いに気付かぬままコミットしてしまうといっ…

dotfiles を正しくインストールできるかテストする + Travis CI でビルドする

aereal/dotfiles · GitHubいわゆる dotfiles, シェルやエディタの設定の類を GitHub に置いてある。リポジトリ下にあるファイルを (ホームディレクトリに) インストールする Rake タスクを定義してあるのだけれど、このタスクが期待した動作をするかテストを…

Io (iolanguage) で書かれたプロジェクトを Travis CI でビルドする

せっかく ltsv.io にはテストがあるので CI でビルドできたらいいと思っていたので、Travis CI のドキュメントを眺めてみたところビルドは10分でタイムアウトする制限がある以外にはかなり自由にビルドを行えるようだった。Travis CI の環境をみるとデフォル…

YAPC::Asia Tokyo 2013 で「Vagrant と Chef でプログラマブルな開発環境をつくる」話をします

Vagrant と Chef でプログラマブルな開発環境をつくる - YAPC::Asia Tokyo 2013 複雑で大規模なアプリケーションはやがて開発環境を整えることさえ、むずかしくなっていきます。 複数のミドルウェアや複雑なモジュールの依存関係の解決……などなど。 このトー…

Template Toolkit 2 の出力結果にテンプレートファイル名を付与するモジュール

aereal/Template-Context-SourceMap · GitHub id:r7kamura さんが作った view_source_map.gem をいいアイデアだなあ、と思っていて、折しも INCLUDE/WRAPPER が舞う嵐のようなテンプレートを抱えるアプリケーションの開発というかデバッグにおいてまさにこう…

sudo を実行したときにどのユーザのパスワードを求められているかプロンプトに表示する

--- /etc/sudoers.orig 2013-07-02 01:08:27.000000000 +0900 +++ /etc/sudoers 2013-07-02 01:10:45.000000000 +0900 @@ -43,3 +43,5 @@ # Samples # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom # %users localhost=/sbin/shutdown -h now + +Defa…

Git のようにサブコマンドごとに分割された man を自然に開く

zsh

Open Git's man pages wisely · 5f5c909 · aereal/dotfiles · GitHubGit の man はサブコマンドごとに分割されている。たとえば git filter-branch だと man git-filter-branch のような。ただ、普段ハイフンを入れないところに入れるのは戸惑うので man git…

Zsh の補完関数を更新したあとにやる

zsh

rm -f ~/.zcompdump compinit

Perl で RSpec の expect ... change 構文を模倣する

expect.pl sub expect (&@) { my ($effector, $comparator, $state) = @_; my ($before, undef, $after) = map { $_->() } ($state, $effector, $state); cmp_ok $before, $comparator, $after; } sub make_changes (&) { my ($actual) = @_; ("!=", $actual…

つらくない構成管理

小さなgemの代わりにプロジェクトに含む形で機能をホストすること - Beating the Averages(just like me) 複数のプロジェクトを横断して使われるモジュールとかそういうかんじの単位のものをどう扱うか、というはなしについて、僕もいろいろ思うところがあっ…

ハッカーになりたい

プログラミングしなくてもかっこいい! 公式デザインテーマ「Terminal」を追加しました - はてなブログ開発ブログ

Chef で cpanm --installdeps . を実行すると大量のメモリを消費する

経緯 Vagrant で立てた VM を provision する際に Chef を用いて cpanm --installdeps . を実行して依存する CPAN モジュールをインストールする Recipe を書いて実行するとたびたび NoMemoryError で Chef を実行するプロセスが殺されてしまう。まず、デフ…