P720 * Windows 10 にDTM環境を構築した

Windows 10でDTM環境を作った

前回の記事の流れで諦めてWindows 10のDTM環境を作った。

Windows 10でDTM環境を整備

もう、すごくめんどくさくて、これに何日使ったかわからない。

色々と買い揃えている人ほどではないが、全部入り上位パッケージを買うタイプなのでこれはこれでひと財産という感じである。

環境としては

  • Cakewalk SONAR X3 PRODUCER
  • FL STUDIO PRODUCER Signature Bundle
  • Internet Ability 2.5 Pro
  • KOMPLETE 9 ULTIMATE
  • Air Music Technology Xpand! 2
  • Air Music Technology Hybrid 3
  • CeVIO Creative Studio 2 初回限定盤パッケージ (6.1アップグレード)
  • Soundspot Nebula

という構成になっている。

Windows 10 * SONAR X3 Producer

Windows 10上でSONAR X3 Producer自体は動作する。

ただし、動作しない(みつからない)プラグインがいくつかある。 dllをレスキューすればいける、みたいな話もあるのだけど、全プラグインを把握しているわけではないので確認はできていない。

SONAR X3をWindows 7上で使っている人はWindows 10に移したら完全には動作しない可能性を考えたほうがいい。

SONAR X3 Producerに付属しているAddictive DrumsなどはSONARとは独立してそのまま利用することができる。

非常に使える戦力なので、ぜひ活用していきたい。 今のところ一番イケてるドラム音源だと思う。

スタイリッシュになったものの難易度の上がったFL Studio 20

Macに対応したりして注目を集めるFL STUDIO。 変化が大きかったのでしばらく12と併存でいくのかと思いきや、バッサリとリリースと同時に12を切ってきた。

今までの使い方がわかっている人にとってはアクセスしやすくなって素晴らしいのだけど、そうでない人にとっては操作方法のヒントが激減した。

まぁ、デザイン重視なのはFLの伝統でもある。

プリセット設定ができてわかりやすくなったプラグインはインストールプラグインと扱いが異なるためわかりづらくなった。 インストールしたプラグインの操作はFile Settings -> Manage plugins -> Start Scanとやったあと、Plugin Database -> Installed という流れになっている。

ちなみに、私はSignature Bundle使いなのだけど、いつもバージョンがあがったあとアクチベーションするとPRODUCER - Signature Bundleと表示されるようになるのが好き。

FL STUDIO 11 のときは背景はFL-chanだったし、読み上げもしてくれていたのに、 12からはなくなってしまって残念。

なんだか懐かしいAbility

Singer Song Writerといったら初心者御用達のDAWだったし、割と舐められてた気がするのだけど、Abilityになってスタイリッシュになった。

SONARが終わったときに異様なまでのセールでAbilityが出ていて、まさにこういう事態(DTM環境のWindows 10化が避けられない)のために買っておいた。 いつも通りというか、最上位のAbility 2.5 Proである(パッケージ的には2.0)。

ちなみに、私はSinger Song Writerは使ったことがない。

もう一言で言うと

すごーく、シーケンサっぽい。

私はもともとXGWorksを使っていて、MIDIを組むのがお仕事だったりした。 当時はレコンポーザとかがあった。 そしてその他のライバルとしてRolandが売っているミュージ郎というパッケージがあって、それにシーケンサとしてSinger Song Writerがバンドルされていた。 ミュージ郎はそのうちCakewalkと組んでCakewalk(こっちはソフト名)をバンドルしたバージョンを出して、その後CakewalkがSONARになった。 RolandがCakewalkと組んだからインターネット(これは会社名)が出ていったのか、それともインターネットがSinger Song Writerの商品力で勝負しようとしたからRolandが見放したのかはわからないけれども。

Singer Song Writerはそれなりに波乱に満ちた歴史があって、wikipediaの記事を読むと面白いかもしれない

YAMAHAだってSOLがあったからXGWorksというとお手軽MIDIソフトだったのだけれど、販売面でいうとミュージ郎のほうビキナーパック感があった。 ちなみに、プロでSOL使っている人はすごく少なかった。当時はオーディオ化がコンピュータで完結しなかったので、オーディオになったあとの面倒をみるところをMIDIを組んでいるソフトでやる必要がまったくなかった。 ほぼProToolsの独壇場だったけれど、Cubaseを使っている人はまぁまぁいた印象。MIDIの組み方としてはSOLよりXGWorksのほうが簡単だったので、XGWorksを使っているプロはそこそこいた。

そんな歴史を語ってしまうほど、Abilityには当時の匂いがした。 洗練されていない四角いアイコンが並んで、操作方法も表示方法も現代的な視覚性を持っていない。 とにかく表示を並べる昔のままのスタイルだ。

少しはCubaseやStudio Oneを見習えというべきなのか、それともいやよくぞこのまま貫いてくれたと言うべきなのか。

だが、古臭いけれどなんとなく直感的で良い。 15分ほど触っただけだけど、なんとなくつかめたような気がする。

SONARはかなり気に入っていたので、それより良いものになるかはわからないけど。

Ability 2.5 の UVI GrandPianoModelD はかなり面倒

わかりづらくてかなり手こずった。

UVI WorkstationはKONTAKT PLAYERみたいなもので、これ自体はなにもない。 サウンドバンクの母艦になるものだ。

SSWのアカウントを発行するまではAbilityを起動してアクティベーションするところまでは済ませておくこと

  1. SSWのサポートセンターのマイページに行く (メールのリンクから行ける)
  2. パスワードをリセットする (Abilityから登録した時点でパスワードが発行されていない)
  3. マイページのリンクからBFD EchoとGrandPianoModelDのダウンロードを行う
  4. これらはPDFファイルのアーカイブになっているので展開する
  5. UVI Workstation サウンドバンクインストールガイド を読む
  6. ここに書かれていることを無視して 「UVI workstation ダウンロード」で検索してアプリを入手する
  7. UVI Workstationをインストールする。このときiLok License Managerもインストールされる
  8. しかしiLok License Managerは動作しないので、License Suport Installerを別途インストールする (iLok License Manager起動時にインストールするように言われる)
  9. iLok License Managerを起動する
  10. UVIのマイページから製品登録を選択し、iLokのアカウントと接続を選択してiLokのアカウントを作る
  11. iLOk License Managerでログインする
  12. 製品登録の画面でアクティベーションキーを入力、iLokアカウントに接続を選択してログイン、その状態で次へをクリックする
  13. マイプロダクトからGrandPianoModelDをダウンロードする
  14. rarファイルになっているので展開して、C:\Program Files\UVISoundBanks以下に展開して得られたファイルを配置する
  15. UVI Workstationを起動する

最高にめんどくさい。

BFD Ecoはそんな変なことはないので大丈夫なはず。 もっとも、ドキュメントから導入するのは変わらないけど。

Air Music Technology のアクティベーション

プラグインスキャン時にアクティベーションになる。

iLokも利用可能。

Nebulaは…

なんとシリアルナンバーすらない。

ものすごく安売りしてることが多いけど、商売っ気なさすぎないか。

CeVIOはスタンバイ

CeVIOは初回限定パッケージを入手済み。

ONEはまだ買ってないので、とりあえず今年中にさとうささらの曲を書くのが目標だ。 本当は使い慣れたSONAR上でさくさくっとやるつもりだったのだけれど、ソフトウェアが変わってしまったので厳しいかもしれない。 FLでやってもいいけれど、実はFLのほうもあまり自信がない。

EDMジャズみたいな曲を作りたいなと思っているのだけど、そういうのはとにかく時間がかかるので、 いつもどおり音数の少ない曲をとりあえず書こうかな、と思う。

ただ、ずっと思っていたことがあって、 プロになってからとにかくがんじがらめで曲を作ってきたから、 プロになる前みたいに、好きなように音を並べて音楽を作りたい。 楽器がどうとかじゃなくて、とにかく音を並べて音楽にしたい。

多分、CeVIO曲はそんな曲になると思う。

なお、CeVIO CS 2のときは機能らしきものはほとんどなかったのだが、CS 6になってなんかちゃんと音楽制作ソフト感ある感じになった。 なお、CS6になっても相変わらず出力オーディオは選択できない。

なお、なぜ2の次が6なのかは全く不明。VOCALOIDを追い越すためか???

あと、IAはトークがCeVIOでソングはVOCALOIDなので、PVではCeVIOでVOCALOIDの宣伝をする。

アクティベーションとライセンス管理

基本的には各メーカーのユーザーアカウントと結びつける方式。

XLNやNIは専用のアプリを使ってインストールやアップデートの管理も行う。 この方式はなかなか優秀。

iLokも以前のような凶悪なものではなくて、メーカーでユーザーアカウントは登録するものの、 マシン管理はiLokのアプリケーションで行う、というような形になっている。

マシン管理は厳しく行うもの(ディアクティベーションが必要)とゆるやかに行うもの(使わなくなった環境はそのまま使わなければいい)に分かれる感じ。

ただしCeVIOはやたら厳しく、使いにくい方式をとっている。

TASCAM

シリアルナンバーとは別の認証コードを発行。 インストール後は直ちに認証コードを入力しないと使えなくなる。

認証コードはユーザー登録と製品登録を行うことで発行。 一度発行したあとはそのコードをディアクティベーションなしで利用できる。 利用状況はチェックされる。

Image Line

ソフト上からログイン、あるいはマイページから登録用ファイルを獲得して登録。

ユーザーアカウントと結び付けられる。

Internet

メールとURLを使った登録とダウンロード、そしてインストール時にシリアルナンバー入力。

マシン同定に使用するデバイスをシステムドライブとネットワークインターフェースカードから選べる。

XLN Audio

専用アプリで管理。

ディアクティベーションはマイページから行うものの、専用アプリから通知してくれる。 マシン管理が簡単でとてもうれしい。

ただし、ソフトウェアごとではなく、専用アプリ単位でのアクティベーション。

Native Instruments

専用アプリで管理。

マシン管理はチェックのみで、特にディアクティベーションは不要(古い環境がそのまま使っていなければ破棄されたものとされる)。

Air Music Technology

ユーザーアカウント、あるいはiLok。

UVI

iLok。

昔のように専用ハードウェアは必要ない。

BFD

ユーザーアカウント。

ダウンロード時に認証される。 マシン管理はあるのか不明。

Soundspot

多分ない

Celemony

「鬼畜Melodyne」とか呼ばれていた。

インストール時ユーザーアカウントとの結びつけだけれども、ディアクティベーションがアプリ上からしかできない仕様で、マシンが壊れるとメールするしかなかった。

最近はしれっとマイページからディアクティベーションできるようになっている。

CeVIO

現状もっとも鬼畜。

ユーザーアカウントと結びつけるタイプだけれども、認証を起動ごとに行うため、ネットがない環境では起動不可。 さらに、CeVIOのサーバーが落ちてることがまあまああるため、そのときも利用不可。

Lenovo ThinkStation P720 に Windows 7 をインストールする

なんとかしてP720でWindows 7を使う

私が音楽のお仕事するときの環境は以前としてその中核にSONAR X3が据えられているため、Windows 7が欠かせない。

ThinkStation P720は将来性を考えてWindows 10モデルを選択したが、手元にあるリテール版Windows 7 Professionalのライセンスを利用してWindows 10, Windows 7, そしてLinuxという構成にするのが私の目論見であった。

Skylake-SPプロセッサはWindows 7を使うことができる最強にして最終のプロセッサである。

だが、これはかなりの困難に阻まれた。

もちろん、Windows 10は(いささかの問題はあれど)動作するし、Linuxもなんら問題はない。 だが、Windows 7に関してはインストールディスクから起動すると “Starting Windows” の表示と共に停止してしまうのだ。

様々なトライをしたがうまくいかず、Windows Updateを適用したディスクの作成を試みた。

内容としてはここここを参考にしたが、そのままは適用できなかった。 特にIE11関連はアップデートの配布がされていなかった。

とはいえおおよそ必要と思われるものを統合した。

だが、これでも問題が発生した。

Legacy (BIOS) なら起動できるのだが、UEFIだとUEFIアプリケーションを見つけてもらえない。 bootx64.efiの用意もしたのにだ。

調べたり質問したりしたのだが、解決には至らなかったので、結局UEFI Onlyでの運用を諦めてハイブリッドブートとした。

さて、これでインストーラが起動するようになったのだが、残念ながらUSB2.0ポートにつなぐ場合(P720はキーボード/マウス用ポートのみがUSB2.0)を含めてUSBデバイスが一切反応しない。

幸いにもPS/2ポートが存在しているので、これを利用する。PS/2-USBアダプタは機能しなかったため、PS/2キーボードを新規に購入した。

これでWindows 7は起動するのだが、まともに動かない。 とにかくドライバがない。そして何も動かない。

仕方ないので別のマシンから SCCM Packages For Windows 7 (64-bit) – ThinkStation P720, P920 をゲットして、CD-Rに焼いて展開する。

そう、USBもイーサネットコントローラも動作しないのでCD-Rだけが頼りなのだ。

この状態でC:\DRIVERS以下にドライバファイルが配置された状態になるので、デバイスマネージャからドライバの場所の指定でここを指定すればインストールできるようになる。

大量の動作しないデバイスがあるためかなり大変な作業である。

Windows 7をP720にインストールした状態

とりあえず2つのネットワークコントローラとUSB(4つある)をインストールすればWindows Updateもできるようになり、楽な進行になるだろう。 USB3.0ルートハブにUSB2.0ハブがぶら下がっている格好であるためUSBマウスが動作しなかったのだが、USB2.0ハブのほうもWindows 7はドライバーを持っていなかった。

実際は全部をインストールしなくてもよかった(ある段階でCPU内蔵機能に関しては残りすべて導入されていた)が、Windows Updateと並行するのでなかなか複雑なことになる。

注意点としては、「Blink系ブラウザはシステムがフリーズする」。 原因はわからないが、とりあえずブラウザはFirefoxに限る、ということになりそうだ。導入作業でChrome, Vivaldi, Sleipnirなどを使って作業しようとするとハマることになる。

Windows 7 は動いたが、断念せざるをえず

「特定のタイミングでフリーズする」という問題が「ASIOなどでの音声再生時」に発生したことが致命的で、どうすることもできないので断念することとなった。

そもそもWindowsは音楽制作専用である。他にWindowsを使う機会はない。 厳密に言えばそこから派生した作業もWindowsですることになるが、中核になるのは音楽制作であり、それがなければWindowsはいっそなくても構わない。

だからASIOでの音声再生でフリーズする、というのは音楽制作に使用できないということであり、私としては全く価値がない。

記事としては「Windows 10 プリインストールなP720でWindows 7を動かす」というテーマだからここから先は重要ではないとも言えるんだけど、私としては10日程度を無駄に費やしてここからがスタート地点ということになる。

とりあえずDTM系ソフトウェアは2台に対してアクチベーションが可能なものが多いので、P720 Windows 7は諦めて、 Z400 Windows 7とP720 Windows 10に対して構築していく方針としている。

P720のWindows 7もASIOで落ちたりしていたのだが、アップデートで落ち着いたようだ。

SONAR X3は残念ながらWindows 10では動かない部分がある。 D-Proが動かなかったような気がする…D-Proは私の主力なのでなくなると大変痛い。

(D-ProはどのみちSONAR以外では利用できないようになっている)

DTMの話は続きとして書いていたのだが、主旨の全く異なる話になったため、分割する。

新品コンピュータを初期状態に戻せるようにバックアップ

これは何

新品コンピュータを購入したときに、完全に元の状態に復元できるようにするものである。

バックアップ手段は色々とあるのだが、もっとも確実かつ完全な手段が「ディスクの完全なクローンを得る」という方法だ。

その方法について紹介しよう。

なお、これは「やや複雑な手段をとっても効率的に、確実に元に戻せる手段を構築したい」という人向けであり、 そのような場合は諦めるという人や、考えたり努力することを回避したいという人は対象としていない。

新品ならでは

新品のコンピュータのディスクは、ファイルをコピーしているわけではない。 データを流し込んで複製しているのだ。

一般的には、先頭からWindowsシステム用の領域が書き込まれ、そして末尾にバックアップ用の領域があるのが一般的である。 バックアップ用の領域はパーティションが切られ、その中に格納されていることもあるし、パーティションレイアウトの末尾の後ろに配置される場合もある。

このため、データが書かれているのは先頭と末尾のみで、中間は全くデータがなく、0が書かれている。

128GBのディスクをフルクローンした場合は当然ながら128GBのファイルが出来上がる。 だがしかし、連続する0のデータは圧縮すると極めて小さくなる。そのため、このようなディスクイメージは圧縮することによって非常にコンパクトにできるのだ。

これが使用していたディスクであればうまくいかない。 データが記録されていない領域も0で埋められているわけではなく、ごちゃごちゃに記録された状態になっているため、フルディスクイメージを圧縮したときに極端に小さくなることはない。 そのため、完全性や確実性が低下してでもなるべくコンパクトな形式でバックアップするのが一般的なアプローチになる。(partimageやntfscloneなどを使うということだ)

書き戻しに関して

次のようにして取得したイメージは

$ dd if=/dev/sda | xz -z -c > /mnt/sda.img.xz

次のようにして書き戻すことができるのだが

$ xz -d -c /mnt/sda.img.xz > /dev/sda

この場合、128GBの「元のディスクに」書き戻すことを前提している。

サイズが違う場合どうなるかというと、ディスクが大きければパーティションがディスク全域ではなく途中で終了し、途中にリカバリー用の領域が置かれた状態になる。 ディスクが小さい場合はパーティションがディスクのサイズよりも大きく設定されてしまう。 この修正はちょっと大変だ(Windows上では難しいかもしれない)。

だが、実際のところリカバリー領域は書き戻しによって復元できているため、なくなってしまっても構わない、と考えられる。 そして、パーティションテーブルはパーティションの内容より前にある。 よって「先頭からデータのある分だけを復元すれば良い」ということになる。

このため、復元したデータは全部書く必要はなく

$ xz -d -c /mnt/sda.img.xz | dd of=/dev/sda bs=1024M count=10

のようにすれば良い(1024MB=1GiBを10回なので10GiB書き込むことになる)。 内容としてはどのみち残りは0なのであり、書いてもかかなくても同じだ。 ディスクサイズが異なる場合はパーティションサイズのみ変更すれば良い。

バックアップの仕方

Linuxで起動する…ところまでは省略しよう。 UnetBootinなどの使用は勧めないが。

まずはpartedでディスクを確認しよう

$ sudo parted -l

これによって各ディスク名(/dev/sdaなど)を得ることができる。 ここではバックアップ対象のディスクはsdaであるとしよう。 異なる場合は読み替えること。

リムーバブルディスクにバックアップ

モダンなLinuxシステムではリムーバブルディスクを接続すれば認識され、ファイルマネージャが起動する。

ファイルマネージャ上でリムーバブルディスクを開き、そこで右クリックから端末(ターミナル)を開く、とする。 そして

$ dd if=/dev/sda bs=64M of=recover.img

のようにする。 もし、圧縮も同時に行うのであれば

$ dd if=/dev/sda bs=64M | xz -z -d > recover.img.xz

のようにする。時間がかかっても圧縮率を上げるのであれば

$ dd if=/dev/sda bs=64M | xz -z -d -e -9 > recover.img.xz

とすれば良い。

なお、NASなどのネットワークドライブ上に保存する場合も似た手順で行うことができる。

ネットワーク上のLinuxホストに対して行う

もう、説明がいるのかどうかも怪しいが、計算機母艦となるLinuxを運用している場合は 受け取る側のLinuxホストではnetcatをインストールしておく。

そしてnetcatで通信を待機する。 次の例ではBSD netcatを使用する。

$ nc -N -l 22500 > recover.img

受け取り側で圧縮する場合は次のようにする。

$ nc -N -l 22500 | xz -z -d -e -9 > recover.img.xz

送り側はncなどはない場合が多いだろうし、ライブブートではインストールも難しい。 しかし、bashにはTCP機能があるため、これを利用する。

$ dd if=/dev/sda bs=64M > /dev/tcp/192.168.1.128/22500

注意点は、bashでなければならないこと、そしてファイルに書けばよいわけではなくリダイレクト機能を使わなければいけないことだ。

Windows PerlでUnicodeなファイル名を使ってはまる

業務でPerlでプログラミングしていたのだが、 Unicodeなファイル名で出力していたら文字化けする、という症状が報告された。

ミニマムのコードとしては以下の通り

use utf8;

open(FH, ">", "てすとふぁいる");
FH->print("テスト出力");
close(FH);

これはLinuxでは問題なく動作するし、それについては実際に動作させて確認もしてある。 ところがWindowsではこれが文字化けする。

まぁ、NTFSはUTF-16LEだもんね。 というわけで対応してみる。

use utf8;
use encode;

open(FH, ">", encode("UTF-16LE", "てすとふぁいる");
FH->print("テスト出力");
close(FH);

ところがこれでもだめである。

もちろん、次のようにすれば動作するのは知っている。

use utf8;
use encode;

open(FH, ">", encode("cp932", "てすとふぁいる");
FH->print("テスト出力");
close(FH);

おそらくWindowsがShift-JISをシステムエンコーディングとして使っていて、FATの日本語ファイルにもShift-JISを使っていたこととの互換性のためにシステムが何かをしているのだろう。 だが、その何かの結果うまくいかなくなってしまう。 日本語ファイルならShift-JISで書くという手もあるが、今回の場合お客様の要望としてはファイル名にはハングルを使う。しかしシステムは日本語Windowsである。

さて困った。

Win32::Unicodeという手もあるようだが、これがUnicodeでかけるのかは結構疑問だ。 さらに言えば、今回の場合かなりの数のファイルを書くため、速度低下が無視できない。

ちなみに、Ruby (RubyInstaller)だと

File.open("てすとふぁいる", "w") {|f| f.puts "テスト出力" }

ちゃんと動作したりする。

テストしたところ、Active Perlでも、Strawberry Perlでも問題は同じ。 しかしCygwin Perlだと起きない。 Cygwinを使うというのは初心者にとってちょっとハードルが高いので避けたい部分ではあるのだが…

なお、RubyはMinGWを使っているから大丈夫なのかもしれない。

お仕事ではPerlも使えます。 今じゃ使える人も少ないので貴重なのではないかと思う。 ご依頼、お待ちしてます!!

Discordを使ってみた

Discordというアプリを知っているだろうか。 まぁ、だいたいの人は知らないだろう。

簡単に言えばSkypeのようなメッセンジャー+通話アプリであり、Discordは大声で「Skypeを投げ捨てろ!!」と言っている。 だが、単純にSkypeのようなアプリというわけではない。 ものすごく乱暴に言えばSkypeのような機能と、Slackに通話機能をつけたものを一体化させたものである。

通話とメッセージングのソフトウェア(例えばSkypeやLINE)と比べると結構複雑だ。 これは「2つの側面がある」と考えてもらうと良いだろう。

Slack的な部分

だが、まずSlackを知らない人が圧倒的に多いだろうからそこから説明しよう。

Slackは簡単にいえば共同作業用のチャットツールである。 「Slackのアカウント」というのは基本的に存在せず、「チーム」というのがその単位となる。 「チーム」はメンバーを招待することができ、招待された人はそのリンクを使ってメールアドレスを登録するとそのチームのメンバーとなることができる。 チームでの活動は、チームのアドレス、またはチーム名とメールアドレスを使って行う。

メンバーにはプロフィールがあるが、プロフィールもチームごとに設定する必要がある。 逆にいえば、チームの性質によって異なるプロフィールを使うことができる。 メンバーにはロール(役割)を与えることができ、メンバーを追放する、チャンネルを作成するなどの権限を分けることができる。

チームにはチャンネルがある。 全体の発言は#generalというチャンネルで行うが、チャンネルを作成すれば、話題を分けたり、閲覧できるメンバーや発言できるメンバーを制限することができる。 基本的には議題ごと、あるいはチーム内のメンバー区分ごとにチャンネルでやりとりをすることになる。 メンション機能もあるが、これは特定の人だけにメッセージが届くわけではなく、特定の人に通知を飛ばすだけである。 ユーザーグループというのもあるが、これはメンションを飛ばす時に複数人をまとめて書いたり、チャンネルに加えるときにまとめて書くための機能。

Slackは主にIT企業の業務で使われていて、ビジネスツールというニュアンスが強い。 社内でのやりとりとしてはメールなんかよりよっぽどいいのは確かだと思う。

ただ、逆に言えばそれ以外では全然使われていない。もともとゲーム用のツールだったなんてことは、ほぼ忘れ去られている(私も知らなかった)。

しかし、実のところ、マメ派のカップルにはかなり良いと思うのだ。 デートの予定やイベントの計画、今日の買い物といった話題をLINEでやりとりしていると、どんな話をしていたか確認するのが大変になってくる。 LINEはログをさかのぼりにくいし、ノートに立てていればいいのだが、LINE for Chromeはノート機能がなかったりするし、明確に議題を定めてから話がはじまるとは限らない。 そもそもノートも増えてくると議論には向いていないことになる。 なので、Slackで#date, #event, #todoなどチャンネルを作っておけばスムーズにやりとりや確認ができてとても便利だ。

ところが、LINEを投げ捨ててSlackにいけない理由がある。 まず、割とSlackの通知はまちまちで、あまりリアルタイムではこない。マメ派カップルにとっては割と致命的だ。 しかも通話機能もない。ラブラブなカップルにとってはますますもって致命的だ。

ここでDiscordである。

DiscordはこのあたりはだいたいSlackと同じだ。 大きな違いとして、Slackで「チーム」と呼んでいるものは「サーバー」という名前に変わっている。 そして、通話機能がある。

通話機能がちょっと独特で、1名でも通話をはじめられる。 チャットのように(特にIRCのように)、「通話チャンネルに入っている人が自動的に通話する」という方式だ。 途中参加もできるし、途中離脱もできる。というか、最後ひとりになっても勝手には切れない。 通話チャンネルも複数作ることができる。

また、雑音を積極的に検出し、しゃべっていない時はマイクを切るようになっている。 プッシュトゥトークにすることもできるので、大勢参加していてもノイズまみれにならないようになっている。 これは便利だ。

また、SkypeやHangoutsのグループトークにない機能として、ユーザーごとに音量設定できる。 声の小さい人を大きく、声の大きい人を小さく。好きな人を大きく、嫌いな人を小さくすることが可能だ。

そして重要な違いとして、Slackと違ってちゃんとすぐに通知がくる。

Skype的な部分

だが、Discordの場合はユーザーアカウントがある。

そのため、複数のデバイスでDiscordを使用した場合、自分が参加しているサーバーはすべて一覧されるし、招待するときはユーザー名とDiscord番号の組み合わせで行う。 フレンド登録もできる。プロフィールや名前もサーバーごとというわけではない。

さらにフレンド登録すると、ダイレクトメッセージとダイレクトコールが可能になる。 これはSkypeやLINEのように、人単位でメッセージを飛ばしたり、通話したりすることができるのだ。

ただし、Skypeにあるビデオ通話や画面の共有は、実装予定の機能となっており現在はない。 これを書いている今日テストがスタートしたようだが。

また通話手順がちょっと複雑だ。Discordがフロントにある場合は普通に通話がかかってくる。 ただし、通話をかけた側は通話画面にはならず、右下にあるVoiceの矢印で開かなければチャット画面での通話になる。 これは通話を受けた場合も同様。

また、通話を切っても残った側の通話は自動的には切れない。これはサーバーの場合と同じである。

なんらかの理由で最初からチャット画面に変遷した場合(通知から飛んだ場合などだ)、まずDM画面にいき、JOINをタップしたあと、Connect to Voiceを選択しないと通話に参加できない。 これはなかなかややこしい。

グループDM機能があり、これは招待もなにもなく、グループDMを作成すると招待された全員が自動的に参加する。 グループDMはフレンドリストに登録される。グループから退出したり、グループに追加で招待することは可能。 退出してもすぐ招待されるようなことが起きるとちょっと面倒。最後のひとりになってもグループ自体は消えない。

スタンプ機能はない。写真埋め込みは可能。

Slackに対するメリットとして、日本語に対応している。 Slackが便利でもインターフェイスは英語に限られていたSlackは敷居が高いという人が多かった。

また、ちゃんとしたクロスプラットフォームアプリがあるということも大きい。Slackの場合はアプリケーションもいまひとつだ。

また、Slackのように有料プランがあって、機能が制限されているというわけでもない。

もっと便利な部分

Discordはゲストログインが可能で、サーバーを作ってアドレスを伝えれば、相手がDiscordのアカウントを作らないまま通話することができる。 しかもDiscordにはWeb版があるので、共通の通話可能なアプリがない、あるいはアカウントを教えたくない場合でも通話することが可能だ。 かなり特殊な要求だとは思うが。

残念な部分

通知のオンオフはできるのだが、通知音は変更できない。

ゲーマー向け

Discordがゲーマー向けということで、ゲーマー以外で使っている人をみかけることがない。

オンラインゲームでは多人数協力プレイができたりするので、通話しながら意思疎通ができたほうがスムーズにプレイできるのだ。 従来はSkypeを使っていたようだが、最近SkypeがどんどんダメになっているのでDiscordに移っている人が多いらしい。

だが、微妙にバグはあるが、SkypeもLINEもXMPPも投げ捨ててDiscordで生きていけるくらいには便利である。 実用上の話であって、かわいいスタンプが好きな人は辛いかもしれないが。

ゲーム中は特に言うことがなければ黙っているだろうし、発言者のみ聞こえるようになっているのはこのためだろう。 割とキーノイズもするわけだし。

バグ

3つのバグを発見した。

通話通知がおかしい

P02E(Android 4.1.2)だと、通知音が通話でもメッセージのものになってしまい、一度鳴るだけで終わってしまう。

アプリを殺すと通知されない

CM Securityでクリーンアップしてしまうと通知は届かない。 これはNotifications wake up device.をオンにしていてもダメだ。

なかなか恐ろしい通話ループ

  1. AがBに書ける
  2. Bが出る前にAが切る
  3. Bが通知エリアから通話に出る
  4. BにAからかかってきたと表示される。「出ない」ことができない
  5. Bが通話に参加するとAに呼び出しがかかる。こちらも「出ない」ことができない
  6. BがAが出る前に切ったら立場を入れ替えて3にループする

みんなDiscordしようぜ

良い点

  • SlackとSkypeの合体とか超魅力
  • 日本サーバーのないWebRTCとは思えないほど音が良い
  • Windows, Mac, Linux, Android, iOSに対応
  • ちゃんと通知される
  • 画像も貼れる
  • グループDMやグループ通話もできる
  • Skypeよりはるかに軽い
  • 話題を分けて整理することができる
  • グループの中で特定の人に呼びかけることができる
  • 運営が透明で技術的にも透明
  • 登録も簡単でゲスト利用も可能、個人情報も要求されない

悪い点

  • 若干複雑
  • ちょっとバグがある
  • 通知音の設定ができない
  • 個人情報もいらないので尻尾切りのような残虐行為が気軽にできてしまう
  • キモいスタンプが使えない

Windows 10について

悪名高いWindows 10をある程度使ってみている。
とりあえず、それで思ったことをまとめてみよう。

OSとしての進化

一般の人の中にはOSの進化を頑なに認めない人がいるが、元々Windowsが(それ以前にMS-DOSが)ひどい代物である以上、修正すべき点は多い。低い生産性は人類の進歩を妨げさえする。

だから、Windowsはどんどん改善してもらわないと困る。

純粋にOSとしての点をみれば、それが正しいかどうかはともかく、かなり良くなっている。
「ここはこれがおかしくて、こうあるべきだからこうしてほしい」という点は山ほどあるのがWindowsだが、その望まれているあるべき解決方法ではなく、なぜか全然違う方法で提供して、「なんでそうなった!」と突っ込まれるのは恒例なのだが、今回もそのような変更点は非常に多い。

いつまで経ってもfork(2)をサポートしないこととか、まともなシェルを用意せずに、明らかにシェル、端末として使いようのないPowershellを導入したまま放置していることとか。

私はWindowsアプリは書かないし(書くとしてもクロスプラットフォームレイヤ上で)、コアな開発者でもないため感じることは少ないが、「クロスプラットフォームレイヤのWindows環境下での制約」という形で困る。

そういう内部的なことは置いておくとしても、Windows7以降で改善された点として

  • ISOファイルのマウントが可能になった(Win8)
  • 通知機能がまともになり、通知履歴が見られるようになった
  • すべてのUI部品が(一部は仮想的に)スケーラブルになった
  • Win + cursorによるquick tile機能が8方向タイルに対応した(現在位置に基づくタイル。Cinnamonと同じ)
  • IMEスイッチャが搭載された(Windows+Space)

使い勝手

Windows 10の使い勝手そのものは改善しているといっていい。

UIについて考えてみると、基本的な部分はWindows XPの時点で既に完成されていた。Windows 95の時点で基本的な部分はできあがっていたが、見た目がチープであることと、たどりにくい階層構造が難点だった。
Windows XPではテーマ制を導入(Visual Styleの変更はパッチ当てが必要)、簡易なものではあるが、デスクトップ検索も追加している。
また、ウィンドウのタイル表示も可能になった。

Windows Vistaでさらなる改良が行われたが、本質的な進化というよりも、変化であるという面も大きかった。
Windows 7でアイコン式のタスクバーになったが、これも元よりそうであるべきだったというものではない。選択できるなら機能追加だが、選択できないので単なる変更だった。

明らかに改良された点は検索機能が強化され、ポータブルアプリの起動にランチャが不要になったという点だが、スタートメニューの構造やタイルの仕様変更などは、変更でしかないように感じられた。

ちなみに、Windows 7からはWin + Cursorによるquick tileが可能になった。ただし、Windows 7では左右のみだ。

Unix系デスクトップはこの時期、何を取り込んだのか先行したのかわからない機能を数多く導入している。quick tile機能はKDE4, Cinnamon 1.0の導入なので恐らくWindows 7のほうが早い。入れ替え式階層メニューはWindows Vistaが早いが、KDE Plasma 4のものはまた違うし、Cinnamonもさらに違う。また、MacのExpose相当の機能はCompizが入れたため、Windowsよりも早い。

だが、Unixデスクトップで考えても、機能的にはGNOME 2あるいはKDE3で既に完成していた。これらはWindows 95のUIを参考に発展したものであり、その後は細かな機能追加に過ぎないと感じている。

変化を求めている部分もあるし、変化に応じている部分もある。だが、どちらかというと、Microsoftは変な先読みをしている、というよりも自分がスタンダードを作るのだという妙な気負いがある。

それが、Windows 8でのスタートメニューを廃止してModarn UIを導入したことにあらわれているのだろう。奇抜だが、真新しさの演出と、Windowsがやればそれが普通になる、という考え方に基づくのだと思う。

結果として失敗した。実際に問題点が多く、使いにくかったということもあるが。

Windows 10のスタートメニューはその修正だと考えていい。スタートメニューとModarn UIを一体化させたものは、確かにある意味では使いやすいが、目新しいものであるというよりは、Androidスマートフォンで見慣れたものになった。

Windows 8からのフラットUIもより推し進めてはいるが、やはりデザイン的にリッチさに劣るように(個人的には)感じられるし、特に見やすくなったわけでもないため、単なる変更だろう。

機能が一体的に提供されるようになったために、それに従うかどうかだが、「Microsoft製のOS(Windows)で、Microsoftが推奨する音声エージェント(Cortana)を使用し、Microsoftのサーチエンジン(Bing)を介して、Microsoftのブラウザ(Edge)で開く」のであれば使いやすいのだ。

だが、これはAndroid同様のリスキーな面を持っている。

ケータイ化・個人情報商売という悪夢

Windows 10において問題なのは使い勝手ではなく、この2点だ。

Windowsは統合的な環境になった。基本部分ではなく、ユーザーのすべてを「Windowsが」提供しようというのだ。

そこには、メールやスケジュール、あるいはSkypeやTwitter, LINEさえも含まれる。
WindowsストアアプリはWindowsから独立ではなくなった。言い換えると、Windowsストアアプリに提供されている情報はMicrosoftにも与えられる、という形になった。

Windowsに、言い換えればMicrosoftに依存して生活するのであればこれは便利な機能だ。もちろん、Windows Phoneも一緒に。検索エンジンはBingだ。

だが、これはありとあらゆる情報的ライフライン及び情報そのものをMicrosoftに掌握させることを意味する。事実、Windwos 8.1ではデフォルトでオフだった、利用状況や入力内容の送信など、プライバシー上重大な懸念のある機能が、全てオンの状態になるようになった。

しかも、コアな利用状況のレポートは、送信をオフにするとWindowsが動作しないという理由をつけて、必ず送信させる。

ありとあらゆる情報を収集し、個人を監視するような行動は、これまでGoogle及びAppleがとってきたものだ。それと比べるとMicrosoftは穏やかなやり方をしてきた。

だが、今回Microsoftは積極的にプライバシーを手に入れようとしている。Web, Twitter, Facebook, Skype, LINEはもちろん、電話からメールまで全てだ。

それに合わせて規約も、メールの内容を読むというものになった。
また、利用には基本的な部分でMicrosoftアカウントと紐付ける必要がある。完全に個人を特定し、追跡できるようにするものだ。

これらのプライバシーに対する重大な懸念を、私は今回最も問題視する。

また、ケータイの場合はそうした統合的な機能を求める傾向があるのだが、Windows 8で学んだはずの「スマートデバイスとの融合は不自由を生む」ということを無視して、より融合を進める方向になった。

電話だのSNSだのといった機能は、Skypeと連動させることでパソコンでも利用可能なのかもしれないが、明らかにコンピュータの使い方としてそれは重要な部分ではない。それを中心に据えられるのは非常に迷惑だ。

また、パーソなりゼーションを進め、SNSの情報を常に表示し、ニュースを表示し…といった機能は、ビジネスシーンで使われるWindowsということを一切無視しているとしか思えない。

その意味で、ものすごく使いにくくなった。

KDE Plasmaも、KDEアプリケーションを使ってこそという部分はある。KDE PIMとAkonadiだ。
だが、使わないという選択肢はある。その場合、Plasmaを使う魅力は大いに損なわれてしまうのだが、普通のデスクトップ環境としては使うことができる。

今回のWindowsは、その選択権がない。ちなみに、しょっちゅうデフォルトのアプリをMicrosoft製のものに変えられるようになった。ブラウザがEdgeにされるのは日常茶飯事だし、IMEはデフォルトを完全に無視してMS-IMEを選択する。

アカウント

Windows 10ではアカウントが、コンピュータ上のローカルアカウントとMicrosoftアカウントの二種類がある。

ローカルアカウントをMicrosoftアカウントに接続することで、ローカルアカウントとして使いながらMicrosoftアカウントを要求するストアアプリを利用するといったことも可能だ。

だが、Microsoftアカウントでは、ログイン(今回からローカルアカウントでも「サインイン」という表現になった)時にオンライン認証をする。
そのため、インターネットに接続されていなければコンピュータを利用すること自体できなくなった。

デスクトップアプリとストアアプリ

ほぼ全てのプログラムに「デスクトップアプリ」と「ストアアプリ」という区別ができた。

Windows 8にもあった区別ではあるが、ストアアプリを使う機会が設定しかないということもザラにあったため、目立たなかった。

今回、多くの機能がストアアプリに移行したため、この区別が重要な意味をもつようになった。また、ストアアプリがウィンドウ表示できるようになったというのも大きい。

これにおいて重要なのは以下の点だ。

  • ストアアプリは事実上Microsoftが全権を持っている
  • ストアアプリではIMEがストアアプリに対応しているMS-IMEしか使えない
  • ストアアプリはオンラインアカウントとひも付けて実行される

表面から消失した機能

コントロールパネルが隠されてしまっている。
これは検索から起動できる。

これは、ストアアプリの設定を使わせるということなのだろうが、全項目があるわけではなく、重複があったり、片方にしかないものがあったり、表現に整合性がとれていなかったりと非常にわかりにくくなった。

設定に関してはgodmodeも追加された。これは、コントロールパネル的なデスクトップアプリのフラット版だ。

まだ、ログオフがメニューから消失した。
Windows 10はオンラインアカウントでのログインを原則としているため、サインアウトに変更されている。

logoffコマンドが存在するため、logoffで検索すれば抜けられる。あるいは、CAD(Ctrl+Alt+Delete)からでも良い。

総括

OSとしては妥当に進化した。あまりにもスマートフォンを意識しすぎて、デスクトップコンピュータとしての使い勝手が著しく損なわれた程度で、別に悪くなったとは言わない。

全てはログインを「ログオン」という表現から「サインイン」という表現にかえたことにあらわれていると思う。

今やWindowsを使うということは、Microsoftのサービスを利用するということとイコールなのだ。

これまではWindows上で他のサービスを利用することも当たり前だった。だが、これからはそうではない。WindowsはMicrosoftのサービスを使うことを強要する。Appleがそうしたように、ロックインして競合する他のサービスの利用を不能とする可能性もないわけではない。

既に、Windowsを起動すれば当然にGoogle Chromeが起動し、Google日本語入力で文章を打ち…ということはできなくなった。Edgeに変更された設定を戻し、Google日本語入力に切り替えなくてはならない。

また、Windows上で行う作業は当然に秘密が保たれていると信じていただろう。これからはそうではない。Windows上で行う作業は、須くMicrosoftが知りうるものなのだ。

こうしたことをどのように考えるかによって、Windows 10が良いものか悪いものかの判断ができるだろう。

JP106キーボードでwindowsキーを使う

UnicompキーボードはダイヤテックがJPキーボードを取り扱っているのでJPキーボードはあるのだが、日本語106キーボードであり、Windowsキー、メニューキーがない。

Linux上でこの問題を改善したい。

まず、Cinnamonの場合、キーボード→レイアウト→オプションで左Altと左Super(Windows)を入れ替えるというものがある。これを使えば、右Altがあるため、Superの利用が可能になる。

だが、慣れた位置にAltがないことに戸惑う場合もある。109キーボードの場合、AltキーはSuperキーの右側にあるため、この位置にあり、私はあまり使わない無変換をAltキーにする。

Plasmaの場合はこの法歩うが使えない。AltキーをSuperに当てても、ウィンドウマネージャにおいてはAltキーとして動作するためだ。

そのため、無変換、Pause、ScrollLockのいずれかをSuperキーとして使うのが良いのではないか。

これらの設定をまとめたエイリアスがこちら。

# Xmodmap
alias xmapmhn2alt='xmodmap -e "keycode 102 = Alt_L"'       # Use Muhenkan as Alt key
alias xmapmhn2sup='xmodmap -e "keycode 102 = Super_L"'     # Use Muhenkan as Super
alias xmappus2sup='xmodmap -e "keycode 127 = Super_L"'     # Use Pause as Super
alias xmapscl2sup='xmodmap -e "keycode 78 = Super_L"'      # Use ScrollLock as Super
alias xmappus2hyp='xmodmap -e "keycode 127 = Hyper_L"'     # Use Pause as Hyper
alias xmapscl2hyp='xmodmap -e "keycode 78 = Hyper_L"'      # Use ScrollLock as Hyper

キーコードが不明な場合はxevで取得しよう。

cdrdaoでディスク吸い出し→DAEMON Tools Liteでマウント

Gist

ゲームソフトをいつも手元に置いておくのは邪魔なのだが、ゲームで起動するためにディスクが必要なものがあったりする。

シングルトラックならddなりcatなりで良いのだが、オーディオトラックを含むマルチトラックのものはそうはいかない。

吸い出しはLinuxでして、Windowsで仮想ディスクとしてマウントできるようにしたい。

基本的な方法としては、「DAEMON Toolsでcueファイルをマウント」であるらしい。cueファイルはトラック情報を記載したテキストファイルで、binファイルとセットになっている。

Linuxでのディスククローニングにはcdrdaoを使用する。これは、従来オーディオディスクでも使用している。

だが、cdrdaoはbinファイルとtocファイルを生成する。tocファイルをcueファイルに変換するtoc2cueを使用する必要がある。

だが、それだけではエンディアンに違いにより、DAEMON Toolsでマウントするとオーディオディスクはホワイトノイズのみとなってしまう。この解決のためddのconvオプションを使用する。

さらに、異なるパスに対して吐くと、binファイルのパスが問題になるため、パス記述を書き換えるsedを加えた。

Linux的にWindowsをバックアップしてみる

ClonezillaやMondo Rescueを使えば一発だし簡単なのだけれど、ここはより手軽で確実な方法を模索する。

Clonezillaでいいのであれば(最大の欠点は、より小さいディスクへの復元ができないことだが)、Clonezillaがわかりやすく容易だし、Mondo Rescueも工夫次第でかなり柔軟だ。

しかし、今回はよりテクニカルかつ原始的に解決してみる。

バックアップを考える

ものすごく単純なバックアップ方法としてddがある。この場合、ディスクに記録されている全ビット情報をクローンする。完全なクローンが出来上がるが、20GBを使用している2TBディスクのクローンのために2TBの領域が必要となる。

これを緩和する方法として圧縮があるが、この場合使っていないが書き込まれている「ノイズ」が多い場合は有効に小さくならない。

NTFSであればntfscloneというプログラムによって、必要最低限の領域で正確にクローンができる。特殊イメージ形式は非常にコンパクトだ。

ここで、Windowsディスクの特性と、Windowsシステムの特性を見てみよう。

$ socat tcp-listen:20083 STDOUT
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 625142448 sectors, 298.1 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 9AED5CE5-3A6D-469A-BCB0-51F33E062B6F
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 625142414
Partitions will be aligned on 2048-sector boundaries
Total free space is 2669 sectors (1.3 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          206847   100.0 MiB   EF00  EFI system partition
   2          206848          468991   128.0 MiB   0C01  Microsoft reserved ...
   3          468992       625141759   297.9 GiB   0700  Basic data partition

これはUEFIシステムのWindows 7だ。

GPTが使用されており、sdb1がUEFI(ESP)で、FAT32またはFAT16である。

sdb2がMSR。sdb3がシステムパーティションだ。

ESPが2048ブロックから開始している。これより手前部分、GPTとUEFIであればなくてもそれほど苦労せずに復元できると思うのだが、一応残しておいたほうがいいだろう。

0, 1, 2はサイズが小さいため、単純にddでもそれほど問題ないだろう。

システムパーティションはWindows XP以降はNTFSであり、ntfscloneが利用可能だ。

Windowsのシステム起動については、ディスクレイアウトがバックアップ時と同じである必要がある。そのため、手前ブロックを含めて復元して同じレイアウトを再現する必要がある。

ただし、ディスクサイズに対してはある程度柔軟だ。大きいシステムパーティションが最後方にあるため、パーティション3を拡張したり切り詰めたりした上でntfscloneで復元することができる。MBRからGPTへの変換などは、同時にはできないと考えたほうが良い。

転送を考える

バックアップ先は色々考えられるだろう。光学ディスクへのバックアップ、外付けハードディスク、あるいはNAS。

今回の場合は、高性能でストレージ容量の大きいメインデスクトップへと転送する、という方法をとる。デスクトップとラップトップを併用している人などにとっては一般的な要求だろう。

ここでLAN接続の強みが出る。ネットワーク経由で転送することができ、USB2で転送するよりもはるかに速い。
ちなみに、USB1.1を採用するような古いマシンの場合でも通用する方法であり、100BASE-TXあたりのネットワークに接続できる(外部カードを使う方法を含めて)のであれば、USBドライブよりもはるかに高速だ。汎用性がある。

簡単さで考えればSSH経由が最も楽だ。例えば

$ ssh desktop.local -- sh -c 'cat > backup-sdb1' < /dev/sdb1

ただし、SSHによる負荷を嫌うのであれば、rshのほうがいいだろう。しかし、あまり最近はrshを許容していないのではないだろうか。

ほかにもZshを使うとか、FTPを使うとか、FTPFSを使うとか、方法は様々なのだが、ものすごくシンプルに考えると標準入出力渡しが良い。

nc(netcat)だ。

しかし、単純にサーバーで

$ nc -l -p 10000 > sdb1.img

クライアントで

$ nc desktop.local 10000 < /dev/sdb2

としても、転送終了でコネクションを切ってくれない。切るだけであれば、クライアントを

$ nc -c desktop.local 10000 < /dev/sdb2

(GNU netcatの場合)とすれば良いのだが、この場合ちゃんと転送が終わってから切ってくれないため、ちゃんとファイルが転送されない(!)

これを解決するには、クライアント側はsocatを使うようにすれば良い。

$ socat STDIN tcp:desktop.local:10000 < /dev/sdb2

別にサーバー側もsocatを使って良い。OPENよりもSTDOUTのほうが安定している。

$ socat tcp-listen:10000 STDOUT > sdb2.img

実際にやってみる

まずはオフセット分をコピーする。サーバー側:

$ nc -l -p 10000 > sdb0.img.xz

クライアント側:

$ dd if=/dev/sdb bs=512 count=2048 | xz -zev -T 4 | socat STDIN tcp:desktop.local:10000

このケースにおいてはクライアントに余力があるため、サーバーに余計な負担をかけないよう、xzはクライアントで行っているが、古いマシンならばサーバー側でしたほうがいいだろう。:

$ nc -l -p 10000 | xz -zev -T 8 > sdb0.img.xz

クライアント側:

$ dd if=/dev/sdb bs=512 count=2048 | socat STDIN tcp:desktop.local:10000

sdb1以降は少し楽。

$ xz -zev -T 4 < /dev/sdb1 | socat STDIN tcp:desktop.local:10000

sdb2も同様。sdb3はntfsclone。

$ ntfsclone --save-image --output - /dev/sdb3 | socat STDIN tcp:desktop.local:10000

NTFSクローンでもサーバー側ですることは変わらない。

クライアント側socatの代替

Pythonもやろうとしたが、辛いので諦めた。
とはいえ、この4つに対応していれば、だいたいの環境でいけるだろう。

もちろん、LuaやJavaScriptやPythonが好きな人は、即席でプログラムを書いても構わない。

Zsh

TCP Function Systemを使う。

$ autoload -U tcp_open
$ tcp_open desktop.local 10000
$ tcp_send -c < /dev/sdb1
$ tcp_close

TCP shootのほうが簡単

$ zmodload zsh/net/tcp &&  autoload -U tcp_point
$ tcp_shoot desktop.local 10000 < /dev/sdb1

あるいはzsh/net/tcpを使っても良い

$ zmodload zsh/net/tcp
$ ztcp -d3 desktop.local 10000 && ( cat /dev/sdb1 >&3 ) && ztcp -c 3

Perl

$ perl -MIO::Socket::INET -e 'BEGIN { $sock = IO::Socket::INET->new(PeerAddr => "desktop.local", PeerPort => 10000, Proto => "tcp")} while (read(STDIN, $buf, 524288)) { print $sock $buf }' < /dev/sdb1

Ruby

$ ruby -rsocket -e 'sock = TCPSocket.open("desktop.local", 10000); buf = "x" * 524288' -e 'sock.write buf while STDIN.read(524288, buf)' < /dev/sdb1

Bash

意外すぎる必殺技。Zshよりも簡単だったりするので恐ろしい。

$ cat /dev/sdb1 > /dev/tcp/desktop.local/10000

ただし、Bashはクライアントのみ。

書き戻しのnetcat代替

バックアップを使って書き戻す場合、bashが使えない。

仮にリモート側で

$ xz -dv sda0.img.xz | socat STDIN tcp:laptop:10000

とした状況としよう。

netcat

まずは基本

$ nc -l -p 10000 > /dev/sdb

socat

こちらも簡単

$ socat tcp-listen:10000 STDOUT > /dev/sdb

Zsh

$ zmodload zsh/net/tcp &&  autoload -U tcp_point
$ tcp_point 10000 > /dev/sda

もしくは

$ zmodload zsh/net/tcp
$ ztcp -ld3 10000 && ztcp -ad4 3 && cat <&4 > /dev/sdb && ztcp -c 4

Perl

$ perl -MIO::Socket::INET -e 'BEGIN{$l=IO::Socket::INET->new(LocalPort=>10000,Proto=>"tcp",Listen=>5,ReuseAddr=>1); $l=$l->accept} while (read($l, $buf, 524288)) { print $buf }' > /dev/sdb

Ruby

$ ruby -rsocket -e 's = TCPServer.open(10000).accept' -e 'buf = "x" * 524288 ' -e 'write buf while s.read(524288, buf)' > /dev/sdb

Bash

Bashはリスナーになれないので、リモート側を反転させる必要がある。

$ xz -dv sda0.img.xz | socat STDIN tcp-listen:10000

これを受け取る。

$ cat /dev/tcp/desktop.local/10000 > /dev/sdb

もちろん、この「クライアントがソケットを読む」デザインを他に適用しても良いのだが、多分あまりメリットがない。

この方法の意味と価値

まず、簡単の意味を考えなくてはならない。

この記事の内容は、基本的な知識を網羅していることを前提としている。当然ながら、システムバックアップをするためにLive Linuxを使おう、と発想するくらいには。

だが、理解するのは非常に容易だ。パイプとリダイレクションという、Unixerとしては初歩知識さえあれば十分理解できるレベルだ。

一般の人には難しいだろうと思うが、エンジニアを名乗るのであればこの程度の話は通じて然るべきだと思う。少なくとも、私はそう期待している。

「理解する気はないが、模倣して実行したいだけ」という場合は、わざわざこんな複雑な手順を取る必要はないと考えるだろう。実際、他にもバックアップソリューションはあるのだし、たとえコンピュータの後ろに手を伸ばしてでも、あるいは2度コピーする手間が生じたとしても、そのほうが良いと考えるだろう。

実際、即時参照できるネットワークドライブがあるにも関わらず、USBメモリーで渡せと言う人を、私は身近に知っている。

だが、思ったようにいかなかった時はどうすればいいだろう?例えば、Clonezillaが小さなディスクに復元できると思ったのにいざとなったらできなかった時だ。

特定のソリューションに依存するのは非常にリスクが高い。できるだけ汎用性のある方法で、かつ自分が理解できるもののほうがいい。

実際問題として、Mondo Rescueを使うという選択肢を取った場合は、バックアップ先をどうやってマウントするか、という問題が生じてしまう。

また、圧縮したいが、クライアントはリソースが非常に少ないのでできない、という場合に、一旦ディスクに保存してからの圧縮という方法をとらずに(恐らく復元する時は伸長してからの復元ということになる)行いたいといった要求に対応するのも、標準入出力を使うのであれば非常に容易だ。

技術を使う、知識を使うとはこういうことではないか。

特定の目的のために知識が技術を身に着けたところで、できるのはそれだけだ。それは単に慣れた、覚えたというだけの話であり、「知」ではないと思うのだ。

Windowsをアップグレードする前に元に戻せるようにスナップショットを取っておきたい、というのはごく当たり前にある状況だ。そのための機材が揃わないということも。

原理、物事の仕組みを理解し、方法を考えられることは非常に重要だ。すべてお膳立てされ、整った環境でなければできないのか?それがスキルなのか?

最低限ひとつの方法を知っていて、それで目的が達成できるということは有意なことだ。しかしそれは、楽をしようとして知らず犠牲を払っているということでもある。

覚えたひとつの方法でうまくいかない時、あるいは適切でないとき、適切な別の方法が考えられるか?そこが知なのだろう。

では、すべての人がそうした知識を持たなくてはならないのだろうか?私は、否であると考える。人には無限の時間が与えられているわけではない。知の獲得を志すことを是としても、そこにコンピュータに対するものが含まれているとは限らない。

だから、私の仕事があるのだ。ここに知がある。そして、それは独占するものではなく、分け与えられるべきものだ。私も生きなければならないので、無償で、というわけにはいかないが。

だからこそ、用意した方法が通用しない、しかし知を蓄える労力を払うべきという判断ではない、というのであれば、その時にこそ私を頼ってほしいのだ。

それだけの時間もお金もかけているのだ。それだけ真剣に努力を重ねてのものだ。

もちろん、自ら解決するための力をつけるために、私の手を借りてくれたって構わない。先人の肩を借りてその先までいくのは当然のことだ。このニュートンだって巨人の肩に乗るのだから。

Windows Updateに果てしなく時間がかかる

Forza Motorsport 6 Apexが登場するというので、

  • OEM版 Windows XPをP2VでWindows 10で動作しなくなるアプリの動作環境を確保
  • Windows 7のスナップショット取得
  • Windows 10にアップグレード

という手順を考えた。

Windows XPのP2Vのためのスナップショット取得などの作業とWindows7のバックアップ手順などは後で記述することとして、今回はWindows 7をWindows 10にしようとしたら、Windows Updateがチェックするにもアップデートするにも果てしなく時間がかかり、Windows 10にできそうにない。

Microsoftは何がしたいのか。

どうもこれはKB3138612のせいである模様。それが悪いのではないのかもしれないが、このアップデートからそうなっているようだ。

しばらくアップデートせずにおいておいた人からの報告が多い。私の場合、2月が最後だったため、2ヶ月半ほどアップデートしていなかった(そもそもWindowsを起動することが稀だから)。

で、KB3138612を入手して適用しようとしたのだが、これまた果てしなく時間がかかる。

で、もう少し調べていたら、オンラインではスタンドアロンインストーラも結局チェックに行くため時間がかかる模様

というわけでLANケーブルを抜いて適用した。

だが、これでも終わらないので、WindowsUpdateAgentの最新版(7.6), KB3050265も導入。

それでもダメで、修復してもダメなので、一旦Update前までロールバック。Windows Update AgentとKB3138612を先に導入し、更新チェックで放置。1時間40分ほどでチェックを完了した。

恐らくは最初に更新して時間がかかりすぎ、再起動したのが原因だが、ロールバックなんて普通はできない。更新途中での再起動も普通に考えられることだ(自動アップデートの場合もあるわけだし)。それで壊れるなんて、設計としておかしすぎるだろう。

アップデートやセットアップに何日も潰したことも数え切れない。今回も結局一日がかりだ。ほんと、Windowsは嫌いだ。Microsoftは何がしたいのだろう。