Hatena::ブログ(Diary)

永字八法 RSSフィード Twitter

 | 

2010-05-31 Monday

2010年05月30日のツイート

2010年05月30日のツイート

2010年05月30日のツイート

2010-05-30 Sunday

2010年05月29日のツイート

2010年05月29日のツイート

2010年05月29日のツイート

2010-05-29 Saturday

2010-05-28 (sub)


Powered by twtr2src

2010年05月28日のツイート

2010-05-28 (sub)


Powered by twtr2src

2010年05月28日のツイート

2010-05-28 (sub)


Powered by twtr2src

2010年05月28日のツイート

2010-05-28 Friday

2010年05月27日のツイート

2010年05月27日のツイート

2010年05月27日のツイート

2010-05-27 Thursday

2010-05-26


Powered by twtr2src

2010-05-26


Powered by twtr2src

2010-05-26


Powered by twtr2src

2010-05-26 Wednesday

2010-05-25


Powered by twtr2src

2010-05-25


Powered by twtr2src

2010-05-25


Powered by twtr2src

2010-05-25 Tuesday

2010-05-24


Powered by twtr2src

2010-05-24


Powered by twtr2src

2010-05-24


Powered by twtr2src

2010-05-24 Monday

2010-05-23


Powered by twtr2src

2010-05-23


Powered by twtr2src

2010-05-23


Powered by twtr2src

2010-05-23 Sunday

2010-05-22


Powered by twtr2src

2010-05-22


Powered by twtr2src

2010-05-22


Powered by twtr2src

2010-05-22 Saturday

SGEで自分自身を多重起動させる。

gui.getexename()を使えば、exeファイル名を取得できる。"SGE.exe"と決め打ちしてもいいが、ゲームとして世に出す時には別のファイル名にしてあることも多いだろうから最初から変えても大丈夫なようにスクリプトを組むべし。

local exe = gui.getexename()

しかし、先頭に\がついているので、それを取り除かなければならない。

exe:gsub("\\", "")

その後で、gui.shell()に渡す。

gui.shell(exe)

そうすると自分自身を多重起動する。後はlock.singleton()で動作を別にする。

root.lua

function second_line()
	gui.okbox(gui.getcommandline(), "second")
	os.exit()
end

lock.singleton(second_line)

gui.create(640, 480)
local exe = gui.getexename()
gui.okbox(exe, "exe")
exe:gsub("\\", "")
gui.okbox(gui.getcommandline(), "first")
gui.shell(exe)
while true do
	gui.doevents()
	c = gui.getclick()
	if c then os.exit() end
end

その他

gui.shell(gui.getcommandline())
gui.shell(encoding.utf8_to_ansi(gui.getcommandline()))

これはうまくいかない。作業ディレクトリが効いているのか、フルパス指定しても無視される。念のために文字コードをansiに変換しても同様。

gui.shell(exe.." command")

これもうまくいかない。コマンドライン渡しはできないようだ。
ただし。

SGE.exe command

上記内容のバッチファイル(例えば"sge.bat"と命名する)を同じディレクトリに置き、gui.shell("sge.bat")と実行すると、コマンド窓が開くがSGE.exeの多重起動に成功する。
しかもコマンドライン渡しが可能になる。この場合gui.getcommandline()の返り値が"SGE.exe command"と言う文字列になる。
batファイルを作ってそれを起動するならば、コマンドライン渡しが可能になる、が、いちいちコマンド窓が開くのが辛い。
コマンド窓はショートカット作成しそこから起動すれば最小化したまま、終了時に自分を消すこともできるのだけれども、今度はショートカットによる起動がSGEからはできない。痛し痒しである

gui.getcommandline()の挙動

直接SGE.exeを起動させた場合、フルパスが返ってくる。
一旦コマンド窓を立ち上げてから起動させると、そのカレントディレクトリから相対パスが返ってくる。
コマンドライン指定してあれば、どちらの場合でもそれがついてくる。生なので、加工が必要

lock.singleton()の注意点

lock.singleton()に関数を渡す時は、その関数の中にos.exit()を何らかの形で入れておくべし。
そうでないと、関数が終了した後何事もなく本来の動作が動いてしまうので。

2010-05-21


Powered by twtr2src

SGEで自分自身を多重起動させる。

gui.getexename()を使えば、exeファイル名を取得できる。"SGE.exe"と決め打ちしてもいいが、ゲームとして世に出す時には別のファイル名にしてあることも多いだろうから最初から変えても大丈夫なようにスクリプトを組むべし。

local exe = gui.getexename()

しかし、先頭に\がついているので、それを取り除かなければならない。

exe:gsub("\\", "")

その後で、gui.shell()に渡す。

gui.shell(exe)

そうすると自分自身を多重起動する。後はlock.singleton()で動作を別にする。

root.lua

function second_line()
	gui.okbox(gui.getcommandline(), "second")
	os.exit()
end

lock.singleton(second_line)

gui.create(640, 480)
local exe = gui.getexename()
gui.okbox(exe, "exe")
exe:gsub("\\", "")
gui.okbox(gui.getcommandline(), "first")
gui.shell(exe)
while true do
	gui.doevents()
	c = gui.getclick()
	if c then os.exit() end
end

その他

gui.shell(gui.getcommandline())
gui.shell(encoding.utf8_to_ansi(gui.getcommandline()))

これはうまくいかない。作業ディレクトリが効いているのか、フルパス指定しても無視される。念のために文字コードをansiに変換しても同様。

gui.shell(exe.." command")

これもうまくいかない。コマンドライン渡しはできないようだ。
ただし。

SGE.exe command

上記内容のバッチファイル(例えば"sge.bat"と命名する)を同じディレクトリに置き、gui.shell("sge.bat")と実行すると、コマンド窓が開くがSGE.exeの多重起動に成功する。
しかもコマンドライン渡しが可能になる。この場合gui.getcommandline()の返り値が"SGE.exe command"と言う文字列になる。
batファイルを作ってそれを起動するならば、コマンドライン渡しが可能になる、が、いちいちコマンド窓が開くのが辛い。
コマンド窓はショートカット作成しそこから起動すれば最小化したまま、終了時に自分を消すこともできるのだけれども、今度はショートカットによる起動がSGEからはできない。痛し痒しである

gui.getcommandline()の挙動

直接SGE.exeを起動させた場合、フルパスが返ってくる。
一旦コマンド窓を立ち上げてから起動させると、そのカレントディレクトリから相対パスが返ってくる。
コマンドライン指定してあれば、どちらの場合でもそれがついてくる。生なので、加工が必要

lock.singleton()の注意点

lock.singleton()に関数を渡す時は、その関数の中にos.exit()を何らかの形で入れておくべし。
そうでないと、関数が終了した後何事もなく本来の動作が動いてしまうので。

2010-05-21


Powered by twtr2src

SGEで自分自身を多重起動させる。

gui.getexename()を使えば、exeファイル名を取得できる。"SGE.exe"と決め打ちしてもいいが、ゲームとして世に出す時には別のファイル名にしてあることも多いだろうから最初から変えても大丈夫なようにスクリプトを組むべし。

local exe = gui.getexename()

しかし、先頭に\がついているので、それを取り除かなければならない。

exe:gsub("\\", "")

その後で、gui.shell()に渡す。

gui.shell(exe)

そうすると自分自身を多重起動する。後はlock.singleton()で動作を別にする。

root.lua

function second_line()
	gui.okbox(gui.getcommandline(), "second")
	os.exit()
end

lock.singleton(second_line)

gui.create(640, 480)
local exe = gui.getexename()
gui.okbox(exe, "exe")
exe:gsub("\\", "")
gui.okbox(gui.getcommandline(), "first")
gui.shell(exe)
while true do
	gui.doevents()
	c = gui.getclick()
	if c then os.exit() end
end

その他

gui.shell(gui.getcommandline())
gui.shell(encoding.utf8_to_ansi(gui.getcommandline()))

これはうまくいかない。作業ディレクトリが効いているのか、フルパス指定しても無視される。念のために文字コードをansiに変換しても同様。

gui.shell(exe.." command")

これもうまくいかない。コマンドライン渡しはできないようだ。
ただし。

SGE.exe command

上記内容のバッチファイル(例えば"sge.bat"と命名する)を同じディレクトリに置き、gui.shell("sge.bat")と実行すると、コマンド窓が開くがSGE.exeの多重起動に成功する。
しかもコマンドライン渡しが可能になる。この場合gui.getcommandline()の返り値が"SGE.exe command"と言う文字列になる。
batファイルを作ってそれを起動するならば、コマンドライン渡しが可能になる、が、いちいちコマンド窓が開くのが辛い。
コマンド窓はショートカット作成しそこから起動すれば最小化したまま、終了時に自分を消すこともできるのだけれども、今度はショートカットによる起動がSGEからはできない。痛し痒しである

gui.getcommandline()の挙動

直接SGE.exeを起動させた場合、フルパスが返ってくる。
一旦コマンド窓を立ち上げてから起動させると、そのカレントディレクトリから相対パスが返ってくる。
コマンドライン指定してあれば、どちらの場合でもそれがついてくる。生なので、加工が必要

lock.singleton()の注意点

lock.singleton()に関数を渡す時は、その関数の中にos.exit()を何らかの形で入れておくべし。
そうでないと、関数が終了した後何事もなく本来の動作が動いてしまうので。

2010-05-21


Powered by twtr2src

2010-05-21 Friday

2010-05-20


Powered by twtr2src

2010-05-20


Powered by twtr2src

2010-05-20


Powered by twtr2src

2010-05-20 Thursday

2010-05-19


Powered by twtr2src

2010-05-19


Powered by twtr2src

2010-05-19


Powered by twtr2src

2010-05-19 Wednesday

2010-05-18


Powered by twtr2src

2010-05-18 (sub)


Powered by twtr2src

2010-05-18


Powered by twtr2src

2010-05-18 (sub)


Powered by twtr2src

2010-05-18


Powered by twtr2src

2010-05-18 (sub)


Powered by twtr2src

2010-05-18 Tuesday

SGEでネットに接続

簡単にまとめます
LuaSocketに行って、LuaSocketの最新のをダウンロードしてください。
コンパイルするのはわかる人だけがやってください。わからない人はvc8.zipでなんとかなります
ダウンロードして、解凍すると、以下のようになってます

で、手順。

  1. luaフォルダを中身ごとコピーます。その中に、SGE.exe(とroot.lua)をコピーます
  2. コピーしたluaフォルダの中に、mimeフォルダを中身ごとコピーます
  3. コピーしたluaフォルダの中に、socketフォルダを中身ごとコピーます
  4. 後は要りません。

これで準備は完了です。

実際のスクリプト

local http = require("socket.http") -- httpクライアントオブジェクトを作る。
local b, h, c = http.request("http://www.eiji8pou.pics/") -- 最低限これだけで動く。
-- b には取得した内容が入る。普通ならhtmlか。
-- h にはステータスコードが入る。普通なら200。ページがなかったりすると404。詳しくはググるべし。
-- c はBasic認証した時に失敗すれば401が入る。あんまり使わないかも。

socketフォルダを見ればわかりますが、このLuaSocketを使えば他にftpやsmtpメール)もできます

使い方

これで理論オンラインランキングチャットなどができることがわかりましたが、SGEの場合ソースが事実上丸裸になるので、リクエストを受け取るサーバー側のセキュリティには細心の注意が必要になるでしょう。SGE以外でのアクセスに対してどう対処するか、難しいところです。

2010-05-17


Powered by twtr2src

SGEでネットに接続

簡単にまとめます
LuaSocketに行って、LuaSocketの最新のをダウンロードしてください。
コンパイルするのはわかる人だけがやってください。わからない人はvc8.zipでなんとかなります
ダウンロードして、解凍すると、以下のようになってます

で、手順。

  1. luaフォルダを中身ごとコピーます。その中に、SGE.exe(とroot.lua)をコピーます
  2. コピーしたluaフォルダの中に、mimeフォルダを中身ごとコピーます
  3. コピーしたluaフォルダの中に、socketフォルダを中身ごとコピーます
  4. 後は要りません。

これで準備は完了です。

実際のスクリプト

local http = require("socket.http") -- httpクライアントオブジェクトを作る。
local b, h, c = http.request("http://www.eiji8pou.pics/") -- 最低限これだけで動く。
-- b には取得した内容が入る。普通ならhtmlか。
-- h にはステータスコードが入る。普通なら200。ページがなかったりすると404。詳しくはググるべし。
-- c はBasic認証した時に失敗すれば401が入る。あんまり使わないかも。

socketフォルダを見ればわかりますが、このLuaSocketを使えば他にftpやsmtpメール)もできます

使い方

これで理論オンラインランキングチャットなどができることがわかりましたが、SGEの場合ソースが事実上丸裸になるので、リクエストを受け取るサーバー側のセキュリティには細心の注意が必要になるでしょう。SGE以外でのアクセスに対してどう対処するか、難しいところです。

2010-05-17


Powered by twtr2src

SGEでネットに接続

簡単にまとめます
LuaSocketに行って、LuaSocketの最新のをダウンロードしてください。
コンパイルするのはわかる人だけがやってください。わからない人はvc8.zipでなんとかなります
ダウンロードして、解凍すると、以下のようになってます

で、手順。

  1. luaフォルダを中身ごとコピーます。その中に、SGE.exe(とroot.lua)をコピーます
  2. コピーしたluaフォルダの中に、mimeフォルダを中身ごとコピーます
  3. コピーしたluaフォルダの中に、socketフォルダを中身ごとコピーます
  4. 後は要りません。

これで準備は完了です。

実際のスクリプト

local http = require("socket.http") -- httpクライアントオブジェクトを作る。
local b, h, c = http.request("http://www.eiji8pou.net/") -- 最低限これだけで動く。
-- b には取得した内容が入る。普通ならhtmlか。
-- h にはステータスコードが入る。普通なら200。ページがなかったりすると404。詳しくはググるべし。
-- c はBasic認証した時に失敗すれば401が入る。あんまり使わないかも。

socketフォルダを見ればわかりますが、このLuaSocketを使えば他にftpやsmtpメール)もできます

使い方

これで理論オンラインランキングチャットなどができることがわかりましたが、SGEの場合ソースが事実上丸裸になるので、リクエストを受け取るサーバー側のセキュリティには細心の注意が必要になるでしょう。SGE以外でのアクセスに対してどう対処するか、難しいところです。

2010-05-17


Powered by twtr2src

2010-05-17 Monday

2010-05-16


Powered by twtr2src

2010-05-16


Powered by twtr2src

2010-05-16


Powered by twtr2src

2010-05-16 Sunday

2010-05-15


Powered by twtr2src

2010-05-15


Powered by twtr2src

2010-05-15


Powered by twtr2src

2010-05-15 Saturday

SGEの邪道な使い方。lock.singleton()編

SGEの邪道な使い方。gui.shell()編 - 永字八法の関連。
lock.singleton()は、本来は多重起動を防ぐための関数だが、多重起動した時に実行できる関数指定できる。
これは結局のところ、最初の起動とそれ以降での起動での動作を変えられることを意味する。擬似的にお互い独立したスレッドを作れると解釈してよい。
これを持って画像について弱い部分 - 永字八法検討する。
つまり、子スレッドを作り、ファイル画像として読み込んでみる。こけなければ、それは拡張子に関わらずSGEで使える画像ファイルである。逆にこの子スレッドがこけてしまえば、それは画像ファイルではない、と言う証明になる。
ただ、本来スレッドではないので、スレッド間の通信手段がない。この場合正しいファイルかどうか、判別結果を伝えることができない。そこで、少々迂遠だが以下の通信方法を考案する。

擬似スレッド間の通信手段

  1. つのディレクトリを用意する。仮に一つを"first2second"とし、もう一つを"second2first"とする。
  2. 第一スレッドはfirst2secondにランダム名前ファイルを作り、それに第二スレッド以降へのメッセージ記述する。
  3. 第二スレッドは起動するとfirst2secondを覗き、その中の一つを選んで実行する。実行する前に、命令受領の意味でそのファイルを削除する。
  4. 第二スレッドが無事に必要な処理を終えれば、今度はsecond2firstに第一スレッドへのメッセージ作成しておく。
  5. 第一スレッドは定期的にsecond2firstを覗き、何かがあれば結果を受け取る。受け取ったメッセージは削除する。

実行の順番は全く保証されないし、OSへの負担は大きいが、悪くはないと思う。
gui.create()しなくても画像を読み込んだりできるのがポイント。第二スレッドは全くのバックグラウンドで動作させられる。

2010-05-14


Powered by twtr2src

SGEの邪道な使い方。lock.singleton()編

SGEの邪道な使い方。gui.shell()編 - 永字八法の関連。
lock.singleton()は、本来は多重起動を防ぐための関数だが、多重起動した時に実行できる関数指定できる。
これは結局のところ、最初の起動とそれ以降での起動での動作を変えられることを意味する。擬似的にお互い独立したスレッドを作れると解釈してよい。
これを持って画像について弱い部分 - 永字八法検討する。
つまり、子スレッドを作り、ファイル画像として読み込んでみる。こけなければ、それは拡張子に関わらずSGEで使える画像ファイルである。逆にこの子スレッドがこけてしまえば、それは画像ファイルではない、と言う証明になる。
ただ、本来スレッドではないので、スレッド間の通信手段がない。この場合正しいファイルかどうか、判別結果を伝えることができない。そこで、少々迂遠だが以下の通信方法を考案する。

擬似スレッド間の通信手段

  1. つのディレクトリを用意する。仮に一つを"first2second"とし、もう一つを"second2first"とする。
  2. 第一スレッドはfirst2secondにランダム名前ファイルを作り、それに第二スレッド以降へのメッセージ記述する。
  3. 第二スレッドは起動するとfirst2secondを覗き、その中の一つを選んで実行する。実行する前に、命令受領の意味でそのファイルを削除する。
  4. 第二スレッドが無事に必要な処理を終えれば、今度はsecond2firstに第一スレッドへのメッセージ作成しておく。
  5. 第一スレッドは定期的にsecond2firstを覗き、何かがあれば結果を受け取る。受け取ったメッセージは削除する。

実行の順番は全く保証されないし、OSへの負担は大きいが、悪くはないと思う。
gui.create()しなくても画像を読み込んだりできるのがポイント。第二スレッドは全くのバックグラウンドで動作させられる。