「 プログラミング 」一覧

.NETのSerialPortクラスで日本語が取得できない件

.NETのSerialPortクラスで日本語が取得できない件

 シリアルポートに接続された機械をコントロールするのに、最近使い始めたVisual C#でSerialPortクラスを使って通信を試みていたけれど、半角カナや漢字が"????"と変換されてしまい読み取れなかった。

続きを読む

ClassGUIDを返さないデバイスがあった

 社内で使う簡単なツールを作っているのだけど、特定のPCでのみ動作しないということで、調べてみた。

続きを読む

周波数と音階とMMLと

 とある仕事でとある音が鳴るデバイスをいじった。そのデバイスは周波数を設定できるだけなので、周波数と音階の関係を調べてみたら、平均律では、とある周波数f(Hz)の音の半音上の音の周波数は、f×2-1/12(Hz)だって。ほうほう。おもしれぇ~

 せっかくなのでMML(=Music Macro Language)風の命令を作ってみた。ファミリーベーシックとかで音鳴らして遊んでた!なつかしー。"L8G<CCCCCCCDEDCCR2"みたいなね。何の曲でしょう?

 例の計算式を、デバイスの周波数範囲全部で計算して配列に入れておく(都度計算するかどうかは処理速度とメモリ容量でお好みで)。正確には、その周波数に対応したデバイスのレジスタ設定値、ってことだけど。実行させると、MMLのテキストから音階を抜き出して、その音階に対応する周波数を配列から取り出して、デバイスにセット。指定音長分待つ。以上。みたいなカンタンなプログラムだけど、ちゃんと音楽になった。おもしろい。

Microsoft Express Edition

 知りませんでした。Visual Studioなどが無料で公開されてるんですね。

続きを読む

COMとSOCKETを直結

 シリアルポート接続、またはUSB接続などでも仮想COMポートを持つシステムのコントロールのために、汎用の通信ターミナルソフトウェアを使っていましたが、ちょっと凝った自動化をやろうと思ったら結構面倒なんですよね。ターミナルのマクロ機能でなんとかやってきましたが、大して高機能でもなく。

 カスタムのターミナル&制御ソフトを作ればいいのですが、ターミナル部分が以外と面倒で。エラートラップとか想定外のデータ混入時の処理とか、単に改行コードの処理さえ面倒。

 というわけで、いいこと思いつきました。ってもう古い技術かもしれんけど、井の中の蛙にはワカリマセン。

続きを読む

LOAD DATA LOCAL INFILE ~ REPLACE

MySQLでCSVデータを一括登録するのにLOAD DATA LOCAL INFILE文を使っていたが、同じキーを持つレコードでCSVの方を修正してもデータベースに反映されなかった。 続きを読む

LOAD DATA INFILE

今までMySQLにデータを突っ込むのにINSERT文を使っていた。
CSVからデータを読み込んで、フィールド毎に分割して、INSERT。

ところが、LOAD DATA INFILEという構文を使えばデータファイルから一括入力ができるらしい。

これを使えば、次のような流れができる。

・ローカルでデータファイルを作成
・データファイルを圧縮
・圧縮データファイルをFTPで転送
・HTTPでCGIを呼ぶ
・CGIがデータファイルを展開
・CGIがデータファイルをデータベースへ入力

データ入力の手間がかなり軽減される。

本当は、データ作成すらサーバ側で行いたいところ。
実際やってみると、サーバの負荷が大きいのでレンタルサーバでは気がひける。
なので、ローカルでデータを作ってどうやってサーバへ転送するのがいいか、考えていたのだった。
いいことを知った。

MySQLをインストール

 MySQLをローカルPCにインストールすることにした。

 ローカルの便利ツールはほとんどPerlかExcel+VBAで書いてあるので、もうExcelを引退させてPerl+MySQLへ移行しようかと検討中。

 ExcelとMySQLはもちろんそれぞれ用途が違うものなので、Excelでデータを管理するということに若干無理があったのかもしれない。でも世間一般はほとんどそうだ。だから会社のアレもコレも再利用できないデータがたまっていくのだ。もっともっとデータベースを使おう。

 まずはMySQLをダウンロード。

 どうやら、今日時点では「MySQL Community Edition」の「5.0が推奨らしい。

 で、Windowsなので「Windows (x86)」を選択。そしてダウンロード。

 インストールはTypicalで問題なさそう。そしてほどなくして終了。

 「MySQL Server Instance Configuration Wizard」でちょこちょこっと設定をいじる。

 早速テーブルなどつくってみる。わりとカンタン。

 あとは、PerlからアクセスできるようにしていけばOK。

 って、そこがむずかしそうな気も・・・

クローラー

 検索エンジンのロボットのこと。Webページを徘徊し、ページを丸ごと持っていき、検索の元とする。

 検索用途ではないが、ロボットを作った。ごく簡単なものだけど、これでちょっとずつデータを集めてデータベースへ突っ込もうという魂胆。

 Webページを取り込む部分と、WebページからURLを抜き出す部分。そしてURLによって取り込むか取り込まないかを判断する部分。わずかなソースコードを書くだけでこれだけのことができてしまう。便利な世の中。

 ただし、相手のサーバーに負荷をかけすぎていらぬ面倒を起こさないために、1分間に2ページだけのクロールにした。おそっ

 明日はホームゲレンデの県民の森。

HTML::Template

 CGIとはHTMLの自動生成が全て。しかし、ソースコードにHTMLタグが入っている状況はデザインの変更に大変な苦労を伴う。

 というわけで、大切なのはデータとデザインとプログラムの分離。デザインを決めるテンプレートに、データベースの内容とプログラムの演算結果を埋め込み、出力する。デザインを変えたくなったらテンプレートを変更する。

 ブログだってそうだよね。それらがうまく分離されているからレイアウトはテンプレートの変更でOK。

 今まで自前のテンプレート処理モジュールを使ってきたけれど、設計をせずにコーディングを進めていくスタイルでは(どこかと似ている)そのうち破綻していくのだ。なので、ここへきてHTML::Templateに移行しようと考えている。

 というわけで、ちょっとHTML::Templateに触れてみた。

 これから作るやつは全部これを使用させてもらって、今までのもヒマを見て移行していこうと思った。最初から使えばよかったー。

 でも自分で作るということは大切なこと。もう葬り去られようとしている自前モジュールも、それを作ったことでたくさんの知識を得ることができた。

 そして、今の稼ぎ頭はその自前ヘッポコモジュールで動いているという事実。そりゃそうだ。必要に駆られて必要な機能だけを追加していったものだから、そりゃ必要十分に働くに決まっている。

1 2