proglog

主にプログラミングに関する断片的メモ

[devel][python] Pythonの日付変換の悪夢とfeedparser

feedparserは重いけど手軽。
でも、その日付変換でいつもはまるのでメモ。

  • 日付がpublished_parsedに入ってるはずと思っても、updated_parsedに入ってる
  • Python 9-tupleに変換された日付の扱い

後者について。
Pythonのタイムゾーン変換(UTC->JST)ではまった | mitc にあるようなUTCとかJSTのtimezoneinfoクラスがあるとする。
例えば、

<pubDate>Sun, 12 Aug 2012 22:51:37 +0900</pubDate>

が、
entries[i].updatedに入ってる。
で、entries[i].updated_parsedの中で、

(2012, 8, 12, 13, 51, 37, 6, 225, 0)

になる。
"UTC"に変換されてる。
これが、"Python 9-tuple"とか、"完全な 9 つの要素 全てに値の入ったタプル"とか書かれているものっぽい。
これを"isoフォーマット"で書き出したい。
そのまんま使って、

datetime.datetime.fromtimestamp(time.mktime(entry.updated_parsed)).isoformat()

とやると、

2012-08-12T13:51:37

となって、UTCそのまんまで、なおかつ、タイムゾーン情報が抜け落ちる。
で、二つの書き方。

datetime.datetime.fromtimestamp(time.mktime(entry.updated_parsed).replace(tzinfo=tz.UTC()).astimezone(tz.JST()).isoformat()
datetime.datetime.fromtimestamp(time.mktime(entry.updated_parsed) + 3600*9).replace(tzinfo=tz.JST()).isoformat()

出力は

2012-08-12T22:51:37+09:00

前者はタイムゾーン無しのdatetimeオブジェクトとを作っておいて、タイムゾーンUTCを追加、そしてJSTに変換。
後者は、実質的な数値をJSTに進めたナイーブなdatetimeオブジェクトを作って、あとからタイムゾーンを追加。
後者の方が若干短いか。

windowsでpython2.5でvc++2010でmecab0.994を使う

以下の環境

mecab本体は、公式のバイナリをインストール。
pythonバインディングをビルドする時に、トラブル。

python setup.py buildで以下のエラーが出る。

running build
running build_py
running build_ext
error: Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.

を参考に、'Python25\Lib\distutils\msvccompiler.py'を書き換えてみても同じ。

これは、distutils + Visual Studio による拡張モジュールビルド時のメモ - muddy brown thangを見て分かったけど、無駄に.NETFRAMEWORKを見に行ってるだけっぽい。
だから'msvccompiler.py'の126行目付近からの、その該当部分を、ごっそりコメントアウト

#        try:
#            if version > 7.0:
#                self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1")
#            else:
#                self.set_macro("FrameworkSDKDir", net, "sdkinstallroot")
#            if version >= 8:
#                self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv2.0")
#            elif version > 7.0:
#                self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1")
#        except KeyError, exc: #
#            raise DistutilsPlatformError, \
#                  ("""Python was built with Visual Studio 2003;
#extensions must be built with a compiler than can generate compatible binaries.
#Visual Studio 2003 was not found on this system. If you have Cygwin installed,
#you can try compiling with MingW32, by passing "-c mingw32" to setup.py.""")

これでビルドできて、test.pyが無事に動いた。

そのうちなんか副作用が出てくるかもしれないのでメモ。

[devel][tombloo]tomblooとRead It Later

いつのまにやらRead It LaterがPocketと名前を変えてバージョンアップしてた
Pocket (Formerly Read It Later)

で、そのtombloo用のパッチ

元のコードのURL部分を微妙に書き換えただけ。

とりあえずポストは出来る

タグは使ってないので未確認

[devel][c#][db] sqliteでC#のLINQ

とりあえず、うまくいったっぽい。

忘れそうなのでいったんメモ

環境

今回は、データベースファイルは既存のもの。

下準備

  1. exeのインストーラのタイプをDL
  2. インストールディレクトリは適当に
  3. 途中、Visual C# 2008にデザイナをインストールするオプションをちゃんとチェックする
  4. (インストールディレクトリ)\binから、プロジェクトのディレクトリに、System.Data.SQLite.dllSystem.Data.SQLite.dllをコピー。
  5. プロジェクトの参照設定からこの二つを追加
  6. ソースにusing System.Data.SQLite;を追加

設定

ここで大事なことは、

Oh I didn't notice this ... Linq to SQL is for Sql Server only. You want Linq to Entities, or the Entity Framework model.

Robert

http://sqlite.phxsoftware.com/forums/p/1408/6101.aspx#6101

ということで、O/Rマッピング段階で、LINQ to SQLクラスは使わない
そうではなくて、ADO.NET Entity Data Modelを使う、ということ。

これを使う手順は、Visual Studio で LINQ to Entities プロジェクトを作成する方法に従う。

セクションAdventureWorks Sales Model を作成および参照するには
  • 手順3の「名前」ボックスは適当に
  • 手順5の「データ接続の選択」で
    1. 「新しい接続」から「接続のプロパティー」ダイアログで
    2. データソース「変更」から「データソースの変更」ダイアログで「SQLite Database File」を選択。データプロバイダはデフォルトでSQLiteのものになるのでそのまま。
    3. 「接続のプロパティー」ダイアログで、Databaseを、あらかじめ用意したファイルに。
    4. 念の為にテスト接続
    5. で、OK。

ここからおかしなエラーが時々出る

オブジェクト参照がオブジェクト インスタンスに設定されていません

が、気にしない。

なんどかやってると消える。

そのうちまた時々出てくるけど、そのたびに何度か同じことをすればよくなる。

不思議。

後は適当に手順を最後まで進める。

使う

ソリューションエクスプローラーで(付けた名前).edmx配下の(付けた名前)Designer.csファイルが、マッピングされたオブジェクトのためのクラス定義っぽい。

で、ここのnamespaceをusingして、クラスをdbとしてnewする感じでChapter17 LINQ to SQL @ITのリスト17.1 LINQ to SQLによるデータベースの検索を書き換えてビルド。


そう、なぜか今、C#をやり始めてる。

[firefox][tombloo][userChrome] tomblooとUserScriptLoader.uc.js

Firefoxは今、10.0.1だけど、自分の使ってるUserScriptLoader.uc.jsが0.1.5.1だった。

UserScriptLoader/UserScriptLoader.uc.js at master from Griever/userChromeJS - GitHubを見ると、既に0.1.7.6まで進んでる。

で、入れ換え。


Google Readerでgooglereadertombloo.user.js経由でtomblooを使うため、どこか適当なところ、917行目くらいに、

sandbox.Tombloo = Cc['@brasil.to/tombloo-service;1'].getService().wrappedJSObject;

を追加。


アイコンをURLバーからステータスバーに移動するため、483行目辺りのコメントアウト部分を入れ換える。


取り敢えず、GRでGoogleReaderFullFeed modが使え、Shift+tキーでtomblooフォームが立ち上がることを確認。

[devel][cygwin][gauche] Gauche 0.9.2をCygwin上でかろうじてビルド

タイトル通り、Gauche - A Scheme Implementationから取得したGauche-0.9.2.tgzを、cygwin 1.7 utf-8上でかろうじてビルドできた。

make checkはいくつか失敗してる感じ。

うだけど、WiLiKiと、koguro's gist: 297312 ― GistSchemeコードバトンの英単語練習アプリが動いてるから通常の用途には問題ない範囲か。

結局、Cygwin環境はそのまま。なんか色々やってるうちにたまたまビルドの成功したっぽいtarボールからの0.9のgcを0.9.2に上書きコピー。そうしたら0.9.2がビルドできた。

肝心の0.9の色々はよく分からない。
ずっと以前のCygwin環境で、ビルドできたものをまた強引にコピーして使ったような気もするけど定かでない。

やっぱ、NTEmacs+cygwinから使うには、windows版よりcygwin版の方が便利。