Python

GoogleWaveを楽しくしてくれるRobot

誰かが書き込むたびにRobotが末尾に「www」を勝手に書き足していく。 #/usr/bin/env python # -*- coding: utf-8 -*- from waveapi import events from waveapi import robot def blipSubmitted(properties, context): blip = context.GetBlipById(proper…

「ぬるぽ」に反応して「ガッ」してくれるRobot

日本語を使った場合、unicodeでマッチし、unicodeでSetTextすれば普通に書き込んでくれるらしい。 #/usr/bin/env python # -*- coding: utf-8 -*- from waveapi import events from waveapi import robot def blipSubmitted(properties, context): blip = co…

RobotでBlipを消す

テストで色々発言したりさせたりするとどんどんゴチャゴチャしてくるので。 #/usr/bin/env python from waveapi import events from waveapi import robot def deleteAll(context): for blip in context.GetBlips(): if not blip.IsRoot(): blip.Delete() de…

オウム返しRobot

誰かの発言を返信として繰り返すだけならこう書くだけ。 #/usr/bin/env python from waveapi import events from waveapi import robot def blipSubmitted(properties, context): blip = context.GetBlipById(properties['blipId']) text = blip.GetDocument…

Google Wave Robotを作ってみる

以下を参考にしつつ、何かやってみる。 第2回 ロボットAPI:最速!Google Wave API解説|gihyo.jp … 技術評論社 誰も知らない夜のwaveのrobot - When it’s ready. ライブラリの入手 Python版はこちら。 Google Code Archive - Long-term storage for Google …

GAE/PyでDatastoreのデータを全削除するためのbulkdeleter.pyを書いた

GAE/Pyでbulkloaderを使ってデータをアップロードする - すぎゃーんメモ GAE/Pyでbulkloaderを使ってデータをダウンロード/削除する - すぎゃーんメモ の続き。 そもそもDatastoreからfetchしてきた時点で(この処理はマルチスレッドで行われているっぽい)削…

関数の呼び出し時の処理を入れ替える

関数は、func_codeというattributeにcode objectなるものが入っているそうな。 これが実際に行う処理を持っているようなので、呼び出したときの処理をここで変更することができる。 >>> def hoge(): ... print 'hoge' ... >>> def fuga(): ... print 'fuga' …

GAE/Pyでbulkloaderを使ってデータをダウンロード/削除する

前回は、bulkloaderによるアップロードについて色々調べて試した。 GAE/Pyでbulkloaderを使ってデータをアップロードする - すぎゃーんメモ 今度は、データのダウンロードと削除について調べる。 データをダウンロードする アップロードとほぼ同様に行うこと…

GAE/Pyでbulkloaderを使ってデータをアップロードする

bulkloaderとは remote_apiを使ってコンソールからDatastoreにデータをアップロードするためのツール。 初期データとして大量のデータをDatastoreに突っ込んでおきたいときなどに便利。 逆にDatastoreにある内容をダウンロードすることもできる。削除をする…

Google App Engine でファイルをアップロードする方法 比較

Java版 GAE/J でファイルをアップロードする方法を学ぶ - すぎゃーんメモ の続き。 どうやらJava版でcommons-fileuploadを使ってファイルアップロードをする場合はgetItemIteratorから取り出すのが良いようだ。そうすればFileItemFactoryは必要ない。 import…

Perl, Pythonで1以上100未満の『2個の素数の積』である整数を列挙する

1以上100未満の『2個の素数の積』である整数をワンライナーで列挙する - すぎゃーんメモの続き。 普通にスクリプトを書くとどうなるか。 Perl モジュールを使うとなるとやはりMath::Big::Factorsが便利。 #!/opt/local/bin/perl use strict; use warnings; u…

Pythonで自分のダイアリーについたブックマークを確認

id:CortYumingさんと話してて、あったら便利かなぁ、と思って書いてみた。 はてなのAPIでとれるものを調べてみたカンジでは 自分のダイアリーについた総ブックマーク数 被ブックマーク合計数取得APIというのがある。*1 自分のダイアリーについた新着ブックマ…

GAE/J でancestorによるフィルタリングはできない?

今作っているGAE Counterでは、CounterとAccessRecordで親子関係を作っていて*1、あるCounterの子として作られたAccessRecordを取得するのに、ancestorによるフィルタリングを使ったQueryを用いている。 AccessRecord.all().ancestor(counter) で、同じこと…

Google App Engine のDataStoreからUserでフィルタリングしてデータを取得する方法

com.google.appengin.api.users.Userをプロパティに持つデータモデルから、それがログイン中のユーザーと一致するものだけを取得しようとする場合。 Python版では、 from google.appengine.api import users results = Hoge.all().filter('user = ', users.g…

Google App Engine でカウンターを作ってみた(再)

Gitの練習も兼ねて、Gitでバージョン管理をしながらアクセスカウンターを作ってみた。 http://gae-counter.appspot.com/ ソースをGitHubでまとめて公開。 GitHub - sugyan/GAE_Counter: Google App Engineで作るアクセスカウンター indexが生成されてくれな…

Google App Engine でカウンターを作ってみた

↑試作品なので消える可能性あり こちらで動かしています。 http://sugi1982.appspot.com/ どちらも共通、リロードされるたびに数字がインクリメントされます。 SDKのversion 1.2.1 からimages APIがパワーアップして、画像を合成することができるようになっ…

Django Hack-a-thon Disc.8に参加してきた

先々週のGAE Hack-a-thonに引き続き、2回目のhackathon参加。 http://twisted-mind.appspot.com/django-ja-hack-a-thon-disc-8/ http://bitbucket.org/voluntas/django-ja-hack-a-thon/src/tip/disc-8.rst 自分はハンズオンBで、id:everesさんに教えていた…

GAE Hack-a-thon Disc.3に行ってきた

「hackathon」と名のつくものには初めての参加。ドキドキでした。 http://twisted-mind.appspot.com/gae-hack-a-thon-disc-3/ 今回は事前ミーティングである程度のトピックを絞り、それぞれに興味をもったものに集まってチームを組んで作る、という形式だっ…

SoozyCon7に行ってきた

id:hide-Kさんに招待していただき、SoozyCon7に行ってきました。ありがとうございます。 http://soozy.org/?SoozyCon7 手書きメモを見返してまとめてみた。 かなり無知なので色々間違っているかもしれません。ご指摘いただけると助かります。 ■招待講演 id:e…

Google App Engine でBasic認証を実装 改

Google App Engine でBasic認証を実装 - すぎゃーんメモから少し改良してみた。 # -*- coding: utf-8 -*- import logging from base64 import b64decode from google.appengine.ext import webapp class BasicAuthentication(webapp.RequestHandler): def __…

Google App Engine でBasic認証を実装

探したんだけどサンプルが見つからなかった。 自分で作ってみたけどこんなカンジでいいのかな? # -*- coding: utf-8 -*- from base64 import b64decode from google.appengine.ext import webapp class BasicAuthentication(webapp.RequestHandler): def ge…

Pythonの辞書は存在しないキーでアクセスしてはいけない → 改め、存在しないキーでアクセスする場合はget()を使う

Perlではハッシュから存在しないキーで値を取り出そうとするとundefが返ってくる。それを評価してプログラムを書いても動く。 $ perl -w %hash = (foo => 'hoge', bar => 'fuga'); print $hash{baz} ? "あるよ!\n" : "ないよ!\n" ^D ないよ! Pythonの場合…

Google App Engine でloggingを使ってログを出力する

# loggingをインポートする import logging # どこかでログレベルを設定する logging.getLogger().setLevel(logging.DEBUG) # ログを出力する logging.debug('hoge') たったこれだけなのに何度書いてもなかなか覚えられなかったのでいい加減に暗記してしまい…

pythonのファイルがjython-modeで開かれるときがある

明らかにpythonのコードで、拡張子もpyで、普通にpython-modeで開かれるであろうファイルが、何故かjython-modeで開かれていた。 なんでかなーと思って調べてみたら、'com'で始まる自作パッケージをimportする文が入っていたからだったらしい。 Emacsのpytho…

仙台Python宴会01に参加してきた

年末帰省中にちょうど参加できそうなイベントがあったので飛びついてきました。 仙台Python宴会01開催しました - 牌語備忘録 -pygo id:CortYumingさん、どうもありがとうございました! 2次会中ほとんど寝てしまって申し訳ありません。猛省です。。。 anyth…

「清楚なクライアント」が動いた

清楚なクライアントを試してみた - すぎゃーんメモ の続き。 調べてみたところ、LeopardのPython 2.5ではreadlineの挙動が異なるそうで。 宇宙線実験の覚え書き (大学院生版):LeopardのPython 2.5で、readlineを有効に ここに書いてある通りに実行したらあっ…

清楚なクライアントを試してみた

コマンドラインでTwitter, Wassr両方使うためのツールを模索していて、前から気になっていた「清楚なクライアント」を試してみることにした。 wassr と Twitter への投稿クライアント(清楚なクライアント) - Djangoへの片思い日記 ここでソースが公開されて…

第4ラウンド終了時に点数が単独3位のときに2位にあがれる確率

もしも第4ラウンド終了時のスコアが単独3位だと結果にどういう影響がでるのか。 # -*- encoding: utf-8 -*- for diff in range(30): print diff f = open('result.txt', 'r') while 1: l = f.readline() if not l: break left = l[0:l.index(':') - 1] sco…

第4ラウンド終了時に点数が単独2位のときにそのまま単独2位をキープできる確率

前回の4ラウンド終了時にどんな点差になっているのが理想的なのか - すぎゃーんメモの結果を元に(500000回でやり直してみたけど)、 第4ラウンド終了時で既に単独2位のときにそのまま2位を維持できる割合を求めてみる。 # -*- encoding: utf-8 -*- f = op…

最中限オンライン自動対戦ボット

ついにできた!!なんか嬉しい。 # -*- encoding: utf-8 -*- import mechanize import re from saichugenlib import * # 履歴の読み取り用 def str2num(str): a = ['c', 'd', 'h', 's'] return (int(str[1:]) - 1) * 4 + a.index(str[0]) # ブラウザ設定 br …