2011年6月29日水曜日

はやぶさ 観てきたよ

元々はプラネタリウム向けに作られた映像作品

ぼくは映画館で見てきました

さすがに500円(映画は1000円とか)だけあって安っぽさは否めないけど
面白かったよ
ただスクリーンが平面だから映像が歪んで見えたりとかするのが問題かなぁ

あと一般向けの資料映像みたいな感じ

でも見て損はないと思いますよ!


全体評価 :★★★★☆(4/5)

2011年6月22日水曜日

涼宮ハルヒの消失のアレ

ちゃんとピコピコと文字が出てくる
フロッピーも買ったしおそらくFD起動できるマシンも何台かあるんだけど
Win7にFDDが搭載されているわけもなく
C#で書いた

2011年6月17日金曜日

Netduinoで温度計

Netduinoで温度計を試してみました
使った温度センサは
MCP9700というもの
秋月で売ってます

さて
ソースコード↓

using System.IO.Ports;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;

namespace NetduinoPlusApplication1
{
    public class Program
    {
        public static AnalogInput an = new AnalogInput(Pins.GPIO_PIN_A0);

        public static SerialPort serial1 = new SerialPort(SerialPorts.COM1, 9600, Parity.None, 8, StopBits.One);

        public static void Main()
        {
            serial1.Open();

            for (; ; )
            {
                byte[] bu = new byte[1];
                serial1.Read(bu, 0, 1);
                if (bu[0] == (byte)'S')
                {
                    string s = (((an.Read() * 0.00322265625) - 0.5) * 100).ToString();
                    while (s.Length > 6) { s = s.Substring(0, s.Length - 1); }
                    s += "\r\n";
                    SerialWrite(s);
                }
            }
        }

        public static void SerialWrite(string text)
        {
            byte[] data = new byte[text.Length];

            for (int i = 0; i < text.Length; i++) { data[i] = (byte)text[i]; }

            serial1.Write(data, 0, data.Length);
        }
    }
}

COM1に S (半角大文字のエス)を受け取った場合に温度データを返します

Netduinoの場合
0Vが0 / 3.3Vが1023 を返します
使用した温度センサは0Vの時に0.5Vを出力し (0Vじゃなくて0℃です:2011/06/22)
温度が1度上がるごとに0.1V上昇するので
(((アナログ数値 * (3.3 / 1024)) - 0.5) * 100) == 温度
となります
例えば220が出てきた場合
((220 * (3.3 / 1 024)) - 0.5) * 100 = 20.8984375
となり 約21度ということです

SerialWrite関数は文字列を渡すだけでシリアル送信するようにしています

また送信する文字列に\r\nを含めることによりPC側のプログラムを簡略化しています


PC側は今回はコードを載せませんが
serialPort1.Write("S");
string data = serialPort1.ReadLine();
としておけば文字列dataに温度データが入ります
ただしButtonをトリガにした場合正常に接続されていないとフォームが固まる可能性があります
(試してはいません)

以前にこのブログで書いたようにC#でTwitterにポストするコードを組み合わせれば
温度を計測しTwitterにつぶやくことも可能です
ただし気象庁から許可されていない計測機器を使用して不特定多数に公開した場合罰せられる場合があるようですので各自自己責任でお願いします


温度センサのデータシート
http://ww1.microchip.com/downloads/en/DeviceDoc/21942e.pdf
(日本語版もありますがパッケージが違うのであまり役に立ちませんでした)

1ピン Netduino3.3
2ピン NetduinoA0
3ピン NetduinoGND
に接続します
また1ピンと3ピンの間にパスコン(0.1μF)を接続することが推奨されているようです

2011年6月16日木曜日

TLUE 実践編

TLUEを実際に試してみるよ!

まず雛形コード↓

// ここから
#include <iostream>

int main (int argc, char * const argv[]) {
bool flag = true;
printf(flag == true ? "" : "");
printf("\n");
    return 0;
}
// ここまで

これのprintf(flag == true ? "" : ""); のtrueを書き換えて試します

まずは普通に
printf(flag == tlue ? "" : "");
って試してみる

結果↓
やはりダメらしい

ということで
1個目 #define を試す!

コード↓

// ここから
#include <iostream>

#define tlue true

int main (int argc, char * const argv[]) {
bool flag = true;
printf(flag == tlue ? "" : "");
printf("\n");
return 0;
}
// ここまで

というコード

#define tlue true

が書き加えられています

結果


 Last login: Thu Jun 16 20:34:17 on ttys000
 ():~ ()$ /Users/()/Documents/Xcode/TLUE_2/TLUE/build/Debug/TLUE ; exit;
 真
 logout
 
 [プロセスが完了しました]


となりました
ちゃんと動作しています


さて
2個目 bool tlue = true; を試す!

コード↓

// ここから
#include <iostream>

int main (int argc, char * const argv[]) {
bool flag = true;
bool tlue = true;
printf(flag == tlue ? "" : "");
printf("\n");
    return 0;
}
// ここまで

というコード

bool tlue = true;

が書き加えられています

結果

 Last login: Thu Jun 16 20:32:08 on ttys000
 ():~ ()$ /Users/()/Documents/Xcode/TLUE_2/TLUE/build/Debug/TLUE ; exit;
 真
 logout
 
 [プロセスが完了しました]

となりました
これまたちゃんと動いています

次 最後です
3. tlue() を試す!

コード↓
// ここから
#include <iostream>

bool tlue(void);

int main (int argc, char * const argv[]) {
bool flag = true;
printf(flag == tlue() ? "" : "");
printf("\n");
    return 0;
}

bool tlue() { return true; }
// ここまで

というコード

bool tlue() { return true; }

が書き加えられています
これはちょっとルール違反かもしれませんが
(tlue ではなく tlue() としているため)
一例としてご容赦の程を。。。

さて例のごとく結果です

 Last login: Thu Jun 16 20:39:55 on ttys000
 ():~ ()$ /Users/()/Documents/Xcode/TLUE_2/TLUE/build/Debug/TLUE ; exit;
 真
 logout
 
 [プロセスが完了しました]

これもちゃんと動いているようです


今回は
1. #define tlue true
2. bool tlue = true;
3. boo tlue() { return true; }
の3個を試してみました
どれもちゃんと動くようです
自分はこれしか思いつきませんでしたが
「こういう方法があるよ!」という場合はコメントなりTwitterで @rian_y に飛ばしてもらうなりで教えてください!

更新情報



とりあえず更新したよ

変更点
計算をintからfloatに変更して小数点以下も扱えるようにした
これによってMbpsとかの計算も一応できるようになった

予想できる不具合
浮動小数点なので多少の誤差があるかもしれない

浮動小数点はもともと科学的な計算をするものだからある程度の誤差は許される
厳密な計算じゃなくて
参考程度に使ってください

マイコンとかの転送速度を計算するソフト

ちょっとした必要に迫られて転送速度を計算するアプリを作ってみた
転送速度(bps/kbps/Mbps)とストップビットの数(1個or2個) データビットの数(1bit~1024bit) パリティの数(1個or2個)を入れれば色々と計算してくれる
あと何バイトか それが何セットか を入れればそれも計算してくれる
// パリティは1or2じゃないです 0or1です  2011/06/16

ベータ版なのでバグあるかも&いろいろ使いづらいけど
とりあえずせっかく作ったし置いとく




例のごとく何か問題が起きても自己責任で

バグがあればコメントに書くなりTwitterでリプ飛ばすなりしてもらえれば
暇なときに更新しておきます

動作には.NetFramework4以降が必要
と言っても現在(2011/06/16)は4しか出てないはず
WinVista/7には付属してるはずだけど
XPとかの場合はMSから落としてください

あと注意事項
すべての数値はおおよその数値なので
精度はほとんど期待しちゃダメです
一応メガビットとかついてるけど
多分全部0になるとおもう
というかなった
いずれ対応します


更新情報
プログラムの一部を変更しました
詳しくは↓投稿を
http://hima-tubusi.blogspot.com/2011/06/blog-post_16.html
なお上記ダウンロードリンクは使用しないほうが無難です

2011年6月15日水曜日

TLUE FALSE

http://togetter.com/li/148313

TLUEは変数として使われちゃうから
if (flag == Tlue) { ... }
って使うことはできない
じゃぁどうするか

1.プリプロセッサ
2.変数を作る
というのがパッと思いつく感じ

1の場合
#define Tlue True
とコードの最初に書き加える

2の場合
bool Tlue = True;
と適当なところに書き加える

他にも有ったら追加します

※Trueは書かなくたっていいじゃん っていうツッコミはなしでお願いします
/*
 * if (Flag == True) { ... }
 * と
 * if (Flag) { ... }
 * は同じ動作をする
 */

/* **************************** */

public static bool Tlue() { return True; }
という方法も使えるかも?
if (flag == Tlue) { ... }
ではなく
if (flag == Tlue()) { ... }
としないとだめだけども

/* **************************** */

ここに書いてある方法は一部を除きC#前提です
defineはC#だとうまくいかないっぽいけど

USB機器羅列

このPCは結構USBポート多いと思うんだけど
それでもハブ使っている
いったいどれだけ使ってるのか
羅列してみる


  1. ワイヤレスマウス
  2. ワイヤードキーボード
  3. ワイヤレスキーボード
  4. シリアル変換 1
  5. シリアル変換 2
  6. スピーカー電源
  7. 地デジチューナー
  8. キャプチャボード
  9. ワイヤレスLAN
  10. Bluetooth
  11. USBminiB 1
  12. USBminiB 2
  13. microUSB

ざっとこれくらい
このPCは標準で前面4+背面6に拡張で4ポート追加してあるから14ポート
ぎりぎりだね…