MacProを買うわけにも行かず、仕方なくMac miniを入手してみました。
一つ前のモデルですが、仕様が現行に近いのと新品をバラすのも忍びないので。

SATAを外出しする予定。
下のはG4 mac miniです。
元Macユーザーといっても漢字Talkの頃の話なのでどうにもMacOSXで困ることもあります。
WindowsやLinuxから移ってもっとも困るのは(人によると思いますが)マウスの動きです。
なんか変に加速するんですよねぇ。そして無効にできない。
カーソルの動きはなんとか慣れることも出来そうですが、ホイールの動きだけはどうしても酔いそうで如何ともしがたいのです。
(OSX以前はホイールなんて無かったのだからそれを昔と比べるのもおかしい気もしますが)
有償のシェアウエアで、例えば「SterrMouse」のようなソフトを使うと加速スクロールを無効に出来て試用してみたところかなり改善しました。
快適度合いを考えると購入しても良いのですが、しばらく耐えてMacOS標準のこの動きになれるべきなのか、そもそもマウス止めて昔そうしていたようにタブレットで操作するようにするか悩むところです。
URLエンコード(Percent-Encoding)をデコードする方法は単純な処理なので実装するのは簡単なのですが、いざ欲しいと思うと何故かOSには用意されていなかったりします。
ググれば一発だろ! と思っても何故かすんなりは見つからないか、見つかっても冗長だったりするので毎回新たに書いているのですが、今回で最後にしたいのでここに貼りつけておきます。
エンコードは今回必要無かったので作ってませんが必要になった時に作ります。
urlDecode()にバッファとその長さと変換したい文字列を渡します。
なんか見本で見かけるソースよりやけに短くなってしまうのですが、何か自分が間違っているんだろうか・・・。(RFCは読んでいない)
9 :int valueFromHexChar(char hex)
10 :{
11 : if('0' <= hex && hex <= '9') return hex - '0';
12 : else if('A' <= hex && hex <= 'F') return hex - 'A' +10;
13 : else if('a' <= hex && hex <= 'f') return hex - 'a' +10;
14 : else return 0;
15 :}
16 :
17 ://typedef unsigned int size_t;
18 :void urlDecode(char* decoded
19 : ,size_t decoded_length
20 : ,const char* source)
21 :{
22 : decoded_length--; //最後の\0の分
23 : while(*source && decoded_length){
24 : if(*source == '%'){
25 : if(*(source+1) == '\0') break; //%の後2Byte続かずに備えて
26 : *(decoded++)
27 : = (valueFromHexChar( *(source+1) ) <<4 )
28 : + valueFromHexChar( *(source+2) );
29 : source += 3;
30 : }else if(*source == '+'){
31 : *(decoded++) = ' ';
32 : source++;
33 : }else{
34 : *(decoded++) = *(source++);
35 : }
36 : decoded_length--;
37 : }
38 : *decoded = '\0';
39 :}
最初は呪文にしか見えなかったObjective-Cもやっと理解できてきました。
ある程度わかってみれば、単にC言語を変な風に使っているだけという感じがしてきました。(おそらく本当にCをトリッキーに包んでいるだけだと思う)

しかし、やはり新しい物は素晴らしきかな。
便利なところはとても便利です。
そして何よりいざとなったらCに降りてしまえば良いという点もJAVAなどに比べてとても助かります。
4月からは忙しいので3月中にささっと形にしてAppleStoreに申請してみたいと思います。(間に合うかな)
System7あたりのMacintoshはアップルメニューがランチャーのようになっていたのでアップルメニューは使用頻度の高いものでした。
もっとわかりやすいネーミングなのがWindowsのスタートボタンで、取り敢えずこっから始めろみたいな名前です。
初めてWindows3.1/95を使った時に違和感があったのは起動時のカーソル位置です。
たしかWindowsではカーソルが画面の中央から始まるんですよね。
Macintoshではアップルメニューの位置が初期位置でした。
X Window Systemでもたしかど真ん中からですね。
そんなこと今思えばなんで気になったんだろうと思ってましたが、MacOSXを使ってみて、やっぱり画面の上のほうにカーソルの初期位置があったほうがしっくりくるなぁと思いました。
だいたい電源落とした後ってマウスを机の奥の方にやってしまうことが多いからかもしれません。
最近は電源入れっぱなしでシャットダウンすることはめったに無いので関係ありませんが・・・。
Windows(Shift_JIS/マルチバイト環境)で文字コードをUTF-8に変換する方法です。
マルチバイトとUTF-8の変換APIは用意されていないのできっと面倒な事になるんだろうな・・・と予想していたのですが、一旦ワイド文字に変換すれば良いだけでしたね。
今iPhoneアプリを開発中なのですが、Windows環境とも通信するためUTF-8でやることにしましたが、Shift_JISのダメ文字(「表」とか)を気にしなくていいのでUTF-8楽です。
1 :
2 : //UTF8に変換する
3 : void shiftJisToUTF8( char* converted
4 : ,size_t converted_length
5 : ,const char* ascii )
6 : {
7 :
8 : size_t sizeBuffer = strlen(ascii) *6;
9 : LPWSTR pwszBuf = new wchar_t[sizeBuffer];
10 :
11 : MultiByteToWideChar(
12 : CP_ACP,
13 : 0,
14 : ascii,
15 : -1,
16 : pwszBuf,
17 : (int)sizeBuffer);
18 :
19 :
20 : WideCharToMultiByte(
21 : CP_UTF8,
22 : 0,
23 : pwszBuf,
24 : -1,
25 : converted,
26 : (int)converted_length,
27 : NULL,
28 : NULL);
29 :
30 : delete[] pwszBuf;
31 : return;
32 : }
33 :
34 : //ShiftJisに変換する
35 : void UTF8ToShiftJIS( char* converted
36 : ,size_t converted_length
37 : ,const char* ascii )
38 : {
39 :
40 : size_t sizeBuffer = strlen(ascii) *6;
41 : LPWSTR pwszBuf = new wchar_t[sizeBuffer];
42 :
43 : MultiByteToWideChar(
44 : CP_UTF8,
45 : 0,
46 : ascii,
47 : -1,
48 : pwszBuf,
49 : (int)sizeBuffer);
50 :
51 :
52 : WideCharToMultiByte(
53 : CP_ACP,
54 : 0,
55 : pwszBuf,
56 : -1,
57 : converted,
58 : (int)converted_length,
59 : NULL,
60 : NULL);
61 :
62 : delete[] pwszBuf;
63 :
64 : return;
65 : }
§ zinviex [自分は、結局Mac Book Air買ったのに 使ってないんですよね…。 結局、Windows使ってますし何かやり..]
§ Suika [Airうらやましー Airくらいしか持ち運べそうなのがないんですよね。重くて。]