2003-11-12 (Wed)
_ attribute parameter中のtypeof(void)
会社でcvs updateしても直ってなかったので、パッチを Bugzillaに登録。 実はBugzilla使うのははじめてだったけど、思ったよりスムーズに登録できた。
_ ユニットテスト
lib直下のライブラリのユニットテストはtestの下にそれぞれディレクトリを作るらしい。 というわけで、test/monitor/test_monitor.rbをcommit。
わたなべさんのチェックによって、タイミングによってテストが通らないケースが あることが判明したので、テストケースを修正。わたなべさんに感謝。
ちなみに自分のマシンでは再現しなかったのだが、 マシンが速い(Pentium M 1.5GHz)せいだろうか。
2004-11-12 (Fri)
_ Ruby 講習会初級コース後半 2 日目
かずひこさんには褒めていただいたが、やっぱり初心者の方に話すのは難しいですね。ついつい、いらないことを言ってしまう。
ちなみに「勉強になります」はNaCl用語で、褒める言葉に詰まった時に使います。
2011-11-12 (Sat)
_ 関数プログミングの楽しみ
湿潤治療の本を買うために今井書店に行ったら関数プログラミングの楽しみが置いてあったので、つい購入してしまった。 Richard S. Birdの還暦を記念して、色々な著者が関数プログミングの楽しみについて綴っている。 Introduction to Functional Programming using Haskell (IFPH)の続編という位置付けらしいが、IFPHを持ってなくても一応読める。
以下は、サポートサイトを参考に第1章の最大回避ヒープの練習問題を解いたもの(ほとんど写経)。
import qualified Data.Tree as T data (Ord a) => Tree a = Null | Fork Int a (Tree a) (Tree a) drawTree :: (Ord a, Show a) => Tree a -> String drawTree = T.drawTree . conv where conv Null = T.Node "Null" [] conv (Fork n x a b) = T.Node (show x) (map conv [a, b]) instance (Ord a, Show a) => Show (Tree a) where show = drawTree isEmpty :: Ord a => Tree a -> Bool isEmpty Null = True isEmpty (Fork n x a b) = False minElem :: Ord a => Tree a -> a minElem (Fork n x a b) = x deleteMin :: Ord a => Tree a -> Tree a deleteMin (Fork n x a b) = merge a b insert :: Ord a => a -> Tree a -> Tree a insert x a = merge (Fork 1 x Null Null) a merge :: Ord a => Tree a -> Tree a -> Tree a merge a Null = a merge Null b = b merge a b | minElem a <= minElem b = join a b | otherwise = join b a join :: Ord a => Tree a -> Tree a -> Tree a join (Fork n x a b) c = Fork (n + size c) x aa (merge bb cc) where (aa, bb, cc) = orderBySize a b c orderBySize :: Ord a => Tree a -> Tree a -> Tree a -> (Tree a, Tree a, Tree a) orderBySize a b c | size a == biggest = (a, b, c) | size b == biggest = (b, a, c) | size c == biggest = (c, a, b) where biggest = size a `max` size b `max` size c size :: Ord a => Tree a -> Int size Null = 0 size (Fork n x a b) = n exercise121 = foldr insert Null [1..7] exercise122 = foldl (flip insert) Null [1, 7, 2, 6, 3, 5, 4] exercise123 = deleteMin $ foldl (flip insert) Null [1..7] main = do putStrLn("1.2.1:") print exercise121 putStrLn("1.2.2:") print exercise122 putStrLn("1.2.3:") print exercise123
本当は頭の中で解くことを意図してる気もするけど…。
Rubyだと何でも配列やハッシュで済ませてしまうので、便利ではあるんだけど、あまりこういう楽しみは味わえない。
同じ著者のPurely Functional Data Structuresが欲しいと思いつつ、洋書高いしなあと躊躇していたのだが、意外と『関数プログラミングの楽しみ』の方が高かった。 でもその価値はあると思う。
2022-11-12 (Sat)
_ フクオカRuby大賞応募
mruby/c会議に来られていた福岡県庁の方から応募を勧めていただいたのでフクオカRuby大賞にTextbringerを応募してみた。
※MicrosoftOfficeがご利用いただけない場合は、応募用紙PDFをご覧いただき、記載されている各項目にご記入の上、ご提出ください。
ということだったが、Textbringerの応募資料をWordで書くのはプライドが許さなかったので、Markdownで書くことにした(「MicrosoftOffice」(スペースなし)という製品は知らないので「MicrosoftOfficeがご利用いただけない場合」に該当すると判断した)。
用紙サイズはA4です。
というレギュレーションをクリアするため、md-to-pdfでPDFに変換して、Textbringer上のMournmailから送信した。
問題は、
最近(概ね過去1年程度)のものを対象とします。
という部分だが、Mounrnmail 1.0.0を出したのが昨年6月なので周辺プラグインを含めて成熟したのがそのあたり、新規性を主張したString#byteindexの提案と利用も過去1年以内である。 担当者の方が「だいたいでいいですよ」とおっしゃっていたので大丈夫だろう。
_ Kouji [へぇ > 勉強になります。 じゃなくて、自分が全く知らなかったことを教えて頂いたときの言葉が「勉強になります」です。..]