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

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

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

知ってる人には当然のことかも知れないが、
案外盲点だったので記録しておく。


タイトルにあるようにPerlにおいて、変数名を変数で指定する方法である。
よくわからないと思うので、具体的な例で説明しよう。


例えば引数などで外部CGIプログラムに値を引き渡す場合、
よく使われるのが「&」や「=」で変数名と値を結合して渡す方法だ。
受けて側ではforeach関数などで繰り返し処理をしながら、
split関数で再び変数名と値に分けたりするのが一般的だろう。
この場合、連想配列(ハッシュ)として取得するのではあれば話は簡単だ。
($key, $value) = split(/=/, $str)のように
$keyと$valueに分けておいて、$str{"$key"} = $valueとでもしてやれば良い。
これで$str{変数名} = 値という図式が完成する。
ところが、$keyをそのままスカラー変数名として使用しようとすると頭を悩ますことになる。
当然、$key = $valueでは$keyに値が格納されるだけで、
$keyの値をスカラー変数名として取得することはできない。
もちろん、一つ一つスカラー変数に格納していけばプログラム的には何ら問題はないのだが、
せっかく変数名とセットで送っているのに、これでは面倒だ。
実はこのような場合、簡単に$keyの値を変数名にする方法がある。
それには${$key} = $valueとしてやれば良い。
これは、スカラー変数も実体はキーのないハッシュであることを利用している。
というわけで、これを応用するとループ処理で$iを加算しながら
${'number'.$i} = $iのようにすれば、
$number1 = 1
$number2 = 2
$number3 = 3...
といったスカラー変数を簡単に作ることが可能だ。

本日、突然OperaでGoogleにアクセスできなくなった。
IEでは問題なく表示できるので、回線やプロバイダなどの問題ではなさそう。
調べてみた結果、以下の方法で解決できたので、備忘録的にメモしておく。

ちなみにOperaのバージョンは12.16.OSはXP。


SSLの設定の問題の可能性が高いということで、
左上のOperaのボタンから「設定」→「設定」を開く。
「詳細設定」タブから「セキュリティ」を選択し、「セキュリティプロトコル」を開く。
すべての項目にチェックを入れて、Operaを再起動する。
私の環境下では、これで再度Googleにアクセスできるようになった。
ただし、最初にアクセスした際には認証を行うためなのか、
表示されるまでに結構な時間がかかったので(危うく閉じてしまうところだった)注意してほしい。


また、個人情報を削除することで解決できる場合があるようだ。
方法は、「設定」→「個人情報の削除」と進み、「詳細オプション」を開いたら、
「メールアカウントのすべてのパスワードのクリア」と「認証管理パスワードのクリア」の
チェックが外れていることを確認した上で削除を行う。
この削除は場合によっては恐ろしく時間がかかるので気長に待とう
(私はフリーズを疑って途中で止めてしまった)。

皆さんはアメブロで記事を書く時、思い通りに表示されているだろうか。妙なところに改行が入ったり、逆に勝手に文章を詰められたりしていないだろうか。


実はこれは記事を書く際に利用しているブラウザの仕様の違いらしい。あくまで個人的な見解だが、アメブロで本当に思い通りになるのは今のところ、IEしかないように思う。


私はIEが大嫌いで、普段はOperaを利用しているのだが、とにかくOperaでアメブロの記事を書くと、いたるところに改行(Pタグやbrタグ)が入って、まったく思い通りにならない。中でも過去の記事をうっかりOperaで修正したりすると、それまでの表示とがらっと変わってしまい、大変な目に遭う。


なので、アメブロで記事を書く際はわざわざそのためにIEを立ち上げるか、「HTMLタグを表示」にしてタグごと記事を書くようにしている(ちなみに今回はIEで書いている)。


ところが最近、記事の投稿どころかブログの表示自体に問題がある場面を目にするようになった。特定のブログを開くと、なぜかしばらくするとページが白紙状態になってしまうのだ。OperaとFireFoxで確認できたが、IEでは問題なく表示されるので、これも恐らくブラウザとの互換性に問題があるように思われる。また、すべてのブログでそうなるわけではないので、特定のスキンに問題があるのかも知れない。


アメブロといえば芸能人も多数利用する国内有数のブログサービス。正直、面倒なのでわざわざ原因を調べたりしていないが、もしブラウザの互換性の問題であるなら、いい加減モダンブラウザにもきちんと対応したしようにならないものかと切に願わずにはいられない。

Yahoo! JapanにIDを持っていると、やたらと送られてくるおすすめメール。 1種類、2種類だけならまだしもその数なんと30種類ほど。そのほとんどは自分の意思で登録したわけではなく、勝手に設定されて送られてくるわけだから、かなりたちの悪いスパムといえるだろう(ちなみに私はプレミアム会員で金を払って見たくもない広告メールを見せつけられているわけだ)。


しかも、これらのメールを停止するには、送られたメールに書かれたアドレスを辿って配信停止の手続きをしなければならないのだが、この方法で停止できるのはその種類だけ。他のメールは解除できない仕組みになっている。30種類近くのあるメールをすべて配信停止にするにはメールが送られてくるたびに、いちいちこれを繰り返さなければいけないわけだ。数が数だけに本当に停止されているのかもよくわからない。実際、私のところには配信停止をしたはずのメールがいつまでも送られてきていると思われるケースが多々ある。


いつまで経っても停まらないので、一括で停止できる方法がないか調べてみたら、ようやくわかってので紹介しよう。ちなみにYahoo!のヘルプで知ったわけではない。


まず、Yahoo! Japanのトップページにアクセスする。右のログイン状態辺りに「登録情報」というボタンがあるので、それをクリックすると、「登録情報の確認」という画面になる。そのページの右下の方にある「おすすめ情報メール」というリンクをクリックしてようやく「配信の登録・解除」のページにたどり着くので、チェックを外して設定を変更すれば良い。なお、なぜか私の場合、配信停止したはずのメールにもしっかりチェックが入っていた。あの面倒な手続きはいったいなんだったのか。

以前から悩まされていた現象の一つに、フォルダを開く(下の階層に移動する)たびにディスクトップ上のショートカットアイコンが白紙にリセットされ、再表示されるまでに時間がかかるという問題があった。その間、PCの動作は非常に重くなる。

恐らく1~2秒程度のことだが、フォルダを移動するたびにウエイトがかかるのは結構なストレスだ。

原因としてはビデオカードが非力という可能性もあるが、もしかしたらアイコンキャッシュの問題なのかと思い、この辺りを整理してみることにした。似たような症状に悩まされている方は参考までに。

まず、アイコンキャッシュというのは何かというと、Windows上でアイコンを表示する際にいちいちハードディスクから読み込んでいたのでは時間がかかるので、メモリ上に保存しておき、そこから読み込んで表示するためのものだ。ただし、このキャッシュが大きくなりすぎると、逆に表示が遅くなったり、アイコンがおかしくなったりする。

そこでまず、肥大化している(可能性のある)アイコンキャッシュを削除してみることに。キャッシュ自体は必要になれば再び作成されるので削除しても問題はない。

XPの場合、C:\Documents and Settings\(ユーザー名)\Local Settings\Application Data
この中にあるIconCache.dbというファイルがアイコンキャッシュだ(隠しファイル属性なのでフォルダオプションで全てのファイルを表示にしていないと表示されない)。

サクッと削除して再起動(ちなみに3.57MB程度だった)。

ついでなのでアイコンキャッシュのサイズを変更する方法も紹介しよう。

※アイコンキャッシュの変更はレジストリを設定します。レジストリを変更すると最悪の場合、PCが起動しなくなるといった可能性があります。自信がない方はおやめください。実施する場合は自己責任でお願いします。

[スタート]→[ファイル名を指定して実行]をクリック。「regedit」と入力してレジストリエディタを起動する。

左側のエクスプローラ画面から「HKEY_LOCAL_MACHIN\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer」をたどる。

右側の「MaxCachedIcon」をダブルクリックして、キャッシュサイズの値を入力。「MaxCachedIcon」 がない場合は、空いたスペースで右クリックして [新規]→[文字列値] で作成する。

サイズは100~4096の範囲で設定できるが、通常は半分程度の「2048」くらいでOK。

レジストリエディタを閉じたら設定を反映させるために、ディスクトップの空いたスペースで右クリックして[プロパティ]を選択。[設定]タブから[画面の色]を現在のものから一端、別の設定に変更して[適用]をクリック。再度、元の項目に戻して[OK]を押せば有効になるはず。

とりあえず、これでしばらく様子見。