〜2006年3月上旬〜
302通。Gmail側約6300スレッド。 先月とあまり変わらない。
お題としては
0 => - 1 => A 10 => J 27 => AA
のように変換したいらしい。26種類だからto_s(26)を使えばいけそう。 injectや再帰よりは速いはず。 その後のスレッドで0のときは-から_になってるようだけど、まあ、それはどっちでもいい。
def letter(n) n == 0 ? '_' : n.to_s(26).tr('1-9a-p', 'A-Y') end
でどうかと思ったが、26の倍数のときがまずい。 これでは26はZではなくA0になってしまう。 というかtrの引数にZがないんだから全然だめだめ。
あ、1引いてから処理してsuccすればいいのか。
def letter(n) n == 0 ? '_' : (n - 1).to_s(26).tr('0-9a-p', '@A-Y').succ end
いや、'A@'.succがだめだ。'AA'じゃなくて'B@'になってしまう。
def letter(n) n == 0 ? '_' : (n - 1).to_s(26).tr('1-9a-p', 'A-Y').succ.tr('1', 'A') end
一応これでいけたが、ちょっと苦しいな。
glibのgmacros.hを見てたら
# if (defined (sun) || defined (__sun__)) # define G_STMT_START if (1) # define G_STMT_END else (void)0 # else # define G_STMT_START do # define G_STMT_END while (0) # endif
という記述を発見した。なんでだろう?ぐぐってみると G_STMT_START / G_STMT_END on Sun という記事が見つかった。どうもsun4だと警告だかエラーになるからこうなってるらしい。 Perlが起源とか。たしかにperl.hにあるね。 Rubyでもdo while(0)は使ってるけど、sun4でそんな警告になった記憶がないよなあ。
先日リリースされたglib 2.10.0を見てみたら
# if defined (HAVE_DOWHILE_MACROS) # define G_STMT_START do # define G_STMT_END while (0) # else /* !HAVE_DOWHILE_MACROS */ # define G_STMT_START if (1) # define G_STMT_END else (void) 0 # endif /* !HAVE_DOWHILE_MACROS */
となってた。configureで判断するようにしたらしい。
駅前でもらったポケットティシュでは鼻が痛くてしょうがないので、 奮発していいやつを買ってきた。 鼻セレブ 。ええと、そのネーミングにはとりあえず触れないとして、鼻ざわりはたしかにいい。 これに慣れてしまうともうポケットティシュが紙ヤスリのように感じる。 風邪は治りかけてるけどそろそろ花粉がやばいしねえ。
- Changes:
- A function to check availability of allocation of the virtual memory was added. A function to convert character encodings was improved.
- Changes:
- This is the newest version of re2c that comes with no known bugs. After the addition of Unicode support in 0.10.0, this version comes with support for Solaris and native Sun compilers. This version also fixes a minor issue with YYCTXMARKER.
- Changes:
- Contains initial support for multi-byte characters in the line editor (in particular, but not only, UTF-8). Note that this is not turned on by default on all systems where it can be used. There are also a few enhancements to shell syntax and supplied functions, as well as numerous bugfixes. A few minor incompatibilities are listed in the README. This is the first publicly announced version of the 4.3.x series; changes since 4.3.1 are limited to compilation fixes.
試してみたらeuc-jpでもok。すばらしい。 configure時に--enable-multibyteが必要。
Installing: kernel i686 2.6.15-1.1833_FC4 updates-released 15 M kernel-smp i686 2.6.15-1.1833_FC4 updates-released 15 M kernel-smp-devel i686 2.6.15-1.1833_FC4 updates-released 4.3 M Updating: blas i386 3.0-37.fc4 extras 321 k c-ares i386 1.3.0-2.fc4 extras 30 k centericq i386 4.21.0-5.fc4 extras 1.5 M lapack i386 3.0-37.fc4 extras 3.4 M wine i386 0.9.9-1.fc4 extras 9.4 M xmms i386 1:1.2.10-21.fc4 extras 1.8 M xterm i386 208-2.FC4 updates-released 190 k Transaction Summary ============================================================================= Install 3 Package(s) Update 7 Package(s) Remove 0 Package(s) Total download size: 50 M
kernelが上がったからまたntfsを入れ直さないと。cntericqはremoveしよう。 blasとlapackはバージョンがまったく同じだから関連してるのか?
blas BLAS (Basic Linear Algebra Subprograms) ライブラリ BLAS (Basic Linear Algebra Subprograms) は数値代数用の多くの 基本アルゴリズムを提供する標準ライブラリです。blas のマニュアルページは blas-man パッケージに含まれています。
これも要らないな。消すと何かが依存してそうではある。
Removing: blas i386 3.0-37.fc4 installed 687 k lapack i386 3.0-37.fc4 installed 5.3 M Removing for dependencies: octave i386 6:2.9.3-3.fc5 installed 23 M umfpack i386 4.4-2 installed 709 k
octaveも要らないな。umfpackってのもなんだかわからんから要らない。消そう。
最近ネットワークが不調でやたらとタイムアウトする。 非常にうっとうしい。 Gmailからpopで取ってきてるんだけどなぜか同じメールが2通あったり、 ftpの終了処理に時間がかかったり、 何が原因、ybbよ?
ああ、なるほど。endがないからPythonにはpassが必要なんだ。
AWDwRも6章まできたので KirbyBaseを試してみる。 KirbyBaseはpure RubyでフラットファイルなDBMS。 ackbarがActiveRecordのアダプタとなる。
% gem update -y rails ackbar
gemは以前そのパッケージをインストールしていなくてもいきなりupdateでok。 つまりgem updateだけ覚えとけばいい。
そのまま このblog の通りに進める。
depot % cd db depot/db % mkdir development test production depot/db % cat >create_db.rb require 'rubygems' require 'kirbybase' db = KirbyBase.new db.drop_table(:products) if db.table_exists?(:products) db.create_table(:products, :title, :String, :description, :String, :image_url, :String, :price, :Float)
gemでインストールしたのでrubygemsをrequireしとく。
depot/db % for i in development test production; do cd $i; ruby ../create_db.rb; cd ..; done
これで各ディレクトリにproducts.tblができる。
depot/db % cd .. depot % cat > config/database.yml development: adapter: kirbybase database: db/development test: adapter: kirbybase database: db/test production: adapter: kirbybase database: db/production
面倒だから上書き。
depot % vi config/environment.rb
require 'kirbybase_adapter'を先頭に追加。
depot % ruby script/generate scaffold Product Admin
kirbybase_adapter.rbに不具合があるらしいので修正。 gemsにあるほうはとりあえず放っといてlib/へコピーしてから修正しよう。
depot % cp /usr/local/lib/ruby/gems/1.8/gems/ackbar-0.1.0/kirbybase_adapter.rb lib/ depot % vi lib/kirbybase_adpter.rb
or args == [nil, nil]を追加。
--- lib/kirbybase_adapter.rb~ 2006-03-06 22:50:51.000000000 +0900 +++ lib/kirbybase_adapter.rb 2006-03-06 22:51:16.000000000 +0900 @@ -655,3 +655,3 @@ def self.count(*args) - if args.empty? + if args.empty? or args == [nil, nil] if block_given?
サーバを立ち上げる。
depot % ruby script/server
firefoxでhttp://localhost:3000/adminにアクセス。 成功。New Productをクリック。適当にフォームを埋めてCreateをクリック。 成功。うまくいった。
ちなみにデータベースはこんな感じになる。
depot % cat db/development/products.tbl 000001|000000|Struct|recno:Integer|title:String|description:String|image_url:String|price:Float 1|hoge|hogehoge|/image/foo.png|0.0
かなり簡単な構造だな。
例によって例の通りに。
% CFLAGS=-Os CXXFLAGS=-Os CC=/usr/bin/gcc ../configure \ --enable-languages=c++ --with-system-zlib \ --enable-sjlj-exceptions --enable-threads \ --disable-version-specific-runtime-libs --disable-nls \ --without-included-gettext --without-catgets % make CFLAGS=-Os LIBCFLAGS=-Os LIBCXXFLAGS=-Os \ STAGE1_CFLAGS=-Os BOOT_CFLAGS=-Os bootstrap
Rubyもok。いや警告が減った。
% cat foo.c unsigned char *p = "hoge"; % gcc-4.0.2 -c foo.c foo.c:1: warning: pointer targets in initialization differ in signedness % gcc-4.1.0 -c foo.c %
4.0.2の-Wno-pointer-signオプション と 4.1.0の-Wpointer-signオプション を見比べるとデフォルトで警告するか否かが単に変わっただけのようだ。
なんか便利そうだと思ったらKaoriya版の機能とあった。 ならば自前で。
cnoremap <C-X> <C-R>=expand('%:h')<CR>/
とりあえずこれでいいや。
複数のバージョンのrubyを順次動かすのかな?なかなか興味深い。
現在2702MBでこのままペースでは4月までに3GBになるとは思えない。 1年で1GBはやめるのか、 それとも単にカウントアップのバグで4月にどーんと一気に3GBまで増えるとか?
これ便利だな。
When 'wildmenu' is on, command-line completion operates in an enhanced mode. On pressing 'wildchar' (usually <Tab>) to invoke completion, the possible matches are shown just above the command line, with the first match highlighted (overwriting the status line, if there is one). Keys that show the previous/next match, such as <Tab> or CTRL-P/CTRL-N, cause the highlight to move to the appropriate match. When 'wildmode' is used, "wildmenu" mode is used where "full" is specified. "longest" and "list" do not start "wildmenu" mode. If there are more matches than can fit in the line, a ">" is shown on the right and/or a "<" is shown on the left. The status line scrolls as needed.
ステータスラインに一時的に表示できるのも便利だし、 C-p/C-n(もしくは<LEFT><RIGHT>)でいったりきたりできるというのがありがたい。 なんか補完で調子にのってタブを連打がしがちなだけに戻る機能が欲しかった。
zshにもこういうのがあるといいな。
そういえば 昨日の件でzshでなんかできないなと思った原因は
autoload -U up-line-or-beginning-search autoload -U down-line-or-beginning-search zle -N up-line-or-beginning-search zle -N down-line-or-beginning-search bindkey "^P" up-line-or-beginning-search bindkey "^N" down-line-or-beginning-search
だった。やっぱこっちのほうが便利だしこっちを優先させよう。