classの記述を簡潔に書けるようにする

Codifyでclassを記述する時の方法が以下の様な感じで、metatableを意識しないで書けるのがとても良かったので実装してみた。

Vec3 = class()
function Vec3:init(x,y,z)
	self.x,self.y,self.z = x,y,z
	print("vec3:init",x,y,z)
end
function Vec3:dump()
	print("vec3:dump",self.x,self.y,self.z)
end
function Vec3:set3(x,y,z)
	self.x,self.y,self.z = x,y,z
	print("vec3:set3",self.x,self.y,self.z)
end


Vec4 = class(Vec3)
function Vec4:init(x,y,z,w)
	self.x,self.y,self.z,self.w = x,y,z,w
	print("vec4:init",x,y,z,w)
end
function Vec4:dump()
	print("vec4:dump",self.x,self.y,self.z,self.w)
end


local v4_1 = Vec4(3,2,1,0)
local v3_1 = Vec3(4,5,6)
local v4_2 = Vec4(0,1,1,0)
local v3_2 = Vec3(7,8,9)

v4_1:set3(2,2,2)
v4_1:dump()
v4_2:dump()
v3_1:dump()
v3_2:dump()


__callを使えば出来そうって所までは直ぐに気がついたけど、__callの第一引数に呼び出した際のテーブルも一緒に渡されて来るのが分からなくて微妙にハマった。
Luaのマニュアル読んでもそんな事一ミリも書かれてないし。。。


可変引数でググッたらselect文を使えば良いよと書いてあったのでそうしてみた。

select(x,...)

x番目以降の可変引数が戻り値で返せるらしい。
以前のバージョンだと配列としてアクセスする方法があったような気がするんだけど無くなってしまったのか。


実装してみたら意外とシンプルに収まった。

function class(parent)
	local base = {
	}
	local mt = {
		__call = function(...)
			local mt = setmetatable({},{__index=base})
			mt.init(mt,select(2,...))
			return mt
		end
	}
	if (parent) then mt.__index = parent end
	
	return setmetatable(base,mt)
end

さり気なくクロージャーが生かされているのが渋い。
クロージャー使わなくても出来る方法があるような気がしないでもない。

iPad上でProce55ingの様に書けるLua環境Codify

http://twolivesleft.com/Codea/
Proce55ingAPIを意識して作られている上に、エディターやカラーピッカーまで付いててすごい。
コード補完も便利で、ちょっとしたプロトタイピングには最高の環境じゃなかろうか。


ただし、アプリの制限でファイルの入出力が出来ないので画像ファイルセットを新しく用意するとかが出来ない。
せめて外部へのプロジェクトファイルの入出力があるだけでも良いんだけど、現状だと自分一人で満足する事しかできないのが残念だ。

ダァシェリェス

ブレインファック系の言語はそろそろゲップが出そうな感じだけども、たまにはやってみようかと思ったが入力が思いの外めんどくさいので中間言語(ってほどでも無いが)にしてみた。

syelies=<<EOS
inc
incd*H
inc
incd*e
inc
incd*l
inc
incd*l
inc
incd*o
inc
incd* 
inc
incd*W
inc
incd*o
inc
incd*r
inc
incd*l
inc
incd*d
inc
incd*!
do
dec
wh
inc
do
put
inc
wh
EOS

dic={
"incd"=>"ダァ", #buf[ptr] += 1
"decd"=>"ダア", #buf[ptr] -= 1
"inc"=>"シェリ", #ptr += 1
"dec"=>"シエリ", #ptr -= 1
"put"=>"イェス", #print chr(buf[ptr])
"get"=>"イエス", #input ord(buf[ptr]) …ただしこれはWeb版のため無効
"do"=>"!", #do{
"wh"=>",", #}while(buf[ptr]!=0)
}

syelies.each_line {|ln|
	v = ln.chomp.scan(/(\w+)(\*?)(.?)/)[0]
	op = dic[v[0]]
	if op
		t = 1
		t = v[2][0] if v[2]!=""
		t.times {print op}
	end
}
ダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァシェリダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァシェリダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァシェリダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァシェリダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァダァ!シエリ,シェリ!イェスシェリ,

http://lyia.net/kq.php

メタ言語で記述するとまるで面白くもなんとも無くなってしまうのが微妙。。。

COOL終了

P55のアプリとかソース置き場に使ってたCOOLが6/30で終わってしまってた!
過去のソースを参照しようとしたらこの有様だよ!
クソが!


まだデータサルベージ出来るかな?
ホント勘弁して欲しいわ。。。


サルベージ出来た!FTPはまだ繋がる。
7月中旬までって。。。たまたま気がついたから良かったものの。


さて、どこにアップしようかな。

11インチ

twitterのゆるい感じが良くてmixiもhatenaも更新がめんどくさくなり大分放置してた。
今後もほぼ放置だろうなw


そんな感じで物欲センサーMAXになったので思わずMacBookAir 11インチを買った。
11インチで一番良いのを頼む。
晴れて憧れのマカーになれました。プギャー!
今年に入ってからのアップル率やばい。AppleTV欲しい。


キーバインドがいきなりUnix仕様になってて戸惑うけど他は思ったよりWindowsに似てるのでなんとか使えてる感じ。
ことえりがなんとなくキモイのでGoogleIMEにした。
ブラウザもChromeにして、ホームページをiGoogleにしたのでブックマークとか移さなくても大体問題ない感じ。
シンクライアント良いね。
FlashSilverLightも入れたのでShowTimeし放題。


XCodeも入れたしこれで念願のiPhoneアプリの開発が出来る。
他になんか入れたほうが良いよ?とかいうのがあれば是非教えてください。


メモ
二本指を上下にスライドでスクロール
三本指を左右にスライドで「進む」「戻る」
四本指を上下にスライドでエクスポーズ

久保さんへ

101 : 翻訳家(東京都):2010/08/16(月) 16:39:44.10 id:ysDSAXrc0
A「オマエはBLEACHよりおもしろい漫画が描けるんだな?描けないのに批判するな!」
B「漫画描いてみたよ、ほら」
A「なんだこれ、糞つまんねー」
B「ちょっと待て、俺の漫画を批判するのは俺よりおもしろい漫画を描いてからだ」
A「描いたぞ」
B「どっちがおもしろいか第三者に聞いてみないとな」
A「よし、Cに聞いてみよう」
B「ちょっと待て、それはCがおもしろい漫画を描いてからだ」