日付文字列をDateオブジェクトに変換する方法
Javaで文字列の日付をSimpleDataFormatでフォーマットを指定してDateオブジェクトに変換する方法。
文字列を日付でソートしたいときに便利かも。
import static org.junit.Assert.assertThat; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import static org.hamcrest.CoreMatchers.*; import org.junit.Test; public class DataFormatTest { private DateFormat usDateFormat = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss", Locale.US); private DateFormat jaDateFormat = new SimpleDateFormat("dd/MM/yyyy:HH:mm:ss"); @Test public void test() throws ParseException { Date date1 = usDateFormat.parse("10/Aug/2014:20:41:03"); assertThat(date1.toString(), is("Sun Aug 10 20:41:03 JST 2014")); Date date2 = jaDateFormat.parse("10/08/2014:20:41:03"); assertThat(date2, is(date1)); } }
Apache Mavenの基本的な使い方を学習した
Java使ってるのにMaven使ったことないってどうなの?と不安になったため学習し始めた。
Mavanインストール
Maven - Download Apache Mavenにある手順を行えばよい。
UbuntuならUbuntu 12.04にOracle Java 7を簡単にインストールした。 - ブログ::=(メモ|落書き)帳でJDKをインストールして `sudo apt-get install maven` すれば設定することがなくて楽(たぶん)。ただし最新のMavenはインストールされない。
インストールできたか確認する。
$mvn -version Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 22:51:28+0900) Maven home: C:\maven-3.0.5 Java version: 1.7.0_17, vendor: Oracle Corporation Java home: C:\Program Files\Java\jdk1.7.0_17\jre Default locale: ja_JP, platform encoding: MS932 OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
プロジェクトの作成
$mvn archetype:generate
実行すると選択可能なarchetype(プロジェクトのテンプレート)の一覧が表示されるので作りたいアプリにあわせて適切なのを選ぶ。単純なJavaアプリ作るのであればデフォルト(maven-archetype-quickstart)のままでよと思う。
次にarchetypeのversionの選択をする。
最後にプロジェクトの基本情報であるgroupId、artifactId、version、packageの入力を行う。
groupId | ルートパッケージを入力するのが一般的らしい。 |
artifactId | プロジェクトの識別子 |
version | プロジェクトのバージョン |
package | Javaのパッケージと同じ |
最後に入力に誤りがないか確認されるので問題がなければそのままenterを押す。
プロジェクトの作成が完了するとartifactIdでしていた名前でプロジェクトのルートディレクトリが作成され、その中にpom.xmlとかjavaファイル(App.java、AppTest.java)が生成される。
ディレクトリのレイアウトについてはMaven - Introduction to the Standard Directory Layoutを参照する。
またコマンド一発でプロジェクトを作成する方法として以下のように引数でarchetypeArtifactId、groupId、artifactIdを指定することもできる。(もちろん、version、packageも-Dversion、-Dpackageで指定することができる。)-DinteractiveMode=falseを指定すると対話を行わずコマンドを完了するがgroupIdなど必須情報が指定されていなければエラーとなる。
mvn archetype:generate -DgroupId=<ルートパッケージ名> -DartifactId=<プロジェクト名> -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
プロジェクトのコンパイル
プロジェクトのルートディレクトリで以下のコマンドを実行する。
mvn compile
プロジェクトのテスト
プロジェクトのルートディレクトリで以下のコマンドを実行する。
mvn test
プロジェクトのクリーン
プロジェクトのルートディレクトリで以下のコマンドを実行する。
mvn clean
compileやtestを行うとできるtargetディレクトリが削除されるっぽい。
Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集
- 作者: Srirangan,長尾高弘
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2012/03/02
- メディア: 大型本
- 購入: 7人 クリック: 89回
- この商品を含むブログ (8件) を見る
Eclipseを使ったheadless applicationの作成方法
なんとなくEclipseのheadlessモードでplug-inを実行できぬものかと調べてheadless applicationに行き着いたのでブログに残しとく。
plug-in作成なのでEclipseにはPDEがインストールされてることを前提とする。
テンプレートからHeadless Applicationを作成
- 「File」->「Plugin-Project」->「Other...」で新規作成ウィザードを立ち上げる。
- 「Plugin-in Project」を選択して「Next>」をクリックする。
- project nameを入力して「Next>」をクリックする。
- Optionsの「Generate an acivator, a Java class that controls the plug-in's life cycle」のチェックをはずす。「This plug-in will make contributions to the UI」のチェックをはずす。またRich Client Applicationは「yes」のまま、「Next>」をクリックする。
- 「Headless Hello RCP」を選択して「Finish」をクリックする。※ここで「Headless Hello RCP」が選択できない場合、前のページの設定を再度確認する。
アプリケーションの実行
プロジェクトはプラグインとしてエクスポートした後、{eclipse.home}/pluginsディレクトリにいれ、以下のようにコマンドから実行する。
eclipse -application ${plug-in name}.application
${plug-in name}にはプロジェクト作成時に入力したplug-in idを入力する。
以下のサイトを参考にさせていただきました。感謝!
Add headless capability to existing eclipse plugin - Stack Overflow
Code & Me: Creating a headless application
Xperia SO-01B をAndroid2.3.3にアプデした
使わなくなって1年経つ初代Xperiaを今更ながらAndroid2.3.3にアップデートしてカスタムROMいれて無事動かせたので手順をメモっときます。
環境/準備
- PC: Ubuntu 12.04
- Flashtool: v0.9.10.1
- Sony Ericsson純正2.3.3ROM: X10i_3.0.1.G.0.75_GLOBAL-GGL GENERIC 1232-9897.ftf
- カスタムROM: ThGo2_v18.0c
root化 & バックアップ
- PCにFlashtoolをFlashtool -- Xperia devices flashingのInstallationからダウンロードしてインストールする。FlashtoolはWindows/Linux/Mac向けがある。
- Xperiaの設定をUSBデバックモードに変更するため、「設定」→「アプリケーション」→「開発」→「USBデバッグ」にチェック入れる。
- Flashtoolを起動する。
- XperiaをUSBで接続する。
- Xperiaのrootを取得するため、Flashtoolの南京錠アイコンをクリックする。
- Xperiaを再起動する。
- xRecoveryをXperiaにインストールするため、Flashtoolの+アイコンをクリックして0.3GBを選択してOKをクリックする。
- xRecoveryを起動するため、Xperiaを再起動し、Sony Ericssonのロゴが出たらXperiaの←ボタンの長押しを何回も行う。
- xRecoveryが起動したら「Backup and Restore」→「Backup」を選択する。(音量ボタン:上下移動、HOMEボタン:決定)
Android 2.3.3にアップデート
- X10i_3.0.1.G.0.75_GLOBAL-GGL GENERIC 1232-9897.rarをxperia x10 | 所感 ~android~からダウンロードし解凍する。
- FlashToolのインストール先のfirmwares/ディレクトリにX10i_3.0.1.G.0.75_GLOBAL-GGL GENERIC 1232-9897.ftfをコピーする。
- FlashToolを起動し、稲妻アイコンをクリックをクリックしてFlashmodeを選択してOKをクリックする。
- X10iを選択してOKをクリックする。(このときXperiaはPCから外しておく)
- Xperiaの電源切って←ボタン押しながらPCにUSBで接続する。
- LEDが緑色に光ったら←ボタンを離す。
- FlashToolの書き込みが終わったら、Xperiaを再起動してAndroid 2.3.3で起動することを確認する。
- 上記root化 & バックアップの手順でroot取得、xRecoveryのインストール、Backupを行う。
カスタムROM:ThGo2v18.0cインストール
- 「ThGo2_v18.0c.zip」をフォルダを漁ってたら出てきたので… | 所感 ~android~からダウンロードする。
- XperiaのMicroSDカードに「ThGo2_v18.0c.zip」をコピーする。
- xRecoveryを起動し、「Factory reset(full wipe)」、「Wipe cache partition」、「Advanced optinos」→「Wipe Dalvik Cache」と「Wipe Battery Stats」を行う。
- ThGo2_v18.0cをインストールするため、「Install Custom ZIP」→「Choose Custom Zip」でコピーした「ThGo2 v18.0c.zip」を選択する。
- 再起動するため「Reboot phone」を選択する。
以上で完了です。
ドコモ版Andorid2.1は遅くてイライラしてたけど、カスタムROMでサクサク動くようになったしUIがAndroid4.0ぽくなっていい感じになった。
これなら買い替えなくてもよかったかもと思える。
以下参考にさせていただきました。感謝です。
サイゴンのうさぎ: XPERIA X10にThGo2 v18.0bを入れてみた。
サイゴンのうさぎ: XPERIA X10 ThGo2 v18.0cを入れてみた。
Xperiaのroot取得からxRecovery導入までをすべてFlashToolで行う手順┃あんどろいどマニア
Linux備忘録&ちょっと休憩しましょ:Xperia SO-01B カスタムROMに入れ替えてみた - livedoor Blog(ブログ)
xperia x10 | 所感 ~android~
Ubuntu12.10にVirtualBoxインストール
Ubuntu上でWindowsを動かすためにVirtualBoxをインストールしたのでメモしときます。
手順は簡単でターミナルで以下のコマンド打てばインストールできました。
$echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
$wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
$sudo apt-get update
$sudo apt-get install virtualbox-4.2
以下のサイトを参考にしました!ありがとうございます!
Install VirtualBox in Ubuntu 12.10 | ITworld
Javaのチェック例外に対して勘違いしてた
Java7の新機能についてまとめてくれたブログを読んだのだけど、次の疑問があったので調べてみた。
チェック例外をキャッチして再送する場合はthrowsに書かなくてもよいとは知らんかった。どうしてだ?? / “JDK 7の新機能(主に言語仕様の変更)で遊ぶ - Starlight -Little Programmer’s Diary-” htn.to/bBEoYw
— 電波蟻さん (@radio_ant) 8月 30, 2012
調べてみて気づいたのだけど、チェック例外について勝手に勘違いして一人で混乱してた。
チェック例外はバイトコードレベルで特別な何かをされるため、メソッド内でスローする例外の型がthrows節に記述する型と同一かサブクラスでなければならないと思い込んでた。
よく考えればわかることだけどバイトコードレベルで特殊なことしてたらScalaなどのJVMを対象とする他言語でチェック例外を非チェック例外として扱うことができないよね。。。
ClojureでJavaプログラミング
ClojureでJavaを呼び出すための方法を学んだので書き散らす。
クラスのインスタンス化
(new Classname args*)
Classnameにクラス名指定して、args*にコンストラクタに渡す引数をスペース区切りで指定する。
構文糖衣として次の形式があるのでそっちを使うのが一般的らしい。
(Classname. args*)
実際にはこんな感じで使う。
(StringBuilder. "hoge" ) -> #<StringBuilder hoge>
インスタンスのメソッド呼び出し
(.instanceMember instance args*)
instanceMemberにメソッド名、instanceにインスタンスを指す変数、args*にメソッドに渡す引数を指定する。
(.toUpperCase "fred") -> "FRED"
Classのオブジェクトのメソッド呼び出し
(.instanceMember Classname args*)
インスタンスのメソッド呼び出しと同じで、instanceMemberにClassが持つメソッド指定して、Classnameに対象とするクラス名を指定する。
(.getName String) -> "java.lang.String"
クラスメソッドの呼び出し
(Classname/staticMethod args*)
オブジェクトのメソッド呼び出しと異なり、"."は使わず"クラス名" + "/" + "メソッド名"になる。
(System/getProperty "java.vm.version") -> "1.6.0_07-b06-57"
また、引数が不要な場合はカッコでくくる必要がなく次のようにかける。
Math/PI
-> 3.141592653589793