元々ついていたファンはSunonのHA40101V4-1Q01C-F99というファンでした。残念ながら全く同じ型番のファンを見つけることができませんでしたが、DC12Vで40mm角の10mm厚、回転パルス出力付きのものであれば交換可能だろうということで、違うものに変えてみました。選んだのはAINEX CFY-40SAです。
ぴったりはまりました。コネクタだけは加工する必要があって、秋月電子や千石電商などで買えるJST XHシリーズの3ピンコネクタ(ハウジング:XHP-3, コンタクト:SXH-001T-P0.6)に付け替えています。
]]>Githubのレポジトリでコードを公開しています。インストール方法(gemの前にboost本体のインストールが必要)や、使い方概要もそちらご参照ください。
実は2020年に書いていたコードがようやくgem化された形になります。gem化するにあたって、一緒にコンパイルするboostのバージョン依存性を吸収するなどの細工(ラッパーC++コードを生成するためのswigインターフェイスファイル BoostDistributions.i参照)をしています。
もしupdate_ca-trustがなければca-certificatesを導入しましょう。
回避方法としてはlibcurlにおとなしくなってもらいます。download.file()関数のヘルプのSecure URLsの項目に詳しい説明がありました(l最新版へのリンクなのでそのうち内容が変わってしまうかもです)。結果的にはibcurlの動作モード(libcurlVersion()で取得できる)がSchannel(OS提供の証明書情報を参照)で動いていたので本来なら問題は生じないはずなのですが、オレオレ証明書が失効リストに引っかかってしまってたようで、curlを--ssl-no-revokeで動かす必要があることがわかりました。結果、Rとしては環境変数の設定として
とすれば動作するようになりました。毎回コマンドを打ち込むのは面倒なので、起動時に設定されるよう.Rprofileの.Firstに書いておくとよいと思います。
また、あまり良い方法ではないですが、非推奨のwininetに戻すこともできます。
Integer Ambiguityを全組み合わせで計算してしまうので、衛星がたくさん見えていると明らかに処理速度が落ちます。その部分を改善していきたいと思います。
]]>Rubyのgemとしているので
gemインストール後は
プログラム的な話をすると、native extensionを作るためのextconf.rbが凝った作りになっています。shared libraryを複数生成する必要があるので、内部でMakefileを別名で複数生成し、それらを起動するMakefileを最後に生成しています。
]]>Rubyからだと
のように使えます。RubyGemにしたいと思っています。
※(2023/6/24追記)3年越しでgemになりました。boost_distributionsというgemです。
]]>発端はshebangです。Windowsのバッチファイル(.bat)に他のスクリプト言語を埋めこめるなんて素敵! ということでやってみました。
E-MailRelayで実行するスクリプトには、ちょっとした癖があって、終了コードで動作を変えています。そのため上記参考にした記事のものだけでは不十分で2行目の
が肝となりました。こうすると、終了コードが正しくE-MailRelay本体に帰っていきます。
]]>もともと自分が使うためにかなり手を入れたのですが、Pure Rubyで動きインストールが簡単ですので、お奨めしてもよいかなと思い、記事を書きました。Travis-CIとAppVeyorでテストしていますが、色々なRubyのバージョン(2.3以降でテストしていますが、1.9以降でも動くと思います)やjRubyでも動いています。Windowsでもテストを通しています。またローカルではRuby on cygwinとWindows Rでも実績があります。
今後ですが、コードが肥大化しているので気が向いたらリファクタリングをするつもりです。その他にも問題等あるようであれば、githubのIssuesに残していただけると嬉しいです。
]]>こういうときは、全テスト前に実行されるbefore(:all)(←before(:context)のエイリアス)ブロックでインスタンスを生成すれば事なきを得そうですが、さらに事情が複雑で、インスタンスの生成方法を共通化したいというのがありました。常套手段としてはRSpecの外でFactory patternでも作ってそれを中で使えばよいのでしょう。だがしかし、未定義変数アクセス時に遅延評価によって変数内容を生成するRSpecの機能のlet(あるいはそのエイリアスのsubject==let(:subject))を利用してみることにしました。
そういうことで、いろいろ試してみました(別タブで見たほうが良いかも)。
spec/target_spec.rb にケースが6つ書いてあります(左側のアイコンを操作するとファイルを切り替えられます)。それぞれこんな感じです。
上の実行ボタンを押してみてください。特に[4]が意外で、インスタンス変数に代入しようとすると before(:all)で作ったものと、それぞれのテストケースの前で実行されるbeforeとで、違うものを見てしまっているようです。[5]もbefore(:all)とはスコープがことなるようで、一時変数にアクセスした際に怒られています。
[6]を使うと回避できました。インスタンス変数そのものではなく、中身についての変更でごまかしてあります。ということで[6]で目的を達成しました。おそらくバッドマウハウでしょうが…。
]]>水面下ではこそこそ工夫をしています。例えば、スリープにこまめに入れて、電池の延命をはかってあります。また実運用に移る前にDEBUGを定義してコンパイルすると、UART経由で静電容量のデジタル値を読めるようにしてあります。閾値を決めるのに役に立ちます。
そしてソース公開にあたって一番気合を入れたのが、上記(実体)回路図だったりします(笑)。
]]>こんなバラック配線で実験をしていました。
そして、これを、こうじゃ、ということでミニカーに組み込んでみました。なかなか好評です。CR2032電池で動いています。
詳細は次回に書こうと思います。→書きました。
]]>計測条件ですが、MicroSDはSandisk SDSQUAR-128G-GN6MA (128GB Class 10 UHS-1)です。またCrystal Disk Mark 6.0.0 x64を使って、速度を測りました。
まずは内蔵の状態で。少し悲しい速度てす。
念のため、MicroSDに非がないことを確かめました。USB 3.0接続でのカードリーダ(Elecom MR3-K005)を使って測っみた結果です。早いです。
ということで、USB 2.0のHigh speed(480Mbps)がどうやらネックになっている気がします。USB 3.0 Super speed(5Gbps)がある現在だと、やはり見劣りしてしまいますね。
参考に内蔵のディスクも測ってみました。早いです。
さらにおまけでUSB 2.0接続のUSBフラッシュ Sandisk SDCZ33-064G-J57 (64GB)があったので、それも測ってみました。内蔵したMicroSDと同程度の(遅い)速度です。
さらにおまけで、テスト時のデバイスマネージャです。ディスクがたくさん。
ということで、増設した内蔵ストレージは速度を要求しないもの(実験データ等?)を保存する用途に使おうと思います。
]]>内蔵したのはKingston FCR-MRG2です。ハブ自体がUSB 2.0の4線式なので、そこまで新しいリーダである必要はなく、また余分な部品を削ったりすることなく内蔵できる、厚さの『薄い』カードリーダを探していたところ、この製品にいきつきました。
UEW(ポリウレタン被膜線)で接続します。
内蔵するとこんな感じ。リーダ自体は両面テープで本体に固定してあります。
ストレージが増えて快適に使えています。
※その後、速度を測ってみました。USB 2.0接続なりの速度です。
]]>フレキシブル基板の製造がやっかいかと思いますが、そこをクリアすれば普通の製作と何も変わりません。ちなみに今回の基板では、PCBwayというところを利用してみました。フレキシブル基板でも見積もりがとれたので使ってみたという感じです。やり取りは丁寧でしたし、出来上がった基板も合格点だと思います。
]]>