Lua5.1.4をインストールする

ソースコードを取得して、ビルドする。
いつものごとく make して、make install。INSTALL_TOPにパスを設定しない場合は /usr/local になります。
さくっと終わると思ったけれど、readline-devel と ncurses-devel がないとコンパイルできませんでした。そのときのエラーメッセージと対応は以下参照。

$ tar zxf lua-5.1.4.tar.gz
$ cd lua-5.1.4
$ make linux
$ make install INSTALL_TOP=~/opt/lua-5.1.4

readline がない

以下のようなメッセージが出力されたときは readline-devel がインストールされていません。readline-devel をインストールします。

メッセージ
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lua.o lua.c
lua.h:16 から include されたファイル中,
                 lua.c:15 から:
luaconf.h:275:31: error: readline/readline.h: そのようなファイルやディレクトリはありません
luaconf.h:276:30: error: readline/history.h: そのようなファイルやディレクトリはありません
lua.c: In function ‘pushline’:
lua.c:182: 警告: implicit declaration of function ‘readline’
lua.c:182: 警告: assignment makes pointer from integer without a cast
lua.c: In function ‘loadline’:
lua.c:210: 警告: implicit declaration of function ‘add_history
対応
# yum install readline-devel.i386

ncurses がない

以下のようなメッセージが出力されたときは ncurses-devel がインストールされていません。ncurses-devel をインストールします。

メッセージ
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lua.o lua.c
gcc -o lua  lua.o liblua.a -lm -Wl,-E -ldl -lreadline -lhistory -lncurses
/usr/bin/ld: cannot find -lncurses
collect2: ld はステータス 1 で終了しました
対応
# yum install ncurses-devel.i386

Lua 読み込んで実行する - C に Lua を組み込む

Luaソースコードを読み込んで実行する C プログラム。
インストールした Lua の動作確認用です。libdl.so と libm.so リンクする必要があるので、リンク時に指定すること。

ソースコード

#include <stdio.h>
#include <stdlib.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

int main (int argc, char *argv[])
{
    lua_State *L;

    if (argc < 2) {
        fprintf(stderr, "usage: %s filename\n", argv[0]);
        exit(1);
    }

    L = luaL_newstate();

    luaL_openlibs(L);

    if (luaL_dofile(L, argv[1])) {
        fprintf(stderr, "error: %s\n", lua_tostring(L, -1));
        lua_close(L);
        exit(1);
    }

    lua_close(L);

    exit(0);
}

コンパイル

$ gcc -c main.c -I$HOME/opt/lua-5.1.4/include
$ gcc -o main main.o -L$HOME/opt/lua-5.1.4/lib -llua -ldl -lm

Lua コード

print("Hello, Lua!");
実行結果
$ ./main hello.lua
Hello, Lua!

Google Chrome OS について思うこと(メモ)

自分用のメモ書きです。

年内にそのソースコードを公開します

  • オープンソースなので、MS のように海賊版対策は必要ない?
    • 訴訟には対策済み?
      • MicrosoftWindowsIEをセット販売していることで〜」みたいなこと
  • コミュニティに協力を仰ぐということは、どこかで大きな発表がある?
    • 何に合わせてくるのか?

2010 年後半には Google Chrome OS 搭載ネットブックが市場に登場

  • 「世界のインターネット人口、2013年に22億人に」なる時期を狙っている?
  • 先進国の成長率は低いから、BRICs 辺りの新興国に合わせている?
  • 新しいターゲットを含めた戦略?

スピードと使いやすさ

  • 既存の仕組みから、いらないものを除いていく?
  • 新しい仕組みに、必要なものだけをのせる?
  • ウィンドウシステムを独自のものにするみたい

セキュリティアーキテクチャを全面的に設計し直す

選択肢を用意するということは、Google を含むすべての人々の利益のためのイノベーションを加速させるものだと信じます

  • 選択肢には、AndroidChrome OS を含め、他の OS も含まれている?

メモリ上に DB を作る (SQLite3)

メモリ上に DB を作って、データを入れたり、参照したり。

#!/usr/bin/ruby

require 'rubygems'
require 'sqlite3'

sql = <<EOS
create table tbl_test (
    id    text,
    name  text
);
EOS

db = SQLite3::Database.new(":memory:")

db.execute(sql)

db.transaction  { |t|
  3.times do |i|
    t.execute("insert into tbl_test (id, name) values(?, ?)", i, "user#{i}")
  end
}

i = 0
db.execute('select * from tbl_test') do |row|
  i += 1
  puts "#{i}, #{row.join("\t")}"
end

db.close

カンバン・ゲーム - 第 4 回 すくすく・スクラム

参加できませんでしたので、動画を見て感想を書いてみました。

ざっくり内容のまとめ。

  • かんばんのお話
  • リーン思考を参考にしたリーン・カンバンが流行
  • それをゲームで体験してもらう
  • リーン & カンバン
  • ムダを認識する
  • カンバンは「プル生産」 -> 実は(許容量?流れ?)を制限することによって成り立つ
  • カンバンのゲームプレイ

感想

  • リーンカンバンとそのゲームの説明がほとんどだったので、実際ゲームをやってみないと何とも言えないところはあります。
  • 最初のルールと制約をつけたルールでプレイしたけれど、その差は動画を見ているだけはよくわからなかった。プレイしてみてわかること?なのかな。
  • 制約のつけ方が生産工程っぽいのがリーンをベースにしているからかな。
  • 進捗記録は、記入する項目が多かったが、後の見える化に繋がる材料なのかもね。
  • 「チームで担当者を決める・変更する」で、担当の壁を越えた何かに気づけるかも。担当を替えるというのはなかなかないから、いい体験になるかな。
  • ダイスは D6 なのかな?4 面や 8面をバラバラに持たせて使うと担当者の能力に変化があって面白くなったり・・・ならなかったりw 今回の本質ではないけれど。

Ruby/DL で Mecab を使う

mecab のサンプルにあった一番簡単そうなものを Ruby/DL で書いてみた。
お試し程度で使うなら Ruby/DL はいい方法かもね。

ソースコード

#!/usr/bin/ruby

require 'dl/import'

module Mecab
  extend DL::Importable
  
  dlload 'C:\Program Files\MeCab\bin\libmecab.dll'

  extern "mecab *mecab_new2(const char *)"
  extern "const char *mecab_sparse_tostr(mecab_t *, const char *)"
end

s = "太郎は次郎が持っている本を花子に渡した。"

mecab = Mecab.mecab_new2("")

result = Mecab.mecab_sparse_tostr(mecab, s)
puts "INPUT : [#{s}]"
puts "RESULT: [#{result}]"

出力結果

INPUT : [太郎は次郎が持っている本を花子に渡した。]
RESULT: [太郎   名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
次郎    名詞,固有名詞,人名,名,*,*,次郎,ジロウ,ジロー
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
持っ    動詞,自立,*,*,五段・タ行,連用タ接続,持つ,モッ,モッ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
いる    動詞,非自立,*,*,一段,基本形,いる,イル,イル
本      名詞,一般,*,*,*,*,本,ホン,ホン
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
花子    名詞,固有名詞,人名,名,*,*,花子,ハナコ,ハナコ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し    動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。      記号,句点,*,*,*,*,。,。,。
EOS
]