PUNKSPRING 2014にMAN WITH A MISSIONの出演が決まったそうで。
まあ、今年は色々あるので行けないんだけど、ついに、Bad Relisionと同じステージに立つんですなあ。
2014/01/28
2014/01/25
走っている時に考えている事
えーと、特に考えていません笑
というのも、いかに効率よく前に進むかしか考えてないから。
昨日見た記事では、左足が地面についた時に息を吸い、次に左足が地面についた時に息を吐くのが良いと書いてあったので、今日はそれを意識していただけ。
あとは音楽聞いてるから、基本的に頭空っぽ。
時々そうやって走っていると、ランナーズハイが訪れて、このまま何処まででも走れそうな気がしてしまう時がある。
とても気持ちいい。
プログラマの作り方
会社にて打ち合わせをしているとき、「そういえばこれって個人情報的にどうなんでしょうね?」と、「個人情報保護士」の資格を持つ同僚に聞いた。
その方とは「個人情報保護士」の資格を取られる前から知っており、そして帰って来た答えには説得力があった。
そのとき初めて「あ、資格を取る前とは違って、専門家になったんだなあ」と、妙に関心してしまった。
2014年1月24日。
日付は既に変わってしまったが、ついに31歳になってしまった。
せっかく誕生日を迎えたので、今日は「専門家っていいな」という話も含めて、自分にまつわる事をぼやこうと思う。
最近、Scalaが本当に楽しい。
僕の職業はプログラマなのだが、幾数多のプログラマの例にもれず、初めはプログラムを
そんなことを、最近Scalaを初めてから振り返り、思えるようになってきたのだが、そういえばなぜプログラムを始めたのか、なぜ僕がプログラムをやっているのか、今まで振り返った事なかった。
当時17歳。
高校2年生の僕は、文系・理系・情報処理という3つの選択肢の内、迷わず情報処理コースを選んだ。迷わずの所に理由は特に無い。一つ理由を挙げるとすれば、パソコンを触れる授業があったくらいだ。
ただテレビゲームが好きな僕は、少し違うがそういったコンピューター関係に興味が有ったからと言えば、納得か。
初めて書いたプログラム言語はBASIC。”IF ~ THEN ~”という条件分岐を習い、なんとなく座標を指定して線や円を画面上に映すといった事を独自に調べて実行してみたりした。
(最近の高校生の情報処理授業ではJavaなんかをやっているのだろうか)
そして18歳。
家が貧乏で(と書けばただの言い訳なんだが)大学には受験をさせてもらえる機会さえなく、高校卒業後は途方に暮れていた。
とりあえず日雇いのアルバイトをして少ない給料をもらってはゲームばかり買い、とにかく何もしていなかった。
それでも人は少なからずどこかに向上心があるようで
日雇いではダメだ→
ゲーム好きなら、ゲームセンターの店員なら続くんじゃない?→
アルバイトリーダーに任命された!→
もっとお金を稼ぎたいな!→
友達が働いている包装資材(お魚を乗せるトレイ等)の問屋さんで働こう!→
月3000万円の商品を動かせるようになったぞ!
と、それなりに成長をしてきた。
しかし、地元の小さな小さな会社で働いていた僕は、「もし、このままここでずーっと働いていると、将来どうなるのだろうか?ただのつまらない男で終わってしまうのではないか?」と、伊坂幸太郎の「砂漠」よろしく、ただ漠然とした不安を抱えてた。
そんな時、ふと、真っ暗な画面に浮かび上がる白い文字で、”IF ~ THEN ~”という高校の時にほんのちょっとだけならったBASICの事を思い出した。
これだ。
「IF もしこのままだと THEN つまらない男のまま」というプログラムに、「ELSE」を追加したわけだ。
IF もしこのままだと
THEN つまらない男のまま
ELSE でも、ここで少し頑張って起動をずらせば?
これが、プログラマとしての一歩だ。
プログラムを書いた分けでもなく、システム会社に入社した訳でもない。
「そう思った時に既に始まっていた」と、僕個人は思っている。
プログラミングはおろか、業界がどんなものかさえ知らない。パソコンなんてろくに扱ったことのない僕、いや、むしろパソコンさえ持っていなかった僕は、携帯電話のi-modeで転職サイトを見ては、未経験からでも何か出来ることはないかと必死に、プログラムについての"何か"を探したと思う。
それでも当時、泉岳寺にあった小さな小さなSI業を営む会社を見つけた。
忘れもしない、2006年4月13日。
当時23歳。
「未経験者歓迎!3か月のプログラム研修!」という今思えば、ブラック企業のにおいがプンプンするようなこの文句に惹かれて入社。
(しかし、3カ月勉強しながら給料ももらえるのは、今思えばとてもありがたいことだと思う)
(やはりブラックな臭いが漂う会社だ)
初めの2~3日はビジネスマナー研修であったと思う。メールのBCCさえ分からない僕にとっては、すべての事が新しく新鮮だ。
そしてついに始まるプログラム研修。
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }
これが、当時初めてみたプログラム。よくあるJavaのHello Worldだ。
こんな単純なプログラムさえまったく理解できなかったのが懐かしい。
「この}までちゃんと書かないといけないんですか?」と質問したことを鮮明に覚えている。
試しに、}を一つ削除してみた。
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); }
非常に気持ち悪い。そう思えるほど、当時よりは成長している。
一文字一文字にちゃんと意味があり、一文字でも欠けたら動かないという、それはさながら工場マニアが工場のソレを想うがごとく、プログラムの美しさを知った。
それからの研修は、本当に自信を打ち砕かれるほど難しいことばかりで大変だった。
IEの使い方(フラッシュが動かない=インストールしてないから等)。
Javaのインストール。
パス・ディレクトリの概念。
などなど、覚えることが多すぎて、毎日が一瞬で終わっていたと思う。
研修も終わり、同期の仲間が次々と現場に入場(出向のようなもの)していっても、僕だけとりのこされては、自習の毎日。
やっと初めての現場に入場したかと思えば、PeopleSoftというJavaでさえ無いまったく未知のプログラム言語をやらされたり。
それが、今ここでこうしてブログを書いている人間の、プログラマとしての2つ目の始まりだ。
そして31歳現在。
相変わらずプログラムの腕は上達しないが、仕事自体はそこそこ出来ていると自負している。
それこそ、プログラムの事を知らない人から見ると、「専門家」になるんだろう。
プログラムの知識や経験などは上を見ればキリがない。
キリは無いが、Scalaとの出会いをきっかけに、プログラムを金儲けの道具だけに有らず、僕はその「専門家」として、今誇りを持ってScalaの勉強に取り組もうと思う。
最後に、将来に悩む人に言いたい。
「そう思った時には既に始まっているのだよ」
2014/01/19
250
今年の目標の一つに、150km走るというのを掲げてたのだけど、「そういえば1年で走った最長距離ってどのくらいだったんだろう?」と思い、Runkeeperを調べた所、既に2010年に200km走ってたり。
ということで、目標を250kmに変更。
それでも、既に今年は37km走ったから、このまま行け(れ)ば300kmくらい行けるんじゃないねえかな。
---
今日は久しぶりに15kmを走ってみたのだけど、いやはや、楽しかった。
環七を南下し、奥戸街道を左折。柴又街道を左折して帝釈天を右目に眺めながら国道6号線に出る。中川沿いを北上して地元亀有に帰還。
しかし、10kmと15kmってまったく別物ですな、もう足ガクガク。最後の方、中川沿いなんて強い北風と相まって進まねえ進まねえのなんの笑
ワンピース フィルムZ
久しぶりに最初から最後までワンピース観た気がする!
話は単純だけど、最後にあったZの小さい頃の話が妙に感動。
ワンピースってめっちゃ感動出来る話があるからこそのワンピースだと思うんだけど、最近はあまりですよね〜。
でも、この映画は”ワンピースらしくて”、とても面白かった!
トリック
トリックの新作が公開されるとのことで、最近テレビで頻繁にやってますな。
僕はトリックでは矢部謙三の大ファンなので、(初めて見る)2と、テレビドラマも見ました。
楽しかったです。
そういえば、2に、友達の元カノが出てるんだった〜を思い出し。
カニの看板担いでた笑
2014/01/13
AWS Elastic Beanstalkを使ってMySQLを利用したPlayframwork2.0を動かす
Playframworkと(以下Play)言えば、herokuで動かすのが一般的と思っているんだけど、会社が「\AWS!/\AWS!/\AWS!/」っと言っているので、お勉強がてらPlay2.0をAWSで動かしてみようかと。
なんか最近Elastic Beanstalkというのがあるそうで、ブラウザからボタンをぽちぽち(だけじゃないけど)押して行くだけでWarがデプロイできちゃったりいろいろ出来るらしい。
EBでの設定を元に、結局裏側ではEC2やらRDSが立ち上がってくれるので、まあ便利機能とでも思えば良いのかしら。
ってことで、タイトル通りAWS Elastic Beanstalkを使ってMySQLを利用したPlayを動かしてみた。
やりかたはノリですよね。
まあ、DB機能さえ使えれば良いと思うんだけどね。
conf/application.conf
project/build.properties
project/Build.scala
project/plugins.sbt
3.PlayfraworkプロジェクトのWarを作成する
Build.scalaの
と、plugins.sbtの
は、PlayのプロジェクトからWarファイルを作成するためにプラグイン設定。
Warを作成するには下記コマンドを実行する。
すると、target/にwarファイルが作成される。
1.デプロイ
EBの「Running Version」の「Upload and Deploy」から、先ほど作成したwarファイルを選択する。
2.待つ!
EBでまたくるくる矢印が回るので、同じくグリーンになったらOK。
グリーンのちょっと上のURLにアクセスすると、アプリにアクセス出来る。
3.画面が真っ白になってアプリが見れないよ?
以下の事に注意
とまあ、ざーっくりだけどこれで一応出来た。
ダブルバイト文字使うと文字化けしちゃったりDBにアクセス出来なかったりするので解決しようと思ったけど、RDS特有の問題(ってかMySQL使う時に良く有る問題を解決する為に、RDSで設定する必要があるだけ)だから、一旦放置。
これでやっとアプリ開発に専念出来る気がする。
今作っているやつの実際の運用はherokuを使うだろうから、ここで書いたのは本当に勉強だけかもめ〜。
なんか最近Elastic Beanstalkというのがあるそうで、ブラウザからボタンをぽちぽち(だけじゃないけど)押して行くだけでWarがデプロイできちゃったりいろいろ出来るらしい。
EBでの設定を元に、結局裏側ではEC2やらRDSが立ち上がってくれるので、まあ便利機能とでも思えば良いのかしら。
ってことで、タイトル通りAWS Elastic Beanstalkを使ってMySQLを利用したPlayを動かしてみた。
AWS Elastic Beanstalk 編
1.Key Pairsの作成
Elastic Beanstalk(以下EB)を始める前に、EC2でKey Pairsを作成しておくやりかたはノリですよね。
EC2 > KeyPairs > Create Key Pairs
勝手にダウンロードされる「*.pem」ファイルを、Macの~ディレクトリに配置。
ついでに、権限を600に変更しておく。
ログインする。
特にないけど、まあリージョンを「TOKYO」にするくらい。
「Create a New Application」を押下。
「Application Infomation」で、「Application name:」を記入。
ここでは「omiend-play-crud」とする。
「Create」ボタン押下。
「Environment Type」で、下記をそれぞれ選択。
「Continue」ボタン押下。
※ロードバランサー使う時は「Environment type」で「Load balancing, autoscaling」を選択すればいいと思うけど、ここではやらなーい。
「Environment Information」で、「Environment name:」にアプリケーション固有の名前を入力する。
「Continue」ボタン押下。
※「Environment URL:」に記載されるURLで、他に同じ物が無いか「Check availability」ボタンで確認するのをお忘れなく。
※ここでは「omiend-play-crud-java」とする。普段テストで使っているのでナメしちゃだめよん。
「Additional Resources」で、今回RDSを使うので、「Create an RDS DB Instance with this environment」を選択。
「Continue」ボタン押下。
「Configuration Details」で、下記の様に選択。これはEC2の設定かな。
※「EC2 key pair」は初めに作ったKeyPairsを選択する。
「RDS Configuration」で、下記の様に選択。
「Revew」画面で確認して「Create」ボタンで完了!
こんな感じになればOK。
EC2のコンソールを見てみると、インスタンスが立ち上がっているのが分かる。
同じく、RDSのコンソールを見てみると、インスタンスが立ち上がっている。
EC2 > Security Group > Inbound
試しに、EBから作成したEC2とRDSインスタンスにログインしてみる。
terminalを起動して下記のようにEC2へログイン。
-iに指定するファイルは、「1.Key Pairsの作成」でダウンロードしたファイル。
ユーザーはec2-userを指定。
ドメインはEC2インスタンスで参照する「Public IP」を指定。
RDSへのログイン
次に、RDSへのログイン。
僕は普段Sequel Proというクライアントを使っているのでこれで説明。
まあ、下記の様な感じに。
繋がったら、WebアプリのDBやらTableやらを設定しておく。
勝手にダウンロードされる「*.pem」ファイルを、Macの~ディレクトリに配置。
ついでに、権限を600に変更しておく。
$ ls -al -rw-r--r--@ 1 omiend staff 1696 1 13 15:49 omiend_play_crud.pem $ chmod 600 omiend_play_crud.pem $
2.EBでアプリケーションを作成
とりあえず空のアプリを作成する。Warはまだデプロイしない。ログインする。
特にないけど、まあリージョンを「TOKYO」にするくらい。
「Create a New Application」を押下。
ここでは「omiend-play-crud」とする。
「Create」ボタン押下。
「Environment Type」で、下記をそれぞれ選択。
「Continue」ボタン押下。
※ロードバランサー使う時は「Environment type」で「Load balancing, autoscaling」を選択すればいいと思うけど、ここではやらなーい。
- Environment tier: Web Server
- Predefined configuration: Tomcat
- Environment type: Single instance
※ここでWarをアップロードするんだけど、DBの設定とかあるので一回スキップ。
- Source: Sample application
「Environment Information」で、「Environment name:」にアプリケーション固有の名前を入力する。
「Continue」ボタン押下。
※「Environment URL:」に記載されるURLで、他に同じ物が無いか「Check availability」ボタンで確認するのをお忘れなく。
※ここでは「omiend-play-crud-java」とする。普段テストで使っているのでナメしちゃだめよん。
「Additional Resources」で、今回RDSを使うので、「Create an RDS DB Instance with this environment」を選択。
「Continue」ボタン押下。
「Configuration Details」で、下記の様に選択。これはEC2の設定かな。
※「EC2 key pair」は初めに作ったKeyPairsを選択する。
- Instance type: t1.micro
- EC2 key pair: {1.Key Pairsの作成}
「RDS Configuration」で、下記の様に選択。
- DB engine: mysql
- Instance class: db.t1.micro
- Allocated storage: 5 GB(最小値)
- Username: 好きなユーザー名
- Password: 好きなパスワード
「Revew」画面で確認して「Create」ボタンで完了!
すると、下記の様な画面が表示されるので、くるくる回っている矢印が緑色になるまで待つ(5分くらい?)
元気なtomcatちゃん。(関係ない
こんな感じになればOK。
EC2のコンソールを見てみると、インスタンスが立ち上がっているのが分かる。
同じく、RDSのコンソールを見てみると、インスタンスが立ち上がっている。
3.MySQLのポート解放
EC2からRDSのMySQLを利用するために、下記のようにポート解放を行う。EC2 > Security Group > Inbound
4.試しにログイン
EC2へのSSHログイン試しに、EBから作成したEC2とRDSインスタンスにログインしてみる。
terminalを起動して下記のようにEC2へログイン。
-iに指定するファイルは、「1.Key Pairsの作成」でダウンロードしたファイル。
ユーザーはec2-userを指定。
ドメインはEC2インスタンスで参照する「Public IP」を指定。
$ cd ~ $ ssh -i ~/omiend_play_crud.pem ec2-user@54.248.137.158 __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2013.09-release-notes/
RDSへのログイン
次に、RDSへのログイン。
僕は普段Sequel Proというクライアントを使っているのでこれで説明。
まあ、下記の様な感じに。
繋がったら、WebアプリのDBやらTableやらを設定しておく。
- 名前:任意
- MySQLホスト:RDSのインスタンスで参照出来るエンドポイントを指定
- ユーザ名:RDSのユーザー名
- パスワード:RDSのパスワード
- データベース:任意
- ポート:ブランク(3306)
- SSHホスト:EC2のPublic IPを指定
- SSHユーザ:ec2-userを指定
- SSH 鍵:「1.Key Pairsの作成」でダウンロードしたファイルを指定
- SSH ポート:ブランク
Playframwork 編
1.PlayframworkのWebアプリの用意
Play2.0とMySQLを使ったCRUDが実装されているWebアプリを作っておく。まあ、DB機能さえ使えれば良いと思うんだけどね。
2.AWS(EC2+RDS)を使う為に、色々設定する
conf/application.conf
# Database configuration # ~~~~~ # You can declare as many datasources as you want. # By convention, the default datasource is named `default` db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://RDSのエンドポイント:3306/データベース名" db.default.user=RDSのユーザー名 db.default.password="RDSのパスワード" # Evolutions # ~~~~~ # You can disable evolutions if needed evolutionplugin=disabled※Evolutionsの設定は切る。
project/build.properties
sbt.version=0.13.0※sbtのバージョンは0.13.0を使用
project/Build.scala
import sbt._ import Keys._ import play.Project._ import com.github.play2war.plugin._ object ApplicationBuild extends Build { val appName = "crud_java" val appVersion = "1.0-SNAPSHOT" val appDependencies = Seq( // Add your project dependencies here, "mysql" % "mysql-connector-java" % "5.1.20", javaCore, javaJdbc, javaEbean ) val main = play.Project(appName, appVersion, appDependencies) .settings(Play2WarPlugin.play2WarSettings: _*) .settings( // Add your own project settings here Play2WarKeys.servletVersion := "3.0" ) }
// Comment to get more information during initialization logLevel := Level.Warn // The Typesafe repository resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" // Use the Play sbt plugin for Play projects addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.1") // Play war addSbtPlugin("com.github.play2war" % "play2-war-plugin" % "1.2-beta2")
3.PlayfraworkプロジェクトのWarを作成する
Build.scalaの
import com.github.play2war.plugin._ ・・・ val main = play.Project(appName, appVersion, appDependencies) .settings(Play2WarPlugin.play2WarSettings: _*) .settings( // Add your own project settings here Play2WarKeys.servletVersion := "3.0" )
と、plugins.sbtの
// Play war addSbtPlugin("com.github.play2war" % "play2-war-plugin" % "1.2-beta2")
は、PlayのプロジェクトからWarファイルを作成するためにプラグイン設定。
Warを作成するには下記コマンドを実行する。
$ play war
すると、target/にwarファイルが作成される。
デプロイ編
1.デプロイ
EBの「Running Version」の「Upload and Deploy」から、先ほど作成したwarファイルを選択する。
2.待つ!
EBでまたくるくる矢印が回るので、同じくグリーンになったらOK。
グリーンのちょっと上のURLにアクセスすると、アプリにアクセス出来る。
3.画面が真っ白になってアプリが見れないよ?
以下の事に注意
- Security Groupでポート解放しているか?(MySQL:3306の解放が必要)
- conf/application.confの設定が間違っていないか?
- create database 〜 を忘れていないか?
- Evolutionsが有効になっていないか?(これは有効にしていても大丈夫かも?)
とまあ、ざーっくりだけどこれで一応出来た。
ダブルバイト文字使うと文字化けしちゃったりDBにアクセス出来なかったりするので解決しようと思ったけど、RDS特有の問題(ってかMySQL使う時に良く有る問題を解決する為に、RDSで設定する必要があるだけ)だから、一旦放置。
これでやっとアプリ開発に専念出来る気がする。
今作っているやつの実際の運用はherokuを使うだろうから、ここで書いたのは本当に勉強だけかもめ〜。
2014/01/11
そういやシンタクスハイライトって
会社の技術ブログを書いてて思い出したんだけど、このブログ、シンタックスハイライト入れてたっけ?
ということで、試してみた。
<pre class="brush: java;">
public static void main(String[] args) {
System.out.println("Hello the World");
}
</pre>
出来てませんでした。
多分前に設定したと思ったんだけど、ブログのテーマを変えると初期化されちゃうっぽい?
下記サイトで必要な言語を選択してジェネレート。
way2blogging
タグをコピって、Bloggerのテンプレート編集で、<head>の前に記述。
どや!
ということで、試してみた。
<pre class="brush: java;">
public static void main(String[] args) {
System.out.println("Hello the World");
}
</pre>
出来てませんでした。
多分前に設定したと思ったんだけど、ブログのテーマを変えると初期化されちゃうっぽい?
下記サイトで必要な言語を選択してジェネレート。
way2blogging
タグをコピって、Bloggerのテンプレート編集で、<head>の前に記述。
どや!
public static void main(String[] args) { System.out.println("Hello the World"); }ブログのプレビューでは見れない罠w
2014/01/10
「人生は時にしてこんな物で、どうにもならない事に愚痴を言い続けるより、あ るものをありがたく受け取った方が、幸せである。」
赤い大地と僕の自転車 【日本語版】
こちら、僕が務めている会社のイケメンCFOのお知り合いの、高間さんという方のブログ。
僕自身は直接面識はないのだけれど、イケメンCFOに「割と本気で海洋学者になるのが夢だった」と話したところ、高間さんの存在を教えてもらった。その後、このブログを始められた事を聞き、実はひっそりと楽しまさせてもらっている。
そして、なんとfacebookで高間さんからメッセージを頂いてしまったのだ。
このブログは、高間さんが20年前(20歳)の携帯電話やらインターネットがない時代に、英語もろくに話せないままオーストラリアに渡り、ついにはオーストラリア大陸を自転車で1周したときの事を電子媒体に起こされているもの。
オーストラリアに渡る準備や、渡ってからすぐに事故にあってしまったことなど、20年前の自身の日記という文献をもとに事細やかに記載されていて、その臨場感あふれる文書はブログの域にとどまらず、もはや1冊の小説のような読み物になっている。
そんな中、「人生は時にしてこんな物で、どうにもならない事に愚痴を言い続けるより、あるものをありがたく受け取った方が、幸せである。」という文章にとても衝撃をうけたので紹介したかった次第。
http://cycle93oz.takeshitakama.com/2013/12/j17.html
なんというか。
19歳のときに大きな挫折をして、しばらく本当に何もできなかったのだけれども(それこそニーとのように)、その時の辛さをバネにして、同年代の人よりも少しだけ充実した生活ができているのも、この言葉が表わすように、愚痴るのではなく乗り越えるための体制をとること、受け入れることが、やはり大事なんだなあと。
そして、俺がやってきたことは、少なからず間違って居ない。
こちら、僕が務めている会社のイケメンCFOのお知り合いの、高間さんという方のブログ。
僕自身は直接面識はないのだけれど、イケメンCFOに「割と本気で海洋学者になるのが夢だった」と話したところ、高間さんの存在を教えてもらった。その後、このブログを始められた事を聞き、実はひっそりと楽しまさせてもらっている。
そして、なんとfacebookで高間さんからメッセージを頂いてしまったのだ。
このブログは、高間さんが20年前(20歳)の携帯電話やらインターネットがない時代に、英語もろくに話せないままオーストラリアに渡り、ついにはオーストラリア大陸を自転車で1周したときの事を電子媒体に起こされているもの。
オーストラリアに渡る準備や、渡ってからすぐに事故にあってしまったことなど、20年前の自身の日記という文献をもとに事細やかに記載されていて、その臨場感あふれる文書はブログの域にとどまらず、もはや1冊の小説のような読み物になっている。
そんな中、「人生は時にしてこんな物で、どうにもならない事に愚痴を言い続けるより、あるものをありがたく受け取った方が、幸せである。」という文章にとても衝撃をうけたので紹介したかった次第。
http://cycle93oz.takeshitakama.com/2013/12/j17.html
なんというか。
19歳のときに大きな挫折をして、しばらく本当に何もできなかったのだけれども(それこそニーとのように)、その時の辛さをバネにして、同年代の人よりも少しだけ充実した生活ができているのも、この言葉が表わすように、愚痴るのではなく乗り越えるための体制をとること、受け入れることが、やはり大事なんだなあと。
そして、俺がやってきたことは、少なからず間違って居ない。
そう感じた。
2014/01/08
2014/01/05
Simple Build Toolのお勉強
コンニチハ。
最近、というか今年は特にScalaの勉強に精を出したい訳でして、何となく使っていたScalaの基礎の基礎から読み直しをしています。
それこそ、人に聴かれて答えられる知識を有するくらいにはならないと、勉強している意味もないですからね。
んで、Scalaのソースコード作っていちいちScalacして(Scalaのコンパイルは重たい)、コンパイルエラーあるいは挙動を確認するのがめっちゃめんどくさかったので、これはいかんと思い、まずはSimple Build Tool(イカ、sbt)の勉強をする事に。
と言いますか、Scalaやるならsbt分かっていないと話にならないらしい。
簡単な入門程度でも書いておけば、忘れないかなってね。
ディレクトリも移動しとく
Configurationファイルの作成方法は「Basic Configuration」と「Full Configuration」という2種類の方法がある。
「Basic Configuration」と「Full Configuration」の使い分けは、もちろん俺はそこまで使いこなせてないんだけど、こう言う事らしい。
「Basic Configuration」
簡単だけど、基本的な事しか出来ない。
「Full Configuration」
その名の通り、フルで設定出来る。
いろんな機能を使うときにこっちじゃないとダメだとか。
「Basic Configuration」も使える。
だから、基本的に「Full Configuration」使ってれば良いんじゃないのかな。
なので、今回は「Full Configuration」の方でやってみる。なぜなら、さっき「Basic Configuration」の方でやったからw今回は「Basic Configuration」でやる。
というのも、「Full Configuration」だと何故か原因不明のエラーが出てしまいコンパイル出来ず(※)。それは後で調べよう。
Configurationファイルは、プロジェクトのルートディレクリに配置する。
そういや、知らないで使っていたPlayframworkのConfigurationファイルもそうだったね。
ここで繋がったんだけど、知らないって恥ずかしいw
Configurationファイルは、「Basic Configuration」の場合プロジェクトのルートディレクリに、「Full Configuration」の場合「project/」配下に配置する。
Configurationファイル名は、「Basic Configuration」だと「*.sbt」、「Full Configuration」だと「*.scala」で記述。
つまり、「Full Configuration」はScalaで記述する事になるってこと。
「build.sbt」「Build.scala」 で作成する事が一般的。
ってことで、「Full Configuration」はこんな感じにScala Objectを作成。
おいっきりScalaっすね。
1:プロジェクト名を記述
2:プロジェクトのルートディレクトリを記述
(つまりここをいじれば何処にConfigurationファイルをおける?
3:プロジェクト設定を記述
4:プロジェクトのバージョン
5:Scalaのバージョン
この後ソースを作ってsbtでコンパイルするんだけど、その時にConfigurationファイルに記載のScalaのバージョンを使用する用になる。
(※)の通り、意味不明なエラーが解決出来ていないので、「Basic Configuration」の場合(build.sbt)のConfigurationファイルの作り方。こんな感じらしい。
どっちも同じ挙動なのに、「Basic Configuration」は簡素。それだけに、複雑な設定は出来ないってことですかなあ。
ただし、「src/main/scala」に作成すること。
Javaだったら「src/main/java」に作成する。
ついでに、まだ試していないJavaのハロワ作っておくかい。
Javaをvimで書くのってなんか気持ち悪いw
今のところこんな感じのディレクトリ構造です。
コマンドは、そのまんまの「sbt compile」。
今回の場合、scala版とJava版のHelloWorldを作成しているので、実行可能なリソースは2つ。
「sbt run」の結果はこんな感じ。
Scalaで作ったHelloWorldを実行するため、「2」を入力。
ちゃんと「HelloWorld by sbt on Scala」と表示されました! ちなみに、Javaの方も...
ちゃんと「HelloWorld by sbt on Java」と表示されました! 取りあえずこれで終了〜。
う、うーむ。 いろいろ調べてみたんだけど、後ほどまたチャレンジ...。
〜〜〜
ちなみに、この本を使って勉強していまする〜。
わかりやすい。でも、ちまたで話題のコップ本も読んでみたいですな。


〜〜〜
ついでに「Build.scala」の中身も修正。
これでOK。 ありがとうございました。
無事、成功。
「Basic Configuration」と「Full Configuration」の両方を使う場合、双方の間で矛盾が無いことをしっかり確認しておく必要はありそう(当たり前か)。
プロジェクトによってはもしかしたら「Basic Configuration」と「Full Configuration」の両方を使う事もあるんだろうけど、まあ、実際仕事でsbtを使った開発はした事ないので、当分「Full Configuration」だけで行こうかとね。
最近、というか今年は特にScalaの勉強に精を出したい訳でして、何となく使っていたScalaの基礎の基礎から読み直しをしています。
それこそ、人に聴かれて答えられる知識を有するくらいにはならないと、勉強している意味もないですからね。
んで、Scalaのソースコード作っていちいちScalacして(Scalaのコンパイルは重たい)、コンパイルエラーあるいは挙動を確認するのがめっちゃめんどくさかったので、これはいかんと思い、まずはSimple Build Tool(イカ、sbt)の勉強をする事に。
と言いますか、Scalaやるならsbt分かっていないと話にならないらしい。
簡単な入門程度でも書いておけば、忘れないかなってね。
1.sbtのインスコ
僕はHomebrew使っちゃいました。日本語で自家醸造だかなんだからしくて、お酒好きな僕には響きがいいのでHomewbrewをよく使います。便利。brew install sbt
2.フォルダ作成
sbtには決まったディレクトリ構造があり、それに習ってScala用にディレクトリを作成。mkdir -p MyProject/src/main/scala
ディレクトリも移動しとく
cd MyProject
3.Configurationファイルを作成
これ重要。sbtがこのファイルに習ってビルド実行してくれる。Configurationファイルの作成方法は「Basic Configuration」と「Full Configuration」という2種類の方法がある。
「Basic Configuration」
簡単だけど、基本的な事しか出来ない。
「Full Configuration」
その名の通り、フルで設定出来る。
いろんな機能を使うときにこっちじゃないとダメだとか。
「Basic Configuration」も使える。
だから、基本的に「Full Configuration」使ってれば良いんじゃないのかな。
というのも、「Full Configuration」だと何故か原因不明のエラーが出てしまいコンパイル出来ず(※)。それは後で調べよう。
Configurationファイルは、「Basic Configuration」の場合プロジェクトのルートディレクリに、「Full Configuration」の場合「project/」配下に配置する。
Configurationファイル名は、「Basic Configuration」だと「*.sbt」、「Full Configuration」だと「*.scala」で記述。
つまり、「Full Configuration」はScalaで記述する事になるってこと。
「build.sbt」「Build.scala」 で作成する事が一般的。
ってことで、「Full Configuration」はこんな感じにScala Objectを作成。
おいっきりScalaっすね。
vim Build.scala
2:プロジェクトのルートディレクトリを記述
(つまりここをいじれば何処にConfigurationファイルをおける?
3:プロジェクト設定を記述
4:プロジェクトのバージョン
5:Scalaのバージョン
この後ソースを作ってsbtでコンパイルするんだけど、その時にConfigurationファイルに記載のScalaのバージョンを使用する用になる。
(※)の通り、意味不明なエラーが解決出来ていないので、「Basic Configuration」の場合(build.sbt)のConfigurationファイルの作り方。こんな感じらしい。
vim build.sbt
どっちも同じ挙動なのに、「Basic Configuration」は簡素。それだけに、複雑な設定は出来ないってことですかなあ。
4.HelloWorldを作成
これは簡単。ただし、「src/main/scala」に作成すること。
Javaだったら「src/main/java」に作成する。
vim src/main/scala/HelloWorld.scala
mkdir src/main/java vim src/main/java/HelloWorld.java
Javaをvimで書くのってなんか気持ち悪いw
今のところこんな感じのディレクトリ構造です。
5.コンパイル
ソースが出来たら、いざコンパイル!コマンドは、そのまんまの「sbt compile」。
sbt compile [success] Total time: 46 s, completed 2014/01/05 21:54:57こんな感じに出ればOK。 ちなみに、コンパイル後のディレクトリ構造はというと、ちょっと見づらいけどこんな感じ。
. ├── project │ └── target │ └── config-classes │ ├── $16780968a37baefb5487$$anonfun$$sbtdef$1.class │ ├なんかいろいろ ├── src │ └── main │ ├── java │ │ └── HelloWorld.java │ └── scala │ └── HelloWorld.scala └── target ├── resolution-cache │ ├── default │ │ └── myproject_2.10 │ │ └── 0.1-SNAPSHOT │ │ ├── resolved.xml.properties │ │ └── resolved.xml.xml │ ├── myproject │ │ └── myproject_2.9.2 │ │ └── 1.0 │ │ ├── resolved.xml.properties │ │ └── resolved.xml.xml │ └── reports │ ├── なんかいろいろ ├── scala-2.10 │ └── classes ├── scala-2.9.2 │ └── classes │ ├── HelloWorld.class │ ├── HelloWorldScala$.class │ ├── HelloWorldScala$delayedInit$body.class │ └── HelloWorldScala.class └── streams ├なんかいろいろ
6.実行
では実行する。sbt runすると、sbtはプロジェクト内の事項可能なリソースを探しに行く。
今回の場合、scala版とJava版のHelloWorldを作成しているので、実行可能なリソースは2つ。
「sbt run」の結果はこんな感じ。
Scalaで作ったHelloWorldを実行するため、「2」を入力。
ちゃんと「HelloWorld by sbt on Scala」と表示されました! ちなみに、Javaの方も...
ちゃんと「HelloWorld by sbt on Java」と表示されました! 取りあえずこれで終了〜。
※エラーについて
「Full Configuration」のConfigurationファイル自体は恐らく問題ないと思っているんだけど、コンパイル時に何故か下記の様なエラーが。[info] Set current project to myproject (in build file:/Users/user/sbt/MyProject/) [info] Compiling 2 Scala sources and 1 Java source to /Users/user/sbt/MyProject/target/scala-2.10/classes... [error] /Users/user/sbt/MyProject/Build.scala:1: not found: object sbt 1 name := "MyProject" [error] import sbt._ [error] ^ [error] /Users/user/sbt/MyProject/Build.scala:2: not found: object Keys [error] import Keys._ [error] ^ [error] /Users/user/sbt/MyProject/Build.scala:4: not found: type Build [error] object MySbtBuild extends Build { // object???͉??ł?ǂ? [error] ^ [error] /Users/user/sbt/MyProject/Build.scala:6: not found: value Project [error] lazy val root = Project( [error] ^ [error] four errors found [error] (compile:compile) Compilation failed [error] Total time: 3 s, completed 2014/01/05 21:44:29
う、うーむ。 いろいろ調べてみたんだけど、後ほどまたチャレンジ...。
〜〜〜
ちなみに、この本を使って勉強していまする〜。
わかりやすい。でも、ちまたで話題のコップ本も読んでみたいですな。
〜〜〜
※について追記
コメントにてご指摘頂き、下記のように修正して解決! なんて事はない、「Full Configuration」でやる時のConfigurationファイル(Build.scala)の配置場所が間違っていただけでした。 こんな風に、「Build.scala」を「project/」に配置。ついでに「Build.scala」の中身も修正。
これでOK。 ありがとうございました。
※2ちなみに
「Basic Configuration」で定義した内容は、「Full Configuration」を使う場合でも有効らしい。 ということで、下記の様に配置してコンパイル(中身は同じ)。無事、成功。
[success] Total time: 10 s, completed 2014/01/05 23:52:51
「Basic Configuration」と「Full Configuration」の両方を使う場合、双方の間で矛盾が無いことをしっかり確認しておく必要はありそう(当たり前か)。
プロジェクトによってはもしかしたら「Basic Configuration」と「Full Configuration」の両方を使う事もあるんだろうけど、まあ、実際仕事でsbtを使った開発はした事ないので、当分「Full Configuration」だけで行こうかとね。
2014/01/02
モテキ
これもテレビー。ギラギラしたくだらないバラエティーよりも、少しはマシかなと思い鑑賞。
勉強しろやって話は、元旦なので聴こえません。
モテまくる時期→モテキって話らしいんだけど、まったくモテキ関係ない映画ですやん〜。
ただの3角関係、いや、4角?5?
まあ、とりあえずそういった恋愛ドラマですね。
でも、何故か楽しかったw
気持ち悪いのなんのってw
マイ フレンド フォーエバー
16ブロックに引き続き、テレビでやっていた映画。
キンシオといい、元旦から名作ばかり上映するTVKさん。俺の中の株価がぱねぇっすよ。
この映画、初見なんだけど、いやー泣いた泣いた。
主人公エリックはなかなか学校の他の子供と打ち解けず、家でゲームしてばかりのちょっと頑固な少年。
ある日、隣に引っ越して来た男の子デクスターと柵越しで話をしていた事から、次第に打ち解け合う。
しかし、デクスターは不治の病を煩っていた。
HIV。
エリックはなんとかデクスターを助けようと、キャンディーや野草を煎じたお茶をデクスターにのませたりするのだが、効果はあるはずもなく。
それでも、今まで友達が居なかった二人の間には、「親友」とまで言える友情が芽生えていた。
しかし、ウィルス感染のリスクはほとんどないにも関わらず母親からデクスターと遊ぶのを禁止されてしまう。
それでもエリックは、ニューオリンズに住んでいる博士がHIVの特効薬を開発した噂を目にし、デクスターを連れて1900kmの旅に出るのだが...。
とか?いやー、ラフな文章ですなあ。
なんか、久しぶりに良い映画観た気がした。
16ブロック
たまらん。髭のブルース・ウィリスたまらん。
これもテレビでやってたので、これは初めから観た!
とはいえ、実はDVDもっている程好きな映画(デジャヴュ)。
警察の闇を観てしまった「証言者」を、たった16ブロック先の裁判所まで護送するだけっていうシンプルかつ奥の深いストーリーが好き。
一番好きなハリウッド俳優はブルース・ウィリスなんだけど、この映画の悪徳警官役であるデビッド・モースさんも大好きなんだ。
デビッド・モース
めっちゃカッコいい。
フォーンブース
これもテレビで、これも途中、ってかラストあたりのみw
やる気あんのか俺w
とはいえ、実はDVDも持っている程好きな映画で、やってるの知ってればそれでも観ましたしおすし。
面白い映画ですやな。
登録:
投稿 (Atom)