history

青木日記 RSS

<前月 | 最新 | 次月>

2006-03-01

昼飯

豚汁。夕飯も豚汁。

(15:19)

臨界

ちょっと前に CRT モニタと CPU 切替器が壊れていらい、 L665 のアナログ・デジタル入力切り替えと複数キーボードでなんとかしのいでいたのだが……

げ・ん・か・い ☆

もうイヤ、こんな生活! (と、ちゃぶだい返す) こう、体を横にのばして Windows 側キーボードを操作するまだるっこしさがたまりません! 速攻ビックカメラ行って激安 CPU 切替器とモニタ買ってくる!

(16:22)


2006-03-04

AWDwR

アウドムラ……。うまいこと言うなあ。 わたしゃこの字面を見た瞬間に読もうなんて考えは捨てましたよ。 ていうか覚えるのすら断念して「こないだ翻訳された Rails 本」と覚えることにしました。

TMTOWTDI のときも思ったんだけど、 略したほうがわかりにくい略語って意味なくない?

(19:37)

Core Duo ベンチ

http://akiba.ascii24.com/akiba/column/latestparts/2006/03/03/660896-000.html?

Core Duo もなかなかいいなあー。 でも 64bit 対応してない時点で俺的には考慮外になってしまうな。 こんろーも同じくらい性能よければちょっとゆらぐかもしれないけど、 現状ではまだまだ Opteron 派。さいきんバス萌えだし。

(01:40)

本日のツッコミ (全2件) [ツッコミを入れる]

hyuki [私はアジャレイル本/ラジャイル本、というのを提案したのですが、あまりウケなかったみたい…。
http://www.hyuki.com/t/200602.html#i20060223172718]

青木 [そのほうがずっと覚えやすいですねえ。
これからでも流行らないかなあ。]


2006-03-05

今年は青色

やっべ、確定深刻 ^H^H 申告の存在をすっかり忘れてた! 調書もらってこなきゃ!

(18:48)

昼飯

またしても豚汁。夕飯も豚汁。

(18:49)

ふつうの Haskell プログラミング (1) 日程

えんえん延期している『ふつうの Haskell プログラミング』ですが、 3/23 初校締め切りで 5 月末出版てことになりました。 今回はいままでと違ってかなり深刻な締め切りなので、 ほぼ間違いなくこれで出ます、出します、出させます!

ふつうの Haskell プログラミング (2) レビュー

次にレビューについて。

この日程でふつりなクラスのレビューをやってしまうと明らかに間に合わないので、 今回は規模を思いきり縮小しようと思います。最大でも 10 名以下な感じで。 高橋さんには「レビュー合宿」とか言われたのですが、 想像してみると恐ろしい図が浮かんできたので全力で回避します。

レビューは 300KB 中 200KB 確保したところで始めようと思っているのですが、 なんかまだ 166KB です。遅いです。実にもどかしい。

もしレビューしてもいいよーという方がいらっしゃいましたら、 今日の日記にツッコミ入れといてもらえれば優先的にメールします。 今回の対象読者は、 「なんでもいいからプログラミング言語を一つ理解していて Haskell がどんな言語か興味をもっている人」です。 ただし本文中で他の言語の例を出すときは Java を使います。 また欲を言えば、言語を三つも四つもマスターしてるような猛者よりは Java しか知らねーという人のほうがありがたいです。

あと、なにぶんこの日記のことなのでいちおう注意しておきますが、 「なんでもいいからプログラミング言語を一つ」 と言ったからと言って「Haskell だけですが」とか 「OCaml だけですが」とか「SPARC アセンブラだけですが」 とかいうネタは勘弁してください。

(19:43)

(追記 1) 重要なことを書き忘れていました。例によって報酬はお出しできません。 できれば献本くらいはしたいと思っていますが、とりあえず当てにはしないでください。

(追記 2) もう一つ追加。期間は来週あたりから 3/23 までです。 ただし何か重大な問題があれば初校 (五月?) で修正します。

なぜレビューをやるか

レビューって何するんだ、というか、 わたしがなぜレビューしてもらいたがっているか、 という話をちょっとしておきます。 前にレビューについて書くと言ったまま書いてないような気がするし。

まず、間違いを減らすため「ではありません」。 今回は特に山下さんに監修していただいているので、 初校段階で一回読んでもらえれば RHG のときみたいな どーしょもないミスは起こらないだろうと考えてます。

それじゃ RHG も監修についてもらったのになぜ酷かったかと言えば、 それは実に情けない話で、わたしが締め切りをオーバーしすぎたために まつもとさんにちゃんと読んでもらう時間がなかったのです。 もう一ヶ月あれば自分でも読み直せたはずで、かなりマシになったでしょうが、 精神的にも金銭的にも、もう一ヶ月やるというのは無理な選択肢だったと考えています。 なので、あの時期に書くという前提では、RHG はあれが限界でしょう。

まあ RHG は置いときます。

で、間違いを減らすためではないとすれば レビューは何のためにやっているかというと、 具体的な読者像を知りたいからです。 読者像がわからないと本は書けません。一般化してしまうのがまずければ、 わたしの書きかたでは、読者像がわからないと本は書けません。

読者像がないと書けないのですから、 たとえレビューをやらないとしても読者像は必要です。 その場合は想像の読者をベースに文章を書くことになります。 例えば「ふつーの Java プログラマなら高階の関数なんて知らんだろう」 と想像できるので、高階の関数はしっかり説明するわけです。 あるいは「さすがにイテレータくらいは知ってるだろう、 むしろ知っててくださいお願いします」と考えて、 他の概念を説明するためにイテレータを使うわけです。

しかしあくまでその読者像は想像にすぎないので、 実際にはもっとしょっぱい現実があり 「はぁ、イテレータ? なにそれ」 な Java プログラマがたくさんいるかもしれません。 そういうミスマッチを減らすためには 現実の読者像を見せてもらわなきゃいかんわけです。

もっとも、レビューをしてもそのミスマッチがうまく解消できるとは限りません。 例えばこの日記でレビュアーを募集してしまうと Rubyist ばっかり 集まってしまって、Ruby にある概念を使うととても簡単に話が通じてしまうとか。 しかしそれと同時に「レビュアーはみんな Rubyist だ」という情報があれば、 その偏りも多少は差し引いて見られるでしょう。 レビューの最初にバックグラウンドなんかを聞くのはそれが理由です (とわたしは解釈しています)。

以上を踏まえて、レビューで何をしてもらいたいかという話をします。

レビューでは、できるだけ率直に感想を聞かせてほしいと考えています。 難しかったところに限らず、興味深かったところとか、 ここの話はすでに知っていたのでつまらんとか、 そういう反応はどれも役に立ちます。

例えば「ここはおもしろかった」という反応があった場合は、 そこに関係する話題をさらに追加するかもしれません。 あるいはページ制限で量を減らさなければならないときにも 優先して残すようにするかもしれません。

「ここはすでに知っていた」という反応が多ければ、 (レビュアー層が偏っている危険を考慮して) 完全に消さないまでも、 話を簡略化するかもしれません。

また「ここがわからない」という反応があれば、当然そこには手を加えます。 わからなかった理由を書いてもらってもよいですが、 読者が自分で考えた理由をそのまま信用することはまずありません。 自分で考えた理由というのは外れることが多いからです。 したがって、オープンソースソフトウェアの開発なんかのバグ報告とは違って、 とりあえず結果 (わからないという事実) を報告してもらうのが重要です。

したがって、レビューをするにあたって特殊な技量は必要ありません。 対象読者にあてはまるかたであればどなたでも歓迎します。

(20:05)

超久しぶりに Java

Java なんてもう忘れてるがな。 そもそも JDK 自体入れてなかったりする。 Linux/AMD64 より Windows のほうが楽そうだからサブマシンに入れよう。

stringって書いてコンパイルエラー食らった。 小文字の string は C# だったか……。

まだだめか。Hello, World! すら動かないということは…… $CLASSPATH 設定すんの忘れてた。

まだだめか。……そうか、パス区切りがスラッシュになってるからだな。 java が Cygwin DLL リンクしてるはずがない。

まだだめかー! $CLASSPATH が変な値になる。どうしてだ。 ……わかった。"\\r" が CR になってる。"\\\\r" にして解決。

ありがちな罠に全部はまってしまった。

Java でたらいまわされる

でもって何をやるかと言えば、たらいまわし関数のベンチマーク。 おおっ、なんかわりと速いぞ! (24, 12, 0) だとほとんど時間がかからない。 もうちょっと増やして (48, 24, 1) にして……みたら今度はいつまでたっても戻ってこねー! (20, 10, 5) だと Pentium 4 2.4GHz で 31 秒弱。まあこれでいいいや。

続いて GHC ……も入ってなかった。GHC 6.4.1 を入れる。

~/c/stdhaskell/src % time java Tarai
20
java Tarai  0.03s user 0.01s system 0% cpu 30.969 total
 
~/c/stdhaskell/src % time ./tarai.exe
20
./tarai.exe  0.01s user 0.01s system 71% cpu 0.042 total

あいかわらず GHC だと速ぇー。1000 倍速かあ。

(00:06)

本日のツッコミ (全13件) [ツッコミを入れる]

yanagi [レビューに興味があります。]

fukumori [同じくレビューに興味があります。]

fukumori [..と勢いで書いてしまいましたが、もしかしたら別件でいろいろバタバタしている時期かもしれません。とりあえず保留...すみません。]

hyuki [レビューしたいです。PerlとJavaは知っています。Haskellは自分で型定義をするのはちょっと無理、というレベルです。率直に感想を書くのは得意です。日本語を読むのは速いです。よろしくお願いします。]

shelarcy [同じくレビューに興味があります。]

きむら [レビューに興味ありです。
Cは人並みに使えると思います。Javaは積極的には使っていませんが、コードを読む分には多分問題ないです。スクリプティング言語はメジャーなところはある程度は組めます。Haskellは昨年チャレンジしましたが挫折しました。]

NITA [はじめまして。レビューに興味があります。PerlとPHPはまあまあ知っています。Haskellに関しては`Yet Another Haskell Tutorial'を読みましたが、後半よく分からなかったので、コードを書いたことは1行もありません。]

spiral [レビューに興味があります。実業務で Java を使っています。Haskell は「やさしい Haskell 入門」のモナドで挫折しました。日本語を読むのは遅いです。意見は直球過ぎて争いを呼ぶことがあります。よろしくお願いします。]

trad [レビューさせてください。
読める言語はC, Java, Lisp等。
Haskellで書いたものは最長で200行くらい。
Rubyはほとんど経験がないのでご安心(?)を。]

theoria [レビューに興味があります。学生の身ですが、よろしくおねがいします。]

theoria [メールアドレスを忘れてました。。。]

木村 [レビュー興味あります。
普段仕事では、C使ってます。
いちおうSchemeで遊んだりしてます。]

青木 [たくさんの応募ありがとうございました。
ここまでで受け付けを終わります。]


2006-03-06

ふつうの Haskell プログラミング (3)

レビューの話に反応してくださったみなさま、どうもありがとうございます。 人数はツッコミをもらった人 (+ RHG 読書会?) でちょうどいい感じですね。 近日中に概要を書いたメールを送りますので、気が向いたらぜひ参加をお願いします。

(20:32)

Haskell / sleep

まさかと思ったけど、 Haskell でポータブルに sleep する方法ってないのか。 darcs は foreign 使って SleepEx 呼んでるし。

該当部分 (darcs-1.0.5/win32/System/Posix.hs)

foreign import ccall "winbase.h SleepEx" c_SleepEx :: CULong -> CUInt -> IO CInt
 
sleep :: Integer -> IO CInt
sleep n = c_SleepEx (1000 * fromIntegral n) 1

いやすぎる。

Haskell / atomic write

うーん、ポーリングするのはあきらめるか。 どうせ Windows には qmail スタイルの書き込みって通用しないし。 真面目にロックを使おう

……って、ファイルロックもポータブルなのがないじゃん! 結局 Win32API 呼ばないとだめですかそうですか

ああ、そして darcs はどう見てもポーリングしてます。 本当にありがとうございました。

Haskell でシステム関係やるのはつくづく鬼門だ。 darcs の人もよくあきらめずにここまでやったよな。

むっ、O_EXCL で open するのって Windows でも OK なのか。 これが通るならこのへんを使ってなんとかでき

いやだめだ、これは C じゃないか。 さすがに LazyLines で C を使うのはまずい。

あーもういい手抜きだ、Win32 は動けばいいや。 writeFile path content 以上終わり!

(20:50)

ふつうの Haskell プログラミング (4)

ちなみに章目次はこんな感じ。

第一部
 
 1.   18  intro.re ........ Haskell最初の一歩
 2.   24  basic.re ........ Haskell言語の基礎(1)関数とリスト
 3.   31  list.re ......... Haskell言語の基礎(2)型と高階関数
 
第二部
 
 4.   16  lazy.re ......... Haskellプログラムの評価
 5.   22  expr.re ......... 基本的な構文
 6.   23  function.re ..... 関数
 7.   11  type.re ......... 型と値
 8.    7  module.re ....... モジュール
 9.    4  monad.re ........ モナド
 
第三部
 
10.   12  parsec.re ....... 実習:Wikiパーサ
11.   12  wiki.re ......... 実習:LazyLines
12.    2  after.re ........ 本書を読み終えたあとに
 
Total 177 Kbytes

第一部がチュートリアル指向、 第二部が言語リファレンス指向、 第三部が実践となってます。

(22:45)

『入門 Haskell』

向井さんのやつ。

http://book.mycom.co.jp/book/4-8399-1962-3/4-8399-1962-3.shtml

0. Haskellとは
1. Haskellプログラミングひとまわり
2. 型と値と関数
3. リスト
4. 型宣言と型クラス
5. モナド
6. ゲームを作ろう
7. もっともっと Haskell

ううむ。なんかものすごく構成が似ている。 最初に行数・単語数カウントが来るのもそうだし、 ページ数と値段までほとんど同じじゃないか。 違うのは「Haskellプログラムの評価」に相当する章がないことくらい? まあその一番肝心なとこが違うからいいや。 最後の課題も Wiki のが俺好みだし (あたりまえだ)。

(22:49)

本日のツッコミ (全2件) [ツッコミを入れる]

nobsun [Control.Concurrent.threadDelay :: Int -> IO ()
じゃだめ?]

青木 [そんなところにあったのカー! orz

ありがとうございます。勉強不足でした。]


2006-03-07

DSL

Nintendo DS Lite を DSL と略す流儀があるらしい。

(09:59)


2006-03-08

『ふつうのHaskellプログラミング』レビュー

昨日までにツッコミをいただいた方にはメールで要項を送りました。 よろしくお願いいたします。

あ、そうだ、一つ書き忘れてました。 レビュー用 ML には巨大なメールがガンガン流れますので、 メールボックスの容量に余裕があるアドレスを使ってくださるようお願いします。

(10:14)

(追記) 確認したら一通 256KB が最高でした。たいしたことないか。 あとは 50KB くらいのが一日に 10 通くらい来るかもー、という程度です。 PDF とかは流れないので、メガには届きませんね。

Rails on YARV

YARV で Rails を動かす件。 Ruby 1.9 対応が必要になったりするので、 自力でバグを追いながら動かすのはかなり辛いです。 覚えてるのだけメモしときます。

  • RubyGems: Entry#readpartial がないのが原因で複合バグが起きる。#read を見て適当に定義すること。
  • lib/delegate.rb: DelegateClass が send と funcall を転送しないように書き換える。 この変更は Ruby 1.9 にも入ったみたいなので、YARV のほうもコミットしちゃうかな。→ した
  • Rails: ブロックなしの Array#map が何ヶ所かあるので、すべて map → map {|i| i } に変更。 1.9 の仕様変更。
  • ActiveSupport: lib/active_support/core_ext/object_and_class.rb の remove_subclasses_of を空にする。ObjectSpace 関連バグよけ。

これでサイト生成して scaffold 使うあたりまでは行く……と思う。

(10:33)

本日のツッコミ (全3件) [ツッコミを入れる]

takahashim [readpartial以前に1.9のENVの仕様変更で動きません……>RubyGems]

青木 [あれ? なんで家では動いてるんだろう……。]

なかだ [なんでそんな意味不明な書き方を < ブロックなしのmap]


2006-03-09

ふつける

「ふ L」の次は「ふつける」らしい。そう来るとは思わなかった。

締め切りが本気で 23 日に確定。 あと 15 日だけど、そこまでに面接とかグループワークとかあるので毎日は書けない。 1 がものすごい勢いで原稿を書くスレ、的な状況になりそうだ。

(10:59)

ふつける (2) レビュー

突貫工事でサイトと ML が準備できましたっと。

(11:00)

Haskell で行指向パーサ (2)

よくよく考えると、Parsec を使ってしまってはあまり実装例にならない。 しょうがないので自分で実装する。

LineParser.hs

module LineParser
    (LineParser, firstChar, indented, blank, anyLine,
     parse, many, many1) where
 
import Parser
import Data.Char (isSpace)
 
type LineParser st a = Parser String a
 
firstChar :: (Char -> Bool) -> LineParser st String
firstChar f = satisfy (test f)
  where
    test f ""    = False
    test f (c:_) = f c
 
indented = firstChar isSpace
 
blank = satisfy (null . dropWhile isSpace)
 
anyLine = satisfy (const True)

Parser.hs

module Parser (Parser, parse, (<|>), satisfy, eof, many, many1) where
 
import Control.Monad
import Data.Either
import Data.Maybe
 
data Parser tok a = Parser ([tok] -> Maybe (a,[tok]))
 
parse :: Parser tok a -> [tok] -> Either String a
parse p input = case run p input of
                  Just (x, _) -> Right x
                  Nothing     -> Left "parse error"
 
run :: Parser tok a -> [tok] -> Maybe (a,[tok])
run (Parser p) = p
 
instance Monad (Parser tok) where
  return x  = Parser (\state -> Just (x, state))
  p >>= f   = Parser (\state -> run p state >>= (\(x, st2) -> run (f x) st2))
  fail msg  = Parser (\state -> Nothing)
 
infixr 1 <|>
 
(<|>) :: Parser tok a -> Parser tok a -> Parser tok a
p1 <|> p2 = Parser f
  where
    f state = case run p1 state of
                Just t  -> Just t
                Nothing -> run p2 state
 
satisfy :: (tok -> Bool) -> Parser tok tok
satisfy test = Parser nextState
  where
    nextState []                 = Nothing
    nextState (x:xs) | test x    = Just (x, xs)
                     | otherwise = Nothing
 
eof :: Parser tok ()
eof = Parser nextState
  where
    nextState [] = Just ((), [])
    nextState _  = Nothing
 
many :: Parser tok a -> Parser tok [a]
many p =  do x <- p
             xs <- many p
             return (x:xs)
      <|> return []
 
many1 :: Parser tok a -> Parser tok [a]
many1 p = do x <- p
             xs <- many p
             return (x:xs)

(11:43)

『OS自作入門』

http://www.amazon.co.jp/exec/obidos/ASIN/4839919844

池袋を通ったので、そのついでに噂の 30 日で作れる本を買ってきた。 パラパラめくっただけだけど、これはおもしろそう。 野暮なツッコミはいろいろあるんだけど、野暮なので置いとく。

ていうか普通いきなりバイナリエディタでブートイメージを作らせようなんて考えねえよ! その勇気に脱帽した!

(11:44)

れびゅ

レビューに流そうとして手を加え始めると、 突如としてダメなところが見えてくるんだよなあ。

(16:02)


2006-03-10

net/http

なんか最近 Net::HTTP の失敗話が ruby-talk にえらいたくさん流れるなあ。 「post_form は 1.8.3 以降で定義されています――終了――」が多いみたいだけど。 さすがに ruby-talk は読む余裕ない。

(22:19)


2006-03-11

一回休み

スーツで外出。

ちからつきました。

(01:22)


2006-03-13

ふつう H

ああ……。本当に 23 日までに書き終わるのかなあ。 15 日, 17 日には予定があるから事実上あと 8 日だろ。 1 日 1 章出すのは必須として、レビューを反映させる時間も必要だし。 睡眠時間を削るにしたって限界があるしな。 壮絶なまでに眠気に弱いわたしとしては 睡眠時間を減らして 10 日保つ自信はまるっきりない! (いばるな)

あ、19 日 RHG か?! ……その場でも書くしかない……。

確定申告

今回の確定申告は結構戻ってきそうだ。 あんまり領収書とか出してないのだが。 これが青色の基礎控除の威力かー。すばらすい。

Windows マシンが不調

Windows マシンが絶不調だ。 こないだからなんか変なんだよな。 ときどきマシンがブートを始めなかったり、 パスワード入れたところで固まったり。 今日もなかなかログインできなかった。

(20:52)

本日のツッコミ (全2件) [ツッコミを入れる]

arton [>その場でも書くしかない……
ライティングハック]

未来の読者? [口述筆記しか…]


2006-03-14

最終兵器:紙

池袋でマックにこもって (紙の) ノートに原稿書き散らしてきた。 紆余曲折を経て、書き始めたころの形に戻すのが一番いいという結論に到達。 これでようやく四章が書けそうだ。ここさえ過ぎれば、なんとかなる……?

四章まで書いたら、一度レビューに追い付こうかと思ってます。

(22:20)


2006-03-15

確定申告

確定申告おわった。

ふつける 4 章

ざっくり節ごと削ったら 12KB 減少っ……。

まあいいか、どうせ第三部 (モナドと Wiki) がクソ長くなるに決まってる。

(12:53)

ふつける

これでようやく四章を書けそうだ、とか言ったのはどこのバカだ!

うう。いまさら章を増やしてしまった。第三章を二つに分割。 リストのパターンマッチがないと遅延評価の嬉しさが話せないことにいまさら到達したため。

ああああ、やっぱり四章だけはレビューの前に書いておくべきだったよ。 大失敗だ。

(00:23)


2006-03-16

もろもろ

ねすごした……。

レビュー。 ML 登録のときの「ツッコミ → メール → 返信」という手続きが明白でなかったらしく、 日記にツッコミを入れておけば登録されるものだと誤認する人が続出しました。 申し訳ない。やっぱレビューやるときは落ち着いてやらなきゃだめですね。

(17:12)

花粉症

なんか頭いたいし鼻つまるし目がチクチクするよグニャー、 なんか体調悪いなあ……と思ってたが、 もしかしてこれが花粉症なのだろうか。

Emacs症

小指が……痛いです……

(20:39)

ruby-talk news gateway

数日前に ruby-talk に送ったはずのメールが流れてない。 いつもは Fcc: で自分に送ってるのに、それも来てない。 かと言って手元に残ってるわけでもない。 なんか変だと思ったら、どうもネットニュースに流れたような感じだ。 Mew が気をきかせすぎたんだな。

しかし、それならそれで ruby-talk にも流れてきそうなもんだけどな。 ゲートウェイって動いてないんだっけ。

(23:04)

夕飯

夕飯はとんかつ。とんかつにはキャベツがついているが、 あれは一緒に食べると胸焼けしないかららしい。 実際にキャベツなしで食べてみるとものすごく胸焼けするので、たぶんガセネタではない。

……キャベツがない。こないだ回鍋肉で使ってしまったからだ。 しかたないのでレタスで代用する。 しかしレタスには胸焼け防止成分は入ってないと思われる。

ごはん炊くのめんどくさいな。 手っ取り早く「玄関開けたら 2 分でごはん」にしようかしら。

……昨日食ったのが最後の一個だった。

しかたない、米を炊こう。

……タッパー見たらほとんど米がなかった。

さすがにあせる。 だが幸いまだ袋に入れてるやつがあったので事無きを得た。 さてとんかつを切ろうかな。

……ソースがない。

ソースコードで代用できないものだろうか。

(23:11)

本日のツッコミ (全3件) [ツッコミを入れる]

通りすがる [レタスを食べると眠くなるそうですよ。]

青木 [いますごく眠くなっているのはそのせいなのだろうか]

KM [……ソースが書けない。/オタフクソースで代用できないものだろうか。]


2006-03-19

RHG 読書会

今日は RHG 読書会で『ふつうの Haskell プログラミング』 をレビューしていただきました。6 時間。 ツッコミの内容もどことなく RHG 読書会らしい。

(00:59)