1月をふりかえる

  • 初詣行った
  • 残業多すぎ。働きすぎ。頑張りすぎ
  • 頑張らなくても何とかなる仕組みが必要
  • かなり土台は作ったので、次同じような案件やったら大丈夫→同じことやる案件なんてねぇよ。ねぇ
  • 相撲をみた
  • 結婚式のようなものに行った。相変わらず俺は人見知りだった
  • 買ってみて印象に残ったマンガ → ナナマルサンバツ、グラゼニ
  • 書いたプログラミング言語 → ScalaJavaScript
  • 体重6キロ落とした(80→74)
  • さらに目が悪くなったような気がする
  • チャリにわりと乗るようになった
  • さむい
  • プリンタを買ったが年賀状くらいしか使わないため早くもほこりかぶってる

良いコードってなんでしょうね

  • 常にその時の自分にとっての最高傑作
  • どうしてこう書いたのか?という疑念が生まれにくいコード
    • 例えば、同じような繰り返しが頻発している、という問題
    • わかりづらい変数・定数・クラス・関数名もいけない。首尾一貫しないといけない
  • つまりはDRYなコード
  • あと、ポリシーがあること。ポリシーが無いコードは極めて読みづらい
  • 難しい処理はある一箇所に集約されて隠蔽されていて、他の場所ではそれを感じさせないインターフェイスによる設計
  • 全てにおいて役割を明確にしていること
  • どうしてこう書いたかきちんと説明ができること
  • 短くシンプルなコードであること

[Scala]アノテーションを使う

Javaコードとpackage objectを組み合わせるのが良い?
sbt使っているならJavaソースコード含んでいてもコンパイル問題無いので、割りと簡単
ただ、Javaコードをsrc/main/javaの下に置くか、src/main/scalaに混ぜるかはライブラリごとに種類がある感じ?
SquerylなんかはScalaコードと同じところにある
https://github.com/max-l/Squeryl/blob/master/src/main/scala/org/squeryl/annotations/Transient.java

Ignore.java

package my.library.annotations;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Ignore {
}

コンストラクタにアノテーション付けたときに判別するために@fieldを付ける必要がある
http://stackoverflow.com/questions/3769624/annotating-constructor-parameters-in-scala
なので、package object を使って簡略化するといい

package.scala

package my.library

import scala.annotation.target.field
import my.library.annotations._

package object annotations {
  type ignore = Ignore @field
}

アノテーション使うScalaコードはこんな感じ

package my.library

import my.library.annotations._

case class User(
  name: String,
  @ignore age: Int
) {
  @ignore val test = ""
}

チェックするときは

classOf[User].getDeclaredFields
  .map(_.getAnnotation(classOf[Ignore]))

とかやるとわかる。

体重へってきた

久々の74キロ台をみた
今年の最初は79キロだったから、どうも半月で5キロ減らしたらしい。
やっていることは晩ご飯をなるべく食べないようにしていることくらいで
運動は特にしていない。食べるときはコンビニに売っている小さなパスタか
飲むヨーグルトで腹を誤魔化している
正直暴飲暴食したいが、もう10キロくらい痩せたいので我慢してみる
リバウンドが怖いな・・・