今年取り組むこと
いろいろやりたいこと(技術的な)が多すぎて、逆になにもできない。 やることを絞ってみる。
やること
- 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がリリースされたら買ってみるか。