2009年1月31日土曜日

ドメインakisute.comを取得いたしました

本日akisute.comドメインを取得いたしましたので、
http://akisute.com/
こちらのアドレスでも本Blogにアクセスできるようになりました!
どうぞよろしくお願いします。


余談ですが、
http://www.akisute.net/
こちらの方と私は別人ですので、あしからずご了承ください。

さらに余談ですが、
http://aniki.kululu.net/sc/talk/t_index.htm
こちらの方とも私は別人ですので、あしからずご了承ください。

2009年1月26日月曜日

ThinkingRockを使ってGTDを初めてみました


  • 最近はタスクが多すぎる!!
  • Remember The Milkだけではもう限界!サブプロジェクトすら作れないし・・・リストにはいつもタスクがあふれている!
  • そこでGTDを本格的にやってみる
  • でもOmniFocusは高くて躊躇
  • と思ってたら救世主登場、その名はThinkingRock
  • Javaなのでマルチプラットフォームなのもいい感じ
ThinkingRockというJava製のGTDアプリケーションを最近使い始めました。
同時並行で5つぐらいのプロジェクトを抱えており、さすがにRemember The Milkだけでは仕事を背負いきれなくなってきたのが始めたきっかけです。

このアプリの特徴を一言で表現するなら、

超本格的、でも簡単

これです。

実は私、GTDについてはウェブで聞きかじった程度の知識しかありません。
しかしこのThinkingRock、
「思考を集めるための画面」
「集めた思考を仕分けするための画面」
「仕分けした思考をプロジェクトやアクションとして管理するための画面」
が明示的に分離されており、
何を入力すればよいかもはっきりと決まっているので、後はヘルプを見ながらそれに従って項目を入力したりタスクを仕分けしていけば厳格にGTDに乗っ取ったタスク管理が自動的にできてしまうといった作りになっています。


このように、GTD全体の構成を表したOverviewが用意されております。

ヘルプにもGTD関連の情報が満載で、
わからないことがあれば頼りになります。
(たいていこういうツールのヘルプって頼りにならないので、驚きでした)

ヘルプ画面はこんな感じです。英語ばっかりで難しいですが・・・読めないことはないです!

サブプロジェクトとかも作成でき、コンテキストも作れて高性能でいい感じです。
気に入ったので職場のWindowsマシンにも導入しました。

2009年1月24日土曜日

route-meでタッチイベントを扱いたい

  • タッチイベントを扱うときはRMMapViewDelegateプロトコルを採用する
  • シングルタッチ、ダブルタッチを感知したり、マーカー上のタッチやドラッグを感知したり、地図の移動およびズームを感知したりできる
  • 現状、マップのドラッグやズームを使用不可能にするための手段は用意されていない。Delegateの返り値による操作もできない。
  • UIMapViewにenableDraggingおよびenableZoomというインスタンス変数が用意されているが、mapView->enableDraggingのようにしてアクセスしようとするとコンパイルエラーになってしまう。

route-me上でタッチイベントを取得してみました。

こんな感じで、画面上のタップした点を取得することができます。

タッチイベントの取得方法は、
まずRMMapViewDelegateプロトコルを任意のクラスに適合させて、
@interface MapViewController : UIViewController  {
/* 中略 */
- (void) singleTapOnMap: (RMMapView*) map At: (CGPoint) point
{
NSString *message = [NSString stringWithFormat:@"(%f, %f)", point.x, point.y];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"singleTapOnMap"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
/* 後略 */

適合させたクラスのオブジェクトをRMMapViewのdelegateプロパティにセットします。
RMMapView *mapView = [[[RMMapView alloc]
initWithFrame:[UIScreen mainScreen].applicationFrame WithLocation:initialLocation.coordinate]
autorelease];
mapView.delegate = self;

普通のUIViewとほとんど同じですね。

しかしこの方法では画面上の座標がとれるだけで、緯度経度を取ることができませんので、
RMMapViewのメソッドを用いて、緯度経度に変換します。
@interface MapViewController : UIViewController  {
/* 中略 */
- (void) singleTapOnMap: (RMMapView*) map At: (CGPoint) point
{
//ポイントをLatLongに変換して表示する
CLLocationCoordinate2D coordinate = [map pixelToLatLong:point];
NSString *message = [NSString stringWithFormat:@"(%f, %f)", coordinate.latitude, coordinate.longitude];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"singleTapOnMap"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
/* 後略 */

これで緯度経度になりました。

ところで、地図のスクロールやズームを制限して利用したいというときがあると思います。
たとえば日本向けのアプリなのにアルゼンチンの地図をスクロールして表示されたら困るという場合です。

早速地図のスクロールを制限する方法を調べてみたところ、
RMMapViewにいかにもそれらしいメンバー変数を発見。
@interface RMMapView : UIView
{
RMMapContents *contents;
id delegate;
BOOL enableDragging;
BOOL enableZoom;
RMGestureDetails lastGesture;
float decelerationFactor;
}

しかしながらこのメンバー変数、プロパティも操作するためのメソッドもなく、外部から操作することができません。
ためしに無理矢理以下のようなコードを書いてアクセスしてみたところ、コンパイルではねられました。
RMMapView *mapView = [[[RMMapView alloc]
initWithFrame:[UIScreen mainScreen].applicationFrame WithLocation:initialLocation.coordinate]
autorelease];
//以下の行でエラー。アクセスできません
mapView->enableDragging = NO;

残念ながらまだこの機能は現在のバージョンのroute-meでは利用できないみたいです。

その他、delegateメソッドの返り値をNOにしたらスクロールしなくなるとかそういう機能がないか調べてみましたがやはりなさそうで、今のところ地図のスクロールおよびズームを制限するのは難しそうです。今後のバージョンアップに期待ですね。