April 01, 2007

携帯のメモリが消えました

[Info]

ネタではないです。3月の上旬頃に携帯の電話帳が全て消えました。当時はトモダチ0人でした、現在徐徐に回復中です。もし僕の携帯のメールアドレス知っている方がいましたら、連絡くださると嬉しいです。

どうして今まで言わなかったのかというと、ネタと思われるかもしれないこの日を待っていました、ネタではないですよ、本当ですよ(笑)

※おまけ
「でも、エイプリルフールなんでしょ?」
「全然違うよ。全く関係ないよ。」

※※ますます胡散臭いですが、携帯メモリ消えたのは事実です。

23:55 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (4) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/557

April 06, 2007

リワーク用ホットエアー装置 WHA300

リワーク(電子部品の半田を取り外したり、再び付けたりする作業)用の熱風が排気されるHot Air Rework Systemというものを購入してみました。この手のものはホビーユーザから見ると高価(5万円以上)だと聞き及んでいますが、ネットで探してみるとたまたま安いものがあったのでつい手を出してみたくなりました。

購入したのは半田ごてで有名なWellerブランド(日本だと代理店はゲスコ)でWHA300という製品です。送料込み、中古(だと思われる)、先端ノズルなし(これは元々別売りらしいです)で約150ドルでした。付属していない先端ノズルですが、DigiKeyで一部のノズルについてのみですが購入できることを確認しました。

購入したのはalltronicsというところで、機能的に問題がなければ非常にいい買い物ができたと考えています(あまりにも安いので結構賭けです)。届くのが楽しみです。

Wellerのホットエアー装置は、『実験室で使える表面実装型部品のリワーク手法』という記事でお勧めとありました。何をしようとしているかはこの記事から大体想像ができるかと思いますが、今まで半田ごてでなんとか凌いできた32ピンの某BGAパッケージの半田付けを楽に行えるようにしたいと考えています。購入したWHA300はラインナップされているノズルから判断するに主にQFP用で、BGA用ではないようなのですが、ホットエアーでBGAパッケージというと、LinuxザウルスのSDRAMの増設をされている先人もいらっしゃるので、高確率でやろうとしていることは成功するのではないかと考えています。

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/558

April 10, 2007

GPartedでHDD丸ごとコピー

年度の切り替わりということもあり、パソコンが新調されました。そのため旧PCのHDDの重要なファイルを新PCに移し変えるという作業が発生したのですが、いちいち必要なファイルを探して、新HDDに移すとなると移し忘れが非常に怖いので、ここは新しいHDDを買ってきて丸ごとコピーという作戦でいくことにしました。
そこで今回は、実行したHDDの丸ごとコピー作業の記録を残しておこうと思います。

HDDの丸ごとコピーとなると、なんらかのソフトウェアを使う必要がでてきます。市販どころで有名なのはNorton先生などがあるようですが、当然今回の作業は一回こっきりのものなので有償製品を使う義理はありません。いつもどおり、無償で行きます。

対象のHDDの容量は80GBで、OSはWindows2000を使っていました。ということでパーティションはNTFSフォーマットです。前述の有償ツールはほとんどNTFSに対応しているようですが、無償のフリーウェアとなるとなかなかそうもいかないようです。しかし諦めることなく、検索を続けてみました。
方法はいくつかあるようですが、その根底にあるものは、NTFSを認識できるLinux系のOSをCDブートし、ddコマンドでコピーでした。しかしながらddコマンドでコピー元とコピー先を間違えた日には全消ししてしまいますので、できればコマンドはさけGUIで操作をしたいと思います。

探してみるとGPartedというパーティション操作用のGUIソフトがあることがわかりました。しかもCD起動用のイメージ(GPartedダウンロードページのLiveCD)も提供してくれています。
あとは簡単で、新しいHDDを旧PCに増設、CDブートでPCを起動すれば、Linux起動後にGPartedというソフトが立ち上がります。あとは直感的な操作でOKで、具体的には新HDDにパーティション作成をした後に、旧HDDのパーティションをコピー、新HDDの新しく作成したパーティションにペーストしました。

作業後に、新HDDを新PCに付け替え、起動しファイルが読めることを確認しました。おそらく正常にコピーが完了したのだと思います。GPartedの作業の最中になぜか数回エラーがでて、リトライを手動でしたのですが、結果オーライということであまり気にしていません。

最後に備忘録ですが、NTFSということなので新PCに入っている別のOSで、コピーしたファイルの所有権やアクセス権がめちゃくちゃになっていました。ファイルを扱う前に、複製でできた新HDDの所有権やアクセス権を再設定したほうがよいようです。

23:13 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/559

April 16, 2007

mallocは関数の中ですべきか

C言語の行列ライブラリを訳あって書いていました。その中でふと思ったのが、今回の記事の表題にあるとおりで、結果を引数として指定されたポインタを通じて返す関数では、関数内でmallocするべきか否かという宗教じみた話です。

このことは特に、関数が場合によって異なるサイズの配列を返す場合で問題になると思います。
例えば、結果を格納する場所をポインタで引き受け、内部でmallocによって割り当てを行う関数は次のようになります。

void caller_func(){
    char input;
    char *outputs;
    int number_of_outputs;
    /* input に対して何か処理 */
    callee_func(&input, &outputs, &number_of_outputs);
    free(outputs);
}

void callee_func(char *input, char *outputs[], int *number_of_output){
    *number_of_outputs = (int)(random() * 100);
    *outputs = (char *)malloc(sizeof(char) * number_of_outputs);
    /* (*outputs)[i] に対する何か処理 */
}

mallocを関数の中で使わないとすれば、外で大きめのメモリを確保して渡すことになります。

void caller_func(){
    char input;
    char outputs[256];
    int number_of_outputs;
    /* input に対して何か処理 */
    callee_func(&input, outputs, &number_of_outputs);
}

void callee_func(char *input, char outputs[], int *number_of_outputs){
    *number_of_outputs = (int)(random() * 100);
    /* outputs[i] に対する何か処理 */
}

どちらがスマートでしょうか。入力と出力の関係が常に固定、あるいはそこまでいかなくとも予想が付くのなら、関数の外で大きめのバッファを用意するのがメモリリークの心配もなく良いと思います。しかし、文字列処理など一体最大の大きさがどの程度になるかわからないという場合は関数内でmallocという方法にも一利あると思います。

そこで師匠であるA氏に相談したところ、Cライブラリに沿うようにすれば、ということでした。これはmallocするもしないもどちらにも対応するようにする方法で、引数を見てNULLが入っていたらmallocでメモリを割り当てて、そうでない場合はmallocしないでバッファが外で確保されているとして処理する方法です。例題でいうとmallocを使う版において*outputsでスイッチにすることに相当し、コードで書くと次のようになります。

void callee_func(char *input, char *outputs[], int *number_of_output){
    *number_of_outputs = (int)(random() * 100);
    if(!(*output)){*outputs = (char *)malloc(sizeof(char) * number_of_outputs);}
    /* (*outputs)[i] に対する何か処理 */
}

なるほど、これなら使い分けられます。

23:32 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (2) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/560

April 20, 2007

The Piano It's me

[Music]

The Piano It's Me (初回限定盤)

のだめ(アニメ)のOPが良かったので、Suemitsu & The Suemitsu(リンク先は音が出るので注意)の1stアルバム『The Piano It's Me』を買ってみました。軽快なピアノっていいですね、自分の中ではかなり当たりでした。特に3トラックの『100 Strawberries』と14トラックの『Allegro Cantabile』がいいです。

興味がある方は、Stage6にある『Allegro Cantabile』のPVもどうぞ(動画が表示されない場合はCtrl+F5)。ピアノがかなり勿体ないことになっていますが。

23:24 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/561

April 23, 2007

Super Sylphide 進捗状況(3) -- サーボ用基板

オートパイロットシステム Super Sylphideですが、サーボとのインターフェイスをなす部分を作りました。実はこの先にFPGAがあって、そちらの方が本当の意味でサーボとのインターフェイスを担当するので、単なるサーボ用基板という名前にしておこうかと思います。

sylphide_Servo_IF_top_brd.gif
sylphide_Servo_IF_bottom_brd.gif

何のことはない、バススイッチ、5Vと3.3Vの双方向レベルシフタ(FPGAが3.3V)、あとC8051F530が載っているだけです。C8051はサーボの8chのパルス幅を監視し、オートパイロットがフェイルした際に手動に切り替える用に載っています。
こういう用途にはPICが適当だと思いますが、PICを載せてまともに使うとすると外付けでセラロックを載せる必要があり面積がかさみます。加えて、SMDタイプのPICの入手性を考えると、意外と高価で、DigiKeyでC8051の値段と同じぐらいでした。そこで少し豪華すぎますが、使い慣れた8051系でいくことにしました。

Eagleの回路図基板アートワークを置いておきます。詳しいことが知りたい方は是非見てみてください。Olimexで製造できるよう10milルールで作成してあります。

※その後、DSPによる開発がスタートしました。

00:48 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (2) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/562

April 30, 2007

アルビレオとエール

[Timely]

先日、高校の友人の結婚式に招待されてきました。新婚さん夫婦にはとても恐縮ですが、参加した観客のほうがとても盛り上がってしまったような気がします。ということで、そのときのことを記念に日記として残しておこうと思います。
本当に個人的な話なので、いつも見にきてくださっている皆さんで関係のない話でしたら申し訳ありません。

続きをどうぞ。

続きを読む "アルビレオとエール"
13:48 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/563