2004-01-01から1年間の記事一覧

RubyObject

classを宣言した時に、(スコープ内に)クラスが既に存在していれば、 既存のクラスを拡張しそれを返す。Rubyの様なclassの振舞を提供するメタクラス。 import inspect class RubyMetaClass(type): def __new__(self, classname, classbases, classdict): try:…

[REBOL][Prototype]

REBOL [] person: make object! [ name: none age: none ] ; プロトタイプを生成 tea: make person [ name: "Tea" age: 24 ] probe tea ; probe はオブジェクトをdumpして表示する関数。 ; プロトタイプなので更に派生する事も可能。 foo: make tea [ name: …

[REBOL][HelloWorld] http://www.rebol.com/

REBOL [ Title: "Hello, world" File: %hello.r Date: 2004/12/20 Author: "Tea" ] print "Hello, world" REBOLの決まりで、REBOL の記述は最低限必要。実行時にチェックされます。 一行目に REBOL と書いておくと、vimでREBOLのスクリプトだと判断してくれ…

Stackframe

Pythonは、inspectionが優れていて 関数,コード,スタックフレームのオブジェクトにまで Pythonスクリプト上からアクセスできたりする。 import inspect def show_var(varname): """ 呼出元のローカル変数を表示 """ try: frame = inspect.currentframe() pri…

[Parrot][Python]

Python/Parrotの実装は現在3つ。 pie-thon (parrot ./languagesディレクトリ以下に収録) pirate (http://pirate.tangentcode.com/) pyrate (http://www.intertwingly.net/blog/2004/10/02/Pyrate) disやinspectモジュールのCPythonとの互換はどうなるのか気…

組み込み型 set, frozenset

ちょっと変な使い方かも知れないけど、応用で。 def uniq(args): return list(set(args))

sorted, reversed

式のなかで、リストの並べ変えが出来るようになり、 method chain や 副作用のないFPスタイルでのコードが書き易くなった。sortがcmd, key, reverseの引数を取るようになっので、 sortedでも第二引数以降にこれらのオプションを設定できる。

None constant.

と言う事で、Noneへの代入がSyntaxErrorになった。 でも、True, Flase への代入は相変わらず ... True, False = "A", "B"

[Python] 2.4

Releaseされたので早速インストール。新しい機能のテスト。 Generator Expression # 使い方: # リスト内包表現 [ ... ] の代わりに ( ... ) # リスト内包表現では新しいリストを作成して返す為、 # 巨大なリストをfor文で処理したい場合に、 # - 一時リスト…

be carefull to use Meta class *

不用意にメタ・クラスを多用するとコードがわかりづらくなるだけでなく、 オブジェクトやクラスの意味自体を変えてしまう事もあります。

[Ruby] evil-ruby

http://evil.rubyforge.org/コンセプトはわからないけど、become とか superclass= とか Class#as_module こんなのないかなぁ。。。と思っていたものがここにあった。 やってることは、おそらくCでの構造体レベルでのデータを変更したりしてる(はず だけど、…

let binding

def let(*values); yield *values; end def let(*values, &block) block.call(*values) if block_given? end example: let (metainfo['info']) { |info| info['name'] = name info['pieces] = pieces.join info['piece length'] = 2**18 } If write this wit…

Aversa [Ruby][BitTorrent]

http://aversa.rubyforge.org/ Aversa is a little utility for creating and viewing BitTorrent metainfo files. メタ情報ファイル(.torrentファイル)の表示と生成のみだけど、 トラッカーも作りそうな雰囲気。Net::BitTorrentモジュールとか作ってたので …

[JavaScript] (mozilla)

var code = uneval(this["function_name"]) code = code.replace("...", "...") // codeを編集 this["function_name"] = eval("(" + code + ")") uneval/evalを使って、macroの様な事が出来る。 これの応用でJavaScriptで継続を実装なんてデモがあった。LISP…

[PrUnit]

ソースを全部張り付けるには多き過ぎたので、 "test"で始まるメソッドを呼び出す処理の部分のみ。 def run(): for attrs in self.attrs_.items(): name = attrs[0] func = attrs[1] if name[:4] == "test": self.setUp() func{self}() # or self.attrs_[func…

About prototype base ...

Prothonの場合、 ClassとObjectだけでなく、ClassとModuleの区別もないようなきがする。 例えば、aspect.prに通常の関数として定義するだけで、 import 先からは aspect(class)のメソッドして扱う事も出来る。 Pythonではimportする名前はmodule名になる。

[AOP][Prothon]

Inspirated by http://www.jroller.com/comments/deep?anchor=aop_fun_with_javascript ( JavaScriptによるAspectの実装方法。)同じプロトタイプベースと言うことで、Prothonでも実装できないかなと考えてみた。 コードは prothon 0.1.2 向け。(APIはまだ安…

[Pike][Iterator]

Does pike really need Iterator object ? Even pike has foreach. Iterator it; foreach (it; int index; mixed value) { write("%2d\t%s\n", index, value); } // other way to do it. it->first(); do { write( it->value() + "\n" ); } while (it->next(…

Exchangeable Image File Format

I had noticed PHP HAD the function after I made that library. I was careless to search it =/PHP print_r(read_exif_data($filename, "TAG_ALL")); Pike Stdio.File file = Stdio.File(filename); mapping exif = Standards.EXIF.get_propaties( file )…

Gnu autotools 他

ポータビリティのあるMakefileを生成するconfigure(shell script)を生成する ツール郡(説明長)。とてもじゃないけど使いやすいとは思えない。 ディレクトリ構造だけでも何とかならないかな。 autogen.sh というシェルスクリプトを使うと雛型生成 => コマンド…

[Perl] WWW::MechanizeでBasic/Digest認証で保護されたページを読む

WWW::Mechanizeは、LWP::UserAgentを継承しているので、 LWP::UserAgentと同じ方法でBasic or Digest認証が出来ます。リクエスト発生からの処理の流れは、 LWP::UserAgent::get LWP::UserAgent::request LWP::Authen::[Basic|Digest]::authenticate LWP::Use…

[C言語][Preprocess]

#define debug_print(...) \ printf("debug: " __VA_ARGS__)

Prothon - changes note 0.1.0 to 0.1.1

"attrs" methods is now "attr_" attribute which contains attributes. the sample x extension module code here does not work with 0.1.0.

[Prothon] C extension

Mini.c /* Minimum extension module */ #include "prothon/prothon_dll.h" MODULE_DECLARE(Mini); MODULE_START(Mini) { Mini_OBJ = NEW_OBJ(NULL); MODULE_SET_DOC(Mini, "Sample module"); MODULE_ADD_TO_BASE(Mini); } DEF(Mini, sayHello, NULL) { retu…

WWW::Mechanize

WWW::Mechanizeは、LWP::UserAgent + HTML::TokeParser 相当の働きをしてくれるモジュール。(LWP::UserAgentのsubclass) 簡易ブラウザのシミュレートっぽいことが出来るので、WebTestUnit代わりに使える。WWW::Mechanizeのインストールでは、 make testの為…

Mixiの新着メッセージをチェックするスクリプト

biffって言う新着メールのチェックをするプログラムのMixi版。 使い方は、以下の perl script をシェルで適当に sleep 入れてループで回す。 #!/usr/bin/env perl use strict; use warnings; use WWW::Mechanize; my ($count, $agent); my ($email, $passwor…

欠陥ピースをチェックする方法。

ファイルの "piece length"バイト分のSHA hash値と、メタ情報ファイル(.torrent)に含まれる metainfo["info"]["pieces"] の 20 bytesを比較するとチェックできるらしい。BEncodingのソースは以前載せたので、.torrentのデコードにはそれを利用して。 require…

開発者向けリンク集

http://bitconjurer.org/BitTorrent/ http://btfaq.com/ http://wiki.theory.org/index.php/BitTorrentFAQ BitTorrentSpecification がBitTorrentの仕様。非公式な文書だけど。公式な仕様書は、実際にプログラムを実装するに当たっては少しわかり難くく、不…

Lazy programming in Eager language

http://www.bagley.org/~doug/ocaml/Notes/lazy.shtml OCamlでの遅延評価。Lazy Stream。Lazy to do Lazy programing in Eager lang. Lazyモジュールは、Schemeのdelay/forceみたいなもの。

HaskellのHumorのリンク http://www.haskell.org/humor/The Evolution of a Haskell Programmer factorial関数をいろんな方法で宣言。僕はSenior Haskell programmerに該当した。 http://www.willamette.edu/~fruehr/haskell/evolution.html let fac n = fol…