タグ:プログラミング ( 8 ) タグの人気記事

 

はて? これはバグ?

今、研究で信号処理のプログラムをC言語で書いている訳なんですが、ちょいと私の思っていたのと違う動作をしたコードがありました。
ハードウェア依存型のFFTライブラリを使っており、その関数に利用する係数変換行列を配列で用意しているんですが、FFTのサイズがもう決まっているので最初から宣言しておくことにしました。
で、色々な関数でFFT関数を使い回すのでグローバル変数として宣言。というか、その係数行列を作成するジェネレータがライブラリとともに配布されていたので、それを利用して計数行列を宣言したんですよね(そのジェネレータプログラムはCの文法で配列を生成してくれる)。作成された配列はconst宣言がされておりました。まーFFT中に回転行列の値が変わることはないだろうと思ってさして気にもしていなかったんです。
回転行列は
const float w[2 * 1024]=
{ ・・・・
};
って形で宣言されていたので、FFTを利用する別ファイルにて
extern const float w[2 * 1024];
と宣言した訳なんですね。そしたらなんとFFT関数の方が引数にconstがついておらず、型が一致しませんというエラーが。
なんでFFT関数を作ったメーカーの作成したジェネレータで用意した回転行列にconstついてるのに使えねーんだと思いつつ、
extern float w[2 * 1024];
と宣言したらコンパイル通っちゃいました^^; まぁFFT関数実行前と実行後で回転行列の値をチェックしてみましたが、変更された形跡はなかったのでまぁ特に困ることもなかったわけですが、気持ちは悪いですよねぇ・・・。
で、ここで気になることが。元々宣言したところではconst修飾子が付いているためにこの配列の値を変更することは不可能ですが、extern宣言している方ではconst修飾子をつけていないため、値を変更しようとするコードを書いていても、コンパイルエラーは出ないのではないか。
で、試してみたところ、やっぱりエラーは出ませんでした・・・。おまけに中身書き換えられてたし!
それって、Cの仕様として果たして正しいんだろうか・・・。それともバグかしら。確かこのコンパイラはANSI/C準拠だったと思うんだけどなぁ・・・。
それとも配列へのconstはポインタが書き換えられないようになっているだけで中身の保護はまた違う書き方をしないといけなかったっけなぁ・・・。なんかそのルールは見覚えがあるけれど、今ひとつはっきりと思い出せない・・・。
まー今はそれの検証をしている余裕はないので放置ですが、ちょっと気持ち悪い^^; Cってパワフル過ぎるんだよなぁ・・・。けどハードウェアへの実装だからCじゃなきゃアセンブラで組めって言われるし、そりゃとてもじゃないけれど無理だ;;
とりあえず早くバグを取り除いて結果を出したいー!!!><
ただいま激しく迷走中w
[PR]

  by code_air_edge | 2006-09-15 01:49 | その他諸々

Y!Widget日本版

Y!.co.jpからも正式にY!Widgetがリリースされました。まぁ.comの方のY!Widgetも日本語化はされており、メニューなどはきちんと日本語だったのでクライアントそのものに目新しい点はほぼない(と思う)のですが、その周辺がしっかりと日本語化されてました。
まずウィジェット配布サイト。以前は当然英語サイトだったわけですが、日本語サイトが用意されました。とは言ってもどうやらメニューを日本語化したとか言うことではなく、完全に日本オリジナルのものとしたようで、ウィジェットは共有していませんでした。なのでウィジェットが充実するまでは静観かもですね^^; 今のところ数はかなり少ないです。逆に言えばクリエイターの方はアピールチャンスかも。
また、ウィジェット作成者には朗報。Y!.comにて英語のリファレンスは公開されていましたが、Y!Widgetが日本語化されるにあたり、リファレンスも日本語化されてました。てっきり英語のリファレンスにリンクを張っているだけかと思いきやしっかり中身が日本語化されていてびっくり!英語の方のリファレンスはちょろっと読んだのですが、やっぱり日本人、断然日本語の方が読みやすいので暇なときに読んでみようかと思ってます。
まーY!Widget用のWidgetを作成できるほどのスキルは持ち合わせていないのですが、興味はありますしねぇ。中間発表終わったら読んでみるカー。
[PR]

  by code_air_edge | 2006-09-06 10:47 | その他諸々

なるほど、なるほど。

これまでプログラムを色々と作ろうとして、どーも納得できずに腑に落ちないでいることばかりだったのですが、その原因に割と最近になって気がついたり。
プログラムを組む際、大まかなプロットを考えます。で、いくつかのモジュールに分け、そのモジュールごとに構成する訳なんですが・・・、まず、全体のプロットを考える段階で先見性に欠けるというか、モジュールを作っていく度に仕様が変わってしまう。作りたいプログラム全体を俯瞰しているつもりだけれどその繋ぎ目を上手く把握できていない。また全体で必要な構成要素を把握し切れていない。なので仕様変更が増える。
どうにかこうにかモジュール群を構成し、組み合わせる。すると仕様変更のせいで最初の方に作ったモジュールと後の方に作ったモジュールが上手くかみ合ってくれなかったりする。
ってな感じでどうも初期段階からつまずく始末。なんで初期から失敗してんのかな~ということの原因を追及してこなかったためこうずるずると今の段階まで引きずってしまったのですが、最近になってようやく辿り着いた答えがあります。
早い話、私は「知らなすぎる」のだと。
プログラミングで実現したいコトについて、私が仕様を知らなすぎるんですな。言語の仕様も必要な部分についてはある程度理解した、IDEやデバッガなどのツールもある程度扱えるようになってきた、後は何が足りないんだろう、なんて考えていたけれど、根本的なところが足りてなかった・・・。
プログラムを組んで何かを実現しようとする際に、それがはっきり見えていなければそりゃ組めるわけもないわけで。プロット段階で必要な構成要素を把握できてない訳だよなぁ・・・。
プログラムを組んでいくうちに理解できるというか気付くことも多々あるけれど、やっぱりもっと大賞をよく知ることが大事だな、そう思いましたね。研究のプログラムであれば今はもうさらさらさらっと組めますし(効率や組み方にまだまだ難があり、すごく修正したいけれど)。それは単純に1年掛けて研究してきた内容だから頭に細部までたたき込まれているからだと思うのですよね。なので組んだプログラムに対してどこをどう修正すべきか、あるいは最初から書き直すならどういう方向で書き直すかなどは割とすっと浮かんできます。
けれど趣味で何か組みたいなと思っても何も浮かんでこなかったり。他のことを何も知らないからなんですよね。何かのフロントエンド程度ならあんまり考えることもないので組めますけれど・・・、1から組まないといけないモノについてはプロットすら浮かんでこない状態。
いろんなプログラムを組みたいと思ったらいろんなことを知らないといけないのだなと痛感。せっかく世の中にオープンソースプロジェクトがごろごろと転がっているんだし、やっぱり他人のプログラムを見て色々と得ることも大事なのかもな~。
まぁいきなり巨大なプログラムを読もうとしたって理解できないだろうから、適度な量のソース解析から入っていきたいモノだけれど。
そーいえば何だったかなぁ、雑誌かWebだったか忘れたけれど、数値解析の手法について勉強するためにgnuplotのソースコードを解析した、なんて話をどこかで読んだけれど、せっかくソースがあるんだからそれを使わない手はないってことなんだろうな。
時間は掛かるけれど、それを避けてちゃ成長できないだろうしなぁ・・・、自分にちょうどいいプロジェクト、見つけていこうかな。
[PR]

  by code_air_edge | 2006-09-04 00:30 | その他諸々

Qtって扱いやすいなぁ・・・

QtというとC++のツールキットで、GUIに特化しているわけではないけれど、私が今まで触ってみたGUI用ツールキットの中で一番分かりやすいんだよなぁ。シグナル・スロットの関係がすごくすっきりしてる。
で、Windowsでは主に用いられるのはVC++かVB、あるいはVC#ってところでしょうか。MFCは残念ながら触ったことがないのですが、.NET Frameworkは私にはよく分かりませんでした^^; イベントにどんなモノがあるかを知らないので(大体の想像は付くし、インテリジェンスモードも付いてるけど)とっつきにくいというのもあったり。このあたりは慣れの問題もあるのかなぁ。
JavaのSWTはまだほとんど触っていないので何とも言えず^^; これもまた.NET Frameworkが扱えたら扱える気はする。というか普通はこういったコンポーネントを先に覚えるモノなのだよな・・・^^; 先にQtを覚えてしまったから他のとちょっと勝手が違うので戸惑ったり。
まぁ複雑なことをしないのであれば使うイベントも数が知れてるし、慣れていこうかな。DirectXとかだととてもじゃないけれど触れないけれど^^;
とりあえずは簡単なフロントエンドから作ってみようかな~。
[PR]

  by code_air_edge | 2006-08-13 01:20 | その他諸々

すげぇなぁ・・・

7月版 新ファイルシステム「ext4」開発開始か
はっきり言って内容はほとんどちんぷんかんぷんなんですけれどね^^; こういうのを見てると結構楽しいんですよ。なるほどカーネル開発の最先端ってことで。意外とシステムコールにもバグが入り込んでるんだなーとか、新しい機能を盛り込むことに依る過去の遺産との兼ね合いの難しさとか。ほんと、OSの核となる部分ですから実にハードウェアより。というか新しく実装されたCPU命令に対するコマンドを実装って、CPUの仕様書を読んでるのか!すっげーなぁ!って感心しきり。 英語だってこともあるんですが読んでみてもさっぱりだったんですよねぇ。新たに追加された機能についての言及があるわけですが、
「で、これによって何がどういう風にお得になるんだろう・・・」
ってことが理解できないんですよねぇ^^; 知識不足も大いにあるんですけれど。でも分からないなら分からないなりにこういうコラムは読んでて楽しいです。世の中にはすげーハッカーがいてその人達の努力によってLinuxとかフリーウェア、ドライバが作られてるんやなーと。願わくば自分もその一員となってみたいという思いはありますけれど、いやはや知識も能力も足りてませんな^^;
トップクラスの技術者の方々はどうやって知識を得たのかなぁ。私と同年代かそれより若い世代がたくさんいろんなソフトウェアを開発してたりしますけれど、Blogや雑誌のコラムを見ても「独学です」なんて書いてらっしゃるし。独学でもとてもじゃないが追いつかんよーw やっぱ注いでる時間が違うんだろうなぁ・・・。
いろんな言語はかじっているけれどまともに開発する能力がまだないんだよなぁ。そろそろ言語を色々と触るんじゃなくてアルゴリズムに注目していかないといけないか。夏休みのうちに色々とまた手を出していきましょうかねぇ・・・。
と、いつも思うけれどなかなかできないのよね^^; 頑張りたい!
[PR]

  by code_air_edge | 2006-07-24 22:43 | Linux関連

お、もうFC6情報が。

ふら~っとFedoraCoreのサイトへ遊びに行って、スケジュールを見てみたら、FC6のリリース予定が。予定では9/20となっているようですね。まぁまず間違いなく遅れる訳なのですが(ぇ、遅くとも10月までには出そうですね。test1は6月にリリースされるようですし、概要が楽しみですね。残念ながらKDE4がリリースされてませんから、それが搭載されることはなさそう。Qt4が出てから結構経ちますが、まだKDE4は姿を見せてくれません・・・。ポーティング作業とか難しいのかな。やはりメジャーバージョンを上げるとなると色々と難しいんだろうなぁ。
そーいえばFedoraもSUSEのXglみたいな3Dデスクトップの開発はしてたなぁ。Vistaにも搭載されるし、最近のトレンドなのかな? いち早く体験するならLookingGlassを使えばいいんだろうけれど・・・、最初は取っつきにくそうだw 慣れればかなり便利そうではあるけれど。開いたウィンドウを本を立てかけるかのごとくデスクトップ上に配置できるというのはデスクトップを有効に使うという観点からも理にかなってるし。ただそれなりのスペックじゃないときつそうですが^^; まぁ最近のPCは十二分に高い性能持ってますしね。廉価製品であったとしても十分動作はするんじゃないかしら。低いスペックでも十分動かせるだけの内容で動作させるか、ハイスペックをガリガリ使い込むような動作をさせるか。柔軟性に富んでる面でLinuxって割と有利だとは思うのだけれどなぁ。やはりネックはマルチメディアか。デスクトップ市場には普及しづらいか。 まぁ、IntelCPUのMacMiniがあれば何でも動かせるわけだけど;-) う~ん、MacMini欲しいなぁ(笑)
とはいえこのところの技術の進歩の早いこと早いこと。そろそろJavaは覚えたいな。文法はそんなに難しいわけでもないし、よー分からんのはinterfaceの使いどころか・・・。これ大事なところではあるんだけどなー;; イマイチ使いどころが見えてこない。慣れの問題かしら。後は大体しっくり来てるんだけれど。
Javaと並行してこのところさぼってたUMLもやろうかな。開発効率は上がりそうだ。やれるのも今のうちだし。
と、研究から逃れるいいわけを探してみたりOrz あーそろそろ結果出さないとやべぇよぉ;;
[PR]

  by code_air_edge | 2006-05-21 23:31 | Linux関連

ファイル整理しました

ずっと放置していてカオスと化していた音楽ファイル保存用のパーティションを思い切って整理しました。
まず手始めに音楽ファイルの中でもう聞かないだろうと思われる曲やエンコード用に作成されたwavファイルの残骸などを消去。と、いっても30個も無かったのであまり大勢には関係なかったですが^^; 続いて、せっせとタグ打ち。mp3を作成し始めた頃は何も知らなかったので、タグなんて全然設定していなかったんですよね。そういったタグ情報のない音楽ファイルが5~60曲あったので、これが一番大変だったかな・・・^^;
なぜファイル整理なのにタグ打ちなんてやってるのか。そこにはちゃんと理由があるんですよ、えぇ。ファイル整理に使うツール、それがかの有名(?)な、「iTunes」!!! iTunesはiPodと連携して使うだけが能じゃないんですよ~(ってどこの回し者だ)。iTunesではライブラリに登録されたファイルをiTunesフォルダに”タグ情報を基に”分類してコピーしてくれる機能があるんですよね。iTunesフォルダとして設定したフォルダ以下に、アーティスト名のディレクトリを作成。さらにその下にアルバム名のフォルダを作成し、そこに楽曲を保存してくれます。
ってなわけで、頑張ってタグ打ちをしてたわけなんですね。iTunesに自動で振り分けてもらうために。で、タグ打ちも終わり、iTunesのライブラリにパーティション丸ごと指定してコピー作業が終わるのを待ってたんですが、途中で空き容量が足りなくなってしまい強制終了^^; 致し方ないのである程度固まりをコピーし、コピーが終了したモノから削除していくという方法でコピーを完了しました。
無事作業も終了し、音楽パーティションがとてもすっきりしました! そういえばiTunesのこの機能を音楽ファイルじゃなくて通常のファイルに適用してファイル整理に利用しているとか言う例もどっかのサイトで紹介してたなぁ・・・。そういう整理方法も便利でよさそう。
「このディレクトリにファイルを放り込んだら、勝手に拡張子などから判断して適切な場所に保存します!」っていうようなデーモンプログラム組んだら面白いかな? ちょっと考えてみてもよさそう。 うん、暇なときに構想を練ってみよう(暇なんて見つかるかしら・・・?)
[PR]

  by code_air_edge | 2006-04-30 13:02 | その他諸々

さすがに混み合ってるや

学部の4回生のときは授業なんてほとんど取ってませんでしたので朝はゆっくりできたんですが、今年から院の1回生ということで授業が結構詰まってます。で、いくつかの不幸(?)も重なったりして、前期は1週間ずっと朝1コマ目から授業が入ることになってしまいましたOrz 朝早く起きるのがつらひ・・・;; 今日久々に朝早めの電車に乗ったのですが、高校生と会社員のラッシュにまともにかち合う時間帯なので下りの路線にもかかわらず寿司詰め状態。朝からげんなりして行きましたよ、えぇ。
しかも今日は大雨。駅から大学まで自転車で行くわけにも行かず、バスのターミナルへ。で、例によって例によりこの時間帯は混んでいる・・・・かと思いきや案外空いてました。というか、乗る人が多い分、臨時直通(ってまぁバスの時刻表に書いてないだけで平日は毎日その時間に大学への直通が出てる)が結構何本も出てるので人が捌けやすいんですよね。おかげでバスはゆっくりできました。
授業のつまり具合で言うと火曜日が一番詰まっているので疲れますね・・・。バイトが月水でよかった^^; 月曜と水曜は比較的授業が少ないので。 でもそろそろ研究に本腰入れないと大変なことになりそう・・・。プログラムを久々に考えたりしてます。一度組んだプログラムではあるのですが、DSPに実装するため今まであまり考慮していなかった(ぁ)効率性や速度も考えて組まないと行けないので、設計段階から考え直してます。 でも私はまだ恵まれてるかなぁ。DSPとはいえ浮動小数点が扱える上にC/C++で開発してもよいというキットでしたし。今年卒業していった先輩はアセンブラで組んでらしたしなぁ。アセンブラはとてもじゃないけれど無理だ^^;
というわけでそろそろエンジン掛けて頑張ります。まぁ、いつまで続くか分からないけれど^^;
[PR]

  by code_air_edge | 2006-04-11 23:30 | その他諸々

SEM SKIN - DESIGN by SEM EXE