技術

Google App EngineのHttpHeaderを調べて見た

name:Host data:xxxx.appspot.com name:Cache-Control data:max-age=0 name:Pragma data:no-cache name:Accept data:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 name:Accept-Language data:ja,en-US;q=0.8,en;q=0.6 name:Accept-Char…

PyCon JP 2012(App Engine Conference 2012)でパネルディスカッションのモデレータしてきました

PyCon JP 2012に参加してきました。初めてパネルディスカッションのモデレータをつとめる事になりドキドキしていたのですが、Google App Engineに詳しいスペシャルなパネラーさんのおかげでなんとか終わりました。 当日どれくらいの人が来てくれるのか不安だ…

テスト駆動JavaScriptの第2章をメモ

Node塾 講義その6に行くのでメモった Node塾で下記の読書会をする。テスト駆動JavaScript作者: Christian Johansen,長尾高弘出版社/メーカー: アスキー・メディアワークス発売日: 2011/11/25メディア: 大型本購入: 19人 クリック: 331回この商品を含むブロ…

Chrome Web Storeに公開しているChrome拡張のレビューコメントを取得する方法

こんな感じで取れた。Review Notifyでも作ろうかな。Reviewをメールで配信してくれたりすると嬉しいだけどないよね? function getReviews(extensionId, callback) { var entities = [{'url' : 'http://chrome.google.com/extensions/permalink?id=' + exten…

Chrome拡張ATND NotifyでGoogleカレンダーに参加予定イベントを追加する機能を入れた話。または、ATNDの予定をiPhoneのカレンダーに入れる方法

ATND Notifyってこれです。 機能追加の話 という事だったので しますた。 という訳でGoogleカレンダーに追加したい人はATND Notifyをインストールしてください。インストールはここから。インストールするとイベントカレンダーにこんなボタンが追加されてま…

Developers Summit 2011 松尾さんのGoogle App Engine発表資料

【18-C-4】Google App Engine - 無限の彼方へView more presentations from Developers Summit.Javaで全部書き直したコードを書こうと思ったけど力尽きた。誰かいい感じで頼む。

Developers Summit 2011のLT大会で発表してきました

【デブサミオフィシャルコミュニティから選出のLT大会2011】にappengine ja nightコミュニティから私が発表させて頂きました。このような機会を与えてくれたみんなに感謝します。 資料 デブサミ2011 LT大会【17-E-7】appengine ja nightView more presenta…

Google App EngineではAdmin権限でリクエストするとCPU使用率と1リクエストあたりの課金額がわかる

Admin権限ありでログインするとHttpヘッダーで下記のようにCPU使用率とかがわかるようになってます。 プログラミング Google App Engine作者: Dan Sanderson,玉川竜司出版社/メーカー: オライリージャパン発売日: 2011/01/24メディア: 大型本購入: 5人 クリ…

ATND Notifyがもっと評価されるべき5つの理由

去年、Chrome extensionでATNDを便利にするATND Notifyを作ったのにblogに書いてなかったので書く。Twitterでは"マジ狩る拡張"とか"数時間で埋まる人気の勉強会だが、ATND Notify(Chrome Extension)入れてる私に死角はなかった"とか"補欠繰り上がり通知で…

Google App EngineのAdmin Consoleを便利にするChrome extensionを作ってます。

インストールするとDataViewerページがこんな感じになります インストールはこちら http://goo.gl/b4aup 何ができるの? GQL実行履歴を保存し再実行できる GQLを自動生成する プロパティ名の下にテキストボックスが出るようになります。そこに値を入力すると…

秀丸でeclipseのnext search(Ctrl+K)を実現する方法

eclipseでよく使うキーボードショートカットにnext search(Ctrl+K)があります。next searchは選択範囲文字列で下候補を検索するという単純な機能ですが、めちゃめちゃ便利でよく使います。ふと、これを秀丸でもやりたいなぁ〜と思ったのでマクロを作ってみま…

Google Developer Day 2010(GDD)とGDD Bootcampにいってきた。

Google Developer Day 2010(GDD)基調講演 Google App Engineは現在1week 55億ページビュー 日本はユーザが多い。appengine ja nightも紹介された appengine ja nightブース appengine ja nightの発表 @shin1ogawaさん(GDDBootcamp) Slim3 ハンズオン資料 S…

appengine ja night #9に行ってきた。 #appengine #ajn9

おしながき 本編 @bufferingsさん:Datastoreのクエリを理解しよう @kazunori_279さん:Next gen queryを斬る! BT(Beer Talk) @cht_007さん:BDレコーダー+スマホ/PC連携サービス『Chan-Toru beta』 @ashigeruさん:近くを探す? @tagomorisさん:SDKを試…

HTML5とGoogle I/O 2010(AppEngine)のリンクめも

Google I/O 2010 - App Engine http://www.youtube.com/view_play_list?p=FBF991DAE0E02FED xhr2-steaming http://www.slideshare.net/KensakuKOMATSU/xhr2-steaming-twitter-with-ipad phvsicSketch http://physicsketch.appspot.com/ Canvasでピクセル操作…

appengine ja night #8に行ってきた。 #appengine #ajn8

今回はサッカーSNSを実際にAppEngineで運用している@najeiraさんをはじめ、ランキング問題をやっつけるために@koherと@kibayosさんがSkip Listをひっさげて来て下さいました。 BeerTalkでは、App Engineで動作するCMSを作成している@shuji_w6eさん、@zetta19…

appengine ja night #7に行ってきた。 #appengine #ajn7

今回は@shin1ogawaさんの尽くしの一日。shin1ogawa ja nightが開催されました。shin1ogawaさんは恐らく日本で一番appengine/javaに詳しいと思われる人です。そんな人のライブコーディングが見れるとあって楽しい一日でした。 また、@kazunori_279さんがUstを…

eclipseにEGitをインストールするメモ

EGit http://download.eclipse.org/egit/updates インストール時に下記のエラーが出た。 session context was:(profile=epp.package.jee, phase=org.eclipse.equinox.internal.provisional.p2.engine.phases.Collect, operand=, action=). No repository fou…

新規に開発するプログラムもテストがなければレガシーシステムである

テストのないレガシーコードにテストを作ることによって、そのシステムの理解が深まったり、動作を記述することによって、変更の影響が即座にわかったりする。変更の影響がわかれば、大胆に実装を変更したりすることが容易にできるようになり、開発の俊敏性…

appengine ja night #6に行ってきた。 #appengine #ajn6

blog書くのめっちゃ遅れた。ちゃんと書きますよ。slim3がリリースされましたね。そのslim3の目玉機能であるGlobalTransactionを荒川さん、ひがさんから解説頂きました。今回はいくつかustream動画があります。これなかった人も動画を見ればいいですよ。 おし…

Google App Engine code labの資料が公開された #appengine

"Google App Engine Java の色々な機能を、実際にコーディングしながら体験してみよう" という主旨のもと、Google App Engine for Java のコードラボをこれまでに3回開催してきました。Java を使った Web アプリケーションの開発経験はあるけれども、App Eng…

appengine ja night #5に行ってきた。 #appengine #ajn5

みなさまお疲れ様でした。今回も楽しかったw。 ajn5ではpythonは松尾さん、javaはひがさん。お二人とも有名なフレームワーク開発者という超豪華メンバーだった。その影響かATNDの申し込みは24時間たたずに定員オーバー、申し込みが軽く100人を超えて定員を1…

Oracleでデータファイルを縮小する際にORA-03297エラーが出た時の対処

下記のコマンドを実行した際にエラーが出る場合がある。 ALTER DATABASE DATAFILE 'データファイル名' RESIZE サイズ[K|M]; ORA-03297: ファイルには、要求したRESIZE値を超える使用中のデータが含まれています。 これは、データファイルを縮小しようとした…

Google App Engineでよくある質問

質問形式でとりあえずApp Engineの情報を整理しようと思います。 サーバの管理コンソールで表示するとログの時刻表示がおかしい? タイムゾーンがPSTで表示されます。ローカルの時刻にするgreasemonkeyなどがあります。 firefox http://userscripts.org/scri…

AppEngineでKind(テーブル)を削除する方法

Google App Engineではデータを削除したい時にサーバのデータに対してDelete文を実行したりDrop Tableしたりということができません。Kindをdrop(KindにあるEntity[レコード]を全件削除)するには現時点では削除するコードをサーバにデプロイしてブラウザか…

AppEngineでsessionを有効にしていると遅くなる

Google App Engineのsession情報はDatastoreを使っているため若干遅い。セッションを使わないアプリならセッションを無効にしておいた方が良い。 appengine-web.xmlにてfalseする ※デフォルト(sessions-enabledの記述がない場合)ではセッションは無効にな…

AppEngineのweb.xmlでxmlのコメントで日本語文字列を使う

文字コードをWindows-31Jにすればok UTF-8は文字化けする

AppEngineのログをダウンロードするgreasemonkeyスクリプト

@pto_developerさんが公開しているGoogle App Engine Log Downloader for Greasemonkeyがなかなかいい感じです。ダウンロードってどうやって?と思ったらテキストボックスに画面のHTMLを解析して1リクエスト1行で出力してくれるようです。

appengine ja night #4に行ってきた。 #appengine #ajn4

今回からappengine java night 改めjava以外の方々にも来て頂きたいとの思いからappengine ja nightという名前にイベント名が変わりました。今年もappengineじゃないと!(ja night)って事でよろしくお願い致します。 今年の第一回目からはやくもpython,php,r…

AppEngineでCounterを実装する(2) #appengine #slim3

前回のエントリーはバグってました。修正版をアップします。 単純なカウンター import java.io.Serializable; import java.util.ConcurrentModificationException; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger…

ConcurrentModificationExceptionになったTransactionオブジェクトはrollbackが必要か?また、そのまま再利用はできるのか? #appengine

ConcurrentModificationExceptionになったTransactionオブジェクトはrollbackは不要 再利用は不可、新規にbeginTransactionが必要。 という訳で上記のエントリーのソースにはトランザクション処理に誤りがありました。 Key key; @Before public void setup()…

AppEngineでCounterを実装する #appengine #slim3

※本エントリーのソースには誤りがありました。修正版はこちらCounterの実装に興味がある人がいるようですのでアップしておきます。 仕様は increment()でカウントアップ カウントは日毎に持つ clear()でカウントを0に戻す 単純なカウンター import java.io.S…

javaのenumを定数クラスだけに使わないでより良い使い方を学ぶ

enumは型安全な列挙定数が作れるこれですね。 public enum Sample { HOGE, FOO, BAR, } enum basics - しげるメモによるとenumってクラス本体にメソッド定義できるんですね。 public enum Sample { HOGE, FOO, BAR, ; // セミコロンで区切る public boolean …

appengine java night #3に行ってきた。 #appengine #ajn3

いやー今回も濃くておもしろかったですね。こんな濃い人が集まるApp Engine勉強会はたぶん日本でここが一番なんじゃないかと思います。 ソースを見るなり質問が飛ぶ飛ぶ!しかも普通の質問じゃないんですよね。裏でクラウドがどういう風になっているかを話し…

#slim3 のドキュメント日本語訳

id:bufferingsさんがありがたいことに翻訳してくれた。 http://d.hatena.ne.jp/bufferings/20091123/1258983438 slim3を使わない人でもappengineの特性が記載してあって良いドキュメントになっているのでappengineを使う人は必読ですよ。 いくつか知らなかっ…

javascriptの通称サイ本(初めてのJavaScript 第2版)が2009年11月28日 発売予定

定番書『初めてのJavaScript』の改訂第2版。本書では基礎固めとしてまずこの言語の基本的な構文や機能を、数多くの実例を通して学びます。後半の章では最新のWeb開発テクニックを例に、標準に準拠したWebサイトを構築するための正しいコーディング手法を解説…

GAEのログにおける時刻表示のタイムゾーンをPSTからローカルのものに変換するスクリプト #appengine

greasemonkeyスクリプトでログの日付を現地時間で表示するスクリプトを公開されています。これは便利ですね。 GAE Log Timezone Adjusterを更新しました - やればできる子の日記

#appengine にてMailAPIのOverQuotaExceptionを発生させてみた。

エラー内容は下記 org.slim3.controller.Controller runBare: The API call mail.Send() required more quota than is unavailable. com.google.apphosting.api.ApiProxy$OverQuotaException: The API call mail.Send() required more quota than is unavail…

GAE/Jでロールバックを実装する(2)#appengine

前回はJDOでしたが、slim3がJDOではなくなったので新しいDatastore版を作りました。前回と異なるのは保存元のモデルをEntityGroupのルートエンティティにしてBackupをEntityGroupに加えたことです。以前まではEntityGroupの考え方がわかっておらず、こんな時…

#appengine のDataviewerでNo Data Yet.

データを大量に削除しまくった後にDataviewerを見たら下記のメッセージが出てて、全部消えたのかと思ってあせった。。。 特定のKindしか削除していないのにDataviewerからは何も検索がヒットしなくなった。どういう仕組みなんだろう?アプリからはちゃんと検…

#appengine で一回に削除できる件数って500件だったんだ。

DatastoreService#delete(Key akey[]);で500を超えるKEYを引数に渡すと以下のエラーが出た。 org.slim3.controller.Controller runBare: cannot delete more than 500 entities in a single call java.lang.IllegalArgumentException: cannot delete more th…

appengineでエラーが出た(commit: Operation commit failed on resource)

org.datanucleus.transaction.Transaction commit: Operation commit failed on resource: org.datanucleus.store.appengine.DatastoreXAResource@adb24, error code UNKNOWN and transaction: [DataNucleus Transaction, ID=Xid= タスクキューで処理中にエ…

appengineのjunitでログイン状態で動作させる方法

ApiProxy.setEnvironmentForCurrentThread(new ApiProxy.Environment() { public String getAppId() { return "unit test"; } public Map<String, Object> getAttributes() { return new HashMap<String, Object>(); } public String getAuthDomain() { return "gmail.com"; } public String </string,></string,>…

appengine java night #2( #ajn2 )に行ってきた

1回目の感想をblogに書いてなくてごめんなさい。ごめんなさい。blogに書くまでが勉強会ですよね。さて、今回は一気に70人以上の会場になりました(前回は30人ほど)。会場が大きいと質問をしにくくなって質問が減ってしまうのではないかと心配していましたが、…

appengineでRequest was aborted after waiting too long to attempt to service your request.が出た

1.2.6がリリースされたあたりから急に表題のエラーが頻発しました。原因はたぶんこれだったようです。いまはエラー発生はしていません。この情報を得るまでに検索していたところ下記の情報が見つかりました。 初期化中のランタイムに対して転送された後続の…

appengineのweb.xmlはバージョン間で共通なのか?

セキュリティ設定を有りと無しのバージョンを用意してみたけど共通じゃないようですね。

appengineのTaskQueueで意図的にリトライさせたい場合

時間切れやスピンロックのために意図的にリトライさせたい場合がありますが、下記のようなコードでリトライさせてます。 response.sendError(400);

appengineでTaskQueueを動かした時のリクエストヘッダーの値からリトライ回数とキュー名を取得する

http://id-bluerabbit.appspot.com/taskQueue/addにアクセスされたら下記のコードでTaskQueueをaddするコードを書いた QueueFactory.getDefaultQueue().add(TaskOptions.Builder.url("/task/run")); そのTaskQueueが実行された場合のリクエストヘッダーの値…

今日のappengineは調子悪い?

朝方TaskQueueで下記2つのエラーが頻発していた。 TaskQueueなのでエラー時に自動リトライされて最終的には正常終了していた。 いつもなら3分で終わる処理が30分ほどかかった。 Request was aborted after waiting too long to attempt to service your req…

HTML5のWeb DatabaseをDeferrerdでラップして扱うORM, jsdeferred-webdatabaseが公開された。

html5のclient side databaseの非同期が辛すぎる。 - あおうさ@日記と書いたばかりでしたが、タイムリーなことにid:secondlifeさんが素晴らしいライブラリを公開されました。それがjsdeferred-webdatabaseです。 ライブラリ作成の動機は次のように語られて…

appengineでMemcacheを使ったLockを実装した

id:kazunori_279さんのMemcacheでスピンロックを実装してTask Queue処理結果を集約してみるテスト - スティルハウスの書庫が便利な仕組みなので実装してみた。実はこれを実装するのに前エントリのMemcacheCounterを使っているのでそれもエントリした。 Memca…