ブログを移転します。

ブログを http://yamamoto.heroku.com/ に移転しました。

モナモナ言わないクイズ

http://mew.org/~kazu/material/2011-monad.pdf に3つ問題が出されていたので解いてみる。 lwrap, lbind (P. 26) 解答 -- lwrap :: a -> [a] と, しなかったのは -- fwrap :: a -> m a に合わせたので lwrap :: a -> [] a lwrap x = [x] -- lwrap と同様に f…

第5回 スタートHaskell 感想

第 5 回は 10 章, 11 章が対象。10 章は 型とクラスについて書かれている。Haskell で一番特徴的な部分は? と訪ねられたら 型 と答えるかな(今のところ)。 モナド @kazu_yamamoto さんによるモナドのチュートリアル。今回の勉強会における自分の中でのメイ…

第4回 スタートHaskell 感想

今回は8章, 9章が対象。 本を読んでいてわかりにくくなってくるのがここから。でも Haskell として楽しくなってくるのはここから(@ruicc さん曰く)。 パーサー 型 パーサの型は関数。Int とか Char のように値ではなく関数。 type Parser a = String -> [(…

AirMac Express のログを syslog で受け取る

Mac

最近 AirMac Express の調子がおかしい。仕事から家に帰ってきてネットに接続しようとすると、タイムアウトが発生して AirMac Express に接続できない。電源を抜き差しすれば直るが、毎日そうするのも面倒だ。 とりあえず家を離れている間、どのようなことが…

Install PostgreSQL

開発環境で使っている DB を SQLite から PostgreSQL に変えることにした。 理由は、SQLite だと実行できる SQL でも、PostgreSQL だとエラーになることがある。Heroku は PostgreSQL なので、開発環境で問題なく動いていても、Heroku にデプロイしたとたん…

ヒゲ

デニス・リッチー氏の訃報。スティーブ・ウォズニアック氏が iPhone 4S 購入のための列の先頭に並んだという記事。この二つを見て久々に思い出したのが、ヒゲとプログラマーの関係。その関係とは、ヒゲが生えた(生やしている)プログラマーの方が成功する、…

第3回 スタートHaskell 感想

今回はニフティで開催。大森駅には初めて降りた。住宅街とオフィス街が混ざったような雰囲気だった。 発表 資料 http://www.mew.org/~kazu/material/2011-fp.pdf 極意 バグの入り込みにくい小さな関数をつなげて、大きな関数を作る。 速度 length は遅い。あ…

Sinatra, OmniAuth メモ

遅ればせながら OmniAuth を使ってみた。とても便利だったのでメモしておく。 サンプル https://github.com/ymmtmsys/sinatra_omniauth_sample Sinatra, Omniauth, Slim Twitter のアプリ登録では、Access level を Read and write にしておく必要あり。 手…

第2回 スタートHaskell 感想

今回は参加者が 100 名以上いた前回までとは違い、50名強の参加者だった。人が少ないなと思ったが、勉強会としては多い方だろうな。 第 1 部 予習してきた部分の発表。発表だけかと思いきや熱い議論が始まる展開に。初心者向けの勉強会と銘打たれているが、H…

MySQL で既存の非 TEMPORARY テーブルと同名の TEMPORARY テーブルを作成する方法

テストで TEMPORARY テーブルを使いたかったときの話。 Good CREATE TEMPORARY TABLE tbl_name SELECT * FROM tbl_name LIMIT 0 -- テーブルだけを作成したいときに ただし CREATE TABLE ... SELECT は自動的にインデックスを作成しません。 http://dev.mysq…

第1回 スタートHaskell 感想

会場に着いたのが 19 時 10 分頃。ちょうど勉強会が始まる頃だった。 発表 今回の勉強会の対象の 2, 3, 4 章のまとめの発表。基本的には本に書かれている内容なので新たな発見は少なかった。 コメントはネストできる。 複数行のコメントは {- -} で囲む。コ…

Sequel で別名を付けたりテーブルを指定したりする

Sequel でカラムに別名を付けたり、どのテーブルのカラムなのかを指定する方法のメモ。 require 'sequel' DB = Sequel.sqlite Sequel::Model.plugin :schema class Tbl < Sequel::Model unless table_exists? set_schema do primary_key :id end create_tabl…

ツイッターの認証で毎回アプリの許可画面が出る件について

今作っている Web アプリでツイッターの OAuth 認証をする際、毎回このアプリを許可するかどうかの確認画面が表示されていた。以前作ったアプリではそんなことはなかった。 調べたら、認証用の URL は oauth/authenticate と oauth/authorize の 2 種類があ…

Sinatra で正規表現を使ったルートを使う場合に注意すること

Sinatra ではルートの設定に正規表現を使うことができる。例えば以下のような感じで。 get %r{/hello/([\w]+)} do |c| "Hello, #{c}!" end http://www.sinatrarb.com/intro.html 問題 上記の例は公式のページに載っているのだけれど、これをそのまま使おうと…

標準入力のデータをVimで開く

Vim

Vim に "-" オプションを付けると、標準入力からのデータを開けるようになる。コレが結構便利だった。 こんなときに便利だった diff の結果を見る % git diff | vim -git diff の結果を今までは less で見ていたけれど、コレだと白黒でわかりづらい。でも、V…

第0回 スタートHaskell 感想

第0回 スタートHaskellに参加した。定員180人のところへ200名以上の参加希望があり、Haskell の人気っぷりがうかがえる。女性もちらほら。Haskellやるとモテるってホントですか? 感想 Haskell山高い! プログラミングHaskell をマスターして、山の 1 合目付近…

No space left on device

問題 gem ライブラリを幾つかまとめて update したところ No space left on deviceというメッセージが表示され、update は失敗した。 調査 メッセージの内容を見る限り HD の容量が足りなくなったのかと思い、df コマンドを打つも、特に異常なし。 % df -h F…

Haskell Platform

http://d.hatena.ne.jp/kazu-yamamoto/20110523/1306121040 を読んで、Haskell Platform というパッケージの存在を知った。 今まで個別でインストールしていた Haskell 関連のパッケージを削除して、 Haskell Platform をインストールした。 %sudo apt-get i…

Node on Heroku

Heroku の Stacks に新しいバージョンが追加された。まだベータではあるけれど。新しい機能が幾つかあるけれど、その中で一番気になるのは node.js がサポートされるようになったこと(以前より試験的な運用はされていたけど)。 node.jsを使ったアプリの作成…

pushState, popState

github でリポジトリのディレクトリをたどっていくときのエフェクトが気になったので調べてみた。 戻る・進む とりわけ気になるのが、アドレスバーの内容は書き変わるけれど、画面の更新は一部しか起こらないこと。しかも、ブラウザの戻る・進むボタンに対し…

map

Heroku の log コマンドのソースを読んでいたらちょっとした発見があったのでメモ。 log.rb def parse_log(log) return unless parsed = log.match(/^(.*\[(\w+)([\d\.]+)?\]:)(.*)?$/) [1, 2, 4].map { |i| parsed[i] } end map を使っているところなんだけ…

alias

zsh

エイリアスを割り当てているコマンドがある。けど、たまにエイリアスを割り当てる前のコマンドを実行したいときがある。 コマンドの先頭に「\」を付けることでエイリアスを割り当てる前のコマンドが実行できる。 % ls # もともとのコマンド Repos bin local …

zsh + git

zsh

プロンプトに git のブランチ名を表示するようにした。 .zshrc プロンプトに右側に紫色で表示させる。 RPROMPT="%{${fg[magenta]}%}%1v%{${reset_color}%}" # show git branch autoload -Uz vcs_info zstyle ':vcs_info:*' formats '[%b]' precmd() { psvar=…

Symbol メモ

% irb ruby-1.9.2-p136 :001 > :foo => :foo ruby-1.9.2-p136 :002 > :"foo" => :foo ruby-1.9.2-p136 :003 > :"foo" == :foo => true ruby-1.9.2-p136 :004 > :foo-bar NameError: undefined local variable or method `bar' for main:Object ruby-1.9.2-p1…

Heroku + Sendgrid

Heroku からメールを送信したかったので、アドオンである Sendgrid を使うことにした。無料の Sendgrid は 1 日 200通までという制限がある。メールの送信は Daily Cron の結果通知にしか使う予定がないので、特に制限は気にする必要がなかった。 add Sendgr…

デフォルト引数

とあるソースを読んでいて、分らなかった書き方があったのでメモ。 分らなかったのは次のようなコード。仮引数の書き方が ?。 def foo(value = (not_set = true)) p value, not_set end 例示は理解の試金石、ということで幾つか試す。 foo # true # true fo…

Heroku + cron

Heroku のアドオンに Cron がある。1 日 1 回の ではあるが、無料で Cron が使用できる。今回コレを初めて使用した。そのときのメモ。 Herokuの設定 次のコマンドで daily の cron が有効になる。 % heroku addons:add cron:dailycron が起動する時間は http…

Heroku + Sinatra + MongoHQ

Heroku のアドオンに MongoHQ がある。16 MByte までではあるが、無料で MongoDB が使用できる。今回コレを初めて使用した。そのときのメモ。Mongoid 使用。 Herokuの設定 % heroku stack:migrate bamboo-mri-1.9.2 % heroku addons:add mongohq:free Mongoi…

di"

Vim

Vim で 「"」に囲まれた部分のみを削除したいときのコマンド。 「"123"」という文字列で考える。この場合、カーソルを「"123"」の文字列のいずれかの文字に合わせて『di"』というコマンドを実行することで、「"」を残し「123」を削除することができる。 di …