Nexus 5Xとケースを買いました
Nexus 5Xを買いました。
合わせて、Amazonでケースも買いました。
![Google Nexus 5X TPU グリップケース [ LG Nexus5X 2015年発売モデル / docomo / Y!mobile / Simフリー 対応 ] 滑止め加工 / ソフトフィット / 光沢加工【 Design S Blue (ブルー) 】 Google Nexus 5X TPU グリップケース [ LG Nexus5X 2015年発売モデル / docomo / Y!mobile / Simフリー 対応 ] 滑止め加工 / ソフトフィット / 光沢加工【 Design S Blue (ブルー) 】](http://ecx.images-amazon.com/images/I/413K0-11ZBL._SL160_.jpg)
- 出版社/メーカー: MY WAY STORE
- メディア: エレクトロニクス
- この商品を含むブログを見る
一番安かったので青を買いました。Nexus 5X自体は白色のものを買ったので、何色でも問題ない感じです。
ケース自体ピッタリとはまり、しっかりとした作りです。指紋認証のところは当たり前ですが、穴が開いていますのでケースをつけたまま使用することができます。
最近Nexus 5Xがいろいろなところで安くなっていますので、このケースはおすすめです。
ICaReader 1.2.4リリース
AndroidアプリのICaReader 1.2.4リリースしました。
ライセンス表記と細かい不具合の修正のみです。
機能的には変わりありません。
https://play.google.com/store/apps/details?id=net.kuwalab.android.icareader
主な変更は、以下のとおりです。
変更点は、GitHubのコミットログ(適当)を見てください。
https://github.com/kuwalab/ICaReader/compare/v1.2.3...v1.2.4
サポートは以下からお願いします。
Kotlinでtry-with-resourcesしたい
Kotlinでtry-with-resourcesしようとしても、コンパイルエラーになりできません。
Java 7のTry-with-resourcesはこう書くのか。 / “Try-with-resources in Kotlin - Stack Overflow” http://t.co/Qy4wVwsnoZ
— かっぱ大王 (@kuwalab) 2015, 3月 8
KotlinではCloseableインタフェースの拡張関数としてuse関数が定義されています。リンクのソースの部分を見てもらえれば一目瞭然ですが、例外が起きた時も起きなかった時もcloseされているのがわかります。
この関数を使用することでtry-with-resourcesと同様のことが実現できます。例えば、適当なテキストファイルを作成する例は次のようになります。
Kotlinを使っていると、どうやってやるんだろうということが割りと頻繁にありますが、大体解決法は用意されているように感じます。
Kotlin記事のまとめ
ブログの中で書いたKotlinの記事のまとめです。
KotlinでExcelを操作するのは簡単っPOI
最近はやりのKotlinで、Excel操作してみました。
Kotlinでは、演算子のオーバーロードと拡張関数が使えるため、POIをかなり便利な形にできます。
# 以下、POIを使ったことがある前提で書いています。
早速、実際のコードを見ていきます。
fun Sheet.get(n: Int): Row { return this.getRow(n) ?: this.createRow(n) }
とすることで、Sheetのインスタンス(Sheetはインターフェースなので、その実装のインスタンス)に対して、
sheet[5]
のようにアクセスできます。Sheetはインターフェースですが、Kotlinの拡張関数を使うとその実装すべてで拡張した関数を使用できます。POIはExcelは2003までのxls形式と、それ以降のxlsxでSheetの実装クラスが違いますが、すべての実装に拡張した関数が反映されます。
同様に、Rowに対してもCellを取得する拡張をします。
fun Row.get(n: Int): Cell { return this.getCell(n) ?: this.createCell(n, Cell.CELL_TYPE_BLANK) }
SheetとRowにget関数を作ることで、C2セルにアクセスする場合には
sheet[1][2]
のように書くことができます。
ただ、これだとsheet[y][x]のようになっているため直感的に操作できません。そのため、以下の関数を追加して、sheet[x, y]でアクセスできるようにしました。
fun Sheet.get(x: Int, y: Int): Cell { var row = this[y] return row[x] }
この関数があると、C2セルにアクセスするにはsheet[2, 1]と書くことができます。
また、sheet[x, y] = valueのようにしてセルに値をセットするため、set関数も追加しました。(とりあえず、文字列と数値のみ対応しました)
fun Sheet.set(x: Int, y: Int, value: Any) { var cell = this[x, y] when (value) { is String -> cell.setCellValue(value) is Int -> cell.setCellValue(value.toDouble()) is Double -> cell.setCellValue(value) else -> throw IllegalArgumentException("文字列か数値だけにして") } }
このように、Kotlinを使うとPOIをかなり簡単に、便利に使うことができます。ちなみにGroovyだともっと直感的に使うことができるようです。
最後に、動作確認用に作ったサンプルのコードです。
用意したブック1.xlsxファイルはこんなかんじです。
実行すると
あ い え
と出力されて、ブック2.xlsxは以下のようになります。
Kotlinを使うとPOIもかわいく扱うことができます。演算子のオーバーロードとか、拡張関数とかJavaにはない概念ですが、こんなにも便利なものなんだなあと実感することができました。
Spring MVC 4.1 No. 043 form:labelタグ
form:labelタグは、HTMLの<label>タグを生成します。
その要素の内、単純にHTMLの属性に置き換えられるものは、以下の属性です。cssClassやcssStyleはそれぞれclass、style属性に置き換えられます。
属性 | 説明 |
---|---|
cssClass | HTML標準のclass属性 |
cssStyle | HTML標準のsytle属性 |
dir | HTML標準のdir属性 |
for | HTML標準のfor属性 |
id | HTML標準のid属性 |
lang | HTML標準のlang属性 |
tabindex | HTML標準のtabindex |
title | HTML標準のtitle属性 |
その他、JavaScriptのDOMレベル0イベントとして以下の属性が用意されています。それぞれ同名の属性になります。
属性 |
---|
onclick |
ondblclick |
onkeydown |
onkeypress |
onkeyup |
onmousedown |
onmousemove |
onmouseout |
onmouseover |
onmouseup |
残りがSpring用の属性になります。
属性 | 説明 |
---|---|
cssErrorClass | Validationのエラー時のclass属性 |
htmlEscape | HTMLのエスケープをするかどうか。デフォルトはtrue |
path | 関連付けるModelの名前 |
コントローラで使用するモデルです。
package com.example.spring.controller.c043; public class C043Model { private String isbn; private String name; // setter、getterは省略 }
サンプルのコントローラです。
package com.example.spring.controller.c043; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/c043") public class C043Controller { @RequestMapping("/label") public String label(Model model) { C043Model c043Model = new C043Model("123", "よく分かるSpring"); model.addAttribute("c043Model", c043Model); return "c043/label"; } }
コントローラではformで利用する値をModelに格納しています。
カスタムタグを使用しているJSPです。
<%@page contentType="text/html; charset=utf-8" %><%-- --%><!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> </head> <body> <form:label path="c043Model.name">書名:</form:label> <form:input path="c043Model.name" /> </body> </html>
実際に動作させ、出力されるHTMLは以下のようになります(見やすくするために改行を入れています)。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> </head> <body> <label for="name">書名:</label> <input id="name" name="name" type="text" value="よく分かるSpring"/> </body> </html>
ソースは https://github.com/kuwalab/spring-mvc41 にあります。タグ043が今回のサンプルです。
まとめ http://kuwalab.hatenablog.jp/entry/spring
最初 http://kuwalab.hatenablog.jp/entry/spring_mvc41/001
前回 http://kuwalab.hatenablog.jp/entry/spring_mvc41/042
次回 http://kuwalab.hatenablog.jp/entry/spring_mvc41/044
Spring MVC 4.1 No. 042 form:optionsタグ
form:optionsタグは、HTMLの<option>タグを生成します。このタグは、form:selectタグの中に書く必要があります。
その要素の内、単純にHTMLの属性に置き換えられるものは、以下の属性です。cssClassやcssStyleはそれぞれclass、style属性に置き換えられます。
属性 | 説明 |
---|---|
cssClass | HTML標準のclass属性 |
cssStyle | HTML標準のsytle属性 |
dir | HTML標準のdir属性 |
disabled | HTML標準のdisabled属性 |
id | HTML標準のid属性 |
lang | HTML標準のlang属性 |
tabindex | HTML標準のtabindex |
title | HTML標準のtitle属性 |
その他、JavaScriptのDOMレベル0イベントとして以下の属性が用意されています。それぞれ同名の属性になります。
属性 |
---|
onblur |
onchange |
onclick |
ondblclick |
onfocus |
onkeydown |
onkeypress |
onkeyup |
onmousedown |
onmousemove |
onmouseout |
onmouseover |
onmouseup |
残りがSpring用の属性になります。
属性 | 説明 |
---|---|
cssErrorClass | Validationのエラー時のclass属性 |
htmlEscape | HTMLのエスケープをするかどうか。デフォルトはtrue |
itemLabel | labelを出力するitemsで指定したクラスのプロパティ名 |
items | radioボタンを作るための配列やMap |
itemValue | valueを出力するitemsで指定したクラスのプロパティ名 |
実際の例を見ていきます。まずは選択されたの要素の初期値を設定するモデルです。
package com.example.spring.controller.c042; public class C042Form { private String selectedIsbn; // setter、getterは省略 }
書籍データを格納するモデルです。このクラスの一つのインスタンスが1つのoption要素に相当します。
package com.example.spring.controller.c042; public class C042Model { private String isbn; private String name; // setter、getterは省略 }
サンプルのコントローラです。
package com.example.spring.controller.c042; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/c042") public class C042Controller { @RequestMapping("/options") public String options(Model model) { List<C042Model> c042ModelList = new ArrayList<>(); c042ModelList.add(new C042Model("123", "よく分かるSpring")); c042ModelList.add(new C042Model("456", "よく分かるJava")); c042ModelList.add(new C042Model("789", "よく分かるSpring MVC")); model.addAttribute("c042ModelList", c042ModelList); C042Form c042Form = new C042Form(); c042Form.setSelectedIsbn(""); model.addAttribute("c042Form", c042Form); return "c042/options"; } }
コントローラではformで利用する値をModelに格納しています。
カスタムタグを使用しているJSPです。
<%@page contentType="text/html; charset=utf-8" %><%-- --%><!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> </head> <body> <form:select path="c042Form.selectedIsbn"> <form:options items="${c042ModelList}" itemLabel="name" itemValue="isbn" /> </form:select> </body> </html>
実際に動作させ、出力されるHTMLは以下のようになります(見やすくするために改行を入れています)。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> </head> <body> <select id="selectedIsbn" name="selectedIsbn"> <option value="123">よく分かるSpring</option> <option value="456">よく分かるJava</option> <option value="789">よく分かるSpring MVC</option> </select> </body> </html>
ソースは https://github.com/kuwalab/spring-mvc41 にあります。タグ042が今回のサンプルです。
まとめ http://kuwalab.hatenablog.jp/entry/spring
最初 http://kuwalab.hatenablog.jp/entry/spring_mvc41/001
前回 http://kuwalab.hatenablog.jp/entry/spring_mvc41/041
次回 http://kuwalab.hatenablog.jp/entry/spring_mvc41/043