!kiyoka.blog.2010_09 RSSPLAIN

Related pages: !kiyoka.blog.list
25525554444444444404445555555505555555555555555555555551111115055555555555555550555555555555555505555555355555555555555555555555555555555555555555555555555555555555555555555555555055555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555505
2

kiyoka日記。NendoSekkaの開発や、最近思うことなど

5

最新10件!kiyoka.blog   過去記事一覧!kiyoka.blog.list

5

kiyoka.blog_header 

2

このブログを書いている人: 西山 清香(kiyoka) - twitter: @kiyokaEXT

5

5

 

5

 

4

kiyoka.2010_09_28[本] テスト駆動開発入門

4

大阪府立図書館から借りた。

4
 4894717115  テスト駆動開発入門: ケント ベック, Kent Beck, 長瀬 嘉秀, テクノロジックアート: 本
4

Amazonの書評では、翻訳が酷いので原文で読んだほうが良いと買いてあったのだけど、翻訳自体は文章のリズムがかなり悪い所を除けばそれほど悪いところは無く、普通に読めると感じた。

4

この本は、テスト駆動開発(テストファーストとリファクタリングの繰りかえし)を一歩づつ具体的な手順を踏んで進めていくという流れで書いてあるので、サンプルコード部分に間違いが無ければそれほど問題ないだろう。

4

ときかくKent Beckのテストのグリーンの状態を維持しながらコード変更していく気概がわかって良い。

4

良くも悪くも、なるべく手順を省略せず、現場でテスト駆動開発を実践したらどうなるかというのを、愚直に解説してあるのが良い。

4

手元に置いておいて、迷ったら何度も参照しながら使う本だと思う。

4

テストファーストが重要なのは頭ではわかっていても、実際にやってみると正しい手順通りやるのは難しく、臨機応変にテストを後回しにしたりして容易にテストファーストのレールから外れて作業してしまいがちだ。

4

この本は正しい手順を確認しながらテストファーストを体得するのに有用な本だと思う。

4

 

0

comment (disabled)

4

4

 

4

 

5

kiyoka.2010_09_21[Sekka][Nendo] NendoがSekkaの足を引っぱっている

5

Sekkaは一応、反応速度が良くなるように気を遣って開発している。

5

なので、高速が売りのKVSをバックエンドに使っているのだが、いかんせんNendoが速度面で足を引っぱっている。

5

どうしても高速に処理したい部分はRubyで書いて問題回避しているのだが(笑)、いつまでもそれでは悲しい。

5

Nendo処理系まだまだチューニングが足りないので、チューニングも必要になってきたぞ。

5
 ktdgO6
5

この修行のループを耐えれば実用言語に育つと信じてがんばっていこう。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_09_18[KVS][Sekka] NoSQL(KVS)の選定の続き

5

先日の記事 「kiyoka.2010_09_06[KVS][Sekka] 個人的なNoSQL(KVS)のライセンス調査」で、Sekka用のKVSをどれにすればいいのかという件について書いた。

5

選定の観点は、二つだった。

5
SekkaをBSDLにしたい(BSDLにしたい理由は、Sekkaで書いたコードをNendoに輸入したいため)
5
将来どこかのPaaSでホスティングしたい(Heroku/EngineYardなど)
5

結局、KyotoCabinetとMemcached互換プロトコルの両方をサポートする方針でプログラム変更中。

5

ただ、KyotoCabinetのクライアントライブラリを使ってしまうと、SekkaがGPLに感染する懸念を払拭できないため、最終的にはKyotoCabinetの代わりを探してKyotoCabinetから離脱する必要がある。

5

KyotoCabinetのRubyクライアントライブラリは1.9.2対応しているし,非常に使いやすいAPIを持っているのに残念。ライセンス問題なんで致しかたない…

5

代わりとしてKyotoCabinetをやめてTokyoCabinetに戻るという方法もありかなと思っている。まあTokyoCabinetの方が枯れているし、EngineYardでサポートされているし、Linuxディストリビューションの多くでパッケージが用意されている等、考えてみるとメリットも多い。

5
 5000087041_24239f201a_z
5

 

5

 

5

 

5

それから、前回はKVS以外にamatchという曖昧検索ライブラリがGPLv2なのを書き忘れていたが、これも代替製品を探している。なかなか代替が見つからないのだが…

5

amatchはSekkaと一緒に配布するわけではなくgem installするので、GPLv2を気にする必要はないのかも知れないが、それでもamatchはメモリリークを起こすのが問題だ。漢字変換を繰り返す度にどんどんメモリ使用量が増えていく。amatchをリンクしないでも動くように代替手段を用意しておくほうがいいだろう。

5

将来amatch相当のものをPure Rubyで書くか、リークしないC言語版ライブラリを作るかしないといけないが、それぞれパフォーマンス面と手間の面で一長一短ある。

5

 

5

振りかえってみると、Sekkaはちょっとした寄り道プロジェクトと軽く見ていたが、やってみると意外と色々問題が立ちはだかり、修行になる。

5

Sekkaは毎日使ってみて自分では気にいっているので、何とか手軽にインストールできるようにして一人でも多くの人に試してもらいたいなあと思っている。

5

SekkaSumibi.orgと違って、反応速度にも気を遣っているので、その部分ももうちょっと拘り続けたい。KVSの特性を理解するのにも良い題材だし。

5

 

1

追記:

1

上記の「KyotoCabinetのクライアントライブラリを使ってしまうと、SekkaがGPLに感染する懸念を払拭できない」は私の勘違いです。

1

KyotoCabinetのクライアントライブラリがGPL2でもGPL3でもSekkaはBSDLのままでOKであり、ライセンス変更する必要はありません。

1

GPLとBSDLはライセンスに整合性があるので、リンクした時の相性が良いです。

1

FUDを流してしまってすみません。OSSである限り、GPL感染を心配する必要はありません。

1

 

5

COMMENTkiyoka

自分でコメントします。

その後、KyotoCabinetからTokyoCabinetに変更する作業をしてみたら、30分ほどでテストまで終わった。やっぱりTest Driven Developmentのメリットが効いている。

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_09_17[本] 小さなチーム、大きな仕事

5

図書館で借りた。最近は近隣の図書館(大阪府立図書館など)からも探して貸してくれるので便利になった。

5
 4153200115  小さなチーム、大きな仕事―37シグナルズ成功の法則 : ジェイソン フリード, デイヴィッド・ハイネマイヤー ハンソン
5

この本を読んで、ビジネス用途のアプリサイトを作ってみたいと本気で思った。勿論それで儲けることができ、うまくいけば生活できるようなものを想定している。

5

一番の収穫は、自分がビジネスについて勘違いをしていたことに気づかさせてくれた事。

5

「どんな良いビジネスアプリケーションサイトを作っても、大手がそのうちクローンを作ってきて自分の弱小サイトなんか潰される」とぼんやり思っていたけど、その不安は杞憂だと分かったこと。

5

そう。数人で回しているサイトのクローンを大手が作ろうコスト構造が違うので無理なんだよな。

5

自分も中堅のソフトウェア開発企業にいて、肌感覚で知っているけれども、中堅以上の企業というのは管理費やら何やらで弱小企業がやっているアプリのクローンを作っても決して利益が出せない宿命なのだ。

5

そうそう、今の時代、クラウドがあるので個人もしくは数人で回すというのはアリというより、むしろ有利な時代になってきたのかもしれん。

5

 

5

アイデアはあるので、いっちょやってみるかな。

5

まずは、自分が欲しいアプリケーションをメモ用紙にスケッチして本当に欲しいのか確認するところから始めよう。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_09_10[Ruby][Rails] Web+DBのRails3特集が良い

5

WEB+DB PRESS vol.58 はオススメ。

5
 4774143243  Amazon.co.jp: WEB+DB PRESS Vol.58: 編, WEB+DB PRESS編集部: 本
5

自分はRailsで開発したことは無いのだけど、この特集は現在のRailsがどのようなものかを全方位で把握できる素晴しい特集だ。

5

PHPとか、RubyとかJavaとか別の言語でWebアプリを作っている人も読んどいて損は無いと思う。今迄Railsを横目に見ていたひとは特に。

5

今後はスーツな人の間でもWebアプリというとRailsが候補に挙がる状況が想像できるので、チラ見しておこう。

5

Rails2と違ってRails3は相当モジュラリティが上がっているようで、どんな部品を組みあわせてもRailsに収容されてしまう。

5

自分に関係するところでは、仕事でRails3を使うということもそうだけど、Rails3にNendoを組み込むこともできそうだ。

5

 

5

今回の特集はRubyでNendoという処理系を作っている関係上、Railsに親近感を持てるようになった。

5

Rails3でちょっとアプリを作ってみて、感覚を掴んだらNendoとtext.htmlでView部分をコーディングしてみようかな。

5

KahuaライクなEmacsからreplする開発スタイルが簡単に構築できたらいいな。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_09_09[Nendo] Nendo 0.3.4 リリース

5

Nendo 0.3.4をリリースしました。(リリースノート: Nendo.ReleaseNote)

5

rubygems_icon_128

5

チュートリアルと、リファレンスマニュアルを少し加筆しました。

3

まだまだ TODO項目が多いですが、最低限の情報は記載したつもりです。(それから、そのうち英語版も作らないといけないですね…)

5

かなりの部分で、GaucheのAPIを参考にしているので迷ったらGaucheのユーザリファレンスEXTを参照していただくと解決すると思います(笑)

5

 

5

Nendo.Tutorial 

5

Nendo.ReferenceManual 

5

 

5

今回のポイントはgemライブラリを利用する上で全般的に足りなかった機能が追加されたことでしょう。

5

0.3.3以後はKyoto CabinetEXTを使ったSekkaという日本語入力メソッドを作りながら足りない部分を補いました。

5

 

5

中でも、 (&block ...)構文は重要な機能追加です。

5

(&block ...) 構文を使えば、Rubyのブロックその物が生成可能です。

5

&block構文を用意した理由は、多くのRuby gemライブラリがブロックを引数に取るメソッドを持っているためです。

5

 

5

例えば、入力テキストsample.rb の全行をコメントアウトするプログラムは以下のように書くことができます。

5
 [Ruby]
5
open ("sample.rb" ) {|f|
5
  f.readlines.each {|line|
5
    puts "# " + line.chop
5
  }
5
}
5

 

5
 [Nendo]
5
(.open "sampel.rb"
5
  (&block (f)
5
    (f.readlines.each
5
      (&block (line)
5
         (print ("# " + (line.chop)))))))
5

 

5

次は、Kyoto CabinetEXTのAPIを使う例です。

5
 [Ruby]
5
#!/usr/local/bin/ruby
5
# -*- coding: utf-8 -*-
5
5
require 'kyotocabinet'
5
include KyotoCabinet
5
5
db = DB::new
5
5
# データベースを開く
5
unless db.open('numbers.kch', DB::OWRITER | DB::OCREATE)
5
  printf("open error: %s\n", db.error)
5
end
5
5
# 書きこみ
5
(0..99999).each { |num|
5
  db[ num ] = num
5
}
5
5
p db[1000]
5
p db[10000]
5

 

5
 [Nendo]
5
#!/bin/sh
5
:; #-*- mode: nendo; syntax: scheme -*-;;
5
:; exec /usr/local/bin/nendo $0 $*
5
5
(require "kyotocabinet")
5
5
(define db (KyotoCabinet::DB.new))
5
5
(define (main argv)
5
  (define (_create)
5
    (if (not (db.open "numbers.kch" (+ KyotoCabinet::DB::OWRITER KyotoCabinet::DB::OCREATE)))
5
        (printf "open error: %s\n" db.error)
5
        ;; 書きこみ
5
        (Range.new 0 99999
5
                   (&block (num)
5
                     (db.store num num)))))
5
  (_create)
5
  (print (hash-table-get db 1000))
5
  (print (hash-table-get db 10000)))
5

 

5

何とか、使える処理系に近づいてきた気がしませんか?(速度は別にして…)

5

今後もアプリケーションを作りながら、少しづつ実用的な処理系にしていく予定です。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_09_06[KVS][Sekka] 個人的なNoSQL(KVS)のライセンス調査

5

SekkaをBSDLにしたいのと、将来どこかのSaaSでホスティングしたいという観点から、どのNoSQL DBを選べば良いか調査してみた。

5

ドライバはRubyのみを想定している。

5

また、SekkaはRuby 1.9.xでしか動かないので、1.9.x に対応したドライバが欲しい。

5

ちょっと偏ったコメントが混ざっているので、その点だけご注意下さい。

5
 RUpoSi
5

 

5

ポイントは、SekkaサーバにリンクするドライバのライセンスがGPL2 or GPL3以外のものであること。

5

ちなみに現在開発中のSekkaで使っているKyotoCabinetはRubyのクライアントライブラリがGPL3なのですでにNG。

5

KyotoCabinetの商用ライセンスを買えばOKになるが、目的は配布するSekkaをBSDLにすることなので、そのオプションは無しとする。

5

また、今後の運用のことを考えて、なるべくSaaS環境で利用できるDBを優先して選択したい。

5

そんなわけで、最近流行りにNoSQLサーバを順番に当たってみた。

5

 

5

memcached

5

永続化機能が無いので、Sekkaの辞書DBには利用できない。

5

しかし多くのDBがこのmemcachedの互換プロトコルをサポートしているので、クライアントだけ調査しておく。

5

ライセンス的にも修正BSDLなので問題ない。

5

もしかしたら、Sekkaがこの互換プロトコルの範囲で十分やっていけるのであれば、DBを選ばないこのライブラリがベストという可能性もある。

5
クライアントライブラリ: gem install memcache-client でインストール可能。
5
ライセンス: 修正BSDL (3条項)
5
Ruby1.9.x対応: 〇
5

 

5

memcachedb

5

上記のmemcachdに永続化機能を追加したもの。

5
memcachedの互換プロトコル: 〇
5

 

5

Kyoto Cabinet

5

現在も活発に開発が進んでいるDBである。

5

高速だし、Rubyから使いやすいので、ライセンスの問題が無ければこのDBを使い続けたかった。

5
クライアントライブラリ: kyotocabinet-ruby-1.17.tar.gzEXT
5
ライセンス: × GPLv3
5
Ruby1.9.x対応: 〇
5
memcachedの互換プロトコル: × 
5
提供SaaSベンダ: なし
5

 

5

Tokyo Cabinet

5

開発はKyoto Cabinetに移行しているはずなので、今更使いたくない。

5

ライセンスはLGPLのためGPL感染せず問題ない。

5

memcachedのクライアントからアクセスするという方法もある。

5
クライアントライブラリ: tokyocabinet-ruby-1.30.tar.gzEXT
5
ライセンス: 〇 LGPLv2.1
5
Ruby1.9.x対応: ?
5
memcachedの互換プロトコル: 〇
5
提供SaaSベンダ: EngineYard
5

 

5

mongoDB

5

Heroku上でmongoHQというadd-onsで利用可能なので、SaaS環境もOK。

5

少し、RDBMSに近い使いかたもできるので、将来的にも学習のしがいがある。

5

パフォーマンスがKyoto Cabinetoに比べて遜色無いかどうかは不明。

5
クライアントライブラリ: gem install mongo でインストール可能。
5
ライセンス: 〇 Apache License 2.0
5
Ruby1.9.x対応: ?
5
memcachedの互換プロトコル: × 
5
提供SaaSベンダ: mongoHQ(herokuのオプションとして使用可能)
5

 

5

couchDB

5

クライアントは、複数ある(RubyLibrary - Couchdb WikiEXT)ようだ。

5

あまり、高速ではないという噂があるので、Google Suggestのようなリアルタイム検索が主体のSekkaには向いていないと思う。

5
クライアントライブラリ: 例えば、CouchObjectEXT であれあば
5
ライセンス: 〇 MIT
5
Ruby1.9.x対応: ?
5
memcachedの互換プロトコル: × 
5
提供SaaSベンダ: Cloudant: CouchDB hostingEXT(herokuのオプションとして使用可能)
5

 

5

KumofsEXT

5

特に、専用クライアントは無いようだ。memcahced互換プロトコルなので、memcachedクライアントを使う。

5
memcachedの互換プロトコル: 〇
5

 

5

ROMA

5

まだまだ、楽天以外で使っているという声を聞いたことがないROMA。

5

まだ使うべきではない気がする。クライアントライセンスが何故 GPLv3 なのか。

5

楽天以外で使ってもらう気があるのであれば、ライセンスを変更したほうがいいと思うけど、そこまで言うのはおせっかいか。

5

但し、memcached互換プロトコルでアクセスできるらしいので、上記Kumofsと同じになる。

5
クライアントライブラリ: gem install roma-client でインストール可能。
5
ライセンス: × GPLv3
5
Ruby1.9.x対応: ?
5
memcachedの互換プロトコル: 〇
5

 

5

Cassandora

5

クライアントライブラリが、ThriftからAvroに移行していくらしいのだが、用途としてはちょっと大袈裟で合わない感じがする。

5

使う気は無いのでスルー。

5

 

5

redis - Project Hosting on Google CodeEXT

5
 参考:永続化対応のインメモリDB「Redis」が登場EXT
5

Kyoto CabinetよりももっとInMemory DBの要素を強くした感じのDB。

5

複数のサーバ間で、数分おきにDISKに書きこむなどの仕組みを持つ。

5

memcahced互換プロトコルではないので、どうかとも思ったが、EngineYardとherokuの両方がサポートしている。

5
クライアントライブラリ: gem install redis でインストール可能。
5
ライセンス: 〇 the very liberal BSD license
5
Ruby1.9.x対応: 〇
5
提供SaaSベンダ: EngineYard、heroku
5
memcachedの互換プロトコル: ×
5

 

5

Amazon SimpleDB - WikipediaEXT

5

Sekkaには向いていないかも。Amazonにロックインされるという問題もあり。

5

以下略。

5

 

5

Hypertable - WikipediaEXT

5

Bigtableの互換オープンソース製品。SekkaをJRuby+GAEで動かす予定ならこれもあり。

5

まだまだRubyでGAEを利用しようとすると、パフォーマンス面で苦労するそうなので、スルー。

5

以下略。

5

 

5

後、数日考えてみて、どうするか決めよう。

5

mongoDBかredis対応が優勢かな。それともmemcachedとredisの両方のクライアントで動くようにしておこうかな。

5

 

0

comment (disabled)

5