データ通信といえばPHS。
PHSといえばWILLCOMのCFカードなわけですが、HONDA ELECTRONのAH-H403Cという機種は設計の欠陥(だと僕は思っていますが・・)により、アンテナを紛失しやすい。
ちょっと力をかけただけで取れてしまうので、鞄の中などでいつのまにか行方不明になってしまうのです。
>※2 AH-H403Cのアンテナは、本体破損防止のため無理な方向に力が加わると外れる構造になっております。(上記サイトより)
だそうですが・・。
気をつけていたのですが、去年末の冬コミでついに紛失。
アンテナの機能は重要だったようで、アンテナ無しだと明らかに感度が悪いです。
ちなみにアンテナだけ購入する事も可能で、お値段は\1,155+振込み手数料。
さすがにもったいないので機種変更しようと思ったのですが、そろそろ新しいサービスに対応した機種が出てきそうなので、今機種変更するのは得策ではない・・。
だいたいアンテナごときで1000円以上もするって高いですよねえ。
こんなの針金でもつけておけばOkちゃうんか。
ってことで自作してみる。
まずアンテナの長さを計算する。
アンテナは長ければ良いというものではなく、波長ごとに適切な長さというものがある。
よく用いられるのは4分の1波長。
これにアンテナの形状による収縮率考慮してアンテナを作成する
lをアンテナ長、λを波長、cを光速、vを周波数とすると以下のような感じ。
PHSの周波数帯は1.9GHz。
というわけで実際に計算してみると以下のとおりになった。
・・・で、しっかりと計算したところで床に落ちてたゼムクリップを曲げて作成開始。
・・・3.94cm×収縮率。。。
定規がないので、目分量で曲げる。
「このやろ、このやろ・・」
ラジオペンチとかもなぜか見当たらないので、割り箸とかを駆使して曲げる・・んだけど、思った位置でうまく曲がらない。まぁいいか。
・・・。
・・・・・・。
・・・・・・・・。
よし完成!!!
基地局の電界強度一覧を出してみるとこんな感じでまぁ良いんじゃないでしょうか。
アンテナが無い場合と比べないと意味がないんだけど、外すの大変だし。。。
取り付ける前に測定すべきだった。。
>「第10惑星」は直径約3000キロで、冥王星(直径約2300キロ)より確実に大きいことがドイツ・ボン大学などの観測で確かめられた。
だそうで、これが正しいとすれば「惑星」と認められる事になりますね。
この惑星が見つかったのはつい最近。
太陽系の惑星も見つからないくらいだから、他の星系の惑星がほとんど見つけられないのも仕方ないですな。
この第10惑星(候補)、すごく距離が遠くて、太陽からの距離が97天文単位もあるらしい。
(「天文単位」は太陽から地球までの距離を1とする単位)
こういう天体の距離感って、太陽系内ですらほとんどの人はよくわかってない。
ちょっと気になったので書いてみる。(適当に計算しているので間違ったらすごくごめんなさい)
手始めに地球から太陽までの距離。
これは約149,598,000km(=1天文単位)。
すんごく遠いです。
この遠さをなかなか理解できないけど、とにかく遠いです。
光の速さでも8分19秒もかかります。
子午線上で正午ぴったりに太陽が真南に来るというのは嘘です。
それは8分19秒前の太陽の姿です。
例をあげてみましょう。
下のお椀を地球だとしますよ。。
ホントは12,756kmですが、ここでは2cmって事で。
そうすると、地球から太陽までの距離は本当は149,598,000kmですが、ここでは235mって事に事になります。
判りやすく例えると、上の写真の地球をJR秋葉原駅の改札に置いたとすると、太陽の位置はドンキホーテ秋葉原店あたりになります。。。
判りづらいですかそうですか。
図に書こうにも、地球の大きさを1ピクセルで表したとしても、太陽の距離は11728ピクセルも先なんですよね・・。
だから描けないの。
ね、遠いでしょ。
次に、最初の記事に出てた惑星の距離の遠さっぷりを検証してみましょう。
ご存知のように太陽系の惑星は太陽から近い順に、
水星、金星、地球、火星、木製、土星、海王星、冥王星、そして第10惑星・・・の順。
実際には楕円軌道なので太陽からの距離は一定ではありませんが、平均の距離って事で進めます。
今度は図に書いてみますか。
1天文単位を100ピクセルにして図を描いてみます。
ちなみにその時の太陽の大きさは約0.9ピクセル。
1ピクセルにも満ちません。
ちなみに地球と太陽の大きさを比べるとこんな感じ。
太陽でっかいですね。
で、1天文単位を100ピクセルとした場合の太陽から惑星までの距離の図。
模式図は横向きのが多いのですが、ページの都合で縦に描きます。
いきますよー。
・・・。
ごめん無理。
土星までしか描けなかった。
第10惑星は程遠いです。
仕方が無いので、上の図の10分の1で描いてみます。
今度は太陽の大きさが約0.09ピクセルです。。
いきますよー。
疲れた。
てか、第10惑星遠っ!!
こりゃ見つからんわ。
いつも遠出してるのでたまには近場を散策してみました。
名古屋市南区、旧東海道で名古屋の旧市街。
何十年か昔は活気のある所だったようです。
尾張地方というのは長い歴史を持つ深みのある土地柄でもあります。
南の方は今は寂れてますが・・・。
南区は地下鉄があまり通ってないのでダメなんでしょうね。
昔牧場とか山林だったような東部の方が今では栄えています。
特に目的もなく歩いたので少しだけ。
■笠寺観音
正式名は笠覆寺で、尾張三十三観音巡礼の第3札所(らしい)。
東海道沿いの古い寺で、創建は西暦736年。
節分の行事が終わった後のせいか、境内を車が走りまくっててキケン。
いろいろ生活感があって汚いし。
でもそういう観光地化してないところが本物っぽいとも言える。
ここって寺だよねえ。
なんか神社っぽい。
↓絵馬とか。
「復縁しますように」を後から追記したとしたら、、、
なんか悲しくなった。
↓おみくじまで・・・。
でもちゃんと名前入りオリジナル印刷。
この手のは「大吉」と「凶」の割合が異常に高い事があるから注意が必要だ。
・・・。
大吉なのに内容は全然良くないというのもなんかデジャブだ・・。
願い事・・・・出来ないようで危ないですが、あとでかなうでしょう
待ち人・・・・支障があって来ないようです
旅行・・・・・盗難に注意
商売・・・・・買うのは良くありません
争いごと・・・時がたたないと勝てないでしょう
転居・・・・・いかないほうがよろしいでしょう
お産・・・・・軽くないでしょう。用心してください。
病気・・・・・意外に重く長引きます
縁談・・・・・親類のさまたげがあってすぐにはまとまらないでしょう
・・・。
これは酷い。
・・・次。
■笠寺一里塚
江戸幕府が東海道を整備したときに1里おいた塚。
たしかに1里ごとに塚があったら判りやすいですな。
ちなみにここは江戸から88里らしい。
名古屋市内で残っているのはここだけとか。
■見晴台遺跡
だいぶ時代は古くなって弥生時代後期の遺跡らしい。
濠の再現コーナーは正直ただの溝にしか見えない。
いや、溝なのか。。
で、他には住居跡観察舎なるものが。
だぁれも居ない。
近くの小学生が学習にでも使うのかな・・。
あと、こっちが本来の正面だと思いますが、名古屋市見晴台考古学資料館。
特別展「昔はみんなエコライフ」という事で偽善的な匂いがプンプンしますが、ちゃんと見てみたらそれなりに考えて作ってるのが伝わってきました。
学芸員さんなかなか頑張ってると思います。
昔の生活なんて究極の消費社会なんですよねえ。
ただ人間の数がめちゃくちゃ少なかったからなんともなかっただけ。
今さら昔を見習おうなんて考えは間違ってると思ってる。
まぁこんな感じです。
あ、道の途中でにゃんこ発見しましたよ。
キレイだから飼い猫(推測)。
最近ソフトの話題がなかったので久々に。
DEPというのはWindowsXP XP2から使えるようになったセキュリティ機能で、コード領域以外からのプログラムの実行を抑制します。
要するにAMD OpteronのNX-bit(No eXecute bit)の機能をWindowsが対応したものです。
NX-bitはデータ領域とコード領域を区別するためのフラグで、データ領域からのコード実行をできないようにします。
何のことだか判りづらいですね。。。
この機能の主たる狙いはバッファオーバーフローによるクラッキングからコンピュータを保護する事です。
バッファオーバーフローが起こるというのはプログラムのバグが原因です。
そういう仕様だったとすれば仕様のミスです。
かつて「セキュリティ」なんて言葉が連呼されなかった頃のソフトウエアにはほとんどこの問題が入っていて、今でもWindows自体やIEでも頻繁にバッファオーバーフローの問題は見つかりますよね。
つまりそのくらい起きやすいミスなのです。
しかもこのミスは最悪の場合、悪意あるユーザーが任意のコードを実行する事が出来てしまい、結果的にコンピュータを乗っ取られます。・・・とマイクロソフトの説明を見てもよくわからんが。
まぁ、そういう時は実際にやってみるのが一番。
って事でバッファオーバーフローが発生するプログラムをわざと書いてみましょう。
ついでにDEPに対応したコンピュータで実行してみて、実際に実行が阻止されるか確かめてみます。
DEPを利用するためには、NX-bitに対応したハードウエア(CPU)が必要ですが、最近ではPentiumDやXeonなどのIntelのプロセッサでも対応しているものがあります。
ただしIntelでの名称はExecute Disable Bitです。
Intelの「プロセッサ識別ユーティリティ」で確認できます。
「ビット無効化の実行」・・・って明らかに日本語としておかしい。
Execute Disable Bitを直訳したんだろうな・・。
余談ですが技術系の日本語の資料は翻訳が不適切で返って判りづらい事が多いので英語マニュアルも必須です。。
気を取り直して、プログラムプログラム。
コード領域以外のメモリにコードを書き込んで、そこが実行されるようにすればDEP機能が働くはずです。
典型的なパターンといえば、バッファのサイズチェックミスかなぁ。
って事で以下のようなコードを書きました。
この関数はパスワードをチェックするもので、パスワードが正しければ1、間違っていれば0を返します。
でも省略してあるので絶対に0しか返ってきません。
このコードの問題は一目瞭然ですが、パスワードに26バイト以上を指定するとバッファオーバフローが発生します。
(正確には配列が4バイトのアライメントに置かれるでしょうから28バイトくらいまでは大丈夫かもしれませんが)
というわけでこれを利用して不正なコードを実行しましょう。イェイ。
そもそも上の関数が実行されるとき何が行われているのか。
まず関数を呼ぶ前に現在実行しているアドレスを保存しておく必要があります。
そうしないと、関数の処理が終わった後に元の位置に戻ってこれません。
というわけで現在の実行位置を表すeipレジスタの内容をスタックに入れます。
スタックはどんどん上に増えていく仕組みになってます。
図解するとこんな感じ。
最初にeipがスタックに積まれ、次にスタックの位置を表すebp、そして関数のローカル変数に使われる領域になっていきます。
関数が終了したときはその逆で、スタックからebp、eipを取り出して元の位置に戻ります。
さて、上の関数でいうローカル変数はbyTestBuffer[25]です。
25バイト(+アライメント)分の領域は自由に使えますが、その次にあるのはebpとeipです。
上の関数に長いパスワードを与えてバッファオーバーフローを起こさせればeipの値が格納されているメモリを任意の値に書き換えてしまう事ができますね。
eipの内容を書き換えると、例えば100という値に書き換えるとこの関数が終了したとき、CPUは100番地を実行しはじめます。
そこに実行させたいコードを書いておけば不正なコード実行成功です。
おめでとうございます。
という訳でお試しに以下のような呼び出し方をしてみました。
色々いい加減というか今みるとおかしいですが、テストって事で多めに見てください。。
PasswordCheck関数に不正な36バイトのパスワードを与えてます。
これぶっちゃけ書くの結構大変でした。。。
根気のない僕には手動アセンブリは辛い。
(ほんとはだいぶ前に書いていたんですが、めんどくさくて・・)
簡単に解説すると、[32]~[35]の部分がちょうどeipの部分になります。
関数が終了するとeipが0x0013fe90になります。
そうするとCPUは0x0013fe90番地を実行しはじめます。
ところがしかし0x0013fe90番地というのは元々ローカル変数があった場所です。
つまり[0]~[28]でコピーしたデータがある部分です。
このデータをCPUはコードだとみなして実行していきます。
VisualC++のデバッガで追っかけてみると確かに送り込んだコードが実行されています。
赤で囲った部分が引数として不正に渡したコードです。
つまり不正なデータを関数に与えたことによって任意のコードが実行されてしまっているわけですね。
コードの内容は特に意味はありませんが、以下のようなコードになってます。
1.関数の戻り値を1にする
2.壊してしまったebpの値を復元する
3.元の位置にジャンプする
(*上のは僕の環境でたまたま動くように書いただけです
実行のたびにアドレスは変わる可能性があるので、アドレス直書の部分は本来は毎回変えなければなりません)
よってこのプログラムを実行するとPasswordCheck関数の結果は1になります。
パスワード通っちゃいました。
めでたしめでたし。
あ、本来の目的忘れる所だった。
DEPを有効にしてもう一度実行するとちゃんと保護機能が働き、アプリケーションが強制終了させられました。
こんな感じで。
除外設定もできます。
ただし、カーネルモードで動くものは除外設定できないのでOS全体のDEP機能を無効にする必要があります。
boot.iniを編集して、/NoExecuteを/executeにすれば無効になります。
ちなみにeMbedded Visual C++付属のWindowsCEエミュレータがDEPのせいで起動しませんでした。
詳細をクリックすると製造元にWindowsXPに適したバージョンをもらえだそうです。
製造元Microsoft・・・。
ま、エミュレータ等は動的にコード作らないといけないのでどうしても仕方ないのですがね。
今年も(こそ)やります。
去年の反省から今回は、
・水は自動でやる
・温度管理をちゃんとやる
・愛情プラス
という事にします。
それに合わせて前回のシステムは画像を記録するのみでしたが、今回はパワーアップさせます。
まず温度計測。
こちらの「USB温度・湿度計モジュール」を利用する事にしました。
このキットはこちら温湿度計の値をUSB経由で取得できます。
今回の用途にちょうどいいですね。
温度は0.01℃の分解能で出力されてきます。
さらに都合のよい事にこのキットには温度計とは別にPCからLED二つをOn/Off制御するオマケ機能がついてます。
何のための機能かわかりませんが、ここにソリッドステートリレーを繋いでポンプとかを制御する事にします。
まぁ、どういう事かというと、過去の記事に書いた絵を貼れば判りますね。
まぁ、そんな感じで。
注意点は水面を水が出るところよりも上にする事です。
念のためポンプも。
じゃないとサイホンの原理とかで大変な事に。
↓電子回路の部分は一応組み立てた。
これで、
・温度、湿度の計測
・AC100VのOn/Off制御
が可能になりました。
ソフトはこれから作るんですが、なぜかCのヘッダがないのでDLLを解析・・。
本来はキットメーカーのサイトにあるはずっぽいのですが、どういうわけかずっと移転中とかでアクセスできへん。
書いたのでメモっときますね。
//FindUSB(ByRef index As Long) As String
typedef const char* (__stdcall *FNFINDUSB)(long*);
//GetVers(ByVal dev As String) As String
typedef const char* (__stdcall *GETVERS)(char*);
//GetTempHumid(ByVal dev As String, ByRef temp As Double, ByRef humid As Double) As String
typedef long (__stdcall *GETTEMPHUMID)(const char*,double*,double*);
//SetHeater(ByVal dev As String, ByVal val As Long) As Long
typedef long (__stdcall *SETHEATER)(const char*,long);
//ControlIO(ByVal dev As String, ByVal port As Long, ByVal val As Long) As Long
typedef long (__stdcall *CONTROLIO)(const char*,long,long);
*ドキュメントでは戻り値の意味がわかりません。
特にGetVersの戻り値がchar*なのが判りません。
long intの間違いかなぁ・・。
§ つかぽん [あの株券がほぼ無価値状態になったときを表現する「紙切れ」ってひょうげんは、もっと別のいい表現はないのかと思う今日この..]
§ Suika [「資源ゴミ」]
§ Suika [電子化されたら上場廃止株券コレクションも出来なくなりますね。]
§ Meshi [どうするのかなぁと思ってましたがw 私も500株ほど持ってますw こりゃ寒い冬を越すのによい燃料になりそうです(涙]
§ Suika [暑くなった頃に株券が届くと思いますw]
§ ひかりん [馬券や宝くじも外れればただの紙くずなのですから、株券も無価値になったら紙くずなんでしょうね。 でも、この紙くずでケツ..]
§ ひかりん [そうそう、 「燃やして森に撒く」というのが一番のリサイクルだと思います。]
§ Suika [燃やすのはもったいないですよww]
§ ひかりん [いや、もちろん冗談ですよ。(^^;) 昨日、アメリカの会社が大量にライブドア株を買いましたね。盛り返すか?それとも5..]
§ ひかりん [しまった!買う前に上場廃止にされてしまったようです>ライブドア株 やることが早すぎるよ!>東証 まあ、2度目の再逮捕..]
§ ひかりん [違った、時間取引停止状態だったようですね。 あ、株価が上がってる!? 代表取締役がターイホですが、このまま盛り返すの..]
§ Suika [上場廃止決まってから1ヶ月は整理ポストで売買できますよ。]
温湿度測定のためのシステムを作ってみました。
使ったのは前のアレです。
先週組み立てておいたものを設置。
久々に半田ごてとか使ったきがする。
で、
↓とりあえずグラフ表示のプログラムを作ってみた。
1分毎に更新されて自動的に常に新しいグラフが描写されます。
しかし設置してから数分の間にバグをすごく発見。
うーん。まぁ、直したつもり。
前回の教訓を活かして排他処理とか丁寧にやったのは良いけど、逆に複雑になってしまいました。
ハード絡みはテストがしづらいので大変ですね。
あとこれ気温じゃなくて室温です。
外に出せるようになったら(防水とかの面で)外出すかもしれませんが今のところ室温でテストです。
なんとなく眺めてると、
・暖房をつけると温風の流れによって検出値がけっこう変わる
・扉をあけると冷気が入って一時的に室温が下がる
・温度があがると湿度がキレイに連動して下がる
普通の温度計だけじゃなかなか判らないですよねえ。
おもしろい。
しかし今現在(0時40分)、体感室温26度も無いと思うのだが、こんなもんなのかなぁ。
これから加湿器つけて寝ます。
02/22 PM10:51 追記
温度湿度の目盛が違って見づらいのを直しました。
有効桁数を小数点以下2桁にしました。
負の値・・は来ないと思うけど四捨五入が間違ってたので修正。
あと現在の場所を青いラインで描いておきました。
§ ひかりん [凄いですね! でも、室温と湿度が小数点以下3桁まで出る意味はあまり無いのではないかと思われます。まあ、カットして見れ..]
§ wadia [これは面白いですね。 室温と湿度のグラフを見ていると防犯対策にも 使えそうな気がします。]
§ Suika [ちょっと修正しましたよー。 ってこのグラフ見るとすごく生活がバレる気が・・・。]
§ Suika [でもなんか数字が嘘くさい気がしてならん・・・。 室温27度も無いと思うのだが。 設置場所の問題かもしれません。]
§ kazatachi [おもしろいことやってますなー。やけに室温が高いんで、部屋には常時電気を消費している熱源がたくさんあるとお見受けしまし..]
§ Suika [なんか異常に高い温度を示しますなw 一応南向きの部屋なので温室効果だと思いたい。]
§ K@i [格好良く計算してるのにっ!!作業姿は割り箸使って「このやろ!このやろ!!」ですかぁ?www すーちゃんかっこいー!]
§ Suika [K@iさん>> 世の中の工業製品は案外こんな風につくられてる気がします・・・。]
§ fumio [私もPHSのアンテナの自作をしようと思います。 効果の程をもっともっと知りたい。 さらに感度を上げる工夫はされました..]
§ Suika [高周波ですからねえ。遠くへ伸ばすのは難しいかもしれません。 直結するだけなら簡単だと思います。効果は・・ないよりはだ..]