ひとつの区切りみたいな文章を書いてみたい時もある

そういえば僕いま27歳なんですが、ネットの噂によるとなにかを作りはじめる年齢らしいです。

幸いにも、今もなにかを作っている状況に身をおけていますし、これからさらに楽しいことが待っていそうな気がしています。

そういった状況になるまでにやってきたことを軽くまとめてみます。
きっかけはある先輩から「アウトプットが大事だよ!」言われたことです。思えば、あれからずいぶん時間が経ってしまいました。

例えば、あくまで例ですが、お仕事が楽しくなかったり、ゆるゆるとキャリアを積み上げていくことに危機感を感じたりしたら、これから書くことを試してみると良いかもしれませんね。なにか変わるかもしれません。

アウトプット
  • ブログを書く
    • やってみた記録
    • なにかを解決した記録
    • 便利なやりかた
  • コードを書いてGithubに公開
    • できればREADMEちゃんと書く
  • Pull Request送ってみる
    • 臆せずに

アウトプットをするには、インプットが必要ですよね。

インプット
  • ブログを読む
  • 勉強会に行ってみる
  • 気になる技術をためしてみる
  • 新しいものを作ってみる

ぼんやりしてる時間はないですよ、急いで始めて!
でも、あせらずに。少しずつでも、着実に続けましょう。
そう、大切なのは続けることです。
I/Oを積み重ねることで出来ることが増えていき、また周囲に何ができるのか何に興味があるのかを知ってもらいましょう。
きっと、何か変わりますし、変える力を得られると思います。

もう1回。
大切なのは続けることです。

ありがちな、たいしたことない内容でしたが、誰かが何かする参考になるといいですね!

homebrewでruby1.9.2いれてrubygemsまわりでのトラブルもろもろ対処

ruby1.9.2しか使わないでしょ。homebrewで入れるのが一番楽だよ。」
あ、rbenvすらいらないね。

まずは、rbenvを使わない設定しときましょう。とはいえ、いつか使うかもしれないので消しはせず、使わなくするだけの設定にしました。
~/.zshrcから関連の設定をコメントアウトするだけ。

ruby 1.9.2 インストール

% brew info ruby
ruby 1.9.2-p290
http://www.ruby-lang.org/en/
Depends on: readline, libyaml
/usr/local/Cellar/ruby/1.9.2-p290 (10590 files, 59M)
(略)
% brew install ruby

infoで確認した通り、1.9.2が入ります。

gemいろいろインストール

$ gem install bundler earthquake heroku powder padrino

依存で色々はいるはず。
ところがうまくいかない。

% gem -v
1.3.7 # いや、古すぎるでしょ
% gem update --system
% gem -v
1.8.7

上記gem色々インストールに成功するものの、コマンドがないといわれる。
gemで入る実行可能ファイルにpathが通ってないくさい。

% gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.11
  - RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-darwin11.2.0]
  - INSTALLATION DIRECTORY: /usr/local/Cellar/ruby/1.9.2-p290/lib/ruby/gems/1.9.1
  - RUBY EXECUTABLE: /usr/local/Cellar/ruby/1.9.2-p290/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/Cellar/ruby/1.9.2-p290/bin
(略)

なるほど。EXECUTABLE DIRECTORY を~/.zshrcのPATHに追記してシェルを再起動。

やっておきたいgem設定。

いつぞや設定したのがそのまま有効になっててよかった。

% cat .gemrc
gem: --no-ri --no-rdoc

RubyGemsでgemのインストール時に--no-ri --no-rdocをデフォルトにする - アインシュタインの電話番号☎

かんそう

それぞれの言語でのパッケージ管理はともかく、言語自体のインストールや環境設定はhomebrewにまかせちゃうのが楽でいいですね。Nodeもhomebrewで入れちゃったりしています。fomulaを自分で書いたり、任意のバージョンのformulaをチェックアウトしてインストールとかもできますし。

PadrinoでもCoffeeScriptをつかいたい

CoffeeScript、いいですよね。
ちょっと困るかもしれないのが、どうやって扱うか。デプロイ時にjsファイルにコンパイルするか。できれば、coffeeファイルそのままで扱いたいです、楽なので。
では、Padrino で使いたいときにどうしたらいいのか。

Sinatraまかせ

PadrinoはSinatraベースなので、CoffeeScript Templates を使うという手があります。
しかしながら、この場合は .js にアクセスした場合にcoffeeを呼ぶようにルーティングを追加することになると思います。

get '/application.js' { coffee :application }

たぶんこんな感じ。複数マッチさせるならこれが参考になりそう
自分で書く.coffee以外の.jsファイルが混在するとカオティックになりそうですね。

hamlのcoffeeフィルタを使う

haml内に直接書けます。書けますけど。

PadrinoのPluginをつかう

スタートPadrino : ATND でも@uduzuraさんから紹介がありましたが、Padrino にはPluginというものがあります。
使ってみましょう。

% padrino g plugin coffee

Gemfileに必要なgemを書いてくれたり、設定ファイルを生成してくれたりします。
生成された lib/coffee_init.rb で指定されている public/javascripts/ に .coffee ファイルを置けばいいですね。
また、viewから読み込むためには javascript_include_tagヘルパが使えます。便利ですね、Padrino。

サンプルコードはこちら。
marutanm/padrino-coffeescript · GitHub

Herokuではどうする?

Herokuでは、jsのランタイムがなくてgemを入れる必要があったりします。それから、barista.gem を使う必要もあります。baristaを入れると.coffeeファイルを置く場所が変わったりします。それについては別途書く、予定。予定。予定。

Herokuでのたぶん一番かんたんなTwitter Streaming APIの使いかた

herokuのドキュメントでは、こんなのが紹介されています。
Consuming the Twitter Streaming API

twitter-stream.gem を使いましょう。あのearthquake でも使われているようです。

サンプルコードから、認証にOAuthを使うようにして、tweetを受けとるたびにPusherに送るとこんな感じです。
marutanm/twitter-stream-pusher · GitHub
APIキーなんかは環境変数に入れて、herokuのcedarスタックでworkerプロセスとして動作させることを想定しています。

さて、workerプロセスを動かした場合、webプロセスはどうするか?herokuではプロセスふたつ動かすとお金がかかってしまいます。ひとつの手段としては、webプロセスは別のアプリケーションにするのが考えられますね。
workerプロセスでstreamingを処理してpusherへ送信、webプロセスではページを提供しつつpusherからwebsocketで受け取る。便利ですね、herokuも、pusherも。とはいえ、pusherも無料では20コネクションまでと制限があったりするので悩ましいですが。

CUI環境のフォントをRictyに変えた

f:id:marutanm:20111015200707p:image:right
プログラミング用フォント Ricty
Terminal.app はRictyに。MacVimはひとまずInconsolataにしてみています。
いい感じです。半濁点が大きいのがかわいい。

Rictyの生成には上記リンク先にあるスクリプトを使えばいいのですが、事前にもととなるフォントの導入とFontForgeのインストールが必要となります。
今回、homebrewでFontForgeをインストールしたのですが、ちょっと詰まったのでメモ。
Mac OS 10.7.2で、homebrew v0.8を使っています。
ただ単に $ brew install fontforge としただけでは入りませんでした。
コンパイルにLLVMが使われるようで、インストール時のログを見てみると「警告!LLVM使われてるけど、LLVMじゃあインストールうまくいかないって報告でてるよ」って旨がありました。わかってるならformula側でコンパイルオプションどうにかしてほしいものです。

$ brew install fontforge --use-gcc

これで出来ました。

Twitterクライアントにearthquakeを使っているのですが、ターミナル上なのでそのフォントもRictyになりました。視認性がたいへん良くて気に入っています。ちなみに、earthquakeを使うにあたり、iTermでディスプレイ下部に3行くらい表示して常に監視とかためしてみたんですが、今はTerminal.appをフルスクリーンにしてときどき確認するという使い方に落ち着いています。

Herokuのdevcenterをスマホから快適にみたい

f:id:marutanm:20111006232621p:image:left
そのために、つくってみました。
http://mobile-devcenter.heroku.com/
ちなみに、本物のURLは http://devcenter.heroku.com/

敬虔なエンジニアのみなさんは電車で移動中とか見ますよね、herokuのドキュメント。iPhoneからだと見やすくはない。ならば見やすくしてしまえ。

jQuery Mobileを使っています。HTMLドリブン、いいですね。簡単にそれっぽくなります。
裏ではNokogiriでスクレイピングしてて、Sinatraが応答している感じです。

とりあえずのTODOとしては、検索できるようにと、データのキャッシュあたりをどうにかしたいと思っています。検索窓どこにつけよう・・・
あとは、jQuery Mobileのハッシュの扱いとアンカーリンクが衝突しててうまく動かないあたりを修正しないと。

というか、こんなURLを使えて、スクレイピングしてきた内容を表示してて大丈夫なのか?とりあえずtwitterで聞いてみたんで、応答待ち。もっとちゃんとした手段で聞いてみたほうがいいかもしれないけれども。

ソースはこちら。
marutanm/mobile-devcenter · GitHub

HerokuのRuby 1.9.2でExecJS::RuntimeUnavailable

Sinatraアプリをherokuにpushすると、こんなエラーが起きました。

2011-10-05T11:32:54+00:00 app[web.1]: /app/.bundle/gems/ruby/1.9.1/gems/execjs-1.2.9/lib/execjs/runtimes.rb:47:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

ひとつ前のコミットでは問題なく起動していました。なにを変えた?

CoffeeScriptを使おうと、Gemfileに追加しました。
ちなみに、ローカルでは問題なく動作しているので、herokuの問題のようです。

対策

追加でgemを入れましょう。

group :production do
  gem 'therubyracer-heroku', '0.8.1.pre3'
end

ローカルではいらないので、production指定で。

参考はやっぱり安心と信頼のstackoverflow
Problem deploying Rails 3.1 project to Heroku: Could not find a JavaScript runtime - Stack Overflow

他にも、execjsとrubyracerを入れれば動くという情報もありましたが、v8エンジンのコンパイルに時間がかかりすぎるのでお勧めできませんし試してません。