Just another Ruby porter,

〜2006年3月上旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2006-03-01 (Wed)

2月のspam

302通。Gmail側約6300スレッド。 先月とあまり変わらない。

[Ruby] Indexing system - ruby newbie

お題としては

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

一応これでいけたが、ちょっと苦しいな。


2006-03-02 (Thu)

[C] do while(0)とif(1) else (void)0

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で判断するようにしたらしい。

鼻セレブ

駅前でもらったポケットティシュでは鼻が痛くてしょうがないので、 奮発していいやつを買ってきた。 鼻セレブ 。ええと、そのネーミングにはとりあえず触れないとして、鼻ざわりはたしかにいい。 これに慣れてしまうともうポケットティシュが紙ヤスリのように感じる。 風邪は治りかけてるけどそろそろ花粉がやばいしねえ。


2006-03-03 (Fri)

[Soft] QDBM: Quick DataBase Manager 1.8.46

Changes:
A function to check availability of allocation of the virtual memory was added. A function to convert character encodings was improved.

[Soft] re2c 0.10.1

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.

2006-03-04 (Sat)

[Soft] Zsh 4.3.2 (Development)

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が必要。


2006-03-05 (Sun)

[FC4] 今日のyum update

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ってのもなんだかわからんから要らない。消そう。

[Net] ネットワーク不調

最近ネットワークが不調でやたらとタイムアウトする。 非常にうっとうしい。 Gmailからpopで取ってきてるんだけどなぜか同じメールが2通あったり、 ftpの終了処理に時間がかかったり、 何が原因、ybbよ?

[Ruby] ruby pass like statement

ああ、なるほど。endがないからPythonにはpassが必要なんだ。


2006-03-06 (Mon)

[RoR] KirbyBaseでRuby on Rails

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

かなり簡単な構造だな。


2006-03-07 (Tue)

[GCC] GCC 4.1.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オプション を見比べるとデフォルトで警告するか否かが単に変わっただけのようだ。


2006-03-08 (Wed)

[Vim] :e <C-x> (編集中のファイルと同じディレクトリにあるファイルを開く。)

なんか便利そうだと思ったらKaoriya版の機能とあった。 ならば自前で。

cnoremap <C-X> <C-R>=expand('%:h')<CR>/

とりあえずこれでいいや。

[Ruby] Coming Soon: multiruby

複数のバージョンのrubyを順次動かすのかな?なかなか興味深い。


2006-03-09 (Thu)

[Gmail] Gmailは4月までに3GBまで増えるのか?

現在2702MBでこのままペースでは4月までに3GBになるとは思えない。 1年で1GBはやめるのか、 それとも単にカウントアップのバグで4月にどーんと一気に3GBまで増えるとか?

[Vim] set wildmenu

これ便利だな。

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にもこういうのがあるといいな。


2006-03-10 (Fri)

[zsh] C-p/C-n

そういえば 昨日の件で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

だった。やっぱこっちのほうが便利だしこっちを優先させよう。


<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!