プログラミングの作業に何の価値も見出せなくなってしまったd金魚による日記 このページをアンテナに追加 RSSフィード

 iTunes Music Store(Japan) なかのひと あわせて読みたいブログパーツ
|

0001 | 00 |
2004 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2008 | 01 | 02 | 03 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 |
2010 | 03 | 04 | 06 | 07 | 09 | 10 | 11 |
2011 | 01 | 02 | 10 |
2012 | 04 |
2013 | 01 | 05 | 06 | 07 | 08 | 10 |
2014 | 02 | 03 | 05 | 09 |
2015 | 04 |
2016 | 09 | 11 | 12 |
はてな一覧
アンテナに追加
私のアンテナ
私のダイアリー
私のアーカイブ
私のアイデア
私のブックマーク
私のグループ
私のキーワード
ニュース系、今まで続いているシリーズモノの読み物
dKingyo Utility Toolkit Projectのリリース情報
やっぱり暗号化は大人の味(笑)
プログラムのパッキング方法を調べよ
ココが厳しいよMinGW
ライブラリアン通信
ゲームプログラミングどうしよう
CRCについて
ビット演算練習
d金魚の今更Ajax
Windows Tips
VC6 Tips
Win32 WTL Tips
Ruby for C++ User
Ruby Tips
今日のRubyで嵌った事
正規表現PIECE
書きかけ
続く・・・

私のダイアリーの人気記事
新しくブックマークされた記事


あまり、役に立たなそうな個人的に調べた情報や妄想に耽った事、今 勉強している事ヒソヒソと公開していたりします。 | 登録してくれている方々 | d金魚にメール | 当サイトは640x480の画面解像度に対応しています。
日記へのリンク、アンリンクはフリーですが、selfタグのついている部分のコンテンツの引用はご遠慮願います。ご協力よろしくお願いします。


 | 

2005-09-30 VC6の致命的な欠点

[][]VC6 Tips / 括弧の整合性が取れなくなるだけで意味不明なエラー VC6 Tips / 括弧の整合性が取れなくなるだけで意味不明なエラーを含むブックマーク VC6 Tips / 括弧の整合性が取れなくなるだけで意味不明なエラーのブックマークコメント

そうなんです。sub title通り VC6は括弧の整合性が取れなくなるだけで意味不明なエラーを出すんです。

もう、どこで括弧の整合性が取れなくなっているのなんかぜんっぜん分からないです!!*1

例えば、

void *get(){
{
 return mp;
}

のようになるだけで。

error C2143: 構文エラー : ';' が 'namespace' の前に必要です。
fatal error C1506: ブロックが大きすぎて、コンパイルできません。

とか出ちゃうんですもの!もう!なにがなんだか!やってられるか!!!(ご乱心です!)って感じですよ。

ヘッダファイルとかもう沢山読み込みまくってどこで整合性が取れなくなっているのとかわからないじゃん!!!

だからヘッダファイルにすべてのルーチンを書いていくboost方式がナカナカ流行らないわけか。

*1:つか、C++の仕様で括弧は同じタブ幅じゃないと認識しないとかしてくれないかな?

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050930

2005-09-29 STLPortのメモリリークの見分け方

[][][]STLport-4.6.2のメモリリーク報告について STLport-4.6.2のメモリリーク報告についてを含むブックマーク STLport-4.6.2のメモリリーク報告についてのブックマークコメント

src\local_impl.cppのmake_classic_locale()でtime_get等をnewし

_Init_timeinfo()を呼ぶのだが、copy_cstringの時にstd::stringで確保されたバッファ領域がデストラクタが呼ばれず?、メモリリークをおこしてしまう。(VC6で確認)


とりあえず、ソースに手を加えて明示的に開放処理を呼んでやればいいのだが、面倒だ。*1

どうしよう・・・。もちろん// #define _STLP_USE_NEWALLOC 1を有効にしても効かないのだ。

偶に発生してしまう。むぅ。自分でメモリリーク検出ライブラリでも書くか?



以下のようなメモリリーク報告( crtdbg.hによる )は無視してOK!

続きを読む

*1:いや、しっかり開放処理はされているのかもしれない(詳しく調べていない)

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050929

2005-09-28 Camellia 実装記 part2

[]camellia.c用のテストコードを掲載しておきます。 camellia.c用のテストコードを掲載しておきます。を含むブックマーク camellia.c用のテストコードを掲載しておきます。のブックマークコメント

google:camellia.cと検索して出てくるhttp://info.isl.ntt.co.jp/crypt/camellia/technology.html

にてダウンロードできる

「参照コード (C, 7.8KB)」( camellia.c )

をテストするためのソースコードです。

C++なのや無駄なところや意味不明なところもありますが気にしないでください。^^;

part1 http://d.hatena.ne.jp/studiokingyo/20050918

続きを読む

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050928

2005-09-27 私も決意しちゃおっかな^^?

[][]私的決意 for 英語 私的決意 for 英語を含むブックマーク 私的決意 for 英語のブックマークコメント

英語嫌い克服のためにはとりあえず、読んで理解することなり。?かな?

http://d.hatena.ne.jp/umedamochio/20051009/p1

もう理屈はどうでもいいや(投げやり)とりあえず、読む事。ヤル事が人生大切なのだ!

最大の目的でもあるのだ!

もちろんそれはあっちでもこっちでも適用できる事は言うまでも無いはずだが・・・だよね。だよね!そうだよね!!*1

via http://d.hatena.ne.jp/a_little_bit/20051010#p1

*1:あれれ?^^;

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050927

2005-09-26 pythonでのデバッグ

[][][]pythonでの例外時にデバッガに移行するには pythonでの例外時にデバッガに移行するにはを含むブックマーク pythonでの例外時にデバッガに移行するにはのブックマークコメント

ぶっちゃけPython使ったこと無いけどこれは後々有用になるはず。

http://lowlife.jp/nobonobo/zine/5/8.html

via http://d.hatena.ne.jp/kenmo/20050826#p2

私が、イロイロと他のスクリプト言語を使わないでC/C++に執着しているのはVCのようなデバッガが無いからだ。*1

ぶっちゃけVCからデバッガを取ってしまったらメリット無いやん!?そうでしょ!?そうでしょ!そうだよね!!

*1:まぁ、その他にもイロイロと大人の事情があるがね

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050926

2005-09-25 HTMLタグにタブを使うか使わないかあれこれ

[][][]HTMLタグにタブを使う派?使わない派? HTMLタグにタブを使う派?使わない派?を含むブックマーク HTMLタグにタブを使う派?使わない派?のブックマークコメント

私はタブを使わない。理由?面倒だから。

C/C++でのプログラミングのように{}が整合性取れないと上手くコンパイル出来ないとか間違った動作をするかもしれないとかの問題とか全然無いので別に要らないんじゃない?と、思っている。

ただ、まったく使わないというのではなくて本当に気分次第である。使わないと自分の頭の中に残らないとか整理できないと言う限りでなければ面倒だから使わない。以上である。*1

参考リンク

http://deztec.jp/design/05/03/06_tab.html

http://d.hatena.ne.jp/akiyan/20050306/p2

http://d.hatena.ne.jp/akiyan/20050306/p1

via http://d.hatena.ne.jp/lethevert/20051010/p4

*1:ぶっちゃけIEとかタグの整合性がとれなくてもしっかり表示しちゃってくれることあるし・・・プロじゃないし・・・←こだわりナッすぃんぐ

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050925

2005-09-24 VCのデバッガでのプログラム変数プロパティの注意

[][][][]何もエラーしていないのに「例外処理 (初回) は archive.exe にあります: 0xC0000005: Access Violation。」になる時は 何もエラーしていないのに「例外処理 (初回) は archive.exe にあります: 0xC0000005: Access Violation。」になる時はを含むブックマーク 何もエラーしていないのに「例外処理 (初回) は archive.exe にあります: 0xC0000005: Access Violation。」になる時はのブックマークコメント

デバッガでのシンボル名に余計な文が入っていませんか?

例えば、初期化していないクラスのポインタのメンバ関数を参照したりとかですよ。

はまっちゃいましたよ。ん〜時間無駄にしましたよ!!むきぃ!!!

CClass e;//ここでbreak point;そして変数をシンボル名にp->eof()と入れる


CStream *p = new ...

for(;p->eof()

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050924

2005-09-23 DKUTでのassertの書き方

[][][][][][]dKingyo Utility Toolkitでのassertの書き方 dKingyo Utility Toolkitでのassertの書き方を含むブックマーク dKingyo Utility Toolkitでのassertの書き方のブックマークコメント

http://www.radiumsoftware.com/0510.html#051007

にてassertについて述べられている。記事を読んでいる時間は無い*1のでdKingyo Utility Toolkitにて採用されているのassert()の書き方のルールに関する着目点を書く。


  • デバッグ用のチェックにassertを使用する事。
    デバッグ時にDebugBreak();出来て便利だからである。
  • Releaseビルド時にはassertしない事。
    return false;とかthrow 使おうよ。そしてその時の処理はプログラマが書こうよ。エラーハンドリングは大切だよ〜、使いやすいアプリケーションを作るには!って事。
  • それでもassertする場合。
    もう、これが間違っていたらプログラムは破綻してしまうという時にだけ使う。しかもその条件がきたら即終了処理exit(1);をするようにする。

以上のようなポリシーから以下のプログラムをgoogle:dkutil_cのdkcOSIndependent.hに定義している。

なおdkutil_c 0.199から以下のソースを抜粋した。

続きを読む

*1:英語は読めない

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050923

2005-09-22 デースケドガーな時には自己診断 part17

[][]狙った男の落とし方 狙った男の落とし方を含むブックマーク 狙った男の落とし方のブックマークコメント

http://www5a.biglobe.ne.jp/~uranaiya/getman.html

結構、男だろうが、女だろうが当てはまると私の本能が答えてくれるので多分に気になる異性のタイプを診断してくれると思う。

ちなみに私の心を揺さぶる方法ですが・・・

(自主規制)

だ、そうです。

知りたければコメントにでも書いてくれ*1

*1:絶対イナヒ

通りすがり通りすがり 2005/11/04 19:06 書いてみよう。^-^

studiokingyostudiokingyo 2005/11/27 22:54 絶対にいないと思っていましたが、いらっしゃたようです。
ごめんなさい・・・。やっぱり恥ずかしいんで勘弁してください。m(>_<)m

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050922

2005-09-21 どんなファイルでも3KB以内に抑える圧縮ソフトを開発!!

[][][][]どんなファイルでも3KB以内に抑える圧縮ソフトを開発!! どんなファイルでも3KB以内に抑える圧縮ソフトを開発!!を含むブックマーク どんなファイルでも3KB以内に抑える圧縮ソフトを開発!!のブックマークコメント

前々から構想していたプロジェクトソフトウェアの土台が完成しました。

タイトルどおり「どんなファイルでも3KB以内に抑える圧縮ソフト」を完成させました!!*1

*1: しかし、一生解凍出来ない可能性あり

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050921

2005-09-20 __builtin_return_address for Visual C++が欲しい!

[][][][]__builtin_return_addressと__builtin_frame_addressのVC版が欲しい __builtin_return_addressと__builtin_frame_addressのVC版が欲しいを含むブックマーク __builtin_return_addressと__builtin_frame_addressのVC版が欲しいのブックマークコメント

そうです。欲しいんです。LeakTracer for win32を作っているので・・・。

asm{}で作れないかな?

ウーム。ちょっと調べんと・・・どちら様かコードをNYSLで寄付してください〜 m(>_<)m

[][]__builtin_return_address for VCが出来たらしいですぞ __builtin_return_address for VCが出来たらしいですぞを含むブックマーク __builtin_return_address for VCが出来たらしいですぞのブックマークコメント

http://mainte.mine.nu/~hoshu/diary/?date=20051006

より。

感謝感謝です。

トラックバック送ってくれるとすぐに分かったので嬉しかったです。^^

via http://beautiful.homelinux.net/~sky-software/diary/?date=20051012#p01

http://mainte.mine.nu/~hoshu/にてダウンロードできるpbaです。

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050920

2005-09-19 XML parser等等

[][]XML parserはどれを使おうかなぁ? XML parserはどれを使おうかなぁ?を含むブックマーク XML parserはどれを使おうかなぁ?のブックマークコメント

google:bulletMLにはgoogle:Tiny XMLというXMLパーサーがついていたが、遅いらしい。http://www.radiumsoftware.com/0303.html#030308 より

( via http://d.hatena.ne.jp/toge/20050908#1126197679)

で、いろいろあるが

まぁ・・・どれでもいいか。(投げやりスマン)

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050919

2005-09-18 Camellia 実装記 part1

[][]Camellia sbox creator Camellia sbox creatorを含むブックマーク Camellia sbox creatorのブックマークコメント

タイトルどおりですが作ってみました。

Camellia暗号で使うsboxを4つ出力します。

続きを読む

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050918

2005-09-17 自分なりの発見構築と死んでると同じ状態と・・・

[]自分なりの発見構築と死んでると同じ状態と・・・ 自分なりの発見構築と死んでると同じ状態と・・・を含むブックマーク 自分なりの発見構築と死んでると同じ状態と・・・のブックマークコメント

とりあえず、見てくれ!

http://www.mammo.tv/interview/064_HirataH/2.html より

 人類の先祖が発見し、構築した知識を、自分にコピー&ぺーストしているだけでは意味がない。それがいくらかでもできている人は、世間から優秀と見られても、それはそれまでのこと。そこからさらに人類のためになると思われる自分なりの発見構築がなければ学問の意味がないし、コピー&ペーストした知識をためているだけで、それを行動に移していかなければ役に立たない。


それなりに現状に満足しているか、不満だけれども、どうしようもないと、あきらめているか、どっちかだ。これでは死んでるも同じだ。何も進まないし、よくならない。まず、自分がつまらなくなるだろう。

via http://www.radiumsoftware.com/0509.html#050920

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050917

2005-09-16 有限状態の状態遷移管理は超→メンドイ!

[][][]有限状態の状態遷移管理なんてしたくない! 有限状態の状態遷移管理なんてしたくない!を含むブックマーク 有限状態の状態遷移管理なんてしたくない!のブックマークコメント

http://d.hatena.ne.jp/kenmo/20050914#p1

より、有限状態機械の書き方が紹介されている。

私も高校1年の時にこのような書き方で行ってきたつもりだったが、私の場合この方法だといかんせん面倒だったのだ。

デメリットはもちろんのこととして

利点にデバッグしやすい(状態が明確)とかいているが実はというとデバッグしにくいなのだ。

状態が明確なのは良いと思う*1が、状態遷移の条件が複雑になればなるほど、そのプログラムを書いた本人がどの条件でどの状態に遷移するのかがわからなくなり、意外な条件の組み合わせで予想のつかない深みにはまる。という事があったからだ。状態遷移の条件を一まとめにしておくとか一つだけにしておくとかリストアップしておくとか頭の中で整理できれば良いが、普通は出来ない。時と場合とわがままによって条件が矛盾を起こしていくか起こしてしまう。

複雑な処理をするアプリケーションになればなるほどそれにはまりやすい。例えばWin32APIのウィンドウプロシージャを扱うプログラムなんてそうだ。はっきり言ってswitchの嵐は私は嫌いである。break抜けなんて諸悪のバグの根源である。

なので、機能単位プログラムを組む状態数の少ないライブラリ製作の方が私には向いていた。というか、ライブラリ製作に逃げていた。(笑)

なので一時期ステート管理についてスマートな方法が何かどうか調べたことがあった。

そこで出てきたのが

google:FSM

google:state map compiler

http://d.hatena.ne.jp/studiokingyo/20040613#p1

んー十万するGUIで状態遷移を管理するIDEの類であった。

一部にそれ関係の話題を扱ったサイトを私のアンテナに登録してあるので参照してみると良いかもしれない。


どれも私にとってパッとするものは無く、状態数の少ないプログラムばかり書いていた。

しかし、これから本格的なアプリケーションを製作するに当たってそんなことは言っていられない。

なんらかの方法を見つけ出さねばと考えた。結果、以下のアイディアが浮かんできたので記しておこうと思う

  • 状態を対象にした正規表現みたいなBNFみたいな それによって状態遷移エラーチェックや正常に状態遷移をしているかチェック(毎フレーム状態を保存する必要があるが・・・)
  • やっぱり古典的?に、状態遷移条件を頭の中にまとめられるように努力する。例えば、有限状態機械がモジュール単位バグなしで固まったらいじらない や 状態遷移図をノートに取っておくとか その為のオブジェクト指向か!?(笑)

続く・・・(ってか、最近書くことなすことまとまらずに続くことが多い スマン)

*1:私は状態を明確にしておかないとプログラムを組めない性質

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050916

2005-09-15 d金魚の壮大な計画 part1

[][][][]全自動状態遷移出力機 全自動状態遷移出力機を含むブックマーク 全自動状態遷移出力機のブックマークコメント

今までノートの類に書き溜めてきたものや突然思いついた壮大な計画をぶちまける企画。*1

とにかく!発表するのが大切だ!どんどんコメントを!

アンチクラックを自動で破るツール

仮想環境上にexeファイルを放り込んで実行した命令をすべてloggingするようなツール。

メモリ上に展開したコード等もすべてログするような奴

loggingしたコードの中で関数化できそうな?同じようなところはまとめてlogic的には同じにして出力するようなツール

idea by copyright(C) d金魚

次回予告:http://proger.blog10.fc2.com/blog-entry-40.html

*1:確か、やねうらお氏のはてなにぶちまけた者勝ち?とか書いていた覚えが・・・どこに書いていたのかわすれちゃったんですが(>_<)

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050915

2005-09-14 ライブラリデザインあれこれ part6

[][][]2年前のゲームプログラミングをする上での描画優先順位機構の好きじゃないところ 2年前のゲームプログラミングをする上での描画優先順位機構の好きじゃないところを含むブックマーク 2年前のゲームプログラミングをする上での描画優先順位機構の好きじゃないところのブックマークコメント

その昔、プロコン2004時にゲームのプログラムを組んでいて自分ではすっごい便利な描画機構を組んでいるつもりで組んでいた描画要求ラッパーライブラリを組んでいた。

そのライブラリの機能の核はひとつの描画対象を描画要求時にセットしていた描画優先順位を元にソートして表示するという、ちょっとした3D感が味わえるようにしていたライブラリである。

だが、それは無駄だった。

続く・・・

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050914

2005-09-13 dkutil_c 0.199 投下

Doxygened result

[][]tools 20050910も投下 tools 20050910も投下を含むブックマーク tools 20050910も投下のブックマークコメント

dKingyo Utility Toolkit Projectで生成されたツールの類もアップロードしました。

DxLib用ツールrota_graphやfont2texture等やシグネチャ出力ツールsignatuan,コンパイル後ごみファイル削除ツールdKingyoVCCleaner*1,簡易セキュリティ設定ツールNullSessionEvasion,コピーコマンドラップツールdacekeadgar_copyの以上です。

*1:BCCDeveloperのプロジェクトファイルを削除することで有名 みんな気をつけて!責任はとりません。使用は自己責任で!

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050913

2005-09-12 stable release寸前だったものを壊すのはどうか・・・

Now doxygening...

[][][]もうすぐでdkutil_c releaseだったのにTT もうすぐでdkutil_c releaseだったのにTTを含むブックマーク もうすぐでdkutil_c releaseだったのにTTのブックマークコメント

どうも、dkutil_cの1年半ぶりのstable releaseが目前だったのにLZW機構の書き直しの為にまだ時間がかかりそうです。

ぶっちゃけ、前の実装でよかった気もしなくないんですが、途中で処理を止められないというのはある意味よくない*1と思い、書き直しています。dkutil_cの中でもLZW機構は複雑な方なので書き直し個所が多いのです。あぁ・・・C++ならば、あそことあそこをまとめてtemplateにして・・・とかいろいろ浮かぶんですけどね。C言語の場合こんなもんです。MinGWでもコンパイルできる等のC言語ならではのコンパイラ間の互換性という問題を解決している点では非常に恩恵をこうむっているのですがね。でもやっぱりコーディングしにくいって言うのもどうかと・・・

この際、ちょっと前にstable releaseしかかった状態のものを0.1系列最終って事でリリースしようと思っちゃたりしなかったり・・・。

[][]Now Doxygening... Now Doxygening...を含むブックマーク Now Doxygening...のブックマークコメント

f:id:studiokingyo:20050910093701g:image:small

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050912

2005-09-11 人は成果物でしか物事を評価することができない

[][][]人は成果物でしか物事を評価することができない 人は成果物でしか物事を評価することができないを含むブックマーク 人は成果物でしか物事を評価することができないのブックマークコメント

via ( http://www.hyuki.com/t/200509.html#i20050908232457 http://bb.watch.impress.co.jp/cda/alphageek/10989.html )

より。

Ajaxとかのお話の中から。

よってdKingyo Utility Toolkit Projectで生成されたライブラリから面白いものを作れば評価されるって事か。なーる。

で、U20 ProCon2006 が最後の戦場になるわけだな。

大学休学しててでもいいもの作ってみせる。

2005-09-10 ライブラリデザインあれこれ part5

[][][]zlibが非常に読みにくい zlibが非常に読みにくいを含むブックマーク zlibが非常に読みにくいのブックマークコメント

前回ではビット配列の処理をzlibを参考にしては?と言ってみた。

早速zlibをダウンロードしてdeflateを読んでみた。

...

if elseのネストが深くてすっごく読みにくい!

なんですか。これは!どこで圧縮している処理なのか分からない!!

さらに関数内に#ifdef GZIP #endifが・・・。

私はひとつの関数内にこれだけ違う処理になってしまうものは別関数にしてしまうのだが・・・。

多分、互換性を維持するためにこのようにコーディングしたのだろう。

私のライブラリはユーザーがごくごく少数化または存在しないような規模のライブラリなのでこれで仕様変更や出力結果の互換性の維持等はそれほど気にしなくていいのだが、zlibのようにメジャーになるとこうなってしまうのだろう。

互換性の維持でこの記事を思い出した。http://www.radiumsoftware.com/0508.html#050824

Windowsはアレだけひどい*1のにもかかわらず互換性の維持にこれだけがんばっているらしい。

閑話休題。

とりあえず、zlib資料

  • 本家:http://www.zlib.net
  • deflateアルゴリズムのRFC1951 http://www.ietf.org/rfc/rfc1951.txt
  • deflateはHuffmanなの?
  • JPEGについて沢山のことを書いている方のページ http://www.coara.or.jp/~tkuri/D/022.htm#D2002-12-14
    それにしてもファイル入力クラスの汚さときたら。C 言語で無理やりオブジェクト指向の真似事をやっています。C++ コンパイラを使える以上,このような技は多用すべきではありません。
    そうですね。dkutil_cなんて特にそうですね。orz ちょっとこの日記に興味をもったため読み進めてみた。おぉ!

    [汎用的な]私を惑わし深みに嵌める,非情に強く魅力的に輝く不思議な言葉。崩壊の序曲の音色のなんという美しさよ! ・・分かってるならなんとかせぇハゲ>自分

    これ、超→分かるのです。もう、共感共感。このサイトで行っていることは至極私の共感を呼ぶものばかり。 http://www.coara.or.jp/~tkuri/D/031.htm#D2003-04-27 も面白いので是非参照されたし。google:イデア指向なんてのは非常に趣のある指向だ。 http://www.coara.or.jp/~tkuri/
  • とっても詳しいWikipedia http://ja.wikipedia.org/wiki/Deflate Wikipedia

*1:ドライバやハードウェアの相性によるものがほとんどだそうだが・・・

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050910

2005-09-09 ライブラリデザインあれこれ part4

[][][]C言語でビット単位の配列を扱うのはもっとつらいよ C言語でビット単位の配列を扱うのはもっとつらいよを含むブックマーク C言語でビット単位の配列を扱うのはもっとつらいよのブックマークコメント

さて、前回のC言語でのライブラリ製作戦略*1に則りLZW圧縮機構を書きなおしていたときのことだ。

以下のようなインターフェイスにした。


///LZWの辞書状態をクリアする。
DKC_EXTERN  int WINAPI dkcLZWInit(DKC_LZW *p,
 ULONG option,uint32 Signature);

/**
@param ptr[in][out] dkcAllocLZW()で取得したポインタ
@param src[in] 圧縮するためのデータのバッファへのポインタ
@param ssize[in] srcのサイズ
@return edk_EndProcessでdkcAllocLZW()の第一引数で指定したサイズに到達した。
 到達した場合はdkcLZWCompressOutput()を呼び出して処理結果を出力すること
 */
DKC_EXTERN int WINAPI dkcLZWCompressStep(DKC_LZW *ptr,
 const BYTE *src,size_t ssize);
/**
@param pHeader[in] 内部状態を返す。NULLでもかまわない
@note
pHeaderに入ったデータを参照して今後のプロセスを決めるという戦略をとると良い。
 */
///圧縮した結果をdestに出力する。
DKC_EXTERN int WINAPI dkcLZWCompressGetState(DKC_LZW *ptr,
 DKC_LZW_HEADER *pHeader);

DKC_EXTERN int WINAPI dkcLZWCompressOutput(DKC_LZW *ptr,
 BYTE *dest,size_t dsize);

さて、ここでdkcLZWCompressOutput()でひとつ疑問が浮かんだ。

「LZWの圧縮した出力結果はビット単位の配列である」

盲点だった。バイト単位の配列での解決方法しか考えていなかった。

このままだと何回もdkcLZWCompressStep()を重ねると圧縮データのビットの幅がずれてしまう。

よって正常に解凍できない。

ここで、以下のアプローチを思いついた。

  • dkcLZWCompressOutput()でどこまでのビットが有効なのか値をバッファ内に一緒に出力する。(問題点:解凍時に圧縮時と同じサイズの作業バッファにしなくてはならない)
  • ビット配列を扱えるライブラリを作成する(既に作成済み)それを出力バッファとしての引数にして後はユーザーに任せる。(ユーザーが分かりにくい)
  • dkcLZWCompressOutput()にどこまでのビットが有効なのか値を出力する引数を付け加える(無難だと思う)
  • dkcLZWCompressOutput()でビット単位になっている端数は切り捨てて次の出力の時にまわす。(最後の最後でビット単位で出力しなければならなくなる。)

さて、zlibはどのような方法でアプローチしていただろうか?lzwと同じような感じ(スマン具体的に説明できない)だった覚えがあるが。

これを調べるのも価値があると思う。*2

*1http://d.hatena.ne.jp/studiokingyo/20050908

*2:私はこのようにして一流プログラマーのプログラムコーディング思想を探求していくのである。

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050909

2005-09-08 ライブラリデザインあれこれ part3

[][][]処理を一時中断できるライブラリを組もう 処理を一時中断できるライブラリを組もうを含むブックマーク 処理を一時中断できるライブラリを組もうのブックマークコメント

C++での美しいライブラリの組み方あれこれの前にC言語でのライブラリの組み方で私がいままで行ってきた組み方での失敗例をお見せしよう。

DKC_EXTERN int WINAPI dkcLZWEncode(DKC_LZW *ptr,DKC_LZW_HEADER *ph,
  BYTE *dest,size_t dsize,const BYTE *src,size_t ssize,
  size_t CloseProcessSize,ULONG sig,ULONG option);

この関数はLZWで圧縮する関数だが、処理がこの関数ひとつで完結してしまうように設計されている。すなわち、srcバッファで指定したサイズのものしか圧縮しないのだ。(見ればあたりまえだが)バッファに収まりきらないサイズのファイルを処理するときには非効率になってしまう。(私は詳しく説明できないが、どうも動的辞書?を毎処理毎に作成するから上手く利用できないためらしい?でしょうか?ねぇ?)

以下のような設計が望ましい


///SHA1の生ハッシュ値(binary)に必要なバッファサイズ
#define SHA1_BIN_BUFFER_SIZE (SHA_HASH * 4)
///SHA1のハッシュ値文字列に必要なバッファサイズ
#define SHA1_STR_BUFFER_SIZE (SHA_HASH * 8 + 1)

#define SHA160_BIN_BUFFER_SIZE SHA1_BIN_BUFFER_SIZE

#define SHA160_STR_BUFFER_SIZE SHA1_STR_BUFFER_SIZE


typedef struct dkc_SHA1{
  DWORD m_dwH[SHA_HASH];
  DWORD m_dwLNumBits;
  DWORD m_dwHNumBits;
  DWORD m_aBlock[SHA_BLOCK];
  int   m_nNumChr;
  BYTE mFinalized;
}DKC_SHA1,DKC_SHA160;


/*!
@return DKC_SHA1構造体への確保したメモリ領域
@note
すでにdkcSHA1Init()は呼ばれています。
 */
DKC_EXTERN DKC_SHA1 *WINAPI dkcAllocSHA1();
///@return dkcAllocSHA1()から取得した領域を初期化する。
DKC_EXTERN void WINAPI dkcSHA1Init(DKC_SHA1 *);
/*!
@param p[in][out] dkcAllocSHA1()で取得したポインタ
@param pBuffer[in] 読み取るバッファへのポインタ
@param dwSize[in] バッファにアクセスしてOKなサイズ
 */
DKC_EXTERN void WINAPI dkcSHA1Load(DKC_SHA1 *p,
  const BYTE *pBuffer,DWORD dwSize);


/*!
@param p[in][out] dkcAllocSHA1()で取得したポインタ
@note
dkcSHA1FinalDigest()を使用する事を奨励します。
 */
DKC_EXTERN void WINAPI dkcSHA1Final(DKC_SHA1 *p);
/*!
@param p[in][out] dkcAllocSHA1()で取得したポインタ
@param buff[out] 書き込むバッファへのポインタ
@param size[in] buffのサイズ
@return 成功したらedk_SUCCEEDEDが返る
 */
DKC_EXTERN int WINAPI dkcSHA1DigestStr(DKC_SHA1 *p,
  char *buff,size_t size);
///binaryハッシュ値 版 @see dkcSHA1DigestStr()
DKC_EXTERN int WINAPI dkcSHA1Digest(DKC_SHA1 *p,
  BYTE *buff,size_t size);

/*!
@see 引数、戻り値についてはdkcSHA1Digest()と同じです。 
@note
dkcSHA1Final()とdkcSHA1Digest()を使用するより、この関数の使用を奨励します。
 */
DKC_EXTERN int WINAPI dkcSHA1FinalDigestStr(DKC_SHA1 *p,
  char *buff,size_t size);

///binaryハッシュ値 版 @see dkcSHA1FinalDigestStr()
DKC_EXTERN int WINAPI dkcSHA1FinalDigest(DKC_SHA1 *p,
  BYTE *buff,size_t size);

/*!
@param p[in][out] dkcAllocSHA1()で取得したポインタへのポインタ
@return 上手く開放できたらedk_SUCCEEDED
 */
DKC_EXTERN int WINAPI dkcFreeSHA1(DKC_SHA1 **p);

特に注目すべきところはdkcSHA1Load()関数である。

これは初期化の後に何回も呼び出せるところにある。

dkcSHA1Load()でデータをSHA1機構にロード(計算)した後、salt値をdkcSHA1Load()でロードすることが出来る。そう。これのような扱いの出来るLZW圧縮機構を作るべきだった。

なので、今設計を見直して組みなおしているところだ。このSHA1機構のように組みなおせば今までの関数の処理互換で組みなおすことが出来る。このSHA1機構はラップされて前述のLZW圧縮関数インターフェイスのような

DKC_EXTERN int WINAPI dkcSecureHashCalculateBinaryDigest(
  UINT hash_option,BYTE *digest_dest,size_t destsize,
  const BYTE *data,size_t data_size
);

を組むことが出来るのですから。

よってC言語でライブラリを作る際どのような順番でラップしていくかを以下に示そうと思う。

  • ステート保存用変数の把握、それによる構造体の宣言。*1
  • 1ステップ毎( 先ほどの例ではdkcSHA1Load()のような事 )の処理の把握、それによる関数の宣言、それらの関数は*1で示した構造体にステートを保存できること。( 保存できることによって一時処理を中断したものでも後から処理を再開できるような機構にしておくこと )
  • 1ステップ毎の関数を一まとめにしたラッパー関数を組むこと。( 先ほどの例ではdkcSecureHashCalculateBinaryDigest() のような関数のこと Microsoftが提供するAPIはこのライブラリデザインの類が多い。 )

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050908

2005-09-07 デースケドガーな時には自己診断 part16

[][]ニュートラ、適職、適正診断やってみた ニュートラ、適職、適正診断やってみたを含むブックマーク ニュートラ、適職、適正診断やってみたのブックマークコメント

via http://d.hatena.ne.jp/tailliar/20050907#p2

http://www.neutra.go.jp/diagnosis/

で、結果。

http://www.neutra.go.jp/diagnosis/result25.html

あっはっはっは^^

特に向いている職種は?

単純作業のルーチンワーク

そう!ライブラリ作りというルーチンワークだがね!!

あるいは非常にイヤなことがあったばかりではありませんか?

ああ、そうだよ!デバッグ大変だよ!!

なんてったって

http://d.hatena.ne.jp/studiokingyo/20050828

http://d.hatena.ne.jp/studiokingyo/20050817

http://d.hatena.ne.jp/studiokingyo/20050806

http://d.hatena.ne.jp/studiokingyo/20050308#p2

みたいなしょ〜もな人生歩んでるからな(爆)

まぁ、たがかコンピューターによる診断だ。別にどうでもいい。

ほら、もう一回行えば別の結果が〜

http://www.neutra.go.jp/diagnosis/result25.html

久々にorzしていいですか...

追記:後日の結果:http://www.neutra.go.jp/diagnosis/result22.html 私は仕事には向かないらしい。OTL

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050907

2005-09-06 ライブラリデザインあれこれ part2

[][][]ステート保存用変数を把握しよう ステート保存用変数を把握しようを含むブックマーク ステート保存用変数を把握しようのブックマークコメント

http://d.hatena.ne.jp/studiokingyo/20050905の続き

C言語でのライブラリ作りで不満が出てくるのが抽象的なインターフェイス関数ポインタswitch分岐でしか統一できないところは前に書いた。

そしてもうひとつ。いちいちステート保存用構造体の変数*1関数の第一引数*2に宣言しなければならない。

例えばC言語での配列処理をするとしよう*3

///注意:擬似コードです
void crypt_process(CRYPT_OBJ *crypt_obj,uint8 *dest,
 const uint8 *src,size_t destsize)
{
  size_t offset = 0;
  uint8 buff[512];
  size_t count = destsize / 512;
  for(int i=0;i<count;i++){
   memcpy(buff,&src[offset],512);
   crypt512(crypt_obj,buff);
   memcpy(&dest[offset],buff,512);
   offset+=512;
  }
}

のような処理だ。

さて、ここで配列処理に使っているステート保存用変数はどれだろうか?

私は専門家ではないので責任はもてないが経験上offsetとdestsizeである。

destバッファオフセットを処理したら処理した分*4バッファを進めている。

また、destバッファが有効な領域からはみ出さないようにdestsizeは有効な領域を示している。

これがdestに対するステートだ。

まだ使っていないバッファを指定分使ったら指定分バッファオフセットを進めて空いているバッファ領域を使いたい。

この要望に答えたのがdkutil_cのdkcMemoryStream.hに宣言されている関数郡だ。*5

そして、このdkcMemoryStream.hのインターフェイスを見て何かに似ていると思った方。正解である。

cstd*6のfopen()fclose()fwrite()fread()等のファイルストリームインターフェイスに似ているではないか。

そう、これはcstdのファイルに入出力機能をメモリ領域に入出力の機能に変えただけのライブラリなのだ。

なんか、それだけのためにこれだけ文字打って、新しい名前の関数作って、構造体作って、定義作って大げさじゃない?

と思った方!そう!そこなのだ!C言語ライブラリを作るめんどくささは!

そんなめんどくさい事をしっかり行ったのがdkcStream.cおよびdkcStream.hである。

これは前述のメモリストリームファイルストリームのどちらを使うかを初期化時に選択できるラッパー関数郡である。

これを組むのに良くがんばったと思う。本当に単純な作業でこれを仕事でやったら気が狂うのではないかと思った。(笑)*7

さて、これらのソースコードを見終わってC++でどのようにしてObjectiveでスマートライブラリを組むかが分かる人は次回は見なくてもOKである。

ぶっちゃけC++でのクラスの作り方の極意はクラス内にステート用の変数だけをもたせるという事を念頭において組めばよいのですから。*8後は次回である。

追伸:ステートって情報処理やプログラミングで実際どういう意味なのかは分かりません。(爆)

*1:または構造体

*2:私は第一引数に統一しているのでここではそのようにする

*3srcのサイズはdestと同等とする

*4:ここでは512byte

*5:dkutil_cはhttp://sourceforge.jp/projects/dkingyoutility/files/?release_id=7410#7410等からダウンロードしてください

*6C言語標準関数郡ということにしてくれ

*7:ちなみにこのソースデバッグしていた時の日記http://d.hatena.ne.jp/studiokingyo/20050822http://d.hatena.ne.jp/studiokingyo/20050823である

*8:他にも把握しなければならないことは多少はあるが・・・

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050906

2005-09-05 ライブラリデザインあれこれ

[][][]C言語での配列処理はつらいよ C言語での配列処理はつらいよを含むブックマーク C言語での配列処理はつらいよのブックマークコメント

最近、通信用に使う暗号化パケットを生成するライブラリを組んでいた。

アルゴリズムは

圧縮したデータを特定のサイズ毎に分割してハッシュ値をつけてその後暗号化かけて出力するというものだ。

しかし、でかいファイルを扱う場合、いちいちメモリにロードして圧縮かけて暗号かかけて・・・と、書いてやるのが面倒に感じた。そう、圧縮エンジン、および暗号化エンジンの入力出力がメモリからしかできないようになっていた。*1

これでは何かと不便だ。ちなみにC++で行う場合、templateでもいいし抽象クラスつくってでもいいが、書くところが少ない分楽にコーディングできる。

配列部分でmemcpyや代入している部分にクラスに宣言されているwriteとかreadに代えるだけですぐにその機構が出来上がる。

こんなに簡単なことは無い。

C言語で実装する場合はオブジェクト構造体を作って内部にフラグもたせてswitchでいちいち分岐しなければならない。*2こんなに面倒なことは無い。

そういえば、何故、C言語のライブラリなんて作っているのだろうか・・・

これには昔々にあったとある事件が原因である・・・これは追って書いていこうと思う。

*1:実装はC言語。また、ファイル全体を見て圧縮する場合などメモリに展開できない量のデータを扱うことが出来ない。

*2:関数のポインタでもかまわないが、最近のPCの場合は分岐のほうが速い

skysky 2005/09/08 02:02 そういえばCrypto++では入出力にSource/Sinkというクラスがありますね。
しかし、私はあのドキュメントを読みながら実装するのに挫折してしまいましたがorz

studiokingyostudiokingyo 2005/09/08 06:34 なるほど。しっかりした暗号ライブラリにはそのような機構もついているのですね。確か、テストソースにはそれ系のソースありましたね。今度ブロック暗号でブロックが余った時の処理とか抽象クラスや仕様を見てみたいと思います。私もorzしそう!?

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050905

2005-09-04 やっぱり暗号化は大人の味(笑) part18

[][][][][][]IVをキーから生成するにはどうすればTT IVをキーから生成するにはどうすればTTを含むブックマーク IVをキーから生成するにはどうすればTTのブックマークコメント

IVとは。

ブロック暗号CBC モードで使用されるときには、暗号化が行われる前に、初期ベクトルと最初の平文ブロックとで排他的 OR 処理が行われる。 The TLS Protocol Version 1.0

だそうだ。

で、このIVを鍵から生成するにはどうすれば言いかを考えてみた。

その考えが以下のソース。これでよいのかは本当に不安。問題点がありましたらびしびしコメントくださいますとうれしいですm(_ _)m

DKC_INLINE int WINAPI dkcCalculateInitializeVector(
  void *dest,size_t destsize_and_generate_iv_size,
  const void *key,size_t keysize)
{
  uint8 *a = dest;
  int r;
  size_t count,rest,i,j;
  DKC_SHA512 *p;
  uint8 key512[SHA512_BIN_BUFFER_SIZE];
  r = dkcSecureHashCalculateBinaryDigest(
    edkcSH_SHA512,key512,sizeof(key512),key,keysize);
  if(DKUTIL_FAILED(r)) return edk_FAILED;
  
  p = dkcAllocSHA512();
  if(NULL==p) return edk_OutOfMemory;
  
  //初期ペンティアムは勘弁TT
  count = destsize_and_generate_iv_size / SHA512_BIN_BUFFER_SIZE;
  rest = destsize_and_generate_iv_size % SHA512_BIN_BUFFER_SIZE;
  for(i=0;i<count;i++){
    dkcSHA512Init(p);
    dkcSHA512Load(p,key,keysize);
    dkcSHA512Load(p,key512,sizeof(key512));
    dkcSHA512FinalDigest(p,key512,sizeof(key512));
    for(j=0;j<SHA512_BIN_BUFFER_SIZE;j++){
      a[i] = key[i]
    }
    a+=SHA512_BIN_BUFFER_SIZE;
  }
  if(rest){
    dkcSHA512Init(p);
    dkcSHA512Load(p,key,keysize);
    dkcSHA512Load(p,key512,sizeof(key512));
    dkcSHA512FinalDigest(p,key512,sizeof(key512));
    for(j=0;j<rest;j++){
      a[i] = key[i]
    }
  }
  dkcFreeSHA512(&p);
  return edk_SUCCEEDED;
}

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050904

2005-09-03 2005年度はてなダイアリーへ要望

[][][]2005年はてなダイアリーへ要望 2005年度はてなダイアリーへ要望を含むブックマーク 2005年度はてなダイアリーへ要望のブックマークコメント

前回の要望:http://d.hatena.ne.jp/studiokingyo/20040606

はてなダイアリーへの要望(キーワード)

C++ソースコードを掲載する場合、*の小文字を沢山使うのですが、*がはてなダイアリー小見出し認識されてしまいます。タグでくくると小見出し等のはてなダイアリーの独自拡張機能を機能させなくするようなタグを作って欲しいのです。

よろしくお願いします〜

[]superpre superpreを含むブックマーク superpreのブックマークコメント

アイディアに登録したのすでに実装されていたようです・・・TT

見落としスミマセンでした。m(__)m*1

[][]superpreだと色分けできないなり!! superpreだと色分けできないなり!!を含むブックマーク superpreだと色分けできないなり!!のブックマークコメント

superpreだと色分けできないことが判明!!*2

これだとソースコードが見にくいのでどうかお願いします。

再度アイディア提出 http://i.hatena.ne.jp/idea/5774

さらに追記:何故必要なのかの例:

if((NULL==p) && (size != 0))
とか
/*
@filename snow2.c
*/ <- ココとか
//はてなダイアリー最高^^
//でもソースを色分けで表示するの大変 orz
↑キーワードと化します。
とか

[][]指定した文章をとある時間を過ぎたら表示するタグが欲しい。また・・・ 指定した文章をとある時間を過ぎたら表示するタグが欲しい。また・・・を含むブックマーク 指定した文章をとある時間を過ぎたら表示するタグが欲しい。また・・・のブックマークコメント

新たに欲しい機能を思いついちゃいました。

指定した文章をとある時間を過ぎたら表示するタグが欲しい。

<hatena name="viewtime" viewtime="20051010">
今日は体育の日
</hatena>

*3

また、

未来の日付で書いた文章をすぐ公開しないでその日付になったら公開する機能が欲しい。

早速アイデアhttp://i.hatena.ne.jp/idea/5784

[]C++用囲いタグがほすぃ C++用囲いタグがほすぃを含むブックマーク C++用囲いタグがほすぃのブックマークコメント

http://d.hatena.ne.jp/crowdeer/20050905/idea

にて現状で最善のソースコードの載せ方をレポートしてます。

確かに、そうすれば良いかもしれませんが・・・何かと大変なんです。ソースチェックは・・・。

もっと気軽にソースを載せれるようになりたい。

すなわち、小見出しを無効にするため空白を入れたり、キーワードに引っかからないように変数名かえたりをしたくない。括弧()にいちいち半角スペースを入れたくない

それが本心です。

それによってtextareaタグキーワードに引っかからないように使えるようになるのではないでしょうか?

逃げに走って今まで作業を行ってきましたが、不満がある以上、出来る限り主張、提案いたします。

[][]続きを読む+superpreでバグる。 続きを読む+superpreでバグる。を含むブックマーク 続きを読む+superpreでバグる。のブックマークコメント

====
 >|| <- ちょっとスペース空けてます。
superpreタグのスペースは削除してください。
/**
licence:NYSL
*/
#include <stdio.h>
#include <windows.h>
#include <dkutil_c/dkc.h>
//#include <dkutil/macro.hpp>

#include <math.h>

#include <vector>
 ||<

上記の文章が上手く認識されないです。(泣)続きを読む以降にズラッと#includeが並んでしまいます。

*1:チョット、ハズカスィ〜

*2:色分け例:http://d.hatena.ne.jp/studiokingyo/20040908#p1

*3XMLよく分からんけど・・・

kmt-tkmt-t 2005/09/04 03:16 以前自分もまったく同じ要望をはてなに出しましたが、却下されました。superpreだと色分けできないのでソースが読みにくいんですよね。ついでにソースコードを書くときはキーワードの自動リンクがうざいです。

studiokingyostudiokingyo 2005/09/04 15:11 ええ、却下されたんですか!じゃ、ちょっと望み薄ですね。(>_<)キーワードの自動リンクもそうですね。アイディア先にコメント有難うございます。

UnknownUnknown 2007/02/25 08:37 Hello! It is interesting site. Keep working!

<a href=” http://autoinsurance.d3ald.info/auto-insurances-quote.html ”>auto insurances quote</a>
<a href=” http://insurance.d3ald.info/discount-auto-insurances.html ”>discount auto insurances</a>

Thanks!

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050903

2005-09-02 無駄なライブラリ? part2

[][][][][]クズライブラリ万歳!! クズライブラリ万歳!!を含むブックマーク クズライブラリ万歳!!のブックマークコメント

http://d.hatena.ne.jp/studiokingyo/20050828#p1

で、書いたことですが、リンクしてくれた方がいらっしゃった模様。

http://d.hatena.ne.jp/falseonline/20050906

で、有用な引用を示してくれた。

http://d.hatena.ne.jp/winebarrel/20050906#p1

にて、

使わないのであれば、それはそのライブラリがクズだからです。

以上!

dKingyo Utility Toolkit Projectはクズ認定!!

もうすこしでクズのバージョン2をアップできますよ^^

よろしくぅ!(爆)

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050902

2005-09-01 2005年度9月用備忘録

[][][]2005/09用備忘録 2005/09用備忘録を含むブックマーク 2005/09用備忘録のブックマークコメント

*1:ちょっと調べてみたら・・・むぅ。できなさそぉ^^;

*2:もちjoke

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050901
 | 
Program | Debug | dKingyo Utility Toolkit | library | D言語 | 御本とか | 備忘録 | テクニック | WayBack | 格言 | 英語 | 他力本願 | news | software |

デースケドガー
Connection: close