ぬの部屋(仮)
nu-no-he-ya
  •      12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
         12
    3456789
    10111213141516
    17181920212223
    2425262728  
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
       1234
    567891011
    12131415161718
    19202122232425
    26272829   
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728     
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28      
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
    1234567
    891011121314
    15161718192021
    22232425262728
           
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
         12
    3456789
    10111213141516
    17181920212223
    242526272829 
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
        123
    45678910
    11121314151617
    18192021222324
    25262728   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    15161718192021
    293031    
           
         12
    3456789
    10111213141516
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728     
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
          1
    2345678
    9101112131415
    16171819202122
    232425262728 
           
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
  • GPU並列図形処理入門 ~CUDA・OpenGLの導入と活用

     

    第1部 コンピュータグラフィックスの基礎
    第1章 プログラミングの準備
    1.1 Visual Studioを用いたプログラム開発
    1.1.1 コンソールアプリケーションの作成
    1.1.2 設定の変更
    1.2 glutとOpenGLの利用
    1.3 freeglutのインストール
    1.4 freeglutを利用したプログラミング
    この章で学んだOpenGLとglut関数

    第2章 OpenGLとglutを用いた2次元コンピュータグラフィックス
    2.1 2次元コンピュータグラフィックスのプログラミング
    2.1.1 図形の指示
    2.1.2 座標の指示
    2.1.3 図形の色分け
    2.2 座標の投影とビューポート変換
    2.2.1 正投影の導入による表示範囲の拡大
    2.2.2 ウィンドウとビューポート変換
    2.2.3 アスペクト比の変更
    2.2.4 図形中心の表示
    参考文献
    この章で学んだOpenGLとglut関数

    第3章 3次元コンピュータグラフィックスへの拡張
    3.1 正投影
    3.1.1 視点の変更
    3.1.2 視体積の範囲決め
    3.1.3 方位角と仰角の利用
    3.1.4 マウス操作による視点の変更

    3.2 ポリゴンの描画
    3.2.1 隠面消去
    3.2.2 シェーディング
    この章で学んだOpenGLとglut関数

    第二部 OpenGLを用いた並列図形処理
    第4章 ボロノイ図の生成
    4.1 ボロノイ図とは
    4.2 ボロノイ図の画像生成
    4.3 実装の準備
    4.4 円錐形状の描画
    4.5 画像の取得と利用
    参考文献
    この章で学んだOpenGLとglut関数

    第5章 オフセット平面の生成
    5.1 デプスバッファを用いたオフセット面の計算
    5.2 STLフォーマット
    5.3 STLファイルの読み込み用関数
    5.4 ポリゴンモデルの表示用関数
    5.5 オフセットプログラムの準備
    5.6 オフセット処理の実現
    5.6.1 球、円筒形、スラブ形状の描画
    5.6.2 オフセット面の取得
    5.6.3 オフセット面の描画
    5.7 プログラムの完成
    参考文献
    この章で学んだOpenGL関数

    第3部 CUDAの導入とOpenGLとの併用

    第6章 CUDAの導入
    6.1 CUDAのインストール
    6.2 Visual StudioによるCUDAプログラムの開発
    6.3 CUDA処理の基本的な考え方
    6.3.1 典型的な処理の流れ
    6.3.2 GPUの並列処理アーキテクチャ
    6.3.3 スレッドによる並列処理
    6.3.4 ブロックとグリッド
    6.4 CUDA関数の紹介
    6.4.1 メモリ管理
    6.4.2 データ転送
    6.4.3 ブロックとグリッドの定義
    6.4.4 カーネル関数
    6.4.5 デバイス関数
    6.5 プログラム例
    6.5.1 CPU処理の実装例
    6.5.2 CUDAによる実装
    6.5.3 シェアードメモリの利用
    参考文献
    この章で学んだCUDA関数

    第7章 粒子解析とアニメーション表示
    7.1 粒子解析法
    7.2 粒子解析法アルゴリズムの実装
    7.2.1 CPU処理による実装
    7.2.2 GPU処理による実装
    7.3 VBOの導入
    7.3.1 VBOを用いた図形描画
    7.3.2 VBOによる粒子群の表示
    7.4 CUDAとVBOの併用
    参考文献
    この章で学んだOpenGL関数
    この章で学んだCUDA関数

    第8章 拡散方程式の数値解法とアニメーション表示
    8.1 差分法による拡散方程式の数値解法
    8.2 差分法アルゴリズムの実装
    8.2.1 CPU処理による実装
    8.2.2 GPU処理による実装
    8.2.3 シェアードメモリの利用
    8.2.4 テクスチャメモリの利用
    8.3 PBOの導入
    参考文献
    この章で学んだOpenGL関数
    この章で学んだCUDA関数

    第4部 CUDAによる複雑な図形処理
    第9章 メタボール法
    9.1 粒子群の濃度場
    9.2 ソートによる粒子群のセルへの割り当て
    9.3 実装の準備
    9.4 基本的なデバイス関数の定義
    9.5 カーネル関数の定義
    9.6 thrustライブラリ
    参考文献
    この章で学んだglut関数
    この章で学んだCUDA関数

    第10章 マーチングキューブ法
    10.1 マーチングキューブ法
    10.2 アルゴリズムの概要
    10.3 実装の準備
    10.4 テクスチャメモリの利用
    10.5 カーネル関数の定義
    10.6 Metaball.cppの修正
    参考文献
    この章で学んだOpenGL関数

    第11章 包含立体の利用
    11.1 包含ボックス
    11.2 ボックス定義の準備
    11.3 AABBとOBBの定義
    11.3.1 AABBの定義
    11.3.2 OBBの定義
    11.4 包含ボックスに関する計算
    11.4.1 点と包含ボックス間の距離
    11.4.2 包含ボックス間の交差判定
    11.5 階層的な包含ボックス
    11.6 プログラムの利用法
    参考文献

    第12章 立体間の衝突検出
    12.1 階層的な包含ボックスによる絞り込み
    12.2 ポリゴン間の並列交差判定
    12.3 撃力ベース法
    12.4 実装の準備
    12.5 階層的な包含ボックスによる絞り込み
    12.6 撃力ベース法による衝突の解消
    12.7 衝突判定
    12.8 デバイス関数
    12.9 カーネル関数
    12.10 プログラムの利用法
    参考文献
    この章で学んだOpenGL関数

    あとがき

    サンプルプログラムの使い方

    索引

     

     

    第1部、第2部はOpenGLの導入となっている。
    例えば第2章の「この章で学んだOpenGLとglut関数」は、
    ・glMatrixMode
    ・glOrtho
    ・glViewport
    ・glBegin
    ・glEnd
    ・glColor3f
    ・glVertex3*
    ・glutInitWindowSize
    ・glutInitWindowPosition
    ・glutReshapeFunc

    となっている。本のタイトルに忠実ではあるが、この辺りは読み飛ばしてもおおむね問題ない人が多いだろう。

    全部読んだわけではないが、印象として○○アルゴリズムをCとCUDAで実装しながら勉強するタイプの本。なのでCUDA文法やGPUの構造に関してはあまり踏み込んでいる印象がない。

    作りながら覚えるならちょうどいい印象を受けたが、CUDAの辞書として使いたいならお薦めできない。あくまで画像処理の本である。

     

     

    HK 変態仮面

    変態仮面

     

    huluに来ていたので久しぶりに見た。

    ※ちなみに私は原作を知らない。原作派からすれば存在自体が許せない作品なのかもしれないが、ここでは考慮しない。というかできない。

     

    私は日本のドラマ・映画はあまり見ない。そんな中、この作品がなぜ面白いのか。

    それはそもそもの題材が、どうやってもシリアス展開にしようが無いふざけた作品であり、故にギャグに割り切った一直線な作品で、そしてそう作ることが完全に自然だからだろう。

     

    例えば別の作品では、「GANTZ」の冒頭で電車に轢かれるシーンで、ホームに降りて(はいけないのはこの際許すが)暢気に酔っ払いを起こしているシーンを見ると「危機感なさ過ぎて冷め」てしまう。

     

    しかしHKは違う。脚本や役者や映像に強烈な多少の無理違和感を覚えても、「まあギャグだし」と思えば全てが許せてしまう。演出や品質以前に設定がぶっ壊れているのだ。何が来ようとかまわん

    ただ私は「登場人物が変な格好をしている」事で面白みを感じることがほぼ皆無で、だから顔芸で売っている芸人とかは悉くだめだ。多分そういうので笑える人ならさらに面白いだろう。

     

    注意点は二つ。まずいわゆる学芸会系の作品で、全編通してコントとか漫才のノリなので、割り切れないなら拷問である。約二時間の映画風長編コントと思えばいい。

    ※余談だが、いま見ていてラバーガールの大水洋介が出ていたことを初めて知った。多分他のキャラも何かしら役者以外の背景があるのだろう。ラバーガールはとても落ち着いたコントを見せてくれるので、本作を見る前に一本見ておくといいかもしれない

    次に表現がいささか過激なことだ。いまGoogleアドセンスの導入ができないか考えているのだが、女性の水着写真がグレーゾーンだというので、変態仮面なんか確実にアウト間違いない。だから画像が貼れない(著作権はまた別)。

    なんせことあるごとに男性の股間がアップされる映像作品である。ヒロインが思わず目を背けるシーン。気持ちわかるぞ。これ女性でやったら放映できないだろ。

     

     

    ドクター・フー S1 #2 / 地球最後の日

    改めてみるとローズってかなりクレイジーなキャラクタだと思う。なんかドクターとテンションが近い。

    そして第二話にして五十億年後 地球最後の日。こういう、普通の作品なら長編とか劇場版とかに使いそうなショッキングなイベントを何の躊躇もなくシーズン1第二話に持ってくる。

    金持ちが地球最後の日を眺めて楽しむというくそったれ優雅なイベントということで、この作品の未来観がわかる。資本主義続くんだね、あと50億年。ちなみに、資本主義の終焉についてはシーズン10第五話で言及している。イギリスの価値観の変化だろうか。

    フェイスオブボー。初期の頃は本当に伏線の入れ方が良かった。最近のシリーズはそんな狡猾さが失われている気がする。

    太陽がオレンジ色に光ってるのは演出でもおかしいと思ったらサンフィルタがかかってた。なるほどね。でもローズ、いくら直接当たらなくても見ただけで絶対に失明すると思うんだが・・・

    あらためて見ると青い宇宙人も死んでいたらしい。救いたい対象が殆ど全滅することもあるからまだ犠牲は少ない方なんだよな。そうそう平和には終わらない。総じてドクターの中では失敗したケースの方が多い計算になってるんじゃないだろうか。

     

    最後、ドクターは自分の星は焼けてしまったと言うけど、未だによくわからない。結局ギャリフレイはタイムロックされたのか、焼けたのか。実際ずっと「みんな死んでしまった」っていってたのに正確には「事実上死んだも同じ」だったわけだし。「ドクターの日」の兵器の説明も全てを滅ぼすみたいな漠然とした説明しかされて無いし、わかりづらい。

    ストーリー展開上最後のタイムロードにした方が色々都合が良かったけど、人気出たから続けたい→12人の制約が→タイムロード復活以外に回避策がない

    みたいな都合で復活したんだと思う。

     

     

    PPM P3 ファイル書き込み

    プログラムが極めて楽で、ファイルを目視できるPPMテキストを書き出すプログラムを書いた。

     

    //! @brief PPM(RGB各1byte,カラー,テキスト)を書き込む
    //! @param [in] fname ファイル名
    //! @param [in] vmax 全てのRGBの中の最大値
    //! @param [in] width 画像の幅
    //! @param [in] height 画像の高さ
    //! @param [in] p 画像のメモリへのアドレス
    //! @details RGBRGBRGB....のメモリを渡すと、RGBテキストでファイル名fnameで書き込む
    void pnmP3_Write(const TCHAR* const fname, const int vmax, const int width, const int height, const unsigned char* const p) { // PPM ASCII
    
      FILE* fp = _tfopen(fname, _T("wb"));
      fprintf(fp, "P3\n%d %d\n%d\n", width, height, vmax);
    
      size_t k = 0;
      for (size_t i = 0; i < (size_t)height; i++) {
        for (size_t j = 0; j < (size_t)width; j++) {
          fprintf(fp, "%d %d %d ", p[k * 3 + 0], p[k * 3 + 1], p[k * 3 + 2]);
          k++;
        }
        fprintf(fp, "\n");
      }
    
      fclose(fp);
    }
    

    PPM P6 ファイル読み込み

    恐らく最も何も考えなくても使え、少なくとも結果確認には最良の選択のPNM形式のうち、カラーが扱えるPPMの、吐き出すのが比較的楽そうなP6について、読み込みコードを書いた。

     

    //! @brief PPM(RGB各1byte,カラー,バイナリ)を読み込む
    //! @param [in] fname ファイル名
    //! @param [out] vmax 全てのRGBの中の最大値
    //! @param [out] width 画像の幅
    //! @param [out] height 画像の高さ
    //! @param [in] 画像を読み込んだメモリアドレスを返すためのポインタへのポインタ
    //! @retval true 成功
    //! @retval false 失敗
    //! @warning RGBが各1byteでないと動作しない
    //! @details ファイルを読み込み、width*height*3のメモリを確保したうえでRGBをそこへ格納する
    bool pnmP6_Read(TCHAR* fname, int* vmax, int *width, int *height, unsigned char** p) { // PPM BINARY
      *width = -1;
      *height = -1;
      *vmax = -1;
    
      FILE* fp;
      fp = _tfopen(fname, _T("rb"));
      char tmp[2048];
    
      char c;
      while ( c=fgetc(fp)) {
        if (isspace(c))
          continue;
    
        if (c == 'P') { //フォーマットを特定する
          c = fgetc(fp) - '0';
          if (c != 6) {
            fclose(fp);
            return false;
          }
          continue;
        }
    
        if (c == '#') { //コメントを読み飛ばす
          while (c != '\r' && c != '\n')
            c = fgetc(fp);
          continue;
        }
        if (*width < 0) {
          int s = 0;
          while(1) {
            if (isdigit(c)) {
              tmp[s++] = c;
              c = fgetc(fp);
            }
            else {
              tmp[s] = '\0';
              *width = atoi(tmp);
              break;
            }
          }
          continue;
        }
        if (*height < 0) {
          int s = 0;
          while (1) {
            if (isdigit(c)) {
              tmp[s++] = c;
              c = fgetc(fp);
            }
            else {
              tmp[s] = '\0';
              *height = atoi(tmp);
              break;
            }
          }
          continue;
        }
    
        if (*vmax < 0) {
          int s = 0;
          while (1) {
            if (isdigit(c)) {
              tmp[s++] = c;
              c = fgetc(fp);
            }
            else {
              tmp[s] = '\0';
              *vmax = atoi(tmp);
              break;
            }
          }
          break;
        }
        else {
          break;
        }
      }
    
      if (*width < 0 || *height < 0 || *vmax < 0) {
        return false;
      }
    
      const size_t maxsize = *width* *height;
      unsigned char r, g, b;
    
      *p = new unsigned char[maxsize * 3];
      for (size_t i = 0; i < maxsize; i++) {
        fread(&r, 1, 1, fp);
        fread(&g, 1, 1, fp);
        fread(&b, 1, 1, fp);
    
        (*p)[i * 3 + 0] = r;
        (*p)[i * 3 + 1] = g;
        (*p)[i * 3 + 2] = b;
      }
    
      fclose(fp);
    
      return true;
    }
    

     

     

     

     

    ドクター・フー S1 #1 / マネキンウォーズ

    Doctor Who (新シリーズ)
    シーズン1 第一話

     

    なぜか気になって見直しを始めた。

     

    新シリーズの開始が2005年。

    第一話。この話は敵がマネキンで、ラスボスがちょっと液体的なのが最後に出るだけ。
    2005年といえばスター・ウォーズ エピソード3の頃。映画のCGも既にかなりこなれている時代。
    しかしドクターフーは旧シリーズ(~1989)があったとはいえ世代も変わり新ドラマ扱いしてもいい。
    既にドル箱となってしまった2018年現在とは全く違う雰囲気を感じる。
    (この作品は定期的に雰囲気を変えることで長寿化を実現しているので当たり前なんだが・・・)

    それにしても、ローズは美人なのに、いつ見てもローズのママはブスだ。。。女手一つで娘育ててるから苦労してるんだろうけど。
    この作品、シリーズ通して母を悪く書いてるなとふと思う。あ、エイミーは違うか。美人だし。

    そしてこの頃のドクターは過激。
    ビルの屋上にあるプラスティックの遠隔装置を爆弾で吹っ飛ばす。全くじゃないけど、爆発物つかうのは珍しい展開。頭使えよ、賢いんだから。屋上の装置壊すには火薬多すぎるし。
    でもシーズン4「運命の左折」ではやり過ぎて死んでたし、やっぱり”暴走を止める誰か”がいないとだめなんだろう。

    コンパニオン候補が道で暢気に歩きながらドクターに質問する。このシーンもなんとなく珍しい。マーサとは月で、ドナはテレポーテーションして、エイミーは12後のカウントダウンで、クララは・・・ごめんどれが最初なんだ。とにかくいつも余裕がない。

    ドクターを探すシーン。いまは懐かしいCRTディスプレイがつながったパソコンでDoctorを検索。
    Doctor
    Doctor Living Plastic
    Doctor Blue Box
    やっと見つかったがなんと9代目ドクターの写真が貼ってある。少なくとも13人いる中のよくその顔で写真を撮られたな。

    そしてミッキーが入れ替わって、ドクターが解説し、ローズが謎を解き、ドクターがドジって、ローズが助けて・・・、とドクター・フーっぽくなっていく。

    そして最後、ローズはドクターとの動向を一度断り、「タイムトラベルもできるけど?」と再度誘われてコンパニオンに。
    そりゃやっとの思いで断ったんだから、二回目は無理だよね。

    総評。懐かしい。そして作品自体が初々しい。まだ方向性が定まってない感じがして新鮮。

     

    C++/CLIでTask

    スレッドは生成・破棄に時間がかかる(下手すりゃ秒単位)。そこでスレッドプール等の運用方法が考案され、効率化が図られてきた。

    しかしそれらを実装するのは結構な手間で、プログラマが一々手を煩わせるべきではない。

    そのような要望から生まれたのがTaskで、効率的なスレッドの運用を内部で勝手にやってくれる。

     

    という事らしい。

    参考文献

    https://stackoverflow.com/questions/31531697/c-cli-using-iprogress-in-task
    https://teratail.com/questions/82895

     

     

    using namespace System;
    //パラメータ受け渡し用のクラス
    public ref class CParam {
    public:
      int i;
    };
    //一つのタスクとなるクラス
    public ref class MyClass {
      CParam^ param;
      System::Threading::Tasks::Task^ myTask;
    public:
      MyClass(int k) {
        param = gcnew CParam;
        param->i = k;
      }
      void TaskMethod(Object^ obj);//スレッドで走る関数
      void Start();
      void Wait();
    };
    //スレッドを開始する関数
    void MyClass::Start() {
      myTask = System::Threading::Tasks::Task::Factory->StartNew(
        gcnew System::Action<Object^>(this, &MyClass::TaskMethod), (Object^)param);
    }
    
    //終了まで待機
    void MyClass::Wait() {
      myTask->Wait();
    }
    //処理本体
    void MyClass::TaskMethod(Object^ obj) {
      CParam^ cp = (CParam^)obj;
      for (int j = 0; j < 100; j++) {
        Console::WriteLine(System::String::Format("{0}", cp->i + j));
      }
      
    }
    /////////////////////////////////////////////////////
    int main(array<System::String ^> ^args)
    {
    
      MyClass^ mc1 = gcnew MyClass(100);
      MyClass^ mc2 = gcnew MyClass(200);
      MyClass^ mc3 = gcnew MyClass(300);
    
      mc1->Start();
      mc2->Start();
      mc3->Start();
    
      mc1->Wait();
      mc2->Wait();
      mc3->Wait();
    
    
    
      Console::Read();
      return 0;
    }
    

     

     

     

     

    WordPressで、あるカテゴリを親に含む現在の記事に対し、その親以下のカテゴリ一覧を表示する

    ちょっと自分でも何言ってるのかわからない。

    以下のような状態で、(article)の記事で、

    categoryB
         CAT_B
             cat_b1
             cat_b2
         CAT_BB
             cat_bb1
             cat_bb2

    という一覧を出したい。rootまで遡らず、categoryB以下のカテゴリ一覧だけを取得したいわけである。

     

    root
       categoryA
          CAT_A
             cat_a1
             cat_a2
          CAT_AA
            cat_aa1
            cat_aa2
       categoryB
          CAT_B
             cat_b1
             cat_b2
          CAT_BB
             cat_bb1
             cat_bb2    (article)
       categoryC
          CAT_C
             cat_c1
             cat_c2
           CAT_CC
             cat_cc1
             cat_cc2

     

    原理は

    ①まず注目カテゴリとして、現在のページのカテゴリを取得       get_queried_object()
    ②そのカテゴリの親カテゴリを取得        $catobj->parent
    ③そのカテゴリが上記でいうところのcategoryBなら、wp_list_categoriesで一覧表示
    ④そうでないなら、注目カテゴリを②に更新して、②に戻る       get_category

     

      <?php 
        $catobj = get_queried_object(); /*現在のカテゴリIDを取得*/
        /*星の部屋カテゴリと、その下のカテゴリまでを取得*/
        while(true){
          $parentid = $catobj->parent; //注目中のカテゴリの親カテゴリを取得
          if($parentid == 0 || $parentid == 121) //それが「ほしいカテゴリ階層のトップ」ならループを抜ける。(0判定は無限ループ対策)
            break;
          $catobj = get_category($parentid); //親カテゴリ取得。ない場合は0 //parentidに「ほしいカテゴリ階層のトップ」が入っていないなら、それを次の注目カテゴリに設定
        }
        if( $parentid != 0 ){ //0の時は欲しいカテゴリ階層ではないということ(何かが間違っている)ので何もしない
            echo '<ul class="childofcategory">';
      	    wp_list_categories('child_of='.$catobj->term_id.'&depth=0&hide_empty=0&title_li=');//リストはこの関数で$catobj->term_idを指定して取得 
            echo '</ul>';
        }
      ?>
    

     

    私はカテゴリを階層にすると絶対にPHPが面倒になると確信を持っていたので避けているのだが、そんなこととは全く関係ない☆は普通に階層分けしているので結局やる羽目になった。まあこっちの技術力がないからあれをしないでというのは何なので別にいいのだが。。。

     

     

    視野が狭いとどういう時に苦労するか

     

    以下はアマゾンギフト券(メール)を模したものである。このサイトでアフィリエイトを始めようと一念発起したわけだが、以前にもアフィリエイトに挑戦し、支払方法を選択してくださいの状態で5年だか10年位前に作って放置していたので、アマゾンギフト券を選択したところ意外なことにそこそこまとまった金額が届いた。

    さて、この中で、私はギフト券番号を探すのに3分くらいかかった。金額も受取人名も有効期限も注文番号も、10秒以内に把握したが、ギフト券番号だけは最後までわからなかった。

    なぜか。それがこの記事の本題である。

     

     

    ¥3,000のAmazonギフト券をお送りします。このメッセージは削除せず大切に保管してください。
    このギフト券を使用して注文するには以下のギフト券番号 が必要になります

      Amazon.co.jp ギフト券  
      金額:
    ¥3,000
    ギフト券番号:
    ABCD-EFGHIJ-KLMN
    Amazonギフト券のご利用方法
    card_footer
     
    お受取人:空鳥 夜鳥
    贈り主:Amazon Associates Program
    メッセージ: Here is your Amazon Associates payment.
    有効期限:2028/06/18 注文番号: xxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      買い物をする | Amazonギフト券をアカウントに追加する | Amazonギフト券の使い方  

     

     

    順を追ってみてみよう。

    ①まず、メールが届く。タイトルから、これがアマゾンギフト券であることを把握する。

    ②そこから、デジタルな金券の特性上、アルファベットないし数字あるいはその両方で構成された無機質な文字の並び(場合によってはそれがハイフンで区切られている)が必要になるので、恐らくそれがこのメールの中に書かれているであろうことが推測できる。

    ③メールを開ける。以下がその本文である。

    a. ここで、まずエリアCを無視する。重要度はともかく、すぐに必要な情報が小さな字で書いてあるわけがないからだ。

    b. 次に、エリアAを読み、必要な情報の呼称が「ギフト券番号」であることを確認する。

    c. エリアBを流し読みし、保留にする。ギフト券番号がわからなけれは意味のない情報だ。

    amsc1

    ④ 上記アマゾンギフト券を見ながら、このメールで最も重要な情報は何か、を考える。まずわかるのは「アマゾンギフト券」のロゴだ。ここに情報は何もない。

    ⑤ そして次に書かれた情報が金額である。文字の大きさ的にも、位置的にも、目立つように書かれている。

    ⑥ 次に名前だ。自分の名前は自分にとって特別な情報であるから、殆ど自動的に注目するようになっている

    ⑦ その次が「Amazon Associates Program」の文字だ。「お受取人」「贈り主」の文字は薄い黄色で見づらく、その下の「メッセージ」は細字である。そして周囲は白い空間で囲まれているので、自分の名前で近くまで視線誘導されれば、次に目立つのがこの部分なのだ。

    ⑧ さて。簡単に得られる情報はこれで終わりなので、ギフト券番号を探さなければならない。

    ここでギフト券番号はとても重要な情報なので、大きな文字か、太字(濃い字)で書かれている可能性が高い。

    ⑨まず大きな字を探す。3000円の表記が見つかるが、これより大きい字はない。ギフト券番号は金額より遥かに重要な情報なので(金額は買い物までに分かればいいが、ギフト券番号がわからないとそもそもそのステップへ行けない)、少なくとも金額と同じサイズかそれ以上の大きさで書かれているはずだ。ところがそんな文字列はない。つまり、ギフト券番号は大きな文字で書かれてはいないことが予測できる

    ⑩ となると太字で書かれている可能性である。探すと自分の名前贈り主、そして

    買い物をする
    Amazonギフト券をアカウントに追加する
    Amazonギフト券の使い方

    という最下部の項目しか該当しない。つまり、ギフト券番号は大きな文字で書かれてもいないし、太字でもないという事になる。ここまでをまとめると、ギフト券番号の特徴は

    普通のフォントかつ普通以下の文字サイズ

    数字、アルファベット、ハイフンの何れかで構成されている

    そこそこ長い文字列

    であることが推測できる。

    ⑪アルファベットあるいは数字を探すと、2028/06/18が見つかる。次に注文番号が見つかり、これかとも思うが、「ギフト券番号」ではない。後は上の方の「¥3,000のAmazonギフト券をお送りします。~」の文章の中に書いてあるかとも思ったが違う。残るはギフト券中央、下線付きの「Amazonギフト券のご利用方法」という項目だが、これも違う。するとこの中にはギフト券番号が書かれていないといことになり、後可能性があるのは「Amazonギフト券のご利用方法」から始まるメール中の説明文だけになる。

    ⑫説明文A,Bを読むが、(当然だが)書いていない。やはり上のカードを模した画像の中にあると考える方が妥当だ。

    ⑬仕方がないので読みづらい黄色い文字を読む。「金額」まあ違うと分かっていても一つ一つ確認するのである。そして「ギフト券番号」を見つける。なんと金額より小さく、名前よりも薄い字で書かれていたのである。わからないわけだ。

     

    視野が狭いというのは、普通言う所の「対象がボケて見える」とは勝手が違う。情報の内容がわからない以前に、情報の場所がわからないのだ。だから常に経験から「どこに、どんな形で」情報があるかを予測し、それに基づいて捜索を行っている。

    逆に言えば予測が外れた場合には情報を発見できない。大きいとかいった特徴は関係なく、「予想通りの格好をしているか」だけが重要なのである。

     

    目立つというのは、広い視野でもって「広く浅く全体の状態を把握したときに、ある一か所がその他と比較して異質であれば、そこに注意がいく」という現象である。

    つまり一塊の情報からの絞り込みに有効なのであって、そもそも一度にとらえることのできる情報が少ない場合には役に立たないのだ。

     

    とはいえ現実にはここまで極論を考える必要はない(少なくとも私の場合は、だが)。なぜかというと文章に対する姿勢がまずページのある領域(面)→文章(線)→文字(点)という順番で意識を集中していくこと自体は恐らく同じだからだ。

    そうすると、文字を大きくするというのが無効だという事がわかる。なぜか?大きくなればなるほどそれは「面」に近くなるからだ。点を可能な限り点のままで強調する方法を考えると、必然的に色や太さといったところに落ち着くのである。

     

    vray for Blenderでオブジェクトにfog (2)

    vrayでオブジェクトにフォグを指定するもう一つの方法として、GlassノードのColorを白にしたうえでVolumeにFogを指定する方法がある。

     

    blender_fog_21

     

    blender_fog_22