2015-09-10

Kotlinことはじめ:(8)Nullセーフティ

KotlinはNullPointerException(以下ぬるぽ)を言語レベルで防ぐ仕組みを持っています。

Null許容型と非Null型


2015-09-09

Kotlinことはじめ:(7)演算子オーバーライド

Kotlinでは演算子のオーバーロードをするために、演算子に対応する関数が用意されています。
演算子を使用すると、これらの関数の呼び出しに変換される仕組みです。
拡張関数の仕組みを使用することで、定義済みの型に対して演算子のオーバーロードをすることもできます。

2015-09-08

Kotlinことはじめ:(6)演算子

Kotlinの演算子の多くは、JavaやC#に準じています。
数が多いので、いわゆる計算らしいことをやる演算子から。

Kotlinことはじめ:(5)型

Kotlinの型は、すべてクラスです。
つまり、値はすべてオブジェクトということになります。
値を示す基本型が用意されています。

2015-09-04

Kotlinことはじめ:(4)繰り返し

今回は繰り返し処理です。
Kotlinのループ文は、forとwhile、do-whileの三種類です。

while文 do-while文

Kotlinのwhile文/do-while文はJavaなどと一緒です。

Kotlinことはじめ:(-1)はじめる前に

「Kotlinことはじめ」シリーズの記事は、いまのところ、JavaやC#などの言語をある程度書ける人に理解していただける程度の内容になってます。

いろいろ端折ってますが、お察しくださいませ。

2015-09-03

Kotlinことはじめ:(3)分岐

今回は条件分岐の書き方です。

if式

Kotlinのifは文ではなく式です。

Kotlinことはじめ:(2)クラスを作る

main関数だけでプログラムは動きますが、オブジェクト指向言語らしくクラスを作りましょう。

パッケージ

Hello Worldではデフォルトパッケージに関数だけ作りましたが、今回はパッケージも作ります。
ソースフォルダを右クリックし、メニューからNew->Packageを選択します。

2015-09-02

Kotlinことはじめ:(1)はじめの一歩

IDEAでプロジェクトを作成して、簡単なプログラムを作ってみます。

プロジェクト作成

まずは、プロジェクト作成。
New Projectのダイアログから Kotlin -> Kotlin JVMと選択し、Nextボタンをクリックしてください。


Kotlinことはじめ:(0)環境構築

最近Kotlinにハマって、勉強がてら俺々フレームワーク作っています。
ぼちぼちノウハウが溜まってきたので、入門編的なものを書き始めることにしました。

とりあえず環境構築

先端のM13を使うために、IntelliJ IDEAも15 EAPを使います。
開発中は無料で使えるので、お試しにもオススメ。ですが、手元のWindows8.1機(VAIO Fit 13A)では全く起動しない(Java8の不具合らしい・・・)ので、Win7かMacで開発してます。
IDEA 15 EAPは初期状態でKotlin M12のプラグインが導入されていますが、使うのはM13なのでM13のプラグインを導入する必要があります。

2014-01-01

Slick+Playのテーブル生成

Slickでモデルを作成すると、モデルからテーブルを生成することができる。
これが、コード上から生成になるので、起動のたびにテーブルを作られたり、ドロップされても困るので、作成対象のテーブルの有無を確認して実行を決める必要がある。
ルートパッケージにGlobalオブジェクト作成、onStartメソッドをオーバライドすることで、アプリ起動時に処理を実行することができる。
そこで、MTableオブジェクトのgetTablesメソッドを使用して対象のテーブルの存在をチェックしてテーブル作成を実行させてみた。
import models.Users
import play.api.db.DB
import play.api._
import scala.slick.driver.MySQLDriver.simple._
import play.api.Play.current
import scala.slick.jdbc.meta._

object Global extends GlobalSettings {

  override def onStart(app: Application) {
    val ds = Database.forDataSource(DB.getDataSource())
    ds.withSession{ implicit session: Session =>
      if (MTable.getTables ("user") .list.isEmpty)
        Users.ddl.create
    }
  }
}

2013-12-30

IntelliJ IDEA 13のCloudBees対応

IDEAにはCloudBeesサポートプラグインが存在するけど、IDEAが13になって12のために書かれたプラグインの解説文書が通用しなくなっている。(よくわかってないだけかもしれないけど)

デプロイのためのwar作成設定が正しく働かない。
出力先のディレクトリを指定しても、その前に別のディレクトリ(ローカルのTomcat?)を付加されて、warの作成でエラーになってしまう。

デプロイしてのテストが出来ないので、動作手前まではローカルでplayのコマンドでビルドし、デプロイはCloudBeesのSDKを用いるのがとりあえずの次善策か。

追記:
出力先のディレクトリを作っておけば、エラー無くデプロイ操作が終わりました。が、warが作られた形跡がない・・・。
CloudBeesのGitリポジトリにPushして、Jenkinsでビルド・デプロイさせることも試したけど、ビルドはできてもデプロイできない・・・・。
デプロイの設定でaccountに何も設定できないのが原因か?
なにか設定できるようにできればいいんだろうけど。

追記2:
Jenkinsのシステム設定で、CloudBeesのアカウント設定ができた。
CloudBeesのJenkinsなのだから、デフォルトでアカウント設定を登録しておいてくれればいいのに。

2013-12-23

Play + Scala + Slick

PlayのDAOは、2.2まではAnormを使用するのが標準ですが、2.3からSlickに変わるらしい。
また、AnormはSQLをそのまま記述することを基本としているので、ORMに慣れきった僕にはORMであるSlickのほうが楽そうってことで、Slickを使うようにプロジェクトの設定を変更する。

参考にしたのはこの記事。

Playの初歩とSlickAdd Star

PlayFrameworkerのisobeです。Scala面白いです。

Play使い始めてしばらくDAO周りでAnormを使ってたのですがノーテーションが冗長すぎて辛いのでSlick(旧ScalaQuery)に乗り換えました。今最新のPlay2.2を使ってるのですが次期2.3では標準ORM(というかDAO)がAnormからSlickに置き変わる予定だそうです。(ってことをSlick使い始めてから知りました)

ライブラリの設定をbuild.sbtにしますが、とりあえず丸パクリ。
libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  "mysql" % "mysql-connector-java" % "5.1.18",
  "com.typesafe.slick" %% "slick" % "1.0.1",
  "com.typesafe.play" %% "play-slick" % "0.5.0.8",
  "commons-dbcp" % "commons-dbcp" % "1.4")
コネクションの設定はapplication.confですが、こちらは接続先がCloudBeesのDBになるので、CloudBees側の設定に合わせて以下の感じ。
slick.default="models.*"
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:"${MYSQL_URL_MYDB}
db.default.user=${MYSQL_USERNAME_MYDB}
db.default.password=${MYSQL_PASSWORD_MYDB}

あとは、モデル作ってテーブルの生成やらなんやら試そうかってところだけど、IDEAの機能で作ったPlayのプロジェクトがなんか色々微妙な模様。
雛形として形はできているけど、ディレクトリの意味付けがついてないし、新規にScalaオブジェクトを作れる状態じゃなかった。
初期設定的にまずかったのか、機能が不完全なのか不明。
とりあえず、CloudBeesで作られたgitリポジトリからPlayの初期プロジェクトをcloneして、play ideaして使えば大丈夫みたい。

というわけで、application.confの変更は不要になり、build.sbtの代わりにBuild.scalaを編集。
import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

    val appName         = "playsignage"
    val appVersion      = "1.0"

    val appDependencies = Seq(
      // Add your project dependencies here,
      "mysql" % "mysql-connector-java" % "5.1.21",jdbc, anorm,
      cache,
      "com.typesafe.slick" %% "slick" % "1.0.1",
      "com.typesafe.play" %% "play-slick" % "0.5.0.8",
      "org.slf4j" % "slf4j-nop" % "1.6.4",
      "commons-dbcp" % "commons-dbcp" % "1.4"
    )

    val main = play.Project(appName, appVersion, appDependencies).settings(
      // Add your own project settings here      
      testOptions in Test += Tests.Argument("junitxml", "console")
    )

}
てな感じでどうだろうか?

ここまで設定を直してplay ideaをやり直せば、ideaプロジェクトのライブラリ設定に反映されました。

IDEAでPlayのプロジェクトを作り、CloudBeesの設定をする途中まで

とりあえず、IntelliJ IDEAを起動して、新しいプロジェクトを作る。

ScalaのPlay Moduleを選ぶ。
Playで作るサイネージ、そのままの名前。

で、設定画面でCloudBeesのアプリケーションサーバを設定する。
CloudBees Serverを追加。

CloudBeesで登録した、ドメイン、ユーザ名、パスワードを入力。
「Download client libraries」ボタンをクリックすると、ライブラリがダウンロードされて、接続できるようになるので、「Test connection」ボタンをクリックして、接続できることを確認。
「OK」で、登録完了。
忘れちゃいけないのが、CloudBeesはwarでデプロイするので、warを作成する設定をすること。

Project Structure画面で「WebApplication:Exploded」を選んで・・・その先がまだ良くわかってない。

この先は、またイロイロ試してから書く。

CloudBees + IntelliJ IDEA + Play2 + Scalaという試み

放置してたこのブログを、なんとなく再開。

会社の勉強会で作ろうとしてたデジタルサイネージを、最近覚えた技術とこれから覚えたい技術を散りばめて作りなおそうかと思いたったので、備忘録として。

PaasにCloudBeesを選んだのは、Jenkinsを使ってみたかったのとPlayFrameworkをサポートしてるから。Jenkinsを使いこなせるかわかんないけど。

IDEに使うIntelliJ IDEAはScalaやるならEclipse(ScalaIDE)よりイイって色んなとこで見たので。有料なので会社でも使えるか微妙だけど、無料期間中に使い倒してほんとに良かったら個人的には購入しようかと。
ここまでほんのちょっと使っただけだけど、かなりヨサゲ。

PlayFramework2とScalaは将来のメインストリームにならないか期待を込めて。

これで、HTML5(できればSVG)を使ったデジタルサイネージをオンラインで作って、安いAndroidタブレットで表示してお店に置くような使い方ができる、サービスを作ろうと思ってます。
できればSVGでと思ってますが行けるかどうかはブラウザの対応レベル次第なので、そこ実験が先か・・・。

2007-11-18

麺達 本店 : とんこつラーメン

久々の新規店開拓。
かなり刈谷よりの豊明にあるラーメン屋。麺達に行ってみました。


正統派の九州系とんこつラーメン。

クリーミーでこってりしつつもスッと入ってくるスープと、歯ごたえのいい極細ストレートの麺がとてもマッチしてます。
具はきくらげ、ネギ、チャーシューとシンプルなもの。

うまくて思わず替え玉を注文。
ポットに追加のスープが付いてきました。
備え付けのおろしにんにくを加えて食べましたが、これまたうまい。


ちょっと、普段走るコースから外れてるけど、また食べに行きたいと思えるラーメン屋でした。

2007-08-17

麺屋 りょうま:冷やし麺

今日、なんとな~く本山まで歩いて、ラーメンを食べてきました。

食べたのは、冷やし麺。
キムチと大豆もやしのナムル、オクラ、細切りにしたチャーシュー、煮卵がトッピングされてます。
麺は普通の麺。たれは甘酸っぱい冷やし中華風?なところに、キムチの汁が混ざって程よい辛味が加わってます。
オクラの粘りもいい感じ。もやしの食感もいい感じ。
量がちょっと足りないかなぁ。

2007-08-06

筑紫:担々麺

東郷町にある中華料理屋、筑紫で担々麺を食べました。

胡麻たっぷりで、そんじょそこらの担々麺とは大きく違う。
ただ、胡麻の香りがちょっと変な感じ?スープを飲みきることはできませんでした。
具は一般的な青梗菜ではなく生キャベツの千切り。これもまたちょっと変わった感じ。
いろんな意味でそんじょそこらの担々麺と違います。

ただまあ、超辛い麻婆豆腐と一緒に食べてたので、味覚が確かだったかというと大疑問です。

麺家 りょうま : 赤

本山駅のすぐ近く、麺家りょうまの赤ラーメンです。


醤油の黒ラーメンをベースにした台湾ラーメン。
赤く染まった脂まみれのひき肉そぼろ。これが徐々に溶けて、スープの表面が赤く染まっていきます。
辛味は少なめ?の台湾ラーメンですね。

龍月:つけ麺

ずいぶん前に行った龍月のつけ麺(大盛り)です。

味の方向性は大勝軒系のつけ麺と同じ、温かい酸味のあるつゆ。ただし、麺はほかの麺と同じ中細ストレート。
冷たい麺ですが薄まっても具と一緒に入っているたれを入れてしまえば、復活するので味の不満なし。
温玉やチャーシューもいい感じ。
最後に出汁でつゆを薄めてスープとして飲めるのも、いいところ。