ここ一ヶ月ほどずーっと、立ち上げノイズに悩まされていたのです。
不定期にぶちっ。ぶちっ。っとなるわけです。
ひどいときは、ぶちぶちぶちぶちぶちぶちぶちと連続で鳴り続けるので、一体何事かと思ってしまうほどでした。
現象の発生にまるで規則性がないので、一度カード類を引っこ抜いて、掃除機で掃除したり、なんだりとしてみましたが、現象は変わらずなので、ついに引っこ抜きました。
今までオンボードのサウンドチップは一度しか使ったことありません。
前に使ったときはHDDの駆動にあわせて、ヒスノイズが入るひどいものでした。
そんな体験をしたのと、とても耐えれる音質じゃなかったので、ずーっとサウンドカードを買ってきてます。
んで、SoundMAX2.0のチップの音を聞いてみました。
・・・(´Д`)
前よりマシになっていますが、やっぱりだめです。
なんつか、中音域のぼわぼわとしたブーストされた音がどうにも気持ち悪くて聞いてられません。ボスケテ。
財布に余裕がない予定なので、しばらくこのままでいこうか悩み中。
というか、今何が売ってるかまるでしらないので、ちょっと見て回ってこなければー とか、そういう話。
そんなわけで、長い間(といっても一週間くらい)悩んでいたXML_SetUnknownEncodingHandlerの正体がわかりました。
結局、中のソースコードを追いかけて、どういう処理をしているかと調べないとわかりませんでした。
結論から先にいうと、expatはutf-8で出力するようにできていて、知らないエンコード→utf8をするのが、XML_SetUnknownEncodingHandlerらしいです。
出力の部分を変えれるのかまではわからんので、今のところ結論はそんな感じ。
cp932→UNICODE→utf-8という流れになっていて、これじゃあ、うちがやりたいこととはまるで真逆のことですぜ旦那って感じorz
cp932をそのまま出力したいから、エンコードをcp932にして、読み込んで、しらんエンコードだから、文字列の解釈はよろしく頼むぜだと思ったんですけどね。
ハンドラの中身。
static int convert(void* data, const char* s)
{
TExpat *expat = static_cast<texpat *>(data);
unsigned char lead = s[0];
if (_ismbblead(lead) == 0) {
//シングルバイト
return lead;
}
unsigned char trail = s[1];
int sjis = (lead < < 8) | trail;
int unicode = expat->cp932.ConvertToUnicode(sjis);
//マルチバイト
return unicode;
}
int XMLCALL TExpat::UnknownEncodingCallback(void *handle_data, const XML_Char *name, XML_Encoding *info) {
TExpat *expat = static_cast</texpat><texpat *>(handle_data);
for (int i = 0; i < 128; i++) {
info->map[i] = i;
}
for (int i = 128; i < 256; i++) {
info->map[i] = -2;
}
info->convert = convert;
info->data = handle_data;
return XML_STATUS_OK;
}
まずmapを設定するのですが、該当する文字コードが来たときにどうするかというのを設定します。
通常の数値は0×80までぽぽいとつっこんでしまって、いいとおもいます。
あと0×80以降は、エンコードで必要なバイト数をマイナスで突っ込むようです。
convertの中身がキモです。
多分シングルバイトの文字列はこないと思うのですが、一応チェックだけいれてます。
leadバイトとtrailバイトをあわせたコードがsjisになるので、それをUNICODEに変換します。
int unicode = expat->cp932.ConvertToUnicode(sjis);
まぁ、このコンバートするコードはうちが自前で作ったので、どう変換するかは任せます。
各自で用意してください。
んで、げっつしたunicodeの文字コードを返せば、convert関数の処理は終了です。
あとは、expatの方で勝手にutf8にして、XML_SetCharacterDataHandlerの第二引数に文字列ポインタを渡してくれます。
んあー。
わかったのはいいけど、しょんぼーりーだー。
さくさくsjisに変換してoutputするようにしちゃおう。
や、utf8のまま処理してもいいっちゃーいいんだけどー。
長い間連れ添ってきたSO504iのジョグダイアルが死亡しました。
つい二週間ほど前に、壊れたか? とおもったのですが、そのときはなんとか動いてくれたのですが、今日はもうまるで無反応。
まわしてもまわしても反応してくれません。
会社定時でダッシュ→ヨドバシ交換とかも考えたのですが、仕事が忙しくはないけど拘束される可能性がある状況なので、ささっと昼休み後に許可をもらって、機種変更してきました。
総額2万7千円でしたorz
なんていうか、予定外の出費に血を吐きそうです。
そんなわけで、既に4年ほど携帯を変えていなかったのでウラシマン。
奥様の携帯をちまっと触ってみた程度で、自分で最近の携帯を触るのは初めて。
わーい。
まるでわからんぜー。
なんていうか、色々と機能増えすぎじゃないですかね。
奥様とプッシュトーク試してみましたが、衛星通信でもしてるのかというくらい遅れがあるんですなぁ。
テレビ電話とかどうするんだ? とかなんか色々と試してみましたがやっぱりよくわかりません。
こいつに使うSDカードを物色していて、ミニミニと思っていたのですが、どうやらマイクロらしくて、家のリーダで読めないことが発覚。
幸いアダプタ付きのが売ってるので、それをって、パナソニック製品のは11/25かい!ヽ(`Д´)ノ
サンとかそのへんのでいいかな…。
トロの待ち受け画面とか、サブディスプレイがトロでなくなったのが、非常に寂しい感じです。
電波が届かないと眠りっぱなしのトロの姿は何か物悲しい感じがします…。
しょうがないから自分で作って、それを待ち受けにでもすることにします。
トロ携帯、おつかれさまでした(ノω`)ウウ、涙が。
SAXパーサーなので、お手軽にいじれるのは知っていました。
まぁ、ハンドラをさくさくと登録して、xmlファイルをメモリに読み込んでパーサーに食わせたら、はいお仕舞い。
XML_SetXmlDeclHandler
XML_SetElementHandler
XML_SetCharacterDataHandler
この辺を登録しておけばよさげ。
rdfとかでCDATAが必要なら、
XML_SetCdataSectionHandler
で、拾える模様。
アトリビュートをどう拾うかというと、
XML_SetStartElementHandlerのXML_StartElementHandlerが、
typedef void (XMLCALL *XML_StartElementHandler)(void *userData, const XML_Char *name,
const XML_Char **atts);
こんなtypedefされていて、attsがtag=valueの組み合わせになっている模様。
attsがNULLになるまで、ぐるぐるまわせば全部げっと出来ます。
for (int i = 0; attributes[i]; i += 2) {
char temp_string[256];
sprintf(temp_string, " Attribute %s='%s'\n", attributes[i], attributes[i + 1]);
::OutputDebugString(temp_string);
}
次はexpatとは関係ないけど、utf-8 -> cp932ですね。
sjisで書いてパースできないものか。
XML_SetUnknownEncodingHandler
あたりが怪しいと睨んでいるのですが、サンプルないし困った感じです。
昔、東京に住んでいたときによく札幌東京間を往復していたので、ANAのカードを作りました。
普通の人が予約とかできないなか、こそっと専用デスクにかけてなんとか予約をねじ込めたりもしたという結構便利なカードだったのですが、いまではとんとご無沙汰です。
会社の出張でも使わないし、毎月So-netの代金525円をほそぼそと払い続けているだけだったのです。
明細書がきたので、どれどれと見てみたら、ボーナスマイルが+1000ついてました。
合計で3023マイルです。
利用期限に2006/12と書いてあったので、そうだ、マイルを交換しよう。そうだ、そうしようと、ANAのホームページに乗り込んでいって、お客様番号を颯爽と入力したわけです。
会員専用機能に貯まったマイルの特典交換を発見。
そう、うちが求めているのはこれだーと、プルダウンのメニューを見て、とりあえず物に交換しよう。
ANAセレクションに交換する。ぽち。
記念品は1点10,000マイルからお申し込みいただけます。
…(´ω`)
ANAご利用券に交換する。ぽち。
20,000マイルで3万円分のクーポン券1セット(5,000円×6枚)とお引換えいたします。
……(´ω`)
でかける用事はないけど、国内線特典航空券。ぽち。
日本国内一律15000マイルでご利用いただけます。
も、もういいよ! Edyに交換!
10,000マイル=10,000円分の電子マネー特典<Edy>と交換いただけます。
さよなら、ぼくのマイル。
先日の三連休の時に絨毯を買った絨毯が届いていたので、さくさくと交換した。
くるくるーくるくるー。
とまるめた後、床の汚れが気になったので、クイックルワイパーでふきふきふきふき…。
あぁ、ここまできたらワックスをかけるしかないよね。
ワックスワックス。
ふきふきふきふき。
クイックルワイパーのワックスを使ったのはいいのですが、これが板目をちょっと拭いたらもうワックスがなくなってしまい、あっという間に4、5枚使ってしまいました。
初めはくるくると円運動で塗っていたのですが、上のようにすぐになくなるので、板目にそって、一枚ずつ塗り塗り塗りとワイパーのぼっこが長くて、うまく動かせないので、拭くところを直接手に持って拭いてきました。
なんとか終わって、ふー新しい絨毯ぜと敷き終わったあと、手がワックスでてかてかでした。
うちの手よりも床についてほしいものです。
新しい絨毯は、前に買ったのと同じですが、ふわふわ感が違いますね。
ふわふわ。
久々にexpatを組み込もうといじったら、名前解決ができないってリンクエラーでまくって(´ω`)? になっていたわけです。
前はきちんとコンパイルできてたのになんじゃろー? とか色々と調べたり放置したりした結果、前のプロジェクトからそれっぽいdefineを発見。
XML_STATIC
なんてのがありましたなぁとかしみじみと思い出しました。
きちんと調べてみたら、expat/win32/README.txtに
An application linking to the static libraries must
have the global macro XML_STATIC defined.
って書いてました。
納得。
忘れるといやだからメモメモと。
久々にカーネルを更新してみた。
もちろん、apt-getでrpmをげっとしてくるというヘタレ管理者っぷりを発揮しているわけですが、lilo.confを書き換えたまではいいけど、imgがありません。
あれー(´ω`)?
どうやら/sbin/mkinitrdで作るようです。
前にもやったはずなのに、全然忘れてましたよ。
さすがヘタレ管理人です。
んで、rebootと…。
うむ。めでたく更新っと。
特に仕事が忙しいわけでもなくて、だらんだらんとした日々を送っているのでなんか書くこともないなーとか思ってるわけです。
こんなMMOあったらいいなーとか妄想したのを書き留めていたり、ネットワークのプログラムをちまちまとフレームワークに落とし込んでいたり、3Dやりたいなーと思いつつモデルないよ、んじゃ、モデリングか? いやいや、しかし、それではうーんとぐるぐるしてるわけです。
数学苦手なので、あんま3Dは自分に向いてないなぁと思うんですが、それでも興味のある分野であることは間違いなし何ですけどね(´ω`)
もっとさらさらーっと色々と作りたいワー。
今更ながら24を見てたりしてますが、相変わらずレンタルに行くと貸し出し中ってことは、別に今更でもないのかとかおもったり。
うりが持っていたはずだから、ちょっと貸してけろよんといったら、シーズン1だけ貸し出しているとかいわれて、ガッデムな感じ。
菊水に新しくゲオができたらしくて、いつも行ってる豊平店のゲオが旧作レンタル10円だったので、なんか8枚とか借りてきて、色々とみなければならないのが山積みになったりしてますが、とりあえず、キノセイ。
世の中の人が考えることは同じで、まーすごい勢いでDVDが貸し出し中になってましたけどね(笑)
24の続きは今日いったらあるかなー。
そして、本当にどうでもいい感じでまとまらず終了。
最近のコメント