GNUstepでobjective-cを学ぶ(3)

ひとつ、objective-cのメソッド記述について、癖があるので書き直しておきます。

先日書いた、class のところ、C++ で言えば、

class A
{
public:
void print( int x );
void print( char *s );
};

なところを、書き換えるとすれば、

@interface A : NSObject
- (void)printInt:(int)x;
- (void)printString:(char*)s;
@end

こんな風に、printInt、printStringのようにメソッド名を変えないといけないのですが、メソッド名の工夫にはルールがあります。

 

– (戻り値)キーワード:(型)引数 キーワード:(型)引数

のようにメソッドが構成されますが、最初のキーワードはcocoaのライブラリを見ると命名ルールがあります。

RGB値を制御する、次のC++のクラスを考えます。

class RGB
{
float _r, _g, _b;
public:
void setColor( float r, float g, float b );
int getRed();
int getGreen();
int getBlue();
};

これを直す場合は、

 

@interface RGB : NSObject
{
float _r, _g, _b;
}
- (void)setColorRed:(float)r green:(float)g blue:(float)b ;
- (float)getRed ;
- (float)getGreen ;
- (float)getBlue ;
@end

のように、「setColorRed」というメソッド名を付けます、、、というか、「setColorRed:green:blue」というメソッド名を付けます、という言い方が正しいです。
と言うのも、区切り方としては、「setColor red:green:blue」のように、メソッド名と最初の引数のラベルを離して考えるのが良いようです。

 

NSMutableString
http://www.gnustep.org/resources/documentation/Developer/Base/Reference/

のドキュメントを見ると、そんな感じで多重定義をしています。

~~~
覚書 mac mini 購入の準備。

Windows マシンから Mac を操作する
http://tokyo.secret.jp/macs/vnc_mac.html

考えてみたら、VNC 接続でもいいんだ。若干もたつくだろうけど、基本は xcode しか使わないし。あと、プログラミングだけならば、telnetで繋ぐ(笑)という荒業もあるし。

ただし、ここで書かれている方法だと、mac の画面上でパスワードを入れないと駄目なので、mac にもディスプレイが必要、という難点がある。

やりたいことは、ディスプレイ無しの windows server に繋げるようにリモート接続したいので、

1.mac mini の電源ON
2.windows マシンからリモート接続して作業
3.windows マシンからリモートで mac の電源OFF

が、できないと困る。
まあ、FreeBSD ベースだから、

1.mac mini の電源ON
2.windows から telnet ログインして vnc サーバ立ち上げ
3.windows マシンから vnc 接続して作業
4.windows マシンから mac mini の電源OFF

でも、できるんでしょう。多分。

カテゴリー: 開発, Objective-C | GNUstepでobjective-cを学ぶ(3) はコメントを受け付けていません

GNUstepでobjective-cを学ぶ(2)

objective-cクラスメソッドの使い方で、多重定義のところが腑に落ちなかったのですが、一応氷解したので、記録として。

C++ の場合、次のようにメソッドの多重定義ができます。

class A
{
public:
void print( int x );
void print( char *s );
};

int型の引数を持つ場合と、char*型の引数を持つ場合の関数を「print」という同じ名前が使えるわけです。C言語の場合は「printInt」、「printString」なんて名前を変えないといけないので、この多重定義は名前を定義する際に非常に重要な機能なのです。

 

これを、「素直」にobjective-c の文法に直そうとすると、

@interface A : NSObject
- (void)print:(int)x ;
- (void)print:(char*)s ;
@end

と書きたいところですが、、、できません。名前が重複してる(duplicate declaration of method ‘-print:’)なるエラーが出ます。

 

実は、objective-cのメソッドの書き方は、

– メソッド名 :(型)仮引数 :(型)仮引数 ;

なのかと思い込んでいたのですが、実は違います。
最初の単語も含めて、キーワードと仮引数のペアなんですなぁ。

– キーワード:(型)仮引数 キーワード:(型)仮引数 ;

と考えるのが正しいのです。
で、objective-cの場合は、型の違いをチェック判別せずに、キーワードの違いで判別します。そんな訳で、

– print:(int)x :(int)y ;
– print:(int)x z:(int)z ;

の2つはキーワード無しと、キーワードあり「z」のメソッドとして違いが認識されます。
ですが、最初のキーワードと型のペア

– print:(int)x;
– print:(char*)s;

の2つは、同じ print というキーワードを使っているので「重複(duplicate)」ってな訳で、コンパイルエラーになるのです。

# objective-c のサンプルコードを見て、妙なメソッドの名前の付け方をしてる
# なあ、と思っていたら、そういう理由があったんですね…

#import <stdio.h>
#import <Foundation/Foundation.h>
#import <Foundation/NSObject.h>

@interface A : NSObject
- (void)print ;
//- (void)print :(void) ;  // できない
- (void)print:(int)x ;
//- (void)print:(char*)s ;  // 重複するためできない
- (void)print:(int)x  :(int)y ;
- (void)print:(int)x z:(int)z ; // キーワードで区別できる
@end

#if 0
// C++の場合

class A
{
public:
// void print();
void print( void );  // print()と同じ意味
void print( int x );
void print( char *s );
void print( int x, int y );
// void pritn( int x, int z ); // できない

};
#endif

@implementation A
- (void)print {
printf("in print\n");
}

- (void)print:(int)x {
printf("in print x\n");
}

- (void)print:(int)x :(int)y {
printf("in print x y\n");
}
/*
- (void)print:(char*)s {
printf("in print s\n" );
}
*/
- (void)print:(int)x z:(int)z {
printf("in print x z\n");
}

@end

int main( void )
{
printf("hello3.m\n" );

A *a = [A new];
[a print];
[a print :1];
[a print :1 :2 ];
[a print :1 z:2 ];
[a release];
return 1;
}
/** 実行結果

hello3.m
in print
in print x
in print x y
in print x z

**/

そんな訳で、ひとつの引数だけの場合は、実質、多重定義ができません。C言語のように「printInt」、「printString」としてメソッド名で区別をさせます。

 

# 実に「対称性」が悪い!と思うのは私だけではないハズ。
# ただ、objective-cの発祥時期を考えると、Cリンケージの考慮から、こういう形に
# なっているのだと思う。リンカーに対して厳密な名前を使うC++に対して(C言語自体
# のリンケージはかなり緩い)、objective-cはそのままC言語のリンクを使うように
# したので、こういう結果になったのでは?

カテゴリー: 開発, Objective-C | GNUstepでobjective-cを学ぶ(2) はコメントを受け付けていません

GNUstepでobjective-cを学ぶ(1)

昨日、cygwinでobjective-cを学ぼうとしましたが、無理でした(笑)。
最終的に、iPadのプログラミングをしたいので、NSStringクラスなりの、mac osxで動くobjective-cでないと駄目なので、、、GNUstepを使うこうとにします。

実は、GNUstepに入っているobjective-cだけを使うのであれば、何処の環境でもいいわけですが、何故かmingwしか対応していません。cygwinには未対応です、と明言されています。

WinwdowsでObjective-C パート2 (NS~クラスも利用可) : ページアウトされた記憶の残骸
http://take-blizzard.cocolog-nifty.com/blog/2009/01/winwdowsobjecti.html

なところから、Windows版のものをインストールします。

GNUstep Windows Installer
http://www.gnustep.org/experience/Windows.html

cygwinと同じで、「c:\GNUstep」のディレクトリ配下に全てファイルが作られるので安心です。

Windowsのコマンドプロンプトから使うのであれば、以下にパスを通しておきます。

C:\GNUstep\mingw\bin\
C:\GNUstep\GNUstep\System\Tools\

そして、ビルドする場合は、以下のようなバッチファイルを作るとok。

gcc -o %1 %1.m
-I c:/GNUstep/GNUstep/System/Library/Headers
-L c:/GNUstep/GNUstep/System/Library/Libraries
-lobjc
-lgnustep-base
-fconstant-string-class=NSConstantString
-enable-auto-import

mingwのコマンドラインを使う場合は、

export INCLUDE=/GNUstep/System/Library/Headers
export LIB=/GNUstep/System/Library/Libraries
export CFLAGS=’-fconstant-string-class=NSConstantString  -enable-auto-import’

と環境変数を設定しておいて、

gcc -o hello hello.m -lobjc -lgnustep-base -I $INCLUDE -L $LIB $CFLAGS

とすればok。

# 本来ならば、gccの環境変数を使えばいいんだろうけど、
# 何故か INCLUDE などを参照してくれない。
# ubuntu とかは大丈夫かな?

そんな訳で、準備ができたら、以下のソースがビルドできます。

#import <stdio.h>
#import <Foundation/Foundation.h>
#import <Foundation/NSObject.h>

@interface Point : NSObject
{
int _x, _y ;
}
- (void)set :(int)x :(int)y ;
- (void)print ;
@end

@implementation Point
- (void)set :(int)x :(int)y {
_x = x;
_y = y;
}

- (void)print {
printf("%d %d\n", _x, _y );
}
@end

int main( void )
{
id str = @"hello objc++";
NSLog( str );

Point *pt = [Point new];
[pt set :10 :20 ];
[pt print];
[pt release];
return 1;
}

実行結果がこれ。

$ ./a
2010-02-04 14:47:38.815 a[6820] hello objc++
10 20

無事に、@付きのNSStringが使えます。
この手の基本的なクラス(Foundation/Base API)は、GNUstepのwikiで見ることができます。
# Xcodeなんかのヘルプでは別に参照があるんだろうけど。

GNUstepWiki
http://wiki.gnustep.org/index.php/Foundation

そんな訳で、windowsのコマンドラインでobjective-cがコンパイルできる環境が整った、と。

お次は、unit testですね。

OCUnit
http://www.sente.ch/software/ocunit/
http://homepage.mac.com/mindtools/OCUnitHowTo.html

なものを使うそうです。これは後日。

追記 2011/12/31

clang+llvm で objective-c 2.0 をコンパイルする | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/2252

gnustep だと @property が使えないので、objective-c のクラスの練習(あるいは、コーディング時)にちょっと困ります。なので、llvm もしておくのがベターです。

カテゴリー: 開発, Objective-C | 2件のコメント

cygwinでobjective-cを学ぶ(1)

iPadの開発を目指して、思い付き、objective-cを始めました。思い付きなものだから、途中でやめるかもしれないし、三日坊主かもしれないし、と。まぁ、C/C++/C#/Java以外の言語体系を学んでおくのも悪くないでしょう。

■cygiwnでobjective-cをインストール

そんな訳で、手元にはmacがありません(苦笑)ので、cygwinを使って、objective-cを勉強します。最終的には、Xcodeを使ってmac上で作らないと駄目なのですが、文法なところとかロジックのテストなところとか、そういうOSに関係ないところは、どの環境でもできるはずなので手元のwindows環境でやります。

Objective-CをWindowsで利用するために
http://take-blizzard.cocolog-nifty.com/blog/2009/01/objective-cwind.html

なところで、objective-cのインストールについて説明があります。
cygwinのDevelカテゴリの「gcc-objc」をインストールします。

コンパイルするときは、

gcc sample.m

ですね。クラスを使うときは、objc ライブラリを必要とするので、

gcc sample.m -l objc

とします。

ひとまず、

#import <stdio.h>
#import <objc/Object.h>

int main( void )
{
printf("Hello objective-c World.\n");
return 0;
}

がコンパイルできればOKです。

# printf関数を使っているところが弱いですが。
■文法のお勉強

文法に関しては、C++/C#/Javaのいずれかを理解していると学習が早いでしょう。
というか、いきなり objective-c を学ぶのは辛いかな、と。C言語を学んだあとに、引き続き objective-c に進むか、C++ から鞍替えするかがいいと思います。

Objective-C入門
http://wisdom.sakura.ne.jp/programming/objc/index.html
Objective-C Beginner’s Guide
http://www.otierney.net/objective-c.html
Objective-CをWindowsで利用するために: ページアウトされた記憶の残骸
http://take-blizzard.cocolog-nifty.com/blog/2009/01/objective-cwind.html

あたりを参照しながら、ゆっくりと進むのがいいでしょう。

オブジェクト指向言語なので、基本はC++やJavaなんかと同じです。
書き方が微妙なところがあるので、そのあたりが迷いますが、頭の中に対応表を持っておけば、直ぐに慣れるでしょう。
# メソッド呼び出しに [obj method] っていう括弧を使うのが、うーむって感じなのです。smalltalk がそうなのかな?

クラスに関しては、ざっと記述すると、こんな感じになりますね。

#import <stdio.h>
#import <objc/Object.h>

@interface Point : Object
{
// インスタンス変数
int _x, _y;
}
// クラスのメソッド
- (void)init ;
- (void)print;
- (void)setPoint:(int)x:(int)y;
- (int)add;
- (int)getX;
- (int)getY;
@end

@implementation Point
// コンストラクタ
- (void)init {
[super init]; // 親クラスのコンストラクタを呼び出し
}
// 引数のない関数
- (void)print {
printf("x:%d y:%d\n", _x, _y );
}
// 引数のある関数
- (void)setPoint:(int)x:(int)y {
_x = x;
_y = y;
}
// 戻り値を使う
- (int)add {
return _x + _y;
}
// プロパティ扱い
- (int)getX {
return _x;
}
- (int)getY {
return _y;
}
@end

int main() {
// インスタンスを生成
Point *pt = [Point new];
// メソッド呼び出し
[pt setPoint: 10: 20 ];
// メソッド呼び出し
[pt print];
// プロパティ呼び出し
printf("x:%d y:%d\n", [pt getX], [pt getY] );
// 戻り値を使う
int ret = [pt add];
printf("ret:%d\n", ret );
// 解放
[pt free];

return 0;
}

メソッドの定義と呼び出しが、C言語と違って妙な感じですが、まぁ、これも慣れですね。C言語の関数を使わなければ、[obj method: p1: p2]な形が羅列されるので、それほど違和感はないかもしれません。

■NSStringの問題

と、ここまで書いてですね、iPhone SDKでは「NSString」という文字列クラスが多く使われているのを思い出しました。調べてみると、cygwinのobjective-cには NSString がありません。

困った…
こういう場合は、GnuStep をダウンロードしてきて、やるか。
http://www.gnustep.org/

cygwin版のNSStringを作ってしまうか、ですね。

http://osdir.com/ml/lib.gnustep.user/2001-09/msg00030.html
にあるように、gnustep-objc-1.0.1.tar.gz をダウンロードして、cygwinのgccでビルドして使うってのもありですが、、、ちょっと大袈裟だなぁ。

# Windows環境で試す意義としては、学習用とビジネスロジック作成にあるので、
# 文字列クラス程度であれば、スタブで用意しておくのがいいでしょうねぇ。
# ユーザーインターフェースなんかは、結局 interface builder を使わないと
# 駄目だかろうから、mac osx 上でないとできないだろうし。

あぁ、それでもって、cygwinのobjcを使って、nsstringもどきを作ろうとしたのですが、どうもcygwinのobjcはコンパイルの動きが違うようです。多重定義ができない、というかメソッドの引数にラベルを使えない。このあたりは後日。

先の例で言えば、

– (void)setPoint:(int)x:(int)y;

は可能だけど

– (void)setPoint x:(int)x y:(int)y;

ができません。ややこしいこっちゃ。

★追記

ひとつ目の引数には名前がつけられないらしい。

– (void)setPoint :(int)x y:(int)y;

だと、通りますね。

追記 2012/01/03
という訳で、cygwin でも objective-c の学習はできるのですが、本来の目的が iphone/ipad プログラミングの場合は、GNUstep + clang + llvm という組み合わせになります。以下のページを参照してください。

Windowsで学ぶObjective-C | Moonmile Solutions Blog
http://www.moonmile.net/blog/article/windows-objective-c

 

 

カテゴリー: 開発 | 2件のコメント

ロケットガール他

というわけで、ロケットガールの話。

いわゆる、宇宙開発に関わる話ですね。ロケットのパイロットに女子高生を乗せようという話です。最近、アニメの方を見たのですが、燃料棒自体を燃料容器にするあたりのくだりがリアルなので、少し調べてみました。すると、やっぱり原作がありました。それなりに、きちんとしたSFです。

で、宇宙開発の繋がりで言えば、

・moonlight mile 太田垣康男
・プラネテス 幸村誠
・航空宇宙軍史シリーズ 谷甲州

が(私の本棚)にはあります。
これらの共通点は、宇宙&ロケットってことなんですが、ロケットガール以外では、もうひとつ共通点があって、それが「デブリ」です。

当時、航空宇宙軍史シリーズを読んだとき(20年以上前かな)、その頃の宇宙での戦闘シーンは、宇宙戦艦ヤマトやガンダムをはじめとして、ミサイルやビーム兵器です。今でもそうなんですが、実は、もっと効果的な武器があって、それが「デブリ」なわけです。
と、言うのも、航空宇宙軍史が非常にリアルだったのは、敵艦を砲撃するのに、小さな鉄粒を放出します。近未来SFですから、ビーム兵器は出てきません。ミサイルを積むにしても、地球から持ち上げるとお金が掛かるし、宇宙で開発するとなると大変なコストが掛かます。なので、秒速7キロメートルを利用して、相対速度で敵艦に穴を空けます。
ただ、戦艦と名前が付いていますが、地球上の戦艦のように分厚い装甲が付けられるとは限りません。弾と同様に、地球上から持ち上げるとなると結構なコストがかかって、厚い装甲は難しい。なので、相対速度を利用したデブリを移出することでも、十分相手の艦に穴が開けられるし、穴が空くだけでも、宇宙空間では十分打撃を与えられる、という設定だったりしたわけです。

まあ、そのリアルさの系譜として、ロケットガールも結構リアルです。

ソロモン宇宙教会(ロケットガール公式サイト)
http://www.rocket-girl.jp/link/link.html

から

JAXA|野尻抱介 「宇宙活動は世界を活性化する」
http://www.jaxa.jp/article/interview/vol33/index_j.html
秋田大学工学資源学部附属ものづくり創造工学センター
http://www.mono.akita-u.ac.jp/index.html

なところに辿れたりします。

エンジニア路線としても興味深く、

・moonlight mile のH2Aの開発者達
・プラネテスの星野九太郎

なところが私は好きですね。

カテゴリー: 雑談 | 4件のコメント

cygwinのgcc/g++で文字化け

とある事情で「ロケットガール」を見ながら、c/c++の本を書いています。c/c++の本では、windows環境とlinux環境で動作確認をするわけですが、あっちこっちに移動するのが面倒なので、前チェックとして cygwin の gcc/g++ を使っています。

# 「ロケットガール」のほうは後日

さて、Visual C++ 2008 と gcc/g++ ですが、微妙に動作が違います。標準関数系はだいたい同じ(って同じじゃないと困るけど)なんですが、例外やらエラーの発生の仕方が異なります。なので、例外(try-catch)を使って受け取ったときに、メッセージを出力してチェックすることになります。

#include <string>
#include <iostream>
using namespace std;

int main( void )
{
 string str1("Hello C++ world.");
 int n;
 
 try {
  n = 4;
  cout << n << "バイト目:[" << str1[n] << "]" << endl;
  n = 100;
  cout << n << "バイト目:[" << str1[n] << "]" << endl;
 } catch ( ... ) {
  cout << "エラーが発生しました " << endl;
 }
 return 1;
}

これを、コマンドラインでコンパイルして、コマンドラインで実行、ってことになります。

cygwin のシェルを立ち上げて、実行すると

<001>
20100122_001

な具合に文字化けします。これは、cygwinをインストールした直後にシェルのLANG 環境変数を設定していない場合に、発生します。

なので、日本語(SJIS)が通るように、

export LANG=ja_JP.SJIS

を設定してやると、次のように文字化けせずに済みます。

<002>
20100122_002

そんな簡単な話なんですけどね、しばらく使っていないもので結構悩みました。
unicodeが動作するように、wstringを使ってwcoutを利用して出力、setlocate忘れ、で文字化け、なんてのはよくやるのですが。

#include <string>
#include <iostream>
#include <locale.h>
using namespace std;

void main( void )
{
 string str1("Hello world.");
 string str2;
 
 str2 = str1;
 cout << str2 << endl;
 str2 = "Hello C++ world.";
 cout << str2 << endl;
 str2 = 'C';
 cout << str2 << endl;
 // Unicodeを使う
 setlocale(LC_CTYPE, ""); // これが必須
 wstring s;
 s = L"ようこそ C/C++ の世界へ";
 wcout << s << endl;
}

まあ、ライブラリを作るときは、こういうことに悩まないためにメッセージを英語にしておくのが無難ですね。
「文字コードはunicodeで統一される」と言われて、十数年経ちますが、結局のところ統一されることはないようですので。まだまだ、ASCII(7ビット文字)が現役です。将来的に中国語がのして来るとbig5が多くなったりして。

カテゴリー: 開発 | 5件のコメント

Zaku認識(1)

年末なので、夢を語って終わりにしましょう。

夏頃から構想している動体認識=Zaku認識の話です。何故「Zaku認識」なのかといえば、当然、緑の量産ザクとシャア・ザクを区別したいからですね(ガンダムRX-78とMk-IIの違いでもいいんだけど、こちらは細部の特徴比較なので少し趣が違う、両方やるけど)。

現在の構想/妄想を公開メモしておきます。少しでも訳が分かった方はコメントなりメールなりを下されば、その先の詳細をお話することはやぶさかではありませぬ(いや、マジで)。

さて、Zaku認識のほうは、動体認識と個体認識を同時にやります。当然、動いているロボットに載せることも考慮して、背景画像からの物体抽出も入ります。いわゆる、視覚と認識の両方を一体化させます。

■前処理

色成分を残さないと、量産ザクとシャア・ザクの区別がつかないので、単純なグレー化では駄目です。
HSV成分に分解するか、グレー色調との混合による色距離を計算します。このために、

・色相、あるいは、YCbCrのCbCrのみの二次元
・明度による一次元

の2種類を使うほうが妥当しょう。

■座標補正

いわゆる、カメラのブレを計算します。移動体にカメラを載せるために、

・上下左右の二次元
・回転
・拡大/縮小

を考慮します。
先行きは、デジタルカメラの手ぶれ補正のように、加速度センサのフィードバックを含めます(そうしないと計算量が膨大になるので、ある程度「予測」を立てるため)。
また、人が頭を左右に振ったときにも、視点を固定するような自動補正を組みいれるためにも、3次元加速度センサのフィードバックが必須です。

当面は、膨大な計算量/高速化をものともしないCPUを使って、フィードバックなしで計算します。
これは、実際に移動体に載せたときには加速度センサによる予測が成り立つのですが、ゲーム画面のように静止したカメラの場合はこの予測が不可能になるためです。つまり、画面からのフィードバックだけを頼りに、動体を追跡します。

座標補正については、前処理で行った画像を元に差分を取ります。
この差分がより少ないものが、正しい背景(静止物体)の認識ができているとみなします。

■動体認識

単純な動体については、超音波センサやレーザーによる反射を使ったほうが効果的です。しかし、ガンダム無双でザクの機体を数えたり、シャア・ザクに向かったりするためには、この方法は取れません。

なので、先の座標補正を行った画像について前後の複数のフレームで比較をします。
当初は、一枚の画像からと考えていたのですが、動体認識をいれたほうがより人間の眼と認識に近いので、この方法をとります。つまりは、残像を追跡します。

動体の追跡に関しては、重心あるいは中央値の移動による計算で十分かと考えています。高速移動物体を認識することも考慮すれば、おそらく、中央値で十分かなと。

懸念事項ではありますが、アニメの切り替えのように、前のフレームが全く違っている場合(画面切り替えが行われた場合)を考慮する必要があります。

■個体認識

その物体が何であるか、を認識するには「認識票(識別信号)」を見ればいいわけですが、敵のZakuでは無理ですよね。なので、機影を確認します。これがパターンマッチングです。ただし、RX-78とMk-IIの違いを認識させるためには、ぼけぼけの画面では無理です。いや、逆にぼけぼけの画面の場合では、両者は同じものとして認識されなければいけません。
また、遠くにあって色識別が難しい場合(空気遠近法など)は、量産ザクの緑とシャア・ザクの赤は区別がつきません。あるいは、赤という色が認識できれば「シャアではないか?」という想像が可能です。

これらを考慮するために、

・テンプレートマッチング法
・特徴量抽出

の2種類を同時にこなす必要があります。

~~

さて、これらが夢なのか妄想なのか、年末出血大サービスなのかは、皆様のご想像にお任せいたします。

ええと、これらのコードを何で書こうかと画策中なのですが、高速化を含めればC言語で書いた方がいいのだけど、プロトタイプはC#で書こうかなと思っています。Javaでもいいんですが、ロジックはokなのですが、画像出力の方法をいくつか調べないといけないので、面倒なんですよね私にとって。まぁ、画像認識は、入力と出力以外は純粋にロジックなので、何で書いてもok。
# OpenCV 準拠ってのも考えたのですが、ひとまず、C#でロジックを書いた後に、C言語で書きなおしたほうが早いかな、と。

そういう訳で、Zaku認識(ザク認識)の「その1」はおしまい。1ヶ月後ぐらいに「その2」を書きましょう。

カテゴリー: 開発 | Zaku認識(1) はコメントを受け付けていません

チーム板橋起業塾忘年会

linux担当のM口さんは欠席ですが、チームいたばし起業塾の忘年会を開きました。

創業乾杯は忘れてしまったのはさておき、I島さんの壊れ具合は尋常ではないことが判明。

時代の一コマにするべきかと。攻殻機動隊とかね。

カテゴリー: 雑談 | チーム板橋起業塾忘年会 はコメントを受け付けていません

microsoft office 2010 beta をお試しインストール

一か月遅れですが、MSDNから office 2010 beta をダウンロードして windows 7 on VMWare に入れてみました。

Office 2010 ベータ版 ダウンロード提供開始!
http://www.microsoft.com/japan/office/2010/beta/default.mspx

なところでもダウンロードができます。

さて、インストールした後、まず起動するのが Excel です。仕事柄、これを起動する機会が多いので。リボンはどうなったのかなぁ、と。

<001>
20091222_01

リボンは相変わらずなのですが、左上の「officeボタン」が無くなっていますね。「ファイル」になっています。UI上、「ファイル」と「ホーム」で、どっちがどっちか奇妙な感じはするのですが、office 2007 で培った「ホーム」の名前は変えず、「ファイル」にしたんでしょうねぇ。

ところで、このリボンですが、office 2007 では最小化することができます。リボン自身をを右クリックして「リボンの最小化」を選択すると、画面が狭くなる~と悪名高いリボンが消えてしまいます。そうして、メニューをクリックすると画面に出てくる、という具合です。

このリボンの最小化、どうやら好評だったらしく、office 2010 では右上にリボンを最小化するボタンがあります。

<002>
20091222_02

ご丁寧にショートカット「Ctrl+F1」が割り当てられてる…と思ったら、このショートカットは office 2007 でも同様ですね。
リボンが消えたときはこんな感じになります。

<003>
20091222_03

縦に少し広く使いたいときは便利な機能です。

さて、肝心の「officeボタン」改め「ファイル」タブですが、クリックするとこんな感じです。

<004>
20091222_04

office 2007 では中途半端にメニューな形式だったのですが、office 2010 では画面いっぱいを使って選択ができるようになっています。こういうシームレスな感覚は好きです。

# 実は諸事情があって、adobe media player の試用版を眺めていたのですが、こんな風に画面を全面的に使い、項目と項目との入れ替えをスムースに見せるほうがいいですよね。

そういう訳で、word 2010 も立ち上げてみます。

<005>
20091222_05

もう一個、私がよく使う outlook 2010 も立ち上げます。

<006>
20091222_06

新しいメールは書くときはこんな感じです。

<007>
20091222_07

# ただし、私の場合、outlook で直接書くことはなくって、エディタで書いたものをコピー&ペーストしてします。これは「作成途中のものを間違って送ってしまう」、「宛先を間違えて送ってしまう」のを防止するためです。ちなみに、添付ファイル忘れ、宛先間違い対策用に、送信は「即時ではない」モードにしています。

outlook で閲覧するときは、こんな感じですね。

<008>
20091222_08

outlook 2007 でおなじみの、横3つのペインです。通常のメーラーで使われる、リストが上、閲覧が下の3ペインにもできます。これは、どちらがいいか微妙ですね。最近のディスプレイがワイド版で横長になったのと、リボンが付いて更に横長になったので、横3つのペインのほうが使いやすいかったりします。
なので、どっちつかずということは、メーラーは画面構成を考え直す/直せる分野かなと思っています。

power point 2010 はこんな感じですね。一見すると、2007 と大して変わりません。昔は営業さん御用達のツールだったのですが、最近は、画面デザインの仕様書や設計書なんかで使われます。

<009>
20091222_09

最後は access 2010 です。Excel で扱える件数が増えたので、今後出番が減る、のか、SQL Server に切り替えるのか、と噂が絶えないツールなのですが、未だ健在です。健在じゃないと困るユーザーさんが多いからね。

<010>
20091222_10

全体の色調を通してみると分かるのですが、リボンは白をベースにしてグレーの影が入っています。2007 の頃のリボンは、青を基調としていたので、その存在感のためか多少圧迫感があったのですが、2010 のリボンはいい感じです。

<011>
20091222_11

ちなみに openoffice 3.1 の calc は、こんな感じですね。

<012>
20091222_12

普段使いの excel 2003 は、こんな感じです。

<013>
20091222_13

未だツールバーのほうが便利で、リボンのほうは場所が覚えづらいんですよねぇ。覚えにくいUIの根拠はあるにはあるのですが、まぁ、その話は別の機会に。

カテゴリー: 雑談 | microsoft office 2010 beta をお試しインストール はコメントを受け付けていません

VB6.0.NET(仮)

MSのK高さん的には「それ意味がわからないですからw」なんですが、M崎さん的にはどうでしょう?

というわけで、少し真面目に考えてみました(ネーミングも)。
visual basic 6.0.net か、vba.net のどちらがいいか悩みましたが、ドメイン的に「vb60.net」が空いているので、こっちがいいかな、と。

■言語は visual basic 6.0 ベース

言語体系は、visual basic 6.0 がベースにします。なので、クラスはありません。継承できないクラスはあるけど、まあ、最初は実装しなくて良いでしょう。使っている人は多くないし。

なので、基本は sub/function の関数で作ります。

ただし、

set xlapp = CreateObject(“Excel.Application”)

な形で、COM オブジェクトは作れる、と。
それに付随して、.NETクラスライブラリは呼び出せたほうがいいかな、と。

文法的には vb6.0 を踏襲するので、ややこしい構文は open 何とかぐらいなものです。

■中身は IronPython と同じ?

.NET Framework は ver.4 をベースにします。これは、動的言語ランタイム(DLR)を使うためです。というか、使ってみたいがためです。

DLRを使いこなせるようになれば、LUAの移植も可能でしょう。って訳ですね。このあたり、制御用のスクリプト言語として使えるようになります。
http://dlr.codeplex.com/

■動作環境は?

DLRを使うので .NET Framework 4 限定になりますが、LUA 風に silverlight 上でも動く、というのもいいですよね。

できれば、

・visual basic 6.0 のように GUI でアプリを作る環境がある。
 → 最初から、WPF で開発環境を作るとか。
・excel や word の vba から呼び出せる。
・ついでだから、openoffice でも動かせるようにする?

というのもやれるといいかなぁと。
一見(というか何度見ても)、時代に逆行しているように見えますが、無駄な技術を削ぎ落として、コアな部分を残してみるのもひとつの進化のひとつですよね。多様性を見落とさないために。

カテゴリー: 開発 | VB6.0.NET(仮) はコメントを受け付けていません