2015年10月27日火曜日

GoPiGoとは

Raspberry Piでロボットカー制御、というので話題らしい、「GoPiGo」のサイトをみてみました。
GoPiGo Base Kit

とても見覚えのある感じのモータとタイヤ(ちっちゃいものくらぶの通販サイト参照)でありまして、いつのまにか欧州サイト他でも見かけるようになったので、さすがともんさんお目が高いと思うわけですが、それにレーザーカットした木製もしくはアクリル筐体、そしてRaspberry Piに載せるボードなんですが、なんとArduinoでした.

GitHubに回路以外の一式が掲載されているのですが、FirmwareのなかみはArduinoのスケッチです。しかも、GPIO上のシリアルポートで通信しておりまして、おんなじこと考える人はいるもんだなあと思った次第。

セットアップはGertboard使っておりまして、これはアナログはSPIでRaspberry Piに渡すので、そのへんの違いや、モータをドライブできる回路も乗っているので、わたくしが作成した簡易基板よりは豪華。
"Red Board"
GoPiGoは、電力が必要なのは車輪のモータだけのようなので、Gertboardの簡略版と思われる一方、赤外線リモコン対応などの追加もあるようです。でもまあ、がっつりと DIP版のATmega384Pが存在感を放っているあたり、好感がもてますね:)
Base Kitのパーツ一覧
上図はBase Kitですが、車輪にとりつけるロータリエンコーダ相当の溝を切った円盤もあり、対応言語によってはエンコーダの値をみてフィードバック制御可能なようにもなっているようです。PythonだとBluez使ってBluetooth接続したPS3リモコンにも対応している模様。サンプルもたくさんありますが、個人的にはJavaやNode.jsに対応したのがえらいなと思った次第。Pythonの簡単なソケット通信サンプルもあって、ソケットからロボットカーの操作もできるようです。
Starter Kit
Starter Kitだと、超音波距離センサとその首をふるサーボモータがついてくるようです。

あとオプションでRaspberry Pi純正カメラをつけてビデオストリーミングするようなPythonスクリプトがあり、PC側でモニタしたり、Raspberry PiでOpenCVを動かして画像認識するようなデモがあったりと、PythonではI2Cインタフェースを含めていろいろな材料を提供しているようです。

YouTube動画をみる限り、なかなかきびきびと動きますね。開発はVNCとファイル共有を併用し、PC側で編集したプログラムをファイル共有でRaspberry PiのPythonで実行するのをVNCの画面から操作しています。Avahi(mDNS)も動かして、IPアドレスでなく、名前で接続できるようなこともしています。

材料は特別なものはとくにないので、Arduinoやモータドライバを含めてある程度の材料が手元にあれば、GitHubのレポジトリからほぼ同様のものを作っていけるように思いました。

ゼロから工作していく感じが学習向けだと思うのですが、日本語対応という点ではScratchがありますが、Pythonほど情報提供されていないので、Python怖くない中高生や大学生にはおすすめできるけれど、そうでない人にはまだ敷居が高いのかもしれません。

2015年9月21日月曜日

いわゆるXcodeGhostについて

iPad AirをiOS 9にアップデートしようと久しぶりに電源を入れたら,iCloudやiMessageへのログインを繰り返し要求される事態が発生し,うんざりしておりました。公開初日だったのでAppleがとんでもなく混雑しているのは,iOS 9のダウンロード前の認証に10分ぐらいかかった時点で覚悟したわけですが,iCloudやiMessageの認証失敗もその関係かなと思っていたわけです。

日中のダウンロードを諦めて帰宅後,深夜に自宅で割と(それでもゆっくりと)ダウンロードが進むのを見ているうちに寝落ちしたので,目覚めてからは混雑解消したのか,すっきりとインストール以後は進みました。

インストールの間にもAppleの認証ステップがありますから,通信が混雑しているとインストール途中でプログレスバーがいつまでも動かない,ということが生じますが,それはなかった,ということです。

で,現象が解消して忘れていたのですがそこへXcodeGhostのニュース。各ニュースサイトで話題になっているのでご存知かと思いますが,細かいところまでよくまとまっているのが以下の記事かと思います。

それ以前に一般のニュースで,iCloudのパスワードを入れさせられる場合もある的な記述があり,「ゑ?」と思ったわけです。

ということで,Pangu作のチェッカを入れて確認しました。このへんは脱獄ニュースのTools4Hackさんが詳しい。Panguは脱獄ツールを作成,配布しているところですから当然でして,この界隈の修羅の様相を踏まえて,確からしい内容を選んで丁寧に解説されているのがこのサイトであります。
個人的には脱獄環境でMobile Safariの穴からiOS乗っ取られた過去があるので脱獄はめんどくさいと思ってやめましたが,iOSのセキュリティについては脱獄コミュニティがいちばん詳しく知っていて,Twitterなどでかれらが漏らす話が重要だったりするので,それをうまく掬って記事にしてくださるニュースサイトは見ております。

というわけで,上記記事の手順で,Mobile Safariからアプリをインストールして,開発者証明書プロファイルを「設定」アプリから「信頼」してあげれば動きます。エンタープライズ向け,企業などで社内業務用に開発されたものなど,一般公開されないアプリをインストールして動かす手順を踏む形。

開発者証明書はAppleに申請して,Appleの署名つきのものを取得しないとアプリが動かず,証明書の偽造はまだ確認されていない,できないことになっている,のだったと思うので,このアプリを動かす間だけ「信用」すればよいし,この画面で「信用」すると赤文字で「Appを削除」にかわるわけですが,実行後,ここをタップすれば証明書とアプリの両方が消えます。

結論ですが,わたくしのところでは,コメント欄で話題になっているCamScannerは手持ちはCamScanner+だったおかげか,感染しておりませんでした。というわけで問題なし。AppStore側も感染アプリのBAN(ストアからの削除)を積極的に進めているようなので,今後インストールするアプリに同じ不正コードが含まれている可能性は少ないのかなと思っています。(AppStoreからBANされていても,いまデバイスにインストールされているアプリまで消えるわけではないので,いま動いているiOSデバイスで確認することが大事です)

それで,XcodeGhostの該当コード部分がGitHubに上がって,めきめきスターの数が上がっております。スターは,いわゆる「お気に入り」機能です。ブックマークといってもいい。
たしかに,各種情報をとりまとめ,暗号化して情報収集サイトに送信する様子が見えます。README.mdが中国語なので読みにくいですが,英語に翻訳すればわかりやすい。文法が近いためか中国語から英語への翻訳精度は高いと思います。

Google翻訳の結果:
"XcodeGhost" Source clarification on the so-called "XcodeGhost" of

First of all, I XcodeGhost event to bring confusion apologize. XcodeGhost from my own experiments, without any threatening behavior, as detailed in the source code: https: //github.com/XcodeGhostSource/XcodeGhost

The so-called XcodeGhost is actually hard to force an unexpected iOS developers find: Modify Xcode compiler configuration text file specified code can be loaded, so I wrote the code above annex to try and upload it to your network disk.

All data in the code actually acquired basic app information: application name, application version number, system version number, language, country name, symbol developer, app installation time, device name, device type. In addition, you do not get any other data. Solemn note is required: for selfish reasons, I joined the advertising features in the code, hope can promote their applications (off the source code can be compared to the Annex do check). But in fact, from the beginning to the final shut down the server, I have not used the advertising function. And in 10 days ago, I have taken the initiative off the server and remove all data, but will not have any effect on anyone.
Willing rumors would stop the truth, the so-called "XcodeGhost", used to be a wrong experiment, after just completely dead code only.

It is emphasized that, XcodeGhost App will not affect any use, but does not obtain private data, only a dead piece of code.

Again sincerely apologize, wish you a pleasant weekend

2015年9月10日木曜日

なのぼ〜どAG 1.4(2015年8月版)が出ましたね(ちと保留.時間ができたら確認します)

(注:サイトをよく確認したんですが,4月末以後の1.4との明確な差が写真と手元の実物から確認できませんでした.通信の不具合が解消しているか,現在配布しているものを確認できないので,以下の記述を当面保留します 2015-09-10)


以前のブログエントリで述べてきた,2015年5月版の「なのぼ〜どAG 1.4」について,ともんさんと何度か質問と回答のやりとりを得ながら,割と孤独に学生の実習のためハックを重ね,いろいろと面白い成果を出すことができたのですが,報告書作成のため,あらためてサイトをアクセスしたら,2015年8月版1.4にアップグレードされていて,驚愕であります.

前のエントリもそこそこのアクセスがありまして,その内容もご参照いただいたのかと思いますが,当時の懸案事項というのか,7月から8月にかけて胃を痛めながら睡眠時間削って回避方法を探ったり,基板のパターンと回路図を眺めながら,わかる人にはわかるように仕込まれている隠れ仕様を発見しつつ学生の要望に対応してきたことが,全面的にクリアになったような印象です.

ここで最も大きいのはATmega8Lをクリスタル駆動にした大英断と賞賛したいです.5月版1.4は,前のエントリに書いたとおりATmega8L内蔵のRCクロックで動作していましたので,本当に不安定でした.一応温度補償回路内蔵というメーカーの仕様ですが,電源ケーブル,その日の温度,湿度,さまざまな理由でシリアル通信の条件がつねに変化し,120〜150分の授業の間にも動く時間と動かない時間があり,この夏は異様に蒸し暑かったのですが,エアコンあれども,日に日に不安定度が増していくようなありさまでした.

当方での使い方として,ドリトルとの間でつねにシリアル通信をする形をとったので,タイミングが不安定になるとデータが欠けたり化けたり,あとProlificのWindows版ドライバを強く疑っているのですが,連続してデータをやりとりすると,Windowsのレベルでドリトルの動作が停止したり,基板との通信が止まって基板が生きているのか死んでいるのかわからなくなる,ということが頻発して途方に暮れるのでありました.Scratchセンサーボードのスケッチは毎サイクルですべてのセンサデータの送信とモータ等の動作データ受信を繰り返すので,あるサイクルで失敗しても次のサイクルで回復するとか,Scratch側がバッファ持ってて多少遅れてもなんとかなるようでしたが,ドリトルのプログラムは間欠的に,ときにバースト的にデータをやりとりするので,データの欠落や化けはわりと致命的でした.

Prolificのチップですが,Mac版ドライバは非常に安定しており,5月版なのぼ〜どAG 1.4であっても,たまにまずいところだけ5〜10ms程度の待ち時間を入れてあげる程度で,Windowsのときのようなハングは一切生じておりませんでしたが,Windowsでは,随所に50ms以上のウエイトを入れて確率8割ぐらい,PCの個体によってはどうやってもお手上げで,その個体ではATmega168Pに8MHzのクリスタルを搭載した「スタディーノ」でさえ通信ができなかったりしました.

スタディーノで使われているのは中華クローン対策をしたTA版チップで,クローンされまくったHXAの後継であるHXシリーズとは設計が違うと思われるのに,とにかくだめなときはだめです.

WindowsのドライバはProlific公式サイトからダウンロードしたものも,Windows 8.1や10で自動インストールされるドライバも,挙動に違いはみられないように観察されました.

それから,なのぼ〜どAG基板裏のジャンパパターンのカットについて,前のエントリの何度かの更新で加筆していきましたが,公式サイトでも写真つきで説明が入り,わかりやすくなりました.僕の現在の死亡フラグが立った状態が落ち着いたら,具体的な使用例込みでこちらで報告したいと思います.

それから,Li-Po(リチウムポリマーバッテリー)について,充放電管理のチップを搭載したものを入荷されたということで,これもすばらしい.SparkFunもAdafruitも商品ラインナップは電池単体で,チップはLilyPadやFloraのようにArduino基板側に搭載されるか,Breakout基板として別途提供という形でした.国内はラジコン用でホビーショップから買う経路が安定しているようですが,小型軽量なLi-Poは小さなプロジェクト,特に身に付けるような作品をスマートに仕上げるには具合がいいので,3.7〜4Vあたりの動作の回路には積極的に使っていきたい感じですが,専用充電器じゃないと怖いよ,ということで手を出しにくいところだったかと思います.という意味で電池側にチップがあるのは楽でいいです.

ただ,Li-Poは充放電を繰り返しているうちに膨張していつか破裂するという宿命があり,それは避けられないこと,パッケージは柔らかいけれど衝撃等で内部に傷やひびが入るとボーイング787初期の燃焼事故のような感じでやっぱり燃えるので,荒っぽい使い方しないよう注意してほしいと思います.で,ちょっとでも危ない気配がしたら正しい回収先に出す.

YouTubeを「battery explosion」で検索すると,バッテリーケースやスマホ本体にナイフを打ち込んで爆発大炎上させるロックな動画がいっぱい出てきますが,よいこはまねしないでくださいね.

2015年8月17日月曜日

Yosemite 10.10.4とHomebrewのOpenSSH(追記:2015年11月5日)

(追記:2015-11-05 MacPortsの7.1p1対応、Homebrew用の7.1p1向けパッチの存在についてのエントリ書きました)

Mac OS X 10.11 El CapitanのPublic Betaも出てしばらくするのにこういう話で恐縮するわけですが,数日前に半日無駄につぶしたのが残念なので,同じ轍を踏む人がいないよう記しておくことにします。

まずみんなが困っていることが,Mac OS X Yosemite 10.10.4のOpenSSHは6.2p2であり,楕円曲線暗号を用いるECDSA対応がありそう(stringsするとecdsaの語は出てくる)けれど,鍵交換アルゴリズムにECDSA対応が入っていないためHost KeyにECDSAを使ったサイトに接続できないというところでありまして,結局使えない,ということであります。El Capitanは試していないので現状どうなっているのかわかりませんが,Beta 3のユーザがHomebrewしているところをみると,状況はかわっていないのかなと思われるところです(ここの末尾)。

ちなみに,Mac OS Xのsshのありがたいのは,launchdがログイン時に起動するssh-agentがパスフレーズをOSの「キーチェーンアクセス」により自動送信してくれることでありまして,通常ssh-addで明示的にパスフレーズを教えこむような手間を,ログインごとではなく,暗号鍵を作成し,最初に使うとき一回だけで終わらせてくれることにあります。とはいえ,そのコードは本家OpenSSHに反映される様子がなく,MacPortsでメンテナンスされているパッチを使って最新(に近い)OpenSSHを使うということになっておりました。

というわけで,MacPortsを使っている限りは,インストール時に+gsskexを指定することによって,Kerberos 5認証とセットでキーチェーンアクセス対応になるので,ssh-agentが/opt/local/bin以下にあるものを起動するよう,/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist を書き換えて,そのあとログインしなおせばよい,ということでありました。

で,数日前に出た7.0p1に対してMacPortsでは,現状Kerberosはだめということで,キーチェーンアクセス対応パッチも通らない状況であるようです。いずれ誰かが調整してくれるのを待つしかない。

一方,Homebrewは哲学として,OSにあるものを極力使うという方針があり,OpenSSHもhomebrew-dupsをtapしてやらないと入らないようになっておりました。つまり,手順としては(7.0p1対応の現在)

  1. brew tap homebrew/dupes
  2. brew install openssh
以上,ということでして,いっとき存在した「OpenSSL 1.x系にするための--with-brewed-openssl」とか「キーチェーン対応のための--with-keychain-support」などのオプションはすべて外されており,逆に,「LibreSSLを使う--with-libressl」だけが唯一存在するオプションであります。とはいえ,上の手順でopenssl-1.0.2dも同時に入るので,OSの0.9.8zfを使うわけではないようです。

(ちなみにopensslとlibressl混在問題というのがあるらしく,まだ「混ぜるな危険」のようなので,libresslを入れるのは自己責任ということです)

これは要するに,10.10.4のssh使わないならMac OS Xと同等の動きを期待するなということでありまして,一般的なUNIXの流儀で使いなさいね,という判断であります。

かわりに,Funtoo Linux由来らしい,コマンドラインのkeychainというのがssh-agentの面倒をみるらしく,それ使えというコメントがあったり,解説している人もいますが,あんまり幸せになる感じがしませんでした。普通にssh-addしてるほうが安全な気がします。

ただ,Homebrewでキーチェーンアクセス対応しなくちゃやだ,という人は,6.2用に自作Formulaを公開している人もいるので,それをtapしてください。使いかたは,そこのREADME.mdにかかれている通り。入れ替えが終わったら,再起動して数分ほっとくのがよいようです(再起動後,launchdが出すエラーが/var/log/syslogにしばらく出ているけれど,そのうち落ち着くので)。落ち着くとlaunchdがキーチェーン機能つきのssh-agentを自動で起動してくれるようになります。

ただ,README.mdの末尾に書かれているスクリプトはあちこちで孫引きされてますが,全く意味がないので無視してください。

というのは,$(ssh-agent)と変数を参照してますがどこにも定義がないからexecしてもなにも起きないし,shellを落とすときにkillが走るようにtrapつけてますが,ssh-agentはlaunchdが管理しているので,shellには期待している環境変数SSH_AGENT_PIDがありませんから,killしたくても引数が空なのでなにも起きません。実害はないけれど全く無駄な処理が動く分だけ資源の無駄なんではないかと思います。

これに意味があるのはキーチェーンを使わない,つまり自分でssh-agentを立ち上げて,ssh-addで鍵を覚えてもらうときに意味がある記述です。ただ,いつ書かれたものかわからないけれど,いまならもっと簡単に書けます。bash前提にすると,
exec `ssh-agent -s`
function cleanup {
  ssh-agent -k
}
trap cleanup EXIT
が妥当ではないでしょうか。ただこれだとshellの数だけssh-agentが生まれてそれぞれ別のソケットを作るので,ターミナルを複数開くとshellごとにssh-addする形になってうれしくない。それよりは,最初にUNIXソケット決め打ちで-aオプションから指定することにしてそれを共通の環境変数SSH_AGENT_SOCKに持ち,一度起動したら,以後はssh-agentを起動しないほうがいいんではないかと思うところ。複数ユーザがいるなら,ユーザ名をソケット名に入れるのが妥当なんではと思ったり。

GNU screenやtmux使う人で,再接続したときに環境変数失ってssh-agentとお話できないのをごりごりする人がいるようですが,この考え方でスマートに解決できるんではないかとも思いますがどうでしょうか。

2015年6月23日火曜日

なのぼ〜どAG(2015年春版=V1.4)をArduino IDE 1.6.5でプログラムする(更新あり2015-09-10,2015-08-17, 2015-07-06, 2015-06-30, 2015-06-27)

(新しい2015年8月版1.4のなのぼ〜どAGが出たので,ともんさんのサイトを参照しましょう.本エントリは以後更新しません)

(重要な訂正:D3,5,6はPWMできませんでした。よって使えるのはD9,10,11のみ)
(重要な訂正:PWM端子がM1とM2で逆に書いていたのを直しました2015-07-06)
(更新内容:基板の端子の接続をテスターで確認しました)

ともんさんが頒布されている、なのぼ〜どAGは、もともとScratchセンサーボード互換にWeDo相当のモータドライバを載せる用途で開発されてきたものだったはずですが、Arduino互換なので、とても安価なArduinoとして使いたいという方も多いかと思われます。

学生実習用に、モータドライバつきでCdS、マイクロフォン、スライダーボリューム、タクトスイッチを搭載したArduinoが送料込み2,000円というのはたいへんありがたいので、使わせていただくことにしました。

現在の最新版はV1.4だそうで、裏面を見るとたしかにそうシルクされています。(2015-06-30追記)

回路図も公開されているのですが、ロットごとに、ともんさんが支援している、その時々のOtOMOの活動(主に子ども向けScratchプログラム学習イベント活動)に合わせて設計がかわるようなので、特にソケットのあたりは現状に合っていなくてしばし迷うところでありました。また、Arduino IDEについて、古い情報を更新するエントリが見当たらなかったので書いてみる次第であります。

まず2015年春版(年内にロットがはけたら次の設計にかわるかもしれないので、仮にこう呼ぶことにします。追記2015-06-30:4月末以後はV1.4だそうです)の外見は、「なのか〜」の写真が該当するように思われます。具体的にいうと、サーボモータ端子はなくなって、アナログ入力A,B,C,Dと同じ並びにD11とVccがきて、超音波距離センサーがそのままささるようになっています。(テスターで確認:2015-06-27)

あと、M1, M2のモータ端子横の3本のうち、外の2本が基板を電池駆動する場合の電源端子であること、スルーホールのままの3端子が電池ボックスからの電源スイッチを取り付ける場所であることが、「なのか〜」の写真からうかがえます。残る1端子は、モータドライバのモータ用電源端子につながっています(テスターで確認:2015-06-27)。

まとめると、こうなると思います。
なのぼ〜どAG 2015年春基板と端子の割り当て

この写真は上のスルーホールにピンソケットがついていませんが、本来はつけた状態が完成品のようです。手仕事の部分が残っているようなので、値段もたいへん手頃ですしScratchセンサーボードとしては本来不要なところなので、それをとやかく言うのはよろしくないと思います。(追記2015-06-30)

なのぼ〜どAGはATmega8Lの8MHzクロックなので、ATmega168に対してFlashが半分(8kB)ということさえ注意すれば、学習用のプロジェクトには十分使えるのではないかと思われます。ATmega8というと、初期のArduino NGなど古い基板の印象ですが、Adafruitの最近のヒット作Gemma(ATTiny85使用)にむしろ近いのかもしれず、そう思うとなんとなくモダンに見えなくもない感じです。

ただ、ATmega8L内部クロックで動作しているので、外付けクリスタルで動作するArduinoに比べればタイミングが不安定なときがあり、基板バージョンごとに対策をとって安定度は増しているものの、ときにスケッチ書き換え失敗がないとはいえないようです。つまり、Scratchセンサーボードのスケッチを消すのは自己責任と考えるべきだと思いました。基板に搭載されているクリスタルは、回路図を見ればわかりますがPL-2303HXC用、つまりUSB用です。(追記2015-06-30)

さて、まずはArduino IDEで使えるようにするために、boards.txtに何を書くのかということですが、最近のなのぼ〜どAGはoptibootをbootloaderに使っている、つまりUno R3などと共通のコードベースで動いているのでわりと素直です。1.0.5用として公式ページに書かれているものにちょっと追記したら1.6.5でもうまくいきました。

こんな感じ。

atmega8o83.name=chibiDuino pro ATmega8 38400 optiboot

atmega8o83.upload.protocol=arduino
atmega8o83.upload.tool=avrdude
atmega8o83.upload.maximum_size=7680
atmega8o83.upload.speed=38400

atmega8o83.bootloader.tool=avrdude
atmega8o83.bootloader.low_fuses=0×94
atmega8o83.bootloader.high_fuses=0xDC
atmega8o83.bootloader.path=optiboot
atmega8o83.bootloader.file=optiboot_cp83.hex
atmega8o83.bootloader.unlock_bits=0×3F
atmega8o83.bootloader.lock_bits=0×0F

atmega8o83.build.mcu=atmega8
atmega8o83.build.f_cpu=8000000L
atmega8o83.build.core=arduino
atmega8o83.build.variant=standard
atmega8o83.build.board=AVR_ATMEGA8O83

これで次に気になるのは搭載されているセンサー類がどうなっていて、自由に使えるアナログ入力があるかという心配ですが、なのぼ〜どAGはアナログ端子8個の設定なので、実は結構余裕。

A0マイクロフォン(音量センサー)
A1「A」端子
A2「B」端子
A3「C」端子
A4「D」端子
A5CdS(光センサー)
A6スライダー可変抵抗器
A7タクトスイッチ

D5モーターM2制御1
D6モーターM2制御2
D7モーターM1制御1
D8モーターM1制御2
D9モーターM1 PWM
D10モーターM2 PWM

D2-D4とD11-D13は未使用です(超音波距離センサーはA1(=D15)とD11を使用するので、その場合は他の用途に使わない)。D3とD11がPWM対応なのは通常のArduinoと同じです(D3,5,6はPWMできないので普通のArduinoと異なることがわかりました:2015-08-17追記)。また、D13には通常のArduinoと同じようにチップLEDが接続されています。

なお、アナログ端子はすべて10kΩ(103)抵抗でプルアップされているので、学習用に分圧回路組ませたりしなくても、なにか抵抗値が変化するものを入れるだけで値の取得ができます。プルアップが困る場合,プルアップ抵抗値を変えたい場合は,裏側にジャンパパターンがありますので,そこをカットすればプルアップ回路の切り離しを行うことができます。1MΩでプルアップすれば,Makey Makeyのようなタッチセンサー風味のことも十分可能です。(追記2015-08-17)

あと、基板手前側のピン、普通のArduinoでは電源やアナログ入力端子が出ているところの上がスライダー可変抵抗器でふさがってしまっているので、「A」〜「D」で外に出してある端子を使うべし、ということになろうかと思います。電源周りはあちこちにVccとGNDが出ているので、それらを利用すればそれほど苦労はしないと思います。

I2CはA5がSCL, A4がSDAですが、スライダーボリュームの横にA5が出ているので、こことアナログ「D」(A4)を活用すればなんとかなるかもしれません。ただしA4はプルアップをありがたく利用させていただくとしても,A5にはCdSがつながっているので、CdSに光が入らないよう、しっかり覆いをかぶせて高抵抗(1MΩぐらいになるはず)を保つか、確実なのは基板裏のA5とシクルされた部分のパターンをカットしてCdSを切り離す(追加2015-07-06,打ち消し線追加2015-08-17)べきと思います。どちらもA4は基板上で10kΩでプルアップされているのでそちらのI2Cのプルアップ抵抗外付け不要ですが,A5はパターンカットによりプルアップを失いますから,それを補う必要はあります(文章訂正2015-08-17)。

2015年6月6日土曜日

Yosemiteに入れてしまったApple Java 6を片付ける方法

Yosemite登場の10.10.0では、なにかと以下のダイアログが出てうるさく、AppleからJava SE 6をダウンロードしてインストールした方もおられると思います。
でも、10.10.3であるいまは、消してしまってもたいてい大丈夫なようです。おさらばしましょう。

Apple Java SE 6を入れた状態は、こうなっているはずです。
$ pkgutil --pkgs |grep -i java
com.apple.pkg.JavaEssentials
com.apple.pkg.JavaForMacOSX107
com.apple.pkg.JavaMDNS
com.apple.pkg.JavaSecurity
com.apple.pkg.JavaTools
ちなみに、Vanillaな(素の)Mac OS X 10.10.3でこれをやると、以下のようになります。
$ pkgutil --pkgs |grep -i java
com.apple.pkg.JavaEssentials
com.apple.pkg.JavaTools
つまり、間の3つを消せばよいということですね。

それで、pkgutilコマンドで削除できればよいのですが、できません。rubyでこのコマンドを書かれた方がいらっしゃるのでありがたく使わせていただくことにします。
$ wget https://raw.githubusercontent.com/niw/profiles/master/bin/rm_pkg_files
$ chmod +x rm_pkg_files
どこか適当にpathの通っているところに置いておくとよいかと思います。

というわけで、消してしまいましょう。ついついbashのfor文を書きたくなりますが、わかりにくくなるのでひとつひとつ順番に。
$ rm_pkg_files com.apple.pkg.JavaForMacOSX107
$ pkgutil --forget com.apple.pkg.JavaForMacOSX107
$ rm_pkg_files com.apple.pkg.JavaMDNS
$ pkgutil --forget com.apple.pkg.JavaMDNS
$ rm_pkg_files com.apple.pkg.JavaSecurity
$ pkgutil --forget com.apple.pkg.JavaSecurity
これでさようなら。pkgutil --forgetで、pkgの一覧から出ないようにするのを忘れないことと、先にforgetしてしまうとrm_pkg_filesは、pkgutil --filesの結果を使うので「消せなくなる」という悲しいことが生じるので、こちらを先に実行するようにしてくださいね。

for文で書くと、どっちがどっちかあまり考えずにワンライナーでやってしまい後悔する(あらためてAppleからダウンロードしてインストールしなおすはめに)ことになりますはい。

Oracle Java 8を完全にアンインストールする

類似のエントリはいくつかあるようですが、vanillaな(素の)Mac OS X YosemiteからOracle JRE 8をインストールした差分で作業したので、たぶん現状これが完全なのではないかと思います。

まず、JavaUpdateやHelper-Toolの起動がlaunchctlに設定されているので、unloadしておきます。そうすればマシンを再起動しなくてよい。
$ sudo launchctl unload /Library/LaunchDaemons/com.oracle.java.JavaUpdateHelper.plist
$ sudo launchctl unload /Library/LaunchDaemons/com.oracle.java.Helper-Tool.plist
念のため確認しておきます。
$ sudo launchctl list | grep -i oracle
何も表示されなければOK。unloadでエラーになるとかで、上のコマンドの結果が空にならないなら、以下のplist削除をしてからマシンの再起動です。

というわけで、これらの起動用plistは削除しておきましょう。
$ sudo rm /Library/LaunchDaemons/com.oracle.java.JavaUpdateHelper.plist
$ sudo rm /Library/LaunchAgents/com.oracle.java.Java-Updater.plist
場合によっては他にもOracle関係のplistが散らばっているかもしれないので、/Library/LaunchDaemons/com.oracle.* や /Library/LaunchAgents/com.oracle.* をみて、あれば消去しておきます。

あと、Helper-Toolの設定plistがあるので、それを消します。
$ sudo rm /Library/Preferences/com.oracle.java.Helper-Tool.plist
また、自分のhome以下にもoracle関係がいろいろ置かれているかもしれません。~/Library/LaunchAgents/com.oracle.* を調べて、あれば消します。

~/Library 以下には、JavaやOracleというディレクトリがあるかもしれませんので、あればそれらもrm -rして消してしまいます。

次に、「システム環境設定」のJavaの項目を消去します。
$ sudo rm -r /Library/PreferencePanes/JavaControlPanel.prefPane
これで「システム環境設定」を起動すると、Java項目が消えているのが確認できるはず。

次に、Oracle版のjavawsが/Libary/Application Support以下に置かれているので、それを消します。
$ sudo rm -r /Library/Application\ Support/Oracle
自分のhome以下のLibrary/Application Support以下にもJavaやOracleがありますので、消します。
$ rm -r ~/Library/Application\ Support/{Java,Oracle}
これでようやく、Oracleの「アンインストール方法」に書かれている作業をして、キレイにおさらばです。でも、自動アップデートしなくてもいいからいまのJava環境をとっておきたければ、以下のコマンドライン引数のディレクトリ下にあるHome以下をどこかにコピーしておけば、環境変数JAVA_HOMEがそこを指すようにするだけで動きます。そのあたりの動きについては別のエントリで。
$ sudo rm -r /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
ひとまず片付きました。