SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|06|07|

2005-05-20(Fri) 共立から部品届く

  画像の説明 画像の説明

共立エレショップ
1GHz帯低雑音高周波アンプ MAR-8A\609x2\1,218
チップコンデンサ 0.01uF 2012サイズx10\105
三端子レギュレータ 7809\63x2\126
送料\120
\1,569

  帰宅すると例の部品が届いていた。うわわー、予想以上に小さい。チップコンデンサはゴマ粒大だし、アンプICもコメ粒に足が生えた様なモンだ。これで600円というのにはかなり心理的な抵抗があるが、恐ろしい高増幅率を誇るスーパーアンプだし、仕方ないか。しかしこの値段だと、おっかなびっくりな取り扱いになりそうだ。そんななか三端子レギューレータのなんと常識的なコトよ。

  ちなみに封筒に貼ってあった切手は120円。オイラが送料として払ったのも120円。封筒代とか梱包代とかはサービスなのね。こりゃ助かるなぁ。ココんトコ、秋葉に行っても数種類しかパーツ買わないし、共立でこんなに気楽に購入できるんなら、不足パーツを買うために秋葉に通う回数が激減しそうだなぁ。

  とりあえず、ユニバーサル基板にパーツを載せてみたりして様子見。ボチボチと配線のレイアウトでも考えようかしらん……と、ゆートコロで、今日もSeedをドップリと観る。第15話「それぞれの孤独」までの5話を観る。

  いわゆる元祖のガンダムでは自然発生的に生まれてきたニュータイプという超人類が話の軸になっていたが、このSeedでは人工的に作られたコーディネータという超人類が話の軸になっている。コーディネータは人為的に遺伝子を操作することで生まれる人類で、それをよしとしない通常と人間(ナチュラル)との間で戦争になっているのだが、ここは非常に興味深いテーマであるといえよう。

  残念なことに「(能力を)持つものと持たざるもの」ひいては「民族問題」「差別問題」にもつながる、デカいテーマをブチ上げながら、本編ではあまりその結論について語られていないのが残念である。確か、ターンエーでも「突然月から舞い戻ってきた超人類」という、オモシロすぎるシチュエーションを立ち上げながら、ラストは適当なボス敵を祭り上げ、そいつを倒してハッピーエンドにしていたような気もする。これもいかがなモノかと思う。

  Seedは道を違えた友人同士が確執を交えながら戦うというだけで十分に面白い作品だが、子供番組でもあるからして、もー少し教育的な観点を交えたらよりよかったのではないかと思う。前にも書いたけど、サブカルチャーの教育効果は恐ろしいほど高く効果的なのだ。


2006-05-20(Sat) また? 弦を交換……

  先日、注文した「楽勝!コード・チェンジの秘訣」というDVD付きのギターの教本が届いた。ノーテンキな感じの表紙が気に食わないが、なにしろ左手の指使いが勉強できるというもの。ホントはギタースクールかなんかに行ったほうが早いのかもしれないが、そんな時間も金もないし、独学のほうが気楽でいい。ギタースクールに行くという刺激を、行き詰まって放り投げる直前の段階まで取っておくというのも悪くない。

  画像の説明

  思い返せば、6年半前、友人がキャッチした「ギターの新発売イベントで村下孝蔵がミニコンサートをやるらしい」というニュースから始まった。当時、ヤマハがコンパスというエレアコを新発売するに当たり、村下孝蔵監修を謳って売り出したのだ。イベントは、ほんの小さなスタジオで行われたが、あの村下孝蔵が目の前で、そのコンパスを弾きながら彼の曲を歌うのを聞いて、感激したっけ。

  で、その後、その友人と自分でも弾き語りできたらなぁ、なんて話になって、一緒に始めることになった。オイラは素直にコンパスの一番安い7万のモデルを購入したが、友人はラッキーにもゴミ捨て場から適当なギターを拾ってきていたような気がする。しばらくしてから、なにはともあれコードを勉強して、音をビビらせつつ、ツッカエながらも歌える状態にしていたオイラに対し、友人はマジメに前奏の練習から入っていた……アプローチにエラい差があるなぁて笑ったっけ。

  これまたその頃だ、キンキキッズがギターをやり始めたのも。アイツらは既にすっかりと弾きこなしているようだが、始めたのはオイラ達と同じ頃……だけど、アイツらの先生は吉田拓郎だぜ!? ……友人と一緒に、ズルいよな、アイツらッ!! ……って話したっけ。

  それはともかく、今日は休日。久々に、サイレントでない普通のエレアコ、そのコンパスを弾いてみようかな。引っ張り出してきて、まずはチューニング……

  「バンッ!!」

  ……わッ!! 1弦が切れたッ!! そーなんだよね、1弦ってチューニングの時によく切れるんだ。どーしよ。弦のストックはあるけど……今のメインはサイレントギターだしなぁ……でも、せっかく引っ張り出してきたんだし、弦を張らないでしまっておくのは気持ち悪いし……いーや、1弦だけ張り直そう。

  ペグを抜いて、切れた弦を外し、1本だけ予備に買ってある1弦を取り出す。一端をペグに挟んで、もう一端をリールに巻く……巻く方向に気をつけて。ありゃりゃ、1本だけ新品だと、他の5本がサビサビなのが目立つなぁ……まぁいいや。

  改めてチューニングを済ませて、弾く。やっぱりソコソコの音を出したほうが、弾いていて楽しい。それに、いま張ってあるこの弦。何を張ってあったのか忘れてしまったが、結構ヤワらかくて今のサイレントギターの弦よりも押さえやすい気もする。

  画像の説明

  深夜に弾くためにやむを得ず購入したサイレントギターだが、このエレアコとの2本体制は意外といいな。休日はこっちを弾くことにしよう。こんなコトなら、1弦だけでなく、全部の弦を交換すればよかったかな。来週は改めてこのギターを磨きこんで、残りの弦も交換してやろう。


2011-05-20(Fri) チープに歌うLinux「妖音リナ」

  先日、思わせぶりなことを書いたが、なんでいきなり昔作ったDTMアプリを引っ張り出してきたかというと、Linux上でOSSだけを組み合わせて「歌わせてみた」いから、そのための前哨戦だったワケだったりする。

  なんだかんだいって、以前に作曲のマネゴトをしてたワケだし、いまこの瞬間も「初音ミク」には手を出す寸前なのだ。ただ、Windows上でGUIでってのが、オイラにとってはかなり敷居が高い。Linux用のボーカロイドが欲しい。が、ない。んじゃ、作る。

  画像の説明

  「発声」には、以前も使ったfestivalをそのまま使う。例えば「あ」を発声するには以下のようにする。

echo 'ah' | text2wave -o ah.wav; play ah.wav

  しかしfestivalはスピーチエンジンなので「音程」がない。音程を生成するためsoxを使う。

echo "ah" | text2wave | sox -t wav - ah_200.wav pitch 200

  歌の構成要素は、発声、音程と、リズムである。最後のリズムもsoxを使い、任意のタイミングでwavを重ねることで行う。

sox -M words/word_ka_900.wav "| sox words/word_wa_800.wav -p pad 0.18750" "| sox words/word_shi_900.wav -p pad 0.37500" midi/connect_vocal.wav remix -i; play midi/connect_vocal.wav

  そういえば、以前から「初音ミク」はボーカルだけのソフトなので、他のDTMで作った伴奏と、どうやってミキシングするのかが疑問だった。そもそも、MIDIファイルって、サウンドカードを経由せずにwavファイルかなんかに変換できるものなのか? できないのなら、PCのラインジャックとマイクジャックをつないで録音しなければならない? ……と思ったら、昨日のtimidityでアッサリできるようだ。

timidity -OwS midi/connect.mid -o midi/connect.wav

  そりゃ別に不思議はないわな。MIDIをデコードして、波形を/dev/dspに吐く時点で、wavに近い形式になってるんだから。

  ……っと。以上で必要になる各テクノロジは揃った。

  <暫定稿>

  「チューリップの歌」<mp3を再生する>

  「イッペイのテーマ」<mp3を再生する>

  「コネクト」<mp3を再生する>

  「かえるの歌」<mp3を再生する>

  「かえるの歌x2」<mp3を再生する>

  「かえるの歌x3」<mp3を再生する>


2012-05-20(Sun) 続・カフスを自作


2015-05-20(Wed) ACアダプタ直列!?

  最近、ラジコンのバッテリの本数が増えてきているので(昨日、1本減ったけど)、早くも自作の充放電器1台では充電が追いつかなくなっており、4本同時に充電できる充電器でも作ろうかと画策しているのだが、複数のACアダプタの出力を回路上でどう扱うべきか、ふと思い悩んでしまった。

  画像の説明

  コンセントには極性がないようでいて、実は片側はアースだ。仮に、極性を逆に挿した5VのACアダプタ同士のマイナス極をつないだら、いったいどうなる? 実際に挿してみて、ACアダプタ同士のマイナス極間の電位をテスタで測ったみたら……ゼロだった。

  それではと、片方のACアダプタのマイナス極と、もう片方のACアダプタのプラス極間の電位をテスタで測ったみたら……ん? 5Vになるかと思いきや、またもやゼロだ。なんで?

  しばらく悩んでしまったが、ふと気づいた。ACアダプタは、トランス方式だろうが、スイッチング方式だろうが、トランスで絶縁されているのだ。つまり、個別の電位を持っているってことだ。見方を変えれば「乾電池」のような状態、だと思ってもいいのかな?

  そーなると、乾電池みたいに、こーゆーつなぎ方をしてもいいって事になる? と、実際に試してみたら、ちゃんと倍の10Vが出た。おぉ、我ながら、これは発見だ。

  画像の説明

  と、ここで「ACアダプタ 直列」でググったら、なんだ、容易に事例が出てくるじゃないの。別に未知の使い方ってワケでもないのね。あまり使い手のなさそうな方法ではあるけど。

  画像の説明

  とかやってると、秋月に注文していたパーツが届いた。さて、ひさびさに電子工作を始めるかな。


2018-05-20(Sun) 次なる製作の準備

  先日「縦線ばっかり、横線ばっかり」という順で記述されたSVGファイルはイマイチということがわかったので、自動的に一筆書きにするようプログラムを修正した。

  といっても、一筆書きのアルゴリズムはそう簡単ではなく、完璧なものにはなっていないが、実用上は問題ない、というレベル物にはなったと思う。

  画像の説明

  ちょいと工夫して、アニメーションGIFに仕立ててみた。一応は一筆書きになっていることが見て取れるかと思う。

  画像の説明

  実は、差し迫ってちょっと作らなければならないものがあり、そのための習作として、ROADSTERのキーホルダをデザインしてみた。とりあえず生成したSVGファイルをGIMPでラスタライズし、紙にレーザプリンタで打ち出したものであるが、最終的には近所のファブスペースでレーザ加工機を使って、本革で製作する予定である。

  こっちのSVGファイルは、実は以前に実装したタートルグラフィックスライブラリを使って生成している。こんなことやってるヤツは世界にもそう多くないんじゃないだろうかな。

  独自に実装した、ベジェ曲線描画コマンド「tThrough」と、パーフェクト破線描画ライブラリが実にイイ仕事をしてくれているのだ。我ながら、目的の四角形を囲むラウンドレクタングルを描く手法として、これ以上に美しい方法はどこにも存在しないと思える。そういえば、オイラは、昔からロジックで絵を描画するのがたまらなく好きなんだよね。

  というわけで、キーホルダを加工手順の記述スクリプトを以下に示しておく。

     # ROADSTER キーホルダ
 
     w1 = 46.to_in;  h1 = 20.to_in                               # 縫い目の内側の大きさ
     w2 = 20.to_in                                               # 折り返し部の長さ
 
     r1 = 3.to_in;   r1s = r1 * sqrt(2)                          # 縫い目の外側のR
     r2 = 5.to_in;   r2s = r2 * sqrt(2)                          # 折り返し部へのR
 
     s1 = 4.to_in                                                # 縫い目の幅
 
     images = ['roadster.png', 'skyactiv.png']
 
     win.tSetPos(300, 100)
     win.tSetHeading(0)
     win.tLeft(90)
 
     2.times {
 
         win.tForward(w1)                                        # 左回りに外形を描く
         win.tThrough(-45, r1s, -45)
         win.tForward(h1)
         win.tThrough(-45, r1s, -45)
         win.tForward(w1)
 
         win.tPenUp                                              # 内側の縫い目に移動
         win.tLeft(90)
         win.tForward(r1)
         win.tPenDown
 
         xs = []; ys = []                                        # 右回りに縫い目を描く
         win.tLeft(90);  xs << win.tXpos; ys << win.tYpos
         win.tDForward(*win.fit_dline(w1, [0, [1, s1 - 1]], { :FIT   => true }))
         win.tRight(90); xs << win.tXpos; ys << win.tYpos
         win.tDForward(*win.fit_dline(h1, [1, [1, s1 - 1]], { :FLOAT => true }))
         win.tRight(90); xs << win.tXpos; ys << win.tYpos
         win.tDForward(*win.fit_dline(w1, [0, [1, s1 - 1]], { :FIT   => true }))
         win.tRight(90); xs << win.tXpos; ys << win.tYpos
 
         win.put_image_png_center(xs, ys, images.shift)          # 縫い目の内側の中心にロゴを描く
 
         win.tPenUp                                              # 内側の縫い目から出る
         win.tForward(h1 + r1)
         win.tLeft(90)
         win.tPenDown
 
         win.tThrough(-45, r1s, -45)                             # 折り返し部分を描く
         win.tThrough( 45, r2s,  45)
         win.tForward(w2)
         win.tThrough( 45, r2s,  45)
         win.tThrough(-45, r1s, -45)
     }

  記述の意味を思い出すため、メモとしてイメージを追加しておく。

  画像の説明


2023-05-20(Sat) コンテナのPVのバックアップを考える

  ここんとこ、毎晩Factorioに夢中なのだが、イマイチ効率的に研究が進められていないせいか、バイターの攻撃が激しくなってきて、それへの対応に忙殺され、製造ラインを工夫している時間が作れない。

  しかしこれ、すごく普遍的な教訓をくれている気がする。というのも、そもそも一般にコンピュータシステムは、特定の作業を自動化するものであるが、自動化のレベルが低いほど、手作業でメンテする必要が生じてしまうものなのである。

  よく、システムの作りがイマイチな場合に「運用でカバー」などという口当たりのいいコトバでの対策が取られるが、それはつまりシステム屋としての敗北なのである。言い訳無用で恥なのである。「こんなこともあろうかと」の対極なのである。

  話をFactorioに戻すと、製造ラインを工夫している時間が作れない原因は、バイターの攻撃への対応の自動化のレベルが低いことであり、それはつまりFactorioプレイヤとしての敗北なのであり恥なのである。

  そんな気づきを得た矢先、自分が職場で運用している自作のチャットシステムがトラブってしまった。結構、ガチで使われているシステムなので、めちゃくちゃ焦る。原因はディスクフルでGDBMが壊れたこと。GDBMを直そうとしたがダメ。しかし、直近の発言を表示するための履歴DBだったので、消しても影響なく単に消したら復旧できた。それでも原因の調査、究明と対策で1時間くらいを要してしまった。あまり長時間止まるとTeams以下の存在になってしまうから沽券に関わる。

  そういうことなのだ。ちゃんと自動化しておけば、イザという時に焦らなくて済んだのだ。だから、これを機にバックアップ機構を作るべきだ……ということで作った。チャットシステム専用ではなく、コンテナのPVに対する汎用的な仕組みだ。リモートにrsyncするのが基本だが、ローカルにもできるようになっている。ちゃんと差分バックアップである。

  そもそも、ロクにrsyncを使ったことがなかったし、シェルスクリプトも苦手意識があったが、今回の開発を通じ、その両方に少し詳しくなれた気がする。しかし、それにしても手間取ったなぁ。昔に比べて思考力が落ちているせいなのか、自らへの期待値が上がっているせいなのか、それ以外なのか……よくわからないが、こういう開発は楽しくて仕方ないものの、ここまで手間取るかなぁ、という印象を受けた。

diff --git a/docker-compose.yml b/docker-compose.yml
+#           * Local Backup
+#           BACKUP_PATH: pv/backup
+#           BACKUP_EX: --exclude=backup
+# バックアップ先の領域として
+# mkdir pv/backup; chown 1000:1000 pv/backup しておくこと
+#           * Remote Backup
+#           BACKUP_HOST: user@rsync_ssh_host
+#           BACKUP_PATH: backup
+#           BACKUP_EX: --exclude=id_rsa*
+# バックアップ先への ssh アクセスのため
+# ssh-keygen -f pv/id_rsa; chown 1000:1000 pv/id_rsa しておくこと
+#           CYCLE1: 3600
+#           SCHED1: 300
diff --git a/Dockerfile b/Dockerfile
+#      if [ -v BACKUP_PATH ]; then
+#          if [ `date +%s` -ge $target1 ]; then
+#              ((target1 += CYCLE1))
+#              echo "`date`: Job easy cron 1 started."
+#              stamp=`date +%Y%m%d_%H%M`
+#              ssh_opt='-o StrictHostKeyChecking=no -o PasswordAuthentication=no'
+#              if [ -v BACKUP_HOST ]; then
+#                  coron=:
+#                  ssh_opr="ssh $ssh_opt $BACKUP_HOST"
+#              fi
+#              last_backup=`$ssh_opr ls $BACKUP_PATH | tail -1`
+#              backup_ex0='--exclude=hyperestraier'
+#              if [ -z "$last_backup" ]; then
+#                  gen=0
+#              else
+#                  gen=$((`$ssh_opr cat $BACKUP_PATH/$last_backup/.gen` + 1))
+#                  link_dest="--link-dest=../$last_backup"
+#              fi
+#              rsync -av --delete $backup_ex0 $BACKUP_EX -e "ssh $ssh_opt" pv $BACKUP_HOST$coron$BACKUP_PATH/$stamp $link_dest
+#              echo $gen > .gen; scp $ssh_opt .gen $BACKUP_HOST$coron$BACKUP_PATH/$stamp
+#          fi
+#      fi

  さて、差分バックアップができたところで、さらにやりたいことがあるのだが、それはまた後日。