2014/02/26

Scalajsちょっとだけ試してみた

むむむ、最近Scala界隈でやたらバズってるので試してみたけど、ムムム
なにかっていうと、Scalaで書いたソースをJavascriptのソースにコンパイルするんだとか。



取りあえず、下記を参考にさせてもらい、やってみる。
Scala.jsが凄い − mizchi's blog

まずはサンプルプロジェクトをお借りする。
$ git clone https://github.com/sjrd/scala-js-example-app
$ cd scala-js-example-app

そしてコンパイルがこんな感じらしい。
$ sbt
$ sbt packageJS

そしたら下記ファイルを開いてみる。
太文字で「It works!」と表示されたらコンパイル成功。


そして下記がコンパイル元のScalaソース。
scala-js-example-app/src/main/scala/example/ScalaJSExample.scala
package example
import scala.scalajs.js
import js.Dynamic.{ global => g }
object ScalaJSExample {
  def main(): Unit = {
    val paragraph = g.document.createElement("p")
    paragraph.innerHTML = "<strong>It works!</strong>"
    g.document.getElementById("playground").appendChild(paragraph)
  }

  /** Computes the square of an integer.
   *  This demonstrates unit testing.
   */
  def square(x: Int): Int = x*x
}

このあとどうしようかw

2014/02/25

第七回新宿歌舞伎町ゴミ拾い


もう何度めの参加かは忘れたけど、新宿ゴミ拾い言ってきました。

4人で3時間くらいやった結果、7袋くらいかな。

ポイ捨てってレベルじゃないです。

まあ、明日にはまたポイ捨てされたゴミであふれてしまうんだろうし、個人的には別に社会貢献なんて狙ってやってるのではなく、ストレス発散だからあまり気にしないけど、こういうこと(ポイ捨てってレベルじゃねーぞ!とか)をネタに出来るだけ良しとしよう笑

2014/02/23

【リベンジ】PlayframworkとClearDBを使ったWebアプリをHerokuにデプロイする手順メモ

前回「PlayframworkとClearDBを使ったWebアプリをHerokuにデプロイする手順メモ」なんてのをやったんだけど、結局稼働せず。。。
それから暫くHerokuの勉強を中心に頑張ってて、やっと原因らしいものが判明。 
Playframeworkは2.2.1を利用しているのだけど、2.2からはProcfileの書き方が変わったそうで
前は

web: target/start -Dhttp.port=${PORT} {JAVA_OPTS} -Ddb.default.url=${DATABASE_URL}

とか書いてたんだけど、今は

web: target/universal/stage/bin/my_apprication -Dhttp.port=${PORT} -Ddb.default.url=${DATABASE_URL}

って書かなきゃ行けないみたい。「my_apprication」はアプリケーション名で、スネーク型で書けとのこと。
あと、{JAVA_OPTS}は書かなくて良いらしい。

アプリを作成してからHerokuにデプロイするまでのコマンドはこんな感じ。
まずgitの初期化。

$ git init
$ git add .

Herokuの設定と、ClearDBのインストール、さらにClearDBのエンドポイントを確認し、HerokuのDB設定に setする。

$ heroku create my-apprication$ heroku addons:add clear
$ heroku config

=== my-apprication Config Vars
CLEARDB_DATABASE_URL: mysql://ユーザー:パスワード@us-cdbr-east-05.cleardb.net/データベース名?reconnect=true

$ heroku config:set DATABASE_URL='mysql://ユーザー:パスワード@us-cdbr-east-05.cleardb.net/データベース名?reconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8'

そしたらPlayのapplication.confファイルにDB設定を追加。
conf/application.conf
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://us-cdbr-east-05.cleardb.net:3306/データベース名?reconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8"
db.default.user=ユーザー
db.default.password="パスワード"
# 下記はClearDBをミニマムで利用する際の設定で、まだ詳細はしらべてないけど、まあ書いてある通りですね
db.default.partitionCount=1
db.default.maxConnectionsPerPartition=5
db.default.minConnectionsPerPartition=5

gitのコミットと、プッシュ(=デプロイ)
git commit -m "初回コミット"
git push heroku master

これでok。
ちなみにheroku createするとgitの設定も書き換えてくれてるっぽい。
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "heroku"]
url = git@heroku.com:my-apprication.git
fetch = +refs/heads/*:refs/remotes/heroku/*
[branch "master"]
remote = heroku
merge = refs/heads/master

2014/02/22

Playfrmaework2.2.1で変なエラーが[IllegalStateException: JSR-303 validated property ...

Playfrmaework2.2.1つかってて、DBにアクセス時下記の謎エラーが。
アクセサが無い?
ん?
[IllegalStateException: JSR-303 validated property 'name' does not have a corresponding accessor for data binding - check your DataBinder's configuration (bean property versus direct field access)]

// @LINE:11
case controllers_Application_updateParent4(params) => {
   call(params.fromQuery[Int]("p", Some(1)), params.fromQuery[Long]("id", None)) { (p, id) =>
        invokeHandler(controllers.Application.updateParent(p, id), HandlerDef(this, "controllers.Application", "updateParent", Seq(classOf[Int], classOf[Long]),"POST", """""", Routes.prefix + """updateParent"""))
   }
}

// @LINE:12

下記をしてみたら治った。謎。
$ play clean-all
[info] Done!
$ play run

どうやらPlayではgetterとsetterを自動的に作成するとかなんとかで、何らかの理由で作成されてなかったとかなんとかで、play clean-allでsbtのキャッシュをクリアしてあげるとかなんとか? たぶん色々間違ってるけどとりあえず放置。

ディアブロ3

とりあえずノーマルモードクリアー!
今はナイトメアモードの2章途中。マスターIで頑張ってるのでなかなか進みません。
頑張ってるってか死にながらちょっとづつ進んでるって感じなんだけどw
しかし面白い。時間を忘れてやってしまいそうなので、ちょくちょく時計を見る様にはしてるんだけど、それでも止め時がわからないほどw

ディアブロ復活シーンは、久しぶりにゲームでアツイと思えた。


Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」 from Yoshimura Soichiro

実は個人的にPlay2/ScalaでWebアプリを作っているのだけど、周りにそんなことやってる人がいないので一人(というか独り)で暗闇を走ってる感があったんだよね。

Scalaなんて社内でやってる人ほとんどいないし。

でも、まったく同じ構成(DBもMySQLだし)でこれだけ大規模のシステムを作ったという事例は、とても励みになる。


2014/02/10

Fall Out Boy Japan Live Tour 2014@新木場StudioCoast


最近は一番好きなLinkin Parkよりも再生回数が多くて(これを書いてる仕事帰りの電車の中でも聴いてる)、一人音楽ねじれ国会みたくなっているFall Out Boyのライブに行ってきました!

今年は色々あってもうライブに行けないので、その分全身全霊をかけて楽しもうと心に決め、これまでのライブ人生で培ってきたスキルを駆使しまくり、開演からグイグイと最前線を目指し、最終的に前から3人目まで行き鑑賞!

もうね、パトリックが、ピートが、アンディが、ジョーが、目の前で演奏しまくりで、終始エキサイトしっぱなし。それはもうエキサイト翻訳も使わず何故か「I love cicago!!!」とか意味不明なこと言っちゃうくらい。
しかも俺シカゴ行ったことないし!
(FOBはシカゴ出身のロックバンド)

ジョーなんて常に手を伸ばせば届きそうな距離でギター弾いてたからね。

しかし本当にかっこよかった。
パトリックのちょっとたるんだ顎さえちょっとかっこよかったし。

残念ながら一番聞きたかったShe's My WinonaとThe (Shipped) Gold Standardは演ってくれなかったんだけど、何よりもマイケル・ジャクソンのBeat itのカバーがかっこよすぎた。そう、ちょっとたるんだ顎よりもね。

しかし、この日は大雪というかもう豪雪で、帰りの電車が最寄り駅の一つ手前で止まってしまい立ち往生。

しょうがないので嫁ちゃんを少しは暖かいマックで待たせ(家族を物理的に守るのも旦那の使命)、23時から3時間半、吹雪の中タクシー乗り場に並びました。

いやー、良い修行になった。
最後の方足が冷え切るとか言うレベルではなく、もうなんか痺れてた。たったままでも痺れてた。
最近、人生で最長の20kmも走ったりと、もうなんでも耐えられるとおもう。

でも、耐えられたのはそれだけじゃないんだ。
途中、大きな水筒?持った多分アメリカ(英語話してた)の二人組の女性が、暖かいお茶を配ってくれたり、ヤンキー風の兄ちゃんが暖かい飲み物とホッカイロを配ってくれたりして、それが無かったら本当に冗談抜きでダメだったかも。(しかもヤンキー風の兄ちゃんは何度も車で行き来して、沢山の人を無償で送ってた。ガソリンもただじゃ無いのに)

思ったのは、本当の防寒って「まず足から」というのと、本当の社会貢献ってなんなんだろうか?ということ。

社会の先に人が居るわけじゃない。
ということは、このお茶を配ってくれた二人組の女性だったり、見た目はヤンキーっぽいすげーかっこいい兄ちゃんがしてくれた事って…。

亀有に今年も巨大雪だるま

タイトルの通り。昨年も出てきました。

2014/02/07

グリーンホーネット



この前テレビでやってたのを見たんだけど、なんとも言えないこの感じw

内容はアメコミヒーローものなんだけど、どちらかというとオチャラケコメディー映画。

でも、制作にはマトリックスのスタッフが絡んでいたり、キャメロンディアスが出てたり、エドワード・ファーロングがチョイ役で出てたり(しかもすぐにしんでしまう)と、なかなか面白い。

まあ、そこらへんしか楽しめる要素ないような気がするんだけど。

テレビドラマでもあったそうで、その時のグリーンホーネットの相棒「カトー」を演じたのはブルース・リーだとか。そして、なぜ今回も日本人ではない俳優を使うのか謎。

2014/02/05

東京家族


ちょっと前にテレビで観た映画なんだけど、ブログに書くのを放置してしまっていた。

毎週のごとく嫁ちゃんと映画館に通っていた時期に、毎週のごとく予告編でツマブキくんが泣くシーンを見せられては、いやがおうにも観なくてはと。

最近の女性なんか「~だわよ」なんて言わないじゃない?そういったところがセリフであってなんとなく演技がわざとらしいってのが初めの印象だったんだけど。

ランドマークの前でおばあちゃんがちょっと倒れちゃうシーンや、倒れてから一言も話さないのを観て「自分の将来はどうなるんだろう」とただただ漠然と不安になったりと、山田洋二監督の「リアルな描写」が本当にリアルで、いろんな意味で怖かった。

でも、それ以上に何故だか暖かい気持ちになる?映画でした。

2014/02/02

PlayframworkとClearDBを使ったWebアプリをHerokuにデプロイする手順メモ

前にやった事あったけど忘れてしまっているのと、そのときちゃんとしたメモも取っていなかったので、改めて。

アプリについて

Strutsはもう時代遅れなのかなと感じ始め、じゃあ今Javaで作るWebアプリって何が良いのかな?と調べた結果、良いか悪いかは別として、Scalaでも作れるPlayframworkに興味を持ち。

それからは勉強がてら、最低限CRUD機能+親テーブルと子テーブルのを兼ね備えていることを前提としてPlayframworkを勉強。
出来上がったアプリは、上記に併せてページング機能もあり、地味にめんどくさいロジックを組んでいるので、そこだけ我ながらの力作。
CSSはTwitterBoostrupを利用。とはいえ、今回は機能周りの勉強だったので、デザインは適当なんだけど。

今回はこのJava版のアプリをHerokuにデプロイするメモ。
DBについては、ローカルでは普段MySQLを使っているので、Heroku上ではClearDB(MySQLに似ているSaaSのDB)を使う。

実は、今はScalaでも同じものを作っていたりする。


HerokuのToolbelt

下記からHeroku Toolbeltをインストールしておく。

本当はHomebrewでインストールしたかったんだけど、上手く動かないので中止。


Herokuにログイン

さて、取りあえずディレクトリに移動。アプリ名は「crud_java」。
(ちなみに作り途中のScala版は「crud_scala」だったりして)

$ pwd
crud_java/

下記のHerokuコマンドでログイン。

$ heroku login
Enter your Heroku credentials.
Email: メールアドレス
Password (typing will be hidden):
Authentication successful.


Herokuのアプリケーション作成

下記コマンドでアプリケーションを作成する。

$ heroku create
Creating glacial-scrubland-3010... done, stack is cedar
http://glacial-scrubland-3010.herokuapp.com/ | git@heroku.com:glacial-scrubland-3010.git

Herokuにログインすると、今作成したアプリが見れる。



Herokuのアプリケーションをリネーム


「アプリを選択 > Settings > Name」で名前を変更。
(「glacial-scrubland-3010」→「playframwork-crud-java」と変更)


ローカルのgit設定も変更。

$ heroku rename playframwork-crud-java
Renaming playframwork-crud-java to playframwork-crud-java... done
http://playframwork-crud-java.herokuapp.com/ | git@heroku.com:playframwork-crud-java.git
Git remote heroku updated

一応両方やってみたけど、ローカルからの変更だけで良いっぽい?


ClearDBをインストール

下記コマンドでインストール。らくちん。

$ heroku addons:add cleardb
Adding cleardb on playframwork-crud-java... done, v3 (free)
Use `heroku addons:docs cleardb` to view documentation.

こんな感じ。



ClearDBのエンドポイントを確認

下記コマンドでエンドポイントを確認。
※{パスワード}の所はマスキング

$ heroku config | grep CLEARDB_DATABASE_URL
CLEARDB_DATABASE_URL: mysql://b1ecc59f0e6fb8:{パスワード}@us-cdbr-east-05.cleardb.net/heroku_c6bbbbd45a76b45?reconnect=true

ついでに、これらの情報を元にSequel Proとかでログインし、DatabaseやTableを作成しておく。


PlayのConfigを設定


conf/application.confのDB設定の所を、上記「ClearDBのエンドポイントを確認」で確認した内容を

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://us-cdbr-east-05.cleardb.net:3306/heroku_c6bbbbd45a76b45?characterEncoding=UTF8"
db.default.user=b1ecc59f0e6fb8
db.default.password="{パスワード}"

db.default.partitionCount=1
db.default.maxConnectionsPerPartition=5
db.default.minConnectionsPerPartition=5

下の3行は、ClearDBの無料版を利用する際に必要な設定。
参考
一言多いプログラマーの独り言 ー Herokuで、Java Play framework 2.0 + cleardb を利用すると c.j.b.h.AbstractConnectionHook のエラー



Procfile作成


プロジェクトのルートディレクトリに、Herokuで使う為の「Procfile」と言う物を作成。

【Procfile】
web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -DapplyEvolutions.default=true


Herokuへデプロイ

下記コマンドでデプロイを実行。

$ git push heroku master



アプリケーション稼働

下記コマンドを実行すると、ブラウザが起動して勝手にアプリケーションを開いてくれる。

$ heroku open



前はこれで出来たんだけど、変なエラーが...。

$ heroku logs
2014-02-02T06:40:24.702110+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path=/ host=playframwork-crud-java.herokuapp.com request_id=27b4f1e1-e61d-4c3a-b3b2-15a0dfcacda3 fwd="122.17.154.11" dyno= connect= service= status=503 bytes=

ログを見ても的を射ない。

今日は諦めて、ディアブロしよーっとww