読者です 読者をやめる 読者になる 読者になる

配列のソート

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

初めての Pull Request

今日初めて Pull Request を出しました。内容は typo を直すだけという、ホントどうでもいいような内容です。Pull Request の内容はこちら。 結果はというと、見事(?)マージされました。 これで俺も Sinatra の作者の内の一人となったのか。あぁ感無量。…

Foreman で環境変数を設定しよう

Foreman 使っていますか? Foreman はプロセスの実行を一元化する為のツールです。詳しくは http://blog.daviddollar.org/2011/05/06/introducing-foreman.html を見てください。 Heroku を使っている人ならもうおなじみのツールだと思います。Cedar Stack で…

Ruby1.9.3

Ruby を 1.9.2 から 1.9.3 にバージョンアップした時に、一カ所つまずいたことがあったのでメモ。 環境 Ubuntu 11.10 ビルドの手順はこちら 問題 Ruby をインストールした後 gem コマンドを実行すると、以下のメッセージが表示された。 It seems your ruby i…

Control.Applicative.(<$)

Control.Applicative モジュールに (<$) という関数があります。が、どういう関数なのかわからないので調べます。 型 ghci> :m +Control.Applicative ghci> :t (<$) (<$) :: Functor f => a -> f b -> f a 型を見ると、b は使われずに a が残るようです。実…

Aspen to Cedar

Heroku から Aspen stack から Cedar stack に移行してくださいね、というメールが来ました。 現在 Aspen stack 上で稼働しているサービスは 2 つあり、そのうち一つは破棄してかまわないサービスでしたが、 もう一つは残しておきたかったので、移行すること…

Haskell でソート

Haskell を学習し始めた頃、学習の一環として色々なソートを実装していたのを思い出した。そのときと比べて今はどうなのか、ちょっと試したくなりましたので、再び実装してみた。 現代版のコード (gist) バブルソート マージソート 選択ソート 挿入ソート 比…

Random Bool

すごいHaskell P.340 に State モナドを使って乱数の生成をきれいに書く例が載っている。 import System.Random import Control.Monad.State randomSt :: (RandomGen g, Random a) => State g a randomSt = state random threeConins :: State StdGen (Bool,…

State モナドって...

前回 Writer、Reader、State モナドの理解を深めようと書いたので、State モナドについて詳しく見ていこうと思う。すごいHaskellたのしく学ぼう! を参考に進める。 State の定義 すごいHaskell P. 335 より。 newtype State s a = State { runState :: s -> …

モナドって...

なんとなくモナドのことが分かってきたかな、どうだろう。っていうのが最近の感覚。 モナドが実現しようとしていることは大体理解できたと思っている。実現しようとしていることが何か、一言で言うと、注力したい部分だけに注力できるようにし、注力したくな…

PHPカンファレンス2012に参加してきました

PHPカンファレンス2012に参加してきました。 PHPカンファレンスに参加するのは今回がはじめて。過去の写真を見ると小ホール(?)ごとにセッションを行なっているようだったが、今回は大ホールの中をパーティションで区切って各セッションを開く形となっていた…

list 2

前もちょっと書いたけど、list() の使い方に関して。ちょっと納得いかんのですよ。 バージョン 試した PHP は以下のバージョンです。マシンは MacBook Air。 % php -v PHP 5.3.10 with Suhosin-Patch (cli) (built: Feb 20 2012 22:55:53) Copyright (c) 199…

コメントの罠

PHPUnit でテストを作成していたときのこと、なぜかテストケースとして認識されないテストケースがあった。そのコードを模したコードと、実行結果を以下に載せる。 assertTrue(true); } } % phpunit unit.php PHPUnit 3.6.8 by Sebast…

list

だからどうしたっていう話なんですが。

microtime の罠

こんなコードを書いていると痛い目にあいますよという話。もとい、痛い目にあった話。 問題 こんなコードというのは次のようなコード。

バリデーション重要

検索のリクエストだからといって、入力されたパラメータをバリデーションせずにそのまま SQL にバインドしてはだめ。 数値を期待している変数に、数値として解釈できない文字列が渡された場合、SQL の実行に失敗してしまう。Oracle の場合は エラー: ORA-017…

-fno-warn-unused-do-bind

Haskell でコンパイルするとき (ghci) にはいつも -Wall オプションをつけるようにしている。でもそれがかえって邪魔になる場合がある。例えばどんなときかというと、以下のようなコードの場合。 parseFloat :: Parser LispVal parseFloat = do num1 <- many…

aria2 のインストール

aria2 をインストールしたときのメモ。 Homebrew をインストールしてから、brew コマンドで aria2 をインストールするという流れ。 Homebrew のインストール % /usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Librar…

(Yii において) メールアドレスの長さは 254 バイト以下で

メールアドレスのバリデーションの仕様に、 長さは 256 バイト以内であること、という仕様を入れていた。テスト時 256バイトのメールアドレスを入力したときに、なぜかエラーになる。そのときの設定は以下。問題ないはずなんだが。 256, 'encoding' => fals…

Haskell Platform 2012.2.0.0 をインストール

こういう書き方も出来るんだ。case や let 〜 in ではよくやるけど、where でも出来るんだ。左辺は関数名と引数、右辺は式だとばかり思っていた。例示したコードは適当。 foo xs = h * (-1): ts where (h:ts) = xs -- ここ where でも出来るのならと思って T…

すごいHaskell 始めました。

冷やし中華始めました、みたいな感じで。 すごいHaskellたのしく学ぼう! を読んでいる。Haskell の全くの初心者ではないので、はじめの方はそれほど知らないことはないだろうと思っていたけど、そうでもなかった。まだまだ勉強不足ですな。 知らなかったとこ…

引数を引き回す

いままで幾つか Haskell のコードを書いてきた。そうしているうちに、「関数プログラミングとは『永続データプログラミングを奨励していること』」の意味が理解できてきた。データの値を書き換える(再代入)のではなくデータを新しく作る、ということかな、…

局所変数

こういう書き方も出来るんだ。case や let 〜 in ではよくやるけど、where でも出来るんだ。左辺は関数名と引数、右辺は式だとばかり思っていた。例示したコードは適当。 foo xs = h * (-1): ts where (h:ts) = xs -- ここ where でも出来るのならと思って T…

7つの言語 7つの世界

図書館に「7つの言語 7つの世界」の予約をしたのはいつだったろうか?予約をしたことをすっかり忘れていたところ、先週になって貸し出しの用意ができたと連絡が来た。なので、早速借りてきて読んでいるところ。 練習問題も幾つかあったので、解いてみようと…

array_mapの性能

array_map 使っていますか。私はあまり使いません。Ruby や Haskell だと map はよく使うのですが、PHP では foreach ばかり使っていて、array_map はあまり使いません。 使わない理由としては、いちいち関数を定義するのが面倒、と言うのがまず一つ。Haskel…

Yii に関する覚え書き (スキーマキャッシュ)

http://www.yiiframework.com/doc/guide/1.1/ja/database.ar#sec-2 にはアクティブレコードを使用する場合、データベーススキーマに変更がないのであれば、キャッシュを使うことでメタデータの分析をしなくて済む、とある。 説明には schemaCachingDuration …

Yii に関する覚え書き (バリデーションルール:length編)

ドキュメントをよく読め、ということです。 バリデーションの設定で、以下のような設定を書いた場合、username の長さが3以上かつ12以下であることをチェックする。 array('username', 'length', 'min'=>3, 'max'=>12), 始め、"長さ"というのは文字数のこと…

Bootstrap 化

Bootstrap があっという間にバージョン2.x になってししまった。 私が Bootstrap を知ったのは去年の秋頃だったと思う。それから Bootstrap を使って何か作ろうと思っていたのだが、公開できるほどのモノは現在のところできていない。 なので、とりあえず自…

undefined method `dependencies' for Appname:Class (NoMethodError)

padrino でアプリを作ろうとしていきなりつまずいてしまった。 つまずいた内容は以下の通り。メソッドが定義されていないとのこと。 % padrino start /home/user/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/padrino-core…

わかりやすい書き方

コードを書く上で心がけることの一つに「わかりやすく書く」というのがあると思う。 先日、ユーザのパスワードとして入力できる文字を半角英数字 + 記号のみとした場合、その妥当性の検証はどの様に書くかということが話題になった (文字列長に関しては今は…

Yii に関する覚え書き (Selenium)

Yii というか、Selenium に関してなのだが。 環境 主なのはこちらを参照 Selenium Server 2.17.0 PHPUnit 3.6.8 PHPUnit_Selenium 1.2.0 問題 テストに関するチュートリアル を試していたのだが、Selenium を使ったテストどうしてもパスしない。テスト結果は…

Yii に関する覚え書き (PHP Fatal error: Cannot instantiate abstract class CActiveRecord)

Yii のチュートリアルを試していると、"PHP Fatal error: Cannot instantiate abstract class CActiveRecord" というエラーが発生して先に進まなくなってしまった。 上記のエラーが発生するは CActiveRecord を継承したクラスが実装すべきメソッドを実装して…

Yii に関する覚え書き (複数のDBコネクション)

DBサーバへのコネクションを複数持ちたい場合がある。例えば、セッションデータとアプリケーションのデータが別のDBサーバにある場合など。デフォルトの設定ファイルでは一つしか設定がないが、2 つ以上持たせられるのか。 protected/config/main.php を編集…

Yii に関する覚え書き (Gii の使用)

問題 Yii には Gii というコードジェネレーターがある。それを使ってみようとしたのだが、403 Forbidden が返ってくる。 解決 原因は開発環境にあった。自分が試した環境は Yii は仮想マシン上のサーバで稼働している。ブラウザはホストマシンを使用している…

Yii に関する覚え書き (protected ディレクトリの移動)

Yii を使って普通にファイルを作成すると、公開ディレクトリの下に色々とファイルが作成される。それってちょっとまずいよね、ということで移動させることに。 環境 Ubuntu 11.10 Apache 2.2.20 DocumentRoot => /var/www PHP 5.3.6 yii 1.1.9 次のコマンド…

zsh:1: command not found: scp

CentOS 6.2 をインストールした。 その際 Minimul 構成でのインストールを行ったのだが、これが本当に Minumal だった。前からあるサーバから新しく作成したサーバに向けて scp でファイルを転送しようとしたところ、エラーが発生した。scp コマンドが入って…

Jenkins の導入

これから始めるプロジェクトで Jenkins を導入しようか迷っている。とりあえず使ってみようということで、自宅の開発環境に Jenkins をセットアップしたときのメモ。 環境 Ubuntu 11.10 Jenkins 1.446 Git 1.7.5.4 Ruby 1.9.2p290 (rbenv) Rake 0.9.2 Rspec …

コンビネータ

Haskell に関することを調べていると、「コンビネータ」という言葉がさらっと出てくる。特に説明もなく出てくる。Haskell 以外の言語(私が主に使ってきたのは C, PHP, Ruby)では聞かなかったので戸惑う。しかも横文字なので字面からでは意味が推測しづらい…

rbenv の導入

rvm でインストールされている Ruby のバージョンを上げようとしたところ、inode の空きがなくなってしまい build できなかった。そのサーバは仮想マシンで HDD は 8G しか積んでいない。そこが敗因か。これでは日々の作業もままならない。 なので、新しく開…