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

プログラミングテクニックのまとめ

とりあえず思いついたもののまとめ。 まずは、ベーシックなものから。 変数のスコープをなるべく狭くしろ 他はグローバル変数を使うなとか、モジュール化と界面を意識せよなど。とにかくスコープは重要かつ意外と奥が深い。スコープに関係する機能は、モジュ…

関数にコードブロックを渡す

PythonでRubyのようにコードブロックを渡すやり方。デコレータを利用する。 >>> def each(L): ... def each_(func): ... for x in L: ... func(x) ... return each_ ... >>> L = range(10) >>> >>> @each(L) ... def pr(x): ... print '<', x, '>' ... < 0 > …

富豪的プログラミングとデータ構造

LLなPythonを使うようになって気づいたのだが、自分が仕事で作成する処理の大部分のデータ構造はユーザ定義のクラスを作成する必要なく、組み込みクラスの組み合わせ済んでしまう。最近仕事でJavaを使うようになって複数のデータをある関数の出力として返し…

変数名と値の一覧を限定的にソースコードから取り出す

以下、parse_vars.py # coding: cp932 from compiler import parse, walk, ast class Visitor: def __init__(self, vars_d): self.vars_d = vars_d def visitAssign(self, node): var, val = node.getChildren() if isinstance(var, ast.AssName): if isinst…

メモ

forest book: Python の対話型プロンプトで補完機能を使う (http://d.hatena.ne.jp/t2y-1979/20080901/1220195104) 標準で入っていても良さそうだがreadlineモジュールは標準で入っていない。あとはPygmentsか何かでシンタックスハイライト機能もあったら面…

インタプリタ

『初めてのRuby』トークイベントの動画を見ていたら、Yuguiさんという人が、「Perl初心者の頃、後の方にある処理にエラーがあると前の方にある処理が実行されないところでつまづいた」というような発言をしていた。『初めてのRuby』では、そういうところを解…

unhashableなオブジェクトを辞書のキーにする

以下hashableな辞書クラス。 >>> class dict2(dict): ... def __hash__(self): ... return sum(sum(ord(x) for x in xx) for xx in self) ... >>> D = {} >>> D[dict2({'a':[], 'b':None})] = 1 >>> D[dict2({'a':[], 'b':None})] 1 以下hashableなリストク…

レキシカルスコープとダイナミックスコープ

Pythonはレキシカルスコープ(静的スコープ)である。Pythonは動的スコープの機能はない。 >>> x = 99 >>> def fooA(): ... print x ... >>> def fooB(): ... x = 1 ... fooA() ... >>> def fooC(): ... x = 2 ... fooA() ... >>> fooB() 99 >>> fooC() 99 foo…

文字コード

HDEラボ: PythonのUnicodeEncodeErrorを知る (http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html) PythonMatrixJp: 日本語文字列コード問題まとめ (http://python.matrix.jp/tips/string/encoding.html) Effective Python: 文字コード (http://mo…

メモ

変数はファーストクラスオブジェクトではないので、変数から変数名を取得できない。 変数から変数名を直接取得する簡単な方法がないので、取得したい場合は、リストや辞書などで関連付けしておく必要がある。 変数に関数オブジェクトを代入する場合は、関数…

辞書のキーと値を入れ替える(2)

例えば、辞書Dに対して以下のようにキーと値を入れ替えられる。dict(zip(D.values(), D)) 但し、これには以下の2つのことに注意する必要がある。 unhashableな値はキーになれない 重複した値は違うキーになれない この2つの事柄はdictに関する基本である。こ…

辞書のキーと値を入れ替える

牌語備忘録: 続・辞書のキーと値を入れ替えをPythonでやってみたの速度を計測してみた (http://d.hatena.ne.jp/CortYuming/20080811/p2) import timeit from timeit import Timer from operator import attrgetter a1 = """ def d_change_a(d): di = {} for …

ロベール本

C++を使う必要があり基礎から勉強しなおしたいと思って、『ロベールのC++入門講座』という本を買った。かなり内容がまとまっており、久しぶりのヒットだった。C++のこういう本を待ち望んでいた。C++は文法が細かいので、今まで網羅的にまとまった本がなかっ…

Google Chart API

ウェブブラウザにグラフを表示する方法を探していたらGoogle Chart APIというものを見つけた。以下のようなグラフが簡単に書ける。 Google Chart API デベロッパーガイド (http://code.google.com/intl/ja/apis/chart/http://code.google.com/intl/ja/apis/c…

OCaml本

『プログラミングの基礎 (Computer Science Library 3)』 http://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-1160-1 OCamlでプログラミングの基礎を押さえる本らしい。結構面白そう。

MixinによるDuck Typing

d.y.d: イヌネコ (http://www.kmonos.net/wlog/88.html#_1337080801) リンク先の話題とは何も関係ないが、PythonでMixinを使用してDuck Typingを書いてみた。speakメソッド以外に共通のメソッドが増えれば、DRY原則から通常は継承することになるが、別に継承…

The Get and Put Principle

『Java Generics and Collections』本の項目2.4のまとめ。 ワイルドカード使用に関する原則: 値をgetする場合は、extendsワイルドカードを使用 値をputする場合は、superワイルドカードを使用 getとput両方行う場合は、ワイルドカードを使用しない まずGene…

Round1

Round1AとRound1Cに参加したが、それぞれRank1304とRank1497で、各サブラウンドのどれかでRank840まで入らないとダメなので、ダメだった。 Round1CのBは小町算問題で、式を作ってevalしたが、遅すぎて4分以内に結果が出なかった。小町算のパフォーマンスの良…

集合知プログラミング

TRIVIAL TECHNOLOGIES 2.0: 集合知プログラミング - Web世代のアルゴリズム読本 (http://coreblog.org/ats/programming-collective-intelligence) サンプルコードがPythonということで買い。考え方を仕事にも応用できそう。

DLL内の関数の呼び出し

VBA

Cで作成したDLL内の関数をVBAから呼び出す時に、配列に値を戻す場合、VBA側でどう書くか、以下の記事が参考になったのでメモ。 [VB5] Visual Basic 5.0 から呼び出し可能な DLL の作成例 (http://support.microsoft.com/kb/410837/ja#top) Win32API(C言語)…

Qualification Round

何とか通過できた。その日は出張と飲み会があったので危なかった。次くらいが危ないかな…。

Google Code Jam 08

k.inabaさんの日記で今知ったが、明日からGoogle Code Jamだった。参加しよう。 追記: Practice ProblemsのA.Alien NumbersのSmall inputをSubmitしてCorrect!と出たが、結果に反映されない。ページのバグだろうか?

メモ

http://gihyo.jp/dev/feature/01/mercurial/0001 http://www.tektek.in/d/blog/23/

execによるmixin

以前の自分の日記(2008/2/21、2008/2/22)でimportによるmixinの方法を書いたが、『まるごとRuby!』のartonさんの記事を見て、execにより実現できることに気がついた。文字列を動的に作っても良いので結構応用範囲は広いと思う。k.inabaさんの『わなD』に似た…

Ruby本

初めてのRuby (http://d.hatena.ne.jp/nishiohirokazu/20080622/1214132228) 『初めてのRuby』面白そう。買ってみようかな。内容全く見ていないけどPythonでいうところの『Pythonチュートリアル』みたいなものかな。そういえば、今年のRuby会議終わったみた…

OMeta

k.inabaさんの日記を見てOMetaというものを知った。かなり面白そう。PyMetaというものもあるらしい。情報がもっと増えれば勉強しやすいが、誰かまとめてくれないかな。 http://www.cs.ucla.edu/~awarth/ometa/dls07-slides.pdf The idea prototype ... shoul…

Plone本

柴田さんの『Plone完全活用ガイド』が、今日発売らしい。次回の転職先はWeb系ではないので、Ploneを使う確率はかなり低い。但し、少し勉強したいのでとりあえずDjango本を読みたい。

GaucheのTech talk

sshi.Continual: Tech talk: Gauche Scheme (http://d.hatena.ne.jp/sshi/20080523) shiroさんというGauche作者の動画を見た。shiroさんの講演を初めて聞いたが、深い話が多くすばらしい。Schemeのすばらしさを色々理解できた。 ある意味Schemeはパフォーマ…

メモ

偏った言語信者の垂れ流し: 再帰可能な回数の上限を変更する (http://d.hatena.ne.jp/nullpobug/20080607/1212846281)

結婚式

おとといの6月8日に結婚式を無事終えた。楽しかった。 7月1日から新しい職場になるので、家庭と仕事と勉強が大変。明日から1週間沖縄に新婚旅行。 最近仕事の引継ぎが忙しく日記も停滞していたので、全て終わったら色々記事を書きたい。