2012-01-01から1年間の記事一覧
私は6年前2006年の11月に購入したDELLのノートPC、XPS M1210をいまだにメインPCとして使っているのですが、今回HDDをSSDに換装してみました。そもそもはWindows 8が出たことだしそろそろ新しいPCがほしいと思いストレージの価格などを調べていたのですが、SS…
先日の記事にも書きました任天堂のCode Puzzleを解いた際、結果的には使わなかったのですが試行錯誤の仮定でエラトステネスの篩を書いたので更新頻度の低さをごまかすために載せときます(^_^;) def eratos_sieve(max_num=NUM): prime = [True] * max_num pri…
GAEやPythonの勉強を中断してずっと挑戦していた任天堂のCode Puzzleがやっと最終問題まで解けました。 この問題は9月中頃ツイッターなどで話題になっていたようなのですが、私は10月に入ってから知りせっかくPythonを勉強中だしやってみようと挑戦を始め2週…
先日の記事で書いていたセッションのコードをwebapp2のセッション機能を使って書きなおしてみました。コードはサンプルのものと全く同じです。 class BaseHandler(webapp2.RequestHandler): def dispatch(self): self.session_store = sessions.get_store(re…
これまで書いてきたGAEのコードではブラウザからの入力データを受け取るたびにページを再描画する方法で画面を更新していましたが、今回ブラウザ側はJavascriptを使ってデータの送受信を行うように改造してみました。 ページ全体を描画するのは最初のアクセ…
昨日の記事で書いたmemcacheに関する内容に2点間違いがありましたので訂正です。1つ目はmemcacheにはリストを保存できないと書いたことです。memcacheにはリストを保存できないのでJSON化した上で文字列として保存していると書いたのですが実際はリストや辞…
前回のcookieを用いたセッションを書いてみました - 主にプログラムを勉強するブログという記事ではサーバー側のセッションの保存にデータストアを使用していたのですが、memcacheを使用するように書き換えてみました。データストアを使用する場合、エンティ…
webapp2などGAE標準添付のフレームワークにもセッションの機能は用意されているのですが今回は勉強の意味も込めてcookieを利用した簡易なものを書いてみました。 IDとパスワードを用いたログイン・ログアウトの機能を持つものではなく単に利用者を識別するだ…
以前書いていたコードではPythonによるプログラム本体に、出力するHTMLがすべて文字列として埋め込まれていたため、HTML編集にIDEによるアシストや構文チェックが使えないのを不便に感じていました。 そこでテンプレートの機能を使ってPythonのコードとHTML…
表題の通りなのですが私は最近までJavascriptの連想配列のキーにはマルチバイト文字が使えないものだと思い込んでいました。(実際は使えます)Pythonでは使っていたにも関わらずJavascriptでは使えないと思い込んでいた理由は、Javascriptにおいては「連想配…
この記事の内容はすべてECMAScript5に基づいているのでIE8などでは違う結果になります以前書いた記事で{toString : valueOf}という記述の意味について考えたのですが、コメントで間違いを指摘して頂いたので改めて書きたいと思います。今回は簡単のために以…
今回はDatastoreを使ってみました。 チュートリアルではGQLというデータベースを操作するための言語を使用した例を中心に説明されているのですが、こちらの記事などによるとGQLはこれまでにSQLを経験したことがある人がGAEを容易に使用できるようにするため…
いつの間にかGoogleのサイトにPython2.7向けのGoogle App Engineチュートリアルができていたので改めて最初から読んでみました。 以前Google app engineと文字コードという記事を書いた際にはPython2.5を使用していたのですがこの時とは少なからず仕様の変更…
前回できるだけ少ないコード改変でEclipseでもコマンドプロンプトでも文字化けしない方法について書いたのですが、コメントで "sys.stdout.encoding"という属性があることを教えていただきました。 これは現在の実行環境で標準入出力をどの文字コードで行な…
今回はPython2.7でprint文以外で発生する日本語の文字化けについて書きたいと思います。 print文での文字化けについては以前書いたので以下の記事を参考にしてみてください。 Pythonの日本語の扱い - 主にプログラムを勉強するブログ Pythonで日本語が文字化…
前回のエントリでdoctestの実行方法についてコメントで教えていただいたので新たに書き直しました。まず昨日のエントリで私が書いていたコードは def main(initial=u"あ", inputsource=multi_input_reader()): u""" 正常パターン >>> main(inputsource=[[u"…
先日の記事に対して「標準出力のテストにはunittestよりdoctestのほうがいいよ」と教えていただいたのでdoctestを書いてみました。書いていて気づいた点なのですが、doctest内でunicode型文字列を使いたい場合、docstring自体をunicode型にしておく必要があ…
前回のコードではmulti_input_reader関数がmain関数のローカル変数である"usedwords"を引数としていたためmainとmulti_input_readerの分離が悪い、と書いていましたが、この問題への対処としてmulti_input_reader関数は引数を取るのをやめ入力の受付のみに特…
先日のコードに頂いたコメントを参考に一部を書き直しました。今回最大の変更点は入力を受け付けるmulti_input_reader関数をジェネレータにし、従来main関数に書いた"while True"で行なっていた全体のループをこのジェネレータで管理するようにしました。 そ…
前回のコードではshiritori.Furiganaクラスのインスタンス作成を子スレッドで行なっていたのですが子スレッドで発生した例外は親スレッドのtry文では受け取れないことが分かったのでこの処理は親スレッドで行うように変更しました。 この処理を含め、スレッ…
まず先日書いたコードはしりとりの最重要ルールの一つである「同じ単語は二度使えない」ルールを判定するための処理を丸々書き忘れていました(^_^;) 文字通り「忘れていた」んですが入力を受け付ける部分も関数ではなくクラス化して継承すればそういったミス…
前回のエントリまでに書いていたはてなキーワードしりとりは という処理だったのでAPIからのXMLを待つ時間が長くなってしまっていました。 APIに問い合わせて返答を待つ時間はローカルのみで処理するほかの処理と比べて時間がかかるからです。そこでこれを解…
その6のコードには昨日、一昨日の記事に書いていたイミュータブルな型の継承に関する間違いがあったのでそれを修正しました。 また例外が発生した際に従来は「この単語ははてなキーワードに登録されていませんでした。」というような表記だったのですが「『…
(5/16追記。このエントリの結論は違っていました。コメント欄をご覧ください。)昨日の記事でunicodeクラスを親として作成したクラスが思い通りに動かなくて嵌っていると書いたのですが、これは 「unicode型がイミュータブルだから」 ということのようです。i…
unicodeクラスを継承したクラスの挙動で嵌っていることがあるので書いてみようと思います。 下のようなunicodeクラスを継承したTestというクラスを作ります。xという引数が1つだけありインスタンスが作成されると同時にそれを表示するというクラスです。この…
先の記事で「例外処理をクラスにする意義がわかった」なんて書いてしまったのですが分かっていませんでした(^_^;) それどころか大きな勘違いをしており先のコードには致命的な間違いがありました。 またクラス変数についても重大な勘違いをしているところが…
前回書きなおした例外処理ですが、せっかく専用の例外クラスを作成したにも拘らずどの例外が発生したかを判別する処理がクラスの外(main関数)にあるという本末転倒になっていたので再度書きなおしました。 自分でもどうもしっくりこないと思いながら書いては…
記事にも書いていましたが前回のコードは例外処理があまりにも煩雑だったので改めて例外処理を書きなおしました。どうすればすっきり分かりやすくて且つ期待通りの例外処理ができるかを考えるためにまず処理したい例外を整理します。 入力された単語が既に使…
前回のコードは処理の流れ自体はほぼ満足のいくものだったのですが、main関数に直接記述している処理が多かったのでそれを減らすように書き直してみました。 コードがかなり長くなってしまったので今回はエントリの最後にコードを載せています。前回のコード…
前回のエントリに引き続きコメントでご教示いただいた内容を元にコードを書きなおしてみました。 # coding: utf-8 import urllib import urllib2 from xml.dom.minidom import parse def input_reader(text): """入力を受け取ってunicodeオブジェクトにして…