2013年9月30日月曜日

さらばペプシ

ももクロ目当てで8月からずっとペプシを飲んでいたのだが、キャンペーンも今日で終了。この2か月で飲んだペプシは体重の9割分くらい。もう一生分のペプシを飲んだんじゃないか? 健康診断の結果に何かあったら、原因はこれだろうな。

とにもかくにも、長かったペプシ生活よ、さらば! …と言いつつ、最後に買い足した2本があるので、もうちっとだけ続くんじゃ。

2013年9月29日日曜日

Amazon先生ありがとう、いつも商品を届けてくれて…

情報を牛耳るグローバル大企業には個人レベルでは太刀打ちできないだろうなんて昨日は書いたけど、何も無理に敵視することもないんだよね。

例えば、今日も商品を届けてもらったAmazonは、今更自分が言うまでもないが、非常に便利で安い。気が付けばもう10年以上Amazonで買い物しているので、かなりの量の情報を渡したことになっているのだろうけど、別にそれで不利益を被ったことはない。もはや、下手な企業や政府よりよっぽど信用している。

よくAmazonは税金を払ってないという批判を目にするけど、Amazonの同業他社でも何でもない一消費者である自分にとっては、節税して浮いた金でサービスを向上してくれる方が嬉しい。ほとんど節税の術がないサラリーマンからしてみれば、Amazonを利用することで間接的に節税できるなんて、ありがたい限りじゃないか。

自分にとって有用なら使えばいいし、そうでなければスルーすればいい。大企業だろうが何だろうが、それでいいんじゃないかなぁ。

これからはプログラムが書けないとダメ?

「国家・Google・Appleが個人を支配する時代」どう生きる? 伊藤穣一・川上量生・まつもとゆきひろが語る」を読んで。正直言って、ちょっとやそっとプログラムを書けるくらいじゃ、表題にある国家やGoogle, Appleに対してはどうにもならないと思う。

ソフトを提供していれば良かった時代は、フリーの車輪を再発明すれば世界を大きく変えられた。が、雲の上から提供されるサービスが重要な時代になると、知識や技術を持っているだけの個人の力では、しっかり金をかけた大企業の設備には対抗し難い。

ソフトの世界でも共産主義が資本主義に敗れていくのかね。何か寂しいなぁ。

2013年9月27日金曜日

C++のストリームからバイナリデータ読み出し

プチはまったポイント。

std::istreamでバイナリデータを読み出すとき、get()やread()なら生データを返してくれるが、operator>>を使うと一部の特殊文字が読み飛ばされる。std::ios::binaryの効き目もないみたい。

#include <iostream>
#include <sstream>
int main() {
    std::string str("\x00\x01\x02\x03\x04\x05\x06\x07"
                    "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
                    "\x10\x11\x12\x13\x14\x15\x16\x17"
                    "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f", 32);
    std::istringstream is(str, std::ios::binary);
    for (int i = 0; i < 32; i++) {
        char c;
        is >> c;
//      c = is.get();
//      is.read(&c, 1);
        std::cout << "(" << i << ") : " << static_cast<int>(c) << std::endl;
    }
    return 0;
}

プラットフォーム依存しそうだけど、上のコードをMountain Lionで実行すると

(0) : 0
(1) : 1
(2) : 2
(3) : 3
(4) : 4
(5) : 5
(6) : 6
(7) : 7
(8) : 8
(9) : 14
(10) : 15
(11) : 16
(12) : 17
(13) : 18
(14) : 19
(15) : 20
(16) : 21
(17) : 22
(18) : 23
(19) : 24
(20) : 25
(21) : 26
(22) : 27
(23) : 28
(24) : 29
(25) : 30
(26) : 31
(27) : 31
(28) : 31
(29) : 31
(30) : 31
(31) : 31

こうなる。

2013年9月26日木曜日

クロネコポイント

いつの間にか貯まっていたクロネコポイントとやらが失効しそうだったので、適当に景品と交換してみた。

箱。この箱はミニカーサイズだが、これより遥かに大きなダンボールで送られて来たので、まさかミニ四駆サイズか? と焦ってしまった。

外観。かなり良く出来てる。

上手く写真が撮れなかったけど、運転席もちゃんと作ってあって、ハンドルも付いてる。

後ろの扉だけでなく、助手席側のドアも開く。しかもスライド式で。

あんまり物を増やしたくはないのだけれど、タダで貰えるとなると、つい貰ってしまうね。でもまあ、そんなにかさばらないし、気に入ったから結果オーライ。

2013年9月25日水曜日

外出先からゆうパックの再配達申し込み

ゆうパックの再配達をWebで申し込む際に必要なお問い合わせ番号(追跡番号) or お知らせ番号。今までこの番号は、リアル郵便受けに入れられた不在票にしか書いていないものだとばかり思っていた。なので、帰宅してからでないと再配達を申し込めずに不便だったのだが、これは大間違いだった。

通販会社によって呼び名が違うけれど、配達受付番号とか伝票番号とか呼ばれている、荷物の配達状況確認に使う12桁の数字。どうやらこいつが、お問い合わせ番号(追跡番号)と同じようだ。この番号さえ分かれば、帰宅した後に届くよう、外出先から再配達を申し込めるじゃないか。

もっとも、荷物を受け取れるような時間に帰宅できないと意味がないけどね。ダラダラ残業を強いられる前の仕事を辞めて本当によかった。

2013年9月24日火曜日

石井一久引退

http://www.nikkansports.com/baseball/news/f-bb-tp0-20130924-1194248.html

肌寒くなってきたとは思っていたけど、今年ももう、引退の話が聞こえてくる季節になったか。

寂しくないと言ったら嘘になるけれど、40歳まで現役でいられたのだから、プロ野球の投手としては大往生と言ってもいいだろう。荒れ球左腕速球派な若い頃は、正直言って投手としては短命だろうと思っていたけど、投球スタイルを変えてここまで長く活躍したのは見事。

長い間、お疲れ様でした。

所沢〜横浜

西武線ー東京メトロー東急東横線と相互乗り入れしてたのね。所沢〜横浜間が直通ってのは凄いなぁ。ググったら、今年の3月16日から始まってたのか。

東急東横線は地味に東武線とも乗り入れしていて、川越〜横浜間も直通になっていたのか。横浜在住の埼玉人としては結構嬉しい。懐かしい地名を電光掲示板で見つけるだけでも、戻りたければ戻れる気がして、何となく心が安らぐんだよね。

2013年9月22日日曜日

docomoのiPhoneとMVNO

docomo回線MVNOのSIMカードで運用できるiPhoneが欲しかったのだけれど、どうも微妙な感じのようだ。

LTEを使えないのも残念だけど、何よりテザリング不可が痛い。iPod touchとモバイルルータを1台に集約したかったのい…。結局、Wi-Fiしか使えない端末のためにモバイルルータを手放せないのなら、iPod touchのままでいいかなぁ。

2013年9月21日土曜日

SystemCはじめました、その3

放置気味だったSystemCの話を回収。前回は合成可能なVerilogをSystemCで書き直したけれど、そもそも本気で石にするシステムをSystemCで書く気なんて全くない。単にVerilatorを使ってVerilogの検証環境を構築したかっただけなのだ。

…と言うわけで、適当な回路のテストベンチを書いてみる。まず、テスト対象の回路はこのローパスフィルタ(lpf.v)

// low pass filter
module lpf (
    input           clk,
    input           xrst,
    input           i_vld,
    input   [7:0]   i_d,
    output          o_vld,
    output  [7:0]   o_d
);
reg     [7:0]   r_d_1z;
reg     [7:0]   r_d_2z;
reg     [7:0]   r_d_3z;
reg             r_vld_1z;
reg             r_vld_2z;
reg             r_vld_3z;
reg     [7:0]   r_od;
reg             r_ovld;
wire    [7:0]   w_d0;
wire    [7:0]   w_d1;
wire    [7:0]   w_d2;
wire    [9:0]   w_sum;
wire    [8:0]   w_round;
wire            w_ovld;
// valid
always @(posedge clk or negedge xrst) begin
    if (!xrst) begin
        r_vld_1z <= 1'b0;
        r_vld_2z <= 1'b0;
        r_vld_3z <= 1'b0;
    end else begin
        r_vld_1z <= i_vld;
        r_vld_2z <= r_vld_1z;
        r_vld_3z <= r_vld_2z;
    end
end
// taps
always @(posedge clk or negedge xrst) begin
    if (!xrst) begin
        r_d_1z[7:0] <= 8'd0;
        r_d_2z[7:0] <= 8'd0;
        r_d_3z[7:0] <= 8'd0;
    end else begin
        r_d_1z[7:0] <= i_d[7:0];
        r_d_2z[7:0] <= r_d_1z[7:0];
        r_d_3z[7:0] <= r_d_2z[7:0];
    end
end
assign w_d0[7:0] = (r_vld_1z)? r_d_1z[7:0] : w_d1[7:0];
assign w_d1[7:0] = (r_vld_2z)? r_d_2z[7:0] : 8'd0;
assign w_d2[7:0] = (r_vld_3z)? r_d_3z[7:0] : w_d1[7:0];
// filter
assign w_sum[9:0]   = {2'b00, w_d0[7:0]} +
                      {1'b0,  w_d1[7:0], 1'b0} +
                      {2'b00, w_d2[7:0]};
assign w_round[8:0] = w_sum[9:1] + {8'd0, w_sum[1]};
// output
always @(posedge clk or negedge xrst) begin
    if (!xrst)
        r_od[7:0] <= 8'd0;
    else
        r_od[7:0] <= w_round[8:1];
end
assign o_d[7:0] = r_od[7:0];
assign o_vld    = r_vld_3z;
endmodule

で、そのテストベンチがこれ(test_lpf.cpp)。ちと長いけど、そのままペーストしてしまおう。

#include "Vlpf.h"
#include "verilated_vcd_sc.h"
#include <cstdlib>
#include <queue>
#include <iostream>
#define DUMP_VCD
// source
SC_MODULE(Source) {
    static const int N = 10000;
    sc_in<bool> clk, xrst;
    sc_out<bool> vld;
    sc_out<uint32_t> d;
    sc_event done;
    SC_CTOR(Source) : done() {
        SC_CTHREAD(proc, clk.pos());
        async_reset_signal_is(xrst, false);
    }
    void proc() {
        int n = N;
        while (n > 0) {
            vld.write(0);
            wait(10);
            for (int i = 0; i < 100; i++, n--) {
                vld.write(1);
                int v = rand() & 0x3f;
                if (i % 10 == 5) v += 100;
                d.write(v & 0xff);
                wait();
            }
        }
        vld.write(0);
        done.notify();
    }
};
// sink
SC_MODULE(Sink) {
    sc_in<bool> clk, xrst;
    sc_in<bool> i_dut_vld, i_exp_vld;
    sc_in<uint32_t> i_dut_d, i_exp_d;
    int n_errors;
    SC_CTOR(Sink) : n_errors(0) {
        SC_CTHREAD(proc, clk.pos());
        async_reset_signal_is(xrst, false);
    }
    void proc() {
        std::queue<uint32_t> dut_d = std::queue<uint32_t>();
        std::queue<uint32_t> exp_d = std::queue<uint32_t>();
        int cnt = 0;
        wait();
        while (true) {
            if (i_dut_vld.read()) dut_d.push(i_dut_d.read());
            if (i_exp_vld.read()) exp_d.push(i_exp_d.read());
            if (!dut_d.empty() && !exp_d.empty()) {
                uint32_t d = dut_d.front();
                uint32_t e = exp_d.front();
                const char *jdg;
                if (d == e) {
                    jdg = "OK";
                } else {
                    jdg = "NG";
                    n_errors++;
                }
                std::cout << '[' << cnt++ << "] : " << jdg
                          << " dut = " << d << ", exp = " << e << std::endl;
                dut_d.pop();
                exp_d.pop();
            }
            wait();
        }
    }
};
// model
SC_MODULE(Model) {
    sc_in<bool> clk, xrst;
    sc_in<bool> i_vld;
    sc_in<uint32_t> i_d;
    sc_out<bool> o_vld;
    sc_out<uint32_t> o_d;
    SC_CTOR(Model) {
        SC_CTHREAD(proc, clk.pos());
        async_reset_signal_is(xrst, false);
    }
    void proc() {
        uint32_t d[3] = {0, 0, 0};
        uint32_t sum;
        bool vld[3] = {false, false, false};
        wait();
        while (true) {
            d[2] = d[1];
            d[1] = d[0];
            d[0] = i_d.read() & 0xff;
            vld[2] = vld[1];
            vld[1] = vld[0];
            vld[0] = i_vld.read();
            sum = d[1] * 2;
            sum += (vld[2])? d[2] : d[1];
            sum += (vld[0])? d[0] : d[1];
            o_vld.write(vld[1]);
            o_d.write((sum + 2) / 4);
            wait();
        }
    }
};
// testbench
SC_MODULE(Testbench) {
    sc_in<bool> clk;
    sc_signal<bool> xrst, i_vld, o_dut_vld, o_exp_vld;
    sc_signal<uint32_t> i_d, o_dut_d, o_exp_d;
    Source src;
    Sink snk;
    Vlpf dut;
    Model model;
    SC_CTOR(Testbench) : src("src"), snk("snk"), dut("dut"), model("model") {
        src.clk(clk);
        src.xrst(xrst);
        src.vld(i_vld);
        src.d(i_d);
        dut.clk(clk);
        dut.xrst(xrst);
        dut.i_vld(i_vld);
        dut.i_d(i_d);
        dut.o_vld(o_dut_vld);
        dut.o_d(o_dut_d);
        model.clk(clk);
        model.xrst(xrst);
        model.i_vld(i_vld);
        model.i_d(i_d);
        model.o_vld(o_exp_vld);
        model.o_d(o_exp_d);
        snk.clk(clk);
        snk.xrst(xrst);
        snk.i_dut_vld(o_dut_vld);
        snk.i_dut_d(o_dut_d);
        snk.i_exp_vld(o_exp_vld);
        snk.i_exp_d(o_exp_d);
        SC_THREAD(test);
    }
    void test() {
        xrst = 0;
        wait(25, SC_NS);
        xrst = 1;
        wait(src.done);
        for (int i = 0; i < 10; i++) wait(clk.posedge_event());
        std::cout << "#error(s) = " << snk.n_errors << std::endl;
        sc_stop();
    }
};
int sc_main(int argc, char *argv[]) {
    Verilated::commandArgs(argc, argv);
    sc_clock clk("clk", 10, SC_NS);
    Testbench *tb = new Testbench("tb");
    tb->clk(clk);
#ifdef DUMP_VCD
    Verilated::traceEverOn(true);
    VerilatedVcdSc *vcd = new VerilatedVcdSc();
    tb->dut.trace(vcd, 99);
    vcd->open("test_lpf.vcd");
    sc_start();
    vcd->close();
#else
    sc_start();
#endif // #ifdef DUMP_VCD
    return 0;
}

ざっくり説明すると、Sourceが作ったランダムデータを、検証対象とモデルModelに入力。そして、それらからの出力をSinkが受けて比較。そんな環境をTestbench階層で組み上げている。ついでに、SystemCのメイン関数であるsc_main()にて、Verilatorの波形ファイル作成機能を使用してみている。Verilatorを使ってテストを走らせるには、以下のコマンドを実行。

% verilator --sc lpf.v --trace --exe test_lpf.cpp
% cd obj_dir
% make -f Vlpf.mk
% ./Vlpf

う〜ん、何ともかったるい。Verilogなんて腐った言語は早くまともな言語に置き換えられてくれと思っているけど、SystemCはその器ではないかな。…って言うか、C++も言語仕様はかなり酷い部類だと思うし。

2013年9月20日金曜日

さらば組長

http://www.4gamer.net/games/999/G999903/20130919072/
http://jp.wsj.com/article/SB10001424127887324353404579084710742925936.html

間違いなく、世界を変えた人だよなぁ。

ナンセンスは百も承知でたらればを言うと、この人がいなかったら間違いなく、今日のゲームの隆盛はなかった。80年代の金も技術も勢いもあった日本で、ファミコンを作ろうと決断できたトップの下に、最高に面白いソフトを作れるメンバーがいた奇跡。もしもこの機を逃していたら、ゲームの世界は10年遅れくらいで、盛り返してきたアメリカが開拓することになったかもしれない。ゲーム専用機ではなくAT互換機で。そうなっていたら、携帯ゲーム機なんてものは生まれなかっただろうな。

世界を楽しくしてくれて、本当にありがとうございました。

2013年9月19日木曜日

56号の責任?

http://www.jiji.com/jc/c?g=spo_30&k=2013091900147
http://mainichi.jp/sports/news/20130919k0000e050176000c.html

統一球をこっそり変えていた責任を取ってコミッショナーが辞任? このタイミングで?

あくまで一個人の下種の勘繰りだと断っておくけど、これはあの球団にとって大事な大事な55本という記録を、ぽっと出の他球団の選手に破らせてしまった責任を取らされたとしか思えない。そもそも統一球の変更からして、空中戦をやりたいあの球団から大きな圧力をかけられたのだろうから、言われた通りにボールを変えたら、変えろと言った奴に詰め腹を切らされるとは、何と理不尽な。

繰り返し断っておくけど、これはあくまで一個人の頭に浮かんだ陰謀論であって、事実との関連は全く検証されていないので、あしからず。

2013年9月18日水曜日

iCloudのWebアプリが見た感じ変わった

iCloudのWebアプリを立ち上げてみると、なんだか様子が違う。そうか、iOS 7の公開に合わせて、UIを変えてきたのか。

ざっと触ってみた感じ、機能的にはほとんど以前と変わっていないかな。細かいところでは、いちいちアプリ一覧画面に戻らなくても、メモから連絡帳のように別アプリに移るショートカットメニューが追加されたが。

それより、あのひどく重たかったWebアプリの動作が、少し軽くなった気がする。あくまで気がするだけで、正確な比較はもうできないけど。

2013年9月17日火曜日

健康診断

定期検診に行って来た。定期と言っても新しい会社では初だから、まだ定期的に受診してはいないけどね。

結果が出た範囲内では、体重が想定レンジの下限より3kg落ちていたのが結構ショック。土曜日に大福を1kg買ってドーピングしたのに。年を取って痩せてると、凄く貧相なんだよなぁ。

あと、バリウムというやつを初体験。不味い不味いと聞かされていたけど、そこまで不味いか? まあ美味しいとは言わないけど。それより、飲んだはいいけど出て来ない。優先度なしのFIFOだから、まだドーピング大福あたりがつっかえてるのだろうか。

2013年9月16日月曜日

1964年の東京オリンピックの話

http://www.mishimaga.com/gaihu/016.html

こういう話がマスメディアに黙殺されてしまうのは気持ち悪いけど、それをWebで公開できるってのはいい時代になったね。特に1964年の空気なんて、まだまだ生まれていなかった自分からしてみれば、まさにリアルタイムで呼吸していた人だけが肌身で覚えている話。こういう形に残りづらい話を文字にして残すことには大きな意義があると思う。

そこらへんに関しては、戦争の話は大失敗だよなぁ。話しづらい話を濁してうやむやにした結果、終戦から70年近く経った今でもまだ、戦後生まれの世代がやったやらないで不毛な口論をしている始末。敬老の日に年寄りをdisるのはなんだが、自分たちがやったことの始末を付けずに逝き逃げなんて、本当に迷惑な話だよ。

そういえば「新聞を読みませんか」と朝日のサンプルが郵便受けに入っていたけど、こんな編集に金は払えんわな。

2013年9月15日日曜日

停電に思う

今日は朝から停電。いつまで電気が止まっているのか分からないから迂闊に冷蔵庫も開けられず、朝食を取れない始末。よもや大人買いしたおまけ付きチョコが非常食になるとは。どうしようもなく腹が減る前に復旧したので、「1日1個チョコレート」ルールは守れたが。

最近はあってもせいぜい瞬停くらいだったので、こんなにガッツリ停電を味わったのは何年ぶりだろうか。停電と言えば震災後の輪番停電だけど、先月まで住んでいた川崎市内某所はなぜか止まらなかったので、実はあれは未経験。

さて、色々な意図が絡み合って、すっかりスルーされている節電だけれど、エネルギーの問題は全くもって解決していないんだよなぁ。むしろ、景気対策が功を奏するほどガンガン油を燃やすわけで。人間社会の肩書きやら都合やらが物理法則の前では無意味であることは福島で痛感したはずで、ごまかしがきかない相手だからこそ真摯に向き合うしかないはずなのだが…。エラい人は、なあなあでやり過ごせばどうにかなる話だと思ってるんじゃないのか? まあ、今エラい世代なら逃げ切れるかもしれないが。もっとも、子や孫の世代のことを考えていないのは1人で死ぬ覚悟を決めた自分も同じなので、非難できる筋合いは無い。

2013年9月14日土曜日

Gray code

グレイコードって、グレイさんが考えたからグレイコードだったのか。今までずっと、灰色の状態でも白黒のどちらかには転ぶみたいな意味で命名されたのだとばかり思っていた。

ついでに、グレイコードと言えばデジタル回路の非同期処理でしか使ったことがなかったけど、遺伝的アルゴリズムでも使われてるのか。なるほど確かに、ちぎって繋げたり、適当なビットを化けさせたりしたとき、グレイコードで表現されていた方が元の性質を引き継ぎそうだ。

2013年9月13日金曜日

退職金

前職の退職金が振り込まれた。中小企業に9年ちょっと籍を置いていただけなので、定年まで役所や大手企業にいた人とは比べるまでもないが、それでもまあ、金が入って悪い気はしない。

…とは言え、金が入ったから使おうという気にもならないんだよなぁ。先の不安も間違いなくあるけれど、それ以上に引越しをしてから物を増やしたくなくなった。それでは無形の体験に金を払うかというと、これまた出不精だからそんな消費も滅多にしない。

こうやって欲が無くなっていって、もう生きていなくてもいいやと思った頃に死ぬのだろうか? いやいや、ももクリは行きたい。だからチケット取らせてプリーズ。

2013年9月12日木曜日

55号

いよいよ56号に王手。さすがに1か月間敬遠しっぱなしなんて、あまりにかっこ悪いことはしないだろうから、3人目の正直で56号を打たせてもらえるかな?

とはいえ、いまいち盛り上がりに欠けている。統一球のゴタゴタで冷めてしまったのは否めないよなぁ。別に、過去の大打者と比べれば、バレンティンだけが特別飛ぶボールを打っているわけではないのだけれど…。

しかしまあ、55本の呪縛が解かれるのは悪いことではない。ローズやカブレラが56号を打てなかったのは、あまりに歪んでいた。バレンティンが因習を蹴散らしたところで、来シーズン、おかわり君に60本くらい打ってもらいたいな~。

2013年9月11日水曜日

iPhone 5s & 5c発表

iPhone 5siPhone 5c。名前も含めて概ね事前に漏れていた通りだったけど、強いて挙げればA7が64ビットコアを積んできたことがサプライズだったかな。

さすがにまだ4GBオーバーのメモリを積むことはないだろうから、単純にレジスタが増えた分だけメモリアクセスが減ることが、64ビットコアの一番の恩恵だろうか。PalmがARM化したときもかなり速くなったように、OSが新しいコア向けに最適化されていれば、APIのグルー的なユーザーコードは32ビットのままでも、全体としては結構速くなるのだろう。

5cのデザインは、ベースの黒い部分もカラフルにしてほしかった。コストの都合で共通化せざるを得なかったとしても、現行のiPod touchのように白ベースにしてほしかった。ポップな感じが足りない。

それはさておき、家計簿をつけていて気が付いたんだが、今日って911だったのね。911どころか、その後のリーマンショックからも立ち直りつつあり、こうしてAppleの新製品で盛り上がれるんだから、なんだかんだ言ってもアメリカって凄いな〜。

2013年9月10日火曜日

結婚願望

http://www.jiji.com/jc/c?g=soc_30&k=2013091000539

結婚願望は決して低くないって、本当か?

収入が結婚の妨げになっているのは事実だと思うけれど、そんなに単純な話ではないとも思う。収入が減ったこと自体は望ましくはないけれど、牛馬のように働けば誰もが一国一城になれる環境が失われたことで、家庭を築けという同調圧力が劇的に弱まったことを喜んでいる単身者も結構いるんじゃないかな。少なくとも自分は、この点に関してはいい時代になったと思っている。

本当はとっくに結婚する気なんて失せているけど、結婚したくても出来ない体を見せておけば角が立たない。そう思って密かに今を謳歌している単身者は、いくら婚活支援したって乗って来ないだろうよ。

2013年9月9日月曜日

PS4

http://www.4gamer.net/games/990/G999024/20130909037/

年末商戦に間に合わないのか、う〜ん。

今時のGPUとメモリ増量で順当な進歩はしているんだけれど、リムーバブルメディアはBlu-rayのままなんだよな。今までCDからDVD、DVDからBlu-rayと、新世代の光学メディアを採用して新しさをアピールしていたのが、今回はその手が使えない。余程上手くアピールしないと、計算機に疎い一般人には、何が変わったのか分からないんじゃないのか?

ただでさえ遊ぶ人しか遊ばなくなっている据え置きハードが、よりマニア向けになるのは嬉しくないなぁ。

2013年9月8日日曜日

2020年

う〜ん。正直言ってオリンピックは望んでいなかったんだが…。まあ、来てしまうものは仕方ない。石原慎太郎の望み通りになるのが、心の底から面白くないなぁ。

2020年と言えば、半導体プロセスの微細化が止まる時期だという話がつい最近あったっけ。鳩山由紀夫が言ってしまったCO2を25%削減する期限も2020年だったはずだが、これで更に難しくなったんじゃないか?

まあ、7年前に現状を見通せていなかったんだから、7年も先のことなんて分からないわな。7年どころか半年前ですら、まさかこんなことになるなんて夢にも思っていなかったし。

ああ、でも超人オリンピックは見たいな。今シリーズでせっかく未来に繋がる話を描いたのだから、一段落付いたらII世に戻って、おかしなハンデ無しで互いに万全な、万太郎vsケビンを見たい。

2013年9月7日土曜日

大人の力

子供の頃果たせなかったビックリマン箱買いの夢が、よもやこんな形で実現するとは。大人の力ってすげー。

さて、子供だったら全部一気に開封してしまうところだが、分別のある大人なので「1日1個チョコレート」ルールを定めた。1つだけ、2つだけ、もう止まらない。…とはならずに我慢できるのが、ヘッドロココ時代から四半世紀分の成長の証だね。

つい勢いで箱買いしてしまったけど、これから1か月間、何が出るのかドキドキしながら毎日チョコの開封を楽しめるなら、割といい買い物だったかもしれない。

2013年9月6日金曜日

docomoにiPhone!?

http://jp.reuters.com/article/wtInvesting/idJPL4N0H14J320130906
http://www.jiji.com/jc/c?g=ind_30&k=2013090600095

またいつもの日経…、じゃないぞ、おい。

これが本当なら、国内に関してはどこのキャリアのSIMカードでもiPhoneが使えるようになるわけだ。docomoに毎月5~6千円も払う気は全くないけど、docomo回線MVNOのSIMカードで運用できるiPhoneなら欲しい。すごく欲しい。iOSのアップデートが止まる第4世代iPod touchから第5世代iPod touchへの乗り換えを考えていたのだけれど、モバイルルータ+iPod touchよりiPhoneだけで済む方が、そりゃ楽だよなぁ。

噂の5Cが国内にも来たら、docomo縛りの緑を買ってしまうかも。

2013年9月5日木曜日

HDMI 2.0

http://www.hdmi.org/press/press_release.aspx?prid=133

まあ、順当な進化ってところか。4Kで3Dで60Pはできないけど。しかし、今使っている安物ケーブルやセレクタで、本当に18Gbpsも出るものなのだろうか?

まあ、4Kに手を出すのは24インチのモニタが20,000円を切ってからだな。それより先は、たぶん目が衰えてて見分けがつかない。

2013年9月4日水曜日

SystemCはじめました、その2

モジュールの話。

まずは手っ取り早く、記述例を挙げてしまおう。入力データを累積するVerilogモジュールと、そのSystemC版。SystemC版は短いので宣言も定義もごった煮にしてしまった。

Verilog版

module acc (
    input           clk,
    input           reset_n,
    input           i_en,
    input           i_clr,
    input   [7:0]   i_d,
    output  [7:0]   o_d
);
reg     [7:0]   r_d;
always @(posedge clk or negedge reset_n) begin
    if (!reset_n)
        r_d[7:0] <= 8'h00;
    else if (i_clr)
        r_d[7:0] <= 8'h00;
    else if (i_en)
        r_d[7:0] <= r_d[7:0] + i_d[7:0];
end
assign o_d[7:0] = r_d[7:0];
endmodule

SystemC版

#include <systemc>
SC_MODULE(acc) {
    sc_core::sc_in<bool> clk;
    sc_core::sc_in<bool> reset_n;
    sc_core::sc_in<bool> i_en;
    sc_core::sc_in<bool> i_clr;
    sc_core::sc_in< sc_dt::sc_uint<8> > i_d;
    sc_core::sc_out< sc_dt::sc_uint<8> > o_d;
    sc_dt::sc_uint<8> r_d;
    SC_CTOR(acc) {
        SC_METHOD(accumlate);
        sensitive << clk.pos() << reset_n.neg();
    }
    void accumlate() {
        if (!reset_n.read()) {
            r_d = 0;
        } else if (i_clr.read()) {
            r_d = 0;
        } else if (i_en.read()) {
            r_d += i_d.read();
        }
        o_d.write(r_d);
    }
};

SystemCの記述を頭からなめて行こう。

まずはSystemCのヘッダsystemcをインクルードしている。互換性のためにsystemc.hも残されているが、systemc.hはやたらめったらusingしまくるので、これから新規で書くコードではsystemcを使った方がいいかな。

モジュール宣言にはSC_MODULEを使う。これはsc_core::sc_moduleのサブクラスを作るマクロで、SystemCのモジュールとはsc_core::sc_moduleのサブクラス。

入力ポートはsc_core::sc_in<>、出力ポートはsc_core::sc_out<>のインスタンスで表す。FFは単純に、モジュールのデータメンバで表現すればよいだろう。

モジュールのコンストラクタは、SC_CTORマクロを使用して定義している。SC_CTORで宣言・定義できるのは、sc_core::sc_module_name型の引数を1つ取るコンストラクタ。引数を変えたい場合は、普通にコンストラクタを定義する。

コンストラクタの中身では、SC_METHODマクロを使用してaccumlate()メソッドをclk入力の立ち上がりかreset_n入力の立ち下がり毎に呼び出すよう、指示している。

accumlate()の中身では、入力に応じて初期化や加算を行い、その結果を出力している。見ての通り、入力ポートから入力されている値を取得するにはread()、出力ポートへ出力する値を設定するにはwrite()を用いる。

2013年9月3日火曜日

SystemCはじめました

ちょっとSystemCが必要になるかもしれないので、手を出してみることにした。

何はともあれ、まずはインストール。名前とメールアドレスを登録してこちらからsystemc-2.3.0.tgzをダウンロードして解凍。…って、何だこりゃ? .tgzなんてサフィックスを付けておきながら、tarでまとめただけでgzipでは圧縮してないじゃないか。tar zxvfで解凍できないから、何事かと思ったぞ。

さて、いきなりケチがついたけれど、解凍できてしまえば中にあるINSTALLに書いてある通りの手順でOK。昔のバージョンはあれこれ手を入れないとビルドできなかったりしたらしいけど、さすがにもう、そんなことはなくなった模様。LMDE64ビットとMountain Lionで、問題なくインストールできた。

2013年9月2日月曜日

覆面狩り

今週のキン肉マン。

雨はいかんぞ〜って、機械の故障を懸念してるのかと思ったら、精神的な話かい。スグルに敗れて以来マンリキくらいにしか勝っていないウォーズマンが過去の敗戦を一々気にしてたら、アワワしっぱなしだろうよ。

さて、最後まですんなり勝たせてもらえなかったウォーズマンだけど、ここが噛ませ犬から21世紀の強豪へのターニングポイントっぽいな。ちょっとクドかったけど、人気投票1位だからしっかり描いてもらえたのだと、好意的に解釈しておこう。

階段ピラミッド編は来週で終わりかな? そろそろ将軍にも動きが欲しいな〜。

2013年9月1日日曜日

ムーアに7年殺し

http://news.mynavi.jp/column/hotchips25/003/

ロシアのサンボの裏技を食らったわけではなかろうが、いい加減、ムーアの法則も限界が近いだろうという話。

化石燃料の枯渇問題とは違って、小さく作ることに技術的・物理的な限界があるのは、プロセス屋さんでなくても分かる。5nmを50Åと言い換えると、より厳しさが感じられるかな。

シングルスレッド性能の伸びが鈍化し始めたときにも、ソフト屋さんがタダ飯を食える時代は終わったと言われたけれど、マルチコアやGPUだけでなく、動かすトランジスタの数までソフト屋さんが意識しなければならない時代が来たりするのだろうか? FPGA付きSoC(SoC付きFPGA?)は既に存在するけれど、まだまだハードを知らないソフト屋さんでも使いこなせるとは思えないからなぁ。そこらへんが、一山いくらのプログラマとの差別化要因になるのかもしれないが。