to be continued ~とあるプログラマーの実験的開発日誌~ -13ページ目

to be continued ~とあるプログラマーの実験的開発日誌~

WEBデザイナー兼プログラマーである管理人が日々のトラブル解決に向けて奮闘する開発日誌。

最近、iTunesから登録した曲が消えるという現象に悩まされていた。

それもプレイリストからなくなるというだけではなくて、

iTunes Mediaフォルダからなくなってしまうのだ。

もっぱらPCから再生するだけで、ipodなどへの同期も行っていない。

しかも、何度入れ直しても同様の現象が発生する。

原因を探るため。ネットなどを調べてみても

ライブラリ全部が消えたといった報告はあっても

特定の曲だけが消えるという報告は聞かない。


しばらく悩んでいたのだが、まあ、結論から言うと、笑ってしまうほど単純な落ちだった。

iTunesの設定で「ライブラリの追加時にiTunes Mediaフォルダにコピーする」の

チェックがいつの間にか外れていたのだ。

設定をいじった覚えはないので、アップデートか何かの拍子に

変わってしまったのだろう。

つまり、真相はこうだ。


曲をライブラリに追加して再生してみると特に問題がおきないので、

当然こっちはiTunes Mediaフォルダにコピーされたファイルが

再生されているものと思い込んでいる。

しかし、実際はコピーされたファイルではなく、元のファイルが再生されていた。

ライブラリへの追加に問題ないので、元のファイルを削除。

次に再生する際には曲が見つからないというわけだ。


もともとプログラムにはバグやエラーがつきものと思い込んでいるので、

何かトラブルがあってもそれが単純なミスほど気づきにくくなっているようだ。

ある種の職業病なのかも知れない・・・。

今回は知っている人にとっては当たり前すぎることでも、

知らない人にとっては意外と盲点という話。


たとえば日数を「○日」といったように表したい場合、

○の部分を変数にして記述すると、


$day = '10';
print "$day日\n";


という感じで表示できる。


ところが、これを「○day」のように英語で表そうとすると、


$day = '10';
print "$dayday\n";


としても当然、表示されない。

なぜなら、変数と文字列を続けて書いたため、

$daydayという一つの変数として扱われてしまうからだ。


もちろん、連結子の「.」(ピリオド)を使って

print $day."day"."\n";

というようにしても良いのだけれど、

これ自体の結果を別の文字列と組み合わせたり、他の変数に入れたりすしようとすると、

ややこしくなってくる。


そこで変数を明示的に表す方法が役に立つのだが、

変数の部分を{}で囲ってやれば良い。

上記の例の場合、


$day = '10';
print "${day}day\n";


とすれば万事解決。


まあ、わかっている人にとっては何をいまさら的な話なのだろうが、

それだけに調べてみると意外と見つけられなかったので記録しておく。

2、3日前からアメブロの読者管理のメッセージが読めなくなってしまった。


間違って設定でも変えてしまったかと思い、


あれこれ調べていたら、どうやらアメブロの仕様変更らしい。


こんなページを見つけた。




【読者申請】ひとことメッセージ機能終了のお知らせ




まったく気づかなかった・・・。


まあ、基本的には返信しないのだけれど、


もしかしたら無視するのは失礼に当たるメッセージがあるかもと気になっていたので、


とりあえずひと安心。




わざわざメッセージ機能を使ってまで伝えることではないけれど、


一言添えたい場合ってけっこうあると思うのだけど・・・。


フォーム内に複数のチェックボックスがある場合、そのすべてを一度に選択や解除できると便利だ。それをJavaScriptで実装してみる。


まずはフォームの記述。チェックボックスはそれぞれ名前を振っておく。


[サンプル]

<form name="フォームの名前">
<input type="checkbox" name="checkbox1">チェックボックス1<br>
<input type="checkbox" name="checkbox2">チェックボックス2<br>
<input type="checkbox" name="checkbox3">チェックボックス3<br>
<input type="button" value="すべてにチェック" onClick="AllOn()">
<input type="button" value="すべてを解除" onClick="AllOff()">


続いて、以下のスクリプトを<HEAD>~</HEAD>の間に記述。


[サンプル]

<SCRIPT language="JavaScript">
<!--
chn = new Array("checkbox1","checkbox2","checkbox3"); // チェックボックスの名前を記述
// すべてのチェックボックスをチェックする
function AllOn(){
for(i=0; i<chn.length; i++) {
document.フォームの名前.elements[chn[i]].checked = true;
}
}
// すべてのチェックボックスのチェックを解除
function AllOff(){
for(i=0; i<chn.length; i++) {
document.フォームの名前.elements[chn[i]].checked = false;
}
}
//-->
</SCRIPT>


チェックボックスを増やす場合は、chn = new Array("checkbox1","checkbox2","checkbox3");に「,」で区切って追加すれば良い。

フォームの名前は任意で良いが、JavaScript内にもあるので忘れずに。


サンプルページはこちら

システム復旧に伴うメモその2。


私はPCで作業する時は大体音楽を聴きながらするのだが、1日8時間程度は行うのでCDなどをいちいち交換したりしていられない。当然、PCで保存して連続で流しているわけだが、とくにこだわりがあるわけではないのでデータベースとして管理しやすいiTunesを利用している。

手持ちのCDなどもすべて登録しているので、結構な量だ。それらを失ってもう一度構築しなければならない羽目になることを考えるとぞっとするのだが、幸いなことにiTunesのデータは別のドライブで管理していたために今回は無事だった。

とはいえ、iTunes自体は再インストールする必要があり、元の環境に戻せるか不安だったのだが、データはフォルダごとドラッグアンドドロップして登録するだけで、プレイリストもLibrary.xmlを呼び込んで再生できた。

ただ、一つ。これまでiTunesを最小化するとタクスバーにミニプレイヤーとして表示されていて、音量や曲送りなどは元の大きさに戻さなくてもそこから操作できていたのが、再インストールすると表示されなくなっていた。デフォルトの仕様ではなかったようだ。

どうやったのか思い出せなかったので、調べてみると方法が判明した。

やり方はiTunesを立ち上げた状態で、タクスバーを右クリック。コンテキストメニューの「ツールバー」の七から「iTunes」の項目にチェックを入れる。その後、iTunesのオプション画面を開いて、「iTunesウィンドウをシステムと例に最小化する」のチェックを外すだけ。これでタクスバーにミニプレイヤーとして表示されるはずだ。