青木日記

<前月 | 最新 | 次月>

2003-05-01

NANAO の液晶モニタ

L565 は気持ち悪いくらい評判いいですね。 最近出た 17" 液晶の L557 と比べても、 反応速度は遅いけど画質はまだ高いという話です。 あとは視野角も上なんだっけか。 動画中心なら L557 がお買い得、 画質重視なら L565 逝っとけ、というとこかな。 しかしそろそろ L567 が出そうだという噂もあるので油断できません。

19" の L767 もなかなかよさげですね。 なぜか 18.1" の L665 より安いですし。

ほん

買ってきたー。

  • 『PerlユーザーのためのRuby入門』吉田和弘著、オーム社、2003

表紙がかっこいいですね。いいないいなー (一言目がそれかよ)。

読んでたら自然と Perl を覚えたりしないかなー という黒い目論見のもとに購入。

4 章の「落とし穴」の後半は落し穴と言うより Tip 集っぽい。

  • 『Ruby de CGI』堀川久著、オーム社、2002

ちょうど極貧のころに出たもんで買い損ねてたのでした。 ヤボ用で CGI が書きたくなったんで参考にします。

  • 『詳解TCP/IP 新装版 vol.1』W.Richard Stevens著、橘康雄訳、井上尚司監訳、ピアソン・エデュケーション、2000

あーあ、ついに買っちゃったよ。 どうせ vol.2 と 3 も買うんだろうな。

  • 『Common Lisp入門』湯浅太一・萩谷昌己著、岩波書店、1986

いま思い出したんだけども、 このシリーズの Scheme 版が大学の図書館にありました。 購入して以来誰も借りてなかったらしく、 押してある貸し出しスタンプがぼくのだけと言う……。

  • 『Squeak入門』Mark Guzdial・Kim Rose編、軋音組訳、(株)エスアイビー・アクセス、2003

こないだ SICP 読書会で教えてもらった本。 装丁がとても怪しい。

本日のツッコミ (全2件)

笹川 賢一 [Scheme版て、湯浅先生の本ですかぁ?
誰も借りてないとは、、、。裕福なのかな?それとも。]

あおき [いやだって文系学部だけだから。]


2003-05-02

net

net/http.rb, pop.rb, smtp.rb を大改修しました。 protocol.rb が一気に半分くらいになってます。

たいとる

昨日から日記のタイトルが変わっていることに いったい何人が気付いたことであろうか。

今日のヒット

湯煙温泉殺人事件 〜犯人はこのサブネットにいる!〜

(ただし結露なきこと)

本日のツッコミ (全6件)

たかはし [title要素にあるタイトルは変わっていないような。
私は心の中で「あおきにっき つっこみすぎ」とか「あおきにっき つっこまれすぎ」と呼んでいます :-)]

kog [ああ、錯覚じゃなくて現実になってる!...(すいません)]

さかい [以前にどこかで見た、

「湯けむり温泉Scheme殺人事件
   Lambda式と末尾再帰に隠された謎
     カッコの付け忘れに刻まれた32年前の悲劇」

ってのを少し連想してしまいました。> 湯煙温泉殺人事件]

はら [っていうか、誰かがつっこんでくれるまで待てずにバラしてしまうところなぞまだまだ修行が足りません。:-)]

あおき [うっ……まったくその通り > 修行不足]

すぎむし [みっきー ≫ みっき ≫ みつき ?
:-)]


2003-05-03

Haskell / 例外補足

例外対応 cat

module Main where
 
import System
import System.IO
import System.IO.Error
 
main =
    do
        args <- getArgs
        case args of
          [a] -> catch (do cs <- readFile a
                           putStr cs)
                       (\e -> do hPutStrLn stderr ("read fail: " ++ ioeGetErrorString e))
          _   -> do hPutStrLn stderr "1 arg must be given"
                    exitWith (ExitFailure 1)

でもこういうことをやるなら明らかに Ruby のほうが短いわけだ。

unless ARGV.size == 1
  $stderr.puts "Just 1 arg needed"
  exit 1
end
begin
  print File.read(ARGV[0])
rescue => err
  $stderr.puts "read fail: #{err.message}"
  exit 1
end
本日のツッコミ (全4件)

nobsun [そんなにHaskellのコードが長いとは思わないけど。。。
main 以下なら(ってそんなのありか?)9行で一行短い。^^;]

あおき [いや、実は Haskell 版のは exit(1) が一つ少ないですし、
main より下だけ見ても wc で見ると分量が倍くらい違います。

Haskell
10 46 384 t
Ruby
10 25 173 tt]

あおき [インデントを数えるのは卑怯か。消しましょう。

~/c/test/haskell % sed 's/ *//g' t | wc
10 10 212
~/c/test/haskell % sed 's/ *//g' tt | wc
10 10 148

でもやっぱり 50% 増しですね。]

笹川 賢一 [Haskellで一番関心したのはラマヌジャンの
タクシーナンバーを求めるやつ。
1729=1^3+12^3=10^3+9^3
こういうのをエレガントに書けるのはHaskellだけ
だと思う。Schemeじゃこうはいかない。
SICPの2章に出てくるエイトクイーンもHaskell強し!
と思っちゃいます。]


2003-05-04

機械が嫌い

最近の自転車の電池式ライトってスイッチがないんですよ。 自転車が動いていて、かつ暗くなると勝手に電気がつき、 自転車が止まるか明るくなると消える。 これが非常に不便なんです。

というのは、家はすぐ横が大通りなので、 常時大型トラックが走りまわっているのです。 深夜にガタガタ揺れることも多くなります。 そうすると夜、駐輪場に置いておくだけで、 振動を感知してライトがついてしまうわけですよ。 ライトがついてれば電池が消耗するわけで、 放っておくと二週間も保ちません。

単二 3 本が二週間で消滅されたんじゃ洒落になりませんから、 使わないときは電池を外しておくことにしてます。明らかに本末転倒です。

あー腹立つ! 俺は機械が半端な知恵を働かすのが大嫌いなんだ! 余計なことをするくらいなら黙って命令に従え! つーかスイッチ付けとけ!

機械が嫌い (2)

全然関係ないけど近所の吉野家が食券制になってた。 許せん。

# 特に合成音で返事をするのが許し難い

本日のツッコミ (全2件)

笹川 賢一 [ヤッター、いいぞいいぞ。中途半端な機械はいかんですよ。
全然関係ないけど、サンダーバードがNHK教育で再放送だよん。]

とおる。 [食券制は、衛生上はよいです。きっと潔癖症の人の多い客層なんでしょう。]


2003-05-05

ライト

そういえばワインバーグの本で『ライト、付いてますか』ってのがあったなあ、 と自転車のライトの続きで考えてみたら、

夜中、自転車のライトに話しかけているワインバーグの姿が 思い浮かんでしまった。

なんとッ!

http://www.rubyist.net/~matz/

まつもとさんがッ!

tDiary をッ!

始めているッ!

(意味もなくジョジョ風の「ッ感嘆符」区切り)

どどどどうするんですか?

どどどどうもしません。

あっ、Link available にも入ってる!

重刷

楽しいRubyが重刷かあ。 数の掃けそうな初心者向け本とは言え、 やはり 1 年くらいはかかるものなんですね。

10 分

なぜか 10 分で X の画面が真っ黒になる。 DPMS (Energy Star) の設定は 40 分でスタンバイにしといたのに変だなあ……

と思ったら単にスクリーンセーバー (blank) が動いてただけでした☆ xset s off でオケー。


2003-05-06

「^」「$」を安易に使うべきではない委員会

(2004-09-28 追記) これはRubyの正規表現に限った話です。

正規表現で「文字列の先頭」のつもりで「^」を使うのは間違いです。 バグです。誤りです。「^」は行頭であって文字列先頭ではありません。 いますぐ「\A」に直してください。

% ruby -e 'p /^a/ === "b\na\n"'
true
% ruby -e 'p /\Aa/ === "b\na\n"'
false

「$」も同様です。 文字列末尾を表すのは「\z」です。 「\Z」でもありません。

% ruby -e 'p /a$/s === "b\na\n"'
true
% ruby -e 'p /a\Z/s === "b\na\n"'
true
% ruby -e 'p /a\z/s === "b\na\n"'
false

「リファラ」を「リファ」って略しても一文字しか減ってないじゃん。

ほん

"Haskell: The Craft of Functional Programming" second edition, Simon Thompson, Addison-Wesley 1999

また買っちゃった……。

このまえ買った "Introduction to Functional Programming using Haskell" も内容は悪くないんですが、結局 Introduction to FUNCTIONAL PROGRAMMING であり Introduction to Haskell でないということを悟りました。 「/=」を「≠」と書いたりしてくれるのがそこはかとなくウザいし。


2003-05-07

regexp =~ string

[ruby-list:37655] で str =~ re よりも re =~ str が正しいと言ったのは、 Ruby 言語とライブラリの設計者であるまつもとさんが 「そっちのほうが正しい (推奨する)」という旨の発言をしているからです。 であるからして Ruby においては正規表現を左にするのが正義なのです。 例によって Ruby の正義は予告なく変わる可能性がありますが、 変化の可能性は現在の正義を否定するものではありません。

ま、正義なんてのは所詮その程度でしょ。

本日のツッコミ (全12件)

ささだ [たしかruby本で見たような話(=~)だと思ったんですが(注意点として書いてありましたね)、その根拠はなんだろうな? と再考してみたという話でした。]

akr [prettyprint.rb みたいなのは Haskell のほうが楽だと思うなぁ。]

あおき [prettyprint が、と言うよりも、akr さんの考えかたが
(比較的) Haskell と親和性があるってことはありません?]

あおき [あっ、ちなみに、Haskellで解きやすい問題があるってのは
もちろん否定しません。というか、それは当然として、
ヘロヘロっとした問題を Haskell で解けたらいいなあ〜、
というのがぼくのスタンスってことです。]

nobsun [Haskell では toy program でも、いろいろ遊べてしまうので、そこまで止まりのことが多かったりして。。。:)]

笹川 賢一 [お騒がせしていてすみません。私は役に立つプログラムはほとんど書いたことがないものですから、、、(^^;;;;;
思考を表現する言語ってとらえるとまた別の面白い部分もあるのかもしれません。「知の限界」チャイティン著 のLispの話を読むと実行するためのものというよりも表現するための言語という感じがします。]

はら ["The Craft .." って7月に新版が出るみたい。]

nobsun [shiroさんが燃えたようです。:-)
http://shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3aTaxiNumber&l=jp]

笹川 賢一 [Shiroさんのコード昨日見ました。もう一回
Schemeでの遅延評価について勉強してから
顔を洗って出直します。(^^;;;;;
ちなみに、元ネタです。知っている人も多い
と思いますが。
ラマヌジャンの話はホフスタッターのゲーデル
、エッシャー、バッハで読みました。
Haskellのコードは武市先生の関数プログラミングの論文集
の本で見ました。遅延評価がうまくいく例だと思った
記憶があります。いずれも、本は人にあげたり、図書館
から借りたものなので手元にはありません。]

はら [発見:
#!/usr/bin/env runhugs
-- Ramanujan Numbers:
-- c.f. http://www.ipl.t.u-tokyo.ac.jp/~onoue/pub/jssst01.pdf
module Main where
main = print (take 3 (ramanujan (\(a,b) -> a^3 + b^3)))
ramanujan f = [(x,y) | (x,y)<- zip s (tail s), f x == f y]
where s = fsort f 1
fsort f k = (k,k) : fmerge f [(k,b) | b<-[k+1..]] (fsort f (k+1))
fmerge f (x:xs) (y:ys)
| f x <= f y = x : fmerge f xs (y:ys)
| otherwise = y : fmerge f (x:xs) ys]

はら [[ruby-math:00852]でチャレンジ!
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-math/852
ふるって応募下さい。:-)]

はら [ごめん、[ruby-math:00851]でした。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-math/851]


2003-05-08

Subversion

あーあ、徹夜しちゃった。

という話とは全然かんけいないんですが、Subversion どうなんですかね。 CVS じゃ絶対だめということはないので無理に移行する気は起きないし、 原稿を預けるのはまだ恐いし……ということで当分は CVS かなーと思ってます。

……なんだ、結論は出てるんじゃないか。

VS もやし

ついに残ってしまった。 4/23 生産 4/26 賞味期限のもやし。食えるでしょうか? あ、食えるのは当然か。食ってどうなるかが問題だ。うむ。

完全敗北 (させてください)

うわああああああ! カビ! カビクラスタがああああ!

敗北したはずなのに

なんで味噌汁作り継続してるんだろう〜。

卵……ふたつあるから二つ入れようかな……賞味期限 4/21

味噌……これで最後だな……賞味期限 3/17

うわぁ〜。これは死ぬかも……。

感想

うっ……。なんかアルコールっぽい匂いがする…… (発酵してる?)。

味噌の残りが少なすぎた。味が薄くてごまかせない。

そして卵が……。入れないほうがまだよかった……。 温泉のにおいとでも言いましょうか、えー、ようするにダメですこれ。 まじ終わってます。

とか言いつつ完食〜。ああ、本当にやめればよかった。 このまま三日くらい日記が途絶えたら間違いなくこれのせいですので。

どちらを引数にするのが正しいのか

5/7 ツッコミから再掲。

> たしかruby本で見たような話(=~)だと思ったんですが
> (注意点として書いてありましたね)、その根拠はなんだろうな?
> と再考してみたという話でした。

まあ本当のとこはまつもとさんにしか言えないわけですが。 強いていくつか根拠らしきものを挙げるなら、

  • parser.parse(str) とは書いても str.parse_by(parser) は書かない
  • eval(str) はあるが str.eval はない
  • 正規表現オブジェクトは典型的なインタプリタパターンである。

とかですかね。

大丈夫だった

無事に目覚めることができました。 ありがとう、お天道様ありがとう。

本日のツッコミ (全6件)

ささだ [最近のVisualStudio(.Net)はモヤシの栽培にも対応したのかと思ってしまいました。]

なかだ [今度からrhg-tokyoには、賞味期限切れのものを持ち寄ってあおきさんにプレゼントするとか。]

ogino. [生ゴミ用のコンポストをプレゼントしたくなりますな。]

ただただし [ゴミにするのは、あおきさんの本意ではないのでは?]

ogino. [大人になるために形態を変えて水に流すだけではなく、土に還してあげることもおぼえるのです :-p]

あおき [やっぱり VisualStudio に見えますか。
昔「VisualStudio.福神漬」っていうネタがあったな……
(この日記で。)]


2003-05-09

RHG 読書会

そういえば予告を書いたことはないような気がする。 明日土曜日に第 5 回ですよー。範囲は 12 章から。 特に混んでるわけではないので飛び入りでも余裕でいけます。

そういえば場所を書いたページって RWiki くらいしかないんですね。 新宿・曙橋の(株)タイムインターメディアの会議室を借していただいてます。 場所は以下のウェブサイトの地図を見てください。

SKKにて

▽おーむ [SPC]
▼Ω [SPC]
▼王蟲

王蟲?!

href 0.1

ここ数日の成果。

% href
Control.Exception Control.Monad Data.Char Data.List
System.Directory System.Environment System.IO Text.Regex
 
% href fold
Data.List.foldl Data.List.foldl1 Data.List.foldr Data.List.foldr1
 
% href foldr
Data.List.foldr
foldr (f init xs) :: (a -> b -> b) -> b -> [a] -> b    PRELUDE
 
    xs の最後の要素と init から始めて、
    xs の後ろから二番目の要素と最初の返り値、
(以下略)
 
% href Dat
Data.Char Data.List
 
% href Data.List
---- module Data.List
!! ++ \\ all and any break concat concatMap cycle
delete deleteBy deleteFirstsBy drop dropWhile elem elemIndex
elemIndices filter find findIndex findIndices foldl foldl1 foldr
foldr1 genericDrop genericIndex genericLength genericReplicate
genericSplitAt genericTake group groupBy head init inits insert insertBy
intersect intersectBy intersperse isPrefixOf isSuffixOf iterate
last length lines lookup map mapAccumL mapAccumR maximum
maximumBy minimum minimumBy notElem nub nubBy null or partition
product repeat replicate reverse scanl scanl1 scanr scanr1
sort sortBy span splitAt sum tail tails take takeWhile
transpose unfoldr union unionBy unlines unwords unzip unzip3
unzip4 unzip5 unzip6 unzip7 words zip zip3 zip4 zip5 zip6
zip7 zipWith zipWith3 zipWith4 zipWith5 zipWith6 zipWith7
 
% href Data.L cyc
Data.List.cycle
cycle (xs) :: [a] -> [a]    PRELUDE
 
    リスト xs の最初と最後をつなげ環状にしたリストを返す。
(以下略)

とまあ、見ての通り Haskell 版の ReFe です。

プログラム書くのもかなり苦労しましたが、 リファレンスマニュアルを書くのも結構苦労しました (笑)

つーわけで、欲しい人はもってってください。

本日のツッコミ (全4件)

たむら [そういえば、「鶴瓶(つるべ)」も一発変換ですた>SKK]

なかだ [cannaでは「おうむ」です。]

あおき [結構変なもんが変換できますよね。
「なか卯」とか。]

はら [すんばらしー!まさにこういうのが欲しかった。(まだ動かせてないですが。)]


2003-05-12

賞味期限

ぼくは別に賞味期限切れのものばっかり食べてるわけじゃないんです。 しかし賞味期限切れのときだけここに書いていると あたかも賞味期限切れのものばかり食べていると思われてしまいがちです。 そこで賞味期限切れでないもので何か作ったときもここに書こうと思います。

さっそくですが、今日の朝ごはんを作ります。 至ってノーマルな「白米 + 味噌汁 + あじ」という組み合わせです。 もちろん賞味期限は切れてなんか

……ああっ! (悲痛な叫び)

RHG 読書会 #5

おとといは RHG 読書会でした。 記録はいつも通り RWiki に書いてます。

どうも飲み会の話題が思い出せない。

Amazonよ……

Amazon で『入門Emacs』を「興味がありません」にしたら vi の本を勧められた。

Amazon……

さらにフィードバックしてやったら、今度は RHG を勧められた。

昼ごはん

母親が「カレーうどんを食べたい」と作りはじめた。 しかしうどんがなかった。 結果としてできたのはカレースパゲティだった。

……ビミョーな味だな……

Rubyに対する他言語の影響

RHG のワーキングコピーを整頓していたらこんなものを見付けた。

Rubyに対する他の言語の影響
 
Perl         哲学  変数名  メソッド名  next,redo
Smalltalk    オブジェクト指向  selfという予約語
Lisp         ほとんどが式  lambda
CLOS         特異メソッド mixin
Sather       class C<S   include
Flavor       mixin
Eiffel       rescue retry
CLU          イテレータ
Scheme       xxx! xxx?
Common Lisp  :sym
Emacs Lisp   ?c   "\C-c"
Python       def  例外名
awk          sub gsub
C            演算子
Icon         ===
Java         スレッド仕様
C++          ::演算子
Actor        NilClass

こんなものどこから持ってきたんだろう。 ruby-list の古いほうかもしれない。

本日のツッコミ (全3件)

ただただし [買うしか(笑) >RHG]

はら [著者にサイン貰うしか>RHG]

あおき [買うのか…!>RHG]


2003-05-14

寝てました。

36 時間ほど寝てました。

いや別に寝込んだわけじゃなくてですね。 何もないのに 36 時間寝てたんです。 なんて罰当たりな。

でもそんなに寝るとさすがに寝るのが苦痛になってきて 「頼むからもう起きさせてください」っていう気分になれます。

ああ、なんと言うか、すげえ損した気分。

Rubyに対する他言語の影響 (2)

意地で元ネタを発掘しますた! [ruby-list:5194]

やはり微かな記憶通り、ruby-list の前のほうに登場した まつもとさんのメールでした。

href

山下さんの指摘に加えて、既存のテキストから型指定を 持ってくるのが楽なほうが望ましいということに気付いたので、 リファレンスのフォーマットを微妙に変えることにしました。 どう変えるかはまだ考え中です。 とりあえずパースが楽で、シンタックスレベルで閉じてるやつ。

りふぁ

なぜ「早く福岡に帰りたい」を検索する?!

本日のツッコミ (全3件)

はら [おはようございます。「あおきにっき つっこミキティ」はどうでしょう。]

たかはし [元ネタは
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5194
だと思います。]

あおき [おっと、ナンバー間違えてましたか。直しました。]


2003-05-17

TMail 0.10.7

やっとのことで TMail 0.10.7 をリリースしました。

バグフィクスが中心です。

流れで setup.rb も改良したんですが、 そっちのリリースまではいけませんでした。 明日か明後日に。

ruby-dev summary

今週も流量が少ないですね。 まあいいや、さすがに二週空くのはよくない。 明日 (日曜) やります。


2003-05-18

データ共有

これまでずっとローカルの CVS レポジトリでやってたんですが、 マシンが増えて面倒になってきたので家庭内サーバをたててそっちに 移しました。快適です〜。小さなユーティリティなんかを cvs update で全部一気に同期できるのでめちゃくちゃ便利ですね。 もっと早く導入すればよかった。

サーバは Sun の Ultra30 (UltraSPARC-II 250MHz) なんですが、 結構速いですね。やはり腐っても SCSI か。 目下の問題はどうやって夏を越えるかです。

TMail

気付かなかったけど前回のリリースから半年近くたってるのね。 まずい傾向だ……。1.0 はいつ出るんだろ。 というかなんで 1.0 じゃないんだったかな。

ああそうか、RFC2231 エンコーディングをちゃんと サポートしたら 1.0 にしようと思ってたんだ。 今はデコードはできるけどエンコードはできないからな。

本日のツッコミ (全2件)

ただただし [うちはリポジトリを持ってるサーバがあちこちにあって困ってます……]

あおき [じゃあ今度は全てのレポジトリを CVS で管理 (違
そういえば BitKeeper がそんな感じでしたっけ]


2003-05-19

rm -rf

何を思ったか、いきなり

# rm -rf /usr/local/bin/ruby /usr/local/lib/ruby

してしまいました。あせった。 lib まで消しちゃったもので uconv とか nora とか全部コンパイルしなおしです。 ちゃんと動いてるかな。

境界は 5 時

ありゃ、次の日になっちゃった。

ログ消失

ぬああ、5 月の日記が消えた!

しかもミスオペではないようだ (コマンドラインヒストリで確認した)。 いったい何が起こったんだ。 迂闊に ruby をバージョンアップしたのがいけなかったのか。 いやそりゃ実はちょっと eval.c 書きかえたんだけど、 いきなりそんなことになるか?

やばいな、もしかして動かしてるだけでどんどん消えていくんじゃないだろうな。 いや違うか、少なくともアップデートしないと変更は起こらないな。 update.rb まわりが変なんだろうか。 あるいは独自の SMTP → HTTP ブリッジのせいかも。

あ、データ自体はメールでコピーが残ってるんで復活できます。 これで安心して破壊テストがやれるってもんだ。うむ。

破壊テスト中

む、アップデートはできるのか。

※ 今書き込むと消える可能性があるので、 原因が判明するまでツッコミは御遠慮ください。

warning

うーん、ruby の warning が出てるな。 split で文字列が使えなくなったやつか。 問題はないはずだけどとりあえず潰しておこう。

ruby

ちなみに eval.c は 1.430 に戻してあります。 なので、イテレータ絡みで変になってるわけではない、はず。

原因の一端?

これが関係あるかもしれません。

% ruby -v -e 'p "aaa\n\naaa".split("\n\n",2)'
ruby 1.8.0 (2003-05-17) [i686-linux]
-e:1: warning: string pattern instead of regexp; metacharacters no longer effective
["aaa\n\naaa"]
 
% ruby -ve 'p "aaa\n\naaa".split(/\n\n/, 2)'
ruby 1.8.0 (2003-05-17) [i686-linux]
["aaa", "aaa"]

この影響で CSS 設定が変になったりしてました。

しかし表示のほうは動いてるので、 ウェブ経由で更新するとかの条件が加わると破壊されるのかもしれません。 ファイルが消えたときはかなり連続で「編集」してたので たぶんその影響があります。

ちなみになんで編集してたかと言うと、パーサがうまく働かなかったからです。 キャプションになるはずのところがどうしても段落になってしまう。 これもたぶん split が影響してるんじゃないかと思うんですが。

ところで

ruby 1.8.0 がインストールされているとして、 以下のプログラムをコンパイル・実行するとどうなるか答えなさい (5 点)

#include <stdio.h>
#include <stdlib.h>
#include "ruby.h"
 
int
main(int argc, char **argv)
{
#if RUBY_VERSION_CODE < 180
    puts("Hello, World!");
#endif
    exit(0);
}

解答

~/tmp % gcc -I/usr/local/lib/ruby/1.8/i686-linux t.c -o t
~/tmp % ./t
Hello, World!
~/tmp %

「#include "version.h"」を入れないとだめなんだよもん。

で、

いま明かされる衝撃の事実!

~/s/src/ruby % grep -l RUBY_VERSION_CODE *.[cy]
class.c
hash.c
string.c
 
~/s/src/ruby % fgrep -l version.h *.[cy]
error.c
version.c

修正完了?

直ったかな。

結論

直ったようだ。結論。

  • 安易にコマンドをアップデートしちゃいかん。
  • テストはこまめに 導入前に

やれやれ。

ところで全然関係ないけどこんな言葉を思い付きました。

  • 開発版 みんなでわたれば 恐くない

……嘘つき。

復旧

完全復旧しました。 やっぱし開発版は開発版ですね。 気をつけましょう。

Not Compaq

http://homepage1.nifty.com/cosmic/font/notcompaq.html

[d|i|g|i|t|a|l] なフォント。 こんな感じ。

sh と Haskell

sh の

cat file | head -10

と Haskell の

head :: [String] -> [String]
head xs = take 10 xs

はかなり似てる。

Rubyにぬるぽを導入するスレ

ム板のぬるぽスレにこれを張った人は潔く名乗り出なさい!

597 名前:デフォルトの名無しさん 投稿日:03/05/02 0025
    raise 1442118444.to_s(36)

「……でも、そんなスクリプト、誰にでも書けるんじゃないの……? そんなものは何の証拠にならないわ」

(ざわ……ざわ……ざわ……)

「そ、そうだ! こんなもの誰にだって書ける! Ruby を知っていれば誰にだって……!」

「ところがそうじゃないんだ……」

「なにっ?」

「このスクリプトだけはそうじゃない…… 長さや複雑さは関係ないんだ」

「な、なにを負け惜しみを……」

「ふ……これを見ろ!」

(ざわ……ざわ……ざわ……)

「こっ、これは?!」

% ruby-1.8.0 -e 'raise 1442118444.to_s(36)'
-e:1: nullpo (RuntimeError)
 
% ruby-1.6.8 -e 'raise 1442118444.to_s(36)'
-e:1:in `to_s': wrong # of arguments(1 for 0) (ArgumentError)
        from -e:1

「そうだ…… Fixnum#to_s に引数が導入されたのは 1.8 からなのさ! しかも cvs log によれば 36 を基数にできるようになったのは…… 2003 年の 4 月 14 日なんだ」

(?!)

「そ、そんな……変更からぬるぽスレの書き込みまで…… 二週間くらいしかないってことじゃない!」

「ああ。犯人は相当 ruby の変更に通じているに違いない。 だから間違いなく……犯人はこの中にいる! (どーん)」

我ながらアホなものを書いてしまった。


2003-05-21

もっと共有

別マシンの Windows と Linux で クリップボードを共有できないもんだろか。

クリップボード共有 (2)

xwinclip というのが一瞬それっぽい感じがしたが、 Cygwin の X と Windows のクリップボード共有であった。 惜しいな。

本日のツッコミ (全5件)

ささだ [VNCじゃ駄目でしょうか。駄目だろうなぁ。]

たむら [それぞれのクリップボードを監視してプールする drubyクライアントが通信すれば ...]

あおき [C#で作ろうかと思ったんですが、Javaで作ってみようかと思ってます。]

あおき [RubyだとXのクリップボードいじるのが面倒そうなんで。]

ただただし [まず「RubyでXのクリップボードをいじる拡張モジュールを書く」のが、あおきさんらしいと思う(強く主張)。]


2003-05-23

3

ぜんぜん深くない事情により三徹中です。そのため明日のSICP読書会は欠席します。

ちなみに原稿の締め切りとかですらないです。ただ勢いがついてしまって眠れないんす。

あー、馬鹿と呼ぶなら呼んでくれっ!

本日のツッコミ (全4件)

nobsun [そういうことってありますよねぇ。
強迫的に眠りたくないこと。
しゃねぇなぁ。メイン呑みだけで、許してあげよう。:)]

あおき [ま ぢ で す か(泣)]

チェチェコリ [馬鹿

とかいってみるテスト]

あおき [律義なかたですね。]


2003-05-25

clipshare

クリップボード共有デーモン。 Java で書くと言ったものの、 なぜか Java で書いたもの以外のアプリケーションと 同期してくれないので仕方なく Ruby で書くことにした。 Windows 側も最初の目論見通り C# でいってみよう。

とか言ってると結局全部の言語で書くことになったりする。

clipshare / Ruby ext

Ruby の TCPSocket と X イベントを同時に待つために

rb_thread_wait_fd(ConnectionNumber(display));

としてみたが、一瞬で終わってしまう。なぜだ……。

とりあえず諦めた (早っ)。

むがー! なんで生の select ではうまくいくんだあーっ!

あー! わかたー! シングルスレッドだからだ! シングルスレッドだから rb_thread_schedule がすぐ戻るんだ! くそう、そういえばこれは自分で RHG に書いたような気がする……

clipshare / Ruby

肝心のデーモン作りに着手した。 即座に謎の同期バグに遭遇。

プログラムの最初で stdout をフラッシュしとくと動く。 消すとブロックする。 print しても動いてしまうのでデバッグできない。

ちなみに肝心の内容はこれだけっす。

def main
  ....
  require 'clipshare/xclipboard'
  x_main
end
 
def x_main
  $defout.flush   # I don't know why this statement is needed.
  content = ClipShare::XClipboard.get_string
  while true
    ClipShare::XClipboard.put_string content
    content = ClipShare::XClipboard.get_string
    puts "owner changed; content=#{content.inspect}"
  end
end
 
main

put_string は selection オーナーでなくなるまでブロックするので、 put_string が終わったら別のアプリケーションがオーナーになったということ。 そうしたら即座にクリップボードの中身をそっくり奪って自分がオーナーに復帰する。 puts してるとこで TCPSocket 使ってオーナー宣言してやれば完成〜。

とりあえず動いているようだ。

clipshare / Ruby

甘かった。クリップボードインターフェイスなんかより、 複数ホスト間で同期をとるほうがずっと難しいじゃないか。 かなり慎重に伝達経路をチェックしないとあっさり無限ループになるな。

とりあえず Linux(Ruby) → Windows(Ruby+C#) の push 実験は成功した。

To do

  • Windows の Ruby 部分を C# で書き直す
  • C# でクリップボードの変更を検出する
  • Windows サービスになる
  • Java 版のバグを究明する

clipshare / C#

Windows 側は完全 C# 化した。 あとはクリップボードの内容変更を検出することだけど、 これはポーリングしてみるしかないのかな。 COM に触るとできたりするんだろうか。 ま、とりあえずはポーリングでいいか。 富豪で行こう。

poll

そういえばプログラム初心者のころ、 polling と言われるとどうしても 温泉を掘るボーリングを思い浮かべてしまって困りました。 今でも poll(2) を見ると地盤に杭を打ちこんで ファイルディスクリプタを調べている様がありありと脳内に投射されます。

本日のツッコミ (全2件)

sheepman [daveさんの Xselection が役に立つかも。

http://www.yasgursfarm.us/rdic/xselection.html.ja]

あおき [いま書いたやつとほとんど同じでした……。がくり。]


2003-05-26

わー

地震だ! わわわ、すごい揺れる! (マンションゆえ揺れが増幅される)

東北、震度 6 ?!

地震

12ch がアニメやってる間は大丈夫か。

岩手めんこいテレビの人、動揺してるな。

ちなみに今回とっさに手にとったものは CVS レポジトリを バックアップしたCD-ROM でした。今度地震が起きたときは 通帳も持つようにしよう。

Proc/Block

結構変更がでかそうなので自作のものについてテストした。 Racc TMail ReFe TextBuffer setup.rb は何事もなくテスト終了。 意外と関係なかったらしい。

本日のツッコミ (全2件)

なかだ [たぶんfgrep .yieldで引っかからなければ大丈夫ではないかと。]

あおき [なるほど。仕様よりは実装の変化のほうが大きい感じですね。]


2003-05-27

DoA

いや、DoA 写真集は買ってませんよ? (笑) Amazon にお勧めされた記憶はありますけど。

ただ、原因は GC の本じゃなかったと思います。なんだっけ。 中田育男の『コンパイラの構成と最適化』だったかな…… (ああ、やっぱマニアックだ)。

あと指輪物語の DVD とかハリーポッターとか、Matrix も何度か出ました。 スラドとかマ板で話題になるような奴が高確率で登場してくるんでしょうか。 早い話が、オタク層とみなされている、と。

別に否定はしないけどな。けっ!

メイド喫茶とウェブメール

メイド喫茶で思い出しました。 マシンが複数になってきてメール読むのが大変になってきたので、 簡単なウェブメールシステムみたいのを書いてるんですよ。 TMail のいい使用例にもなるしね。 するとやっぱまずは名前を決めないといけないじゃないですか! いい名前こそはプログラムの命じゃないですか! そこで、メール……ウェブメール……mail の付く言葉……と考えて

mai:lish

という単語が一瞬頭をよぎったんですが、 さすがにそれをやるとシャレ・ギャグの領域を遥か那由多の世界にぶっちぎり 危ない世界に足を踏み入れてしまいそうなんで全精神力をかけて思い留まりました。 ふー、危ない危ない。 (関連終わり)

参考:秋葉原におけるメイド喫茶・コスプレ喫茶の歴史
http://sotokanda.net/his_cafe.html
(from 俺ニュース)

んで結局名前は何になったのかと言うと。

秘密です。

※ それよか手前ちゃんとリリースするのかよ、あぁん? というツッコミは謹んで御遠慮いたします。

本日のツッコミ (全2件)

ただただし [mai:lishに一票。]

なかだ [なんて読むんだろう。「めいーりっしゅ」?]


2003-05-30

tDiaryでツッコミ全表示

tDiary でツッコミを省略されないようにするには…… skel/*.rhtml の shorten を消すだけです。

ちなみに家の日記では単に shorten をやめるのではなく、 桁と行の両方で少しゆるめの制限をかけてます。

clipshare / Ruby / Win32

Win32 クリップボードにアクセスするにはどうしたらいいんだろう。 Win32OLE 使えばいいのかな? なんとなくそんな気がするな。 うー、でも Win32API 調べるの面倒だなー。とりあえず Google 検索してみよ。

「ruby windows クリップボード」でこの日記が一番上に来るのはいかがなものか。

お、そのものズバリがあるじゃん。nyasu さんの Ruby on Windows 経由で a.nakata さんの http://homepage1.nifty.com/a_nakata/ruby/。 クリップボード操作モジュールがある。これをもらって使うことにしよう。

わーい動いた〜。

おかしいぞ、Cygwin で動いてなぜ mswin32 で動かない!

うわあ、拡張モジュールが全然コンパイルされてない。やだなあ。

mswin32 ruby

srcdir でやったらプラットフォーム独立なやつはコンパイルできた。 が、やっぱり win32ole その他肝心なやつができてない。

まあ、VisualStudio 6.0 と .NET Framework 1.0 と 1.1 が 一緒に入ってるうえに Cygwin の zsh からコンパイルしてるから、 混乱する要素はいくらでもあるな。 怪しげな要素をできるだけ省いてやってみよう。

なぜか msvcrt 7.0 とリンクしようとしてるな。

mkmf.log にこんなログがっ!

MSVCRT.lib(sehprolg.obj): fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください

困った……。

mswin32 ruby (2)

理由は不明だが -Zi (デバッグ情報を含める) を取ったら通った。

mswin32 ruby (3)

甘かった。ビルドは通ってもインストールが通らない。

% nmake DESTDIR="C:\Program Files\ruby" install
                :
                :
                :
NMAKE : fatal error U1071: ターゲット 'C:\Program' の依存ツリーに循環定義があります。

らしい。 C:\Program ってことは Program Files がスペースで切れちゃってるんだろうな。 本質的に解決するのはあっさりあきらめて、 DESTDIR=/ruby でインストールしたあと Program Files\ に mv することにする。

clipshare / Java

Java 版は Windows 上のほうがうまく動いたりする。

X でも xclipboard を使うと内容を取得できることが判明した。 どうやら、使ってるプロパティが XA_PRIMARY ではないようだ。

ふふふ、クロスプラットフォーム・クロス言語な クリップボード共有サーバが見えてきたぜ! (こうして最初の目的を忘れていくのであった、まる)

X clipboard

うわあ、検索一発じゃん。

http://kt.zork.net/wine/wn19990718_4.html

CLIPBOARD アトムも同時にチェックすればいいのか。 面倒くさいなあ。

本日のツッコミ (全3件)

arton [nmakeはコマンドプロンプト上でデフォルトだと.NET Framework付属のやつが動きます。VC6のほうを生かしたい場合には、vcvars32.bat(VC6のどっかに入ってるし、多分PATHも通ってる)を実行してください。
#僕もこれで、変なASR作ってしまったことがあった……]

あおき [おおっ、ありがとうございます。
別srcdirまで含めてばっちりでした。
# RHGにも書いてあった…
# 自分ではまらないと覚えられないらしい。]

なかだ [たしかに、パスとかにスペース含めるとヘンな動きするかも知れませんねぇ。
Makefileとかはそういう可能性を伝統的に排除してた部分もあるので、チェックが行き届いてません。]


<前月 | 最新 | 次月>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|