INCEPTION

全然前知識なしで観に行ったのですが、期待を下回るというのが感想。

ストーリーは夢のまた夢くらいで終わらせておけば良いのに、何段も重ねるから不必要に複雑。なのに最後に「ああ、そういうことだったのか」という展開を見せてくれるわけでもなく、単なるタイムリミット設定とご都合主義のために夢の夢を重ね、最後に一挙に現実に戻ってきてしまう。任務は成功なのか失敗なのかわからない、最後の最後というシーンでで「えっ、どっちなの?」という謎を残して終わらせると、謎系にしたいんだか明快系だかどっちつかず。

ではビジュアルはというと、予告シーンにあるような「夢の中だから物理法則も無視できる」映像は序盤だけ。本番に入ると、夢の世界とばれてもいい状況下でも変に物理法則に縛られおり、ありがちなカーチェイスや銃撃戦をやるなど、物理を無視するのか守るのか中途半端。映像美に走るならMatrixくらい徹底してほしいところ。

あ~、またハリウッドに騙されたっと。

— posted by mu at 01:07 am   commentComment [0]  pingTrackBack [0]

性善説

業界唯一のフリーアニメプロデューサー(この肩書きで紹介していいのだろうか?)里見哲郎氏のTwitterLink によると、違法動画で見たとファンメールで製作者に伝えてくる人たちLink の多くは、無垢で無邪気(自己の行為が製作者を苦しめていることに気づいていない)らしい。

こういうのに限らず悪いという意識がないと、ブレーキがかからない分たちが悪い。その分ちょっときつく注意するとびっくりするくらいしおれることもあったりしますが(余談1参照)、基本的に自分の行動を否定する情報には自発的にアクセスしないでしょう(上のリンクページも目に留まらないだろう)。もしくはそういう情報(最近映画本編上映前に見るビデオカメラの被り物をした人の出るあれとか)に触れても、自分は該当しないと思い込んでるとか。

無垢→善意と連想し、性善説はこれでもを人は善だと主張するのかよと思ったら、WikipediaLink を読むと私は多聞に漏れず誤解していたらしい。孟子の主張する性善説とは
  • 本来人は善だが世には悪意が存在しており、放っておくと悪に走るから教育しないといけない
  • 持論の王道政治に対する批判「君主も人、そんな聖人のような行動は出来ない」に対抗するため、人は生まれながらは善ですよ(だから、聖人になることは可能です)というために性善説を展開した
ということらしい。つまり冒頭の人たちは放っておかれたってことか…

こんなこと書いてますが、自分が映像製作者に対して胸を張れる行動をしているとは思ってません。最低限と思ってDVDレンタルで見ていたりはしますが、昨今100円でレンタルLink するにつけ、製作者や大忙しのレンタル屋店員に十分な配当は行っているのか、と思うこともあったり。でも、100円で借りちゃうんですが。

(余談1) インターネットが普及する前、パソコン通信時代のお話。著作権侵害じゃないかという批判に「デジタルコピーは劣化しないから問題だけど、アナログはするからやっても良い」というものすごい正論を書いていた人がいたな。他の書き込みでも幼稚な挑発繰り返して、ついにある人が怒ったら、「ごめんなさい、もう来ません」(実際にはもうちょっと長い)といなくなってしまった。今から思えば、彼はあの頃の厨房だったのかなぁ。

(余談2) 上のリンク中、ファンメールに「www」を付けてくることに対し"「www」じゃありません"という一文がありますが、これも送り手は単純に喜びを表現してるんだろうなぁ。2ちゃんを読むことが多い(&私が物事を悲観的に取りやすい)せいで、私は"w"を嘲笑と受け取ることが少なくないですし、自分でも単純な笑い以外の意味で使う時があります。上記Twitterのレスでも「製作者を挑発したメールじゃないか」という意見もありました。そんな意味があることすら知らない人もいるでしょうねぇ。

— posted by mu at 01:18 pm   commentComment [0]  pingTrackBack [0]

 

PCでmsec時間測定(6) - 基板完成

blog20100817-MilisecTimerAndSensor

前回Link からほぼ1ヶ月経ちましたが、最初の2週間は依頼主からの仕様決定待ち、その後は部品購入&組み立てで結構忙しかったのです。出てきた仕様が予想とちょっと異なったため、定電流回路Link は不要、代わりにレギュレータを装備することとなりました。見切り発車で部品買わなくてよかった。

写真は一通りに動作確認を終えた回路基板など。ケースの値段も馬鹿にならない&穴あけめんどくせ~と依頼主に言ったら、今回は試作なので100円ショップで売ってるような材料で良いと。というわけでタッパーに入れましたが、あまりかっこ良くないな。3個100円のタッパーは全体的に薄い作りでカッターナイフで穴を開けるには簡単な反面、割れやすかったりドリルで穴あけると材質がドリルに絡み付いてきてきれいな穴が開かない。やっぱり電子工作用のケースはそれなりに利点があるってこと。

右下で赤く光っているのは、本システムの最重要パーツであられます光センサ。数秒単位でOn/Offを繰り返すスイッチLink というのはこれのことで、このセンサの前を通り過ぎる対象を測定するわけです。

なぜ最重要かというと、センサ以外の全回路&部品(写真のAT90USB162のボード含む)を全部合わせてもこのセンサの値段の半分にも満たないためw メーカーは全然値引きに応じないとうちの会社の購買部門も愚痴をこぼす某社。依頼主によると今回も当然ほぼ定価で購入、たくさん買ったらいくらになるかと聞いてもほぼ定価と、今も変わり無いようで何よりw

[20109/25 追記] 続きLink

— posted by mu at 12:37 am   commentComment [0]  pingTrackBack [0]

Crazy Whopper

blog20100723-CrazyWhopper

本日発売のCrazy Whopper。ハバネロを抜いて世界一辛い唐辛子とされているブートジョロキアを使用した、激辛バーガーとなっております。ブートジョロキアが使われているのは濃い茶色のソースであり、挟まれている緑のピクルスはハラペーニョ。また広告Link を見るとハンバーグパティよりはるかに厚い2cmはあろうかというハラペーニョ層となってますが、実際には積み重なってはいませんでした。しかしパティの上に満遍なく敷き詰められていたには違いなく。

食べ始めは大したこと無いなと思ってたのですが、半分くらいから苦痛。Whopperの大きさも手伝って、最後の2口がなかなか進まず苦戦しました。アイスティも氷も含めて全部飲んじゃったし。

個人的にはバーガーキングの特徴であるハンバーグパティの旨みが辛さでかき消されたようで、残念。普通のWhopperの方がいいかなぁ。

[2010/8/9 追記] 再度挑戦。前回のように苦戦することもなく、アイスティもMサイズで余裕。一緒に行った会社の後輩が私のような苦戦をしていたので、辛いのは間違いなく。しかしタイや中国出張が多いためか、辛いものに耐性ある人が多いうちの会社。「日本で発売だし、一線は越えてないよなぁ」の意見が主流でした。

— posted by mu at 10:34 pm   commentComment [0]  pingTrackBack [0]

.NETで順番を守って排他制御

マルチスレッド環境で排他制御する時に、先に要求したスレッドほど先に実行させたい、ということを考える機会がありました。

.NETプログラミングで有名な排他制御方法はMonitorLinkManualResetEventLink でしょうか。C#ではMonitorクラスを便利に使えるlockステートメントもあり、私もよく使います。しかしManualResetEventは単一もしくは複数のスレッドを待たせて一気にスタートさせるものですし、Monitorは待ち状態にある複数のスレッドに対してロックを順番に与えてはくれません。後者はどういうことかというと、
  • スレッド1は既に排他ロックを取得し実行中
  • スレッド2がロックを求めて待ち状態に入った
  • スレッド2より後にスレッド3がロックを求めて待ち状態に入った
という状態でスレッド1がロックを開放した場合、次に排他ロックを取得するのは…どちらか分かりません。待ちスレッドが1個や2個では発生しにくいかもしれませんが、10や20スレッド待たせると順番通りにロックさせてくれないのが分かると思います。

最初に目をつけたのがQueueLink ジェネリッククラス。

using System.Collections.Generic;
using System.Threading;

class FIFOLock
{
  Queue<ManualResetEvent> eventQueue = new Queue<ManualResetEvent>();

  public void GetLock()
  {
    ManualResetEvent myEvent = new ManualResetEvent(false);
    lock(eventQueue)
    {
      eventQueue.Enqueue(myEvent);
      if(myEvent.Equals(eventQueue.Peek())) return;  // No thread is locking resource
    }
    myEvent.WaitOne();
  }


  public void ReleaseLock()
  {
    lock{eventQueue)
    {
      eventQueue.Dequeue();  // Remove ManualResetEvent of this thread
      eventQueue.Peek().Set();  // Signal to next waiting thread
    }
  }
}

実際にVisualStudioに打ち込んでないので、文法間違いなどあるかもしれません。打ち込まなかったのは考えている途中で「あ、lock使ってるからダメだ、これは」と思ったから。複数のスレッドがGetLock()に飛び込んできて競合待ち状態になったときに、次にeventQueueにアクセスできるスレッドが不定なため、順番の追い越しが発生する可能性があります。eventQueueがロックされている時間は僅かで、複数のスレッドがGetLock内で競合する確率は低いとはいえ、完璧ではない。ちなみに.NET 4.0ではConcurrentQueueLink なんていうスレッドセーフなQueueが登場したので、使えるかもしれません。

次にInterlockedLink クラスを使うこと。Incrementメソッドを使えば確実に早くやってきたスレッドから小さい番号を割り当てることができます。しかし単に数字が分かっただけ。各スレッドに自分の順番が来るまで待たせる上手い方法が分かりません。唯一思いついたのが、もう一個Interlockedで管理される整数を用意して、処理が終わったスレッドはこの数を増やしていくこと。銀行とかにある順番待ち整理券がイメージしやすいでしょうか。前者の変数が整理券の番号で、後者が「○番のカードをお持ちの方…」としゃべる機械。自分の番号が来たスレッドは処理を開始。

ただこの方法は各スレッドが自分の順番が来たかどうかポーリングでチェックせねばならず、CPU負荷が高くなる欠点があります。負荷の低いManualResetEventなどを使いたいのですが、Interlocked.Incrementで得られた数字とManualResetEventを結び付けようとする(Dictionary<int, ManualResetEvent>とか)所でスレッドセーフにする方法が思いつかず。

現時点の答えはReaderWriterLockLink を使い、全スレッドAcquireWriterLockを呼び出すこと。とりあえず100スレッドAcquireWriterLockを呼び出して待ち状態に入るプログラムを書いてみましたが、順番通りにスレッドがロックを取得していました。こういう使い方って、保障されているのでしょうか? ちなみにReaderLockされている状態ではAcquireWriterLockは待ち状態にされますが、その後にAcquireReaderLockのスレッドが来ると待ち状態のAcquireWriterLockを平気で追い抜きます(複数同時ReaderLockを認めているから)。

[2011/8/2 追記] 最終文訂正(AcquireReaderLock→AcquireWriterLock)

— posted by mu at 09:44 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0198 sec.
prev
2025.3
next
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31