カテゴリー : プログラミング

Synergy 1.3.1

あいかわらず、全角半角が通らないのでパッチ

CMSWindowsKeyState.cpp に細工

--- C:/Data/DownloadFiles/20060404/z/synergy-1.3.1/lib/platform/CMSWindowsKeyState.cpp	2006-04-02 21:16:40.000000000 +0900
+++ C:/Data/DownloadFiles/20060404/synergy-1.3.1/lib/platform/CMSWindowsKeyState.cpp	2006-04-04 17:38:20.945422400 +0900
@@ -278,8 +278,8 @@
/* 0x0f0 */ { kKeyNone },		// OEM specific
/* 0x0f1 */ { kKeyNone },		// OEM specific
/* 0x0f2 */ { kKeyNone },		// OEM specific
-	/* 0x0f3 */ { kKeyNone },		// OEM specific
-	/* 0x0f4 */ { kKeyNone },		// OEM specific
+	/* 0x0f3 */ { kKeyZenkaku },	// VK_OEM_AUTO
+	/* 0x0f4 */ { kKeyZenkaku },	// VK_OEM_ENLW
/* 0x0f5 */ { kKeyNone },		// OEM specific
/* 0x0f6 */ { kKeyNone },		// VK_ATTN
/* 0x0f7 */ { kKeyNone },		// VK_CRSEL
@@ -535,8 +535,8 @@
/* 0x1f0 */ { kKeyNone },		// OEM specific
/* 0x1f1 */ { kKeyNone },		// OEM specific
/* 0x1f2 */ { kKeyNone },		// OEM specific
-	/* 0x1f3 */ { kKeyNone },		// OEM specific
-	/* 0x1f4 */ { kKeyNone },		// OEM specific
+	/* 0x1f3 */ { kKeyNone },		// VK_OEM_AUTO
+	/* 0x1f4 */ { kKeyNone },		// VK_OEM_ENLW
/* 0x1f5 */ { kKeyNone },		// OEM specific
/* 0x1f6 */ { kKeyNone },		// VK_ATTN
/* 0x1f7 */ { kKeyNone },		// VK_CRSEL
@@ -1149,7 +1149,12 @@
}
else {
// found in table
-					switch (m_buttonToVK[i]) {
+					switch (m_buttonToVK[i]) {
+					case VK_KANJI:
+					case VK_OEM_AUTO:
+					case VK_OEM_ENLW:
+						item.m_id         = kKeyZenkaku;
+						break;
case VK_TAB:
// add kKeyLeftTab, too
item.m_id         = kKeyLeftTab;

__security_cookie が未解決な場合

メモ

You may receive the “Linker tools error LNK2001” error messages when you build source code by using the Win32 Software Development Kit (SDK) or the Windows Server 2003 Driver Development Kit (DDK) for Windows Server 2003 Service Pack 1

Visual Studio 2005 でVC8を使ってて出たエラー LNK2001。
GSを切ってやると消えますが、気持ち悪いのでチェック。
bufferoverflowU.lib これをリンクするといいみたい。
うちの場合memcpy まで無いと言われたので、そもそもライブラリがリンクされてねぇかなと、見たらデフォルトのライブラリをリンクしない設定になっていたのでリンクするように修正。とりあえずコンパイル通った。
コンパイルすると、なんだかせきゅりてぃーな警告がいっぱいでるねぇ…

Ref++ – C++ Refactoring Tool for Visual C++

Ref++ – C++ Refactoring Tool for Visual C++


Visual Studio 2003, 2005 のアドインとして動作する ネイティブC++用のリファクタリングツール。

$59で日本円で7000円弱でした。

メンバ変数の名前の変更とか、長ったらしい関数からのメソッド抽出とか、手作業でやるとうんざりする作業がボタン1つで簡単にできます。



  1. 関数名や変数名の変更

  2. メンバ変数をカプセル化してアクセサ(GetとSet)を作る

  3. 長い関数から部分を抽出して関数化

  4. 関数の引数を増減したり変更したり

  5. 長ったらしい式を変数化してすっきり

  6. メンバ関数をサブクラスに左遷

  7. 基底クラスに栄転

  8. 基底クラスの導出

が、出来るみたいです。名前変更と関数抽出以外はまだ触ってませんが、これだけでも便利


名前変更などの作業時に長々とソースコードの解析をするをじっと待つことになるんですが、キャッシュファイルを作ってるみたいで2度目以降は実用的な速度が出ます。最初の解析がもう少し速くなるとよりよいです。


VS2005では、C#なんかはリファクタリング機能がありますが、C++にはないのでこのツールがあるとちょっと便利になります。

データ交換フォーマット

XML簡略記法とかのメモ
Collection & Copy – JSON入門
Introducing JSON
YAML Ain’t Markup Language
YAMLのページ曰くJSONは、YAMLのサブセットにあたるらしい。
YAMLは、Rubyとかではちゃんと実装があるけどC++には見当たらない。
自分で実装するにはちょっとしんどそうだなぁと思っていたので、JSONについてちいと調べてみよう、ということで、メモ

ダイアログ ボックスでのエディット コントロールからの Enter キーを使用する方法

ダイアログ ボックスでのエディット コントロールからの Enter キーを使用する方法(Microsoft サポート技術情報)

どうせまたハマルだろうから貼っておく。
待っててもメッセージは飛んでこない。だから自分で飛ばすということ。

ちなみにこんな感じ

001     LRESULT OnOK(WORD wNC/*wNotifyCode*/, WORD wID, HWND hWndCtl, BOOL& /*bHandled*/)
002     {
003         // TODO: Add validation code 
004         CWindow focusWindow;
005         focusWindow.Attach(GetFocus());
006         if (focusWindow.m_hWnd == NULL)
007             return 0;
008         if (focusWindow.GetDlgCtrlID() == IDOK)
009             TBase::OnOK(wNC, wID, hWndCtl);
010         else
011             focusWindow.SendMessage(WM_CHAR, VK_RETURN, 0);
012         return 0;
013     }

Death Tractor

Destructor is translated as ‘Death Tractor’, haa!

デストラクタ(Derive Your Dreams
)

デストラクタをぐぐるさんに翻訳してもらったら、Death Tractor になったという話。
デストラクタでよくこけてる私のプログラムは、実はこっそり “Death Tractor”に置き換えられてるのかも(ガクガク

つーかーれーたー(^_^;


ここらへんや


ここらへん

を参考に、Perl5.7未満の環境でeuc でもちゃんとMTAmazonが化けないように改造。
全部eucで保存すればいいやっていう方針が間違いだったらしくえらい手間取った(・ω・` )
実際は、ほとんどの処理はutf-8でやっといて、書出しのところだけ、要素ごとに no_utf8 して euc 化すればうまくいくと思う。
けどやっちゃったからしょうがないや……すっごい遠回りだ……

MySQLのアップデートがぁ

(カテゴリ分類が微妙)
おうちサーバFreeBSD(4.10) のports の mysql-server の 4.1.4 (mysql-4.1.4-gamma)のコンパイルが通らなかったのでちょっとチェックしてみた
md5.c が、 include ファイルを真っ当に呼んでなかったみたいなので、
/usr/ports/databases/mysql41-server/work/mysql-4.1.4-gamma/mysys/md5.c の中の
#include “md5.h”

#include “../include/md5.h”
にして無理矢理通した。
たいしたこっちゃ無いけど、おんなじところで悩んでる人も少しいそうなので乗せてみた。
include path の設定がおかしいのかな……
※まだコンパイル通らないよ orz、今度はregex ……
/usr/ports/databases/mysql41-server/work/mysql-4.1.4-gamma/sql/item_cmpfunc.h のまんなかへんに
#include してるところがあるけど
#include “../regex/regex.h” に変更
ことごとくパスが効いてない(^_^;
またmd5
同じディレクトリの item_strfunc.cc の “md5.h” を “../include/md5.h” へ。さっきと一緒。
同じディレクトリの ha_berkeley.h の を “../bdb/build_unix/db.h” へ
うう、正攻法の方が良かったか……
通った! make deinstall して make reinstall

XMLクイックリファレンス

XMLクイックリファレンス
Amazon で、良いリファレンス+翻訳はいまいちの2つの評価があったので店頭でぱらぱらめくってまあまあかなと買ってきました。
……ホントに訳がいまいちです(^_^;
リファレンス目的で買ったんですが、たとえば、
>xs:choice要素は、その子要素の1つによって表現される要素やグループが、インスタンス文書のその位置に表われることが許されることを表わす。
>(21.2 スキーマ要素 P455 xs:choice の解説)
意味わかります?
XMLSchema本のリファレンスはよくわかるのに、この本のは全然駄目
>xs:choiceは、相互に排他的な(どれか1つだけを選択できる)パーティクルのグループを定義するコンポジタである。
>(XML Schema 15章 リファレンスガイド 要素編 P262)
まあ、これはこれでカタカナラッシュなんですが少なくとも意味は押さえてるし。
……カタログ的に使うか。翻訳の質にムラがあるなぁ……

C++ と C#

最近、C# と C++ を がりがり書いてますが、どっちも楽しいけど、C++のほうが思考にぴったり来る感じがしますね。
やっぱり、低級から高級まで書ける言語の方がより人間の思考に近いってことでしょうか。人間もあんまり高級じゃないってことかも。
C#でテクニカルなのと、C++でテクニカルなのとは本質的に違うもののような気がする。
C#は、マシンというよりC#そのものをハッキングしてる感じなのは、まだ使い込みが足りないからなのかな、なかなか言語の向こう側が透けてこない感じで、
もちろん抜け穴みたいなのは一杯用意してあるんですが、C++ はそれが道具の一部であるのに対してC#はあくまで抜け穴なんですよね。
まあ、Javaにもにたようなことがいえるけど。「私」と「あなた」の境界がはっきりしてるっていうのかなぁ、まあ、適当に組む分にはうっかり「向こう側」に踏み込む可能性が少ない分楽なんですけどね。