最近の記事
HDL-AAX2の修理
自宅NASのIO-DATA HDL-AAX2から少し異音がしていたので確認してみたところ、ファンから異音が出ていました。そこで修理をしてみることにしました。
元々ついていたファンはSunonのHA40101V4-1Q01C-F99というファンでした。残念ながら全く同じ型番のファンを見つけることができませんでしたが、DC12Vで40mm角の10mm厚、回転パルス出力付きのものであれば交換可能だろうということで、違うものに変えてみました。選んだのはAINEX CFY-40SAです。
ぴったりはまりました。コネクタだけは加工する必要があって、秋月電子や千石電商などで買えるJST XHシリーズの3ピンコネクタ(ハウジング:XHP-3, コンタクト:SXH-001T-P0.6)に付け替えています。
ExcelでMarkdownの表を編集
先日boost::math::distributionsのRuby gemを公開しましたが、その時にboostのバージョンによって含まれている分布の違いの一覧表を作りました。Markdownで作ったのですが、編集は元情報のExcelでやって、そこに便利なExcelアドインCopyToMarkdownAddInでMarkdownの表形式にコピペ(エクスポート)をしていました。逆コピペ(Excelにインポート)もできる優れものです。便利なツールがあって助かりました。
またハイパーリンクを付けても機能するようにしたかっので、少し改修して使いました。現在PRしたので、もしかしたらそのうちまーどされるかもしれません。
Rubyで確率分布の性質を求めるgem
Rubyで確率分布の性質、例えば標準偏差が1、平均が0の正規分布において50%点はどこかというと0、といったことを求められるようにgemを作ってみました。boost_distributionsというgemで、名前が示す通りC++の標準的なライブラリであるboostの1パッケージとして確率分布を扱っているboost::math::distributionsを呼び出せるようにしてみました。
Githubのレポジトリでコードを公開しています。インストール方法(gemの前にboost本体のインストールが必要)や、使い方概要もそちらご参照ください。
実は2020年に書いていたコードがようやくgem化された形になります。gem化するにあたって、一緒にコンパイルするboostのバージョン依存性を吸収するなどの細工(ラッパーC++コードを生成するためのswigインターフェイスファイル BoostDistributions.i参照)をしています。
Windowsのcygwin/MSYS2/RでSSL証明書問題の解消
ネットワークの制限の関係で、中間者傍受を許容する設定での運用になっていたとします。そこでのWindowsの設定は、いわゆるオレオレ証明書を『信頼されたルート証明機関』に配置をすることになります。Windowsと親和性が高いアプリでしたら、ほぼそれですべて解決するのですが、残念ながらそうでないものがいくつかありましたので、その解決方法をまとめておきたいと思います。
Cygwin
wgetとかcurlをやっているときにSSLがどうたらというエラーを吐いて死ぬので気が付きます。stack overflowに書いてあるやり方でうまくいきます。
$ update_ca-trust # 加えたオレオレ証明書の内容を証明書溜り(/etc/pki/ca-trust/extracted/openssl)に追加
もしupdate_ca-trustがなければca-certificatesを導入しましょう。
MSYS2
pacmanが文句を言ってくるところで気が付きました。解消方法はcygwinと同じです。MSYS2のFAQにも解説があります。
R
新しいpackageを導入しようとしたところでミラーの選択をはじめに問われるのですが、そこでインターネットが不通になっている旨 URL 'https://cran.r-project.org/CRAN_mirrors.csv': status was 'SSL connect error' という形でエラーが表示されることが気が付きました。R-3.6からR-4.2に切り替えたところでこのようなエラーが出始めて大変困っていました。これはデフォルトのダウンロード方法()であったwininetが非推奨になり、libcurlへと変わったために起きたようです。
回避方法としてはlibcurlにおとなしくなってもらいます。download.file()関数のヘルプのSecure URLsの項目に詳しい説明がありました(l最新版へのリンクなのでそのうち内容が変わってしまうかもです)。結果的にはibcurlの動作モード(libcurlVersion()で取得できる)がSchannel(OS提供の証明書情報を参照)で動いていたので本来なら問題は生じないはずなのですが、オレオレ証明書が失効リストに引っかかってしまってたようで、curlを--ssl-no-revokeで動かす必要があることがわかりました。結果、Rとしては環境変数の設定として
とすれば動作するようになりました。毎回コマンドを打ち込むのは面倒なので、起動時に設定されるよう.Rprofileの.Firstに書いておくとよいと思います。
また、あまり良い方法ではないですが、非推奨のwininetに戻すこともできます。
RubyでGPS姿勢推定
RubyでのGPS解析環境を充実させるへくgps_pvt gemを作っていますが、そのgemを応用して近接する複数アンテナを使った姿勢推定のプログラムを作ってみました。
Integer Ambiguityを全組み合わせで計算してしまうので、衛星がたくさん見えていると明らかに処理速度が落ちます。その部分を改善していきたいと思います。
RubyでGPS受信機
ちょっとすごいロガーのツールの一部を切り出して、RubyでGPSの測位処理ができるようにしてみました。githubにコードを公開しています。
Rubyのgemとしているので
で入れることができます。native extensionを含むgemなのでインストール中にコンパイルが走ります。Windowsの方はビルド環境(Ruby installer for Windowsでいうところのwith Devkit版でのRuby導入)が必要になります。
gemインストール後は
とすると、測位結果がずらずらとCSVで出力されます。単独測位、スナップショットでの解なので、実用性はあまりないです。これをベースに何か発展的なことをしたいという人向けのツールです。詳しくはReadmeを見てください。
プログラム的な話をすると、native extensionを作るためのextconf.rbが凝った作りになっています。shared libraryを複数生成する必要があるので、内部でMakefileを別名で複数生成し、それらを起動するMakefileを最後に生成しています。
boost::math::distributions
boost::math::distributions便利ですね。いろいろな確率分布があります。Rubyから使えるようにしたかったので、SWIGでラップしてみました。
Rubyからだと
BoostDistributions::Normal::new.quantile(0.5) # => 0
のように使えます。RubyGemにしたいと思っています。
※(2023/6/24追記)3年越しでgemになりました。boost_distributionsというgemです。