2019年3月10日日曜日

エリーゼ テールランプ LED 化プロジェクト (2)

実車の配線とにらめっこしながら,配線の検討と必要なパーツを見積もってみた.

まず発光パターンだが,テールランプ (スモール点灯時) とストップランプとで光る面積を変えたかったので,LED リングは 2重にし,外リング: テールランプ専用,中リング: ストップランプ専用,と役割を明確に分けることにした.

次に車体との配線だが,
・テールランプ,ストップランプの配線は車体外側ランプの片側の 6P コネクタから取り出し,4灯全部に分配する.
・テールランプの LED を暗くするためにディマーを入れる.安かったので念の為ストップランプ側にも入れることにした.
・自作ハーネスとランプとの切り離しを容易にするために 3P コネクタ (がなかったので 4P) を入れる.
・元々のハーネスを切り裂くのに抵抗があったので,上記の自作ハーネスを 6P コネクタの中間にかませるようにする.
・ウインカー,リバースランプは,ノーマルをそのまま使用する.
・バックフォグは無くても困らんし後続車の迷惑になるので廃止する ノーマルの電球をそのまま残すことにした.光り方に統一感がなくなるけど,今まで使ったことないし,ただの車検対策.

ということで必要そうなパーツがあらかた決まったので,一気に AliExpress に発注をかけた.

しかし AilExpress 初めて使ってみたけどすげーわ.6P コネクタとか日本じゃ手に入りそうにないものが安価で買える.まぁ届くかどうかは謎だけど.あと到着に 1ヶ月くらいかかりそうなので,着手は 4月に入ってからになりそう.

2019年3月9日土曜日

エリーゼ テールランプ LED 化プロジェクト始動

エリーゼのテールランプはせっかくの丸目 4灯なのに,内側 2灯が光らない.あと今だに電球なので古臭いと言わざるを得ない.
←純正テールランプ

高年式の純正 LED ランプを流用する手もあるけど,純正パーツは 4個買い揃えると確か¥10万くらいしたはずでそんなの買えねぇ.社外品でも¥6万くらいで,ただの見た目パーツにそんなに金かけられない.

更に言うと,LED の粒が見えるのさえ最近では古臭いと思えるので,FORD GT みたいに光らせられんかな? と思ったところで,イカリング赤 LED 使えば所望のことができるのでは? と思った.これなら材料費¥5千以下でできるはず.

というわけで見切り発車で AliExpress で LED リング発注.

よくわからないのが,スモール・ヘッドライト点灯時に暗くテールランプ点灯,ブレーキ時に明るくテールランプ点灯させる配線.
多分何も考えずにこれ使えは済むんだろうけど,ただの減光なら抵抗で良さげだし,
←こういう回路でいいんだろうか? わからん.

いろいろ考えてこの配線はボツ.

2019年3月3日日曜日

iEPG 絶滅

テレビ王国が iEPG サービスを終了してしまった.PC から録画予約するには iEPG 必須だったのに,「あんま流行ってないんでやめるわ」的にやめられて困る(;´д⊂)
昔はテレビ王国以外にもいつくかあった iEPG 番組表サイトもいつの間にかことごとく止めてるみたいで,探した限り iEPG 番組サイトはどこにもなかった.
さりとて,レスポンスがクソ遅い RD-S1004K の番組表から録画予約とか無理すぎるので,テレビ王国に iEPG を復活する Chrome 拡張を作って公開してみた

Chrome 拡張を初めて使ってみたけど,Web ページを好きなように書き換え放題なので,希望のリンクなんかを手軽に追加できる.
ただ今回はクリックしたら iepg ファイルを生成してダウンロードしないといけないのだけど,その方法はここに書いてあった.

これでもうしばらく戦えそうだヽ(´ー`)ノ

2019年2月9日土曜日

サクラエディタに改行をまたぐ検索・置換を実装する

●長いので結論だけ
サクラエディタに制限なしの「改行をまたぐ検索・置換」を実装してみた.
https://github.com/yoshinrt/SakuraVz

●技術的な話
サクラエディタの前は WZ Editor しか使ってなかったから (そして Wz では普通にできていたから) 知らなかったけど,多くのエディタでは改行をまたぐ検索・置換ができない,または行数に制限がある.

これは,大抵のエディタでは内部で行単位でデータ管理しており,次の行データと連結して検索しない限り例えば /\n\n+/ のようなパターンはマッチしない.じゃあらかじめ何行連結してから検索するの? というところで行数制限が発生し,例えば EmEditor では設定した行数以上にマッチする検索は出来ないし,サクラエディタでは 1行も連結しないので改行をまたぐ検索は一切できない.
自分は s/\n\n+/\n/g みたいな感じで空行を圧縮する置換をたまにするので,行数制限は不便.というわけで,行数制限がない改行をまたぐ検索・置換をサクラエディタに実装することにした.
(ちなみに最初から全部連結しとけば? というのは効率・処理速度の観点でやらない)

サクラエディタでこれをやるには,正規表現エンジン (RE エンジン) 側に,パターンにマッチする・しないという結果以外にもう一つ「部分的に一致した」を返す機能が必須になる.
例えば,検索パターン /\n\n+/ で検索対象文字列 "aaa\n" を検索してもマッチはしないが,パターンの途中 (\n の一個目) まではマッチしているので,「途中まではマッチした」という結果を RE エンジンが返す.呼び出し側はその結果を受けて,検索対象文字列に次の行を連結して再度検索を行うことを,完全にマッチ or マッチ失敗するまで繰り返すことで,行数制限がない検索をすることができる.

この機能を持っている RE エンジンは自分が探した限り PCRE2 (partial match) か Hyperscan (streaming mode) しか見つからなかった.今回はより使いやすそうな PCRE2 を使用することにした.bregonig (onigmo) の機能不足により,検索パターンをこねくり回したりしていた記述も PCRE2 のオプション一発で解決できるので,ソースコードもスッキリ出来て一石二鳥ヽ(´ー`)ノ

ただし,PCRE2 では partial match モードな置換は出来ないので,予め partial match モードで検索し必要な行数を連結した文字列に対して,置換を行う必要があった.

2019年1月27日日曜日

SystemC で $clog2 を使う

ハードウェア設計では,メモリサイズに対するアドレスバスの bit 幅等で log2 を使いたい場面が出てくる (bit 幅の指定に使うので,コンパイル時定数であることが重要).
いつからか Verilog では $clog2() が使えるようになって便利だが,SystemC でそれに該当するものはなさげ.

仕方がないので,ダメ元で std::log() を使ってみる.
●定義
#define BIT_WIDTH( n ) (( int )( log(( n ) * 2 - 1 ) / log( 2 )))

●使用
#define HOGE 1024
sc_uint<BIT_WIDTH( HOGE )> HOGE_t;

●VivadoHLS のログ
./hoge.h:39:27: error: non-type template argument of type 'int' is not an integral constant expression
typedef sc_uint<(( int )( log(( HOGE ) * 2 - 1 ) / log( 2 )))> HOGE_t;
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
シミュレーションでは (g++ の最適化が強力なので) コンパイル時定数になってくれるので ok なんだけど,VivadoHLS の高位合成コンパイラでは怒られた.

んー,と思っていたら,テンプレートメタプログラミングなる手法があること発見!
template<int num> struct BitWidthTmplate { enum { Val = BitWidthTmplate<num / 2>::Val + 1 }; };
template<> struct BitWidthTmplate<0> { enum { Val = 0 }; };
#define BIT_WIDTH( n ) ( BitWidthTmplate<( n ) - 1>::Val )
これだと VivadoHLS でも通ったヽ(´ー`)ノ

constexpr 使ったら std::log() でも行けそうな気がするけど,Vivado の C++ 高位合成コンパイラは C++11 ですら無いので使えない.┐('~`;)┌

2019年1月12日土曜日

Intel の嫌がらせ

Intel 謹製の高速正規表現ライブラリであるところの hyperscan を使ってみようと思った.
ここ見ながら build してサンプル作って実行してみたら,

「ハンドルされない例外が 0x00007FF6BF7B5E4C (sample.exe) で発生しました: 0xC000001D: Illegal Instruction。」

オウフ.なかなか見ないエラーだな.

エラー起こしたアドレスの逆アセをみると「shlx」,これはどうやら BMI2 命令セット (AVX2 と同時に追加?) に含まれる命令っぽいのだが,うちの AMD A8 に載ってるわけがない.cmake が AVX2 の有無を認識してコンパイラオプション等をよきにはからってくれると思ってるんだけど,違うのだろうか? Intel CPU にしか hyperscan を使わせない嫌がらせか何か?

んーと思ったら,CMakeLists.txt で AVX2 を強制的に ON にしてるっぽい?
set(ARCH_C_FLAGS "/arch:AVX2")
set(ARCH_CXX_FLAGS "/arch:AVX2")
これをコメントアウトしたら,無事 AMD A8 でも動いたヽ(´ー`)ノ

2019年1月3日木曜日

ふゆやすみのこうさく

あけおめ.

超久々に車載データロガーを update.

自作データロガーのハードを 2号機にしてから,ラップタイマの磁気センサの感度が極端に悪くなって,ラップ計測できなくなってしまった.車からデータロガーのハードを外して調査・修理しようかと思ったが,
妥協発動

GPS ラップタイマ機能を自作データロガーの Android アプリに組み込んでしまうことにした.普通は GPS Laps とか使えば済むんだけど,自作データロガーの機能も無いと困るので (ここは妥協しないw).

Bluetooth 通信 (外部 GPS と通信) と,GPS ログからラップタイム算出するのは既に別のソフトで実装済みなのでサクッと移植.
問題はコントロールラインを設定する UI をどうしよう? というとこで,理想は Google マップなんかを表示させて GUI で設定することだけど,

妥協発動

一度サーキット毎に設定してしまえばそうそう変えるものではないし,凝った GUI は不要! というわけで,
←こういうのを Google マイマップ (PC) で作って kml にエクスポートして,

Android アプリでは
←こういうふうにその kml を選択できるようにしておいた.

磁気センサのラップタイマが動かなくなったのは残念だけど,GPS でも 3/100秒 くらいの精度が出るのはわかってるしね.サンデードライバーにはこれで十分っす.

ま,人生何事も妥協が大事ということで.

2018年12月8日土曜日

落ちクマ

PC から WiFi 経由で Android のファイルブラウズをしたいのだけれど,
・日本語ファイル名が化けない
・外部サーバを介さず LAN 内で完結する
・SD カードを読み書きできる
・上記の機能がすべて無料で使える
を満たす Android アプリが,何故か無い.

なので Cyanogenmod, LineageOS では内蔵の sshd を立ち上げていた (PC からは WinSCP) のだが,今のところこれが最強.
しかし Redmi Note 3 Pro を AOSP 系の Pixel Experience にしたら sshd が入っていなかった.
Android アプリにも sshd はあるけど,root じゃないので SD カードアクセスができず使えない.

仕方がないので dropbear を Android 向けに build することにした.
GitHub を漁るといろいろ Android に移植済みの dropbear があるが,最も新しそうな dropbear-android を使用することにする.

【手順】
(1) Android NDK 環境をここ見ながら構築する.
自分は↓で行けた.
/home/yoshi/android-ndk-r16b/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/home/yoshi/android-toolchain
(2) dropbear-android のビルド
setenv TOOLCHAIN /home/yoshi/android-toolchain
./build-dropbear-android.sh
で,珍しく一発でビルドが通った.

で,RN3P に持っていって起動したら,
# /data/dropbear -r ./ssh/rsa_key_db -F -P ./ssh/pid -A -N root -T ./ssh/authorized_keys -U 0 -G 0
[23486] Dec 08 15:37:22 Not backgrounding
[23487] Dec 08 15:37:25 Child connection from 192.168.0.13:62545
[23487] Dec 08 15:37:27 Password auth succeeded for 'root' from 192.168.0.13:62545
[23487] Dec 08 15:37:27 Failed to open any /dev/pty?? devices
[23487] Dec 08 15:37:27 No pty was allocated, couldn't execute
[23487] Dec 08 15:37:27 Exit (root): Exited normally
んー,terminal の open に失敗してる? そもそも /dev/pty とか Android に無いんじゃないの?

調べてみると,Linux では openpty() で端末を open するのが一般的らしいが,Android に openpty() はない.しかし,ここで他の Android dropbear プロジェクトで,openpty() を独自実装しているものが見つかった.このコードをサクッとコピペして再ビルド.
[28075] Dec 08 21:54:33 Not backgrounding
[20372] Dec 08 22:03:01 Child connection from 192.168.0.13:55309
[20372] Dec 08 22:03:01 Password null
[20372] Dec 08 22:03:01 Password null
[20372] Dec 08 22:03:01 Password null
[20372] Dec 08 22:03:01 Pubkey auth succeeded for 'root' with key sha1!! ... from 192.168.0.13:55309
勝利ヽ(´ー`)ノ

上記のパッチ当て済みのものを GitHub に公開したんで,欲しい人はどうど.

2018年12月2日日曜日

Xiaomi Redmi Note 3 Pro ブートローダーアンロック回避

Xiaomi Redmi Note 3Pro に Pixel Experience (Android 9.0) を入れようと思った.
TWRP から焼き直したら一発でしょ,とか思ってたらそうは問屋が卸さなかった.

Updater process ended with ERROR: 7
なんですと...? Σ( ̄□ ̄ι こうなってくるととたんにめんどくさくなってくる.

Pixel Experience を入れようとしたら TWRP を update しないといけない
→TWRP (recovery.img) を焼き直すためには unlock しないといけない
→unlock するためには Xiaomi に unlock 申請し,MIUI を焼き直さないといけない(?) これの申請に 72時間かかるとか...

やってられないので,ブートローダーアンロックなしで TWRP を焼く手順を試してみた.→参考

(1) EDL モードで MIUI 公式 ROM を書き込める準備をする,まだ焼いてはダメ→参考参考2
自分が使った ROM は手元にあった kenzo_global_images_6.11.3_20161103.0000.00_6.0_global_f7309f8161.tgz
(2) MIUI の公式ロムを解凍した dir の images\recovery.img を,TWRP で上書きする.
(3) (1) の手順に従って MIUI を焼く.(まだリブートしてはダメ)
(4) 焼き終わったら,VolUp + 電源長押しで TWRP を起動する.ここで一回でも MIUI が立ち上がってしまうと,焼いた TWRP が元に戻されてしまうっぽいので注意.
(5) TWRP が立ち上がったら,あとはお好きなように.

←というわけで勝利ヽ(´ー`)ノ


Android P 目玉機能の (Android 7.0 で既に載ってたのね,知らなかった) 2画面分割とか試してみたけど,多分使わないなw タブレットならともかく,6インチくらいの画面で同時作業するシーンが思い浮かばない...
あとブートが異様に速くなったけど,そんなに頻繁に再起動するもんでもないしねぇ.

逆に LineageOS から AOSP 系の ROM になったことで,いろいろと細かい便利機能がなくなったのが不便.(例えば,電源長押しでフラッシュライト ON とか)
ROM 入れ替えなくても,よかったかも.

-----
後日追記:
結局 Lineage 14.1 に戻した orz
アプリ起動時に 1秒ほど反応がなかったり,そのまま画面がフリーズする現象が出た.ROM が悪いのかと思い Liquid Remix も試してみたけど,同じ現象 orz
RAM が足りてない感じではないんだけどなぁ...

2018年6月9日土曜日

VZ Editor 復活の狼煙

テキストエディタは使い慣れたものでないと著しくコーディング効率が落ちる.MS-DOS 時代は VZ Editor を使っていたので,Windows では自ずとのその後継の WZ Editor 4 (もう 16年前のバージョンw) を使っていたが,
・Unicode 対応がプア
・正規表現がバグっている
等々,限界が近くなってきた.普通に考えれば WZ の最新版を買えばいいのだろうけど,会社で個人購入のソフトを使っているのがバレるとめんどくさいは使えないのと,十数年前と違って今ではフリーのエディタも高機能なものがあるので,WZ の代替になるかいろいろ調べてみた.

●Emacs 系
Emacs lisp が強力なので,望みのことは多分できそう.ただし Windows で Emacs インストールはかなりめんどくさいようなのでパス.あと重い.

●Mery,サクラエディタ,秀丸 (は有料だけど)
一般的にはそこそこ強力なマクロ機能を持っているんだろうけど,自分的には機能が足りず,VZ の編集機能を実装することができなさそう.

●Notepad++
プラグインを自作すればかなりのことができそうな雰囲気なので,おそらく望みのことはできるんだろうけど,プラグイン開発のための情報が少なすぎた.プラグイン開発のための学習コストを考えると,順位は下げざるを得ない.

●xyzzy
マクロ機能は文句なしに強力.実はこれが本命ということでしばらく使ってみたのだけど,Emacs 系の独特の選択方法や,マウスを使った操作があまりにも他の Windows アプリとかけ離れているので,最終的に使うのを諦めた(;´д⊂)
あと開発が止まったようなので,もう更新されないエディタにわざわざ乗り換えるのもなぁ...

とフリーソフトは全滅か,と思ったところで,サクラエディタはソースコードが公開されていることを思い出した.これって考えようによっては究極のカスタマイズ機能だよなぁ... と思って,サクラエディタ VZ 化計画をおもむろに発動.というわけで,GitHub のサクラエディタをサクッと fork して公開中→https://github.com/yoshinrt/SakuraVz