「破獄」見た

投稿日:

 先月から心待ちにしていたテレビ東京の記念ドラマ「破獄」の放映が去る12日にあり、録画しておいたのを昨日15日になってから見た。

 あまりテレビを見ないが、たまにこういうものは気が向いたら見る。

 映像も俳優も良く、見応えがあって面白かった。

 脚本は原作に概ね沿ってはいるが、人物への焦点の当て方はだいぶ異なっている。原作の主人公は稀代の脱獄王・佐久間清太郎なのだが、このドラマでは佐久間を担当する看守の浦田が主人公であり、それをビートたけしが演じている。

 さすがはビートたけしで、もはや入神と言える演技力だが、戦前の窮乏した看守を演じるには肥満し過ぎなのと、呂律(ろれつ)が老い過ぎているところは何としても惜しかった。

 佐久間清太郎を演じる山田孝之の演技は鬼気迫るものがあり、一点非の打ちどころのないものだった。彼を過酷に扱った看守が出征し、程なくして戦死する。その報が届いた時の一瞬の表情など、人間の業の深さ、混沌とした心の闇などを凝縮して表現しており、息を呑むほどだった。

 BDにダビングして、とっておくことにした。

BDもう一作

投稿日:

 先週買っておいた映画もう一つ。

アメリカン・スナイパー


 新作、アカデミー受賞なのに、なぜかもう1980円である。

 俳優も本物のクリス・カイルそっくりに演じきっていて、よい作品だった。

 クリント・イーストウッド監督作品ということも知らなかった。

 メイキング映像、特集映像が合わせて1時間ばかりついており、実物クリス・カイルの出演こそないものの、彼の妻タヤ・カイルの語る映像もかなりあり、見ておいて損はない。

 ……というか、こういったいろいろなケースでありがち、タヤ・カイルが叩かれなければよいのだが。昔の日本でも「杉野兵曹長の妻」とか、けっこう色々と難しい話があったんだよね、軍人と家族ってネタでは。

 それと、評判過ぎて誰も言ってないが、イスラムの人たちに対する愛がまったくゼロだね、この映画は。まるで人非人(にんぴにん)のように敵を描くこのやりかたは、どうも賛同いたしかねる。アメリカ人はもう少し反省した方がよい。その部分を割り引くと、良い映画ということで100点つけて、イスラムへの愛が足りない分マイナス60点で、結局40点だな。

Since reputation is too good, everyone in this movie there is a place where not criticize.

It’s that there is no love for the Muslims in this movie.

I can not agree with in this way to draw the enemy like a livestock and animal.

I am not blaming the hero who died. I think it’s admirable the hero. Love and courage is a hero, there is a masculinity.

But, I think it is separate from, Americans and it is better to reflect on the war.

When discounting its part, scoring of this movie is, first, 100 points at the fact that a good movie. Then, 30 points minus because love is not enough to the Muslims. In addition minus 30 points because the reflection is not enough to the war. In total, it is 40 points.

よっしゃ便所の

投稿日:

 ……何しろ暑いので、思いついて、今度はサーミスタを取り付け、便所の温度をも便器に報告させることにした。

 回路図は今度もごく簡単である。

tweetToilet2-2

 現在のスケッチは下のとおりだ。

//
//  つぶやき便所 tweetToilet2.ino
//    27.08.08(土) 1900~
//    佐藤俊夫
//    チルトスイッチで便所のふたの動きを検出し、呟かせる。
//    温度を定期的に報告させるよう機能追加。
//
#include <SPI.h>
#include <Ethernet2.h>
#include <Twitter.h>
#include <stdio.h>
//
byte MAC[] = { 0x90, 0xA2, 0xDA, 0x0F, 0xF6, 0x74 };
IPAddress IP(192, 168, 1, 129);
Twitter TWITTER("取得したトークンをここに書く。");  //  トークン
const int TILTSW = 9;
const int THERMISTOR = 1;
const unsigned long int TEMPINTERVAL = 1000 * 60 * 5;  //  ミリ秒単位で5分
//
void setup()
{
  pinMode(TILTSW, INPUT);
  pinMode(THERMISTOR, INPUT);
  delay(1000);
  Ethernet.begin(MAC, IP);
  delay(1000);
}

void loop()
{
  static int tiltSwStatus = LOW, prevStatus = LOW;
  int i = 0;
  tiltSwStatus = tiltSw();
  if(tiltSwStatus != prevStatus){
    prevStatus = tiltSwStatus;
    tweetMsg(tiltSwStatus);
    delay(1000);
  }else{
    ;
  }
}
//
int tiltSw(){
  //  チルトスイッチの読み取りを安定させるため、100回連続して同じ値が返るまで読む。
  int i = 0, prevStatus = LOW, nowStatus = LOW;
  prevStatus = digitalRead(TILTSW);
  do{
    nowStatus = digitalRead(TILTSW);
    if(nowStatus == prevStatus){
      i ++;
    }else{
      i = 0;
    }
    prevStatus = nowStatus;
  }while(i < 100);
  return(nowStatus);
}
//
void tweetMsg(int tiltStatus){
  char
    openMsg[] = "%e3%82%84%e3%81%82%e3%80%82%e4%bf%ba%e3%81%af%e4%bd%90%e8%97%a4%e5%ae%85%e3%81%ae%e4%be%bf%e5%99%a8%e3%81%a0%e3%80%82%e4%bb%8a%e3%83%95%e3%82%bf%e3%81%8c%e9%96%8b%e3%81%84%e3%81%a6%e3%81%84%e3%82%8b%e3%80%82",
    //  "やあ。俺は佐藤宅の便器だ。今フタが開いている。"
    closeMsg[] = "%e4%bf%ba%e3%81%af%e4%bd%90%e8%97%a4%e5%ae%85%e3%81%ae%e4%be%bf%e5%99%a8%e3%81%a0%e3%80%82%e4%bb%8a%e3%83%95%e3%82%bf%e3%81%8c%e9%96%89%e3%81%be%e3%81%a3%e3%81%9f%e3%80%82",
    //  "俺は佐藤宅の便器だ。今フタが閉まった。"
    tempMsg1[] = "%e4%be%bf%e6%89%80%e3%81%ae%e6%b0%97%e6%b8%a9%e3%81%af",
    //  "便所の気温は"
    tempMsg2[] = "%e2%84%83%e3%81%a0%e3%80%82";
    //  "℃だ。"
  char tweetStr[512], *openCloseMsg = "", tempStr[16];
  if(tiltStatus == HIGH){
    openCloseMsg = openMsg;
  }else{
    openCloseMsg = closeMsg;
  }
  dtostrf(tempMesure(), 5, 2, tempStr);
  sprintf(tweetStr, "%s  \r\n %s %s %s\r\n%ld", openCloseMsg, tempMsg1, tempStr, tempMsg2, millis());
  //  Twitterは同じ文字列を繰り返し書き続けられないので、起動時間を付けて書き、重複を防ぐ。
  TWITTER.post(tweetStr);
  TWITTER.wait();
}
//
float tempMesure(){
  const float B = 4350.0, Ta = 25.0, Rt0 = 50000.0;  //  MF11-503Kスペックシート記載
  const float K = 273.15;  //  熱力学温度の定数
  const float v0 = 5.0, r0 = 1000.0;  //  Arduino +5Vと電流調整抵抗1kΩ
  const int resolution = 1024;  //  アナログ入力の分解能
  int srcVal = 0;
  float vt = 0.0, rt = 0.0;
  
  srcVal = analogRead(THERMISTOR);
  vt = srcVal * (v0 / (resolution - 1));
  rt = (v0 * r0 - vt * r0) / vt;
  return(1.0 / (log(rt / Rt0) / B + 1.0 / (Ta + K)) - K);
}

ネット便器

投稿日:

 時代はIoTである。モノをネットに接続することは、もはや正義を通り越して神の啓示であるとすら言えるほどだ(笑)。

 やろうやろうと思ってやっていない一事はこのことだ。すなわち、「Arduino」を使用して、直接モノにツイートさせること、これである。モノがツイートするのはきっと面白いに違いない。

 「Twitter Arduino」あたりで検索すると、ライブラリが出てくる。今回はこれ(Tweet Library 1.3)をありがたく使わせていただく。

 さて、そうと決まれば何をネットに接続するか、である。ここはやはり、自宅の便器をネットに接続するという、これを一度やってみるべきであろう。

 やはり、IoT時代であるから、便器もネットにつないでやらなければ面白くないだろう。便器だって平等に扱ってやらねば、他の物品との差別感を覚えてひがむようになり、性格が曲がってしまうかもしれない。このように性格の歪んだ便器は、人間様が用を足すときに局部に噛みついてくるようなことが万に一つはないとも限らない。便器にも時々はインターネットと会話をさせてやるべきだ。

 とりあえず、便所のフタの開閉を検知するため、「チルトスイッチ」を使用する。

チルトスイッチ
IMG_3218

 これは、傾けるとスイッチが入るというもので、Arduinoを買ったときに一緒に買った「Seeedstudio SIDEKICK BASIC KIT」というセットに入っていたものだ。

 回路は簡単である。下図のように、行儀よく10kΩほどプルダウンしておけば誤動作は少ない。

チルトスイッチ回路図

 スケッチのほうは、ライブラリの導入に多少手間取った。使用させていただいた「Tweet Library」は、「ETHERNET SHIELD」のほうに対応しており、私が持っている「ETHERNET SHIELD 2」にはそのままでは対応していない。

 基本的にヘッダファイルのインクルードを「#include <Ethernet.h>」から「#include <Ethernet2.h>」に書き換えるだけでいいのでは、と思ったのだが、どうもうまくいかない。さっぱりお手上げだったのだが、いろいろといじくりまわしているうち、エラーメッセージをよく見てみると、「クラスの2重定義」という意味のエラーが出ていることがわかった。なぜか、「libraries\Ethernet2\srcの下にあるやつと重なっている」みたいなメッセージが出ている。ハテ、とライブラリのあるディレクトリを見てみると、「libraries\Ethernet2\src」の下に、なぜか「Twitter.h」と「Twitter.cpp」がある。

 なんだかわかんないけどいいや、消しちゃえ!と、それをぞんざい適当に消したら、うまくコンパイルできるようになった。しかし、そのことで5~6時間ほどハマッてしまった。

 ETHERNET SHIELD 2とプロトタイプシールドを、先日買った「継ぎ足しピンヘッダ」を介して積み重ね、次のようにしていつもの100円ショップのアクリル枠にねじ止めする。

IMG_3213

 手前に緑色のチルトスイッチが取り付けられていることがわかるだろう。

 Twitterに専用アカウントをとり、Tweet Libraryの説明にしたがってトークンを取得する。専用アカウントは、その名も「佐藤家の物」である(笑)。

 それから、スケッチを次のように書く。

//
//  つぶやき便所 tweetToilet.ino
//    27.08.08(土) 1000~
//    佐藤俊夫
//    チルトスイッチで便所のふたの動きを検出し、呟かせる。
//
#include <SPI.h>
#include <Ethernet2.h>
#include <Twitter.h>
#include <stdio.h>
//
byte MAC[] = { 0x90, 0xA2, 0xDA, 0x0F, 0xF6, 0x74 };
IPAddress IP(192, 168, 1, 129);
Twitter TWITTER("hogehogehoge-hagehagehagehage......");  //  トークン
const int TILTSW = 9;
//
void setup()
{
  pinMode(TILTSW, INPUT);
  delay(1000);
  Ethernet.begin(MAC, IP);
  delay(1000);
}

void loop()
{
  static int tiltSwStatus = LOW, prevStatus = LOW;
  int i = 0;
  tiltSwStatus = tiltSw();
  if(tiltSwStatus != prevStatus){
    prevStatus = tiltSwStatus;
    tweetMsg(tiltSwStatus);
    delay(1000);
  }else{
    ;
  }
}
//
int tiltSw(){
  //  チルトスイッチの読み取りを安定させるため、100回連続して同じ値が返るまで読む。
  int i = 0, prevStatus = LOW, nowStatus = LOW;
  prevStatus = digitalRead(TILTSW);
  do{
    nowStatus = digitalRead(TILTSW);
    if(nowStatus == prevStatus){
      i ++;
    }else{
      i = 0;
    }
    prevStatus = nowStatus;
  }while(i < 100);
  return(nowStatus);
}
//
void tweetMsg(int tiltStatus){
  const char
    openMsg[] = "%e3%82%84%e3%81%82%e3%80%82%e4%bf%ba%e3%81%af%e4%bd%90%e8%97%a4%e5%ae%85%e3%81%ae%e4%be%bf%e5%99%a8%e3%81%a0%e3%80%82%e4%bb%8a%e3%83%95%e3%82%bf%e3%81%8c%e9%96%8b%e3%81%84%e3%81%a6%e3%81%84%e3%82%8b%e3%80%82",
    //  'やあ。俺は佐藤宅の便器だ。今フタが開いている。'    
    closeMsg[] = "%e4%bf%ba%e3%81%af%e4%bd%90%e8%97%a4%e5%ae%85%e3%81%ae%e4%be%bf%e5%99%a8%e3%81%a0%e3%80%82%e4%bb%8a%e3%83%95%e3%82%bf%e3%81%8c%e9%96%89%e3%81%be%e3%81%a3%e3%81%9f%e3%80%82";
    //  '俺は佐藤宅の便器だ。今フタが閉まった。'
  char tweetStr[256];
  if(tiltStatus == HIGH){
    sprintf(tweetStr, "%s  \r\n %ld", openMsg, millis());
    //  Twitterは同じ文字列を繰り返し書き続けられないので、起動時間を付けて書き、重複を防ぐ。
  }else{
    sprintf(tweetStr, "%s  \r\n %ld", closeMsg,  millis());
  }
  TWITTER.post(tweetStr);
  TWITTER.wait();
}

 うまく動くようになったら、ホット・グルーでプロトタイプを便器のフタに取り付ける。

IMG_3216IMG_3215

 便所にLAN工事を施しておしまいだ。

IMG_3214
 

 上記動画のように便器のふたを開け閉めすると、やおら便器が次のように呟きだすのである。