YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2024-05-10 (金)


[一語一絵/IT系]

児童ポルノ禁止法改正 / 2014-06-17 (火)

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

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

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

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

【参照】
●ITmedia ニュース http://www.itmedia.co.jp/news/
児童ポルノ禁止法改定案、提出迫る 漫画・アニメ表現規制の検討も盛り込む 2013年5月24日
児童ポルノ禁止法改定の真の目的は何か? 単純所持禁止、マンガ・アニメ「調査研究」への懸念 2013年5月27日
児童ポルノ禁止法改定案、衆院に提出 単純所持禁止、漫画・アニメの「調査研究」も 2013年5月29日
「嫌だから規制する」なのか──児童ポルノ禁止法改定案、その背後にあるもの 2013年5月29日
「焚書のような事態」――児童ポルノ禁止法改定案に漫画家協会、漫画・アニメの「調査研究」除外求める 2013年5月29日
「名作の芽を摘む」 コミケ準備会も「児童ポルノ禁止法案」に反対 漫画・アニメの「調査研究」を危惧 2013年5月30日
日本アニメーター・演出協会、児童ポルノ禁止法改定案に反対声明 アニメ規制は「立法趣旨と全く異なる」 2013年5月30日
児童ポルノ禁止法改定案に日弁連が反対声明 「善良な社会風俗の保護が目的ではない」 2013年6月14日
「創作の自由が侵される可能性」 児童ポルノ禁止法改定案、文芸家協会が反対声明 2013年6月17日
単純所持を禁止する児童ポルノ法改定案、衆院通過 2014年6月5日
日本出版社協議会、児童ポルノ禁止法改定案に反対表明 「本来の目的を大きく逸脱」 2014年6月10日
●弁護士ドットコム http://www.bengo4.com/
児童ポルノ「単純所持」に罰則・・・出版業界は「家宅捜索の危険性も」と批判 2014年6月5日
児童ポルノ禁止法改正案 法案要綱(全文) 2014年6月5日
「漫画・アニメ除外は世論の勝利」 児童ポルノ禁止法改正案について山田議員に聞く 2014年6月5日
児童ポルノ禁止法「改正案」が参議院法務委で可決 「捜査権の濫用防止」の附帯決議も 2014年6月17日
<児童ポルノ法>山田太郎議員「ネットで集めた意見」をもとに質問(参院質疑・上) 2014年6月17日
<児童ポルノ法>山田議員「マンガ規制につながる可能性はあるか?」(参院質疑・下) 2014年6月17日
●NHKニュース http://www3.nhk.or.jp/news/
NHK NEWS WEB 児童ポルノ禁止法改正へ 背景と課題 2014年6月12日
●参議院議員 山田太郎 http://taroyamada.jp/
表現の自由を大幅に規制する法案に反対 2013年4月26日
児童ポルノ禁止法の改悪案が国会に提出されました 2013年5月29日
児童ポルノ禁止法の5党合意案および今後の成立までの流れ 2014年5月30日
児童ポルノ禁止法の改正案に対する附帯決議を公開します 2014年6月17日
●ハフィントンポスト http://www.huffingtonpost.jp/
児童ポルノ禁止法 改正案


[一語一絵/IT系]

fplug_for_linux / 2014-06-16 (月)

先日導入した[External]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;
}
これで期待通りにデータが採れるようになった。

【参照】
●富士通ビー・エス・シー http://www.bsc.fujitsu.com/
F-PLUG(エフプラグ)
F-PLUG メッセージ一覧
●Linux JF (Japanese FAQ) Project. http://archive.linux.or.jp/JF/
Serial-Programming-HOWTO.txt
●Amazon.co.jp https://www.amazon.co.jp/
富士通BSC F-PLUG115 電力・温度・湿度・照度測定機能つきプラグ ホワイト BSCESFP0103 4,900円


[一語一絵]

納税証明書 / 2014-06-15 (日)

昨日のF800ST車検入庫に際して慌てたのが「納税証明書」。

納税証明書
納税証明書

先月の自動車諸税の納付に際して、F800STだけ「納付書&納税証明書」が無い事に気付いた。「納税通知書」をよく見たら「口座振替加入者用」と書いてあるので、5月には「納付書」を省いた「納税通知書」だけしか届かず、「納税証明書」は引き落としの後で別途郵送という段取りのようだ。

6月2日に口座から引き落とされているので1週間ほどで「納税証明書」が郵送されるだろうと期待していたのだが、10日になっても届かないので12日に区役所へ出向いて「納税証明書」を発行して貰い、昨日のF800ST車検入庫にやっと間に合った。

同じ市町村税の住民税や固定資産税のついでに「口座振替」にしちゃったのだが、TIIDAの方は「納付書」ベースなのでコンビニに行かずに済むワケでも無く、なんだか余計な手間だけが増えて本末転倒な結果に。

全く以て自分の考慮が足りなかったと言わざるを得ないのだが、当局は何かおかしいと思わないのかな?

そういえば3月に書いた[External]子育て世帯臨時特例給付金だが、[External]福岡市から具体的な手続きが案内されている。

申請先は,原則平成26年1月1日において住民登録がされている市町村です。
福岡市においては,6月30日(月曜日)に申請書を発送し,7月1日(火曜日)から申請受付を開始します。
申請書が届きましたら,必要事項を漏れなく記入し,必要書類を貼付のうえ,同封の返信用封筒を郵送していただくか,各区役所・出張所の窓口にご提出ください。
との事なので、取り敢えず申請書を心待ちにしてていいですか?

【参照】
●福岡市 http://www.city.fukuoka.lg.jp/
市税に関する証明の取得方法について教えてください。
臨時福祉給付金及び子育て世帯臨時特例給付金について
●厚生労働省 http://www.mhlw.go.jp/
子育て世帯臨時特例給付金


[一語一絵]

エフハチ / 2014-06-14 (土)

久々のF800STネタ。

ツルツルテカテカ!
Pilot POWER 2CT

2012年の前回車検で「遠出の前には替えておいた方がいいですね」と言われていたタイヤをようやく交換。

という事で、昨日久々のバイクタイヤ専門店ランドナー香椎へ。気付いたら6年以上のご無沙汰だったので、毎年のようにタイヤを替えていたCB400SF時代の昔話に花が咲いた。

ここ4年でわずか1000kmほどしか走ってなかったかぁ…という思いはさておき、スポーツツーリングモデルの「MICHELIN PILOT ROAD」からハイグリップモデルの「[External]PILOT POWER 2CT」、通称PP2CTにチェンジして、気分一新!

PILOT POWER 2CT(F:120/70 ZR17、R:180/55 ZR17)のセット。工賃込みの総額で\45,780也。

というわけで、本日満を持して[External]FREEMANに車検入庫。

【参照】
●九州,福岡の激安バイクタイヤ交換専門店,ランドナー http://www.landner.jp/
●FREEMAN http://www.freeman.bmw-motorrad.jp/
●MICHELIN http://motorcycle.michelin.co.jp/
PILOT POWER 2CT
●Wikipedia http://ja.wikipedia.org/wiki/
ミシュラン


[一語一絵/IT系]

RFC2616 is Dead / 2014-06-13 (金)

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

Hypertext Transfer Protocol
[External]en.wikipedia.orgより

合わせて10本はなかなかのボリュームで目眩がする。

いよいよHTTP 2.0かと思ったらさにあらず、RFC7236~RFC7239は新規と思われるものの、RFC7230~RFC7235の6本はHTTP/1.1のままアップデートで、従来の[External]RFC 2616は破棄(Obsoletes)されるそうな。

新しいRFC群によって変更されたり改善されたりした内容については、それぞれのRFCの最後のあたりにある「Changes from RFC 2616」セクションに記載されている
という事なので、そのあたりから眺めてみるかな…

【参照】
●ITpro http://itpro.nikkeibp.co.jp/
HTTPの標準規格が15年ぶりに改訂、文書を6分割し改善仕様を盛り込む 2014年6月11日
●The Long Wait http://knagayama.net/blog/
HTTP/1.1 が更新された 2014年6月7日
●mnot’s blog https://www.mnot.net/blog/
RFC2616 is Dead 2014年6月7日
●Internet Engineering Task Force (IETF) https://www.ietf.org/
RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests
RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching
RFC 7235 - Hypertext Transfer Protocol (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
●Wikipedia http://ja.wikipedia.org/wiki/
Hypertext Transfer Protocol