Google Chromeでマウスジェスチャー利用

Mouse Strokeをインストール。
設定アイコンをクリックし、「拡張機能」を選択。
Mouse Strokeのオプションをクリックし、ジェスチャーなどを好きに変更。

覚書(自分の設定)
U:Tab->New Tab
D:Tab->Close Tab


※インストール前に開いていたタブには、マウスジェスチャーは利用できないようです。
 一旦全てのタブを閉じ、開き直すと正常に動作しました。

GoogleMapApiの利用登録

まず、Googleのアカウントを取得します。

ログイン後、(一番大事
http://code.google.com/intl/ja/apis/maps/
「登録して Google Maps API キーを取得します。」に移動。

チェックボックスにチェックを入れ、取得したいURLを入力し、「APIキーを作成」を押下します。

JavaScript用のサンプルなどが出てくるので、それを利用します。

http://google.co.jp/
とかの既存のURLでも、
http://192.168.1.1/
とかのIPでも可能です。

ローカルなIPでも取得できるので、別マシンをサーバとして実行することも可能です。



(ログインしなくちゃ取得できないことに気づくまでに、小一時間かかりました。)


ちなみに、http://localhost/として利用する場合は、
google maps api localhost
などで検索すると、keyを公開している人もいるようです。(google的にOKなのかは不明です)

google calendarに終日イベントを追加する

基本的に他の人のソースのパクリ。

package sample.calendar;

import java.net.URL;

import com.google.gdata.client.calendar.CalendarService;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.calendar.CalendarEventEntry;
import com.google.gdata.data.extensions.When;

public class AllDayEventCreator {

	// Google アカウント
	private static String GOOGLE_ACCOUNT = "xxxxxxxxxx@gmail.com";
	// Google アカウントのパスワード
	private static String GOOGLE_PASSWORD = "xxxxxxxxxx";
	// 送信URL
	private static String GOOGLE_CAL_URL = "http://www.google.com/calendar/feeds/default/private/full";

	/**
	 * 終日のイベントを追加します。
	 * 
	 * @throws Exception
	 */
	public void insertAlldayData() throws Exception {

		URL postURL = new URL(GOOGLE_CAL_URL);

		// イベント登録クラス
		CalendarEventEntry calEntry = new CalendarEventEntry();
		// タイトルを設定
		calEntry.setTitle(new PlainTextConstruct("終日のテスト"));
		// 詳細を設定
		calEntry.setContent(new PlainTextConstruct("詳細のサンプル"));

		DateTime startTime = new DateTime();
		startTime.setTzShift(9);
		startTime = DateTime.parseDate("2009-11-27");

		// 開始終了日時をWhen型オブジェクトに代入し、イベントクラスに追加
		When eventTimes = new When();
		eventTimes.setStartTime(startTime);
		calEntry.addTime(eventTimes);

		// Google Calendarサービスに接続
		CalendarService calService = new CalendarService(
				"chaos-alldaySample-0.1");
		calService.setUserCredentials(GOOGLE_ACCOUNT, GOOGLE_PASSWORD);

		// スケジュールを追加する
		calService.insert(postURL, calEntry);
		System.out.println("終日の予定:「" + calEntry.getTitle().getPlainText()
				+ "」を追加しました。");
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		try {
			// インスタンス生成
			AllDayEventCreator main = new AllDayEventCreator();
			// 終日イベントを追加
			main.insertAlldayData();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

終日イベントはsetStartTimeに渡すDateTimeを作成するときに、
DateTime.parseDate("2009-11-27");
のように、parseDateを使い、時分秒を指定しないとできる(みたい)。

google calendarでカレンダーを作成する

基本的にはsampleについてきたCalendarFeedDemo.javaから、
不要だと思われる箇所を削っただけ。

package sample.calendar;

import java.net.URL;

import com.google.gdata.client.calendar.CalendarService;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.calendar.CalendarEntry;
import com.google.gdata.data.calendar.ColorProperty;
import com.google.gdata.data.calendar.HiddenProperty;
import com.google.gdata.data.calendar.TimeZoneProperty;
import com.google.gdata.data.extensions.Where;

public class CreateCalendar {

	/** google calendar 基準URL */
	private static final String METAFEED_URL_BASE = "http://www.google.com/calendar/feeds/";

	/** マイカレンダー用アドレス */
	private static final String OWNCALENDARS_FEED_URL_SUFFIX = "/owncalendars/full";

	/** マイカレンダーフィード用URL */
	private static URL owncalendarsFeedUrl = null;

	private static final String BLUE = "#2952A3";

	/** ユーザー名 */
	static final String USER_NAME = "xxxxxxxx@gmail.com";
	/** パスワード */
	static final String USER_PASSWORD = "xxxxxxxx";


	/**
	 * カレンダーを作成します。
	 * 
	 * @param service
	 *            CalendarServiceオブジェクト
	 * @return 作成されたCalendarEntryオブジェクト
	 * @throws Exception
	 */
	private static CalendarEntry createCalendar(CalendarService service)
			throws Exception {
		System.out.println("カレンダーを作成します。");

		// カレンダーオブジェクトを初期化
		CalendarEntry calendar = new CalendarEntry();
		calendar.setTitle(new PlainTextConstruct("マイカレンダー1"));
		calendar.setSummary(new PlainTextConstruct("サンプルの説明"));
		calendar.setTimeZone(new TimeZoneProperty("Asia/Tokyo"));
		calendar.setHidden(HiddenProperty.FALSE);
		calendar.setColor(new ColorProperty(BLUE));
		calendar.addLocation(new Where("", "", "Toyama"));

		// カレンダーを追加します。
		CalendarEntry newEntry = service.insert(owncalendarsFeedUrl, calendar);

		return newEntry;
	}

	public static void main(String[] args) {

		try {
			// URLオブジェクトを作成
			owncalendarsFeedUrl = new URL(METAFEED_URL_BASE + USER_NAME
					+ OWNCALENDARS_FEED_URL_SUFFIX);

			// カレンダーサービスに接続
			CalendarService service = new CalendarService(
					"chaos-CreateCalendarSample-1");
			service.setUserCredentials(USER_NAME, USER_PASSWORD);

			// カレンダーを作成
			createCalendar(service);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

コンストラクタ:CalendarServiceの引数は文字列で
[company-id]-[app-name]-[app-version]
らしいので、テキトーに変更。
(例外処理とかはテキトーです。)

MacBookでEclipseをインストール

EclipseJavaEE(MacOS用)をDLしてきました。
で、ターミナルを開いて

cd Downloads/
tar -xvf eclipse-jee-ganymede-SR1-macosx-carbon.tar

で、解凍。
作成されたeclipseディレクトリを/Applications以下に移動。
で、Eclipseを起動

MacBook買いました。

新型MacBook買いました。

いろいろいじってみてます。
なんていうか、綺麗です。


あと、最近はVAIOのpentiumIII700MHzを使っていたので、格段に早いです。
Eclipseの起動とかは、へたすると会社のパソコンより速いような気すらします。


まだ、MacOSの使い方がよくわからないので、いろいろ調べてみようと思います。

EJBのスレッドセーフについて

以下、いろいろ見て回って調べたこと。
間違っている可能性あり。


まず、ステートレスセッションBean。
1回のリクエストごとにプールされているインスタンスを割り当てられる。
そのため、インスタンス変数を利用する場合は、割り当てのたびに初期化するなどしないといけない。
普通はインスタンス変数を使わずに、ローカル変数のみを使うべき。
ローカル変数はスレッドごとに別々の領域を割り当てられる(はず)なので、スレッドセーフを考える必要はありません。


次に、ステートフルセッションBean。
クライアント毎に生成されるため、1クライアントが別スレッドなどでアクセスしない限り、スレッドセーフ。
インスタンス変数なども利用可能。
ただし、多数のアクセスがあった場合に大量のメモリが必要になるので、あまり使われない(らしい)。


次は、メッセージ駆動Bean。
ステートレスセッションBeanと同様。
非同期に処理が行えるだけの違い?


エンティティBeanはローカルでインスタンス化するはずなので、関係ないかな?

JPA利用時のエラー

JPAを利用しようとして、oracle-ds.xmlと、persistence.xmlを記述。
その後、JBossの起動時にException発生。

HibernateException : unknown Oracle major version[0]

が発生。で、回避策。
persistence.xml

<property name="hibernate.dialect"
          value="org.hibernate.dialect.Oracle9Dialect">

環境としてはOracle10gなんだけど、利用するのはOracle9Dialectというもの。

jsfのinputタグなどをJavaScriptで制御する。

<h:view>
  <h:form id="form1">
    <h:inputText id="userId" />
  </h:form>
</h:view>

と、すると、inputタグは"form1:userId"というid(nameだったかも)になる。
ここで、

document.form1.form1:userId.value = "hoge";

としてもJavaScriptエラーとなる。


ので、

document.getElementById("form1:userId").value = "hoge";

や、

document.all['form1:userId'].value = 'hoge';

とする。

プロパティファイルを編集するeclipseプラグイン

忘れないようにメモ。


JSFのメッセージファイル(?)のようなプロパティファイルは、直接日本語を編集できないので、
PropertiesEditorプラグインを入れます。
http://sourceforge.jp/projects/propedit/files/


以上。