IT

ホットシューカバー

2012年12月に調達したOLYMPUS PEN Lite E-PL5

ホットシューカバー復活

PEN Lite E-PL5

なんだかんだで1年半になるものの、ストロボ撮影なんて数えるほどもしないので全く気付かなかったのだが、いつしか「ホットシューカバー」が無くなっていた。

機能的には全く問題無く、単に気分の問題だが…やっぱり気分がよろしくないので、速やかに調達しようと手配を試みたのだが、どういうわけかヨドバシやAmazonはおろか、本家オリンパスのオンラインショップですら取り扱いが無く、安そうな割に予想外に入手困難な代物である事に気付いた。

唯一取り扱いがあったのが、【楽天市場】カメラのミツバ。1個200円、メール便送料164円というのは決して手が出ない価格ではないのだが、何となくここで妥協したら「負け」のような気がしてカートに入れたところで、調査を再開。

一般に流通していない事を考えると、どうやら修理用の保守部品としてのみ存在するものと推察されるので、オリンパスサービスステーションに相談すれば手に入る可能性がありそうだ。

というわけで、ようやく平日の天神方面に出掛ける用事があったので、渡辺通りオリンパスサービスステーション福岡に問合せて目論み通り調達に成功。

1個100円だったので、また紛失する可能性を考えて2個査収。税込216円で済んだのは作戦勝ちと言っていいだろう。

参照

オリンパスイメージング http://olympus-imaging.jp/

Wikipedia http://ja.wikipedia.org/wiki/

TrustyとIPMI

ようやく落ち着いたかに見えるgoto2048/fplug_for_linuxによる消費電力測定。

明るさや温度、湿度も測れるというので調子に乗っていろいろと試してみているのだが、実は激安と言えどもサーバグレードであるHP ProLiant ML110 G7には筐体内にも多数のセンサが実装されていて、HP Integrated Lights-Out 3 (iLO 3)でリモート監視できるようになっている。

「折角なのでこちらもゴニョゴニョできないかしらね…?」とグルグル調べてみたところ、何気にIntelligent Platform Management Interface (IPMI)と互換性がある事から、LinuxベースでもOpenIPMIによって取得できる事がわかったので、Kodai’s Blog: Ubuntu 9.10でML115のIPMIを利用する【自宅サーバ構築】9. HP ProLiant ML110 G7で温度とFAN回転率解析: Pythonと自分 ~ a python lifeを参考にUbuntu 14.04(Trusty Tahr)ベースでトライした。

基本的には

yano@ML110G7:~$ sudo apt-get install openipmi ipmitool
yano@ML110G7:~$ sudo /etc/init.d/ipmievd start
yano@ML110G7:~$ sudo /etc/init.d/openipmi start

すれば良いだけなのだが、/dev/ipmi0がお馴染みの**“No such file or directory”**というエラーになった。

しかし、手動で

yano@ML110G7:~$ sudo modprobe ipmi_si
yano@ML110G7:~$ sudo modprobe ipmi_msghandler
yano@ML110G7:~$ sudo modprobe ipmi_poweroff
yano@ML110G7:~$ sudo modprobe ipmi_devintf
yano@ML110G7:~$ sudo modprobe ipmi_watchdog
yano@ML110G7:~$ sudo /etc/init.d/ipmievd start
yano@ML110G7:~$ sudo /etc/init.d/openipmi start

する分には大丈夫なのでよくよく調べてみると、

fplug_for_linux

先日導入したgoto2048/fplug_for_linux

F-PLUG

F-PLUG

温度(Temperature)の応答メッセージが1バイト短い問題は、ひとまずデータの最後から2バイトに注目するように改修したのだが、やはり「1バイト短い」だけではなく別種別の応答が返ってくる事例もあってゴミデータっぽい値となっている事がわかった。

そういうわけで定石通り「SEOJクラスコード」が期待と違ったらリトライするようにしようかと思ったのだが、そこで温度(Temperature)の応答メッセージで「SEOJクラスコード」が漏れる問題に再び行く手を阻まれた。

もしかして、TIDが使われていない(常時ゼロ)のが問題なのではないか?というのも気になったので、カウントアップするTIDを載せてみたものの結果は変わらず。しかし、「SEOJクラスコード」が無くても「TIDがある」事で各情報の要求と応答メッセージが紐付けできるようになるので、fpstatusを下のように改修してみた。

#include <stdint.h>
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include "fplug.h"
#undef  DEBUG
#define ENOTCONN_RETRY_MAX      10
#define MSG_RETRY_MAX           5
#define FPLUG_EXEC(fd,msg,buf)  fplug_exec((fd),(msg),sizeof((msg)),(buf),sizeof((buf)))
typedef unsigned char uchar;
static uint16_t tid = 0x0001;
void hunt_tid(uchar *buf)
{
    *(uint16_t *)&buf[2] = tid++;
}
typedef uchar uchar;
static void dump_message( char *mes, uchar *buf, int size  )
{
#ifdef DEBUG
    int cnt;
    printf( "%s", mes );
    for ( cnt=0; cnt<size; cnt++ ) {
        printf( "%02X,", buf[cnt] );
    }
    printf( "\n" );
#endif
    return;
}
int fplug_exec(int fd, uchar *req_msg, size_t req_len, uchar *res_buf, size_t bufsiz)
{
    struct timespec tmspec = { 0, 1000 * 1000 };
    int ret, i, j;
    uchar req_buf[BUFSIZ];
    memcpy(req_buf, req_msg, req_len);
    for (i = 0;i < MSG_RETRY_MAX; i++ ) {
        hunt_tid(req_buf);
        dump_message( "Command:", req_buf, req_len);
        for (ret = j = 0;j < ENOTCONN_RETRY_MAX; j++ ) {
            ret = write(fd, req_buf, req_len);
            if ( ret == req_len )
                break;
#ifdef DEBUG
printf("write()=%d,errno=%d\n", ret, errno);
#endif
            switch ( errno ){
            case ENOTCONN :
                tmspec.tv_nsec = 500 * 1000 * 1000;
                nanosleep(&tmspec, NULL);
                break;
            }
        }
        if ( ret <= 0 )
            break;
        tmspec.tv_sec = 0;
        tmspec.tv_nsec = 250 * 1000 * 1000;
        nanosleep(&tmspec, NULL);
        ret = read(fd, res_buf, bufsiz);
        if ( ret <= 0 )
            continue;
        dump_message( "read:", res_buf, ret );
        if (4 < ret && !memcmp(req_buf, res_buf, 4)){   // TID match
#ifdef DEBUG
printf("read()=%d,errno=%d\n", ret, errno);
#endif
            return ret;
        }
    }
    return -1;
}
int fplug_main( int fd, int mode )
{
    int cmd;
    int cnt;
    int ret;
    int i=0;
    uchar buf[BUFSIZ];
    uchar *szMode, szResult[BUFSIZ];
    time_t timer;
    struct tm *t;
    strcpy(szResult, "--");
    szMode = szResult;
    switch(mode) {
    case 'h':
        szMode = "FP_HUMID";
        for ( i = 0; i < MSG_RETRY_MAX && 0 < (ret = FPLUG_EXEC(fd, Humid, buf)); i++ ){
            uint16_t a = *(uint16_t *)&buf[ret-2];
            if ( 100 < a )
                continue;
            sprintf(szResult, "%d", a );
            break;
        }
        break;
    case 'i':
        szMode = "FP_ILLUM";
        for ( i = 0; i < MSG_RETRY_MAX && 0 < (ret = FPLUG_EXEC(fd, Illum, buf)); i++ ){
            uint16_t a = *(uint16_t *)&buf[ret-2];
            if ( 0xFFFD < a )
                continue;
            sprintf(szResult, "%d", a );
            break;
        }
        break;
    case 't':
        szMode = "FP_TEMP";
        for ( i = 0; i < MSG_RETRY_MAX && 0 < (ret = FPLUG_EXEC(fd, Temp, buf)); i++ ){
            int16_t a = *(int16_t *)&buf[ret-2];
            if ( a < -100 || 500 < a )
                continue;
            sprintf(szResult, "%.1f", (float)a / 10);
            break;
        }
        break;
    case 'w':
        szMode = "FP_WATT";
        for ( i = 0; i < MSG_RETRY_MAX && 0 < (ret = FPLUG_EXEC(fd, RWatt, buf)); i++ ){
            int16_t a = *(int16_t *)&buf[ret-2];
            if ( 2000 < a )
                continue;
            sprintf(szResult, "%.1f", (float)a / 10);
            break;
        }
        break;
    default:
        szMode = "FP_unknown";
        break;
    }
    printf( "%s=%s;", szMode, szResult);
}
int main(int argc, char *argv[])
{
    int fd;
    struct termios oldtio, newtio;
    char *cmd;
    if ( argc == 1 ) {
        printf("Usage: fpstatus <option>\n");
        return(0);
    }
    if ( *argv[1] == '-' ) argv[1]++;
    fd = open(SERIAL_PORT, O_RDWR);
    if ( fd < 0 ){
        perror("open(/dev/rfcomm0)");
        return 0;
    }
    tcgetattr( fd, &oldtio );
    newtio = oldtio;
    newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
    tcsetattr(fd, TCSANOW, &newtio);
    for ( cmd = argv[1]; cmd && *cmd; cmd++ )
        fplug_main(fd, *cmd);
    printf( "\n");
    tcsetattr(fd, TCSANOW, &oldtio);
    close(fd);
    return 0;
}

受信メッセージが期待する種別の応答でない場合は新しいTIDをアサインして要求からリトライする。5回送信しても期待する種別の応答が得られなかった場合、取得値は"–“となる。

楽天BOX

楽天で注文した商品を受け取れる宅配ロッカーが「なんば駅」と「関西大学」に登場という話。

通販商品の受け取り用ロッカー「楽天BOX」開始

Engadget 日本版より

「なんと関西大学に登場」ってどういう事かと思ったら、「なんば駅と関西大学に登場」だったのはさておき。

最寄り駅ならいざ知らず、わざわざ「なんば」から持って帰るメリットって一体…、楽天ブックス@コンビニ受取便でいいんじゃないの?と思ったのだが、楽天ブックスの商品に限らず楽天市場全体が対象となるのがメリットかな。

と思ったのだが、実は対応店舗は3店舗ほどに過ぎないという事なので、Amazon.co.jpのコンビニ受取はおろか楽天ブックス@コンビニ受取便以上にこぢんまりとした案件のようだ。orz

まずは、どれほどの利用者がいるのか興味深い。

参照

Engadget 日本版 http://japanese.engadget.com/

INTERNET Watch http://internet.watch.impress.co.jp/

【楽天市場】楽天BOX http://event.rakuten.co.jp/r-box/

logsensor.sh拡張

先日調達したF-PLUG(エフプラグ)

sensors.cronを拡張したので、分析スクリプト~/bin/logsensor.shも拡張する。

/var/log/sensors.logの出力は以下のようにタイムスタンプに続いて電力、照度、湿度、室温、そして行末までコア温度が並んでいるので、

2014-05-25 00:10:02.960418012+09:00     65.1    117     34      28.0    44.0    45.0
2014-05-25 00:11:03.211234875+09:00     66.3    120     34      28.0    44.0    45.0
2014-05-25 00:12:02.458205126+09:00     63.7    115     34      28.0    44.0    44.0
2014-05-25 00:13:02.715940424+09:00     65.3    120     34      28.0    44.0    46.0
2014-05-25 00:14:02.945108237+09:00     66.9    120     34      28.0    44.0    46.0
2014-05-25 00:15:03.180283106+09:00     65.6    120     34      28.0    43.0    45.0
2014-05-25 00:16:03.946422282+09:00     65.7    120     34      28.0    44.0    46.0
2014-05-25 00:17:03.851754226+09:00     64.4    0       34      28.0    44.0    45.0
2014-05-25 00:18:04.128084906+09:00     65.5    0       34      28.0    43.0    45.0
2014-05-25 00:19:04.019619909+09:00     65.9    0       34      28.0    42.0    46.0
2014-05-25 00:20:02.984672447+09:00     65.3    0       34      28.0    44.0    45.0
2014-05-25 00:21:04.326406869+09:00     65.9    0       34      28.0    44.0    45.0
F-PLUG

F-PLUG

sensors.cron拡張

先日調達した富士通ビー・エス・シーF-PLUG(エフプラグ)

F-PLUG

F-PLUG

fplug_for_linuxの目処が立ったので、1分毎にCPUの温度を記録しているsensors.cronで纏めて記録する事にした。

まずはデバッグの都合上、/var/log/sensors.logへのログ出力は/etc/cron.d/sensors側に移して、~/etc/cron.sh/sensors.cron単体ではログ出力しないように修正。

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * *   root        /home/yano/etc/cron.sh/sensors.cron >> `/var/log/sensors.log`

続いて~/etc/cron.sh/sensors.cronfpstatusの出力を加えるわけだが、CPUのコア数は構成により変わるので、タイムスタンプに続いて電力、照度、湿度、室温ときて、コア温度は行末に並べるのが最も自然と思われる。

#!/bin/sh
LANG=C
ECHO=/bin/echo
DATE=/bin/date
SENSORS=/usr/bin/sensors
FPSTATUS=/usr/local/bin/fpstatus
FP_OUTPUT=`${FPSTATUS} wiht`;
FP_WATT=`echo ${FP_OUTPUT} | sed -e 's/.*FP_WATT=\([0-9\.]*\).*/\\1/'`
FP_ILLUM=`echo ${FP_OUTPUT} | sed -e 's/.*FP_ILLUM=\([0-9\.]*\).*/\\1/'`
FP_HUMID=`echo ${FP_OUTPUT} | sed -e 's/.*FP_HUMID=\([0-9\.]*\).*/\\1/'`
FP_TEMP=`echo ${FP_OUTPUT} | sed -e 's/.*FP_TEMP=\([0-9\.]*\).*/\\1/'`
CPU_TEMPS=`${SENSORS} | \
  awk '/Core /{i=substr($2,1,length($2)-1);temp[i]=$3;};END{for(j=0;j<=i;j++){printf "\\\t%s", temp[j]}print}' | \
    sed -e 's/\+//g'`
${ECHO} -e `${DATE} --rfc-3339=ns` \\t${FP_WATT}\\t${FP_ILLUM}\\t${FP_HUMID}\\t${FP_TEMP}${CPU_TEMPS}

…という改造で、/var/log/sensors.logの出力内容は以下のようになった。

2014-05-25 00:10:02.960418012+09:00     65.1    117     34      28.0    44.0    45.0
2014-05-25 00:11:03.211234875+09:00     66.3    120     34      28.0    44.0    45.0
2014-05-25 00:12:02.458205126+09:00     63.7    115     34      28.0    44.0    44.0
2014-05-25 00:13:02.715940424+09:00     65.3    120     34      28.0    44.0    46.0
2014-05-25 00:14:02.945108237+09:00     66.9    120     34      28.0    44.0    46.0
2014-05-25 00:15:03.180283106+09:00     65.6    120     34      28.0    43.0    45.0
2014-05-25 00:16:03.946422282+09:00     65.7    120     34      28.0    44.0    46.0
2014-05-25 00:17:03.851754226+09:00     64.4    0       34      28.0    44.0    45.0
2014-05-25 00:18:04.128084906+09:00     65.5    0       34      28.0    43.0    45.0
2014-05-25 00:19:04.019619909+09:00     65.9    0       34      28.0    42.0    46.0
2014-05-25 00:20:02.984672447+09:00     65.3    0       34      28.0    44.0    45.0
2014-05-25 00:21:04.326406869+09:00     65.9    0       34      28.0    44.0    45.0

参照

富士通ビー・エス・シー http://www.bsc.fujitsu.com/

fplug_for_linux

先日調達した富士通ビー・エス・シーF-PLUG(エフプラグ)

F-PLUG

F-PLUG

データの取得は一般公開されているF-PLUG メッセージ一覧に従って一般的なRFCOMMの接続手順をベースに実装すれば良いのだが、まずは動作確認を含めてOBDNマガジンgoto2048/fplug_for_linuxを利用してみた。

電力は期待通り採れたので動作確認はOKとしたのだが、fptest温度(Temperature)が採れない事がある事に気付いて調べてみたところ、応答メッセージがF-PLUG メッセージ一覧の仕様と違って1バイト短い事がわかった。湿度、照度は大丈夫そうなのだが、ひとまずデータの最後から2バイトに注目するように改修した。

yano@ML110G7:~/software/fplug_for_linux$ sudo `fptest`
1.Get Temperature
2.Get Humidity
3.Illumination
4.Watt(Realtime)
5.Exit
Input command no ->1
Temp Command:10,81,00,00,0E,F0,00,00,11,00,62,01,E0,00,
ret size=**15**
**Temp Status:10,81,00,00,00,00,0E,F0,00,72,01,E0,02,0E,01,**
Temperature=27.0
1.Get Temperature
2.Get Humidity
3.Illumination
4.Watt(Realtime)
5.Exit
Input command no ->4
ret size=16
Realtime Wattmeter:10,81,00,00,00,22,00,0E,F0,00,72,01,E2,02,73,02,
Watt(Realtime)=62.7W

fpstatusもsensors.cronからデータを取得できるよう同様に改修してみたのだが、応答メッセージの受信以前に要求メッセージの送信がうまくいかない事が多い事がわかった。調べてみると"Transport endpoint is not connected"が発生しているので、ENOTCONNの場合はwriteをリトライするように対処。

ついでに一度の接続で電力、温度、湿度、照度を立て続けに取得できるように改造。

#include <stdint.h>
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include "fplug.h"
#define DEOJ_TOKEN "\x0E\xF0\x00\x72"
#define DEOJ_TOKEN_LEN 4
static unsigned char *
memmem(unsigned char *a, size_t a_len, unsigned char *b, size_t b_len)
{
    int i;
    for (i = 0; i < (a_len - b_len); i++ ){
        if ( a[i] != *b )
            continue;
        if ( !memcmp(&a[i], b, b_len) )
            return &a[i];
    }
    return NULL;
}
static void dump_message( char *mes, unsigned char *buf, int size  )
{
/*
    int cnt;
    printf( "%s", mes );
    for ( cnt=0; cnt<size; cnt++ ) {
        printf( "%02X,", buf[cnt] );
    }
    printf( "\n" );
*/
    return;
}
int fp_main( int, int );
int main(int argc, char *argv[])
{
    int fd;
    struct termios oldtio, newtio;
    char *cmd;
    if ( argc == 1 ) {
        printf("Usage: fpstatus <option>\n");
        return(0);
    }
    if ( *argv[1] == '-' ) argv[1]++;
    fd = open(SERIAL_PORT, O_RDWR);
    if ( fd < 0 ){
        perror("open(/dev/rfcomm0)");
        return 0;
    }
    tcgetattr( fd, &oldtio );
    newtio = oldtio;
    newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
    tcsetattr(fd, TCSANOW, &newtio);
    for ( cmd = argv[1]; cmd && *cmd; cmd++ )
        fp_main(fd, *cmd);
    printf( "\n");
    tcsetattr(fd, TCSANOW, &oldtio);
    close(fd);
    return 0;
}
typedef unsigned char uchar;
size_t fplug_request(int fd, uchar *req_buf,size_t req_len,uchar *res_buf, size_t bufsiz)
{
    struct timespec tmspec = { 0, 1000 * 1000 };
    int ret, i;
    dump_message( "Command:", req_buf, req_len);
    for (ret = i = 0;i < 10; i++ ) {
        tmspec.tv_nsec = i * 100 * 1000 * 1000;
        ret = write(fd, req_buf, req_len);
        if ( ret == req_len )
                break;
// printf("write()=%d,errno=%d\n", ret, errno);
        switch ( errno ){
        case ENOTCONN :
                nanosleep(&tmspec, NULL);
                break;
        }
    }
    ret = read(fd, res_buf, bufsiz);
    dump_message( "read:", res_buf, ret );
    return ret;
}
int fp_main( int fd, int mode )
{
    int cmd;
    int cnt;
    int a=0;
    double f;
    int ret;
    int i=0;
    unsigned char buf[BUFSIZ];
    time_t timer;
    struct tm *t;
    switch(mode) {
        case 't':
            while (1) {
                ret = fplug_request(fd, Temp, sizeof(Temp), buf, BUFSIZ);
                if (memmem(buf, ret, DEOJ_TOKEN, DEOJ_TOKEN_LEN)) break;
                if ( i++ >10 ) return(0);
            }
            a = *(int16_t *)&buf[ret-2];
            printf( "FP_TEMP=%.1f;", (float)a / 10);
            break;
        case 'h':
            while (1) {
                ret = fplug_request(fd, Humid, sizeof(Humid), buf, BUFSIZ);
                if (memmem(buf, ret, DEOJ_TOKEN, DEOJ_TOKEN_LEN)) break;
                if ( i++ >10 ) return(0);
            }
            a = *(uint16_t *)&buf[ret-2];
            printf( "FP_HUMID=%d;", a );
            break;
        case 'i':
            while (1) {
                ret = fplug_request(fd, Illum, sizeof(Illum), buf, BUFSIZ);
                if (memmem(buf, ret, DEOJ_TOKEN, DEOJ_TOKEN_LEN)) break;
                if ( i++ >10 ) return(0);
            }
            a = *(uint16_t *)&buf[ret-2];
            printf( "FP_ILLUM=%d;", a );
            break;
        case 'w':
            while (1) {
                ret = fplug_request(fd, RWatt, sizeof(RWatt), buf, BUFSIZ);
                if (memmem(buf, ret, DEOJ_TOKEN, DEOJ_TOKEN_LEN)) break;
                if ( i++ >10 ) return(0);
            }
            a = *(uint16_t *)&buf[ret-2];
            printf( "FP_WATT=%.1f;", (float)a / 10);
            break;
        default:
            break;
    }
}

更にread待ちにならないようにpselect監視を挟んでみたのだが、期待通りに受信してもpselectでキャッチできないので、素直にwriteできたらreadするよう着地。あとrootでないと/dev/rfcomm0が**“Permission denied”**になるのでseteuidするようにしてみたのだが、うまくいかないという問題が残っているものの、取り敢えず期待通りに温度、湿度、照度を含めてデータは採れるようになった。

ASKA逮捕の余波

4月に発表された『宮崎駿監督作品集』が、ASKA逮捕の余波で発売延期になった模様。

『宮崎駿監督作品集』

宮崎駿監督作品集より

しかし、『宮崎駿監督作品集』の「特典ディスク」に含まれるプロモーションフィルム『On Your Mark』(約7分)まで問題視し排除するというディズニーのスタンスには激しく納得がいかない

先日、春日市の小学校の校長先生が覚せい剤所持容疑で逮捕されるというショッキングな事件があったが、その余波で作曲した校歌を変更する動きが出ているらしい。事件の余波で容疑者が儲かるような構図は許せないので、ASKA自身が中心となっている「CHAGE and ASKA」作品やソロ作品を出荷停止というのは「相応の罰」として理解できるが、どんな経緯で「校歌が相応しくない」という考えになるのだろうか。事件によって万里の河を始めとした名曲の数々が色褪せる事は全く無く、楽曲の良し悪しと作曲者や作詞者の人格なんて全く関係無いとさえ思うよ。

そういう観点でどうも社会的に「臭いものに蓋」をして取り敢えず収めてしまおうという風潮が蔓延しているような気がしてならない。悪い事をした人は「悪い人」で相応の罰を受けてしかるべきだが、「悪い人」が関係したものが全て「悪いもの」として片付けるのは、いかにも短絡的で稚拙な価値観と言わざるを得ない。

同様に覚せい剤所持で逮捕された槇原敬之は更生してまた世界に一つだけの花などの名曲を作っているが、清水健太郎は覚せい剤やら脱法ハーブやらで4年に1度くらいのペースで逮捕されている。

校長先生だって聖人君子ではないし、TVでよく見る著名人や高名な識者であっても人間には弱い面があったり、失敗したりする事がある。立ち直れる人もいるし、立ち直れない人もいるが、それはその人だけの問題にすべきではなく、周囲を含めた社会としての課題とすべきではないだろうか。子供たちと一緒に前を見据えて「悪い事」と「そうでない事」を再認識する機会にすべきかと思う。

というわけで、安易な決断をしようとしているディズニーには再考を促したい。

それにしても「覚せい剤」には酒井法子を含めて福岡に縁のある人間が多いなぁ。

参照

西日本新聞 http://www.nishinippon.co.jp/

AV Watch http://av.watch.impress.co.jp/

ITmedia ニュース http://www.itmedia.co.jp/news/

ディズニー http://www.disney.co.jp/

Wikipedia http://ja.wikipedia.org/wiki/

F-PLUG

2008年に調達したサンワサプライのワットチェッカーPlus TAP-TST7

F-PLUG

F-PLUG

電気製品の消費電力計測に活用しているものの、いかんせん目で見るだけしかできず統計的なデータ処理にまで展開できないのがネックだったので、新サーバProLiant ML110 G7で管理できるよう、データ出力可能な新製品を物色。

最近はワットチェッカーTweet TAP-TST9スマートプラグ TAP-TST13などWiFiに対応したモデルもあるが、わざわざインターネットにデータを出さなくても…と思うし、その為に1万円以上払うのもちょっと馬鹿げている。

トラディショナルなUSBタイプのTAP-TST10も悪くなかったのだが、今回は温度、湿度、照度まで計測可能な上にBluetoothによる通信をサポートしている富士通ビー・エス・シーF-PLUG(エフプラグ)をチョイスした。

yano@ML110G7:~$ apt-get install `bluez bluez-compat bluez-utils`
yano@ML110G7:~$ hciconfig hci0
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:1B:DC:AA:BB:CC  ACL MTU: 310:10  SCO MTU: 64:8
        UP RUNNING PSCAN
        RX bytes:512 acl:0 sco:0 events:24 errors:0
        TX bytes:343 acl:0 sco:0 commands:23 errors:0
yano@ML110G7:~$ `hcitool` scan
Scanning ...
        **B0:99:28:XX:YY:ZZ**       F-PLUG
yano@ML110G7:~$ sudo `bluetooth-agent` 1234 **B0:99:28:XX:YY:ZZ**
Pincode request for device /org/bluez/19037/hci0/dev_B0_99_28_XX_YY_ZZ
Agent has been released
yano@ML110G7:~$ sudo `l2ping` **B0:99:28:XX:YY:ZZ**
Ping: **B0:99:28:XX:YY:ZZ** from 00:1B:DC:AA:BB:CC (data size 44) ...
0 bytes from **B0:99:28:XX:YY:ZZ** id 0 time 31.79ms
0 bytes from **B0:99:28:XX:YY:ZZ** id 1 time 22.40ms
0 bytes from **B0:99:28:XX:YY:ZZ** id 2 time 26.03ms
^C3 sent, 3 received, 0% loss
yano@ML110G7:~$ sudo `rfcomm` -r connect hci0 **B0:99:28:XX:YY:ZZ** &
[1] 3427
yano@ML110G7:~$ Connected /dev/rfcomm0 to **B0:99:28:XX:YY:ZZ** on channel 1
**Press CTRL-C for hangup**
yano@ML110G7:~$
yano@ML110G7:~/software$ git clone https://github.com/goto2048/fplug_for_linux.git
yano@ML110G7:~/software$ cd ~/software/fplug_for_linux/
yano@ML110G7:~/software/fplug_for_linux$ make fptest
cc     fptest.c   -o fptest
fptest.c: In function ‘testmenu’:
fptest.c:66:17: warning: unknown conversion type character 0xa in format [-Wformat=]
                 printf( "Humidity=%d%\n", a );
                 ^
fptest.c: In function ‘dump_message’:
fptest.c:96:5: warning: format not a string literal and no format arguments [-Wformat-security]
     printf( mes );
     ^
yano@ML110G7:~/software/fplug_for_linux$ make fpstatus
cc     fpstatus.c   -o fpstatus
yano@ML110G7:~/software/fplug_for_linux$ sudo ./fptest
1.Get Temperature
2.Get Humidity
3.Illumination
4.Watt(Realtime)
5.Exit
Input command no ->1
Temp Command:10,ffffff81,00,00,0e,fffffff0,00,00,11,00,62,01,ffffffe0,00,
ret size=16
Temp Status:10,ffffff81,00,00,00,11,00,0e,fffffff0,00,72,01,ffffffe0,02,fffffff0,00,
Temperature=**24.0**
1.Get Temperature
2.Get Humidity
3.Illumination
4.Watt(Realtime)
5.Exit
Input command no ->4
ret size=16
Realtime Wattmeter:10,ffffff81,00,00,00,22,00,0e,fffffff0,00,72,01,ffffffe2,02,00,00,
Watt(Realtime)=**0.0W**
1.Get Temperature
2.Get Humidity
3.Illumination
4.Watt(Realtime)
5.Exit
Input command no ->5
yano@ML110G7:~/software/fplug_for_linux$ sudo cp -p {fptest,fpstatus} /usr/local/bin/
yano@ML110G7:~/software/fplug_for_linux$

ダメ元で試してみた2008年調達PLANEX:BT-MicroEDR2だが、あっさり使えたようだ。

PC遠隔操作事件閉幕

片山被告「私が真犯人」と認める

NHKニュースより

2012年秋に起こった遠隔操作ウイルス事件

結果的に無関係な市民を4人も誤認逮捕するという大失態を演じ、2013年1月にも挑発でコケにされた警察だが2013年2月に男を逮捕今年2月12日には舞台を東京地裁に移し初公判が開かれた。

逮捕、起訴された片山被告は無罪を訴え全面的に争う構えを見せていたが、保釈中に真犯人名乗るメールを発信した形跡を警察に掴まれてしまい、一転して全面的に犯行を自供。何ともあっけない幕切れとなった。

参照

Yahoo!ニュース http://news.yahoo.co.jp/

ITmedia ニュース http://www.itmedia.co.jp/news/

弁護士ドットコム - 無料法律相談や弁護士、法律事務所の検索 http://www.bengo4.com/

IWJ Independent Web Journal http://iwj.co.jp/