2010年6月14日月曜日

Mac用のタイムスタンプ入力ショートカット

 Mac用のタイムスタンプ入力ショートカット



概要
    Macで使用できる、タイムスタンプ入力のアプリケーションを探してみた。
    無償で使用できる下記を発見、ここに使い方をメモしておく。

    WordService 2.7

    コマンド+特定キーで、

    10/06/14 16:06:36

    日付と時刻が入力できる。

    どんなアプリケーションからでも、文字列としてショートカットで時刻を入力できる!
    これで書式統一が楽になる。



ダウンロード

    http://www.devon-technologies.com/download/index.html

    からDL

    Freeware Applications and Servicesの中にある。



インストール方法

    0.ダウンロードする。

        WordService.service ファイルを含んだフォルダ WordService が手に入るはず。


    1.HD > "ライブラリ" 下に、"Services" フォルダを作成する。

        (今までにインストールしたソフトによって、すでに有る場合もあるかも。)

        ダウンロードしてきたWordService.serviceを、上記フォルダに入れる。


    2.ログアウト&ログイン

        Serviceがログインに絡んで設定される機能のため、

        一度ログアウト(終了でもOK)する。

    

    3.テキストエディットを起動、

        テキストエディット > サービス > サービス環境設定 を開く

        先ほどインストールした内容が、一覧で表示される筈。


    4.特定のチェックボックスにチェックを入れる

        Long Date, 

        Long Date & Time, 


        Short Date, 

        Short Date & Time, 

        Time 

        以上のチェックボックスにチェックを入れる。(使いたい機能の物だけ選択してもいい。)



    5.再びテキストエディット

        テキストエディット > サービス を選ぶと、上記4で選んだ項目が表示されている筈。

        選択すると、文面に時刻が入る。


        

        ⌘+{ や、 ⌘+_ で使えるShort Date 系が便利。

        より詳細に編集、コマンド割当ができるのかな。

        →ぱっと見できませんでした。



入れてみて

    他にも、いろいろあるようで。探すと面白いかもしれない。

    関数計算、とか。


雑感、Objective-CとHTML5

雑感、Objective-CとHTML5 by -toru inoue 10/06/14 11:59 

概要
    Objective-CとHTML5は、言語と勧告なのだけれど、
    実際に実装される仕様についての言語的共通点が微妙に多い。    
    といってもピンと来る人ってあんまりいないだろうな、、
    両方やってる人間って何人いるんだろ。
    にてて個人的に非常に嬉しいとこ見つけたので書く。


動作環境がある
    ここでいう動作環境とは、自分の書いたプログラムが動作するのを見張っている監視者のようなもの。
    JavaのEnvironment、つまりVMみたいなもの。(正確にはVMの役割の一つ)

    Objective-Cは感覚的にはC言語で書いた物がC言語上で動くVMと一緒。もっと一般化してもらってもよろしくてよ。
    ,,流石に記法が変態的すぎるとの声を良く聞く。Lispかw 可読性は他の言語と一緒だと思うけどね。
    挙動は、サーバに非常に近い挙動をする。 
    到達順番が正確に維持されている手元にあるサーバ、という表現がいいんじゃなかろうか。

    
    
    そういえばObjective-Cって、C言語を書いてC言語で動かすVMだけれど、
    X言語を書いてX言語で動かす、っていうVMは
    世界に唯一のものなんじゃなかろうか。
    あ、C#があったっけ。 C#ってC言語内包してたっけな、、



メッセージングがある
    両者とも、メッセージングがある言語環境である。 
    HTML5の実装例をまだ一つも見てないが、用意されているAPIはとても素敵。

    メッセージングがあるから、宛先を決めずにメッセージを放送(指向性のない出力、ブロードキャスト)し、
    受け止めたい人がそれらを受ける、という事が出来る。

    最悪、
    受け手のプログラムさえ活性化していれば、(インスタンス化されていれば)
    メッセージの打ち手は受け手の事を知らなくてもいい。 = ポインタを保持していなくてもいい

    特にC言語系の場合、オブジェクトをインスタンス化するのに立ち会うか、
    インスタンスのポインタを知らなければアクセス出来ないもの、なのだけれど
    (ポインタ直指定でのインスタンス化とポインタ値所持は論外として)
    Objective-Cならば、動作環境があるので、それらはなんとかなる訳だ。

    たしかCのBoostあたりでも、そういったメモリ上にオブジェクトをプーリングする機構の
    果てにメッセージングがあったように思う。
    最後に見たのもう2年以上前だ、、、
    
    利点は既に述べた、「打ち手は受け手の事を知らなくてもいい」という事。
    機能をステートマシン化する事で、どんなオブジェクトとでも通信できる。
    
    メッセージングが或る言語は、自身の中を不特定の情報が飛び交う、ミニサーバ郡プログラムになれる。
    打ち手は、受け手が判定することで身元判定をし、
    受け手は次の受け手へと情報やコマンドを発信する。

    (HTML5で実装されようとしているMessage系のシステムと、
        WebWorker系のシステムは、スレッド絡みの話でもあるから、
        きっと組み付いてるんだろうなあ。)
 
    うううううーん、素敵。

2010年6月13日日曜日

Objective-Cでのメッセージングシステム

Objective-Cでのメッセージングシステム 


概要

    Objective-Cのメッセージングのシステムを使い、

    インスタンス間の通信を行うクラスを自作した。

    NSNotification を応用した、メッセージ伝達を行う。


    このクラスのインスタンスをもつオブジェクト同士は、

    お互いのポインタを全く知らない(保持しない)状態での交信が可能になる。


    一言で言うと、アプリ内疑似サーバ立ち上げ機能である。


    通信の順序は、タイマー実行を行わない限り、NSNotificationのシステムにより、

    通信完了まで確実に入力順が保たれる(メッセージの追い越しは発生しない)



    メッセージングする同士のIdentifyを確認するためのキーとして、

    Identifier(メッセージの送信者を特定するためのIDint値)を用意する必要がある。

    セントラル/レシーバーという役割分担を行う必要がある。


    セントラルからのメッセージングは、セントラル自身と指定したレシーバーへと伝達される。

    レシーバーからのメッセージは、セントラルへと伝達される。


    おまけで、下記実行を可能にしてある。

    ・遅延実行(別スレッドでの実行を可能にする)

    ・コマンドの入力(ヘッダクラス参照)

 


ダウンロード

    http://homepage.mac.com/sassembla/download/messagesystem/com.zip



設計思想

    このクラスに自発的に用意されている制限として、セントラルは一つ、レシーバーは一つあるいは

    複数存在する事が想定されている。

    各レシーバーからのメッセージは、必ずセントラルへ集約され、セントラルで状態によって各レシーバー

    (か、セントラル自身)へとメッセージを伝達、処理を進める事が可能。


    →このような区別が存在する理由は、下記2つ。

    ・完全にレシーバー間の通信を行う場合、メッセージ内容を把握する事が不可能になるため。

    ・メッセージの分別によってアプリケーションを複数のモジュールに分解し、

        分業を可能にするための、最低限の仕組み化のため。

 


使用例

    下記のように使用する。



1.初期化:


セントラル.h

//インスタンスを設定する

MessageSystem * messenger_default_reciever;


セントラル.m

//メッセージシステムインスタンスをセントラルとして初期化する。 

messenger_default_observer = [[MessageSystem alloc] initWithCentralObserver:self centralNamed:@"" recieverNamed:@""  withIdentifier:0 withVersion:20100610 withSelector:@selector(defaultCentral:)];



//メッセージを受信したとき行うメソッド、- (void) defaultCentral:(NSNotification * )notification を用意する

- (void) defaultCentral:(NSNotification * )notification {

    NSLog(@"defaultCentral");

    NSMutableArray * array = (NSMutableArray *)[notification userInfo];


    int sender = [[array objectAtIndex:MESSAGE_SENDER] intValue];

    NSLog(@"sender_%d", sender);


    int command = [[array objectAtIndex:MESSAGE_STATEMENT] intValue];

    NSLog(@"command_%d",command);

}




レシーバー.h

//インスタンスを設定する

MessageSystem * messenger_default_reciever;


レシーバー.m

//メッセージシステムインスタンスをレシーバーとして初期化する

messenger_default_reciever = [[MessageSystem alloc] initWithRecieverObserver:self centralNamed:@"" recieverNamed:@""  withIdentifier:1 withVersion:20100610 withSelector:@selector(defaultRecieve:)];


//メッセージを受信したとき行うメソッド、- (voiddefaultRecieve:(NSNotification * )notification を用意する

- (void) defaultRecieve:(NSNotification * )notification {

    NSLog(@"defaultRecieve");

    NSMutableArray * array = (NSMutableArray *)[notification userInfo];


    int sender = [[array objectAtIndex:MESSAGE_SENDER] intValue];

    NSLog(@"sender_%d", sender);


    int command = [[array objectAtIndex:MESSAGE_STATEMENT] intValue];

    NSLog(@"command_%d",command);

}



2.実行

ケースa.
    //セントラル.mのインスタンスにて、下記を実行すると、

    [messenger_default_observer sendMessage:100,nil];


    //セントラル.mのインスタンスにて、defaultCentralメソッドが発動する。
    defaultCentral~

    →セントラルからセントラルへのメッセージ送付にはsendMessageメソッドを使用する。 宛先指定は特にない


ケースb.
    //セントラル.mのインスタンスにて、下記を実行すると、

    [messenger_default_observer flushMessageTo:1 withNil:101,nil];


    //レシーバー.mのインスタンスにて、defaultRecieveメソッドが発動する。
    defaultRecieve~

    →セントラルからレシーバーへのメッセージ送付にはflushMessageToメソッドを使用する。 宛先指定は1の部分。


ケースc.
    //レシーバー.mのインスタンスにて、下記を実行すると、

    [messenger_default_reciever sendMessage:102,nil];


    //セントラル.mのインスタンスにて、defaultCentralメソッドが発動する。

    defaultCentral~

    →レシーバーからセントラルへのメッセージ送付にはflushMessageToメソッドを使用する。 宛先指定は特にない



    MessageSystemのインスタンス同士に、クラス間の関連や、ポインタの共有が一切無い、ということに注目。
    なのに通信内容がお互いのクラスに届いている。素敵すぎる。



そのほか
    ・NSオブジェクトを送る事が可能
    sendMessage,flushMessageToメソッドともに、可変長でNSObjectを格納、発送できるようにしている。
    [messenger_default_observer flushMessageTo:1 withNil:101, @"NSオブジェクトを継承したものなら、何でも送れる!", nil];
    NSNumberやNSDictionaryも送れる。


    ・今のところ、単一の識別子しか使えない
    セントラルとレシーバーは、このサンプルでは単一の組み合わせとして動いている。
    セントラル一つ、レシーバ数は無制限だが、この組(セントラル+レシーバーxN)としてしか使えず、
    ひとつこの組み合わせを作ったら、別のセントラル+レシーバーの組み合わせを使用する事が出来ない。
    可能にするには、独自の名前でセントラル+レシーバーの組を実装できるように、関係性アイデンティファイの機能が必要。
    →centralNamed:@""などがあるのは、その実装前の準備。


    ・Deallocが非常に難しい
    MessageSystemを持ったインスタンスをDeallocする際は、先にMessageSystemインスタンスをDeallocする必要がある。
    遅延実行と絡むと、分解が非常に難しくなる。
    また、MessageSystemを介した、MessageSystemインスタンスを持つオブジェクトのDeallocが可能。(なんて恐ろしい)


    ・ポインタを管理する必要が無いようにできたりできなかったり
    Object * a = [[Object alloc] initWithMessageSystem];//Objectクラスは初期化時にMessageSystemインスタンスを初期化
    と書くと、
    記述したブロックを抜けても、MessageSystemを介してaにアクセスする事が出来る。
    ぶっちゃけメモリリークだが、MessageSystemを介して管理が出来るのが強み。
    Deallocをマスターすれば、いろいろなオブジェクトを、MessageSystemを介したシングルトンとして
    意識せず実行する事が出来る。


今後の展望
    要望、バグがあれば、是非ブログまで連絡ください。
    
    そのうちGoogleCodeにアップしようかな。


2010年5月30日日曜日

GWTについて

GWTについて 


概要
    GoogleWebToolkit
    Googleが作成/配布している、Javaで書いたプログラムをJavaScriptに変換するツール。
    GAEがJavaで記述できるため、クライアントサイドをGWT-Javaで、サーバサイドをGAE-Javaで書く、といった事ができる。
    クライアントもサーバも、Javaで横断して開発できるぞ!

    、、、と言いたい所だけれど、Java-JavaScriptへの変換には、制約がある。
    まとめ中。

    また、Javaのプログラム中から、任意のJavaScriptを実行する事ができる。
    過去のライブラリとか使える。



DIFrameworkとの連携
    GINというモジュールを使用する。Guiceの兄弟。
    GINについては別記事参照
    
    Google GIN


HTML5に関わる事
    Canvas要素との連携
        GWTからCanvasを使うには、今のところincubatorモジュールを組み込む必要がある。
        
        類似で、GWT-NSという個人実装のモジュールがHTML5の実装予測機能を実装していて面白い。
        製作中の実装の機能毎切り分けがうまくできれば、楽しいだろう。
        次第にGWT自体が追いついているので、楽しみ。

    
制約
    まとめ中。
    ああーこんなことはできないのか、など。大まかにはGoogleが作成していないJava-JavaScript機能は使えない。
    
    Javaでのリフレクション
        無理。



Imageの描画について
    GWTのイメージには2種類のオブジェクトを使用したものがある。
    WidgetとしてのImage    
    Widget:GWTCanvasの描画対象としてのImageElement 
    
    ImageはWidgetとしてそのまま他のWidgetと同じように扱える。
    GWTCanvasを使う方のImageElementの扱いは、HTML5のCanvasタグでの描画になる。

    おまけ:
    WidgetのImageを拡張したFitImageという型を出力、コーディネートするImageLoaderというライブラリがGoogleCodeにある。
    
    ImageLoader

    使えるが、どうせならWidgetすべてのOnloadが読める機構の方が欲しい。
    全コンポーネントが準備可能になるまで待ってられない、なんて状況も今後はあり得てくる。
    
 



この記事へのリンク
公開完了 -toru inoue 10/05/30 16:14 



Mercurialについて

Mercurialについて 




概要
    分散バージョン管理ツール
    コマンドラインで稼働するツール。
    このツールと、連動する形でWindowsやMac向けにちょこっとGUI付きのクライアントソフトがある。
    前提として、ツールをインストールした後、GUIをインストール、先にインストしておいたツールを指定して
    GUIから使う、という形になる。

    ぶっちゃけCUIでの操作はミスの元なのでGUI付きクライアントを使おう。
    オススメのGUIがあったら教えてほしい!
    →    sassembla@hotmail.com
    
    (写真はmurky/Mac)



インストール



クライアントアプリケーション
    Mac版:
        murky

        →Get Murky!
            と書いてある下のリンクから最新版を取得、Macであれば解凍するとアプリケーションが出てくる。    
            起動時には画面のようなウインドウは出ないので注意。リポジトリを選んだ場合に画面は表示される。
            
            使い勝手
                    まだよくわからない。GitXとインターフェース的に似ている。


    Windows版:
        TortoiseHG



使用用途
    バージョン管理に使用する。

    プロジェクトごとの管理の他に、配布目的でSVNのTrunkやGit,Mercurialのリポジトリが公開される事がある。
    用途は、「ここから落とすと最新バージョンの共有ができますぜ」なのだが、
    これらの機能や使い方について、ほぼ日本語での紹介を見た事が無い。
    
    最近ではソフトウェアのダウンロードサイトでも使われてきていて、そういうのが全く発生しない日本に
    ちょいと心配が募る。



落とし方
    主にコマンドラインから、
    hg clone https://XXXXX
    
    入力すると、Currentなディレクトリにダウンロードされる。

    svnとhg,gitで若干所作が違うので、一概に同じ現象が起こる訳ではないが。




このページへのリンク
公開完了 -toru inoue 10/05/30 16:13 



環境構築:Java

環境構築:Java 



概要:
    JavaSE/JavaEEの開発環境を用意するために、必要なもの、処理をリストアップ


使用ツール:
    Eclipse   
        Eclipse Foundationのアプリケーション。
        オープンソースで開発が進められているIDE(統合開発環境)
        Javaのソース記述/ビルド/デプロイが簡単に行える。
        基本機能の他に、pluginの形で様々な機能が存在する。


環境:
    Mac/Win
    JRE5.0相当
    JDK5.0相当


インストール:
    1.サイトからダウンロード
        ダウンロードセンターがある。
        

    2.置きたい場所に置く
        DLしたフォルダが圧縮フォルダならば解凍し、解凍されたフォルダをどこか好きな所に置く。
        それで完了。

    
    3.日本語化
        (英語がちょっとでも読めるならオススメしません。)


    4.ワークベンチの設定
        Eclipseでは、プロジェクトやプログラムが置いてあり、ビルド等行うファイル/フォルダを、
        ワークベンチ(作業場所)という概念で複数登録できます。

        Eclipseが工作マシンで、ワークベンチは工作台、
        各プロジェクトは工作台の上に転がっている素材、というイメージです。

        一つのEclipseから複数の工作台をまたに掛けて制作を行う事ができますし、
        制作する素材ごとにEclipseをわけてインストール、使用するなんて事も可能です。
        

        気をつけるべきなのは、Eclipse自身が工作マシンなので、plugin入れたりアップデートを
        掛けたりでEclipse自体の性能が変化してしまう事。

        しばらくBというワークベンチで作業をしていて、一度離れて、plugin入れて、、
        久しぶりにBというワークベンチに帰ってきたらビルドエラーが! なんてこともあり得ます。

        
 pluginのインストール
    a.プラグインが置かれているサイトに行き、
        "このアドレスにpluginが置いてある"という内容の記述を探そう。

        Eclipse plugin XXXX などとGoogleなどで検索して、欲しい機能を見つけましょ。
        Eclipseと書いてあればたいがいサイト上でpluginを提供してくれている。
        Ex:
            下のサイト内の、
            http://relo.csail.mit.edu/registered.php
                
                ↓こんな項目。
                Download Instructions
                
                近所をみたら、Update URL: http://relo.csail.mit.edu/update とか
                書いてあるとおもいます。 このアドレスを覚えておきましょう。


    b.Eclipse上で、Help>Install New Software... を選択。

    c.Add... ボタンをクリックし、サイト名(自由に入力OK)とサイトURL
        (aで見つけたもの)を入力しよう。
            
        ここでのサイト名は、後で自分がわかりやすいように、というメモの意味合いが強い。

    d.Acceptを求められたり、Nextを押したりしてインストール
        問題が発生、インストールに失敗する事が有る。

        多くの場合、競合するpluginがあったり、pluginどうしで扱う機能のバージョンが
        異なったりする。
        →そうなったらクリーンインストールした方が楽です。
        もしくは、割と親切にエラーを出力してくれるので、
        エラーとにらめっこして経験を積むのもいいかも。


        Eclipseのバージョン、
        pluginが使用(依存)する他のpluginパーツのバージョンの差によって、
        使えたり使えなかったりすることがあります。
            

        

おすすめplugin 追加 -10/03/31 1:13 
    Relo
        Javaソースを任意の部分だけソースからUML図式化する補助ツール。
        
        http://docs.google.com/View?id=dwp4j2r_222cpx6q7ch


以上。

このページのURL
公開完了 -toru inoue 10/05/30 16:11 





UMLツール Reloについて

UMLツール Reloについて



概要

    MITライセンスのEclipseプラグイン。

    JavaのクラスをUML化できる。


    特徴としては、「自分がUML表に出したいオブジェクトを自由に選び表化できる」。


    サイト:http://relo.csail.mit.edu/



注意点

    2007年時点でサポートが終了している。 現在、より高度な機能を持ったバージョンがarchitexa社で開発中とのこと。

    最新情報→http://www.architexa.com/


    完成したら乗り換えた方が良いと思われる。


    



インストール
    EclipseのHelp→Install new feature で、下記アドレスを追加、インストールを実行する。

http://relo.csail.mit.edu/update



    JDOに関連するプラグインが既に入っていると、インストール時に破綻するようだ。


    Eclipse3.5.2を使ってのクリーンインストールだと巧く行った、


    ファイル>保存する事で後から参照できた。

    エラーが山ほど出ているのが気にはなる。。。




使い方

     1.図を作る
        Eclipseのパッケージエクスプローラーウインドウ内で、UML化表示クラスを選択、右クリックでRelo系のコマンドを選ぶ。
        .javaファイル>右クリック>Open in Relo Session 


    2.図にクラス情報を追加
       XXXX.javaファイル中のインスタンス、参照、メソッドがリストとして出てくるので、任意に選択、表示

    


    3.参照先、参照元を図に追加

        メソッドやクラスにマウスを持っていくと、→(やじるし)が表示される。

        表示したメソッドから参照先、参照元を確認する事ができ、呼び出されるインスタンスやメソッドからオブジェクトが表化される




保存
    作成したファイルは、Fileメニューから保存する事ができる。



補足
    既存のクラスからUML図を作り出すツールなので、従来の設計とは異なる。
    ラピッドにやるならば、先ずUML図を書いておく必要がある。
    なんだろうな、説明用とか、後追いでコード関係を清算する時に使えるかな。

        
    
このページへのリンク
公開完了 -toru inoue 10/05/30 16:11 



フォロワー