ブログ::=(メモ|落書き)帳

一人前になれないプログラマのメモと落書き

日付文字列を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ソフトウェア開発のための特選レシピ集

Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

Eclipseを使ったheadless applicationの作成方法

なんとなくEclipseのheadlessモードでplug-inを実行できぬものかと調べてheadless applicationに行き着いたのでブログに残しとく。
plug-in作成なのでEclipseにはPDEがインストールされてることを前提とする。

テンプレートからHeadless Applicationを作成

  1. 「File」->「Plugin-Project」->「Other...」で新規作成ウィザードを立ち上げる。
  2. 「Plugin-in Project」を選択して「Next>」をクリックする。
  3. project nameを入力して「Next>」をクリックする。
  4. 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>」をクリックする。f:id:radian19831019:20130321000032p:plain
  5. 「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化 & バックアップ

  1. PCにFlashtoolをFlashtool -- Xperia devices flashingのInstallationからダウンロードしてインストールする。FlashtoolはWindows/Linux/Mac向けがある。
  2. Xperiaの設定をUSBデバックモードに変更するため、「設定」→「アプリケーション」→「開発」→「USBデバッグ」にチェック入れる。
  3. Flashtoolを起動する。
  4. XperiaをUSBで接続する。
  5. Xperiaのrootを取得するため、Flashtoolの南京錠アイコンをクリックする。
  6. Xperiaを再起動する。
  7. xRecoveryをXperiaにインストールするため、Flashtoolの+アイコンをクリックして0.3GBを選択してOKをクリックする。
  8. xRecoveryを起動するため、Xperiaを再起動し、Sony Ericssonのロゴが出たらXperiaの←ボタンの長押しを何回も行う。
  9. xRecoveryが起動したら「Backup and Restore」→「Backup」を選択する。(音量ボタン:上下移動、HOMEボタン:決定)

Android 2.3.3にアップデート

  1. X10i_3.0.1.G.0.75_GLOBAL-GGL GENERIC 1232-9897.rarをxperia x10 | 所感 ~android~からダウンロードし解凍する。
  2. FlashToolのインストール先のfirmwares/ディレクトリにX10i_3.0.1.G.0.75_GLOBAL-GGL GENERIC 1232-9897.ftfをコピーする。
  3. FlashToolを起動し、稲妻アイコンをクリックをクリックしてFlashmodeを選択してOKをクリックする。
  4. X10iを選択してOKをクリックする。(このときXperiaはPCから外しておく)
  5. Xperiaの電源切って←ボタン押しながらPCにUSBで接続する。
  6. LEDが緑色に光ったら←ボタンを離す。
  7. FlashToolの書き込みが終わったら、Xperiaを再起動してAndroid 2.3.3で起動することを確認する。
  8. 上記root化 & バックアップの手順でroot取得、xRecoveryのインストール、Backupを行う。

カスタムROM:ThGo2v18.0cインストール

  1. 「ThGo2_v18.0c.zip」をフォルダを漁ってたら出てきたので… | 所感 ~android~からダウンロードする。
  2. XperiaのMicroSDカードに「ThGo2_v18.0c.zip」をコピーする。
  3. xRecoveryを起動し、「Factory reset(full wipe)」、「Wipe cache partition」、「Advanced optinos」→「Wipe Dalvik Cache」と「Wipe Battery Stats」を行う。
  4. ThGo2_v18.0cをインストールするため、「Install Custom ZIP」→「Choose Custom Zip」でコピーした「ThGo2 v18.0c.zip」を選択する。
  5. 再起動するため「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節に記述する型と同一かサブクラスでなければならないと思い込んでた。
よく考えればわかることだけどバイトコードレベルで特殊なことしてたらScalaなどのJVMを対象とする他言語でチェック例外を非チェック例外として扱うことができないよね。。。

ClojureでJavaプログラミング

ClojureJavaを呼び出すための方法を学んだので書き散らす。

クラスのインスタンス

 (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

連続したメソッド呼び出し

".."マクロを使うとobject.getXXX().getYY().getZ()のような構文が簡単にかける。

(.. System (getProperties) (get "os.name"))

とりあえず、これだけ覚えればJavaの知識だけでClojureを使えるのでは?と思い書いた。
これでJavaな人(主に俺)がClojureの学習を諦めずに騙し騙し進めることができればと思う!

本ブログはAmazon.co.jpアソシエイトに参加しています