タグ

ブックマーク / satoshi.blogs.com (8)

  • Google App Engine入門:Entity Groupとトランザクション処理

    今週に入ってから、ようやく少し気でGoogle App Engineでプログラムを書き始めている私だが、ようやく Entity Group の使い方が分かって来たので簡単に解説してみる。 Entity Groupとは、一口で言えば「トランザクションを使ったアトミックな読み書きの対象となるEntity(=データベース上のオブジェクト)の集まり」である。 イメージとしては、まず「一つのハノイの塔を三人で同時に遊んでいる姿」を思い浮かべると分かりやすいかも知れない。全くのルールなしで皆で同時に遊ぼうとすると、腕が交錯してぐちゃぐちゃになってしまう。 そこで、「ある時点でハノイの塔ボード(三つの棒を支えている水平に置かれた板)に触ることが出来る人は常に一人。一度ボードに触った人はすべての円盤をいずれかの棒の位置に置いた状態にしてからしか手を離してはいけない。もし自分がハノイの塔に触りたい時に、す

  • Google App Engine入門:Datastore上で「ユニーク制限」を実現する方法

    Google App Engine のDatastoreには、通常のリレーショナルデータベースと比べた時にいくつかの制限があるが、その一つが「このプロパティの値は常にユニークでなければならない」という指定(ユニーク制限)ができないことである。 Invoice IDのように自動生成するものであれば、アプリケーション側でなんとかすることも簡単だが、メールアドレスやハンドル名など、ユーザーが入力するものになると、ユニークであることをきちんと判定した上でEntityを作ることが必要になる。 もちろん、単純に「有無をチェックして、なければ作る」というプログラムではスレッド間の競合に対応できないので、そこはトランザクションを使ってアトミックに処理をする必要がある。 App Engine上でトランザクションを実現するには、エンティティグループという仕組みを使って行うが、気をつけなければいけないのは、エン

  • Google App Engine入門:実行効率を犠牲にせずに開発効率だけを上げるテクニック

    一つ前の富豪プログラミングのエントリーともつながる話だが、Google App Engineは「ちゃんとスケーラビリティを考慮してアプリケーションを作るには何に気をつけなければならないか」を勉強するには絶好の環境だ。そこで今回は、その「ケチな大富豪的なプログラミング」の実践編。 Google App Engine上のアプリをいくつか書いているうちに、必要に迫られて自然発生的にできてきたのが、gdispatchという数十行のコードからなる小さなモジュール(ソースコードはgithubに置いてある)。これをGoogle App Engineに標準で付いて来るwebappと組み合わせてフレームワークとして使っている。 gdispatchを設計する上で重視したのは、 (1)Google App Engine上でのアプリの開発を効率化する上で「明らかにこれがあると開発効率が格段に向上する」というもの以

  • 「RESTful MVC」なアーキテクチャの話

    最近、増井君と私でアーキテクチャの話をすることが多いのだが、そんなディスカッションの中で気に入っているのは左の図のようなアーキテクチャ。 もちろん、核となるのはビジネスロジックを含んだModelの部分。そこをしっかりと実装し、内部構造を隠す粒度の荒いインターフェイスを定義し、外から何をされてもデータの整合性が壊れない様にすることは何よりも大切。 そして、そのModel層へのインターフェイスを特定の言語に依存したクラスやAPIではなく、HTTP上でJSON(XMLでもかまわない)をやりとりするだけの RESTfulなWeb Serviceにすることがミソ。こうすることによりにより、どんなに締め切りに負われようが、誰がControllerを実装しようが「ずるができない」ように作っておく(ずる=来使うべき外部インターフェイスだけでなく、Model内部に直接アクセスして依存関係を作ってしまう事)

    「RESTful MVC」なアーキテクチャの話
  • Life is beautiful: Javascript、クロージャを使ったプライベート関数の隠蔽について

    (このエントリーは「Javascriptクイズ:無名関数と実行効率の話」の続編。) 「???」と頭をかしげる太郎に、「じゃあ、これだったらどうかな?」と三郎はコードを書き始めます。 function code2name(code) { var mapping = { 'us': 'United States', 'ja': 'Japan', 'ko': 'Korea', 'ru': 'Russa', 'uk': 'United Kingdom', 'fr': 'France', 'cc': 'China', 'gw': 'Germany' }; return mapping[code] || '(unknown)'; } 「カントリーコードを国名に変換しているんですね。」と太郎。 「どこが問題だか分かる?」 「うーん、マッピングのためのオブジェクトを毎回作り直しているところかな。」 「そう

  • Life is beautiful: プレゼン初心者が覚えておくべき3つのポイント

    プレゼンの初心者にありがちな失敗は、 ・自分の未熟なプレゼンのテクニックを気にしすぎてあがってしまう ・情報は多い方が良いと勘違いして、スライドをたくさんの文字で埋め尽くしてしまう ・その結果、観客に話しかけるのではなく、観客に背中を見せてスライドを読んでしまう ・結局何が言いたいのか全く伝わって来ない など。今日はそんな人に覚えてほしい三つのポイント。 1. 観客は「未熟なプレゼン」には寛大だが、「何を伝えたいのか分からないプレゼン」には厳しい 「自分はプレゼンが不得意」と思い込んでいる(もしくは悩んでいる)人はたくさんいると思うが、そんな人がまず覚えておくべきことは、観客が「未熟なプレゼン」にはけっこう寛大であること。小中学生ならいざしらず、社会に出てから「プレゼンターの未熟さ」笑う人はまずいないので、心配しなくても良い。逆に、観客が許してくれないのは「何を伝えたいのかが分からないプレ

  • ネットの時代には「知識量・記憶力」よりは「適応力・応用力」の方がずっと大切

    先日の「習作UI: 縁日の金魚を再現してみた」というエントリー。特に深い意味もなく作ったのだが、ソフトウェア・エンジニアを目指す学生さんのためにひとこと付け加えておきたいのは、この業界で気で成功しようと思ったら、この程度のプログラムは、シミュレーションの専門家でなくともサクッと作れるように自分を鍛えておかなければいけない、ということ。 この業界で働きはじめると、担当した仕事によって、データ解析・Java・3D・シミュレーションなどのある特定の分野のプログラミングの経験を積むことになる。そういった経験を通して特定の分野を深堀りしてエキスパートになるのはおおいに結構なのだが、往々にして落ち込んでしまうのが「ボクはJavaのエキスパートだからRubyではプログラムは書かない」、「シミュレーションのことならそれに詳しいエンジニアがいるんだからその人に頼んで」、「今からFlashを勉強している時間

  • Life is beautiful: おいしい親子丼を作るコツ

    親子丼のレシピは、「煮込んだタマネギと鶏肉に溶き卵を乗せて半熟になったところでご飯にかける」というとても単純なものだが、おいしく作るのは意外と難しい。私も、なかなかマスターできなかったのだが、ようやく自分でも満足できる味のものができるようになったのでここで私なりにあみだしたコツを披露する。 結局のところ、卵への火の通し方がキモなのだが、 (1)大きなフライパンで何人分も一度に作ろうとせずに、蓋付きの親子丼専用のなべで一人分づつ丁寧に卵に火を通すこと(タマネギと鶏肉をタレで煮込む工程は大きなフライパンでやってもかまわない)、 (2)卵は二回に分けて流し入れること、 (3)卵はどんぶり一杯あたり二個使うこと、 (4)卵にあらかじめ少しタレを混ぜておくこと、 (5)卵はあまり丁寧に混ぜずに使うこと、 (6)鶏肉の量は控えめにすること、 という大原則をしっかりと守り、後は「おいしい親子丼がべたい

  • 1