ジュールシーフ回路の高速版GIFアニメを作ってみた

ジュールシーフ動作GIFアニメ高速化版

ジュールシーフ動作GIFアニメ高速化版

2年前に作った「ジュールシーフの動作をGIFアニメにしてみた」の高速版を作ってみました。

以下の動作を意識してGIFアニメを眺めてみましょう。

動作

最初に、トランジスタ左側のベースに電圧がかかって電流が小さく流れます。

するとそれが増幅され、トランジスタ右側のコレクタ電流が大きく流れます。

コレクタ電流が変化すると、コイルの自己誘導作用によって変化を妨げる方向に電圧が発生しますが、この電圧はベースに帰還するのでベース電流が増えていき、その変化がトランジスタによってまた増幅されるので、変化を妨げるどころか逆にコレクタ電流が増えていきます。

コレクタ電流が飽和状態に達すると電流の変化が止まるので、コイルからの電圧がなくなり、ベース電圧が落ち、ベース電流が減り始めます。この変化もトランジスタでしっかり増幅されるので、コレクタ電流が大きく減少します。

コイルはそれを食い止めようとしてコレクタとLEDに電圧をかけて押しますが、これもベースに帰還してベース電圧を下げる方向に働くので、ベース電流が止まってトランジスタがOFFになります。

これにより急にコレクタ電流を止める形になり、その勢いでコイルからの電圧が高まるので、その瞬間だけLEDを点灯できるレベルの電圧に達するのです。

電流変化が落ち着くとLEDの点灯しない電源電圧に戻り、最初の状態に戻って繰り返します。

Samba共有フォルダ上のファイルをWindowsのcopy *で結合すると順序が狂ってしまう問題

Linuxのcatコマンドみたいにファイルを結合する機能ってWindowsにないの?
typeコマンドは1個のファイルを表示するだけだし、catみたいに複数のファイルを指定しても結合されないし…

と思ってWebで調べてみると、Linuxで

cat aaa bbb ccc > ddd
cat * > xxx

に相当することが Windowsでは

copy /b aaa+bbb+ccc ddd
copy /b * xxx

のような書き方で可能、これは便利!

…というようなブログ記事がよく見受けられます。

しかし!
対象ファイルがSamba共有フォルダにある場合、ワイルドカード * を使うとファイル名の順序が狂ってしまうことがあります。

例えば、Samba共有サーバとなっているLinux上のsplitコマンドでファイルを xaa xab xac … のように分割し、それを Windows上から Samba 共有上で直接 copy * で結合して復元しようとすると、意図した順序で結合されず、元通りに復元できなかったりします。

どうやらこれ、Sambaの既知の問題と関連があるらしい。対応策として

dir /on

でソートする方法があります。この方法で copy * の順不同問題を回避するには、for 文と copy + を組み合わせて1個ずつ結合していくようなバッチファイルを書くとよいでしょう。

例えば、分割されたファイルだけが自分のデスクトップ(%USERPROFILE%\desktop)の test というフォルダの中に存在している場合、次のようなバッチファイルで結合結果がデスクトップに保存されます。

copy /b nul %USERPROFILE%\desktop\結合結果.txt
for /f "usebackq" %%f in (`dir /b /on %USERPROFILE%\desktop\test\*`) do (
copy /b %USERPROFILE%\desktop\結合結果.txt+%USERPROFILE%\desktop\test\%%f %USERPROFILE%\desktop\結合結果.txt
)

copy のオプション /b は忘れずにつけましょう。なぜなら、バイナリーモードにしないとtypeコマンドの^Z問題と似たような現象に遭遇してうまく結合できなかったりするからです。
拡張子が.txtになっていますが、copy /b がついてさえいればバイナリーファイルもOKです。

Ctrl-Zで終わるファイルをWindows7のtypeコマンドに食わせるとどうなるか実験してみた

Linuxのcatと同じだから…
と、バイナリファイルをtypeコマンドを使ってリダイレクトしようとすると、こんな落とし穴に遭遇することがあります。

この画像がすべてを物語っています。

WIndowsのtypeコマンドで^Zで終わるファイルを追加するとこうなる

WIndowsのtypeコマンドで^Zで終わるファイルを追加するとこうなる

中央と終端にCtrl-Z(EOF、16進で1A)の入ったctrl-z-test.txtというファイルをバイナリエディタで作ってみます。さて、これをtypeコマンドで表示させるとどうなるでしょう?

中央のCtrl-Zを「ファイルの終わり = End Of File」と勘違いしてしまい、そこまでしか表示してくれません。

しかし、別のファイルに新規作成モードでリダイレクトして保存してみたところ、中央のCtrl-Zも終端のCtrl-Zも保存されました。

そうか、リダイレクトなら、バイナリファイルを扱っても大丈夫なんだ…
と思いがちですが、実はここが落とし穴。
追加でリダイレクトしてみると…

なんと、1回目のリダイレクトで終端についていたはずのCtrl-Zが、2回目のリダイレクトで上書きされてしまいました!

バイナリファイルをtypeコマンドで追加リダイレクトして結合しようとして、たまたまCtrl-Z(16進:1A)で終わっているファイルがあったりすると、気づかぬうちにこの落とし穴にはまる場合があるので要注意です。

typeコマンドはやっぱりテキストファイル用みたいですね…

くそー!
copyコマンドみたいな/bオプションがあるといいのに…! -_-;
Windowsのダメなところの一つです。Windows 7 の時代になってもまだCtrl-ZをEOF扱いしてるとか、時代遅れですよね…。Linuxだとそんなことないのに…。