Hatena::ブログ(Diary)

趣味的にっき このページをアンテナに追加 RSSフィード

2007-08-11

[] 第18回Ruby/Rails勉強会に参加しています 14:06  第18回Ruby/Rails勉強会に参加していますを含むブックマーク  第18回Ruby/Rails勉強会に参加していますのブックマークコメント

思いの外遠かったです。学園都市線 & 駅降りてからがこんなにかかるとは。駅からウダーの方と一緒に行きました。No Ruby No Lifeのバッグのおかげです。

Rubyプログラミング作法 by 中田さん

MyGameとゲームプログラミング by だんさん

nginxの話 by Stoyan Zhekovさん

  • Deploymentの話。
  • 最近は、Mogrel。犬の種類? HTTP server and library by Zed Shaw。Merb、Ramaze。
  • NginX(エヌジンエックス)。HTTP server and IMAP/POP3/SMTP proxy。20% of russian sites。
  • One man project。Do you read/speak russian? No CGI support。
  • Wny NginX。No memory leaks in th proxy
  • Good performance。async。kqueueとか。
  • kill -HUP。kill-USR2。
  • 。。。さっぱりついていけませんでした(やっぱり)。
  • 質問コーナー。
  • nginxはとにかく落ちない。

Internationalization in Ruby on Rails by 氏久さん

案内とか

[] HaskellっぽいListライブラリ halu-0.0.1をリリースしました 10:34  HaskellっぽいListライブラリ halu-0.0.1をリリースしましたを含むブックマーク  HaskellっぽいListライブラリ halu-0.0.1をリリースしましたのブックマークコメント

no title

インストールはいつものgemでお願いします。(13:50現在、まだGemサーバには反映されていないみたい。)

$ gem install halu

とりあえずサンプルはこんな感じ。

フィボナッチ数列

require 'halu'

include Halu

# フィボナッチ数列のリスト(降順)を返す。
def fib(n)
  case n
  when 0
    List[0]
  when 1
    fib(0) >> 1
  when 2
    fib(1) >> 1
  else
    xs = fib(n - 1)
    xs >> (xs.head + xs.tail.head)
  end
end

p fib(0)       # => Halu::List[0]
p fib(3)       # => Halu::List[2, 1, 1, 0]
p fib(5)       # => Halu::List[5, 3, 2, 1, 1, 0]
p fib(20).head # => 6765

挿入ソートHaskell版

require 'halu'

include Halu

def insert_sort(xs)
  xs.fold(EMPTY_LIST) do |rs, x|
    rs1, rs2 = rs.span {|h| h < x} # rsをxを挿入する箇所で2つに分ける。
    rs1.append(rs2 >> x)           # rs2の頭にxをつけて全体をrs1の後につける。
  end
end

p insert_sort(List[8, 4, 3, 7, 6, 5, 2, 1])
# => Halu::List[1, 2, 3, 4, 5, 6, 7, 8]

選択ソートHaskell版

require 'halu'

include Halu

def select_sort(xs)
  if xs.null?
    EMPTY_LIST
  else
    min = xs.minimum                # 最小の要素。
    xs2 = xs.filter {|x| x != min } # それ以外の要素。
    select_sort(xs2) >> min         # 再帰的にソート。
                                    # 先頭に最小の要素をくっつける。
  end
end

p select_sort(List[8, 4, 3, 7, 6, 5, 2, 1])
# => Halu::List[1, 2, 3, 4, 5, 6, 7, 8]

主な使用用途。Lisp(Scheme)インタプリタ自作。その内やるかも。

もうこのライブラリを拡充するのにあきたので、メンテナ募集中です。

[] 外部コマンドの実行結果を受け取るには 14:30  外部コマンドの実行結果を受け取るにはを含むブックマーク  外部コマンドの実行結果を受け取るにはのブックマークコメント

そういえばどうやるんだろうと思って、調べてみました。

サンプルプログラムls -aを実行して、その結果を加工して表示します。

module Main (main) where

import System.IO (hGetContents)
import System.Process (runInteractiveProcess, waitForProcess)

main :: IO ()
main = do
  (_, out, _, procHandle) <- runInteractiveProcess "ls" ["-a"] Nothing Nothing
  putStr . unlines . map (\ l -> "<" ++ l ++ ">") . lines =<< hGetContents out
  waitForProcess procHandle
  return ()

実行例:

$ ls -a1
.
..
a.hs
$ runghc -W a.hs
<.>
<..>
<a.hs>

(追記) リファクタリングしました。演算子に分離してみました。これは変態的です。

module Main (main) where

import System.IO (hGetContents)
import System.Process (runInteractiveProcess, waitForProcess)

(%%%) :: FilePath -> [String] -> IO String
(%%%) cmd args = do
  (_, out, _, procHandle) <- runInteractiveProcess cmd args Nothing Nothing
  s <- hGetContents out
  waitForProcess procHandle
  return s

main :: IO ()
main = putStr . unlines . map (\ l -> "<" ++ l ++ ">") . lines
         =<< "ls" %%% ["-a"]

参照: 第5回 ListではなくMaybeを使う意義(2ページ目) | 日経 xTECH(クロステック)

[] フィボナッチミュージックを作りたい 14:58  フィボナッチミュージックを作りたいを含むブックマーク  フィボナッチミュージックを作りたいのブックマークコメント

んだけど、HaskellMIDIを直接鳴らすにはどうしたらいいんでしょう(環境はwin32)。まだ詳しく調べてないけど、Haskoreでも無理そうだし(MIDI出力までみたい?)。Beepでやるか。TinyMMLみたいな感じで。

参照:

トラックバック - http://d.hatena.ne.jp/ha-tan/20070811