2017年6月25日日曜日

macOS 10.12 Sierraでが見つからない場合の解決方法

macOSにアップデート後、<string.h>が見つからないとg++コンパイラに言われるようになりました。Google先生に聞くとすぐに出てきました。


問題

macOS 10.12 Sierraで<string.h>が見つからないと言われる


解決方法

ターミナル.appを開き

xcode-select --install

を実行します。終わり。

string.hが見つからないと表示され、アクセス管理周りとかを想像しましたが、案外すんなり解決したのでよかった...

2017年6月24日土曜日

macOS 10.12 SierraでUSBシリアルデバイスを接続するとクラッシュする問題

そろそろ問題なさそうだったのでmacOSのバージョンをSierraにアップデートしたところ、3Dプリンタ(Kodama Trinus)との接続時にカーネルパニックを起こしてクラッシュするようになりました。解決したのでまとめます。


問題

macOS 10.12(Sierra)にUSBシリアルデバイスを接続するとOSがクラッシュする。


解決方法

CH340系統のUSBシリアルデバイスを接続するとクラッシュするようです。CH340といえばFTDIに並び、中華Arduinoによく搭載されているUSBシリアルのチップです。どうやらkextが悪さをしているようですが詳細は不明。
調べると有志の方がSierra対応のドライバを出していました。

Signed Mac OS Driver for Winchiphead CH340 serial bridge

https://blog.sengotta.net/signed-mac-os-driver-for-winchiphead-ch340-serial-bridge/




ダウンロードの場所


この情報の出所は以下のページです。

OSX Always Crashing - Kodama Forum

2017年6月3日土曜日

大学編入して2ヶ月が過ぎたのでまとめ。

高専から、地方の大学に編入して2ヶ月が過ぎました。同時に下宿を始めて同じく2ヶ月です。
大学生活を始めて、良かったことも悪かったこともそこそこあったので備忘録の意味も込めてまとめます。高専からの編入を考える人が見てくれたらいいなぁ。

大学の良いところ


楽しい講義

楽しい講義が多いです。全く関係ない学科でも興味のある講義を聴講できたり、履修できたりするので、新しい分野に触れられます。自分は人工知能に関連して脳神経科学に興味があったので、それ系の講義を受けていますが今までネットで調べていたのが馬鹿馬鹿しくなるくらいの知識の宝庫です。知らないことは調べられないというのを痛感しました。

高専生は強い

 編入生だと自己紹介をすると、大体高専生優秀だよねという反応が返ってきます(本当に)。私の編入した大学は地方とは言っても旧帝大、センター試験を受けて進学した人たちは、進学校で優秀な成績を収めてきた猛者たちです。出身を聞いてみると高専に進学した私たちの1ランク2ランク上の進学校の名前が出てきてビビります。どう考えても彼らの方が優秀そうな気がするのですが、実際のところ高専生は対等以上に戦えます。高専にも光と闇があるのでむやみに持ち上げることはしないですが、高専で鍛えられた実践力は高専生が思っている以上にすごいみたいです。
ただし、社会科目など教養に関わる部分は完敗という感じです。

成績リセット

 単位変換の過程で高専時代の成績は消滅しました。正確にはGPAに反映されていないという意味です。編入時に高専の単位を大学の単位に変換するのですが、単位の変換には1:1変換だけでなく1:2や2:1といった変換が存在します。GPAは取った単位の成績の平均で計算するのですが、等価交換でない変換が存在する以上、成績も同時に変換すると変換の仕方によって成績が変わってしまうことになります。おそらくそのため成績を変換しないのではないかと思います。ありがてぇ...

社会的ステータス?

 正直これについてはどうでもいいのですが、大学生であるというのと高専生であるというのでは世間の見方も変わります。大抵の人はそもそも高専生ってなんだよというところから始まるのでそれだけでも、大学生はステータス的に強い(ような気がする)です。


大学の悪いところ


ウェイな人たちがいる

 進学校出身の学生ばかりなのでそんなものいないと思っていた時期が私にもありました。一体どこで彼らが改造されているのかは非常に興味がありますね。潜在的ウェイが顕在化しただけかもしれないですが。ウェイな人たちはそれはそれで楽しんでいるので悪いところとも言えないです。

 私の学部は偏差値こそ高くても、学内ではゆるい部類らしくとても暇です。週19コマ入れているのでほぼ毎日4コマあるのですがそれでも暇です。座学ばかりで演習が少なく、課題がある講義も少ないので負荷があまりに低いです。座学にも内容があるんだかないんだか分からないものがちらほら存在するので、実質毎日3コマあるかないかくらいの気分です。出席とらない講義も多々あります。定期試験が恐ろしいですね。

交友関係

 編入生は既存の学部生に馴染みづらいです。3年にもなると受ける講義がバラバラですし、そもそも誰が同じ学部の同じ学科なのかよくわかりません。サークルに入ったり、積極的にアプローチしていかないと編入生で固まっているだけになります。それはそれで楽しいのですが、残り短い花の大学生活を満喫するためには入学してすぐに動き出す必要があります。


以上がまとめになります。高専から就職するのも楽でいいですが、大学に入るとさらに見識が広がります。高専生の実践力と大学の知識が合わさり最強に見えるのでオススメです。



P.S. お金の面

 大学にはお金がかかります。そうは言っても医学部に行くとかではない限り、学部2年間で私立でも二百万ちょっとです。国立なら百数十万くらい。しかし、お金の面は奨学金という名の無利息・低利息借金でどうにでもなります。借金してまで行くのかという話になりますが、生涯賃金がどの程度増えるのかということを勘定に入れてみましょう。奨学金を払ってもなお収入増になるか、プラマイゼロといったところです。2年間モラトリアムを延長し知識をつけてより有利に人生を進められると思えば全然アリな選択肢です。
 また、H29からJASSO奨学金には所得連動型の返済が追加されたので、就職後返済額が多すぎて辛いというような状況もかなり改善されると思います。
 世の中にはお金がなくて大学いけなかったというような話が溢れてますが、多くの場合、本人が何かしらの言い訳として言ってるだけか非常に昔の話です。間に受けないようにしましょう。本当にお金がない家庭にはJASSOは一種奨学金(利息なし)を貸してくれます。普通の高専生の学力なら編入試験は真面目に試験勉強をすればなんとかなりますし、お金の面も先述の方法で何とでもなります。
 無論、奨学金が通らないような家庭(親がヤクザとか金持ち)で、かつ資金援助が得られないような状況であればどうしようもないですが、世の中には驚くほど色々なサービスや団体があるのでしっかり調査することが大切です。

2017年3月27日月曜日

【Tips】Macのアプリケーションのアイコンを変える方法


今時のアプリケーションはお洒落で格好いい感じのアイコンが主流ですが、 古いアプリケーションや個人製作のアプリケーションには酷いデザインのアイコンがあったりします。

よく使うアプリケーションはDockに並べたいところですが酷いデザインのアイコンが混ざるとテンションが下がりますし、 他が綺麗な分目立ちます。

そこでアイコンを変更する方法を調べました。

※この記事は、Automatorで作ったアプリケーションがAutomatorのアイコンと同じになるので変更しようという趣旨で書いています。


方法



  1. アイコンを変更したいもの(フォルダとかアプリケーションとか)を右クリックして情報を見る(⌘I)を選択します
  2. ファイル名や拡張子などの情報が表示されたウィンドウが開きます
  3. 左上のアイコンの部分に好きなアイコン画像(.icns)をドラッグ&ドロップするとアイコンが変わります(すぐには適用されないので気になる場合は再起動)

変更後のアイコン


アイコン画像(.icns等)を作るには

Image2Iconというアプリがオススメです。 MacAppStoreで検索すると出てきます。 課金すると書き出せる形式が増えますが、 フリーでも.icnsに書き出せます。 

今回はいらすとやの「ネットオークションで落札できなかった人のイラスト(女性)」を使用しました。



他のアプリケーションのアイコンを使うには

アイコンを設定する際、icnsのようなアイコン画像だけでなく他のアプリケーションのアイコンを流用することができます。 画像をドラッグ&ドロップする代わりにアプリケーションやファイルをドラッグ&ドロップすることで設定できます。






【Tips】ターミナルウィンドウを無しでシェルスクリプトを実行する方法



Macでシェルスクリプトを実行する方法には.shのファイルを作ってターミナルから実行する、 .commandのファイルを作ってダブルクリックする方法があります。

しかしどちらの方法もターミナルアプリケーションのウィンドウが開いて鬱陶しいので解決策を探しました。 特に.commandは実行後にプロセスが完了しましたというウィンドウが残るので邪魔くさいことこの上ないです。


解決策


Automator.appを使います。 Automatorは昔からあるMacのアプリケーションで一口に言えばOS全域で使えるExcelマクロです。 作ったマクロはアプリケーションとして保存できるのでダブルクリックで起動するとマクロが実行されます。


方法


  1. Automatorを起動して新規書類を作成します
  2. 左側のサイドバーにテンプレートなマクロがまとめられているので、シェルスクリプトを実行するマクロを探します(検索窓に"シェル"と打てば出てきます)
  3. 出てきたマクロを右側のワークフローにドラッグ&ドロップします
  4. 好きなシェルスクリプトを打ち込みます(リストメニューからシェルも選べます)
  5. 保存(⌘S)でアプリケーションとして保存します
  6. ダブルクリックすればウィンドウなしで実行されます

デフォルトではアイコンがAutomatorのロボっぽいやつのままなのでアイコンを変更するとよりいい感じになります。方法はこちら

2017年3月22日水曜日

CraftWareがダウンロードできない問題

最近3Dモデルをスライスしてgcodeに起こすスライサーソフトを色々試しています。 Curaとかslic3rが有名ですね。

問題

CraftWareというソフトを見つけたので試そうとしたところダウンロードリンクが機能しておらず、 Mac版がダウンロードできませんでした。


解決策


WebインスペクタでwinのインストーラのURLを見て、そこから連想されるmac版のアドレスを打ち込んだらダウンロードできました。

直リンクはアレなのでURLだけ貼っておきます。 ホームページにもちゃんとアクセスするなどしてください(Cookieがどうのという案内が出ていたので直にアクセスしてもダウンロードはできないかもしれないです)。

https://craftware.craftunique.com/download/mac/CraftWare_1.14_and_CraftPrint_1.04

2017年3月3日金曜日

格安サーボSG90にバージョンがあった話

SG90というサーボモータはArduinoを使った電子工作界隈では非常によく使われているサーボです。 $2 以下の信じられない値段で売っています。 最近ロボットの製作に取り組んでいるのですが、 SG90に異なる仕様のものがあることに気づきました。

性能に差がなければそれでいいのですが、 若干差があるようなのでメモしておきます。 多くの中国製品の例にもれずコピーかとも思ったのですが変なところから買っているわけではないのでそうでもなさそうです(もしかしたらコピーかもしれませんが...)。


明らかに歯の異なる歯車

形の異なるサーボホーンを設置するための軸


左と右のサーボで細かな差異があるのがわかると思います。 左は2016年の7月ごろに購入したもの、 右は2017年の1月ごろに購入したものです。 最上部から見える歯車の歯数やサーボの軸の白いプラスチックの形状が異なることがわかります。コピーを行うにしてもわざわざ歯車を設計し直すことは考えにくいため、 いつの間にかバージョン変更があったと考えるのが妥当かと思います。 写真には写っていませんが、 サーボの制御基板自体も右側の新型(?)の方が小さくなって綺麗に収まっています。 可動時の音も新型の方が小さくなっています。

もっともここまでは新しくなってよかったというレベルなのですが、 左の旧型と右の新型ではサーボの軸の寸法が異なります。 旧型は直径4.7mm、 新型は直径4.9mmです(誤差はあると思います)。 また飛び出している長さに関しても旧型は2.6mm、 新型は3.4mmと大きく異なります。 当然新型の方が便利なのですが、 うっかり旧型設計でCADのモデルを書いたりすると困ったことになるので注意が必要そうです。

2017年3月2日木曜日

Kickstarterで投資する楽しさと注意点

2016年度にKickstarterで投資した5つほどのガジェット類が出揃ったのでまとめようと思います。まとめは下の方にあります。

※紹介しているものは出資を締め切っています。 プロジェクトが成功し一般販売を始めたものもあるので探せば買えるものが大半です。


Kickstarterとは


クラウドファンディングの一種で、 クラウドファンディングとは誰かがこんなものを作りたい広めたいという企画をWeb上で公開し、みんなでそれにお金を出してプロジェクトを支援するというものです。 クラウドと聞くとクラウドサービスみたいなものを想像すると思いますが、クラウドファンディング = Crowdfunding であり群衆(crowd)からfunding(投資)を集めるという意味の造語です。

投資とは企画にお金を払うことであり、 見ず知らずの人の企画にお金を出す意味がわからないと思うのですが、 これには企画する人と投資する人双方が得をするための仕組みがあります。 クラウドファンディングにはリワード(reward[褒賞])というものが用意されており、 投資額に応じて企画者からプロジェクトが達成された場合に何かしらの見返りがあるわけです。 例えば、新しいイヤホンを作りたいというプロジェクトでは$1の投資でステッカー(シール)$40の投資でイヤホン本体が送られてくるということが考えられます。 企画者は大抵、 大量の需要は見込めない物(マニアックな機械だとか自家製ソース、小説、映画e.t.c...)、 需要はあるけれどビジネスとしては成り立たない代物をプロジェクトとして出資を募ることが多いです。 企画者は実現しにくいプロジェクトのお金を集めて実行することができ、 投資者はプロジェクト成功の見返りに何かしらを受け取る、これがクラウドファンディングのいいところです。

ただし気をつけなければならないのはあくまでこれが投資であるという点です。 販売ではないのでお金を払えば品物が受け取れるという保証はありません。 お金を払うのは企画であって、 お金を払った時点で基本的に品物は存在しないからです。 出資を募ってみんなから集めたお金で開発したり製作したりします。 当然失敗すればそれでおしまいです。 決してお店では買えない物を生み出す素晴らしいプロジェクトが存在する一方で、 多額の投資を集めて失敗するプロジェクトや、 酷い出来のゴミが到着するパターンも存在します。

幸い、今回投資を行った5つのプロジェクトは無事完了しました。しかし当然問題もありました。


1. TRINUS(3Dプリンタ)




Kodamaという会社が企画した3Dプリンタのプロジェクトです。 全体が金属製パーツの3Dプリンタでありながら$299程度で本体を受け取ることができました。 積層ピッチ0.05mm、出力可能な体積は120x125x125でPLA・ABS・NylonなどPolymakerのフィラメントには全て対応しています。 動画のお兄さんが喜んでいるように非常にシンプルな部品構成で簡単に組み立てることができることも特長です。 この価格帯の3Dプリンタでは最強と言えるレベルの性能を持っています。 しかし到着は数ヶ月遅延しました。

最近時間が空いて使えるようになりましたが実に素晴らしい出来です。 日本ではDDDJapanというところが代理店をしているのでそこから購入できます(DDDJapanのTrinusのページ)。


2. OrbitKey 2.0(キーホルダー)




鍵がうるさく音を立てないキーホルダーです。 普通のキーホルダーでは鍵同士がぶつかりあってちゃりちゃり(?)とうるさい音を立てますがこのキーホルダーではそれがないため非常にスマートに鍵を持ち運べます。 あと見た目が結構格好いい。 2.0とついていることからわかるように最初に成功したプロジェクトのアップデート版です。 Kickstarterでは成功したプロジェクトの品物を改良して新しいプロジェクトを再び立ち上げるということも行われます。 既に2ヶ月程度使用していますが試用感・評判とも良好です。


3. Omega2(小型Linuxボード)




Omega2は以前あったOmegaという小型Linuxコンピュータの次世代版です。 性能の異なるOmega2・Omega2+の2つのバージョンを揃えそれぞれ$5、$9の出資で本体を受け取れます。 小型で低価格の本体にWifi(802.11 b/g/n)・Bluetooth 4.0(BLE expansion)・15のGPIO(PWMあり)とIoTのために生まれてきたようなコンピュータです。 CPUクロックは580MHzあります。


4. IoT HAT for Raspberry Pi




Raspberry Pi zero用のWifi & Bluetooth拡張ボードです。Wifi(802.11n)とBluetooth 4.1をRaspberry Pi zeroに追加できUFLアンテナもつなげる優れものです。 Raspbianネイティブのドライバで動くのでドライバ周りで苦労することはないです(やったことがある人はわかるかもしれないですが、Raspberry Piに市販のWifiドングルを繋ぐのはそこそこ大変です)。


5. Teensy 3.5 & 3.6




Arduino IDEでも開発が可能な高性能マイコンボードです。 性能に差のあるTeensy 3.5と3.6のモデルが$23、$28の出資で受け取れました。 既に先行しているTeensyがいくつもあり問題がないのかは知りませんがAliexpressなどでTeensy 2.0のコピー(?)をよく見かけます。 機能は挙げれば切りがないので省きますが、これがあればマイコンでしたいことはほぼ全てできると言えるレベルに仕上がっていると思います。 20以上のPWMは通常17DOF程度の人型のロボットを動かすのにも足りますし、RTCとmicroSDスロットが搭載されているので簡単な処理機能のついたデータロガーとしての活躍も期待できそうです。


投資して思ったこと


今回投資したプロジェクトのリワードは個人的に痒いところに届く絶妙なものばかりで届いた品物の完成度は十分に満足のいくものでした。 チームとはいえプロジェクトを実行するのは企業団体ばかりではないのでかなりの質のものが送られてきたことは素直に驚きました。 もちろん適当に投資を行ったわけではなくチームの信頼性や過去のプロジェクトの実績等を見てかなり堅実な投資の仕方をしたと思います(過去に成功しているプロジェクトは製造過程へのノウハウがあるのでその辺でこけにくい)。

しかしそれでもリスクはありました。特にTRINUSは高額であること、Kodamaがいまひとつよく分からない企業であったこと、度重なる遅延、チームからのUpdate(近況報告)の少なさと挙げれば切りがない始末でした。 結果的に素晴らしい品物が届きましたが、報告が少なすぎるため発送までのコメント欄はパラノイア状態の人で溢れかえっていました。


投資の楽しさ


どこにも出回っていないものが作り出されるのを支援すると言うのはとても楽しいです(届けばさらに楽しいし嬉しい)。 これがクラウドファンディングが流行った最たる理由だと思います。 企画者たちが試行錯誤して近況をアップデートするたびわくわくしました。 さながら有料のブログといったところでしょうか。 

もちろんガジェットだけではなく、 プロジェクトの中には秘伝のソースをたくさん作って分けてあげるから投資してほしいといったものもありました。 海外の家庭の味もまた決して簡単に得られるものではないので非常に魅力的に思います。


投資の注意点


Kickstarterで投資する場合に注意すべき点は以下の通りです。

  • 利益が含まれないので一般販売よりも安い
  • 目標額の出資が集まらなければプロジェクトはキャンセルされる
  • 上記の理由でプロジェクトがキャンセルされればお金は戻って来る
  • プロジェクトは必ず失敗のリスクが伴う
  • 失敗した場合に返金される保証はない(戻って来る場合でも時間がかかる)
  • 予想外のお金がかかることがある(通関や仲介業者の手数料)
  • 届いた品物の品質は保証されない
  • 製品保証はない
  • プロジェクトの説明が適当だったりするプロジェクトには出資するべきではない

随分と恐ろしい感じになりましたがこれは間違い無く注意点です。 しかし、これらのリスクを背負ってでも出資をする価値はあると思います。 現に多くの人が利用していますし、 それだけ人を惹きつける魅力があるということです。 ただしKickstarterのようなクラウドファンディングを利用する際にはそれがショッピングではないということを必ず胸に留めておくべきだと思います。

2017年1月31日火曜日

【Tips】ArduinoとPWM

LEDの明るさを変えたりサーボモーターに角度の信号を送る時、PWMというものを使います。 Arduinoを使ってDIYをするときに避けては通れない道なので、簡単にまとめます。


PWMとは


PWMとはPulse Width Modulationの頭文字を省略した略語で、パルス幅変調という意味です。 平均電圧を変化させることで0Vと5Vしか出力できないコンピュータで1Vや2.5といった電圧を出すために使います。


仕組み


ArduinoでdigitalWrite()関数を使うとき、ピン番号を指定してHIGHやLOWと書きますが、これは電気的には5Vと0Vです。 よくコンピュータの世界は1と0でできていると言われますが、電気的に言えばコンピュータは1を5V、0を0Vとして動作しています。 逆に言うと、1Vや2.5Vのような中途半端な電圧を使うことはできません。

しかし、LEDの明るさを変えるためには電圧を変化させる必要があります。 昔、理科の実験で豆電球を光らせたことがあると思いますが、豆電球は電圧を高くするほど明るく、電圧を低くするほど暗く光ったはずです。 LEDにも同じことが言えます。

そこで必要になるのが平均電圧という考え方です。 時間あたりに5V(HIGH)になっている時間を1秒間5Vを出力すれば平均電圧は5Vとなり、0.5秒間5Vを出力して0.5秒間0Vを出力すれば平均電圧は2.5Vになります。 下の画像では1秒間うち0.5秒間5Vを出力したものと、1秒間のうち0.2秒間5Vを出力した場合のグラフを示しています。


LEDを点滅するスケッチを描いてみると、平均電圧が2.5Vになる方が平均電圧が1Vの時よりもLEDがよく光ることがわかります(時間を1秒にすると点滅してしまうので、5ミリ秒くらいに調整してください)。

つまり5Vと0Vを切り替えることで電圧が変わっているのと同等の効果を得ることができます
そして、5Vになっている時間のことをパルス幅といい、この幅を変えることを変調と言っています。 これがPWMという名前の由来です。


デューティー比

先の画像の電圧のグラフでは、5Vにしている時間と0Vにしている時間が変わると平均電圧が変わることが分かったはずです。 この時間の比をデューティー比と言います。 平均電圧2.5Vであればデューティー比は50%、平均電圧1Vであればデューティー比は20%です。


ArduinoでPWMを使う


一定時間ごとに5Vと0Vを切り替えることで、電圧を変えるのと同等の効果が得られることが分かりましたが、loop()関数の中でいちいちdigital(10, HIGH)とかやるのは面倒です。 また、Arduinoに2つLEDを繋いで、別々の明るさにしたい時にはさらに面倒なことになります。 そこでArduinoにはPWMの機能を簡単に使えるようにした関数が用意されています。

analogWrite(10, 127)

これは10番ピンにデューティー比50%のPWM信号を出力するという意味です。 オシロスコープを使って波形を見るとArduinoが5Vと0Vを勝手に切り替えてくれているのが分かります。 この関数では、デューティー比0%から100%を0〜255の数字に割り当てています。つまり、数字が大きいほど平均電圧が高くなり、LEDを繋いでいればLEDがより明るく光ることになります。

PWM機能が使えないピンがある

便利なPWMですが、実は使えるピンの番号と数が決まっています。Arduino Nanoでは下の画像のPWMと書かれているD3、D5、D6、D9、D10、D11の6つのピンでしかPWMを使うことはできません。



2017年1月30日月曜日

【Tips】Arduino Nanoで測距センサーを使う方法

Arduino Nanoで超音波測距センサーHC-SR04を使ってみようと思います。

超音波測距センサーとは

超音波測距センサーはソナー(Sonor)とも呼ばれる部品です。スピーカーから超音波を飛ばし、物に当たって跳ね返ってきた超音波をマイクで拾うことで距離を測ります。

音は340[m/s]で進むので音を出してから音を拾うまでの時間を計れば音の進んだ距離がわかるという仕組みです。




回路図


回路を次のように接続します。5Vの位置が分かりにくいですが間違えないようにしてください。



ちなみにArduino Nanoのピン名は以下のとおり。




プログラム



説明


31行目

pulseIn()関数はピンの入力がHIGHかLOWになっている時間を返す関数です。上のプログラムではpulseIn(echo, HIGH)としているので、echo(D11)ピンがHIGHになるとHIGHになっている時間を計測してマイクロ秒で返してくれます。

37行目

この行では距離を計算しています。単位変換を行っているので謎の数字が入っていますが、本質は単純です。




このことを念頭に置いて時間と距離と速さの関係を考えてみます。音速は340 [m/s]で一定なので音の移動時間が判れば、音の移動した距離が分かることになります。



プログラムではduration/2となっていますが、これは距離を半分にするためです。音はスピーカーから出て壁に当たり、マイクに入るという経路を移動しているため、音が移動するのにかかった時間は実際には往復時間となるため半分しているわけです。


動作確認


測った距離を表示するためのディスプレイがArduino Nanoには無いので、今回のプログラムではシリアル通信を使ってコンピュータにデータを送っています。Arduino IDEにはシリアル通信で送られてきたデータを表示するためにシリアルモニタという機能が付いているので使ってみます。Arduino IDEのウィンドウの右上(下の画像の赤丸のところ)をクリックすると、データが表示されると思います。



以上です。訂正等は下のコメント欄へどうぞ。

2017年1月27日金曜日

【Tips】タイトルバーの無いアプリケーションにキー入力をする方法



公開した『Aoica's Nihongo Tool』の製作にあたって、タイトルバーの無いウィンドウを作成したところ、Storyboard上でViewに配置したNSTextFieldにどうやってもフォーカスを合わせることができない(入力できない)という問題に突き当たりました。

ボタンは押せるのでウィンドウはアクティブであろうという仮定の元、調べた結果、canBecomeKeyというBOOLの変数がtrueだとキーウィンドウ(キー入力を受け付けるウィンドウ)になるということが分かりました。


問題点


タイトルバーの無いウィンドウにキー入力をすることができない

押せないNSTextField


解決方法


NSWindowのサブクラスMyWindowを新たに作成し、canBecomeKey: BOOLのgetメソッドをoverrideし、常にtrueを返すようにすることで解決しました。もっと美しい(正しい)やり方があればコメント欄で教えてください...


【Tips】Raspberry PiでArduino IDEを使う




最近はコンピュータ学習にRaspberry Piを使うみたいですね。
部活の1年生がRaspberry Pi 3を持っていてビックリしました(講義で使うらしい)。
Raspberry PiでArduino IDEを使うにはどうしたらいいのか、調べたのでメモします。


やりたいこと

  • Raspberry Pi(Raspbian OS)でArduino IDEを使う。
  • 中華製Arduino互換機を接続する。

インストールのやり方


Arduino IDEは非常にシンプルにインストールできます。

  1. インターネットにつなぐ
  2. コンソールでsudo aptitude update
  3. コンソールでsudo aptitude install arduino
  4. 左下のメニューにArduino IDEが追加されている
以上。

Arduinoを入手する


いくらArduinoが安いとは言っても、Arduino Unoの純正は3000円以上するのでたくさん買うには向いていないです。そこでArduino Nanoの中国製互換基板を使うことになりました。


相変わらずの価格


Aliexpressで1つ$2.19 US(300円しない程度)で購入できました。
Freeshippingと書いてあれば送料無料、Estimated Delivery Timeは配送時間を示してます。
いくら安くても評価が低いお店から買わないようにしましょう。


中華製Arduino Nanoの問題点?


Arduino Nanoに限らない話ですが、新しいデバイスを接続する際にはドライバが必要になります。ところが、このArduino Nano互換機はCH340(公式はFTDI)という公式とは違う中国製ドライバが必要になります。ダウンロードすると当然のごとくソースコードとMakefileが入っているのでLinux初心者にはきついかもしれません(Raspberry Piでは上記インストールの過程で勝手に入ったっぽい)。

ちなみに公式のダウンロードページには古いドライバは置いていないので、古いMac(OSX 10.8など)でドライバをインストールしようとしたら、ネットを探し回るハメになりました。

Aoica's Nihongo Tool 1.0(α版)



最近再びMinecraft熱が再燃して、友人と身内のサーバーで遊ぶようになりました。Macで日本語入力するためのツールが無くて不便なので勉強も兼ねてツールを作成しました。

名付けて『Aoica's Nihongo Tool』です。バージョンは1.0αとしました。是非使ってください。ダウンロードリンクは一番下にあります。バグの報告はコメント欄にお願いします。


スクリーンショット





設定の仕方


この設定をしないとtまたは/キーに反応しない、もしくは起動できません
まず「システム環境設定」アプリケーションを開きます。



「セキュリティとプライバシー」をクリックします。



「一般」タブの「すべてのアプリケーションを許可」(赤丸の所)をクリックします。



「プライバシー」タブをクリックし、アクセシビリティから「Nihongo Tool」(赤丸の所)にチェックを入れます(一度起動しないと表示されないかもしれないです)。

以上で設定完了です。



Aoica's Nihongo Tool 1.0 ダウンロード
対応動作環境OSX 10.9〜

2015年10月24日土曜日

飛行船型ドローンを作った

飛行船ドローン。写真の人物は私ではないです。

概要


 高専の研究室のメンバーで全長2m程度の飛行船を作成して課題部門に出展した。無事企業賞をいただいた。発案とプロジェクトリーダ、電子ハードウェア、機体制御の開発を担当した。


製作の理由


 講義の一環として研究室で何か作るということになっていてその過程で製作した。課題部門の課題が災害対策ということでブレインストーミングを行ったところ見事私の『火の用心ドローン』が採用され、もう少しまともな感じにプロジェクトをまとめつつ製作を行った。

 最初の案は文字どおり、「火の用心!マッチ一本火事の元!」と大音量で流しながら住宅地を飛び回り地域住民の皆様に火の用心してもらうというものだったが、ネタに走りすぎているのと割と精神的健康を疑われそうなので案に改善を加えた。

 役割としては防災無線(街中にあるスピーカーのようなもの)の電池が切れた状況で、何かしらの通告をして街を回るというものである。通信ができればコントロール用のコンピュータから文字列を受け取り、決めた航路でその文言を喋って回る。

 飛行船は現実的にはかなり厳しいが、飛行船ドローンという概念が珍しかったのかウケた(ちなみに数ヶ月後、パナソニックだったかが屋内用飛行船ドローンを発表していた。課題部門なので屋外非常時向けとしたが、やはり広告業界向けだったのかもしれない)。



苦労したこと


 まず情報が非常に少ない。飛行船ドローン自体が見当たらないのはともかく、小型の飛行船を作ろうということは海外を含めてかなり事例が少なかった。理由はおそらく、ヘリウムが高価であることと気密を保った構造を作るのが難しいからだと思う。

 次に苦労したのは前述の気密を保った気嚢(バルーン)を製作することだった。まず、ヘリウムを逃さないためにアルミ蒸着フィルムを入手するのが難しい。風船屋が随分なサイズのロールを売っているのを見つけそれを買った。そしてそれをアイロンで溶着していくのだがそれもまた難しい。アイロンを当てる時間が長いとフィルムは溶けて穴が開き、当てる時間が短いとうまく溶着せずヘリウム漏れが起こる。つまり、適度のスピードで重ねたフィルムの上をバルーンの線に従いながら溶着する必要がある。完全に職人の技と化していた。「飛行船職人の朝は早い」などと茶化しながら作業した。



技術的な事

 システム構成は単純に機体制御にArduino、通信にXBee、音声合成には専用のICを用いた(この記事はずいぶん後に書いているので型番を覚えていないがどう見てもATmegaだった。秋月電子で購入出来る)。

 見出しに技術などと書いたが、大した技術は載っていない。強いて言うなら劣悪な通信環境下で音声を送信するために音声合成を使っている程度で、調べればいくらでも出てくる話である。



なぜ飛行船か


 一般的にドローンというとクアッドコプターが有名であるが、飛行速度が速すぎるのと、滞空時間が短すぎる、プロペラが高速回転し危険という問題をはらんでいる。飛行機型は滞空時間は長いが同様の危険がある。結果としてのんびり飛行して浮くために電気を使わないので滞空時間も伸ばせる飛行船が最適であると考えた(実際には屋外で風を受けると制御不能に陥る問題が存在する)。



トラブル


 当日会場に辿り着くと尾翼の部品がなかった。どこかで置き忘れたのか真相は闇の中……ともかく、見た目を整えるために寒い夜の街を練り歩き、無事引率教員に怒られた。



最後に


 あれほど苦労したのに画像がほとんど無いのが残念だった。チームの誰もが疲れで謎のテンションの下に作業していたから写真を撮る奴がほぼいなかったんだと思う。

 企業賞は嬉しかった。数の問題があったので多少もめたのと、地元企業の賞だったので会場がざわついたこと以外は問題無かった。

 プロジェクトをまとめることは非常に難しかった。各個人の技能と水準に差があり、性格も影響した。人を扇動することは簡単かもしれないが、人を使うことは本当に難しいと実感した。特に、上司と部下のような明確な立場の差をつけられない場では、口のきき方一つでもチームのやる気に大きく影響することを再認識させられた。

2015年5月21日木曜日

【Tips】JavaFXのImageクラスで画像を読み込む方法

JavaFXでFXMLを使った開発中につまづいたのでメモします。こんな感じのコードでつまづいた。

 gc.drawImage(new Image(getClass().getResouces("/test.png").getPath), 0, 0);

gcはGraphicContext、drawImageは画像, x座標, y座標の順に引数をとって、その座標に画像を描画します。画像には新しいImageのインスタンスを作りつつ入れます。


事の始まり


JavaFXのライブラリ(javafx.scene.image.Image)を使って、resourceフォルダに入れた画像をCanvasに表示しようとしたところ、試しに読み込んだ(と思っていた)画像が表示されない。Imageのコンストラクタは画像ファイルのパスを受け取るのに、パスの画像が表示されない。読み込みに入ると「そのパスにその画像はないよ(いわゆるぬるぽ)」で止まってしまう。

パスがおかしいのかと思ってSystem.out.println()で表示してみても、ちゃんとフルパスが表示されている。


問題の解決

結果的には、Imageクラスのコンストラクタが、入力したパスを勝手にresourceからの相対パスとしてみることが判明した。なので、

 new Image("/test.png");

とすると、"プロジェクトのフォルダ/src/main/resources/test.png"のファイルを読み込む。つまり、フルパスを入れるとresourcesフォルダのパスにフルパスがひっついて動かない。


その他

 あまり関係ないが、GraphicContextはdraw◯◯という名前のメソッドをほとんど持っていない。最初は戸惑ったが、線を描くときはstroke◯◯みたいなメソッドを使う。四角はquad()。このネーミングってProcessingみたいだけど、中はJavaFXとかなんだろうか。普通のJavaでSwingだとdrawLineとかになりそうだけど...調べるほどではないけど気にはなる。




2015年5月8日金曜日

【Tips】Coda 2.5でEmmetを使う方法

こんにちは。aoicaです。
早速ですが、Coda 2.5でEmmetを使おうとしてハマったのでメモです。
前置き飛ばす人はこちら


CodaとEmmet

一応、Codaとはなんぞや、Emmetってなんぞやという人のために説明しておきます。

Coda

CodaはPanic.Incが販売しているWebサイト制作アプリです。おしゃれで使い易い外観にもかかわらず、データベースとの接続やリアルタイムなプレビュー、高速な動作、インテリジェンス、プラグイン機能といった非常に高機能なアプリケーションでMacでWeb制作をするのに必要な機能が一通り揃ってます。aoicaはAdobe DreamWeaverから乗り換えました。

Emmet

Emmetはhtmlやcssといった言語を高速で書けるようにするスクリプトの一種です。以前はZencodingと呼ばれてました。あらかじめ登録されている文字列をショートカットで展開することでスニペットのようなものを高速で記述することが可能です。


Coda 2.5でEmmetを使う


Emmetはgithubで公開されていて、Codaのプラグインとして自動でビルドされたものをダウンロードできるようになっています。が、そのままダウンロードしたプラグインはなぜか動きません。どうもバグがあるらしくPanicが止めてたとか何とか。

解決法

GithubのここからダウンロードできるバージョンのEmmetプラグインが使えます。aoicaの執筆時点でのCodaのバージョンは2.5.8ですがちゃんと動いてます。


以上です。

2015年5月7日木曜日

STM32 F401RE Nucleoで倒立振子 - その1

こんにちはこんばんは。aoicaです。
記念すべきWeb回路Coder最初の記事...何をするか考えました。

 ...倒立振子です。ずっと「とうりつふりこ」だと思ってましたが「とうりつしんし」と読むようです。倒立振子とは、平たく言って振子を逆さにしたもので要するにセグウェイがそれ。
振子の端につけた加速度センサー等を使って、足となるモーターを制御することで立たせることができます。簡単そうで意外に難しいらしく、よく制御プログラミングの練習として使われてます。
制御の入門ということで、まずはこの倒立振子を作っていきたいと思います。




部品

 まず揃えたのがこちら。
タミヤのギアボックス。どこにでもある、そして何にでも使われる便利な子。
某所から借りてきました。

タミヤのギアボックス

 次に制御基板。基板には巷で流行りのSTM32 F401 Nucleoを採用します。このマイコンボードにはARM Cortex M4シリーズを乗せたSTM32 F401が載っていて、秋月電子でお値段1500円。その上クロック84MHz・64Pin・Flash 512KB・SRAM 96KB...etcというコストパフォーマンスに優れ過ぎているおそるべき開発ボードです。書き込みに使用するST-LINK/V2-1も基板に実装されているので、Mini USBで繋ぐだけで開発が開始できます。Arduinoのピン配置にも対応しており、mbedも使える...低価格帯では恐らく無敵のマイコンボードです。
一時期Atmel社のチップを使ってオリジナルボードを作ろうと考えてましたがこれを見てやめました。
 左上の赤いやつはMMA7361というアナログ加速度センサです。重力加速度を取ることができるので、角度を図ることもできます。ちょっと前までよく使われてました。最近はI2Cとかで繋ぐデジタルタイプの方が主流な気もしますが、安くていい感じなのでチョイスしました。STM32と繋ぐときにはSTM32でA/D変換をかけてやります。

加速度センサMMA7361とSTM32 F401 Nucleo

 バッテリーはこちら。何の変哲も無いSilicon Powerのモバイルバッテリー。
5V2.1Aの良くあるバッテリーです。2.1Aもあるのでモーターの電源も共有できそう。

珍しくもないモバイルバッテリー

 以上が今回のメインの部品になります。他にモータードライバとかも必要ですが、まだ準備できてないので手に入り次第紹介します。筐体は例によって段ボールとか100円均一のプラケースとかになる予定。