More from: PC/プログラム/開発

光電管計測器への道2

さてマイコンで色々できる気がしてきたので、計測器第1号の作成に入って行きたいます。
まずは、以下の様なシンプルな流れを実装してみたい。
・光電センサのかわりにタクトスイッチで回路作成。
・タクトスイッチをPUSHしたら、マイコン側のリアルタイムクロックからタイムを取得してPC側へ送信。
・PC側では、前回受信したタイム値があれば差を計算して画面表示。

PC側を何で作るべきか迷いました。
環境依存が少なくて、扱いやすい...そんな都合のいいものあるのだろうか?
と思って調べてみると、Arduino系の解説ページでよく使われているProcessingという環境を発見。
試しに使ってみたところ、まさにドンピシャな感じ。
お手軽なのに、Javaのパッケージなどがそのまま使えるのも強いですね。
PC側はこちらで行くことにします。

部品類はArduino エントリーキットで調達した物。
せっかくなので、マイコン側も情報量が多いArduinoで組み込んでみます。
開発環境自体はmbedのほうがクールだけど、開発のリズムはArduinoのほうがいいかな?
単に慣れの問題かもしれません。

色々やってみたらこうなった。

お、意外とそれっぽい!?
ソースはこんな感じです。
あとは光電センサを繋げば使えそう・・・?


光電管計測器への道

作りたいんですよ。
何って、タイム計測器をね。

ソフト部分はともかくとして、ハード部分がサッパリなので手の出せない領域だったんですが
練習会で見かけるあのタイマーの製作者さんが、たまたま某勉強会でマイコン入門講座やってくれるということなんでさっそく参加。
(当日の様子はこちら)

会場で頂いたSTM32 Nucleoのマイコンボードを自宅でためしてみる。

マイコンっていうと、
データシート見てインタフェースボードを自作して(←ここで挫折)
っていう印象があったんですが...

いざトライしてみると、USBケーブルで繋いでブラウザのエディタでコーディングするだけというヒジョーに今風な開発環境。
15分もあればLED点滅まで行けてしまいました。
2015-12-19-1
こりゃすごい。
最近、猫も杓子もIoTって言ってんなという印象があったけど、これだけ簡単になっているならそりゃ流行るなーと。

後日、ブレッドボードと電子部品のスターターキットを購入
2つのLEDを交互に点灯させたり、タクトスイッチからの入力を拾ってシリアルでPCに送ったりという事も、それほど苦もなくできるようになってきた!

2015-12-19-2

なんだかやれそうな気がしてきた〜!
続く


GitHubに移行

お仕事環境のバージョン管理はこれまでずっとSVNだったんですが、本日ついにGitHubに全面移行!

SVNからgitへの移行を参考にしながら
git-svnを使ってSVNからチェックアウトしたリポジトリをGitHubへPushじゃー!

3年目に入ってそれなりのリビジョン数になっているので結構時間かかりましたが、どうにかこうにか移行できました。
開発環境は標準でGitが使えるPhpStormなので、こちらはリポジトリ指定するだけで特に問題なし。

運用面でまだまだ課題山積みとはいえ、ツール系に関してはようやく今風な物が揃ったという感じか。
しかしPrivateリポジトリだとユーザーページのContributionsに反映されないからちょっと悲しい・・・

いやほらちゃんと仕事してるんだってば
contributions


httpsページに接続できない件(wget/curl/HTTP_Request)

つい先日出た現象について覚え書き。
例の脆弱性の件もあるしやっぱり今後は最新版で動かしたいよね。
って事でためしに以下のAmazonLinuxにてお仕事サイトを動かしてみる事に。

$ cat /etc/system-release
Amazon Linux AMI release 2014.03

$ openssl version
OpenSSL 1.0.1g-fips 7 Apr 2014

$ rpm -qa | grep openssl
openssl-1.0.1g-1.69.amzn1.x86_64

$ php -v
PHP 5.5.10 (cli) (built: Mar 27 2014 23:56:37) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies

$ pear version
PEAR Version: 1.9.4
PHP Version: 5.5.10
Zend Engine Version: 2.5.0

ところが別系統システムへの接続で問題が...
内容としてはPEARのHTTP_RequestでAPIをコールというありがちな処理なんですが...
PHP上でAPIのレスポンス自体が取得できない。
(HTTP_Request2じゃない点がアレですがそこは色々な事情があってゴニョゴニョ)

問題を切り分けたいので既存システムとは別にphpファイル作って

require_once "PEAR.php";
require_once "HTTP/Request.php";
$http_request = new HTTP_Request("https://hoge/api");
$http_response = $http_request->sendRequest();
if (PEAR::isError($http_response)) {
  echo $http_response->getMessage();
} else {
  echo $http_request->getResponseBody();
}

動かして見たところ

fsockopen(): unable to connect to ssl://hoge/api:443 

HTTP_Requestに問題ありか?ってことでwgetで試す

$ wget https://hoge/api
--2014-04-18 15:17:25--  https://hoge/api
hoge をDNSに問いあわせています... xxx.xxx.xxx.xxx
hoge|xxx.xxx.xxx.xxx|:443 に接続しています... 接続しました。
OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
SSL による接続が確立できません。

うーむSSLの接続自体に問題があるっぽい。
英語で出てきた一部情報によるとプロトコルのネゴシエーションがどうたらこうたら。
試しにwgetのオプションに
--secure-protocol=TLSv1
をつけてみたら取得成功

ちなみに別のサイトのhttpsページをオプション無しでwgetしてみるとすんなり取得成功。
なんなんだ・・・
普段このあたりを意識する事などないのでなかなか厳しい。

curlでもためしてみるか。
SSLバージョン指定できるオプションがあるようなので

$ch = curl_init();
curl_setopt_array($ch,
  array(
    CURLOPT_URL=> "https://hoge/api",
    CURLOPT_SSLVERSION=>3,
  )
);
curl_exec($ch);
curl_close($ch);

こちらは取得成功。
※CURLOPT_SSLVERSION無しで動かしてみるとNG。

HTTP_RequestにはSSLバージョン指定的なオプションが無いようなので、試しに直接書き換え
/usr/share/pear/HTTP/Request.php
707行目あたりの

$host = 'ssl://' . $host;

$host = 'tls://' . $host;

に変えてみたら取得成功。
やっぱりこのへんか...

HTTP_Request2ではAdapterとしてcURLが指定できるそうなので、そっちに置き換えた上でSSLバージョン指定してしまうのが順当な感じか。
しかしモノがモノだけにさくっと置き換えて完了という訳にもいかず。
ちょっと古めのopensslなら問題無しなんだけどいつまでもそれではちょっと・・・
どうしたもんですかね。

参考サイトにあったようにPHP再コンパイルっていう手もある模様。
phpinfo見てみたらうちも見事にSSL VersionはNSS/3.15.3でした。

参考にさせていただいた事例
ニコニコ動画にhttps(SSL)接続できなかった件
PHPのcurlで"SSL Connection Error."のエラーがどうしても出る時の対策

追記
参考サイトのはてブコメントにて気になる情報。
相手方が古めのIISだとこうなるという。あ・・・
結局、該当箇所だけcurlに置き換えることでどうにかこうにか対応完了

更に追記(2014/10/16)
SSL3.0が無効になってて困ってる事例多数出ているようです


サーバー移転

前々から妄想していたサーバー移転作業が完了!
クラウドの大定番AWSに移行じゃーい!
DBもRDSに!
これだけ贅沢な構成にしても1年間事実上無料とはAmazonさまさまです。

CMSもWordPress最新版を投入してスマフォやタブレットからも見やすいレスポンシボーなサイトに変身だ!
わー今風ぅー!(自画自賛)

せっかくクラウドに変えたんだし本番業務では試せないあんなことやこんなことをしっかり試して
仕事にフィードバックしたいと思う今日このごろ


VirtualBox上のWindowsでemetersが認識しない件

自宅会社ともにMacに統一されて一つ困ったことが。
emetersのアップロードソフトがWindows版しか無い...

しかし
便利な時代になったもので、実機がなくても仮想環境用意すればほとんど困ることはない!
mac版VirtualBoxに、以前使ってたWindows7をインストールして、っと。

ところが
いざemetersを繋ぐと認識しない。
mac側で「取り出し」を選択すると瞬間的にWindows側で認識するんだけど、アップロード前にメーターが取り外されたというメッセージ。

ここはひとつ
Mac OS X 版 VirtualBoxでUSBがうまく割り当てできない場合メモを参考に...

無事アップロードできました。ほっ。


移行

自宅マシンをMBAに切り替えて数年たったものの
業務ではいまだWindowsのままでしたが・・・
そろそろ環境を統一したほうがいろいろと得だなと思い始めた昨年。

そしてついにこの時がっ・・・
仕事の環境もMacへ移行!

2014-02-27.jpg

Retinaにするかどうかは最後まで悩んだんだけど
ディスクやらメモリやらをグレードアップした時のコスト感がどうにも厳しいという結論に至り。
非RetinaのMBPにして光学ドライブ取り外し&SSD+HDD両搭載にメモリは積めるだけ積むという構成に決定。

今のところまだ完全に切り替えられなくて旧マシンといったりきたりする日々ですが
完全移行を果たせば相当な生産性UPだぜ!(と思いたい)