2013年7月22日月曜日

Kotlin勉強会に行くのでちょっとだけ予習した

多分日本初という触れ込みの勉強会に行くので予習したメモ

ただし、主催者は現状こんな感じらしい





kotlinの未来が不安ですね…



というわけで超適当に以下のkotlinの基本文法を眺めてみた

https://sites.google.com/site/tarokotlin/3-kotlinno-biao-zhunapi



そうそう、 Comparision to Scala ってページがあるので開くと…

If you are happy with Scala, you probably don't need Kotlin.

らしいです

あれ、じゃあ終わり?



スマートキャスト


is演算子で型チェックしてたら、それはもうその型とみなして動かしてええで!
みたいな感じらしいです



ちなみにScalaにはねーよってDocumentに書いてます

同じようなことしようとするとこんな感じ?



うん、パッとは思いつかんけど同じような挙動だよね

関数


defかfunかの違いくらい?
ローカル関数もあるし〜

と思ったらローカル関数でなかなか面白いことが



拡張関数というものが混じっている

Scalaだったら暗黙の型変換とかで同様のことを頑張る感じ?



まあサンプルと同じ内容なら

str.forall(_.isUpper)

でいいじゃん?とは突っ込まない

関数リテラル


kotlinだと関数は引数として渡せないよと。
渡すなら関数リテラルでと。





scalaの場合、関数から関数リテラルに変換できるからだろうかどっちでもOK
そういや深く考えたことねーわ…

// aliasと言って良いのか…?
val alias = sayHelloFunc _

kotlinにも関数から関数リテラルに変換するやつがあれば結局一緒な気がする

when式


matchとどう違うのか… と思ったけど、割りとswitch文よりな感じ?
(ただしcontinue書いたらコンパイル通らなかったし、まだ未実装?)

なので5.2のパターンマッチングを見てみた





同じように書いたらこんな感じ?


ちなみにweb demoだと Tuples are not supported. Use data classes instead. って怒られる…
→ 後のデータクラスの章で悲しみの答えが!

流れでバインディングパターンも






分解者パターン:// あとで書く!


とあるけど、きっとExtractorとおんなじような感じなのかな…?と脳内で勝手に完結

for とか while とか ジャンプとリターン とか


ラベル付きのbreakができるよ!らしい
この辺とかはjavaよりも強力ですよ〜な売りになるんだろうか

その他


四章チラ見して記憶したこと

out/inで共変/反変

staticなメソッド持てないよ 代わりにobjectってあるよ

5章ちら(ry

https://sites.google.com/site/tarokotlin/chap5/sec54
null安全かOptionかは使う人によって良し悪し変わるんだろうなぁ…

https://sites.google.com/site/tarokotlin/chap5/sec55
データクラスってケースクラスみたいなもんかな?
そしてさり気に一番下に「マイルストーン3以降では、タプル機能は廃止されています。」
の文言が…/(^o^)\



各所チラ見した感想としては、確かにScalaで満足してたらKotlinは要らんよ?

って感じなんだろうなぁ…と

まあそんなこと言い出したら、別にどの言語でもそれでいいじゃんになりそうな気はする。

ScalaとKotlinって、それ(Scala | Kotlin)で見たよ!
みたいな感じにお互いがなるんですかね。

ってことでざっくりテキトー予習終わり

おまけ


sbt → simple build tool
kbt → kantan build tool

だったら面白かったのに…(これが書きたかっただけだったりw)

2013年5月4日土曜日

yeoman + angularjs + coffee をちょっと触ってみた

具体的な内容はQiitaに投稿してみた

http://qiita.com/items/454755dcd0a28eab15ee

割と最近Qiitaをのぞくことも多くなったので自分も投稿してみた的な

でQiitaからGistへの投稿も出来るっぽく試したところかなり残念だった…

どう残念かはこっち

Markdownそのままコピーかとおもいきや、そうなるのかよwww みたいな。

とりあえずこれでGWにやるべきことが半分片付いた(白目

2013年3月19日火曜日

#TDDBC Tokyo 2013-03 に参加してきました

いつかは行ってみよう〜っと思っていたTDDBCに参加して来ました。

TDDはもちろんペアプロがすごくよい経験になった、というのが最大の感想です

ドライバーとナビゲーターの入れ替えをあんなに頻繁にやるものなんだ…ということだけでも個人的にはすごくプラスになりました。

主催者やTAの方々、そして当日自分の環境に合わせてペアを組んでくれた @akuraru さん ありがとうございました。

そしてVOYAGE GROUPさん、タダ酒ありがとうございました素敵な会場ありがとうございました。

お題とか詳細は皆さんが各所でまとめてますし、togetterにもまとまってますのでそちらで。





と言ってしまったので書きます。

まず、こんな環境でした。

  • scala2.10 + specs2 + sbtでtestぶん回し

多分気になっている人もいると思いますし、一応こうやりました的なことを書いていきます



TODOもコード?



えーっと、半分本当で半分ウソです。

specs2ではこのような書き方が可能になります。



pendingを空のチェックボックス代わりに使っているだけです。
pendingを実際にテストを行うメソッドに書き換えればチェックした!みたいな。
詐欺ですねw

この書き方(specs2のサイトではacceptance specifications とあるので、受け入れテストを前提としている書き方?)だと(甘めに言えば)そのままTODOリスト書いているのと変わらない形で書けますので、
TODOリストもScalaで書いた( ー`дー´)キリッ
と言っても許され…ますよね?

というのを誇張しました、スミマセンでした。

他にもgradle同様HTML出力とかもしてくれますし、spock同様DataTablesもありますし、specs便利です。

ちなみにhtml出力画面はこんな感じ。



話それますが機会があればgradle+spockはとても触りたいですね。
あとScalaTestで同じようなことが出来るかどうかは、使ったこと無いので知りません、ごめんなさい。





なるほど…(ぉぃ
まあnullとか例外とか嫌ですよね。

で、先ほど当日未実装だった部分をテキトーにやったところ、ソースの行数が30行ぐらいになっちゃった。

改行だけの部分のカウントを除いて、dumpメソッドを再度ワンライナーに戻して、あと何かすれば10行程度になるかも?

何れにしても自分のScala力と今回のお題(Exception返せ!とか)だと10行は難しいかも…

ましてやvar使っちゃったし、もう負けてる感満載w



sbtでぶん回す



最近sbtは酢豚と読むらしいです(scala conference jpでそう聞いたw)

sbtではtestと叩くとtestが全実行されますが、「~test」で実行するとファイルが変更される度にtestを回してくれるので大変便利です。
コード書いてセーブすれば勝手に実行される素敵環境がすぐ出来ます。
PCのパワーと電源がある限りひたすらぶん回しておけばいいのです(ぇ

ただ正直なところ…テストケース一つを実行するならJava+JUnit+QuickJUnitのほうが体感速度は速くて気持ちいいと思いますw
Scalaもテストの実行そのものは早いんですけど、コンパイル待ちが…うーん…

結論:もっとマシンパワーがあればなんとかなる



あんまりここで書いちゃうと水曜日の「Scalaを勉強する会」でしゃべることがネタOnlyになっちゃうのでこのへんで許してください。

一応githubにソース置いてますので、興味がありましたら御覧ください。
あ、もちろん「フツーこう書くだろJK」的なご指導ご鞭撻もよろしくお願いします。

https://github.com/daneko/tddbc




そうそう、ペアプロにおいて環境の違いはどうやって埋めるべきなんでしょうね?
自分の環境(Intellijにvimプラグイン)とかだと、相手がemacs派だったりした場合とか…







あー、仕事でScala書きてー…

2013年3月10日日曜日

Intellij IDEA で少しだけPHPを書くのが楽になるかもしれない方法

去年末の75%offの際に Intellij IDEA 買いました。

いやもう凄い便利です、PHP書くときに… (´;ω;`)

ってことで本当は年初にでも書けばよかったんですけど…
かなり今更感ありますが取り敢えず書いとこ〜ってことで書きました。

あと今月から個人的にはもうPHPほとんど書く予定はない! はず…






2012年12月16日日曜日

phpbrew + Template for Jenkins Jobs for PHP Projects 的なもの

そろそろPHP通算歴が半年くらいになっちゃうんじゃないかなぁ…

今や 継続インテグレーションは強みではなくなった [プログラマー現役続行] らしいですし、
PHPヤダヤダ言っててもしゃーないしで試してみました。

ていうか自動テスト環境すらないもの引き継がせんじゃねぇ糞が

ちなみに強引に動かしてます。


用意した環境
  • Cent0S6.3 64bit的な環境

主な参考サイト
Template for Jenkins Jobs for PHP Projects
c9s/phpbrew

Template for jenkins Jobs for PHP Project のリンク先に Integrating PHP Projects with Jenkinsなんて本がありますね。
2011/09 に出てたっぽいのですね。
うーむ、CIはもう常識なんですね、やばいなぁ…



jdkとかjenkinsはテキトーに入っている前提
jenkinsの導入はこの通りにyumで


phpbrew install

phpbrewのサイトのほぼ指示通りですね
Install phpbrew into system-wide environment の部分を参考にしています。
理由はjenkinsに無理やり使わせるためです

phpbrewで5.3.10を入れている理由は、phpbrew variants でサンプルで出てきたからという理由です。
皆さんお好きな環境でどうぞ。
+iconvしているのは、後々入れるphpmdやらphplocやらが使うからという理由です。
その他yumで入れているものは、カラの環境だと インストール時に怒られるから…という理由から入れています。

なお、自前でオプションを指定したい場合は「--」のあとに続けるとできます




Template for Jenkins Jobs for PHP Projects とビミョーに違うところとか

まあ大体一緒です。
phpdoxじゃなくてphpdoc入れているところとかですかね。(ppwが作るやつがphpdoc使っているし)
あとppwでプロジェクト作るから…とかが差異だったりとか
その他plugin入れたり、テンプレートプロジェクトを入れたりとかは
同じことしているので省略





jenkins先生に頑張っていただく

まずはプロジェクトを作ります。
テンプレがあるので楽ですね。
Template for Jenkins Jobs for PHP Projects 様様です

さて、Antを実行と見せかけて下記のようにします。
無理やりphpbrewを使うためです。
antもシェル上で叩いていますが、これを分離してしまうと
せっかく無理やり認識させたphpbrewが使えないからです。
うーむ無理やりw
なお、使用しているAntはJenkins先生が自分でインストールしてくる奴のパスを叩いています。
一度はAntタスクを実行しないとインストールされませんので、その辺は適当に。

export PHPBREW_ROOT=/opt/phpbrew
source /opt/phpbrew/bashrc
phpbrew use php-5.3.10
$JENKINS_HOME/tools/Ant/1.8.4/bin/ant


publish HTML report もほんのちょびっとだけいじります
index.xhtml → index.html にするだけ。
実際上記の通り作ると、build/api 以下にそう作られていたから…以上の意味は無いです。




準備ができたらppwでプロジェクトを作ります。
別に自前でant用のbuild.xml書いてもいいですけど、メンドイですよね。

他にもMave for phpなんてのもあるし、
そもそも時代はGradleらしいです。
Ant使っている場合じゃねぇ(AAry

そこはとりあえず置いといて…

ppwがデフォルトで作成してくれる状態に超テキトーにソースを加えたものを実行してみました。
ここに置いときます


テストは通ってないし、警告は出るしで最低ですねw
常にJenkins先生を怒らせないような状態を保つようにすれば、
もしかしたらPHPもゴミクズのように言われない日が来るかもしれませんね。







まあそんな日は来ないだろうけどな