F# で FizzBuzz Mar 22

F# で FizzBuzz を書いてみた。F# らしくないコードなんだろうと思いつつ・・・。
これから文法を覚えつつ、改良してみようかな。

let FizzBuzz x y =
  for i = x to y do
    if i % 3 = 0 && i % 5 = 0 then
      printfn "Fizz Buzz"
    elif i % 3 = 0 then
      printfn "Fizz"
    elif i % 5 = 0 then
      printfn "Buzz"
    else
      printfn "%d" i

if を match に変えてみた。

let FizzBuzz x y =
  for i = x to y do
    match i with
    | x when x % 3 = 0 && x % 5 = 0 -> printfn "Fizz Buzz"
    | x when x % 3 = 0 -> printfn "Fizz"
    | x when x % 5 = 0 -> printfn "Buzz"
    | x -> printfn "%d" x

開始値と終値は、必要な仕様ではなかったな。

for を再帰にしてみた。

let FizzBuzz x y =
  let rec func a b =
    match a with
    | a when a > b ->
      0
    | a when a % 3 = 0 && a % 5 = 0 ->
      printfn "Fizz Buzz"
      func (a + 1) b
    | a when a % 3 = 0 ->
      printfn "Fizz"
      func (a + 1) b
    | a when a % 5 = 0 ->
      printfn "Buzz"
      func (a + 1) b
    | a ->
      printfn "%d" a
      func (a + 1) b
  func x y

入力、判定、出力を分けてみた。

#light

let FizzBuzz x =
  match x with
  | x when x % 3 = 0 && x % 5 = 0 ->
    "Fizz Buzz"
  | x when x % 3 = 0 ->
    "Fizz"
  | x when x % 5 = 0 ->
    "Buzz"
  | x ->
    sprintf "%d" x

[<EntryPoint>]
let main (args: string[]) =
  [1..15] |> List.map (fun x -> FizzBuzz x) |> printfn "%A"
  0

Welcome Back FSharp Mar 16

Mac に Mono をインストールしてみた。
現在のパッケージなら fsharp も含まれているようなので、これを期に再開してみるかな。

sample.fs #light

[<EntryPoint>]
let main (args: string[])  =
  printfn "Welcome back!"
  0;

コンパイル

$ fsharpc sample.fs

実行

$ mono ./sample.exe
Welcome back!

最近のお気に入り音楽 Jan 12

【生きる場所なんてどこにもなかった】でんぱ組.inc「W.W.D」Full ver. - YouTube

でんぱ組.inc「W.W.D Ⅱ」MV【マイナスからのスタート、やっぱキツい!?】 - YouTube

でんぱ組.inc「でんでんぱっしょん」MV【楽しいことがなきゃバカみたいじゃん!?】 - YouTube

mod_mruby のビルド手順 Jan 4

mod_mruby のビルド手順

Apache をソースコードからインストールしたから、コマンドのパスが違っていたため、調整が必要だった。
忘れないようにメモ。

環境

手順

[ -d mod_mruby ] || git clone git://github.com/matsumoto-r/mod_mruby.git
cd mod_mruby
git submodule init
git submodule update
# vi build_config.rb
cp build_config.rb mruby/build_config.rb
(cd mruby && rake)
APACHECTL_PATH=`which apachectl` APXS_PATH=`which apxs` RAKE_PATH=`which     rake` ./configure
make
make install

新年のご挨拶 Jan 1

新年明けましておめでとうございます。

ブローニー対応のフィルムスキャナ Dec 29

店舗でフィルムのデータ化を頼むと少し割高な感じがして、
できれば自分で手軽に、いい画質で、お手頃な値段でできないか調べてみた。
購入するかどうかはまだ先になりそうだ。

都内の中古カメラ店舗 Dec 26

先週に見て回ろうと思っていたけれど、今週末に行こうかな。
もう年末ということで、見て回れるのは今年最後になりそう。

mruby-clearsilver を作ってみた Dec 9

この投稿はmruby Advent Calendar 2013の9日目の記事です。

mruby-clearsilver について

Apache モジュールでアプリケーションを実装するためにいくつか調査していたときに、HTML のテンプレートエンジンはないかなーと思い、探していたところ ClearSilver にたどり着きました。 既に更新が止まっていますが、それなりに安定して使えるとは思います。

https://github.com/qtakamitsu/mruby-clearsilver.git https://github.com/qtakamitsu/mruby-clearsilver

機能はシンプルで、HDF というデータに埋め込むデータをセットして、CS でレンダリングするというもの。

hdf = ClearSilver::HDF.new
hdf.set_value "aaa", "000"
hdf.set_value "name", "Administrator"
hdf.dump

cs = ClearSilver::CS.new(hdf)
cs.parse_file('Welcom to ClearSilver, <?cs var:name ?>!')
r = cs.render()
puts r

作った経緯なんか

mruby を Apache 上で動かせたり、DB につなぐためのライブラリがあったり、キャッシュするための redis ライブラリがあったりと、これだけライブラリがそろっているなら mruby でアプリケーションが作れないかなと思い立ったのが経緯です。それに、別のことで HTML のテンプレートエンジンについて調査していたので。

作ってみた感想など

作ってみたものの、ClearSilver の更新がないことや古いことは、実用から考えると弱いと思います。 ただ、mruby ライブラリ作成の経験としてはシンプルで良かったのかなとは思いました。

個別記事のタイトルを少しよくする Nov 24

個別の記事のタイトルに、ブログのタイトルしか表示されなかったので、「記事ののタイトル + ブログのタイトル」になるように、少しだけ直してみた。
何かしらテーマを適用してみたいという考えはあるものの、飾りっ気なくこのままでいいかなと思っている。

layout.erb

<% if is_blog_article? then %>
<title><%= current_page.title %> - qtakamitsu blog</title>
<% else %>
<title>qtakamitsu blog</title>
<% end %>

mruby を始める Nov 17

しばらく mruby を使っていなかったので、忘れた部分を記録に残していきます。
まずは、mruby の開発をするために環境を作る。

実行環境は、

CentOS release 6.4 (Final) x86_64

以下のコマンドを実行する

$ git clone https://github.com/mruby/mruby
$ cd mruby
$ ruby ./minirake

以下の実行ファイルとライブラリが作成される。

build/host/
           bin/
             mirb
             mrbc
             mruby
           lib/
             libmruby.a
             libmruby_core.a

さて、次はプログラムに mruby を組み込んでみるかな。