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

小説家という職業 を読んで

「小説家という職業」という本を読んだ(小説家になりたいと考えているわけではない)。 小説家という職業 (集英社新書)作者: 森博嗣出版社/メーカー: 集英社発売日: 2010/06/17メディア: 新書購入: 7人 クリック: 273回この商品を含むブログ (103件) を見る…

HTTPって意外に難しい

web

長い間Webサービスの開発に携わっているのだけれど、HTTP について全然理解していなかったんだ、と思わされる出来事があった。 そのこととは、名前ベースのバーチャルホストのこと。今までは、ドメイン名を変えれば同じサーバ上に複数のサービスを稼働させら…

はてな エンジニアブロガー祭りに参加して

ここ最近ブログを書いていなかったけれど(確認したら 2013年8月8日が最後だった)、書かかないのは損なんんじゃないのか、と思った。 なので、具体的な目標はないけれど、できるだけ書いてみようと思う。 その一歩目がこれ。

Aeson でオプション値を含む JSON を扱う.

JSON の要素が全部が必須であれば簡単だけれども、そうでない場合が往々にしてある。公式のドキュメントにはサンプルがなかったので、ここにメモしておく。 値なし Person の middleName がオプション値。型は Maybe Text。パース時に (.:?) を使用する。mid…

($) と (.)

($) と (.) のことをよくわかっていないので調べる。 ghci で見てみる。 Prelude> :i ($) ($) :: (a -> b) -> a -> b -- Defined in `GHC.Base' infixr 0 $ Prelude> :i (.) (.) :: (b -> c) -> (a -> b) -> a -> c -- Defined in `GHC.Base' infixr 9 . ($)…

ping

Hakell で ping を作った。Haskell で ping を作ろうと思ってから2年以上も経ってしまった。 コードは Gist にある。 ping を作る中で一番苦労したところは、送信するパケットを作成ところ。String (Char) でどうやってデータを作ればいいのかわからなかった…

ネットワークプログラミング(サーバー編)

そろそろネットワークのプログラムを書いてみようと思ったので、echo サーバを書いてみた。 意外に簡単に書けてしまった。 C しか知らなかった頃は、頑張って scoket, bind, listen ... とかシステムコール呼び出してたけど(あと引数の構造体を作るのが面倒…

go

Haskell のライブラリのソースを見ていると、go というローカル関数名がよく使われているのに気付く。今日はData.Map のソース を読んでいたけれど、go だらけだった。 なぜだろうと思う人は他にもいるようで stackoverflow にそのことに関する質問が投稿さ…

foldlに無限リスト?

無限リストに foldl を適用すると停止しないと言うのを前に書いたが、なぜ停止しないのだろうか。 なぜ停止しないのか foldl の定義はこうなっている。 foldl f z0 xs0 = lgo z0 xs0 where lgo z [] = z lgo z (x:xs) = lgo (f z x) xs f を(&&) とした場合…

foldr をやっと正しく理解した

今まで foldr についていい加減な理解をしていたが、やっと正しく理解できた(気がする)。理解できていなかったのは、無限リストに適用しても停止する(ことがある)のは何故かというところ。 よくある例 Prelude.and を foldr と (&&) を使って作ってみる…

Twitterで認証する方法(Batch)

Twitter のタイムラインを取得して、どうのこうのするバッチを作っている(まだ途中)。Twitter のタイムラインを取得する API は認証が必要。Webサービスやアプリ等は OAuth を使うが、バッチの場合はそうも行かない。バッチなど人が介在しないシステムでは…

PG Backups を使った DB のインポート

開発環境の DB の中身を本番環境 (Heroku) の DB にインポートする手順。詳しくは https://devcenter.heroku.com/articles/heroku-postgres-import-export を参照。開発環境の DB は Postgres. 1. 開発環境の DB を dump する。 % PGPASSWORD=myapp_password…

Heroku のアプリに独自のドメインを割り当てる(ムームードメイン)

ここを参考にする。 前提 xxx という Heroku のアプリを作成したとする。作成したアプリの URL は xxx.herokuapp.com www.example.com というドメインを作成したアプリに割り当てる。 Herokuの設定 割り当てたいドメインを追加する。Web の管理画面からでも…

Gem の作成 (sinatra-ajax_only)

思い立ったが吉日、Gem を作成することにした。 どんな Gem かというと、Sinatra の Extension で、Ajax でのリクエストのみを受け付けるルートに Ajax でないリクエスト が来た場合に ステータスコード 403 を返すというもの。公開した Gem はこちら。 403 …

配列のソート

配列の比較は、まず配列の要素数の大小を比較する。 このおかげでソートが自分の期待通りに行かないということがわかった。 次の配列をソートする場合を考える。