2020年 10月 04日

ウェブ縄文時代への回帰

2016年にウェブ縄文時代がどうこう書いたけど最近どうやらウェブ縄文時代が本当にきつつあるみたい、と書こうとしたら既に morygonzalez さんが書かれていた のであまり書くことはない。縄文時代というか、個人サイトへの回帰という話だけど、観測範囲のブログやら日記がASPホスティングから個人サイトに移行したりしている。

知り合いとチャットしていて教えてもらったけど、国内だけの事象というわけではないみたいで、今年の6月には The Return of the 90s Web という記事が書かれていた。不思議な潮流。

2017年に個人サイトは終わってしまったのかと書いたことがあるけど、終わってないかもしれないので嬉しい。このエントリでも触れてるけどASPホスティングの個人ブログも、セルフホスティングの個人サイトも境界は技術的には曖昧で、しいていえばコンテンツを自分で所持しているといえるかどうか。「個人サイト」は閲覧者的には技術的に区別はつかず、どちらかといえば誰のブランドで発信されているかという印象的なものと思う。

S-A-A-2 (NanoVNA V2) を手に入れてみた

NanoVNA V2 という名前で開発されているが、ややこしいので開発コードである S-A-A-2 (Simple Antenna Analyzer 2 の略らしい) と呼ぶことにしておく。NanoVNA に触発されて開発されていて (開発者は別)、操作性やファームウェアコードの一部は NanoVNA と一緒だが、ハードウェアは再設計されている。

NanoVNA ではクロックジェネレータ1つを5次高調波まで使って 900MHz まで実用的なダイナミックレンジを実現しているが、S-A-A-2 ではここが違っていて、クロックジェネレータに加えてPLLシンセサイザ(ADF4350)を使って高調波を使わない設計になっている。ADF4350 は 137.5MHz~4,400MHz の範囲を出力できるため、基板がしっかりしていればこの範囲を測定範囲にすることができる。140MHz以下はクロックジェネレータの出力をそのまま使う。S-A-A-2 はハードウェアバージョン V2_3 までで 3GHz まで対応している。

ファームウェアはUIや計算まわりで NanoVNA を引き継いでいる部分もあるが、C++11 で書かれており、特に USB 通信まわりはまったく別のプロトコルになっている。MCU は STM32 の互換品の GD32F303CCT6 ARM Cortex-M4 で DSP/FPU/SIMD がついている。

既にこれのクローンも Aliexpress で売られていたりする。扱う周波数が高くなるほどクローンも怪しくなるので、自分は tindie で注文した。

使い勝手

操作性はほとんど NanoVNA と変わらない。充電回路はついているが、バッテリ本体が付属しないので適当なのを選んでつけてやる必要がある。

ケース

- https://www.thingiverse.com/thing:4592730

これがいい感じだった

2020年 08月 17日

https 通信が不可能な原因が時刻ずれ

手元の NanoPi NEO2 が、証明書エラーでどうしても https 通信が不可能に。

Ubuntu 16.04 なのでそれほど古いOSというわけではない。証明書関係だろうと思いいろいろやってみたがうまくいかず、これは他の原因ではないか?と思って date したら 2016 年だった。知らないうちにリブートして、RTC を持たないため時刻設定がまきもどったようだ。

$ sudo apt-get install  ca-certificates
$ sudo update-ca-certificates  -v
$ curl https://google.com                                                                                                             
curl: (60) server certificate verification failed. CAfile: ./cacert.pem CRLfile: none
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

今後こういうことが起きないよう ntpd を入れた

sudo apt-get install ntp
2020年 07月 29日

Google Photos 依存からの脱却

Google Photos が発狂してからと書いてから、いろいろ見積って画像をセルフホストすることに決めた。とにかくアップロード機能はあとで作るとして、現状の画像が表示されていない状態を是正しなければならない。つまり Google Photos に上がっている画像のうち、日記で使われている画像をこのホスト上にコピーして配信する必要がある。

事前知識

まず Google Picker API 経由で取得した media の id や URL と、Google Photos API は一切互換性がない。もともと念のために Picker 経由で取得した ID っぽいものは保存していたのだけれど、これはまったく使えない。よって、Google Photos 上の全写真のメタデータをすべて取得し、ファイル名マッチによって画像を特定 (つまりファイル名→Google Photos mediaId のマッピング) していくことにした。

手順

  • Google Photos 側のメタデータをすべて保存する
  • 日記内の画像のファイル名をすべて抜き出す
  • Google Photos 側のファイル名と日記内の画像のファイル名を一致させて対応づけ、Google Photos 側の mediaId を確定する
  • 利用している画像を、対応づけた mediaId に基いてダウンロードする
  • 日記内の画像パスをすべて書きかえる

Photos library API は 10000req/day が quota。0.1req/sec 程度でしかアクセスできない。そのうえ、item リスト API は 100items/req しか取得できない。つまり、1日で取得可能な item 数は100万件にすぎない。が、個人日記程度なら十分なので、一気に全メタデータを取得するスクリプトを書いて、1行に1つの mediaItem 形式のJSONとなるようなファイルをつくった。

実際にメディアを取得するリクエストは 75000req/day できるが、library API で取得できる、メディア実体を取得するための URL である baseUrl は60分で期限切れになる。全メタデータを取得したときの baseUrl は基本的に使えないため、ダウンロードするスクリプトではあらためて batchGet API を呼び、baseUrl を取得するようにした。

ハマったところ

日本語文字列のファイル名が Google Photos 上では分解されて正規化された状態だったり、API 経由ではそうでなかったりで困った。結局 NFC して常に正規化状態で扱うようにした。

ハマったということではないが、Google Photos の library API 類はレスポンスが結構遅く、オンデマンドにこれにアクセスして実体ファイルへリダイレクトするのは結構厳しいと思った。

今後

画像まわりを好きにできるようになったので、できれば webp メインにしたい。ただ、ファイル管理やバックアップまわりでやることが増えるので、面倒くさい。

それにしてもウェブサービスのAPIを組合せて Web 2.0 の時代はどこへやらで、かつてAPIを提供して好きにしてくれとしていたサービスもどんどん渋くなり、サービス存続が信用できないケースが多くなって全部自分でホストするみたいな原点回帰をしつつある。

ASP のブログサービスを使えばそのへんの面倒くさい実装は自分でやらなくてすむが、じゃあそのASPのサービスはいつまで続くのか?という話になるし、貧乏はとにかくつらい。

2020年 07月 28日

さくらのVPSが起動しなくなって grub 再インストール

さくらのVPS ディスク拡張手順(標準OS Ubuntu18.04) を実行しようと思ってごにょごにょしていたら MBR を壊してしまった。具体的には

sudo sgdisk -s /dev/vda

が成功せず、GPT 形式に変換しろ、と言われたので何も考えず GPT に変換したら Booting from hard disk で止まるようになってしまった。まぁそりゃそうだろ考えろよという感じだが……

シングルユーザーモードの起動

さくらのVPSコンソールから「各種設定」→「OSインストール」とすすみ、「カスタムOS」→「Ubuntu 18.04 amd64」と選択して起動 (仮想 CD 経由でインストーラーが起動する)

ただVNCコンソールを開けるタイミングでは既にブートローダーを通過しているので、レスキューモードに入れなかった。

このため、インストーラー起動後のユーザー名を入力する画面で、何もせず「Back」を選択する。するとインストーラーメニューが出てくるので、一度 Detect disks を選んですぐに Back してから、シェルを起動するメニューを選ぶ (Detect disks することで /dev/vda が見えるようになる)。

この状態で、以下のように本来のディスクをマウントして chroot する。さくらの VPS の VNC コンソールは英語キーボードだと = が入力できないため、grub-install の引数を指定することができない。デフォルトでいけるようにするために chroot する。

mount /dev/vda1 /mnt
mount --rbind /dev /mnt/dev
mount -t proc none /mnt/proc
mount --rbind /sys /mnt/sys
chroot /mnt /bin/bash

これでほぼ本来の環境で作業できる。grub を再インストールする、念のため /boot をバックアップしてからやる。ここでは /dev/vda なので

cp -r /boot /boot.orig
grub-install --force /dev/vda

とした。GPT だからか何なのか --force しないと書けなかった。この手順は自信がない

grub 設定を作りなおす

update-grub

ここで reboot で起動するようになった

2020年 06月 05日

ラジオペンチはバネがないほうが良い

新しくラジオペンチ(やニッパー)を買ったときに違和感があって、なんでだろうなあと考えていたところ、バネの有無ということがわかった。

なんとなくバネがあったほうが自動的に開いて便利な気がするけど、これが自分にはあってないみたい。

バネがあると自分で開かなくていい一方で、閉じるのに余計に力がいるので素材への力のかけかたが少し難しくなる。バネなしなら指先の延長のように扱えていたのに、バネつきだと手袋をして作業しているような感覚。

というか実際、自分はバネで自動的に開く機能を使うことがほとんどない。人差し指と薬指をペンチの外側に、中指を内側に入れて、開きかたをすべて指で制御しているので、むしろバネが負担にしかなっていない。https://youtube.com/shorts/dhTa218TuG8

古いペンチばかり使ってしまっていた原因がようやくわかった。そしてすべてのバネをはずした。

バネありのメリット・デメリット

メリット

  • ペンチの扱いに慣れてなくても開く・閉じるがスムーズ
    • 開け閉めできる持ちかたを覚えなくていい
  • 強くつかむだけなら不器用でも問題ない

デメリット

  • 力の加減が難しくなる
  • 閉じるのに僅かに強い力が必要となる
  • 加減してつかむ用途だと疲れる
2020年 04月 17日

Original Prusa i3 MK2S でペンプロッタ



3Dプリンタとペンプロッタはほとんど似たようなものなので、アタッチメントをつけて簡単にペンプロッタ化してみた。アタッチメントはこんな感じ。4〜5回試作してプリントしていい感じになった。STLなどは Thingiverse に上げた

  • 簡単につけかえできること
  • それなりに精度が出ること (0.5mmぐらい)
  • ペンをあまり選ばないこと

を要件にして、スライド式のペンホルダと、本体へのアタッチメントという構成に。ステッピングモータに被せて設置する形にすることで脱着を簡単にした。

試行錯誤の経過:ペン先がブレすぎてダメだった例


剛性をあげたりスライド方式をみなおした例

Simplify3D の設定

  • Extruder
    • Retraction Vertical Lift を 3mm などに (ペンを上げる動作)
    • Extrusion Width はペン先の太さに (適当でもよい)
  • Layer
    • Primary Layer Height 0.2mm
    • Outline/Perimeter Shells 1
  • Temperature
    • Primary Extruder
      • アンチェック Wait for temperature controller to stabilize before beginning build
      • 温度を20℃に
    • Heated Bed
      • アンチェック Wait for temperature controller to stabilize before beginning build
      • 温度を20℃に
  • G-code
    • アンチェック 5D firmware (include E-dimension) (E軸のコードが出力されなくなる = エクストルーダが無効になる)
    • Build volume X-Axis: 224 (250-26) Y-Axis: 131 (210-79)
    • Origin offset: -26mm -79mm
  • Scripts 後述
  • Advanced
    • Start printing at height 0.6mm
    • Stop printing at height 0.8mm
    • アンチェック Minimum travel for retraction

Top Solid Layers / Bottom Solid Layers を0にすれば輪郭だけ出せる。

Starting Script

M115 U3.0.7 ; tell the printer latest firmware varsion available
G28 W ; home all without mesh bed level
G80 ; mesh bed leveling
G0 Z10
G0 X40 Y100 F4000
G0 Z0.8
M0 Click to continue
G0 Z10

メッシュレベリングしてZ軸を出したあと、適当な位置に移動して、Z0.8 にする。この高さが基準なので、M0 で一旦マシンを止める。ペン先を出して、少しテンションがかかるように調整して紙に接触するようにする。この状態でマシンをボタンを押すとプロットが始まるはず。

Ending Script

M104 S0 ; turn off temperature
M140 S0 ; turn off heatbed
M107 ; turn off fan
G0 Z10
G1 X0 Y200; home X axis
M84 ; disable motors

Z10 にして退避させてる。

データの作りかた

Simplify3D を使う場合、入力データはSTLなので、適当に厚みをつけてやる必要がある。

単に文字を出すだけなら OpenSCAD がお手軽

linear_extrude(height = 1) {
    text("テスト", size=20, font="Noto Sans CJK JP:style=Black", spacing=0.9);
}

こんな感じで任意のフォントで文字を出せる。

2020年 03月 26日

電子ピアノ練習用のミキサー


要件

  • PCで再生させた曲と電子ピアノの音をミックスしたい
  • 出力を3人で同時にヘッドフォンで聞きたい
    • この際、ヘッドフォンの種類が違う場合でも音量を揃えたい

普通だとステレオミキサ+複数出力のヘッドフォンアンプでやることだけど、電源の管理が面倒なので機器を増やしたくなく、これを同時にやる方法が見つからないので自作することにした。

動機

PCで再生させながらピアノの練習をしたりする必要があるんだけど、ピアノをひいてるとそっちの音しか聞こえなくなってしまうことがあり、特に子どもの場合走ってリズムがどんどんずれるので、自然と聞けるようになんとかしたい。

仕様

入出力

  • 3ステレオ入力 VR なし
    • 入力側の装置で音量調整できるので
  • 3ステレオ出力 VR あり
    • ヘッドフォンの種類が違う場合に音量を揃えるため

電源

  • 9V 電池をレールスプリットして両電源にする (±4.5V)
    • 実際は 8.4V の充電式リチウムイオン電池 006P 型
    • 出力コンデンサを省略したいので (小型化のため)
    • 100kΩで分圧し、中点を出力電流の多いオペアンプで増幅安定化させる

NiMH 1.2V 4本で±2.4Vとかでもいいかもしれないけど、小型にしたい+ミキサーの飽和電圧を上げたい+006P型リチウムイオン電池が1つ余っている、のでこういう感じに。

ミキサー部

増幅率1倍の反転増幅回路で特に変なことはしてない。アナログ加算回路

アンプ部

ミックスされたものを3つのオペアンプでそれぞれ増幅して出力する。これも増幅率1倍の反転増幅回路。ミキサー部でも反転させてるので位相は元に戻る。直接ヘッドフォンをドライブするので、ここも出力電流が多めのものにしておく。

回路図

オペアンプの品種が適当になっているが、実際に使ったのは全て NJM4556ADD。

消費電力

先に計算しておくべきだが面倒くさくてやってなかった。おかげで失敗。

オペアンプ1つの消費電流が6mA (±4.5V)、これが5つで30mA → 回路全体の実測で 37.5mA。常時バッテリー駆動するにはちょっと多すぎる。

電池が300mAhだと8時間しかもたない……

省電力な NJM022BD で 0.250mA なら、5つで1.25mA。これで10日ぐらい。

どっちにしろ、素直に電源スイッチかアダプタをつけたほうがよさげ、ということでACアダプタをつけて常時通電するようにした。

ケース

例によって KiCAD + FreeCAD kicadStepUp で 3D モデルをつくり、Fusion360 で読みこんで適当に設計したのを 3D プリントした。



ref.

http://akizukidenshi.com/catalog/g/gP-03604/
http://akizukidenshi.com/catalog/g/gC-02460/
http://akizukidenshi.com/catalog/g/gP-04623/
http://akizukidenshi.com/catalog/g/gP-00207/
http://akizukidenshi.com/catalog/g/gP-02683/

2020年 02月 28日

GPSDO 10MHz 実装


こういう感じでケースにおさめた。

基板

あまり部品はないので片面基板を自力で切削加工して作った。1度目はいろいろとリワークが発生してしまったので2度目の基板。しかし 1PPS の出力をつけわすれていたので、あとからつけくわえている。

MCP4725 だけ少し厳しいピッチだが問題なかった。切削の場合デザインルールで0.3mmぐらいにしないと厳しいが、どうしてもルールをやぶらざるを得ない部分が出てきたりする。

電源に村田製作所製のフルモールド2出力降圧DC-DCコンバータを使っている。MCU など用の 5V と、OCXO 用の 12V を十分余裕を持って出力できる。ただし入力電圧が16V〜40Vと若干高い。24V入力で使っている。

ケース

YONGU Enclosure というところのケース 145*54*150 を
Aliexpress で買った。割と安い。買ったあと「3D CAD ファイルある?」と聞いたらすぐ送ってくれて便利。まぁこれはサイトに載せといてくれれば手間にならないんだけど。

こういう前後パネルがフラットな板のタイプだと加工しやすいので、好んで使っている。

3Dモデルづくり

穴あけやパネルのデザインのため、できるだけ3Dモデルを作るようにしている。パーツごとの干渉を前もって知れたりするので便利。今回はケーブリングもモデリングするようにした。ここを省略すると曲げ半径的に無理があって蓋がしめられないということもあるので……

厳密でなくても良い汎用部品なんかだと、GrabCad で STEP ファイルが得られたりする。SMA コネクタとかは GrabCad からダウンロードしたものに手を加えて使ってる。

Fusion360 の場合、このモデルからさらにパネルのCNC切削Gコードまで持っていけるので楽。Engraving のパスがバグってて困るが……

切削など


文字は30°のVカッターで掘りこみ。これはZ精度が必要なので、加工箇所ごとにわけてGコードを作ってから、加工箇所ごとにZをぴったりあわせたほうが良さげだった。掘っただけで色は入れていないけど、もともと黒のアルマイト加工がされているので、地色を出すだけでコントラスト的に白色に見える。あと、やすりをかけられないのでカッターの切れ味がよくないとつらい。

他の加工はほぼ普通の穴あけ。ただしディスプレイのところだけ傾斜をつける加工をした。これは等高線で降りていく加工にした。0.03mmぐらいで降りるようにしてみたが一切加工段は見えないので、もうちょっと荒くてもよかったと思う。

2020年 02月 20日

タイトボンドの使い勝手が良すぎる

 -

5.0 / 5.0

「木工用ボンド」というと、コニシ社が製造する酢酸ビニルの白いボンドが想像されるが、それと直接競合するボンドにアメリカのフランクリン社が製造する「タイトボンド」というのがある。

比較

「木工用ボンド」はどこでも手に入るので使ったことがない人はいないレベルだと思う。タイトボンドは入手性がかなり悪い。

タイトボンドの良いところ

  • 固定時間が短かい(乾燥がはやい)
  • 乾燥すると固くなる(粘性が残らないので、ノミやスクレーパーでスパっと削れる)
  • キャップが使いやすい

タイトボンドの悪いところ

  • 入手性が悪い
  • 乾燥が速すぎることがある(こういう場合は木工用ボンドを使えばいいと思う)
  • ちょっと高い

何が良いか

個人的な感想だと「固くなる」のが一番良く感じる。これにより余分にはみだしても硬化したあとヤスリで削るのが楽だし、ほぼ木材と近い硬さなので、ノミやカンナにかけることもできる。

そしてキャップが使いやすい。キャップをひっぱるとすぐ塗れる構造になっていて、キャップ自体で塗りひろげできる。これが便利。コニシのやつと比べるといちいちキャップの裏の突起をあわせてねじるみたいな作業をしなくて良い。