Sun, 24 Feb 2008

Luaと一ヶ月程戯れてみた感想

Luaを触りだして一ヶ月くらいたつので感想をメモ。 一言で言うと、 楽しい!! な んだけどせっかくなのでもう少し書いてみる。

入門Luaプログラミング

ASIN: 4797342722


多分5-6回読み返したかな。最初ピンとこなかった部分も何回か読むと、あぁそういうこ とねと理解できるところがありました。ただやはり入門編なので、そこのところをもうち ょっと詳しく、という部分が書かれていなかったので、ついカッとなって

Programming in Lua

ASIN: 8590379825


を買ってしまった。別に後悔はしてない。

で、pythonと比べていいところ、物足らない/不満なところを今の時点での感想として書 いてみる。

  • いいところ

    • シンプル、必要最小限の機能、拡張の容易さ

      本当に必要最小限しかないが、簡単にLuaレベルでもCレベルでも拡張できるので、必 要なものは自分で作る楽しさがある。次はどの機能を追加してやろうかな、と楽しみ ながら自分が使いたい機能を盛り込むことができる。

      Luaレベルでは、setmetatable()で、+やら-やら配列へのアクセスやら代入やらの動 作をoverrideできるし、モジュール(tableモジュールとかね)ヘ自分でメソッドの追 加もできるし、オブジェクト風のアクセスも可能。またCレベルではLuaとCとのスタ ックでの値の受け渡しさえ理解できれば自分で拡張できます。

      ※ 一応ライブラリ類も公開されているものがあって(LuaSocketとか)それを使うこと も可能ですよ。

  • 物足りない/不満なところ

    • end!end!!end!!!

      pythonで慣れちゃってるとやっぱりendが無駄な気がする。 もちろんthenやらdoやらも同じ。

    • 変数のスコープのデフォルトがglobalなこと

      いちいちlocal宣言しないとglobalスコープになってしまうこと。 うっかりブロック構文内の一時変数(のつもりのもの)でブロック外の変数を書き換え ちゃいそう。

    • 空文字列、空配列、0がif文の判定でfalseとして扱われないこと

      ついつい、if hoge then print("hoge") end とかしちゃうけど、hogeがnil/false以 外だとif文はtrue判定になってしまう。

    • テーブルは同じ値であっても別々のものが代入されるので t={}; print(t == {}) としてもfalseが返ってくること。

      空配列はif文でfalseとならないからといって、 t == {} では判定できない。こ の辺はちょっと直感的じゃないような気がする。

      仕方ないのでnext(t)がnilかどうかで判定している。

    • 未定義の変数も参照できる(nilが返ってくる)。ミスタイプしても気づきにくい。

      でもこれを変えちゃうと、言語仕様を色々変えないといけなくなっちゃうから無理かな。

大人数で開発する時にはこの辺のルールをちゃんと決めてからやらないとはまりそうな気がするな。

でも、pythonだとbuttery includedと言われるくらい最初から色々標準でライブラリがつ いてきて、それはそれで楽チンでいいんだけど、使いたい機能がなくって、じゃあ自分で どう実現しようかなって考えるのも(時間さえあれば)楽しくていいもんだな、と思います 。


Mon, 11 Feb 2008

trackback spam

最近あまりにも沢山のtrackback spamが来るので、簡単にはspam対策をしているはずなの で、一体どうやって突破されるのかなー?とずっと不思議だったのですが、なんのことは ないtrackback spamの対策が動いていなかったようです。

確か昔下記にあるように、trackback.pyにてtrackback_rejectのコールバックを呼びだす ように修正したはずだったのですが、今みたら見事にそのコードが入っていません。なの で誰からも呼ばれることのないtrackback spam用プラグインのtb_spam.pyがただぽつんと 置いてあるだけでした。

コメントスパム対策系プラグインでトラックバックまでrejectされる問題 -DaemonFreaks Blog

そりゃあスパムし放題だよね。これで多少ましになるはず。

なんか色々いじってたらどれが最新ソースに取りこまれてて、どれが自分が勝手に修正し た奴でってのがわからなくなっちゃってるな。


Sat, 09 Feb 2008

がっかりだ

ちょっとほっといたらtrackback spamがひどいことになったので一気に消してやろうと FreeBSDのコマンドラインで下記のように打ったらこれまでのコメントが全部消えちゃった。。

// 間違いコマンド。bloeturaってのはspamに含まれた文字列。
$ rm `grep -rL bloetura *`

helpを良く読んでみると、 L は、 files-without-match だった。。。あああ。。 正解は、 l だった。 file-with-matches

// やりたかったコマンド
$ rm `grep -rl bloetura *`

サーバを移転する直前の2006年12月23日までの分は手元に残ってたので戻せたけど、それ 以降のコメントは消えちゃった。がっかりだ。

こうやってデータが消えるたびに思うけど、バックアップ重要。でもつい喉元過ぎると痛 みを忘れちゃうのだ。


追記

Web archive探してみたけど、2007/08/08までしかないや。