gemのbinのコマンドがインストールされない

なんか、gem installしたヤツのbin配下のコマンドが、インストールされていないっぽかったので、ちょっと調べた。

とりあえず、~/.gemrcに以下のように書いておけば良いみたいだったので書いておいたらインストールされた。

gem: --bindir /usr/local/bin

Windows7でVB6のStrConv関数を使ってSJISからUnicodeへ変換するときに発生する問題

問題

Windows7になってAPIの挙動が変わったせいなのか、VB6 の StrConv関数の挙動が WindowsXP の頃と変わっている。*1

Shift-JIS を扱うプログラムではバイト単位に文字列を操作したいという要求が多いので、例えば「先頭5バイト」などといった場合、次のような書き方が多いと思う。 StrConv( LeftB ( StrConv ( [originalStrings], vbUniCode), 5), vbFromUnicode) Vista まではこれで問題がないのだけど、Windows7ではStrconv関数内部で呼び出されているAPIの挙動が変化したので、これで抽出した場合でも2バイト文字の先頭1バイトは残ってしまう。VistaまではStrconv関数の処理結果として2バイト文字の先頭だけが残るようなケースでは、その部分を除去してくれていたのだけどWindows7ではそうならずにそのまま返却されてくるんだよねぇ。

てすとぶろぐ: Windows 7 における VB6 の Strconv 関数の挙動

上記と同じ理由で以下のような「ANSI/SJIS表現で任意のバイトに収まる文字列を切り出す」*2処理で問題が発生する。

' 文字列"abcあいう"から、「ANSI/SJISで6バイト」に収まる範囲を切り出す
strconv(midb(strconv("abcあいう", vbFromUnicode), 1, 6), vbUnicode)

このコードでは文字列("abcあいう")から6バイト切り出したとき、その末尾に2バイト文字である"い"の先頭バイトだけが含まれる状態となる。WindowsXPで上記コードを実行したときは、そのような変換できない文字はNULL文字(&h0000)に変換されていた。しかし、Windows7では"・"(&h30FB)に置換されてしまう。

それぞれ実行結果をみてみる。

実行結果(WindowsXP):

? strconv(midb(strconv("abcあいう", vbFromUnicode), 1, 6), vbUnicode)
abcあ

実行結果(Windows7):

? strconv(midb(strconv("abcあいう", vbFromUnicode), 1, 6), vbUnicode)
abcあ・

というように、Windows7では末尾に余計な"・"が付加されてしまい。ANSI/SJISに変換したとき6バイトに収まらない内容になってしまい、いろいろなトラブルの元となってしまう。

解決

この問題の解決策として、StrConv関数に代わるものを作ってみた。関数の作成にあたっては、以下のページがたいへん参考になった。
Classic VB - Does Visual Basic 6 support Unicode? - VBForums

実行してみる。

実行結果(Windows7):

? StrConvToUnicode(midb(strconv("abcあいう", vbFromUnicode), 1, 6))
abcあ

*1:Vistaでは確認していないためよくわからない。が、ネットの情報によるとWindows7から挙動が変わっているっぽい。

*2:VB6では文字列の内部表現はUnicode(UTF-16)となっているので、上記のように一旦 ロケールに応じた ANSI/DBCS の表現に変換した後、任意のバイト数で切り出し、再度 Unicode のバイト列に戻すという方法を取る。

LionにしたらANSI配色を変更するPluginは要らない子

Snow leopard では、Terminal.app の ANSI配色を変更するSIMBLプラグインを使っていたが、Lionにアップデートしたらこのプラグインは使えなくなってしまった。ターミナルを起動すると以下のようなエラーが出て配色がデフォルトのANSIカラーとなってしまう。

どうしよう、と思っていろいろ調べたところ、どうやらもうプラグインは必要無いらしいということがわかった。Lionでは普通にターミナルの環境設定から変更できた。

ためしに colorize という rubygem 使って色つきで文字を表示してみた。

Lionにアップグレードした後やったことメモ

ソフトウェアアップデート

とりあえず、Lion 起動後にソフトウェア・アップデートしてみたら、Lion 向けの iTune アップデートがあった。

3本指スワイプでのページ移動 を Snow Leopard と同じに

Lion にしたとたん、3本指スワイプでのWebページ移動ができなくなったので、設定を変更した。手順は以下のページが詳しい。自分の場合「2本指または3本指でスワイプ」に設定している。そうすると、2本指でのページ移動に対応しているSafariは2本指でページ移動できるし、3本指でのページ移動にしか対応していない Google ChromeFirefox でも3本指でのスワイプでページ移動ができる。

Mac OS X LionのGoogle Chromeで3本指スワイプによる「戻る」「進む」のページ移動を復活させる方法。 | 和洋風◎

ほかにも何か重要な変更した気がするけど忘れた。

ピンチでの LaunchPad 起動を無効化

これを有効にしてると、4本指スワイプでの画面の左右移動が誤認識で LaunchPad が起動してしまいイラッとするので、無効化しておいた。

Paralells Desktop 6 のアップデート

一応動作するらしいですが、すでに知られている不具合がいくつかあるようです。

ターミナル(Terminal.app)のANSI配色設定

Snow Leopard で使ってた SIMBL プラグインが使えなくなった。というかプラグイン自体いらなくなってた。

LionにしたらANSI配色を変更するPluginは要らない子 - 今日もスミマセン。

Xcode4のインストール

普通にコマンドラインから gccとか打つと見つからないみたいなので、さがしてみると。/Developer/usr/binの下にあった。移動した?とりあえず、.bashrc にPATHを追加。
やっぱり、普通にコンパイルできない。'iostream'とか見つからないと言われる。include パスも外れてるみたい。

Xcode4をいれた方が早そうなので、現在インストール中。Xcode4入れたら、gccコマンド使えるようになった。それにともない、.bashrc 追加した PATH も削除しておいた。


(随時追記していく予定)

LionにしたらParallels6でBootcampパーティションのVMが起動できなくなった

Lion にアップデートしたら、以下のようなエラーが出て Bootcamp パーティションからの仮想マシン(VM)の起動ができなくなってしまった。
The Boot Camp partition /dev/disk0s3 used by Hard Disk 1 is not supported. Please open the virtual machine configuration and select a supported Boot Camp partition in the Hard Disk 1 settings.

Prallelsのサイトを調べるとそれっぽい情報があったので、この通り対処したら無事に復旧することがきた。

KB Parallels: Virtual machine stops working after upgrading to Mac OS X Lion and Parallels Desktop 6

復旧手順は以下のとおり:

  1. 仮想マシンを選択し、メニューから "Virtual Machine" - "Configure..." を選択、そして"Hardware"の中のリストから"Hard Disk 1"を選択。
  2. ハードディスクのプルダウンから、いったん別のディスクを選択、この時点では設定の保存はしないこと。
  3. そして、もう一度プルダウンリストから元のディスクを選択して、[OK]で設定を保存する。
  4. 設定を保存したらその設定画面を閉じ、その仮想マシンを起動してみる。

ほかにもいろいろ問題があるっぽいので、Parallels6 使ってて、これからLionにアップグレードしようと考えている人は「参考」のリンク先を一読しておいた方が良いかも。

Thunderbird5 へのバージョンアップで月別アーカイブの設定が外れるのを直す

Thunderbird5.0 から、アーカイブの粒度(granularity)の設定箇所の設定名が変わってるみたいです。

Thunderbird5.0以下のように、詳細設定から「設定エディタ」を開いて、設定名mail.identity.default.archive_granularityの値を2にすれば月別アーカイブしてくれます。

設定値の内容は前バージョンから変わっていないみたいです。(参考の記事を参照)

libcurl の C++ラッパー cURLpp を使ってみたメモ

インストール

リポジトリから最新のソースを取ってきたが、CMakeの段階でエラーがでてまともにビルドできなかったので、以下、latest stable な tar ball をダウンロードしてきた。

Downloads - curlpp - cURLpp is a C++ wrapper for libcURL - Google Project Hosting

から、latest stable (記述時点では、 0.7.3)をダウンロード tar zxvf で展開して、あとは普通に

./configure --without-boost
make
make install

でOk

/usr/local/libに libutilspp.la , libcurlpp.la が /usr/local/include/utilspp, /usr/local/include/curlpp に各種ヘッダファイルがインストールされた。

サンプルソース

ためしに ローカルに立ててる Web サーバにアクセスするコードを書いてみた。

これを、以下のようにコンパイル

g++ curlpp_sample.cpp -lcurlpp  -lcurl  -o curlpp_sample

実行してみる

$ ./curlpp_sample
<html><body><h1>It works!</h1></body></html>examples:snaka $ 

無事動いた。
これで、todo.ly の API 叩くライブラリ作れる...かな。