2023年2月26日日曜日

河津桜が咲いていたよ

別所沼の河津桜が咲いていた。
ソメイヨシノは、まだ一ヶ月先かな。
今年は普通に花見がしたいね。

2023年2月23日木曜日

ネコの日があるじゃにゃいか

ネコ年は無いけど、「ネコの日(2月22日)」が毎年あるじゃにゃいか。
くつろぐのは良いけど、ネコは「レーズン」を食べちゃダメだよ!
2022/02/23 20:30 マンガを少し直した。

2023年2月19日日曜日

Type Generic Mathematics Header

仕事(組み込み)で数学的な処理が必要になった。
昔なら、整数演算して、関数の類はテーブル解決にしたりして、そして出来上がったコードは複雑怪奇で、メンテナス性が低く、作った本人もすっかり忘れて、ブラックボックスになっていく...というパターン。
最近は組み込み用のマイコンでも単精度ながら浮動小数点演算器が入っているものもある(Cortex-M4とか)。
そういうのなら、整数演算でなくても良い。メンテしやすいコードでも性能が出る。

C言語の実数型は一般的に、単精度と倍精度がある。80年代には拡張精度もあった。最近では4倍精度も使える。
処理速度や計算精度の最高のバランスを得ようとするとき、実数の型(精度)を入れ替えながら検証したいところだ。

四則演算だけなら、マクロやtypedefで変数の型を定義直すことで、一発で簡単に実数の型を変更できる。
しかし、算術ライブラリmath.h内の関数を切り替えるのは、少し面倒だ。
C言語には、C++で言うところのオーバーロードの機能が無いので、やや複雑なマクロを使って切り替えなければならない。
マクロは型を認識できないためだ(少なくとも昔ながらの標準的なCコンパイラでは)。

マクロはプリプロセッサが処理する。プリプロセッサはその名の通り、前処理をするもので字面を置き換えることしかできない。
型が意味を持つのは、パーサーやコードジェネレータの段階だ。
マクロは型を知らないので、マクロで型を何にするかを示して、その値を使って型と関数の置き換えを定義するような2段階構造にしなければならなかった。

math.hが提供する関数全てにマクロを用意するのは面倒なので、リストファイルを参照(gccなら"objdump -t")し、使用しているシンボルを確認して、使っている関数のみ定義する。
すなわち、その場しのぎのやっつけ実装。
そんな感じなので、いつもやり直すことになる。

今回、移植しようとしたコードがatan()をそのまま使っていた。
atan()と言えば、この記事に示すように、そのまま使うべきではない。
y/xが無限にならない事が解っているならそれでも良いが、不要な疑念を避けるためにもatan2()に置き換えるべきだ。

それは解っているのだが、自称「おっちょこちょいリンピック日本代表」のこの私が5年前の記事をハッキリ憶えてるわけがない。
80年代からの自分の解決方法 "atanXY()" が邪魔をして、"atan2()"の名前が出てこない。プログラミングは、名前が重要だ。

思い出そうとしても無理なので、/usr/include の下の全ヘッダファイルに対して、文字列'atan'を検索してみた。
大量の一致がみつかり、絞り込みをしている時に、"/usr/include/tgmath.h" を発見した。
"/usr/include" 直下にあることから、かなり標準的なもののようだが、これは一体なんだ?
と思って、調べ始めた。

"tgmath" = "Type Generic Mathematics" の意味で、日本語にするなら「型一般化算術」とでもいうのかな?
"math.h"の代わりに、このヘッダを使うだけで、引数の型から自動的に呼び出す関数を切り替えてくれるすぐれものだ。

ISO C標準 11 (C11)で追加され、以降標準的に使えるらしい。
型を知るためにコンパイラが強化されていて、2段階の定義は要らない。
(逆に古いコンパイラではヘッダファイルだけあっても正しく動かないだろう)

引数の型を自動認識するのは強力で、イミディエート値でも、typedefし直した型でも、正しく解決してくれる。
例えば、以下のように、atan2()を呼び出すと仮定してみよう。
void func( MY_REAL x, MY_REAL y )
{
    MY_REAL angle = atan2( y, x ); 
    :
    : (省略)
    :
このとき、MY_REAL が
typedef float  MY_REAL;
のようになっていると、生成されるコードは、atan2f()を呼び出す。また、
typedef long double  MY_REAL;
のようになっていると、生成されるコードは、atan2l()を呼び出す。
生成された.oファイルを、"objdump -t"で見てみると良い。

この問題、世界中の人がうんざりしていたのかな。
速度と精度のトレードオフのために、実装した後で、単精度、倍精度、4倍精度を切り替えて評価を行うこともあるだろう。
その作業が楽になる。

整数(固定小数点)演算に置き換えるのは、計算の桁数や精度を考え、検証しなければならなかった。
この作業は実装結果だけみても、苦労が理解されにくく、評価されない。
作業量を見積もっても「なんで?」みたいになることが多い。
うっかりBugでも出そうものなら、「簡単なのに何やってるの?」みたいな。
さらに、入出力の精度や桁数に強く依存しており、出来上がったコードは奇妙奇天烈複雑怪奇魑魅魍魎渦巻く地雷原であり、再利用が困難になる。
それが単精度浮動小数点が使えるだけで、ものすごく楽になる。言うならば「素人でも実装できる」。
メンテナス性も向上するだろう。

単精度、倍精度の切り替えは、マクロで解決できる内容ではあるが、それすら用意する必要が無くなる。
いい時代になったものだ。

2023年2月18日土曜日

「よふかしのうた」というアニメ

ちょうどバブル期から、街は24h体制で活動するようになったと記憶している。
深夜にTV放送が行われるようになったのもその頃だ。
深夜帯は実験的な若者向け番組が多かった。
ときどきアニメも放送されていた。

去年「よふかしのうた」というアニメが深夜帯に放送されていたらしい。
若い頃と比べて、眠くなる時間がだんだんと早くなってきた(その代わり、朝の目覚めも早い)。
もう深夜帯のTVは見ない。そもそもアニメを見なくなった。そのため気が付かなかった。

このアニメ、なんと武蔵浦和駅周辺(一部、西浦和駅来周辺)が描かれているらしい。
ネットで検索してみると、駅前のビーンズっぽいもの、マーレっぽいもの、サウスピア(南区役所)とのペデストリアンデッキ、K's電気跡地工事現場のクレーンや壁が出てくる。

アニメの中に見る武蔵浦和は、なにか新鮮。
コロナ禍、なにも変わっていないと思っていたけど、見えていなかっただけ?

2023年2月17日金曜日

H3 打ち上げが…

打ち上げを、YouTubeのJAXAのLiveで見ていた。

カウント0の少し前、発射台下からイグニッションの火花が見え、つづいて赤い光も見えた。
カウントダウンが0になった。
しかし、煙の量があまり増えない。

なにかおかしい。
まだ地上にあるのに、ターボの「キーン」という音が聞こえた。
飛んでいく時の音だ。
それも数秒で静かになった。

H3は、宙に浮かなかった。
SRB−3が点火しなかったらしい。

とりあえず、大爆発はなかった。
今の所、ALOS-3も失われてはいないようだ。
H3も発射台の上にある。

なにがおきたんだろう。

打ち上げ直前での「中止」であり、「失敗ではない」そうだ。
この打ち上げは、今月だけでも2月12日→13日→15日→17日と延期されてきたが、その類だ。

ロケット自身が異常を検知して、自発的に打ち上げを中止したらしい。
そのためSRB-3の点火が行われなかったそうだ。

2023年2月11日土曜日

おっちょこちょい伝説#3

物を作る時の検討図的な物を書いたり、動画編集をしたり…、どうしてもパソコンは必要だ。
とはいえ、いいパソコンが買えるほどの余裕はない。
フリーランスでも、個人事業主でもないので、コロナ禍の頃何の補償もなかった。

あいかわらず、何年も前の古いパソコンを使っている。
そもそも中古パソコンなので、スマホの方が高いという逆転現象にある。
(そのスマホも、購入後もう5年以上経過している)

自宅のパソコンに付いているCPUは、そのマザーボードで使える最高のものではない。
そこもギリギリまで削っていたので、しょうがない。

そのマザーボードで使える最高のCPUを探してみた。
数年前のCPUなら安くなっているかとも期待していたが、あまり安くない。
しかし、これも中古なら、安いものもあった。

一か八かで、買ってみた。
結果的に正常に動作した。しばらくこれでいく事になるだろう。

しかし、中古CPU(買ったもの)に、入れ替える時、またまたやってしまった。

通販で買ったのだが、届いた直後にBGAの接点をよく確認した。
ルーペで見ると、接触させた跡が見えた。
中古だし、新品でも最終動作確認をしているだろうから、そのような跡はあるものだ。
また、接点にグレーのふわっとした綿ぼこり状のゴミが付着していた。ゴミはマスキングテープで取り除いた。
その日の作業はそれまで。もう一度透明ケースに入れ直して、保管しておいた。

今日になって、CPUの入れ替えをした。

新しいCPUで電源を入れても、BIOSすら起動しない。
「やってしまった」と思った。
とりあえず、元のCPUに戻して、起動することを確認。
泣き寝入りするつもりはない。通販のページに、「動かなかった」という書き込みをした。

その後、もう一度BGAの接点を見直すと、取り除いたはずのグレーの綿ぼこりが、ほぼ同じ位置に付いていた。
なんで?そんなはずはない。キレイにしていたはずだ。
こんなことが無いように、届いてすぐに確認していたのだ。
調べ始めた。
CPUの入っていた透明プラスチックケースを白い紙の上で見ると、そこにも似たようなものが付いていた。
ケース側にゴミが残っていたのだ。
接点からはゴミをとったが、透明ケース側にもゴミが付いていて、そこに入れ直したため、再付着したのだ。

今度は、フラックスクリーナとキムワイプでゴシゴシこすって、拡大鏡でキレイになっているのを確認して、再度CPUを交換した。
電源を入れると新しいCPUでも起動した。

中古品でも、しっかりと動作している。
しかし、通販のページに、「動かなかった」って書いてしまっている。
これじゃ、クレーマだ。

あわてて、再度通版のページに行って、書き込みを消去した。
さらに、★5個にして、「ゴミをきれいに拭いて、動きました」みたいに書き込んだ。

分解、交換、組み立てそれぞれを3回の苦労もあるが、なによりも壊れていたみたいに扱ったのが、心が痛む。
自分の不注意だったのに。

どんなに注意しても、どんなに用意しても、失敗する時は失敗する。
どうすれば「おっちょこちょい」を直せるだろう。

2023年2月5日日曜日

抜歯から2年も経ったのに

最後の親知らずを抜歯した後、歯茎から骨がしばらく突き出ていた
グリグリ処置の後も、別の骨が突き出して、結局半年激痛を我慢して過ごした。

人間とはすばらしいもので、そこまで痛いとだんだん慣れてしまう。
特に舌の痛みが無くなったら、それだけで何でも食べられるし、苦痛から開放された気分になっていた。

そうして、抜歯から2年が経過した。

抜歯部分、鏡で見る限り何もない(骨は突き出していない)し、舌の激痛もない。
しかしながら、わずかな痛みがあった。
口の中を怪我しているときのように、口の中がベタベタするし、時々血の味がすることもあった。
抜歯部分付近の歯磨きをしていると、2ヶ月に1回ぐらい炎症を起こしたようになることもあった。2週間ぐらいで回復するし、抜歯後の激痛と比べたら大した痛みでもない。
歯の色がどんどん黄色くなっていた。この色素はどこから?口内でわずかに出血している?
世界中がそうだったように、この3年間マスクをすることが多かった。
マスクの中になぜか傷口の臭いがこもっている気がしていた。これは毎日だった。ひどい時は頭痛を感じるほどだ。
しかし、TVなどでマスクで自分の口臭を気にする人が多いという話を聞いていたので、自分もそうなんだろうと思って、気にしないようにしていた。

今思えば、数々の細かな現象が、異常を示している。
しかし、もう50代半ば。年をとればそういうこともあるのか。と納得して、抜歯から2年、気にしていなかった。

しかし、先日歯を磨いている時、抜歯した付近から「何か」が取れた気がした。
吐き出してみると、直径3mmぐらいの黒い塊が出てきた。黒ゴマよりは大きいが、小豆よりは小さい。
そういえば、抜歯直後大きなくぼみが空いており、食べ物がはまってしまうことが多かった。
しかし、抜歯した付近を、強く磨いたり、強くゆすいだりしてはいけないと歯科医師から言われていたので、治るまで我慢していたのだ。
傷口がふさがるのが早い体質なので、なにか異物が残っている状態で、傷が塞がってしまったのかもしれない。

抜歯部分付近の歯磨きで炎症のような状態になっていたのは、内部に残っていた何かとの平衡状態を崩したために生じていたと考えられる。
そのように考えると、抜歯後の傷が、2年間完治せずに残っていたのかもしれない。
それがやっと排出された?

黒い塊が何だったのかはわからない。
なぜ歯磨きで、この排出現象が生じたのかもわからない。

それがとれてしばらく、骨の味がしていた(骨が歯茎を突き破って出てきている時の味)が、今はほぼしない。
口の中のベタベタも、マスクをしている時の傷の臭いも、急激に減少している。
その他、「年齢のせいだ」と思っていた細かな不調も回復している気がする。

これで完全な回復の始まりかな。

2023年2月4日土曜日

ろうそくのランタン

IKEAに行くと、ロウソクやロウソク用のランタンが色々売られている。
北欧の冬は、日本よりも日が昇るのが遅く、日が沈むのも早い。
しかも長い。

精神的に滅入りそうな状況を乗り越えるためだろう。フィーカやヒュッゲといった文化がある。
コーヒーを飲みながら甘いものを食べて、のんびり過ごすそうだ。
その際に、ロウソクの明かりも楽しむそうだ。
ロウソクの明かりは一定ではなく揺らぎがある。ぼーっと見ていると心が落ち着くように感じる。

防災用に大小様々なロウソクやランタンを買っている。
この記事のマンガで、ワンちゃんが用意しているやつも、マンガだけでなく実際に持っている。
ときどきつかわないと、どんどん古くなってしまう。
夏のロウソクは意外に暑苦しいので、冬に使うのが良い。

テーブルに置いて火を付けてもいいが、テーブルが狭くなり、色々作業が制限される。
無理なことをしていると、倒したり、テーブルから落としたりするかもしれない。
空気が乾燥している季節なので、火が出れば大惨事だ。
かといって、壁に付けたフックに掛けるにも形状的に無理があるし、そもそも壁に傷を付けたくない。

なにかいい方法は無いかと考えて、大きなツッパリ棒を使うことを思いついた。
この「デッドスペースを活用しよう」の記事でやったように床から天井までツッパッて、そこから腕を横に出す。
そこにランタンを掛ければいい。

ただし、今回は2×4の角材を使うわけではなく、市販の大きな突っ張り棒を使った。
できるだけ、手間をかけずに、買い物で済ませようという考えだ。

ビバホームの洗濯物関連商品売り場で、いくつか大きな突っ張り棒が売られていた。
平安伸銅のNSW-12を買ってきた。長さが170〜280cmになる。ビバホームで2,680円だった。
また、「ポール物干しフック」398円も買ってきた。これの先にランタンを掛ければいいだろう。
もっと大きなガッチリした突っ張り棒も売られていたが、ランタンを掛けるだけならこれで充分と思っていた。
さらに、このポール物干しフックが対応可能な丸棒の直径は25〜32mmで、ガッチリした突っ張り棒は直径34mmだった。
ポール物干しフックが対応できない。

これでバッチリと思っていたが、その帰り道、あることに気がついた。
ツッパリ棒はひねる必要がある。
床と天井の間でツッパッている状態で、ひねれば床や天井に傷を付けることになる。
これは問題だ。

あのガッチリした太いツッパリ棒は台座が付いていた。
台座は回らず、押し付けるだけになり、傷は付きにくい。
問題解決のためには、自分で台座を作ればいい。

何かを作ろうと、以前材料として購入していたポリプロピレン製の「まな板」が自宅にあった。
それを加工して台座を作った。
一応、φ34、深さ3mmで座ぐりをして、回してもずれないようにした。
ポリプロピレンは表面がすべすべしていて、ひねるには都合がいい。
できるだけ、買い物で済ませようとしていたが、結局なにか作ることになる。
これを使って立てると、こんな感じ。

ウチの天井は、高い所だと255cmある。さすがに私でも普通には手が届かない。背伸びしてギリギリだ。
しかし、リビングには一段低くなっている部分があり、そこは高さが220cmだ。
この高さならそのまま手が届くので、ツッパリながら微調整しやすい。
また壁際でもあるので、この位置にした。

立てるとき、磁石で付く水平器を使って、垂直を見ながら立てる。
水平器が無いなら、紐と重りを利用してもいいだろう。
必ずに微調整するべきだ。
天井まで手が届かない人は、二人で作業することをおすすめする。
いい加減なことをしていると、あぶないよ。

前述のとおり、ポール物干しフックの対応太さは直径25〜34mm。
ツッパリ棒の太さは25.4mmなので問題ないと思っていたが、伸び縮みする上の方は少し細くなっており、計ってみるとせいぜい直径23mmぐらいしかない。
(ということは、あのガッチリしたやつは、ちょうどいいのかもしれない。未確認)
これでもつくかなと思って、やってみたけどやはり緩いようで、時間と共に滑って降りてきてしまう。

太さをごまかすと同時に、滑りにくくするため、以前ダイソーで買った「ヤモリグリップ」を使った。
これをフックの内側が当たる部分に貼っておいて、フックを付ければ滑らない。

ランタンの上部はロウソクの炎から出る熱で加熱される。
ポリプロピレン(ポール物干しフックの素材)は、電子レンジ用の容器でも使われるため比較的熱に強いが、それでもプラスチックの類だ。
期待するべきではない。少し距離を確保するべきだ。

ダイソーのキーホルダ売り場で、鎖が売られていた。
小さなカラビナも付いており、脱着しやすい。
これをつかって、ランタンを下げた。
ちょっと触っただけで、ちょっと揺れただけで、外れて落ちないように輪っかにしている。
危険なものを扱っているのだ。やや大袈裟なくらいでちょうどいい。

火が付いている状態。
IKEAのランタンは、小型の「ティーライト用(ワンちゃんが用意しているやつ)」と、大きめの「ブロックキャンドル用」がある。
上記写真は、ブロックキャンドル用だ。
ティーライト用よりもひとまわり大きく重いが、使えるロウソクの種類は多い。

できるだけ、手間をかけずにやろうと思ったが、なんだかんだ加工や工夫が必要になった。
ポール物干しフックが重さに耐えられず、少したわんでいる。悲鳴を上げているように感じる。
そもそも使用目的が違っているので、文句は言えない。

写真のロウソクは、IKEAのブロックキャンドルの中では、小さいものだ。倍以上の重さのものもある。
その重いものを使うには、リスクを感じる。

もう少し工夫することになりそうだ。
簡単につかえるキットのようなものがあればいいんだけど。