Hello world !

2003 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 09 | 12 |
2005 | 02 | 05 |
2006 | 09 |
2007 | 05 | 08 |
2008 | 05 | 10 |
2009 | 07 |

2009-07-31 ninjam はじめてみた

先月辺りから。

楽器: Gibson ES-335, Monster Cable JAZZ, Line6 PODx3 pro


----

ソースコードも公開されてるので、コード・リーディングも開始。

  • 開発言語は C++
  • 共通ライブラリの WDL 内に null soft の jnetlib
  • Chat機能

- IRCクライアントみたいなコマンドがある

- /me ... 自分の状態を通知する。独り言コマンド? e.g. /me brb phone

- /msg ... 私信。個人宛メッセージ。 ( /msg username message )

- /clear ... 会話ログのクリア

- 他、管理者コマンドっぽいもの /admin, /kick, /bpi, /bpm, /topic

2008-10-26 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_dictproxy(obj):
    assert isinstance(obj,dict)
    return PyObj_FromPtr(PyDictProxy_New(obj))

from types import DictProxyType as dictproxy

使い方: makedictproxy(辞書オブジェクト)

dictproxy は isinstance でのチェック用。


dictproxy({}) # TypeError, インスタンス生成出来ない。

追記:

書き終わってから、types.DictProxyType がある事に気付く。(コード修正)

元のコードは、dictproxy = type(type('',(),{}).__dict__) だった。

更に後から気付いたけど。

毎回無名のクラスが作られるのさえ気にしなければ、これでも良かった。

make_dictproxy = lambda dictobj: type('',(),dictobj).__dict__

追記2

dictproxy は == immutable dict ではないので、

誤用だからデータ保護等の用途には使わないほうがいいらしい。

ImmutableDict クラス作る方が確実。

 a = dict(val=20)
 b = make_dictproxy(a);
 a['val'] = 10
 print a, b

引数に直接リテラル記述すると隠せるけど。

問題は、make_dictproxy 側で使い方をチェック出来ない事とか。

 d = make_dictproxy({
  ...
 })

2008-05-15 Python - Module maze

[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(module, num=8, depth=0):
    if depth > 0:
        k = randint(1,num)
        for n in xrange(k):
            name = randword()
            new_module = new.module(name, '')
            __all_modules.append(new_module)
            setattr(module, name, new_module)
            generate_module_maze(new_module, num, depth-1)
        for n in xrange(num - k):
            old_module = choice(__all_modules)
            name = old_module.__name__
            setattr(module, name, old_module)

root = new.module('root')
generate_module_maze(root, depth=5)
choice(__all_modules).__doc__ = 'GOAL'
#def answer():
#    return [m for m in __all_modules if m.__doc__ == 'GOAL'][0]
del __all_modules

if __name__ == '__main__':
    import maze
    # Find the module which has docstring 'GOAL'
    print dir(maze.root)

2007-08-24 [Django] FileField 日本語ファイル名


- 開発版(0.97pre)だとファイル名が日本語の時、ファイル名が変更されてしまう。

- メール送信(django.core.mail利用)時の添付ファイルでも同様の現象あり。



 class JFileField(models.FileField):
     def get_filename(self, filename):
         return filename.decode('utf-8') # デコード適当

2007-08-12 [Python][Django] dummy settings / and debug SMTP sessions

[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']
 # 設定
 # dummy/settings.py
 EMAIL_HOST = "mail.example.com"
 EMAIL_PORT = 25
 EMAIL_HOST_USER = "foo"
 EMAIL_HOST_PASSWORD = "********"
 EMAIL_USE_TSL = False
 # メール送信(debug smtp) サンプル
 import dummy
 from smtplib import SMTP
 from django.core.mail import send_mail

 SMTP.debuglevel = 1

 if __name__ == '__main__':
   send_mail("test mail", "Hello.", "me@example.com", ["you@example.net"])