ラベル プログラム の投稿を表示しています。 すべての投稿を表示
ラベル プログラム の投稿を表示しています。 すべての投稿を表示

2008/01/24

OS自作入門・6~8日目

マウスが動きそうで動かないので、8日目まで行ってしまった(笑)

キーボードからキーコードが取れて、マウスカーソルが動くところまで行った!

ざっと説明は読んだんだけど、キーコードとマウスの移動解析の部分をほぼ完全に読み飛ばした(笑)ので、明日よく読みなおさないと^^;

なんだか楽しくなってきた:)

できる開発者になるための7つの習慣

ZDNet Japan : できる開発者になるための7つの習慣


1. 問題を理解する
2. 適切なツールを用いる
3. 単純化に力を注ぐ
4. コードを明瞭に保つ
5. デバッグを学ぶ
6. 利用できるものは活用する
7. 学ぶことを継続する

どれも当然っちゃ当然だけど、なかなかできないモノかな。

自分はこの業界入ってもう6年になるけど、その間にたくさん失敗したのでこのあたりは骨身に染み付いてるというか、普段から普通に考えてることかな^^;


1はモノを作るうえでは問題を理解しないと作りようがないよね。
でもなかなかどうしてコレが難しかったりする。。。

問題を理解=相手を理解になってくると思うので。


2は今のところそんなにツールを選ぶことがないけど、以前に一回やったときは難しかったなぁ。。。
結局(そのミドルウェアの)パフォーマンスが出なくてやっぱり苦労した経験が。。。
適切なツール選びも大事だけど難しい。

3,4,5はコレができれば自ずと開発の速度も上がっていくし、よりよい製品が出来上がるから特に共感できる。
これも複雑怪奇なコードを書いてこれじゃイカンと自分で思って始めて改善されるような内容だから、ある程度経験をつまないとだめなんだろうなぁ。。。


6のコレは微妙で、結構ミドルウェアを作るのが好きなので、よく車輪の再発明とまでは言わないけどそのようなことはよくやってるなぁ。
基本的に自分で作るのが好きなんだよね^^;


7はこの業界で上を目指すには必須だから言うまでも無いかな^^;


結局、経験は力で、若いときの苦労は買ってでもしろってことかな。

雑誌プレゼント当選ヾ( ´∀`)ノ

UMLツール「Enterprise Architect」を発売しているスパークスシステムズジャパンで先日行われていた、雑誌プレゼント企画で

「組込みプレス」1位 7冊セット(Vol.9, Vol.8, Vol.6, Vol.5, Vol.4, Vol.3, Vol.2)

が当選しました!

以前もEnterprise Architectの使い方の本が当たったので意外と当選確率は高いのかな?
ってこんなこと書くと競争が増えたりしちゃうかも^^;

今日発送との事なので、明日、明後日には着くのかな?
楽しみ楽しみ!

2008/01/23

良いプログラマの見分け方

こんなの見つけた(笑)
Geekなぺーじ : 良いプログラマの見分け方

1,技術に対して情熱がある。情熱が無く、プログラミングが賃金を得るための仕事でしかない人は駄目。
->情熱?あるよ(笑)

2,家で趣味でコード書くぐらいが必要。
->昨日も書いてましたが何か?(笑)

3,技術的な話題を話し出したら止まらないような人が良い。促されても技術的な話題で眼を輝かす事ができない人は駄目。
->話過ぎる傾向があるので、むしろ押さえてますが?(笑)

4,自分で勝手に最新技術を学び続ける。「ああ、それなら出来ますよ。会社の費用で研修を受けさせてくれれば、やれるようになります。」と言うタイプの人はアウト。
->いつも勝手にやってますが?(笑)

5,目的を達成するために最適な技術を選べる。実現するための技術を選んでからやり方を考える人は駄目。
->コレは微妙(笑)
時に好みに走ります(笑)

6,自分が正しいと思わない技術によって実現することを不快に思う人が良い。
->正しいと思わない技術がないかも(笑)
あー、VB?
昨日だかVBで作った高速検索エンジンを開発とかいうニュースがあったような・・・
不快どころかVBで作ったってことにビックリだよ(笑)

7,多くの話題で会話が可能で、賢いように思える人が良い。
->話題?乏しいかも(笑)
ダメだね(笑)

8,大学/会社に入る前からプログラミングをやっている人が良い。
->会社に入る前にはやってたよ。専門学校で。
専門学校に入る前は高校でちょっとBASICをやったくらいかな?

9,履歴書に書かれていない経験が多い人が良い。良いプログラマは、履歴書に書ききれないぐらいの経験や実績がある場合が多い。
->どの程度を指すか分からんけど、あるんじゃね?(笑)

10,職務とは関係がない関連技術に関する知識が豊富にある。履歴書に書かれた技術以外のものを全く習得していない人は駄目。
->豊富とは言えないけど、あるんじゃね?(笑)


8個くらいは当てはまるのだろうか??
これだけあれば十分でしょ(笑)

Windowsで、Subversionコミット時にtracチケットの自動クローズ

ができるらしい。
でもやりかたがよく分からない。。。

Eclipse使わなきゃできないのかと思ったら、Subversionの動作をちょいといじればいいみたい。

ここみたら上手くできました。

ありがたや、ありがたや。。。

OS自作入門・5日目

今日の分もほとんどC言語だったので特に問題はなし。

セグメントと割り込みが出てきたので明日また見直さないと。


4日目から一応UIっぽいのができたけど、やってることはいつもの組み込みとほとんど変わらないね(笑)

でもx86系のCPUをイジることもないのでちょうどいいかな^^;

毎度毎度サンプルプログラムを動かしてるだけだけど、一通り読み終わったら自分で一から作ってみないとね。

2008/01/21

POCOライブラリ

cppllで知ったんだけど

POCO(C++ Portable Components)というライブラリがあるらしい。

CodeZineの記事で解説されているよう。
POCO::Netライブラリによる組み込みWebサーバの実装
5分で使えるLoggingフレームワーク - POCO::Foundation -


POCOの特徴
・C++用クラスライブラリ
・オープンソース(Boost Software Licenseで商用利用も可)
・クロスプラットフォーム
ざっとこんなもんでしょうか。

コンポーネントとしては


Foundation:基本機能クラスライブラリ
Util:アプリケーション用クラスライブラリ
Net:通信用クラスライブラリ
XML:XML文書操作用クラスライブラリ
Data:DBクラスライブラリ(ODBC・SQLite用)
NetSSL_OpenSSL:OpenSSLを利用するためのクラスライブラリ

CodeZineより引用

結構使えそうなので、cppllの返信が楽しみ。

とりあえず使ってみて良さそうなヤツは自分でも作ってみよっと!
車輪の再発明がどうと言われようと勉強ですからね(笑)

OS自作入門・4日目

とりあえず3日目の復習から。

なんだか急にソースが増えたのでもう一度読み直してみたら、ほとんど後で解説になっていた。
じゃ飛ばそっと。


で、4日目。

C言語でVRAMに直接お絵かき。

ここいら辺は全然問題なく理解できた^^;
さすがにCの言語に関する説明が多かったしね。

Cから呼び出すアセンブラの関数もいくつか追加されてたし面白くなってきた!

4日目にして(見た目だけ)OSちっくになってきたね。


ってもほとんどサンプルを動かしてただけなのでコードは書いてない。。。

エディタ使うときはコードの確認とcopy対策のためにMakefileの書き換え(笑)


そうそう、一箇所copyがMakefileに直接埋まってるのでエラーが出てしまう。
harib01hで言えば49行目になるのかな?
ここだけcopyを$(COPY)に変えてあげる必要があった。

変更前:
haribote.sys : asmhead.bin bootpack.hrb Makefile
copy /B asmhead.bin+bootpack.hrb haribote.sys
変更後:
haribote.sys : asmhead.bin bootpack.hrb Makefile
$(COPY) /B asmhead.bin+bootpack.hrb haribote.sys


この下のharibote.img部分にもcopyがあるけど、こっちはcopy.exeの呼び出しではなくてスクリプトのcopyらしいので、変更しなくてOK。

2008/01/20

OS自作入門・3日目

眠い目をこすりつつざっと流し読み。
帰ってからもう一度眺めてみよう。
というか最初から読み直して理解度を深めておきたいなぁ。

3日目にしてもうC言語でのプログラム開発になっている。
アセンブラで関数の作り方ものってるので楽しそう。

やっぱり自分はアプリケーションよりもコンポーネントを作るほうに楽しさを感じるのだと改めて実感した(笑)

OS自作入門・2日目 その2

朝の問題。
"helloos5の"make run"でエラーが出てしまう"問題。

copy helloos.img ..\z_tools\qemu\fdimage0.bin

の行で、エラーメッセージ
process_begin: CreateProcess((null), copy helloos.img ..\z_tools\qemu\fdimage0.bin, ...) failed.
make (e=2): 指定されたファイルが見つかりません。

が出力される。

結局自力で解決できなかったのでGoogle先生に頼む^^;

同じ様にハマってる人がいたのでお知恵を拝借。。。

ちょっと分からなかったので、困ったときのサポートページ(らしい)で探してみる。

どうもMakefileを書き換える必要があるみたいでコレを見て↑の意味が分かった^^;
#読解力不足。。。


helloos5のMakefileの26行目を
前:copy helloos.img ..\z_tools\qemu\fdimage0.bin
後:cmd.exe /C copy helloos.img ..\z_tools\qemu\fdimage0.bin
にしてあげればいいらしい。


FAQによるとCygwinを入れてるとこの現象が起こるらしい。。。

入れてますよCygwin(笑)

これじゃ分からん訳だ^^;

ま、これで2日目も無事に終わったので良しとしよう!

2008/01/19

OS自作入門・2日目

この仕事始めて6年目にして、makefileの書き方が分かってきた^^;
やっぱり実際にやってみるのが一番覚えやすいや。。。

ついでにアセンブラも少々覚えてきた。
こりゃホントにタメになる本だわサ(笑)

ただ、helloos5の"make run"でエラーが出てしまう。
今日はこれから外出なので帰ったら見てみないと^^;

OS自作入門・1日目

フロッピーイメージに"Hello World"が表示されるプログラムを作成・書き込み。

お約束だね(*'-')b

2008/01/18

OS自作入門

だーいぶ前の話だけど、「OS自作入門」という本を買った。

いつものごとく買ってパラっと見て本棚行きだったので、会社に持ってきて分解・電子化(笑)

で、ノートに入れとけばやるかな~っと^^;

さてさてどうなることやら。。。

2007/12/31

BeginInvoke

C#でWiimoteLibいじってて、C#について気づいたことの備忘録。。。

下記のようなソースでWiimoteChanged()が別スレッドで実行されていた場合に、WiimoteChanged()の中でフォームオブジェクトにアクセスすると"別スレッドから実行された"とのエラー(警告)が出てしまう。

この場合にBeginInvokeで非同期(遅延?)呼び出しとやらを使ってあげると、BeginInvokeで指定した関数はメインスレッドで実行されるらしい。


たとえばメインスレッドで実行されるForm1()のスレッドIDが10で、WiimoteChanged()がスレッドID11で実行されたとする。

ここで、WiimoteChanged()からBeginInvoke()で実行されるUpdateWiimoteState()はスレッドID10で動くようだ。


ってことはソケットとかのイベントで別スレッドからデリゲート関数が実行された場合は、BeginInvoke()で実際の処理を呼び出してあげればいいのかな?
ただ、BeginInvoke()で調べてると、BeginInvoke()で呼び出す関数にはいろいろと制約があるらしいので、このあたりはもう少し調査する必要アリかな?

Invoke()だとかBeginInvoke()の話はここを見れば詳しく分かりそうですね。



private delegate void UpdateWiimoteStateDelegate(
WiimoteChangedEventArgs args );

private Wiimote wiimote = new Wiimote();

public Form1()
{
Debug.WriteLine( "Form1 Thread id : " +
Thread.CurrentThread.ManagedThreadId );

InitializeComponent();

wiimote.WiimoteChanged += new WiimoteChangedEventHandler(
WiimoteChanged );
}

private void UpdateWiimoteState( WiimoteChangedEventArgs args )
{
Debug.WriteLine( "UpdateWiimoteState Thread id : " +
Thread.CurrentThread.ManagedThreadId );
}

private void WiimoteChanged( object sender, WiimoteChangedEventArgs args )
{
Debug.WriteLine( "WiimoteChanged Thread id : " +
Thread.CurrentThread.ManagedThreadId );
BeginInvoke( new UpdateWiimoteStateDelegate( UpdateWiimoteState ),
args );
}

2007/12/30

WiiのコントローラでPCを操作

会社も今年の業務は終了しやっと時間が取れるようになったので、先日書いたとおりBluetoothでWiiコントローラと通信させてみました。

Wiiにコントローラを接続する要領で、PCのBluetoothアプリを接続待ち状態にしてWiiコントローラの1,2ボタンを同時に押すとあっさり接続が完了。

Wii入力ライブラリであるWiimoteLibを立ち上げて動作テスト。
このライブラリはWindowsのmanagedライブラリなのでC#やVB.NETで扱うことができるみたい。

お~~!!
繋がってる!!




ついでにWiiコントローラでPCを操作できるWiiRemoteも使ってみる。。。


おおぉぉ~~!!
WiiコントローラでPCがいじれる!!

これで準備は整ったので、自分でもアプリケーションを作ってみようかな。
VS2008も出たしC#の勉強がてらね。

2007/12/28

trac+Subversion+TortoiseSVN

前々から使いたかったこのセットを今日の仕事の合間に入れてみました( ´∀`)

Trac自体はAll-in-one-tracであっという間に入るんだけど、問題はTortoiseSVNからのアクセス方法。。。

と言うかURL?

ぐぐっても意外と出てこないのね(;´Д`)


やっとこさ、見つけたのがココ☆


おかげさまで助かった( ´∀`)


結局アクセスURLは"http://:<ポート>/svn/<プロジェクト名>"らしい。
プロジェクト名は初期状態ではdefaultに設定されるようですね☆


やっとこさ環境が整ったので、以降の仕事はSubversion使おっと♪

あとはEclipseとの連接とかできたらいいな。。。
その前にEclipseでレゴ用のgcc動かせるようにしないと^^;

2007/12/21

Visual Studio 2008

先日MSDNにUPされたISOイメージが壊れてたみたいでインストールできなかったVS2008。。。

今日また除いてみると再UPされていたようなのでDL。

インストールしてみると。。。


お、できた^^


ただいまインストール中。。。

2007/10/18

H8でEclipse + CDT

以前から何度も何度もトライして挫折(笑)してきたこの環境。。。

いま@ITで連載されている記事で解決できそう☆


生産性向上への道 Eclipseで行うC/C++開発 ~組み込みソフトウェア開発へのEclipse適用~
組み込み開発におけるEclipseの有効性
「CDT」で効率的なC/C++開発を実現する

次の連載でEclipseにH8用GCCを組み込むようだけど、もうそれが待ち遠しくて待ち遠しくて(笑)

この環境ができればH8開発がもっとラクに楽しくできそうだし。


これを機会にEclipseも本格的にやろうかな。
UMLアドインとかSubversionアドインとか、あとプロジェクト管理系のアドインがあればEclipseひとつで全てが片付きそう。。。


"もっとラクに楽しく開発を!"
それをコンセプトにやっていこうとたった今決めました(笑)

2007/09/11

C言語のマクロ

今さらC言語(笑)

C言語のマクロ(#define)にパラメータの文字列化というものがある。

#define TRACE( param ) printf( "%s = %d\n", #param, param );
このようなマクロを定義したときに

int value = 0;
TRACE( value );
とすると、

printf( "%s = %d\n", "value", value );
と展開される。
意外と便利な機能なのでよく使うんだけど、(UNICODEのような)ワイドキャラクタの環境になると

printf( "%ws = %d\n", "value", value );
たとえば上記のようになり、正しく表示されない。

本来は

printf( "%ws = %d\n", L"value", value );
このようにしたい。

対処は意外と簡単で、文字列化を使った場合、単純に文字列になるだけなので、

#define TRACE( param ) printf( "%ws = %d\n", L#param, param );
といったように、#の前にワイドキャラクタを表すLをつければ良いみたい。

こうすると意図したとおりの動作をすることが分かった。