スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--.--.-- | スポンサー広告

ドラマ風SPAM「詩織」最終章

ついに来ました、最終回。

ちなみに前回分まではこちらです。


【“ドラマ風SPAM「詩織」最終章”の続きを読む】
スポンサーサイト

2005.08.31 | Comments(0) | Trackback(0) | SPAM

[Lua] 明示的グローバル変数宣言モジュール

先日のコードを少し修正しました。

とくちょう
- 以下のようにグローバル変数を明示的に宣言できます。

  global "myvar"

 同時に値を入れる機能は削除しました。(空の関数でglobalを代替できなくなるため)
- グローバル変数にnilを代入しても「存在」はそのままです。
(暗黙的に宣言されたグローバル変数は、use_explicit_global()時に自動的に「宣言済み」になります)
- メインチャンク(=関数の外)での暗黙・明示をuse_explicit_global()の引数で選択できます。
(デフォルトは暗黙のほうです)
- use_implicit_globals()でモジュールの機能をOFFにして、通常と同じ動作になります。
- 関数はメインチャンク(=関数の外)以外では明示的宣言が必要です。

- このモジュールを使って組んだコードをこのモジュールを使わないで動かす場合、以下のような宣言をすれば問題なく動きます。

  function global() end
function use_explicit_globals() end
function use_implicit_globals() end


暗黙・明示はソース中の宣言位置によって異なります。


                C | メインチャンク| それ以外(関数内)
-------------------------------------------------------------------------
Luaの通常動作          implicit | implicit | implicit
use_explicit_globals()     implicit | implicit | explicit
use_explicit_globals(true) &
       関数値以外の場合 implicit | explicit | explicit
         関数値の場合 implicit | implicit | explicit

implicit: 暗黙 explicit: 明示 です。

問題点:
- setfenvでグローバル関数全体をあらわすテーブルを変更したら多分妙なことになる。
- use_explicit_globals()が呼ばれたときに既に暗黙的に呼ばれたグローバル変数のうち値がnilのものは「宣言済み」とは解釈されない。(これはLuaのグローバル変数は「値がnilである」のと「存在しない」は同じ扱いだから仕方ないです)

せっかくなのでLuaの本家MLに投げてみましたが、何か返事が来るだろうか、はたまた無視されるやら。

コードは以下に。


【“[Lua] 明示的グローバル変数宣言モジュール”の続きを読む】

2005.08.29 | Comments(2) | Trackback(0) | Lua

7回完結ドラマ仕立てSPAMの謎

しばらく前に1通のメールが届きました。


Subject:先日の件で少し宜しいでしょうか?

あれから、PCに何か問題はありましたでしょうか?
私の方はインターネットが少し繋がりづらくなってしまったのですが。
ウィルスのメールだったのでしょうか?
まわりに詳しい人間もいないので…困っています。
何かPCの事でご存知の事があれば、ご指導お願いします。

詩織


えーっと、あれから って何からですか?

名前書いてないので、まあ99%までSPAMだとは思ったのですが、
URLリンクもないし、どこに誘導しようとしているのか不明です。
なんだろう・・・と思いながら数日過ぎました。

・・・またきました。


【“7回完結ドラマ仕立てSPAMの謎”の続きを読む】

2005.08.29 | Comments(2) | Trackback(0) | SPAM

エルビー はちみつ黒酢(シイクワシャー風味)

500mlタイプのパック飲料です。

近所のファミマに売っていたので、「シイクワシャー風味」を見てちょっと不安な気持ちになりつつも購入。

えーーっと。

甘酸っぱい果実っぽい味+やや甘ったるさ(はちみつ?)がして、最後にお酢のピリっとした酸っぱさがきます。

でもなんか飲んではいけないものを飲んでるような感覚に襲われます。


・・・・・ちょっと胃液ぽい?とか言っちゃだめですかそうですか。

2005.08.27 | Comments(0) | Trackback(0) | 食べ物

Lightweight Language Day and Night

http://ll.jus.or.jp/2005

行きたかった・・・。
slashdot経由で直前に知ったのが残念でした。

それにしても、こういうところにLuaがないあたりまだまだマイナーですね。
もうちょっと普及してもいいと思うのですが。

2005.08.27 | Comments(0) | Trackback(0) | プログラミング

[Lua] 暗黙のグローバル変数定義を抑制する方法

あれからいろいろML内を探し回って、

このあたりとか
このあたりとかを参考にしましたが・・・

とりあえずこんな感じになりました。
プログラムの最初で

use_explicit_globals() 

とすれば有効になり。

global("変数名",値) 

または
global "変数名" 

でグローバル変数を定義できます。

定義していないグローバル変数に値を代入したり使ったりすると
ランタイムエラーになります。

これで前回書いた「弊害」はほとんどなくなるかなと思います。
あくまでテストは甘いのであまり信用しないように・・・。

※このコードは自由に使ってもらってかまいません。

追記:このあと少し修正しました。>こちら。


【“[Lua] 暗黙のグローバル変数定義を抑制する方法”の続きを読む】

2005.08.25 | Comments(0) | Trackback(0) | Lua

[Lua] 暗黙の変数定義の闇

Luaでは、他のスクリプト言語でもよくあることですが、

 a=10 

というような代入によって暗黙にグローバル変数aが定義されます。これは「ちょっと動作を試す」ような場合には便利ですが、大きなプログラムの場合には問題を引き起こすことがあります。このことについて解決策などの考察とメモ。


Luaでローカル変数を作りたい場合は、関数(ブロック)内などに
  local a=10 

とすれば、aはその行の後、ブロック内でのみ有効です。(ただしaがさらに外部から参照される場合は参照が残る限りガベコレされません。でもその話はここでは置いときます)

さて、そこで問題になるのが、グローバル変数の安全性についてです。
多少大きいプログラムになればよく起こりうるのが、以下のようなことです。

(A) グローバル変数の命名の衝突
(B) 名前の打ち間違いによる暗黙の新変数定義
(C) local宣言の付け忘れによって意図せずにグローバル変数が生成される

一番問題なのは、上記のことが起こった時に、警告されないということです。
警告されない問題ほど厄介なものはありません。デバッグが大変です。

解決手法について

  • 暗黙の変数定義ではローカル変数にして、global キーワードでグローバル変数を宣言することにする
     →Lua言語の仕様を変える話になってしまいます。Luaでは関数もグローバル変数であることなどから問題があり、あまり有効とは見られていないようです。

  • グローバル変数は、事前に定義したものしか使えないようにする
     →こちらを実現したいところです。VBでは Option Explicit でできますね。


具体的な解決策
というわけで、「グローバル変数は事前に定義したもの以外代入も使うこともできないようにする」という方式が良いのではないかと思います。言語的に用意されていてもよさそうなものですが、そこは「最小志向」のLuaです。あまりズバリの機能はありません。


  • Lua5.1(開発版)では、実行時コマンドラインの-wオプションで未定義のグローバル変数へのアクセスを捕捉できるようです。未定義のグローバル変数値を使おうとするとエラーになります。

     →Luaの仕様上、nil値を持つ変数と未定義変数が区別できないので、グローバル変数でのnil値の使用は諦めることになる。この場合false値などで代用可能。
      暗黙の変数定義を妨げるものではないと思われます。つまり、スペルミスやタイプミスなどをした場合・・・
      congratulations = 1
      conglatularions = 2

      これらは別の変数として正常に定義されてしまうでしょう。

  • グローバル変数を管理するテーブルのメタテーブルあたりをごそごそするとできそうですが、調査中。MLのどこかにあったような・・・

というわけで調査継続中。追記予定。

2005.08.25 | Comments(0) | Trackback(0) | Lua

なんとか

おおよそ体裁が整ったでしょうか・・・

僕の場合、こういうことをやり始めると終わるまでやめられないんですよぅ。

2005.08.25 | Comments(0) | Trackback(0) | 未分類

rockテーマのCSSについて

rockテーマなんですが、どうも書き込みのプレビューと結果が違うなぁと思ったらどうもpタグのマージンが0になっていたようです。

CSSを見てみたら、pタグが変なところで重複定義されてるので
マージンが全部ゼロになってた罠。

以下のpタグをコメントにすることで回避できました。
環境設定の「テンプレートの設定」からどうぞ。


.......

#search input.filedsize {
margin:0;
padding:0;
width:100px;
border:1px solid #999999;
}

/* ↓↓↓↓ ここの設定をコメントにして無効化
p{
margin:0;
padding:0;
}
*/

/********************************************/
/*        footer設定        */
/********************************************/

ついでにpreタグのCSSも設定してみました。
今後プログラムコードを晒すことも多くなるだろうし。
CSSに以下を追加すれば・・・


pre.code {
font-size:small;
line-height:1.1em;
background:#ffffff;
width:"90%";
padding:6px;
margin:4px;
border:1px solid #C8C8C8;
}

そして記事のほうには、

・・・
<pre class="code">
プログラムコードなど
</pre>
・・・

というように書けばいいわけです。

(あ、firefoxで見たらpreの中の行間がやたら広い・・・line-height:1.1em なのに・・・なぜだろう)

2005.08.25 | Comments(0) | Trackback(0) | 未分類

cocologログのインポート

いきなり失敗してやりなおし・・・EUCコードじゃないとダメって書いといてほしかったぁ。

cocologはUTF-8でログを吐くので化け化けで焦った。

2005.08.25 | Comments(0) | Trackback(0) | 未分類

FC2ブログことはじめ

ブログサービスを探索してついにこちらに辿り着きました。

cocologとかも試してみたのですが、アクセス解析が一切なくてぐんにょり。

livedoorはどうかと思ったら、契約内容のところにいかにもブログの書き込みを勝手に出版しますよみたいな内容があるようなのでぐんにょり。

そこでこちらに登録してみたわけです。
さてさてどうなることやら。

2005.08.25 | 未分類

Lua開発環境

Luaの開発はこれまでおおよそエディターにシンタックスハイライトつける程度の環境でやってきたのですが、最近はいくつかIDE(統合開発環境)も出ているようなので調べてみました。残念ながらあまり完成度の高いものは見つかっていないのが悲しい現実ですが、調査結果を晒しておきます。ちなみに、デバッグ機能がありそうなものだけ調べています。

LuaのAddon一覧:http://lua-users.org/wiki/LuaAddons

LuaEdit 2.4.1
○:GUIなどは比較的まとも。breakpointで止まることができ、watchなどデバッグ機能が一通り機能する。print()の結果をdebug outputに表示できる。ソースの日本語が表示できる。
×:関数内でbreakするとエラーが発生した(→2.3.1で解決)ほか、細かい操作でバグっぽい部分が多い。2.3.1ではプロジェクトへのファイルの追加がバグってます(→2.4.1で解決)。
バージョン2.4.1では割合まともになってきました。タブなどで日本語が化けますが、ファイル内では問題ありませんし、通常使用には耐えるように思われます。
2005/8/31 最新バージョン2.3.1の情報を追記
2005/9/7 最新バージョン2.4.1の情報を追記

VisualWx 0.85.5.7
○:エディター上で関数やブロックの展開・縮小ができる(VS.Netライク)
×:日本語は化ける。ブレークポイント設置できなかった。print表示がダイアログポップアップでうざい。使えないものがメニューに混ざっている。

LuaIDE 1.0 Final
なんか全体的に中途半端・・・
なぜかloadfile()やpairs()のような基本関数が使えない状態だったのでダメダメ。

B:Lua Alpha
GUIはなんかよさげだけど、Runしてもコンパイルしかしてくれなかったりと非常に謎。World of Warcraft用ぽい。

QDE 0.7.5
IDEというよりはエディタ。コードのコンパイルはできるけど実行機能はない。
日本語表示可能(フォント選択)、キーワード補完、関数のプロトタイプをインライン表示できる、関数やブロックの展開・縮小ができる(VS.Netライク)、Code Navigatorでオブジェクト一覧を表示できるなど、エディタとしてはかなり完成度が高い。(追記)・・・が、やや不安定

まとめると・・・IDEとしてはどうもオススメできるようなものはなく、LuaEditがまだマシというような状況です。まともなデバッガのついたIDEはまだ存在しないと考えたほうが良いようです。
QDEはLuaエディタとしてはよさそうです。
・・・と思ったんですが、突然プログラムが落ちる問題が発生してました orz

2005.08.23 | Comments(0) | Trackback(0) | Lua

Luaのコト

スクリプト言語Luaについて少々。
今までいろいろ使ってみていますが、十分安定しているし、速度的にもほぼ問題ないです。ちょっと面白い&あまり知られていない言語なので簡単に紹介しておきます。

Luaは非常に軽量で、自作アプリやゲームへの組み込みに適したスクリプト言語です。クラスや連想配列に替わって「テーブル」を基本的なデータ構造として採用しているのがとくちょう。このテーブルは、配列のようにも、連想配列のようにも、クラスのようにも使えるというすぐれものです。Lua5からはcoroutine(コルーチン)という軽量スレッドみたいなものが追加されています。

ライセンスがMITなので、GPLなどに比べて商用にも使いやすいという利点があります。
Luaは現在5.1work6が最新の開発版です。安定版の最新は5.0.2です。

気になる日本語対応ですが、残念ながらSJISで書いたソーススクリプトはそのままでは通りません。でもEUC/UTF8はそのまま使えます。そこで、SJISが通るように日本語化パッチを作られている方がおられます

当方でも独自にSJIS対応したので公開を画策中。

2005.08.22 | Comments(0) | Trackback(0) | Lua

新しい記事へ <<  | HOME |  >> 古い記事へ

広告:

カテゴリ展開メニュー

  • 未分類(13)
  • Lua(38)
  • プログラミング(11)
  • 食べ物(3)
  • SPAM(2)
  • ゲーム開発(4)
  • GIS/GPS/GoogleMaps(2)
  • スポーツ(1)
  • Skype API(1)
  • AR(1)

はてブ ランキング

ブログ全体: このWikiのはてなブックマーク数

プロフィール

はむ!

Author:はむ!
よく使う言語・環境:
C++,C,Lua,java,VBA,DB
たまにPHPとかjavascript
血液型:O型

メール: lua%ham.nifty.jp
(%を@に変えてください)
ついったー: @hammmm

Lua関連アンテナ

ブロとも申請フォーム

この人とブロともになる

全記事表示リンク

全ての記事を表示する

ブログ内検索


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。