ここ数日やる気が全然出なかったんでちょっとハイキングに行ったりしてました。
あとお金の無駄遣い。VisualC# その他を買いました。 ちょっと使ってみて楽しめそうなら VisualStudio.NET 2003 に グレードアップしようと思います。 VS.NET Professional MSDN デラックス。 いま買うと 2 万円キャッシュバックなんですよ?
中島さんの会社名にどうも聞き覚えがあると思ったら、 家で使ってるルータの販売元でした。ZyWall10っていうやつ。 世間は狭いですね。
ウェブ日記には書いてる人の名前を書いといてほしい……。
[ruby-talk:72927] Re: Ruby 1.8.0 net/http bug
Net::HTTPResponse に to_ary を定義しておけば
response, body = Net::HTTP.get(....)
が救済できるだろって話なんですけど、 多重代入で to_ary を使うってのは堅い (安定した) 仕様なんだっけ。 うーんと、この変更は 2000-09-12 からだな。1.6 は全部 OK か。
でも多重代入はよく仕様が変わるから あまり細かいところに依存したくないんだけどな。 それとも、多重代入には既に田中さんのツッコミが入ったから 当分大丈夫だと考えるべきだろうか。
そだな。 1.8 リリースは近そうだし、1.8.x はこれで大丈夫と期待しよう。
Win32 (mswin32,cygwin) / Linux 間のシンクロは達成。つかれた……。
リリースまでの ToDo
Windows で RUBYLIB に何をセットしたらいいのかよくわからなかったが $: を見る感じ「ドライブレター付きでセパレータは "/"」のようだ。
しかし Cygwin のシンボリックリンクを使っていたのでは意味ない。悲。
煙草は吸いません。 心はアスリートですから!
アスリィートですから! (強調)
酒は宴会のときだけ飲みます。
茶は緑茶です。
コーヒーはブラックで飲めます! (自慢げに)
博打は打ちません。
宝くじは基本的に買いませんが時々買って騙されます。
誰もそんなこと聞いてないって。
家庭内サーバとして使っているUltra30に(やっと)UPSをつけることにした。そこで買ってみたのがAPCのCS500というタイプ。
が、
停電通知インターフェイスがUSBしかついてなかった。当然Ultraにそんなものはついてない。ちくしょう、UPSならシリアルくらいつけとけよ!と、心の叫びを発しつつビックP館に戻ってごねてみる。運良くシリアルのついたものと交換してもらえた。交換後のはOmronのBX50FXSというやつで、ウェブサーバにつけてるのと同じ型だった。
が、
あほなことに通信ケーブルなしのを選んでしまったようだ。というか、通信ソフトはいらないねーと思ってソフト無しのを選んだらケーブルまでついてなかった。
これは悔しい。かなり悔しい。悔しいのでRubyでリモートシャットダウンツールを書いて済ますことにする。ウェブサーバのほうにはちゃんとシリアルでUPSから信号が来るようになっているので、そのシャットダウンのタイミングでUltraにも信号を教えてやればいいわけだ。なんだ、簡単じゃん。5分で書けた。
しかし、こうなってみるとAPCのでもよかったわけだな…。ま、いいや。
『プログラミングWindows』上下巻。俗に言うPetzold本です。
早速クリップボードの章を読んでみる。おお、やっぱあるんじゃん、コンテンツの遅延転送。これが知りたかったんだよー。あ、でもウィンドウメッセージを受信する必要があるのか。むむ、Rubyで(拡張モジュールだけで)メッセージもらえるのかな?ちょっと関係プログラムをあたってみよう。
Amazonにまたやられたー!
気づいたらこんなに注文してた。バカすぎる。
"Alpha Architecture Reference Manual"
"Alpha Implementations and Architecture"
"Sparc Architecture, Assembly Language Programming, and C"
"See Mips Run"
"Linux Assembly Language Programming"
"The Little Schemer"
『アナリシスパターン』
よんまんさんぜんえん…。くそう、AlphaServerが買えるぜ!
…買うか!(やめとけ)
5000円くらいなら買っちゃいます。
とか書いたけど、Advanced Windows は 9500 円であったか。これがOKなら何でも買えるじゃん。
でもさすがのわたしも『プログラミング Perl』第 3 版(二分冊!)は買う気がしません。もちろん、第 2 版を持ってるという点は大いに影響してますけどね。第 2 版を持ってなかったら買うかもしんない。
■ arton [買ったんですか?(失礼ですねぇ)]
■
あおき [買いました。なぜか Advanced Windows はもう持ってます。
あと Inside COM もほしいんですが高くて…。
薄くて安い Essencial COM は持ってるんですが。]
■ arton [Inside COMなら貸しますよ。しかし薄い本だからそんなに高くはないのでは……ごそごそ……たけーよ。5000円越えてるよ。なるほど。]
■
あおき [あれっ?すごく分厚いと思ってたんですけど。
一万円越えのやつ。あれは Inside OLE2 かな?
ぼくは本は 5000 円周辺なら買っちゃいますから。
(と思ったら在庫切れだった。何やってんだAmazon)]
■ arton [Inside OLE第2版(原書)なら貸せますよ(初版−邦訳版は捨ててしまってた)。興味があれば、Compiling for the .NET Common Language Runtimeもどうぞ。]
■
あおき [いやあ、ありがたいんですが、ぼくはどうも
書き込みながらじゃないと読めないので地道に
買うことにします。]
■
匿名キボンヌ [Inside OLE2なら、うちの会社のどっかに落ちてるはずだけど、探してみる? あるいはクレクレ星人になってみるのもありだな。
−なぜかわからんが、現在、退社した会社で仕事中。しかも、お泊りですわ。]
■
匿名キボンヌ [ああ、もううちの会社じゃなかった。こないだまで在籍してた会社の間違いです。
やーね、帰属意識が抜けないって。]
■ arton [メイヤー本は次回に返しますです。]
■ arton [そう言えば、メールアドレスはいつまで使えるんでしょうか?(と青木さんの日記の上で業務連絡スマソ)]
■
匿名キボンヌ [元の会社のメールアドレスはすでに使えないと思います。
なので、今度ping代わりにメールを出しておきますです。
メイヤー本はいつでもよいですよ。今後も会う機会はいくらでも
あると思ってますし。]
http://www.yk.rim.or.jp/~hmatsu/office/url.html
http://i.loveruby.net/~aamine/ja/tdiary/ このサイトの持つ性格は、情(なさけ)という言葉で象徴されます。 あつかう情報として不向きな分野といったものはあまりありませんが、特に男女交際やその方面の情報をあつかうのに向いています。 このURLの総合的な吉凶は以下の通りです。 空転と消耗の意味があり凶です。努力は空回りし消耗してしまいます。かなり不安定な運勢です。
空転と消耗! 凶! キター!
お疲れさまでした。今回も楽しかったです。 ……いや、ぼくは寝過ごして思いきり遅刻したんですけど。
経過はいつも通り RWiki に書いてあります。
ウェブの RHG もアップデートしたいんですけど、 あれは初校相当なのが厄介です。つまりどういうことかと言うと、 既に直したことのある間違いをもう一回全部目で探して直さないといけないんです。 それがどうにも面倒で面倒で手をつけられずにいます。
先日、DEC の HiNote Ultra II をジャンクで買ってきました。
やばい。かっこいいよコレ。やっぱ digital だよ。
このモデルでは最速の Pentium 150MHz にメモリ 48MB、 HDD 1.44GB、AC 付き FDD ドック付きで 7000 円となかなかお買得でした。 ちょっと汚れてましたが流行りのスポンジでこすったらきれいになったので満足です。
オリジナルだと OS は Windows 95 なんですが、 それではあまりに使えないので Linux を入れることにします。
そーいえばまだあまりいじってない AlphaStation 500 だけど これのメモリはかなり特殊らしい。なんでも、
registered ECC の 5V EDO DIMM を 4 枚一組で増設。
鬼ですかあなたは!
まあいいです。128MB 刺さってれば生活はできます。 どうせ何したってこの程度も使いきれないんですから! ていうか今のメインマシンだってこんな状況ですから!
~ % free aamine@harmony total used free shared buffers cached Mem: 1033676 124460 909216 0 6640 68140 -/+ buffers/cache: 49680 983996 Swap: 130748 0 130748
983MB 空き。かわいそうなメモリさん。
あっ、待てよお、Alpha は 64 ビットアーキテクチャだから プロセスサイズが増えるか……? どのくらい増えるんだろ?
いっそ捨てたほうが楽だろうか……。
ブランチ上で特定の日時間の diff って取れないのかー!
もっと具体的に言うと ruby_1_3 ブランチ上で env.h と eval.c について 1999-08-05 と 1999-08-11 の差分って取れないのかー!
しかたない、リビジョン指定しよう。
そうか、ブランチだと枝分かれがいくつあるかわからないから 日付の指定だけでは枝が一意に定まらないんだ。 こういう点からもやはり「開発版はメイントランクだよね」という結論になるのだな。 納得した!
おおっ、dRuby が 1.8 に入ったんだ。やたー!
鬼ですかあなたは!
などと不満を漏らしつつも、 registered ECC 5V EDO DIMM 64MB × 4 をゲットしてきました。
……
……
認識されない……(泣)
あ、刺しなおしたら半分 (128MB) だけ認識された。 うーむ、バンク内のメモリモジュールが同じ型じゃないとダメっぽいな。 しかしこれで残りのメモリは生きる可能性が出てきた。
明日 6/23 (月) は家が一日中停電になるので、 i.loveruby.net のサーバを停止します。
やべっ、また忘れるところだった。 明日は一日中停電だから、今日中にやらないと……。
うちのノートパソコンのモニタは叩くと映るようになる。
IP アドレスって 32 ビット整数でも指定できるのかー!
~ % ping -c1 `ruby -e 'p((192<<24) | (168<<16) | (1<<8) | 2)'` PING 3232235778 (192.168.1.2) from 192.168.1.33 : 56 data bytes
「今そこにある危機」 http://www2u.biglobe.ne.jp/~palu2/kiki.htm
最近新聞を読んでないもので、 この話は全然知りませんでした。これって有名?
外税表示の義務付けを無理矢理プログラミングに例えてみると、 変数として扱うべきものを静的に評価して定数畳み込みしようというわけですね。 そりゃコンパイラのバグだろ。 いや、コンパイラ (出版社) の仕様書 (法律) が変なのか。 でもってプログラミングセンスのない厨房 SE (政府) は逝ってヨシ、と。
対策は何かあるのかね。スーパーみたいに値札シール張るとか? これは本屋が嫌がりそうだなあ。
そういえば、あのガチャコンってするやつ、 なんて名前だか知ってる人います? ずっと前から気になってしかたがありません。 ちなみに電気機器とかをくるむのに使うあのプチプチは 本当に「プチプチ」という名前らしいです。
蚊が……
停電が終わりました。
なんと、「プチプチ」は商品名だったんですか。 しかも潰すための専用プチプチまであるとは……。
あっ、川上産業ってこれですね。
リンクをたどった瞬間、画面上に充満するプチプチ感。 時代はプチプチだ! (意味不明)
そーいえば、マウスで画面のプチプチをプチプチするソフトもあったなあ。
なんで syck は ruby.h を #include していないのだろう。
うう、おとといは Linux/Alpha NetBSD/Alpha FreeBSD/Alpha で ruby のコンパイルを通すだけで力尽きてしまった。
そのせいか、どうも何か忘れているような気がするんだよなあ……。
電気が足りない。
家は古いマンションなのでそもそも基幹部分の電力容量が少ない。 従って各戸の容量も少ない。いまどき上限 30A ってなんだよ。
でもってその 30A もフルに使えるわけではなくて エアコン用の線とそれ以外が分かれており、 エアコン以外の合計で 10A しか使えない。 これは困る。とても困る。さりとて困る。 一番困るのは AlphaServer4000 が動かないかもしれないということだ。
さすがに欲しい本はほとんど買い尽くしてしまった感がある。
『最前線UNIXのカーネル』 Uresh Vahalia著、徳田英幸・中村明・戸辺義人・津田悦幸共訳、 ピアソンエデュケーション、2000
最近は OS カーネルとアセンブラが気になるお年頃。 『Solaris Internal』を読みつつ Solaris の man ページを眺め、 『詳解Linuxカーネル』の助けを借りつつ Linux のソースコードを読んで Solaris と比較。同時に『Advanced Windows』『Essencial COM』 『Inside COM』『Inside DCOM』を読む。いやもう、これはねー、
わけわかんなくなります。(あたりまえだ)
それにしても、Solaris 8 のソースコードはさっさと入手しておくべきだった。 公開しはじめてから途中で日和るなよな。
ま、それはいいとして、UNIX カーネルの本を買ってみたわけです。 SPARC と Alpha のリファレンスが届くとさらに相互作用が楽しめるのですが、 Amazon が調達にしくじりやがったらしく、配送は遅れに遅れています。
『Rubyアプリケーションプログラミング』 前田修吾・まつもとゆきひろ・やまだあきら・永井秀利共著、 オーム社、2002
『The Ruby Way』 Hal Fulton著、株式会社トップスタジオ訳、 やまだあきら・鵜飼文敏監修、翔泳社、2002
やっと買いました。
HSP、なかなかおもろいな。 けっこう見ために派手なのに簡単に書けるのはいいところだ。
しかし言語の構文は気持ち悪すぎる。
a+2
で a+=2 の略、なんてのはかなり衝撃的だ。 なんつーか、高級言語並の機構を最大限に活用して作ったアセンブラって感じだよな。
メモ帳で IME オンにして「みこみこみこみこみこみこみこみこみこみこ」 を変換すると落ちるらしい。
ただし繰り返しやると OS ごと固まるみたいなので注意しましょう。
ネタ元: 巫女みこナースでコーディング
Alpha や SPARC の本が届きました。 Amazon が自分で「おすすめ」したくせに MIPS の本は届きません。 何をやってるんでしょうか。
あっさりと先頭 1/3 をカッ飛ばす。 実習に入るまでの基礎知識部分が長すぎるんだよ。 説明も『はじめて読む 8086』のほうが絶対いい。 後半に期待しよう。
厚い。電話帳かと思った。 まあリファレンスだから頭から読むもんじゃありませんな。
うわあっ、妙に厚いと思ったら 3 部構成なのか! そうか、日本語の『Alpha AXP アーキテクチャ概要』は、 これの第一部だけを訳したものだな。
薄い。21064 の内部写真が凄いきれいだ。
とりあえず題名がダサい。
突如 m4 が登場。マクロに m4 使うのか……。
……変な本だ。
「みこみこみこみこみこみこみこみこみこ」を変換すると落ちる件ですが。 みなさんそんなに「みこみこ」が気になりますか! (笑)
「らしい」とか書きましたが、メモ帳が落ちるのは確認しておりました。 ネタ元はここ。
このスレッドの情報によれば、 発生条件は「みこ」 9 回を変換すること。 こちらで追試してみたところ、8 回までは何も起きず、9 回にすると落ちました。 バグが確認されているプラットフォームは Windows 98 と 2000。 IME は MS IME 2000 ver7.0.1。
繰り返し実行すると OS ごと固まるという話もありましたが 家では 5、6 回やっても大丈夫でした。
ついでにもう一個 2ch ネタ。
切符に書いてある 4 つの数字を足したり引いたりして 10 にするっていう問題がありますよね。 あれをプログラムで解こうというスレです。
4 桁固定だと力技のループで解けてしまうので、 任意桁数で解くプログラムを考えました。 条件は以下の通り。
a とか b は任意の式です。 例えば (1+2)*(3+4) と (3+4)*(1+2) は重複です。
スレにはもうちょっと詳細な条件が載ってるんですが、 実装が面倒になったのでぼくはこのへんにしときます。 意外に長い。
# # kippu.rb # require 'mathn' OPERATORS = [:+, :-, :*, :/] def main if ARGV.empty? $stderr.puts "no arguments" exit 1 end nums = ARGV.map {|a| a.to_i } nums.each do |n| unless (0..9).include?(n) $stderr.puts "wrong value given; use 0-9 (#{n})" exit 1 end end results = {} each_valid(nums, OPERATORS, 10) do |tree| str = tree.to_s if results[str] $stderr.puts "\# #{tree.inspect}" if $DEBUG next end results[str] = true puts str[1..-2] end end def each_valid( numbers, operators, expect ) i = 0 precedences = (0...numbers.length-1).to_a each_nPn(numbers) do |nums| each_nPr(operators, numbers.length-1) do |ops| each_nPn(precedences) do |precs| i += 1 begin tree = Tree.build(nums, ops, precs) yield tree if tree.evaluate == expect rescue NoMethodError => err unless /undefined method `<<'/ === err.message p nums p ops p precs p tree raise end rescue ZeroDivisionError ; end end end end $stderr.puts "#{i} cases tested" if $DEBUG end def each_nPn( list ) generate_combinations(list.length, list.length) do |idxes| next unless idxes.length == idxes.uniq.length yield idxes.inject([]) {|result, idx| result.push list[idx]; result } end end def each_nPr( list, r ) generate_combinations(r, list.length) do |idxes| yield idxes.inject([]) {|result, idx| result.push list[idx]; result } end end def generate_combinations( len, upper ) cur = Array.new(len, 0) fin = Array.new(len, upper-1) while true yield cur break if cur == fin # Increment a set (cur) 0.upto(cur.length - 1) do |i| cur[i] += 1 break if cur[i] < upper cur[i] = 0 end end end module Tree def Tree.build( nums, ops, precs ) trees = nums.map {|n| LiteralNode.new(n) } ops = ops.dup precs = precs.dup cur_prec = precs.length - 1 while cur_prec >= 0 idx = precs.index(cur_prec) precs.delete(cur_prec) rhs, lhs = trees.slice(idx, 2) op = ops.delete_at(idx) trees[idx, 2] = OpNode.new(rhs, op, lhs) cur_prec -= 1 end raise "must not happen: #{tree.inspect}" unless trees.length == 1 trees[0] end end class OpNode def initialize( lhs, op, rhs ) @lhs = lhs @op = op @rhs = rhs end def inspect "(#{@lhs.inspect}#{@op}#{@rhs.inspect})" end def evaluate @lhs.evaluate.__send__(@op, @rhs.evaluate) end COMMUTATIVE_OP = [:+, :*] def to_s if COMMUTATIVE_OP.include?(@op) l, r = sort_tree(@lhs, @rhs) "(#{l}#{@op}#{r})" else "(#{@lhs}#{@op}#{@rhs})" end end def sort_tree( lhs, rhs ) if lhs.terminal? and rhs.terminal? [lhs, rhs].sort_by {|t| t.value } elsif lhs.terminal? [lhs, rhs] elsif rhs.terminal? [rhs, lhs] else [lhs.to_s, rhs.to_s].sort_by {|s| [-s.length, s] } end end private :sort_tree def terminal? false end end class LiteralNode def initialize( val ) @value = val end attr_reader :value def inspect @value.to_s end def evaluate @value end def to_s @value.to_s end def terminal? true end end main
戦略は単純な総当たりです。 each_nPn とか generate_combinations のあたりは Haskell のほうが簡単に書けそう。
と言うか、Haskell のリストを念頭に置いてイテレータに落としました。 イテレータと遅延評価のリストは非常に感覚が似てますね。 イテレータはメソッドから値が湧いてくるけど、 Haskell だとリスト自体から値が湧いて出てくる感じがします。
■
shiro [昔書いたこれは任意桁数に容易に拡張できますが、
重複を除くのは厄介かもしれません。
http://www.lava.net/~shiro/Private/diary/0112.html (12/11)]
■
nobsun [なつかしい、お題だったりします。「切符問題」
そのときの発端は、http://www.lava.net/~shiro/Private/diary/0112.html
で、拡がったのは
http://namazu.org/~satoru/diary/?date=20011211#p03
からかなぁ。で、そのときのHaskell版は
http://www.sampou.org/nobsun/journal/?200112b&to=200112160#200112160]
■ nobsun [でも、このときは、全解ではなかったなぁ。]
■
あおき [2001年にもう流行って(?)たんですね…。
読書会でも話が出ましたけど、式の同値判定
まで考えるのは結構面倒ですね。]
みこみこリファラがとんでもない数になってるし…。
ふー。お疲れさまでした。相変わらず面白かったです。 とか言いつつ大幅に遅刻しました。もはやデフォルトです。 朝 10 時だなんて、起きられません。
さて、真面目なまとめは掲示板にまかせて 飲み会のメモをしようかと思ったんですが 書いてみたら内容があまりにやばかったのでやめておきます。
全然日記には書いてませんが、様々な苦難を乗りこえて AlphaStation 500 はメモリ 512MB にパワーアップしました。 このときの話は忘れたころに Alpha のページに追加されることでしょう。
さて、メモリ増設成功に気をよくしたわたしは、 今度はネットワーク接続を強化することにしました。 AlphaStation 500 のオンボードのイーサネットアダプタは digital 21040 であり、すなわち 10Base-T です。 別にギガビットイーサなんて要求しませんが (というかハブ持ってないし)、 さすがに 10Base-T はどうかと思います。 そこで 100Base-TX のイーサネットカードを載せてしまうことにします。
どうせなら DEC のボードを刺したいものです。 さっそく DEC の DE500 を入手しました。チップは digital 21140-AB。 オンボードのイーサネットアダプタは殺したほうがいいのだろうか…… などと思いつつも、とりあえず何も考えずにさしてみます。
あ、やば。OS を自動ブートにしてたんだった。
: : tlp0 at pci0 dev 6 function 0: DECchip 21040 Ethernet, pass 2.4 tlp0: interrupting at kn20aa irq 13 tlp0: Ethernet address 00:00:f8:22:65:eb tlp0: 10baseT, 10baseT-FDX, 10base5, manual tga0 at pci0 dev 7 function 0: DC21030 step C, board type T32-08 tga0: 1280 x 1024, 32bpp, Bt463 RAMDAC tga0: interrupting at kn20aa irq 8 wsdisplay0 at tga0 (kbdmux ignored) isp0 at pci0 dev 9 function 0: QLogic 1020 Ultra Wide SCSI HBA isp0: interrupting at kn20aa irq 12 scsibus0 at isp0: 16 targets, 8 luns per target pceb0 at pci0 dev 10 function 0: Intel 82375EB/SB PCI-EISA Bridge (PCEB) (rev. 0 x05) tlp1 at pci0 dev 12 function 0: DECchip 21140 Ethernet, pass 1.2 tlp1: interrupting at kn20aa irq 4 tlp1: DEC DE500-XA, Ethernet address 00:00:f8:02:89:14 tlp1: 10baseT, 100baseTX, 100baseTX-FDX, 10baseT-FDX : :
イーサネットアダプタ二つは無事に認識されてるようだ。 それならそれでいいことにしよう。
あとはネットワークインターフェイスを設定すりゃいいね。 えーと、NetBSD の ifconfig の引数はどうなんのかな。 man 見た感じだとこんなとこかな?
# ifconfig tlp0 delete # ifconfig tlp1 inet 192.168.1.38 media 100BaseTX # ifconfig -a tlp0: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 address: 00:**:**:**:**:** media: Ethernet 10baseT status: no carrier inet6 *****************%tlp0 prefixlen 64 scopeid 0x1 tlp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 address: 00:**:**:**:**:** media: Ethernet 100baseTX status: active inet 192.168.1.38 netmask 0xffffff00 broadcast 192.168.1.255 : : # ping -c1 as500 PING as500.loveruby.net (192.168.1.38): 48 data bytes 64 bytes from 192.168.1.38: icmp_seq=0 ttl=255 time=0.153 ms ----as500.loveruby.net PING Statistics---- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.153/0.153/0.153/0.000 ms
あ、動いた。
なんだ、楽勝じゃん。
そういえば明日 (今日) は高校陸上部の同窓会だ。 幹事をやっていた都合上、行かざるを得ないのであった。
■ ただただし [古くなった何かを食べて、負けたのかと思ってましたよ]
■ あおき [そう毎日毎日賞味期限切れの食料を食べてるわけにもまいりません (^^;;]