Hi-farm blog

ActionScript 3.0 , AIR , FLEXからCocoa, OpenGL

久しぶりのブログ記事がメモレベルですみません。

Flash BuilderとFlashとを共存させたい場合、Flash Builder側にもflパッケージの場所を教えてあげたい場合があると思うのですが、なかなかこれが忘れやすいところにありますので、メモ代わりに残しておきます。

ちなみに、Snow Leopard, Flash CS4の環境です。
Application/Flash CS4/Common/Configuration/以下です。(Flash CS4の位置はインストールした場所により異なるでしょう)

.swcの中身は今イチ解らなかったのですが、
コンポーネント類 .swc : Components/以下
コンポーネント類のソース:Component Source/ActionScvript 3.0/以下

です。
もしかしたらもっと簡単に使えるようになる方法があるのかな、とも思いますが、ソースもみれるのはこれはこれでいい事があるかもしれないので残しておきます。

イージング系:libs/projects/Flash/src/以下

ListBoxとDataTemplate

なんと今回はC#あるいはWPFについてです。

自分があまりにも物事を忘れやすいことを反省して、忘れないようにするためのタスク管理アプリを作りました。
その時にListBoxで困ったのでメモ。
やりたい事は、ListBoxのItemsSourceに自分で作成したクラスのプロパティのコレクションを適用させる、ということ。

Window1.xamlの一部
ListBoxの定義:

<ListBox x:Name="dataList" ItemTemplate="{StaticResource listTemplate}"/>

DataTemplateの定義(TodoEntityというのが自分で定義したエンティティクラスです。):

<DataTemplate x:Key="listTemplate" DataType="{x:Type local:TodoEntity}">
            <Grid ToolTip="{Binding Path=DescriptionValue}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <StackPanel Orientation="Horizontal" Grid.Column="0">
                   <TextBlock Text="件名:"/>
                   <TextBlock x:Name="subject_tb" Text="{Binding Path=SubjectValue}" />
                </StackPanel>
                <StackPanel Margin="10,0,0,0" Orientation="Horizontal" Grid.Column="1">
                    <TextBlock Text="概要:"/>
                    <TextBlock Text="{Binding Path=DescriptionValue}"/>
                </StackPanel>

            </Grid>
        </DataTemplate>

で、これがエンティティクラスのTodoEntity

/// <summary>
        /// 終了しているか。
        /// 1: 終了
        /// 0: 未
        /// </summary>
        public int isFinished;
        /// <summary>
        /// 件名
        /// </summary>
        public string subject;
        /// <summary>
        /// 詳細
        /// </summary>
        public string description;
        /// <summary>
        /// 登録時間
        /// </summary>
        public DateTime registerDateTime;

        #region アクセサ。なぜかこうしないとデータバインドしなかった.

        public string SubjectValue
        {
            get
            {
                return subject;
            }
            set
            {
                subject = value;
            }
        }
        public string DescriptionValue
        {
            get
            {
                return description;
            }
            set
            {
                description = value;
            }
        }
        #endregion

DataTemplateにTodoEntityのsubjectプロパティを表示させたかったのですが、なぜか表示できなくて困ってたのですが、#regionに書いているようにアクセサ(SubjectValue, DescriptionValue)を作ってそれにバインドさせてやると、無事にデータが表示されました。

これなんでだろう。。。

あ、コードの書き方が統一されてなくてすみません。。。

アプリは見栄えがもう少しまともにできたらアップしますね。

現在作っているアプリでは、iPhoneからファイルとデータをアップロードする仕組みが必要になり調べてみたのですが、なかなか目的を達成してくれるクラスやライブラリが見つからなかったので自分で作ってみました。
ソースとテストで使ったPHPのファイルもgithubのここにおいています。
http://wiki.github.com/mmlemon/HTTPMultipartPost

ソースにはcopyrightとか書いていますが、改編などはご自由にどうぞ。ただし、こちらではいかなる責任も負いませんのでご了承下さい。

内容は、こんな感じです。

MultipartPostHelper:このクラスを使ってファイルのアップロードを行います。
実際の使い方は、HTTPPostSample2ViewController.mをご確認下さい。

使用する流れは下記の通りです:

  1. 送信先URLを設定する
  2. 文字列データ部分を作成する(Key用の配列と値用の配列が必要です。)
  3. バイナリデータ部分を作成する(このとき、data=実際のデータ:NSData、orgName:ファイル名、postName:Postで使われる名前。例:orgName=”file.txt”, postName=”postFile”の場合、PHPでは、$_FILES["postFile"]["name"]とすると、”file.txt”が返されます。)
  4. 文字データをMultipartPostHelperに追加
  5. バイナリデータをMultipartPostHelperに追加
  6. sendで送信

以上です。

Word Pressの自動アップデート

連続Postですみません。

最近WordPress上でアップデートが可能になってとても便利だな〜なんてのんびり喜んでいたのですが、google analysisのプラグインの設定が消えてしまう、という問題が起こりました。

実際このサイトは誰が見ているんだろう、という位なのでpvとかあまり意識していなかったのですが、ある日を境にアクセス数が0になってたので、さすがにこれはおかしいと思い調べてみると、UA-00000-0というような値になってしまっていました。。。。

メニュー下部のここをクリックして設定を確認してみるとよいと思います。

wpの環境設定

wpの環境設定

provisioningファイルのアイコン

つい先日、iPhoneに新しい機種、iPhone 3GSが発売されました。
なので早速僕も購入して、現在開発中のアプリを実機に入れて試そうとしたときにちょっと上手くいかなかったのでメモしておきます。

プロジェクトファイルを開いて、Device – 3.0 | DebugとしてiPhone 3GSに繋ごうとすると、

「供給された iPhone OS デバイスが接続されていません」


とか言われてしまい、実機にアプリをインストールすることができなかった。

当然と言えば当然の話しなんですが、provisioningファイル作るときに、DevicesでIDを登録してるんでした。この辺に関しては、iTunes経由で古いiPhoneからうまい具合に調整してくれていると思ってたのですが、そんなこと無かったです。考えてみれば

Deviceが違う=Device IDが違う、


ということなので当然なのですが。

Deviceに対応していないprovisioningファイルを使おうとしても使えないのは当然です。なので、iPhone Developer Programで新しい機種のIDを登録し、Provisioningを修正して新しい機種にも対応するProvisioningファイルを再生成し、インストールすると、無事に実機にアプリケーションをインストールすることができるようになりました!めでたしめでたし。

追伸:

こんなところでつまづく僕ですが、ほそぼそと開発合宿なるものをやっていますので、ご興味あれば参加表明していただければと思います。

http://blog.hi-farm.net/2009/07/01/200907の近況/

タイマー表示

今作っているアプリで時間経過を表示する必要がありましたので、サンプルを作成しました。

ほとんどこちらのサイト様を参考にしています。ありがとうございます。

http://cocoa.synck.jp/1237172145.html


一式はgithubにおきましたので、必要でしたらこちらからどうぞ。
http://github.com/mmlemon/iPhoneTimerSample/tree/master

ストップウォッチアプリのキャプチャ

ストップウォッチアプリのキャプチャ

操作方法:

  • Startボタンをタップ:計測開始
  • Stopボタンをタップ:計測終了
  • 再びStartをタップした場合、0秒から再計測します

ソースについて:

時間を測る事は、

開始時刻をNSTimeIntervalで保持します。

現在時刻を保持する方法は、

NSTimeInterval time = [NSDate timeIntervalSinceReferenceDate];

を使うだけです。

二つのNSTimeIntervalを比較するには、単純に引き算するだけです。

NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate] – time;

(※timeは計測開始時刻を保持するNSTimeInterval)

定期的に表示時刻をアップデートするにはNSTimerを使います。こんな感じ。


self.timer =  [NSTimer scheduledTimerWithTimeInterval: 0.01                                   target:self                                  selector:@selector(updateTimer:)                                  userInfo:nil                                   repeats:YES];

scheduledTimerWithTImeIntervalがタイマーが呼ばれる期間であり、

selectorがこのscheduledTimerWithTimeIntervalで定期的に呼ばれるセレクタ(メソッド?)である、という事を押さえておけばよいと思います。

ちなみに、selectorで呼ばれるものは、

-(void)updateTimer:(NSTimer *)t

のようになる必要があります。

ここで経過時刻を測定、表示すれば継続的に表示が更新されるようになります。

タイマーを終了する場合は、

[self.timer invalidate];

として下さい。

追記1:

開始時刻と累積時刻が二重に存在しているので上手くないですね。。

追記2:

github初めて使ったんですけど、つまらないところでひっかかっちゃいましたが、それはまた別記事にします。

追記3:

こんな程度の内容ですが、記事を書く事で改めて気づく事がありました。

これからも続けようと思います。


2009/07の近況

かなり投稿回数が少なくなってしまっているブログですが、つい先日までは本業で時間をいっぱいいっぱい使ってて、全く動けない状態でした。

だけど、これからは時間ができたのでiPhone開発合宿の予定を再調整したいです。http://123.writeboard.com/8464cc38ec43064f5 pass:ipdc09

とてもありがたいことに今月は結構休みを頂けることになったので、この間にflashとiPhoneの一人合宿?も行って成長しないと!

メモ FMDatabaseについて

自分への備忘録的なメモです。

iPhoneアプリ開発で、sqliteに対してFMDataBaseを使う場合、

select : executeQuery

他(delete, update, create table, insert..) : extecuteUpdate

です。

さっき間違って使っていて、[db close]しようとするとそこでロックしたような状態で動かなくなってしまいました。

結構前になってしまうのですが、4/18-4/19の2日間、湯河原にてiPhoneアプリ開発合宿#2を行いました。

メンバーは、kara_dさん、gnueさん、allnightappsさん、kirara_397さんと僕(mmlemon)の5名で、幹事はkara_dさんでした。

宿泊先近辺はこんな感じです。

宿泊地

宿泊地の岩本旅館。とても風情のあるところでした。

img_0436img_0440

今回は当然ですが、ネット(e-mobile)が使える環境でした。

今回も各自自分の作りたいアプリを作るという形式で、実際にアプリを作られて操作感などをテストされていた方、ウェブと連携させるアプリを作られている方で、サーバー側のロジックを作られた方、またはiPhone OS 3.0の機能について技術調査されていた方、これから作ろうとするアプリのコンセプトを考えるかた、と本当に一人一人がいろんな事をやっていて日頃一人で開発している時はあまり意識していなかったところに気づかされることもあり、大変有意義な時間を過ごす事ができました。

僕はというと、最近どはまりしていたところがあったのですが、allnightappsさん、gnueさんの力を借りて簡単に解決できました。

やっぱりこうやって同じところに集まって合宿することは明日からも頑張ろう!という良い刺激にもなるし、合宿の日までに或る程度形にしないといけない!と自分を追い込むこともできるので、これからも続けたいな、と思いました。

で、月も変わった事ですので、第三回の予定を立てようと思います。

http://123.writeboard.com/8464cc38ec43064f5/v/show/6745677

pass: ipdc09

です。

ご興味もたれた方はtwitterのアカウントなどご連絡先などを添えて追記して下さい。

あるいは、twitterで@mmlemonまでDMいただければと思います。

2009年2月25日に開催された、第31回Flash OOP 勉強会に行ってきました。

�׋���̕��i

場所:

サイバーエージェントビル1F セミナースペース

4万円ほどで作れるマルチタッチディスプレイということで、マルチタッチのデバイスを自作して、ActionScriptをUIとして使っていました。
iPhoneとかで最近マルチタッチの話題が増えてきていたので、どの様にしてマルチタッチの機能を実現しているのか、実際の制作時の話しを含めて聞きたかったので行ってきました。

実現方法は、sakusan様のブログに説明していらっしゃいましたのでご興味のあるかた是非どうぞ。

簡単にはWebカメラで映像を受け取り、tbetaいうソフトが解析してsocketでAS3にタッチの情報を送る、という仕組みの様です。
AS3でタッチイベントを扱いやすくするためにMulti-Touchライブラリを自作されており、
・TouchManagerクラス:Touchを管理するクラス
・TouchEventクラス:触ったときに発生するイベント
・Fingerクラス:触った座標(0〜1の相対座標)、touchを一意にするためのIDを所有するクラス

を持っていて、TouchEventクラスのインスタンスがfingerを持っているので、Touchイベントが発生したときにイベントハンドラ内部で
e.finger.id
e.finger.x
e.finger.y
と記述することで触られた点を知る事ができるというものでした。(e = TouchEvent)

実際に触る時間がいっぱいあったので触ってみたのですが、

�f�B�X�v���C

でかい。

タッチ可能な領域が大きいということは、iPhoneの様にはいかず、タッチする人数が多くなる可能性があり、コンテンツを作るときに気にしないといけない問題が沢山あるのでどのようにタッチイベントの制御を行えばユーザーが意図した動きにるように作れるのかというのは結構難しい問題であるな、と感じました。
finger.idとタッチイベントが発生した座標をとって、或る程度の範囲内なら同じ人物の動作とみなすという判定が必要になるのかな?実際に作ったわけではないので想像でしかありませんが。

後は、このマルチタッチのデバイスを作ること自体が結構むずかしそうな気がしたので、どこかの段階でハードウェア屋さんと協力して新しいデバイスを次々と作る事ができると面白い展開があるのかも?とか想像していました。

このデバイスをみたり触ったりしているときに、感触を再現することができれば面白いなあなんて思ったのですが、これって音圧とか使うと少しは再現できたりするのかな?この辺の研究は一度やってみたいです。

この様なマルチタッチのデバイス+コンテンツを業務時間外で作り上げる力にはただひたすら感心するのみでした。本当にご苦労様でした。これからも面白いコンテンツを見せていただける事を楽しみにしています。
ってかうらやましいっす!

補足2:
サイバーエージェントさんって、こういうのも作ってたんですね。すてき。

��