ninjam はじめてみた

先月辺りから。楽器: Gibson ES-335, Monster Cable JAZZ, Line6 PODx3 pro - ソースコードも公開されてるので、コード・リーディングも開始。 開発言語は C++ 共通ライブラリの WDL 内に null soft の jnetlib Chat機能 - IRCクライアントみたいなコマンド…

Python - dictproxy

immutable な辞書が必要になったので。 from ctypes import pythonapi, py_object from _ctypes import PyObj_FromPtr PyDictProxy_New = pythonapi.PyDictProxy_New PyDictProxy_New.argtypes = (py_object,) PyDictProxy_New.rettype = py_object def make…

[Python] module maze

#!/usr/bin/env python import new from random import choice, randint from string import ascii_lowercase def randword(n=8): return ''.join([choice(ascii_lowercase) for _ in xrange(randint(1,n))]) __all_modules = [] def generate_module_maze(m…

FileField 日本語ファイル名

- 開発版(0.97pre)だとファイル名が日本語の時、ファイル名が変更されてしまう。 - メール送信(django.core.mail利用)時の添付ファイルでも同様の現象あり。 class JFileField(models.FileField): def get_filename(self, filename): return filename.decode…

[Python][Django] dummy settings / and debug SMTP sessions

# 初期化 # dummy/__init__.py DJANGO_SETTINGS_MODULE = 'dummy.settings' import os os.environ['DJANGO_SETTINGS_MODULE'] = DJANGO_SETTINGS_MODULE from django.conf import settings settings._import_settings() __all__ = ['settings'] # 設定 # dum…

[Python] ブロック・ローカルな変数

実装してみた。 from __future__ import with_statement from contextlib import contextmanager import inspect @contextmanager def lexical_scope(*args): frame = inspect.currentframe().f_back.f_back saved = frame.f_locals.keys() try: if not args…

遅延リストを使った解

from itertools import imap, izip, cycle fizz = cycle(['','','Fizz']) buzz = cycle(['','','','','Buzz']) for num,text in izip(xrange(1,101), imap(''.join,izip(fizz,buzz))): print text or num xrange ... xrange(1,101) 1から100までの数値範囲の…

[Python] Python 2.5 Changes

Conditional Expression # Conditional expression value = (B if A else C) # 問題点: Aが真でも B が 偽 と判断された場合 C を返す value = (A and B or C) # 利点: lambda式 中に条件分岐が書ける PEP 343 - 'with' statement (./Lib/test/test_with.py,…

[Python][Ruby] mini-pickle (solver for pythonchallenge level 5)

Few days, I was having fun with pythonchallenge.com as you do. I like the idea of the challanges, I think any programmers could enjoy it. but unfortunally. it requires some Python specific modules. fmm...there are hints which hard to notic…

[Python] pickle でCODEオブジェクトをシリアライズ (yat another way)

from new import * import pickle, marshal, struct CODE='C' # opcode(CODE)が重複していないか確認する if (not pickle.Pickler.dispatch.has_key(code) and not pickle.Unpickler.dispatch.has_key(CODE)): def save_code(self, obj): """保存用メソッド"…

[Ruby] pikeのような文字列操作の拡張

class String def -(c) delete c end def /(c) split c end end p "foo,bar,baz" / "," # => ["foo", "bar", "baz"] p "hoge\nhoge\n" - "\n" # => "hogehoge" TODO How to do it in Python ?

登録してみた. http://rubyforge.org/projects/rupy/ RuPy Marshal # marshal_dump.py ... データ作成の為のPython script import sys, marshal def main(filename="test.dump"): data = [ 10, 10.0, -10000, os.environ.get('USER',None), ['foo@example.or…

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(…