2012年6月29日金曜日

MacOS Xでls -lのパーミッションの末尾の"+"文字とは

TimeMachineにバックアップされているファイルを、ディスクをマウントして単純にコピーするといろいろ問題があるようだ。

そのひとつが、自分のディレクトリであって、しかも書き込み権限があるにも関わらず書き込みができないということ。

こうしたディレクトリや、内部に保存されているファイルを"ls -l"すると、
-rwxr-xr-x+
などのように、8番目のところに"+"がついていることが多い。場合によっては"@"になっているかもしれない。

"@"については、いろいろブログに書かれていて、Apple Double時代のリソースフォークに相当する内容がついているということで、xattrコマンドで削除できると書かれている。

TimeMachineの場合は、"ls -l@"オプションで見ると、以下のものがつくようだ。
com.apple.backup.SnapshotNumber
com.apple.backup.SnapshotVersion
com.apple.backupd.SnapshotStartDate
com.apple.backupd.SnapshotState
com.apple.backupd.SnapshotType
これを手元に直接コピーした場合には、僕の場合、以下の2つがついていた。
com.apple.metadata:_kTimeMachineOldestSnapshot
com.apple.metadata:_kTimeMachineNewestSnapshot
それぞれ、
$ xattr -dr com.appple.metadata:_kTimeMachineOldestSnapshot
$ xattr -dr com.appple.metadata:_kTimeMachineNewestSnapshot
とすることで外すことができる。しかし、それらを外したとしてもこんどは"@"が"+"に化けることになると思う。

この"+"は、わかりにくいのだがlsのマニュアルをよく読むと、アクセス制御リスト(ACL)がついていることを示すのだそうだ。"ls -le"すると、 ACLの内容が表示される。例えば、
0: group:everyone deny add_file,delete,add_subdirectory,delete_child,writeattr,writeextattr,chown
といったように、細かな設定がつけられていることがわかる。どうも、WindowsのNTFS相当のACLという説明が一般的なようだ。

ではこれをどう操作するか、ということになるとよくわからない。しかたがないので、Appleのテクニカルサポートに電話して問い合わせることにした。

最初に応対された方ではだめで、シニアアシスタントという肩書きの方に交代されたところで、関係するフォルダのFinderの「情報を見る」から、「共有とアクセス権」のいちばん右下の錠前を開いて(パスワード入力)、自分が読み書き権限があることを確かめ(いったん変更して戻すといいかもしれない)たあと、歯車アイコンのメニューで「内包する項目に適用」としてやると、フォルダ以下一括でACLを更新してくれるようだ。

電話ではこれでこちらの希望する用件が解決してしまったのでそこまでとしたが、コマンドラインがわからないのが納得いかないので調べてみた。

man aclすると、どうやらこのACLはPOSIX共通のものらしいということがわかる。そこから、See Alsoをみると、(1)としては、lsとchmodが書かれている。そこで、man chmodすると、ACLの操作もできると書かれていた。

chmodのマニュアルでは、項目を立てて「ACL MANIPULATION OPTIONS」として詳しく書かれている。ACLに指定できる項目の一覧と、操作のために指定するオプションからなる。要は、さきほどFinderの「情報を見る」のアクセス権の部分に相当することのようだ。ひとつ特記しておくなら、全部削除は"-N"オプションといったところだろうか。

DropboxやSkyDriveなど、クラウドと同期するディレクトリにも「書き込みのみ」などがついていたりする。したがって、同期するディレクトリを変えるつもりで中途半端な設定をしないよう、拡張属性やACLなどにも配慮する必要があるだろうと思う。正直な話、僕がはまったのもそれだからだ。

なお、Finderで隠し属性になっているフォルダ(ディレクトリ)を表示させるための説明として、コマンドラインで
$ chflags nohidden ディレクトリ名
とする、という説明がよくあるが、このhiddenがいわゆる拡張属性(extended property)だ。"ls -lO"(大文字のオー)すると、グループとサイズの間に現れる。ついていない場合には"-"となる。例えば/etcの下でこれをやると、"compressed"がついているものが意外に多いことに気づくかもしれない。

拡張属性については、Finderの「情報を見る」では、「一般情報」の下のほうに「共有ファイル」とか「ロック」とか「ひな形」などのチェックボックスがあると思うが、そのへんで操作できると思っていいのではないかと思う。

2012年6月18日月曜日

QUCSのバイナリインストールでエラーなく動かす

前回のエントリは、MacPortsと混在した場合にQUCSでデジタルシミュレーションを行う際のごたごたを書いた。

MacPortsを使っていない場合は、バイナリインストールをしたあと、2箇所の修正で済むことを確認したので報告する。

まず、QUCS本体のバイナリは、先のエントリにもリンクしたが、こちら。QUCSをLion環境でビルドするのはかなりしんどそうなので、これを利用するのが賢明だと思う。

デジタルシミュレーションするためのVHDLコンパイル環境、FreeHDLのバイナリはこちら。なお、このバイナリは10.5(Leopard)環境でコンパイルされているので、32bitバイナリだ。

Lionは完全64bitに移行しているので、g++も特に指定しなければx86_64アーキテクチャとしてコンパイルしてしまう。しかし、FreeHDLのバイナリがi386アーキテクチャでコンパイルされているのでリンクできない。

そこで、FreeHDLのコンパイルがi386であることを明示しておく。これは、
/usr/local/lib/pkgconfig/freehdl.pc
に書かれている。これを編集して、9行目の

cxxflags=-g -O2

となっているところを、

cxxflags=-g -O2 -arch i386

と追記する。これで、QUCSが自動生成するVHDLファイルから作られるC++ソースがi386でコンパイルされるので、FreeHDLのライブラリとリンクできるようになる。

ただし、リンクの際にGNU libtoolが「tagを指定しろ」といってエラーを出してくるはずなので、
/usr/local/bin/qucsdigi
の85行目

$LIBTOOL --quiet --mode=link $CXX $NAME._main_.o $NAME.o $LIBS $IEEELIBS -o $NAME

を、

$LIBTOOL --quiet --mode=link --tag=CXX $CXX -arch i386 $NAME._main_.o $NAME.o $LIBS $IEEELIBS -o $NAME

のように、--tag=CXXとしてg++だということとi386でリンクすることを明示してやればエラーは出なくなり、シミュレーションは完了するはずだ。

なお、GNU libtoolが使われているので、単にXcodeを入れているだけではQUCSは使えない。少なくともGNU libtoolとGuileが/usr/local/binにインストールされている必要がある。簡単なのは、Homebrew
$ brew install libtool guile
とやっておくことではないかと思う。なお、Homebrewでは/usr/local以下はroot権限ではなくなるので、QUCSとFreeHDLがroot権限でインストールするのとは違ってしまう。例えば、これらをインストールしたあと、
$ sudo chown -R 自分のユーザ名 /usr/local
などとしておくと、上のファイル書き換えもsudoする必要がなく、楽なのではないかと思う。

ついでに、デジタルシミュレーションはFreeHDLに完全に渡してしまい、QUCSは実行結果をビジュアライズするだけなので、QUCSがどのようにコンパイルされているかとは無関係だ。 最新版のFreeHDL 0.0.8のソースは、現在sourceforge上にある。これをダウンロードして、単純に./configure && make installすれば、x86_64でライブラリがコンパイルされるので、freehdl.pcの編集は不要となるし、qucsdigiでも-arch i386の記述は不要にある。コマンドラインに慣れている人は、こちらのほうが簡単でいいかもしれない。

さらに、QUCSはデジタルシミュレーションの際にVHDLとVerilogを選択できるようになっているが、Verilogコンパイラとして期待されているのはIcarus Verilogだ。しかし、これはMacPortsでもHomebrewでもコンパイルが通らない。ところが、上記ページで示されているGitリポジトリからheadをとってきたところ、難なくコンパイルが通り、QUCSでも動いた。関心のある向きは試してみてもよいと思う。なお、bisonを使うので、予めbisonのインストールをしておくことと、autogenしなければならないので、autoconf, autogen, automakeも入れておくことをお忘れなく。

2012年6月12日火曜日

QUCS難しい

回路シミュレータというものに慣れていないということを措くとして、いまひとつ直感的に示すことができなかったという反省がある。

いきなり授業でQUCSを使わせてみたのだが、実際に回路を組んで測定するのと較べてどのぐらいわかりやすかったか、というところに課題が残った。

ただ、優秀な学生がいろいろと発見してくれて手助けしてくれたので、学ぶことは多かった(それでいいのかという問題はあるけれども)。

難しい印象を受けるのは、結果が表や図の形でしか示すことができないこと。iOS版のiCircuitというアプリは電流をダッシュラインの移動で表したり、LEDが光るような表示の変化があったり、スイッチをタップで操作できたりと動きがあるのだが、QUCSはあくまで静的なので、実物を見る(といっても配線に手こずることは目に見えているのでどちらが楽かという判断はできないのだが)のとは違うという点で期待を裏切ってしまう。思考して図や表から動きを想像できる受講者(現職教員の受講者など)はそれなりに感動していたので、訓練の問題といえるかもしれない。

今回はWindowsで動かしてみたのだが、MinGWを要求する時点でやや強引な移植という印象を受けた。一方で、MacではQt3に依存しているためコンパイルが通らないなど、それはそれで問題がある。MacPortsにqucsは入っているけれどもi386バイナリを前提とするようで、現状、依存関係にあるひとつが+universalでなく、コンパイルエラーになる。

だが、プロジェクトサイトのnewsを見ていたら、最新ではないがMac版のバイナリ配布があったのでここに引用しておく。

デジタル回路解析に必要なFreeHDLはこちら。0.0.7で、事実上の最新(ソースコードのページには0.0.8のリンクがあるが、その先は404になるので引っ込められているような気がする)。QUCS本体は0.0.15でひとつ前のバージョンだがこちら。Qtもbundleに含まれているようだ。ソースレベルではqt4対応ブランチがあるがコンパイルが通らなかった。日本語フォントは、Windowsの場合、名前の末尾に「UI」がつくものにしないとメトリックがオーバーフローしてひどいめにあうのだが、Mac版は大丈夫なようだ。とりあえずIPAフォントでだいたい問題なく表示されている(ベースラインがやや高いような気がするが)。

ただし、GNUのlibtoolに依存したビルド環境なので、FreeHDLの設定がMacPortsとコンフリクトする。QUCSの一部もコンフリクトする。いずれもシェルスクリプトなので、絶対パスを指定するとか環境変数を内部で設定するとか、個別にlibtoolを呼び出すとか、デジタルシミュレーションを実行する際のVHDLコンパイルが成功するまでには各所の手直しが必要(エラーダイアログに行番号が出るので、そこを手当てする)。また、Guileを呼び出すSchemeで書かれたコードも存在するのでGuileのインストールも必要。Guileを呼び出す部分も絶対パスに直してやる。と、いろいろやるのだが結局、pkg-configがMacPortsと衝突するので、FreeHDL 0.0.7のtarballをとってきて、普通に./configure --prefix=/opt/local して自分でmake installしたものに手を入れるのが手っ取り早いと思う。

このあたり、いろんな意味でLinux前提の結構やっつけコードという印象がないでもない。

(追記2012/06/18:MacPortsを入れていない場合はバイナリインストールから簡単に行ける。次のエントリ参照)

一応FreeHDLまで連携できてデジタル回路のシミュレーションができたので画像を載せる。単なるAND回路なのだけれど、出力先をどう処理するのがいいのかわからないので、適当に分周回路につないでおいた(受動素子を入れるとシミュレータが動かないので)。

i1が下の位、i2が上の位、o1が出力
一応AND演算になっている





2012年6月6日水曜日

Kinect Works!

My Kinect boutght at a Junk-Shop by under $5.00 works on the Kinect for Windows SDK!!

Junk Kinect that working, with price tag 500JPY :)


This Kinect is for Xbox360 and the connector was special, then I broke the connector and solder lines with another junk USB cable and a power connector for DC12V AC-adapter.

The scheme of the connection between the Kinect and other cables were very easy because the color of the Kinect's lines for USB connection was the same as the other USB cables, and the rest one line was for DC12V power supply.

Junction part on my cable

All the sensors work now on my Windows 8 Release Preview Mac.  Perfect! :)

All sensors are appear on Device Manager!
Depth Image!


----
500円で買ったKinectうごきました:)  Xbox360用なのでコネクタが特殊だったのだけれど、丁寧に壊して(コネクタ内部はグルーガンで使う樹脂で充填されていたのが意外)、配線をUSBとDC12Vにつなぐのだけれど、別にジャンクで買った50円のUSBケーブルを切って現れた線の色とKinectの線の色が同じだったので、

赤-赤(Vcc)
緑-緑(D+)
白-白(D-)
黒-黒(GND)

とつなぐだけでOKでした。残りはDC12Vのほうなのですが、残った茶色が+12V、そしてGNDを黒のところにつなげばOK。ついでにシールドどうしも接続して、小さなプラケースに収めました。

そして、Kinect for Windows SDKとToolkitをダウンロード、インストールした後、Toolkitに入っていたサンプルを動かしたら、きれいに映像もとれ、深度画像も得られ、ボーン(骨人間)画像もリアルタイムにキャプチャできました。音声はまだ試していないのですが、たぶん大丈夫でしょう。Windows版のSDKはバージョン1.5なので、近距離モードや上半身モード、顔認識にも対応していて、なかなか満足です。

さて、これをネタに活用を考えなくては...

2012年6月1日金曜日

Mac mini (Mid 2011)にHDDを追加する

以前の投稿で、先月届いたMac mini(おそらくMid 2011モデル)にはHDDマウンタがないと書きましたが、実はちゃんと入っていました。

ひっくり返して蓋を外すと内部にアクセスできる構造ですが、最初にHDDが入っていたのが底面に近いほう、つまり、蓋をあけた状態で上側ですが、ここは2mm程度の頭がついたボルトを筐体側、つまり外側の穴に引っ掛けた状態で固定することになっていました。で、その下、つまり天面側(2台目がはいるところ)には、覗きこむと直径1cmぐらいの穴が外側にも内側にも合計4つあります。これが、2台目のHDDを固定する穴だったのです。

で、BTOで2台入っているわけではない場合は、例のSATAコネクタをロジックボードの約1cm角の表面実装コネクタに接続する特殊ケーブル(フレキシブルケーブルとコネクタのセット)が必要なのですが、ひと通り探してみたところ、結局Vintage Computerさんの「Mac mini Mid 2011 HDD/SSD増設キット」しかありません。eBayも探してみましたが、おそらく同社がUS国内向けに出したものの転売と思われるものしかなく、そっちのほうが高いので、VC社さんに直接注文させていただきました。

VC社さんですが、この手のApple正規ディーラーでも入手が難しそうなもののほか、Old Macの交換部品など、かゆいところに手が届く品揃えを用意していて、また社長ブログも、堅苦しくはないのですがそれなりにビジネスを弁えた製品調達のエピソードや新商品の紹介などで、好印象を持ちました。ご存じない方のために、社長は日本人です。おそらく移住された方が起業されたのだと思われます。

この品物は、僕にとってはあまりにも高価な買い物ではありましたが、決済はPayPalでできますし、時差もありますからわりとすぐに発送していただいて、LAXから日本に日通の国際宅配便で、4-5 business daysぐらいで届きました。実に迅速です。おすすめしておきます。

さて、届いた品物は天面側HDD用特殊ケーブルと、ポリエチレンのキャップ(これが直径1cmぐらいで、ベゼルの穴にはまる)がついた、2mmぐらいのボルト4本のみです。要するに、これらを取り付けてはめこんでくださいね、ということなのですが、これはちょっとしたパズルでした。

まず、固定用のボルトをつけた状態で、ケースで一部が隠れている隙間にHDDを入れ、ベゼルに収めるというのは相当に難しいです。

しかたがないので、キャップだけベゼルにはめて、ボルトなしでHDDをさしこもうとするのですが、これもなかなか入らない。特殊ケーブルがあるので、それをちぎらないよう注意してなんとかもがくのですが、ふとした拍子に入ってしまいました。すると今度は逆に出せなくなってあせるわけですが。コツらしきところは、思い切ってコネクタ側を奥に押しこむような動作をさせつつ、HDDの反対側を右向きに回転させるようにねじ込むような動きで入るようです。

このあと、もとあったSSDを上に入れるわけですが、このときにはベゼルの穴の位置をよく確認して、きっちりと入れなければなりません。ただ、やってみて気づいたのですが、HDD側のケーブルの長さが足りないような雰囲気で、コネクタがロジックボードに合わなくなります。なので、さらに奥に押しこむことでケーブルの長さを稼ぐ必要があるようです。そうしないと、SSDを入れてからではフレキシブルケーブルを強引に引っ張ってHDDを移動させることになり、かなり怖いです。

最終的になんとか蓋ができそうな状態に持ち込むことができましたが、それでも下から上がってきているフレキシブルケーブルが少し歪んだ状態になってしまいました。もし、これから試す人は手順をよく考えながら位置決めをしたほうがいいと思います。さらに僕の場合、Wi-Fiのアンテナがついたアルミ蓋がSSDを固定するネジ位置に、フレキシブルケーブルがちょうど重なってしまい、一方のネジ止めができない結果になってしまいました。逆に、前回留められなかったネジは、SSDが正しい位置に固定できたためでしょう、ネジ穴は合っていました。

というわけで、240GB SSD + 500GB HDDという構成ができました。これでThunderboltから昔のビデオテープをキャプチャして保存することができる見通しが立ちました。

Windows 8 Release Previewへのアップグレードは何も引き継がない

きょうWindows 8 Release Previewが出て、早速アップグレードしたのですが、「何も引き継がない」しか選べなくて、どういうことかと思ったら、PCの名前やユーザ登録から全部やり直しという結果でした。

特にあせるのが、ホームディレクトリ下にあったファイル群やらインストールしたプログラムなどが全部消滅することではないかと思います。

でも安心してください。C:\Windows.oldの下に、以前の環境は全部残っています。

たぶん最初に登録するユーザは管理者権限があるでしょうから、エクスプローラーで移動するだけでファイルは取り戻せます。

一方、アプリケーションはすべて再インストールしたほうがいいと思います。ざっと見て、どうも見た目ではわかりにくいいろいろなところに変更が入っているようなので、そうでなくてもレジストリエントリなど引き継ぎが難しいものがありますから、諦めてやり直すのが無難という結論です。

ひとまず速報でした。