IT

Devil's Canyon登場

Intelの最新CPUファミリー"Haswell Refresh"。

Devil's Canyonの概要

Devil’s Canyonの概要

先月の正式発表では見送られていた、型番に"K"が付いた倍率アンロックモデル、Devil’s Canyon & Pentium 20周年モデルが販売開始。

先頃のCOMPUTEX TAIPEI 2014ではマザーボードベンダー対抗オーバークロック大会「Intel OC Challenge COMPUTEX 2014」を主催して積極的にパフォーマンスをアピールするなど、「2014年が復活の年」としてデスクトップ市場にテコ入れするIntelがモバイルに押され気味な印象を払拭すべく投入する意欲作。

PC Watchの【瀬文茶のヒートシンクグラフィック】【番外編】にあるように、Ivy Bridge以降、CPUコアとヒートスプレッダ間のTIM(Thermal Interface Material)が"はんだ"から熱伝導率の低い“グリス"に変更された事により「オーバークロック耐性が下がった」と世のマニアを嘆かせていたのだが、“Devil’s Canyon"では効率の良い「次世代ポリマーTIMへの変更」と「キャパシタ追加」により、高クロックでの安定性に磨きを掛けた事になる。

実際、「Intel OC Challenge COMPUTEX 2014」では定格4.0GHz、Turbo Boostで最大4.4GHzのCore i7-4790Kが

むしろ、空冷・水冷システムによるCPUクロック(4コア/8スレッド)部門で、終了直前まで首位を守ったASRockチームは、Cooler Masterの高性能CPUクーラー「V10」に14cmファンを追加した空冷システムのみで5496MHzを記録。さらに、同時開催されたアマチュア部門で、香港のCherVさんが一般的なシステム構成でIntel Core i7-4790Kの4コア/8スレッド動作で5396MHzを叩き出した。

と、軽く5GHzを越えたらしいし、ファンレスでも4.5GHzで安定動作という情報もあるので、効果は折り紙付き。アキバでも早速5.2GHzを越えたという報告が上がってきているようだし、なかなか活況の気配。

とはいえ、個人的には4万円近くする高価なハイエンドモデルよりもお手頃価格の定格3.2GHzながら4.7GHzまでイケたというPentium 20周年モデルの方が気になるね。

参照

PC Watch http://pc.watch.impress.co.jp/

AKIBA PC Hotline!h http://akiba-pc.watch.impress.co.jp/

Samba4とad-dc

GT110bUbuntu 14.04(Trusty Tahr)アップデート。eyefiserver2fplug_for_linuxなどの積み残し案件も無事解決。

最後に動画ファイルなどの保存用ドライブをXFSに切り替えていたところ、

root@GT110b:~# /sbin/parted /dev/sdc
GNU Parted 2.3
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: ATA WDC WD25EZRX-00M (scsi)
Disk /dev/sdc: 2500GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number  Start   End     Size    File system  Name      Flags
(parted) mklabel gpt
(parted) unit GB
(parted) mkpart ts_file xfs 0 2500
(parted) p
Model: ATA WDC WD25EZRX-00M (scsi)
Disk /dev/sdc: 2500GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number  Start   End     Size    File system  Name       Flags
 1      0.00GB  2500GB  2500GB  xfs         ts_file
(parted) quit
Information: You may need to update /etc/fstab.
# /sbin/mkfs.xfs /dev/sdc1
-bash: /sbin/mkfs.xfs: **No such file or directory**

となったので調べてみると、どうやらXFSは標準では入っておらず、xfsprogs パッケージを入れる必要があるらしい。というわけで

日本vsコロンビア株式会社

1910年(明治43年)創立、創業100年を超えるレコード会社日本コロムビア

日本vsコロンビア株式会社

http://columbia.jp/より

2014 FIFAワールドカップ・グループC日本 vs コロンビア戦にあやかって「日本vsコロンビア株式会社」に社名変更だそうな。

さすがエンターテイメント業界の老舗。ユーモアが効いてるね。

参照

ITmedia ニュース http://www.yodobashi.com/

日本コロムビア http://columbia.jp/

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

TMPGEnc

5月に導入したGALAXYGeForce GTX750 Ti OC Slim

PGTX750TI-OC-LP/2GD5

PGTX750TI-OC-LP/2GD5

TMPGEnc Video Mastering Works 5による**「mp4変換が芳しくない」**と書いたところ、5月30日にVer.5.5.0.105のアップデータが公開された。

TMPGEnc Video Mastering Works 5更新履歴をチェックすると

グラフィック環境が、NVIDIA 「Maxwell」コアの Geforce (GTX 750(Ti)等) の場合、CUDA のパフォーマンス最適化を行うとエラーとなってしまう問題を修正しました。

と書いてあったので、喜び勇んでアップデートしたのだが「CUDAのパフォーマンス最適化」でエラーは出なくなったものの、エンコードが遅いのは相変わらず…ていうか、余計遅くなった印象すらある。

【追記】NVIDIAGeForce GT 220を搭載したGIGABYTE GV-N220OC-1GIに差し替えて試してみたところ、期待通り30分ほどでエンコード終了。4年前に調達したグラフィックカード。実質5年前のGT216コアはCUDAコア数にして**たった8%**の48ユニットしかないショボいスペックなのに、Fermi以降で倍精度浮動小数点演算にフォーカスした結果40倍の性能向上を目指した「Maxwell」の方がエンコードが激遅になるとはね。

参照

PC Watch http://pc.watch.impress.co.jp/

AKIBA PC Hotline!h http://akiba-pc.watch.impress.co.jp/

ITmedia PC USER http://www.itmedia.co.jp/pcuser/

Roombaバッテリー交換

昨年9月に互換バッテリーに交換した「ルンバ577」。

交換用バッテリ

珍しく純正ですが…何か?

毎晩定期運転+αで酷使していたところ、1年と持たず10ヶ月ほどでホームベースに戻れないようになってきた。

最初に買った「ルンバ560」のバッテリーが2年以上持った事を考えると、4500mAの大容量で半額以下と言えども10ヶ月しか持たないのでは互換品の方が安いとも言い難いので、今度は純正のルンバ交換用バッテリーを調達。

さすがに定価の1万円で調達できるほど優雅ではないが、Amazonや楽天だと純正品と思っても互換品が届く恐れも多分にあるので、14%OFF+10%還元で実質8,352円だったヨドバシから調達。

さて、どれくらい持つかな…

参照

ヨドバシ.com http://www.yodobashi.com/

アイロボット https://store.irobot-jp.com/

SAQ2 JAPAN

総務省が発表した「SAQ2(サクサク)JAPAN Project」サッカー日本代表、通称「ザックジャパン」関連の事かと思ったらさにあらず。

東京オリンピック/パラリンピックが開催される2020年を見据え、訪日外国人向けの無料Wi-Fi環境などを整備するためのアクションプラン…という事だが、真っ先に上げられたパブリックなWiFi環境や、プリペイド式SIMカードによるモバイル通信環境の整備というのは地方自治体や民間レベルで現実にどんどん展開されているので、今更政府が旗を振う必要がどこにあるのかと思う。

一方、INTERNET Watchの記事でも触れられている「外国人旅行者の“技適なし”端末の取り扱い」についてはナイスな着目で、確かに大出力で電波障害などを誘引する邪悪な無線装置などを排除する為に「技術基準適合証明」が必要というのは理解できるのだが、グローバルモデルの携帯端末でもいちいち日本独自の証明が必要というのはいかにも世知辛い印象でなんだか切ない。

日本の「技術基準適合証明」があったところで対応バンドや通信方式の違いがある(例えばmova端末はもう使えない)し、キャリアロックやSIMロックなどの妙な足枷もあるので、実際に通信ができるかどうかはまた別の話だ。

どうせならば外国人旅行者に限らず広く国民に喜ばれるよう、欧米の認証も国内のそれと同等と認めるとか、大胆な規制緩和を期待したい。

技適だけでなく、携帯電話への課税検討とかやってる暇あったら売上高の0.2%と激安に設定されているテレビの電波利用料とかも見直して欲しいね。消費税アップの一方で電波利用料下げ、改正電波法が成立 携帯会社の負担軽減とか、どう考えてもアンバランスでしょう。

TPPや集団的自衛権よりも、電波オークションを実現して国債を少しでも早く償還する方が優先だと思うのだけれど。

参照

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

総務省 http://www.soumu.go.jp/

河野太郎公式ブログ ごまめの歯ぎしり http://www.taro.org/

総務省 電波利用ホームページ http://www.tele.soumu.go.jp/

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

GPSトラッカー

待望のSIMフリーのGPSトラッカーTR-313Jが発売されたので早速調達。税込24,948円也。

左からGT-120、TR-313、DG-100

GPSデバイス御三家

ちょうど2008年のDG-1002009年のGT-120の間くらいのサイズだが、これで3G通信モジュールを内蔵。しかもFOMAプラスエリア対応でSIMフリーと来れば死角無し。手持ちのBB.exciteモバイルLTEもAPN設定をするだけで問題無く使えた。

ちなみにAPN等のプロバイダ情報はUSBで接続したWindowsのezToolユーティリティから設定する必要がある。説明書には

電源ボタンを押し、電源ランプを赤く点滅させます。

と書いてあるが「電源ボタン」は長押しでなくワンタッチ。インジケータが一瞬赤くなったかな?という程度で良い。Windows 7が新しいUSBデバイスの接続を検出し、「STM32 Virtual COM Port」と認識してくれるのでセットアップウィザードに従ってWindows Updateからドライバを導入すればOKだ。

しかし、ハードウェア用に推奨されるドライバーや更新プログラムを自動的に取得する機能を有効にしていなかったので、いつまで経ってもezToolユーティリティがCOMポートを認識せずに困ったけれどもな。

ちなみに5分間隔の設定でトラッキングさせてみたところ、朝9時から19時過ぎまで10時間ほどの稼動でバッテリー残量は43%となったので、まぁ実働1日というところか。

位置情報はWebブラウザからezfinderにアクセスする事で"現在位置"と"履歴"が確認出来るが、ezToolユーティリティから本体に設定する「レポート間隔」というのは「GPS情報の採取」と「アップロード」の両方を含むようだ。つまり、ビル陰や電車の移動などで偶々そのタイミングでGPSを捕捉できない"おしい状況"だった場合でも、ずっと地下街に籠っていた"絶望的な状況"と同じ結果になるという事だ。

また仕様に「ログ記録件数」の記載が無かったのが引っかかっていたのだが、後からUSBで接続して航跡ログを吸い上げるという事もできないようなので、どうやら内部ではトラッキングログは全く保存されていないものと推察される。…という流れを纏めると、航跡ログの粒度は最高でも「レポート間隔」。不幸にして**“GPSの捕捉”“モバイル通信”**のいずれか一方でも失敗すれば当該セクタの位置情報は完全に失われる為、粒度は低めに推移しそうな予感。

GlobalSat製なのでDG-100のような洗練されたGPSロガーに"オンライン機能が付加された"ものを期待したのだが、みまもりケータイあんしんGPSと同様に**“オンライン専用”**という思想だったというのは少なからず期待外れ。

【訂正】みまもりGPS旅行やジョギングのルートを記録できるそうなので、どうやら航跡ログが採れるらしい。

このままでは何とも使い道が微妙なので、まずはTraccarには対応させ、ezfinder無償版の履歴(航跡)が1日分しか見られない問題くらいは乗り越えたい。

ところで、GT-120はいつまで経っても充電が終わらないのだが、ついに内蔵バッテリーが死んでしまったかな…

参照

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

GPS受信機とロガーの通販【GPSDGPS】 http://www.gpsdgps.com/

3G/GPSトラッカーサイト http://www.trackers.jp/

MobileAction日本正規代理店 http://www.i-gotu.jp/

GlobalSat http://www.globalsat.com.tw/

ezfinder Tracking Portal http://www.ezfinder.com.tw/

Traccar - open source GPS tracking system http://www.traccar.org/

児童ポルノ禁止法改正

昨年書いた「児童ポルノ禁止法改悪案」。マスコミが「集団的自衛権」を巡る自公の攻防ばかりに目を奪われている隙に6月5日の衆院本会議に続いて「捜査権の濫用防止」等の附帯決議と共に参議院法務委で可決された。

漫画やアニメ、CGについては対象外になったのは良かったが、「みずからの性的好奇心を満たす目的」って捜査当局はどうやって立証するつもりなんだろうか?

「単純所持の罰則適用」については「国際社会からの批判」を理由にしている事からも、やっぱり「子どもを守るという視点」を欠いた大人の事情だけが後押ししているような印象を受ける。

育児放棄や虐待で生命の危機に瀕している子供達に手を差し伸べる方がよほど先だと思うのだが…

参照

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

弁護士ドットコム http://www.bengo4.com/

NHKニュース http://www3.nhk.or.jp/news/

参議院議員 山田太郎 http://taroyamada.jp/

ハフィントンポスト http://www.huffingtonpost.jp/

fplug_for_linux

先日導入したgoto2048/fplug_for_linux

F-PLUG

F-PLUG

ゴミデータっぽい値が採れたりしたので改修にトライしていたが、シリアル通信のパラメータやリトライ手順など地道にプロトコル実装を固める事で、1週間以上連続で安定して(ペアリングも解除されずに)計測できる事を確認した。

ポイントとしては

RTS/CTSによるフロー制御 Rawモード送信 非カノニカル受信 応答が無い場合は要求を再送信

で、最終版の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 <stdlib.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("%s:%d; write()=%d,errno=%d\n", __FILE__, __LINE__, ret, errno);
#endif
            switch ( errno ){
            case ENOTCONN :
                tmspec.tv_nsec = 500 * 1000 * 1000;
                nanosleep(&tmspec, NULL);
                break;
            }
        }
        if ( ret <= 0 )
            break;
        for (j = 0;j < MSG_RETRY_MAX && !(ret = read(fd, res_buf, bufsiz)); j++ ) {
            tmspec.tv_sec = 0;
            tmspec.tv_nsec = (j+1) * 100 * 1000 * 1000;
            nanosleep(&tmspec, NULL);
        }
        if ( ret <= 0 ){
#ifdef DEBUG
printf("%s:%d; read()=%d,errno=%d\n", __FILE__, __LINE__, ret, errno);
#endif
            continue;
        }
        dump_message( "read:", res_buf, ret );
        if (4 < ret && !memcmp(req_buf, res_buf, 4)){   // TID match
#ifdef DEBUG
printf("%s:%d; read()=%d\n", __FILE__, __LINE__, ret);
#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, "x");
    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, opt;
    struct termios oldtio, newtio;
    char cmdbuf[16];
    char *cmd = cmdbuf, *cmd_all = "with";
    memset(cmdbuf, 0x00, sizeof(cmdbuf));
    while ((opt = getopt(argc, argv, cmd_all)) != -1) {
        switch (opt) {
        case 'w':
        case 'i':
        case 't':
        case 'h':
            *cmd++ = tolower(opt);
            break;
        default: /* '?' */
            fprintf(stderr, "Usage: %s [Options] device\nOptions\t-w\tPower consumption(W)\n\t-i\tIlluminance\n\t-t\tTemperature\n\t-h\tHumidity\n", argv[0]);
            exit(EXIT_FAILURE);
        }
    }
    if ( argc <= optind ){
        fprintf(stderr, "Usage: %s [Options] device\nOptions\t-w\tPower consumption(W)\n\t-i\tIlluminance\n\t-t\tTemperature\n\t-h\tHumidity\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    fd = open(argv[optind], O_RDWR);
    if ( fd < 0 ){
        perror(argv[optind]);
        return 0;
    }
    if ( !cmdbuf[0] )
        strcpy(cmdbuf, cmd_all);
    tcgetattr( fd, &oldtio );
    newtio = oldtio;
//  newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
    newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD | CRTSCTS;
    newtio.c_oflag = 0;         /* Rawモード出力 */
    newtio.c_lflag = 0;         /* 非カノニカル入力 */
    newtio.c_cc[VTIME]=0;       /* キャラクタ間タイマは未使用 */
    newtio.c_cc[VMIN]=0x00;     /* ブロック受信しない */
    tcflush(fd, TCIFLUSH);
    tcsetattr(fd, TCSANOW, &newtio);
    for ( cmd = cmdbuf; cmd && *cmd; cmd++ )
        fplug_main(fd, *cmd);
    printf( "\n");
    tcsetattr(fd, TCSANOW, &oldtio);
    close(fd);
    return 0;
}

これで期待通りにデータが採れるようになった。

RFC2616 is Dead

HTTPの標準規格が15年ぶりに改訂、文書を6分割し改善仕様を盛り込むという記事に触発され、RFC-Editor Webpageを見て卒倒しそうになった。

Hypertext Transfer Protocol

en.wikipedia.orgより

RFC 7230 - (HTTP/1.1): Message Syntax and Routing RFC 7231 - (HTTP/1.1): Semantics and Content RFC 7232 - (HTTP/1.1): Conditional Requests RFC 7233 - (HTTP/1.1): Range Requests RFC 7234 - (HTTP/1.1): Caching RFC 7235 - (HTTP/1.1): Authentication RFC 7236 - Initial Hypertext Transfer Protocol (HTTP) Authentication Scheme Registrations RFC 7237 - Initial Hypertext Transfer Protocol (HTTP) Method Registrations RFC 7238 - The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect) RFC 7239 - Forwarded HTTP Extension 合わせて10本はなかなかのボリュームで目眩がする。