最後の 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 で指定したバージョンのアプリケーションが増えています。
バージョン番号.アプリケーションID.appspot.com
という URL で特定バージョンのアプリケーションにアクセスできるので、内容を適当にチェックして
問題が無いことを確認できたら、こちらのバージョンをデフォルトにします。
www.playframework-ja.org で最新版にアクセスできることを確認して作業おわり。
四年間ありがとう。お疲れさまでした。
Spring Boot 入門ハンズオンに行ってきた #jggug_boot
Groovy ユーザーグループのイベントでタイトルに Grails とありながら groovy も grails も gradle も使わないハンズオンに行ってきました。
157 ページに及ぶ入魂のスライドはこちら。
所感
- 一日分くらいの内容を二時間で駆け抜ける超高濃度ハンズオン
- Web サービスを上手かつユニークに活用
- 入力するコードはすべて gist にアップロードされていて、スライドに貼られた bit.ly の URL をクリックしてコピペすれば OK という至れり尽くせり仕様
- Same Origin Policy を突破する Filter を設定して JSFiddle から localhost にアクセスできるようにするという発想はなかった
- Spring Boot とてもいい
- 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 さんからフォロー頂きました。
@garbagetown https://t.co/p0ORuTuovK asset-pipelineはやらないけど静的リソースのハンドリングはSpring 4.1(Spring Boot 1.2)で機能追加される予定です
— Toshiaki Maki (@making) 2014, 8月 7
URL の読み替えや物理パスとの紐付けなどはサーバサイドで解決すべきことなので Resolver と Transformer を用意するけど、静的リソースの変換や結合、ミニファイなどは grunt や gulp を使ってクライアントサイドで実施するよう整理したとのことです。
この辺りは HTTP/2 や ECMAScript 6 の登場でがらっと状況が変わるはずだから、とも書かれており、納得です。
グーグル ネット覇者の真実
先月末にぎっくり腰をやってしまい二日間寝たきりだったので Kindle 版を買って読んでみました。
- 作者: スティーブン・レヴィ
- 出版社/メーカー: 阪急コミュニケーションズ
- 発売日: 2012/08/31
- メディア: Kindle版
- 購入: 1人 クリック: 16回
- この商品を含むブログを見る
創業当時から広告事業で大成功を納めるまでのわくわくするような話から、超大企業になったことによる様々な苦しみに続き、フェイスブックにこてんぱんにやられるところまでが書かれていました。スタートアップ企業に務めている方などは読んでみるとテンションが上がってよいのではないでしょうか。
技術的なことはほとんど書かれていないどころか「ジャバスクリプト」なんて書かれている始末なので、技術的な側面に興味がある方は少し古い本ですが「Googleを支える技術」を読んでみると面白いと思います。
Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)
- 作者: 西田圭介
- 出版社/メーカー: 技術評論社
- 発売日: 2008/03/28
- メディア: 単行本(ソフトカバー)
- 購入: 47人 クリック: 1,166回
- この商品を含むブログ (374件) を見る
この本の終盤に書かれている Google Buz とか Wave (なつかしいですね...) の失敗から Google +1 のリリースまで、Google はあくまでネット企業というイメージでしたが、ここ数年は Google Glass や自動運転自動車、Chromecast など、人々をパソコンから引き離そうとしているようにも見えます。
そう言えばスマートウォッチなんてものも発表されましたね。
- Google、スマートウォッチOS、Android Wearを発表―最初の製品はLG ‘G’とMotorola Moto 360 - TechCrunch
- 長年腕時計嫌いだったぼくがAndroid Wearスマートウォッチを常用したくなった理由 - TechCrunch
正直もうちょっとデザインなんとかならなかったのかとも思いますが、どうでもいいアプリを作ってみるのも楽しそうです。
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 の自動運転車のごく簡単な紹介です。
全体的に落ち着いたプレゼンで、スピード、抑揚ともに控えめな印象ですが、それでも初見で字幕無しだったら厳しいだろうなと感じるところが何箇所かありました。これくらいすらすら聴けるようになりたいものです。
以下、英語学習とはなんの関係もない余談。
上記プレゼンの冒頭とは相容れず、ぼくは男性ですが自動車の運転が好きではありません。
酒を飲んだら乗れないという時点で論外ですし、何をするにせよ費用が掛かり過ぎるうえに、最悪の場合は人を殺すこともあり得るのは、娯楽としてはハードモード過ぎると思わざるを得ません。
それでもやはり小さな子供がいると自動車の便利さは代え難いものがあるので、早くこのような技術が実用化されるといいと思います。
TED日本語 - マルコ・テンペスト: 空前絶後のサイバー・カードマジック
今日はマジックとテクノロジーを組み合わせたアーティスト、マルコ・テンペストさんの数多くある TED スピーチの中から、まだ観たことがなかったものを選んでみました。
相変わらずの「分かってらっしゃる」演出が素晴らしく、ついつい動画のほうに注目してしまいます。
マルコ・テンペストさんは、NHK の番組「スーパープレゼンテーション」に登場したこともあり、その際にマジックとテクノロジーを組み合わせたいと考えていたものの、お金が無かったので、当時 NeXT を立ち上げたばかりのスティーブ・ジョブズに NeXT をくれないかと手紙を書き、本当に NeXT コンピュータを贈ってもらったという仰天エピソードが紹介されていました。
下記リンクにその逸話も含むインタビュー記事が英語と日本語で掲載されていますので、興味がある方は併せてご覧になってみてください。
ちなみにこの番組「スーパープレゼンテーション」は、吹石一恵様の美しいご尊顔を拝見し、麗しいお声を拝聴することのできる神番組なので、正座して視聴しましょう。