プログラミング

dtl-0.06

http://code.google.com/p/dtl-cpp/ dtl-0.06をリリースしました。 主な変更点は以下の通りです。 mergeがテキトーだったのを修正 編集距離だけを記録するオプションを追加 mergeがテキトーだったのを修正 dtl-0.05のmergeがなんだかちゃんと動かないのは前…

あるファイルの特定の行を別のファイルの内容に置換する

今日、「↑みたいなことをやりたいんだけど、どうすればいい」と聞かれたので、やってみた。 具体的には以下のようなtestというファイルがあり、 ... test ... test ... 上記のtestという文字列だけからなる行を以下のtest.inで置換する。 1 2 3 4 5 とりあえ…

Tokyo Cabinetでキーが重複したレコードを格納する

Tokyo Cabinetの仕様書を見ると、 B+木のデータベースでは、キーが重複する複数のレコードを格納することができます。このデータベースに対しては、ハッシュ表のデータベースと同様に、キーを指定してレコードを格納したり取り出したり削除したりすることが…

イテレータループのマクロ

C++では例えば以下のようなイテレータを使ったループをよく書くわけですが、 for (std::vector<std::string>::iterator it=vec.begin();it!=vec.end();++it) { ・ ・ ・ } なんだか長いので、以下のようにtypedefを使ってちょっとでも短くしたくなります。 typedef std::v</std::string>…

シェルスクリプトのreturn

先週Amazonから届いたスターオーシャン4をやってるのだが、字が小さい。何でだろう?テレビが小さいからか?バトル画面で表示されているHPとかの数字がちゃんと読み取れないくらい小さいので、正直ちょっと困っている。それはそうと今日は、久々にシェルスク…

Lua

地元の本屋に寄った際に「入門Luaプログラミング」を買った。 Luaは、つい最近までは「アプリケーションに組み込むための言語」、「小さくて動作が軽い」ぐらいの認識だったんだけど、実際に使ってみると、これがなかなかいい感じ。言語自体の簡潔さもさるこ…

boost::filesystem

ここのところ、お遊びとか何となくじゃなくて真面目にboostのライブラリ使ってC++のコードを書いてるんですが、改めてこのライブラリはいろんな意味でぶっ飛んでると思った。しかし、boostはfilesytemに限らず、全体的に変態(褒め言葉ですよ)で超便利なんだ…

dtl-0.05

http://code.google.com/p/dtl-cpp/ dtl-0.05をリリースしました。主な変更点は以下の3つです。 unidiffの出力の際の表示順を「削除」→「追加」の順に統一 Unified Formatをデータ構造として扱えるように変更 merge機能の追加 割と大幅に追加・変更されてい…

dtlのpatch関数がLinuxだと落ちる(修正済み)

そういや、ずっと前にParallels Desktop上のUbuntuで動作確認したっきり、Linuxでは動作確認してなかったなあと思いつつ、久々にUbuntuを立ち上げてサンプルプログラムを走らせてみたら、strdiffやintdiff、unidiffに関しては特に問題なかったのだが、fpatch…

Mercurialのブランチとマージ

Mercurialをemacsやzsh、global, その他の設定ファイルの管理だけでなく、ソースコードの管理にも本格的に使うようになったこともあり、ブランチやマージの機能も頻繁に使うようになってきた。このへんの機能を使ってて思うのはやはりCVSやSubversionに比べ…

分割diff

差分が大きく、メモリを大量に消費する場合に対処するため、O(NP)にHirshbergのアルゴリズムを適用しようとするが、うまくいかない。もうちょっと詳しく論文を読む必要性を感じつつ、なんだか疲れたので、気分転換に、記録された経路情報がある一定のサイズ…

dtl

C++なDiffライブラリ、dtlをリリースしました。 http://code.google.com/p/dtl-cpp/ 詳しくは上記のURLのSummaryやサンプルを見ていただければと思いますが、こちらでは上記に載ってないことや今後の方針や課題とかについて書こうと思います。 dtl? Diff Te…

番人

自作diffを少しでも速くするため、番人(sentinel)を試してみた時の話。 ここで言う「番人」とはループ内の条件判定の回数を減らすための特殊なデータを指す。 O(NP)のアルゴリズムを使った典型的なdiffプログラムには 以下のようなループ処理を行う箇所があ…

diffの高速化

Unified Formatで表示できるところまで来たのはいいけど、 六千行ほどのファイルに適用したら、表示されるのに20秒以上かかってしまって 使い物にならないので、そのへんをちょこちょこと直す。 編集距離を求める処理自体はO(NP)だから速いんだけど、 肝心の…

diff with Unified Format

前に作ったO(NP)なdiffのプログラムを元に、 2つのファイルの差分をUnified Formatで表示できるようにしてみた。 とりあえず、以下のe.txtとd.txtの差分を表示してみる。 e.txt a d e c f e a b c d e f g h i d.txt a e c z z d e f a b c d e f g h iこの2…

日付のフォーマット

日付文字列のフォーマット処理みたいなことは仕事柄よくやるんだけど、 そういやCでそういうのをやったことがないことに気付いてちょっとやってみた。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> #define MAX_LENGTH 50 int main(int argc, char *a</sys/stat.h></sys/types.h></time.h></stdlib.h></stdio.h>…

cdb

cdbはdaemontoolsやqmailの作者でもあるdjbこと Daniel J.Bernstein氏によって作成されたデータベースマネージャ。 かなり高速に動作するが、一度追加したものは削除したり、 更新することはできない。(どうしてもやるなら再構築するしかない) 以下、tinycdb…

Boost::serialization & Tokyo Cabinet

Boost::serializationはC++のオブジェクトをシリアライズしてくれるライブラリ。例えば、↓みたいに書くだけでPersonクラスのオブジェクトをシリアライズしてくれる。(ただし、stringやvectorなどをシリアライズするには特別なヘッダファイルが必要) class Pe…

getoptその後

結局、自分でコマンドラインパーサを書くことにした。(id:cubicdaiya:20080707)いざ、自分で書いてみると汎用的に作るのはなかなか難しいのだが、 別に無理して汎用的にしなくてもいいか、と思ったりもする。 とりあえず、今のところこんな感じ。 cmd -v --v…

SESからpatchする

OSC2日目の休憩時間に走り書きした。 narazuya@bokkko% ./diff cbabac abcabba editDistance:5 LCS:caba SES A a A b C c D b C a C b A b C a D c narazuya@bokkko% ↑は前に書いたdiffの出力そのまま。SESはShort Edit Scriptの略で、 片方の文字列からもう…

Diff

C++でdiffのようなものを書いた。 いや、正確にはdiffするのに必要な情報を出力するだけだが。 narazuya@bokkko% ./diff abc abd editDistance : 2 LCS : ab SES C a C b D c A d narazuya@bokkko% ./diff abcdef def editDistance : 3 LCS : def SES D a D …

getopt

getopt関数は「そういうのがある」というぐらいの認識で、実は今まで使ったことがなかったんだけど、今自分が構想を練っているアプリケーションで、 コマンドラインオプションの解析が必要になりそうなので、使ってみた。例えば、以下のような形式のコマンド…

Perl

必要に迫られて久しぶりにPerlのプログラムを書いた。 そういえば、大学にいた頃、「Perl=邪悪な言語」なんてフレーズをしょっちゅう 聞いていた気がするが、最近は聞かないな。

C++で後置インクリメントよりも前置インクリメントが多用される理由

追記(2015/04/19): 後置を使うべきという意見もあるようです -> 前置インクリメント vs 後置インクリメント | 闇夜のC++ C++を勉強し始めるまでは特に必要がない限り、値をインクリメントする際は前置ではなく、後置でやっているのを見かけるのが多かったの…

言語のドキュメントとリファレンスをローカルで検索

HyperEstraierを使ってPython2.5のドキュメントとC++のリファレンスをローカルで検索できるようにしてみた。 なかなか快適。

バッドノウハウ度の高いツール

ここのところ、autoconf/automake/libtoolを触ったりしているのだけど、さぱ〜りわからない。 そう、あれです、近頃はたいていのものはパッケージでインストールできますが、 たまにソースからコンパイルしてインストールするときに呪文を唱えることができる…

プログラミング言語の学習曲線

各種エディタの学習曲線 ↑を見てふと、プログラミング言語の学習曲線はどんなものになるだろうと想像しながらはてなハイクに書いてみた。 C C++ Java PHP Perl Python Ruby Lisp Prolog

C言語のはまりどころがわかる本

C言語に関する書籍*1は非常に多く、そのうちの6割は全くもって役に立たず、 また別の3割は分かったような気になるだけであり、残りの1割が読むに値するのだが、 それを見つけ出すのは宝くじを当てるよりは簡単かもしれないが、ポインタを理解するよりは難し…

ソートアルゴリズム復習

先週、仕事で特殊なソート処理をする必要があったので、かなり久しぶりにクイックソートを実装したのだけど、 実はそんなことやらなくてもいいことに実装した次の日に気付いた。 よく考えたら、比較関数を引数として受け取るソート関数なんて大抵の言語は最…

Emacsのキーボードマクロ

Ubuntuで使ってたelispやキーボードマクロをそのままLeopardに持ってきたらその一部が動作しなかった。 正直なところ、普通に動くだろうと思ってたんけど、自分で書き換えたfind-tagが実行されず、元のfind-tagが実行されたり、 キーボードマクロがさっぱり…