白黒つけるぜ

世の中、潜在ゼブラーマンな人が案外多いと思う。

白黒つけたい気持ちはあるが、白黒つけられない現実があるから、波風たてないように生きているような人。

そのギャップがストレスになっていくのかな。

そういえば、映画「ゼブラーマン」は渋谷駅のビックカメラがあるビルの映画館で見たのだが、映画が終わった後、外に出たら音楽デモみたいなのを大規模にやっていたため、少しの時間、現実に戻れなかった覚えがある。

Share

リファレンス見ないでやっていたら3分くらいクラスのメソッドが動かなくて悩んだ

リファレンス見ないで昨日のスクリプトをクラスで実装してみた。

"ナベアツ問題"
class nabeatsuQuestion:
def createReader(self):
"ナベアツ問題を読み上げる人を作る"
def reader():
"読み上げる人"
def isFool(value):
"3の倍数と3の付くときあほである"
if value % 3 == 0:
return True
if str(value).find('3') >= 0:
return True
def isDog(value):
"5の倍数で犬である"
return value % 5 == 0
outputValue = ''
if isFool(reader.value):
outputValue += 'fool!'
if isDog(reader.value):
outputValue += 'bow-wow!'
if outputValue == '':
outputValue += str(reader.value)
print outputValue
reader.value += 1
return reader
reader.value = 1
return reader
instance = nabeatsuQuestion()
runner = instance.createReader()
for i in xrange(1,40,1):
runner()

そうしたら、instance. createReader()のところで引数がどうのこうのって言われたので、小3分くらい悩んだ。

どうも、引数にselfを用意しておかないといけないようで。

"ナベアツ問題"
class nabeatsuQuestion:
def createReader(self):
"ナベアツ問題を読み上げる人を作る"
def reader():
"読み上げる人"
def isFool(value):
"3の倍数と3の付くときあほである"
if value % 3 == 0:
return True
if str(value).find('3') >= 0:
return True
def isDog(value):
"5の倍数で犬である"
return value % 5 == 0
outputValue = ''
if isFool(reader.value):
outputValue += 'fool!'
if isDog(reader.value):
outputValue += 'bow-wow!'
if outputValue == '':
outputValue += str(reader.value)
print outputValue
reader.value += 1
return reader
reader.value = 1
return reader
instance = nabeatsuQuestion()
runner = instance.createReader()
for i in xrange(1,40,1):
runner()

としたら動いた。

リファレンスはちゃんと読もうという教訓。

#はてな記法って便利

Share

外側のコードブロックの変数が見れなくなる理由がやっとわかった

と言われてしまった。

どうも、このままだと外側のコードブロックにある変数を見てくれないらしい。

だから、どうやってやるんだろうといろいろと調べていたら、どうも、下記コードのように配列とすると、外側のコードブロックにある変数にアクセスできるっぽい。

Pythonでのクロージャについて(追記あり) – NAL-6295の舌先三寸

で悩んでいた問題は

ある名前がブロック内で束縛されている場合、名前はそのブロックに おけるローカル変数 (local variable) です。 ある名前がモジュールレベルで束縛されている場合、名前は グローバル変数 (global variable) です。 (モジュールコードブロックの変数は、ローカル変数でもあるし、 グローバル変数でもあります。) ある変数がコードブロック内で使われているが、そのブロックでは定義 されていない場合、変数は 自由変数 (free variable)です。

4.1 名前づけと束縛 (naming and binding)

という事で、同じ名前の変数を使うと、そのブロックで新しく作られ、そのブロック全体で有効になるんですね。

Share

Google App Engineのすごく読ませるイントロページの日本語訳

4月8日昼、Impress WatchでGoogle App Engineの情報を入手し、早速アクセスしてみたものの時既に遅く待ち行列入り。やはり7時間の時差は痛かった。。未だinvitation届かない、そんな切なさを紛らす為にイントロページの日本語訳を作ってみた。

Google App Engineに嫉妬 – 暗号、数学、時々プログラミング

解説とか、読むの大嫌いなんだけど、一気に読ませてくれた。

参考になります。

Share

Pythonでのクロージャについて(追記あり)

Pythonでリファレンスを見ながら初めてコーディングしたためクロージャの実装で悩んだ。

最初、C#とかと同じ乗りで

def nabeatsu():
    value = 1
    def reader():
        isAho = value % 3 == 0 or str(value).find('3') >= 0
        isDog = value % 5 == 0
        if isAho:
            print 'あほ'
        if isDog:
            print 'わん!'
        if not isAho and not isDog:
            print value
        value = value + 1 #5/10まで間違ったサンプルになっていたのを修正(5/11)
        return reader
runner = nabeatsu()
for value in xrange(1,40,1):
    runner()

としたら、runner()を実行したときに、

valueなんてローカル変数無いよ。

と言われてしまった。

どうも、このままだと外側のコードブロックにある変数を見てくれないらしい。

だから、どうやってやるんだろうといろいろと調べていたら、どうも、下記コードのように配列とすると、外側のコードブロックにある変数にアクセスできるっぽい。

def nabeatsu():
    value = [0]
    value[0] = 1
    def reader():
        isAho = value[0] % 3 == 0 or str(value[0]).find('3') >= 0
        isDog = value[0] % 5 == 0
        if isAho:
            print 'あほ'
        if isDog:
            print 'わん!'
        if not isAho and not isDog:
            print value[0]
        value[0] = value[0] + 1
        return reader
runner = nabeatsu()
for value in xrange(1,40,1):
    runner()

でも、配列にする必要が無いので、ちょっと気持ち悪いと思って更に調べたら定義した関数にプロパティを持つことが可能らしく、結局下記のコードで落ち着いた。

追記:

下記の例でPythonのクロージャとして落ち着いたと書きましたが、runner = nabea2()でファンクションを取得した後、runner.value = 値で外部から変更できてしまうので(つまりvalueのスコープが広すぎる。)、結局、二つ目の配列を使った例が(気持ち悪いけど)クロージャなのかなと。

def nabea2():
    def reader():
        isAho = reader.value % 3 == 0 or str(reader.value).find('3') >= 0
        isDog = reader.value % 5 == 0
        if isAho:
            print 'あほ'
        if isDog:
            print 'わん!'
        if not isAho and not isDog:
            print reader.value
        reader.value += 1
    reader.value= 1
    return reader
runner = nabea2()
for value in xrange(1,40,1):
    runner()

nabea2メソッドの中でreaderメソッドを定義し、その後readerメソッドをreaderメソッドのvalueという名前のプロパティを1に初期化した上で戻り値として返しています。

Share

WindowsXPの提供期間は十分に長かったと思う

MicrosoftがWindowsXPを提供し続けている間にAppleはOSXをユーザに何回アップグレードさせたんだろう。

たまに見る

「Microsoftは既存のユーザを見捨てるのか。」

といった的外れな発言は、是非Appleに向けて言って欲しい。

それにしても、Vistaは、もっと熟成してから出せば良かったと思った。

それが許されない理由も分かるのだけれど。

個人的には、Vistaは嫌いじゃない。

Share

スーパーアグリF1チーム(SAF1)F1世界選手権から撤退

スーパーアグリF1チーム(SAF1)は、本日、F1世界選手権から撤退することを決定した。2006年からプライベーターチームとしてF1に参戦し、昨年はチーム結成22戦目(スペインGP)で初ポイントを獲得、2007年のランキング9位という成績を残したSAF1のF1における活動は本日、その幕を閉じることになる。

SUPER AGURI F1 TEAM | 2008年トピックス

GW中にあった一番悪いニュースである。

今年は、最初から財政難で初戦の参加すら危ぶまれていただけに、スペインGPまで見られた事は嬉しかった。

それでも、残念の一言しか出てこない。

「んー。」という感想だ。

もう少し、あと少しだけ彼らの雄姿を見届けたかったが、とりあえずは「お疲れさま。」といいたい。

Share
カテゴリー: F1

D02HWが届いた。そしてユーティリティが即強制終了

EMOBILEのアウトレットで買ったemチャージ用のD02HWが届いた。

最初から14000円分チャージがついて、17980円で購入したので、実質モデムの代金は3980円だ。

D01HWなら14980円だったんだけど。

早速MacBookで接続してみようと思い、ユーティリティをインストールしてみたのだが、どうも起動すると即強制終了する。

困ったなと思いつつ、ネットを検索したら、どうも同じ現象に悩んでいる人が結構いたみたいで回避方法が載っていた。

OSのネットワーク環境設定で新しくモデムが追加されているから、それのダイアルアップの設定をすれば良いらしい。

というわけで、早速やってみたら、ユーティリティが強制終了しなくなった。

(ダイアルアップの設定がNullだと駄目なのかな?)

その流れでemチャージ用の設定変更をし、emチャージのサイトに接続して、サービスの利用開始をして、スピードテストをしてみたら、

下り2.4Mbps 上り320Kbps

だった。

7.2Mbpsが上限なので、それには足りないけど、ネットで調べた感じだと悪くない数字っぽい。

とりあえず、満足。

たまにしか使わないので、使う時は1日定額640円プランで使えば良いかなと思う。

1MBあたり63円なので、1日定額で使った方が明らかに安全だ。

ちょっとスピードテストしただけで、5MBだったので、既に315円。

今日はもう使わないからいいけどね。

Share