2011-04-20
■ [雑談]OSC神戸2011
参加してきました。
私は午後からの参加でしたが、今回はあまりなでしこユーザーの方はいませんでした。
しかし、紹介&説明の中で興味を持っていただいた方は多かったので、まだまだこういったイベントでアピールするのは有効だなと感じました。
特に、オフィス連携の機能の食いつきが良かったです。また、文法機能に興味を示されることも多くありました。
#来場者の中に高専の先生がおられて、少し驚きました;;
説明の中でなでしこ2をC#で作成していることを言うのですが、まだβ公開などが出来るほどモノがないので、開発協力していきたいところです。
ただ、そのためには仕様や構成について、もっと細かく定めておく必要があると思います。
というわけで、以下、なでしこ2のしようについて話したことと、個人的所感など。
オブジェクト指向
参加者の中で話した限りでは、「あった方がいい」のではないかという見方でした。
私も、「あった方がいい」の立場です。
ただし、出来る限りその仕組みは、普通に使っている分には(特に初心者には)、見えないようにしてあるのが望ましいと考えます。
なぜなら、開発MLでも指摘されているように、初心者にとっては取っつきにくいものと感じてしまう可能性があるためです。
しかし、完全にオブジェクト指向的なものを排除してしまうと、ある程度プログラムを書けるようになったとき、
処理をまとめようとするときなど手続き的な仕組みだけでは物足りなくなって、なでしこから離れていってしまうことが懸念されます。
*加筆するかも*
名前空間
今のなでしこでは基本的に名前空間はファイル単位でしか存在しません。
私は、これに加えて少なくともプラグインごと、出来れば各プラグインの命令ごとに必要だと思います。
利点としては、例えばデータベースやオフィスなど、対象と接頭語が違うだけで意味は変わらない命令群などは、
接頭語を削除して定義し、名前空間を指定するようにすれば、名前空間を変えるだけで、まとめて動作を変えられて便利ということがあります。
また、接頭語が削除されることで命令が普通の動詞っぽくなって日本語らしさ向上すると思います。
#グループでも代用できますが……
中間コードの形式
コード生成の難易度は上がりますが、MSILで出力するのがよいかと思います。
独自コードの方がコード生成自体の手間は下がりますが、実行系は.NET/monoに投げられます。
これらに投げれば、少なくともWin/Mac/Linuxでは一通り動きます。レンタルサーバでもVPS(月1000円程度)ならmonoでいけます。
デバッガ
現在デバッガはvnako組み込みとなっていますが、ここは世の開発環境にならってエディタ側に組み込むべきだと思います。
利点としては、以前に少し話題になったexeに固めたけどデバッグウインドウでソースが見えるということが無くなります。
また、実行ファイル組み込みではそれぞれの実行ファイル(cnakoとか)でデバッガを作らなければなりませんが、エディタ側だと1回作ればOKです。
ブレークポイントの処理の対応も取りやすいですし、エディタ組み込みにしない手はないと思います。
エラー処理
現在のエラー監視では、エラーメッセージから、どの命令でエラーが起きたのかわかりにくい・finallyに相当する物がないという不便な点が存在します。
これを解消するために、エラーオブジェクトかエラー番号の導入と、finally節を導入した方がいいと思います。
例:
「」でエラー発生
エラーオブジェクト1のエラーならば
「エラー2」と表示
エラーオブジェクト2のエラーならば
「エラー2」と表示
最後に
「監視から抜けます」と表示
文字列と(二次元)配列の関係(変換)
A=「1,2,3,4
5,6,7,8」
A[0]を表示/*=>1
2
3
4
*/
文字列からの各種自動変換は便利なのですが、たまにとまどう挙動を見せます。
文字列<=>配列の例では、文字列Aの一行目を取得しようとA[0]とすると、2次元配列に変換され、Aは以降配列として扱われてしまいます。
ここでさらに「Aを表示」などとすると、最初にAへ代入したもの次第で、微妙に文字列に戻したときの表示が異なってきます。
これを抑制するため、この自動変換をオプションで切り替えられるようにした方がよいと思います。
(デフォルトをどちらにするかは更に議論する必要があると思います。)
インデクサ
グリッドへのアイテム設定がデータ全部をセッターで設定するようになっているため、毎回全部のデータを更新していて効率が悪い上、グリッドの選択位置がリセットされてしまいます。
なのでインデクサのような仕組みを用意し、ゲッターセッターの先が配列のようなものでも、個別に値を取得設定できるようになったら便利かなと思います。
例:
A実体とは配列
●A設定(V,I)
A[I]=V
●取得(I)
_=A[I]
Aとは配列 ←A設定 →A取得
A[1]は100
文字列の中のインデント無視
インデントされた行で複数行の文字列を書く場合、2行目以降で先頭のインデントを削除しないといけないので、少々見づらいです。
「あああ
いいい
ううう」と表示
これを、一行目と同じインデントの分の空白は2行目以降でも無視するようにすると、多少なりとも見やすくなるのではないでしょうか。
エディタの自動インデント挿入とも相性が良いはずです。
「あああ
いいい
ううう」と表示
余談ですが、ヒアドキュメントって私の手元のメモでは「元々改行含めた文字列がいけるからいらない?」って書いてありますけど、実装されていますね。
まあ、かぎ括弧含む文字列には有効ですが。
ハッシュのアクセス
ハッシュへのアクセスである@は左辺に変数しか取ることが出来ません。
これを拡張して、左辺に式が来てもハッシュへのアクセスと見なすようにした方がいいのではないかと思います。
そうすると、「A@B@C」を「(A@B)@C」と解釈可能になるので、ハッシュのハッシュが実現できます。
さらに配列へのアクセス[]も左辺に指揮を執れるようにすると、「(A@B)[0]」のように配列へのハッシュも実現できます。
ゲッターセッター変数での「それ」の変更
ゲッターセッター変数は関数と同じように動作していますが、使い方は普通の変数と同じなので、
普通の変数のつもりで使うと、ゲッターセッター変数の参照のあとで「それ」が書き換わってしまうので、「それ」が変わらないと思いこんでのうっかりミスに繋がる可能性があります。
2010-04-02
■ [雑談]HMAC-SHA1
OAuthやxAuthなどで使うHMAC-SHA1について、一部で要望があるようなので書いてみた。
一応NYSL書いてますが、ようは自由に使ってもらって結構&使って何があっても知らんよ、と言うことなのであんまり気にしないで下さい。
12:18追記:鍵が規定より長かったときの処理がおかしかったので修正。
※http://www.ipa.go.jp/security/rfc/RFC2104JA.htmlを参考に作成
/*
NYSL Version 0.9982
A. 本ソフトウェアは Everyone'sWare です。このソフトを手にした一人一人が、
ご自分の作ったものを扱うのと同じように、自由に利用することが出来ます。
A-1. フリーウェアです。作者からは使用料等を要求しません。
A-2. 有料無料や媒体の如何を問わず、自由に転載・再配布できます。
A-3. いかなる種類の 改変・他プログラムでの利用 を行っても構いません。
A-4. 変更したものや部分的に使用したものは、あなたのものになります。
公開する場合は、あなたの名前の下で行って下さい。
B. このソフトを利用することによって生じた損害等について、作者は
責任を負わないものとします。各自の責任においてご利用下さい。
C. 著作者人格権は しらたま/whiteball に帰属します。著作権は放棄します。
D. 以上の3項は、ソース・実行バイナリの双方に適用されます。
しらたま
http://whiteball.m7.coreserver.jp/
white_ball_11/hotmail.com
#*/
!B=64
!L=20
●HMACSHA1取得(秘密鍵で内容の)
#秘密鍵の長さの調整
秘密鍵のバイト数
秘密鍵からSHA1取得
2で行揃え
INT(「$」&対象)を秘密鍵の回数に「byte」でバイナリ設定#ハッシュ関数の出力のバイナリ変換
秘密鍵は秘密鍵のL バイト左部分
秘密鍵のバイト数
「{\0}」を(B-それ)だけリフレイン
秘密鍵は秘密鍵&それ
#鍵から作る2つの文字列の準備
文字とは整数
B/4回
文字はそれ
XOR(文字,$36363636)を鍵Iの(回数-1)*4+1に「DWORD」でバイナリ設定
XOR(文字,$5C5C5C5C)を鍵Oの(回数-1)*4+1に「DWORD」でバイナリ設定
経過とは文字列
経過にLを確保
2で行揃え
INT(「$」&対象)を経過の回数に「byte」でバイナリ設定#ハッシュ関数の出力のバイナリ変換
2で行揃え
INT(「$」&対象)を経過の回数に「byte」でバイナリ設定#ハッシュ関数の出力のバイナリ変換
経過を戻す
#出力確認
鍵とは文字列
#適当に鍵生成
鍵にBを確保
B 回
鍵で「こんにちは」のHMACSHA1取得
EviThat saves me. Thanks for being so sesnbile!
2010-02-06
■ [雑談]なでしこ基礎文法最速マスター
完全に出遅れた!
結構書くの大変ですね、これ。ツッコミ募集。
参考:
Perl基礎文法最速マスター - Perl入門~サンプルコードによるPerl入門~
http://d.hatena.ne.jp/perlcodesample/20091226/1264257759
Route 477 - Ruby基礎文法最速マスター
2008-12-07
KikiThat's a wise answer to a tirkcy question
ddfgdzrc4UtyA0 , [url=http://gmuogzgzqcce.com/]gmuogzgzqcce[/url], [link=http://uxpwyysgfjgu.com/]uxpwyysgfjgu[/link], http://dfgqdizihrxf.com/
bghzrsrrSEqRJI <a href="http://asxotnuspxyt.com/">asxotnuspxyt</a>
opkesyEmntQp , [url=http://kvbdzlsbguda.com/]kvbdzlsbguda[/url], [link=http://txnnkytmliej.com/]txnnkytmliej[/link], http://qffgbamdahnq.com/
ここに書かれてあることには激しく同意です!!
改行をそのまま配列にするモードと
CSVなどの利用する際にシンプルに処理できるように
明示的に配列の区切り文字を選べるモードなどの切り替えなどもあれば良いと思います。