2008年6月23日月曜日

ぐぐらんとす

http://satoshi.blogs.com/life/2008/06/post-2.html
回答を、楽をして手に入れることがなぜいけないの?

時代が違うから課題の出し方を変えればいいのに。
ぐぐること前提で、それでヒットすることに対する意見とか。
得られる知識の不備を予測して出題するとか。

出題者がぐぐり不足ではないのかな。
なぜ調べて出てくるようなことを求めるのか。

2008年6月20日金曜日

VimのPythonコメント

vimでPython編集中にコメントを入力しようと"#"を入力すると、行頭にカーソルが移動してしまう。

~/.vim/indent/python.vimに以下を入力すれば、適切な位置でコメントを書ける。

setlocal indentkeys=!^F,o,O,<:>,0),0],0},=elif,=except,0#

via http://henry.precheur.org/2008/4/18/Indenting%20Python%20with%20VIM.html

2008年6月11日水曜日

netmask

IPアドレスの制限で、ネットマスクの対応が見つからなかった。
128.255.63.0/24なら
アドレスを16進数に直して80ff3f00と2**24-1<<(32-24) & targetを比較すればいいのかな?

式はいくつか思いつくけど、正攻法はどんなものだろうか。
  • 2**32-(1<<32-m)
  • 2**m-1<<32-m
  1. def ip_valid(addr):  
  2.   for s in IP_RANGE:  
  3.     t = s.split('/')  
  4.     if len(t) == 1:  
  5.       ip = t[0]  
  6.       mask = '32'  
  7.     else:  
  8.       ip = t[0]  
  9.       mask = t[1]  
  10.     mask = int(mask)  
  11.     n = ip2num(ip)  
  12.     if ip2num(addr) & 2**32-(1<<32-mask) == n:  
  13.       return True  
  14.   return False  
  15.   
  16. def ip2num(ip):  
  17.     n = 0  
  18.     for i in ip.split('.'):  
  19.         n <<= 8  
  20.         n += int(i)  
  21.     return n  
  22.   
  23. IP_RANGE = [  
  24. '210.153.84.0/24',  
  25. '123.108.237.9',  
  26. '202.179.204.0/24',  
  27. '61.202.3.0/24',  
  28. ]  

2008年6月3日火曜日

sqldiffが非常に便利
./manage.py sqldiff appname
とすると、DBとappname/models.pyの相違を表示してくれる。
今まで、models.pyを変更すると差分がつかみづらい部分があったのでこれは便利。
Migrationまでの道のりは遠いけど。

DBMigrationが使えればもっと便利なんだろうけど、とりあえずはこれでOK。