引越ししました
このはてだから別のはてだへ引越しをしました。新しいところは↓です。
http://d.hatena.ne.jp/cafistar/
現在の timestamp と microsecond をつなげた文字列が欲しい
これで何かをするわけではないが、必要になったので書いた。
import datetime import time def __get_timestr_by_now(): now = datetime.datetime.now() micro_str = str(now.microsecond).zfill(6) time_str = str(int(time.mktime(now.utctimetuple()))) return time_str + micro_str
文字列比較
気になったので比較して結果を確認した。
# -*- encode: utf-8 -*- if u'0' < u'1': print '0 < 1' if u'1' < u'2': print '1 < 2' if u'2' < u'3': print '2 < 3' if u'3' < u'4': print '3 < 4' if u'4' < u'5': print '4 < 5' if u'5' < u'6': print '5 < 6' if u'6' < u'7': print '6 < 7' if u'7' < u'8': print '7 < 8' if u'8' < u'9': print '8 < 9' if u'9' < u'a': print '9 < a' if u'1' < u'01': print '1 < 01' else: print '1 > 01' if u'01' < u'001': print '01 < 001' else: print '01 > 001'
同じ値を複数の変数に代入する
もしかして邪道なのかな。
st1 = 'a' st2 = 'b' st3 = st4 = st1 print st1 # => 'a' print id(st1) # => 26430944 print st2 # => 'b' print id(st2) # => 26431008 print st3 # => 'a' print id(st3) # => 26430944 print st4 # => 'a' print id(st4) # => 26430944 st5 = st2 = st1 print st1 # => 'a' print id(st1) # => 26430944 print st2 # => 'b' print id(st2) # => 26431008 print st3 # => 'a' print id(st3) # => 26430944 print st4 # => 'a' print id(st4) # => 26430944 print st5 # => 'a' print id(st5) # => 26430944
便利だなーと思った
指定したdatetime値でのfilter
ユーザー一覧の表示などする時には fetch() を使っていた。
しかしこれでは1000件の壁にぶち当たる。
そこで datetime 値での filter を使用した。
- こんなモデルがあったとする
from google.appengine.ext import db class Member(db.Model): insert_datetime = db.DateTimeProperty(auto_add = True) name = db.StringProperty() age = db.IntegerProperty()
- 検索はこんな感じ
# 検索 パターン1 def search_query_patterm(delimiter_id=None): """ Member から指定した件数の情報を取得する。 insert_datetime を昇順ソートし delimiter_id で指定した Member までを除外する。 """ from google.appengine.ext import db from member.models import Member import datetime if delimiter_id is None: delimiter_dt = str(datetime.datetime.now()) else: m = Member.get(delimiter_id) delimiter_dt = str(m.insert_datetime) m = Member.all()\ .filter('insert_datetime > ', delimiter_dt)\ .order('insert_datetime') .fetch(10, 0) return m # 検索 パターン2 def search_gql_patterm(delimiter_id=None): """ Member から指定した件数の情報を取得する。 insert_datetime を昇順ソートし delimiter_id で指定した Member までを除外する。 """ from google.appengine.ext import db from member.models import Member import datetime if delimiter_id is None: delimiter_dt = str(datetime.datetime.now()) else: m = Member.get(delimiter_id) delimiter_dt = str(m.insert_datetime) gql = "SELECT * FROM member_member" gql += " WHERE insert_datetime > DATETIME('%s')" gql += " ORDER BY insert_datetime ASC" m = db.GqlQuery(gql % datetime_dt) return m
microsecond があれば、そこまで比較してくれる。ドキュメントを見ると一番細かいのは「DATETIME(year, month, day, hour, minute, second)」または「DATETIME('YYYY-MM-DD HH:MM:SS')」と記載されていて microsecond まで対応してるとは書いてない。
試したら期待通りに動いてくれたとはいえ、いずれ無視されるようになるかもしれないなーと思った。
管理したくないファイルを拡張子で指定
「*.pyc」ファイルは管理しなくていいだろ、ということで。
- リポジトリに「.gitignore」ファイルを作成
- 「.gitignore」ファイルへ以下のように記載
*/**/*.pyc - コミット
> cd C:\sample > echo '' > .gitignore ## .gitignore ファイル編集 ## Git 起動 $ cd /c/sample/ $ git add . $ git commit -m 'created .gitignore'
git add した時に出る改行コードのwarning対応
ファイル内の改行コードが「LF」の際に出たワーニングに対応したメモ
$ git add . warning: LF will be replaced by CRLF in appl/views.py
なにやら Git が改行コードを CRLF へ変更しようとするらしい。
で、以下を実行
$ git config --global core.autoCRLF false
これで、改行コードを CRLF へ変更しなくなるらしい。
Git本体にあるファイルを見てみる。「C:\msysgit\msysgit\etc\.gitconfig」
[core] symlinks = false autocrlf = true
あれれ?ここじゃないのか。そうかここじゃないのか。というわけで「--global」で設定したものはホームへ保存されるらしい。Linux でいうチルダ(~)。
というわけでホームにあるファイルを見てみる。「C:\Documents and Settings\Kmizukix\.gitconfig」
[user] name = kmizukix email = kmizukix@hogehage [core] autoCRLF = false
確かに保存されている。以前設定した名前も保存されている。