2014年11月10日月曜日

MacでownCloud

結論:

  • MacでownCloudは動く。ただしファイル名の扱いに注意(特にフォルダ作成はトラブルが生じうる)
  • MacPortsかHomebrewで入れたPHPとそれをCGIとして呼び出すWebサーバ(SSL証明書が必要)があれば、Webサーバの文書ディレクトリにソースを展開するだけ
  • SQLite3とPHPのsqlite拡張を入れればDBサーバ不要でさらに簡単


Bitcasaの実質値上げで、自分用に置いていたいろいろ自炊データなど1.4TBを引き上げているところなのですが、結局なぜクラウドを借りるかというと、HDDを増設することなく全部のデータを一貫して取り扱いたいわけで、そこに「定額・目安は1TBだけれど超えてもOK」というBitcasaは最適だったわけです。

ところが噂によれば、ペタバイト置くごく少数の客が使うだけで、1TB年額$100という見積りに沿った客がほとんどつかなかったから、1TB制限で年額2万円、それ以上は要お問い合わせという形でバランスとることになったというんですが、例えていうならば、ドリンクバーのみで何日も泊まりこむ客しかいない飲食店のような殺伐とした状態という話で、それではテコ入れやむなしと思った次第です。

ちょうど年度更新の時期で請求に身構えていたところなので、東芝の3TB 3.5" HDDが特価1万円弱の表示品(あとで税込み請求されてがっかり)を購入、ガワも買ってなんだか結構な出費になったものの、引き上げ準備ができて、通信制限と11月15日という期限におびえながら、できるところまでやってみようとしているところです。1.4TBを1ヶ月でダウンロードするのは結構勇気が必要です。アップロードは「次やったら契約解除するかんな」とISPから警告文書を郵送で頂戴したので、まあそのときは秒速4MBぐらいで一日かけて90GBぐらいクラウドにscpしたのでしょうがないんですが。

クラウドドライブのサービスでなにがいいかというと、僕としては、モバイルアプリでファイルの一覧が簡単にみえるところです。あれはもうあったかな、というのがすぐ確認できるところ。WebDAVでもいいけれど、閲覧性は専用アプリが上。GoodReaderとか正論をいう人は置いていきます。

というわけで、ownCloudです。以前、VPS上のFreeBSDで動かそうとして断念した記憶があるのですが、モバイルアプリ含めてトータルに使うとなると、軽く調べた範囲ではこれしかないのかな、という印象でした。

Community Edition」が無償で使えるサーバ側のソースなんですが、ダウンロード時に要件をみると、「Mac OS XはUNICODEの扱いに問題があるのでサポートしない」とあって、困ったな、と検索すると、なんだかバイナリを配布しているところがあって、でもそれ入れてみると勝手にApacheとMySQLを起動しようとしてすでにこのMacではNginxとMySQLが動いているのでエラーになったりして悲しい思いをしたりします。ownCloudのバージョンで、過去にMac OS Xサポートがあった頃があるのかと調べても、以前からサポートされていないし、将来的にやる気もないようです。

で、そのバイナリ配布元の文書を読むと、「うちはソースコードに一切手を入れていないから問題があったら開発元に言え」というわけです。ということは、Community EditionのソースはMacで使える。UNICODEの問題はあるけれど。

UNICODE云々というのは、WindowsからMacの共有フォルダにある日本語ファイル名をみるとすぐわかるわけですが(最近は事情が違うかもしれない)、Mac OS Xでは日本語の濁点、半濁点つきのひらがな、カタカナなどは、親文字に対してそれらとの合字で表現していて(つまり、親文字、合字指定、濁点等の3つで1文字を表す)、濁点や半濁点つきのグリフのコード(ひとつの文字)を指さないという、合理的なんだか不合理なんだかわからない方針で実装されているわけですが、これ奇妙なことに、ターミナルで日本語変換してファイル名入れると、日本語IMから入力する文字コードは正規化されたほう(合字でない、独立したグリフに対するコード)になるので、存在するファイル名とは表現が一致しなくて「File not found」、つまりMac OSのなかでも不整合があったりします。純正IM使ってないのでそっちはファイルシステムとあってるのかもしれないですが。それで、かつてのMacとWindowsのファイル共有の場合のように、合字指定を表すコードを単純に読み飛ばしてしまうと、親文字と濁点がわかれてしまい、半角カナを全角に引き伸ばした感じの間抜けな表示になるわけです。

ownCloudのGitHubリポジトリのissue trackでは、ドイツ語のウムラウトの処理不整合で作成したフォルダが二重に見えたり、クライアントによってはそもそもフォルダ作成さえできないんだそうで、これは合字の扱いと正規化がもたらす不幸と直感するわけです。欧州のそうした文字でも、たしかにUNICODEでは合字でもよいものの、ウムラウトやアクサンなどがついたグリフとコードポイントもあるわけで、事情は日本語と同じだし、欧州全体では結構深刻だな、と思うところです。

当方の目的としては、既存ファイルの一覧がアプリからサクサクと見えればいいので、「データ」が「テ〝ータ」になろうが、別によくって、それならGo!というわけです。(結論を先にいうと、iOSアプリではこうならなかったので、Apple製品で閉じている限りはよさそう)

FreeBSDで苦労した頃はまだ出たてで、いまと構成が違うのかもしれないのと、こちらのスキルもいまと違うのでよくわからないのですが、ひとことでいうと、ownCloudはPHPアプリでしたと。つまり、特にコンパイル等の必要はなく、PHPに必要な拡張があって、SSL証明書つきのWebサーバがあればとても簡単だ、ということでした。

Mac OS X標準のPHPは長いこと使っていないので事情はわかりませんが、MacPortsやHomebrewで入れて運用しているPHPとそれをCGIとして使うWebサーバがあって、SQLite3とPHP-sqlite拡張が入っていれば(他にもgdとかいくつか拡張は必要ですが)、MySQLも使わないでさっくり動きます。

今回動かすまでに苦労したのは、すでに運用しているPHPアプリと証明書を共有するためサブディレクトリにaliasしようとしたら、よくある「FastCGIでPHPファイルのフルパスが間違って渡される(その結果、No input file specifiedの文字だけがブラウザに出る)」というところで、解決を諦めて、PHPアプリの本当のサブディレクトリに置いてしまったところ、ぐらい。正規表現が微妙に働いて、ownCloudから親のアプリに飛ばされることがあるけれど、iOSアプリでファイルを閲覧するには問題がないのでよしとしています。

結局、配布されているソースコードを所定のディレクトリに展開して、あとはWebブラウザから、そのディレクトリを指すURIを開いてやれば、管理者アカウントを作成する画面が開いて、それで設定完了、すぐ使えます。SQLiteのデータベースも小さくて、いい感じです。アップロードはPHPのファイルサイズ制限に引っかかるので(むやみにでかい値を設定すればいいというものでもないし)基本的にはしない前提で、Bitcasaから引き上げた外付けHDD内のデータがあるサブディレクトリをownCloudのアカウント用データフォルダ内にシンボリックリンクしてやると、ほどなくアプリから見えるようになって、目的は達成できました。

書き込みもするなら、シンボリックリンク先もユーザ「_www」で読み書きできないとまずいはずですが、とりあえずファイルの存在をみるだけならなにもしないでもOK(ユーザ「_www」から見えればよい)。

話を簡単にするポイントは、データベースはSQLiteを使うこと。MySQLやPostgresqlも使えるけれど、SQLite拡張をPHPに入れれば、ownCloud初期設定時に無条件でSQLiteを使うのでDBサーバに関する余計な作業がさっくり省略できます。

書くほうはどうするんだという話ですが、アプリで書き込みができるか試していないけれど、英数字のファイル名やフォルダ名なら大丈夫だろうということと、外部HDDへファイルを置くのはモバイルからは考えずに画面共有で普通にMac内の操作するか直接scpするので気にしない方針です。

2014年10月19日日曜日

YosemiteでMacPortsをコンパイルするにはXcode 6.1を入れる

Yosemiteいいですね。そういえば、6月以後、全くよそごとに手がつかなかったので、WWDCの録画も、iPhone 6などの発表イベントも、先日にイベントも、なにも見ていなかったんですけど、昨夜ようやく通して観まして、それで知ったんですが「Yosemite」は「ヨゥーセミリィ」と発音するんですね。

いや、アメリカは去年3回行って、大陸横断する感じで都合結構な滞在期間だったんですが、ほとんど観光らしきことしてないんで、いわゆる観光地のことは全然知らないんです。逆に庶民とか貧困な人たちの生活感覚みたいなのはすごく身体に入ったというか、普通の観光客や企業の海外滞在なんかでお膳立てされた生活している人よりよっぽどアメリカ人化したかもしれない。その勢いで語ると、Apple本社所在地の「Cupertino」も人によって違うけど、だいたい「クパーティノ」か「キュパーティノ」でして、辞書に載ってる「クパチーノ」はメヒカーノ(メキシコ人、つまりスペイン語)に近いんだと思うわけです。

あ、すみません、枕が長すぎました。でもまだ枕が続くんですがすみません。

そのMac OS X 10.10 Yosemiteなんですけど、9月に突然MacBook Air (mid 2011)のSSDがおかしくなりまして、家人拝み倒してMBPの、SSDが128GBでRetinaであること以外は最低スペックのを急遽購入させていただいたので、偶然空いた(Target Disk Modeでは起動できたので、Thunderbolt経由でマウントして内容を移行したあと、MBA側のパーティション壊して再フォーマットし、Internet Recoveryかけてやったら、一応起動した)MacBook AirがあったのでPublic Betaに参加しつつ、全くフィードバックせず、無事先日の公開となりました。

さてようやく本題です。

実は最終のPublic Betaでは、Chromeの安定版が数分固まることがあるという不具合があったんですが、固まるだけでほっとくと元に戻るので、Googleに報告すべきなのかAppleに報告すべきなのか判然としないまま、まあいいや緊急事態ではないから、という感じでありましたが、さすがに公開版のYosemiteではそんなことはありませんでした。「iOS 8公式魔改造の結果大炎上」(とまでは言ってないけど、先日のプレゼンでTim CookだったかCraigだったか忘れてしまいましたが『feedback』を苦笑交じりに連発する形でいいいわけしてましたね)に乗じて「人柱乙」と半笑いの人たちもおりますが、全く問題ないと思っております。

ただ、App Storeに載って大人気とかでもない限り、普通のサードパーティはしょうがないわけで、MacPortsも数日遅れのYosemite対応でありまして、少なくともいまのところは問題が若干あります。

まず、OSのバージョンが上がると全部コンパイルし直す感じになる(いままでそうでなくて済んだんだけど、最新の2.3.2では強制でそうなる)わけですが、CMakeのコンパイルで止まります。検索するといっぱい出てくるんですが、エラーの内容は、

Mac OS 10.10のSDKがないぞ
なわけです。

えっ、と思って入っているXcodeのバージョンをみると6.0.1で、Mac App Storeの最新もこれなんですが、iOS 8とSwift対応はしているのですが、よくみるとターゲットSDKは10.9、つまりMavericksなのです。

それで検索してみると、どうもXcode 6 betaのどこかで10.10のSDK入りがあったようで、ここからダウンロードしろというわけですが、

Xcode 6.1 available shortly
でありまして、そこに、「latest OS X and iOS SDKs」と添え書きがあって不安になるわけです。

しかし、意を決して「Additional Tools」の「View downloads」を選択すると、トップに「Xcode 6.1」があり、説明にもbetaとかGMとかそういうのはなくって、どうも公式っぽいです。が、Mac App Storeにある最新は6.0.1。

それでも、こちらはupgrade途中で環境が壊れて困っているので、そのままdmgをダウンロードして置き換えて、

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcode-select --install
なんかしてあげて、Command Line Toolsも10.10用に設定してあげると、無事コンパイルが進んでいるようです。

というわけで、いま泣いている人は試してみてください。

ちなみに、Xcode 6.1はいま現在、日本語ロケールに対応した表示がありません。メニューその他、表示は全部英語です。だから日本向けには公開されていないのかな、と思います。

2014年7月26日土曜日

Raspberry PiのGPIOソケット直結のArduinoを自作してみた

Raspberry Piから、「Arduinoのプログラムと同じように書いて、Arduinoのシールドをそのまま使えるようにする拡張カード」は結構出ているようだ。重要なのは、Arduino用のシールドとして販売されている基板をRaspberry Piから利用するということで、Arduinoそのものが途中にいるわけではない。
商品として、せっかくのRaspberry Piの機能を犠牲にして間にArduinoをはさむような間抜けなものは出したくない、というのは当然だと思うし、使いたいのはシールドになっているセンサーその他のデバイスであってATmegaマイコンではない、のが普通だと思う。

というわけで、その「普通ではないほう」をやりました。といっても、Arduino IDEからプログラムするほうはまだできていないので、中間報告というか、ざっくり「ドリトルの教科書に書かれている、『Arduinoの利用』」がそのまま使えるようにしました、ということであります。

ドリトルはArduinoとはシリアル通信するので、Raspberry PiのGPIOにせっかく出ているいろいろな端子は全く使わず、電源とシリアルのみを使うという豪勢なんだか貧乏なんだかわからないソリューション。

回路は、Arduino Unoから電源関係とUSB関係を取り除いた、ATmega328P周辺と、レベルコンバータがわりの分圧抵抗だけという簡単構成。というか、手ハンダで受講生人数分を揃えるのに余計な作業は避けなければならないという事情。

基板は、いわゆるバニラシールド基板でよいわけだけれども、試しに秋月が扱っている長方形のユニバーサル基板(200円)を使ってみることにした。というのは、秋月オリジナルのバニラシールドは、USB B端子などにあたる部分はスルーホールにせず、SMD用パターンにして「うっかりミス」に配慮されているのだけれど、僕はArduinoそのものを作るので、基板全体を使いたいということ、特に、今年は多分間に合わないけれど、モータドライバICを載せるスペースを確保しておきたいという希望があったから。ただし、その長い部分はV字カットが基板に入っており簡単に折れるよう配慮されているので、それをまたぐようにGPIO用2x13メス端子を取り付けて折れないようにした。

ATmega328Pへのブートローダー及びドリトル用スケッチの書き込みは、手持ちのAVR ISP mkIIを使って、手持ちのUnoのATmegaを差し替えながら直接書き込んでおいた。なんだか普通じゃないと感じる人は正常で、あとで説明するけれども自作Arduino(USBなし)基板はシリアル関係で問題を起こすので、ISPから直接書き込むのがいちばん安定していたから。ブートローダーはUno用で全く問題がない。optiboot優秀です(Uno R3以後のもの)。FTDIかどうかに関係なく、きちんと書けます。

とりあえず第一号
第一号機はご覧のとおりであります。GPIOの端子を前後逆につけてしまったので、Arduino部分はRaspberry Piの基板の外に出てしまったけれど手遅れなのでこれはこのままとする感じ。

それで、何度やってもシリアル関係がどうにも正常に通信できず何日も悩んでいたのだけれど、値段をけちってセラロックにしていたのを、ふと思い立って横に作ってあったクリスタルのブレッドボード用基板をつないだらあっさり解決してしまいました。

秋月の値段ならセラロックをわざわざ選ぶ意味はないのだけれど、基板等の発注時にクリスタルを入れるのを忘れていたので、大須で調達しようとすると、国産品だと120円とかするのでひよったのが失敗の原因だったのか、なにか別の偶然だったのかはわからないわけですが、シリアルまわりで他と通信する可能性がある場合にはクリスタルを選ぶのをとりあえずおすすめしておきます。セラロックのときはFTDIとさえ通信できなかったんで、ハズレのセラロックだったのかもしれないけれど、ある種の教訓として心に刻むことにしました。

せっかくなので、ドリトルとお話ができている状態のビデオも掲載しておきます。


アナログポートにはなにもつながっていないので適当な値が出るのですが、この速度で実行できるのはOracle Java SE 8のおかげです。OpenJDKではこの3分の1以下の速度になってしまいます。

それで一応、Eagleで回路図と両面基板のレイアウトなんかもしたのでつけておきます。時間ないのにバカじゃないかと自己嫌悪するわけですが。

いま回路図みたらなんか一部壊れてますな。それはともかく、右の謎パーツは、SparkFunがEagle用ライブラリとして提供しているシールド基板でして、これを置くと、基板レイアウトのときに、シールド基板内部に部品が収まるように配置できてちょっとうれしかったりするわけです。左はGPIO端子です。GPIO 17をDTR(書き込み完了等のリセット)に使えという話なんで、そうしてます。

超適当に書いた回路図

それなりにがんばってみた基板レイアウト
GPIO用ソケットの1番ピンがへんなところに行ってますがこれは裏返したり回転したりしているうちにこうなっただけで、ワイヤの配置はたぶんあっているはずであります。

それと、受動部品とLEDがSMDになってるのはもちろんスルーホールがめんどくさいからでして、ユニバーサル基板でもこれからは手持ちのSMDパーツを使っていく予定です。ATmegaがそうなっていないのは、作った基板間違ってたとかの非常時でもCPUを救出できるようにしたかったからであります。自信あればTeensy互換(USB内蔵のATmega使用)とか余裕ぶっこきの設計にしてもいいんですけどね。

2014年7月18日金曜日

完全設定したRaspbianもしくはSDカードの内容のバックアップ方法

Raspberry Pi用に作成したSDカードだが、さまざまなカスタマイズを加えたものを増産したいという場合に、SDカード全体のイメージファイルを作成して別のカードに書く、ということを考えるかもしれない。しかし、市販されているSDカードの容量は意外と末尾が微妙に異なっており、あるカードから作ったイメージが別のカードに入らないことが往々にして生じる。
また、そもそも未使用部分が多いであろう場合に、カード全体をイメージにするのが適当なのだろうか、という素朴な疑問もある。

そこで、日本Ejectコマンド研究会会長にしてRaspberry Pi界の重鎮である、あっきいさんが書かれた、「NOOBS用カスタムOSイメージの作成」に触発を受け、実験してみたところうまくいったので報告しておく。

前提としてここでは、なにか別のSDカードに複製したい、オリジナルのSDカードがあり、さらに未使用もしくは再度利用する可能性のないSDカードがもう1枚があることを前提とした記述とする。

このためには、ext4ファイルシステムを理解するOSということで、Linuxマシンが必要となる。僕はUbuntu 14.4のマシンを用意した。

Ubuntuマシンに、オリジナルのSDカードを挿入すると、自動的に各パーティションすべてを一気にマウントしてくれる。それはつまり、bootパーティションであり、rootパーティションである。rootパーティションは、Raspbianのバージョンにも依存するかと思うけれど、6月20日版の場合、rootパーティションにはラベルがなく、 UUIDが直接マウントポイントになってしまう。

ここで、以下のようなコマンドを入力する。
# cd /home/xxxx/boot ←xxxxは自分のユーザ名
# tar cvpf ~/boot.tar .
# cd ../root  ←もしくは長いUUIDのフォルダ名
# tar cvpf ~/root.tar .
内容まるごとUbuntu側にバックアップすることになる。

次に、新しいSDカードにそれを入れたいのだが、Raspbianの設定に合ったパーティションの設定しなおしから始まる。

gpartedは、Linuxでは非常に便利な、ディスクパーティションエディタだと思う。Ubuntu側にapt-get install gpartedで入れておく。

最初はOSがSDカードをマウントした状態で、gpartedを起動する。すると、ドライブを/dev/sdbに切り替えられるので、ここでようやく[パーティション]→[アンマウント]でマウントを外してパーティション設定ができるようになる(外さなくてもできるときもあるようだけれどあまり深く調べていない)。

Raspbianのパーティション構成は、以下の通り。

  1. 先頭4MB―未使用
  2. 56MB―bootパーティション(fat16フォーマット)
  3. 残り(4GB SDカードなら、3260MB)―rootパーティション(ext4フォーマット)
  4. 未使用が若干残る
この構成でパーティションを切り直せば、新品のSDカードであってもあとは簡単だ。

バックアップした内容を、SDカードに書き込む。
# cd /media/ユーザ名/boot
# tar xvpf ~/boot.tar
# cd ../root ←もしくはUUID名。UUIDだと見づらいから、パーティションを切るときに「root」のラベルを付けておくとよいと思う。
# tar xvpf ~/root.tar
これであとは、syncでもなんでもしてSDカードをアンマウントして、Raspberry Piに挿し直せばすぐに起動することができる。おそらく、4GBより大きなSDカードに対しても有効だと思う。

2014年7月15日火曜日

Raspberry Piで、TightVNCserverの画面サイズを設定する

ノートPCをクライアントとして、Raspberry PiのTightVNCサーバに接続すると、Xvncのデフォルトジオメトリが結構大きいので、Windows 8ノートPCの安価なものだと液晶画面が1366x768というスナップ可能な最小限の画面解像度のことがあるので、縦が足りないということはよくある。TightVNCサーバを起動するスクリプト、つまり、/etc/init.d/vncserver に記述を加えることになろうかと思う。

vncserverコマンドを起動しているところ(start命令の処理内容)で、vncserverのオプションに、-geometry 800x600 などとしておき、
$ sudo /etc/init.d/vncserver restart
でよい。なお、800x600だと、シャットダウンボタンのアイコンが画面の下にぎりぎり見える程度のところに現れることがあるので、つまんで適当な位置に移動しておく。LXDEのlightdmの場合、移動前と移動後でアイコンが重なる位置にあると、ドラッグアンドドロップに勘違いされることがあるので、狙いからずれたと思ったら、いったん大きく外に出し、再度目的の場所に移動する必要があるようだ。
 
 

Raspberry PiのWiFi設定-DHCPから固定IPアドレスまで最速版

有線のLAN環境がないところでRaspberry PiのWiFiを設定する方法。いろいろ混乱があるようなので、2014年6月20日版Raspbianで最短(当社調べw)の設定手順を最短で書く。

Raspbianが起動している状態で、login: pi, Password: raspberryのデフォルトアカウントでログインしているところからはじめる。

$ sudo bash
# chmod 660 /etc/wpa_suoplicant/wpa_supplicant.comf
# wpa_passphrase SSID KEY >> $* ← SSIDもKEY(パスワード)も、特にダブルクォートなどで囲むことなく、そのまま書く。ハッシュしたほうに、それがKEYの文字として含まれしまい認証エラーになることがあるるようだ。
# vi $* ← 編集する。

内容は、以下のとおり。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="SSID" ←コマンドで指定したSSIDが入っている。
    key_mgmt=WPA-PSK
    proto=WPA2
    pairwise=TKIP CCMP
    group=TKIP CCMP ←ここまでの4行追記
    #psk="4332221111"←コマンドで入力したまま
    psk=9a7cdfea2bbbda47edacc95b2ae7a1c..... ←長いハッシュされた鍵が生成されている  
}
複数のWiFi接続先があれば、上のwpa_passphraseコマンドでのハッシュを含むnetworkエントリ生成から、4行追記を繰り返す。

続いて、/etc/network/interfacesファイルの編集。Raspbianの設定のままではWPA2のWiFiスポットに接続しないので、それをまず直す。
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp ←なぜか"manual"になっているが、素直にdhcpするように直す
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf ←wpa-roamはwpa-confにしておく
iface default inet dhcp
この状態で、
$ sudo ifdown wlan0
$ sudo ifup wlan0
するとDHCPでのアドレス取得がいつまでたっても終わらないので、迷わず上記はやらずにsudo reboot。

WPA2のSSIDと共有鍵さえ間違っていなければ接続できるはず。逆に、いくらやっても接続できないなら、記述を見なおすとか、wpa_passphraseを再度実行するのもよいかもしれない。また、WiFiドングルが2.4GHzまで対応なのか5GHz対応なのかで違ってくるので、2.4GHzまでの安いものを使うなら、WiFiスポットが2.4GHzでの接続に対応するよう設定しておく。記述は正しいと考えれれるのにつながらないならWiFiルータの再起動で解決することもある。

ここで、/etc/resolv.confの自動生成をするパッケージresolvconfを入れる。
$ sudo apt-get install resolvconf
$ sudo service resolvconf start
WiFiでDHCPにより接続できているはずなので、apt-getなども問題なくうまくいくはず。だめなら設定を見なおすとかエラーメッセージをよくみて考えるなどして解決する。ときには、WiFiルータ側を再起動する必要があるかもしれない。特に混雑しているAPは、新たに一台追加する余裕がないときがあるので、ルータ再起動でいちはやく接続を勝ち取るのは有効な戦略。

最後に、固定IPの設定に変更する。/etc/network/interfacesをそのように書きなおす。
auto lo
iface lo inet loopback
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet static ←固定IP設定を宣言して、以下パラメータを入れる。
address 192.168.1.xxx ←使う予定の固定IPアドレスを書く
netmask 255.255.255.0 ←接続するネットワークの設定に合わせる
gateway 192.168.1.1 ←default routeを決めるので、ネットワークの設定に合わせる
dns-nameservers 192.168.1.1 ←/etc/resolv.confの設定にかかわる。ここではWiFiルータを指しているがいつまでも安全とはいえないので、ひとまず信頼できるDNSを書いておくのは悪くない(が、8.8.8.8は愚の骨頂だと思う)。
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
「address」から「dns-nameservers」までの追記が正しければ、以下の手順でうまくいく。
$ sudo ifdown wlan0
$ sudo ifup wlan0
このときに、「can't read /etc/network/interfaces」などと出たら、そのファイルの記述が誤っていないか確認すべき。

あとは再起動しようがなにしようがWiFiで固定IPの設定が維持されるはず。 

2014年7月5日土曜日

Eagleでプリント基板のデザインをして発注するまで(追記あり:ドリルデータとドリルリストについて)

来週末は、勤務先のイベントで小学生対象の「ものづくり教室」の担当。去年実施したのが、Parallax社の8 core 32bitマイコンであるPropellerを使った、ドラムシンセサイザーだった。

内容は、Propellerのプロジェクトとして公開されている、Amiga Commodor 64の音源チップSIDエミュレータを使い、シンセドラムっぽい音をプログラムで自作したもの。欧米を中心に「SID Tune」という分野があって何千曲ものデータ蓄積があり、SIDはレジスタに書かれたパラメータに合わせて音響信号を出すだけのLSIなので、プログラムで高速制御して見事な効果を含む演奏する専用プログラムがあったほど。いまでも「SID Emulator」が各OS用にいろいろあって、バイナリに変換されたSIDレジスタ書き込みシーケンシャルデータを読み込んで再生することができる。それらには及ばないものの、僕もPropellerマイコン内蔵インタプリタを直接呼び出す言語「SPIN」で、様々に試行錯誤を突貫で行って、まぁなんとかできたという感じだった。

もともとの志は高かった。叩く部分、通称「パッド」にピエゾスピーカーを仕込んで、高速なA/Dコンバータならば、衝撃力に応じた電圧をばっちり計測できるところまで実験は済んでいたのだが、使ったチップがAnalog DevicesのADC124S021というもので、これはParallaxのActivity Boardという実験用基板で採用されているので、カリフォルニア本社まで出かけて諸々懸案を電子エンジニアと相談して解決したものだった。

ところが、このADC124S021はTSSOP10という、足の間隔が0.5mmの表面実装パーツで、DIP変換基板を使わないと自作基板の実験さえできないし、当時はDigikeyにしか在庫がなく、たしか1個400円ぐらいだったような気がする。10名参加で、このADCは4channelなので5つのパッドのためにひとりあたり2個、故障やはんだ失敗などを見込んで全部で30個を買った。DIP変換基板で0.5mmピッチの10pinで手頃なものはたまたま在庫がなく、Aitendoの18pin用をカットして使ったりした。それで、変換基板への手ハンダはうちの学生さんが職人技でやったんだけれど、そのあとピンヘッダを、教室実施の前夜にものすごくおおざっぱにつけたおかげでADCが浮いてしまい全部オシャカ(ICは生きているはずなんだが足を直す時間なし)という衝撃の事態があり、タクトスイッチに置き換えることになったりした。

アンプは、Activity BoardはRail-to-Railのオペアンプを使ってΣΔDACを組んで、たいへん良好な音を出していたんだけれど、カネが続かないので秋月のいちばん安価なオーディオ・アンプを選択したのが敗因で、すごくS/Nが悪く(あとから、秋葉原の店頭でアルバイトの男子学生さんっぽい従業員に尋ねたら、「僕も試してみたんですけどたしかにノイズ多いです」と答えてくれた)、回路が同じでも実装のしかたで音が全く違ってしまい、ブレッドボードで最適な増幅度とS/Nを見出しても、ユニバーサル基板に組むと、どれもまともな音が出なくて個別に調整というたいへんな思いをした。

そんな疲労困憊の記憶があるので、今年は両面基板を製作してリフローするんだと決めていたわけなんだけれど、PCBミルを自作してみたものの経験が足りなくて0.1mmの精度は出せず、そうしているうちにFusion PCB(安くて早いので有名な深圳のSeed Studio社のサービス)のリードタイムにも間に合わないことがわかり、最短翌日出荷に対応する、静岡県磐田市の「プリント基板センターPB」さんにお願いすることにした次第。前日到着は怖いので木曜到着を考えると水曜出荷で、金曜日に受け付けても月曜からの計算になるので3日コースということになった。この工場ですけれど、見積をオンラインでざっくりできるのでみていただきたいですが、特急であることを考えたらかなり安いほうだと思います。納品したガーバーデータも夜遅くまでひとつひとつチェックしてくださって、対応はとても良好な感じです。

まぁそういうわけで、3日寝ないで名古屋まで出かける非常勤講師の授業もこなしたりしつつ作ったのがこれ。ちなみにその前日までは、前エントリーのRaspbianのSDカード量産なんかをしていたので、週末から数えてやっぱり全く寝ていない。

Eagleの画面
SMD部品のサイズがいろいろなのは入手できたのがそれしかなかったから

今週末もArduino量産とかいろいろあるので徹夜が続く予定。

それはともかくEagleなんだけれど、回路はぶっちゃけActivity Boardの流用(オープンソースハードウェアです)に、去年の夏のノウハウが入ったものなので、回路図はライブラリを集めるのに苦労したけれどわりとさっくりできた(徹夜をはさんで2日でできた)。問題は図の右下をみていただくと気づかれるかどうか、スライドスイッチが裏面にあるわけです。

ケースも3Dプリントしたものを使うのだけれど、小学校3年生がネジ止めで工作できる範囲というと、ケースの上面にはスピーカーと電源スイッチ、電源ランプ相当のチップLEDの窓がある形にならざるを得ず、簡単で安価なのは基板をフタにネジ止めすることで、したがって電源スイッチとLEDが基板の裏面にあって、表面から電池ボックスのコネクタやスピーカーの端子にアクセスする形をとることになるというわけ。

ここでようやく本題。Eagleは部品を裏にまわすには、基板エディタでパーツを選んで「Mirror」ボタンを押せばいいのだけれど、それは表面実装部品の場合で、Padがあるスライドスイッチはそうはいかない感じでありました。シルクは反転して裏面に行っている感じなんだけれど。それでPadの上に同じ形のSMDパターンを置いたりなんだとやったら、当然ERCでも文句言われるし、オートルーティングでも無視されたりするわけです。

しかたがないので手で配線を引いてやるわけですが、そのあとのオートルーティングもベタパターンもどうも具合が悪い。

やむなくライブラリを手編集すべえと調べてみたら、ライブラリ(.lbrファイル)ってXMLのテキストファイルなのですね。で、DTDはdocの下にあるeagle.dtdなんだと。それで、DTDの<pad>タグの定義にLayerを追加したりとか変なことをしているうちに、「Info」ボタンから「Properties」を開いてやると、「mirror」というチェックボックスがあるじゃないですか。それチェックしたら、TOPレイヤーにPadが描かれて(緑色のPadの上に赤のクロスハッチが上書きされた状態になる)、これでオートルーティングかけると何事もなかったかのように未配線を残さず完了するわけで、ここまでたどりつくのに3時間かかってすごく残念な気分になりました。

これをチェックすればスルーホール部品でも裏面に移動できる

Eagleのネット上での説明というと、「EAGLEによるプリントパターン自動作成」が唯一まともな資料として他の説明もすべてそこにリンクされているわけですけれども、両面基板だとかSMDだとかのことは書いてないわけです。そもそも、最終工程がエッチングなのでして、基板発注をお安く個人がする時代のちょっと前の記事です。

そういうわけで、ガーバーデータを出力するのは、例えばCuBeatSystemsさん(個人)のページとかが簡潔にまとまっているのかな、というところ。ガーバーデータを確認するビューアは、3Dプリンタがらみでいろいろ入れているのでいつのまにかgerbvが入っていたのでMacでもことなきを得た感じ。

(追記:「ドリルデータとドリルリストがありません」とのご指摘をプリント基板センターPBご担当者様からいただき、急ぎ送信しました。諸々は「P板.com」さんの手順と同じなんだろうと思うので、Cam Processorのジョブでexcellong.camを実行する形で作成したんですが、ドリルデータってG-Codeなんですね。へえって思いました。2014-07-07)

あと、今回はプリント基板センターPBさんに、特別にメタルマスク(英語的にステンシルというと思っていたんだけれど、それでは通じないんですね)も製作してもらうことにしたので、メタルマスク出力用の設定追加は「Eagleでメタルマスク用ガーバーデータを出力する」のブログエントリをみて実施しました。

当初の構想では、カッティングマシンでコート紙でも切ればいいやと思っていたけれど、最小ピン間0.15mmなんでたぶん無理だろうと。試行錯誤している時間がないからプロに頼むと。

いずれにせよ、プリント基板製作にもメタルマスク作成にもCNCミル使っているはずなんで、自作するなら手堅くプロクソンのフライス盤をCNC化していく方向から経験を積んでいかねばならんだろうなと思っているところ。

そして、レジストとシルクなんだけれども、レジストは塗布後にマスクを印刷したフィルムを載せて紫外線に当ててから洗えばいいのかと。参考

シルクは、インクジェットプリンタでプリントゴッコ(昭和の記憶)的にやるのが簡単そうだなと。参考

あとはあまり考えたくないんだがリフロー前のマウンタも自作したりしたら実装の内職できるんじゃないかみたいななにか。

そういえば、クリームはんだ(はんだペースト)をまだ買ってないのだった。大昔にシリンジに入ったのを買ったのがどこかにあるはずだが、フラックス足せば古くても使えるとか読んだんだがそれで足りるのだろうか。アマゾンで65gの瓶が3000円で出ているが、価格を出している業者を見ると980円なんで、えらいぼったくりだなと思ったり。参考

それで、検索すると「クリームはんだ印刷機」というのがいつもトップにあるんだけれど、いまどきはマスクみたいな再利用がきかないものは作らないんですね。ついでに「クリームはんだロボット」という見出しが別に見えたので、もしかすると3Dプリンタのエクストルーダ改造で、シリンジ入りのソルダペーストをプリントできるんではないかと思った。

2014年6月29日日曜日

Raspberry Piでドリトルを実行する(解決・追記あり)

(追記:最新のRaspbian(2014/6/20付)ではOracle JDKの7と8が最初から入っているので、以下の記述の先頭にある、apt-getでOracle版を入れる作業は不要です。2014-07-02)
(追記:Oracle Java EE 8 JDKを使うということと、RXTXが使えるようなshell scriptに訂正した。headlessとheadfulについても補足した。2014-07-01)

以前にも書いたのだけれども、教育用プログラミング言語「ドリトル」は、OpenJDK7で動作するが、いまはOracle Java EE 8がheadlessじゃなくてAWTも含む形で配布されているので、そちらを使うことにする。なので、
$ sudo apt-get install oracle-java8-jdk
でいくことにする。以前、openjdk-7-jreを入れていた人は、
$ sudo apt-get delete openjdk-7-jre
$ sudo apt-get autoremove
してから、Oracleのやつを入れることになると思う。というのも、どうも、OpenJDKでRXTXが使えているという話がなくって、Oracleのを使えという意見が散見されるから。実際には追ってないのでよくわからないけど。

ただ、Oracleので実行すると、日本語フォントが明朝になるのがどうも残念。このあたり誰か教えてほしいかもしれない。

(追記:OpenJDK-7が持っている、fontconfig.propertiesを/usr/lib/jvm/*/jre/lib以下に置いてやれば解決した。したがって、いったんOpenJDK-7を入れてから同ファイルをどこかにコピーしておき、apt-get remove後に当該の場所へ残しておいたファイルを入れてやればいいことになると思われる。なお、この設定ファイルはvlgothic, IPA, sazanamiあたりを使うので、もしこれらのフォントが入っていなければ、apt-get install fonts-ipafontなどで入れてやらなと効果が出ない。)

それで、ドリトル本体なのだが、普通にzipファイルを展開してもうまくいかないので、だいたい次のような手順をとればよいのではないかと思う。
$ cd   ←ホームディレクトリにいる。ここにダウンロードしたzipファイルを置いておく。
$ mkdir dolittle
$ cd dolittle
$ unzip ../dolittle232.zip ←適当に、その時点での最新のものを展開
$ rm -r lib* ← RXTXライブラリがIntel用なので捨てる
$ sudo apt-get install librxtx-java ← ARM版のRXTXをインストールする
それで、dolittle.shは、以下のものに置き換える。
#!/bin/sh
cd /home/pi/dolittle
java -cp /usr/share/java/RXTXcomm.jar:dolittle.jar -Djava.library.path=/usr/lib/jni -Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA0 o3.UI 2>&1 /dev/null &
要するに、ドリトルを展開したディレクトリをカレントディレクトリにして、そこでjava実行し、標準エラー出力に出てくるJVMのエラーメッセージを/dev/nullに捨てるということ。

(追記:2>&1じゃないと、1って名前のファイルができますな。すみません。それと、/usr/lib/jniの下にRXTXのネイティブコードがあるんだけれど、そこをオプションで指さないとだめみたいだったので、追記しました。さらに、Raspbianの場合、シリアルポートをシステムプロパティで指定する必要があるんだそうで、この一連の作業でRXTXの問題が完全解決しました。2014-07-01)

Raspberry Piの場合、例えばArduinoを接続すると/dev/ttyACM0というデバイスができる。これは特にシステムプロパティで指定しなくてもドリトルから見つかるのだが、通信の設定が正しいかどうかは不明。デジタルもアナログも、コマンドはドリトル側から送信するのだがArduinoは正しく受け取っていないように見える。一方、GPIOに出ているシリアルポートは/dev/ttyAMA0で、これを使うと問題なくArduinoと通信することができた。

Arduinoのシリアルポートは5Vで、Raspberry PiのGPIOは3.3Vだから、直結してはいけない。正しくはレベルコンバータを通して(専用ICもあるけれどトランジスタと分圧抵抗で自作してよい)つながなければ、Raspberry Piを壊す可能性があるが、シリアルに関しては、この記事にあるように、RX端子だけ分圧するのでなんとかいけるようだ。同記事には、GPIOのシリアルポートをシリアルコンソールを解除して自由に使えるようにする設定も記述されているので参照されたい。

なお、Javaのシステムプロパティを操作しなければいけないという話は、ArduinoのサンプルJavaコードのコメントに書かれている。
(追記:今回の場合、dolittle.jarが相対パスなので、カレントディレクトリをdolittle.jarがある場所にしておかないと、headless modeという、グラフィック機能をオフにしたJVMが起動してしまうことがある。headfulかheadlessかのフラグは、システムプロパティのjava.awt.headlessに論理値で指定できるので、javaのオプションに「-Djava.awt.headless=false」を書いておけばheadlessが選ばれる可能性はなくなるが、カレントディレクトリが間違っていた場合は結局「o3.UIが見つかりません」とか「mainが見つかりません」のようなエラーになるので、よしあしではある。このへんは、Oracleのjava seにおけるheadlessについてのページに書かれている。 2014-07-01)

さらに、デスクトップにアイコンを置くために、ayumi.pngをjarから取り出しておく。
$ unzip dolittle.jar image/ayumi.png
$ mv image/ayumi.png .
$ rmdir image
で、デスクトップの設定を以下のように書いておく。ファイル名は、~/Desktop/dolittle.desktopでいいと思う。
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Exec=/home/pi/dolittle/dolittle.sh
Icon=/home/pi/dolittle/ayumi.png
Terminal=false
Name=Dolittle
Name[ja]=ドリトル
Comment= Dolittle Programming System
Categories=Application;Education;Development;
MimeType=application/x-dolittle-program
Scratchの設定をパクらせてもらったので適当だけれど、まぁこんな感じなんではないかと思う。さらにこれをLXDEのメニューに反映させるため、
$ sudo cp dolittle.desktop /usr/share/applications
しておくと幸せな感じになるような気がします。
LXDEのメニューに追加された

ドリトル実行中


2014年3月14日金曜日

tt-rssとReeder

Google Reader終了後、いろんな他サービスに移行した人は多いと思うのだけれど、僕のみたところ、どこも広告リンクを踏ませて収益を得ようとするとか、行動ターゲティング広告を狙ったようなアクセス解析に使うことを目的としたのが露骨に現れたサービスが目立ち、全く使う気になれなかった。

そんな折、自前サーバでフィードのアグリゲーションができるサーバとしてtt-rssの存在を知った。僕はさくらのVPSを借りていて、FreeBSDを入れていたのだけれど、portsにtt-rssも入っていて、簡単に使えたのでおすすめしたい。なにより第三者にどんなフィードを読んでいるかを知られることもなければ不要な広告リンクを踏まされる必要もない。あえていうならば、feedlyが人気らしいが、あそこはすべての記事が広告リンク経由になっているから、莫大な収益が得られているはずだ。ワンクリック0.1円だとしても、1万人が平均1日100アーティクル読むだけで10万円、世界的に利用者がいるはずなので、その1000倍は稼いでいるはずだ。その意味では、Flipboardのような、マガジン形式にするサービスも同様にアクセス解析等で収益を得ているはず。RSSフィードを活用している人は、自分がどれだけ相手の事業に貢献しているのか、儲けさせすぎていないか考えてよいのではないだろうか。

一方で、tt-rssのモバイルアプリとしてAndroid用があるが、これも決してよいUIではなく、改善が求められると思っている。それ以外はモバイルWebに対応させる手段しかなく、ttrss-mobileは簡単だが素朴にすぎ、g2ttrss-mobileは僕のところでは動かなかった。

しかし、iPhone限定ながら、Google Reader用RSSリーダとして非常に洗練されたアプリであるReederから、tt-rssにアクセスできるプラグインがあることを検索で知った。

tt-rssのフォーラムで公開されている、Feverプラグインがそれだ。Feverという、なにやら閲覧履歴からおすすめを温度で提示してくれるらしきフィードアグリゲーションサービスがあるようだけれど、そのAPIを模したプラグインがtt-rss用として提供されている。現在のバージョンは1.2。スレッドトップの記事のattachmentのところにリンクされているので、zipファイルを展開し、自分のtt-rss/pluginsの下に展開し、Webの設定からプラグインを有効にしてやればよい。Reeder側からはFeverの設定として、自前のtt-rssサーバのFeverプラグインのURIを指定し、tt-rssの自分のユーザと、プラグインで設定したパスワード(tt-rssのユーザパスワードとは独立)を設定すればよい。メールアドレス入力をするようReederから指示されるが、そこは無視してユーザ名を入れればよい。

iPadの場合、タブレット向けUIを犠牲にしてiPhone用アプリをそのまま使うか、4種類のアプリがApp Storeにあるので、それを使うことになる。ひと通り見てみたが、いずれもtt-rssのWebインタフェースを超えるものではなかったので、無料の「Tiny Reader」で十分ではないかと思う。300円のTTReaderはスクリーンショットでは一見よさそうに見えるが、特にこれといった機能があるわけではなく、シェア機能に「Pocketに入れる」がある程度だったりする。Reederの利点であるMobilizerを通すものはひとつもないので、Mobilizer必須ならば、ReederのiPhone版一択だが、個人的感想ではそれほど悪くないと思っている。

(追記:「tt-rss Reederテーマ」を試してみた。PC上のChromeでは素晴らしい表示。機能もかなり近づけられていてたいへんよいが、iPadのSafariではやや遅めの印象。iPad Airなど最近の機種ではどうかわからないが、iPad 3では厳しかった。)

2014年2月28日金曜日

富士通FMV-C8230でUbuntu

Windows XP終了で職場から大量放出された、職員用ノートPCを引き取ってきた。富士通の仕様のページに書かれているように、これは法人向けモデル。

さすがに7年前(2007年購入とラベルに書いてある)のマシンだけにやや不安だったけれども、無事パーツ入れ替え等でUbuntuが使える状態になったので報告。

まずメモリ、これは裏側の大きな蓋のなかにDIMMスロットがある。最大4GB。Core2Duoなんだからなんとかしてよーと思わないでもないけれども、マザーボードの設計がそうなんだそうで、やむなし。

「DDR2 PC2-5300」と書いてあるので、それに応じたメモリを買ってみた。製品だと、DDR2-667と書いてあるものに相当するようだ。2GB2枚セットで比較的割安だった、「UMAX Castor DCSoDDR2-4GB-667」で問題なし。

次がHDDなんだが、入っていたのは40GBの富士通製MHW2040BWとかいうドライブだったけれども7年毎日使ったものなので外して、SSDを入れることにした。予算がないので64GBにしたんだけれども、店頭では「ビッグドライブに対応していない可能性があるから120GBより大きいのは避けたほうがいい」とも言われて納得してたんだけれど、ネットをみると500GB認識したとか750GBでもとかいう話があって、「たいへん残念だ」。値段同じぐらいだから。1TBもいけるんではないか説も目にしたような気がするんだけれどもよく知らない。なお、SSDといっても所詮本体がSATA 1.5インタフェースなので速度はそう出ないから、最近のHDDでも十分限界まで引っ張れるのではないかと思う。

HDDはねじ1本で本体から外れる。そのあと、4本のねじでマウンタに固定されているので取り替える。もとは9mmだけれど、7mmの高さでも問題なし。固定されるから。というか、ネジ穴は面一というか底一で合う位置にあるので特に浮くという感じもない。

最後がCD-ROMのスリムDVDスーパーマルチドライブへの交換なんだけれど、これがネットのどこにも外し方が書いてないというぼやきを見たので、ここに書いておく。あ、ドライブのタイプはIDEなので、間違ってATAのドライブを買わないように(自分のことだが)。

んで、各種ネジをまとめて書いておいた。
FMV-C8230の裏面
この写真で見るように3つのネジだけで留まっているので、これを外してから、ゼムクリップを伸ばした針金でドライブトレイを開け、そのまま引き抜けばよい。と思ったら、左端は関係ないみたいね。たしかにドライブに取り付けられている金具に対応するネジは右の2本なので、これだけ外せばよいと思う。

参考

ベゼルは切り欠きがあるので、市販のドライブのベゼルとは違うから、うまくツメを精密ドライバなどで外してうまく引っ張れば外せる。新しいのも外して交換してやればよいわけだが、「DVDのロゴがない」という割と残念な結果になるので、同じ形になるよう切り取ったほうがいいような気がする。ミニ丸鋸盤かバンドソーあたりの機械があれば一発だと思う。もとのベゼルも結構周囲から浮いているので、あまり厳密な寸法で切らなくてもよいのではないか。

あと適当なドライブを挿してみて、BIOSで認識するかどうか、起動時にENTERを叩いてBIOSのメニュー項目を選んでみるわけだけれど、認識しなかったらマスターの設定になっているので、スレーブになるよう、「47番ピン」を倒し、それでだめなら「48番ピン」を倒して47番ピンとショートさせる、という作業がいるようだ。このページでは「千枚通しのような先端のとがったもの」と書いてあるけれど残念ながら当方には各種工具はあるものの文房具がいまひとつなので、カッターナイフの先端で端子を引っ掛けて内側に倒してみた。90度倒すために押しこむのは必要ないかもしれないけれど、精密ドライバあたりで押し込んでみたり。

今回はAmazonで2200円ぐらいだった東芝のドライブだったんだがこれに該当したので経緯を記すと、47番ピン(写真でいちばん奥から2番目)だけを倒した状態でBIOSセットアップでは認識したが、Ubuntuで認識せず、48番ピンも倒してショートさせたらBIOSセットアップから消えたけれどUbuntuで認識されるという不思議な結果だった。LinuxだからBIOS関係ないところがあるのかもしれないし、あまり深く考えていない。

で、UbuntuはDVDメディア入れないとファイルシステムにマウントされなくて、ファイルブラウザーからも見えないのね。最初慌てたので為念。

と、実はUbuntuのインストールはSDカードで行ったので作成したDVDは、このチェックのとき初めて使った次第。

SDカードをUSBカードリーダーに挿して、何か適当な方法でISOイメージを書き込んで(Mac OS Xなのでddで書いた。Raspberry PiのSDカードイメージ作成の説明が該当するので調べてください)、BIOSセットアップの起動順序で「USB HDD」を先頭にもってくればSDカードから起動する。たぶんDVDを読むより速いのではないかと思う。わりとあっさりとインストール完了したので偉いもんだなと思った。

そういえば忘れてたけど、Core2Duoなので当然64bit版OSを入れるべし。メモリも4GB全部(といっても一部はVRAMとシェアするので3.3GBぐらいしか使えないけど)使うんだったらWindowsでも64bit版が必要。

使用感だけれど、単体で使う分には特に問題ない印象。x11vncでMacと画面共有しようとするとXサーバが2つ立つことになるのでメモリが足りない感じがする。やはりスワップがあるとちときつい。

それから、古いマシンなのであまり省エネではない。CPUとかの発熱があって、いまどきのマシンと較べるとかなり熱くなるし、それほど静音というわけでもない。キーボード等もへたっているし液晶も4:3で四角いのでなんというか、「ラップトップ(というにふさわしいと思う。いまでは)のままでは使いたくない」感じ。なので、そのへんに置いて画面共有で使いたい。とはいえ発熱が結構あって、この手のマシンはキーボードやパームレストあたりを放熱に設計されていたりするので、液晶パネルを閉じた状態で動かすのは怖い。したがって開いたまま放置することに。いいんだか悪いんだか。

そういえば、7年前のマシンだけれどEthernetは1000Base-Tに対応しているので有線なら通信が遅いということはないはず。以前、ミニWiFiルータ(ホテルに有線しかなかったときに無線にしたりするアレ。といってもいまどき有線しかないところはあまりないので出番がない)のおまけについてきたUSBドングル(150Mbps)があったので、配線面倒でそれを挿して使っている。

で、このマシンが何になるかというと、前のエントリに書いたFxOSビルド用のつもり... だったんだが残念な結果になったのでいまのところ用途がない。まぁ、オープンソースの世界だと「Ubuntuでビルド」がデフォルト的なところがあるので、例えばRaspberry Pi用バイナリのクロスコンパイルなど、ARMのバイナリ作成用になる予感がする。

(追記)そういえばRaspberry Pi用mozcのクロスビルドという重要な用件があったっけ。セルフでビルドすると半日以上かかる感じなのでクロスビルド重要。そのうちやってみる。

2014年2月21日金曜日

[Nexus 7 2012] MultiROM

先日2月9日に行われた「Firefox OS勉強会 in 名古屋 2nd」にて刺激を受けて、いま使ってないNexus 7 (2012, つまり初号機)にFxOS(と略すらしい)を入れるべくビルド環境を作ったりしていたのだけれど、ビルドできるのは2013年版、つまり新しい、Snapdragon使ってて、高解像度なNexus 7用だけだった。

どうも以前に移植を試みた人がいたようだけれどまだその頃はFxOSも開発途上でタブレットのことが考えていなかったことなどもあり、移植できたけど使えねーということで投げてしまい、そのままになっていたところ、なぜか2013年版にがりがり取り組む別の人が現れてそのまま、という状況らしい。

Galaxy S2とかがターゲットだったりする一方、タブレットへの取り組みは遅れているようで。1.3はだいぶ改善しているという話だけれど、いまさら2012年版に取り組む人がいるのかどうか、オープンソースプロジェクトのジレンマというか、やる気のある人がいないとだめだねってことみたい。Mozillaのサイトにも、Galaxy Nexusは最近聞かないから動くかどうかわからん(MDNのこのへんのTire 3んとこに書いてある)とかあるし。

でもまぁ、一丁emulatorでもビルドしてみるかと./config.sh emulatorとかやっても、
... A new repo command ( 1.21) is available
... You should upgrade soon: 
    cp .../B2G/.repo/repo/repo .../B2G/repo 
Get git://github.com/mozilla-b2g/b2g-manifest
とか言われてあとはPythonのエラーが続いたりする。書いてあるようにやるんだろうけど、なんか違うみたいなんで面倒になって投げてしまった。

それで、なんか別のOSないかなーとxda-forumsを探していたら、「Nexus 7とNexus 4ならいまはMultiROMだぜ」みたいな雰囲気になってて、つまりICSが入ってたNexusはこれでいろんなROMを切り替えられるし最新版も取ってこられます、ということだった。

例えばこのへん:
 [MOD][FEB 02] MultiROM v22a

rootがとれている状態で、カーネルにパッチがあたっている状態にしたものから、Google PlayでMultiROM Managerをインストールして実行すればいいんだそうだ。Nexusなんで、rootをとるのにハラハラする必要もなく、普通にCWM RecoveryからSuperSUや、パッチ当てたカーネルなんかをインストールしてやればおしまい。

デフォルトではもとの環境のほかにUbuntu Touchが選べるみたいで、他を試したかったらそれぞれROM用意してメニューから操作しろ的な話なので、Ubuntu Touchを入れてみることにした。saucy (13.10)じゃなくてtrusty-custom (14.x)にいきなりチャレンジみたいな無謀なことしたり。

当然開発版を入れることになるので、Wi-Fi経由でじんわりとROMを読んで再起動したあともまた、なんだかイメージのアップデートを延々としたあと再起動がかかった。TWIPのカスタムリカバリみたいな作りなので、タッチ操作でOSを選ぶことになる...んだが、起動まで、Googleロゴ画面のあと真っ暗な状態が1分ほど続いて怖かったよ。

んで、起動したものの... 遅いわこれ。Androidの4倍ぐらい遅い感じ。設定に入るともう、キーボード入力はいつ入るんだろうというような世界。いや、すみませんでしたと謝るしかないほど悲しい。

とりあえず気分がかわったので、続きはやるかどうか考えないで、ひとまずこちらに報告だけしておきます。

(追記:投稿直後)
GMailはわりと普通に近い感じでログインはできたんだけど、日本語フォントが毛筆体でびびった。そのあと操作どころではない感じなのは設定時と同じ。いやはや。それと、シャットダウンのしかたがわかってないので電源ボタン長押しで落としてしまっているのもどうかと思ったり。
(さらに追記:1時間後)
業を煮やしてJerry Bean 4.4.2に戻してみたものの、遅かった... Androidはもともと重いと記憶していたけれど、iPhone 5sとiPad 3だけを使っていたのでNexus 7 (2012)の速度を忘れていた。これでは、FxOSだとしてもかなりチューニングしなければならないんだろうなとか思ったり。つまり、2012年版をがんばる動機に欠けるんだろうなと。

2014年1月25日土曜日

[RepRap PCB milling] How to compile "pcb2gcode" in Mac OS X Mavericks

My current project is creating the RepRap style PCB milling Machine.

One of my undergraduate student agreed to join this as his final project for the credit of graduation.

He designed the machine part.  Because his good skill on the engineering, it worked fine.  My part is for an electricity and the toolchain as softwares.

For designing the circuit board, I designed my own deliberative  one from Generation 7 v1.4.1, and Printrboard from the reason of availability of some parts in Japan.

This board is currently only a prototype, but when the PCB milling machine will worked, I will design more compact, and stable board that can build with it.

The toolchain is basically following the description of RepRap Wiki page.  But on my Mac, the recommented driver "CNCGcodeController" did not work.  It is a Java application, but I think the reason of the failior would be the serial communication class includes OS native code inside.  If so, the code should be re-written to be portable such as using RXTX serial communication class.

Then I installed "Printrun" on my Mac by following the instruction from source for Mac OS X in the README file.  It worked very fine with my choice of firmware "Teacup".

But due to Teacup firmware only accepts G-Code, and my targeting PCB Layout software "KiCad" does not support exporting G-Code directly for now, I needed to convert exported "Gerber" data into G-Code file.

There are several toolpaths is introduced in the Wiki page, but everything in the page but "pcb2gcode" didn't work or fit for my intention of using KiCad (Jan 10 2014 version) as a PCB design tool on my Mac.

I got the source code of pcb2gcode both from sourceforge and GitHub, but the development of this software looks not a hot recently.  The newest download on the sourceforge is dated 2012-07-02, and the head on the GitHub looks the same.

I had a trial of building with this code, but the code conflicts between recent Xcode 5.x toolchain and the boost.  In order to solve this, by looking at the discussions on StackOverflow, I made the replacing using shared_ptr feature from boost to std class, and port a template definition of dynamic_pointer_cast from boost (it is included in "shared_ptr.hpp").

The put my patch on my GitHub repository: https://github.com/tkamada/pcb2gcode

If there were a fail or something that I misunderstand, please post your issue message to my repository.