2008年7月30日水曜日

iPhoneげっと!

...しちゃいましたよー。とうとう。

2,3店舗事前に在庫があるかどうか確認したんですが、「新規のお客様ならば。。」という事でした。新規顧客優先になっている所がおおいみたいですねー。
私はナンバーポータビリティでの新規だったのでyokatta.

購入したのは、16GBのWhite.

店頭で、BlackとWhite両方見せてもらえないですか?と聞いてみたんですが、「箱に入っているので...」とかで、結局事前に見せてもらえなかった。

Whiteで!と決めてから、取り出してきてSIM入れたりいろいろしてくれたんですが、本体に触る時には必ずハンカチで...という徹底ぶり。

そんなに指紋がついちゃぅのねw

docomoからの移行だったんですが、Address情報は移行できないということで、家でひたすら移行作業。
Googleアカウントの情報を同期で移行できるので、助かりましたー。

無料ソフトを入れたりして遊んでいたらこんな時間。今日は家でプログラムは全く触らずな日になってしまいました。

触ってみた感想としては、iPhoneは携帯じゃーないですね。Palmに簡単な電話機能がついているって感じ。
携帯をバシバシ使う人には、携帯の買い替えとしてはあまりオススメしないです。

私としては、GoogleReaderが(携帯電波が通じれば)どこでもみれるのが幸せ♪
付属のMap機能+GPSで、これからは道に迷っても安心(笑)

YouNoteっていう無料のメモソフトを入れたんですが、これも色々使えそう。
普通のメモ保存の他に、手書きメモや、画像付きメモ、音声メモ、URLメモが作れて それらメモの付加情報にGPSでの現在位置や、Tagとかもつけれるみたい。
散歩しながらとった画像とか、ふっと思い付いたアイデアとか入れておくのにも良さそう。
こんなのが、無料ってのもすごいですねー。

昔、相方から譲ってもらったPalmは3日坊主で使いこなせなかった私ですが、さてiPhoneはどうかな?
• • •

2008年7月27日日曜日

AirのWindowの関連について

Airの画面オブジェクトの構成がイマイチよくわかっていません。
WindowedApplication,Applicationは、Airのメイン画面のクラスのことね...と思っていたぐらいの所に、StageだのNativeWindowだの出てきて、混乱気味。

...という事で、関連しそうな所をクラス図にしてみました。



NativeApplicationというクラスは、自分自身のインスタンスをstaticに取れるようなので、これがAirアプリのルートと想像。

その中に、NativeWindowが複数格納されているようです。

このNativeWindowにはStageというクラスがあって、これがいろんな表示オブジェクトを保持しているみたい。

ブラウザ (Flash® Player) で実行されている SWF コンテンツの場合、Stage は Flash コンテンツが表示されている全体の領域を表します。AIR で実行されているコンテンツの場合、各 NativeWindow オブジェクトが、対応する Stage オブジェクトを持ちます。

...とのことなので、Flashの時はこのStageがRootの表示領域だったけど、AirはNativeWindowが保持している...つまり、NativeWindowが複数あれば、Stageも複数存在するってことですかね。

WindowedApplicationやApplicationは何処に入っているんだろ?とみていたのですが、クラスの関連からは見えなくて。。

NativeWindowの説明で
Flex コンポーネントを、NativeWindow インスタンスの表示リストに直接追加することはできません。この場合、Flex mx:WindowedApplication コンポーネントおよび mx:Window コンポーネントを使用してウィンドウを作成し、これらのオブジェクトに他の Flex コンポーネントを子として追加します。Flex ベースの SWF が、その SWF のアプリケーションドメインにロードされていて、アプリケーションコンテンツである場合は、この SWF を NativeWindow ウィンドウに直接追加することができます。

なんて事が書いてありました。

そこで試しに、Airのメイン画面をWindowedApplicationにして、そこからWindowの画面をもう一つ表示させてみた時点で、
  trace(NativeApplication.nativeApplication.openedWindows);
としてみたら、NativeWindowが2つ入っていました。

ってことで。。。多分、WindowedApplicationとかはNativeWindowとして作られているのかな。


...こぅいぅ情報って、しっかりとした情報が何処かにないのかなぁ?
• • •

2008年7月26日土曜日

SlimTimerAIRクライアントアプリの途中経過


今はこんな感じになっています。

前と比べて、なんだか普通の画面になってしまいましたが、ドラッグしても変な動きにならないしぃーいいかなーと。

基本機能はなんとなく動くので、実際会社で使ってお試し中。
で!さっき、アプリケーションのアイコンを作成してみました。



時計にAIRのマーク重ねただけだけど、ちょっとお気に入り。わーぃ!

HTTPServiceの動きで大分悩んで時間を使いました。
GET,POST,DELETEは動いてくれるんだけど、PUTがなぜか動かない(涙)
SlimTimerの方の問題なのか。。。HTTPServiceでの指定が悪いのか。。。結局不明です。
メッセージが分かりにくすぎ。こんなんで皆作ってるの?となんだか不思議だったりもする。

URLLoaderとHTTPServiceをどちらでもSlimTimerAPIにつなげれるよう、勉強の為にやっていたのですが、結局挫折気味。
今はURLLoaderで動かしてますw

もともとオフライン対応するのが目的でAIRクライアント作ってたんですけども、一旦置いとかれている状態。
オンラインで動かすときの方が多いので、オンラインで使いやすい機能をまずつけたい。

個人的に欲しいのは...いっぱいありすぎ。

「今日の予定タスクを選んで、すぐに選べる状態にする」
私は朝イチに今日の流れを考えるタイプなので。

「アラート機能。指定時間になったら教えてくれる感じ」
お昼はちゃんと行かないとっ!

「Tracチケットとのマッピング」
タスクの2重管理は面倒なのでねぇー。
Tracチケットからのインポートって手もあるけども、私はTracチケットの方が細かすぎてあんまりイマイチ。皆はどうなんだろ??

「一定時間、マシンの操作がなかったら停止する」
。。。なんて出来るのか?!

「今日の作業時間をまとめてメールで送信」
私の会社、日々日報のメールのかかねばならないので(笑)

ま、こんなコテコテにする元気があるかどうかが問題ですw



  
• • •

2008年7月21日月曜日

Airで時間のValidatorを設定する

AdobeAirのFlex画面上で、時間の項目のValidatorを設定したい!
と探していたんですが、DateValidatorはあるものの、時間のものは見当たらず。

ということで、自分で作成してみました。
(本当はあったら泣きますけど)

Validatorは正規表現用のRegExpValidatorを使用。

import mx.validators.RegExpValidator;

public function checkTimeFormat(textObj:Object):void {
var timeValidator:RegExpValidator = new RegExpValidator();
timeValidator.expression = "^([0-1][0-9]|[2][0-3]):[0-5][0-9]:[0-5][0-9]$";
timeValidator.noMatchError = "時間は HH:MM:SS の形式で入力してください";
timeValidator.source = textObj;
timeValidator.property = "text";
timeValidator.validate();
}

ってのを作成して、チェックをかけたい mx:TextInput に change="checkTimeFormat(txtStartTime)"
とchangeイベントでチェックをかけるようにする。
メソッドにしているのは複数のTextInputで同じチェックをかけたかっただけで、特に意味はありません(笑)



こんな感じの表示になります。
• • •

2008年7月18日金曜日

J2SE6のJTable

J2SE6で試すことがあって、触っていたのですが、JTableも結構変わっているみたい。

テーブルの印刷機能


print() というメソッドが増えています。
JScrollPaneに入っているJTableで全体が表示されていないとき(スクロールしないと全体が見えないとき)印刷って今までそぅ簡単にはできなかったんですが、これを使うと全体を印刷できるようになるみたい。


テーブルのソート機能


テーブルの列Headerをクリックするとテーブル内データをソートさせる・・・というのは、今まで自作を良くしていた部分ですが、これがJTableに標準実装されています。

JTableの標準実装をそのまま使いたいときには setAutoCreateRowSorter(true)ってしてあげるだけでOK!
Sorterを自分で実装して設定することもできます。

このソートを実装ですが、Modelのデータを実際にソートするのではなく、"見かけだけ" ソートしているようです。

そのため・・・
TableModelのsetValueAt((Object aValue, int row, int column)
を使うときには注意する必要があります。

今までも 『列』(Column) は "見かけだけ" 移動させることができたため、
"見かけ上での列位置" から "Model上の列位置" に変換するのに convertColumnIndexToModel(column) ってのを使っていたと思います。

これが、『行』に対しても必要になってきます。

convertRowIndexToModel(int)というメソッドが追加されていて、これを使ってModelの行位置に変換する必要があります。

今までのアプリ・・・修正しないといけないところが多いなぁ(涙)
• • •

2008年7月17日木曜日

AIRの機能を色々

SlimTimerのアプリを作成中な訳ですが、おかげで色んな機能が試せたり、新たな発見があったりと楽しいです♪

そうそう、
AIRでMXMLを複数作成して、一つのアプリで別Window表示できたりしないんかなぁー?
と思っていて、
@IT Flexのリッチな画面遷移テクニック
FxUG リッチな画面遷移について
FxUG Flexでのページ遷移について
とかを見てみたんですが、StackViewで切り替えるとかSWFLoaderで読み込ませるとかしかないんかなぁーって思っていたんですが、AIRでは mx:Window というのがあるのを発見!
http://livedocs.adobe.com/flex/3/langref/mx/core/Window.html

mx:WindowがTopLevelのXMLを作成して、メイン画面から new {MXMLのファイル名}().open()
ってすると無事に起動!

mx:Windowの属性をみるとsystemChome,transparentとかApplicationDescriptorに指定するようなものもあって、色んな画面作れそうです。

#ってことで、さっそくAIR GEARのtrunkにmx:Windowを追加してみました。

あとは、データ永続化としてShareObjectとSQLiteを試してみてます。
ここにもちょっとまとめ書いた→Adobe Air/データ永続化

SlimTimerの見かけは、やっぱりWindowTitleがあるものに変えてみてます。
というものも、buttonDownのイベントでwindow.nativeWindow.startMove()ってするだけだと、途中で怪しげな動きになってしまう事があって。
そんな事があるんだったら、普通に動くものにした方がいいと思いまして。

ということで、SlimTimerのAIRクライアントはまだまだ作成中で、今はSQLiteのDB使ってオフライン対応できないか模索中。
その後はタスクの修正やら、日毎のタイムライン表示やら。。。まだ追加せねばならん所が多いんですけども、出来上がったらソースとともに公開しよーと思っています。
• • •

2008年7月10日木曜日

SlimTimerアプリの見かけ

SlimTimerでタスクの一覧が取れるようになりました。
でーですね、せっかくAdobeAirで作るんだからっっ!と見かけをちょっといじってみました。


こんな感じ。。
えー、このどこかで見たことがあるような感じは。。。
ええ、そうですーーー。MP3Playerみたいになイメージで作った訳で。

つーことで、▼を押すとタスクの一覧が出てきて選択できます。

これがねー、私にとったら嬉しいやら悲しいやら。
まずはそれとなくカッチョよぃ見かけになったんちゃぅ?って思ったりもするんですが、どこかで見たUIを真似ることしか出来ない私のデザインセンスに、落ち込む所もあり。。。

Windowのタイトルバーを表示しないようにするために、mx:WindowedApplicationでなく、mx:Applicationを使って、不定形Windowにして喜んでいたんですけども、こうすると「常に全面に表示」の属性が無いみたい。うーーん、この属性は使いたかっただけに。。

。。。となった場合に、デザインセンスある人はmx:WindowedApplicationを使ってカッチョよい見かけを考えられると思うんですよー。

私の場合はぁーー思考停止。
とりあえず、時間情報を更新できるプログラムの方をいじるかなっとちょっと現実逃避w

*追記
WindowedApplicationの属性に showTitleBar="false" ってあるのを発見。
これでWindowedApplicationでもWindowTitleは消せそうです。
AIR GEARから属性が見えてなかったから気づかなかった。。追加しておこぅ。
• • •

2008年7月8日火曜日

Airに挑戦中

AIR GEARで、何かアプリを作ってみよう! ってことで、SlimTimerのAirクライアントに挑戦中です。オフライン対応なんぞもできないかなぁ?と思っているのですが。

ActionScriptは全く知らなくてJavaScriptも本格的には使っていなかったので、調べものに時間がかかります。。

最初に詰まったのは、WebのAPIにアクセスするのはどのクラスを使えばいいのか?ってところ。HttpService とか URLLoaderとかWebServiceとか・・・ 見つかったんですが、んで?どれを試す? をGoogle先生に聞いて 結局よくわからず。。

WebServiceは SOAP準拠のWebServiceにアクセスするモジュールっぽいので除外して 、 HttpServiceとURLLoderのどっちを使ったらいいのか結局はっきりしなかったので、まぁー勉強のため両方で試してみることに。

SlimTimerのアクセスは結局、HttpServer,URLLoderの両方でできました。

何が違うか?ですが・・・ HttpServiceの方がWebAPI叩くのに必要なHeader情報やパラメータ情報は綺麗にかけるかな。あと、取得できるイベントも違うみたいです。

こうやって迷って思ったこととしては、やっぱり あまり知らずに取り組む言語やフレームワーク的なものは、はじめに基本機能がまとめて書いてある本を読むほうがいいですね。。。(笑)

Javaを勉強したいんだが、どっからやればよい? という質問を受けたときに、よく、「ネット上にいっぱい勉強材料とかあるやん。 本なんていらんのとちゃぅ?」って言ってましたが、初心者の段階では 「基本機能の流し読み」 も必要だなぁー。初心者の気持ちを忘れてたかしら? なんて思ったり。

今回の件も、ネット上をうだうだ巡回しているのが結構無駄だった。 はじめに手元のAir本見とけばよかったよーー

 

 

 

Tags:

• • •

2008年7月3日木曜日

AIR GEARリリース

AIR GEARとうとうリリースしました!

Airというよりも、EclipsePlugin作成の良い勉強になりました。
おかげで今まで知らなかったEclipseの機能を知ったりw

もともときっかけはAIRを触りたくて、Air IDE探しの旅をしたのが去年の年末。
でも、FlexBuilderは有料だし、AptanaはMXMLのWYSIWYGデザイナないし、FlashDevelopはMacで動かないし(無理矢理する方法はあるみたいだけど)。。。となった時に知ったのが、開発中だったAmaterasのAIR GEAR。
そこで1月末ぐらいからコミッタにさせて頂いて、かれこれ半年弱。

正直、機能もまだまだだし、AS3のコード補完はやっぱり欲しいからなんとかしたいし。。。と欲望はまだまだ続いているんですが、今の段階で一旦リリースとなりました。

よければ、みなさん使ってみてくださいー。
んでもって、ご意見や感想などもらえると、むちゃくちゃ嬉しいかもー!
• • •

2008年7月2日水曜日

パースペクティブを作ってみる

またもやAIR GEAR関連ですが、パースペクティブを作成してみました。
それまで、Eclipseのパースペクティブって特に気にせず使っていたので、機能をよく知っていなかった事が判明。

WindowメニューのReset Perspectiveで、選択中のPerspectiveのデフォルトに戻してくれる。
Customize Perspectiveでショートカットメニューの表示有無や、ToolBarのアイコンの表示有無が切り替えできる。
逆の使い方としては、ToolBarにメニューが出てきたけど、これってどのPluginが表示しているの?を調べることもできますねー。

あと、感動的だったのが専用のPerspectiveを作るのは思った以上に簡単だってこと。
(自分でViewとかNavigatorとか作るなら別ですけども)

自分なりのとか、案件専用とかのPerspectiveを作ってみるのもいいかも。
作り方は、拡張ポイントorg.eclipse.ui.perspectives を使います。


<extension
point="org.eclipse.ui.perspectives">
<perspective
name="AIR GEAR"
icon="icons/air.gif"
class="net.sf.amateras.air.ui.AirPerspective"
id="net.sf.amateras.air.perspective">
</perspective>
</extension>


net.sf.amateras.air.ui.AirPerspectiveってクラスは自作するクラス。
IPerspectiveFactoryを実装したクラスにします。

package net.sf.amateras.air.ui;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class AirPerspective implements IPerspectiveFactory {

public void createInitialLayout(IPageLayout layout) {

}
}

createInitialLayoutの中に記述を書いていってもいいんですけど、このまま空にしておいて、plugin.xmlに書いていく事ができます。
こんな感じ。

<extension
point="org.eclipse.ui.perspectiveExtensions">
<perspectiveExtension
targetID="org.eclipse.ui.resourcePerspective">
<perspectiveshortcut id="net.sf.amateras.air.perspective">
</perspectiveextension>
<perspectiveextension targetid="net.sf.amateras.air.perspective">
<newwizardshortcut id="org.eclipse.ui.wizards.new.folder">
<newwizardshortcut id="org.eclipse.ui.wizards.new.file">
<viewshortcut id="org.eclipse.ui.views.ResourceNavigator">
<viewshortcut id="org.eclipse.ui.views.ProblemView">

<view
ratio="0.20"
relative="org.eclipse.ui.editorss"
relationship="left"
id="org.eclipse.jdt.ui.PackageExplorer">
</view>
<view
relative="org.eclipse.jdt.ui.PackageExplorer"
relationship="stack"
id="org.eclipse.ui.views.ResourceNavigator">
</view>

<view
ratio="0.75"
relative="org.eclipse.ui.editorss"
relationship="right"
id="org.eclipse.ui.views.PropertySheet">
</view>
<view
ratio="0.60"
relative="org.eclipse.ui.views.PropertySheet"
relationship="bottom"
id="org.eclipse.ui.views.ContentOutline">
</view>

<view
ratio="0.75"
relative="org.eclipse.ui.editorss"
relationship="bottom"
id="org.eclipse.ui.views.ProblemView">
</view>
<view
relative="org.eclipse.ui.views.ProblemView"
relationship="stack"
id="org.eclipse.ui.console.ConsoleView">
</view>

<actionSet
id="org.eclipse.debug.ui.launchActionSet">
</actionset>
</perspectiveextension>
</extension>

たったこれだけで、幸せな気分になれますよー。
• • •