2011年3月19日
PS/2→USB変換コネクタ。
かつて USB 入力タイプの KVM に PS/2 キーボードを接続するために購入。
現在はノートPCにキーボードを接続するために使ってます。

ただ、変換は確実にされるかというとそうでもなく、たまにオートリピートが止まらなくなったりします。調べてみるとPS/2→USB変換で PS/2ネイティブと同じ応答を出すのは難しいようで…たとえば以下。
http://pc.watch.impress.co.jp/docs/column/kaimono/20100223_350633.html
こう書くと「大丈夫か?」と思いがちですが、普通に使う分には普通に使えるので、重宝してます。
あと似たようなものとしては、USB→PS/2変換コネクタ。
USBマウスとか、USBキーボードとか買うとついてくるあれ。

これって USB 信号を PS/2 信号に変換しているのかと思ったらそうではなく、RS-232C のクロスケーブルみたいに、USB のピンと PS/2 側のピンを ワイヤーでつないでいるだけ。
そんなのでなぜ通信できるかというと、USB 通信をするか PS/2 通信をするかは、マウスまたはキーボードが判断するかららしい。
なので、このコネクタですべての USB キーボードやマウスが変換できるかというとそうではなく、PS/2 に接続することを前提にしない製品(例:ロジクールの MX320、とか)をこのコネクタに繋いでも使えるようにはならないようです。
そして、マウス用とキーボード用の2種類があるのはなぜかといえば、PS/2のピン配置は、データ線がキーボードは2番ピンと6番ピン。マウスは1番ピンと5番ピンで、違うところを使用しているから。だから形は一緒でも結線が違うので、マウス用をキーボードにつないでも認識しません。
posted in ハードウェア, 遺産 by ooltcloud | No Comments
2011年3月17日
VC++でDLLを簡単につくる方法のまとめ。
基本、.NET系(VB.NET とか C# とか)で作るわけですが、たまに Win32 ネイティブ DLL を掴む必要があり、ただそういう DLL に限ってデバイスアクセス系だったりして、結局ターゲット機材が手元にないと使えない、みたいなことになって、テストが困るのでスタブが作りたいなあ。と思った時のために。
1.「新しいプロジェクト」で「Visual C++」の「Win32 コンソールアプリケーション」を選択。
「名前」にプロジェクト名(例:dllTest)を入力し、「OK」を押下。
2.「Win32 アプリケーション ウィザードへようこそ」画面で「次へ」。
「アプリケーションの設定」を「DLL」に、
「追加のオプション」を「空のプロジェクト」に選択し、「完了」。
3.「プロジェクト」→「新しい項目の追加」で、「C++ファイル(.cpp)」を選択。
「名前」にファイル名(例:dllTest.cpp)を入力し、「追加」。
4.コードを書く。
DllMain() はお約束。呪文扱いで。
func() が今回作りたい関数。
__stdcall は必須。
5.「プロジェクト」→「新しい項目の追加」で、「モジュール定義 ファイル(.def)」を選択。
「名前」にファイル名(例:dllTest.def)を入力し、「追加」。
defファイルを追加すると、DLLのプロジェクトのプロパティの、
「構成プロパティ」→「リンカー」→「入力」の「モジュール定義ファイル」
に、追加した def ファイルが設定されます。
6.コードを書く。
公開したい関数名を Exports 以下に列挙 (例:func)
7.ビルド
8.終了
ちなみに、VB側からこの DLL 関数を呼ぶための定義は以下。
Public Module dllTest
<System.Runtime.InteropServices.DllImport("dllTest.dll")> _
Public Function func(ByVal i As Integer) As Integer
' ここにはなにも書かない
End Function
End Module
posted in Program, Visual C++ by ooltcloud | No Comments
2011年3月11日
たまにこんがらがるので、結線についてまとめてみました。
終端抵抗は省略。
- RS-422全二重 1:1
普通に送信(T)と受信(R)を対にして結線
T+ ─────────── R+
T- ─────────── R-
R+ ─────────── T+
R- ─────────── T-
- RS-422全二重 マルチドロップ
1つの親(MASTER)に、複数の子(SLAVE, 最大10?)が従うように結線。
子同士は直接通信しない。
MASTER SLAVE
T+ ───┬─────── R+
T- ───│─┬───── R-
R+ ───│─│─┬─── T+
R- ───│─│─│─┬─ T-
│ │ │ │
├─│─│─│─ R+
│ ├─│─│─ R-
│ │ ├─│─ T+
│ │ │ ├─ T-
│ │ │ │
└─│─│─│─ R+
└─│─│─ R-
└─│─ T+
└─ T-
- RS-422半二重 1:1
送信と受信を短絡し、相手局とは2線で渡す。
マルチドロップも同様。
MASTER SLAVE
T+ ─┬───────┬─ R+
T- ─│┬─────┬│─ R-
R+ ─┘│ │└─ T+
R- ──┘ └── T-
- RS-485 半二重 1:1
そのまま接続。(+同士/-同士)
DATA+ ──────── DATA+
DATA- ──────── DATA-
- RS-485半二重 マルチポイント
そのまま芋づるのように接続。(最大32?)
RS422のときのような、親子関係はなし。
├│─ DATA+
│├─ DATA-
││
├│─ DATA+
│├─ DATA-
││
├│─ DATA+
│├─ DATA-
││
├│─ DATA+
│├─ DATA-
posted in ハードウェア, 遺産 by ooltcloud | No Comments
2011年3月11日
異色で、RS232C - RS422/RS485変換コネクタなどを。
完全に仕事用です。たまにRS422があったりするのですが、RS232Cとの違いはなんといっても、モニタが難しいことと、通信テスト用のシミュレーターが作りにくいこと。ひとえに PC 側に RS422 インターフェイスがないからですが。
ということで、SINTECH 製の RS232 TO RS485-RS422 CONVERTER を購入。

当初は USB 接続のものを検討しましたが、今回はRS232Cから変換するものにしました。理由はRS232Cを持つ機械であれば別にPCでなくても繋ぐことができるのと、ドライバ問題に無縁そうだから、といったところ。(x64ドライバの問題もさることながら、すでにニッチなインターフェイスなので、将来のドライバ供給が怖かった。)
欠点はRS422のもつ通信速度をフルには引き出せないところ。RS232Cの通信速度で頭打ちなのは当然ですが、それでも115kbpsまで対応してます。もっともこれまでのケースでそんな高速な設定はしたことがないので、テスト用途では十分使用できるレベルと判断。
あと、これは利点か欠点かわかりませんが、この変換コネクタ、外部電源が要らない。もちろん外部電源も使えるようですが、基本はRS232Cの信号線(TxD/DSR/RTS)から供給する模様。個人的には便利ですが、厳密に電圧レベルが必要な機器とかでは不安定になりそうですね。
とりあえず購入したものの、ターゲット機器がないのでまともにテストできず。Point to Point 接続の受信(機器->PC)のみしか確認できてませんが、まあ大丈夫なんじゃないかな…
posted in ハードウェア, 遺産 by ooltcloud | No Comments
2011年3月11日
ってそれは品川駅ができたときか…>新・新幹線。
このたびは、九州・直結・新幹線。だな。
広島に「さくら」がやってくるのは明日 3/12 からですが、すでに看板は立ってました。

広島通過のひかりは、すべて8両になるんですかね。現実問題としてレールスター以外のひかりはすでにないのかな? 8両こだまは500系こだまなんでしょうが、4両編成のこだまは今回から廃止なんかな?
そして、ひかりは「赤」というイメージがあったんですが、今回はさくらと並んで「緑」になっている模様。

そして今日、群馬に旅立つはずの友人は地震で足止めを食らいました…
明日には新幹線が復旧してくれればいいのですが。
posted in 時事 by ooltcloud | No Comments
2011年3月7日
先の記事では、互換品が約2万円でしたが、さらに安価なもの (9800。半値!) を発見しました。
ただ、JTAG ケーブルというのは、ベンダーターゲットなんですね。XILINX ばかり使っていればいいけど、ALTERA 使いたいってことになってらどーするさ?という話はあるわけで。
そんな場合は、J-Writer なるマルチベンダー対応の JTAG ケーブルがある模様。値段も前述のケーブルと同じ 9,800。じゃあこっちがいいか?というと、純正ツールから直接使えず、コマンドプロンプトで操作、ということのようなので、そういうのがダメな人は不向き、ということになりそうです。あとx64対応も可能ではあるようですが面倒そうなのでその辺の対応に自信がある人向けですね。
もっとも私の場合、手持ちの学習ボードは1つしかなく、当面、それさえつながればいいので、マルチベンダにこだわる必要はないのですが…
ちなみに JTAG とは何か?という話は、以下の説明がわかりやすいです。
JTAGとは何か
JTAGコネクタピン配置
posted in ハードウェア, 遺産 by ooltcloud | No Comments
2011年3月3日
国内販売は 3/25 かららしい。今度は即日買う!(予定)
posted in 散財, 時事 by ooltcloud | No Comments
2011年2月28日
ハマったのでメモ。
Powershell で カレントのファイル一覧を見ようとすると、
Get-ChildItem .
で参照できます。
Powershell では、レジストリも PS-Drive という仕組みで、ドライブ名に "HKLM:" とか "HKCU:" を指定することで、ファイルと同じような感覚で参照ができます。
なんですが、先の Get-ChildItem ではキーは一覧されるものの、値が表示されてきません。値を表示するには、
Get-ItemProperty .
と打たなくてはならない模様… なんでここだけ。面倒な…
posted in PowerShell, Windows by ooltcloud | No Comments
2011年2月28日
自動ログオンについてのメモ。
Workgroup 環境にある普通のマシンだと、ファイル名を指定して実行、で以下を入力すると、GUI での自動ログオン設定が可能です。
control userpasswords2
ただ、ドメイン環境下、というかドメインユーザーでの自動ログオンは、上記ではうまくいかないので、直接レジストリを操作します。
場所
HKLM:SOFTWAREMicrosoftwindows ntCurrentVersionWinlogon
操作する値
AutoAdminLogon |
1 にする |
DefaultDomainName |
自動ログオンするドメイン名 |
DefaultUserName |
自動ログオンするユーザー名 |
DefaultPassword |
自動ログオンするユーザーのパスワード |
まあセキュリティについてはいわずもがな…
posted in Windows, 環境設定 by ooltcloud | No Comments
2011年2月27日
IME2010、どうも使いにくいので設定変更。
やりたいことは以下。
1) ひらがなキーでひらがな入力、英数キーで全角英数入力。
2) 変換の文字種に合わせて、空白の全角/半角を切り替える。
(要は IME ON 時はデフォルト全角空白)
3) 半角英数の入力は IME を OFF にして入力が基本。
現状 (Microsoft IME選択時) の問題点。
A) スペースとテンキーからの入力が常に半角。
B) 英数キーを押すと、かな-英数がトグルする。
C) かな入力中→英数入力切り替え時に、半角入力になる。(前回の変換結果に従う?)
D) いきなり英数入力をすると、直接入力のままになる。
本来はデフォルトのキー設定になれるべきなのかもしれませんが、Windows95の頃からこのキー配置なんで、これで許してください、ってことで。
以下対策。
まず、スペースキーの入力とテンキーからの入力を共に「入力モードに従う」に変更。(問題点 A の対策)
次に、キー設定を IME Standard に変更(問題点 D の対策)。 その後、その横の「変更」を押す。

「英数」キーの機能を「かな英数」から「全角英数」に変更する。(問題点 B,C 対策)

ところで、「全角英数」という名前の機能は複数あって、「全角英数に切り替えます」の方を使用します。

「再変換:全角英数に変換します」の方ではありません。

posted in Office, Windows, 環境設定 by ooltcloud | No Comments
2011年2月26日
で、なぜ IEEE1284 変換ケーブルを探しているかというと、プロテクトドングル対策…ではなくて。
過去に、HDL トレーナーという CPLD 学習ボードを買ったのですが、それとのインターフェイスが IEEE1284だから、という話でして。
HDLトレーナー

これを USB で接続しようとすると、JTAG ケーブル、というのが必要でして、純正品は約4万、互換品で 2万円ほどする代物でして… かつ、そこから IEEE1284 の DB25 コネクタに接続するための変換コネクタが5500円ほど… まあこの変換コネクタがなくても、JTAG ケーブルを直結することもできないわけではないようですが…
XILINX用 JTAGケーブル (Platform Cable USB互換品) および DB25 変換コネクタ(キット)
いずれにしても、2万~2.5万の出費が必要で、別に CPLD 開発を積極的にしたいわけではないので、ちょっと値段が如何か…という状況でして…
まあもう少し悩む…
そして、同じように 対JTAG で悩んだ人もいたようで、結局、Prolific PL-2305 搭載 USBケーブルでは対応不可のようで。そして私が知る限り、 USB-IEEE1284 はほぼ PL-2305 搭載っぽいので、USB-IEEE1284 ケーブルでは対 JTAG への変換は望みはないということになりますね…
posted in ハードウェア, 遺産 by ooltcloud | 1 Comment
2011年2月25日
そういえばゲームポートの変換ってあるの? と思ったので検索してみた。個人的には使っていないのでどうでもいいんですが。
検索した結果、過去にはあったようです。
サンワサプライ JY-CVUSB

ただ、今は廃止商品で、類似のものは国内では販売されていなさそう。
では海外では? ということで "GAMEPORT USB" 調べると、出てきたのがこれ。
LogiLink Adapter USB to Gameport

今(2011/2現在)でも売っているみたいですね。価格は$10前後の模様。まあいらないから買わないんだけれども。
posted in ハードウェア, 遺産 by ooltcloud | No Comments
2011年2月24日
なぜ ExpressCard の通信モードに気づいたかといえば。
遺産対策(?)で IEEE1284 パラレルポートを探していて、PCI と PCI Express のカードは発見したものの、それではノートPC では使えないので。しかし、USB で LPT ポートを持てるものが発見できないので、じゃあ Express Card はどうだということで探り始めたのがきっかけ。
国内のページでは発見できなかったのですが、海外ではそういう製品はあるようで。
で、最初にみつけたのがこれ。$25 と結構おやすい。
ExpressCard 34 to Parallel Printer (IEEE 1284) DB25 Host Adapter 1 Port C-370
ところが、同じサイトで、Express Card で別のカードを売っているわけです。こちらは $125 と結構なお値段。5倍かよ!
って感じ。
Quatech 1 Port Performance PCIe based IEEE-1284 EPP Parallel ExpressCard
で、なにが違うのか? とみていくと、前者はUSB2.0接続、後者はPCI Express接続だと。(前者はStandards Conformance のところに "USB2.0" と記載されている)
この差は転送速度が有利!とかいう理由なわけはないので、つまるところ、Expressカードでも USB 接続のものをつかんでしまうと、USB - IEEE1284 ケーブルと同じことが起こり得るということに… まあ商品のタイトルからして「Parallel Printer」 vs 「EPP Parallel」なので、当然といえばそれまでですが…
わかるかよ、そんな微妙な差! ってことで要注意です(汗
posted in ハードウェア by ooltcloud | No Comments
2011年2月24日
Express Card って 内部的には PCI Express に接続されるものとばかり思っていましたが、USB で接続するケースもあるんですね。>http://ja.wikipedia.org/wiki/ExpressCard
ということは。
カード自体は同じ形をしていて、普段はその差を気にすることなく使えるけど、ExpressCard-USB 変換アダプタのようなものを使って変換しようとすると、USB 系のカードは使えるけど、PCI-Express 系のカードは使えないってことがありうる。
確かにこの商品にもそんな注意書きが書いてあります。
※ExpressCardのインターフェイスにはPCI ExpressとUSB2.0の2種類があります。PCI Expressには対応していません。
でもこんな注意書き、予め読みませんよね。手持ちのカードがどちらのタイプかという認識もないだろうし。
だったら通信形式の違いで形状くらい変えておけばよろしいのに。と思う。
まあとりあえず、購入前に分かって良かった。
カードを買うときは注意しよう。
posted in ハードウェア by ooltcloud | No Comments
2011年2月23日
そろそろフロッピーディスクも終了の様で、ディスクの生産の来月までだとか。
自作PC売り場にあれだけあった内蔵用 FDD も最近は置かれていないようです。これまでどうもありがとうございました…などと言ってられないのがこの業界で。(どの業界だ?)
残念ながら、まだ微妙に使う機会が延々とありそうなんで、ここはなんとしてでも確保を…としたいところですが、どうやら、FDD-USB"変換ケーブル"というジャンルの製品は存在しない様で、内蔵FDDを延命させる…というのは無理な模様。
でも Windows の DSP 版を内蔵 FDD にバンドルして大量に売っていた訳なので、そのあたりの対策でそんなケーブルとか出てこないですかな。マザーボードに FDD 用 34pin コネクタのないものも増えていることですし、そういう難民対策用で。ってそんなことにはならんか(汗
で、そうすると選択肢として残るのは USB-FDD ですね。私は会社の PC が壊れて、デスクトップからノートに変わった時、FDD をつけてもらえなかったので、そのときに以前から気になっていた4倍速モデルを購入。購入時、既に周辺の店含めて最後の一台でしたが… さすがに4速なんでフォーマットとか速いです。もう前には戻れない感じ。

ところで、職業柄(?)、3Mode必須でして、かつフォーマットできないといけないのですが… Windows XP 以降って、1.2MB でフォーマットできないんですよね… ということで、今までは DOS で再起動してフォーマットしてたんですが、USB 接続になったので、VMWARE と Windows 2000 のコラボによってちょっとだけ楽に… ^^;
でもそのうち WinXP で 1.2MB フォーマットができなくなったように、そのうちフロッピーも取り扱えなくなるんだろうなあ。OS 標準ドライバで使えているから、きっと今後も安泰、とか思っていると足をすくわれそうです。
posted in ハードウェア, 遺産 by ooltcloud | 3 Comments
2011年2月22日
最近はまったのでメモ。
VMWARE (多分Server2系と Workstation 7系) で NT4 を使用する際の、NIC のドライバの選定は
AMD PCNET PCI Ethernet アダプタ
にします。
具体的にはこれ。
P2I2V を実施しようとして、NT4 なので PnP は当然動作しないので、ではどの NIC を選択?、というところで右往左往しましたので…
VMWARE Tools (Version1系) 内にある VMWARE な NIC ドライバでは認識しなかったので注意。
また、このドライバは NT本体の CD (Microsoft製) にあるので、メディアの確保を忘れない様に。
posted in 仮想化 by ooltcloud | No Comments
2011年2月21日
次。MIDIケーブル。
そういえば、MIDI、というか外部音源モジュール分野って絶滅種なんですね。悲しい限り。
かつては RSC-15AT なるシリアル接続のコンピューターケーブルなるものがあって、Roland SC-88 以降の 32ch 出力にも 1本のケーブルで演奏可能、とかできたんですが、これの x64 用のドライバが出てないんですね。
じゃあ、USB-コンピューター端子なケーブルがあるかというと、それはないようで。コンピューター端子は完全に捨てられています、といった模様です。そしてコンピューター端子に代わるインターフェイスが特にあるわけでなく、MIDI 端子に回帰な状況。
(2021/1 追記)
loopMIDI と Hairless MIDI<->Serial Bridge、または拙作 RSC15toSC88 を組み合わせることで演奏可能です。
詳しくは [遺産対策] RS-MIDI, [遺産対策] RS-MIDI (2) を参照してください。
で、仕方ないので x64 に接続可能な MIDI ケーブルを捜索。Roland の UM-1G ってのが2端子で直結できそうだからそれにしよう、とか思いましたが… 1IN/1OUT? 手持ちモジュールに SC-88 があり 2Out は外せないので、これはボツ。0IN/2OUT ってないの?と思ったらそういうケーブルはないらしく、次点は UM-2G というやつで 2IN/2Out。しかも別途 MIDI ケーブルが必要…(汗 値段も高くなるし取り回しも…と思って探していくと、MIDIMATE II という海外製のMIDI ケーブルを発見。これは、任意に 2IN/0OUT, 1IN/1OUT, 0IN/2OUT に切り換えられるとか。そしてx64で動作可能!(OS標準ドライバ)ということで、このケーブルに決定。

(2021/1 追記)
2021/1 現在、MIDIMATE II はすでに廃版になっていて、後継として MIDIMATE eX という製品が販売されているようです。
ケーブルの真ん中に余計なモジュールもついてないですし、取り回しも楽です。MIDIの2本のケーブルは、USBコネクタのところから割れているので、2つ機器が離れていても繋ぎやすいはず。私は関係ないけど。ただ、ケーブルはちょっと"か細い"ので取扱注意かも。ちなみにアクセス(転送中)ランプはUSBコネクタのところに2つLEDがついてて、データが流れている時はそこが光ります。
まだ x64 マシン上していませんが、動くとうたっているかそこは OK でしょってことで、手近な Windows 7 (x86) で認識させてみた結果は以下の通り。Vista以降はコントロールパネル上で MIDI Mapper の選択/確認は出来なくなった様なので、TMIDI Player上で確認。ちゃんと 2Out として動作しました。 .R36 なデータもちゃんと鳴りました。

しかしなんか、USB-RS232Cケーブルに続き国産よりも舶来産の方が融通が利いてて良いな、といった感じなので、なんとなく釈然としない…
posted in MIDI, ハードウェア, 遺産 by ooltcloud | 1 Comment
2011年2月20日
大本命!RS-232C ケーブル!
ってこれはレガシーでも何でもなくて、現役ばりばり何ですけど…
私が持っているのは 秋月電子 で購入したノーブランドかのような格安ケーブルでして。

x64 ドライバーがあるのかなと探索したところ、Prolific 社の PL2303 と いうチップを使っているらしく、Prolific 社が x64 ドライバーをリリースしてくれている模様です。
http://www.prolific.com.tw/eng/downloads.asp?ID=31
http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41
まあ、マザーボードから標準搭載が外れていっているとはいえ、232C 自体現役なのだから、まあ当然だよね、とか思っていましたが、ちなみに他のメーカーの USB-232C のドライバはどうなんだろう?とか思って探ってみたらまとめサイトが…
http://wiki.tomocha.net/Windows_Vista_USB-RS232C.html
結構 x64 サポート外になっちゃってますね…。国内メーカーだからといって確実だとはいえないという実例なのかな。少し悲しい。よもやドライバ供給が一番やばそうだとおもって買った秋月のが一番堅いとは…
posted in ハードウェア, 遺産 by ooltcloud | No Comments
2011年2月19日
高級USBケープルを発見。というか某書籍で知った。
LocasDesign Axis USBケーブル
http://www.mixwave.jp/audio/locus.html
http://www.locus-design.com/index.php/axis-usb-cable

価格は、2010/2/19現在で、約1mのケーブルが、楽天で 76000。
http://item.rakuten.co.jp/e-earphone/10002710/
まあ確かに、デジタルだからケーブルの品質が悪くても良いというわけではないし。
事実、SCSIケーブルとか、ちょっと長かったり、安かったりすると、繋がりが良くなかったりしたし。
ケーブルの品質が悪いとエラーレートが…という話ではありますが…
しかし本当に音質が良くなるんだろうか?原理的に信じがたいが…、というより伝送経路より機器側のノイズの方が問題の様な…
試してみたくても買えないので、謎は謎のままということで。
posted in ハードウェア, 与太話 by ooltcloud | No Comments
2011年2月18日
CDの寿命が20年(http://allabout.co.jp/gm/gc/51079/)とか言う話もあり、CD聴くのにいちいちプレイヤーを…というのも面倒であり、さりとてMP3化というとファイル名入力とか面倒とか言う話もあり、ということで、CDをまるまるイメージファイルにしてとりあえずはバックアップできまいか?というのが動機で。
しかし、巷で市民権を得ている ISO ファイルはデータファイルにしか対応して居らず、CD-DA には対応できない模様。DVD とかも ISO にできるなか、CD-DA だけが仲間はずれ… CD-DAこそが本家なのにね(笑 しくみを考えれば当然といえば当然ですが。
ともあれ、調べた結果としては、以下の2つ。
1. wav + cue 方式
2. mdf + mds方式
1.は CD を1つの wav にして、チャプター情報等を cue に記録する方式。
利点は wav なのでチャプターを無視すればプレイヤーは選ばない点。VLC Playerでもちょっと微妙な点があるものの、直接読み込みが可能な点も魅力。
2.は Media Descriptor Image とかいわれものらしく、もともとは Alcohol 120% なるソフトが吐く形式らしい。フリーツールでは、CDBurnerXP、でイメージ化が可能。こちらは、VLC Playerでは読み出せず、DaemonToolsでマウントさせる必要あり。CDマウントツールでもGizmoとかはマウントできないなどがあるので、Daemon以外を使用する場合は注意が必要。
利点は、Media情報とかもイメージ化されているようで、Daemonでマウントの後、Windows Media Player とかで再生すると、CDの名前とか曲名を取ってきてくれるところ。1.のwav方式では取ってきてくれない。欠点は、ツールを選ぶところでしょうか。VLC Playerで直接読めたらいいのになあ、と思ったりする。
ということで、とりあえずは、より情報の欠落がなささそうな mdf + mds 形式でバックアップを取っていくことにしましょうかね…
posted in Utility by ooltcloud | No Comments
2011年2月15日
引き続き変換ケーブルネタ。今度はUSB-EEE1284変換ケーブルです。
USB-プリンター(アンフェノール36pin)変換ケーブルははるか昔から存在していましたが、近年、DSub25タイプが出てきていたので購入してみましたというのが1年位前。なんで36pin時代に手を出さず、25pinになって手をだしたかといえば、プリンター以外のものをつなぎたかったからですが。
ところがこの変換ケーブル、ドライバーソフトウェアをインストールすることなく使用できるみたいなのですが「USB印刷サポート」として認識され、LPTポートとして認識されないんですな… _| ̄|○
WEBを検索しても、同様のことで困っている人はいるようですが、結局対策はない模様。がっくし。
で、そのケーブルは使えずに放置だったんですが、つい最近、LPTポートとして使用できそうなケーブルを発見!と思って購入、したらやっぱり「USB印刷サポート」となり使用できず。あれ、ドライバーソフトインストールすればいけるのか?と思ってドライバーソフトの内容をみてみたら Vxd なる拡張子が… Win9x用かよ!(汗
てなことで、IEEE1284 を USB 経由で確保するのは難しそうですね、ってことで。
そんなわけで使えないUSB-IEEE1284変換ケーブルが2つ…とほほほほ。
posted in ハードウェア, 遺産 by ooltcloud | 1 Comment
2011年2月14日
メインマシン更新対策の ASC-39160 とは別に、かねてより懸案だったUSB-SCSIケーブルを入手。
公式に Windows7 と x64 のサポートを表明している Ratoc の U2-SCX が欲しかったのですが、どうやら2010年末で在庫切れの様で、気づいてみれば既に入手不可。なので次点で Logitec の LUB-SC2 を購入。

ただ、この製品は、サポートは Windows Vista までで、Windows7 や x64 には非対応の模様。これから買うのにこれから使う環境には対応しないとは… まあいざとなれば仮想環境下で使えばいいか。と割り切り。
で、一応、この製品、モードが2つあって、SCSI エミュレーションモードと USB ディスクモードがあるんですが、SCSI MOを ID=0 にして USB ディスクモードで接続してみたところ、Win2008R2上であっさり認識しました。まあ、USB ディスクモードはOS標準ドライバで動作するとうたっているんだから当然ではありますが… なんで、少なくとも MO やハードディスクについては、ディジーチェーンを仕掛けなければ x64環境でも十分使えそうです。
posted in ハードウェア, 遺産 by ooltcloud | No Comments
2011年2月12日
Webインターフェイスでの編集が辛くなってきたので、いいエディタがないか捜索中です。
とりあえず、Windows Live Writer がよいという意見が多そうなのでお試しです。
が、ちょっとどころでなく重い… 文字入力とか。特にカーソル移動。この重さはいったい何だろう?
画像の挿入実験

表の挿入
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
posted in Utility by ooltcloud | No Comments
2011年2月11日
Visual Studio 2010の自動実装プロパティについてメモ。
自動実装プロパティが実装されたことで、コード入力時の振る舞いが VS2008 以前と違います。
最初。
"Property test"と打ち、Enterを押すが、Getメソッドが自動入力されない。VS2008以前だとここでコードが自動で入力されていた。Shift+Enter とかしてもダメ。
ではどうすればよいかというと、続いて Get まで打って Enter を押すと…
Get メソッドが自動入力されます。
この操作が分かるまでが辛かった…
posted in Program, VB.NET by ooltcloud | No Comments
2011年2月10日
実は昔から悩まされておりましたが、この度解決をみたのでメモ。
なにかといえば、Oracle の SQLPlus で Select して結果を表示させると、表示が乱れることがあるというもの。
具体的には、以下の様な設定で。
・コマンドプロンプトの横幅を1000にする。
・SQLPlus側で、桁幅を1000 (set linesize 1000) にする。
この状態で、比較的桁が長くなるクエリーを叩くと、表示が乱れます。というか表示の桁あわせがズレます。


上記程度だと、心頭滅却すればなんとか我慢できますが、以下な感じになってきますともはや何がなんだかです。

ではどうすればよいかというと、
set tab off
と叩いておけば良いようです。
set tab off を叩いておくとどうなるかというと、以下。


ずれなくなりました。
で、先ほど「なにがなんだか」だった結果表示も以下の通り。

揃っててちゃんと読める!
これ、誰も教えてくれないし、検索しても引っかからないわけですが、みんな困っていないのでしょうか?
あるいはさっさと解決出来てしまっているのかもしれませんが…
まあ最近は GUI ツールを使うのが主流だから困らないのかも知れませんけど。
かなり長いこと悩まされ続けましたが、今後は楽になりそうです。
posted in Oracle, データベース by ooltcloud | 2 Comments
2011年2月8日
とりあえずメモ。
PowerShell。起動するとデフォルトでは以下の様なプロンプトがでます。
PS C:UsersAdministrator>
コマンドプロンプトでの prompt $p$g 相当ですね。なんですが、これ、長ったらしくて好きでない。特に深いディレクトリに潜るとプロンプトがひたすら長くなって肝心のコマンド入力部分の表示エリアが狭くなって来ます。
なんで、私はコマンドプロンプトでは、かつての MS-DOS のように prompt $n$g 派で、ドライブ名のみ表示させています。
それを PowerShell でやろうとどうなるかと言うと以下。
Function Prompt { $(Get-Location).Drive.Name + ">" }
今まで、prompt $n$g でできてたことにこれだけ書かなくてはならんとは面倒な。とはいえ、デフォルトのままではウザイので憶えることにします…
ところで、自前のマシンなどで、環境変数に PROMPT=$n$g と設定しておいて、毎度prompt設定をしなくても良い様にする、みたいなことをするには以下でいけます。
1.%SystemRoot%System32WindowsPowerShellv1.0 に profile.ps1 というファイルを作る。
2.そのファイルに、上記の Function Prompt ~ を記載する。
ただ、PowerShell ではセキュリティ設定でデフォルトでは外部スクリプトファイル(ps1)が実行できない様になっています。ので、一度PowerShellを管理者で実行し、以下のコマンドを入力して、セキュリティ設定を劣化させることで実行できるようになります。
Set-ExecutionPolicy RemoteSigned
これで、外部スクリプトファイルが動作する様になります。
Restricted 実行ポリシーについては以下を参照 (表1)
http://technet.microsoft.com/ja-jp/scriptcenter/ff621345
ただ、セキュリティが気になる人は、スクリプトファイルに署名を入れるなどの回避策がありますが、その話は割愛ってことで。
posted in PowerShell, Windows by ooltcloud | No Comments
2011年2月7日
いや別に恐怖という話でもないのですが。
現在、Intel6系、つまるところSandyBridge系のCPUを使って、メインマシンのリプレースを図ろうとしています。
で、メインマシンは現在3代目で、次が4代目になるわけですが、初代で使用していたパーツもまだ現役の物があるわけです。具体的にはSCSIのホストアダプタとフロッピーディスクドライブ。
ところが、前者はかろうじてWin7に対応するドライバは存在する物の、x64には対応しない。後者はIntel6系だとすでにコネクタが存在しないマザーが大多数のようで。まあ当然ですわなPCIだってチップセット本体ではサポートされておらずブリッジでアドオンで実装しているわけだし。従ってかどうだかしりませんが、当然RS-232CやIEEE1284などもないわけで。
初代の頃には ISA が邪魔でしかたがありませんでしたが、あれから十数年、まあそれなりに資産、というか遺産があると、レガシー/PCI全廃とかちょっと勘弁してください状況なのも事実で、ちょっと困りもの。
とりあえず、PCI系はぼちぼちPCIeへの変換を意識しないとまずそうなのと、USB系も間違いなく大丈夫かと言えばそうではなく、Win7系やx64用のドライバはありませんでした(例:USB-SCSIとか)という事態にも陥りかねないので、しばらくは要注意かなと。特にシリアル-USB系は知らない間に使えなくなってました、とかありそうなので。そうなると、シリアルは仕事でもまだまだ現役なのでかなり手痛い。
とりあえず4代目は、初代から継承するパーツはなくなりそうだなあと行った感じで。しかしそうすると、たまに必要になるフロッピーディスクドライブをが実装されないことになってしまうので、どうするか考えなくては。今後を考えると34PINコネクタのついているマザーを選択するのではなくて、USBドライブかなあ?とか。
SCSIについては、AHA-2940Uを使い続けたいんだけど、取り急ぎオークションで ASC-39160 を確保。x64ドライバもあるし、当面なんとかなるかと。そのうち LTO3が安くなれば接続するかもしれないし、とか。 ただ、LTO も LTO4 から SCSI じゃなくて SAS なんで、LTO3なんか掴むとレガシー増やすだけでは…という話もあり…
ともかく、マザーの更新を伴うWin7x64への移行は、結構いろいろと問題をはらんでいそうです。
posted in IT / テクノロジー, ハードウェア, 与太話, 時事 by ooltcloud | 1 Comment
2011年2月7日
WMIを使う上で、便利そうなページとかをいくつか見つけたのでメモ。
WMICを起動して /? を入力
Aliasとかの一覧が見えます。
コンソールで対話したい場合は、ここのリストから適当なのを打てばある程度使えます。
WMIC の動詞
http://technet.microsoft.com/ja-jp/library/cc784966.aspx
WMI クラス (英語)
http://msdn.microsoft.com/en-us/library/aa394554.aspx
WMI Class List
http://www.wmifun.net/library/
posted in Windows, WMI by ooltcloud | No Comments
2011年2月7日
先のエントリーの WMI ですが、.NET系では、System.Management を参照設定することで、WQL という SQL ライクな問い合わせ言語で照会が出来る様でした。
WQLの例
select name, processid from Win32_Service where ProcessId = 2556 or ProcessId = 3944
ところが、これではいちいちプログラムを書かなくてはならず面倒なので、コンソールから直接入力できないものかな?と探ってみると WMIC というコンソールがあることが分かりました。コマンドプロンプトから WMIC と入力することで呼び出せます。
ところがこの WMIC、前述のWQLが通らない。こちらは専用構文が必要の様で、例えば以下の様に書きます。
C>wmic
wmic:rootcli>path win32_service where (processid = 2556 or processid = 3944) get processid,name
Name ProcessId
MSSQLSERVER 2556
SQLWriter 3944
wmic:rootcli>
注意点は以下
・From 句(?) の代わりに Path を書く (動詞と呼ばれる模様)。
・Where句は、条件式を括弧で囲む。
・Select句(?) は Get を書く。(但し、列の表示順序は変わらない)
あくまでコマンドラインで WQL を使用したい場合は、PowerShell を使えば、以下の様に書けるようです。
Get-WmiObject -Query "select name, processid from Win32_Service where ProcessId = 2556 or ProcessId = 3944"
ただ、PowerShellライクに書くと、以下な感じがスタンダードなんだろうかなあ。と
Get-WmiObject win32_service -Filter "ProcessId = 2556 or ProcessId = 3944" -Property "name,ProcessID"
いろいろ書き方があって悩む…
posted in PowerShell, Windows, WMI by ooltcloud | No Comments
2011年1月20日
故あって、サービスプログラム内で、自身のサービス名が欲しい状況が生まれたのですが、調べてもそんな事例が見つからず、かなり途方に暮れました。なのでメモ。
結果としては、以下のコードでサービス名を取得するようにしました。
Dim pid = System.Diagnostics.Process.GetCurrentProcess.Id
Dim wmi As New System.Management.ManagementObjectSearcher()
wmi.Query.QueryString = "select name from Win32_Service where ProcessId = " & CStr(pid)
Dim n = wmi.Get()
Dim serviceName As String = n(0)("Name")
まずプロセスIDをとって、それからWMIを使ってサービス情報を引っ張ることでなんとか実現。
しかし自分のサービス名ってあまり取得するようなものではないのかな…それとも検索の仕方がまずいだけか…
posted in Program, VB.NET, WMI by ooltcloud | 1 Comment
2010年11月17日
ネタ元>http://d.hatena.ne.jp/gallu/20101116/p1
コメントは必要です。議論の余地がありません。
その上で、仮にコメントがなくても理解できるコードを書くことも必要です。こちらも議論の余地がありません。
それでは、コメントは嘘になりやすいから、書かない方が(少ない方が)よいのかというとこれも否です。
嘘のコメントならないほうが良いのか?これも否です。。嘘でもないよりあった方が良い。なぜなら、仮に嘘でも、そのような意図があったかどうかが分かるから。仮にそれがただ他からコピペして修正し損なっているものでも、「その事実」が分かるだけで対処の方針が違ったりします。
コメントは全体の20%以下が望ましいという言説もあるようですが、128KB程度のオンメモリで動くインタプリタ型言語のコメントじゃあるまいに、昨今の環境では折角ほぼ無限のコメントが書けるんだからガンガン書けばいいと思う。
コメントがなくてもいいと言う人は、よほど良いコードしか触れていないか、あるいは、自ら他人のコードをメンテする必要がない人なんじゃないかと思う。
そもそも多くの場合、コメントがない、或いは腐れている時点で、コードがどのような品質であるか想像に難くない。
指針をひとつ掲げるとするなら、コメントは長く、コードは短く。そしてコードの邪魔にならない様にコメントを書く。といったところではないかと思う。もっとも長くとは言っても、要領よく簡潔に書くことができれば、その方がより望ましいのはコメントに限らず当然のことですが。
posted in IT / テクノロジー, 与太話 by ooltcloud | No Comments
2010年11月12日
こんなコードを書いてみる。
で、デザイナで、TextBox1のTextプロパティに適当な値を、Form1は初期サイズ(300×300)からちょっとサイズを変更(例:300×212)にして、その上で最大化するように設定しておく。
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Debug.Print("Form1_Load")
End Sub
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
Debug.Print("Form1_Resize")
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Debug.Print("TextBox1_TextChanged")
End Sub
End Class
実行すると結果はこう。
TextBox1_TextChanged
Form1_Resize{Width=300, Height=212}
Form1_Resize{Width=1296, Height=1008}
Form1_Load
注意点としては、以下
- フォームロードよりも先に、コントロールのイベントややResizeイベントが発生する。
- リサイズイベントが二回発生する。
- 実は、ウインドウが最大化でなく普通で、サイズもデザイナのデフォルトな300×300だと、Form_Resizeイベントは発生しない。
ソースコードをみると、まあ当然ですよね、といった感じ。
_
Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(36, 21)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(191, 19)
Me.TextBox1.TabIndex = 0
Me.TextBox1.Text = "test" ' TextBox1_TextChanged
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(284, 175)
' Form1_Resize{Width=300, Height=212}
Me.Controls.Add(Me.TextBox1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.WindowState = System.Windows.Forms.FormWindowState.Maximize
' Form1_Resize{Width=1296, Height=1008}
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
つい、最初にくるイベントがForm_Loadだと思いがちなのでメモ。
posted in Program, VB.NET by ooltcloud | No Comments
2010年11月11日
拡張メソッドを作ったみましたのでメモ。
Module Extensions
<System.Runtime.CompilerServices.Extension()> _
Function Norm(ByVal xml As XElement) As String
Dim normalize As String = System.Text.RegularExpressions.Regex.Replace(xml.Value, "s+", " ")
Return (Trim(normalize))
End Function
End Module
上記の使い方は、たとえば以下。
Sub Main()
Dim sql = <sql>
select *
from table
</sql>.Norm
Console.WriteLine(sql)
End Sub
結果はこんな。
select * from table
まあ邪道と言いたくば言え(汗
まとめると、コツとしては、
・System.Runtime.CompilerServices.Extension() 属性を付与する。
・VBの場合Moduleを使用する必要がある。
といったところでしょうか。
posted in Program, VB.NET by ooltcloud | No Comments
2010年10月7日
先日、内部構造の話を書きましたが…>http://ooltcloud.sakura.ne.jp/blog/201010/article_06000230.html
そもそも美しさの定義って人によってまちまちです。絶対的な美しさというのはなくて、好みという物があると思います。例えば、私がいままで見たコードの中で一番美しいのコードって以下だと思っています。
void strcpy(char *s,char *t) {
while (*s++ = *t++);
}
言わずと知れた strcpy (C言語) です。
このコードはK&Rの「プログラミング言語C 第2版」にでています。(p129 あたり)
ですが、私は現在この手のコードは嫌いであり、仕事でこのコードを書かれたらきっと書き直しを要求します。
理由は、一行が複数の意味を持ってしまっているから。上記のコードは少なくとも一文で4つの意味を生じてしまっています。(繰り返し、代入、終了判定、リターン値の決定) あと正しく理解すればそんな誤解はないはずですが、初心者には加算したポインタを戻しているかの様な錯覚を与えるかも知れません。
このコードを前にして「こう書くべき」というコードは提示できませんが、一文は一つの意味になるように書かれていた方がよろしいのではないかと思う所存です。まあ言語の特性やチームの文化などもあって、分解すればそれでよいかというとそういうわけでもないのですが。
とはいえ、以下のようなコードはいかがかと・・・
Dim Value1 As String = Class1.GetTableData("Select Value1 From Table1").SetProperty(0).Value1
わけがわからん…一行になってさえいればかっこいいと思っているんだろうか。
誰か助けてください…(汗
posted in IT / テクノロジー, 与太話 by ooltcloud | No Comments
2010年10月6日
最近、数週間の間にリアルとネットの両方で、「ちゃんと動くシステムであれば内部構造の良否はお客は問わない」という話が数度話題に上りました。なのでメモ。ついでに「内部構造を綺麗にするための費用は顧客は出さない」という話もあったかな。
で? だから何?
いや、真理だと思います。掛け値なしで。
でもね。この話、見落としがあると思うんです。
というと良く言われるのは、保守性とか性能とか信頼性が上がるとか。あるいは、初期投資コストはかかるけど後で回収できるとか。果ては美しいとか、評価されるとかリスペクトされるとか?
そうじゃなくて。
(特に他人の)汚いコードは私には理解することが困難なので、そのままだとコードに手が入れられないんですよ!><;
汚いコードは直さなくていいから、コスト最小でちゃちゃっと改造しちゃってください、とか言われると、「何それ私って超賢い人だと思われてる?」って感じ。スーパーマンじゃないからそんなことできないよ。普通はちゃんと整理してからじゃないと先に進めないよね。
たとえば、昔の年賀はがきを取り出して、番号の末尾の数字(0-9)でもっとも多かった数字は何?ってゲームをするとき、10個の山を作りませんか? そういう作業を整理するといいます。コードの世界だとリファクタリングと言ったりします。
これを500枚の年賀状の束そのものから瞬間的に答えを出す。「汚いままでいいから速いとこ」ってのはこれと同じことを言っていると思うわけです。
できねーよ。そんなこと。天才じゃあるまいに。
別に出し惜しみしているわけでなく、自己満足に浸りたいわけでも、尊敬してほしいわけでもない。ただただ、今のコードが容易に理解できないから、必死に読んでやっとの思いで理解したことを、次読むときにできる限り理解しやすいように、コメントやら構造やらを整理していっているだけなんです。
ほんとですってばさ(汗
posted in IT / テクノロジー, 与太話 by ooltcloud | 1 Comment
2010年10月4日
この10/1から、15750円から22260円に値上げらしい。値上げ率40%!
http://www.oracle.com/global/jp/education/news/certprice_revision201010.html
タバコもひどいが、こちらも負けず劣らず…
しかし、この価格設定に自信があるんだろうな。参りましたって感じ。
唯一安くなっていそうな「オンライン試験」とやらですが、2試験あわせて認定となる試験の「1試験にだけ」適用可能ということで、片側が1000円安くなっていても、もう片側が7000円高くなってたら、結局値上げには変わりなく…
うーむ(汗
posted in 与太話, 時事, 資格 by ooltcloud | No Comments
2010年10月1日
以下のような感じで、呼び出し元メソッド名の取得が出来るようです。ログ記録に便利かも。
Public Shared Function GetMethodName(ByVal i As MethodLocation)
Dim st As New StackTrace
Dim className As String = st.GetFrame(i).GetMethod.ReflectedType.Name
Dim methodName As String = st.GetFrame(i).GetMethod.Name
Dim location As String = String.Format("{0}.{1}", className, methodName)
Return (location)
End Function
Public Enum MethodLocation
ThisMethod = 1
CallerMethod = 2
End Enum
使い方は以下
Module Module1
Sub Main()
SubRoutine()
End Sub
Sub SubRoutine()
Console.WriteLine(GetMethodName(MethodLocation.ThisMethod))
Console.WriteLine(GetMethodName(MethodLocation.CallerMethod))
End Sub
End Module
結果はこんな感じ
Module1.SubRoutine
Module1.Main
Exception で StackTrace 吐くのは知っていたから、やればできるんだろうなあと思ってはいましたが、こんなにあっさり出来るとは…
posted in Program, VB.NET by ooltcloud | 1 Comment
2010年9月30日
前回、最終的にこんなコードを書いたわけですが。
Dim source As Integer() = {1, 2, 3, 4, 5}
Dim int2strConverter As New System.Converter(Of Integer, String)(Function(x) x.ToString)
Dim s() = Array.ConvertAll(source, int2strConverter)
Dim csv As String = Strings.Join(s, ",")
delegeteだと、また別に関数書かないとならないので、勢いラムダ式にしてしまったわけですが。
そもそも、VB2008系の構文使うなら、そして変換しつつ別の配列をおこすなら、こんなことしなくても Linq で十分いけるじゃん?と今日気づいた。
こんな感じ。上のよりはマシなのではと…
Dim source As Integer() = {1, 2, 3, 4, 5}
Dim s = From x In source Select CStr(x)
Dim csv = Strings.Join(s.ToArray, ",")
まあとりあえず当面は Linq で解決ということにしよう。
posted in Program, VB.NET by ooltcloud | 2 Comments
2010年9月24日
昨日、親戚の七七日法要があり、そして今日は彼岸(会法要の中日)と言うこともあり、まあそれに関する説法があったわけで。
印象に残ったのは「此岸は煩悩や迷いに満ちたこの世であり、彼岸は悟りの世界である」的な話があったわけです。
ええ確かに私は此岸、煩悩や迷いに満ちたこの世にいます(汗
VBで、Integerの配列を カンマ区切り(csv形式)の文字列にしたいと考えたとき、String.Join あるいはStrings.Joinでもって一発でつなげてやれば、さあ解決…とおもったがこれができない。
Dim source As Integer() = {1, 2, 3, 4, 5}
Dim csv1 = Strings.Join(source, ",")
' これらの引数で呼び出される、アクセス可能な 'Join' がないため、オーバーロードの解決に失敗しました:
' Public Function Join(SourceArray() As String, [Delimiter As String = " "]) As String':
' 'Integer' は 'String' から派生していないため、型 'Integer の 1 次元配列'の値を
' 'String の 1 次元配列' に変換できません。
' Public Function Join(SourceArray() As Object, [Delimiter As String = " "]) As String':
' 'Integer' が参照型でないため、'Integer の 1次元配列' 型の値を
' 'Object の 1 次元配列' に変換できません。
Dim csv2 = String.Join(",", source)
' 'Integer' は 'String' から派生していないため、型 'Integer の 1 次元配列' の値を
' 'String の 1 次元配列' に変換できません。
要は要素が「String型じゃないからだめ」「値型だからだめ」との由…。
まあ仰ることごもっともなんですが、「数値要素をセパレータで連結して文字列にする」なんてありふれているんだからあっさりやらせてよ、というのが私の主張…
で、こんなのはその気になればベタですぐコードがかける訳ですが。
Dim source As Integer() = {1, 2, 3, 4, 5}
Dim csv = source(0).ToString
For indexNo As Integer = 1 To source.Length - 1
csv &= "," & source(indexNo)
Next
ですが、こういうものをベタで書く時代は終わっているのではないかと思っていて、なにか join メソッド系で手がないかと思うわけです。で、2日がかりで導いたコードは以下。
Dim source As Integer() = {1, 2, 3, 4, 5}
Dim int2strConverter As New System.Converter(Of Integer, String)(Function(x) x.ToString)
Dim s() = Array.ConvertAll(source, int2strConverter)
Dim csv As String = Strings.Join(s, ",")
確かに join を使用することには成功してはいますが、記述量も可読性も効率もいまひとつな感じ…
どうがいいのかなあ。まさに此岸にいて、煩悩や迷いに満ちていることを実感できる秋分の日でありました…
posted in Program, VB.NET by ooltcloud | 1 Comment
2010年9月21日
ちょっと時期を逸しましたが…
先日 java のアップデートを行ったとき、オレンジから赤になっていてびっくりしました。
アップデート開始時>オレンジ
アップデート途中>赤
Sun終了かあ…とか思ってしまって、ちょっと寂しい。
posted in 時事 by ooltcloud | 2 Comments
2010年8月16日
元記事> http://pc.watch.impress.co.jp/docs/column/hot/20100816_387393.html
感慨深くもあるが…
とりあえず Windows 7 に Vista用のドライバをインストールすることで、AHA-2940U は認識するようです。
posted in 時事 by ooltcloud | 1 Comment
2010年8月16日
Java の生みの親、James Gosling が Oracle を辞めていたという話を今更ながらに知ったのですが。
「Javaの生みの親」ゴスリング氏、オラクルを退職
http://japan.zdnet.com/news/ir/story/0,2000056187,20411909,00.htm
その流れでぐぐっていると以下のような記事が…
「Oracle、Googleを提訴――AndroidのJava特許侵害で」
http://www.itmedia.co.jp/news/articles/1008/16/news011.html
Sunを喰った影響で、Solaris と RHELベースの Linux , OracleDBMS と MySQL は競合しそうなのでどうなんだろう?と思っていましたが、java はOracleDBMS 本体が 遙か昔から java を選好していたので無風だと(全く根拠なく)思っていたんですが、まさかこんなことになっていようとは…
しかし java、確かに Sun Micro の持ち物なんでしょうが、Open Source 系の旗手のような存在だったのに、こうまざまざとプロプライエタリですってやっちゃっていいんですかね… カリスマも失ってしまっていますし、java のエンジニアが離れていかなければいいんだけど…。まあ圧倒的大多数はjavaがプロプライエタリだろうとJames Goslingがどこにいようと全く関係ないのだとは思うので、杞憂なんでしょうが。
ところで、Google が Go言語の開発を開始した時期と Oracle が Sun を買収した時期が微妙に一致するような気がするのですが、もしかして Google はこれを想定していたのかな。もっとも Go言語が javaの代替になるのかどうか全く知りませんが…
posted in 時事 by ooltcloud | No Comments
2010年8月3日
ちょっとリクエスト/レスポンスを確認/変更するツールが欲しくなったので発掘。
http://portswigger.net/suite/download.html
使い方はよくわかりませんが、とりあえず。
・ブラウザのプロキシを 127.0.0.1:8080 で設定。(localhostと書くとipv6になったりするので注意)
・suite.bat を起動 (もちろんjre必要)
・起動すると、Proxy タブ→ Option タブの、
真ん中あたりの「intercept server responses」の「intercept if.」をチェックしておく。
・Proxy タブ→ intercept タブの"intercept is on"表示を確認。off になっていたら on にする。
・あとは、ブラウザからふつうに要求。
・ただ、一要求単位でとめられるので、Proxy タブ → intercept タブの"Forward"釦をひたすら押す。
・リクエストの内容を改変したい場合は、"Forward"釦を押す前に変更。
とりあえず、これで http のリクエストが確認できるようになりますと。
ただ、日本語は化けます。なんとかならないかなあ。
そしてあとはこのあたりで遊ぶ。
http://xss-quiz.int21h.jp/
Stage6がクリアできない… _| ̄|○
posted in Program, Utility, WEB by ooltcloud | No Comments
2010年8月2日
posted in Program, WEB by ooltcloud | No Comments
2010年7月31日
なんとなく思いついたのでメモ。
そもそもだなー、という話はあるとしても、なんかどっかでいつかこんなバグではまる気がしてならない。
こんなのに遭遇したら、絶対にわからん。
Module Module1
Private _value As Integer
Sub Main()
Dim t As New System.Threading.Thread(AddressOf ThreadRoutine)
t.Start()
_value = 100
Class1.ClassMethod(_value)
End Sub
Sub ThreadRoutine()
System.Threading.Thread.Sleep(500) ' 処理中
_value = 300
End Sub
End Module
Class Class1
Public Shared Sub ClassMethod(ByRef value As Integer)
value = value * 2
System.Threading.Thread.Sleep(1000) ' 処理に時間がかかった
' 200のはずでは? 100*2だよね?
If (value <> 200) Then System.Console.WriteLine("200じゃないよ?")
End Sub
End Class
posted in Program, VB.NET by ooltcloud | No Comments
2010年7月31日
三洋といえば、友人のPHC-33に惹かれて、お年玉を総動員して、特売なWAVY2(MPC-2)を買ったなあ。今から約25年前の話。四半世紀か…
あれがなかったらこの業界にもいなかったのだろうなあ…
MPC-2(WAVY2)
買ったのはこれ。29800円でした。
http://f1-ho-opc.com/opc/siries/MSX/wavy2.html
http://openlab.jp/kitaro/natsupaso/MSX/MSX_SANYO_WAVY2.jpg
PHC-33
倍速データレコーダー内蔵のにくいやつ。
http://www.old-computers.com/museum/computer.asp?st=1&c=464
CANON V-8
一番最初に触ったのはこれかな。
http://www.old-computers.com/museum/computer.asp?st=1&c=429
posted in 時事 by ooltcloud | No Comments
2010年7月30日
MUTEXによるプロセス間の排他制御。MUTEX使うの10年ぶりだ…ということでメモ。
Sub Main()
Dim _mutex As System.Threading.Mutex
' 取得
_mutex = New System.Threading.Mutex(False, "LockName")
_mutex.WaitOne()
' 処理
MsgBox("処理中")
' 解放
_mutex.ReleaseMutex()
_mutex.Close()
End Sub
今回初めて知りましたが、mutexはセッション毎にできるらしい、つまり、リモートデスクトップとローカルとでは排他できないとのこと。実際に確認してみたら、リモートデスクトップとローカルとでそれぞれ取得できました…
セッション共通でmutexを使いたい場合は、"Global"を先頭にいれたらよいらしい。しかしmutexを作成する(New)の段階で例外(System.UnauthorizedAccessException)が出るようになるので、実際に使用する場合にはお手当てする必要がありそうです。
posted in Program, VB.NET by ooltcloud | No Comments
2010年7月30日
メモ。実行中のクラス名とメソッド名の求め方。
Module Module1
Sub Main()
With System.Reflection.MethodInfo.GetCurrentMethod
Console.WriteLine(.DeclaringType)
Console.WriteLine(.Name)
End With
End Sub
End Module
Cで言うところのマクロ(#DEFINE)がほしいなあ…
posted in Program, VB.NET by ooltcloud | No Comments
2010年7月11日
Sharedインスタンスの実体化のタイミングを確認。
最初に操作/参照された瞬間に初期化が走るようですね。
Public Class Form1
Private Sub Button1_Click(...) Handles Button1.Click
Class1.Data = "AAAAA"
MsgBox(Class1.Data, , "Button1_Click")
End Sub
End Class
Public Class Class1
Private Shared mInstance As New Class1
Public Shared Data As String
Private Sub New()
System.Threading.Thread.Sleep(5000)
MsgBox(Data, , "Class1.New")
End Sub
End Class
なんとなく、Class1.Dataに代入することで Class1 が New されるかのように感じるので、 New()内では Dataプロパティに値(="AAAAA")が入っていそうですが、そうはならないよと言うことで。
また、誰かが触らない限り、Newされないので、コンストラクタに時間のかかる処理を入れてしまうと、初期化に時間がかかってレスポンスが悪いという結果になりかねないので、プロセス起動とともに初期化しておいてほしいようなものは、それなりのお手当てを忘れないようにしましょう。
posted in Program, VB.NET by ooltcloud | No Comments
2010年7月10日
久々にフリーの休日を手に入れたので、中学の頃に作った利用券を携帯して市の図書館に行ってみた。
なんでかというと、過去、中学校の図書館にはあった Logo の本とかないかなー?と。さすがに書店では絶滅しているので…
で、結論から行くと、2冊の本を発掘しました。が、あまりおもしろいサンプルとかはなく、かなり残念。書籍中では「簡単簡単」と連呼している割に、やけに難しく、かつ、応用性がないなと感じるロジックが多かったです。こんなかったかなあ?
唯一「おお」と思ったのは円の描き方。といっても先日紹介した四角形を描く方法を応用して多角形を描き近似する方法ですが、多の処理系ではわざわざこんな方法は用いませんよね、ということで紹介。
コード
Turtle.Speed = 10
Turtle.X = 20
Turtle.Y = 80
For i=1 To 36
Turtle.Move(10)
Turtle.Turn(10) ' 10°右に曲がれ!
EndFor
結果
これを応用すると、WikipediaのLogoのエントリーで掲示されているような画像が描けます。
コード
Turtle.Speed = 10
Turtle.X = 120
Turtle.Y = 120
a=30 ' 円の数
b = 360 / a
c=30 ' 多角形の頂点の数(多いほど円に近い)
d = 360 / c
For x=1 To a
For y=1 To c
Turtle.Move(10)
Turtle.Turn(d)
EndFor
Turtle.Turn(b)
EndFor
結果
なんか、もうちっょとひねった画像が描けないかなあ。とか考えていたら、確かコッホ曲線とかあったよね。と思って描いてみた。
コード
Turtle.Speed = 10
Turtle.X = 20
Turtle.Y = 100
MaxLevel = 4 ' 操作の回数
LineLength = 4 ' 辺の長さ
Turtle.Angle = 90 ' 右水平方向に
CurrentLevel = 0
' コッホ雪片を描く
For x=1 To 3
Koch()
Turtle.Turn(120)
endfor
' コッホ曲線を描く
' # 線を引く→左60°→線を引く→右120°→線を引く→左60°→線を引く
Sub Koch
CurrentLevel = CurrentLevel + 1
If (CurrentLevel = MaxLevel) Then
Turtle.Move(LineLength)
Else
Koch()
Endif
Turtle.Turn(-60)
If (currentLevel = MaxLevel) Then
Turtle.Move(LineLength)
Else
Koch()
Endif
Turtle.Turn(120)
If (currentLevel = MaxLevel) Then
Turtle.Move(LineLength)
Else
Koch()
Endif
Turtle.Turn(-60)
If (CurrentLevel = MaxLevel) Then
Turtle.Move(LineLength)
Else
Koch()
Endif
CurrentLevel = CurrentLevel - 1
EndSub
結果
Logo入門といえばコッホ、みたいなイメージがあったんだけど、前述書籍でもぐぐっても出てこない。なんで?なにかの情報と入れ替わっているのかなあ?
ともあれ、なんかひさびさに仕事と全く絡まないコードと戯れた一日となって、なんとなくノスタルジックでした。
posted in Program, Small Basic by ooltcloud | No Comments
2010年7月9日
恥ずかしい話ですが、照合順序という言葉を最近知りました。きっかけは以下の記事。
http://blogs.wankuma.com/ognac/archive/2010/06/04/189722.aspx
ところで、SQLServerで、以下のような都道府県テーブルを作ってみました。
CREATE TABLE dbo.都道府県(
県名1 varchar(10) NOT NULL,
県名2 nvarchar(10) NOT NULL
)
データは当然の如く以下。
県名1 | 県名2 |
北海道 | 北海道 |
青森県 | 青森県 |
岩手県 | 岩手県 |
宮城県 | 宮城県 |
秋田県 | 秋田県 |
山形県 | 山形県 |
福島県 | 福島県 |
…以下略
このテーブルに、以下のような、県名1でソートするSELECT文を発行してみます。
SELECT * FROM test.dbo.都道府県
Order by 県名1
Collate Japanese_Bin
結果は以下。ほぼ「あいうえお」順。「岩手」は"岩"が訓読みの"いわ"ではなく音読みの"ガン"でソートされていると思えば、完全に「あいうえお」順です。
県名1 | 県名2 |
愛知県 | 愛知県 |
愛媛県 | 愛媛県 |
茨城県 | 茨城県 |
岡山県 | 岡山県 |
沖縄県 | 沖縄県 |
岩手県 | 岩手県 |
岐阜県 | 岐阜県 |
…以下略
では、次に、ソート列を県名1から県名2に変更してみます。
SELECT * FROM test.dbo.都道府県
Order by 県名2
Collate Japanese_Bin
県名1と県名2の内容は同じなので、結果は同じかと思いきや…
県名1 | 県名2 |
三重県 | 三重県 |
京都府 | 京都府 |
佐賀県 | 佐賀県 |
兵庫県 | 兵庫県 |
北海道 | 北海道 |
千葉県 | 千葉県 |
和歌山県 | 和歌山県 |
…以下略
あーら不思議。なんかよくわからない順番になっちゃったー(棒
同じデータをソートしているのになんでー(棒
知らないとはまりそうです。上記のようなケースはほぼないでしょうが、「SQLではうまくソートするけど、VBでやるとうまくソートできない」とかはありそう。そしてなぜかわからず長時間はまる。ああ怖い。
posted in SQLServer, データベース by ooltcloud | No Comments
2010年7月8日
なんか帰ってブログをみていると、楽天が社内公用語を英語にしたとか何とか。まあどうでもいいんですけども。
そういえば、英語といえば、以下のblogで
http://blogs.wankuma.com/carbonara/archive/2010/06/01/189633.aspx
Widthの読みというか、Hepburnをなんて読むべきか、って話をしてたのを思い出したのと、Oracleで"Datapump"というツールがあるのですが、これをなんて読むか、というのを思い出しました。
Hepburnについては、上記blogでコメントしたように、
あえていうなら、普段発音なんて聞かないので発音から判断する必要を感じない。「へっぷばーん(he-p-bu-r-n)」でよいかと。
なんですが、じゃあDatapumpはというと、「でーたぱんぷ」とは読まず「でーたぽんぷ」です。これは譲れない。
ところで、結構「でーたぱんぷ」と読む人がいます。おそらくネイティブ発音的にも「ぱんぷ」のほうが近いと予想されるし、上記の「へっぷばーん」規則的にも、「ぱんぷ」と読むのが正しい。
でも「ぽんぷ」。 これは譲れない(ぉ #あくまで現時点で。
なぜなら、pumpはいわゆるポンプ(揚水ポンプとか)のことだから。
いやまて、ポンプはオランダ語(=pomp)由来だろ、それを言ったらcardをカルタと読むようなものだろ!
とか言われそうですが、ええ、まったくご指摘の通りなんですが、でも私的にはpumpはポンプなのです(笑。
まあ、英語スペルをどう"日本語読み"するかというのはなかなか難しいですなあということで。
ネタ元
http://blogs.wankuma.com/ognac/archive/2010/05/19/189182.aspx
http://blogs.wankuma.com/ognac/archive/2010/06/16/190243.aspx>
http://blogs.wankuma.com/carbonara/archive/2010/05/20/189223.aspx
http://blogs.wankuma.com/carbonara/archive/2010/06/01/189633.aspx
http://blogs.wankuma.com/carbonara/archive/2010/06/14/190161.aspx
posted in 与太話, 自然言語 by ooltcloud | No Comments
2010年7月4日
前回からのつづき。
セッション中で私が質問した内容です。
音は鳴らないんだろうな、と思ったら何が何が。QBasic互換のMMLが使えるとのこと。
さっそく試してみました。
コード
Sound.PlayMusic("O4 L8")
Sound.PlayMusic("CFA4 AAA4 GAGf2R")
Sound.PlayMusic("CFA4 FA>C4 <B-AG2R")
Sound.PlayMusic(">C<B-A4 AGF4 GA>C<B-2R")
Sound.PlayMusic("DC+C4 EFG4 AGF2R")
TextWindow.WriteLine("おわり")
単音ですが確かにMMLで制御できます。ピアノのペダルを踏み込んだままの状態な感じなのが気になりますがともかく鳴ります。すげー。
先のLOGO的なグラフィックといい、今回のMMLのような楽曲作成といい、近代プログラム言語だと結構敷居が高いんですが、これがあっさりできるというのは、回顧主義なのかもしれませんが、なにげに気持ちよい ^^;
QBasic互換のMMLがどのようなものが使えるのかが不明ですが、とりあえず確認できた使えるコマンドは以下。
R … 休符
C,D,E,F,G,A,B … 音(音名)
C+ … Cは音名。♯ (シャープ, 半音階上げる)
C- … Cは音名。♭ (フラット, 半音階下げる)
Cn … Cは音名。nは音の長さ。 例) 1:全音符 / 2:二分音符 / 4:四分音符 …
Cn. … Cは音名。nは音の長さ。"."は付点。"C2."は付点二分音符で長さが二分音符+四分音符。
Ln … デフォルトの音の長さ。L4とすると、音名の横に数字を書かない場合、Lnの長さになる。
On … オクターブ。デフォルトは4。いわゆる 「ドレミファソラシド」 は 「O4 CDEFGAB O5 C」
> … オクターブを一つ上げる。上記の 「O4 CDEFGAB O5 C」 は 「O4 CDEFGAB>C」 でも 同じ。
< … オクターブを一つ下げる。
逆に確認できていないのは以下。
テンポ … Tn で指定できそうだが無視された。
音色 … とりあえず音色ひとつだけ? @nは無視された。
ペダルオフ? … ないのかなあ?
和音 … 当面ないんだろうな。
このあたり、もっと強化されるとよいな。
# ってなことを勉強会懇親会中にネタつくってたんですが、タイムアウトで披露に失敗しました… _| ̄|○
posted in Program, Small Basic by ooltcloud | 6 Comments
2010年7月4日
前回からのつづき。
どうやらSmall Basicはタートルグラフィックが扱える模様。BASICというよりはLOGOですね。
やってみると本当にカーソルが亀。PC-8801版は△マークだったような。MSX-LOGOは亀だったかな…
ともかくレッツゴー
セッションではこんな例が出ていました。(うろおぼえ)
コード
Turtle.Speed = 10
Turtle.X = 20
Turtle.Y = 120
Turtle.Move(100)
Turtle.Angle = 90 ' 画面右方向を向く
Turtle.Move(100)
Turtle.Angle = 180 ' 画面下方向を向く
Turtle.Move(100)
Turtle.Angle = -90 ' 画面左方向を向く
Turtle.Move(100)
結果
でもロゴなら、以下のようなコードのほうがきっとおもしろい。
上記と等価なコード
For i=1 To 4
Turtle.Move(100)
Turtle.Turn(90) ' 90°右に曲がれ!
EndFor
これを応用すると、以下のようなコードが書ける。
コード
Turtle.Speed = 10
Turtle.X = 20
Turtle.Y = 80
For i=1 To 12
Turtle.Move(20)
Turtle.Turn(60) ' 右へ60°
Turtle.Move(20)
Turtle.Turn(-30) ' 左へ30°
EndFor
結果
あるいはこんなのとか。
コード
Turtle.Speed = 10
Turtle.X = 120
Turtle.Y = 220
For i=1 To 36
Turtle.move(200) ' 200進んで
Turtle.Turn(190) ' 鋭角10°で折り返す
EndFor
結果
こういう相対的な座標指定で簡単にグラフィックか描ける言語って少ないから、新鮮で楽しいですよね。
つづく
posted in Program, Small Basic by ooltcloud | 2 Comments
2010年7月3日
今日、岡山のOITEC勉強会に出席したところ、small basic というのがあるらしく、そのセッションをしてました。
古き良き(?) BASIC を再現しているとかなんとか。
とりあえず、おもしろかったのでまとめ。
Microsoft Small Basic のダウンロードは以下から。
http://www.microsoft.com/downloads/details.aspx?FamilyID=b006d58d-c2c7-44ad-936b-e7e2d7de793e&displaylang=en
つづく
posted in Program, VB.NET by ooltcloud | 1 Comment
2010年7月1日
String.Formatの危険性(改) その5です。「 [VB.NET] 正規表現のエスケープ 」からの続きです。
今回が最終回です。
前回を最終回にしようと思っていたのですが、「プログラマのための文字コード技術入門 (ISBN-13:978-4774141640)」を先日購入しまして、眺めていると興味深いことが書かれていたのでメモ。
javaでは、unicodeのエスケープは文字列ではなく、まさに文字(?)らしく、ソースコードに対しても効いてくるらしいです。従って以下のコードはコンパイルできません。
java
public class Main {
public static void main(String[] args) {
System.out.println("aaaau000abbbb");
}
}
なんでかというと、コンパイラ(?)は上記のソースコードは以下のように見えるから。
java
public class Main {
public static void main(String[] args) {
System.out.println("aaaa ←文字列の途中で改行されているように見える
bbbb");
}
}
ちなみにC#で、同様のコードを書いてみたところ、これはコンパイルエラーとなりませんでした。
C#
class Program
{
static void Main(string[] args)
{
System. Console.WriteLine("aaaau000abbbb");
}
}
これを逆手にとって、javaでは以下のようなコードが書ける模様。
java
public class Main {
public static void main(String[] args) {
String u0061 = "aaaa";
System.out.println(a);
}
}
…なんと面妖な。
てことは、C#では同じ事は出来ないんだな?と思って実験。
C#
class Program
{
static void Main(string[] args)
{
string u0061 = "aaaa";
System.Console.WriteLine(a);
}
}
先生!コンパイルエラーになりません。出来る模様です…最早何がなんだか(笑
このあたり、XSS系のプロフェッショナルが詳しいんだろうなあ。とか。
そんなわけで、たかがエスケープですが、奥が深うございました。
奥深く考える機会をいただいた、よねけんさんに感謝したいと思います。
# しかし入り口のさわりで、まだまだ奥があるのでしょうが… --;
posted in C#, Java, Program, VB.NET by ooltcloud | 1 Comment
2010年6月30日
String.Formatの危険性(改) その4です。「[C#] ファイルからの入力の場合」からの続きです。
C# では"n"は書式文字列ではなく文字リテラルでした。というのが前回までの結論でした。
ところで、"n"などの記法は正規表現検索などでも使用しますが、こちらはどうなんでしょうか?ということで試してみました。
C#
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
String tab = "x09";
Console.WriteLine("1 :{0}", Regex.IsMatch(tab, "t")); // True
Console.WriteLine("2 :{0}", Regex.IsMatch("t", tab)); // True
Console.WriteLine("3a:{0}", Regex.IsMatch(tab , @"t")); // True
Console.WriteLine("3b:{0}", Regex.IsMatch("t" , @"t")); // True
Console.WriteLine("4 :{0}", Regex.IsMatch(@"t", @"t")); // False
}
}
VB
Imports System.Text.RegularExpressions
Module Module1
Sub Main()
Dim tab As String = Chr(&H9)
Console.WriteLine("3a:{0}", Regex.IsMatch(tab, "t")) ' True
Console.WriteLine("4 :{0}", Regex.IsMatch("t", tab)) ' False
End Sub
End Module
C#の1,2は表現は違いますが、検索対象(第一引数)、パターン文字列(第二引数)は等しく tab (0x09) で同じです。なので一致します(=True)。
C#の3a,3bは、検索対象(第一引数)は tab (0x09) ですが、パターン文字列(第二引数)は"t"です。が、"t"は正規表現言語要素なので、tab (0x09) と一致するものとして評価されるため一致します(=True)。
C#の4はパターン文字列(第二引数)の"t"はtab (0x09) と評価されるので、検索対象(第一引数)の"t"とは一致しません(=False)。
VBでは、検索対象(第一引数)の"t"は文字リテラルのエスケープとしては認められず、パターン文字列(第二引数)の"t"は tab (0x09) として評価されるので、4は一致しません(=False)。逆(3a)は一致します(=True)。
まとめると
・正規表現クラスが書式文字列として"n"とか"t"を解釈してくれる。
・だから、VBでも"n","t"のエスケープが有効。
・でも、C#ではその前に文字リテラルとしてエスケープされる。
・エスケープでなくても、文字コードそのものをパターン文字列に指定してもOK
ということのようです。
VBで"n"を使いたい場合やC#でもエスケープを外出しにしたい場合は、正規表現クラスを使えば実現できるって事ですね。
つづく
posted in C#, Program, VB.NET by ooltcloud | 4 Comments
2010年6月30日
String.Formatの危険性(改) その3です。「 [C#] 逐語的文字列」からの続きです。
#デスマってて、間が開いてしまいました…
本題のファイル入力の場合はどうなるか。実験しました。
プログラム
class Program
{
static void Main(string[] args)
{
System.IO.FileStream fs = new System.IO.FileStream(@".test.txt",System.IO.FileMode.Open);
System.IO.StreamReader sr = new System.IO.StreamReader(fs);
string s = sr.ReadLine();
System.Console.WriteLine(s);
}
}
.test.txt
aaaanbbbb
結果
aaaanbbbb
まあファイルを読んで表示しているだけなので、nが "" "n " なのは当然ですよね…
つづく
posted in C#, Program, VB.NET by ooltcloud | 2 Comments
2010年6月6日
String.Formatの危険性(改) その2 です。「"n"とかは書式文字列ではなく文字リテラル」からの続きです。
C#では、"n"とかは文字リテラルでした。というのは前回の通りですが、"n"と書いたら 0x0D ではなく '' 'n'で評価してくださいよ。という指定(ダブルクォーテーションの前に@をつける)も出来るようで、それを逐語的文字列と呼ぶようです。(変な名前…)
逐語的リテラル文字列の例
class Program
{
static void Main(string[] args)
{
// 逐語的文字列
string s =@"AAAAnBBBB";
System.Console.WriteLine(s);
}
}
結果
AAAAnBBBB
なので、以下のように String.Formatでも書式に逐語的リテラルで指定してしまうと、nは効かなくなってしまいます。(結果は上記と一緒です)
System.Console.WriteLine(@"{0}n{1}","AAAA","BBBB");
ちなみに余談ですが、この逐語的文字列、改行を含めることが出来ます。
class Program
{
static void Main(string[] args)
{
// 逐語的文字列
string s =@"SELECT * FROM TABLE
WHERE ID = 99999
GROUP BY ITEM";
System.Console.WriteLine(s);
}
}
結果
SELECT * FROM TABLE
WHERE ID = 99999
GROUP BY ITEM
おお便利!と一瞬思ったけど、ソースコードがいまひとつ美しくないのでちょっとなあ…
つづく
posted in C#, Program by ooltcloud | 2 Comments
2010年6月6日
String.Formatの危険性(改) その1 です。「String.Formatの危険性(改) その0」からの続きです。
"n"とかは書式文字列ではなく文字リテラルです。ここが勘違いの大元でした。つまり、
string.Format("時刻:{0:HH:mm:ss}t内容:{1}n", System.DateTime.Now, msg);
と書いたとき、、色がついた部分が全て書式指定文字列だと勘違いしたわけです。ところが、赤色の箇所は書式指定文字列ではなく、エスケープ表現の文字リテラルだったわけです。
エスケープ表現はC#とVBで異なっていて、以下に詳細があります。
C#のエスケープ
http://msdn.microsoft.com/ja-jp/library/aa691087.aspx
VBのエスケープ
http://msdn.microsoft.com/ja-jp/library/aa711652.aspx
…VBはダブルクォーテーションだけなんですね、って感じです。
つまり"n"はあくまで文字リテラルなので、String.Formatを使うまでもなく、文字列代入でも使用でき、有効です。
C#
class Program
{
static void Main(string[] args)
{
string s = "AAAAnBBBB";
byte[] b = System.Text.Encoding.UTF8.GetBytes(s);
System.Console.WriteLine(System.BitConverter.ToString(b));
}
}
結果
41-41-41-41-0A-42-42-42-42
上記の通り、"n"の部分は内部的には CR(0x0D) になっています。 しかしVBで似たコードを書くと、エスケープは効かないので、表記通り "n" (0x5C - 0x6E) となっています。
Module Module1
Sub Main()
Dim s As String = "AAAAnBBBB"
Dim b As Byte() = System.Text.Encoding.UTF8.GetBytes(s)
System.Console.WriteLine(System.BitConverter.ToString(b))
End Sub
End Module
結果
41-41-41-41-5C-6E-42-42-42-42
つづく
posted in C#, Program, VB.NET by ooltcloud | 2 Comments
2010年6月6日
元記事> http://ooltcloud.sakura.ne.jp/blog/201005/article_13015500.html
先日、上記記事で、
例えばメッセージ出力などで、String.Format の書式文字列を外出し(ハードコードではなく定義ファイルなどに格納)して使用する場合、VB と C# で挙動が異なる場合があります。
例えば、
"AAAAnBBBB"
というメッセージを用意した場合、C#では、
AAAA
BBBB
と表示されますが、VBでは
AAAAnBBBB
となってしまいます。
これの何が恐ろしいかというと、C#er が何げに VB なシステムで上記のような書式を指定してしまった場合、意図したとおりに出力されないことを意味します。
などと書きましたが、かなり間違っていました。 _| ̄|○
よねけんさん、ご指摘ありがとうございます。指摘して頂けなかったら棺桶にはいるまで気づけなかったかもしれません…
ということで、訂正記事の作成を試みてみます。 つづく
posted in Program, VB.NET by ooltcloud | 2 Comments
2010年5月20日
ふと、ビット演算をしようとしたとき、68000時代にはまったことを思い出した。
基本的に VB.net や C# (や C,C++ ) には算術シフト演算子しかなくて、論理シフトはできない。
論理シフトがしたい場合、unsigned な変数に入れてやる必要がある。
以下はその例。2つのブロックはともに &H8000 からシフトしているが、上下で結果が異なる。
論理シフトのつもりでシフト演算式を使っているとある領域(要はマイナス)のときに混乱するので要注意。
結果
算術シフト
8000 (-32768)
C000 (-16384)
E000 ( -8192)
F000 ( -4096)
F800 ( -2048)
FC00 ( -1024)
FE00 ( -512)
FF00 ( -256)
FF80 ( -128)
FFC0 ( -64)
FFE0 ( -32)
FFF0 ( -16)
FFF8 ( -8)
FFFC ( -4)
FFFE ( -2)
FFFF ( -1)
FFFF ( -1)
論理シフト
8000 ( 32768)
4000 ( 16384)
2000 ( 8192)
1000 ( 4096)
800 ( 2048)
400 ( 1024)
200 ( 512)
100 ( 256)
80 ( 128)
40 ( 64)
20 ( 32)
10 ( 16)
8 ( 8)
4 ( 4)
2 ( 2)
1 ( 1)
0 ( 0)
コード
Imports System.Console
Module Module1
Sub Main()
WriteLine("算術シフト")
Dim s As Short = 1
s <<= 15
For nLoop As Integer = 0 To 16
WriteLine("{0,4} ({1,6})", Hex(s), s)
s >>= 1
Next
WriteLine("論理シフト")
Dim u As System.UInt16 = 1
u <<= 15
For nLoop As Integer = 0 To 16
WriteLine("{0,4} ({1,6})", Hex(u), u)
u >>= 1
Next
End Sub
End Module
posted in Program, VB.NET, アルゴリズム, 情報技術 by ooltcloud | No Comments
2010年5月13日
【追記】本エントリには誤りが含まれています。(以下赤字取消線の部分など)
訂正記事
別に危険でも何でもないのですが、呆けていると嵌るなと思ったのでメモ。
例えばメッセージ出力などで、String.Format の書式文字列を外出し(ハードコードではなく定義ファイルなどに格納)して使用する場合、VB と C# で挙動が異なる場合があります。
例えば、
"AAAAnBBBB"
というメッセージを用意した場合、C#では、
AAAA
BBBB
と表示されますが、VBでは
AAAAnBBBB
となってしまいます。
これの何が恐ろしいかというと、C#er が何げに VB なシステムで上記のような書式を指定してしまった場合、意図したとおりに出力されないことを意味します。
では外出しさえしなければ良いかというと層でもない様で、C# のソースで String.Format を ハードコードしたものを DLL にして、それを VB で読ませた場合でも上記の結果になります。
なので言語間をまたぐ様なライブラリとか定義ファイルとかを作成する際は要注意です。
ちなみに、VB では n とかの代わりに ControlChars (http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.controlchars_members.aspx) とか vbCrLf (http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.constants_members.aspx) が用意されています。
しかしこれらは、CやC#のようにエスケープ文字ではなくあくまで定数なので、書式に組み込めません。不便です。
なのでどうしても、VB で 'n' のようなエスケープ文字を書式で使いたい、という場合は、正規表現クラスの Unescape メソッド (System.Text.RegularExpressions.Regex.Unescape) を使用することである程度実現できます。
' Imports System.Text.RegularExpressions.Regex は入れておく。
s = String.Format(Unescape("{0:00.00}naaaanbbbb"), 12.3)
WriteLine(s)
結果(VB2005)
12.30
aaaa
bbbb
posted in C#, Program, VB.NET by ooltcloud | 7 Comments
2010年5月10日
アルゴリズムというほどのものではありませんが。
いわゆるUnix時間だのGMT通算秒だのと言われている2038年問題の例のカウンタですが、とある処理系でシリアル秒を求めてほしいと言ったら、そんな機能はないと却下されたので、導入は断念したのですが、作るとしたらどうなるだろうと思って作ってみました。
最適化できる余地や、言語仕様的にどうなんだろうとかいう点はありますが、メモなのでまあよいか。と。
C#
int GetEpochTimeSerial(int year, int month, int day, int hour, int minute, int second)
{
// 1970年元旦からの指定年元旦までの閏年(閏日)の数 '/' は商を取得。少数点以下切り捨て。
int leapDays1 = (year / 4) - (year / 100) + (year / 400); // 西暦元年~指定年の閏日の積算
int leapDays2 = (1970 / 4) - (1970 / 100) + (1970 / 400); // 西暦元年~1970年の閏日の積算 = 477
int leapDays = leapDays1 - leapDays2; // 1970年~指定年の閏日の積算
// 1970年元旦から指定年元旦までの日数
int epochDays = 365 * (year - 1970) + leapDays; // (年*365 + 閏日の積算)
// 各月の日数 1 2 3 4 5 6 7 8 9 10 11 12
int[] monthDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 指定月の前月末日までの日数 (前月までの日を積算)
for (int i = 1; i < month; i++)
{
epochDays += monthDays[i - 1];
}
// 指定月が2月を超えていて、かつ閏年だったら 1日足す
if (month >= 3)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
epochDays += 1;
}
}
// 前日までの日を足す
epochDays += (day -1);
// 日を秒にし、本日の時分秒を足す。
int epochSeconds = (epochDays * 86400) + (hour * 3600) + (minute * 60) + second;
// 結果を戻す
return epochSeconds;
}
posted in C#, Program, アルゴリズム, 情報技術 by ooltcloud | No Comments
2010年5月9日
関係演算の AND は「And」なのは当然として、論理演算の AND ってなんだったっけ?と思って調べたみた。
…違いはないらしい。型( Boolean なのか 整数なのか) の違いということのようだ。 C や C# のように && と & で分かれるわけではないと。
詳しくは以下に記載があるのでメモ。
VBの場合
http://msdn.microsoft.com/ja-jp/library/asfcc119.aspx
C#の場合
http://msdn.microsoft.com/ja-jp/library/6a71f45d.aspx
しかし、 C# に 整数の商 (ExcelとかでいうDiv) を求める演算子がないとは思わなかった…
posted in C#, Program, VB.NET by ooltcloud | No Comments
2010年5月8日
Boolean の整数化ですが、使う関数によって結果が異なります。要注意。
コード
Imports System.Console
Module Module1
Sub Main()
Dim a As Boolean = True
WriteLine(CInt(a))
WriteLine(System.Convert.ToInt32(a))
End Sub
End Module
結果
-1
1
C系は 1 、BASICは -1 というのが歴史だからか…
ともかく「BASICなんだから -1」と信じていると足をすくわれそうです。
posted in Program, VB.NET by ooltcloud | 1 Comment
2010年5月5日
キャストです。Cとかで a = (char*)b とか書くあれ。
VB.NETではいくつか種類があるようなのでメモ。
1.型変換全般
型変換全般についてはここが詳しい模様。
http://msdn.microsoft.com/ja-jp/library/hcb26cc8.aspx
2.キャスト
VB.NETでは、大きく以下の3つの種類があるらしい。
・CType
・DirectCast
・TryCast
それぞれの違いは、以下のページの「型変換のキーワード」のセクションに詳しい。
http://msdn.microsoft.com/ja-jp/library/7k6y2h6x.aspx
つまり、まとめると以下。
・CType は暗黙変換(Long→Integer)とかもしてくれる。
・DirectCast は暗黙変換はせず、継承関係がある場合のみキャスト
・TryCast は DirectCast とほぼ一緒だが例外の代わりに Nothing が戻る。
ということで、普段はDirectCast で暗黙変換を伴いたい場合だけ CType を使うというのが無難でしょうか。
posted in Program, VB.NET by ooltcloud | No Comments
2010年5月4日
それでは、二次元配列にした場合はどうなるのか確認してみた。
具体的には、キャストの箇所で
> 型 'System.Int32[*,*]' のオブジェクトを型 'System.Int32[,]' にキャストできません。
とか言われて怒られることを期待したのだが…
早速実験。
Private Sub Button1_Click(...) Handles Button1.Click
Dim a As System.Array = _
System.Array.CreateInstance(GetType(Integer), New Integer() {2, 3}, New Integer() {1, 2})
Dim b As Integer(,)
Debug.Print(TypeName(a))
' Integer(,) と出力
b = CType(a, Integer(,))
' 例外は出ない。
Dim value As Integer
For index1 As Integer = LBound(b, 1) To UBound(b, 1)
For index2 As Integer = LBound(b, 2) To UBound(b, 2)
value = index1 * 10 + index2
b(index1, index2) = value
Next
Next
For index1 As Integer = 1 To 2
For index2 As Integer = 2 To 4
value = b(index1, index2)
Debug.Print(value.ToString)
Next
Next
End Sub
通った…どうしてですか… >_<;
posted in Program, VB.NET by ooltcloud | No Comments
2010年5月4日
VB6では可能だった配列の下限指定がVB.NETでは出来ないという評判だったのですが、実のところ可能です。 正直余計な事を…って感じですが(汗
たとえば以下。
Private Sub Button1_Click(...) Handles Button1.Click
Dim a As System.Array = _
System.Array.CreateInstance(GetType(Integer), New Integer() {5}, New Integer() {1})
Dim value As Integer
For index As Integer = LBound(a) To UBound(a)
value = index * 100
a(index) = value
Next
For index As Integer = 1 To 5
value = a(index)
Debug.Print(value.ToString)
Next
End Sub
それで、こいつをアクセス使用とした場合、Option Strict Off 下では、上記のように書けますが、 Option Strict On下では「遅延バインディングできません」と怒られます。そこで以下のように訂正する必要があります。
a(index) = value
↓
a.SetValue(value, index)
value = a(index)
↓
value = CInt(a.GetValue(index))
SetValueやGetValueを使わなくてはなりません。面倒ですね。
ではいっそのことInteger()に代入できないのかしら?と思ってもその試みは失敗します。
Private Sub Button1_Click(...) Handles Button1.Click
Dim a As System.Array = _
System.Array.CreateInstance(GetType(Integer), New Integer() {5}, New Integer() {1})
Dim b As Integer()
Debug.Print(TypeName(a))
' Integer() を出力
b = CType(a, Integer())
' System.InvalidCastException' の初回例外が WindowsApplication1.exe で発生しました。
' 型 'System.Int32[*]' のオブジェクトを型 'System.Int32[]' にキャストできません。
End Sub
例外が出ます。TypeName()では同じ型であるかのように表示されるが、内部的に型は違いますよと。
# Int32[*]の[*]って、添字下限が0じゃないですよ、という意味なんですかね…
キャストで例外が出てしまうのは、Array.CreateInstance が悪いのではなく、配列下限が原因です。よって、Array.CreateInstanceを使っても下限が 0 であれば問題ありません。
posted in Program, VB.NET by ooltcloud | No Comments
2010年5月3日
bitlocker to go では XPから書き込みができないことを受け、TrueCryptに舞い戻り…(6.3aにはなった)
ただ、当該ボリューム中に仮想マシンを置きたいこともあり、どんなものか測定してみた。
暗号化前

TrueCryptによる暗号化後

あまり変わらない。というより絶対的に速度が遅い。2.5インチハードディスク & USB2 だからなのか…
ドライブの内周と外周の速度差はほぼありませんでした。ZCLVとかなのかしらん?
posted in Utility by ooltcloud | No Comments
2010年5月3日
近々使うことになるかもしれないのでメモ。
Public Class Singleton
Private Shared ReadOnly mInstance As New Singleton
Public Shared Function GetInstance() As Singleton
Return mInstance
End Function
Private Sub New()
End Sub
End Class
参考元はこちら
http://msdn.microsoft.com/ja-jp/library/ms998558.aspx
http://www.atmarkit.co.jp/fjava/javatips/075java007.html
posted in Program, VB.NET by ooltcloud | No Comments
2010年5月3日
posted in C#, Program, VB.NET by ooltcloud | 1 Comment
2010年5月1日
引用元> http://pc.watch.impress.co.jp/docs/news/20100428_364462.html
ソニーは23日、3.5インチフロッピーディスク製品の国内販売を2011年3月末に終了すると発表した。
対象となるのは、「MF2HDQ」シリーズ。同シリーズでは3/10/12枚組、フォーマットの有無、本体色の違いで6製品が用意されている。なお、需要状況によっては2011年3月末以前に販売を終了する場合もある。
ソニーは'81年に3.5インチフロッピーディスクを世界に先駆けて発売して以来、'83年以降に日本でもフロッピーディスク事業を展開していた。
なお、ソニーは2009年度中に3.5インチFDD事業を終了している。また、三菱化学も2009年3月末でフロッピーディスクの販売を終了している。
古き時代の終焉なのかな。
そういえば、MF-2DDの確保を忘れていたな…
ところで、憶えているうちにメモ。
FD…8インチ / MD…5.25インチ / MF…3.5インチ
1S…片面単密(FDのみ)
1D…片面倍密
2D…両面倍密 (FD-2Dで1MB,MD-2Dで320KB,80トラック)
1DD…片面倍密倍トラック
2DD…両面倍密倍トラック (MF-2DD,1024Byte/セクタで720KB,160トラック)
2HD…片面高密度倍トラック (MF-2HD,154トラック)
PC98フォーマットは、1024*8セクタ*154トラック = 1.2MB (360rpm)
PC/ATフォーマットは、512*18セクタ*160トラック = 1.4MB (300rpm)
2TD…PC88VA3のひと。9.3MBらしい。よくしらん。
他にもあるらしいけど、とりあえず主なもののみ列挙。
posted in 時事 by ooltcloud | No Comments
2010年5月1日
メモ。忘れないように。
System.Runtime.InteropServices.Marshal.ReleaseComObject(comObject)
posted in Program, VB.NET by ooltcloud | No Comments
2010年4月21日
正規表現でマッチさせた文字列を取得する際の例。
どうもよく忘れるのでメモ。
Dim match As Match = Regex.Match("tagrget", "(?<name>.*)")
If match.Groups("name").Success = True Then
Debug.Print(match.Groups("name").Value)
End If
posted in Program, VB.NET by ooltcloud | No Comments
2010年4月14日
延期らしい。
http://journal.mycom.co.jp/news/2010/04/14/085/
まあ未だに予約受付しないからずれ込むんだろうな、とか思っていたら案の定らしい。
posted in 与太話, 散財 by ooltcloud | No Comments
2010年4月13日
posted in 与太話 by ooltcloud | No Comments
2009年12月16日
いつの間にか、vmware server 2.0 の network(vmnic)が消えていた。
多分 R2 にアップグレードしたときが臭い…
とりあえず、vmware server 2.0 をアンインストールの後、再インストールで解決。
# PDC に vmware server なんか入れるな? >_<;
posted in 仮想化 by ooltcloud | No Comments
2009年12月16日
自宅の Windows Server 2008 (Active Directory PDC) を 2008 R2 にアップグレードしようとすると、スキーマを拡張しろと怒られた。
> 既存の2003/2008ドメインに 2008R2 をDCとして追加した場合には、
> 以下のコマンドでスキーマを拡張してください。adprep コマンドは
> 2008R2 DVDの supportadprep フォルダにあります。
以下で対処。
adprep /forestprep
adprep /domainprep /gpprep
posted in Windows, 環境設定 by ooltcloud | No Comments
2009年11月8日
被れば被るもので、この一週間くらいに日本語系の話に数点ぶち当たりました。せっかくなのでメモ。
元記事A (国境は"コッキョウ" or "くにざかい"? )
http://blogs.wankuma.com/ognac/archive/2009/11/04/182683.aspx
http://ognac.blogspot.com/2009/11/or.html
元記事B (国家生き残り戦略としての日本語リストラ)
http://d.hatena.ne.jp/michikaifu/20091031/1257023368
元記事C (Microsoftの方針と内閣告示第二号)
http://www.microsoft.com/japan/presspass/detail.aspx?newsid=3491
資料) 日本語表現論
資料A 正字正仮名推進系
http://members.jcom.home.ne.jp/w3c/kokugo/column/kanjihaishi.html
資料B ローマ字推進系
http://www.halcat.com/roomazi/ron1f.html
資料C かな推進系
http://www1.ocn.ne.jp/~kanamozi/
元記事A の主眼は「読み方を指定することで誤読の危険を避けたい」ということで、その意見はごもっともだと思います。 少なくとも技術系の文書にあって、読み方が極端にわかりにくい単語を使うのはどうかと思いますし、どうしても使う場合は読みを併記してほしいと思ってしまいます。 # knoppix とか ubuntu とか azure とか nVidia とか google とか読めないっつーの! >_<
で、この手の話は読み云々でとまらないこともよくあって、漢字廃止論や英語公用語化論に繋がったりしますね。迷惑なことこの上ないと思ったりしますが。(興味があれば資料のページなどを参照してください)
元記事B は表現方法ではなく、文法そのものに着眼している点で新鮮さを感じました。ただ、国際公用語化という視点では、要は得たい情報のうちその言語でないと得られない情報がどれだけあるかが鍵となると思っていて、平易であるかどうかは問題ではないと思います。その意味では、言語を平易にするよりは、強力なコンテンツを配給し続ける戦略をとったほうが良い気がします。
しかし、読み方指示、漢字廃止や文法簡易化といろんな議論がありますが、そもそもそんなに日本語は難しいですかな。というか簡単にする必要はあるんですかねえ?というのが正直なところ。いいじゃん今のままで。困ってないです。というか私個人としてはどちらかというと難しく(?)したい方向です。たとえば「漏えい」「ら致」とか書くな!と声を大にして言いたい。-_-;
とりあえず、最近すべき事は 元記事C の外来語系の語尾長音の対応かな、とか思っている所存。内閣告示とか、けっこう色々決められているようなので、機会があったらいちど勉強してみたいところですね。(だからといって当用漢字外だから漢字使用不可ってのは賛同できませんけど…)
posted in 与太話, 自然言語 by ooltcloud | No Comments
2009年10月15日
posted in 与太話, 散財 by ooltcloud | No Comments
2009年10月14日
最近、ICカードを"かざす"という表現をよく聞くようになりましたが、未だに慣れません。
かざすっていうと、「手~のひらを~太陽に~」だろ、とか、「ハイル○ットラー」なのか?、とか思うわけですよ。
ところで、辞書で調べてみました。
http://www.excite.co.jp/dictionary/japanese/?search=%E3%81%8B%E3%81%96&match=&itemid=03546100
> (1)手に持って頭上に高くかかげる。
> (2)物の上方におおいかけるように手をさしだす。
> (3)光などをさえぎるために、手などを額のあたりに持っていっておおう。
(2)が一番近い気がしますが、「翳」という字からもICカードのそれとはニュアンスが違うと思う所存。
個人的には「(リーダーに)当てる」あたりが適当なんじゃないかと思いますが、まあきっと「接触してない」とかいう理由で「かざす」にしたんだろうな。
そんなわけで、もっとしっくりする用語を所望。
posted in 与太話, 自然言語 by ooltcloud | No Comments
2009年10月13日
先日、クロネコメール便の速達を使って郵送しようとしたら、翌日ではなく翌々日到着になるという。
理由は600kmを超えるかららしいが…
なんか速達の意味がないな。ってことで郵便にしてしまいました。
追跡もされるしメール便のほうがよいかと思ったんですが。
がっかりです。
p.s.
いまさらだが、速達じゃなくて「モーニング10」なるサービスもあったんだな。(+330円/速達は+270円)
これだと追跡サービスもつくしより速い。
これにすればよかった…
posted in 与太話 by ooltcloud | No Comments
2009年10月13日
なんのキーワードで検索したか憶えていないが、興味深いページを見つけたのでメモ。
連帯保証人徹底ガイド
http://www.jointsurety.net/
怖い。へんな怪談よりよほど怖い。
判子一つで死の淵にたたき込まれる勢いです。ええ。
連帯保証人になっちゃうと、主債務者と同じ扱いらしいので要注意。保証人になっただけなのに。ではすまないようです。
また、自らが借金するときに保証人たてちゃうと、自らが破産や自殺とかしても債務は保証人に移るだけなので、なんの解決にならないことにも注意。
借金の際には気をつけましょう…
p.s.
つーか、保証人みたいな無限責任を課すのではなくて、物上保証人のような有限責任を積み上げて、担保分を主債務者に貸し出すと行った手法に統一することはできないんですかね…>政府
posted in 法制 by ooltcloud | 1 Comment
2009年10月2日
時によく、昔ながらの構造体のように、配列を固定サイズで埋めたい場合とかあったりするときのコードサンプル。
Public Class EseStruct
Public A = New Integer(10) {}
Public B = New Integer(5, 5) {}
Public C = New With { _
.X = New Integer(6) {}, _
.Y = New Integer _
}
End Class
ついでに匿名インスタンスもつっこんでみた。
この場合、匿名インスタンスのメンバにはアクセスはできるけど、インテリセンスは効かないのね…
posted in Program, VB.NET by ooltcloud | 1 Comment
2009年9月16日
嫌いな言葉。
昔は「~しかない」がとても嫌いだった。って過去形ではなく現在進行形。
用例としては「やるしかない」「がんばるしかない」
端から他の可能性を否定してどうするよって感じだ。
最近は「しないよりしたほうがいいよね」的なことを聞くようになったんだけど、当初は「そうね」と思ってはいたが、これも嫌いな言葉になった。
用例としては「セキュリティ対策はしないよりしたほうがいいよね」「勉強はしないよりしたほうがいいよね」など。
「せずにすむならそれにこしたことはないのでは?」と最近は返すようにしている。「時間と能力とリソースが無限ならともかく、やらないよりやったほうがいいなんてことあるわけないだろ」と。
加えて「きまりだから」も嫌いだ。
これらの嫌いな、唾棄すべき言葉たちだが、実は共通点がある。それは皆「"そう発言する者"がもっとも楽になるために」「"そう発言する者"はその作業はせず、他の人にさせる」からだ。
「~しかない」はすべき問題解決を放棄しているし、「しないより~」も同様に方針が決められず、全方位射撃を指示し、無駄に弾薬を消費させていることに似ている。「きまりだから」は説明責任の転嫁あるいは放棄だな。つまるところ判断ができないので、俺様は判断を放棄するが下々はよろしくデスマってくれ、って言っているのに等しい。
なんとかなりませんかな… 対策を考えねば。
ところでそもそもこの記事からして「べき」とか書いているからだめだ(ダブルスタンダードあるいは矛盾)という話もある。困ったもんだ…
posted in 与太話 by ooltcloud | No Comments
2009年9月16日
難しい話ではなくて、単純に、自分の給料がなにによってもたらされているのかを忘れると速攻で腐ることが出来ます。客なんかいなきゃいいのになー、ってのは好例。
しかし公務員など税金泥棒なんてよく言われていますが、公務員の給料は別に税金によってもたらされているわけではないので、そんな非難に応じる必要など全くないと思う次第。この点は見誤ると危険。
などと、思うところがあり、自戒をこめて書いてみた --;
posted in 与太話 by ooltcloud | No Comments
2009年8月4日
詳細はここ > http://pc.watch.impress.co.jp/docs/news/20090804_306848.html
> 三菱化学メディア株式会社は3日、2009年12月を持って、MOディスクの販売を
>終了すると発表した。
> 同社は'91年に世界に先駆けて3.5インチMOディスクを発売したが、ここ数年の
>需要減退により、3.5インチ/5インチのMOディスクの販売を終了することにした。
ひとつの時代が終わろうとしているってことですかなあ。
とりあえず、メディアを確保しておかないといかんかな…
posted in 時事 by ooltcloud | 1 Comment
2009年7月28日
どうでもいい話なんですが。
会社で電子メールを「メイル」と表現する人がいて。
いや、「メイル」って書かれると、RPG経験者としては、メール(手紙)じゃなくてメイル(鎧)だろと、思ったんですが。
ああでも、それはメイルじゃなくてチェインメイル(鎖帷子)か?とか思ったら、チェーンメール(不幸の手紙)ってあるよな。あれ?
調べたら。
ともに「Chain Mail」なんですね… わぁお。
勉強になりました…(なんの?)
ちなみにgoogle先生による結果。
1.「チェーンメール」でイメージ検索
2.「チェインメイル」でイメージ検索
やっぱり方向性が分かれてますね…
参考) チェインメイル


posted in 与太話 by ooltcloud | No Comments
2009年7月22日
posted in Windows, ハードウェア by ooltcloud | No Comments
2009年7月15日
ネタ元
http://blogs.wankuma.com/ognac/archive/2009/07/15/177596.aspx
http://blogs.wankuma.com/ognac/archive/2009/07/08/177204.aspx
Shift-Jis、君は美しかった。
データ長と、半角文字を1単位とした文字数、そして文字幅が全て一致した、等幅キャラクタコンソールおよび固定長データファイルを扱うシステムでは、君に勝るコードは存在しなかった。
しかし今となっては…(以下略)
そういえぱ、美しいと言えばこれ。
http://www.wdic.org/w/WDIC/UTF-9%20%28RFC%29
UTF-9。これは美しい。これを普及させるべきである。
従って、Intelは即刻64bitプロセッサの製造をやめ、72bitプロセッサ、つまり、ノネット(9bit/Byte)ベースのCPUを早急に開発すべきである。ノネットベースになれば文字コードはUTF-9とできることはもちろん、16進数も駆逐できる。1Byteを、16進2桁ではなく、8進3桁で表現できるのだ。これでA-Fなどと数字ではない文字を数字として扱う必要がなくなるのである。これを福音といわずして何というのか!!
まあ冗談ですが (本気にしちゃいやん >_<)
そういえば、最早風前のともしびと思われているShift-Jis。実は案外しぶとく、Shift-Jis-2004という規格があります。これはX0213の文字セットを文字セットを含む、つまり第3,4水準を含んでいて、こと日本語だけを扱うならこれで十分過ぎるほど使えます。サロゲートペアみたいなものがないのも利点。
http://ja.wikipedia.org/wiki/Shift_JIS-2004
まあしかし、プロポーショナルフォントの出現によって等幅コンソールという文化も薄れているし、多国語の文字の表示や美乳問題をはじめとしたマルチバイト問題というところではやはりUnicodeに軍配が上がるわけで、この流れは変わらないでしょうが。Shift-Jisはいずれは倍角文字と同じく消滅していくのではないかと。(実はこちらもしぶとかったりしますが…)
posted in 情報技術, 文字 by ooltcloud | No Comments
2009年7月7日
語
水トリー
読み:
みずとりー
語源:
Water Tree (ウォーターツリー?水ツリー?)
意味:
CVケーブルの絶縁層に微量の水が浸透して絶縁破壊に至る現象
http://ja.wikipedia.org/wiki/%E6%B0%B4%E3%83%88%E3%83%AA%E3%83%BC
読めないし、まさか「トリー」が「Tree」とは思わなかった。ということでメモ。
posted in 与太話, 自然言語 by ooltcloud | No Comments
2009年7月6日
ネタ元
http://blogs.wankuma.com/ognac/archive/2009/06/27/176670.aspx
http://blogs.wankuma.com/ognac/archive/2009/07/04/177045.aspx
データ更新時のバージョン管理方法についてのお話です。
元記事にもあるとおり「業務アプリの各テーブルの末尾に、作成日、作成者,更新日、更新者、等を設定する」ことがあります。個人的にはなんのためにそんなことをしているのかさっぱりわからない(*1)のですが、割とふつうに定義されていることが多いようです。
で、この処理。冗長に感じるので、履歴機能をDBMS側でやってくんないかな?という話だったので、Oracleで試してみました。以下実験結果。
(*1)
DELETE発行時には無効であること、UPDATE発行時も変更前のデータがなにかわからないこと、最終の更新しか記録に残らないなどから、その実装の重さに比べて、履歴機能としてはかなり弱い仕組みだと考えています。
こんなことなら、履歴テーブルを一つ別に起こして、そこに履歴データをつっこむほうが、トレーサビリティ的にも堅いのではないかと思っています。(元記事にはそうしていると書かれておりますね…)
1.まずこんなテーブルを作ります。
CREATE TABLE HISTORY_TEST
(
EMPNO NUMBER(4), /* 従業員No */
ENAME VARCHAR2(10), /* 従業員名 */
UPDATER VARCHAR2(10) /* 更新者名 */
);
2.次に以下のようなDMLを実行します。
/* 最初の Insert */
INSERT INTO HISTORY_TEST VALUES (7499,'Allen','James');
COMMIT;
/* Update */
UPDATE HISTORY_TEST SET ENAME='Ford',UPDATER='Adams' WHERE EMPNO=7499;
COMMIT;
/* Delete/Insert */
DELETE HISTORY_TEST WHERE EMPNO=7499;
INSERT INTO HISTORY_TEST VALUES (7499,'Scott','Martin');
COMMIT;
3.ふつうにSELECTします。当然最後にINSERTしたのが残ります。
SELECT * FROM HISTORY_TEST
EMPNO ENAME UPDATER
---------- -------------------- --------------------
7499 Scott Martin
4.VERSIONS BETWEEN句を使用して、フラッシュバックバージョンクエリを発行してみます。
SELECT versions_starttime,
versions_endtime,
versions_operation,
EMPNO,ENAME,UPDATER
FROM HISTORY_TEST
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE EMPNO = 7499;
VERSIONS_STARTTIME VERSIONS_ENDTIME VERSIONS_OPERATION EMPNO ENAME UPDATER
------------------ ------------------ ------------------- ----- ----- -------
09-07-05 23:23:38 I 7499 Scott Martin
09-07-05 23:23:38 D 7499 Ford Adams
09-07-05 23:22:41 09-07-05 23:23:38 U 7499 Ford Adams
09-07-05 23:20:47 09-07-05 23:22:41 I 7499 Allen James
なんとなくいけておりますね。使えそうです。
ただ、更新者(UPDATER)は、今回は列として保持してみましたが、DELETEやDELETE/INSERTではだれがDELETEしたのかは不明ですね。当然といえば当然です。
本来はRDBMS側がログオンユーザーで自動記録してくれるといいんですけど。
とりあえず今回の実験はここまで。
posted in Oracle, データベース by ooltcloud | 2 Comments
2009年7月3日
スキャンコンバーターXPC-4。是非10年前に出てほしかった。
http://www.micomsoft.co.jp/xpc-4.htm
目玉はここ。
> NEC PC-9801の24KHz映像をVGA/XGAに変換可能
> X68000シリーズに対応
今後、これ以上のスペックは望めないだろうから、とりあえず購入しておこうかな…
posted in ハードウェア, 遺産 by ooltcloud | No Comments
2009年7月2日
ネタ元 > http://d.hatena.ne.jp/kwatch/20090630/1246377005
要は、配列の内容を連結してたとえば CSV 形式にしたいとするときに、
- 配列.join(",")
- ",".join(配列) ' separator.join()
のどちらが適当か?で、Ruby は 1 で、Python では 2 らしいんだが、2 のそれは気持ち悪くない?って話らしい。
いろんな解釈はあるのだろうけど、そもそも A (配列) と B (セパレータ) を混ぜ合わせて C (CSV) を作るといった場合、A と B は対等なのだから、join() メソッドがどちらかのインスタンスに連動していること自体が気持ち悪くないですか?というのが私の意見。要は、
- String.join(配列,",") ' C = String.join( A , B )
でよろしいのでは?ということ。
にたような話で、String.Add(String) があるけど、
C = A.Add(B)
って書くのって馬鹿臭くない?
A.Add(B) ' A = A + B (戻りはvoid)
なら辛うじて理解できるけど、A が immutable で Add() を行っても A 自体が変更されないなら、インスタンス.Add()なんて不要ではないかと。もっとも自作クラスでオペレータオーバーロード不可という状況なら仕方がないかもしれませんが、それでもstatic(shared)メソッドで、String.Add(String,String)、で実装すればいいんじゃないかなあ?とか。
なんかこのあたり、なんでもインスタンスメソッドにしてしまって、かえって難しくしていると感じるのは、私が構造化文化の旧世代に人だからなんですかな…
posted in Program, アルゴリズム, 情報技術 by ooltcloud | No Comments
2009年6月12日
ネタ元はここ
http://blogs.wankuma.com/ognac/archive/2009/06/09/174556.aspx
何か言い訳をされる場合に、パフォーマンスというのはかなり使われる話です。
上記url含め、よく聞くのは
・(RDBで)カラム横持ち(って言うの?)のほうが速い
・StringよりStringBuilderのほうが速い
・正規表現は重い
・XMLは重い
・ガベージコレクタは意図しないところで重くなる
など。ただ、不思議なのはこういう人たちでも、
・ハッシュは重い (配列に比べて)
・RDBは重い (ランダムファイルに比べて)
・オブジェクト指向言語は重い (Cに比べて)
・仮想記憶(ページング)は重い(RAMのみに比べて)
ので使うべきでない、と主張する人はとても少ない。
結局、まずパフォーマンス云々より先に、その系の理にかなった設計をしろってことだと思うんですよね。RDBだったらがんがん正規化するし、オブジェクト指向だったらどしどしnewする。レコードが分かれたらパフォーマンスが遅いよねとかnewってmallocだからメモリ確保や解放に時間とリソースが云々とか、まずはそんなの無視(?)で。系の理にかなった実装を心がける。
そしてその上でパフォーマンスが必要な場合はチューニングする。場合によってはコードを書き換えるということでいいんじゃなかろうか。
まあこういうと、
・最初から速いコードが書けるんだったらそのほうがいいじゃないか
・お客さんにとっても、コードの内容よりも実行速度の方が重要だ
とかいうんだろうけど、そういうつっこみを入れる人ほど、設計が崩れててかつ遅く危ないコードを(本人は速いつもりで)作っていたりすることが多い。必要のない表の結合をしていたり、forループの中でひたすらreallocしていたり…等々。もちろんこういうのはパフォーマンス云々以前の問題なわけで。
なので、処理系の理論に忠実であることが基本としてあって、その上でそれでは目的が達成できない場合に例外について検討するべきではないかと思う。
posted in IT / テクノロジー, 与太話 by ooltcloud | No Comments
2009年5月29日
やっと。
我が家のメインサーバー (Windows Server 2008) で VMware Server 2.0 が起動した。
最近は仮想マシンが 95% ロードの状態で止まってしまって、起動できなかったわけですが、原因は NOD32 の IMONにあったようで、これを停止したら起動しました。
VMWare Server 1.0 が起動しなくて…の時代から約一年だろうか。長かった…
これでメインサーバーで VMWare Server、ノートPC で Hyper-V が稼働。だいぶ環境がそろって参りました。
posted in 仮想化 by ooltcloud | No Comments
2009年5月2日
http://ooltcloud.sakura.ne.jp/blog/200905/article_02185850.html からの続き。
テスト時にテストケースにのっていなかった。そして不幸(?)にしてこれが露見した。このような事態に対して、「なんでテストしてないんだよ」とか言われても何一つ解決しないと思うわけです。
そもそも「テストしてないよね?」みたいな問い方をしてしまうと、「テストしていない=仕事をしていない」と捉えられて、相手の態度を硬化させてしまうおそれがあります。そうすると、重要な情報や必要な改善策を得るのがむずかしくなる可能性があり、結果としてデメリットが大きいのではないかと思います。このような場合は、「どのようなテストをしたのか」あるいは「この(障害の)ケースは想定していなかったのか」、「このケースを省略した意図は何か」といった問い方をする必要があるのかなと思った次第。
もちろん想定できなかったことや省略してよいと判断したことを即座に否定する(責める)ような問い方はそれはそれでNGなんですが。
続く(予定)
posted in IT / テクノロジー, 与太話 by ooltcloud | No Comments
2009年5月2日
http://ooltcloud.sakura.ne.jp/blog/200905/article_01215400.html からの続き。
手前味噌なんで当然でなのですが、先のテストでは、以下のケースが考慮されていません。(もっともまだあるかもしれません)
1.桁落ちの場合を確認していない。(例: RightShift(3, 1) = 1)
2.&HFFFFFFFFを、1bit右シフトすると何になるか?
3.シフトするbit数が32を超えた場合はどうするか?
4.シフトするbit数にマイナスを指定された場合はどうするか?
すると例えば、以下の障害が後日露見されたりします。
1.RightShift(3, 1) で 1 を期待したが 2 が戻る。
2.&H7FFFFFFF を期待したが &HFFFFFFFF が戻る。
3.例外を期待したが、0が戻る。
4.RightShift(3, -1) で 6 を期待したが 0 が戻る。
障害が露見したとき、コードを書いた人間の立場になって考えると大体以下な感想(言い訳)があるんじゃないかと。
1.value を 2の shiftBit 乗で割ってみました。
2.&H7FFFFFFF まではちゃんと正しくシフトします。
3.32を超えたら例外にするのですか?
4.マイナス指定だと左シフトにするのですか?
障害の原因は、知識の問題であるとも言えるし、仕様が明確でなかったという問題であるかもしれません。が、ここで言いたいことは、テスターが知らない、または、不要(テストするまでもない)、と考えたとき、テストケースにのってこない、ということです。
http://ooltcloud.sakura.ne.jp/blog/200905/article_02185910.htmlへ続く。
posted in IT / テクノロジー, 与太話 by ooltcloud | 1 Comment
2009年5月1日
http://ooltcloud.sakura.ne.jp/blog/200905/article_01215200.html からの続き。
ということでテストはちゃんとできるのか実験。
まず命題(仕様)が以下であったとします。
右シフトした値を戻す関数を作りたい。
そして、そのコードを以下の様に書いたとします。
Public Function RightShift(ByVal value As Integer, ByVal shiftBit As Integer) As Integer
Return (value >> shiftBit)
End Function
そのテストケースとして与えたものは、以下であったとします。
Assert.AreEqual(1, target.RightShift(2, 1))
一応、
・与えた引数に対する戻りは正しい。
・右シフトなので異常値(OverFlow)がないから、異常値の検査はなし。
・カバレッジとしてはC0~C2(?)相当を通している。
なので、これにて検査OK。
…でいいんでしょうか?
http://ooltcloud.sakura.ne.jp/blog/200905/article_02185850.htmlへ続く。
posted in IT / テクノロジー, 与太話 by ooltcloud | No Comments