<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>PC日記</title>
        <link>http://www.wizard-limit.net/mt/pc/</link>
        <description>PCに関するもろもろもろ・・・</description>
        <language>ja</language>
        <copyright>Copyright 2012</copyright>
        <lastBuildDate>Sat, 14 Jan 2012 09:28:53 +0900</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        
        
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/wizard-limit/mt/pc" /><feedburner:info uri="wizard-limit/mt/pc" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
            <title>FreeBSD 9.0 アップグレード失敗</title>
            <description>FreeBSD 9.0 がリリースされた(&lt;a href="http://www.freebsd.org/ja/releases/9.0R/announce.html"&gt;FreeBSD 9.0-RELEASE アナウンス&lt;/a&gt;)ので、うちの環境も9.0に上げてみることにする。&lt;br/&gt;
早速、supfile の tag を RELENG_8 から RELENG_9 に変更して csup する。csupの間にリリースノートを読んだりしてたんだけど、9.0Rをソースから入れる場合のタグは RELENG_9_0 とか、svn の場合は releng/9.0 ブランチだとか書いてある。&lt;br/&gt;
あれ? RELENG_9 と RELENG_9_0 の違いってなんだっけ?と調べたところ、RELENG_9 は 9-STABLE ブランチで、RELENG_9_0 は 9.0-RELEASE のスナップショットらしい。&lt;br/&gt;
そして、2008年から開発はCVSからsvnに移っていることもわかったが、公式サイトではsvnwebと言うwebインターフェイス(&lt;a href="http://svnweb.freebsd.org/base/"&gt;[base] Index of /&lt;/a&gt;)のURLしか見つけることができなかった。これだと、subversionクライアントから取得することができない。&lt;br/&gt;
ちょっとぐぐったら、&lt;a href="http://d.hatena.ne.jp/syohex/20110129/1296301046"&gt;FreeBSDのソースコードを Subversionリポジトリから取得する - Life is very short&lt;/a&gt;と言うページを見つけたので、svn://svn.freebsd.org/base/ だと言うことがわかった。9-STABLE なら、svn://svn.freebsd.org/base/stable/9 なのだろう。(releng/9 じゃないので、CVSのタグポリシーと違うみたいだけど、こっちの方がわかりやすいと思う)&lt;br/&gt;
&lt;br/&gt;
どっちが早いかとか調べるのも面倒だったので、当面はCVSup(csup)を使い続けることにする。&lt;br/&gt;
&lt;br/&gt;
さて、Upgradeを開始する前に読むべきは&lt;a href="http://www.freebsd.org/releases/9.0R/relnotes-detailed.html#UPGRADE"&gt;FreeBSD 9.0-RELEASE Release Notes&lt;/a&gt;の3 Upgrading from previous releases of FreeBSD&lt;br/&gt;
つらつらと眺めると、以下のような変更があるらしい。
&lt;ol&gt;
&lt;li&gt;インストーラやportsで使われる dialog ライブラリが新しくなりました。&lt;/li&gt;
&lt;li&gt;パーティションメタデータの整合性チェックがデフォルトで有効になりました。&lt;/li&gt;
&lt;li&gt;ATA/SATAがcamベースになり、デバイスファイル名が /dev/ad0 等から /dev/ata0 等に変更になりました。互換性のために、/dev/ada0から/dev/ad0へのシンボリックリンクが提供されます。&lt;/li&gt;
&lt;li&gt;/etc/rc.conf でのネットワークの設定が変更になりました。IPアドレスの前にアドレスファミリの指定が必須になりました。ipv6_enableはdeprecatedになり、デフォルトで有効になりました。&lt;/li&gt;
&lt;li&gt;resolv.conf を設定するためのresolvconfユーティリティが追加されました。&lt;/li&gt;
&lt;li&gt;disk partision 関連のユーティリティ(fdisk, disklabel, bsdlabel)は将来的にサポートされなくなり、gpartの使用が推奨されます&lt;/li&gt;
&lt;/ol&gt;
大きいのはad?のデバイスファイル名の変更かなと思ったけど、リンクが張られるなら問題ないはず。&lt;br/&gt;
と、言うことで、いつものようにbuildworld &amp;amp; buildkernel。&lt;br/&gt;
いつもなら、ここでそのまま installkernel, installworld, reboot, mergemaster なんだけど、流石にメジャーバージョンアップなので、&lt;a href="http://www.freebsd.org/doc/ja/books/handbook/makeworld.html"&gt;world の再構築&lt;/a&gt;の手順に従って真面目にやることにする。(結果的に、このおかげで助かった)&lt;br/&gt;
はじめて make world したころとは、ドキュメントの中身がだいぶ変わっていて、すごく詳細に書いてあるので、最近読んでないな〜という人は一読をおすすめする。&lt;br/&gt;
&lt;br/&gt;
と、言うわけで installkernel したところで一度reboot、起動メニューで4番の Single user mode を選ぶ。&lt;br/&gt;
と、あっと言う間に kernel panic。ほっておくと15秒で再起動、キーを押すと再起動のカウントダウンを止められるけど、コンソールに出ているメッセージは更に数行流れてしまうため、エラーの原因が良くわからない。&lt;br/&gt;
カーネルが起動すれば dmesg とか messages とかログの調べようがあるのだけれど、boot時のpanicだとどうやってログを取得すれば良いのかわからない。&lt;br/&gt;
&lt;br/&gt;
fixitフロッピーとか作ってないし、そもそもFDドライブないし、8のCDもどこにあるかわからないし、どうやって復旧したもんかな〜と悩んだ結果、別のメディアから起動しなくても、一個前のカーネルくらい残ってるんじゃね?と思いつく。&lt;br/&gt;
そこで、起動メニューから6番を選んでプロンプトに降りて、
&lt;pre class="commandline"&gt;
boot kernel.old
&lt;/pre&gt;
と入力してみたら、無事に8.2-STABLEで起動した。&lt;br/&gt;
これで、何か調べて installkernelしてしまうと、kernel.old は起動できない 9-STABLE になってしまうので、まずは保全を考える。&lt;br/&gt;
/boot/kernel.old を /boot/kernel.8 にコピー(tar使いました)して再起動して、
&lt;pre class="commandline"&gt;
boot kernel.8
&lt;/pre&gt;
としてみたところ、ちゃんと起動できたので、このディレクトリを取っておけば大丈夫だろう。&lt;br/&gt;
ついでに、/boot/loader.conf に
&lt;pre class="textfile"&gt;
kernel="kernel.8"
&lt;/pre&gt;
とか書けば、こっちがデフォルトになるんじゃないかと思うけど、そんな頻繁に再起動するものでもないからこのままにする。&lt;br/&gt;
&lt;br/&gt;
保全ができたので、panicの原因を追求する。&lt;br/&gt;
しかし、起動時のログが取れないので、iPhoneのカメラで動画を撮影して、手でコピーしてみた。
&lt;pre class="textfile"&gt;
(前略)
agp1: &amp;lt;Intel 82855GME (855GME GMCH) SVGA controller&amp;gt; on vgapci0
panic: make_dev_credv: bad si_name (error=17, si_name=agpgart)
cpuid = 0
KDB: stack backtrace:
#0 0xc0a9a3d7 at kdb_backtrace+0x47
#1 0xc0a66679 at panic+0x119
#2 0xc0a1cf1e at make_dev_credv+0x9e
#3 0xc0a1d15a at make_dev+0x4a
#4 0xc05510ee at agp_generic_attach+0x12e
#5 0xc0d7d288 at agp_i810_attach+0xb8
#6 0xc0a93d77 at device_attach+0x387
(後略)
&lt;/pre&gt;
agpのドライバ周りでpanicしてる?ぐぐると、"panic: make_dev_credv: bad si_name" で結構ひっかかるんだけど、どうも関係ないっぽい。&lt;br/&gt;
ちなみに、8.2だと以下のような感じ。
&lt;pre class="textfile"&gt;
agp1: &amp;lt;Intel 82855GME (855GME GMCH) SVGA controller&amp;gt; on vgapci0
agp1: aperture size is 128M, detected 32636k stolen memory
vgapci1: &amp;lt;VGA-compatible display&amp;gt; at device 2.1 on pci0
&lt;/pre&gt;

&lt;br/&gt;
もうちょっと情報を集めないと、9.0にできないかなあ。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/zb23zRH0f2Y/004675.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004675.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">FreeBSD</category>
            
            
            <pubDate>Sat, 14 Jan 2012 09:28:53 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004675.html</feedburner:origLink></item>
        
        <item>
            <title>PostgreSQL9.1.1に上げる</title>
            <description>最近PostgreSQLのバージョンを上げていなかったので、たまには上げてやろうと思う。&lt;br/&gt;
きっかけは、pg_upgrade と言う新機能のマニュアルを読んだこと。こいつがあると、今までのように pg_dump しなくてもバージョンがあげられるらしい。&lt;br/&gt;
ところが、良く良く読んでみると、なかなか条件が厳しい。
&lt;ul&gt;
&lt;li&gt;旧バージョンと新バージョンの両方のdataディレクトリが別の場所にあること&lt;/li&gt;
&lt;li&gt;旧バージョンと新バージョンのバイナリが別の場所にあること&lt;/li&gt;
&lt;/ul&gt;
まあ、前者は当然と言えば当然の条件だけど、後者が厳しい。FreeBSDのportsでは複数バージョンの混在を許していないから。&lt;br/&gt;
ちなみに、portsから入れたデフォルトではデータディレクトリも /usr/local/pgsql/data なんだけど、これはrc.conf に postgresql_data を定義してやれば自由に変えられる。&lt;br/&gt;
試しにpg_dumpallしてみたら1分程度で終わったので、今回も pg_upgrade ではなく dump/restore でバージョンアップすることにする。&lt;br/&gt;
前回の記事が &lt;a href="/mt/pc/archives/001426.html"&gt;postgresqlバージョンアップ - PC日記&lt;/a&gt;にあるのだが、あまりにざっくりしているのでもう少し丁寧に書く。(やったことは基本同じだけど)

&lt;ol&gt;
&lt;li&gt;pgsqlユーザで現在のデータベースのバックアップを取る
&lt;pre class="commandline"&gt;
$ pg_dumpall -f dumpall.20111207
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;root でデータベースを止め、既存のバージョンを削除する。
&lt;pre class="commandline"&gt;
# /usr/local/etc/rc.d/postgresql stop
# pkg_deinstall postgresql-server-8.4.7
# pkg_deinstall -f postgresql-client-8.4.7
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;root で既存のデータディレクトリをリネームする。
&lt;pre class="commandline"&gt;
# mv /usr/local/pgsql/data /usr/local/pgsql/data.8.4
&lt;/pre&gt;
これは、将来pg_upgradeみたいな仕組みが使いやすくなったときに、いつも同じディレクトリを使うのではなく、バージョン毎のディレクトリにしておいた方が良さそうなため。PostgreSQLは、x.y.zのx.yの部分が同じならばデータディレクトリは互換性があることになっているので、バージョン8.4.7でもディレクトリは8.4で良い。&lt;/li&gt;
&lt;li&gt;新バージョンをインストール
&lt;pre class="commandline"&gt;
# portupgrade -N databases/postgresql91-server
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;/etc/rc.conf 修正&lt;br/&gt;
既存のデータディレクトリのリネームで説明した通り、今後はデータディレクトリにはバージョンをつけることにしたので、/etc/rc.conf に以下を追加
&lt;pre class="textfile"&gt;
postgresql_data="/usr/local/pgsql/data.9.1"
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;データベース作成
&lt;pre class="commandline"&gt;
# /usr/local/etc/rc.d/postgresql initdb
&lt;/pre&gt;
※ 前回の記事では、initdb -E utf8をやり直したと書いてあるが、最近の rc.d/postgresql では initdb のデフォルトのオプションで "--encoding=utf-8 --lc-collate=C" が指定されているので、そのままで問題ない。&lt;/li&gt;
&lt;li&gt;データベース起動
&lt;pre class="commandline"&gt;
# /usr/local/etc/rc.d/postgresql start
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;データベースのバックアップからの復元
&lt;pre class="commandline"&gt;
# psql -U pgsql postgres &lt; dumpall.20111207
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;

これで、dump/restore を使った PostgreSQL のバージョンアップの出来上がり。&lt;br/&gt;
後は、各種クライアントの動作チェックをして、っていきなり MovableType でログインしようとすると Can't use string ("x42494e3a53455247000000000000000") as an ARRAY ref while "strict refs" in use と言うエラーが出る。&lt;br/&gt;

&lt;img alt="mt-error.jpg" src="http://www.wizard-limit.net/mt/pc/archives/images/mt-error.jpg" width="691" height="219" class="mt-image-none" style="" /&gt;&lt;br/&gt;
&lt;br/&gt;
これはまた泣きながら8.4に戻さないと駄目か?と思ったが、一応エラーメッセージでぐぐってみるといきなり正解にたどり着いた。&lt;a href="http://forums.movabletype.org/2010/10/cant-use-string-as-an-array-ref-while-strict-refs-in-use.html"&gt;Can't use string .... as an ARRAY ref while strict refs in use - Movable Type Forums&lt;/a&gt;&lt;br/&gt;
ここには、postgresql.conf に bytea = 'escape' と書けとあるが、9.1の実際の postgresql.conf を見ると bytea_output と書いてあるようなので、以下の行を追加した。
&lt;pre class="textfile"&gt;
bytea_output = 'escape'
&lt;/pre&gt;
これで、無事に MovableType も動くようになった。&lt;br/&gt;</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/FI_nSt5BpuA/004656.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004656.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">FreeBSD</category>
            
            
            <pubDate>Wed, 07 Dec 2011 23:25:43 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004656.html</feedburner:origLink></item>
        
        <item>
            <title>Jenkinsのインストール</title>
            <description>&lt;a href="http://gihyo.jp/dp/ebook/2011/978-4-7741-4952-3"&gt;Jenkinsではじめるビルド職人入門&lt;/a&gt; が、11月中だけ発売記念で無料(12月から1,000円)だったので読んでみた。&lt;br/&gt;
自分で使ったことはないけど、隣のプロジェクトが使ったりしているので、そんなに目新しいことはなかったのだけれど、とりあえずうちにも入れてみようと思う。&lt;br/&gt;
portsを調べると、devel/jenkinsと言うのがあったのでインストールしてみる。&lt;br/&gt;
すると、jenkins.warをダウンロードしてきて /usr/local/share/jenkins にインストールして、後はユーザやグループを作ったり、ディレクトリを作ったり、/usr/local/etc/rc.d に起動スクリプトを作ってくれたりするらしい。&lt;br/&gt;
jenkinsは、warなので、tomcatのようなServletコンテナでも実行できるし、直接javaに渡すことでjenkinsに入っている Winstone と言うコンテナでスタンドアローンでも起動できる。&lt;br/&gt;
rcスクリプトで jenkins_enable="YES" にした場合は、Winstone を使うことになる。&lt;br/&gt;
既にtomcatなどを動かしている場合は、そちらを使った方が良いかも知れない。設定方法わからないけど。&lt;br/&gt;
&lt;br/&gt;
とりあえず、うちではtomcatは動いていなかったので、rcスクリプトをそのまま使う。/usr/local/etc/rc.d/jenkinsを読むと、jenkins_enable="YES"にしたときのデフォルトの挙動と、それぞれの設定項目が読める。
&lt;pre class="textfile"&gt;
: ${jenkins_enable="NO"}
: ${jenkins_home="/usr/local/jenkins"}
: ${jenkins_args="--webroot=${jenkins_home}/war --httpListenAddress=127.0.0.1 --httpPort=8180 --ajp13ListenAddress=127.0.0.1 --ajp13Port=8009 --prefix=/jenkins"}
: ${jenkins_java_home="/usr/local/jdk1.6.0"}
: ${jenkins_user="jenkins"}
: ${jenkins_group="jenkins"}
: ${jenkins_log_file="/var/log/jenkins.log"}
&lt;/pre&gt;
※ jenkins_java_home は、portsが決めてくれたんだと思う。うちはjdk1.6.0が入っていたので。&lt;br/&gt;
これを見ると、jenkins_homeは/usr/local/jenkinsであり、httpが8180で、ajp13が8009で、それぞれlocalhostだけでLISTENすることがわかる。&lt;br/&gt;
なんとなく頻繁に書き変わるものは/varに置きたいので、/etc/rc.conf は以下のようにした。
&lt;pre class="textfile"&gt;
# jenkins                                                                       
jenkins_enable="YES"
jenkins_home="/var/local/jenkins"
&lt;/pre&gt;
そして、/var/local/jenkinsを作成。
&lt;pre class="commandline"&gt;
# mkdir /var/local/jenkins
# chown jenkins:jenkins /var/local/jenkins
&lt;/pre&gt;
そして、jenkins起動。
&lt;pre class="commandline"&gt;
# /usr/local/etc/rc.d/jenkins start
&lt;/pre&gt;
&lt;br/&gt;
FreeBSDにはグラフィカルなブラウザを入れていないので、このままではアクセスできない。apache経由でアクセスできるように、httpd.conf の VirtualHostの中に以下を追加。
&lt;pre class="textfile"&gt;
    &amp;lt;Location /jenkins&amp;gt;
        ProxyPass ajp://127.0.0.1:8009/jenkins
    &amp;lt;/Location&amp;gt;
&lt;/pre&gt;
apacheに読み込ませる。
&lt;pre class="commandline"&gt;
# apachectl graceful
&lt;/pre&gt;
これで、apache経由でjenkinsにアクセスできる。&lt;br/&gt;
アクセスすると、最初は誰でもjenkinsが使えるモード。&lt;br/&gt;
Jenkinsの管理→システムの設定で、「セキュリティを有効化」にチェックを入れる。&lt;br/&gt;
アクセス制御のところでアカウント管理のバックエンドが選べるので、小規模なのであれば「Jenkinsのユーザーデータベース」で問題ないだろう。PAMも使えるようなので、そちらでも良いかも知れない。&lt;br/&gt;
この後の手順が良くわかっていないのだが、私の場合は同じ画面の「権限管理」で「行列による権限設定(プロジェクト単位)」を選び、ユーザを追加してすべての権限にチェックを入れ、画面一番下の「保存」を押したらサインアップの画面が出て来たので、先ほど権限で追加したのと同じユーザ名でユーザを登録した。&lt;br/&gt;
普通に保存だけして、最初の一人は管理者としてサインアップできるのかも知れないが、面倒ので検証していない。&lt;br/&gt;
後は、普通にジョブを追加してjenkinsに実行してもらえば良いのだが、開発中のプロジェクトもないのでやってもらうことがないのである。&lt;br/&gt;
明日会社でプロジェクトのリリース手順でも自動化しようかな・・・。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/nuQDBG3pa44/004650.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004650.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">FreeBSD</category>
            
            
            <pubDate>Fri, 25 Nov 2011 22:24:20 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004650.html</feedburner:origLink></item>
        
        <item>
            <title>スキャナが使えない</title>
            <description>息子が写真を取り込みたいと言うので、久しぶりにスキャナを使うことにする。&lt;br/&gt;
試しに、USBで直接Macに繋いだ所、認識しない。&lt;br/&gt;
メーカーのページで調べてみたところ、ドライバはMac OS X 10.4まで、もしくはWindows Vista 32bitまで。&lt;br/&gt;
Lionでは当然使えなさそうなので、他の方法を探す。&lt;br/&gt;
と、言うか、以前Macを買ったときに、xsaneを使えるようにしていた。&lt;a href="http://www.wizard-limit.net/mt/pc/archives/004547.html"&gt;Macからsaneのスキャナを使う - PC日記&lt;/a&gt;&lt;br/&gt;
ので、xsaneを起動してみたところ、スキャナが見つからないと言う。&lt;br/&gt;
サーバであるFreeBSDでscanimage -L してみると、やはりスキャナが見つからない。&lt;br/&gt;
/var/log/messageを見ると、
&lt;pre class="textfile"&gt;
Nov  5 10:35:46 sv kernel: ugen0.3: &amp;lt;National Semiconductor&amp;gt; at usbus0
&lt;/pre&gt;
のように出ている。以前は、
&lt;pre class="textfile"&gt;
Nov  5 11:10:20 sv kernel: ugen0.3: &amp;lt;Canon&amp;gt; at usbus0
&lt;/pre&gt;
のように出ていたはずなのに。USBを抜き差しすると、もとに戻った。&lt;br/&gt;
sane-find-scannerやscanimage -L を実行すると、
&lt;pre class="commandline"&gt;
# sane-find-scanner
found USB scanner (vendor=0x04a9 [Canon], product=0x220d [CanoScan], chip=LM9832/3) at libusb:/dev/usb:/dev/ugen0.3
# scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).
&lt;/pre&gt;
以前は認識していたはずなのに、scanimage -L で出てこない。&lt;br/&gt;

いろいろ試してみた結果、/usr/local/etc/sane.d/plustek.conf の
&lt;pre class="textfile"&gt;
[usb]
&lt;/pre&gt;
の行を、
&lt;pre class="textfile"&gt;
[usb] 0x04a9 0x220d
&lt;/pre&gt;
のようにしたら、
&lt;pre class="commandline"&gt;
# scanimage -L
device `plustek:libusb:/dev/usb:/dev/ugen0.3' is a Canon CanoScan N670U/N676U/LiDE20 flatbed scanner
&lt;/pre&gt;
のように出て来た。&lt;br/&gt;
plustek: の部分は、canonとかcanon630uとかになるべきじゃないかと思って、canon.confとかcanon630u.conf をいじっってみたけど、変わらず。さらに、plustek.conf を元に戻しても、認識したまんまだったりして、良くわからない。&lt;br/&gt;</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/wLdP0T6BDdc/004633.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004633.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">FreeBSD</category>
            
            
            <pubDate>Sat, 05 Nov 2011 14:01:59 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004633.html</feedburner:origLink></item>
        
        <item>
            <title>841SHとAperture</title>
            <description>親から、携帯の写真を取り込みたいと言われて、見に行ったら結構はまったのでメモ。&lt;br/&gt;
まず、親のPC環境は MacBook Pro に Aperture を入れてある。で、携帯はソフトバンクの 841SH。USBケーブルが用意してあった。&lt;br/&gt;
Macと841SHをつなぐと、841SHの画面に選択肢が出るので、「カードリーダモード」を選択する。すると、Mac側でApertureが起動して、841SHのmicroSDが 「/Volumes/NO NAME」にマウントされる。&lt;br/&gt;
しかし、写真が一枚も表示されない。&lt;/br&gt;
Finderで見てみると、DCIMディレクトリは空っぽ。そして、探しまわった結果、写真は「PRIVATE/MYFOLDER/My Items/Pictures」にあった。&lt;br/&gt;
Apertureは、標準的なDCIM下しか見てくれないので、取り込むことができない。(やり方がわからない)&lt;br/&gt;
しょうがないので、Finderでコピーしてから取り込んだのだが、こんな手順は親には要求できない。せっかく「Mac買ってAperture入れれば写真の扱いも簡単だよ〜」と言った立場がないのである。&lt;br/&gt;
ちなみに、&lt;a href="http://broadband.mb.softbank.jp/mb/support/3G/product/841sh/pdf/841sh_userguide_14_r3.pdf"&gt;マニュアルの14章&lt;/a&gt;の14-24ページには、このフォルダ構成のことが一応書いてあるのだが、DCIM/XXXSHARPには何が入るのだろうか。&lt;br/&gt;
&lt;br/&gt;
その後も諦めきれなくて、メニューをカチャカチャいじっていたら、どうも841SHはBluetoothもついているらしいので、Macとペアリングしてみたのだが、そうすると今度はmicroSDではなくて本体の内蔵メモリしか見ることができない・・・。&lt;br/&gt;
なんとかならないものかしらね。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/wcv5SR38U-E/004628.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004628.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Mac</category>
            
            
            <pubDate>Sun, 30 Oct 2011 21:16:54 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004628.html</feedburner:origLink></item>
        
        <item>
            <title>ことえりで半角スペース</title>
            <description>Macの日本語入力はGoogle日本語入力を使っていたのだけれど、OSをLionにアップグレードしたときに勝手にことえりに戻ってしまったので、そのままことえりを使っている。&lt;br/&gt;
&lt;br/&gt;
で、困るのが半角スペースの入力。ことえりの設定にはそう言う選択はない。&lt;br/&gt;
ちょっと調べたら、&lt;a href="http://notebookpc.jp/archives/2562"&gt;Mac OS X ことえりで半角スペースをデフォルトにする方法 » NotebookPC.jp&lt;/a&gt;と言うページを発見。&lt;br/&gt;
基本ここに書いてある通りなんだけど、微妙にはまったのでメモ。&lt;br/&gt;
&lt;br/&gt;
&lt;h3 class="h3c"&gt;現在の設定を見る&lt;/h3&gt;
&lt;pre class="commandline"&gt;
% defaults read com.apple.inputmethod.Kotoeri zhsy
{
    " " = 1;
    "!" = 1;
    "\\"" = 1;
    "#" = 1;
    "$" = 1;
    "%" = 1;
    "&amp;amp;" = 1;
    "'" = 1;
    "(" = 1;
    ")" = 1;
    "*" = 1;
    "+" = 1;
    "," = 1;
    "-" = 1;
    "." = 1;
    "/" = 1;
    ":" = 1;
    ";" = 1;
    "&amp;lt;" = 1;
    "=" = 1;
    "&amp;gt;" = 1;
    "?" = 1;
    "@" = 1;
    "[" = 1;
    "\\\\" = 1;
    "]" = 1;
    "^" = 1;
    "_" = 1;
    "`" = 1;
    "{" = 1;
    "|" = 1;
    "}" = 1;
    "~" = 1;
    "\\U00a5" = 1;
}
&lt;/pre&gt;
ちなみに、最後のzhsyをつけないと、ことえり全体の設定が見られるようだ。&lt;br/&gt;
&lt;br/&gt;
&lt;h3 class="h3c"&gt;半角スペースをデフォルトにする&lt;/h3&gt;
&lt;pre class="commandline"&gt;
% defaults write com.apple.inputmethod.Kotoeri zhsy -dict-add " " -bool no
&lt;/pre&gt;
参考にしたページからそのままコピペすると、"が全角だったので
&lt;pre class="commandline"&gt;
% defaults write com.apple.inputmethod.Kotoeri zhsy -dict-add " " -bool no
2011-10-15 07:41:17.974 defaults[22079:707] Dictionary keys must be strings
&lt;/pre&gt;
のようなエラーが出てはまった。はまった過程で、余計なものを追加してしまったのだけれど、-dict-add はあるけど -dict-del がないので、消し方がわからない。-dict で既存のものもすべて追加し直せば良いんだろうけど、面倒だし実害もなさそうだからほっておくことにする。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/YeZ1xBVqzSM/004608.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004608.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Mac</category>
            
            
            <pubDate>Sat, 15 Oct 2011 07:32:10 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004608.html</feedburner:origLink></item>
        
        <item>
            <title>dd_rescueでHDD交換</title>
            <description>smartのエラーが出てしまったので、HDDを交換することにする。&lt;br/&gt;
早速、amazonで新しいHDDとSATAケーブルを注文した。&lt;br/&gt;
で、HDDが届いたので、エラーが出始めているHDDと交換するためにケースを開けると、SATAの口は開いているけど、電源ケーブルが1本のケーブルに口が2つあるタイプだった。&lt;br/&gt;
どう見ても入りそうになかったので、現在は使用していない3.5インチのFDDを外して、代わりに新しいdiskを入れる。&lt;br/&gt;
既存のHDDはSATAの1番目に刺さっていたので、後のことを考えて新しいHDDをSATAの1番目に、古いHDDをSATAの2番目に繋いだ。&lt;br/&gt;
そして、用意しておいたKNOPPIXのCD-Rで起動することに。boot時に knoppix noswap を指定するようにとの指示を何箇所かで見たんだけど、エラーになっていたので気にせずデフォルトで起動してしまった。(後で、swapon -l とかで見ても何も出なかったので、たぶん問題ないだろう)&lt;br/&gt;
ちなみに、knoppixは&lt;a href="http://www.rcis.aist.go.jp/project/knoppix/"&gt;KNOPPIX Japanese edition&lt;/a&gt;からknoppix_v6.4.4CD_20110130-20110301.isoを持ってきた。(ツールの方も、dd_rescueの他にddrescueとかdd_rhelpとかいろいろあるみたいだけど、なんとなくdd_rescueにした)&lt;br/&gt;
で、なんかGUIが起動したんだけど、ディスプレイとの相性が悪かったのかまともに表示されなくて使えない。&lt;br/&gt;
しょうがないので、Ctrl + Alt + F1を押してコンソールを表示して、そこで作業することにする。&lt;br/&gt;
ls /dev/sd* とかやると、/dev/sda と、/dev/sdb そして /dev/sdb1, /dev/sdb2, ... と表示されたので、狙い通り新しいHDDが/dev/sda, 古いHDDが/dev/sdbになったようだ。&lt;br/&gt;
後は、dd_rescueの実行。オプションなしで実行すると、ヘルプが出るので、適当に読んだところたぶん-Aオプション(読めなかったら0で埋める)を指定すればいいだろう。&lt;br/&gt;
&lt;pre class="commandline"&gt;
# dd_rescue -A /dev/sdb /dev/sda
dd_rescue: (info): ipos: 488386584.0k, opos: 488386584.0k, xfrerd: 488386584.0k
                   errs:      0, errxfer:          0.0k, succxfer: 488386584.0k
             +curr.rate:    21883kB/s, avg.rate:     39190kB/s, avg.load: 15.9%
Summary for /dev/sdb -&gt; /dev/sda:
dd_rescue: (info): ipos: 488386584.0k, opos: 488386584.0k, xfrerd: 488386584.0k
                   errs:      0, errxfer:          0.0k, succxfer: 488386584.0k
             +curr.rate:      601kB/s, avg.rate:     39190kB/s, avg.load: 15.9%
&lt;/pre&gt;
500GBのHDDのコピーに、だいたい4時間くらいかかったか。(途中で外出したので、正確な時間はわからない)&lt;br/&gt;
結局、コピー中にはエラーが出なかったので、古いdiskも再度newfsか何かしてやれば使えるんじゃないかと思う。&lt;br/&gt;
knoppix上でshutdown -r とすると、CD-Rがイジェクトされて、ENTER押さないと2分で再起動するよとか言われるので、CDを取り出してENTERを押すと、無事に新しいHDDからFreeBSDが起動した。&lt;br/&gt;
dmesgを見ると、新しいHDDが/dev/ad4, 古いHDDが/dev/ad6として認識されていた。(以前は、古いHDDが/dev/ad4)&lt;br/&gt;
&lt;br/&gt;
さて、これで古いHDDがmountされない状態で起動するようになったので、ddによる修復を試みて見よう。&lt;br/&gt;
b = (int)((L-S)*512/B) を計算すると、13258037になっていたので、まずは該当のブロックを読んでみる。&lt;br/&gt;
&lt;pre class="commandline"&gt;
# dd if=/dev/ad6 of=ad6 bs=16384 count=1 skip=13258037
1+0 records in
1+0 records out
16384 bytes transferred in 0.973938 secs (16822 bytes/sec)
&lt;/pre&gt;
んで、/dev/zeroを書く代わりにこのデータを書き戻してみる。
&lt;pre class="commandline"&gt;
# dd if=ad6 of=/dev/ad6 bs=16384 count=1 seek=13258037
1+0 records in
1+0 records out
16384 bytes transferred in 0.000354 secs (46275742 bytes/sec)
&lt;/pre&gt;
すると、/var/log/messagesに以下のメッセージが出た。
&lt;pre class="textfile"&gt;
Aug  5 21:13:41 sv kernel: GEOM: ad6s1: geometry does not match label (255h,63s != 16h,63s).
&lt;/pre&gt;
なんか間違ってしまったような気もするけど、今の知識では良くわからない。&lt;br/&gt;
気を取り直して、smartctlでテストを実行する。&lt;br/&gt;
&lt;pre class="commandline"&gt;
# smartctl  -t long /dev/ad6
smartctl 5.39 2009-12-09 r2995 [FreeBSD 8.2-STABLE i386] (local build)
Copyright (C) 2002-9 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 107 minutes for test to complete.
Test will complete after Fri Aug  5 23:04:04 2011

Use smartctl -X to abort test.
&lt;/pre&gt;
後は、テストが終わったらログを確認してみよう。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/AdNStrVpQO0/004561.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004561.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">FreeBSD</category>
            
            
            <pubDate>Fri, 05 Aug 2011 20:44:51 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004561.html</feedburner:origLink></item>
        
        <item>
            <title>SMART error (CurrentPendingSector) detected</title>
            <description>サーバマシンのrootから以下のメールが来た。
&lt;pre class="textfile"&gt;
Subject: SMART error (CurrentPendingSector) detected on host: sv.wizard-limit.net

This email was generated by the smartd daemon running on:

   host name: sv.wizard-limit.net
  DNS domain: wizard-limit.net
  NIS domain: 

The following warning/error was logged by the smartd daemon:

Device: /dev/ad4, 1 Currently unreadable (pending) sectors


For details see host's SYSLOG (default: /var/log/messages).

You can also use the smartctl utility for further investigation.
No additional email messages about this problem will be sent.
&lt;/pre&gt;
何事かと思って /var/log/messagesを見ると、
&lt;pre class="textfile"&gt;
Aug  1 08:21:28 sv smartd[1729]: Device: /dev/ad4, 1 Currently unreadable (pending) sectors
Aug  1 08:51:28 sv smartd[1729]: Device: /dev/ad4, 1 Currently unreadable (pending) sectors
Aug  1 09:21:28 sv smartd[1729]: Device: /dev/ad4, 1 Currently unreadable (pending) sectors
Aug  1 09:51:28 sv smartd[1729]: Device: /dev/ad4, 1 Currently unreadable (pending) sectors
Aug  1 10:21:28 sv smartd[1729]: Device: /dev/ad4, 1 Currently unreadable (pending) sectors
Aug  1 10:51:28 sv smartd[1729]: Device: /dev/ad4, 1 Currently unreadable (pending) sectors
Aug  1 11:21:28 sv smartd[1729]: Device: /dev/ad4, 1 Currently unreadable (pending) sectors
Aug  1 11:51:28 sv smartd[1729]: Device: /dev/ad4, 1 Currently unreadable (pending) sectors
&lt;/pre&gt;
と30分毎にエラーが出ている。エラーメッセージでぐぐると、&lt;a href="http://orz.miroq.info/archives/24"&gt;smartd での sector error 復活作業 | ni kvel&lt;/a&gt;とか&lt;a href="http://homemate21.net/modules/d3forum/index.php?topic_id=13"&gt;ホームメイト２１ - Ｆｅｄｏｒａの不良セクターの修復&lt;/a&gt;と言うページを発見。&lt;br/&gt;
&lt;pre class="commandline"&gt;
# smartctl -t short /dev/ad4
smartctl 5.39 2009-12-09 r2995 [FreeBSD 8.2-STABLE i386] (local build)
Copyright (C) 2002-9 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Wed Aug  3 04:28:25 2011

Use smartctl -X to abort test.

・・・2分待つ

# smartctl -l selftest /dev/ad4
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       20%     20573         424257195
&lt;/pre&gt;
ここまでは見つけたサイトと一緒。うちの場合は、424257195にエラーセクタがあると言うことなんだろう。&lt;br/&gt;
しかし、その後の
&lt;blockquote&gt;
&lt;pre&gt;
b = (int)((L-S)*512/B)
where:
b = File System block number
B = File system block size in bytes
L = LBA of bad sector
S = Starting sector of partition as shown by fdisk -lu
&lt;/pre&gt;
&lt;/blockquote&gt;
の計算式の意味がわからないのと、なんでddで/dev/zeroを書くと修復になるのかがわからなかった。恐らく、read errorが出るところに書きこむことで、不良セクタとしてマークして代替セクタを割り当ててくれる的な話か?&lt;br/&gt;
とりあえず、FreeBSDの場合は fdisk -luとかでは情報が出ないので、disklabelで見てみる。
&lt;pre class="commandline"&gt;
# disklabel  -A /dev/ad4s1
# /dev/ad4s1:
type: ESDI
disk: ad4s1
label: 
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 60801
sectors/unit: 976773168
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # milliseconds
track-to-track seek: 0  # milliseconds
drivedata: 0 

8 partitions:
#          size     offset    fstype   [fsize bsize bps/cpg]
  a:    1048576          0    4.2BSD     2048 16384     8
  b:    4194304    1048576      swap                    
  c:  976768002          0    unused        0     0     # "raw" part, don't edit
  d:  268435456    5242880    4.2BSD     2048 16384 28552
  e:  703089666  273678336    4.2BSD     2048 16384 28552
disklabel: partition c doesn't cover the whole unit!
disklabel: An incorrect partition c may cause problems for standard system utilities
&lt;/pre&gt;
たぶん、上の式に出てくる512と言うのはdisklabel -Aで出てきた bytes/sector なんだろう。そして、B が bsize で16384、Sは/dev/ad4s1cを指定するならば0で良いと思われる。すると、b = (424257195 - 0) * 512 / 16384 = 13258037?&lt;br/&gt;
しかし、稼働中のシステムの一部にddで0を書きこむなんて怖くてできないので、代わりのHDDを買ってきてシステムを移行してから試すことにしよう。&lt;br/&gt;
ちなみに、前回HDDを交換したのは&lt;a href="http://www.wizard-limit.net/mt/pc/archives/003626.html"&gt;2009年の3月&lt;/a&gt;のようだ。2年半とするとちょっと寿命が短いなあ。&lt;br/&gt;
&lt;br/&gt;
こう言ったメンテナンスとか、毎月の電気代、UPSのバッテリー代などを考えると、自宅サーバを続けるよりもVPSに移行した方が良いんじゃないかと最近考える。&lt;br/&gt;
ちょっと調べてみたけど、メジャーなところではさくらのVPSかDTIのServersManと言うのがあるらしい。&lt;br/&gt;
さくらの方はFreeBSDが選べるけど、HDDが少なくてIPv4のみ。DTIの方は10G/100円でHDDが追加できて、IPv6もついてくる。ただし、ドメインをDTIでやっていないと逆引きの設定ができないのと、FreeBSDが選べない。&lt;br/&gt;
とりあえずDTIの方は最低契約期間の縛りがなくて、最大2ヶ月無料なので、一度どんなもんか見てみても良いかも知れない。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/pwyrdN2CVPg/004557.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004557.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">FreeBSD</category>
            
            
            <pubDate>Wed, 03 Aug 2011 04:06:32 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004557.html</feedburner:origLink></item>
        
        <item>
            <title>OS Xの辞書アプリをコマンドラインから</title>
            <description>OS X の辞書アプリが便利だと言うのをtwitterで見たので、Spotlightから起動してみたら大辞林とか英和・和英とか入ってて確かに便利そう。&lt;br/&gt;
しかし、辞書を使うならemacs上から使いたい、と言うことで調べたら、見つかったのが&lt;a href="http://sakito.jp/mac/dictionary.html"&gt;辞書(Dictionary).appを使い倒そう : 紹介マニア&lt;/a&gt;と言うページ。&lt;br/&gt;
最初誤読していて、一生懸命emacs-w3mをcvsから取ってきて入れたりしたんだけど、w3mからは dict:// が使えない上、browse-url を使う方法だとemacs上でなく辞書アプリで結果が出ることがわかってショックを受ける。&lt;br/&gt;
同じページに、pythonスクリプトを書いてコマンドラインから呼ぶ方法が載っていたので、こちらを試してみたが、どうもNew Oxfordしか引いてくれない模様。&lt;br/&gt;
さらに検索したところ、&lt;a href="http://d.hatena.ne.jp/WaterFlea/20100718/1279430262"&gt;terminal dictionary,, for macosx.. - うごくな！　のんすとっぷ！&lt;/a&gt;と言うページと、&lt;a href="http://numata.designed.jp/ja/2007/10/dictionary-services.html"&gt;Dictionary Services 登場 - Numata Designed Factory&lt;/a&gt;と言うページを発見。&lt;br/&gt;
&lt;a href="http://developer.apple.com/library/mac/#documentation/UserExperience/Reference/DictionaryServicesRef/Reference/reference.html#//apple_ref/c/func/DCSCopyTextDefinition"&gt;Dictionary Services Reference&lt;/a&gt;DCSCopyTextDefinitionのリファレンスには、This parameter is reserved for future use, so pass NULL. Dictionary Services searches in all active dictionaries. と書いてあるのだが、実際には使えるようだ。&lt;br/&gt;
そこで、2つのサイトのソースを組み合わせてNew Oxford以外も引けるようにしてみた。&lt;br/&gt;
ソースは、例によってgithubに上げてあるので、興味がある方は&lt;a href="https://github.com/false-git/dict"&gt;https://github.com/false-git/dict&lt;/a&gt;を見てみて欲しい。&lt;br/&gt;

実行例(大辞林を引いてみる)
&lt;pre class="commandline"&gt;
% dict -j 辞書
じ‐しょ
【辞書】
1
多数の語を集録し、一定の順序に配列して一つの集合体として、個々の語の意味•用法、 またはその示す内容について記したもの。語のほかに接辞や連語•諺なども収める。また 、語の表記単位である文字、特に漢字を登録したものも含めていう。辞書は辞典（ことばてん）•事典（ことてん）•字典（もじてん）に分類されるが、現実に刊行されている辞書の書名では、これらが明確に使い分けられているとはいえない。辞典。字書。字引（じびき）。
2
ワードプロセッサーで、入力した仮名を漢字に変換するために登録されている語•熟語•類語などのファイル。また、自動翻訳システムで、語の対応や文法などを登録しておくファイル。
3
先帝が新帝から贈られる太上（だいじょう）天皇の尊号を辞退する意を述べた書状。御奉書。御辞書。
4
辞表。じそ。
&lt;/pre&gt;

後は、最初のサイトを参考にemacsからこのコマンドを呼べるようにすればemacsから辞書がひけると言うわけ。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/yF1BelbUyRY/004552.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004552.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Mac</category>
            
            
            <pubDate>Sat, 23 Jul 2011 08:29:58 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004552.html</feedburner:origLink></item>
        
        <item>
            <title>Macからsaneのスキャナを使う</title>
            <description>&lt;a href="http://www.wizard-limit.net/mt/pc/archives/001318.html"&gt;スキャナ共有 - PC日記&lt;/a&gt;で書いた通り、うちのスキャナ環境は FreeBSDのサーバにCanonのN676Uと言うのをUSBで繋いで、sanedで共有して、Windowsにxsaneを入れてクライアントにしている。&lt;br/&gt;
で、クライアントPCをMacBook Proにしたので、Macからスキャナを使えるか調べてみた。&lt;br/&gt;
port search sane すると、sane-frontends, twain-sane, xsane あたりがひっかかる。&lt;br/&gt;
&lt;a href="http://www.ellert.se/twain-sane/"&gt;TWAIN SANE Interface for MacOS X&lt;/a&gt;を見ると、OS Xのイメージキャプチャ.appや、プレビュー.appで使えそうに見えたので、こいつをインストールしてみることに。&lt;br/&gt;
port install twain-sane でtwain-saneをインストール。途中でコンパイルエラーが出たら、メッセージに従ってport clean &lt;i&gt;XXX&lt;/i&gt;したり、+universalをつけてビルドしなおしたりしながらなんとかtwain-saneをインストール成功。(この、+universalがよくわかっていないんだよね)&lt;br/&gt;
twain-saneは依存関係でsane-backendsもインストールするので、/opt/local/etc/sane.d/net.conf にスキャナが繋がっている FreeBSD の IPアドレスを指定する。&lt;br/&gt;
で、イメージキャプチャを起動してみたところ、「カメラまたはスキャナが接続されていません。」&lt;br/&gt;
TWAIN SANEのFAQを見ると、まずはscanimageとかで動作を確認しろと書いてあったので、sane-frontendsもインストールして、scanimage -L とかしてみる。&lt;br/&gt;
しかし、何も出ないので、FreeBSD側を確認してみると、昔saneをインストールしたときと、/etc/servicesが変わっていて、saneではなくsane-portに変わっていた。&lt;br/&gt;
そこで、/etc/inetd.conf の sane になっているところをsane-portに変更して、/etc/rc.d/inetd reload してやったら、ちゃんと6566でLISTENするようになった。&lt;br/&gt;
これで、Mac側から scanimage -L でスキャナが認識され、scanimage --format tiff &gt; test.tiff で tiff ファイルができることが確認できた。&lt;br/&gt;
今度こそ!と思ってイメージキャプチャを起動しても先ほどと同じ。&lt;br/&gt;
TWAIN SANE のFAQを見ていると、OS X 10.6 からイメージキャプチャにTWAINの設定がなくなった的なことが書いてあったので、とりあえずTWAIN SANE は諦めた。&lt;br/&gt;
&lt;br/&gt;
次に、&lt;a href="http://homepage.mac.com/dtlinker/ScanAgain/"&gt;ScanAgain&lt;/a&gt;と言うsaneのfrontendを見つけたので、インストールしてみたがうまく動かず。portで入れたsane-backendsが見つけられないのかもしれない。&lt;br/&gt;
&lt;br/&gt;
いよいよ切羽詰まって、xsaneをインストールすることに。信じられないくらいいろいろ依存関係をコンパイルした上で、xsaneがビルドエラー。&lt;br/&gt;
どうも、xsaneをi386用にビルドしようとして、dylibがx86_64なのでエラーになっているっぽい。&lt;br/&gt;
他のエラーになったパッケージと同じように、+universalとかつけても駄目。&lt;br/&gt;
で、xsaneのPortfileを読んでみると、「gimp2 is not universal (#29165)」とか書いてあって、disable_gimpと言うvariantが設定されていないときは、universal_variantがnoになるように上書きされている。&lt;br/&gt;
そこで、xsaneをビルドするときに、+disable_gimpを追加してみたところ、無事にxsaneがインストールできた。&lt;br/&gt;
&lt;br/&gt;
なんかすんごいビルドに時間かかったし、関係なさそうな依存関係を何度もビルドしてたし、やっぱりMacPortsはいまいちなのかなあ。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/GOzgJ3FmAW0/004547.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004547.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Mac</category>
            
            
            <pubDate>Sat, 09 Jul 2011 17:28:48 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004547.html</feedburner:origLink></item>
        
        <item>
            <title>emacs23で端末エミュレータ上でカーソルキーを使うとずれる問題</title>
            <description>emacs23に上げてから、puttyなどの端末エミュレータ上でカーソルキーを使うと、実際のカーソル位置とカーソルが表示される位置がずれてしまう問題があった。&lt;br/&gt;
何がいけないのかずっとわからなかったんだけど、今回 &lt;a href="http://slashdot.jp/~doda/journal/516198"&gt;Emacs 23.2.1 でのカーソルキー動作不良 - doda の日記&lt;/a&gt; と言うページを発見した。&lt;br/&gt;
そこで、FreeBSDのportsで入るemacsに適用しようと思ったんだけど、現時点の最新であるemacs23.3にはそのまま適用できないようなので、emacs23.3用に修正してみた。(どうも、2箇所あるpatchのうち、後者だけ取り込まれているようだ)&lt;br/&gt;
&lt;script src="https://gist.github.com/1030680.js?file=patch-src_coding.c"&gt;&lt;/script&gt;&lt;br/&gt;
このファイルを、/usr/ports/editors/emacs/files に patch-src_coding.c と言う名前で置いて、emacsをインストールし直せば、puttyやteraterm上でカーソルキーを使っても位置がずれなくなった。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/rihqgiVtlwY/004529.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004529.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">emacs</category>
            
            
            <pubDate>Fri, 17 Jun 2011 10:15:50 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004529.html</feedburner:origLink></item>
        
        <item>
            <title>フレッツ 光ネクスト</title>
            <description>今まで、うちの回線はNTTの「Bフレッツ ハイパーファミリータイプ」と言う奴だったのだが、「フレッツ 光ネクスト ファミリーハイスピードタイプ」に変更した。&lt;br/&gt;
これは、フレッツ光 ネクストが &lt;a href="http://www.ntt-east.co.jp/release/1105/110526c.html"&gt;「フレッツ 光ネクスト」におけるインターネット（IPv6 PPPoE）接続の提供開始およびIPv6アドレスによるインターネットサービスへの対応について&lt;/a&gt; でIPv6のpppoeに対応したから。(もっとも、現時点では使用しているプロバイダはv6サービスを提供していないし、工事費をかけて急いでやるメリットはあまりないかも)&lt;br/&gt;
# 実は、5月中に申しこめば工事費5千円+通信費2ヶ月無料と勘違いして申し込んだんだが、それが適用されるのはニューファミリータイプだった。&lt;br/&gt;
5/28にwebから申し込んで、5/31に確認の電話があり、11日の15時に工事をすることに決まった。局側だけでなく宅内工事も必要だそうだ。てっきりONUは同じものが使えるのだと思っていた。&lt;br/&gt;
光を引き込んでいるところはPCのラックが置いてあり、大量のケーブルが這う人外魔境と化していたので、泣きながら掃除をしてPCをどかしたりしたが、それでもまだ工事がやりにくそうな状態だった。&lt;br/&gt;
しかしラックは簡単に動きそうになかったので、これでやってもらうしかない。&lt;br/&gt;
当日は、15時30分頃に「後20分で着きます」と言う電話があり、工事の人がやってきた。まずはONUとルータの電源を切り、次に電柱の上の工事があると言って外に出て行った。&lt;br/&gt;
しばらくして戻ってくると、ONUを新しいものに交換した。そしてPCでなにやらVBっぽい画面で工事の指示を出し、やがて光電話が開通したことを確認すると、終わりましたと言って紙を渡して、別の紙にサインさせて帰っていった。&lt;br/&gt;
工事費は税込で12,810円だった。(光電話もあるので、フレッツ光ネクストだけよりも少し高い)&lt;br/&gt;
初回の工事の時はIPネットワークの確認もしたんだけど、今回の工事では大丈夫なはずってことかな?&lt;br/&gt;
面白かったのは、持ってきていたノートPCがPanasonicのTough Bookだったんだけど、画面がタッチパネルらしく、タッチで操作していた。Windows XP で画面タッチってあるんだな。&lt;br/&gt;
&lt;br/&gt;
早速確認したら普通にプロバイダ経由でIPv4にはアクセスできているようだ。&lt;br/&gt;
フレッツにはフレッツ・スクウェアと言う「ブロードバンド体感コンテンツなど、フレッツを更に楽しくお使いいただくためのコンテンツが満載のサイト」があったはずで、Bフレッツの時はpppoeのマルチセッションでプロバイダとは別にフレッツスクウェアに接続していた。そして、DNSサーバの設定で "flets" と言うドメイン宛のDNS問い合わせはフレッツスクウェア側に飛ばすようにしていた。&lt;br/&gt;
これが、フレッツ光ネクストになると、pppoeじゃなくてルータのIPv6ブリッジを使って直接フレッツ・スクウェア ネクストと言うサイトに繋ぐらしい。&lt;br/&gt;
そして、フレッツ・スクウェア ネクストのページには『「フレッツ・スクウェア ネクスト」は2011年6月1日より「サービス情報サイト」に名称が変更になりました。』との記述があり、どうも移行の途中らしく、サイトのあちこちにおかしい記述があって、非常にわかりにくくなっている。&lt;br/&gt;
このページにはこんなことが書いてあって、こうおかしいって言うのを抜き出して行こうかと思ったんだけど、ページ間のリンクもわかりにくくて、一度見たページになかなか辿りつけなくて非常にストレスフルなので、一切の嘘は無視して、現時点での正しい(と思われる)情報だけを抜き出しておこう。
&lt;ul&gt;
&lt;li&gt;現在は、動画などのコンテンツを提供する「フレッツ・スクウェア」は存在せず「サービス情報サイト」と言うメンテナンス情報や申込受付をしているサイトが残っている。&lt;/li&gt;
&lt;li&gt;サービス情報サイトのURLは、&lt;a href="http://flets-east.jp"&gt;http://flets-east.jp&lt;/a&gt; であり、少なくともうちの環境からは&lt;a href="http://flets-square-guide.com/fsnavi/d_2.html"&gt;フレッツ・スクウェア設定ナビゲーション&lt;/a&gt;からは辿りつけない。(http://flets-v6.jp/ とかも違う)&lt;/li&gt;
&lt;li&gt;ルータがv6ブリッジに対応していない場合や、クライアントがIPv6に対応していない場合は、pppoeでv4のフレッツ情報サイトに繋ぐことができる。&lt;br/&gt;この場合は、&lt;a href="http://flets.com/next/square/connectv4/"&gt;サービス情報サイト接続方法｜フレッツ・スクウェア ネクスト｜フレッツ 光ネクスト｜フレッツ光公式｜NTT東日本｜インターネット接続ならフレッツ光&lt;/a&gt;にある「各種OSの接続方法」のリンク先にある手順に従って、ユーザ名 	guest@v4flets-east.jp、パスワード guest でpppoeすれば、IPv4のサービス情報サイトに繋がるので、&lt;a href="http://v4flets-east.jp/"&gt;http://v4flets-east.jp/&lt;/a&gt;にアクセスすればv4版の情報サイトに繋がる。(決して、参考ページに&lt;b&gt;画像で&lt;/b&gt;書いてある http://www.v4flets-east.jp ではないので注意が必要)&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
うちの場合、squidでhttpのproxyをしているのだが、使用しているバージョン2.7系ではIPv6に対応していないので、そのままではv6のフレッツ情報サイトが見られない。proxyを使わない設定に、flets-east.jpを追加してやる必要がある。&lt;br/&gt;
かつ、DNSも直接プロバイダのを見ているのではなくて、家庭内向けにコンテンツ＆キャッシュサーバが動いているので、flets-east.jp ドメインの問い合わせをforwardしてやる必要がある。&lt;br/&gt;
しかし、申し込みなどは普通にInternet側からアクセスできるフレッツ光メンバーズクラブで対応できそうなので、もうフレッツスクウェアを見ることはないだろう。&lt;br/&gt;
&lt;br/&gt;
しかし、将来的にプロバイダがIPv6対応になった場合には、セキュリティ的に不安が増大するなあ。&lt;br/&gt;
光ルータのパケットフィルタを見直すか、再度FreeBSDを間に挟んでipfとかでフィルタするか。FreeBSDを挟む場合はIPv4がNATでIPv6がルータみたいな形になると思うので、もっとv6のことを勉強しないと何がなんだかわからないな。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/9pDOH7U3hnE/004522.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004522.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Network</category>
            
            
            <pubDate>Sun, 12 Jun 2011 04:59:17 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004522.html</feedburner:origLink></item>
        
        <item>
            <title>gitを使ってMovableTypeのバージョンアップを追いかける</title>
            <description>このblogはMovableTypeと言うシステムを使って書いている。&lt;br/&gt;
MovableTypeがバージョンアップすると、フルセットのzipファイルで提供されるのだが、今まではバージョンアップするたびに以下の手順を踏んでいた。
&lt;ol&gt;
&lt;li&gt;既存のmtディレクトリをリネーム&lt;/li&gt;
&lt;li&gt;新しいzipを展開&lt;/li&gt;
&lt;li&gt;mt-config.cgiを古いディレクトリからコピー&lt;/li&gt;
&lt;li&gt;追加していたpluginを古いディレクトリからコピー&lt;/li&gt;
&lt;li&gt;追加していたtemplateを古いディレクトリからコピー&lt;/li&gt;
&lt;li&gt;追加していたalt-tmplを古いディレクトリからコピー&lt;/li&gt;
&lt;li&gt;自分用にカスタマイズするパッチをソースにあてる&lt;/li&gt;
&lt;/ol&gt;
この手順を全て手動でやっていたので、毎回何かしら忘れたりして後からコピーしたりしていた。&lt;br/&gt;
せっかく、gitみたいなバージョンコントロールのシステムがあるのだから、なるべく手でやる手順は減らしてみることにする。&lt;br/&gt;
# ここまでやるなら、MTOSにして直接リポジトリとやるようにしたらもっと楽になると思うけど、今のところ個人無償ライセンスで製品版を使う。&lt;br/&gt;
&lt;br/&gt;
今回は、MT-5_1-ja.zip(5.1)をベースにローカルな修正を加え、それをMT-5_11-ja.zip(5.11)に上げる手順をやってみる。&lt;br/&gt;
&lt;ol&gt;
&lt;li&gt;リポジトリを作る
&lt;pre class="commandline"&gt;
% mkdir mt
% cd mt
% git init
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;リポジトリにMT-5.1をコピーして追加する。
&lt;pre class="commandline"&gt;
% cd ..
% unzip MT-5_1-ja.zip
% cp -r MT-5.1-ja/* mt/
% cd mt
% git add *
% git commit -m "import 5.1"
% git tag MT-5.1 &lt;font color="red"&gt;←tagでわかりやすい名前を付けておく&lt;/font&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;ローカルの変更用のbranchを作成して、ローカルの変更を加える。
&lt;pre class="commandline"&gt;
% git checkout -b local
... ローカルの変更を加える
% git commit -a -m "local changes"
% git tag MT-5.1l
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
ここまでが、5.1の時点でやっておくべきこと。&lt;br/&gt;
ここからは、5.11のzipを持ってきてからやること。
&lt;ol&gt;
&lt;li&gt;masterブランチに5.11をコピーする。
&lt;pre class="commandline"&gt;
% git checkout master &lt;font color="red"&gt;←カレントディレクトリはmt&lt;/font&gt;
% rm -rf * &lt;font color="red"&gt;←バージョンアップで削除されたファイルがある場合に対応するため&lt;/font&gt;
% cd ..
% unzip MT-5_11-ja.zip
% cp -r MT-5.11-ja/* mt/
% cd mt
% git status &lt;font color="red"&gt;←これをやると、何が追加/削除/変更されたかわかる&lt;/font&gt;
% git commit -a -m "import 5.11"
% git tag MT-5.11
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
ここまでで、masterブランチに5.11を持ってこれた。後は、5.11にローカルの変更を加えたバージョンを作れば良いんだけど、やり方として git merge を使うやり方と、git rebase を使うやり方があるらしい。&lt;br/&gt;
今回は、おそらくこう言う場合のためにあるであろうrebaseを使ってみる。
&lt;ol&gt;
&lt;li&gt;rebase
&lt;pre class="commandline"&gt;
% git checkout local
% git rebase master
.... conflictせずに成功したら
% git tag MT-5.11l
&lt;/pre&gt;
&lt;/ol&gt;
え～っと、終わりです。&lt;br/&gt;
masterの修正内容と、localブランチの修正内容がぶつかる場合は Conflict が検出されて、自分で直して git rebase --continue とかやらないといけないらしいですが、今回は何のエラーも出ずに終わってしまいました。&lt;br/&gt;
git log --all --graph とか見ると、元のbranchとは別に新しくMT-5.11をベースにbranchが作られていることがわかる。&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;追記&lt;/b&gt;&lt;br/&gt;
なんとなく、rebaseよりもmergeの方が良いような気もしたので、mergeの手順も書いておく。最後のrebaseの所を以下のように変えるとmergeになる。
&lt;ol&gt;
&lt;li&gt;merge
&lt;pre class="commandline"&gt;
% git checkout local
% git merge MT-5.11 &lt;font color="red"&gt;←masterでも良いけどtagを指定した方がmergeのlogがわかりやすいと思う&lt;/font&gt;
.... conflictせずに成功したら
% git tag MT-5.11l
&lt;/pre&gt;
&lt;/ol&gt;</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/a9v056aDPtA/004520.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004520.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
            
            
            <pubDate>Fri, 10 Jun 2011 09:19:50 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004520.html</feedburner:origLink></item>
        
        <item>
            <title>Objective-C メモ</title>
            <description>(macの)Ojbective-Cの勉強メモ。&lt;br/&gt;
自分用なので他の人が見ても役に立たないかも。
&lt;ul&gt;
&lt;li&gt;クラス宣言
&lt;pre class="textfile"&gt;
@interface クラス名 : スーパークラス名 &amp;lt;プロトコル名&amp;gt; {
    型 変数名; // インスタンス変数
    IBOutlet 型 変数名; // アウトレット
}

+ (返値の型)メソッド名; // +で始まるとクラスメソッド
- (返値の型)メソッド名; // - で始まるとインスタンスメソッド
- (返値の型)メソッド名:(引数の型)仮引数名; // 1引数のメソッド
- (返値の型)メソッド名:(引数1の型)仮引数名1 ラベル2:(引数2の型)仮引数名2; // 2引数以上のメソッド
- (IBAction) メソッド名:(id) 仮引数名; // アクション
@end
&lt;/pre&gt;
&amp;lt;プロトコル名&amp;gt;は省略可能。多重継承はできない。プロトコルは複数実装できる。(,区切りで並べる)&lt;br/&gt;
疑問: 省略可能引数は？&lt;br/&gt;
→できなさそう。ただし、...とva_*マクロは使える。
&lt;/li&gt;
&lt;li&gt;クラスの実装
&lt;pre class="textfile"&gt;
@implementation クラス名
- (返値の型)メソッド名:(引数の型)仮引数名 {
    // メソッドの実装
}
@end
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;宣言は*.hに、実装は*.mに書く。#includeの代わりに#importを使う。&lt;/li&gt;
&lt;li&gt;メソッドの呼びだし
&lt;pre class="textfile"&gt;
    [オブジェクト メソッド名]; // 引数なしのメソッドの呼びだし
    [オブジェクト メソッド名:実引数]; // 引数1個のメソッドの呼びだし
    [オブジェクト メソッド名:実引数1 ラベル2:実引数2]; // 引数2個以上のメソッドの呼びだし
&lt;/pre&gt;
オブジェクトの所にクラス名を書くとクラスメソッドの呼びだし。&lt;br/&gt;
疑問: ラベルの順番は宣言の通りでないといけないの？&lt;/li&gt;
&lt;li&gt;idはNSObject *のエイリアスだと思っておいて良い&lt;br/&gt;
→まずいらしい。&lt;/li&gt;
&lt;li&gt;インスタンスの生成
&lt;pre class="textfile"&gt;
    id object = [[クラス名 alloc] init];
    // allocはNSObjectのクラスメソッド、initはNSObjectのインスタンス
    // メソッド両方とも返値の型はid。この段階で参照カウンタは1。
    object = [object autorelease]; // 自動解放のマーク。
&lt;/pre&gt;
initには引数付きのいろいろなバリエーションが存在し得る。また、allocとinitとautoreleaseをセットでやってくれるようなクラスメソッドも提供されている場合がある。
&lt;/li&gt;
&lt;li&gt;インスタンスの解放&lt;br/&gt;
インスタンスは、releaseの呼びだしによって参照カウンタが0になると解放される。このとき、deallocと言うメソッドをオーバーライドしてあれば、それが呼ばれる。オーバーライドしたら[super dealloc]を呼ぶ。&lt;/li&gt;
&lt;li&gt;releaseの反対はretainで、参照カウンタを1増やす。NSArrayなどのコンテナに入れた場合はそこでretainされるので、あまり自分でretainを呼ぶ機会はないか?&lt;br/&gt;
→インスタンス変数がオブジェクトなんかの場合に、setterでコピーしない場合はretainする。&lt;/li&gt;
&lt;li&gt;autoreleaseの呼び出しは、インスタンスのNSAutoreleasePoolへの登録。NSAutoreleasePoolは、Cocoaのイベントループ毎に再生成されるので、autoreleaseしたオブジェクトの寿命はイベントハンドラの実行が終わるまで。&lt;/li&gt;
&lt;li&gt;文字列&lt;br/&gt;
NSStringは変更不可能な文字列、NSMutableStringは変更可能な文字列。内部エンコーディングはUTF-8?&lt;/li&gt;
&lt;li&gt;文字列リテラル(NSString)
&lt;pre class="textfile"&gt;
    NSString *string = @"hogehoge";
&lt;/pre&gt;
※ 参考にした本では、@""の中には日本語が書けないと書いてあったが、Xcode4でUTF-8のソースであれば日本語を書いても普通に通った。
&lt;li&gt;カテゴリの宣言
&lt;pre class="textfile"&gt;
@interface 既存クラス名 (カテゴリ名)
    &lt;i&gt;//メソッドの宣言&lt;/i&gt;
@end
&lt;/pre&gt;
カテゴリは、既存のクラスにメソッドを追加する。&lt;/li&gt;
&lt;li&gt;カテゴリの実装
&lt;pre class="textfile"&gt;
@implementation 既存クラス名 (カテゴリ名)
    &lt;i&gt;//メソッドの実装&lt;/i&gt;
@end
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;プロトコル
&lt;pre class="textfile"&gt;
@protocol プロトコル名 &lt;スーパープロトコル&gt;
    &lt;i&gt;//必須メソッドの宣言&lt;/i&gt;
@optional
    &lt;i&gt;//オプションメソッドの宣言&lt;/i&gt;
@required
    &lt;i&gt;//必須メソッドの宣言&lt;/i&gt;
@end
&lt;/pre&gt;
Javaのinterfaceのようなもの。多重継承可。継承が必要ない場合でもクラスは必ずNSObject(Ojbect)のサブクラスにするが、プロトコルは継承元がなくても良い。&lt;br/&gt;
&lt;/li&gt;
&lt;li&gt;プロトコルの利用&lt;br/&gt;
プロトコルは、クラスの宣言時にそのクラスがそのプロトコルを実装していることを表す他に、変数の型やメソッドの引数/返値の型に使える。
&lt;pre class="textfile"&gt;
    id &lt;Hoge&gt; hoge; // プロトコルHogeを実装したクラスのインスタンスを入れられる変数 hoge
    - (void)setHoge:(id &lt;Hoge&gt;)hoge; // Hogeを実装したクラスのインスタンスのsetter
&lt;/pre&gt;
これらはコンパイル時に静的な型チェックが行われる。
&lt;pre class="textfile"&gt;
    hoge = @"hoge"; // NSStringはHogeを実装していないのでエラー
    [obj setHoge: @"hoge"]; // 同上
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;言語としての@protocolではなく、NSObjectのカテゴリとして宣言したものを、非形式プロトコルと呼ぶ。&lt;br/&gt;
非形式プロトコルはコンパイル時の型チェックが行われない。&lt;br/&gt;
Cocoaのdelegateなどで利用されている。これは、Objective-C 2.0より前のバージョンでは、@protocolに@optionalがなかったため、全てのプロトコルのメソッドを実装しなくても良いものとして使われていたらしい。&lt;/li&gt;
&lt;li&gt;宣言プロパティ
&lt;pre class="textfile"&gt;
@interface クラス名 {
    型 プロパティ名;
}
@property (属性) 型 プロパティ名;
@end

@implementation クラス名
@synthesize プロパティ名;
@end
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;@propertyはクラスがプロパティ名で示されるプロパティを持つことの宣言であり、メンバ変数として持っている必要はない。&lt;/li&gt;
&lt;li&gt;属性には、以下が設定できる
&lt;ul&gt;
&lt;li&gt;getter=ゲッタ名: getterメソッドの名前を変えるとき&lt;/li&gt;
&lt;li&gt;setter=セッタ名: setterメソッドの名前を変えるとき&lt;/li&gt;
&lt;li&gt;readonly: getterのみ&lt;/li&gt;
&lt;li&gt;readwrite: getterとsetter(デフォルト)&lt;/li&gt;
&lt;li&gt;assign: 単なる代入をするsetter(デフォルト)&lt;/li&gt;
&lt;li&gt;retain: retainするsetter&lt;/li&gt;
&lt;li&gt;copy: copyするsetter&lt;/li&gt;
&lt;li&gt;nonatomic: スレッドセーフにしないとき&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;実装部分に@synthesizeを書くと、自動でgetterとsetterが生成される。@synthesizeを書かずに自分で実装しても良い。自動生成する場合は、プロパティと対応するメンバ変数が必要。&lt;/li&gt;
&lt;li&gt;メンバ変数名とプロパティ名を変えたい場合は、
&lt;pre class="textfile"&gt;
@synthesize プロパティ名 = メンバ名;
&lt;/pre&gt;
のように書く&lt;/li&gt;
&lt;li&gt;宣言プロパティは、以下のように二つの方法でアクセス可能
&lt;pre class="textfile"&gt;
    [obj setXxx:value]; // setterメソッドの呼びだし
    obj.xxx = value; // .演算子によるアクセス
    value = [obj xxx]; // getter メソッドの呼びだし
    value = obj.xxx; // .演算子によるアクセス
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;オブジェクト型のプロパティの場合で、assign又はcopyを指定したときは、releaseの責任を持つことになるので、deallocをオーバーライドしてreleaseしてやらないとリークする&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/foH8T7gzi0M/004510.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004510.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
            
            
            <pubDate>Wed, 01 Jun 2011 15:12:39 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004510.html</feedburner:origLink></item>
        
        <item>
            <title>macのEmacs.appにanything.elとauto-complete.elを入れる</title>
            <description>自宅macに入れたはずなんだけど、そのときの手順をメモしていなかったので会社macに入れながらメモ。&lt;br/&gt;
emacs lispを入れるときには、*.elファイルを*.elcファイルにbyte compileするのだけれど、/usr/bin/emacs (emacs22)と Emacs.app (emacs23) で同じ elc になるか自信がなかったので、Emacs.app でbyte compileする手順。(emacs22でbyte compileしたファイルはemacs23でも読めると思うけど)&lt;br/&gt;
参考サイトは&lt;a href="http://d.hatena.ne.jp/rubikitch/20091221/autoinstall"&gt;auto-install.elでEmacsLispパッケージを自動インストール→anything.el関連を一括インストール - (rubikitch loves (Emacs Ruby CUI Books))&lt;/a&gt;
&lt;ol&gt;
&lt;li&gt;rootになる(環境変数絡みがあるので、コマンド毎にsudoするのではなく一度rootのシェルになる)
&lt;pre class="commandline"&gt;
$ sudo su -
#
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;環境変数PATHにwgetがある場所を追加する。
&lt;pre class="commandline"&gt;
# export PATH=/opt/local/bin:$PATH
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;環境変数http_proxyを設定する(必要な場合のみ)
&lt;pre class="commandline"&gt;
# export http_proxy=http://&lt;i&gt;proxyホスト名&lt;/i&gt;:&lt;i&gt;proxyポート&lt;/i&gt;/
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;emacs-lispを置くディレクトリを作成する。
&lt;pre class="commandline"&gt;
# mkdir -p /opt/local/share/emacs/site-lisp
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;auto-install.elを持ってくる
&lt;pre class="commandline"&gt;
# cd /opt/local/share/emacs/site-lisp
# wget http://www.emacswiki.org/emacs/download/auto-install.el
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;~root/.emacsに以下を追加する
&lt;pre class="textfile"&gt;
(require 'auto-install)
(setq auto-install-directory "/opt/local/share/emacs/site-lisp")
(auto-install-update-emacswiki-package-name t)
(auto-install-compatibility-setup)             ; 互換性確保
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;rootでEmacs.appを起動する
&lt;pre class="textfile"&gt;
# /Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;anything.elをインストールする。&lt;br/&gt;
emacs上で、M-x auto-install-batch[ENTER]anything[ENTER]&lt;br/&gt;
しばらく待つとダウンロードが終わるので、バッファ毎に C-c C-c を押す。
&lt;/li&gt;
&lt;li&gt;auto-complete.elをインストールする。&lt;br/&gt;
&lt;a href="http://cx4a.org/software/auto-complete/index.ja.html"&gt;Auto Complete Mode - GNU Emacsのための最も賢い自動補完機能&lt;/a&gt;からauto-complete-1.3.1.tar.bz2を持ってきて展開し、以下を実行
&lt;pre class="commandline"&gt;
$ /Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs -Q -L . -batch -f batch-byte-compile *.el
$ sudo cp *.el* /opt/local/share/emacs/site-lisp/
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
auto-complete.elは、auto-installでauto-complete development versionを指定してインストールしたり、install-elisp-from-emacswiki で auto-complete.elを指定してインストールしたりもしてみたのだけれど、ファイルはあるのに (require 'auto-complete-config)でエラーになるので、結局アーカイブを持ってきて入れた。</description>
            <link>http://feedproxy.google.com/~r/wizard-limit/mt/pc/~3/d063JI14iKM/004509.html</link>
            <guid isPermaLink="false">http://www.wizard-limit.net/mt/pc/archives/004509.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Mac</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Mac</category>
            
            <pubDate>Wed, 01 Jun 2011 11:06:25 +0900</pubDate>
        <feedburner:origLink>http://www.wizard-limit.net/mt/pc/archives/004509.html</feedburner:origLink></item>
        
    </channel>
</rss>

