今年取り組むこと
いろいろやりたいこと(技術的な)が多すぎて、逆になにもできない。 やることを絞ってみる。
やること
- Git再入門
会社のWGでGitを使うことになったけど、仕事で使ったことがないので全然詳しくない。
プライベートでも単純なことしかしていない。
プルリクとかIssuesも知識としては知ってるくらいで、実践が圧倒的に足りない。
アウトプットをしていかないとなあ。 ただ、なにをあげればいいのかわかんないので、他の人を参考にする。
- Qiita
技術的なメモや知見はブログよりQiitaの方がいいかなとおもった。
- Trello
タスク管理として使ってはいるけど、もっと活用していきたい。
最近始めた。
Better Javaとしての使い方より、関数型プログラミングしたい。
Scalaやるならこっちもやったほうが良いのではと思っている。
やはり
流行りものだけれど…
やったったんぞー!
Play2.4(Ebean4)のfindPagedListでページング
ページングを実装しようと思い、方法を探していたのだけれど…
どこのページを見てもfindPagingList()しか載ってない。
でもPlay2.4でライブラリとして使っているEbeanではfindPagingList()が削除されていて、
findPagedList()に置き換わっていた。
github覗いてみる。
使い方
今までの'findPagingList()'はこんな使い方(使ったことないけど)
public List<Item> findPageItems(Integer page){
Model.Finder<Long, Item> finder = new Model.Finder<>(Item.class);
return finder
.orderBy("id desc")
.findPagingList(MAX_ITEM_PER_PAGE)
.getPage(page)
.getList();
}
それをこうする。
public PagedList<Item> getPagedList(Integer page){
Model.Finder<Long, Item> finder = new Model.Finder<>(Item.class);
return finder
.orderBy("id desc")
.findPagedList(page, MAX_ITEM_PER_PAGE);
}
public List<Item> findPageItems(Integer page){
return getPagedList(page).getList();
}
別メソッドに分けたけど、別に分けなくていいと思う。
PagedListが取得できたら、そこから指定したページのアイテムリストを取得する。
他にも、次のページ・前のページが有るかどうかや、最大ページ数なども取得できる。
getList()は取得結果のリストがキャッシュされる。
getTotalPageCount()やhasNext()は同じキャッシュ(futureRowCount)をつかうみたい。
以上
新しくModelをつくったときのJSR-303
新しくモデルを追加して、フォーム作って、さあ送信
↓
[IllegalStateException: JSR-303 validated property 'title' does not have a corresponding accessor for data binding - check your DataBinder's configuration (bean property versus direct field access)]
ちょっと調べたら一発でした。
activator clean
してからの
activator run
で、通りました。
参考
ありがとうございました。
EBeanでカラム型の指定
Stringなフィールドを普通にマッピングしてると、
PostgreSQLのカラム型がVARCHAR(255)になっちゃう。
public String text_field = "";
Table "public.route"
Column | Type | Modifiers
-------------+-----------------------------+----------------------------------------------------
id | bigint | not null default nextval('route_id_seq'::regclass)
tour_id | bigint |
text_field | character varying(255) |
create_date | timestamp without time zone | not null
update_date | timestamp without time zone | not null
こうなるんだけど、下記のようにすると
@Column(columnDefinition="text")
public String text_field = "";
Table "public.route"
Column | Type | Modifiers
-------------+-----------------------------+----------------------------------------------------
id | bigint | not null default nextval('route_id_seq'::regclass)
tour_id | bigint |
text_field | text |
create_date | timestamp without time zone | not null
update_date | timestamp without time zone | not null
テキストになった。
参考
EBeanでOneToManyなリレーション
発端
PlayFramework2 with Javaを試していて、DBとの接続にEBeanを使っている。
ORMをちゃんと使うのは初めてなので練習的に。
基礎的な使用方法はいろんなサイトに乗っているのだけど、
ちょっと変?な使い方をしようとすると資料が少なくなる。
OneToManyなリレーション
Routeが複数のPinを持っている場合
Route側のモデル
@Entity
public class Route extends Model{
@Id
public long id;
@Required
public String name;
public String memo;
@Valid
@OneToMany(cascade = CascadeType.ALL, mappedBy = "route")
public List<Pin> pins = new ArrayList<>();
}
Pin側のモデル
@Entity
public class Pin extends Model{
@Id
public long pin_id;
public String memo;
@ManyToOne
@JoinColumn(name = "route_id")
public Route route;
public long lat;
public long lng;
}
とするのが正解っぽい。
Routeモデル
@Valid
@OneToMany(cascade = CascadeType.ALL, mappedBy = "route")
public List<Pin> pins = new ArrayList<>();
@Valid
リレーション先もValidate対象にするアノテーション
@OneToMany(cascade = CascadeType.ALL, mappedBy = "route")
1:多のリレーション、親の方につける。
mappedByプロパティには、子のモデルの親を指すフィールド名を指定。
Pinモデル
@ManyToOne
@JoinColumn(name = "route_id")
public Route route;
@ManyToOne
多:1のリレーション、子の方につける。
@JoinColumn(name = "route_id")
親との結合に使用するカラム名かな?
しばらくできなかった時は、ManyToOneアノテーションだけにしていたからのようだ。
@ManyToOne(cascade= CascadeType.ALL)
public Route route;
cascade= CascadeType.ALL
これをつけることで、リレーション先にも変更を行うそう。
例えば
Route route = Route.findById(1); Pin pin = route.pins.get(0); pin.delete();
とかすると、Routeまで削除されちゃう。
今日はここまで。
MacBook Pro Retina (2015 early)購入
購入経緯
WindowsなメインPCがそろそろお役御免な感じがする(8年目) ので、メインをOSXにしようと思った。
iMac27は置く場所がないし、持ち運びもしたいし・・・
Retina使いたいし、トリプルディスプレイもしたい。
15インチは大きくて持ち運べない気がする。
ということでMacBook Pro(Retina,13-inch、Early 2015)をポチった。
MBAはとりあえずおいておこう。
開封の儀
というわけで、簡単に開封の儀。 Apple製品は5製品目になるのか。
外箱

いつもの外箱、特に変わったとこはなし。
本体

アルミの筐体、材質はMBAとおんなじね。
ベゼルが細いからMBA13と比較すると少し小さく感じる。
同梱物

- MagSafe2 x1
- 延長ケーブル x1
- クイックスタートガイド
とてもシンプル…
MagSafe2の形状はMBAと同じものぽい。
ちょっとACアダプタ部分が大きくなってて、Outputの電圧が14.85Vから16.5Vになってる。
Proだから?
起動
ジャーン♪
起動してやったこと
- BetterTouchTool
- Chrome
- Xcode(Command line tools)
- homebrew
- git
- JDK 1.8
- IntelliJ
- AndroidStudio
Source Tree
あと設定はこれ MacBookを買ったら真っ先に変更する21個の環境設定
所感
- Retinaキレイ!
巷で言われてるように、やっぱりキレイ。 解像度って自分で設定できるんだね。
- トラックパッドのクリック感が変わった
MBAの時はカチッって音が結構気になってたんだけど、感圧になって全然気にならない。
- トリプルディスプレイ
なかなか壮観になるけど、よく考えたら3つ使ってもしょうがないな。 家にいるときは本体として使おう。
以上。
Play FrameworkのViewとかRoutesでコード補完が使えない件
なんでだろうなー、デスクトップの方では使えるのに… と思ってたら、見つけた。
ただ、IntelliJ IDEAでPlay FrameworkをサポートできるのはUltimate版のみで、これは有償です。無償版だとプログラミング言語であるScalaは対応していますがPlayはサポートしていません。このため、たとえばPlayのビューを書くときにコード補完が効かず、不便な思いをします。
Play Frameworkについてざっくり説明する | anopara
そうだったのか…
デスクトップの方はIntelliJ 15 EAP Ultimateだった。 MBAの方は14 CEなんで、使えなかったようだ。
WebフレームワークはCakePHPしか触ったこと無いからわかんないことだらけだなぁ
15がリリースされたら買ってみるか。