garbagetown

個人の日記です

最後の play gae:deploy

playframework の日本語ドキュメントが本家にマージされることになったので、GitHubリポジトリplayframework-ja/translation-project に引っ越したり、このへん を見ながら build.sbt を書いたりしていました。

ちなみにこのドキュメントには不備があって、build.sbt に以下を追記しないとビルドできません。

resolvers += "Typesafe Releases Repository" at "http://repo.typesafe.com/typesafe/releases/"

無事にビルドが通るところまで確認して James Roper に連絡したので、以後は上記リポジトリに翻訳文をコミットすると 10 分くらいで www.playframework.com に反映されるはずです。

最後の play gae:deploy

これで www.playframework-ja.org は晴れてお役御免となったので、サイトトップに注意書きと本家サイトへのリンクを追加しました。ドキュメントページにアクセスした場合は、リクエストされたバージョンとページ ID もリンクに埋め込まれる親切仕様です。

これを play gae:deploy という世界で 100 人くらいしか使っていそうにないコマンドで Google AppEngine にデプロイします。もう使うこともないと思うので記念にログを全文掲載。

# garbagetown at MBA-2.local in ~/devel/repos/playdocja on git:master o [9:20:45]
$ play gae:deploy
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.7, http://www.playframework.org
~
~
~ Compiling
~ ---------
CompilerOracle: exclude jregex/Pretokenizer.next
Listening for transport dt_socket at address: 8000
09:20:53,107 INFO  ~ Starting /Users/garbagetown/devel/repos/playdocja
09:20:53,113 WARN  ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.gae)
09:20:53,114 INFO  ~ Module gae is available (/Users/garbagetown/devel/play/play-1.2.7/modules/gae-1.6.0)
09:20:54,213 WARN  ~ 
09:20:54,213 WARN  ~ Google App Engine module
09:20:54,213 WARN  ~ ~~~~~~~~~~~~~~~~~~~~~~~
09:20:54,213 WARN  ~ No Google App Engine environment found. Setting up a development environement
09:20:54,280 WARN  ~ 
09:20:54,280 INFO  ~ Precompiling ...
09:21:05,488 INFO  ~ Done.
~
~ Packaging
~ ---------
~ Packaging current version of the framework and the application to /var/folders/w7/m65h4t_j3pj6njq64v_3dygc0000gn/T/playdocja.war ...
~ Excluding JAR /Users/garbagetown/devel/play/play-1.2.7/modules/gae-1.6.0/lib/appengine-agent.jar ...
~ Excluding JAR /Users/garbagetown/devel/play/play-1.2.7/modules/gae-1.6.0/lib/appengine-agentimpl.jar ...
~ Excluding JAR /Users/garbagetown/devel/play/play-1.2.7/modules/gae-1.6.0/lib/appengine-agentruntime.jar ...
~ Excluding JAR /Users/garbagetown/devel/play/play-1.2.7/modules/gae-1.6.0/lib/appengine-api-labs.jar ...
~ Excluding JAR /Users/garbagetown/devel/play/play-1.2.7/modules/gae-1.6.0/lib/appengine-api-stubs.jar ...
~ Excluding JAR /Users/garbagetown/devel/play/play-1.2.7/modules/gae-1.6.0/lib/appengine-local-runtime.jar ...
~ Excluding JAR /Users/garbagetown/devel/play/play-1.2.7/modules/gae-1.6.0/lib/appengine-testing.jar ...
~ Excluding JAR /Users/garbagetown/devel/play/play-1.2.7/framework/lib/mysql-connector-java-5.1.20.jar ...
~ Excluding JAR /Users/garbagetown/devel/play/play-1.2.7/framework/lib/postgresql-9.0.jar ...
~
~ Deploying
~ ---------
********************************************************
There is a new version of the SDK available.
-----------
Latest SDK:
Release: 1.9.9
Timestamp: Wed Aug 06 10:10:14 JST 2014
API versions: [1.0]

-----------
Your SDK:
Release: 1.9.6
Timestamp: Fri May 30 09:53:36 JST 2014
API versions: [1.0]

-----------
Please visit https://developers.google.com/appengine/downloads for the latest SDK.
********************************************************
Reading application configuration data...
Aug 23, 2014 9:21:18 AM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
INFO: Successfully processed /var/folders/w7/m65h4t_j3pj6njq64v_3dygc0000gn/T/playdocja.war/WEB-INF/appengine-web.xml
Aug 23, 2014 9:21:18 AM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
INFO: Successfully processed /var/folders/w7/m65h4t_j3pj6njq64v_3dygc0000gn/T/playdocja.war/WEB-INF/web.xml


Beginning interaction for module default...
0% Created staging directory at: '/var/folders/w7/m65h4t_j3pj6njq64v_3dygc0000gn/T/appcfg6862628993578567634.tmp'
5% Scanning for jsp files.
20% Scanning files on local disk.
25% Scanned 250 files.
28% Scanned 500 files.
31% Scanned 750 files.
Aug 23, 2014 9:21:57 AM com.google.appengine.tools.admin.AppVersionUpload addFile
SEVERE: Invalid character in filename: WEB-INF/application/public/images/layout/right-fake-column@2x (1).png
33% Scanned 1000 files.
34% Scanned 1250 files.
Aug 23, 2014 9:21:57 AM com.google.appengine.tools.admin.AppVersionUpload addFile
SEVERE: Invalid character in filename: WEB-INF/application/bin/public/images/layout/right-fake-column@2x (1).png
35% Scanned 1500 files.
36% Scanned 1750 files.
37% Scanned 2000 files.
37% Scanned 2250 files.
37% Scanned 2500 files.
37% Scanned 2750 files.
37% Scanned 3000 files.
37% Scanned 3250 files.
37% Scanned 3500 files.
37% Scanned 3750 files.
37% Initiating update.
37% Cloning 3805 application files.
37% Cloned 2000 files.
40% Uploading 441 files.
52% Sending batch containing 100 file(s) totaling 2342KB.
61% Uploaded 110 files.
68% Sending batch containing 100 file(s) totaling 2513KB.
73% Uploaded 220 files.
77% Sending batch containing 100 file(s) totaling 2470KB.
80% Uploaded 330 files.
82% Sending batch containing 100 file(s) totaling 2843KB.
84% Uploaded 440 files.
85% Initializing precompilation...
86% Sending batch containing 41 file(s) totaling 1015KB.
90% Deploying new version.
95% Closing update: new version is ready to start serving.
98% Uploading index definitions.

Update for module default completed successfully.
Success.
Cleaning up temporary files for module default...
~ 
~ Done!
~ 

テストと切り替え

無事にデプロイが完了すると GAE コンソールの Versions というメニューに appengine-web.xml で指定したバージョンのアプリケーションが増えています。

f:id:garbagetown:20140823095350p:plain

バージョン番号.アプリケーションID.appspot.com という URL で特定バージョンのアプリケーションにアクセスできるので、内容を適当にチェックして

f:id:garbagetown:20140823100840p:plain

問題が無いことを確認できたら、こちらのバージョンをデフォルトにします。

f:id:garbagetown:20140823100938p:plain

www.playframework-ja.org で最新版にアクセスできることを確認して作業おわり。

f:id:garbagetown:20140823101030p:plain

四年間ありがとう。お疲れさまでした。

Spring Boot 入門ハンズオンに行ってきた #jggug_boot

Groovy ユーザーグループのイベントでタイトルに Grails とありながら groovy も grails も gradle も使わないハンズオンに行ってきました。

157 ページに及ぶ入魂のスライドはこちら。

所感

  • 一日分くらいの内容を二時間で駆け抜ける超高濃度ハンズオン
  • Web サービスを上手かつユニークに活用
    • 入力するコードはすべて gist にアップロードされていて、スライドに貼られた bit.ly の URL をクリックしてコピペすれば OK という至れり尽くせり仕様
    • Same Origin Policy を突破する Filter を設定して JSFiddle から localhost にアクセスできるようにするという発想はなかった
  • Spring Boot とてもいい
    • ログが見易い
    • jar に固めたあとでも外からプロパティを変更できる
    • YAML で設定が書ける
    • 依存性に starter を追加するだけで「いい感じ」にコンポーネントが登録される
      • 多数の starter が用意されている
      • 自分で starter を作ることもできる?
    • asset pipeline がほしい
  • Spring Loaded がんばれ
  • TERASOLUNA Global Framework Development Guideline を読みましょう

まとめ

DI コンテナ単体としては Seasar2 と比べて冗長で堅苦しい印象があり、プロジェクト全体としては JavaEE と同じくらい多様で複雑な印象があった Spring Framework ですが、Spring Boot の登場で急に The Twelve-Factor App に書かれているような近代的アプリケーションを開発できるプラットフォームに化けたと感じました。

良くも悪くも過去の資産を切り捨てていないので、放っておいてほしいのに定期的に寄ってきて Java を dis って帰っていく怖い人たちに突っ込まれるポイントはいくつか見受けられるものの、現実的な落としどころだと思います。後方互換性を堅持しながら、なんとか Stream API や Lambda 式を提供するに至った Java8 のような印象です。

Spring 周りはもともとドキュメントがとてもよく整備されていますし、今回のハンズオン資料や上記ガイドラインに加えて書籍も執筆中とのことで、日本語情報も充実しています。

Spring Boot 自体はまだまだ開発が活発とのことなので、大規模案件には向かないかもしれませんが、ようやく名実共に終了という雰囲気になった Struts 先輩の後釜として検討する価値は充分にあると思いました。

ハンズオン中級者編も開催予定とのことで、とても楽しみです。

あわせて読みたい

追記

asset pipeline についてさっそく @making さんからフォロー頂きました。

URL の読み替えや物理パスとの紐付けなどはサーバサイドで解決すべきことなので Resolver と Transformer を用意するけど、静的リソースの変換や結合、ミニファイなどは grunt や gulp を使ってクライアントサイドで実施するよう整理したとのことです。

この辺りは HTTP/2 や ECMAScript 6 の登場でがらっと状況が変わるはずだから、とも書かれており、納得です。

グーグル ネット覇者の真実

先月末にぎっくり腰をやってしまい二日間寝たきりだったので Kindle 版を買って読んでみました。

グーグル ネット覇者の真実

グーグル ネット覇者の真実

創業当時から広告事業で大成功を納めるまでのわくわくするような話から、超大企業になったことによる様々な苦しみに続き、フェイスブックにこてんぱんにやられるところまでが書かれていました。スタートアップ企業に務めている方などは読んでみるとテンションが上がってよいのではないでしょうか。

技術的なことはほとんど書かれていないどころか「ジャバスクリプト」なんて書かれている始末なので、技術的な側面に興味がある方は少し古い本ですが「Googleを支える技術」を読んでみると面白いと思います。

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

この本の終盤に書かれている Google Buz とか Wave (なつかしいですね...) の失敗から Google +1 のリリースまで、Google はあくまでネット企業というイメージでしたが、ここ数年は Google Glass や自動運転自動車、Chromecast など、人々をパソコンから引き離そうとしているようにも見えます。

そう言えばスマートウォッチなんてものも発表されましたね。

正直もうちょっとデザインなんとかならなかったのかとも思いますが、どうでもいいアプリを作ってみるのも楽しそうです。

Calling all translators!

先月末の 06/30 に Playframework のメーリングリストに以下のメールが投稿されました。

Playframework 日本ユーザー会のメーリングリストに吉田さんが投稿してくださったとおり、コミュニティが有志で管理していたドキュメント翻訳を playframework.com で公開できるようにしたという内容です。

上記 James の投稿にリンクが貼られていた Translations を読んでみたところ、現在の運用と大きく変わるところも無さそうなので、日本語翻訳も playframework.com に提供する旨を返信しました。

現在の playframework-ja.org は、ぼくが playframrowk 1.2 で書いた怪しげなアプリケーションを Google App Engine で動かしており、ビルドやデプロイ手順が秘伝のタレ化していたり、サイト全体のデザイン変更やダウンロードページその他の変更への追従が地味に大変だったりと、ドキュメント翻訳以外の手間も掛かっていたので、いい機会だと考えました。

Google Analytics のログを眺めたり Amazon アフィリエイトドメイン利用料を払うための小銭を稼いだりすると言った楽しみがなくなるのは少し寂しい(アクセスが収束するまで playframework-ja.org も活かしておきますが、playframework.com へリダイレクトする簡単なアプリを配置する予定)ですが、本家サイトでの翻訳ドキュメント公開は四年越しの悲願でもあったので、ようやくあるべきところに落ち着きそうでとてもうれしく思うと同時に、遅れに遅れている 2.2.0, 2.3.0 の翻訳プレッシャーをこれまで以上に重く感じています。

日本語翻訳への貢献手順をまとめ次第、日本Playframeworkユーザー会 | Doorkeeper で翻訳もくもく会を設けようと思いますので、英語や OSS 貢献などに興味がある方は是非ご協力頂ければと思います。

TED日本語 - セバスチャン・スラン: Googleの自動運転車で目指していること

少し間が空いてしまいましたが今日はこちら。

ぽろぽろ噂を聞く Google の自動運転車のごく簡単な紹介です。

f:id:garbagetown:20140610221107p:plain

全体的に落ち着いたプレゼンで、スピード、抑揚ともに控えめな印象ですが、それでも初見で字幕無しだったら厳しいだろうなと感じるところが何箇所かありました。これくらいすらすら聴けるようになりたいものです。

以下、英語学習とはなんの関係もない余談。

上記プレゼンの冒頭とは相容れず、ぼくは男性ですが自動車の運転が好きではありません。

酒を飲んだら乗れないという時点で論外ですし、何をするにせよ費用が掛かり過ぎるうえに、最悪の場合は人を殺すこともあり得るのは、娯楽としてはハードモード過ぎると思わざるを得ません。

それでもやはり小さな子供がいると自動車の便利さは代え難いものがあるので、早くこのような技術が実用化されるといいと思います。

TED日本語 - マルコ・テンペスト: 空前絶後のサイバー・カードマジック

今日はマジックとテクノロジーを組み合わせたアーティスト、マルコ・テンペストさんの数多くある TED スピーチの中から、まだ観たことがなかったものを選んでみました。

相変わらずの「分かってらっしゃる」演出が素晴らしく、ついつい動画のほうに注目してしまいます。

f:id:garbagetown:20140529214854p:plain

マルコ・テンペストさんは、NHK の番組「スーパープレゼンテーション」に登場したこともあり、その際にマジックとテクノロジーを組み合わせたいと考えていたものの、お金が無かったので、当時 NeXT を立ち上げたばかりのスティーブ・ジョブズに NeXT をくれないかと手紙を書き、本当に NeXT コンピュータを贈ってもらったという仰天エピソードが紹介されていました。

下記リンクにその逸話も含むインタビュー記事が英語と日本語で掲載されていますので、興味がある方は併せてご覧になってみてください。

ちなみにこの番組「スーパープレゼンテーション」は、吹石一恵様の美しいご尊顔を拝見し、麗しいお声を拝聴することのできる神番組なので、正座して視聴しましょう。

TED日本語 - アーサー・ベンジャミン: フィボナッチ数の魅力

体調があまり良くないので短めのやつを。

f:id:garbagetown:20140526221122p:plain

これいいです。今まで観た中で一番いいかもしれない。なぜって

  • 話し方がきれい。スピード、滑舌、抑揚、声量。たぶん発音もすごくきれい
  • 時間が短い。6 分 25 秒しかないので何度も聴ける
  • 難しい単語が出てこない。知らない単語は片手で数えるくらい
  • 黄金比のところで出てくるスライドのねーちゃんが絶妙にエロい

最後のはまあ冗談として、これくらい短くて簡単だとシャドーイングに持ってこいですね。おすすめです。