2011年3月30日水曜日

150ベクレルの水と300ベクレルの水

150ベクレルの水をコップ2杯飲むのと、300ベクレルの水をコップ1杯飲むのとは同じ事だと思うのだが…。だから、千葉の水道水の基準が一時的に300超えていても、長期に渡って飲み続けなければ、大して差は無い。今の措置は、1年という単位の期間限定でとられるような臨時的な措置なのだと思う。
政府は対応を協議しているような説明をしていたが、実は事前に危機管理として基準値は決められていたくさい。この基準もWHOの基準から導かれているようで、Generic Action = 通常時の基準として、100ベクレルの水という事になっている。非常時には、この基準は引き上げざるを得ない訳で、まぁ、妥当な基準と言えるのではないだろうか?
リスクが無いという話ではないが、にわか仕込みの根拠の乏しい決め方ではないので、甘んじて受け入れるしかないのだろう。

2011年3月27日日曜日

正しい事って何だ?

「風評被害」という言葉がひとり歩きをしているように思うので、あえて、みんなと真逆の事を書いてみる。
未知の経験をした時、どこまでが正しいか?なんて、わかるはずがない。後から振り返ってみて、ああー、あの時は、おかしな事を言ってたなーとか、全然認識が足りなかった…とかが、わかるのである。常識的に考えて、全く関係のないものが被害を被るのであれば、ああー、それは、ひどい話だよねと思う。なるべく、正しい事を書きたいとは願っているが、そんな事、不可能ではなかろうか?

むしろ、思っている事を堂々と書けない雰囲気や風潮の方に、私は怖さを感じます。

みんな、遠慮しないで、どんどんと思っている事を書けばいんじゃね?間違った事を書いてれば、それ違うみたいだよ?って、訂正すればいいんじゃね?

2011年3月26日土曜日

精神的に辛い場所に犬とかを配置するのも有りかも?

積分の概念が不足していると思う

日本は大量に水を使用する文化。加工するにあたって、どんな食品が、どれぐらいの水を必要としているのか考えないと、リスクが高いんじゃないのか?なんて思う。放射性物質もダラダラと垂れ流しが続けば、一時的のドカンと拡散した量に近づいていくのではないかと思う。具体的な量は、専門家でないから、言及はできないが、半減期が30年と長いセシウム137が、チェルノブイリ事故で出た50%に達したという報道もある。これは、しかも途中経過であり、漏洩量が減ってきているとしても長期に続けば量は蓄積されていく。これだけ広範囲に汚染されてしまったら、首都圏を退避させるのは不可能だという判断は、理解できる。だからと言って、安全だという話は、まともな感覚を持った人ならば、おかしいと思うのが普通だろう。安全だと言い切る人は、パニックを起こさせない事が文化人としての勤めだとでも考えているのでしょうか?安全なのではなく、仕方が無い事だから、我慢するしかない。今の状況は、まさに、こういう状況だと思います。今後、リスクを軽減するために、どんな事ができるか考えて、対策する必要があると思います。

未だに半径30kmを避難地域としているのもおかしい。少なくともDOEの結果に基づいて判断すべきだと思う。ここは、政府が機能しているならば、ただちに避難させるべきであると思う。放射能汚染、福島および福島近隣、実験局かよ。

ひまわりを植えるというのも科学的根拠に乏しい冗談だと思っていたが、可能性があるならば、なりふりかまわず試してみるしかないのかもしれない。

パニックを煽るような事を書くなと、周りからとめられるような状況ですが、さすがに我慢も限界だ。さじ加減ひとつで、未来が大きく変わる時期に来ていると思う。

2011年3月25日金曜日

Cassandra C++ であそぼ(5)

ぽぽぽぽーーーん
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
 
#include "Cassandra.h"
#include "cassandra_types.h"
 
#include <protocol/TBinaryProtocol.h>
#include <transport/TSocket.h>
#include <transport/TTransportUtils.h>

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/foreach.hpp>
 
const int port= 9160;

using namespace org::apache::cassandra;

std::string show_lists( std::vector<KeySlice>& kres ) {
  BOOST_FOREACH( KeySlice kv, kres ) {
    std::cout << "Row key: " << kv.key << std::endl;
    BOOST_FOREACH( ColumnOrSuperColumn& col, kv.columns ) {
      std::cout << col.column.name << ":";
      if( col.column.name == "age" ) { 
        // big endian 
        std::reverse( col.column.value.begin(), col.column.value.end() );
        std::cout << *(long*)(&col.column.value[0]) << std::endl;
      } else {
        std::cout << col.column.value << std::endl;
      }
    }
  }
  if( kres.empty() ) return "";
  return kres[kres.size()-1].key;
}

int main(int argc, char* argv[]) {
  using namespace apache::thrift;
  using namespace apache::thrift::protocol;
  using namespace apache::thrift::transport;

  boost::shared_ptr<TSocket>     socket(new TSocket("localhost", port));
  boost::shared_ptr<TTransport>  tport(new TFramedTransport(socket));
  boost::shared_ptr<TProtocol>   pcol(new TBinaryProtocol(tport));
  CassandraClient                client(pcol);

  try {
    tport->open();
    client.set_keyspace( "Keyspace1" );

    ColumnParent pare;
    pare.column_family = "Users";

    typedef std::vector<ColumnOrSuperColumn> csc_vec_type;
    typedef std::map<std::string, csc_vec_type> result_type;
    result_type res;

    SlicePredicate predicate;
    predicate.__isset.column_names = true;
    predicate.column_names.push_back( "first" );
    predicate.column_names.push_back( "last" );
    predicate.column_names.push_back( "age" );

    //const char* keys[] = { "Aa", "Bb", "Cc", "Dd", "Ee", "Ff", "Gg", "Hh", "Ii", "Jj" };

    KeyRange range;
    range.__isset.start_key = true;
    range.__isset.end_key = true;
    //range.start_key = "";
    //range.end_key = "";
    range.count = 6; // デフォルトは100

    // Random Patition における RowKey に
    // ソートキーという概念が無い点に注意
    // 終了のキーは、この場合、指定しない
    // 先頭から6個づつ読み込む
    std::vector<KeySlice>  kres;
    client.get_range_slices( kres, pare, predicate, range, ConsistencyLevel::ONE );
    // 表示ついでに、最後に読み取った場所をキーとして
    range.start_key = show_lists( kres );
    // 続きから読み込む
    client.get_range_slices( kres, pare, predicate, range, ConsistencyLevel::ONE );
    show_lists( kres );

    tport->close();
  } catch (InvalidRequestException &re) {
    std::cerr << "invalid request: " << re.why.c_str() << std::endl;
  } catch (TException &tx) {
    std::cerr << "ERROR: " << tx.what() << std::endl;
  }
  return 0;
}

2011年3月24日木曜日

Cassandra C++ であそぼ(4)

#include <string>
#include <sstream>
#include <iostream>
#include <vector>
 
#include "Cassandra.h"
#include "cassandra_types.h"
 
#include <protocol/TBinaryProtocol.h>
#include <transport/TSocket.h>
#include <transport/TTransportUtils.h>

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/foreach.hpp>
 
const int port= 9160;

int main(int argc, char* argv[]) {
  using namespace apache::thrift;
  using namespace apache::thrift::protocol;
  using namespace apache::thrift::transport;
  using namespace org::apache::cassandra;

  boost::shared_ptr<TSocket>     socket(new TSocket("localhost", port));
  boost::shared_ptr<TTransport>  tport(new TFramedTransport(socket));
  boost::shared_ptr<TProtocol>   pcol(new TBinaryProtocol(tport));
  CassandraClient                client(pcol);

  try {
    tport->open();
    client.set_keyspace( "Keyspace1" );

    ColumnParent pare;
    pare.column_family = "Users";

    typedef std::vector<ColumnOrSuperColumn> csc_vec_type;
    typedef std::map<std::string, csc_vec_type> result_type;
    result_type res;

    SlicePredicate predicate;
    predicate.__isset.column_names = true;
    predicate.column_names.push_back( "first" );
    predicate.column_names.push_back( "last" );
    predicate.column_names.push_back( "age" );

    const char* keys[] = { "Aa", "Bb", "Cc", "Dd", "Ee", "Ff", "Gg", "Hh", "Ii", "Jj" };
    std::vector<std::string> kv;
    for( int i = 0; i < 10; ++i ) {
      kv.push_back( keys[i] );
    }

    client.multiget_slice( res, kv, pare, predicate, ConsistencyLevel::ONE );

    BOOST_FOREACH( result_type::value_type& ri, res ) {
      std::cout << "Row key: " << ri.first << std::endl;
      BOOST_FOREACH( ColumnOrSuperColumn& col, ri.second ) {
        std::cout << col.column.name << ":";
        if( col.column.name == "age" ) { 
          // big endian 
          std::reverse( col.column.value.begin(), col.column.value.end() );
          std::cout << *(long*)(&col.column.value[0]) << std::endl;
        } else {
          std::cout << col.column.value << std::endl;
        }
      }
    }
    
    tport->close();
  } catch (InvalidRequestException &re) {
    std::cerr << "invalid request: " << re.why.c_str() << std::endl;
  } catch (TException &tx) {
    std::cerr << "ERROR: " << tx.what() << std::endl;
  }
  return 0;
}

Cassandra C++ であそぼ(3)

#include <string>
#include <sstream>
#include <iostream>
#include <vector>
 
#include "Cassandra.h"
#include "cassandra_types.h"
 
#include <protocol/TBinaryProtocol.h>
#include <transport/TSocket.h>
#include <transport/TTransportUtils.h>

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
 
 
const int port= 9160;
 
int main(int argc, char* argv[]) {
  using namespace apache::thrift;
  using namespace apache::thrift::protocol;
  using namespace apache::thrift::transport;
  using namespace org::apache::cassandra;

  boost::shared_ptr<TSocket>     socket(new TSocket("localhost", port));
  boost::shared_ptr<TTransport>  tport(new TFramedTransport(socket));
  boost::shared_ptr<TProtocol>   pcol(new TBinaryProtocol(tport));
  CassandraClient                client(pcol);

  try {
    tport->open();
    client.set_keyspace( "Keyspace1" );

    ColumnParent pare;
    pare.column_family = "Users";

    std::map<std::string, std::map<std::string, std::vector<Mutation> > > mmm;
    Mutation  mut;
    mut.__isset.column_or_supercolumn = true;
    mut.column_or_supercolumn.__isset.column = true;
    //mut.column_or_supercolumn.column.__isset = true;
    const char* keys[] = { "Aa", "Bb", "Cc", "Dd", "Ee", "Ff", "Gg", "Hh", "Ii", "Jj" };
    const char* firsts[] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
    const char* lasts[] =  { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
    std::string age;
    age.resize( sizeof(long) );
    long* lage = (long*)&age[0];
    for( int i = 0; i < 10; ++i ) {
      std::vector<Mutation> vm;
      mut.column_or_supercolumn.column.name = "first";
      mut.column_or_supercolumn.column.value = firsts[i];
      mut.column_or_supercolumn.column.timestamp 
        = (boost::posix_time::second_clock::universal_time() 
         - boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds();
      vm.push_back( mut );
      mut.column_or_supercolumn.column.name = "last";
      mut.column_or_supercolumn.column.value = lasts[i];
      vm.push_back( mut );
      *lage = 35 + i;
      std::reverse( age.begin(), age.end() );
      mut.column_or_supercolumn.column.name = "age";
      mut.column_or_supercolumn.column.value = age;
      vm.push_back( mut );
      mmm[ keys[i] ][ "Users" ] = vm;
    }
    client.batch_mutate( mmm, ConsistencyLevel::ONE );

    SlicePredicate predicate;
    predicate.__isset.column_names = true;
    predicate.column_names.push_back( "first" );
    predicate.column_names.push_back( "last" );
    predicate.column_names.push_back( "age" );

    std::vector<ColumnOrSuperColumn> v;
    client.get_slice( v, "Aa", pare, predicate, ConsistencyLevel::ONE );

    for( int i = 0; i < v.size(); ++i ) {
      std::cout << v[i].column.name << ":";
      if( v[i].column.name == "age" ) { 
        // big endian 
        std::reverse( v[i].column.value.begin(), v[i].column.value.end() );
        std::cout << *(long*)(&v[i].column.value[0]) << std::endl;
      } else {
        std::cout << v[i].column.value << std::endl;
      }
    }

    tport->close();
  } catch (InvalidRequestException &re) {
    std::cerr << "invalid request: " << re.why.c_str() << std::endl;
  } catch (TException &tx) {
    std::cerr << "ERROR: " << tx.what() << std::endl;
  }
  return 0;
}



ん???何か間違ってる…
ちゃう
create column family Users with comparator=UTF8Type and default_validation_class=UTF8Type;

create column family Users;
だけしていると、あかんだけやった。

Cassandra C++ であそぼ(2)

#include <string>
#include <sstream>
#include <iostream>
#include <vector>
 
#include "Cassandra.h"
#include "cassandra_types.h"
 
#include <protocol/TBinaryProtocol.h>
#include <transport/TSocket.h>
#include <transport/TTransportUtils.h>
 
 
const int port= 9160;
 
int main(int argc, char* argv[]) {
  using namespace apache::thrift;
  using namespace apache::thrift::protocol;
  using namespace apache::thrift::transport;
  using namespace org::apache::cassandra;

  boost::shared_ptr<TSocket>     socket(new TSocket("localhost", port));
  boost::shared_ptr<TTransport>  tport(new TFramedTransport(socket));
  boost::shared_ptr<TProtocol>   pcol(new TBinaryProtocol(tport));
  CassandraClient                client(pcol);

  try {
    tport->open();
    client.set_keyspace( "Keyspace1" );

    ColumnParent pare;
    pare.column_family = "Users";

    SlicePredicate predicate;
    predicate.__isset.column_names = true;
    predicate.column_names.push_back( "first" );
    predicate.column_names.push_back( "last" );
    predicate.column_names.push_back( "age" );

    std::vector<ColumnOrSuperColumn> v;
    client.get_slice( v, "jsmith", pare, predicate, ConsistencyLevel::ONE );

    for( int i = 0; i < v.size(); ++i ) {
      std::cout << v[i].column.name << ":";
      if( v[i].column.name == "age" ) { 
        // big endian 
        std::reverse( v[i].column.value.begin(), v[i].column.value.end() );
        std::cout << *(long*)(&v[i].column.value[0]) << std::endl;
      } else {
        std::cout << v[i].column.value << std::endl;
      }
    }

    tport->close();
  } catch (InvalidRequestException &re) {
    std::cerr << "invalid request: " << re.why.c_str() << std::endl;
  } catch (TException &tx) {
    std::cerr << "ERROR: " << tx.what() << std::endl;
  }
}

もうレベル7でいいんじゃね?

2011年3月23日水曜日

Cassandra C++ であそぼ

#include <string>
#include <sstream>
#include <iostream>
 
#include "Cassandra.h"
#include "cassandra_types.h"
 
#include <protocol/TBinaryProtocol.h>
#include <transport/TSocket.h>
#include <transport/TTransportUtils.h>
 
 
const int port= 9160;
 
int main()
{
  using namespace apache::thrift;
  using namespace apache::thrift::protocol;
  using namespace apache::thrift::transport;
  using namespace org::apache::cassandra;

  boost::shared_ptr<TSocket> socket(new TSocket("localhost", port));
  // cassandra version 7.0 interface needs to TFramedTransport !!!
  boost::shared_ptr<TTransport> transport(new TFramedTransport(socket));
  boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
  CassandraClient client(protocol);

  try {
    transport->open();
    client.set_keyspace( "Keyspace1" );

    ColumnPath path;
    path.__isset.column = true; // this is required!
    path.column_family = "Users";
    path.column = "last";

    ColumnOrSuperColumn ret_val;
    client.get(ret_val, "jsmith", path, ConsistencyLevel::ONE);
    std::cout << "name : " << ret_val.column.name.c_str() << std::endl;
    std::cout << "value: " << ret_val.column.value.c_str() << std::endl;
 
    transport->close();
  } catch (InvalidRequestException &re) {
    std::cerr << "invalid request: " << re.why.c_str() << std::endl;
  } catch (TException &tx) {
    std::cerr << "ERROR: " << tx.what() << std::endl;
  }
}


2011年3月21日月曜日

思惑が交錯する

今回の震災では、IT社会に関して非常に面白い側面が見れたように思う。ここんところ、ずーっと原発の事が気になって、情報を追い求めていた。グーグル検索で、リアルタイム検索を行うと Twitter の情報が、どんどん流れる。今、皆が何を考えているのか垣間見れるのだ。キーワードは、「福島原発」「原発」「女川原発」「セシウム137」「放射線 測定値」「モニタリングポスト」・・・などを使っていた。当然ながら情報の質は、玉石混合である。
普段と違って、これだけ巨大な関心事になると、RT(リツイート)が多い事に気がついた。観察していると、ボットのように同じ事をつぶやいている人が多い。あまりにひどいので、途中から、検索ワードから「-RT」を追加することにより、フィルタリングを施してみるようにした。結果は上々である。しかし、もし悪意を持ってツイートしている人がいたと仮定して、その人たちに知れ渡ると、この手法も通用しなくなるかもしれない。なんとなくであるが、悪意を持ってツイートしている人がいるような気がしている。どさくさに紛れて、アフィリエイトをツイートする人。有用な情報に見せかけて宣伝をツイートする人。本当に面白い。事の真偽もよくわからないのに、良い話だと思ってRTする人もたくさんいた。ここまでくると、トイレの花子さんと同レベルである。都市伝説と言っていい。確証が持てないので指定はできないが、何故、このタイミングで、こんな無意味なニュースが流れる?(誰かが世論を操作しようと悪意で流しているのではないか?)って疑問を感じるものもある。そのニュースから、一般に波及するレベルも垣間見える。ツイートを分析すると、論文が書けるのではないかと思う。震災時のツイートは、たぶん、良い題材だと思う。

クラウド・マインドマップ

今回の原発の危機で、政府が機能していなかったっぽい・・・いっそのこと、日本人、みんなで危機対策したほうがマシじゃね?なんて、発想で、クラウド・マインドマップなんてものを思いつきました。
Twitter のタイムラインを眺めていると、中にはオッ?てものが紛れています。みんなの知恵を集約できる仕組みがあれば、きっと迅速にすごい対策ができるような気がします。マインドマップで、いろんなアイディアをポストし、投票制で枝葉が、だんだん大きくなったり、小さくなったり・・・。でも、Buzzみたいに、ひょこひょこ動かれたら、編集できないかな・・・。

これはひどい

http://skazuyoshi.exblog.jp/12828796/東電は、芯から腐ってるな。国家が賠償する事態は、仕方ないとしても、ホウ酸を直ちに投入させなかった連中がいたとしたら、許せない。年収に見合った責任というものも当然ついてまわる。
放射性物質の数値が、また上昇しているようだが、蒸気排出でも行われたのか?事実確認中といったところか?それとも、雨の影響?

2011年3月19日土曜日

枝野官房長官がんばれ!

正直、よくやっていると思う。糞みたいな質問にキレル事なく冷静に対処されているように見える。こういう、ちゃんとした対応をしてもらえると無用な混乱を招かなくて良いと思う。無意味に批判する人がいるので、エントリとして書き込む形で応援したくなった。

追記
twitter のリアルタイム検索を見ていると、枝野さんは、福島原発事業仕分けの張本人なんて批判があった。
そこで、調べてみたら、至極、まっとうな意見を言ってます。
http://www.cao.go.jp/sasshin/shiwake3/details/pdf/1029/gijigaiyo/a-14.pdf

ホラーだ

廃炉にしてでもメルトダウンを防ぐのが、一般的な感覚。4号機の燃料も再利用するつもりで放置していたのではないか?場当たり的対処の連続。状況把握から、対策まで、政府はちゃんと機能していたのか?事態が収拾したら、キッチリ検証しないと、日本の復興は、有り得ないのと違うか?

2011年3月15日火曜日

福島原発

遠隔操作アームとか、介護用補助装置みたいなものを使って、作業できないのだろうか?
ロボット工学系の方、心当りない?NASAの作業アームとか?

すばらしい

http://www.youtube.com/watch?v=U8VHmiM8-AQ&feature=feedu

2011年3月13日日曜日

お声がけ便秘キューシステム(障害時のJALの列整理術)

 このエントリーは、2011年3月11日に発生した東北沖地震の影響で、欠航が相次ぎ、翌12日大量のキャンセル待ちが生じている状況下におけるJALの行列のさばき方を分析したものである。2時間ぐらいの行列が出きている中、JALがとっていた処置は、通常運行における手荷物を預けたいだけの客と、各路線のキャンセル待ちの客を全て同じ列に並ばせるというものであった。

 午前4時30分、行列が形成されはじめる。午前5時30分にオープンする予定なので、午前5時ぐらいには何らかの対処があっても良さそうなものだが、現場では、列の並ばせ方をどうするかで揉めている模様。この時点で、危機管理対策がゼロである事が伺える。厳しい見方をすれば、経営危機に陥り、いろいろと改革されているはずであるが、本質は全く変化していないと言われて仕方がないかもしれない。

 午前5時30分、午前8時30分までの全ての飛行機の欠航が決まり、オープンが午前6時に延期される。

 午前6時(正確な時間は不明)、一部の便だけ運行が決定したので、キャンセル待ちの行列を処理するために、受付が開始される。ただし、全ての路線がごっちゃになっているので、運行が決定していない路線の客に対しては排除措置が取られた。「運行の目処がたっていないので、お引取りください。運行の目処が立ったらご連絡します。その際は、再度、列に並びなおしてください。」という説明であった。まず、この状況をアナウンスしないで、窓口で個別に説明するという対応に怒りを覚えた。サービスする側、キャンセル待ちをしている客、双方にとって全く時間の無駄である。せめて、一言アナウンスすれば、便秘の原因となっている行列中の客は掃けるのである。次に、運行が開始されたというアナウンスが館内に流れる事は一度も無かったことに、怒りを覚えた。

 午前10時30分ごろ、電光掲示板を見て運行が開始されている事に気がつき、再び行列の最後尾から並びなおす。行列のフォロワーが一人もいないので、この行列で合っているのか不安を覚えながら並んだ。ややしばらくして、お弁当とおにぎりの無料配布が始まった。そんな気を遣う前に、行列をフォローしてください・・・と、言いたかった。

 行列がサービスデスクに近づくにつれて、このシステムの全容が明らかになってくる。「前列の中で、○○行きのキャンセル待ちのお客さまは、いらっしゃいませんか?」。賢明な読者なら、もうお気づきであろう。そう、前列付近に○○行きのキャンセル待ちの客がいない場合には、飛行機は空席のまま飛び立つしかないのである。たとえ、行列の後方に、たくさんの○○行きのキャンセル待ちの客が居たとしてもである。このようにして便秘の行列は、なかなか掃けず、単に手荷物を預けたいだけの客も巻き添えを食らっていた。中には1時間30分ぐらい並んだ挙句、列を離脱する方もいた。ちなみに、セキュリィティチェックでは、大量の手荷物を検査するために手間取っている(何度も手荷物を差し戻して検査する)模様であった。

 さて、ようやく私の順番が来て、発券となったのだが、私の直前に「駆け込みキャンセル」をさばき終えたばかりなので、直近の便でもキャンセルが予測されるが確定には至らず、ずいぶん後の便を案内してもらう事になった。こんな状況下では、文句を言うのも忍びない。実際、現場の方々は個々に一生懸命対応しているのだ。

 余裕を持って、セキュリィティチェックを終え、ゲートの待合室でニュースを食い入るように見ていると、「○○行きで、キャンセル待ちのお客さまは、いらっしゃいませんか?」と声が聞こえた。私は必死に考えた。論理的におかしい。まず、ゲートの待合室に来れる客は、便が決定しているから、ここに来ているのであって、キャンセル待ちの人など、いるはずが無い。一体、何が言いたいのか???また、単に声を上げるだけでなく、何故、アナウンスしないのか???いやはや、現場の混乱は相当なものである。

 飛行機に乗り込んで、空席を確認してみたが、札幌行き15:00の便は、10席以上空いていた。13:00ぐらいに並んで、札幌行きに乗れなった方がどれぐらいいるのか、気になるところである。

 この行列のさばき方を命名すると、やはり、「お声がけ便秘キューシステム」がピッタリであろう。便秘を解消するためには、まず、最低限として、手荷物を預ける客と、キャンセル待ちの客と、通常手続きの客の行列を分離するべきであろう。次に、キャンセル待ちの客を方面ごとに分離すべきである。それが不可能であるならば、整理券を発行し、アナウンスで呼びかけるなどすれば良い。

 チケットレス・サービスがあるのだから、キャンセル待ちの予約を組み込んではどうだろうか?キャンセルが確定する度に、キャンセル待ちの客を順次、各便にバインド(紐付け)していくのである。便のシフトも含めてシステム側で対応すれば、わざわざ券を発行しなくてもいいだろ?アナウンスも含めて、体制を見直した方がよいでしょう。

2011年3月12日土曜日

帰宅しました

 いやー、疲れた・・・。ちょっと、マジ大変な事になってる・・・。
とりあえず、無事帰りました。

チケットゲット

全く、ワンピースの映画で混雑した時と、全く同じ状況が繰り返されている。現場の責任者は、明日は、地震の影響で大変だと覚悟しながら寝たんでしょう。早朝に行列ができつつあるのに、どういうふうに並ばせるかで、もめてる。列を整理するフォロワーが一人もいないから、荷物を預けたいだけの人と再発行を待つ人が同じ階層に並んでる。整理券を配らないし、アナウンスもない。目処がたってないと、一度追い返されて、二度も並んだ。どちらも二時間ぐらいのロス。アナウンスなしに、俺より後に並んだ人がサッサと飛行機に乗ってるって、どういうこと?
オニギリ配る暇があるなら、列を整理しろよ。
情報の取得も遅い、環状線は、内回りのみ運行してから、アナウンスが流れるまで、一時間以上。お粗末。

空港缶詰

いやー、参りましたね。帰れません。

2011年3月11日金曜日

出張など

 一応、明日(3/11って今日じゃん)、東京出張ですが、トンボ帰りです。
ここんところ、サポートの仕事が、えらいキツかった・・・。ま、パートナーの企業さまも、えらいしんどくてキツかったと思います。1週間以上、skypeで連絡とりながら、延々と現状分析・ディスカッション・試験・修正の繰り返し・・・。様々な要因が絡んでいて、ほぐす作業が大変だった。
 ひとつは、トランザクションにまつわるお話。ひとつは、品質にまつわるお話。ひとつは、ドライバにまつわるお話。分散協調は、ほんと難しいですわ。
 本日、iPad のOSをバージョンアップしました。ロックが消音と回転を選択できるようになっていて、嬉しい。ブラウザもめちゃ良くなった。すばらしい。破棄された画像のメモリリークも直ったのかも???前は、もうちょっと簡単に現象が出たように思う。今のところ、まだ現象が出ない。

2011年3月10日木曜日

Windows7 SP1 のインストールに失敗からのリカバリー方法

参考URL:A bunch of our workstations are failing to install Windows 7 SP1.

Windows7 SP1 のインストールに失敗し、エラー C0000034 とか出て、自動修復もままならない状況に陥った。

  1. 修復スタートを開始する
  2. 修復に失敗する
  3. エラーを送信しないを選択する
  4. システム修復オプションにて「コマンド・プロンプト」を選択する
  5. %windir%\system32\notepad.exe を実行し、メモ帳を起動する
  6. メモ帳から xml ファイルを開きたいので、開くファイルの種別「*.txt」から「*.*」に変更し、C:\Windows\winsxs あるいは X:\Windows\winsxs を開く(この時点では、まだフォルダが表示されている)
  7. pending.xml というファイルを見つけたら、マウスの右ボタンで「コピー」と「ペースト」を行い、ファイルのバックアップコピーを作成しておく。
  8. pending.xml を選択し、開く
  9. メニューの「編集」「検索」から「0000000000000000.cdf-ms」(0が16個)を探し、次のような箇所を選択して削除する。
  10. <Checkpoint/> <DeleteFile path="\SystemRoot\WinSxS\FileMaps\_0000000000000000.cdf-ms"/> <MoveFile source="\SystemRoot\WinSxS\Temp\PendingRenames\e56db1db48d4cb0199440000b01de419._0000000000000000.cdf-ms" destination="\SystemRoot\WinSxS\FileMaps\_0000000000000000.cdf-ms"/>
    
  11. ファイルを保存して、マシンを再起動する

windowsにおけるjavaのupdateがうざい

 Windows7でJavaランタイムを入れると、自動更新されます。Javaランタイムの自動更新は重要です。脆弱性に対応したりするからです。しかし、Write once Run anywhere の Java にも当然バージョン問題があります。推奨されませんが、レイアウトが崩れるなど、様々な理由により、特定のバージョンが指定される事もあります。そのため、細かくランタイム・バージョンが残ります。はっきり言って、過去のバージョンなんて使いたくないから消してほしい。
 さて、ご存知のとおり、Windows では UAC が導入されており、管理者アカウントでは、動作しないアプリケーションが目白押しなので(仮想マシンのフォルダなど)、普段は管理者でないアカウントでログインしないと、まともな活動はできません。そんな中、「新しいJavaランタイムのインストール準備ができました」と告知されます。これはアップデートせねば!とインストールしようとすると、UACにより管理者のパスワード入力を促され、管理者パスワードを入力してインストールを開始します。しばらくして、管理者権限がありませんと怒られてインストールに失敗します。
 これ、何のイジメですか???全くもって、お話になりません。

2011年3月6日日曜日

もげもげー

 土日出勤です・・・。しかし、当初予定していた仕事ではない仕事をしてます・・・。

boost::decimal まだーーー?

2011年3月2日水曜日

忙しい

 ここんところ、なんだかわかんないけど忙しい。Android は、適当なところで切り上げて終了したのだが、その間に溜まっていた仕事の方をやっつけた。std::unique しておいて、数がずれる・・・なんていう記憶力の高い若い時なら絶対に冒さないようなミスのバグで、ちょっとだけ落ち込む。よく使う組み合わせをセットにして関数化するのは結構だが、関数の命名規則にも気をつけよう・・・と心に誓ったのであった。
 いろいろと読みたい本もあるのだが、プロジェクト管理系の本も読まなくてはならず、これがサッパリ頭に入らない。何回読んでも、右目から左目に抜けて右耳から左耳に抜けていくのだ。一字一句、きっちりと読む事ができない。読んでいるうちに違う事を考えてしまうのだ。こんなに読みにくい本はない。
 で、ここんところ何故忙しいかというと、コーディングしなければならないからで、巡回セールスマン問題ふたたび・・・という雲行きになってきた。前にウェブ用に巡回セールスマン問題のデモを作った時は、計算速度は速いのにトランザクションの速度に引っ張られてレスポンスが非常に悪かった。ここの反省を踏まえて、今度は NoSQL を使ってみようと画策しているのだが、そんな事をしている余裕もなく、1週間でデモを仕上げなくてはならなくなった。たぶん、土日は休めそうも無い。
 こんなに技術面のコーディングに引っ張られているというのに、読みたい技術書を読んでる暇がない。まじ7冊以上は確実に腰をすえて読みたい本があるというのに・・・。こんな状態だから、コーディングで遊んでいる余裕もない。つか、先日は、ボトルネックがわかっていた部分を改良して、実行速度が約3倍に跳ね上がった。何をすれば良いかも自分の中では、はっきりしていて、その上でコーディングする時間的余裕が取れなかったのだ・・・。放置すること6ヶ月以上。