i686-w64-mingw32 のコンパイル済みバイナリ入れたら一発で動いた
さくらVPSのcentos に i686-w64-mingw32 が……入れられない
http://kanedaq.blog24.fc2.com/blog-entry-10.html
ここを参考にして gcc-4.8.2 をビルドしてみたが,手順5の途中で
checking for wchar.h... (cached) yes
checking for wctype.h... (cached) yes
checking for ld version... 22300
checking for ld that supports -Wl,--gc-sections... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.
make[1]: *** [configure-target-libstdc++-v3] エラー 1
make[1]: ディレクトリ `/tmp/gcc-4.8.2/build' から出ます
make: *** [all] エラー 2
となって進めない.
うーーーーーーーーん
Lua で Boost::Lambda っぽいの
http://melpon.org/wandbox/permlink/LNbdDxlbAE4nkdrP
Lambda もなにも,Lua は最初から関数がファーストクラスオブジェクトでクロージャもあるから直接その場にfunction
と書けば済むのだが……
とても単純なWebサービスを一時間で作った
作ったもの
http://md.nyaocat.jp/?url=(マークダウンファイルのURL)
これでMarkdownファイルをhtmlに変換して表示してくれる. あまりセキュリティ考えてないので悪いところがあったら教えてください.
ソースコード
実質1ファイルのみで非常に単純.
工程
- お名前.com のレコード設定で md.nyaocat.jp を設定した
- Github にリポジトリを作った
- サーバでCloneしてコード書き始める(コミット履歴)
- Twitter にURL載せてみる
- 指摘してくれたアカンところをちょいと修正
反省点
この程度のものも作ってみると1時間かかってしまうんだな,ということがわかりました.
エラーチェックやレコード設定,Github にリポジトリ作る部分が本質的な部分じゃないのに複数の サイトにアクセスして設定する必要があって面倒でした.
あと,Javascript よくわかってなくて Javascript で正規表現使う方法とか調べながら書いてたのが良くありませんでした.
これの今後
- サーバ側でなくクライアント側で変換させる
- CSS 自分で用意する
- 見出しをピックアップして目次メニューつけたりすると良いかも
- 第一レベルの見出しごとにプレゼンテーションになるようにすると便利かも
(Lua)読み取り専用テーブルモジュールを本気出して作った
Lua readonly module (https://gist.github.com/nyaocat/7380582)
このモジュールを介して作成されたテーブル・ユーザーデータのフィールドは絶対に変更出来ません. (debugライブラリを除く)
他の類似モジュールとの違い
いくつか "Lua Read Only" で検索しても似たのが出てくる.
- newproxy を使用してるので rawset でも変更できない
- getmetatable されても変更出来ない
- メタメソッドも全て対応
#
演算子対応pairs
,ipairs
,next
に半分対応- メンバ関数経由でのみ更新可能
これらを全部満たすリードオンリーテーブルモジュールはぱっと検索した限り見当たらなかった
サンプルコード
ERROR! とコメントされた行でエラーが発生します
readonly = require "readonly"
arr = readonly.readonly {3, 9, 7, 4}
print(arr[2]) -- OK
arr[1] = 98 -- ERROR!
t1 = readonly.readonly {
val = 10,
getVal = function(self) return self.val end,
setVal = function(self, newval) self.val = newval end
}
t1:getVal() -- OK
t1:setVal(20) -- ERROR!
t1.val = 30 -- ERROR!
t2 = readonly.readonly2 {
val = 10,
getVal = function(self) return self.val end,
setVal = function(self, newval) self.val = newval end
}
t2:setVal(20) -- OK
t2:getVal() -- OK
t2.val = 30 -- ERROR!
for k, v in ipairs(arr) do end -- ERROR!
for k, v in pairs(t2) do end -- ERROR!
for k, v in readonly.ipairs(arr) do end -- OK
for k, v in readonly.pairs(t2) do end -- OK
readonly(tbl)
は与えられたテーブル,ユーザデータを読み込み専用にして返します.
readonly2(tbl)
はメンバ関数経由での更新のみを許可します.
readonly()
, readonly2()
で作成された読み込み専用テーブルは標準の next
, pairs
, ipairs
で使用出来ません.
代わりに, require("readonly").next
, require("readonly").pairs
, require("readonly").ipairs
を使用して下さい.
これらの関数はこのモジュールで作成された読み込み専用テーブル意外のテーブルに対しては標準の next, pairs, ipairs を使用するため, これらの関数で標準の関数を置き換えても問題ありません.
フィールドが更新出来ない以外は元のテーブルと全く同じようにアクセス出来ます. __index を用いてLuaでクラスを表現している場合でも問題ありません.
このモジュールは Lua5.1 で実行してもグローバル変数にモジュールをセットしません.
これは Lua5.2 での一般的なモジュール挙動と合わせたためです.
local readonly = require "readonly"
として実行してください.
このモジュール自体は Lua5.1, Lua5.2 両方で動くはず(多分)です.
このファイルを単体でlua readonly.lua
として実行すると簡単なテストが実行されます. http://ideone.com/soulZG
require
した時にはテストは実行されません.
以下実装の解説というかなんというか読み込み専用モジュールの作り方
続きを読む