SVX日記
2005-05-20(Fri) 共立から部品届く
共立エレショップ | |||
---|---|---|---|
1GHz帯低雑音高周波アンプ MAR-8A | \609 | x2 | \1,218 |
チップコンデンサ 0.01uF 2012サイズ | x10 | \105 | |
三端子レギュレータ 7809 | \63 | x2 | \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本がサビサビなのが目立つなぁ……まぁいいや。
2011-05-20(Fri) チープに歌うLinux「妖音リナ」
先日、思わせぶりなことを書いたが、なんでいきなり昔作ったDTMアプリを引っ張り出してきたかというと、Linux上でOSSだけを組み合わせて「歌わせてみた」いから、そのための前哨戦だったワケだったりする。
なんだかんだいって、以前に作曲のマネゴトをしてたワケだし、いまこの瞬間も「初音ミク」には手を出す寸前なのだ。ただ、Windows上でGUIでってのが、オイラにとってはかなり敷居が高い。Linux用のボーカロイドが欲しい。が、ない。んじゃ、作る。
echo 'ah' | text2wave -o ah.wav; play ah.wav
echo "ah" | text2wave | sox -t wav - ah_200.wav pitch 200
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
「チューリップの歌」<mp3を再生する>
「イッペイのテーマ」<mp3を再生する>
「コネクト」<mp3を再生する>
「かえるの歌」<mp3を再生する>
「かえるの歌x2」<mp3を再生する>
「かえるの歌x3」<mp3を再生する>
2015-05-20(Wed) ACアダプタ直列!?
最近、ラジコンのバッテリの本数が増えてきているので(昨日、1本減ったけど)、早くも自作の充放電器1台では充電が追いつかなくなっており、4本同時に充電できる充電器でも作ろうかと画策しているのだが、複数のACアダプタの出力を回路上でどう扱うべきか、ふと思い悩んでしまった。
コンセントには極性がないようでいて、実は片側はアースだ。仮に、極性を逆に挿した5VのACアダプタ同士のマイナス極をつないだら、いったいどうなる? 実際に挿してみて、ACアダプタ同士のマイナス極間の電位をテスタで測ったみたら……ゼロだった。
2018-05-20(Sun) 次なる製作の準備
先日「縦線ばっかり、横線ばっかり」という順で記述されたSVGファイルはイマイチということがわかったので、自動的に一筆書きにするようプログラムを修正した。
実は、差し迫ってちょっと作らなければならないものがあり、そのための習作として、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プレイヤとしての敗北なのであり恥なのである。
そんな気づきを得た矢先、自分が職場で運用している自作のチャットシステムがトラブってしまった。結構、ガチで使われているシステムなので、めちゃくちゃ焦る。原因はディスクフルで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