プログラミング

sconsコマンドのzsh補完関数を書いてみた

https://raw.github.com/cubicdaiya/zsh_completions/master/_scons 探したけどなかったので書いてみた。便利な分何かと複雑なzshだけど補完関数あたりは割と単純なのとサンプルが豊富なのでササッと書ける。 やり方がわかれば後はひたすらコマンドのヘルプ…

node-dtlをnpmに登録しました

npmはハマりどころが多すぎて困る。 $ npm search dtl dtl A diff template library binding for node.js =cubicdaiya diff diff3 editdistance unified format plate A javascript templating language =chrisdickinson template dtl $ npm install -g $

dtlのnode.jsバインディング

https://github.com/cubicdaiya/node-dtl最近、久々にJavaScriptを勉強し直してる関係でnode.jsで遊んでみたんだけど、結局C++で書いてしまった。 そんなにほかの言語のバインディング書いた経験はないけど、node.jsのバインディング書くのは結構簡単。 node…

SConsで並列ビルド

今更ながらSConsでもMakeと同じく「-j 」オプションで並列ビルドができること知った。なので、さっそく自分のプロダクト(dtl)で試してみた。CPUのスペックやビルド対象は以下の通り。 CPU Intel Core i5 CPU 660 @ 3.33GHz Dual Core(HTT対応なのでOSからはQ…

dtl-1.09

http://code.google.com/p/dtl-cpp/ dtl-1.09をリリースしました。今回の主な変更点は以下になります。 specifyConflictionが正常に動作しないケースへの対応およびテストの追加 Diff3クラスのtemplateパラメータにカスタムコンパレータを指定できるように変…

dtl-1.08

http://code.google.com/p/dtl-cpp/ dtl-1.08をリリースしました。今回の主な変更点は以下になります。 Diffクラスのコンストラクタに渡した関数オブジェクト(要素の比較用)が無視されてデフォルトの関数オブジェクトが使用されてしまうバグの修正 GCCの-Wオ…

make -> scons

dtlはヘッダファイルのみから構成されるライブラリなので、単にdtlを使用するユーザはdtl自体を特にビルドする必要はないんだけど、サンプルプログラムとテストプログラムはmakeかsconsを使ってビルドする必要がある。元々はMakefileだけ用意していたんだけ…

モダンなC, C++の開発環境の構築方法

まだC, C++がないようなので書いてみた。主にLinux(DebianとかUbuntu)での環境構築について。 コンパイラ まずはapt-getでコンパイラをインストールする。UbuntuやDebianなら以下のコマンドでgccやg++および標準ライブラリ等がインストールされる。 $ sudo a…

dtl-1.07

http://code.google.com/p/dtl-cpp/ dtl-1.07をリリースしました。今回の変更点は以下になります。 インデントサイズを2文字から4文字に変更 onlyEditDistanceフラグがONの場合にメモリリークが発生するバグの修正 特定のパターンのdiff3の際に衝突箇所の検…

Makefileを書くのに疲れた人のためのSCons

dtlのサンプルプログラムやテストプログラムのビルドをSConsでやってみた。dtlの複数あるサンプルプログラムのMakefileはこんな風になっている。 Makefile CPP = g++ CPPFLAGS = -c -O2 -Wall OBJS_FLAGS = -O2 -o STRDIFF_OBJS = strdiff.o common.o STRDIF…

dtl-1.06

http://code.google.com/p/dtl-cpp/ 昨日のことですが、dtl-1.06をリリースしました。今回は3つの要素列をマージした時に衝突が発生した場合、衝突箇所を(ある程度)明確化するための機能を追加しています。例えば、元の文字列がabcでこれをadcに変更したもの…

dtl-1.05

http://code.google.com/p/dtl-cpp/ dtl-1.05をリリースしました。主な変更ですが、ユーザさんからの指摘で Segmentation Faultになる可能性がある箇所を修正しています。

Cで動的配列

http://github.com/cubicdaiya/stk Cで簡単な動的配列を実装してみました。

Cでハッシュテーブル

http://github.com/cubicdaiya/fnv なんとなくCでハッシュテーブルを実装してみた。使い方はこんな感じ。 /* main.c */ #include <stdio.h> #include "fnv.h" int main (int argc, char *argv[]) { fnv_t tbl[FNV_TBL_CNT]; const char *key = "KEY"; const char *val</stdio.h>…

車輪の再発明をしなければならなくなる時

http://d.hatena.ne.jp/tt_clown/20091228/1261996214 http://d.hatena.ne.jp/Isoparametric/20091230/1262134418なんか昨年末の話で、反応するには少々遅い気がするけど、個人的に車輪の再発明をするに至る場合や理由について考えてみる。 勉強のために既に…

dtl-1.04

http://code.google.com/p/dtl-cpp/ dtl-1.04をリリースしました。前回と同じく、ライブラリ自体の変更はほとんどありませんが、 googletestを使ったテストコードを追加しています。テスト結果はこんな感じ。 $ cd dtl-1.04/test $ make && make test g++ -c…

Goで編集距離

とりあえず遊んでみたかったので、"An O(NP) Sequence Comparison Algorithm"をGoでササッと実装してみた。 まだまともにマニュアルを読んでないので、かなりテキトー。 /** * The algorithm implemented here is based on "An O(NP) Sequence Comparison Al…

MercurialのリポジトリをGithubにpushする

dtlは去年からずっとMercurialでバージョン管理してるんだけど、Githubに一応ミラーリングしておこうと思って変換ツールであるHgGitを使ってみた。 http://hg-git.github.com/ まず、HgGitを動作させるのに必要なdulwichをインストールする。 $ sudo apt-get…

メモリプール

http://github.com/cubicdaiya/mpool Cで至極簡単なメモリプールを実装してみた。 使い方はこんな感じ。(↑のgithubのexamplesにあるのと同じ物) #include <stdio.h> #include <string.h> #include <mpool.h> int main (int argc, char *argv[]) { mpool_t *pool; int *n = NULL; int *m =</mpool.h></string.h></stdio.h>…

cpprefで候補が複数ある場合

http://d.hatena.ne.jp/antipop/20091009/1255087113 id:antipopさんの作ったcpprefが便利そうなので使ってみました。 普段は手元のリファレンス本をたまに見ながら調べていたので、 それに比べるととても快適です。ただ、候補が複数ある場合、例えばswapで…

dtl-1.03

http://code.google.com/p/dtl-cpp/ dtl-1.03をリリースしました。今回の変更は少なめで、元々1つだったヘッダファイルを複数に分割したことを除けば、LCSをvectorで取得できる関数を追加したくらいです。

EmacsLispで改行マッチ

string-matchとかで文字列でマッチさせるには単に「\n」でいいんだけど、query-replace(-regex)で改行にマッチさせる方法がわからなくてちょっと嵌った。調べてみたところ、C-q C-jで改行を入力できることがわかった。

"An O(NP) Sequence Comparison Algorithm" with C

http://github.com/cubicdaiya/onp/tree/master/c/ 少し前の話ですが、"An O(NP) Sequence Comparison Algorithm"をCでも実装してみました。今のところ、計算するのは編集距離のみです。ちなみにC99の勉強がてらに書いたので、gccだと-std=c99を付加しないと…

dtl-1.02

http://code.google.com/p/dtl-cpp/ dtl-1.02をリリースしました。今回の主な変更は以下の通りです。 要素列を比較する際、(dtl::Compareクラスを継承した)任意の関数オブジェクトを使用できるように 出力系の関数で出力先を引数として渡せるように std空間…

dtl-1.01

http://code.google.com/p/dtl-cpp/ dtl-1.01をリリースしました。今回はちょっとしたリファクタリングおよびconstや参照を多少厳密に付加した程度の変更です。

"An O(NP) Sequence Comparison Algorithm" with Python

近頃、「Pythonチュートリアル」を買って読み始めたんだけど、読んでるだけだと飽きて来たので、"An O(NP) Sequence Comparison Algorithm"で編集距離を計算するプログラムをPythonで実装してみた。以前書いたLuaのコードの部分的な写経なので、Pythonっぽく…

segmentation faultした際の出力

今日遭遇して「あれ?」と思ったんだけど、プログラムがsegmentation fault起こした際、シェルのリダイレクトがどう振る舞うのかというお話。まず、以下のように標準出力(以下stdout)と標準エラー出力(以下stderr)に文字列を出力するCプログラムがある。 /* …

dtlを各バージョン管理システムから使う

ふと思い立ってSubversion、Mercurial、Gitでdiffする際にdtlのサンプルプログラムであるunidiffを呼ぶようにしてみた。dtlを使ったunidiffはこんな感じ。dtl-1.00のexamplesにあるやつそのままなんだけど、改めて眺めてみるとちょっとテキトーだなあ。 #inc…

dtl-1.00

http://code.google.com/p/dtl-cpp/ dtl-1.00をリリースしました。 自分に必要な機能は大体揃った感じなので、バージョンを0.07から一気に1.00に上げました。0.07からの主な変更は以下の通りです。 コピーコンストラクタが正しく実行されるよう修正 本当は衝…

dtl-0.07

http://code.google.com/p/dtl-cpp/ dtl-0.07をリリースしました。 今回は一部の関数の引数の数の変更および可読性向上のためのコード整理が行われています。