ガッカリするのはもうやめよ

昨日は動揺したり混乱したりしたけど、それはまあしゃーない。人情ってもんよ。

でも、もうガッカリするのはやめよ。きっと「悪意」はない。能力が「足りない」だけ。せまい世界の限らせた価値観しか知らないだけ。そこを指摘してる人もいっぱいいるし、怒っている人もいっぱいいるし、彼らを信じている人も多少はいる。自分もいっしょになって怒ったりガッカリしたりすることもない。それが「役割」の人たちに任せよう。マスコミやマスコミを追求する人たちに任せよう。

「世界基準」の人たちが少なからず表舞台に出てきているしな。その人たちに任せよう。んで、各々が各々の役割を果たせばいい。

にしても、サッカーのチャリティーマッチよかったな。決定が早かった。日本サッカー界は歴史浅いのに組織が成熟している気がする。やっぱりサッカーは国内で完結することが許されない文化だから「世界基準」にならざるを得ないもんな。 それが成熟しているように見えたんだな、きっと。

closeな組織は腐りやすいんだろうな。openにして摩擦に晒されないと成熟されないんだろうな。たぶん。

TOO LITTLE, TOO LATE

3月16日の孫正義氏のtweet。
現在、日本は歴史上最大の危機に瀕している。東電や政府の方々は、対応が後手に廻らない様にお願いしたい。 too little, too late これが日本の一般的ミスの共通点だ。 今回は、場合によっては千万人単位の人命がかかっている。
残念ながら氏の不安が的中してしまった。

今晩とうとう原発ちかくの土からプルトニウムが検出された。さらに汚染された水が施設外に流出し、下手したら海に流れてしまいそうな状況。

不安と苛立ちが蔓延してきた。twitterでも震災当初のほうが前向きな発言が多かった。いまでは失望と逆ギレなtweetが多くなってきた。

この先どうなっちゃうんだろ? それとも転換期なんだろうか? いい方向へむかっているんだろうか?

(まだまだ限定的だけど)記者クラブに海外メディア、インターネットメディア、フリー記者が入れるようになったり、テレビ局がニコ動やUSTやtwitterなどのソーシャル・メディアとクロスオーバーしたりと、明るい兆しも見えていたのに……。

今回の政府と東電の原発の対応にみんなが不安や苛立ちを感じているのは、その背後に旧態然とした「癒着」や「馴れ合い」の構造を感じているからだろう。国民の命よりもメンツや縄張りを優先していると感じているからだろう。「この期に及んでもういい加減にしてくれ!」ってみんな思ってるんだな、きっと。

この対応のまずさは「個人の無能さ」だけで片付けるのはあまりにも、な感じ。たしかに民主党の政治家たちの「素人っぽさ」は感じるし要因のひとつではあるんだろうけど、もっと根本的なシステムの欠陥があるんじゃなかろうか。たとえば「中央」の図体がデカすぎて、動きがノロいとか指示系統が複数できてしまうとか。

マスコミが健全に機能することを期待してもいいのかな? 東京でデモは起きるかな? 前衛な政治家や官僚が政府内部に入り込んだりしないかな? この大惨事を機に「日本」て国が成熟した民主主義国家にならないかな?

Massive Earthquake

3月11日の震災から二週間。状況は落ち着くどころかいろんな問題が次々と起きている。とりあえず目下の問題を箇条書き。

被災地
いいかげん我慢の限界にきている。一刻もはやい救済が必要。にもかかわらず、政府じれったい。素人なのか? いまこそ超党派で挑まないといけないときじゃないのか? メンツより被災者のことをまず!

原発・放射能
原発はまだまだ落ち着かない。予断を許さない状況はつづく。冷却し、放射能の流出を抑え、施設の整理までやらないと解決したことにならない。いつまでかかるか科学者でも予測できないとのこと。原発地域の避難勧告の問題もひどい。もっと迅速に対応できないのか。

今後、日本は放射能とつきあっていかなければならない。それは覚悟しなければならない。でも人体に影響はないレベルということもきちんと理解しなければならない。

電力
計画停電。とくに夏場の電力不足は避けられない。短期には火力の復旧などの応急処置的な電力確保しかのぞめない。一番の問題は計画停電を一ヶ月行うと一兆円の損害が出ること。経済が落ち込めば復興もままならなくなること。じつはこれが一番おそろしいことかも。

×     ×     ×     ×     ×

どうしようもないこと、長期的に取り組まなければならないこと、それとは別に迅速にやらなければならないことがあるはず。それができていない。政治がのろい。それをせっつく役割のマスコミが機能していない。

いままさに国民全員一致団結するとき。なのに肝心の政府とマスコミがまだ日常をひきづっている。まだ眠ってる。そのことに気づいていない。はやく古い体質を捨てて、はやく目を覚ますことを祈る。

『虐殺器官』伊藤計劃

虐殺器官 (ハヤカワ文庫JA)
伊藤 計劃
早川書房
売り上げランキング: 1335

ひさしぶりに、というよりはじめてSF小説を読んだ。読み切った。これまではSFは途中で挫折してきたから……。

感想を言ってしまえば、スゲーおもしろかった! とても魅了された。引き込まれた。まず、この作者の知識量がすごかった。軍事から文学から哲学から歴史からとその守備範囲も広い。SF小説家ってこんなに賢いのかぁ……。

小説内のテクノロジーが明日にでも実現できそうだと感じるのは、人類のテクノロジーがすでに頭打ちのレベルまできてるからなのかな?

「言語」がこの小説の重要なテーマになっているのだが、自分も最近言語に興味をもちはじめたので「シンクロしてるな」とおもった。プログラミング言語が興味の発端で、いまでは実際の言語(英語とか)にも興味がある。言語って文法とか非常にロジカルなのに、同時にとても柔軟に変化できるところがおもしろいなぁ、とおもう今日この頃。

そしてなによりこの作家の文章がいい。描写。比喩。これもいわゆる「村上春樹以後」の世代だから? 読んでて「SF界の村上春樹か」と思った。SF小説の文章ってなんとなくつまらない印象があるから。これは私の偏見か( ̄▽ ̄;A フキフキ。

残念ながらこの小説を書いた伊藤計劃はすでに亡くなっている。小説家としての活動期間も短く、その作品は三冊とすこし。偉大な才能なのに惜しいことです。

個人的な収穫は、いままで気にも止めてなかったSFに興味が出てきたことですな。

MEDIA LITERACY

メディア・リテラシー
" 情報メディアを主体的に読み解いて必要な情報を引き出し、その真偽を見抜き、活用する能力のこと "(Wikipediaより)

今回の災害で情報の集め方、扱い方をたくさん学んだ。

まず、一番最初に痛感したのは、携帯電話や携帯メールなどの専用回線の脆弱さだった。携帯電話は当然のように通じず、携帯メールも受信できない、発信できないといった状態になった人が多かった。

そこで安定していたツールはtwitterとGmailだったそうだ。 これらは(サーバが海外にあるということもあるだろうが)クラウド技術の優位性を証明した。真剣にスマートフォンに乗り換えようと思った。そして、周りの人たちにもスマートフォンにしてtwitterのアカウントをとるように「布教」しようと思った。

扱い方については、まず普段からインターネットで情報を集めている人は、テレビや新聞といったマスコミに懐疑的な傾向がつよい。それが今回の地震でさらに助長されたように思う。全体数も増えたように感じる。

しかし同時に、今回はtwitter上でのデマもたくさん横行した。自分もいくつかのデマに(精神的に)振り回された。今後、もっと情報を見定める「眼力」を鍛えなければ。でもソーシャル・メディアのすぐれている点は、デマが訂正されるスピードも速いところだから、ちゃんと情報を追えばデマに振り回されることはそんなにないはず。

ソーシャル・メディアとテレビ新聞etc.のマス・メディアの比率は拮抗してくるだろう。情報格差も広がっていくだろう。テレビ新聞の役割もかわってくるだろう。そのとき「識字力(literacy)」が大切になる。感情でなく理性で情報を扱えるように。

「求めよ! さらば与えられん!」

ブラウザ上でMax/MSPみたいなことやりたいと思ったが、HTML5やJavaScriptじゃ音を演算したりするのは無理なことをすぐに思い出す。となると、iPhoneアプリでそれをつくるか。てことはObjective-Cか。Objective-CならCoreAudioとか操作できるようだな。でもそうするとまたあらたに言語を勉強しなきゃならんのか。トホホ。Rubyつかいたいな。RubyでCoreAudioを操作できないのかな? おや? なんだこれは?

てことで、RubyCocoaなる存在を知る。

「求めよ! さらば与えられん!」

これでつながった。

話変わって、デザイン・パターン。前回、JavaScriptでシングルトンを実装したので、この際他のパターンもやってみようかとすこし思った。が、やっぱやめた。

デザイン・パターンのほとんどは設計コンセプトであって、テクニック的には「継承」「委譲」「ポリモーフィズム」しかをつかってないともいえる。構造的に例外なのはPrototype、Iterator、Singletonパターンくらいか?

PrototypeパターンはJavaScriptそのものだし、Iteratorパターンならprototype.jsからRubyライクで上質なイテレータが提供されてる。だからSingletonパターンさえクリアすればよかったのだ。あとは設計コンセプトだから適切なパターンを適切なところでつかえばいいと。

そういうことにしようよ。ヽ( ̄ー ̄ )ノ

オブジェクト指向における再利用のためのデザインパターン
エリック ガンマ ラルフ ジョンソン リチャード ヘルム ジョン ブリシディース
ソフトバンククリエイティブ
売り上げランキング: 12794

Singleton : JavaScript

数ある中から下のページを参考にしました。一番スマートと思います。ちょっとGood Partsっぽくアレンジ。Wikiはシングルトンの説明に。

KAI.JAEGER : The singleton design pattern in JavaScript
Singleton パターン - Wikipedia

var Singleton = function () {

    var instance = null;
   
    var Constructor = function () {  // コンストラクタ。プライベート関数
        var that = {};  // ここにパブリックメソッドを収納
        var id = Math.random();  // IDを乱数にする
        that.getId = function () {
            return id;
        };
        return that;
    };
   
    return new function () {  // staticなメソッド
        this.getInstance = function () {
            if (instance === null) {  // ヌルならコンストラクタを代入
                instance = Constructor();
                instance.constructor = null;  // たぶんnewを禁止している?
            }
            return instance;
        };
    };
}(); // 最後の丸カッコをわすれずに!

var i1 = Singleton.getInstance();
var i2 = Singleton.getInstance();
alert(i1.getId() + "\n" + i2.getId()); // おなじ乱数になる

黒字がいわゆる「The Good Parts」的な部分で、それを赤字の部分でラップすればシングルトンが実装できる。

後半の "return new function ()〜" と一番最後の丸カッコ "()" のコンビネーションでstaticなメソッドを実現している模様。"instance.constructor = null;"  はnewを禁止しているのか? この行があってもなくても挙動が変わらないようなんだけど……よくわからない。

Rubyのようにincludeしただけでシングルトンを実装できるような仕組みをつくれればいいんだが、自分にはひらめけない。上記のサイトではシングルトン化する関数を試みているが、グローバル変数をつかっているからなぁ……。

でもこれだけでも充分スマートだし満足してるぅ。ヽ(´▽`)/〜♪

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン
売り上げランキング: 5275

ゆかいな世界

ヒエラルキー ぼくはアナーキスト
コトバ遊び 不埒な詩人
眠るように 逝ったあの日
ぼくは妙に しらけちまった

ゆかいな世界を
ゆかいな未来を

シンメトリー やぶれた街
にげたいのに かまってほしい
ふくれあがった ユメマボロシ
きみのなかに 挿れて楽しむ

ゆかいな世界を
ゆかいな未来を
脈絡のない希望に
閉ざされた夢のつづき
われら永遠のこども

ゆかいな世界 (demo) by teruo-ooiwa

NHKの革命

3月10日(木)のNHK『クローズアップ現代』でインターネット放送を取り扱った。しかもニコ動とコラボ企画らしい。これはとても革新的なことだ。

放送のなかで「テレビ報道への不信感が高くなっている」とか、テレビを否定するような内容をそのままストレートに流していた。これはすごい。マジで感動して泣いた(T ^ T)。

放送後、この企画のプロデューサーとディレクターがニコ動に生出演した。これもかなり画期的なことだ。こんなことを「あの」NHKがまっさきにやりだすなんて! たしかにNHKの番組ってシュールなもの多いし、けっこうアバンギャルドな組織なのかもしれない。こういう変動の時代に対応できる組織なのかもしれない。

それに比べて民放の不甲斐なさ。ダメだな。民放のほうが保守的なんだ。きっとNHKが一番危機感を感じているのだろう。インターネットの脅威を。津田氏が「これを見た民放の人たちは青ざめているでしょう」と言っていたのは的を得てる。スポンサーのしがらみもなく、上層部の頭も柔軟で、こんな革新的なことをやってのけられるNHKは最強だ!

テレビとインターネットメディアの共生を模索しだしたNHKを、民放も今後無視できないだろう。

最近、革新的な人がインターネット界隈にあらわれ出している。現状の腐敗したシステムに批判的な人が。しかも同時期に一斉に! これは偶然? それともなにかが起きはじめているのか?

もしかしたらかれらは維新の志士かもな。いいね。どんどん変わってしまえばいい。

JavaScript 注意事項

コメント

//のみ使用。日本語でコメントする場合は「、」「。」で終わらせること。それ以外の日本語で終わらせると原因不明の不具合が起きることがある。

比較

==と!=は強制的な型変換をおこなう。
===と!==は型変換をおこなわない。
==と!=はつかわず、===と!==をつかうことをすすめる。

あえて、型変換をおこなう場合は
(foo != 0)書くかわりに、(foo)
(foo == 0)書くかわりに、(!foo)
と書く。

禁則事項

evalとvoidはつかわない。

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン
売り上げランキング: 5275

JavaScript 規約③

アクセス制限・protected

オブジェクト内で宣言された変数は子クラスでもアクセスできない(private)。
thatに格納されたメソッドなどはどこからでもアクセスできる(public)。
外からはアクセスされたくないが、継承先でつかいたいメソッドを定義できる(protected)。格納するハッシュオブジェクトの名前はmyとする。


    var Animal = function (name, my) {  //親クラス
        my = my || {};  //myを設定。なければハッシュを代入
        var _name = name, that = {};

        //myにgetNameメソッドを格納する
        my.getName = function () {  //protectedなメソッド
            return _name;
        };
        that.say = function () {
            return "Hello! My name is ";
        };
        return that;
    };

    var Cat = function (name, my) {  //子クラス。Cat
        my = my || {};
        var that = Animal(name, my);
        var superSay = that.superior('say');
        that.say = function () {
           return superSay() + my.getName() + "! Meow!!";
       };
       return that;
    };

    var Dog = function (name, my) {  //子クラス。Dog
        my = my || {};
        var that = Animal(name, my);
        var superSay = that.superior('say');
        that.say = function () {
            return superSay() + my.getName() + "! Vow wow!!";
        };
        return that;
    };

    var cat = Cat("Liz");
    var dog = Dog("Tom");
    var cat_word = cat.say();   //cat_word => "Hello! My name is Liz! Meow!!"
    var dog_word = dog.say(); //dog_word => "Hello! My name is Tom! Vow wow!!"
    dog.getName();                  //アクセスできない


JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン
売り上げランキング: 5275

JavaScript 規約②

継承

thatに親クラスを代入することで継承をおこなう。


    var Animal = function (name) {    //親クラス
        var _name = name;
        var that = {};
        that.getName = function () {
            return _name;
        };
        return that;
    };

    var Cat = function (name) {    //子クラス
        var _name = name;
        var that = Animal(_name);
        return that;
    };

    //メソッドgetNameは子クラスで定義しなくても
    //親クラスから継承されている
    var cat = Cat("Liz");
    var name = cat.getName();    //name => "Liz"


オーバーライド

メソッドはオーバーライド(上書き)することもできる。


    var Animal = function (name) {    //親クラス
        var _name = name;
        var that = {};
        that.getName = function () {
            return _name;
        };
        that.say = function () {
            return "Hello! My name is " + _name + "!";
        };
        return that;
    };

    var Cat = function (name) {    //子クラス
        var _name = name;
        var that = Animal(_name);
        that.say = function () {    //オーバーライド
            return "Hello! My name is " + _name + "! I'm cat!!";
        };
        return that;
    };

    var cat = Cat("Liz");
    var word = cat.say();    //word => "Hello! My name is Liz! I'm cat!!"


オーバーライドされても継承元(親クラス)のメソッドを呼び出すことも可能。そのためにはまず以下の準備をしておく。


    //第一引数の名前のメソッドを拡張する
    //すべての関数で利用できる
    Function.prototype.method = function (name, func) {
        this.prototype[name] = func;
        return this;
    };

    //継承元のメソッドを呼び出すメソッドを拡張
    Object.method('superior', function (name) {
        var that = this, method = that[name];
        return function () {
           return method.apply(that, arguments);
        };
    });


よりクールに書き換えられる。


    var Cat = function (name) {    //子クラス
        var _name = name, that = Animal(_name);

        //あらかじめ継承元のメソッドをセットしておく 
        var superSay = that.superior('say');
        that.say = function () {    //オーバーライド
            return superSay() + "! I'm cat!!";
        };
        return that;
    };

    var cat = Cat("Liz");
    var word = cat.say();    //word => "Hello! My name is Liz! I'm cat!!"


JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン
売り上げランキング: 5275

JavaScript 規約①

以下に、JavaScriptのコーディングを統一するためのルールを提示する。

名前のルール

①変数……すべて小文字で表現する。単語をつづける場合はアンダーバーでつなげる。


    name_name


②定数……すべて大文字で表現する。単語をつづける場合はアンダーバーでつなげる。var宣言なし。


    NAME_NAME


③インスタンス変数……先頭にアンダーバーをつける。すべて小文字で表現する。単語をつづける場合はアンダーバーでつなげる。


    _name_name


④オブジェクト……頭文字のみを大文字にする。単語をつづける場合も頭文字を大文字にする。


    NameName


⑤関数・メソッド……はじめの単語は小文字で、単語をつづける場合はそれ以降の単語の頭文字を大文字にする。


    nameName



オブジェクトの定義と生成(関数型)

オブジェクトとは、複数のデータの塊である。くわえて、データを操作するAPI(メソッド)を提供する。

オブジェクトの定義には関数型を採用しこれに統一する。変数(var宣言)に関数(function文)を代入することで定義する。


    var Vector = function () {};  //代入なので最後にセミコロンをつける
    var v = Vector();                   //インスタンス生成。()をつける


オブジェクト内で定義する変数(データ・プロパティ)はすべてprivateとする。つまりvar宣言する。そして、慣習により先頭にアンダーバーをつける。


    var Vector = function (x, y) {    //二次元ベクトルのオブジェクト
        var _x = x, _y = y;              //まとめて宣言可
    };
    var v = Vector(2, 4);                //インスタンス生成


しかしこのままではデータを保持してるだけで操作できない。データを操作するためのメソッド(API)を用意する。メソッドはハッシュ(連想配列)のなかに格納し、returnで返す。これによりpublicなメソッドになる。格納するハッシュオブジェクトの名前はthatに統一する。


    var Vector = function (x, y) {
        var _x = x, _y = y, that = {};    //thatに空のハッシュを代入

        that.getX = function () { return _x };    //ゲッタメソッド
        that.getY = function () { return _y };    //内部データを取得

        that.setX = function (x) { _x = x };       //セッタメソッド
        that.setY = function (y) { _y = y };       //内部データを設定

        return that;
    };
    var v = Vector(2, 4);
    var x = v.getX();    //x => 2
    var y = v.getY();    //y => 4
    v.setX(5);
    v.setY(8);
    x = v.getX();    //x => 5
    y = v.getY();    //y => 8



JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン
売り上げランキング: 5275

「検索」から「共有」へ

プログラミング言語 Ruby
まつもと ゆきひろ David Flanagan
オライリージャパン
売り上げランキング: 9764

6章まで読む。5章からは、Rubyの代名詞といえるイテレータが出てきていよいよ面白くなってきた。が、6章にはprocとlambdaが登場してきてだんだん高度になっていくぅ(;´Д`)アウ...。関数プログラミングはスルーさせていただいたノ(´д`*)。

この本はRubyの解説書なんだが、それだけでなくプログラミングの歴史書もかねているようだ。さすが「Rubyは90年代まであったプログラム言語の集大成である」と自負するだけある。

facebookがすこしたのしくなってきた。友達いないんで友達と交流するわけでもなく、主にファンページをフォロー(いいね!)している。その数が増えてくるつけてタイムライン(ニュースフィード)に流れている情報がおもしろくなってきた。これ、ツイッターと一緒だな。ツイッターより情報が多角的なのがちがいか。tumblrのような楽しみ方だな。でもこっちのインターフェイスのほうが個人的に好み。

「検索」から「共有」へ。そういや本屋にも「シェア」本がたくさんあったなぁ。twitterもfacebookもつまりは情報を「共有」することが面白いんだな。イレギュラーな情報をキャッチできるのはたしかに面白い。

つめたい雨

今日は雨降り。濡れた。とてもつめたい。こんなどんよりした日にふと思いだしたのはこんな本。

1984 (Signet Classics)
1984 (Signet Classics)
posted with amazlet at 11.03.01
George Orwell
Signet Classics
売り上げランキング: 3721

『1984年(小説)』wiki

ジョージ・オーウェルの有名すぎる本。和訳を高校生のころに読んだ。ダークな話。冷戦時代の東の国々の話かと思い、「日本に生まれてよかった」なんて当時は呑気だったなぁ。でもこれっていまの日本じゃね? 一部の特権階級が支配している社会。思想検察。情報操作で国民を洗脳するマスコミ。労働家畜をコキつかう企業。ヤバッ! ここにあった! オレ、そんなかにいた!

満州事変が1931年。仮にここから官僚支配(官僚が自らのメンツと既得権益のために存在するようになってから)がはじまったとして、今年でちょうど80年。エジプトだって30年、リビアだって40年。われわれはマジで飼い馴らされてる。気づいたとしても革命なんて起こせないように、ぬるま湯に入れられてフヌケにさせられてる。

まるで小説のようだ。結末がおそろしい……。