2014年12月31日水曜日

「勉強のあかり」のLEDスタンド

8x8 スペクトルアナライザw

節電でシーリングライトを電球形蛍光灯一個に交換して生きてきましたが、どうにも手元が暗いのでパナソニックの「勉強のあかり」仕様LEDスタンドを買ってみました。スタンドの土台がデカいと邪魔なのでクランプ式、発光部分が小さいと影ができやすいので大きいのを選んだのですが…組み立ててみたら想像以上にデカかったw クランプと本体は分離できるので、先にクランプを机に取り付けるだけ。昔使ってたクランプ式は一体型で重心が上にあったので苦労したっけなぁ…。





このところ本が読みにくいし頭に入らなくて、まぁ老眼だし脳ミソもダメだからしょうがないなと思っていたのですが…このLEDスタンドだとやたら読みやすい。今までページ上のコントラストが低くて文字認識で精一杯だったのが、読みやすくなったことで学習とか記憶に脳ミソを回せるようになったのでせうかw

もちろんハンダ付け作業も楽。発光部分が横に長く拡散板を使っているので、いわゆる多重影ができないし、演色性も高いので透明ブレッドボードとスズメッキ線が見分けにくいとか、溶けたハンダがキラっと光る瞬間を見逃すこともない。

と、読書用作業用でも十分満足してたんですが、写真も何だかスッキリ写ります。やっぱ演色性って大事だな…としみじみ思う。

まぁ…Macの汚れもくっきり写っちゃっているんですけどね…。

2014年12月29日月曜日

Play javaでjson-simpleを使う

休み中にずっしり伸し掛かる課題

今お勉強を兼ねて、趣味でHeroku+Play+D3.jsでアプリを書いているのですが、プロジェクトにjson-simpleを組み込めなくてハマりました。

最初にplugins.sbtに
    addSbtPlugin("com.googlecode.json-simple" % "json-simple" % "1.1.1")
を追加して not found。次に同じくplugins.sbtの上記行の前に
    resolvers += "maven repository" at "http://central.maven.org/maven2/"
を追加してもダメ。URLを色々変えてもダメ。

一晩寝て、間違いに気がついた。plugins.sbtじゃなくてbuild.sbtのLibraryDependenciesに追加してみたら、ようやく動きました。

ちゃんと寝ないとダメよねorz

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs,
  "com.googlecode.json-simple" % "json-simple" % "1.1.1"
)

さて、あと2日出社して冬休みだ(1月6日まで…ジャンケンで負けて後半組)。

2014年12月5日金曜日

Play! Framework 2.0 -> 2.3

というわけで、担当プロジェクトはPlay! Framework 2.3(Java)を使うことに決まりました。どうせならScalaの方が良かったんですが、「社内リソースがない」ということで。そりゃそうだ。

で、自分の知識をScala->Javaに切り替えなければならないので、適当な記事を参考にひと通り学習しなおして見ることに。いやー…びっくりするほど忘れてた…。

記事はコレ。Play 2.0ベースで書かれています。手元の最新は2.3.4、1.2->2.0ほどではないものの、かなりの変更があって大変でした。連載開始2012年4月か…途中長い中断があって、待ち遠しかったのを覚えてます。


■EBean関連で右往左往■

ま、一言でいえば、コレです。中の人が「EBeanは開発止まってるから、やっぱ2.3からJPAに戻るわw」と言ったとか。

しかし記事はEBean前提だし、とりあえず「EBeanかJPAか」を自分なりに評価しないといかんので、とりあえずPlay 2.3でEBeanを使ってみることにしました。

で、最初から記事にそってサンプルを動かしていくと、まず連載第1回の2/3で止まります。コマンドがplayからactivatorに変わったからです。playとタイプする代わりにactivatorとタイプし、メニューで表示されるテンプレートで「5) play-java」を選びます。


次のハマりポイントは連載第2回の1/3、Parent.java。念のため、ものすごく蛇足ですが、app/modelsというフォルダを自分で作り、その下にParent.javaを作る必要があります。

で、Parent.javaを保存して実行するとcom.avaje.ebean.validationがないというエラーが出ます。で、「com.avaje.ebean.validation not found」なんてキーワードでググると、
ってのがヒットします。でも

  1. project/Build.scalaではなくplugins.sbtに変わっている
  2. plugins.sbtに追加しても変わらない→activator runをやり直さないと反映されない
  3. 「"org.avaje.ebeanorm" % "avaje-ebeanorm-api" % "3.1.1"」を追加してactivator runするとエラー

です。結果からいえば、エラーの出る
    import com.avaje.ebean.validation.NotNull;
をコメントアウトして、替わりに
    import play.data.validation.*;
とします。さらに、@NotNullアノテーションを@Constraints.Requiredにします。これで先に進めます。


そして(2/3)でChild.javaを作りParent.javaを修正しますが、Child.javaでは例によって
    //  import com.avaje.ebean.validation.NotNull;
をコメントアウトして
    import play.data.validation.*;
に変更し、Parent.javaには
    import java.util.List;

    import java.util.ArrayList;
    import javax.persistence.CascadeType;
    import javax.persistence.OneToMany;
を追加する必要があります(上2行はEBeanとは関係ないですが)。これでブラウザをリフレッシュするとコンパイルエラーはなくなるはずですが、実行時エラーが出ます。


これは正常です…まだApplication.javaを書き換えていないので。(3/3)の指示にしたがってapp/controllers/Application.javaを書き換え、ブラウザをリフレッシュすると:


はい、出来上がりです。ここまでをPlay 2.0で試した時は確か小一時間ぐらいだったと思うんですが、今回は試行錯誤の山に阻まれて半日潰れました。いやはや。

この後PostgreSQLへの対応についての記述がありますが、そこだけ飛ばして連載の最後まで試しましたが、特に問題はなかったはずです。

■フレームワークを修得する場合■

なお、頭いいヒトはそんなことしなくても覚えられると思うのですが…私は本気でフレームワークを覚えるときには、記事を見なくてもチュートリアルと同じものが作れるようになるまでを第一段階としています。さすがにサンプルデータまでは再現しないですが、記事を見ないでうろ覚えで試している段階では当然ミスをします。ミスを修正するためには原因を調べなくてはならず、これが基本的な操作を修得する上で大変役に立ちます。

記事にはミスった時の対応まで書いてないことが多い(というよりも一度最後までサンプルプロジェクトを作ってうまくいくことを確認し、記事を書きながら再度新しく作ったりします)のですが、実際に使うようになって一番困るのはソコですし、どうしても分からない場合には記事を辿っていけるので「こういう現象が出た時の原因は、コレ」というのが比較的短期間で身につけられます。実際の開発で使うような大きなプロジェクトで環境設定に起因するエラーが出るとホント突き止めるのが大変ですからねぇ。

で、基本的な操作が身についていると、その後はAPIを虱潰しに調べていく際などにも推測が効くようになります。

これに気づいたのは、WebObjectsのセミナーで何度も「Movies」というサンプルを作った経験からです。自分はさすがにミスをしないのですが、受講生のみなさんのミスを潰しているうちに、自然にトラブルシューティングが身につきます。

当時は「朝のウォームアップ」と称して、さすがに毎日ではないですが、朝一で「Movies」を作っていました。当時は意識していませんでしたが、これが私にとってはGTDでいうところの「朝一に消化できるタスクを用意する」ことだったのかな、と思ったり。

まぁ、それに気づいたので、最近朝一に簡単なタスクを片付けるようにしてウォームアップしてます。

もっとも、それでせっかく上がった調子も、朝礼が長いとしぼみきってしまうんですけどね…ホント、何とかならんかな…。他の部署の連絡事項を聞いている時間があったら、スクラムミーティングの方が良いと思うの。

2014年12月3日水曜日

赤外線LED/受光素子発見@部品沼

他に電解コンデンサ,CDS,タクトスイッチ

Arduinoとセットになったパーツセットに入っていたはずで、部品沼のどこかに沈んでいるのは間違いない。

ちょっと時間ができたので本気で探したら…プリント基板箱の底に沈んでいました。まぁ買っても数百円なんだけど、使ってあげないと可哀相だし(その発想がすでに廃人)。

これで今週末はBBB+Lircで遊べる。

Bitnamiわからん:SVN->GITへの移行


おにぎりケース。コンビニのは塩辛いのでヨメに作ってもらってます

以前、Amazon EC2 Linuxにインストールした環境で試した時には、アトラシアンさんの記事通り特に問題なく終わりました(ありがとうございました)。

で、今回、同僚さんから「どうもうまくいかない」と相談を受けました。聞いてみるとBitnami / GitLabとのこと。上に「問題なく終わった」と書きましたけど、その前には私も簡単さに惹かれてBitnamiを使っていて、その時は結局Migrationがうまく行かなくて諦めたんですよね。

ということで、今回、MacのParalles上でCentOSを走らせて、そこで同僚氏のSVNリポジトリを吸い上げて変換することに。

■うまく行った方法■

例によって先に成功した方法を書きます。

参考になった記事はこれ「git-svnでSVN→Gitへの移行をやってみたログ」。こちらの環境はCentOS、事前にGitは同僚氏と同じ19.0.0に、Svnは同僚氏より新しい17.x.xにしました。yum install gitで入ってた18.x.xがなかなか消えてくれなくて苦労したのはまた別の話。

作業用ディレクトリを作り、その中で記事の通り:

git svn clone -s --prefix=svn/ https://<サーバ>/<リポジトリ>/<プロジェクト>

ここでテストの時間を短縮しようと<プロジェクト>に "trunk"より下の階層を指定してみましたが、ダメでした。かなり時間がかかりましたが、作業用ディレクトリの下にリポジトリの複製が出来上がりました。もしエラーで途中で止まってしまう場合の注意は元記事に書いてあります(ここでは言及しません)。

続いて記事同様:

git branch -r

で、ブランチができていることを確認します。なお、git tagを使ってもタグは一個もできていません。次にブランチを移行します。記事に書いてあるスクリプトをそのままコピペして実行します。

# svn/trunk, svn/tags/*, svn/*@xxx を除いたリモートブランチを checkout
for BRANCH_NAME in $(git branch -r | grep -ve 'svn/tags\|svn/trunk\|.*@\d*' | sed -e 's:svn/::'); do
    git checkout -b "$BRANCH_NAME" "svn/$BRANCH_NAME"
done;

# この時点でループの最後のブランチになっているので一応 master に戻しておく
git checkout master

記事より引用)。

viなどで上記テキストを checkout.sh のような名前のファイルとし、chmod +x checkout.shで実行可能にしてから ./checkout.sh で実行します。

続いて記事と同様

git remote add origin YOUR_GIT_REPOS_URL
git push -u origin --all

なのですが、その前に自分のhomeでリモートリポジトリのための鍵ペアを作り、リモートリポジトリに送ってやらなければなりません。

cd ~/.ssh
ssh-keygen -t rsa -C "mail@address"

ssh-keygenを実行するとパスフレーズを効いてきますが、省略します。また、ここで指定するメールアドレスは、リモートリポジトリのアカウントに使っているものを使います。

そうすると id_rsa と id_rsa.pub という2つのファイルが出来ます。このうち、id_rsaは秘密鍵なのでそのまま大切にしまっておきます。id_rsa.pubは英数字などから構成されるテキストファイルですが、これをコピペして、GitHubやGitLabのアカウント情報のProfile / SSH Keysに登録してやります。

話は戻って、git remoteなんたらを実行してもすぐにプロンプトに戻って来ます。ここで焦ってはいけません(私はいつも「あ、失敗した?」って焦ってしまうorz)。続く git push が本体です。しばらくしたら、例によって記事に書いてある通りに「タグの移行」を実行して作業のために付けた /svn/ プリフィックスを取ります。記事のスクリプト

for TAG_NAME in $(git branch -r | grep -e 'svn/tags' | grep -ve '.*@\d*' | sed -e 's:svn/tags/::'); do
    git tag "$TAG_NAME" "svn/tags/$TAG_NAME"
done
記事より引用)。

を gittag.sh てな名前のテキストファイルにして実行権限を付けて(chmod +x gittag.sh)から実行(./gittag.sh)。最後に記事の通り:

git push origin --tags

これでリモートに終了後にリモートリポジトリを見るとめでたく移行が済んでいました。めでたしめでたし。

■失敗編■

当初、リモートのリソースが逼迫してたこともあって、

  1. ローカルにもSVN / GITを立てる。
  2. リモートのSVNからsvndumpしてローカルにコピーし、svnadmin load
  3. ローカルでSVNからGITに変換
  4. リモートGITにpush

…と思っていたのですが、何せデータが数十GBもあるためにdumpで挫折。

こんな面倒くさい方法を使ったのは、前回Bitnami環境でgit-svnがうまくいかなかったせいなのですが…念のため正攻法の git svn clone を試してみたら、動いてしまいました。

当たり前といえば当たり前なんですが…あつものに懲りてなますを吹くのはいけない、というお話でした。

■余談な失敗■

この記事冒頭のおにぎりケース、どこかに書いたけど「食洗機可」と書いてあることを確認して買ってきたのに、開けてみたらオカズとオニギリを仕切るゴムシートに「食洗機使わないでね♡」と書いてあった。詐欺だよな。でも梱包捨てちゃって返品できないし、ってんで外装だけ使ってます。おかず持っていくのも面倒くさいしね。

生協の味噌汁とご飯120gのヨメ製オニギリが最近の昼食、オヤツはソイ20g+Whey20gのプロテインっす。押忍。

2014年11月30日日曜日

小ねた

ウォーキング用ライト、自分で使ってみた。

小さなじわじわネタってことで最初「小じわ」にしたんだけど、とある年齢層の女性から不評を買いそうなので改題。

■Arduinoデジタル時計改良■

「夜中は時計なんか気にしないで寝ろ」ってことで、23-4時まではLEDの輝度を1/10に下げて時計と温度の表示も時計2秒+温度1秒の繰り返しに変更。

高齢者たる私は夜中にふと目覚めた時に時計を見て「ああ2時か。もうひと寝入りしよう」と考えただけで目が覚めてしまうので、「時計を見る→暗い→寝直す」というフローにすれば改善するのではないかと。

■リチウムポリマーバッテリーの端子を固定■

某デバイスのリチウムポリマーバッテリー端子は1.27mmしか離れておらず、もし断線してショートしようものなら大炎上を免れない。ソレが怖くて今までまじめに使っていなかったんだけど…大掃除の準備をしていたらホットグルーガンが出てきたので、早速端子を固めてみた。まぁ絶対大丈夫ってことはないけれど、とりあえず取り回し→金属疲労→断線→短絡→炎上…という路線は防げるかな。

しかし、まだ、使い道を思いつかない。組み込まれているファームが条件設定などのできない単なるBLE中継ソフトで、例えば「離れたらLEDを点灯する」という当初目論んでいた処理に使えないため。ファームを消して「リチウムポリマーバッテリー付属切手サイズのnRFボード」として使おうにも端子が小さすぎて私には無理orz

さて、どうしたもんか。

■乱視用時計を再設計■

以前も書きましたが、私は「プロトタイプが機能を満たしてしまうと、そのまま使い続けてしまって製品化(笑)へ進まない」という悪癖がありまして。

乱視用時計もその1つなんですが…さすがに年が開けてしまうのはイカンと思うので、プリント基板の設計始めました。いやー、部品ライブラリが揃っているとEagleってホント快適に作業が進みますw まぁ「コマンドを選んでから操作する」というイカニモCADっていうUIへの違和感は未だ消えないのですが、とりあえず慣れた。

このまま1週間ほど寝かせておいて、来週あたりElecrowに発注しようと思います。

■読書灯ボードの変更■

ボードを設計した時、「LEDを2セットつなげられれば、電球色と昼白色LEDを組み合わせて色温度を調節できるな」と考えていたんですが、結局昼白色しか使ってません。本が読みやすいので。

ただ、よーく考えたら3本あればRGBが可能になり色の調整がものすごく幅広くなります。

ということでドライブをもう1系統増やそう…と思ったのですが:


…見事に隙間がありません。前回発注したボードはスカスカだったんですが、その後、RTCとバックアップ用の電池スペースを追加したもんで。左上のスペースはバッテリ、右下はDCジャック用です。RTCとDCジャックは秋月の変換基板対応。RTCはSMDチップが小さすぎてハンダ付けする自信ないっす。

となれば、あとはDCジャックを何とかしないといけないですね。先日、「電子工作部」で普通の丸穴で使えるDCジャックを教えていただいたので、ソレを手に入れて何とかしないと。

というわけで、今度はこれが先送りの言い訳に…あああああ。

少しはアンジェリカたんの豪腕っぷりを見習わないといかん。

楽園追放、面白かった。

いや、無理だけど。

2014年11月28日金曜日

転職して二ヶ月経過

ようやく落ち着いてきたので、ぼちぼちブログ再開します。

とりあえず、やりたいことが溜まりすぎてどこから手を付けて良いのかわからないですが、何よりも先に部品沼の整理と某Salesforce Chatter対応アプリのSwift版を早いとこリリースしないと。

タイムテーブル的には、審査があるから先にiPhoneアプリを仕上げて、それから部品沼かな。

そんなこんなで、よろしくお願いします。

2014年10月26日日曜日

読書灯:ミスった 組み立てた 動いた

しかし、デカいな>28pin 600mil幅

先日オーダーした基板、設計のミスで一部のグラウンドが配線されておりませんでした。部品をハンダ付けした後のチェックで発覚。三端子レギュレータから電圧出てなくて調べてみたら三端子は正常、外部センサー用のGNDが宙ぶらりんになっていました。

うーん、GNDクラスに設定してあるし、チェックでもエラー出なかったんですが…とEagleの自動配線頼りきりなのがバレバレな話。ジャンパ一本で済む話ですが、良い教訓になりました…。

元はこんな状態(この他にCL6807用のサブ基盤)だったのですが、だいぶすっきりしました。
下にあるのは「カンパチ」

ブレッドボード上でいろいろ改良していこうと思って作ったものなんですが、一発目でかなりいい感じに動いてしまい、いつもの「動いてるんだから、いーんじゃねーのーw」病が出てしまいました。UIとしてPIRと距離センサを付けて、当初シリーズの定電流回路だったものをCL6807に変えたりはしましたが。

さて、「製品」が出来上がればブレッドボードはお役御免です。どうもモノに思い入れしてしまうタチなので、バラす前につい手を合わせてしまったり。

短い間だったけど、お疲れ様。


余談ですが、一度使った抵抗、1個1円なので、作業に要する時間を考えたら捨てた方が効率良いのはわかってます。でも、もったいなよね。


2014年10月25日土曜日

ホームリフロー:3度目の正直で大成功!

アルミ基板にチップLED 3種。

■追記(2015/12/30)■

サンハヤトの「表面実装部品取り付けキット SMX-21」を使うともっとラクです。

■準備■

冷凍庫に入れておいたハンダクリームを出しておく。買ってから半年ぐらいになるので、いろいろ実験的な意味で冷凍してみた。結果として元々良質なハンダというわけではなかったので特に違いは感じられなかったw

■ハンダクリームを塗る■

これまでマチ針を使っていたのですが、作業性が悪いというか何十回も試してたまたま乗るというレベル。どうしようかと日々悩んでいましたが「ハルロック2巻」を読んでいたらマイナスドライバーらしきもので塗っているシーンがあり、「ユーレカ!」と叫びつつ全裸で家を飛び出した次第です(※精神的な意味で)。

ハルロック2巻 p170(c 西餅/講談社)

というわけで、幅4mmほどのどこにでもあるマイナスドライバーで使ってみたところうまくいきました。コツとしては左官屋さんが漆喰を伸ばすようにドライバーを寝かせ気味にして押し付けるというか擦り付けるという感じ。これまた左官屋さんがコテをコテ板の上の漆喰を伸ばしたりまとめたりするようにしてハンダクリームの調子を整えると乗せやすいです。塗り上がりはこんな感じ。先日届いた基板です。

ご覧のようにはみ出しまくりですが気にしない。


これにCL6807を乗せますが、ランドが隠れてしまったので位置がわからないw でもパターンの延長線上にあるのは間違いないので、まぁ誤差0.5mmぐらいの感じで置いていきます。

あとはレジストと表面張力を信じて。


■リフロー■

ホットプレートに基板を置いて、放射温度計でホットプレート表面が180-200度前後になるように保ち、基板表面が180度になったところから2分間測ります。途中で灰色だったクリームがいい感じに溶けてきます。2分たったところでホットプレートの温度をあげて、ホットプレートが270度ぐらいになるようにスイッチを調整し、基板が230度を越えたあたりでスイッチを切り、あとは250度を超えないように祈りながら30-60秒間230度以上をキープします。あとは冷ましてできあがり。

下の右側中央ピンは手ハンダで補正したので少し汚いorz

…これ書いてて気づいたですが、ホットプレート上は周辺にあるヒーター直上部と中心部は25%ぐらい温度差があります。いつも中心の低目のところにおいていたのですが、周辺部においておいて、基板が250度に達したら中央部で涼んでもらう、という手がありましたねぇ。忘れないようにしなくては←忘れるフラグ

なお、上の赤いガラスエポキシ基板の後に、秋月のアルミ基板もリフローしてみたのですが(一番上の写真)、小さなアルミ基板の右端と左端で15度ぐらいの温度差がありました。もっと熱伝導率が良いと思っていたのですが、意外です。

■検査の結果■

ガラスエポキシ基板の方は1箇所だけ浮き気味でした。ハンダクリームが少なかったのだと思います。導通は問題ないのですが、放熱ピンなので手ハンダで修正しました。

一方、アルミ基板については、その経験を受けて少し多めに乗せたので、問題ありません。盛りすぎたような気もしますがw LEDの電極と基板のパターンがずれないか心配だったのですが、表面張力補正が効いたのか問題ありませんでした。

■今後■

こうやってみると、やっぱりホットプレートは熱慣性が大きくて温度制御が大変です。

ただし「できるだけお金をかけないで、最低限の加工ができるラインを見極める」というのが当初の目的でした。特にステンシルが必須なのかどうかと、消費期限が一ヶ月しか無いサンハヤトのハンダクリームでなければダメなのかを確認したかったのですが、今回これら2点がクリアできました。

現状の「基本1品もので表面実装する部品もせいぜい数個」という状態ならば、ステンシルなしでハンダ付けと同等の作業時間で処理できます。

そんなわけで…次に買うとしたらリフロー炉かなぁ。

オーブントースター改造? 私、金属加工が苦手なんです。

ではでは。

2014年10月21日火曜日

Elecrowからプリント基板が届いた!


9月末に発注したけどガーバーデータに誤りがあったので、一度ストップ。そしたら中国の祝日に引っかかってしまって発送は10月8日。14日に日本に届いて、今日配達されました(遅いな、日本国内)。
包装は外から紙、プチプチ、シュリンク包装

ところどころパターンが無駄に曲がっているのは私がEagleで手を抜いたせい。ベタアース作らなかったので妙にすっきりしてる^ ^;

ハンダメッキも美しいw

それにしても画面上に実寸大で表示したよりもでかく感じるなぁ。わかっちゃいるけど、LPC1114FN28でけえw



さぁ週末が楽しみだ。

それにしても10枚頼んで約2000円。ヘタすると秋月のユニバーサル基板より安いw …とか書いてしまったけど、一桁違うな。すいません、ハイになりすぎましたm(_ _)m

Play! + Scala + Eclipseで落とし穴

お久しぶりでございます。

私自身初心者なのですが、会社でPlay! + Scalaの入門教材を作っております。そしたら見事に自分が落とし穴に落ちました。

Actionでよく出てくるこれ:

    Ok(views.index.html("Message")) {}

今までエディタを使ってましたが、「なるべくハードルを低くしよう」とEclipse+Pluginで試していたら…「views.indexにhtmlなんてねえよ」というエラーが消えない。いろいろインポートしたりしても消えない。頭を抱えつつStack Overflowで検索してみたら。

「Eclipseの間違いだから、気にすんな」とのこと。

ブラウザをリフレッシュしたら、動いたです。

これで小一時間潰したのは残念すぎるorz

あ、あと、コマンドがplayじゃなくてactivatorになったんですね。playのダウンロードページをクリックしたつもりが変なところに飛ぶので何が起こったのかと思いました。はい。

2014年9月20日土曜日

Beaglebone Black Rev.CをMacOS Xでリカバリ


■うっかり■

SDカード上にubuntuを入れていじってみよう、と思ったら間違えてeMMC Flasherを選んでしまったために、今までBeaglebone上で作っていたものが全部消えてしまいました。

まぁ大したものは入っていなかったのですが、初めてnode.jsで書いた「7セグメントLED時計(ちらつきまくり)」のソースなども消えてしまったので、ちょっと悲しい。

ということでリカバリーまでの約2日間のドタバタを記録しておきます。

■その前にうまく行った方法を■

ウダウダと試行錯誤を書いて、最後に「これでうまく行きました」というのは不便なので、最初に出荷当時の状態に戻す方法を書いて起きます。

-Latest Firmware Imagesを落とす。
ここから。http://beagleboard.org/latest-images
BeagleBone Black (eMMC flasher)
Debian (BeagleBone Black - 2GB eMMC) 2014-05-14
※日付などは変わっている可能性もありますが、eMMC flasherの下のDebian BBB用をダウンロードします。時間帯によってはダウンロードに2時間かかったりするので、お出かけ前などにどうぞ。ダウンロードしたら解凍しますが、xzコマンドは標準では入っていないし、面倒なのでThe Unarchiverを使います。

-SDカードに焼く
イメージをSDカードに焼くにはPi Fillerがよく使われるのですが、上のimageはPi Fillerではダメでした(焼くことはできても、BBBに入れてUser Boot起動できない)。

なのでコマンドラインで焼きます。ターミナル.appを起動しSDをセットして
diskutil list
▶これでSDのドライブ名が出てきます。つながってるドライブ全部出てきますが、容量などを参考に判断してください。うちは /dev/disk4 でした。もしマウントされている場合には以下のコマンドでunmoutします。
sudo diskutil unmountDisk /dev/disk4
▶Unmount of all volumes on disk4 was successfulと表示が出ればOKです。では、焼きます。
sudo dd if=BBB-eMMC-flasher-debian-7.5-2014-05-14-2gb.img of=/dev/disk4
▶時計見ていなかったのですが30-60分くらいで終わります。ActiviyMonitorでディスク読み書きを表示させておくと、終わればI/Oが急に落ちるのでわかりやすいですw

-eMMCへのインストール
では、micro SDを取り出してshutdownして通電していないBBBにセットし、user bootスイッチを押したままUSBや電源アダプタを接続します。しばらく押したままにして、Ether近くのLEDが「ナイトライダー状態」(光の点滅が左右に走る)になったらスイッチを離します。

あとはそのまま放置で、朝起きたら電源が落ちて終わっていました。micro SDを抜いてから電源を入れなおすとちゃんと立ち上がりました。

ログインは ssh root@192.168.7.2 です。

■追記:2015-05-09■

内蔵eMMCではなくSDカードにインストールした場合(Flasherでないimageを使います)、以下のコマンドで空きパーティションの容量を使うことができるようになります。
cd /opt/scripts/tools
git pull
./grow_partition.sh
sudo reboot

■設定など■

出荷時と少し変わっているのか、dateで見ると日付設定されていました。買った時には電源入れるたびに設定しなおしが必要だったのですがw もし設定されてない場合は
ntpdate -b -s -u pool.ntp.org
以下のページを参考にしました。なお、ここはBBBに関する宝の山なので、ブックマークしておきましょう:-)
http://derekmolloy.ie/automatically-setting-the-beaglebone-black-time-using-ntp/

あとはいろいろ細かい設定ですが、私はとりあえずheartbeatがウザいので消します。
echo none > /sys/class/leds/beaglebone:green:usr0/trigger
アップデートとアップグレード
apt-get update
apt-get upgrade
ロケール設定、以下のコマンドからAsia/Tokyoを選んでください。
dpkg-reconfigure tzdata
などなど。

Cloud9も http://192.168.7.2:3000/ でちゃんと見えます。良かった良かった。

■ubuntu+cloud9失敗の記■

注意:以下の操作をすると eMMC(内蔵flash)の中身がきれいサッパリ消えます。その点、理解した上で、試してみてください。

-imageのダウンロード
これを使いました。

https://rcn-ee.net/deb/flasher/trusty/BBB-eMMC-flasher-ubuntu-14.04-console-armhf-2014-07-06-2gb.img.xz
例によってThe Unarchiverでxz形式を解凍し、img形式とします。

-SDカードへ
前記と同様の手順でSDカードに焼きます。

-BBBにインストール
前記と同じ手順です。BBBの電源を落としてからSDカードをセットし、user bootスイッチを押しながら電源を入れ、光が左右に流れたらスイッチを離ししばらく放置します。点滅が終わったら、インストール完了です。SD抜いて電源を入れ直します。id=ubuntu, pw=temppwdでログインできます。macのターミナルからだと
ssh ubuntu@192.168.7.2

-うざいHeartbeatが消えない
ubuntuでは
echo none > /sys/class/leds/beaglebone:green:usr0/trigger
とやっても消えません。以下のコマンドでどぞ。
echo none | sudo tee /sys/class/leds/beaglebone\:green\:usr0/trigger 
あとはlocaleの設定やupdate/upgradeなどのお約束。

ここまでは問題ありません。

-Cloud9が起動しない
この辺を参考にして、Python, Node.js, Cloud9をインストールしたのですが、IDEは起動できても実行できなかったりCloud9が落ちたりでダメでした。

・PythonとNode.jsのインストール
apt-get install python
apt-get install build-essential

・Cloud9のインストールと起動
git clone https://github.com/ajaxorg/cloud9.git
cd cloud9
npm install
bin/cloud9.sh -l 0.0.0.0
とりあえずCloud9を動かすのが目的というわけではないので、今回はこれ異常の追求はできません…いつかまた…。

2014年9月18日木曜日

iCloudからGoogle Docsへスプレッドシートを移す(ローテク編)

部品在庫リストw

iCloud上にあるスプレッドシートを開こうとしたら、「iCloudDrive.comへアップグレードしろ。アップグレードするとYosemiteかiOS8じゃないと使えなくなるけどなww」ってお知らせが来ていました。Webは使えますが。

私は自他ともに認める林檎依存症ですが、アップルのこういうところは大嫌い。

というわけで、まだそれほど数も多くないので、さっさとGoogle Docsへ戻ることにしましたが…Web版のNumbersからだとNumbers形式でしかダウンロードできないようで、Google Docsでは読み込めません。

慌てず騒がず

  1. Numbers上の表をコピーする
  2. Google DocsのSpread Sheet上にペーストする
で、移し替えました。数式も書式もコピーされないですが、私はデータ入力用としてしか使っていなかったので問題ありません。

2014年9月17日水曜日

HRM1017でANCS


HRM1017、買った後でGPIOの電流容量が0.5mAしかないと知り、さてどう使ったものか…と考えたままと止まってましたが、使わないのはもっと勿体無いので、とりあえずサンプル動かしたみました。

参考にしたというか丸っきり書いてあることをなぞったのは以下のページ。


ここのページのサンプル「ANCS」を試します。

MacとHRM1017をmini USBで接続し、「BLE_ANCS_SDAPI_IRC」のところにある「import program」をクリックし、mbedのオンラインIDEにインポートします。その際にdeviceとしてNordic nRF51822を選びます。HRM1017も使用可能になっているのですが、このサンプルではdevice.hが見つからない、と言われます。

あとは、サンプルに書いてある通り。iPhoneに着信するとターミナルにメッセージがバラバラ…っと出てきます。めでたしめでたし。

なお、MacでUSBシリアルと通信するには、ターミナル.appを起動し
screen /dev/tty.usbmodem***** 9600
とタイプします。*****のところには5桁ぐらいの数字が入ります。その数字を見つけるには、まずHRM1017を接続していない状態で ls /dev/tty.usb* で一覧表示し、次に接続してからもう一度同じコマンドを繰り返します(カーソルキー上向き↑、returnで繰り返せます)。そこで、接続前と違うポートが出てきたら、それがアナタのHRM1017。

…通常は1つしか出ないですよね。うちはArduinoデジタル時計その他をつないだままなので、バラバラ出てくるのですw

ではでは。

2014年9月16日火曜日

ホームリフロー:放射温度計を使って2回目の挑戦

というわけで、ホームリフローに再挑戦。

前回は、安ホットプレートの温度目盛を信用したら予熱で基板が溶けるという恐ろしい事態に至りました。

6月1日。焦げというか焼死体

で、放射温度計を注文したのですが、いろいろあって入手できたのが8月。でも糞暑い中ベランダで作業するのはイヤなので、ようやく今日になって2回目と相成った次第です。

試すのは、基板もチップもわりと在庫が潤沢で価格も安いNJM11100基板。今度は1608のチップコンデンサも付けます。

作業を始める前に、冷蔵庫からクリームハンダを取り出して常温に戻します。待っている間にホットプレートに何もおかないでスイッチを入れ、どんな感じで温度が上がるか放射温度計を使って様子を見ます。すると160度でも場所によっては軽く250度を越えていく始末。そりゃ焦げるわ。しばらくスイッチを入れたり切ったりして上昇具合を確かめますが、かなり遅れがあり場所による温度差も大きいので、人間インバータとなってこまめにon/offを繰り返さないと温度プロファイルを守るのは難しそうです。ふと「電子立国日本の自叙伝」でゲルマニウム結晶を作るエピソードを思い出しました。

で、基板にハンダを塗ろうとするのですが…何だか前回よりも乾いて固くなっていて、前回よりも更に塗りにくくなっています。もう寿命なんだろうか…。でも、とりあえずICの足に絡めるように塗って、チップコンデンサについてはピンセットで挟むようにして何とか塗りました。明らかに多すぎですが、まぁ試してみるさ。

で、冷めたホットプレートの上に基板を乗せます。


スイッチを入れ、まず130度までそのまま放置、あとはこまめにon/offしながら基板周辺が150度になるよう調整します。

…150度になるとフラックスが溶け始める、とのことですが全然その気配がありませんorz

ので、またスイッチをon/offしながらゆっくり温度をあげていくと、200度を越えたあたりでハンダが光り始めました。220度を越えたところでスイッチを切ると22秒で245度まであがり、そこからブロワで風を送って冷やしたのですが、なかなか温度は下がらず結局1分以上220度を越えてしまいました。大丈夫だろうか。

で、出来上がりがこちら。



はい、コンデンサは見事にイモハンダ、ICは見事に不均衡で見事にブリッジしてますorz

というわけで、リフローに塗り過ぎはいかんという当然の教訓を得て二回目を終えました。後はハンダゴテで直します。直すのに結構苦労しました…そんなら最初からハンダ付けすりゃいいんじゃね?は禁句ですorz



…拡大してみるとコンデンサのイモハンダが直ってないorz

…とりあえず当面のテーマである「あまりお金をかけずにホームリフローを試してみる」という目的は達成できた、ということにします。ホットプレート+クリームハンダ+放射温度計で5-6千円でした。

ということで、次はサンハヤトのキット(接着剤とクリーム半田、それぞれが注射器に入っているヤツ)を試します。どこか店頭で買えれば良いんだけど通販のみ、しかも消費期限が1ヶ月しかないので、なかなかタイミングが難しいです。

2014年9月15日月曜日

自作補聴器への道

■口上■

とりあえず、技術者のハシクレとして、補聴器を作ってみたい。もちろん、親指の頭ぐらいのサイズに15chの適応型デジタルフィルタによるコンプレッサを搭載して米粒みたいな電池で140時間駆動、なんてのは絶対無理す。

なので、サイズと消費電力はとりあえず度外視し、また人の声を強調したり複数のマイクを使って話者以外の方向から来るノイズや風の音をカットする、なんて機能は原理知ってても実装するのに100年ぐらいかかりそうなので保留。

とりあえず「クラシックと落語を快適かつできるだけいい音で聞ける電池駆動補聴器」という路線を目指します。

■とりあえず■

デジタル信号処理についての原理ぐらいは知らないといけない、ってんで、雑誌の特集を読みあさったり、「やる夫で学ぶディジタル信号処理」を少しずつ読んだりしてみたのですが…数学以前のところで止まっている私の脳みそには難しすぎました…。

昔から、とりあえず動かしてみて、動かない時だけ何故動かないか考える、という生き方をしてきたので、先に理論を学ぼうとしてもダメでした。

というわけで、目次など吟味して選んだのがこの一冊


実はPICは苦手というか昔CPUのバグで物凄い回り道をさせられた経験などからあまり好きではなく、最近までMacOSXで開発環境使えなかったので、この本のことは大分前から知りつつも買っていませんでした。

でも、いきなりBlackfinなどに手を出してコケるよりも基板付きで3240円ならキズも少ないし、知らないジャンルに手をだす場合には動くサンプルからスタートして少しずつ改良していく方が理解しやすいので、ともかく買ってみました。

まだ基板は綴じ込んだまま読んでいるだけですが、あまり数式が出てこないので大変わかりやすいです(ああ自分で書いてて情けない)。フーリエ変換が何で動くのか、ようやく心の底から理解できたような気がするw

そんなこんなで、まだフィルタ1つ作っていないのですが…始めました。

2014年9月13日土曜日

MetaWare : iBeacon

当初動いていたMetaWareのiBeacon機能を先日試したらまた動かなくなってしまいまして。アップデータ入れたせいかな…そのうち何か知らせが来るだろう、と放置してました。

が、今、何気なくiBeacon検出アプリを立ち上げてみたら、いきなりRange:Nearと表示されました。あれ、アプリックスのやつ電池入れっぱなしだったかな?と思いつつ、MetaWareにiPhoneを近づけてみたらRange:immediateに。

原因わかりました。MetaWare制御アプリとconnectしている最中はiBeacon止まってるんですね…。そういうもんなのでしょうか。


…「写真もう少し大きい方が見栄え良いんじゃない?」と言われたのですが、拡大してみたら埃が物凄いのでやめてましたorz

2014年9月12日金曜日

Chilkat Softwareさんのftp2ライブラリ for iOS objective-c

まぁ、いろいろあって、iPad用に急遽日本語エンコーディングを明示的に指定できるライブラリが必要になった次第です。

以前から目をつけていたのはChilkat Softwareさんのライブラリ。まぁ通信系のライブラリを探していてこのバナーを見たことのあるヒトは少なくないのでは。


当該プロジェクトでも当初コレを使おうと提案していたのですが、当時はsftpを使う予定でSecureな部分が輸出規制にひっかかるためボツになったという経緯がありました。

で、今回背に腹は変えられず、ともかく動作確認のためのプロジェクトを作ってみました。

■評価版ライセンス■

static libraryの形で配布されており、30日間、シミュレータ上でだけ動作させることができます。

このページからダウンロードリファレンスなどへ飛べます。とりあえずはリファレンスObjective-C FTP Examplesのページを見るのが一番手っ取り早いと思います。

■リファレンスをざっと見る■

よくある通信系ライブラリと同様、まず処理のためのインスタンスを作り、そこにメッセージを送っていくというタイプです。Propertiesを眺めていくと、ftpってこんなに色々あるんかいwってぐらい機能が沢山あります。

今回問題になったencodingに関しても、CommandCharsetとDirListCharset propertyがあります。ディレクトリ作成などに作用するCommandCharsetにansi, SJIS, UTF8などを代入すれば、FEATでサーバと相談した上で適切なエンコーディングを実施してくれます。lsでディレクトリを取ってくる場合のencodingはDirListCharsetを使います。

ftp.CommandCharset = @"SJIS";
ftp.DirListCharset = @"SJIS";
NSString *xml = [ftp GetXmlDirListing:@"*.jpg"];
if  (xml == nil) {
    // エラー処理
}

って感じです。ディレクト作成やget/putなどに関しては、予めカレントディレクトリを設定してから操作することも、フルパスで指定することもできます。今回は同期しか試しませんでしたが、非同期も用意されています(何でもかんでも非同期にしてしまうのではなく、getfile/putfileが対象…かな? AcyncGetFileStart/AsyncPutFileStart)。

■動かして見る■

例によってロクにドキュメントも読ますに、「ダウンロードしてきたライブラリをプロジェクトにドラッグ&ドロップすりゃ動くだろw」とやっていたら案の定ハマりました。

上のライセンス条項に「シミュレータ上でだけ」とあります。つまり評価版として使えるのはi386 static libraryだけなのでプロジェクトにドラッグ&ドロップするのは「cpp_include」「include」「lib/i386」だけにします。TARGETS > Build Settings > Architectures > Valid Architecturesには「i386」だけ設定します。

なお、プロジェクトへのライブラリのドラッグ&ドロップで試行錯誤してたら、Linkerへのpathにゴミが溜まってwarningの嵐になったりしますのでご注意を。ライブラリを一旦削除してもpathの設定がそのまま残っちゃうんですよね。

今回評価目的だったので使いませんでしたが、ダウンロードしたファイルには各バイナリ向けを1つに束ねたunivarsal static libraryにするためのshスクリプトも付属しています(リンク先の5)。コマンドライン一発でエラーもでません。

【追記】その他、c++を通すための設定が必要なのですが、サポートページにも書いてあるようにダミーのcppクラスを追加するのが一番手っ取り早いです。File▶New...▶File...▶iOS/C and C++▶C++ Classあとは「DummyClassForChilkat」など適当な名前を付けて保存します。

あとはコードを書いて動かすだけ。API名やエラー戻り値もすっきりしていて、サクサク書けます。余談ですが、API名に美しい規則性と論理性があると書いてて指が止まらないよね。好きなライブラリです。

今のところ私が個人でこのライブラリを使う予定はないのですが、何か通信系の案件が立ち上がったら真っ先にこれ使います。

ちゃんとしたftpサーバが相手なら、AppleのSimpleFTPSampleでも使われているCFFTPStream系でも用が足りるんですけどね…。あー疲れた。MetaWareとかで遊んで疲れを癒やしたい。

MetaWareをJack-inする電脳たれぱんだ

■余談ですが■

今週の水曜日が最終出社日だったんですが、本番サーバでのエンコーディング問題が発覚したのが先週木曜日。それから怒涛の日々だった。水曜日の午後から退職前の有給休暇消化期間だったけど、「それなに?美味しいの?」状態。PMのYさんがいい人なので、とりあえず今週は無報酬でお手伝いするって伝えたんですが…しんどかった。

ちなみに会社都合で有給休暇を取り消して作業させた場合には、休日出勤とみなされて6割増し以上の賃金を支払う義務があるんですよね(苦笑)。

2014年8月18日月曜日

@autoreleasepool { }

久しぶりのiOSネタ。

ALAssetから引っ張ってきたPNG(スクリーンショット)画像をUIImageViewに表示して、これをボタンで高速でめくっていくと「メモリ足りない」って落ちる現象に遭遇。

ゆっくりページめくりしている時は大丈夫。

【ALAssetからdefaultRepresentationを取得し、その後UIImageに変換してUIImageViewにセットする】だけの簡単な処理だけど、高速でめくるとreleaseする前に次の画像を取ってきてしまうので落ちる。落ちる前に手を止めると、メモリのグラフがガタガタと下がっていく。

一瞬、「めくる速度を制限しようか」という悪魔の声が聞こえたけど、それは最後の手段として取っておくことにした。

でも、__weak試したりnil代入しても状況は変わらない。

最終的には上記【】の処理を@autoreleasepool {}で囲って強制的に掃除したらスクリプトで超高速めくりを実行してもメモリサイズは安定したままで落ちなくなった。

いやはや。

それにしても、どうしてこういう問題は、定時で帰る5分前に発生するのでしょうか。15分ぐらいで解決できたから良いんだけど。

2014年8月10日日曜日

CL6807 LEDドライブ

SOT-23-6が私のハンダ付けの限界@老眼的な意味で

はい、秋月で売っているアレです。

チップ製造元の推奨回路そのものなので面白くも何ともないのですが、以前150円のミニブレッドボードで組んだものをユニバーサルボードで作りなおしました。Rsは1Ω、100mAの定電流回路です。

安ブレッドボードはお手軽でよく使うのですが、どーやっても計算通りの数値が出ませんでした。調べた結果、ブレッドボードの接触抵抗が最大2Ωぐらいあってふらふらと変動していました。そのぐらいの変動は低速のデジタル回路で使う分には問題ないのですが、0.2-1.0Ωの電流検出抵抗を使う回路では大問題です。

CL6807はそれきりで、しばらくもっとお手軽(LM317と同じ考え方)に電流を設定できるNJM11100による定電流回路をいじっていたのですが…安定化電源チップのNJM11100はPWMを前提としていないため低デューティー比領域での制御性が悪くて、LED読書灯として使っていると「ふーっと消えていく」あたりがガタガタしてどうにも美しくありません。

ということで、改めてCL6807でちゃんと組み直してみた次第。私にしては珍しく配線ミスもなく一発で動作しました。ブレッドボード版ではジャンパ線に触ると電圧出力がふらついて使い勝手が悪かったのですが、今度はしっかり配線したので大丈夫です。

次は制御ソフトをもうちょっと何とかしたい。一応低消費電力化やUIを改善したRTOS対応版のコーディングは終わっているのですが、読書灯として使っている配線を外して机まで持ってくるのが面倒で着手できません。

夏休み終了間際にならないと宿題に着手しない病は一生治らないのだろうか…。

2014年8月8日金曜日

MSP430 LauchPad + I2c液晶 + RTC + 3軸加速度センサ



どうもI2Cとは相性が悪いというか、今まで一発で動いたことがありません。今回も散々苦労しました。

・I2Cの信号が出ていない?▶オシロの設定間違い
・I2Cのクロック波形が鈍りすぎ▶プルアップを10kから1kへ
・念のためアドレスを左右にシフトしてみた▶ダメ
・念のため液晶変えてみた▶動いたorz

最近の部品は強いんですが、やっぱり壊れるときは壊れます。しばらく行方不明になっていて、アクリル板の下敷きになっているところを発見された液晶なので、静電破壊でしょうね…。

しかしこのμA単位で動作する低消費電力MCUでプルアップ1kΩ☓2ってのはキツい。LOWの時だけとはいえ6mAなどという大電流が流れるなんて…。ということで10kに戻してみたけど特に問題ありませんでした。それでも0.6mAはかなりの大電流ですが。

とりあえず液晶が動いたので、その後RTC(RTC-8564NB)と3軸加速度センサ(ADXL345)をつないでみました。

例によってRTCが動かず苦労しましたが、これはレジスタの数を間違えていて、一回りしてスタートビットを叩いているつもりが別のレジスタ叩いていた、という軽いボケ。

3軸加速度センサは以前Arduinoで書いたコードをそのまま貼ってすんなり動きました。

というわけで「振動を検知すると超高輝度赤色LEDが点灯するデジタル時計(またかよ)」の出来上がりです。

で、MSP430G2553IN20ですが…Energiaで書いている分には「小さな低消費電力Arduino」として使えるのでお手軽です。同じぐらいお手軽なmbed LPC1114FN28といい感じで使い分けできますね。14ピンのMSP430でEnergiaが動いてくれればLPC810M21FN8よりも使い勝手が良いのですが、見当たらないのが残念。

Energiaのフォーラムを見ていたら、32768hzの水晶を直結してRTCとして使うライブラリが公開されていたので、今度試してみようっと(「今でしょ!」禁止)。

2014年7月26日土曜日

PayPalさんありがとうおおお!

ちなみにAmazonからは翌日届いた。
いくら海外発注とはいえ、今どき通販でモノが7週間も届かない、しかも担当者が嘘つきでいうことがコロコロ変わり、送り直したとかいうけどtracking numberは変わらない。「もう良いから金返せ」って言っても「ご連絡ありがとうございます」という定型文が返ってくるだけ。

通販業者の名前は、悪名高きDealExtream.com / DX.com…まぁ悪名高いってのは後で知ったわけですが。中国にもまともなビジネス/まともなヒトが居るのかもしれないけど(まだ会ったことないけど)、これが私の嫌中をさらに加速しました。

その状況を救ってくれたのがPayPalでした。普段カード払いなのに、その時は何故かたまたまPayPalで、しかもPayPalだったことを思い出したのが、紛争解決センター締め切りの直前(発注から45日以内なら、業者との間に立ってトラブルを解決してくれる)というクリチカルっぷり。しかも仕事が早くて、やりとりの経緯などをWebから送ったところ、1週間ほどで「クレジットカードに返金しました」と連絡が。最高です。

わずか$20の取引に対応してくださって、本当にありがとうございました。

以下、経緯の詳細です。赤文字がdx.com青文字がPayPalさん私はデブだから太字dx.comとは英語、PayPalさんとは日本語のやりとりでした。

6/01 赤外線放射温度計を$20.12でDX.comに発注、納期は最大20日とのこと
6/21 届かないのでWebから「届かない。トラッキングナンバーも該当する業者がない」とクレームを入れた。

メールで届いたトラッキングナンバーを調べようにも、「このフォーマットはこの配達業者」という一覧に該当するフォーマットがない辺りでもうダメな予感。

6/25 「申し訳ありません。通常7-30日で届きます。もう少しだけお待ちください。なお、トラッキングナンバーはここのページで調べてください」との返事。そのページは、もちろん、上のページで該当しないからクレームを入れてないということは華麗にスルー

6/27 だから、そのナンバーは載ってないじゃん!と少し怒り気味の返事を送る

6/29 「不便かけてすみません。でも、心配しないでください。出荷の遅れは国際便にはよくあることです。私達は確実な到着を心がけています。もう7日だけお待ちください。お客様の忍耐に感謝します」と返事。話が通じてねえ…これが中華4000年クォリティか。

7/11 7日すぎても当然届きません。「もう我慢ならない。金返せ」とだけ返事

この辺から相手のメールの文面でplsとかtksなどの略語が目立つようになる。真剣にトラブル対応する気、ねーだろ。書いてて怒りが蘇ってきたので、以下ゼンジー北京フォーマットにします。

7/14「こんなに待たせて悪いあるなー。実は、マレイシア便が糞詰まりしてて、出荷担当がマレイシア当局と相談してるある。きっと良い解決するあるからよろしくな。1-2週間待ってくれるヨロシな。この問題が解決するまではちゃんと対応するアル。2週間待ってまだ届かなかったら連絡するのコトよ」と返事が来た。

7/14「金返せ。ビジネスとしてありえねえだろ」とだけ返事する。

この時、PayPalさんで支払ったことに気づき、何かできる事はないかと思ったら「紛争解決」というリンクを発見。さっそくこれまでのやりとりをまとめて送付。紛争解決の有効期間は45日間とのことで、あと2日でアウトでした。「トラッキングナンバーなどを確認してみます」との返事あり。

7/16「いやいやゴメンよー。あなた荷物な、これsecurity checkに通らなかったあるよ。もう一回別便で発送するヨ。1週間で新しいtracking numberに更新されるのコトよ。だからまた1週間待つヨロシ」

7/17「じゃ、新しい番号を1週間だけ待ってやる」と返事。甘いなオレも。

7/22「あと5日待てるアルか? もし何か質問あたら、戻ってくる良いアルヨー。ごきげんようねー 原文:If you have any questions, pls come back to us. have a nice day  :)  」

私は怒っている相手に顔文字がどれだけの着火力をもたらすかを再認識しましたw

7/22 PayPalさんに、その後の経緯を伝えエスカレーションを依頼。

7/24 PayPalさんから「先方から『送り直した。新しいトラッキングナンバーはこれだ』という返事がありました」という連絡。それに対して私から「それは発注当初のトラッキングナンバーと同じです。『送り直した』という言葉と矛盾しています。対応をお願いします」と返事。

7/25 PayPalさんから「こちらでも調べたところ、トラッキングナンバーは長期間更新されていないままですので、ケースを終了しました。代金はクレジットカードに返金しました」との連絡。

長かったけど、PayPalさんにエスカレーションを依頼したあとはあっという間でした。素晴らしいとしか言い様がありません。改めてお礼申し上げます。

今後何か支払うときの第一選択肢はPayPalだ。もう孫子の代まで家訓として伝える(子供居ないのが残念です)。

その後。

7/25 Amazonに放射温度計(新モデル)を発注
7/26 届きました。

さぁ、これではんだリフローができる!…と思ったら、外は40度近い灼熱地獄。室内でリフローすると有害物質やら悪臭で大変なことになるので、家の中ではできない。ということで、早朝涼しい時間にでもやりますわ。

関係ないけど…放射温度計と一緒に注文した「銀のニーナ」、これあかんやつやろ…最近流行の「大人の男と童女が突然一緒に暮らすことになった困惑やらほのぼのを描く日常マンガ」というジャンルっぽいけど、作者は意識してるかどうかわからんけどロリコン的なニュアンスを感じる…。

2014年7月12日土曜日

MSP430 Launchpad + MacOS X


さて、というわけでLauchPad届きました。月曜の朝Mouser.comに注文してテキサスを発送、木曜日の昼に東京都下に届くんだから地球も小さくなったもんやで。一緒にFRDM46も届いたので、こっちも楽しみ。



LauchPadにはいくつか環境があります。純正環境はMacでは動きませんが、サードパーティなら大丈夫。Xcodeから動かすツールなどもありますが、とりあえず手っ取り早く動かしたいので、それも後回し。レジスタなどを調べるのもめんどくさいし、とにかく週末まで待たされたのだからすぐ動かしたいのが人情じゃないっすかw

まずは勝手知ったるSkitchで書くことのできるEnergiaを試してみます。ところでEnergiaって何て読むんでしょう。つい「エネルギア」って読んじゃったりするんですが@シンフォギア的な意味で 

参考にするのはこのページ(https://github.com/energia/Energia/wiki/Getting-Started)です。ここでは先にドライバ落とせって書いてあるけど、アプリ本体にドライバ入っているので次に進んで大丈夫です。

Energia本体のダウンロード。「download」から「energia-0101E0012-macosx.dmg」を落とします。ダウンロードしたら解凍します→フォルダが開きます。


Energia.appアイコンをApplicationsアイコンへドラッグ&ドロップします。そしてドライバをインストールしましょう。MSP430LPCDC 1.0.3b.pkgをダブルクリック、「開発元が未確認なのでインストールできません」が出てきたら、そこは自己責任でpkgを右クリック→開く→「未確認だけど開く」で。インストール後再起動を求められますので、他に問題ないことを確認してからクリック。

なお、Java for OS Xも必要ですので、普段インストールしていない方はこちらでどぞ(MacでのJavaのインストール方法)…EnergiaのサイトにJDKのバージョン書いてないけど、Java 7なら大丈夫、かな…。

その間に開封します。しまった、開封直後の写真を撮り忘れたw


再起動が終わったら、Energiaも起動します。懐かしいArduino IDEを赤くしたようなアプリが起動します。Macと付属のUSBケーブルで接続。さっそく赤と緑のLEDが交互に点滅します。ちょっとウザいので、LED近くのSwitch2を押すと黙ります。


さて、Getting Startedに戻ります。USBのシリアルポートを選び、ボードとチップの種類を選びます。シリアルは「Macの場合は/dev/cu.uart-XXXXを選べ。/dev/tty.uart-XXXX」はダメって書いてあるんだけど、cuが出てこねぇorz ターミナルで見ると/dev/cu.uart-C1FF4A7AB7450931ってのが出てくるんですが…とりあえずこれを選んでおきます。

ボードは当然LaunchPadですが、チップは一応LaunchPad上のMSP430を確認してください。老眼にはしんどいですが、2553がついていたので、Toolsメニューから「LauchPad w/msp430g2553」を選びます。

まずは動作テスト(上のシリアルポートのこともありますので)、手っ取り早くテンプレートを動かしてみます。 ファイル>スケッチ例>1.Basics で、Skitch Windowが開いたらUpload Buttonをクリック。赤のLEDがのーんびりと点滅を始めれば、とりあえず問題なし、ということになります。

さて、環境は整った(環境を整えるのは30分もかからないんだけど、ブログ書いたり再移動するついでにメンテしてたら2時間かかってしまった…)。次は恒例のデジタル時計を…と思ったら、ジャンパ線の在庫が足りないっぽい…。

2014年6月30日月曜日

Beaglebone Blackで7セグメントLEDデジタル時計

同梱

■約5日で到着

欲しいと思ったのが3月、5月上旬に発売されると聞いてMouser.comに発注したのが4/23、秋月やAdafruitへの入荷を見送って待ち続けてきましたが、Adafruitに再度入荷したので我慢できずに6/25に注文。6/29の11時ごろ配達されたのですが、買い物に出かけていて留守、やっと本日11時半ごろ入手しました。いえー。



■というわけで、7セグメントデジタル時計をまた作った

事前にブレッドボード上に回路を組んであり、Bonescriptでも一応書き終わっていたものの、初めての環境だとやっぱり色々ありますね…。ピン配列の資料を見て、「じゃ、P8の3番以降を使おう」と決めてあったのですが、実際に走らせると「そこのピンはMMCが使っているからダメよ」とエラーが。

間違った配線の図

じゃ、どうすりゃいいのよ、とそれらしい資料を探し出すのに小一時間かかりました。Getting Startedにあったんですけどねorz

やっと1桁表示できたw

それからソフトのバグをプチプチ潰しつつ、「せっかくの時計なんだからちゃんとntpで時間合わせしないと」と思ったのが運の尽きでちょっとハマったり。出来上がったのが、以下のムービーです。


ムービーのフリッカーを合わさって、ほとんど判読不能ですね…。実物はもうちょっと読めるのですが、ともかく実用にはなりません。Cloud9上で90桁/秒程度、コマンドライン上で170桁/秒程度です。170だと普通に読み取れますが、チラついてることが誰にでもはっきりわかるレベルです。

BCDデコーダが手元にないので7セグメントを1ピンずつループまわしてドライブしました。TC4511あたりを使えばもう少し早くなるかもしれませんが、それでも1Ghz ARM上のnode.jsだとこのへんが限界かもしれません。少なくとも、高速化のためにあれこれいじるよりCで書いた方がラクだと思います。

■設定など

SDカードを買い忘れてしまったので、まだなーんにもやってませんw

とりあえず、日付を毎回合わせるのは面倒くさいので、ぐぐって見つかったこちらのページ(Thank you!!)を参考にターミナルで
    ntpdate -b -s -u ntp.jst.mfeed.ad.jp
と実行。何の問題もなく設定された。なお、あんまり当然すぎて書いてないのだと思いますが、この設定はUSBとMac(PC)つないだだけではダメみたいです。DHCPのあるネットにEthernetをつないでからrebootし、USBのコンソールから入ってifconfigでen0のipアドレスを調べ、一度USB経由で接続したシェルからログアウトして、再度en0のIPアドレスにroot@<アドレス>では入ります。