突発性難聴になって骨折した

9月中旬ぐらいから、右耳の耳鳴りが多くなってきて、なんか聞こえ方がおかしいぞ?と思ったので耳鼻科に行きました。
何度か中耳炎をやっちゃってたり、右耳は過去に外耳炎もやったりしてるので、また今回もそれかなーと思って行ったら、見た目はなんともないと。

聴力検査を受けたら、右耳だけ一番低音のところと一番高音のところが有意に落ちてる。
結果、突発性難聴でしょう、原因はわかりませんがメニエール病に近いですかねーという診断。疲れやストレスでくるものなので、2週間ぐらい様子を見てくださいと。

その間に #akipara がありましたが、結構ぼーっと聞いていた部分はあります。聞こえてはいるんだけど、解像度が落ちているというか。そしてカクテルパーティー効果がなくなっている感じでした。たくさん鳴ってると聞き分けられない。

しかし2週間の間に自分でも悪化してるのがよくわかる。しかしネットで見るような吐き気がするようなぐるぐるしためまいは無し。単に聞こえない。いや、たまにガクッと頭が振られるような感じはある。
そんなわけで薬での治療となりました。

処方される前からお医者さんにも「まずい…というか飲みづらいんですけどいいですか?」と言われるし、薬剤師さんにも「飲みづらいので薄めて飲んで頂いても…」とかさんざん念を押されました。シロップの中に薬草的な苦み。ウンダーベルクを思い出しますね!
ということで、甘すぎて喉に残る以外はとくに問題なく飲めました。

5日経ちましたが、聞こえるときもあれば聞こえないときもある感じでしょうか。聴力検査の結果、少しは良くなってるみたいです?しかし今度は左耳に耳鳴りが…やべぇ。

そしてその間に、頭がガクッとくる感覚のおかげなのか、単に私の運動神経の問題なのかわかりませんが、バスケの審判をやっている最中に転んでしまい、手をついたら、痛い。
捻挫しちゃったかなーと思って湿布して放置してましたが、3~4日経ってもどうも別の痛みがあるような気がして整形外科へ。レントゲンの結果、前腕の骨の両端にヒビが入ってました。

ギプスは無しでいいですが痛みを感じることはやらないでください、ということで湿布しておとなしくしてます。

歳を取ると話題が 「孫の話」 「昔話」「病気の話」になっていくと言われておりますが、私もぼちぼち後二者は当てはまりそうです…それにしても厄年が遅れてきたかな。

秋葉原パラダイスレディオ Nackyプレイリスト #akipara

アキハバラパラダイスレイディオ | AKIHABARA PARADISE RADIO
終わって20日ほど経ちましていまさらですがお疲れ様でした。
皆様ありがとうございました。
秋葉原で屋外でraveできるというのもなかなかない体験でしたね!

ユータローさん写真ありがとうございます!

前日から使い始めたrekordboxにプレイリストを2つ3つ用意していって、前のDJたちがだいたいみんなやってくれたので、最初にやりたかったトランス向きセットを端折りながらやれました。ということでかけた曲は以下。

Highway Friendly / Cornelius – 攻殻機動隊ARISE
Moments of Inertia / Circle City
Hope (Elevator Mix) / Quench
Ayahuascan Chant / Ayahuasca
Sugar Rush / Man With No Name
Fiesta / Prana
Carte Blanche (Kenny Hayes Remix) / Veracocha
Sosei (F&W Remix) / Airscape
Ligaya / Gouryella
Buggie Running Beeps 01 / Keiichi Sugiyama – Rez
乙女のポリシー / 石田よう子 – 美少女戦士セーラームーンR

またどこかで。

NEC Lavieのレスキュー、リカバリ PC-LS150BS1TB

古いPCでも未だに使えている方はたくさんいらっしゃって、Windows7にOfficeでたまに文章を作りするだけならば10年前のパソコンでも十分だったりするのでしょう。
しかしセキュリティやらなんやらを考えたら、このへんの世代のPCなら非対応パーツもそんなにないでしょうし、Windows10にアップグレードして使い続けるのが良い選択しかもしれません。

で、私の手元に依頼されたPC-LS150BS1TB、LS150/Bという機種ですが、2010年6月発売。Windows7 Homeの32bitと64bitが選べる時代のもの。
Windows10にアップグレードして数日使っていたら、ブルースクリーン(Windows10のブルースクリーンはQRコードとか出るんですね!)で起動できず、ntfs.sysがおかしいとか出てくる。

こりゃHDDの故障かなーということで、このHDDは取り外し、リカバリすることに(NECはリカバリと言わずに再セットアップというらしい)。
しかし!持ち主はリカバリディスクを作成しておらず、そしてWindows10にアップグレードしてしまったPCは起動時にF11やら押してもリカバリモードに入れないのだとか!

240GBのSSD。今どき5千円もしない。

途中さまざまな試行錯誤をしたものの、最終的には下記の手順でレスキュー。
・新SSDを装着
・旧HDDのリカバリ領域の中身をコピー。Windows REとNEC-RESTOREの2つの領域があるので、どっちも
・急場しのぎの仮リカバリディスクを作成、工場出荷時に戻す
・ディスク作成ツールで本来の再セットアップディスクを作成
・リカバリ領域なしで全部Cドライブにして再セットアップ
・Windows10へアップグレード
・旧HDDのユーザー領域からデータをコピー、レスキュー

リカバリ領域から再セットアップディスクを作るまで

Windows RE領域もNEC-RESTORE領域も、普段は見えないのだが、これはドライブレターが割り当てられてないためにそうなっているようだ。
とりあえず読めれば良いので、USBメモリにUbuntuを入れてそこから起動、各パーティションの中身を他のUSBメモリにコピーして、別PCに持っていく。

再セットアップディスクはDVD-Rで4枚になるはずだが、とりあえず適当に分割。
disk1には boot、EFI、sourfces、TOOLS32、TOOLS64、bootmgr、BKW7_32.GHO、BKW7_64.GHOを入れておく。
disk2以降はGHSファイルだけ入れておき、最後のディスクにもsources、TOOLSは入れておく。
中身はノートンゴーストなんですねぇ。

Windows PEの起動ディスクを作るための環境を整える。Windows ADKをインストール。
Windows PE (WinPE) – Windows 10 hardware dev
「展開およびイメージングツール環境」を起動し、disk1を起動できるように作る。

Tools>oscdimg -u1 -bC:\LS150B\disk1\boot\etfsboot.com c:\LS150B\disk1\ c:\LS150B\recovery1.iso


OSCDIMG 2.56 CD-ROM and DVD-ROM Premastering Utility
Copyright (C) Microsoft, 1993-2012. All rights reserved.
Licensed only for producing Microsoft authorized content.
Scanning source tree
Scanning source tree complete (224 files in 24 directories)
Computing directory information complete
Image file is 2071724032 bytes
Writing 224 files in 24 directories to c:\LS150B\recovery1.iso
100% complete
Final image file is 2072229888 bytes
Done.

このisoイメージをDVDに焼いて1枚目とする。2枚目以降はただのファイルコピーなのでisoにする必要はない。

この仮ディスクでSL150/Bを起動すると、再セットアップが始まった。
途中で何度かディスクの入れ替えを要求されるが、中のファイルが見つからない場合は全てのディスクで試してみれば、そのうち当たる。


最後のディスクにTOOLSが必要なのは、ノートンゴーストを起動するためなんだろうなぁ。

HDDからSSDでスピードアップするとまだ全然使える気にになりますね!
ということであとは特にトラブルなくインストールが進みました。

Windows7インストール用USBメモリを作る

Windows7機のリカバリの際にWindows7のインストールが必要になり、手元にISOはあれどDVD-Rが無い、ということでUSBメモリからインストールすることに。

Windows 7のインストールUSBメモリを作る(Windows 7 USB/DVD Download Tool編):Tech TIPS – @IT
作成自体は参考記事の通りでできる…はずなのですが、最後に「bootsectを実行できませんでした」とエラーが出でしまう。

Windows 7 のUSBインストーラ作成 ( Windows ) – Web備忘録 – Yahoo!ブログ
bootsect.exeをツールと同じフォルダに置けば良いということだが、やはりうまくいかない。

コマンドプロンプトを管理者権限で起動して、そこからbootsectを実行する。/helpで内容を見れば使い方が書いてある。今回はWindows7(64bit)のインストーラを作成しているので/nt60で

bootsect /nt60 E:

これで無事起動できました。

それにしてもUSBメモリは人に貸したりしてるうちにどっかに行ってしまうもので。
16GBぐらいのメモリはOSインストールにお手頃なので複数買いしておきました。

WebSocketをPHPで使う、ループ処理も

webブラウザにリアルタイムに変化する情報を表示したいなーと思ったら、既存の頭ではAjax通信をSetIntervalするなりして取得する感じでありましたが、なんかHTML5の世はWebSocketなる仕組みが大体のブラウザでサポートされるに至ったようです。

というわけでWebSocketを使って何か作ろうと思い立ちましたが、サーバー側はNode.jsとかを使うのが主流のようで、もう脳内がPHPになっちゃってる人に新規習得させるのもちょっとコストだな、ということでPHPで作ります。クライアント側はJavaScriptだからjQueryでもなんでも良い。

PHPでWebSocketというとRatchetというのが出てきますので素直にソレを使います。というかRatchetしかないよね。

そんなわけでPHP Ratchetで検索するといろんなQiitaとかblogが出てきます。そのままコピペするとバージョン違いで死ぬので参考程度にしておいて、ちゃんと本家のドキュメントでInstallationとHello Worldまで追いかけましょう(英語だけど)。私は孫引きして2時間ぐらい遠回りしました。
Ratchet – What is a WebSocket?

手順的にはcomposerを用意して、ratchetを取得、使うところでrequireしてやります。

# composerの取得
curl -sS https://getcomposer.org/installer | php

# composerの設定
# vi composer.json
{
"autoload": {
"psr-4": {
"MyApp\": "src"
}
},
"require": {
"cboden/ratchet": "^0.4"
}
}
# 0.4にしなくても * 指定で最新指定のようです

# ratchet取得
php ~/composer.phar require cboden/ratchet

あとはとりあえずHelloWorldからコピペして作ります。
telnetで通信するバージョンと、WebSocketで通信するバージョンができますので、違いを学ぶと良いです。
シリアルポートやSocketの通信をしたことがある方はあっさりと理解できると思います。要はSocket通信がWeb上でできるということですので。

server.php側は手続き型のPHPなのにイベントドリブンな書き方になるのでちょっと戸惑いますが、監視ループで処理していく以上はそうなります。

で、HelloWorldではメッセージの送受信が発生して、それに伴う処理を行うところまではできましたが、サーバー側で何かを監視して、サーバー側発でメッセージを送りたい場合はどう書くのか。ググってもなかなか出てきません。

Hello World的には無名関数を即時生成しています

<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8080
);
$server->run();

onほげほげメソッド以外に常に何か動かしたい場合、ループ処理の中で実行するコードをChatクラスの中に定義し、$serverに定期的に実行させれば良いのです。

この辺は日本語ソース見つからず、stackoverflowで見ました。
web services – How do I access the ratchet php periodic loop and client sending inside app? – Stack Overflow

<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

require dirname(__DIR__) . '/vendor/autoload.php';
$chat = new Chat();
$server = IoServer::factory(
new HttpServer(
new WsServer(
$chat
)
),
8080
);
$server->loop->addPeriodicTimer(5, function () use ($chat) {
$chat->someMethod();
});
$server->run();

$chatを複数箇所で指定する必要があるので、事前にnewしておきます。
$serverのloopにaddPeriodicTimerを使って繰り返し処理を作成、別途Chatの中に呼び出すメソッドを作っておけばOKです。
addPeriodicTimerは小数も設定できるので、ミリ秒単位で実行することもできるみたいですが、正確にミリ秒にはならないかも。
とりあえず0.01秒ごとにmicrotime()の結果をクライアントにだらだと流してみましたが、飛び飛びな感じでした。実機・VMなどの環境にもよるだろうなぁ。

今回、PHPは7.0で実行しました。