ラベル これはひどい の投稿を表示しています。 すべての投稿を表示
ラベル これはひどい の投稿を表示しています。 すべての投稿を表示

2011年12月13日火曜日

現代自動車の開き直り

Hyndaiのデザインは「なんかどこかで見たことあるぞ」ってのばっかりなんだけど、今回はさらに一歩進んでいる。車種はElantra。おまわりさんこいつです。


なんか気のせいかToyota Priusっぽいけど、まあ気のせいということにしておこう。そのElantraのコマーシャルだがこんな感じ。
Fog and Smogという白ラッパー達が出演している。で、この曲といい場面といいどこかで見たことあるぞ、と検索したら見つかりましたよ。
同じFog and Smogがプリウスに乗って、スーパーマーケットの駐車場を流すという展開。曲も同じ。もうここまで行くとパクリを開き直っているとしか思えない。



あ、でもElantraはハイブリッドじゃないのか(棒

2011年11月29日火曜日

iTether最期の日

iPhone/iPadでUSB TetheringできるというiTetherがApp Storeから抹殺された模様→ソース

WiFi接続がないけど3G回線ならつながるという環境でTetheringできるというのは本当に助かる。例えそれがUSB経由であっても、だ。それだけ需要があったからこそiTetherは人気があったのに、Apple側の一方的判断で市場から抹殺されるというのは納得行かない。

ソフトウェアを開発し、配布する権利は開発者側にあるはずだ。自由が保証されるからみんなが自由に考え、実行に移す。その失敗と成功の繰り返しで技術が進歩する。配布部分を独裁的に制御しようとするAppleは、長期的には自社基盤上でのソフトウェア開発技術を弱体化させるということに気づくべきだ。

2011年11月8日火曜日

TPP関係のデマもひどいね

Togetterにローソン 不買運動などというまとめがでていたので読んでみたがこれはひどい。最初に引用されている
TPP参加国の雇用が自由になり、ローソンが店員をベトナムで募集し日本店舗で採用する。彼等の平均月収はベトナム国内では2~3万円、だからコンビニ店員は3万円ですむ。これで競争力が付く。
という発言からもはや電波ゆんゆん。確かにベトナム国内の平均月収は日本よりは相当低いかもしれないが、そのかわり物価も安い。だが、日本に連れてきた瞬間から、彼らは日本の物価水準で過ごす必要がある。月給3万渡した所で住居や食事ができなければ日本で暮らしていくことは不可能であろう。つまり「ベトナムから労働者を連れてきて月給3万で雇う」などということは無理なのである。それくらい考えてからTweetするなりRTするなりすれば良いと思うのだが反TPP脳はそこまで回らず思考停止に陥るようである。

2011年7月24日日曜日

Eat☆Stupid

イートスマートというサイトがある。日々の食事や運動量を記録することで「賢く食べよう」というのが目的。その趣旨は結構だと思うのだが、同サイトが提供している「消費カロリー計算」が甘すぎるのではないか。少なくとも自転車に関してはそう確信している。

自分は体重70kgで登録しているが、これで時速21km×3時間10分を運動した昨日は消費カロリー1799kcalと表示される。

「表示されているカロリーは安静時代謝量が引かれたものです」と注意書きがある。同サイトには


一般的にトレーニングマシン等に表示される消費カロリーは、運動によって増えた消費カロリーだけでなく、体温維持や心臓の拍動などといった、運動の有無に関わりなく消費したカロリーも含んだ、合計の値です。イースマ☆ノートでは、後者はあらかじめ考慮されていますので、運動欄には運動によって増えた分だけが計算・表示されます。

と説明があるの。すなわち自分の1799kcalは「ペダルを踏んだ正味のカロリー」となるが、これって多すぎないか?

昨日の運動は登りのインターバルだったがペダル出力で平均116Wでしかない。3時間ちょいで1300kJ。1kcal=4.18kJだから、311kcal程度に相当。そして、人間の効率は25%程度とされているから燃やしたカロリーはこの4倍。すなわち1240kcalが妥当な値と思われるのだが。

イートスマートが表示している1799kcalは安静時代謝量を含んでいるのではないか。そう考える理由は単純で


自分はイートスマートによれば 「摂取カロリー<消費カロリー」 という生活を続けているが体重はまったく変わらないのである。それだけイートスマートが消費カロリーを多めに表示しているのだと理解している。

結論: イートスマートを信じるとデブになるよ。

2011年6月24日金曜日

雇用契約もよく読もう・Skypeのストック・オプション事例

Business Week: Why Some Skypers Are Seeing Red
→最近Skypeを退職したYee Lee氏を襲った不条理

シリコンバレーに限った話ではないが、当地の企業、特に新興企業は優秀な人材を確保しつつ、目先の人件費を抑えるためにインセンティブ・ストック・オプション(ISO)を活用することがある。ISOは「予め定められた価格で株を買う権利」なので、頑張って働いて株価を上昇させれば結構な額の財産を手に入れられることになる。

典型的なISOは

  • 入社後1年で、その社員が入手できるオプション総量の1/4が与えられる
  • 以後、月々1/36づつ与えられて
  • 4年で全てのオプションが社員のものになる
という形式をとる。これは「せめて1年は腰を据えて働いてもらい」「できれば4年は頑張ってもらいたい」という設計なのであろう。

そして上記記事で報道されているYee Lee氏も、入社時にそのような内容の雇用契約に署名をした。問題は...どこの会社も同じような雇用契約の中に、Skypeは独自の記述を一行盛り込んでいたことだ。それは「5年以内に退職する場合、ISOは会社が買取る」というもの。

その一行の存在を知らなかったLee氏は、入社一年後、25%のISOが割り当てられた時点で他社への転職を決意。MicrosoftがSkypeを高値で買い取ったわけだから、懸命な判断だと思ったのだろう。だがSkype社側は「残念でした〜 あなたのISOはありません〜」と通告。

さらに。Lee氏はSkypeが買い取ったISO代に対して課税されることに。まさに踏んだりけったり。

この「5年以内の退職ではSkypeがISOを引き取る」という規定は、EbayからSkypeを買い取ったSilver Lakeという投資家グループが盛り込んだもの。理由は「優秀な人を長期的に確保したい」ということらしいが、果たして正解だったのだろうか。4年かけて全てのISOを手に入れ、あと1年我慢しろと言われたら、「とにかく1年間はクビにならなければいいや」という心理が働くのではなかろうか。

この記事は今後どうなるかについては記述されていない。確かなのは「Skypeは社員に新条項を知らせていなかった」ということと「会社が持って行ってしまう権利があるってのは、譲与(vest)という定義に合わないのでは?」という疑問が残ること。

さてさて、Microsoftが買取るSkypeは果たしてやる気ある優秀な技術者を確保できるのであろうか。

2011年6月11日土曜日

ナメてるのかナメられてるのか

@hayanoさん

気になったので見てみたが...なんでしょうかこれは! 消されないようにコピーしておいた。

「セシウム吸着塔概略図」の中に「セシウムを除去する吸着塔」を書きこんでくるこのセンスはなんなのだろう。「どうせわからないだろうから」と国民をナメているのか。あるいは、東電の人達もそのKurion社に手玉にとられて説明を受けていないのだろうか。

なんかこの場面を思い出したよ。

2011年5月21日土曜日

A La Carte & Art

Mountain Viewで開催されているA La Carte & Artというのに行ってきた。案内文によれば
Back by popular demand is A La Car & Art, a classic and custom car show featuring the world’s coolest hot rods, macho muscle cars, sleek sports cars and tricked out low riders—just a sampling of the world-class cars expected to be on display. Saturday’s car show will be hosted by the San Francisco–based Laf A Lots car club and the Silicon Valley Corsa Club. Sunday’s car show will be hosted by Hot San Jose Nights and the Nor-Cal Chevelle Camino Club.
ということで古い車や改造車が色々展示されているのを期待していたのだが...
このFord Galaxy 500と、もう一台ホットロッドが置かれていただけ。たったの二台。なんか、がっかり。明日はもっと来るのかな?

2011年5月15日日曜日

回線速度とロケット砲を比較する意味が分からない

Verison LTEの宣伝なのだが...

2011年5月5日木曜日

It's a Sony!

こちらから頂いてきた。

#!/usr/local/bin/perl


eval {

   #########################################################
   # Read in the string from the form
   #########################################################

   if ($ENV{'REQUEST_METHOD'} eq "GET") {
           $FORM_DATA = $ENV{'QUERY_STRING'};
   } else {
      $LENGTH = $ENV{'CONTENT_LENGTH'};
      while ($LENGTH) {
         $FORM_DATA .= getc(STDIN);
         $LENGTH--;
      }
   }

   #########################################################
   # Split the input string into individual variables
   #########################################################


   foreach (split(/&/, $FORM_DATA)) {
      ($NAME, $VALUE) = split(/=/, $_);
      $NAME =~ s/\+/ /g;
      $NAME =~ s/%([0-9|A-F]{2})/pack(C,hex($1))/eg;
      $VALUE =~ s/\+/ /g;
      $VALUE =~ s/%([0-9|A-F]{2})/pack(C,hex($1))/eg;
      # find a unique name for select boxes
      $NUM ="0";
      while ($FORMDATA{$NAME} ne "") {
         $NUM++;
         $NAME =~ s/\.([0-9]+$)|$/\.$NUM/;
      }
      $FORMDATA{$NAME} = $VALUE;
   }

   $product = $FORMDATA{"product"};
   $product =~ tr/a-z/A-Z/;
   
   $docdirname = "/ws/w1/htmldocs/shared/semi/PDF/";
   $docext = "pdf";
   $docurlbase = "/semi/PDF/";
   
   $filename = "$docdirname$product.$docext";
   $default = "$product.$docext";
   
   local(@matched, @ids, $re);
   # get a list of the product ids
   opendir(DOCDIR, $docdirname) || die($ENV{'SCRIPT_NAME'}||$0. ": opendir(): can't open directory \"$docdirname\": $!\n");
   @ids = readdir(DOCDIR);
   closedir(DOCDIR);
   @ids = grep(/\.$docext$/i && s/\.$docext$//i, @ids);

   if(@matched == 0) {
      # make a regexp of possible $product matches
      $re = $product;

      # look for match
      @matched = grep(/$re/i, @ids);
   }
   if(@matched == 0) {
      # make a regexp of possible $product matches
      $re = join("|", omit_list(+1, $product), 
                      omit_list(-1, $product), 
                      miss_list(-1, $product), 
                      transpose_list($product));
      $re = '^(?:'.$re.')$';

      # look for match
      @matched = grep(/$re/i, @ids);
   }

   # sort @matched
   sub sortsub {
      my $ta, $tb; 
      ($ta = $a) =~ tr/A-Z/a-z/;
      ($tb = $b) =~ tr/A-Z/a-z/;
      $ta cmp $tb;
   }
   @matched = sort sortsub @matched;
   
#   if((! -r $filename) && (@matched != 1))) { 
   if(@matched == 1) {
      $errmsg = "

The product code you entered, $product, is similar to this product: ". join("", map("$_", @matched)). ". If this is not what you wanted, you can try another product code, or go to a product category, by selecting it below."; } elsif(@matched > 1) { $errmsg = "

The product code you entered, $product, is similar to these products:

    ". join("", map("
  • $_", @matched)).
    "

If none of these are what you wanted, you can try another product code, or go to a product category, by selecting it below."; } else { $errmsg = "

Sorry, the product code you entered does not exist. Please try another product code, or go to a product category by selecting it below.

"; } }; ### ### $error_file = "/ws/w1/htmldocs/shared/semi/searcherror.html"; $errmsg_spot_re = ""; if($errmsg || $@) { $errmsg = $errmsg || "the script encountered a serious problem and couldn't complete your request: $@"; print("Content-type: text/html\n\n"); open(ERROR, $error_file); $e = join("", ()); close(ERROR); if($e ne '') { $e =~ s/$errmsg_spot_re/$errmsg/g; } else { $e = "Serious error: $!, and $errmsg"; } $e .= "\n"; print($e); } # package alink::oneoff; sub uniq { my %H = (); grep(!$H{$_}++, @_); } sub nonuniq { my %H = (); grep($H{$_}++ == 1, @_); } sub omit_list { my $e_len = shift; my @R = (); my $g; foreach $g (@_) { my $g_len = length($g); if($e_len > 0) { push(@R, uniq(omit_list($e_len-1, map(substr($g,0,$_).".".substr($g,$_), (0..$g_len))))); } elsif($e_len < 0) { push(@R, uniq(omit_list($e_len+1, map(substr($g,0,$_).substr($g,$_+1), (0..$g_len-1))))); } else { push(@R, $g); } } @R; } sub miss_list { my $e_len = shift; my @R = (); my $g; foreach $g (@_) { my $g_len = length($g); if($e_len < 0) { push(@R, uniq(miss_list($e_len+1, map(substr($g,0,$_).".".substr($g,$_+1), (0..$g_len-1))))); } else { push(@R, $g); } } @R; } sub transpose_list { my @R = (); my $g; foreach $g (@_) { my $g_len = length($g); push(@R, uniq(map(substr($g,0,$_-1).substr($g,$_,1).substr($g,$_-1,1).substr($g,$_+1), (1..$g_len-1)))); } @R; } ## examples ## fetch some words #chop(@l = (<>)); ## regexps for if one letter was omitted #print(map($_."\n", omit_list(+1, @l))); ## regexps for if one extra letter was added #print(map($_."\n", omit_list(-1, @l))); ## regexps for if one letter was screwed up #print(map($_."\n", miss_list(-1, @l))); ## regexps for if two letters were transposed #print(map($_."\n", transpose_list(@l))); ## possible matches if one letter were omitted #print(map($_."\n", omit_list(-1, @l))); ## possible matches if two letters were transposed #print(map($_."\n", transpose_list(@l))); ## check for possible collisions if one letter were omitted #print(map($_."\n", nonuniq(omit_list(-1, @l))), "\n"); ## check for possible collisions if two letters were transposed #print(map($_."\n", nonuniq(transpose_list(@l))), "\n"); # end

Daily WTF!にも載るのかなこれ。