11月
27
2008
0

Mac OS X 10.5 (Leopard) でホームディレクトリを移動する

一般的にUNIX系OSではホームディレクトリには /(ルート)をマウントするパーティションとは別のパーティションを割り当てる

いろいろメリットがあるけど,パーティションを分けておけば,システムを再インストールするときにデータの復元が必要ないのでラクになる

Leopardはインストール時にホームディレクトリのマウント場所を指定できない
でも,そこはUNIX 03認定を受けたUNIX OSなのでfstabを書き換えればOKなハズ!!
と思っていたが,Leopard流のお作法があるようなのでまとめておく

Windowsでいうマイドキュメントの移動のような感じだが,個人的にはfstabでマウントポイントを変える方が素直で好き
ちょっとググった感じでは,やはりfstabの書き換えでも問題なく動く模様

以下は,h2というユーザのホームを /Volumes/Home/h2 に移す例

  1. ホームディレクトリを移動先にコピー
  2. $ sudo ditto -v -rsrcFork /Users/h2 /Volumes/Home/h2

  3. 「システム環境設定」の「アカウント」を開いて,左下のカギをクリックしてロックを解除
  4. ホームを移動したいユーザのアカウントを右クリックすると「詳細オプション」が表示されるのでクリック
  5. 「ホームディレクトリ」の欄を変更
  6. ログアウトして再度ログイン
  7. 移動前のホームディレクトリを名前を変えて待避
  8. $ cd /Users
    $ sudo mv h2 h2.org

  9. 移動先にリンクをはっておく(絶対パス対策)
  10. $ sudo ln -s /Volumes/Home/h2 h2

  11. 待避したホームディレクトリを削除(そんなに大きくないなら残しといたほうがイイかも)
  12. $ sudo rm -rf h2.org

Mac OS Xはスワップ専用のパーティションを作らない
HFSは断片化しにくいそうだが,長く使えばスワップのせいで結構断片化してそうな気がする
そういう意味でも,パーティション分割はよい選択肢だと思う

Written by h2 in: PC | タグ: ,
11月
25
2008
0

DropboxクライアントのLinux版がキターっ!!

Dropbox

ついにLinux版クライアントが登場していた!!ちょっと気づくのが遅いけど・・・w

Dropboxはクローズドベータの頃から愛用しているサービスで,複数PCでファイルの同期,バージョン管理,共有などができるオンラインディスクサービス
まさに開発者のいう通りで,rsyncとtracとSubversionのいいとこ取り!!

スゴいところは通常のローカルファイルシステム上のファイルと同様に扱えることと,オフラインでもファイルの更新ができること
EvernoteやAcrobat.comと並ぶ最近お気に入りのサービスのひとつ
Dropboxの詳細については,こちらの記事がかなり丁寧に解説されていてオススメ

Windows版Mac版のクライアントはベータの頃から用意されていたが,LinuxではWebインタフェースを使う必要があって,「オンラインを意識させない」という意味ではイマイチだった(とはいえAjax使いまくりで操作性は悪くなかったけど・・・)
正式公開に伴い,待望のLinux版クライアントが登場してたので入れてみた!!

サイトではメジャーなディストロのFedora CoreやUbuntu用にバイナリパッケージが用意されている
Cent OSやDebianにも使えるハズだし,ソースも公開されているので自前ビルド可能
Ubuntuユーザとしてうれしいのは,専用リポジトリが公開されているってこと

せっかく用意されているし,aptで入れておけば更新も超簡単なので今回はaptでインスコしてみた

まず,リポジトリを追加
/etc/apt/sources.list に以下のエントリを追加(以下は8.10用)

deb http://linux.getdropbox.com/ubuntu intrepid main
deb-src http://linux.getdropbox.com/ubuntu intrepid main

ローカルデータベースを更新
$ sudo apt-get update

で,インストール
$ sudo apt-get install nautilus-dropbox

最後に,Nautilusを再起動
$ killall nautilus

あとは,メニューバーにDropboxのアイコンが現れるので,ウィザードに従って設定するだけ

Webサービスの良さってクライアントのデキにかかってると思う今日この頃
速くEvernoteもLinux版のクライアント出してほしい

Written by h2 in: Webサービス | タグ: , , , ,
11月
12
2008
2

iPhone/iPod Touch Serial Communication How-To

iPhone and iPod Touch has an UART interface for serial communication, and the device file of serial port on iPhone/iPod Touch is /dev/tty.iap.
Since iPhone OS is based on Mac OS X, 4.4 BSD extensions are available.
You should note that index numbers of c_cc array declared in termios.h doesn’t much termios(4) explanations in 4th Berkeley Distribution man page on Leopard.

Collin Meyer wrote a good tutorial “iPhone/iPod Touch Serial Port Tutorial” about non-canonical serial communication on iPhone. 
His code is almost all right, but I can’t agree in some points:

Accessing via UART interface may damage your iPhone/iPod Touch, so try at your own risk.

Basic termios settings for non-canonical mode may be as follows:

cfmakeraw(struct termios*);
c_iflag = 0;
c_oflag = 0;
c_cflag |= (CREAD|HUPCL);
c_cflag &= ~CSTOPB;
c_cc[VMIN] = ???>1; (cf. http://www.sbin.org/doc/unix-faq/programmer/faq_4.html#SEC60)
c_cc[VTIME] = ???;
cfsetspeed(struct terios*, speed_t);

The following is a simple chat program with non-canonical mode communication.

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>

int main (int argc, const char * argv[]) {
  struct termios org_termios_s;
  struct termios my_termios_s;
  struct termios org_termios_c;
  struct termios my_termios_c;
  int fd = -1;
  char buf_r[128], buf_s[128];
  int i, j;

  // Open serial port
  if((fd = open("/dev/tty.iap", O_RDWR | O_NOCTTY | O_NONBLOCK)) == -1) {
    perror("open");
    exit(EXIT_FAILURE);
  }
  if(ioctl(fd, TIOCEXCL) == -1) {
    perror("TIOCEXCL");
    close(fd);
    exit(EXIT_FAILURE);
  }
  if(fcntl(fd, F_SETFL, 0) == -1) {
    perror("clear O_NONBLOCK");
    close(fd);
    exit(EXIT_FAILURE);
  }

  // Get original termios
  if(tcgetattr(fd, &org_termios_s) == -1) {
    perror("get serial original termios");
    close(fd);
    exit(EXIT_FAILURE);
  }

  if(tcgetattr(fileno(stdin), &org_termios_c) == -1) {
    perror("get console original termios");
    close(fd);
    exit(EXIT_FAILURE);
  }

  // Make my termios
  my_termios_s = org_termios_s;
  cfmakeraw(&my_termios_s);
  my_termios_s.c_iflag = 0;
  my_termios_s.c_oflag = 0;
  my_termios_s.c_cflag |= (CREAD|HUPCL);
  my_termios_s.c_cflag &= ~CSTOPB;
  my_termios_s.c_cc[VMIN] = 0; //can't detect modem hungups (cf. http://www.sbin.org/doc/unix-faq/programmer/faq_4.html#SEC60)
  my_termios_s.c_cc[VTIME] = 0;
  cfsetspeed(&my_termios_s, B19200);

  my_termios_c = org_termios_c;
  cfmakeraw(&my_termios_c);
  my_termios_c.c_iflag = 0;
  my_termios_c.c_oflag = 0;
  my_termios_c.c_cflag |= (CREAD|HUPCL);
  my_termios_c.c_cflag &= ~CSTOPB;
  my_termios_c.c_cc[VMIN] = 0;
  my_termios_c.c_cc[VTIME] = 0;

  // Change terminal settings
  if(tcsetattr(fd, TCSANOW, &my_termios_s) == -1) {
    perror("set my serial termios");
    close(fd);
    exit(EXIT_FAILURE);
  }
  if(tcsetattr(fileno(stdin), TCSANOW, &my_termios_c) == -1) {
    perror("set my console termios");
    close(fd);
    exit(EXIT_FAILURE);
  }

  // Main loop
  while(1) {
    j=read(fd, buf_r, 128);
    if(j > 0) {
      for(i=0; i<j; i++) {
        write(fileno(stdout), &buf_r[i], 1); //unrecommended use of write
      }
    }
    j=read(fileno(stdin), buf_s, 128);
    if (j > 0) {
      if(buf_s[0] == 'Q') {
        break;
      }
      for(i=0; i<j; i++) {
        write(fd, &buf_s[i], 1); //unrecommended use of write
      }
    }
  }

  // Revert orginal terminal settings
  if(tcsetattr(fd, TCSANOW, &org_termios_s) == -1) {
    perror("revert serial terminal settings");
    close(fd);
    exit(EXIT_FAILURE);
  }
  if(tcsetattr(fileno(stdin), TCSANOW, &org_termios_c) == -1) {
    perror("revert console terminal settings");
    close(fd);
    exit(EXIT_FAILURE);
  }

  printf("n"); // just cleanup
  close(fd);
  return 0;
}

Enjoy!

Written by h2 in: ガジェット | タグ:
11月
12
2008
0

ZFSのデモ “ZFS: A Smashing Success” はスマッシュしすぎ

OpenSolarisのサイトで見つけたZFSのデモ
ZFS: A Smashing Success

ZFSのスゴさについてはいうまでもないが,このデモも相当イッてるw
タイトル通り見事な”スマッシュ”!!

ヘルメットとゴーグルという過剰装備に身を包み,わざわざハンマーでHDDをぶっこわす
いかにもアメリカ人が好きそうなデモだ

最初にぶっこわしたHDDをみつめて ”That is … not driving any more.”
自分はココで爆笑

なぜか最後までフル装備で,最後はなんかテキトーになってきてユルユルなのも笑える

別にSunの回し者じゃないが,デモを見てZFSすげぇと思った人は是非OpenSolarisコミュニティの解説を読んでみて欲しい
Mac OS X Server Snow Leopard ではついにZFSが採用されるらしいが,Mac OS X Snow Leopardのプレビュー版には入ってなかった・・・
デスクトップ版のOSも早くZFSに対応して欲しい

Written by h2 in: 動画 | タグ: ,
11月
12
2008
0

Ubuntu 8.10でATOK X3のセットアップにちょっとハマる

OSのセットアップの次は,なにはともあれATOK

サポートサイトに従ってインストールしようとしたものの,キー配列の設定がおかしい
インストーラスクリプト setipatok_deb.sh のアンダースコア “_” が入力できない・・・

Shift+2でダブルクオートがでるし,やたらとハイフンを入力できるキーがあるw
インストール時からHHK Pro(ASCII配列)しかつないでないのになんでやろ?
まさかJapanese Teamのリポジトリを追加したから?

ともかく,CDなので不要なファイルを消すわけにもいかない
インストールスクリプトにリンクを張って回避した

次ラクをするためにメモしとく

  1. CDをマウント(以下,マウント先は /media/cdrom とする)
  2. インストールスクリプトへのシンボリックリンクを作成
  3. $ ln -s /media/cdrom/setupatok_deb.sh ~/hoge

  4. アップデートモジュールをDLして展開(以下,展開先は ~/atokx3up1 とする)
  5. タブ補完で入力できるように setupatok_up1_deb.sh 以外のインストールスクリプトは削除しておく
  6. 全員ログアウト
  7. 仮想端末に切り替え
  8. Ubuntuはデフォルトではrootでのログインを許可してないので,sudoできるユーザでログイン
  9. 文字化け対策
  10. $ export LANG=C

  11. /etc/gtk-2.0/gtk.immodules を作成
  12. $ sudo touch /etc/gtk-2.0/gtk.immodules

  13. インストールスクリプトを実行
  14. $ sudo bash ~/hoge

  15. CDのマウント先を聞かれるので適当に入力
  16. アップデートモジュールをインストール
  17. $ sudo bash ~/atokx3up1/setupatok_up1_deb.sh

  18. 起動設定を行う(設定用のスクリプトは全て setting_* という名前なのでアンスコが入力できなくても大丈夫)
  19. $ sudo bash /opt/atokx3/sample/setting_debian4.sh

  20. ログアウトし,端末を切り替えてXにログイン

ウィンドウの左下にでるうっとうしいステータス表示が気にならない人は,ここで終了
自分は気になって仕方がないので,抹殺

消すためのツール iiimf_status_hide はJustSystemsから提供されている

設定方法は以下の通り

  1. DLして展開
  2. 適当な場所にコピー(以下,/opt/atokx3/sample 内にコピーしたとする)
  3. 実行権限をつける
  4. ログイン時に毎回実行する必要があるので,/etc/X11/xinit/xinput.d/iiimf に次の1行を追加
  5. /opt/atokx3/sample/iiimf_status_hide

自分はMacPortsのクセでパスを間違えて,/opt/local/atokx3/… にしてたんで動かず悩んだ

「環境によっては動作しないこともあるので,自分でビルドしてね」に従って,ビルドしてしまった・・・ 
ビルドには build-essential と libgtk2.0-dev がいるので,自分でやる人はaptで入れましょう

Written by h2 in: PC | タグ: , ,
11月
11
2008
0

Ubuntu 8.10 Alternate CDでインストールがうまくいかない

7.04を超不安定にしてしまったので,8.10をクリーンインストールしてみた

Software RAIDを組んでいるのでインストールにはAlternate CDを使うことになる

いつも通りインストールを進めていたところ・・・
ベースシステムのインストールが73%になったところで,”Please insert the disc labeled: ‘Ubuntu 8.10 _Intrepid Ibex_ – Release i386 (20081028)’ in the drive ‘/cdrom/’ and press enter. Media change.” というポップアップが表示される

Desktop版のメディアを焼いて交換しよとするも,ドライブのイジェクトボタンを押しても反応がない
ejectコマンドでメディアを排出するとハングして先に進めない

Ubuntu Forumでも報告されているが,CDを4倍速以下で焼いたらうまくいったとか,ドライブを変えたらうまくいったとか要領を得ない

自分はCDを4倍速で焼き直してもだめだったが,外付けのUSBドライブを使ったらウマくいった
インストーラーの開始時に,USBデバイスのマッピングができないとかエラーが表示されていたが,特に問題いようなのでほっておくことにする

ドライブ変えてもだめなら,RAIDをフェイルさせてあとからミラーするのがベストかな?

Written by h2 in: PC | タグ: ,
11月
10
2008
0

Android Emulatorのスキン

Android SDKのEmulatorはスキンを変更することができる

デフォルトのスキンは
SDKのトップディレクトリ/tools/lib/images/skins
にあるのでこの中に入れるのもアリだが,-skindirオプションでフォルダを指定することもできるみたい 
スキンの指定は-skinオプションで行う

ちょっと探しただけで,T-Mobile G1, iPhone, Armadillo-500 FX用のスキンが見つかったので,試してみた

まずSDKオリジナル(左から順に,HVGA-P, HVGA-L, QVGA-P, QVGA-L)

androidskin_sdk-hvga-p androidskin_sdk-hvga-l androidskin_sdk-qvga-p androidskin_sdk-qvga-l

T-Mobile G1

androidskin_g1

iPhone(左から順に,HVGA-P, HVGA-L #他にQVGAもあり)

androidskin_iphone-p androidskin_iphone-l

Armadillo-500 FX

androidskin_a500fx

ちなみに,Ctrl+F12を押すとビューを回転させることができる

Written by h2 in: ガジェット | タグ:
11月
09
2008
0

Android 1.0 SDK

android

iPhone SDKの制約(ドックコネクタを使ったアプリはダメ,iTunesフォルダへのアクセス不可などなど)と基準のわからないアプリの選別,NDA縛りにうんざりしてきた今日この頃,最近ソースが公開されたり,搭載ケータイが発売されたりと話題の多いAndroidに浮気してみてた

実は,既に実機(SL-C1000)で動かしてみた後で,順番が逆な気もするがエミュレータを使った開発環境を整えてみる
はじめてAndroid SDKが公開されたときにちょっと試しに使ってみたが,それ以来触ってない
今年9月には1.0がリリースされて,いよいよAPIの仕様も固まって安定してきた模様

セットアップは超簡単(セットアップというのもおこがましい)
自分はMacでやったけど,LinuxやWindowsでもほとんど同じ(Mac以外だとJavaやPython,Antのインストールがいるかもしれない)

  1. 公式サイトからSDKをダウンロードしてくる
  2. ZIPファイルを展開(どこでもいいけど自分は /Applications にした)
  3. 複数バージョンの管理が簡単なようにシンボリックリンクを作成(別にやらなくてもOK)
  4. $ cd /Applications
    # ln -s android-sdk-mac_x86-1.0_r1 android-sdk

  5. PATHを通す(.bash_profile に追加)
  6. export PATH=/Applications/android-sdk/tools:$PATH

これだけ

Android SDKはiPhone SDKと違って,情報には事欠かない
iPhone SDKの完成度の高さ(特にInterface Builder)はさすがだと思うが,Objective-Cというマイナー言語(個人的には非常に好きだが・・・)を使っている以上,もっとオープンにして,好きなアプリを作れるようにせんとデベロッパーは離れていく
Android搭載機種が増えれば立場は逆転するような気がするのはオレだけなのか?

Written by h2 in: ガジェット | タグ:
11月
09
2008
0

軽量Lightbox風プラグインをタグ付け不要に

最近巷でよく見かけるLightbox風プラグイン

サイト移転前に使ってたLitebox plugin for Wordpressは,元祖のLightbox 2.0 for WordPressと比べると約3KBと超軽量なのが気に入ってたが,いちいちrel="lightbox"を書くのが面倒で使わなくなってしまった

とはいえLightboxは便利やから欲しいし,でもコレまで書いた記事全部にタグ付けるのは面倒・・・
って思ってたら,こんなサイトがっ!!

Litebox用に自動でrel="lightbox"属性を付ける方法はアチコチで紹介されていて珍しくないけど,このサイトで紹介されているスタイルシートやJavaScriptの本質を見抜いたやり方は美しい(書かれたご本人もそういっている) 
ということで,さっそくマネさせてもらった

詳細はサイトで解説されているので,以下は自分用にメモ

まず,gblitebox/css ディレクトリの中に lightbox.custom.css という名前で下記の内容のファイルを作成

#prevLink, #nextLink{
background: transparent url(/~h2/wp-content/plugins/gblitebox/images/blank.gif) no-repeat;
}
#prevLink:hover, #prevLink:visited:hover {
background: url(/~h2/wp-content/plugins/gblitebox/images/prevlabel.gif) left 15% no-repeat;
}
#nextLink:hover, #nextLink:visited:hover {
background: url(/~h2/wp-content/plugins/gblitebox/images/nextlabel.gif) right 15% no-repeat;
}

次に,gblitebox/js ディレクトリの中に litebox-1.0.custom.js という名前で下記の内容のファイルを作成 

//
// オリジナルの変数をオーバーライド
//
fileLoadingImage = "/~h2/wp-content/plugins/gblitebox/images/loading.gif";
fileBottomNavCloseImage = "/~h2/wp-content/plugins/gblitebox/images/closelabel.gif";
//
// オリジナルのinitLightbox関数をオーバーライド
//
initLightbox = function() {
addRelLightboxAttribute('content');
myLightbox = new Lightbox();
};
//
// rel="lightbox"属性をanchor要素に付加
//
addRelLightboxAttribute = function(id) {
if (!document.getElementsByTagName) { return; }
var ele;
if (id) {
ele = $(id);
if (!ele) { return; }
} else {
ele = document.body;
}
var anchors = ele.getElementsByTagName('a');
for (var i = 0; i < anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute('href').match(/jpg$|gif$|png$/)) {
var rel = String(anchor.getAttribute('rel'));
if (!rel.toLowerCase().match('lightbox')) {
anchor.setAttribute('rel', rel ? rel+' lightbox' : 'lightbox');
}
}
}
};
最後に,gblitebox/gblitebox_plugin.php を編集
<link rel=\"stylesheet\" href=\"".$litebox_path."css/lightbox.css\" type=\"text/css\" media=\"screen\" />
<link rel=\"stylesheet\" href=\"".$litebox_path."css/lightbox.custom.css\" type=\"text/css\" media=\"screen\" />
・・・
<script type=\"text/javascript\" src=\"".$litebox_path."js/litebox-1.0.js\"></script>
<script type=\"text/javascript\" src=\"".$litebox_path."js/litebox-1.0.custom.js\"></script>
Written by h2 in: PC | タグ: ,
11月
09
2008
0

記事を折りたたむWordPressプラグイン

長々と書くことが多いんで,できれば記事は短く折りたたんで,トップにたくさんの記事を表示したい

Ajaxified Expand Post NOWというプラグインを見つけたので試してみた

短いスクリプトなのでカスタマイズもしやすそう
動作も軽くてコレええやん!!っていいそうになったけど・・・

折りたたまれた記事を展開しても,他のJavaScriptを使ったプラグインが動作しない・・・
プラグインを呼ぶためのタグがサニタイズされている模様

ということで,とりあえず入れておくだけに・・・

気が向いたら改造しよう

Written by h2 in: PC | タグ:

TheBuckmaker WordPress Themes Webhosting, MP3, AAC & Co