python で組み合わせを作るとき便利な関数があった
http://tanopy.blog79.fc2.com/blog-entry-48.html
list = ['a','b','c']
itertools.combination(list, 2)
こんな感じ。
すげー便利。
ここまでやっちゃうと…という思いはあるが仕事は効率。
自分の時間でアルゴリズム考えよう。
2012年4月27日金曜日
2012年4月26日木曜日
2012年4月25日水曜日
[eclipse]ショートカット
eclipseのショートカットすぐ忘れちゃう。
名前変更
SHIFT+ALT+R
大文字
CTRL+SHIFT+X
小文字
CTRL+SHIFT+Y
よく使う。
あとは
CTRL+1
と
CTRL+2 L or F
くらいをよく使うかな。
名前変更
SHIFT+ALT+R
大文字
CTRL+SHIFT+X
小文字
CTRL+SHIFT+Y
よく使う。
あとは
CTRL+1
と
CTRL+2 L or F
くらいをよく使うかな。
[eclipse]eclipseからSQLCloudに接続する
eclipseでSQLCloudに接続する方法
ドキュメント
https://developers.google.com/eclipse/docs/cloudsql-database?hl=ja
all-in-one-eclipse3.7 インストール
http://mergedoc.sourceforge.jp/
google plugin for eclipse インストール
https://developers.google.com/eclipse/docs/getting_started
ウィンドウ>設定>Google>Appエンジン>SDK から
appengine sdk を追加
ちなみに sdk version.1.6.5
データベース開発 パースペクティブを開く
データ・ソース・エクスプローラー ビューのデータベース接続で新規
Google Cloud SQL 選択
ドライバー Driver (GOOGLE)
データベース名 設定したもの
インスタンス名 設定したもの
ユーザ名 なし
パスワード なし
ドライバーの右の方のドライバー定義の編集
JAR List で google_sql.jar を除去
JAR/Zip の追加 でAPPENGINEHOME/lib/impl/google_sql.jar を選択して追加
これで接続のテストを実行してpingが通ればOK
追加したデータベース接続を右クリックしてSQLスクラップブックを開く
型:MySql_5.1 名前:データベース接続 データベース:データベース名 で接続できるはず
あとはSQL書いてALT+SHIFT+X とかで実行
ドキュメント
https://developers.google.com/eclipse/docs/cloudsql-database?hl=ja
all-in-one-eclipse3.7 インストール
http://mergedoc.sourceforge.jp/
google plugin for eclipse インストール
https://developers.google.com/eclipse/docs/getting_started
ウィンドウ>設定>Google>Appエンジン>SDK から
appengine sdk を追加
ちなみに sdk version.1.6.5
データベース開発 パースペクティブを開く
データ・ソース・エクスプローラー ビューのデータベース接続で新規
Google Cloud SQL 選択
ドライバー Driver (GOOGLE)
データベース名 設定したもの
インスタンス名 設定したもの
ユーザ名 なし
パスワード なし
ドライバーの右の方のドライバー定義の編集
JAR List で google_sql.jar を除去
JAR/Zip の追加 でAPPENGINEHOME/lib/impl/google_sql.jar を選択して追加
これで接続のテストを実行してpingが通ればOK
追加したデータベース接続を右クリックしてSQLスクラップブックを開く
型:MySql_5.1 名前:データベース接続 データベース:データベース名 で接続できるはず
あとはSQL書いてALT+SHIFT+X とかで実行
[java]SQLCloudに接続
SQL Cloudの記事が割と書かれるようになってきた。
公式
https://developers.google.com/cloud-sql/
記事
http://www.atmarkit.co.jp/fjava/rensai4/cloudsql01/01.html
http://www.atmarkit.co.jp/fdb/rensai/googlecloudsql/01/01.html
で、開発環境のアプリケーションからどうやって接続できる自分がわかっている方法としては、
EclipseプラグインでGoogle CloudSQLの設定でEnableにしてインスタンス名とデータベース名を入力して(設定する箇所が2つある?)SQLCloudを登録したアカウントでログイン(EclipseのGUIでWEBアプリをデプロイ出来る状態)してアプリを実行する。
これだけ。
JDBCでのユーザやパスワードはいらない。
これ以外のアカウントで認証しようとするとはじかれた。
およそこんなコード。
<pre>
Connection c = null;
DriverManager.registerDriver(new AppEngineDriver());
c = (Connection) DriverManager.getConnection("jdbc:google:rdbms://インスタンス名(APIコンソールのOverviewのところ)/データベース名");
あと、テストコード(ktrwjr)でリクエストして処理内で接続しようとするとこれも怒られた。
多分、インスタンス名とかデータベース名とかを実行時のJVM引数で指定すればいけるかも。
とりあえず上で無理やりにでもテストできるので試してない。
https://developers.google.com/cloud-sql/docs/developers_guide_java#using_the_java_development_server
公式
https://developers.google.com/cloud-sql/
記事
http://www.atmarkit.co.jp/fjava/rensai4/cloudsql01/01.html
http://www.atmarkit.co.jp/fdb/rensai/googlecloudsql/01/01.html
で、開発環境のアプリケーションからどうやって接続できる自分がわかっている方法としては、
EclipseプラグインでGoogle CloudSQLの設定でEnableにしてインスタンス名とデータベース名を入力して(設定する箇所が2つある?)SQLCloudを登録したアカウントでログイン(EclipseのGUIでWEBアプリをデプロイ出来る状態)してアプリを実行する。
これだけ。
JDBCでのユーザやパスワードはいらない。
これ以外のアカウントで認証しようとするとはじかれた。
およそこんなコード。
<pre>
Connection c = null;
DriverManager.registerDriver(new AppEngineDriver());
c = (Connection) DriverManager.getConnection("jdbc:google:rdbms://インスタンス名(APIコンソールのOverviewのところ)/データベース名");
</pre>
あと、テストコード(ktrwjr)でリクエストして処理内で接続しようとするとこれも怒られた。
多分、インスタンス名とかデータベース名とかを実行時のJVM引数で指定すればいけるかも。
とりあえず上で無理やりにでもテストできるので試してない。
https://developers.google.com/cloud-sql/docs/developers_guide_java#using_the_java_development_server
2012年4月20日金曜日
[java]GAEのタイムゾーンをJSTにする
タイムゾーンの問題
========================================
- UNIX時間「0」は、UTCでは「1970-01-01T00:00:00」、JSTでは「1970-01-01T09:00:00」となる
- 下記を通せばタイムゾーンはJSTとなって登録されるデータも整合性があう
<pre class="pretty">
TimeZone.setDefault(TimeZone.getTimeZone("JST"));
</pre>
- GAEではスケールアウトもろもろでインスタンスがいつ落ちるかわからないので毎回念の為に設定しておく
2012年4月19日木曜日
[java]GAEでバイナリデータをBlobstoreに登録する←FileAPI
GAE/Jでサーバのメモリ上で展開しているバイナリデータ(JPEG)をBlobstoreに追加するスニペット。
private BlobKey registerBlob(byte[] bytes) throws IOException{
// Get a file service
FileService fileService = FileServiceFactory.getFileService();
// Create a new Blob file with mime-type "application/octet-stream"
AppEngineFile file = fileService.createNewBlobFile("image/jpeg");
// Open a channel to write to it
boolean lock = true;
FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock);
// This time we write to the channel using standard Java
writeChannel.write(ByteBuffer.wrap(bytes));
// Now finalize
writeChannel.closeFinally();
return fileService.getBlobKey(file);
}
[IntelliJ IDEA]ブロックレベルの選択
idea で CTRL + W でブロックレベルで選択範囲を増やして
SHIFT + CTRL + W で選択範囲を減らせる。
eclpse も ALT + SHIFT + UP と ALT + SHIFT + DOWN で
同等のことが出来る。
ideaのほうが好み選択してくれるけどね。
SHIFT + CTRL + W で選択範囲を減らせる。
eclpse も ALT + SHIFT + UP と ALT + SHIFT + DOWN で
同等のことが出来る。
ideaのほうが好み選択してくれるけどね。
[other]gaeで1アプリにjavaとpythonのっけてやりとり
意味があるのかと言われればあれだけど、
たとえばGAEのアプリIDが
hogemaruo
で
それぞれで hogemaruo アプリの別バージョンとして定義ができる。
一つのアプリケーションIDで異なる実行環境が用意できるっちゅうことだ。
url fetch使って行き来すれば色々と出来るな。
あんまりいいやり方じゃないけど切羽詰まったからありだろ。
将来的にはできなくなるかも…。
まあこのやり方だと幸か不幸かDatastoreを共有することにもなる。
マルチテナンシーAPIって全然知らないけど、シノニムみたいなもの?
これ使えば…。
pyシノニムとjavaシノニム、、、なんてね。
たとえばGAEのアプリIDが
hogemaruo
で
- gae/java
- gae/python
それぞれで hogemaruo アプリの別バージョンとして定義ができる。
一つのアプリケーションIDで異なる実行環境が用意できるっちゅうことだ。
url fetch使って行き来すれば色々と出来るな。
あんまりいいやり方じゃないけど切羽詰まったからありだろ。
将来的にはできなくなるかも…。
まあこのやり方だと幸か不幸かDatastoreを共有することにもなる。
マルチテナンシーAPIって全然知らないけど、シノニムみたいなもの?
これ使えば…。
pyシノニムとjavaシノニム、、、なんてね。
2012年4月18日水曜日
[IntelliJ IDEA]プロジェクトビューを同期する
intellj idea で
エディタで参照しているパスと
プロジェクトビューを同期するには
Alt+F1 して Project を押せばいいのか。
エディタで参照しているパスと
プロジェクトビューを同期するには
Alt+F1 して Project を押せばいいのか。
2012年4月17日火曜日
[other]GQL
GQL
keyでの検索
nameとidに注意ね
where __key__ = key('Model', 'name')
or
where __key__ = key('Model', 123456789)
ある親に属する子エンティティ検索
where ancestor is key('Model', 'name')
or
where ancestor is key('Model', 123456789)
Keyプロパティへの検索
where key_property = key('Model', 'name')
or
where key_property = key('Model', 123456789)
こんな感じ。
keyでの検索
nameとidに注意ね
where __key__ = key('Model', 'name')
or
where __key__ = key('Model', 123456789)
ある親に属する子エンティティ検索
where ancestor is key('Model', 'name')
or
where ancestor is key('Model', 123456789)
Keyプロパティへの検索
where key_property = key('Model', 'name')
or
where key_property = key('Model', 123456789)
こんな感じ。
[other]taskqueueの例外
ログを見てて、見慣れない例外。
com.google.appengine.api.taskqueue.TransactionalTaskException at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:69) at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:139) at com.google.appengine.api.taskqueue.QueueApiHelper.makeSyncCall(QueueApiHelper.java:33) at com.google.appengine.api.taskqueue.QueueImpl.add(QueueImpl.java:481) at com.google.appengine.api.taskqueue.QueueImpl.add(QueueImpl.java:427) at com.google.appengine.api.taskqueue.QueueImpl.add(QueueImpl.java:412)
Caused by: java.lang.IllegalArgumentException: too many messages, maximum allowed: 5 at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:36) at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:70) ... 53 more
ぎゃああああああ。
これはやばい。
[other]json形式のフォーマットについて
jsonで扱うマルチバイト文字はUnicodeエスケープしようぜって話。
変換ツール
Javaでユニコードエスケープするメソッド
ユニコードエスケープやらユニバーサルキャラクタ名やらってなんや、Javaではって話。
変換ツール
Javaでユニコードエスケープするメソッド
ユニコードエスケープやらユニバーサルキャラクタ名やらってなんや、Javaではって話。
2012年4月15日日曜日
[vim]矩形選択
vimで矩形選択する。
http://nanasi.jp/articles/howto/editing/blockwise-operation.html
ノーマルモードか、ビジュアルモードで「Control-v」と押下すると、 矩形ビジュアルモードに入ります
http://nanasi.jp/articles/howto/editing/blockwise-operation.html
ノーマルモードか、ビジュアルモードで「Control-v」と押下すると、 矩形ビジュアルモードに入ります
[vim]カーソル移動のキーバインド
vimのカーソル移動についてメモ。
よく忘れる。
体が覚えるまでは参照しよう。
http://www.7key.jp/software/vi.html
よく忘れる。
体が覚えるまでは参照しよう。
http://www.7key.jp/software/vi.html
h | 左へカーソルを移動(5hで5文字左に移動)。BSも同様。 |
j | 下へカーソルを移動(5jで5行下に移動)。C-nも同様。 |
k | 上へカーソルを移動(5kで5行上に移動)。C-pも同様。 |
l | 右へカーソルを移動(5lで5文字右に移動)。Spaceも同様。 |
0 | カーソル行の行頭に飛ぶ。 |
^ | カーソル行の行頭に飛ぶ。ただし、行頭が空白であれば空白部分の右へ。 |
|(パイプ) | 現在行の指定する文字数目へ移動(5|で先頭から数えて5文字目へ移動)。 |
$ | カーソル行の行末に飛ぶ。 |
[vim]クリップボードとのやりとり
Windowsのgvimでクリップボードとのやりとりについて
http://nanasi.jp/articles/howto/editing/clipboard.html#id13
http://nanasi.jp/articles/howto/editing/clipboard.html#id13
Windows環境のvimエディタでは、次のコマンドでクリップボードのデータを操作できます。
この操作は、ノーマルモード、入力モード、コマンドラインモード、ビジュアルモード、 検索と全ての操作で使用可能です。
この操作は、ノーマルモード、入力モード、コマンドラインモード、ビジュアルモード、 検索と全ての操作で使用可能です。
- Control キー + Insert キーでコピー
- Control キー + Delete キーでカット
- Shift キー + Delete キーでカット
- Shift キー + Insert キーでペースト
[python]いつもの文字コードにまつわる変換エラー
search_word_end = search_word + u'\uFFFD'.encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
gaeで文字によるレンジスキャンしようとして
pythonの文字コード的な初歩的エラーで引っかかった。
なんぞこれ?
開発環境では動いていたからバージョンとかのせい?
わかったー。
search_word + u'\uFFFD'.encode('utf-8')
のうち、search_word をself.request.get('keyname')で取得してたんだけれど、
ローカルではstr型でとれてるものだとおもってstr型にして + してけど、
実はunicode型で、unicode + str でseachをGAEデフォルトのasciiコーデックでデコードしようとしてエンコーディングに失敗していたっぽい。
なので、あえてencodeしてたところをunicodeのままほったらかしにやればいけた。
この苦しみ、ascii圏の人にはわかるまい。
2012年4月11日水曜日
[other]GAEのインデックスエラー
カラム1、カラム2、カラム3、日付
のインデックス定義で、
カラム1、カラム3、日付
のクエリを投げたらエラー。
まあそりゃそうか。
めんどくさいなー。
致命的: com.google.appengine.api.datastore.DatastoreNeedIndexException: Query com.google.appengine.api.datastore.dev.LocalCompositeIndexManager$IndexComponentsOnlyQuery@97be02ad requires a composite index that is not defined. You must update C:\usr\local\eclipse\workspace\project\war\WEB-INF\datastore-indexes.xml or enable autoGenerate to have it automatically added.
The suggested index for this query is:
<datastore-index kind="Model" ancestor="false" source="manual">
<property name="column_01" direction="asc"/>
<property name="column_03" direction="asc"/>
<property name="insert_date" direction="asc"/>
</datastore-index>
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:42)
at com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:76)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:106)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
at com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:72)
at com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:33)
at com.google.appengine.api.datastore.QueryResultsSourceImpl.peekQueryResultAndIfFirstRecordIndexList(QueryResultsSourceImpl.java:162)
at com.google.appengine.api.datastore.QueryResultsSourceImpl.loadMoreEntities(QueryResultsSourceImpl.java:98)
at com.google.appengine.api.datastore.QueryResultIteratorImpl.ensureLoaded(QueryResultIteratorImpl.java:174)
at com.google.appengine.api.datastore.QueryResultIteratorImpl.nextList(QueryResultIteratorImpl.java:120)
at com.google.appengine.api.datastore.LazyList.forceResolveToIndex(LazyList.java:108)
at com.google.appengine.api.datastore.LazyList.resolveToIndex(LazyList.java:84)
at com.google.appengine.api.datastore.LazyList.resolveAllData(LazyList.java:54)
at com.google.appengine.api.datastore.LazyList.size(LazyList.java:136)
[IntelliJ IDEA]Intellij IDEAでslim3 model Processor Factoryが動作しない
エラー:注釈プロセッサ 'org.slim3.gen.processor.ModelProcessorFactory' が javax.annotation.processing.Processor を実装していません
・
・
・
Compiler internal error. Process terminated with exit code 1
・
・
・
Intellij IDEA でslim3 …
なんとかならないのかな。
・
・
・
Compiler internal error. Process terminated with exit code 1
・
・
・
Intellij IDEA でslim3 …
なんとかならないのかな。
登録:
投稿 (Atom)