2015年12月16日水曜日

散髪

なんと「ザ・理髪」が年末休暇に入っており、例のチェーン店で散髪。
ただし、自宅近くのお店ではなく、会社最寄りの駅側にあるお店に行ってみた。

平日の夕方だったせいか、お客はいない。
まぁ、すぐにやってもらえるから良いか。

横と後ろは8mmのバリカンで刈り上げ。
上の方は、申し訳程度にハサミで切ってもらった(^^;

短時間でぱぱっとやってもらえるのはありがたい。
また、自宅近くのチェーン店は分業化が進みすぎて慌ただしいが、
こちらはそれほどの慌ただしさは感じなかった。

��3人しか店員さんがいなくて、静かだったからかな。


2015年11月23日月曜日

Raspberry Pi 2 で RadioShark2(その2)

Raspberry Pi 2 で RadioShark2(その1)からの続き。

libhidapiに関して検索すると、HID API for Linux, Mac OS X, and Windowsを発見した。
 #というか、日本語で書かれたページが出てこない(^^;
上記ページと、hidapi APIを見ながら、しばし後悔(^^;

サンプルプログラムも付いているのでなんとかなるだろうと、久々にviでCのソースをいじる。
 #これまた、5年以上振りだと思う(^o^;

悪戦苦闘すること数時間。
なんとかコンパイルエラーがなくなるところまできたが、linkするファイルがわからない。
以前のバージョンのshark2.c
gcc -g -o shark2 -lhid shark2.c
でコンパイルできたが、
今回は-lhidapiではダメだった。

インストールされたパッケージ名をもう一度よく見て、-lhidapi-libusbにしたところ、
なんとかコンパイルが通った(^^;;

その後、ちょこちょこ実行時エラーを修正し、なんとかLEDの制御が出来るレベルまできたのが下記。
/* This souce code written my Michael Rolig (email: michael_rolig@alumni.macalester.edu)
* This can be considered to be in the public domain
*/

/* Modified for Radio Shark2 2007-05-11
* This source code is written by Hisaaki Shibata (email: shibata@luky.org)
* Original Shark2 controll code in Delphi is written by
* Kawabe (email: mail.kwb@gmail.com)
* This can be considered to be in the public domain.
*/

/* Modified for Radio Shark2 on Raspberry Pi 2 with hidapi.h 2015-11-22
* This source code is written by Hisaaki Shibata (email: shibata@luky.org)
* This can be considered to be in the public domain.
*/

#define DEBUG false /* Set true for copious debugging output */
#define SHARK_VENDID 0x077d /* Griffin's Vendor ID */
#define SHARK_DEVID 0x627a /* The radioSHARK2's Device ID */

#define READ_EP 0x5 /* libhidapi read command? */
#define WRITE_EP 0x5 /* libhidapi write command? */
#define SEND_PACKET_LENGTH 7 /* size of an instruction packet: shark2=7 */

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "hidapi/hidapi.h"

void usage(int argc, const char** argv) {
printf("%s <command> <arg>\n\tchange state of radioSHARK2\n\n", argv[0]);
printf("commands:\n"
" -fm <freqeuncy> : set FM frequency, e.g. '-fm 80.7'\n"
" -am <frequency> : set AM frequency, e.g. '-am 730'\n"
" -blue <intensity> : turn on blue LED (0-127) '-blue 127'\n"
" -red <0/1> : turn on/off red LED '-red 1'\n");

/* Declare variables used later */
hid_device *handle;
struct hid_device_info *devs, *cur_dev;

devs = hid_enumerate(0x0, 0x0);
cur_dev = devs;
while (cur_dev) {
printf("Device Found\n type: %04hx %04hx\n path: %s\n serial_number: %ls",
cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number);
printf("\n");
printf(" Manufacturer: %ls\n", cur_dev->manufacturer_string);
printf(" Product: %ls\n", cur_dev->product_string);
printf("\n");
cur_dev = cur_dev->next;
}
hid_free_enumeration(devs);

}

int main(int argc, const char** argv) {

/* Declare variables used later */
int ret;
hid_device *handle;
struct hid_device_info *dev;

/* Build the instruction packet to send to the shark */
unsigned char PACKET[SEND_PACKET_LENGTH] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
unsigned short encodedFreq;
float freq;
unsigned int intensity;

if (argc == 3) {
if (strcmp(argv[1], "-fm") == 0) {
/* Tune to an FM frequency */
PACKET[0] = 0x81;
encodedFreq = 0;
freq = atof(argv[2]);
encodedFreq = ((freq * 10 * 2) - 3 );
PACKET[1] = (encodedFreq >> 8) & 0xFF;
PACKET[2] = encodedFreq & 0xFF;
PACKET[3] = 0x33;
PACKET[4] = 0x04;
PACKET[5] = 0x00;
PACKET[6] = 0x28;
if (DEBUG) {
printf("band = fm\n");
printf("freq = %.1f\n", freq);
printf("encoded freq = 0x%x\n", (unsigned int)encodedFreq);
}
} else if (strcmp(argv[1], "-am") == 0) {
/* Tune to an AM frequency */
PACKET[0] = 0x81;
encodedFreq = 0;
freq = (float)atoi(argv[2]);
encodedFreq = ((unsigned short)freq * 4 ) + 16300;
PACKET[1] = (encodedFreq >> 8) & 0xFF;
PACKET[2] = encodedFreq & 0xFF;
PACKET[3] = 0xF3;
PACKET[4] = 0x36;
PACKET[5] = 0x00;
PACKET[6] = 0x24;
if (DEBUG) {
printf("band = am\n");
printf("freq = %d\n", (unsigned int)freq);
printf("encoded freq = 0x%x\n", (unsigned int)encodedFreq);
}
} else if (strcmp(argv[1], "-blue") == 0) {
/* Adjust the blue LED */
intensity = atoi(argv[2]);
PACKET[0] = 0x83;
PACKET[1] = (char)intensity;
} else if (strcmp(argv[1], "-bblue") == 0) {
/* Adjust the blue LED's pulsing rate */
intensity = atoi(argv[2]);
PACKET[0] = 0xA1;
PACKET[1] = (char)intensity;
} else if (strcmp(argv[1], "-red") == 0) {
/* Toggle the red LED */
intensity = atoi(argv[2]);
if (intensity) PACKET[0] = 0x84;
else PACKET[0] = 0x84;
PACKET[1] = (char)intensity;
} else {
/* Bad command - display the program's usage instructions */
usage(argc, argv);
exit(1);
}
} else {
usage(argc, argv);
exit(1);
}

/* Initialize the hid library */
ret = hid_init();
if (ret != 0) {
fprintf(stderr, "hid_init failed with return code %d\n", ret);
return 1;
}

/* Open the shark */
dev = hid_enumerate(SHARK_VENDID, SHARK_DEVID);
handle = hid_open(SHARK_VENDID, SHARK_DEVID, 0);
if (handle == NULL) {
fprintf(stderr, "hid_open failed with return code %d\n", handle);
return 1;
}

/* Send the instruction packet constructed above to the Shark */
ret = hid_write(handle, (char*)PACKET, SEND_PACKET_LENGTH);
if (ret == -1) fprintf(stderr, "hid_write failed with return code %d\n", ret);

/* Close the shark */
hid_close(handle);

/* Close the hid object */
hid_free_enumeration(dev);

return 0;
}

上記をshark2-hidapi.cに置いている。
 #サンプルコードからまるっともらってきたりしてゴミが残っていたり、
 #見直しも何もできていないけど(^^;

これを
gcc -g -o shark2-hidapi -lhidapi-libusb shark2-hidapi.c

でコンパイルし、
shark2-hidapi -red 1

とやると、赤いLEDが点灯した(^O^)

サウンド出力はまだ確認していないけど、、LEDが制御できたのなら、チューナーも動いているはず。

もう今日は寝る!

続く。

Raspberry Pi 2 で RadioShark2(その1)

こっそり(?)、ヤフオクでRadioShark2をもう1台手に入れた。

 #現在、El CapitanでRadioShark2が動かない(対策その1)に書いているように
 #Mac miniにRadioShark2をつないで、FM福岡を録音しているが、
 #どうせならRaspBerry Pi 2で録音できるようにしたいと考え、
 #入手したものだ。
 #今やっている録音は中断できないので、もう1台ということで(^^;;;

LinuxでRadio Shark2 (その3:一応出来た編)に書いているように、
LinuxでのRadioShark2のコントロールは、もう8年ほど前になんとかできているので、
これを使えば一発だろうと考えた(^^)。

Raspberry Pi 2の4つもあるUSB端子に入手した2台目(二代目?)RadioShark2を接続してみた。

/var/log/syslogを見ると、
 #syslogなんて、何年振りに見るだろう(^^;;;;;
Nov 23 00:40:30 hispi kernel: [53265.439196] usb 1-1.2: new full-speed USB device number 7 using dwc_otg
Nov 23 00:40:30 hispi kernel: [53265.547632] usb 1-1.2: New USB device found, idVendor=077d, idProduct=627a
Nov 23 00:40:30 hispi kernel: [53265.547650] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Nov 23 00:40:30 hispi kernel: [53265.547660] usb 1-1.2: Product: radioSHARK
Nov 23 00:40:30 hispi kernel: [53265.547671] usb 1-1.2: Manufacturer: Griffin Technology, Inc.

てな感じに、きちんと認識されている。

さすが、Linux(^^)

これは思った通り楽勝だと思い、shark2.cをコンパイルしてみようとしたが、
そもそもlibhid.hのインクルードすらできない(@_@;;

うーん、と悩んでapt-cache search libhidでそれらしいパッケージを探してみた。
root@hispi:/home/pi# apt-cache search libhid
libhidapi-dev - Multi-Platform library for communication with HID devices (development files)
libhidapi-hidraw0 - Multi-Platform library for communication with HID devices (hidraw backend)
libhidapi-hidraw0-dbg - Debugging symbols for libhidapi-hidraw0
libhidapi-libusb0 - Multi-Platform library for communication with HID devices (libusb backend)
libhidapi-libusb0-dbg - Debugging symbols for libhidapi-libusb0
libhidrd0 - runtime library for parsing and generating USB HID reports
libhidrd0-dbg - detached debugging symbols for libhidrd0
libhidrd0-dev - development files for parsing and generating USB HID reports


「これだな」ということで、apt-get install libhidapi-devを実行すると、他にもあれこれインストールされた。
関係しそうなのは下記。
root@hispi:/home/pi# apt-show-versions |grep libhid
libhidapi-dev:armhf/jessie 0.8.0~rc1+git20140201.3a66d4e+dfsg-3 uptodate
libhidapi-hidraw0:armhf/jessie 0.8.0~rc1+git20140201.3a66d4e+dfsg-3 uptodate
libhidapi-libusb0:armhf/jessie 0.8.0~rc1+git20140201.3a66d4e+dfsg-3 uptodate


さて、これでコンパイル...とやってみたが、エラーだらけ(^^;;;
これも予想していたので、/usr/include/hidapi/hidapi.hを見てみたら、
なんとがっさりhid.hと中身が変わっていた(@o@;;

うーん、続く

2015年11月17日火曜日

散髪

今日も「ザ・理髪」にて。

疲れていたこともあり、途中でウトウトしてしまった。
仕上がりはいつものようにすっきりさっぱり(^^)。

年内にもう一度お願いすることになりそう。


2015年11月2日月曜日

El CapitanでRadioShark2が動かない(対策その2)

しかし、Audacityでは指定日時の1回分の予約は出来るものの、
RadioShark2付属ソフトのような
「毎週日曜日の14時から55分間、山下達郎のSunday Song Bookを録音」
というような設定はできないようだった。

また、Audacityは機能がいっぱいありすぎて、
「バッチファイル的に、一定時間録音して、音声ファイルを出力しておしまい」
というシンプルな用途には向いていない感じだった。

「うーん、Mac OS Xでcrontabって使えるのか?」とか、
「Audacityをコマンドラインで起動して、予約録音のパラメータを引数にできるのか?」、
「いやいや録音だけなのだから、もっとシンプルなソフトはないのか?」など
あれこれ調べていると、用途にドンピシャなナイスな(^^;ソフトを発見した。

MacFeeling Software
マックな感じのソフト達

QTAir(キューティーエアー)
というもの。

録音設定で音源も設定できるので、RadioShark2を入力源にすると、それだけで外部に音声が流れてきた。
 #「プレビュー音を出さない」をチェックすると、聞こえなくも出来る。
 #ちなみに、QTAirインストール直後の初期設定では「プレビュー音」がありだったので、
 #すでに登録していたSondFlower+LadioCastの音声出力とmixされて、しかも微妙に時間にディレイがあり
 #エコーがかかったような音声で聞こえた(^^;
さらに、出力ファイル形式の指定もできて、至れり尽くせり。

試しにリアルタイムで録音してみたけど、タイムスタンプ付きのファイル名が出力され
いい感じです。

予約設定は「繰り返し」に曜日指定が出来るので、まさにドンピシャ!です。
テストで5分ほど予約録音してみましたが、裏でiTunesで音楽を聴きながらでも
全く問題なく録音できていました。

せっかくFMアンテナを立てたので、RadioShark2も、もう少し使っていけそうだ。

El CapitanでRadioShark2が動かない(対策その1)

Radio Shark2を接続してFM福岡録音専用機(ちょっと嘘)としているMac Miniを
よせばいいのに下調べもせずにEl Capitanにupgradeしました。

 #これがまた、普段と同じくディスプレイを接続しないまま
 #VNC経由でupgradeして、
 #途中でどうにもならんかったりした(^^;のですが、
 #upgradeそのものは無事完了

動作確認したところ、Radio Shark2のアプリそのものは動いていて、
選局などは動くのですが、どうにも音が出ません。

 #「システム環境設定」でも「Radio Shark2」は見えていて、
 #しかもレベルメータが動いているので、音声が出ていることまで
 #Mac OS Xからも認識している感じなのですが...。

あれこれ調べると、
OS X El Capitan: Working & Not Working Apps
の"Not Working"の欄にRadio Sharkの名前が...。
しかし
RadioSHARK (app works but gets no sound from device).
Workaround: Use Audio Hijack 3.1.1 to round sound from RadioSHARK input to Line Out

という、気になる記述があった。
なんとかなるのか!?...と思いAudio Hijackというものをダウンロードして
あれこれ操作すると確かに音声が流れてきた(^^)。

しかし、Audio Hijackは有償ソフトであり、フリーのまま使うと
10分ほどでホワイトノイズがミックスされた音声出力となった。

「現在の音声が聞こえないのはEl Capitanのバグであり、そのうち直る(^^;」と考え、
購入せず(^^;にできる方法はないかとあれこれ調べてみた。

Audio Hijackと同じように、AudioFlowerというものがMac OS X上の仮想オーディオデバイスとなり、
同じようなことができそうな気配であった。

これまたAudioFlowerもEl Capitanではすんなり動かないことがNet上で報告されていたが、
SoundFlower-2.0b2.dmgというものを探し出し、Audacityでのタイマー録音も出来たし、
LadioCastというmixerソフトをつかって、ライブでのラジオ聴取も出来るようになりました\(^^)/。
 #Net上にAudioFlower Audacityで検索すると、いっぱい出てきます。

その2に続く

2015年10月27日火曜日

El Capitanでtrimforce

El Capitanにした後に、ふとシステムレポートを見るとtrimが無効になっていた(^^;
お世話になったChameleon SSD Optimizerでtrimをenableにしようとしたが、どうもうまくいかない。

あれこれ調べると、Appleがtrim Enablerを提供しているとのこと。

【Tips】「OS X El Capitan」のサードパーティ製SSDのTrim有効化は「trimforce」が簡単
これであっさりtrimが有効になりました。




2015年10月21日水曜日

MT-6.2

MTOS-5.2.xのサポートが2015/9/30で終わっていた(^^;
個人利用ライセンスでMT-6.2にしてみた。

テストを兼ねた投稿です。


2015年10月16日金曜日

散髪

今回も「ザ・理髪」にて。
ボサボサになっていたけど、刈り上げてもらいスッキリした。

肘が痛いというと、腕のマッサージまでしてもらえた(^^;
頭も肘もスッキリ。ありがとうございました。



2015年9月16日水曜日

散髪

今日も「ザ・理髪」で。

熱めのタオルで顔を覆ってもらった時に、目の周りをマッサージしてもらったが
かなり気持ちいい。
目が疲れているんだろうなぁ。老眼も進むはずである(=_=;

かなり眉毛を剃られてしまったが、まぁいいか(^^;
今日もすっきり。またお願いしよう。


2015年8月25日火曜日

2015年8月21日金曜日

散髪

隙間時間を見つけて「ザ・理髪」へ。
今日もすっきりしてもらった。

横と後ろは刈り上げて良い感じ。
上は長めでごまかし(^^;

眉を結構切ってもらい、細くなっちゃった(^^;;
まぁ、こういうのもアリかな。


2015年7月25日土曜日

散髪

毎度「ザ・理髪」にて(^^)

いつもの感じでさっぱりと仕上げてもらえた。

帰り際に冷たい缶コーヒーまでご馳走になった。
暑かったのでホッと一息。

ありがとうございますm(_|_)m

2015年6月30日火曜日

散髪

今回も「ザ・理髪」にて(^^)

今日はちょっと短めにしてもらった。
トップのボリューム感の不足は致し方ない感じだが
「まだ、大丈夫よ!」と言ってもらった(^^;

「頭皮マッサージも効くよ!」とのことだったので
ちょっと考えるかなぁ。


2015年5月26日火曜日

散髪

今回も「ザ・理髪」にお願いした。

黙って(ないけど)座るだけで良い感じに仕上げてもらえるのはありがたい。

あと何年してもらえるのかわからないけど、
できる限りお願いしたいので、また行きます。



2015年5月20日水曜日

万歩計 電池切れ

頂いた万歩計だが、毎日リセットがかかるありさま。

電池切れマークが点滅していたので、試しに交換。
しかし前回から半年も経っていないんだがなぁ。

これでダメだったら、電池の問題じゃないんだろうなぁ。

2015年4月23日木曜日

散髪

久々に「ザ・理髪」に行ってみた。
直前に電話して、昼飯後すぐにやってもらうことができた。

あまり時間がなく、カットのみだったけど丁寧に仕上げてもらった(^^)。
今回もスッキリ。

やはり、次もここに来よう。

2015年3月28日土曜日

散髪

会社の帰りに散髪屋さんへ。

今日もまた、丁寧に仕上げてもらえてスッキリ。

しかし残念ながら、この散髪屋さんに来るのも最後になりそうだ。
��月からは、また分業制の散髪屋さんなのか。できればそれは避けたいなぁ。

なんとか時間を作って、「ザ・理髪」に行くことになるかなぁ(^^;



2015年3月2日月曜日

散髪

会社の近くの床屋さん。
雨の日曜の夕方、羽田空港からそのまま行ってみた。

それでもそこそこ混んでいて、少し待って自分の番に。
丁寧に一人でやってもらう方が、やっぱりいいなぁ。
分業制は慌ただしくていけない。

5mmで刈り上げてもらってさっぱりした(^^)。


2015年2月1日日曜日

散髪

久々に職場の近くの床屋さんで散髪。
日曜の11時前に行ったのだが、すでに5人が待っていて大人気(^^;

丁寧に刈ってもらい良い感じ。
分業制のところより、やはりいいなぁ。

翌日の顧客訪問前にさっぱりできた。


2015年1月9日金曜日

電池交換

高校に入学した時に買ってもらった腕時計。
もう、30年以上前の話であるが、今でもたまに着けている。

一度、不注意で竜頭が緩んだまま水に入れてしまい、
オーバーホールに出したが、古いものなので、掃除程度しかできなかった。

最近、2秒毎に針が進む「電池切れ」サインが出ていたので
小倉に出張に行った時に魚町銀天街で電池交換をしてもらった。

次回電池交換時のための記録に、書いておく。


2015年1月4日日曜日

散髪

近所の分業制の床屋さんへ。
相変わらず、うるさい(^^;

5mmのバリカンで刈り上げてもらい、すっきりはしたものの、
鬢の左右の長さが異なり、うちに帰って自分で修正。

この手荒さはなんだろうねぇ。

できれば他のところでやりたいのだが、
近所に手頃なところはなさそうなんだなぁ。