るいもの戯れ言

腰枕

朝起きると腰が痛むようになったので、試しに購入。腰痛はほぼなくなったので効果はあるみたい。

ENGINEER エンジニア ハンダ吸取器 SS-02

半田吸い取り器は基本は電動式のものを使うのだが、電動式のものはスイッチ入れてから使えるようになるまで、数分かかる。かといってずっと待機させておくとなると場所もとるしコテ先も焼けるしでわずらわしい。手動式のものは力が弱いのが難点なのだが、これを試しに買ってみたらかなり強い。片面基盤ならこれで十分。

IKococater 安定化電源 直流安定化電源 0-30V 0-10A

デジタル回路の制作が主になって、安定化電源のお世話になることも減ったのでずっと持っていなかったのだが、久しぶりに必要になったので購入。子供の頃はまだスイッチング電源がなくて、10Aも取れるものは巨大で高価だったものだが、今はこんなにコンパクト、安価になった。この手の廉価なものは調整ツマミが可変抵抗で経年変化でガリって使い物にならなくなるのだが、驚いたことにロータリーエンコーダが使われていた。今のところ問題無し。

ゼルダの伝説 ティアーズ オブ ザ キングダム -Switch

10年くらい前にゲームに物理演算の時代が来るみたいに言われていたと思うが、これほど早く実現するとは。本当に現実世界にあるかのように物体が転がったり壊れたりする。このため攻略の自由度も半端無く大きい。祠の難易度は前作より下がった感じがするけどより一般の層も対象とするための配慮なのだろう。5月の連休の頃に届いて、毎日少しずつやっているが、まだ遊べている。文句無しの名作。

新輝合成 トンボ ユニード ゴミ箱 蓋を開けずにごみを捨てられる

猫がゴミ箱をいたずらするので試しに買ってみた。とても使いやすくて満足。

MICHELIN(ミシュラン) COUNTRY ROCK BLK 26X1.75 26 X 1.75

自転車用のタイヤはパナレーサを使っていた。ところが別にコーナを攻めたりする乗り方をしているわけでもないのに、前回買ったものがサイドの摩耗が激しかったので、試しにこちらのものを買ってみた。今のところ快調なのでしばらくはミシュランを続けてみようと思う。

WOVTE折りたたみ式 ルーペ 10倍

ルーペは幾つか買ってみたが、今はこれに落ち着いた。もう少し安い価格帯だと40倍などのものがあるが、正直20倍を越えるものは焦点距離が短か過ぎて使いにくい。10倍あたりが使いやすい。

アイリスオーヤマ 電動空気入れ

自転車用の空気入れ。最初に買ったものは電池内蔵のタイプでそんなに悪くは無かったのだが、やはり2年ほど使うと電池の寿命で使えなくなった。次に買ったのは乾電池式のものだったが力不足でいまひとつ。3台目に買ったのがこれ。アイリスオーヤマは電動工具も扱っていて、電池は共通なので電池の寿命が来たら電池だけ交換すればOk。

【2023改良型】TEPNICAL 3in1 Magsafe充電器 Qi認証 ワイヤレス充電器

Apple WatchとiPhoneを同時に充電できるスタンド。磁石が入っていてiPhone充電の時の位置合わせのストレスが無いのが良い。もう1台買ってリビングとデスクに置いている。

kvmスイッチ hdmi 4K kvm スイッチ HDMI切替器 4ポート(PC4台用)

ずっと使っていたKVMスイッチ、1ポートダメになったのを騙し騙し使っていたが、いよいよ壊れたので新しいものを購入。良くあるKVMスイッチは四方八方にケーブルが出るようになっていてデスクの上がカオスになるので、リモコンが付いているものにした。おかげでデスクがすっきりした。

Post comment
Post comment
#1347
2023/05/04 06:40
Post comment

この件、どうやら最終段の切り替え機に原因があったようです

少し前にこのアンプを買ったのだが、

FX-AUDIO- FX202A/FX-36A PRO

少し大き目の音になると盛大にバリっというノイズが乗るのが気になっていた。カタログ値は48Wとあるが、これは4Ω負荷のようなので、うちの8Ωのスピーカだと24Wというところだろう。それでも24Wもあれば十分だと思っていた。

というのも大昔にオーディオの記事で普通の家なら5Wも出せば近所迷惑な音量になると書かれていたのを読んで、それを特に検証もせずに(50年近くw)信じていたのだ。もちろん音量はスピーカの能率とアンプの出力の両方に依存するから、アンプ出力だけで判断はできないのだが、うちのスピーカはフルレンジの高能率のものなのだ。

ただ、もしかするとアンプの故障の可能性もあるので、抵抗負荷で最大出力近辺での挙動を見てみることにした。大昔に作ったファンクションジェネレータを発掘して、8Ωのセメント抵抗負荷で1kHzの正弦波でアンプに負荷をかけてみた。

オシロで見る限り、特に波形の乱れ無く20Vppまできれいに出ていたのでアンプは無罪のようだ。FX-AUDIOさん疑ってごめんなさい。

つまりこれまでの自分の知識をアップデートせねばなるまい。20W程度の出力では少し音量が大きくなると力不足で、特にD級アンプだと定格を少しでも超えると盛大にノイズが乗るので、かなり余裕を見た方が良さそうだ。人間の耳は音量のスケールが対数なので、2倍程度では足りなさそうで、100Wくらいの出力の余裕は最低限必要そうだ。最近のアンプはどれも4Ω負荷が基準なので、そうするとチャンネルあたり200Wくらいは必要ということになる。探してみると、こんなのが見つかるが、

Fosi Audio TB10D

ちゃんと出力を得るには48V 10AのACアダプタを使えとのこと。それでも480Wだから、300W x 2出力には足りていないと思うけど、まぁオーディオ用途なら常にフル出力必要なわけじゃないから大丈夫という見立てなのだろう。とはいえ、探してみてもそんな化け物のようなACアダプタは存在しないので、現実的にはこの手の小型D級アンプだと厳しそうだ。

昔のアンプで問題にならなかったのは、A級、B級アンプなら少々定格を超えても歪みが乗る程度で気にならなかったからなのだろう。

くり返し: この件、どうやら最終段の切り替え機に原因があったようです

Post comment

前回の記事の件の続き。

そういえば最終段にアンプ切り替え機が入っていたなと。

FX-AUDIO- PW-1

普段はD級アンプでお手軽に済ませつつ、たまには真空管のアンプでも聴きたいので切り替え機を入れていたのだった。

この切り替え機、スイッチに接触不良があり、一度交換してもらったけど、やっぱりダメ。仕方ないので改造してスイッチだけ取り替えたのだ。ただ、端子部分もかなりヤワな感じなので、もしかしてここが大出力になると接触不良になるのではと予想。そこでこの切り替え機を外してスピーカをダイレクトにアンプにつないでみた。

結果、ノイズが無くなったので、どうも端子の接触不良のよう。ちょっとAmazonで探してみたけど、あまり良さそうな切り替え機が見当たらないので、ここも自作しないとダメかな。

Post comment
#1283
2023/01/05 02:16

今回はMkDocsを使ってまとめてみた。

冬休みの自由研究
Post comment

WUBEN(ウーベン)

Amazon.co.jp: WUBEN(ウーベン) : スポーツ&アウトドア

自轉車用ライト(今は売切れになってしまっている模様)。これまでは電池内蔵のものを使っていたのだけど、だいたい2-3年で電池がダメになって丸ごと交換になり不経済なので電池交換できるものに変更。これを自轉車用のホルダーで固定している。18650電池なら電池もちも良く快適。

【Amazon.co.jp 限定】クモリ(Kumori) チェアマット クリア PVC 床保護マット 90X120cm 厚み2mm キズ防止 凹み防止 エンボス ゲーミングチェアマット 床暖房対応 滑り止め 冷蔵庫 フロアマット(90X120cm)

【Amazon.co.jp 限定】クモリ(Kumori) チェアマット クリア PVC 床保護マット 90X120cm 厚み2mm キズ防止 凹み防止 エンボス ゲーミングチェアマット 床暖房対応 滑り止め 冷蔵庫 フロアマット(90X120cm)が床保護マット・チェアマットストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。

イスのキャスターにワックスとホコリがまざったものがこびり付いて厄介だったので、これを敷いてみたら効果てきめん。キャスターの汚れが全然付かなくなった。

MikroTik CRS309-1G-8S+IN

The CRS309-1G-8S+ is a very compact, yet powerful networking switch. It has eight SFP+ slots, supporting up to 10 Gbit module in each, which results in a total switching capacity of 162 Gbps and total non-blocking throughput of 81 Gbps. The device also has dual-core 800 MHz CPU, 512 MB RAM, a man...

10Gbpsのスイッチ。なんか値段が買った時の2倍以上になってしまっているので、買うなら別のところが良いかも。安定して動いている。ただ10GbpsはRJ-45は発熱がひどいので、SFP+を推奨。

Atlas(アトラス)ボトル イン ボトル ハンドルタイプ シルバー ABIB-CSV ペットボトルホルダー 真空 断熱 構造

Atlas(アトラス)ボトル イン ボトル ハンドルタイプ シルバー ABIB-CSV ペットボトルホルダー 真空 断熱 構造がホーム&キッチンストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。

発想の勝利。ペットボトルごと入れられるので、炭酸飲料などは炭酸が抜けない。洗わなくて良いので会社に置きっぱなしというのも良いかも。

マウスリストレスト 手のひら手首サポートパッド 3次元表面デザイン 滑らかな滑り 柔らかい冷却素材 マウスで動くスライドリストパッド 軽量 コンパクト オフィス作業 ゲーム 右手専用 (ブラック)

Amazon.co.jp: マウスリストレスト 手のひら手首サポートパッド 3次元表面デザイン 滑らかな滑り 柔らかい冷却素材 マウスで動くスライドリストパッド 軽量 コンパクト オフィス作業 ゲーム 右手専用 (ブラック) : パソコン・周辺機器

最初は慣れなくて失敗かと思ったけど、慣れたらこれ無しだと手首が疲れてしまうように。

KKHMF 3.3V 5V MB102ブレッドボード用 電源モジュール パワーモジュール [並行輸入品]

特徴: MB102パンボード用 5V、3.3Vとの互換性 入力電圧:6.5-12V(DC)またはUSB電源 出力電圧:3.3V、5Vの切り替え可能 最大出力電流:700ミリアンペア これはブレッドボード電源モジュールは、3.3Vと5Vの出力電圧をサポートすることができ、MB102のブレッドボード用に設計された電源モジュールである。 このパワーモジュールのサイズは約です。 53ミリメートル、長、35ミリメートル、幅20ミリメートルの厚さである。 ブレッドボード用に設計された電源モジュール サポート3.3V、5V出力 B102ブレッドボードに適し パッケージが含まれます: 5 X 3.3V ...

ブレッドボードに差して、USBもしくはACアダプタから5V or 3.3Vを供給できて便利。ただ機構上、逆に差すこともできてしまうので注意が必要。

Google Nest Cam (屋内、屋外対応 / バッテリー式)

スマートな機能を備えた、バッテリー式のセキュリティ カメラ。 Google Nest Cam は人、動物、車を判別でき、必要な通知だけが届くように設定できます。 Google Nest Cam はバッテリー式で、リビングルームから庭まで、必要な場所にどこでも設置できます。 何か起きたときは通知が届くので、Google Home アプリですぐに対応できます。 別売りの屋内用スタンドや防塵・防滴ケーブルなどの各種アクセサリを追加すれば、Google Nest Cam がさらに使いやすくなります。 Wi-Fi の停止や停電が発生した場合、Google Nest Cam が自動的にアクティビティの動画履歴を最長 1 時間分、ローカルメモリに保存します。Wi-Fi や電源が再稼働したら、その間に起きた出来事を確認できるようになります。また万一、カメラが何者かに無断で持ち去られてしまった場合は、無料で交換ができます。

思ったよりずっと便利。こんな風に自分の敷地を設定しておけば、そこに誰か入ってくるとたちどころにスマホに通知が来る。

ただカタログスペックでは電池が数か月もつと書いてあるが、1週間ももたない感じ。まぁモバイルバッテリーつなげば充電できるのでそれでしのいでいる。

M2チップ搭載MacBook Air

M2チップの驚異的なパワーを内蔵したMacBook Air。一日中使えるバッテリー、13.6インチのLiquid Retinaディスプレイ、1080p HDカメラを搭載。デザインも性能も一新しました。

最近のIntel様のチップの消費電力がやばすぎるので、Apple Silicon。速い、軽い、熱くならないの三拍子。スリープしたまま1週間くらい放置しても7割くらいは電池が残っている。垂直統合の勝利。

Post comment

基本的には、ここの内容をそのままGitHubに登録してpagesの設定をすれば良い。例えば「Reveal.js、Markdown、Githubでスライドを作成する。」が良くまとまっている。だが1つ謎の事象が起きて悩んだ。

index.htmlの中に、直接markdownを書く時には良いのだが、以下のようにdata-markdown属性でmdファイルを指定すると、不可思議な動作をする。


<section data-markdown="./md/firstpage.md"
    data-separator="\n---\n$"
    data-vertical="\n--\n">
    <script type="text/template">
    </script>
</section>

最初にcommit/pushした時は表示されるものの、変更してcommit/pushしても変更が反映されなかったり、そもそもこのmdファイルが404エラーで見つからなかったりする。GitHub Pagesの不具合なのかなと諦めていたのだけど、ある推測が頭に浮かんだ。それは、index.htmlからリンクされているファイルしかGitHub Pages管理されないのではないかという推測だ。このmd/firstpage.mdファイルの指定はdata-タグなので、GitHub Pagesのパーサには認識されないのではないか。

そこで以下のようにダミーのaタグを入れてみた(もっと良いやり方があるのかも)。


<a style="display:none" href="./md/firstpage.md"></a>

これがビンゴ。ちゃんとmdファイルの更新が反映されるようになった。

Post comment
#1218
2022/08/22 04:27

Clean Craftsmanshipをいただきました。いつものボブおじさんのClean XXXシリーズ。

ボブおじさんの書籍シリーズの良いところは、自分は以下のように見ている。

  • 前提知識が少なくても出来る限り理解できるように練られている。
  • 高尚な話ではなく、現場叩き上げの話が中心。
  • なんとなく、これおかしいよなぁと薄々感じつつも、現場の空気で言えないようなことを、ズバっと言ってくれる(Clean Codeでの「コメントは害悪」など)。

今回も個人的に面白かった部分を取り上げたい。

第2章

この章は基本的にTDDの実践をサンプルを使って詳しく記載している。基本的な部分から解説されているので、TDDについては初めてという初心者の人でも全く問題なく理解できるだろう。前提知識不要というのは素晴しい。

「デバッガーが得意になることを目指すべきではない」

テストコードを数行書き、エラーやテスト失敗をてがかりに本番コードを書く。というやり方を繰り返す中ではデバッガーの出番はほとんど無い。

そういえば会社に入った頃(30年くらい前)は、会社での開発のやり方がかなり違うことに驚いた記憶がある。ある先輩はひたすらコードを仕様書に従って組み上げた後、巨大なプログラムを動かし始めて、なかなか動かずに難解なバグに頭を悩ませていたのだ。その後、研修で「コーディング」と「テスト」は局面が別れているので、先輩のやり方が会社としては正しいのだと知った。

自分がそれまでにやっていた趣味のプログラミングでは、ちょっとだけコードを実装してみて、動かしてみて確認。Okならまた先に少しだけ前進。というのを繰り返していた。なにせ当時はC/C++なので慎重に進んでいかないと、メモリを破壊するデバッグ困難なバグで長時間足をとられてしまう。少しずつ進んでいかないと、根本的な設計ミスに気付いた時に大手術となってしまうので、自然とそういうやり方をとっていた。

TDDの普及によってようやくコーディングとテストは不可分なものになったわけだ。

第3章

TDD応用編だ。テストの時に使う「ニセモノ」。テストダブル。これにはフェイク、ダミー、スタブ、スパイ、モックがあるという解説。前はモックとスタブくらいしか無かった気がするけど、今はそんなにあるのね。

スパイを使ったテストは壊れやすい

sin()の計算をテイラー級数で求める時のテストをどうするか。sin()の引数は無限にあるので何をもって充足していると言えるか。そこで、テイラー級数の各項を教えてくれるクラスを抽出して、それをスパイに置き換えて様々な条件を与えてやれば、テイラー級数の計算ロジックが正しいことを検証できる。しかし計算方法をCORDICに変えると全てが無駄になってしまう。それがスパイの限界だ。テストの壊れにくさを追求すには、なるべく本番コードとの結合を弱める必要があるが、そうするとより詳細にテストを行うことが困難になる。これはトレードオフなのだ。

ここでふと思ったのだけど、このあたりのテストダブルを自分は最近全然使っていないなと。全く使っていないわけではないが非常に限られたケースでしか使っていないように思う。なぜなのか考えてみたが、まずE2Eテストの方が主でUnitテストはE2Eでカバーできないところだけ補足的やる感じのスタイルになったので、こうした仕組みの重要性が薄れた。E2Eテストなら、内部の実装を変えても外部からみた振舞いが変わっていなければテストは壊れない。

ScalaやRustを使う機会が増えてきて、なんでもかんでもOOで書くというのがなくなったので、テストダブルがあまりうまくはまらないというのもあるかもしれない。基本は関数を渡すように設計するので、テスト用の関数をテストの時に渡すやり方でテストしている。

本書の方針はコンポーネントの境界を越えないならテストダブルを使っても良い。そうでなければなるべく使わないだ。これまで感じていた「なんかテストダブルって分かりにくいし嫌だな」という感覚が明快に言語化されていて良い。

第4章

「GUIをテストするな」

これはSeneniumのようなツールによるテストを否定しているのではなく「GUIでレンダリングされた見た目が正しいことをテストするな」ということだ。見た目は、頻繁に変わるのであっという間にテストが壊れて作り直しの繰り返しになる。まぁこれは昔から言われているやつ。

GUIの領域は設計によってかなり小さくできるので、それを目指せば大きな問題ならないとのこと。

ただ典型的なWebアプリはともかく、インタラクティブ性の高いGUIアプリはそうもいかないのではないかなぁ。自分はドロー系のアプリを作るのが好きで趣味で良く作ったりするが、例えばオブジェクトを複数選択してドラッグして移動するとか、ドラッグ中に画面の端までいったら自動的にスクロールするとか、そういう部分はGUIと切り離してテストするのは困難だし、良いテストツールも無いのが現状だと思う。

「XXXクラスにXXXTestクラスを用意するというやり方をやめる」

TDDの初期の頃の解説にあったXXXクラスにXXXTestクラスを用意するやり方は間違いだったと認めている。これはテストと本番コードとの結合度を高め、構造の改善をしようとすると大量のテストが失敗してしまう。本書ではレンタルビデオの例を使い、あるビジネスケースを実行するテストを紹介する。1ビジネスケースはCustomerとかRentalやVideoRegistryなど複数の協調で実現されるが、これらのクラスを個別にテストするのではなく「ビデオxxxを顧客yyyがレンタルする」というビジネスケースでテストをする。

今はWebアプリもSPAで、サーバサイドはAPIサーバになっているので、このAPI単位でテストを書くのが妥当なのかもしれない。APIは一旦公開したら勝手に変更できないから、そこにテストが依存しても将来壊れるリスクは小さいだろう。自分が数年前からE2Eテスト重視に転向したのもこれが理由だ。

git reset --hardは友達

リファクタリングを始めてみて行き詰まったらすっぱとあきらめて元に戻そう。

まったくその通りだ(笑)。

第6章

YAGNI

フックは悪との解説。

自分が会社に入った当時はUser Exitと呼ばれていた。この仕組み、当時はなるほどと思ったものの、これをうまく活用するのは想像以上に難しい。User Exitに書いたものが本体コードにどういう影響を与えるのか分からないので、試行錯誤でうまい具合に動く「局所解」を探す旅になるのだ。何より当時は本体側のソースコードが開示されていないので文字通り手探りだった。本体コードを開発する側も、ユーザ側がどんなUser Exitを書くか事前に全てを想像できるわけではないので無理筋な仕組みだろう。でも今も「プラグイン」というのは残っているよね... とも思うが。

第7章以降

基本的に読み物として楽しめば良いように思う。ボブおじさんの経験談にもとづいた教訓の膨大な集積場だ。

Post comment
#1187
2022/06/05 05:21

手が凄く太いので大きくなりそう。

Post comment
1 / 19