2007年08月28日更新
スタイル不使用
  スタイル使用
スペース
リファクタリング
2007年08月28日(火)

いまさらながらリファクタリングを勉強しだしました。といっても会社から「リファクタリング--プログラムの体質改善テクニック」を借りて読んだだけですけど。実践してみないことには声を大きくしていえないけど、よさげだね。リファクタリングの手順なんか書かれているので手元に置いとく系の本なんでAmazonで注文した。

ついでに「エンジニアのための時間管理術」と「実践ソフトウェアエンジニアリング」も注文してしまった。合計で1万5千円以上。明日までキャンペーン中でポイントキャッシュバックってやつにつられてついついやってしまった。どんどん勉強していこう。


flex
2007年02月18日(日)

ezd2htmlのために字句解析、構文解析が必要となりました。適当に自作しようと思ったけど面倒なのでflex,bisonを使いたいと思います。しかし今回始めて使用するため、よくわかりません。逆に遅くなってるかもしれないが、次回からは早くなるだろうからまぁいいでしょう。

ソースには日本語もあるため、それようの処理を追加しないといけないけど難しい。文字コードはSJIS固定でやってるんだけどわけわからん。しばらく終わりそうにないな。


簡単文書
2007年02月12日(月)

「簡単文書」と名付けた文書整形書式を考えてみました。テキストエディタで書けて、見やすい書式を目指してます。本を読んだ後のまとめに使おうと思ってます。さてさて前やってたBCFみたいに未完で終わりそうだがな。まぁこれは書式だから完成したといってもいいかもしれないけどね。HTMLに変換するプログラムまでできたらver1.0になるかな。
「簡単文書」説明 sample.ezd 構文


MINIX
2007年02月09日(金)

OSの勉強として「オペレーティングシステム―設計と理論およびMINIXによる実装」を借りてきた。千ページ以上あるが半分はMINIXのソースファイルでした。教育用のOSらしいので基本を理解できたら良いな。夢はお手軽WebOSを自作することです。


文字化け解消
2006年12月03日(日)

WindowsでSubversionを使用してます。svn statusとかすると、以前から日本語が「?\123?\234・・・」とか表示されてました。これをパイプで渡して?\123を文字コード123の文字として出力するという風にして、さらにパイプでnkfに渡しunicodeからsjisに変換して表示してました。

日本語のメッセージをコミットできない状態が続いてましたが、まぁ適当な英語でメッセージ書けばいいかと思ってたので放置。しかし今日、日本語ファイルを追加しようとするとエラーがでることに気づきました。なので調べてみると解決方法があった。setenv APR_ICONV_PATH "D:/prog/tool/subversion/iconv"と環境変数APR_ICONV_PATHを設定してやれば日本語の表示も追加も正しくしてくれました。よかったよかった。


ダイログアプリケーションとマルチスレッド
2006年11月27日(月)

競伝 血統登録というソフトを作りました。これはダイアログアプリケーションになっててリソースファイルに書いたダイアログをメインウィンドウとしています。通常のダイアログウィンドウならWM_INITDIALOGメッセージが送られてきます。そこでコントロールの初期化をすればいんですが、今回のようにダイアログをトップにした場合などWM_INITDIALOGが送られてこないケースがあるようです。

かわりにWM_CREATEメッセージで初期化をしようとしてもコントロールがまだ配置されてないためできません。なので今回はCreateDialog()を実行した後に初期化関数を呼ぶようにしました。メッセージプロシージャで処理したければ独自のメッセージを作ってそれをポストすればいいらしいです。

また、このソフトは検索に時間がかかるときがあるので別スレッドに分けました。スレッド作成にはいろいろ関数がありますが、今回は_beginthread()を使用。Cランタイムライブラリをマルチスレッドで簡単に安全に使えるらしいです。_beginthred(関数ポインタ,スタック容量,引数)で実行しますが、この関数ポインタの実行が終了すればスレッドも終了するので簡単でした。


MFC
2006年11月16日(木)

日記の方にも書いたけど、久しぶりにアプリを作った。今回はMFCでサクッと作ったんですが、RealChildWindowFromPoint()がなぜか使えない。以前MFCを使わずに自力で作ってたソフトでは使えたんだけどなー。VCのバージョンが変わったからだろうか?まぁ今回は必要でなかったので保留しましたけどね。また必要がでたら調べよう。


借り
2006年08月29日(火)

今日図書館で本を借りてきました。「システム設計の基礎」というありきたりのタイトルの本です。しかし内容を見てびっくり。付録を除きパワーポイントらしきもので書かれてます。メモが可能なように1ページが左に内容、右にメモ線のみの6分割で印刷されています。借り物なのでメモ書きできないですけどね。読みやすそうで読むのが楽しみです。ただ、意外と好きな前書きや後書きがないのがちょっと残念。


停滞中
2006年08月04日(金)

この間のxyzzy用BCFモードはバグがちらほら見つかりました。まだまだバグがありそうだがまた後で修正しよう。

現在はBCFのサンプルとして本サイトのトップをBCF形式で書いてみました。作成するアプリBCF2HTMLでHTMLに変換できると構想しています。が、実際にBCFで書いてみたら逆に見づらくなったきもしますが、まぁいいでしょう。

次にいよいよ本体を作りたいと思うんですが、どうやって作ろうか?と悩んでいます。構想としてはXMLのSAX,DOM,XPathっぽいものを作ろうとしてます。基本はSAXならぬSAB(Simple API for BCFもしくはSerial Analysis of BCF)として、DOM,BPathはSAB上で動作するようにしようとしてます。

ここで必要な字句解析をparse()するとどんどん関数を呼び出していき、終了時には行き先の関数からreturnせずに一気にparse()呼び出しまで戻れたら便利かも?とおもってます。そのためにはアセンブリを書く必要がありそうでそれの勉強もしないといけない。そもそもどういう構造にするといいのかを考えないといけないが、こちらも勉強不足で手が付けられない。まだまだ勉強することが多いです。


BCF-mode完成
2006年07日31日(月)

遂に完成BCF-mode!難しかったような簡単だったようなわからない感じでした。用意されているシンタックステーブルを利用するのがむずかった。なので結局自前で処理してみました。そして目的どおりのものが出来上がりました。xyzzyに詳しくなれてよかったよかった。ちなみに色づけ等を自動でするようにすると重いです。しかしコンパイルをすればかなり解消されていい感じ。コンパイルでこんなに時間が変わるとは思わなかったよ。さて次はファイルを解析するプログラムの作成ダー。
BCF-mode本体 キーワードファイル サンプル.bcf


BCF
2006年07月28日(金)

最近は独自コンフィグ形式とかを作ろうとしてます。どっかにいいのがあるかもしれないし、そもそも使えない形式になるかもしれないが勉強もかねてがんばってます。その名も「Big's Config Format」英語はおかしくないだろうか?JSONに似てるかもしれない。

とりあえず基本仕様は決めました。次は実装か?と思ったけども、実際に書くときに便利なxyzzy用の独自モードを作るとことにしました。で、いまは色付けのところで困ってるところです。commentとc++-commentをそれぞれ「;」「//」から行末までとコメントを2つにしたいのに同時指定ができない。またmulti-commentも2つ「#|...|#」「/*...*/」にしたいのにできない。しかたないのでC/C++形式はシンタックステーブルで残りは正規表現シンタックスで色づけすることにしました。ただ正規表現だと特別なシンタックスになってくれなくて動作がおかしいときもある。そして次は数値に色付けです。


Subversion
2006年07月14日(金)

Subversion入れてみました。前にも何度か試したけどよくわからなかったのであきらめていました。しかしバージョン管理はあるほうがいい!以前自作ソフトのソースを間違って上書きしてしまった時があるので管理はしたかった。CVSが有名だけどファイルの名前を変えるのが面倒らしいので、設計をあまりしない私にはSubversionの方がいいと思い挑戦しました。

とりあえずwindows用zipファイルを落としてきてちょっとやってみたけど、だめ。次にインストーラー付きのを落としてきたけどメッセージが日本語になっただけでだめでした。それでしらべてたら何がだめだったかわかりました。SubversionはURL指定を良く使うんですが、ローカルの場合もfile://からはじめるURL指定です。で、これの指定方法が間違ってました。file://C:/〜/でなくて/が3つのfile:///C:/〜/でした。こんな単純なミスで詰まってました。

それで使えるようになったのでちょっと使ってみると、たまに日本語らしきものが文字化します。tcsh使ってるせいだろうか?面倒だったのでzipを解凍したフォルダにある多国語訳があるlocateフォルダを削除してみました。そしたら英語に戻り文字化け解消。英語は読めないけど文字化けよりはましでしょう。

私はソースにDoxygen用コメントをいれてます。そのなかでCVS用に$ Id$も使ってるんですがこれをSubversionでも使えるようにしました。C:/Documents and Settings/〜のユーザフォルダの中にApprication Data/Subversionが作られます。この中に設定ファイルがあるのでこれをいじれば自動で$ Id$とかを認識してくれます。configファイルのenable-auto-props = yesを有効にして、[auto-props]セクションに*.c = svn:keywords=Idとか書けばいいと思います。


できた
2006年07月07日(金)

やっとデバッグとコマンドライン解析用のライブラリができた。たぶん使用できる程度にバグはないでしょう。デバッグの方は400行、コマンドラインの方は1000行と結構でかくなってしまった。Doxygen用のコメントがあるとはいえ設計ミスだろうか?まぁ自分で使う分には大丈夫でしょう。

デバッグの方には<,void DBG_SETFILE( file ) ,void DBG_PRINT( ARG ) ,void DBG_PRINT_CONSOLE( ARG ) ,void DBG_PRINT_FILE( ARG ) ,void DBG_ASSERT( EXP, ARG ) があって、_DEBUGが定義されたとき実態があるようになってます。ARGには変な使い方かもしれませんが、C++の入出力のような<"こんなかんじ" << value << "とか">が使えて文字列だけでなく数値も表示可能と便利な気がします。

コマンドラインの方には,SetDoc( brief, supplementation="" ) ,SetBehaviorNonOpt( behavior ) ,SetBehaviorUndefOpt( behavior ) ,SetUsageStyle( opt_style=EnumerateStyle, arg_style=EnumerateStyle ) ,GetDoc( ) ,GetUsage( ) ,AddArg( arg, doc="", need ) ,AddOpt( opt, doc="", need, arg ) ,Parse( argv ) ,GetArgc( ) ,GetArg( i ) ,IsRequested( opt ) ,GetOptArg( opt ) ,IsWarning( ) ,GetWarning( ) ,ClearWarning( ) とたくさん関数があります。最初にプログラムに与えられるオプションや引数を設定して、そのあとでargvからオプションを解釈してくれます。また、説明文も同時に設定するため自動でヘルプとか作ってくれます。便利に出来上がったのではないかと思ってます。まぁ使ってみないと不便なところが見つからなかったりしますがね。ちなみに両方とも簡易シングルトンパターンのクラスになってます。なのでmain関数以外でもコマンドラインで与えられたオプションに関する情報が取得できる仕様です。

さて、次はGemsを読もうかAjaxについて勉強しようか迷ってます。どうしようかなー。


C++独自の便利機能
2006年07月02日(日)

最近はC++の勉強をかねて、独自の便利機能を作ってます。といってもまだ、ありきたりなデバッグ出力しか作ってません。これからいろいろと追加していきます。次はgetopt()みたいなコマンドラインオプションの機能を付けたいな〜。最後にはWindowsゲームプログラムが作れるといいな。

エディタはxyzzyを使ってます。C++だとnamespaceで名前空間を指定するけど、BigLIB::DBG::○○とかしたいからnamespaceが2つ重なりインデントが深くなってしまう。いままで関数は行先頭から記述してたので関数の前にインデントがあるとなんかいや。ってことで何とかするようにしてみました。独自に書き換えたc-mode.lのせいかもしれませんがソースファイル中に変なコメント入れるとインデントしなくなりました。それは次に様なものです。
namespace BigLIB { /*/*}xyzzyをだます*/
namespace DBG { /*/*}xyzzyをだます*/
:
/*/*xyzzyをだます{*/ } // end namespace DBG
/*/*xyzzyをだます{*/ } // end namespace BigLIB
:にクラスとか書いてます。いい感じ。


GAME PROGRAMMING Gems 4
2006年06月28日(水)

タイトルの本を購入しました。2と3も欲しいところです。1は以前から持ってますがあまり読んでません。来年には必要になるだろうと思うのでこれからちびちびと読み進めていきたいと思います。がんばるぞー。


FreeBSD 4.10設定
2006年04月06日(木)

卒研講座と同じFreeBSDをVMPlayerにインストールしました。バージョンは4.10です。さてまずはいろいろと設定が必要なのでやりました。それらをメモっておこうと思います。

パッケージのインストール。rootになって/standard/sysinstallを実行ConfigureのPackagesを選択。欲しいやつを入れる。バージョンが古いのでFTPでは入れれません。あらかじめパッケージをダウンロードしておき。pkg_addで個別に追加していく。

Xでマウスホイールのスクロールができるように設定。rootになって/etc/rc.confに
moused_flags="-z 4"
を追加。さらに/etc/X11/XF86Configの"Mouse"っぽいとこに
Option "Buttons" "5"

Option "ZAxisMapping" "4 5"
を追加。その後再起動で認識してくれます。Mozillaなどで試してください。

Kterm,Muleでスクロールできるように設定。Ktermは.Xresourcesに
KTerm*VT100*translations: #override \
: scroll-back(1,halfpage) \n\
: scroll-forw(1,halfpage)
を追加。Muleは.emacsに
(global-set-key [mouse-4] '(lambda () (interactive) (scroll-down 5)))
(global-set-key [mouse-5] '(lambda () (interactive) (scroll-up 5)))
を追加。

日本語入力をする。cannaserverが起動していなければ起動しておく。.xinitrcに
kinput2 -canna +kinput&
を追加。.Xresourcesに
*inputMethod: kinput2
Kinput2*ConversionStartKeys: Shiftspace
を追加。cannaは標準でC-o,C-\とかにIME ON/OFFが割り当てられている。これを解除するため、.cannaに
(global-unbind-key-function 'japanese-mode)
(global-unbind-key-function 'alpha-mode)
を追加。.cannaはホームに作るとそれしか読まない用なのでデフォルトのやつをコピーして追加すべし。.cshrcに
setenv LANG ja_JP.EUC
setenv LC_CTYPE ja_JP.EUC
setenv XMODIFIERS "@im=kinput2"
を追加。ログアウト後に有効になるはず。日本語を正しく表示するためには.Xresourceにフォントの設定が必要かも知らない。

あとは好みで.cshrcや.tcshrcや.twmrcや.emacsを設定。設定したドットファイルをアップしておく。講座ではサイズ12のフォントが無かったのでエラーがでた。適当に置き換えてエラーを回避した。
.canna .cshrc .tcshrc .xinitrc .Xresources .twmrc .emacs


c-modeインデント
2006年03月21日(火)

xyzzyのc-modeのインデントを改良しました。今まではタブでインデントしてました。一人なら別に問題ないが、他人に見てもらうのにはよくないです。私はタブ幅2と小さいからズレが大きくなります。スペースにすればズレはなくなりますが、他人はインデントが2文字と小さいままで見ることになる。ずれるのは文を途中で改行したときでその他は問題ない。

ということで通常はタブでインデントして文を途中で改行したときは最初はタブで途中からはスペースでインデントすれば解消すると考えました。(というより本に書いてました。)前から変更したいと思ってたが、他人に見せる必要がないので先送りしてきました。今回就活用にゲーム作ろうと思いこれをやろうと決めました。

実際やったことはlisp/c-mode.lのc-indent-lineを改造しました。calc-c-indentでインデント幅を取得してるようです。しかしこの関数は組み込みで変更不可。smart-indentationを変えるのも考えられました。しかしやったのはcalc-c-indentを自作して前行のタブ幅+"{"開始数を返すようにしてこれを使ってsmart-indantation。このときindent-tabs-modeを有効にしてタブでインデントする。このままだと途中改行時のインデントが少ない。なので通常のcalc-c-indentも使う。ただ普通にしたのではさっきやったインデントが上書きされる。ということでさっきやったインデントの終りにポインタ位置を設定してsmart-indentationの代わりにindent-toを使用。このときindent-tabs-modeを無効にしてスペースでインデントするようにする。これでなんとかイメージした動作をしている。

ちなみに独自calc-c-indentは手抜きで文字列と/**/スタイルのコメントは考えてない。文字列中や/**/中に"{"とか"}"ががるとおかしくなる。がまぁそういう使い方をすることはほとんどないと思うのでまぁいいでしょう。一応改良したc-mode.lをupしときます。
c-mode.l
xyzzy.lやsite-lisp.lに
(setq *c-indent-tabs-mode* nil)
を加えといてください。べつにc-mode.lで定義してるとこで設定してもいいけど。

あとバージョン管理のSubversion入れてみました。以前はGUIも入れてたけど変な動作したので今回はコンソールのみ。ちなみに私はWindowsだけどtcsh使ってます。おかげで日本語でメッセージだしてくれるのに文字化けします。文字コードがUTF8だとtcshではだめっぽい。(設定変えればいけるかも)なので文字化けを戻すプログラムを作成。といっても普通はそのまま表示し、"?\123"って表示されるのは数値123を出力するという単純なものです。これだけではまだ文字化けしてるのでパイプでnkfに渡してSJISにしてもらってます。おかげで日本語も正しく表示されました。

しかしです。実際に使ってみると問題発生。エラーでて正しく動きません。ちょっと調べたがよくわからない。詳しく調べるのも面倒なので使うのあきらめました。またいつか挑戦します。


他プロセスのメモリ読み書き
2006年01月20日(金)

年末年始のために本をたくさん借りたがまったく読んでません。適当にでもよまないといけないな〜。

ゲーム用ツールの作成で他プロセスのメモリ読み取りが必要になりました。プロセスメモリエディタなるものがありメモリの内容は確認できました。使ったのはスペシャルねこまんまってソフトです。いろいろ機能がついてるが調べるのが面倒。なので作ろうと思ったものもコレでできるかも。

他プロセスのメモリ読込みはまず目的のプロセスIDを取得します。それにはFindWindow()でプロセスに所属するウィンドウを探し、GetWindowThreadProcessId()でそのウィンドウのプロセスIDを取得します。そしてプロセスを開くOpenProcess()を実行し、後はReadProcessMemory()で任意のアドレスのメモリを読み込みます。最後にCloseProcess()でプロセスを閉じます。ちなみに書き込みはWriteProcessMemory()でできるようです。


1冊目
2005年12月13日(火)

「STL標準講座」を読みました。テンプレートはパッと見た感じむずそうに感じるが、例があると理解しやすいですね。まぁ後は使いながら体で覚えていけばいいかな。


大量
2005年12月11日(日)

オセロを作ってるけどオブジェクト指向の勉強が足りないね。分析・設計ができないから変なプログラムになってる。オブジェクト指向でないC++プログラムが完成しそうだ。

大学の図書館で本を5冊借りてきた。STLとオブジェクト指向開発の本だけの予定だったけど、他にゲーム関係のを3冊も借りてしまった。年末年始は読書にいそしむか。なんせ5冊で15cmの厚さだ。


オセロ作る
2005年12月07日(水)

C++の練習にコンソールオセロゲームを作ろうと思います。オセロプログラムの本は持ってるけど参考程度にして、1から自分で作ります。いきなりはじめようとしたがどんなクラスを作ったらいいかわからんです。なので設計とUML、デザパタを少々復習して作ります。前読んだ時はC++をあまり理解してなかったけど、今読み返すとだいぶ理解できるようになりました。さぁがんばるぞ。


独習C++
2005年12月06日(火)

独習C++を読み直しました。まとめページを作成これからC++を使用した簡単なプログラムを作成したいと思います。

何か作った後はSTLの本を読んでみようと思います。


独習C++
2005年11月13日(日)

C++ Coding Standardsがわかりづらい。やっぱりC++をもう少し勉強しておいた方がいいな。ということで独習C++の演習でもしていきます。


nyの技術とテスト
2005年11月05日(土)

先日買った本、Winnyの技術とソフトウェアテストを読み終えました。

Winnyの技術は読み物として面白かった。実際に使用したソフトウェアを説明しているためわかりやすいです。実際のプログラムに反映させるには応用力が少々必要なので私にはまだ無理でしょうか。私応用力ないですから。

ソフトウェアテストはたしかにゼロからはじめると言うだけあり、私にもわかりました。実際に使用するにはコレだけでは不十分ですね。まぁコレはわかってたことですけど。この本に出てくるキーワードをググリながら少々勉強すればとりあえずテストはできるように感じました。まぁいずれ勉強しましょう。ちなみに著者が私の通ってる大学で博士号をとったようです。


書籍購入
2005年11月01日(火)

読書の秋ということで技術書を購入しました。ソフトウェアテストWinnyの技術C++ Coding Standardsの3冊です。これから読んで勉強です。


作業記録開始
2005年09月15日(木)

ここではBigが作業した、プログラム関係とかの記録を書いていく予定です。普通の日記は別のページにあります。

さっそく、作業記録。この日記のシステムは普通の日記のやつを流用してきたものです。たぶん動くとは思うけど、あまりテストしていないです。まぁいいでしょう。


スペース
管理人:Big
コンテンツトップ
  ページトップ