You can read this blog in any language using google translate as follows:

Goto http://translate.google.com/
Paste URL in the box and select "Japanese for From Language" and "To Language". Then click "Translate".

English translated pages are here:
http://bit.ly/xPuXoy

你可以閱讀這個博客,在任何使用“Google”的語言翻譯

本ブログのアクセス統計: 60万アクセスを達成しました。ご訪問ありがとうございました。

60万アクセスまでの経過

2009年12月に始めた本blog。2011年7月ごろに10万アクセスを達成し、2011年12月13日には15万アクセスを達成。
その後、私も更新しておらず、アクセスは少し減りましたが、3月1日には18万アクセス。2012/4/18に20万アクセス、2012/8/21に25万アクセス、2013/1/18に30万アクセス、2013/12/17に40万アクセスを達成しました。しばらく見ていなかったら、2015/5/1に50万2584アクセスになっていました。またまた、しばらく更新しないうちに、2017/6/11に60万7197アクセスになっていました。久しぶりに更新します。

2017年10月2日月曜日

PICで作ったBinary Clock

Crowd Funding に、2進数表示の時計があったので、PIC 16F1827と、フルカラーLED 7つ、および時計用の32.768kHzの水晶発振子。あとは、モード設定用のタクトスイッチ(赤、黄色、青)を使って作ってみました。

最初、実験用にdelay関数を使って無限ループでLEDが適当に点灯するプログラムを作り。
動作確認後、32.768kHzで0.5秒間隔で正確に割り込んで、時計変数を更新する仕様にしました。

PIC Kit3のプログラマと製作したBinary Clock
表示モードと時計モードのスペック
   
Easy, Auto1, Auto2, Pro1, Pro2のモードを作りました。

  1. Auto1モードでは、時=赤・分=緑・秒=青が0.5秒ずつ切り替わって順番に示されます。
  2.    Pro2モードでは、時=赤、分=緑、秒=青が加色混合され同時に表示されます。結果、上写真右下のような色になります。
  3. 7bitで2進で示すモードと、3bit, 4bitのBCD (2進化10進数)で示すモードとあります。BCDのほうが初心者向けでしょうが、それでも、時・分・秒を加色混合すると、読めません!!
 以下、Pro2モードの動画です。時・分・秒が加色混合されるので、多分、何時か.. すらもわからないと思います。Pro1として時・分だけの加色混合モードもあります。電源アダプタは余ったAUポイントで貰った、ガラケーのアダプタが5V出力だったので再利用しています。


以下Auto1モードの動画です。BCD(2進化10進数)表示モードです。
 5時45分頃というのがわかると思います。


セットアップモードと各種モードの説明

回路図: 3色LEDをダイナミック点灯かけています。
ダイナミック点灯は2msで切り替えます。
  1. 初めPICのクロックを500kHzにしましたが、あまり最適化されていないプログラム(300行ぐらいでしょうか..) というのもあり、結構ちらつくので、8MHzにしたところ問題はなくなりました。
  2. PICはクロック発信回路を内蔵し、時計用水晶発振子を直付けできるので、回路は簡単です。PICのプログラマ PIC Kit3から5Vを供給して、プログラムをしつつ動かしていたのですが、時計割り込みがかかりませんでした。
    1. 割り込み動作なので、XIDE 付属のsimulator でも問題は不明
    2. クリスタルのつながるT1OSO, T1CKIは、それぞれPICのプログラム信号 ICSD (データ), ICSC (クロック)で、PIC Kit3の負荷につながるので、これをつけたままでは水晶発振子が発信していなかったのが原因でした。
    3. 水晶発振子には68pF (指定では33pFですが)でGNDに繋いでいます。PIC Kitの案内には、ICSD, ICSCにはキャパシタは繋がないこととありますが、この程度のキャパシタでは問題はないようです。なしでは、水晶発振子が動かないでしょう。。
  3. タクトスイッチはPICのWUPモードで内部pull upしたのですが、どうも誤動作するので、10k Ohmのpull upを3本追加しています。
  4. MAC OS-XではUSB接続のPIC Kit3が認識できないので、win10に移したのですが、こちらは、日本語のfolder/file名がコンパイル時に認識できなかったり、日本語文字コードが化ける(UTF-8のMacと、S-JISのwinで違うし。。)ので、ファイル・フォルダ名・コメント等は全部英語が無難に思います。
  5. プログラムはCで400行程度。PICのプログラムメモリ利用率は20%ぐらい。
  6. XC8ではPICのconfigurationは#pragmaで記述。(生成支援ツールもあります)
  7. そのほかのレジスタは、マクロとして定義されているので、入出力は極めて簡単。
  8. 12 bit命令の8bit PICは直接指定できるプログラム・メモリ空間が小さいのですが、Cで書けば、全く気にしないで書けます。
  9. その他、X IDEやXC8のCコンパイラは1行に、セミコロンで区切った複数文が書けない、intが16 bit、enumが使えない、など、若干違いがありそうです。






テストに使ったランダム点灯をデモモードとして残しました。Upを押しながら、Modeを押すと、出入りできます。デモモードでは、Mode, Up, Downのタクトスイッチそれぞれを押すと、赤・緑・青の点灯が抑制されたり、されなかったりを制御できます。

以下ビデオです。


プログラムに先立ち、I/Oピンの使い方、Configuration、変数名・関数名をexcelで仕様化しました。

が、例によって書いているうちに、変数名・関数名は変わりました。
作りながら考えるのがプログラミングの醍醐味でしょうね。
参考資料)
  1. 電子工作のための PIC16F1ファミリ活用ガイドブック 大型本 – 2013/4/11
    後閑 哲也 (著) 3,456円  http://amzn.to/2xJjKAZ  ー がわかりやすいです。
    ただ、コンパイラやツールが若干古く、以下関連リンクを参照する必要があります。
    タイマ割り込みの設定は、この本では、16F1937について説明があり、ところによっては16F1527だったりしますが、今回使った16F1827でも、ほとんど同じでした。



関連リンク)
  1. PIC 16F活用本作者のページ: http://www.picfun.com/ いろいろ情報あり。
  2. Configurationの説明あたり http://www.picfun.com/p818frame.html
  3.  XC8のconfigurationは自動生成して #pragma configをつかう http://www.picfun.com/bookmntU.html
  4. PIC 16F1827 と他のPICは若干違うので、そこは、PICの英語仕様書をダウンロードして確認のこと。

2017年8月4日金曜日

ICチップを埋め込んで個人認証する条件??

個人認証は難しい。
ICチップを埋め込んで認証するのには、「牛や豚などの家畜じゃあるまいし」という拒否感もある。最近以下のようなニュースもあり、賛否両論である。

News Week: 2017年8月1日(火) 米国企業で初、従業員の体内へのマイクロチップの埋め込みを実施   http://www.newsweekjapan.jp/stories/world/2017/08/post-8107_1.php 
 より以下に写真。右手の甲にマイクロチップを埋め込み、入退場、自動販売機の精算等ができる


右手の甲に埋め込まれるRFIDチップ

認証している場面(冒頭記事にある紹介ビデオより)

記事中にある懸念・課題は

  1. セキュリティ)チップは暗号化されているというが本当に安全か?
  2. プライバシー)常時監視されるおそれがある
  3. 人体への安全性)
個人認証の難しさ)
  1. 認証(Authentification)の根拠問題)
    1. 戸籍謄本・抄本、米国で言うBirth Certificate には顔写真がなく、悪意を持って引き出して他人になりすますことができる。
      会社やweb siteの認証につかわれるhttpsも、公開鍵暗号が使われるが認証局がその公開鍵を管理することで、正当性を認証するが、認証局への登録の正当性、認証局の信頼性が課題になる。以下の参考記事のような事件も起きている。

      参考記事): https://japan.cnet.com/article/35104053/ 
      グーグル、中国の認証局WoSignの証明書を拒否へ--「Chrome 61」から Charlie Osborne (CNET News) 2017年07月11日 
  2. ID盗難問題)
    1. 電子的な盗難: 電池不要な受動式で安価な非接触方式としてICタグがあるが、wikipedia: ICタグ: http://bit.ly/2fciOx9 にあるようにこれはEPCコードという固有のIDを送って判別する。したがって、コードを盗む悪意の端末にかざしたり、盗聴されると簡単にIDが盗まれうる。
      Suica(方式はFelica: https://ja.wikipedia.org/wiki/FeliCa ) や、それとMiFare (https://ja.wikipedia.org/wiki/MIFARE ) を統合した最新のNFCカード方式( http://www.orangetags.co.jp/what_felica.html )などでは、チャレンジレスポンス方式で、秘密鍵がもれなくなっていたり、通信が暗号化されている模様。
    2. 物理的な盗難: 手の甲の所定位置に埋め込むとわかっていれば、薬で本人を眠らせて、チップを抜き取りなりすます犯罪もおきえる。
  3. プライバシー問題)
    1. 個人が特定できる、かつ、非接触・受動式ということは、政府や企業が受信器をおけば、どこに誰が居るかつねに監視できる。これを、懸念する人がおおい。
対策)そこで、上記の各点に対して対策を考えてみた。後ほど説明を追加するが、まずは簡単に列挙する。

  1. 認証)子供が生まれた時に、一生使えるIC鍵を埋め込む。米国でいうSocial Security CardをID化して埋め込むようなもの。。この番号は一生変わらない。
  2. ID盗難問題)
    1. 電子的:十分な暗号長を持った、公開鍵暗号を用いたチャレンジレスポンス認証とする。秘密鍵は絶対にチップ外にでないので、電子的な盗難は非常に困難にできうる(後述)
    2. 物理的 :誕生時に手の甲など所定の位置にある、主鍵と、人によって場所が異なり、埋め込んだ医者しか知らない、認証鍵(それも複数)の両方を埋め込む。
      入国審査や警察、入場チェック等信頼できる組織にチェック機をおき、主鍵のIDと認証鍵のIDの一致をチェックする。これらのIDが一致しなければ犯罪の可能性ありということで、物理盗難の抑止力とする。
  3. 冗長性)
    1. 右手の甲、左手の甲とか主鍵を複数場所に埋め込んで、故障時に備える。
  4. プライバシ)
    1. 主鍵単体では認証できないことにする。
      1. 主鍵は、ペアになっている活性化鍵と通信できないと、認証を行わない。活性化鍵は10cmとか近接距離に置かれ、これも受信センサから電源供給される方式にする。
      2. 活性化鍵は、たとえば、指輪や腕時計型の端末に入れる。
        1. このIDは、秘密鍵と違って漏れても、主鍵がなければ役に立たないので、電子データ(ファイル)で引き渡しても安全であり、貰ったデータに対して、ユーザが自分の好みにあった、端末、指輪、スマートウォッチ等を選択できる。
        2. 政府・勤務先に活性化鍵が漏れると、プライバシ管理を自分以外ができてしまう。ただし、政府や企業は、特定の活性化鍵がだれに対応するのか管理しないとならない。これは、活性化鍵を盗むと同時に顔認証に登録して、主鍵との関係を保存できてしまう。ともあれ、企業や政府が要請しても、安易に活性化鍵を出さないように、意識づけないとならない。
      3. 活性化鍵をoffにしておけば、プライバシーは漏れない。指輪型であれば指輪を外すなりすればよく、スマートウォッチ型であれば、手をかざしたときのみonになるとかすればよい。
      4. 将来的には、自分の意思で直接認証をコントロール(必要なときだけon)したい。筋電位等やBMI(Brain Machine Interface)が使えると思う。
チャレンジレスポンス認証・公開鍵認証とは)
 今後記載

実装例)
 複数例を今後記載予定

1. スマートウォッチ型の活性化鍵と主鍵を用いた場合

  1. 認証端末が自分の公開鍵と秘密鍵で暗号化したランダム番号を活性化鍵に送る
    (注: シーケンスのあいだじゅう、このランダム番号を公開鍵・秘密鍵で暗号化してやりとりする。すなわち、データを盗聴して、同じデータを再生して偽証しようとしても、やりとりごとに違うランダム番号を正当な方法で暗号化していなければ、偽証できない。)
  2. 活性化鍵は、認証局に公開鍵を確認して、端末が誰かを確認。しつつ、受信したランダム番号を端末の公開鍵で解読(端末以外は公開鍵に対応した秘密鍵がないはずなので、これで端末が本物であることが認証できる)。そしてどの端末の認証リクエストを受けたのか記録する。
  3. 活性化鍵は、活性化用の秘密鍵・公開鍵のペアと、主鍵の公開鍵を持っている。
    活性化秘密鍵で端末から受け取って解読したランダム番号を暗号化して、主鍵の公開鍵とともに端末に送る。
    暗号化通信には、認証のための主鍵の公開鍵が必要で、それは、この操作で提供される。これが、次のstep4で本人認証にもなる。
  4. 端末は、主鍵の公開鍵を認証局に送って、主鍵を持っている本人を認証する。
    端末は主鍵の公開鍵で、先に使ったランダム番号+質問状を暗号化して、活性化鍵から受け取った活性化秘密鍵で暗号化されたランダム番号と共に、主鍵に送る。
  5. 主鍵は、活性化公開鍵と主鍵の秘密鍵・公開鍵のペアを持っている。
    1. 活性化公開鍵で活性化鍵が活性化秘密鍵で暗号化したランダム番号を解読する。
    2. 主鍵秘密鍵で、端末が送った ランダム番号+質問状を解読する。
    3. 上記1,2のランダム番号が一致しないときは、不正リクエストとして無視。(つまり、活性化鍵が本物でない)
    4. 3をクリアした場合には、質問状に対して答えを書き、さらに受け取ったランダム番号をつけて、主鍵の秘密鍵で暗号化して、端末に送信する。
  6. 端末は受け取った、暗号を主鍵の公開鍵で解読し、ランダム番号が一致した場合に、質問状の答えを確認する。
随想)
 もう3-4年前にFacebookで議論して、出た課題への対策を考えたまま眠らせていたのですが、実際に手に埋め込んだ冒頭記事がでてきたので思い出しました。

 特許にしてひと財産.... とも思ったのですが、この程度のことは既に考えている人がいそう、専門家ならなおさら、、ですし、こういう一般例は公知にしてパテント・トロール http://bit.ly/2faJ2QG をブロックして、具体的な実装を考えて苦労した人にこそ特許を与えるのが良いとも思います。
 まだまだ、いろいろ考えないとならないこともありますし、考えるのも面白そうです。大きなビジネスにするには施策も必要ですし、これも面白そうです。
 もしも真面目にビジネスされたい方がいれば、連絡してください。大企業で社内政治に巻き込まれるのは歓迎しませんが。。ww


2017年7月10日月曜日

LinuxサーバにMySQLを設定した

以下に投稿した機能を拡張するために、MySQLを家庭内ゲートウェイであるLinuxサーバに立ち上げて、RaspberryPI等、家庭内IoTシステムからremote accessして、データを共有できるようにした。

2017年6月12日月曜日

 目次)MySQL化の理由は最後の背景で説明する。
  1. MySQLのinstall
  2. remoteアクセスの設定
    1. 設定ファイルの変更
    2. RasperryPiからのアクセス実験
    3. rootではアクセスできない
  3. Databaseの移動
    1. RAID (mdadm)のpartitionへの移動 (堅牢化)
    2.  Apparmor (CentOSでいう、SELinux) の無効化
  4. おまけ)MySQL workbench on Mac OS-X
  5. 背景
    1. microSDカードの書き込み寿命
    2. 対策
      1. USB HDDの利用
      2. MySQLなどremote databaseの利用

MySQLのinstall)
 Ubuntu 16.04 LTSなので、

2016-11-17 Ubuntu 16.04 LTSにMySQLをインストールする 
の通りに aptでinstallして、設定をすれば、まずはlocal machineで使えるようになった。上記にある、サンプルのtest_dbも、この通り動いた。

Remote Accessの設定)

  1. LinuxサーバのUFW を設定して、標準の3306ポートを開いた。
    参考)
    1. UFWの設定: http://qiita.com/yoh-nak/items/46935af3c5c4036e93b3
    2. コンソールからGUFWのほうが簡単かも:
       http://sicklylife.at-ninja.jp/memo/ubuntu1404/gufw.html
  2. ついでに /etc/sysctl.conf を書き換えてrebootしてIPv6も止めた。
    参考) http://l-w-i.net/t/ubuntu/ipv6_001.txt
  3. remote accessの設定)
    1. だが、telnet ipaddress 3306をやってもつながらない。
       /etc/mysql/mysql.conf.d/mysqld.cnf   の設定変更が必要
      bind-address           = 127.0.0.1
      でローカルマシンからしか接続できなくなっているので、これを、
      bind-address           = 0.0.0.0
      に書き換えてどこからでも接続できるようにする。
      参考)http://bit.ly/2uVx9Rl  How to allow mysql remote connections via particular interface
    2. RasperryPIからのアクセス実験

      1. rasp01 ~ $ mysql -h 192.168.0.88 -u user -p
        Enter password: 
        Welcome to the MySQL monitor.  Commands end with ; or \g.
        Your MySQL connection id is 26
        Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)

        Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
      2. :
        mysql> connect test_db;
        Reading table information for completion of table and column names
        You can turn off this feature to get a quicker startup with -A

        Connection id:    27
        Current database: test_db

        mysql> show tables;
        +-------------------+
        | Tables_in_test_db |
        +-------------------+
        | emp               |
        | lights            |
        +-------------------+
        2 rows in set (0.00 sec)

        mysql> select * from emp;
        +------+------+
        | id   | name |
        +------+------+
        |    1 | aaa  |
        |    2 | bbb  |
        +------+------+
        2 rows in set (0.00 sec)

        mysql> 
    3. ところがRasperryPIからrootでMySQLに入れない。mysladmin でやってみるとアクセス権がないとのこと。
      rasp01 ~ $ mysqladmin -h Linux02 -u root -p version
      Enter password: 
      mysqladmin: connect to server at 'Linux02' failed
      error: 'Access denied for user 'root'@'192.168.0.122' (using password: YES)'
    4. サンプルテーブルでの実験からも類推できるし、以下のようなやり方でできると書かれた webサイトもあったが。。。やり方がまずかったのか上手く行かない。mysql> grant all on *.* to 'root' identified by 'rootのパスワード';
    5. どうもlocal machine上で 管理table mysqlの設定をいじればよいらしいがよくわからない。
    6. Local MachineからMySQLにroot権限で入って見える特権データベース
      (以前、SQLite3で、壊してひどいことになった。)

      localhost以外で追加してみようとするが。。
      SQLは初心者なので、、、よくわかりません。。
  4. Databaseの移動)
    1. Quitta http://bit.ly/2uXMLnp をみて、ファイルをmdadmのpartition (/homeからのsymblic linkへ移動)
    2. が、/etc/init.d/mysql restart するとコケる。

      # journalctl -xe でみると、apparmor (CentOSでいう、SELinux)が拒絶している) 
    3.   https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 を参考に、Apparmorの設定 /etc/apparmor.d/usr.sbin.mysqld あたりを書き換えたが、なんどやっても上手く行かない。
    4. CentOSでは、SELinuxは扱いにくいので、無効化(おすすめは、http://red.ht/2uZTaP1 にあるPermissive mode) なので、Ubuntuでも無効化することにした。
    5. Grubからdisableしてrebootして、問題になくデータベースは移動した。
      しかし、Databaseを移動すると何がどうなってダメなのか不明。
    6. おまけ)rootになって # journalctl -xe をすると、Mac OS-XにインストールしたCanon printer drive (tools) のbonjure が、大量にbroadcastメッセージを出して、UFW (iptables) つまりlinuxサーバのfirewallが拒絶メッセージを出している。なんだか怪しい。。
  5. おまけ)MySQL Workbench on MacbookPro OS-X El Capitan.
    Mac OS-Xからの確認用に、
    https://www.mysql.com/jp/products/workbench/ からダウンロードした。グラフィカルにMySQLサーバに触れる。
    MySQL Workbenchでサンプルdatabase/tableの操作

  6. 背景)microSD cardの書き込み寿命
Makerfairを主催する米国の雑誌Makerとは比べ物にならないほど内容が詳細で充実した..日本の誇る雑誌 トラ技 2017/7月号 (CQ出版社の画面 http://bit.ly/2tO4iB3 を引用)にラズパイ特集があった。実は、CQ出版社にはバックナンバーがほとんどあって、買い逃した本も上記リンクから行けるCQ出版のweb shopの通販で送料無料で数日で届く。カード支払いも可能。

CQ出版社webのトラ技2017/7月号情報

CQ出版社webにあるトラ技2017/7月号の目次情報

その第4章が、
「数Kバイトの小データを10年間記録し続ける高信頼メモリの技術
寿命対決! コンビニSDカード vs 産業用SDカード」であり、
ラズパイで使った時のmicroSDカードの寿命を徹底評価していた。
http://bit.ly/2tO4iB3リンクから各章の1ページ目がpdfで閲覧できる。
SDカード(Flash memory)の詳細な仕組みから始まり、8GBのmicro SDカードを装着したラズパイで、4KBのファイルを1秒間に100個記録し続ける(古いのは消す)データロガーとして使ったときのmicro SDカードの寿命を算定していた。TPSM-GS1Sという産業用のSLC(Single level Cell)カードだと10年持つが、通常売られているMLCタイプの安いmicro SDカードだと18日でダメになるとのこと。(ここを特集するのは、さすが、トラ技。)
そりゃそうだ、wear levelingも適当な安価SDカードだし。。
さすがに、1秒間に100個ずつファイルを記録することもなく、1分間に1個。同じファイルへの書き込みはbufferされていると考えると、もうちょっと持つのかもしれないが、小さいファイルを更新しまくるlinux/unixのストレージが市販microSDカードというのは、いかにも心配である。
記事にある書き換え寿命の仕様(保障)値を引用すると、
SLCで10万回、p-SLCで2万回、MLCで3000回。
実効最小ではSLCで21万回、p-SLCで11.8万回、MLCで1.2万回。
 amazon.com http://amzn.to/2tNVmvM では、p-SLCの16GBのmicroSDカードが10枚 $815で、SLC 4GBのmicroSDカードが10枚 $805で売られている。---- 高い!!!!

拙blog: http://bit.ly/2sccXwe に掲載した、RaspberryPIを使ったコンセント制御。cron でアプリが1分ごとに起動して、タイマー機能を実現する作りになっている(簡単なので..) 。
機能拡張するのに状態管理をファイルでやろうと思ったが、危ない。。常時起動しているdaemonにするか、状態管理daemonと通信させるか、ちょっとやり方を考えたい。と、考えた結果、MySQLサーバを立ち上げて、今後増えるであろう、いろいろな家庭内IoT機器の情報をRelational Databaseで共有して、検索・変更を容易にすることにした。
コンセント制御では、WebベースなのでPHPを使っており、PHPにはMySQLをアクセスするライブラリもある。

Learning PHP, MySQL & JavaScript: With jQuery, CSS & HTML5 (Learning Php, Mysql, Javascript, Css & Html5) 4th Edition (amazon.com http://amzn.to/2uPRBmF でベストセラーらしい。以下表紙写真)にも、PHPとMySQLの連携について書かれている。
参考になりそうなR'REILLY本


2017年6月12日月曜日

RaspberryPIを使って、コンセントを制御する。


久々に投稿します。かなりネタが溜まっているので、順次投稿し、本稿も随時加筆します。
RaspberryPI 2 modelB v1.1 を使って、電灯制御を作っている。

方針)


  1. 他にもRaspberryPI, Raspberry PI3 BやRaspberryPI Zero W等も購入した。
    おいおい拡張したい。
  2. RaspberryPI 3B+ には、Ubuntu mateをいれ、Elecrow RPA05010R HDMI 5-Inch 800x480 TFT LCD Display with Touch Screen Monitor for Raspberry Pi B+/2B/3B をamazon.comで購入して、接続しタッチパネル操作できるようしている(以下写真)。DRAMも多いし、CPUも速い(別途投稿したい)
  3. Raspberry PI 2 modelB v1.1はRaspbian Wheezyで使っている。設定法や上記Ubuntu mateの設定法は別途記事にする。(上記、Ubuntu mateやJessieとかも入れてみたが、やはり、木の実マークのWheezyが良いかも)
  4. 電灯制御に関する記事: https://www.samkear.com/hardware/control-power-outlets-wirelessly-raspberry-pi の通りにやった。

    1. ここではEteckcity という430MHzの無線のリモコンコンセントを使う。
    2. リモコン制御はSMKNという430MHzの送受信カードセットを使う。信号はRS232Cのような、調歩式の振幅変調(1,0)コーディングではなく、パルス幅(FM)コーディングなので、RaspberryPI等のGPIOを使うのが良さそう。
      1. 以下に書いたwiringPIライブラリを使って信号を入出力するバイナリがある。
        1. 送信機で押された無線コードを表示するRFSnifferを起動して、無線コード(10進6桁から7桁)を得る。
        2. codesendというアプリにコードを与えると無線送信する。
      2. このカードも大変安い。5個入りパックの無名ブランドはもっと安い。
    3. 以下にamazon.comでの値段を掲載する。
  5. 上記では、wiringPIというパッケージを使い、GPIO (RaspberryPIシリーズの入出力ポート)を制御している。
    1.  GPIOポートの結線図:: https://projects.drogon.net/raspberry-pi/wiringpi/pins/  
    2.  例題LED点滅: http://wiringpi.com/examples/blink/
  6. 上記の点滅を改造して3色LEDの点滅アプリ (blinkRGB) を作った。root(特権ユーザで実行する必要があるが、以下のようにつかう
    1. 自動点滅: 引数なし。以下のように点滅する。
    2. 所定点滅: (R,G,B) = で所定色を指定。(1,1,1) = 7が白を示す。4が赤、0が黒など。
  7. スイッチで電灯を点滅させたいので、Eteckcity から電線を引き出した。従来、TP-Link Smart Plug w/ Energy Monitoring http://amzn.to/2scgjzr  からスイッチを引き出していたので、このプラグが入るジャックにして、コンセント部分を入れ替えて使えるようにした。


    従来のTP Linkのもの

    引き出した線が繋がる、壁スイッチ

    改造作業。TP LinkもEteckCityも、もともとスイッチがあるので、そこから線を引き出すだけ
    左: 従来のTP Link,  右: EteckCityにつけた壁スイッチへのコネクタ。
  8. RaspberryPIへ外出先からのアクセス
    1. RaspberryPIは、192.168.のローカルLANからしかみえない。
    2. Broadband routerからsshポート(安全のためport番号は規定の22番とは全然違うものにしている)をポートマッピングしている、ゲートウェイのLinuxサーバ ホスト名: Linux02 がある。
    3. Linux02は No-IPのDynamicDNSサービス(有料。そうしないと更新が面倒)を使いホスト名を与えてある。無料だったminiDNSはサービスが打ち切られた。
    4. RaspberryPIのapache2, sshdに対して、Linux02でsshトンネルを掛けて、外部からアクセスしている。sshポートが特殊なうえ、rsaのprivate鍵がないとログインできないので、ハッキングに対する安全性は高いと思う。
  9. 電灯制御のweb pageを改造している。
    1. 設定部分のファイルをJSONにして分離。
      1. 部屋・電灯の名前、受信機がないスイッチ、つながっていない受信機などが分かるアノテーションをいれた
    2. 読み込み部分とtrigger部分を分離
    3. デバッグ用表示を追加: デバッガphpdbgを使おうとphp 5.6をコンパイルしてみた。php 5.6は、phpdbgが使えるまでには至らず。
    4. タイマー設定のJSONを読み込み表示。(末尾に写真をつける)
      1. formのradio buttonでのPOSTにしたが、いちいちhtmlを読み込むのは面倒なのでJavascript化したい。
      2. スイッチの状態で色を変え、また、現在の状態をJSON (or cookie) に保存したい。
      3. 肝心のタイマーのコード(多分PHP)を完成させる。
制御画面)

現状のもの:Allでは全部のリモコンにon/off信号を送る。webからのon/offは動作している。

タイマーは、JSONの設定ファイルの時刻設定を表示。ただし、タイマーの機能をする本体はまだない。タイマーformのラジオボタンもJavascript化する予定。。

リモコンパラメータなどが入った設定JSONファイルを読み込み、表示も自動作成する。
送信ボタンだけで受信機がない行を排除した表示。つかっていないコンセントを表示しない仕様にも簡単に切り替えられる。

上記と違い、送信機にある全部の無線信号を表示させたもの。

記事のものをとりあえず動かした版、手でhtmlを改造してB1,B2,B3を追加。

2016年6月22日水曜日

CentOS6.6でパッケージ更新をできるようにする

久々に自宅のCentOSにconsoleからloginしてGoogle Chromeを立ち上げたら、古くてセキュリティ上問題があるので、更新するように言われた。

rpmパッケージをダウンロードしたが、grapicツールからエラーが出るので、テキストベースで試すと、やはり以下のエラーになる。

# rpm -ivh google-chrome-stable_current_x86_64.rpm
エラー: 依存性の欠如:
libnss3.so(NSS_3.19.1)(64bit) は google-chrome-stable-51.0.2704.103-1.x86_64 に必要とされています
libstdc++.so.6(GLIBCXX_3.4.18)(64bit) は google-chrome-stable-51.0.2704.103-1.x86_64 に必要とされています
libstdc++.so.6(GLIBCXX_3.4.14)(64bit) は google-chrome-stable-51.0.2704.103-1.x86_64 に必要とされています
libstdc++.so.6(GLIBCXX_3.4.15)(64bit) は google-chrome-stable-51.0.2704.103-1.x86_64 に必要とされています
CentOSの版と64bitか確認)
 CentOSは6.6。2つ目の行から64bitでよいらしい。
# more /etc/centos-release
CentOS release 6.6 (Final)
# uname -a
Linux Linux02 2.6.32-504.12.2.el6.x86_64 #1 SMP Wed Mar 11 22:03:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
ライブラリをyumでインストールしてみると.. エラー)
# yum install libnss3.so
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
epel/metalink                                                                                             | 8.8 kB     00:00    
 * epel: linux.mirrors.es.net
 * ius: archive.linux.duke.edu
 * remi: mirror.uta.edu.ec
http://linux.dropbox.com/fedora/6/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
他のミラーを試します。
エラー: Cannot retrieve repository metadata (repomd.xml) for repository: Dropbox. Please verify its path and try again
解決策)
ググってみると

という記事があった。
 自分のLinuxサーバで、
 /etc/yum.repos.d/CentOS-Base.repo を見ると記事にあるように、http://mirror.centos.org/centos/6.6/ がyumのレポジトリになっていて、そこには、readmeがあって、確かに、http://vault.centos.org/ を使うようにと書かれている。

やってみる)
# sed -i -e "s|mirror\.centos\.org/centos/\$releasever|vault\.centos\.org/6.6|g" /etc/yum.repos.d/CentOS-Base.repo # sed -i -e "s|#baseurl=|baseurl=|g" CentOS-Base.repo # sed -i -e "s|mirrorlist=|#mirrorlist=|g" CentOS-Base.repo

この結果、mirrorlistをコメントアウトして、baseurlを上記の新しいものに書き換えている。ほかにも複数行ある..
-#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&re-baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/+##mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&r+baseurl=http://vault.centos.org/6.6/extras/$basearch/
が、やはり同じエラーが出る /etc/yum.repos.d にある、 dropbox.repo ファイルが古くなっていただけ。これを削除(実際にはbakというdirectoryを掘ってそこに移した..) ところ、yum updateは先に進んだ。。いろいろアクセスできないrepositoryがあって、他のミラーを試しているようだが、これでうまくいくのかは不明。必要に応じてやはりCentOS 7.x にあげないとだめかもしれない。顛末は、後日追記する。

トランザクションの要約
============
インストール        30 パッケージ
アップグレード     779 パッケージ
総ダウンロード容量: 1.0 G

 

2016年6月19日日曜日

LiZoneというLaptopPC用電池が強力!!

最近、2013 後期のMacbookPro 13インチ Retinaの電池がへたり気味で、膨らんできたのかタッチパッドが非常に押しにくくなってきた。電池交換についても調べたので、後半に書く。

また、最近は、学会に行ってMacで直接議事録を書いている。英語の学会で直接議事録を書くのは、議事録を書く時間の短縮にもなるし、リスニングの勉強にもなりそう。これも別途投稿したい。

そういう背景で、5/23(月)-24(火)とSan FranciscoのUnion Square横のGrand Hyatt Hotel (移転したApple Storeの真横)で開催されたIn-Memory Computing Summitという学会に行ってきた。この学会、WiFiは通っているのだが、座席からAC電源がとれない。議事録を書いていると、電池がどんどん減っていく。いろいろ対策してみた(これも後述する)のだが、大変なので、ググってみると、Laptop用のリチウムイオン電池がamazon.comで売られていた。

前置きは長くなったが、これがなかなか強力そうなのでレポートする。

LiZone)

http://amzn.to/24YBcqL が米国Amazon.comのサイト。26,000mAh=20Ah のSサイズで$149.99であった。他にも、Mサイズ40,000mAh, Lサイズ60,000mAhの上位機種がある。この容量は5V換算時。
Amazon.comのLiZoneのページ


何が嬉しいか)

  1. Laptop充電に対応したLiIon電池であるが、USBポートもあり同時充電できる。以下の3つの主要メーカのそれぞれに対応したケーブルも付属しており、3つともPCを所有していたので動作を確認した。
    1. MacbookPro : Mac付属のアダプタは14.5V 3.65A (52Wぐらい?)
      添付しているのはMagSafeアダプタなので、Mag Safe2の変換アダプタ利用。MagSafe2からMagSafeに変換するアダプタは売られていないので、若干がさばるが、このほうが助かる。また、何度も付け外しして、だめになったMagSafe2変換アダプタが一つあった。変換アダプタなら置き換えも可能。
    2.  Dellのラップトップ: 所有しているE7250 12inch (PC付属のアダプタは 65W 19.5V 3.35A, センタが+プラスの丸型) で動作を確認した。
    3. Lenovo ThinkPad: E430( PC付属アダプタは65W 20V 3.25A , センターが信号線、円筒の内側がプラス、外側がマイナスの3重構造)で動作を確認。ただし、標準外の電源とwarning画面がでる。
    4. マニュアルには90W 4.5Aまでの機種に対応とある。USBは2.1Aまで。
    5. Laptopに繋いで電源供給するときには、電源ボタンを3秒長押しする。
  2. LiIon電池からの充電能力はMacbookPro 13inchの場合1.5回分らしい(次章で検証する)
  3. AC100Vから240V入力の専用充電アダプタが付属している。アダプタとLiZone電池は白色のケーブルで接続する。このケーブルは16.8V 4.5Aとある。この充電器側のプラグはLiIon電池のプラグと同じ形状であり、Laptopの充電器としても使える。また、USB端子もでている。つまり、この充電器と電池1セットで、Macbook系、Del系、Lenovo系の全てに対応できる。この充電器をLiIon電池に接続し、充電しながらLaptopにも電源供給することもできる。
  4. 電池には緑色LEDが5個ついていて、残電池量が分かる。Laptopに繋がずに電源ボタンを3秒長押しをすると残りバッテリ量がわかる。
    ただし、充電中は充電完了の容量は示しておらず、一番上のLEDが点滅中は充電中を示している模様。
  5. 充電時間はフル放電から完了まで。3〜3.5時間らしい。
  6. LiZone電池にも充電器にも"Lizone Extra Prp Technology"という技術が導入されているらしく、繋いだLaptopに対応して最速で充電するのに最適な電圧に制御するらしい。
  7. 通常の製品では、供給電力の35%分が、AC入力から充電、電池ロス、Laptop電圧変換で失われるが、この製品は20%に抑えられているとのこと。
  8. 日本語を含む各国語のマニュアルが付属
  9. 重さ: Sサイズ 26,000mAh 566g,  Mサイズ 40,000mAh 850g, Lサイズ 60,000mAh 1,130g
LiZoneの付属品:上段:電池用のポシェット
中段、左から:Mac用のMagSafeケーブル(MagSafe2アダプタをつけてある)
Dell用ケーブル、Lenovo用ケーブル、
専用充電器と電池用ケーブル、ACケーブル、Li

専用充電器で充電中のLiZone電池

MacbookPro充電回数の計算)

  1. LiZone 20,000mAh * 5V = 130Wh
  2. MacbookPro Late 2013 Retinaの電池: 71.8Wh (11.34V)
より計算すると、MacbookProが 130/71.8 = 1.8回充電できる計算になる。


機内持ち込み)
LiIon電池は発火の恐れがあるため、機内持ち込みは制限さされている。LiZoneのマニュアルにも、航空会社に確認してくださいとある


  1. JALでは、http://www.jal.com/ja/safety/airport/baggage.html に以下のようにある。含有量はわからないが、定格上は最小サイズのものなら一つ持ち込み可能。一人あたりの持ち込み個数は制限なしとある。

    ・リチウム電池はリチウム含有量が2g以下のもの
    ・リチウムイオン電池はワット時定格量が160Wh以下のもの
  2. ANAの規定も http://www.ana.co.jp/wws/us/j/asw_common/guide/baggage_caution.html にあり、JALと同じ内容。
  3. タイ航空では機内持ち込みは32Ahまでらしいので、20Ah品ならOKだが上位の40Ah, 60Ah品は持ち込み不可。


とりあえずやった内蔵電池を長く使うための対策)

  1. 電池食いのGoogle Chromeを筆頭に余分なアプリを止める
  2. WiFiを止める。
  3. 休憩やお昼時間は電池を充電する。ただし、目の届かないところに置くと、盗まれる可能性がある(それが米国のスタンダード)ので、コーヒーや食事を持ってきて、コンセント近くのテーブルで食べながら充電とか。。これが、また面倒くさい。
  4. 充電しながら使うのが一番電池消費が少ないので、WiFiやブラウザを使うときは、休憩中にそういう形で行う。
MacbookPro用の交換電池)

これもamazon.com で、$66.8の http://amzn.to/1OwCVlc (以下写真)を購入した。Appleで交換してもらうと、部品代$100, 工賃 $100らしい。工具付きでも、さらに安い電池もあるがが、review結果が高いこれにした。

LQM製のMacbookPro用交換LiIon電池

到着した品物


が、やり方をググってみて、http://www.theregister.co.uk/2013/10/25/macbook_pro_2013_teardowns/ の記事。FixItによる分解記事の引用が見つかった。

2013 Late MacbookPro 13inch/15inch  Retinaは、電池がノリ(両面テープ)で、しっかり張り付いているので剥がすのが大変だった。ムリに剥がしたら、(下にあって、電池に張り付いていた)タッチパッドのケーブルが引きちぎれた。

とある。。写真も記事から引用した。

MacbookPro内蔵の電池が劣化して膨れたためタッチパッドのクリックが反応しにくくなっているが、ムリに電池を交換してタッチパッド自体が使えなくなるのも困る。しばし思案中。

2016年1月1日金曜日

ビデオサーバプログラムのその後の更新

2015年1月16日金曜日 Linuxを用いたテレビ録画Serverでのロケフリ視聴が快適


で投稿したビデオサーバはその後も便利に使っている.
その後,いろいろカスタマイズしたので,列挙しておく.

カスタマイズ内容)
USからsshで入って,コンソールからphp, html, cgi等を書き換えている.バグで時々 htmlが表示されなくなったりするが,console logで分析状況を表示してデバッグしてから,最後に本当にdatabaseを書き換えるようにすれば,databaseを壊すこともなく,デバッグできている.米国から日本にアクセスする距離もあるがpingで測る限りは往復144ms程度なので,sshでtext baseでやる限りはあまり気にならない.(remote desktopのようにグラフィックベースで,echo backする状況で文章を書くと,遅くてイライラするが....)

以下リスト1,2,4,5への対応状況がわかるスクリーンショット(2015/12/31時点のもの)を以下に引用する.

3TBのHDDを使って,H.264のSD画質 (640x360)で保存している(画質は,普通の番組であれば27インチフル画面で十分満足できるレベル) なので,相当に大量に録画可能である.ほぼほぼ満杯になったときのために,自動消去する機能はまだ必要性を感じていない.

録画済一覧のスクリーンショット


  1. mpeg2(1080i HDTV)からH.264(640x360)に変換する ffmpegでエラーが出る番組があるので,設定を解析し修正.主に以下への対応が必要だった.ffmpegで分析し,perlスクリプトで結果を解析し,ffmpegへの変換オプションを作成するよう自動化している.
    1. 解説音声,副音声のあるもののストリーム番号への対応
    2. 2014/4月の朝ドラ新編成で一旦TS(mpeg2)の録画ストリーム番号が変わっていたので,自動検出するように変更
    3. 常に変換ログをvideo置き場に残している
    4. 録画スクリプトは簡単に変更できて,オリジナルのTSファイルを残すこともて設定で変更可能.常に残すとdisk spaceを圧迫する
  2. サムネイル右クリックメニューで,mp4をダウンロードできる.これを追加して,
    1. TSが残っているときに,番組サムネイルを右クリックすればTS(HD画質)をダウンロードできるようにした.
    2. 番組説明ではmp4ファイルを流す.Google Chromeでは,自動的に動画viewerが立ち上がるが,IEやSafariではダメ.右クリックしてダウンロードしてからquick time playerとかで再生するしかない.
    3. 本来は,AFCファイルを流す.これは番組説明のクリックとして残した.が,どのブラウザもAFCは表示できない.画像ビューアVLCでは表示可能なので,ブラウザ設定でAFC型ファイルとVLCを関連付ければ可能かもしれない.
    4. ダウンロードしたmp4ファイルは,拡張子を.m4vに変えるとiTunesで再生可能だし,そのままiPhoneに転送して再生可能.
  3. git repositoryを作り,commitする.
    1. 適宜,repository等はcroneでNASにバックアップする.
    2. .htaccessに不備があり,ログイン許可を書いたファイルが外部アクセスされ変更されていた.git statusで発覚.firewallのログから,アクセスが合ったのはアジアの近隣国.ログイン許可ファイルを修正したが,git statusから再度別方法でファイルが変更されていた.ここの穴も塞ぐと同時に,webからアクセス可能なipアドレスを変更.以降,不正アクセスは発生していない.
      BBrouterに穴を開けたり,外部アクセス可能なサーバを設置するときには,不正アクセス対策に加えて,容易に不正アクセスを検出できる手段が必要だと痛感した.
  4. 録画済み一覧に,録画数,利用disk space,平均録画サイズ,可能録画本数の予測を表示するようにした.これは,recordedTable.phpを修正し,system()コマンドで,ls -al からawkをpipeで流すようにして値を求め,対応するtemplates/recordedTable.htmlを修正して表示している.
  5. 録画済みの各エントリに,ファイルサイズをMBで表示する.
  6. 一部を公開できるようにした.
    1. 公開用のdirectoryを作成し,そこにパスワード無しでアクセスできるindel.htmlを作成
    2. 上記directory配下のビデオ置き場に録画済みファイル(.mp4)をln すると,自動的に.mp4をlsするようperlのcgiスクリプトを作成し,それをデフォルトのhomeとして公開
    3. 公開・非公開はlnコマンドとrmコマンドでハードリンクを変更するだけだが,録画済みファイルが増えてくると面倒なので,録画済み一覧に列を追加して,公開・非公開のボタンを設置.表示時にphpで公開用directoryにファイルがあるかないかで,表示を切り替えている
      1. 今後,ボタンを押すことで公開・非公開を切り替えられるようにしたい.
  7. 時々,録画が終わっても録画予約にあるエントリが残ることがある.これは,録画予約データベース(RESERVE_TBL)のcomplete フィールドが0のまま残るため.この状態だと,録画済み番組ファイルの削除もできない.
    1. そこで,録画予約表示で使うreservationTable.php を改造し,録画予約状況表示時に録画終了時刻よりも現在時間のほうが遅いときには,強制的にcompleteフラグを立てるように変更(Smartyを使っているので,対応するPHPの配列を更新するだけであとは自動的に書き戻される).ただし,厳密には以下の様なやり方.
      1. 本来completeフラグを操作するrecorder.phpとの競合回避のため,終了時刻+600秒(10分)と現在時刻を比較している.
      2. 強制的にcompleteフラグをセットしたときには,video/reservationTable.logにフラグをセットした旨を追記する.
        1. PHPでのログの吐き出し方: http://www.php-labo.net/tutorial/php/file.html#write
      3. completeの未設定が検出されたときにも,録画予約表示には該当するエントリも録画予約として表示している.実際には,この時点でMySQLのデータベースが書き換わるので,次回からは表示されない.
  8. 番組表で,現時刻を示す,赤い横のラインが表示されるが,これがローカル時間になる.海外から番組表をアクセスすると本来あるべき日本時間ではなく,ブラウザの時間になる.これは,ブラウザのJavascriptで表示時に時間を取得し,現在時刻表示しているため.そこで,
    1. templates/index.htmlで記述しており,現時刻ラインのIDはtableNowBas
    2. templates/index.htmlに記載されているJavascriptを改造し,UTCのtimestamp( UNIXの秒表示(1971年よりの秒数)をミリ秒で表したもの)を取得,日本時間へ補正し,Date()で,日本時間のnow値を得ている.
    3. デバッグは,Google Chromeのコンソールとコンソール出力を利用.
      ストリング表示すると,timezoneとしては,ブラウザのある地域のタイムゾーンのまま日本時間になるので気持ち悪いが,javascriptではタイムゾーンは見ていないので問題なく動く.
      1. Date()の使い方:
        https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/prototype#Methods
      2. Google Chromeのコンソールの使い方:
        https://developer.chrome.com/devtools/docs/console
      3. console.log('JST now: %s', now.toString()); などでコンソール表示してデバッグしたが,Chromeコンソール専用の出力コマンドもあるらしい..
        See: http://blog.asial.co.jp/1152
今後やりたいカスタマイズ)
  1. 録画予約の高度化
    1. 簡易予約で,開始,終了時間を文字入力ではなく,iOSのような回転文字盤で変更できるようにする.これは,キーボードが日本語モードになっていると変換等でうっとおしいのと,数分ずらすつもりで入れ間違えるとおかしくなるため.
    2. 長時間番組を分割する.例えば1時間ずつセクションにわける.理由は,
      1. mpeg2録画終了後に,バッチでSDに変換をかけている.変換が終了したことは,録画済み番組表でサムネイルが表示できたこととため,長時間番組が見られるようになるまでに時間がかかる
      2. 長時間番組ではスクロールバーでの位置合わせが微妙なうえに,実際にファイルが転送されるまで待つので画像表示開始までに時間がかかる.
    3. 実時間に近い再生をしたい
      1. TSファイルに書き出してから,ffmpegをかけるのではなく,pipeで繋いで実時間transcodeしたい.
      2. さらには,TSファイルやmp4への書き込みが終了するまえに,視聴を開始したい.(実時間表示モード or タイムシフト表示モード)
    4. 消去機能
      1. チェックしておいてまとめて消去する機能
      2. ある時点より古いファイルをまとめて消去する機能
      3. 絞込検索で表示されたファイルに対して,1,2が適用できるようにしたい.
      4. ディスクスペースが減ってきた時に古いファイルから自動消去する機能