「イノベーションの神話」によると、イノベーションの条件の1つに、「移行コストが低い事」というのがある。GMail から Buzz への移行コストは、そこそこ低いと言える。そういう意味では、Buzz は、そこそこ使われるようになるかもしれない。問題は、Twitter 的要素に GMailは最適か?である。GMail 以外に専用の入り口を用意すべきであろう。
Google Wave についても言及しておくと、Git によるリアルタイム性の強いリポジトリ・ドキュメント・システムじゃねぇの?というのが、今のところ、私が持っている印象である。いや、Wave なんてビデオの紹介でしか見たこと無いんだけどね…。
私は、Twitter さえ使うのを拒否しているので、Buzz を使わないだろう。ちょっと覗いてみたが、あれを公開しろ、公開しろ、おまえのデータを公開しろ、と、もう、やりたくない汁が充満してしまった。何を公開して、何を公開しないかは、俺がコントロールする。ちなみに、Facebook も MySpace も Mixi もやらないし、やる予定もない。
2010年2月11日木曜日
2010年2月10日水曜日
2010年2月7日日曜日
mimetic が密かに気になる
2010年2月3日水曜日
strict week ordering?
久々に代数学の教科書を引っ張り出してきた…。
順序集合(半順序)の条件は
であり、これに
という条件が加われば全順序集合という事になる。
Strict week ordering 聞いた事が無かったが、これによると
全順序集合から == を取り除いたものという感覚が一番しっくりするかも…。
比較可能であれば、必ず x < y || y < x が成立し、比較不可能であれば !( x < x ) より常に false となる。
で、確かに、なんて訳せばいいのかは、わかんねーです。
追伸:Blogger のエディタが文中の < & > を正しく扱えなくて、何度も書き直した。イライラが続くときは、こんなもんか…。
追記 2010/02/04:Strict weak ordering (b) の条件を強化
weak の意味は、不等号 < という意味に近いのかな?と思った。そうすると、完全比較順序集合という訳が妥当かもしれない。
順序集合(半順序)の条件は
a) 反射律 x <= x
b) 非対称律 x <= y && y <= x -> y == x
c) 推移律 x <= y && y <= z -> x <= z
であり、これに
d) (x <= y || y <= x) が真
という条件が加われば全順序集合という事になる。
Strict week ordering 聞いた事が無かったが、これによると
a) 反射律の対偶?と呼ぶべきか、非反射律と呼ぶべきか? !(x < x)
b) 非対称律の対偶(なんて表現すれば…)? x != y -> (x < y || y < x) && !(x < y && y < x)
c) 推移律(変形) x < y && y < z -> x < z
d) !( x < y || y < x ) && !( y < z || z < y ) -> !( x < z || z < x )
全順序集合から == を取り除いたものという感覚が一番しっくりするかも…。
比較可能であれば、必ず x < y || y < x が成立し、比較不可能であれば !( x < x ) より常に false となる。
で、確かに、なんて訳せばいいのかは、わかんねーです。
追伸:Blogger のエディタが文中の < & > を正しく扱えなくて、何度も書き直した。イライラが続くときは、こんなもんか…。
追記 2010/02/04:Strict weak ordering (b) の条件を強化
weak の意味は、不等号 < という意味に近いのかな?と思った。そうすると、完全比較順序集合という訳が妥当かもしれない。
boost::asio で serial通信 (PATLITE)
仕事で、パトライトを制御する事になった。せっかくなので、boost::asio を使ってみた。
シリアル通信のオプションは、キッチリ指定しないといけないようです。デフォルトであろうと指定しないと動作しなかった。
#include <boost/asio.hpp>
#include <iostream>
#include <iomanip>
#define PATLITE_COMMAND_
#define PATLITE_CMD_BIT 0x30
#define PATLITE_RED_ON 0x01
#define PATLITE_YELLOW_ON 0x02
#define PATLITE_GREEN_ON 0x04
#define PATLITE_BUZZ_SHORT 0x08
//
#define PATLITE_BUZZ_LONG 0x01
#define PATLITE_RED_BLINK 0x02
#define PATLITE_YELLOW_BLINK 0x04
#define PATLITE_GREEN_BLINK 0x08
void write_hex( const char* p, size_t len ) {
for( size_t i = 0; i < len; ++i ) {
std::cout << ":" << std::hex << std::setw(2) << (int)p[i];
}
}
int main() {
char start_rbuf[ 7 ] = { 0x40, 0x3f, 0x3f, 0x31, PATLITE_CMD_BIT | PATLITE_RED_BLINK | PATLITE_BUZZ_LONG, PATLITE_CMD_BIT, 0x21 };
char start_ybuf[ 7 ] = { 0x40, 0x3f, 0x3f, 0x31, PATLITE_CMD_BIT | PATLITE_YELLOW_BLINK, PATLITE_CMD_BIT | PATLITE_BUZZ_SHORT, 0x21 };
char start_gbuf[ 7 ] = { 0x40, 0x3f, 0x3f, 0x31, PATLITE_CMD_BIT | PATLITE_GREEN_BLINK | PATLITE_BUZZ_LONG, PATLITE_CMD_BIT, 0x21 };
char stop_buf[ 7 ] = { 0x40, 0x3f, 0x3f, 0x30, 0x3f, 0x3f, 0x21 };
char buf[ 8 ];
try {
boost::asio::io_service service;
boost::asio::serial_port port( service );
std::cout << "open COM1" << std::endl;
port.open( "COM1" );
std::cout << "set up baud_rate 9600" << std::endl;
port.set_option( boost::asio::serial_port_base::baud_rate( 9600 ) );
port.set_option( boost::asio::serial_port_base::character_size( 8 ) );
port.set_option( boost::asio::serial_port_base::stop_bits() );
port.set_option( boost::asio::serial_port_base::parity() );
port.set_option( boost::asio::serial_port_base::flow_control() );
std::cout << "write 1"; write_hex( start_rbuf, 7 ); std::cout << std::endl;
port.write_some( boost::asio::buffer( start_rbuf, 7 ) );
std::cout << "read 1" << std::endl;
port.read_some( boost::asio::buffer( buf, 1 ) );
std::cout << "result: " << std::hex << (int)buf[0] << std::endl;
Sleep( 2000 );
std::cout << "write 2"; write_hex( start_ybuf, 7 ); std::cout << std::endl;
port.write_some( boost::asio::buffer( start_ybuf, 7 ) );
std::cout << "read 2" << std::endl;
port.read_some( boost::asio::buffer( buf, 1 ) );
std::cout << "result: " << std::hex << (int)buf[0] << std::endl;
Sleep( 2000 );
std::cout << "write 3"; write_hex( start_gbuf, 7 ); std::cout << std::endl;
port.write_some( boost::asio::buffer( start_gbuf, 7 ) );
std::cout << "read 3" << std::endl;
port.read_some( boost::asio::buffer( buf, 1 ) );
std::cout << "result: " << std::hex << (int)buf[0] << std::endl;
Sleep( 2000 );
std::cout << "write 4"; write_hex( stop_buf, 7 ); std::cout << std::endl;
port.write_some( boost::asio::buffer( stop_buf, 7 ) );
std::cout << "read 4" << std::endl;
port.read_some( boost::asio::buffer( buf, 1 ) );
std::cout << "result: " << std::hex << (int)buf[0] << std::endl;
std::cout << "end" << std::endl;
} catch( std::exception& e ) {
std::cout << e.what() << std::endl;
}
return 0;
}
シリアル通信のオプションは、キッチリ指定しないといけないようです。デフォルトであろうと指定しないと動作しなかった。
mongrel_cluster prefix AbstractRequest (NameError) 備忘録
また、検索しそうなので備忘録として記録する。
mongrel_cluster + mod_proxy_balancer の組み合わせで、prefix を指定すると、エラーが出るようになった。原因は、Rails の内部仕様が変更された事による。
/usr/lib64/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb
に修正を施す。
という部分を
とする。
参考URL
LANKHMAR
mongrel rubyforge
mongrel_cluster + mod_proxy_balancer の組み合わせで、prefix を指定すると、エラーが出るようになった。原因は、Rails の内部仕様が変更された事による。
/usr/lib64/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb
に修正を施す。
ActionController::AbstractRequest.relative_url_root = ops[:prefix] if ops[:prefix]
という部分を
if ops[:prefix]
if ActionController::Base.respond_to?('relative_url_root=')
ActionController::Base.relative_url_root = ops[:prefix]
# new way to set the relative URL in Rails 2.1.1
else
ActionController::AbstractRequest.relative_url_root = ops[:prefix]
end
end
とする。
参考URL
LANKHMAR
mongrel rubyforge
登録:
投稿 (Atom)