GAE(Google App Engine)pythonのNDBで非同期機能を使う

GAE(Google App Engine)のpythonで、データベース(NDB)を使うときに非同期機能を使うとスピードが早くなるらしいので試してみた。

プログラムは全くの素人なので、非同期と、同期だと言葉の感覚的に同期の方が早そうなイメージなんだけど、実際は、非同期の方が早いらしい。これは図の説明を見たらなんとなく理解できた。

で、複数のデータを取得するときに、非同期で取得すると、一個づつ順番にデータを集めるんじゃなくて、一斉に複数の指令を出せるから、並列処理出来て早いということっぽい。

やり方は、幾つかあるようだけど、取り敢えず簡単に出来たのは以下。

「fetch」を「fetch_async」に置き換えて、「get_result()」で結果を受け取る。

A_future=B.fetch_async
C_future=D.fetch_async
E_future=F.fetch_async

A = A_future.get_result()
C = C_future.get_result()
E = E_future.get_result()

取り敢えずこんな感じで上手く言った。非同期で並列処理されているかどうかを確認するには、同じくGAE内で用意されている「Appstats」を使うとグラフで簡単にチェックできる。「Appstats」を使う設定は簡単で10分くらいでできる。これはめちゃくちゃ便利。

マニュアルを見ると、asyncの次にTaskletsというのが紹介されていて、yieldとか、イテレーターとかジェネレーターとか調べてて、まだイマイチ理解できていない状態。

最近は、ネットにわかりやすい情報がたくさんあるから、素人でもプログラムの勉強がし易いけど、そうなると、もうソフトの世界より、小型のドローンを中国でバンバン作っていたりするように、ハードの世界で成功する人が増えてくるような気がなんとなくする。

GAE(Google app engine python)でデプロイに失敗しError 409が出た時の解決法

以前もデプロイに失敗して以下のようなエラーが出たことがある。

Error 409: — begin server output —
Another transaction by user (ユーザー名) is already in progress for app: (アプリ名), version: 1. That user can undo the transaction with “appcfg rollback”.

これはデプロイの途中で何かあってエラーが出たという意味らしく、元の状態に戻すためにはコマンドプロンプトからコマンドを打ち込む必要がある。

前回は、ネットで調べてすぐ解決したんだけど、今回はなぜか何度やっても解決しない。原因は、Google app engineを置いている場所と、アプリを置いているフォルダを別の場所においていたからっぽい。

結論を書くと以下のようにしたら解決した。

まず、google_appengineのフォルダ上にマウスポインタを置いて、SHIFTを押しながら右クリック

すると開いたウィンドウ内に「コマンド ウィンドウをココで開く」があるのでクリック。

すると、GAE(Google app engine python)までのパスがすでに表示された状態でコマンドプロンプトが開くので

「python appcfg.py rollback ここにアプリのパスを書く」をコピペしてエンターを押せばOK

アプリのパスは、アプリのフォルダ内を表示させている状態で、フォルダ上部にあるパンくずリスト上で右クリックしてアドレスをコピーで取得できる。

また次回エラーが出た時に時間を無駄にしないように半分自分のためにここにメモしておく。

リアルで大きさも絶妙なシュライヒの動物フィギュア。

Schleich

たまたまお店で見つけて一目惚れしたのがこの動物フィギュア。ドイツのシュライヒ(Schleich)という会社が作っている動物シリーズのフィギュアで1個1000円ぐらい。アマゾンならココ楽天ならココで買えます。フィギュアの姿が今にも動き出しそうな瞬間を捉えていて、その立ち姿がいい。そして大きさが部屋に飾るのに丁度いい。質感も細かいとこにまで雑さが全くなくて、高品質。完成度が高い商品。

最初はシュライヒはドイツの会社なので、流石ドイツだな、とよくわからず凄いと思っていたけど、よく調べると全部製造は中国で、もっと調べてみると中国の広東省で製造されていた。海外のサイトで売られているシュライヒも製造は同じくGuangdong(広東)だった。そういえば、日本で売られているいろんなフィギュアはほとんどが中国の広東省で作られていて、世界のおもちゃの多くもそこで作られていて世界のおもちゃの製造基地、と耳にしたことがあるのを思い出した。

Schleich

それにしてもよく出来てる。この品質に雑さがないのは、相当品質管理のノウハウが蓄積されていないとできないはずで、素直に凄いと思う。このシュライヒのシリーズは、野生動物を初め、家畜(特にSchleich シュライヒ ブタ (メス)が相当人気らしい)、馬など数百種類があるので、見ていると全シリーズコンプリートしたくなって、ネット通販で物色して、注文カゴに入れていくと、気づいたら合計1万円を超えていたりする。

Schleich

冷静に考えてみると、こんなに精密な商品が一個1000円とかで買えるのは、相当人件費が安い場所で作らないと無理で、日本とかドイツで作っていたんじゃ成り立たないんだろうな。

取り敢えず、今回はカッコイイ肉食獣の、Schleich ジャガーSchleich チータSchleich ヒョウを揃えて、インテリアとして観葉植物に合わせるためにSchleich キリンも購入。他に、家畜の豚、牛、鶏、とインテリアに合いそうな馬を1頭買う予定。今回はいい買い物が出来て良かったです♪

【amazon】Schleich シュライヒ
【楽天】Schleich シュライヒ

プールで塩素から頭皮を守るためにアリーナ(ARENA)2ウェイシリコンキャップARN4420を使ってみた

プールで泳ぐときに、今までは普通のメッシュ素材のツーウェイ帽子を使っていました。ツーウェイ帽子というのは、縦横両方向に伸びる素材のことで、かぶっていて圧迫感がほとんどなく通気性もいいので蒸れない。だた、逆に言うと、塩素を含んだプールの水もスースー通るので塩素で髪の毛や、頭皮がダメージを受けやすくなる。

最初はそんなに気になっていなかったけど、最近塩素での傷みが気になりだしたので、そういえばシリコン素材のキャップだと水を通さないので、髪にいいと聞いたのを思い出してシリコンキャップを買おうかと思った。しかし、シリコンキャップはほんとうに頭にピッタリと密着して、試合などで利用するもので、普通プールで健康のために泳ぐ人は使わないらしい、そこで登場するのが、2ウェイシリコンキャップ。

2ウェイシリコンキャップは、普通のツーウェイキャップ(縦横に伸びるもの)の外側にシリコンでコーティングをしたもので、ツーウェイキャップの伸縮性と、シリコンの水が通りにくい(完全防水ではない)という両方の性質のいいとこ取りをしたもので、今はこのタイプが使いやすいために人気らしい、とプールに来ている人から聞いた。そこで私も、このツーウェイシリコンキャップを購入しました。メーカーは以前はミズノをキャップを使っていたのですが、今回は「アマゾンでのツーウェイシリコンキャップ」と「楽天のツーウェイシリコンキャップ」を調べて、一番売れていたarena(アリーナ)の2ウェイシリコンキャップ ARN4420を選びました。

アリーナ(ARENA)2ウェイシリコンキャップARN4420
今回購入した2ウェイシリコンキャップ ARN4420

アリーナ(ARENA)2ウェイシリコンキャップARN4420の生地の表面
アリーナのツーウェイシリコンキャップの表面、シリコンコーティングされていてツルツルなのがわかる。

アリーナ(ARENA)2ウェイシリコンキャップARN4420の帽子の内側
こちらがツーウェイシリコンキャップの裏側。シリコンではなく、伸縮性のある繊維でザラザラしているのがわかる。

ツーウェイシリコンキャップの使い心地ですが、以前使っていたメッシュタイプのツーウェイキャップに比べると、圧迫感はあります、かぶるときもちょっときついです。ですが、最初だけで、2回か3回使えば、もう慣れて全く気にならなくなるレベルでした。プールで2時間くらい泳いだ後での、髪の状況ですが、以前のメッシュタイプと比べると明らかに髪の傷みが減っているのがわかりました。以前は、泳いだ後シャワーで髪を洗うとき髪がパサパサで指が通りにくかったんですが、シリコンツーウェイキャップに変えてからは、指が通るようになりました。これだけ効果があるなら、もう普通のメッシュキャップには使うことは無さそうです。今回は良い買い物ができて満足しています♪

【楽天】2ウェイシリコンキャップ ARN4420
【amazon】2ウェイシリコンキャップ ARN4420

水泳メモ19 手で水を抑えこむと余計に沈む

前回、手で水を抑えると余計に沈む、という話を書いていたけど、今回プールに行ってもう一つ気づいたことがある。
手で水を抑えると、前に進むためのエネルギーが減るので、沈むやすくなる、というのはあるけど
もう1つは、手を水に入れてからすぐに手で水を抑えこむと、体が一時的には浮くんだけど、それだと
手がもっと後ろの方に来て、手を水から抜いて息継ぎをする頃に、水を抑えていた手が無くなることでぐっと沈んでしまい
沈むと息継ぎしにくいので、余計頭をあげようとして、頭が水面から出ると重くなるので、さらに沈みやすくなる。

なので、手を水中に入れて斜めに手が沈むまではゆっくり下げて、できるだけ水を抑えこまず、つまり
体を浮かせようとせずにむしろ頭から水中に突っ込む感じで、顎を引いて、頭が水面に出ないようにして
体が沈んだらグッと手を引いて水を引き寄せて、手を最後に水から引き抜く頃に、沈んでいた体が
ポコンと浮いてくるので、それに合わせて息継ぎをすると楽で早い、と気づいた。