programming

正規表現のすゝめ?

正規表現使、便利ですよね。使っていますか? Webサービスの開発に関わっている人なら少なからず使ったことはあるのではないでしょうか。例えば、文字列置換やスクレイピング、バリデーション、Apache の mod_rewrite や Rails の routes のような URL 書き…

CSV

CSV形式のデータを作成する方法はどういう方法がメジャーなんだろうか? 私がよく用いる方法 配列にデータを追加していき最後にその配列をjoinする。

git-sh

git-shをインストールした。 便利なところは git を使うときに、「git 〜」と打たなくて済む。 プロンプトにブランチ名が表示される。(色も付けられる) % git sh master!git-sh> status # {ブランチ名}!{ディレクトリ} > {コマンド} # On branch master not…

岡崎図書館事件で思い出した

岡崎図書館事件での技術的な調査の結果が公開された。 直接開発に携わったわけではないが、過去に似たような現象が発生しているWebサービスがあったなと思い出した。 そのサービスは、ある一定数のリクエストを受けるとそれ以降のレスポンスを返さなくなって…

affected rows

MySQL で UPDATE 文を実行したときに、マッチした行の数と実際に更新処理がされる行の数は一致しない。 ということを知らずにいて一時間ほどさまよってた。 UPDATE 文が作用した行数が 1 以上であれば、すでにテーブルにはレコードがあり、そのレコードが更…

セキュア・プログラミング

インターネット上で Web アプリケーションのセキュリティ対策に関する記事をよく目にする。それだけセキュリティへの関心が高いということの現れだろうか。 数ある中でも、ココを押さえとけってところは 安全なウェブサイトの作り方:IPA 独立行政法人 情報…

check syntax only

文法チェックのオプション PHP % php -l sample.php Perl % perl -c sample.pl Ruby % ruby -c sample.rb Python python コマンドにはないっぽい。PyChecker とか別コマンドで。Perl と Ruby のオプションはほとんど同じなので、Perl で使えるオプションは R…

Sinatra

Ruby のWebフレームワーク Sinatra が気になったので試してみた。 環境構築 他の方が書かれているブログ等を見ると、コマンド一発でインストールできるようだ。実際私もコマンド一発でインストールできたので、テストコードを動かしてみた。ぁらら、エラーが…

天下一プログラマーの続き

前回の続き。 天下一プログラマーコンテストの予選第一回の3問目が効率の良い方法で解けなかったので調べてみた。というか、他の人が公開しているコードを探しただけ。で、参考にさせてもらったのはここ http://romanchu.blog105.fc2.com/blog-entry-402.htm…

天下一プログラマー

天下一プログラマーコンテストが開催されている。どれどれ、ちょっと参加してみようかな。って、応募資格は学生さんのみ。残念。 予選第一回の問題が http://lab.klab.org/young/2009/07/%E5%A4%A9%E4%B8%8B%E4%B8%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E…

オブジェクトID

先日の日記で、Fixnum のオブジェクトのオブジェクトIDと String のオブジェクトのオブジェクトIDを調べた。そのとき気になったことがあったので、少し調べてみた。気になったことというのは、Fixnum と String のオブジェクトIDがあまりにも違いすぎる、と…

Ruby練習6 (Red and Black)

前回に引き続きACM/ICPC国内予選突破の手引きより問題を選んでみる。今回は難易度を一つ挙げて☆2つ。選んだのはRed and Blackという問題。 def walk(tiles, x, y, count) if x < 0 || y < 0 || x >= tiles[0].size || y >= tiles.size return count end if …

カフェイン駆動開発

カフェイン駆動開発 (caffeine driven development;CDD) とはプログラム開発手法の一種で、なにはともあれカフェインを摂取してから作業に臨む開発スタイルのこと。このスタイルをカフェインファーストともいう。眠気と戦いながら作業を行う開発者に好まれる…

Ruby練習五日目(Hanafuda Shuffle)

ACM/ICPC国内予選突破の手引きより問題を選んで実装してみることに。まずは最初ということもあり、一番上に書かれている難易度の低そうなHanahuda Shuffleから挑戦してみることにした。 while true n, r = ARGF.gets.chomp.split(/ /).map { |n| n.to_i } if…

Ruby練習四日目(離散ボロノイ図)

離散ボロノイ図を全探索法を使って作成してみる。全探索法とは、すべての離散点においてどの母点にもっとも近いかを計算する方法。一番単純な方法かつ、計算量の多い方法。 require "digest/md5" require "cairo" # # ボロノイ図を描画する(全探索法) # cl…

Ruby練習三日目(最小包含円?)

先日コッホ雪片を描くプログラムを書いて、雪片が画像の中心に描かれていないので次はその部分を作り込みたい、と日記に書いたのでその方法を考えてみた(ま、その問題はここに書く方法とは別の方法で解決しているんだけど)。考えとしては、コッホ雪片を構…

Ruby練習二.五日目

昨日の続き。コッホ雪片を描く場合に、画像の中心に雪片がこない云々と書いていたけど、あれは考え方が悪かった。先に画像の中心点を求めて、その点を中心にコッホ曲線の端点を回転させていけばよかった。昨日の考え方では、始点を手動で決めてその点がどこ…

Ruby練習二日目(コッホ曲線)

今日は、コッホ曲線を描くプログラムを作ってみようと思います。理由は特にありません、思いつきです。はじめは曲がる点を求めるだけのプログラムを考えていましたが、どうせなら目に見えるようにしようと思い、描いたコッホ曲線を画像に出力する処理まで作…

文字列と数値の比較

文字列と数値を比較しようとした場合に、Ruby ではエラーになり PHP ではエラーにならない。他のプログラミング言語ではどちらの動作になるのだろうと、先日コードを書いていて疑問に思ったので調べてみることにした。調べた言語は動的型言語ばかりを五つほ…

Ruby練習初日

きっかけ Rubyを覚えようと思い、簡単なプログラムを作ってみた。以前受けた試験の問題に、単純なんだけど基本的(っぽい)アルゴリズムの問題があったのでそれをネタにしてみた。こういうアルゴリズムは自分で一から考えて作れといわれても、すぐには作れない…

# とか ## とか

Linux のカーネルのソースを見ていて、こんな書き方ができるんだ、と。 マクロ限定だけれど、# は引数を文字列に変換し、 ## は識別子を結合する。 # の例 #include <stdio.h> #define PUT(x) printf(#x) int main(int argc, char *argv[]) { PUT(hello world\n); } </stdio.h>…

JavaScript って sleep 関数ないの?

JavaScript には sleep 関数がないらしい。ちょっとビックリ。 なにを思ったか、ハノイの塔を解く手順をアニメ(?)にしてみたら面白いのではないかと思って、JavaScript でコードを書いてたときのこと。コード中に、1回処理をしたらちょっと sleep してから次…

時間計測

プログラムを書いていて、この書き方とこの書き方ではどっちが速いのだろう?と思って、両方の処理時間を計測してみるなんてことは、少なからず誰にでもあるんじゃないかな。そのときの時間計測の方法なんだけど、今まで間違った方法で計測していたんだと気…