luvitはNode.jsの機能をLuaで実現しようみたいな? もののようです。(まだよくわかっていない...) 試しにインストールとブラウザ上で"Hello world"を 表示するところまでやってみます。 最初 Mac OS X 10.6.8 に入れたのですが luaL_newstate has failed が出て実行できませんでした。。 解決策を調べて色々と試してはみたのですが 力不足で解決できず、諦めましたw 環境 CentOS 6.2 luvit 0.3.1-61-g95c2503 インストール git clone https://github.com/luvit/luvit.git cd luvit make make install ※予めLua, LuaJITを入れておく必要はありません。 コーディング githubから落としてきたなかにexamplesがあって 実装例が
さて、楽しい WoW なのですが、クライアントアプリがおそろしくカスタマイズ性がよく、もともと設定が細かくできることに加え、マクロというものでいろいろやることができます。右図は WoW ブログにマクロの記事書いたときにがんばってつくった絵。さらに Addon の仕組みが用意されていて、UI を変更したり各種イベントをフックしたりできる。Firefox の拡張作成と似てる。Lua で簡単に書けるようなので、ちょっくら作ってみることにしました。 まずは簡単そうな /translate Hello とかで翻訳してくれるチャットコマンドを組み込もうかと、まったくさわったことなかった Lua を勉強開始。わりと素直な syntax。オヤジギャク的な意味でも尊敬しているエンジニア mattn さんのブログがわかりやすい。この記事のタイトルは mattn 先生にささげます。 lua メモ: 0 が 真。
LuaSocket LuaSocketには、ソケットを開いてからサーバまたはクライアントとして設定するまでの 一連の手続きをまとめた関数があります。 TCPのクライアントプログラムは、 socket.connectでソケットを作れば、後は send, receiveメソッドを使うだけ の状態になっています。 (もちろん、細かい設定が必要な場合もあるかもしれませんが。) 簡単な例。 -- client.lua require "socket" local client = socket.connect("127.0.0.1", 8080) assert(client) client:send("hello, world\n") client:close() TCPのサーバプログラムは、socket.bindでソケットを作れば、 後はacceptメソッドを繰り返し呼ぶだけです。 socket.
Luaにはos機能でいくつかファイル操作ができますが、ディレクトリを操作するようなときに便利なのがLuaFileSystemです。 require( "lfs" ) --現在位置を表示する print( lfs.currentdir() ) --はむ!さんのSJIS対応Luaであれば日本語も大丈夫 --以下でc:\テストソース以下のファイルリストを表示する for file in lfs.dir("c:\\テストソース") do --ファイル名が"."や".."でないものを表示 if file ~= "." and file ~= ".." then print( file ) end end さらに詳しく学びたい方は、リファレンスを読んでください [LuaFileSystemリファレンス] http://keplerproject.github.com/luafilesystem/man
日付はOSの機能で扱うことができます。 --文字列形式で日時を取得 print( os.date() ) --テーブル形式で日時を取得する local d = os.date("*t") print( d["year"].."/"..d["month"].."/"..d["day"] ) print( d["hour"]..":"..d["min"]..":"..d["sec"] ) --システム時刻を取得する local t = os.time() --日付(テーブル形式)をシステム時刻に直す local t2 = os.time( d ) 秒単位でしか返却しませんので、それ以上は各自でDllを作りましょう。 詳しく学びたい方は、リファレンスを読んでください [Luaリファレンスマニュアル OS機能] http://sugarpot.sakura.ne.jp/yuno/html/lua5
Luaでsplit的な文字列の分割が行ないたかったのですが、どうも標準ライブラリに 用意されていないようです。 http://lua-users.org/wiki/SplitJoin ここを参考に、splitを自作してみました。 忘れないようにメモしておきます。 -- 自作split関数 function split(str, delim) -- Eliminate bad cases... if string.find(str, delim) == nil then return { str } end local result = {} local pat = "(.-)" .. delim .. "()" local lastPos for part, pos in string.gfind(str, pat) do table.insert(result, part) lastPo
ある程度の大きさのシステムを作る場合、パッケージやモジュールの仕組みが無いと、考えることが多くなりすぎて大変です。 Luaには、モジュールの仕組みがあるようです。cgiluaのソースを見ながら、使い方を手探りで試しているので、間違いがあったら、指摘していただけると嬉しいです。 requireで、別のファイルを読み込むことができる。 moduleで、モジュールのスコープを作れるらしい。module関数呼出しからfileの最後までが、モジュールのスコープになるようです。 モジュールスコープは、全く別のnamespaceになるようで、何もしないとグローバル空間にある関数(printなど)も呼出せなくなる。 module関数呼出し前に、local print = print のように、ファイルのスコープのレキシカル変数 print に、グローバルスコープのprint関数を格納してあげることで、モジ
CGIライブラリをいじってるときは、自前のログ関数で、stderrに垂れ流していたんですが、やはり用意されたものを使うようにしようと思い、Keplerに含まれていたloggingのライブラリを調べてみました。LuaLogging というライブラリです。 http://www.keplerproject.org/lualogging/manual.html これも、log4jをベースに設計されているそうです。(これもと書いたのは、common lispのテストツールが、JUnitを元にしていたことがあったためです)Javaの良いライブラリは、いろんなところに影響を与えているんですね。 サンプルコードやlogging.fileのソースを見て、動かすことができました。 require "logging" require "logging.file" log = logging.file('deb
業務で使うアプリでは、メール送信をすることが非常に多いと思います。Luaでもメールを送信することができました。 とは、言っても、LuaSocketを使えば簡単なことでした。既に socket.smtp というモジュールがあるので、LuaSocketのサンプル(http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/smtp.html)通りで英語のメールは簡単に送信成功しました。(マルチパートの添付ファイル付きメールを送信する例も載ってます) LuaSocketのインストール Keplerをインストールすれば、インストールされます。Keplerが入ってないLinuxでも何の迷いもなくコンパイルとインストールができました。 $ wget http://luaforge.net/frs/download.php/2664/luaso
新しい言語を覚える段階では、別の言語と比べすぎない方がいいと思ってるので、今まで、欲しいと思った関数が無くても、Luaの概念を知るためになるべく素のLuaの範囲で書いてきました。(あえて、Lisp的に書くために関数を追加するようなことは避けてきました) しかし、いくつかLuaでWebアプリケーションを書いてきたので、そろそろお遊びをしてもいい頃かと思い、map reduce apply を実装してみました。utilsというモジュールを作りました。 utils.lua module(..., package.seeall) function clone(list) local result = {} for k, v in pairs(list) do result[k] = v end return result end function map(f, list) local result
stdlibというLuaを拡張するライブラリを調べてみます。http://luaforge.net/projects/stdlib/ それぞれのファイルに定義されていう関数を見ていこうと思います。意味を理解できなくても、どんどん進めることにします。 通常このモジュールをrequireするようです。勘違いでした。通常は、require “std” すると、各モジュールを読み込むようになってました。 metamethod(x, n) オブジェクトx に属しているメソッド名n のメソッドを返却する。 render (x, open, close, elem, pair, sep, roots) tostringなどで使われる、オブジェクトの文字列表現を作成する関数。 こんなの、グローバルに公開する意味あるのかな? tostring(x) 標準で用意されたtostringを_tostringに退避
LuaForgeを覗いていたら、luacursesというライブラリを発見しました。 luacursesで、ちょっと遊んでみました。cursesと言えば例のあれです。 インストール $ wget http://luaforge.net/frs/download.php/1073/curses.tar.gz $ tar zxf curses.tar.gz $ cd curses $ make $ su # cp lib/luacurses.so /usr/local/lib/lua/5.1/ コピー先は、これでいいのか不安。 車輪も動かないし、煙も無い手抜きバージョンです。 ドキュメントも無いようなので、luacursesに付いてたテストコードを読みながら、なんとか書けました。 sl #!/usr/local/bin/lua local SL = { " ==== ________ _____
http://sheddingbikes.com/posts/1289384533.html 話題の絶えないZed。また彼の強力なパーソナリティに関する話になってしまうが、その前にこれは本当のZedが作っているキャラであって、ハッカーとしての真価は彼のプロジェクトによって評価されるべきだと言っておきたい。この数ヶ月にPythonの入門書を書き上げ、Mongrel2をリリースし、さらにLuaでco-routineいよるマイクロフレームワークを構築するなど、面白い実験を行なっている。凄い出力だ。 さて、ドラマの始まり。PGの言語Arcは「プログラムを最短化するのを目的とする言語」ということになっている。その意味を明かにするために「Arc Challenge」なるものを提唱した。次のウェブアプリを何行で書けるか? ユーザにインプットを尋ねる 中間ページを見せリンクを表示 そのリンクを辿ると元のイ
openresty(ngx_openresty) として配布されてる tarボールを使うと 手っ取り早く Nginx で Lua +α する環境が作れます。超便利。 一例: OSXの場合 事前に homebrew も入れておいてね brew install prce wget http://agentzh.org/misc/nginx/ngx_openresty-1.0.11.28.tar.gz tar xvfz ngx_openresty-1.0.11.28.tar.gz cd ngx_openresty-1.0.11.28 ./configure --with-luajit \ --prefix=~/ngx_openresty-1.0.11.28 \ --with-cc-opt="-I/usr/local/Cellar/pcre/8.21/include" \ --with-ld-op
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く