2015年5月12日火曜日

Visual Studio Code + mono で、Webサーバーがシャットダウンできない

地味な小ネタです。

AppleWatchやらドローンやらIoTっちゅーかFlashAirやらインフラやらの合間に、
MacOSX に Visual Studio Code を入れてみました。

このサイトが一番確実ですね。
http://qiita.com/TsuyoshiUshio@github/items/48d28d123239fea4c42d

で、このサイトのチュートリアルを進めていったんですが、
https://code.visualstudio.com/Docs/codebasics

kestrel(開発用Webサーバー)をシャットダウンする方法が見当たらない。

そんなときは、「control + z」で停止して、monoプロセスをkillします。
なんと原始的なw

2015年5月11日月曜日

AppleWatch買って思ったこと

まだ2000年の頃、周りに「パソコンからキーボードとマウスを無くさないとダメだ」と言ってきた。
パソコンの画面が机の上のメタファー「デスクトップ」なら、書類を手に取り書き込んで、ポストに投げるようにメールに添付して相手に送信し、ポイっとゴミ箱に捨てる。
オフィスをコンピューターに再現するなら、隣り合ったパソコンのデスクトップをレイアウトした仮想空間があってもいいだろう。

それから15年たって、キーボードやマウスを必要とする割合は減ってきた。
携帯が普及し、iPhoneが登場し、iPad以降安価なパソコンはタブレットへ。
机の上にあった書類は、今やクラウドへ。

そしてAppleWatch。
もちろんスマートウォッチは以前からも出ているが、Appleが出したことでそれなりに知名度を得ていくジャンル。
買ってしばらく使ってみて、なかなかの発見があった。

そもそも、クラウドが登場して以降、このような全体像をある程度のゴールとして定義することができるだろう。



自動的にある程度のデータを取得してクラウドに集約し、手元のデバイスをビューワーとしてみるアレだ。

AppleWatchを使って気づいたことというのは、ビューワーにどのぐらいの情報量があればいいのか、だ。
メッセージなどの着信は、最低限の事柄(誰から、内容のサマリー、など)がわかれば良いとすると、今までスマホを取り出して見てたときと比べると、あっという間に確認できてしまう。
その程度の情報、というとアレかもしれないが、これで事足りる場面が多いと感じた。

メガネをまったく付けない自分は、GoogleGlassなどのメガネ型デバイスは正直不快だったのだけれども、腕時計ならOKかなーと。

今後の期待するポイントは、心拍数以外のあらゆるバイタルサインのリアルタイム計測だろうか?
脳波なども皮膚の電気信号から計測できるので、いろいろ期待しちゃうところでしょうか。

2015年4月9日木曜日

CentOS7のfirewalldは設定すべき?

以前Perconaの話を書いたときに、「firewalldをオフ」的なことを書いていました。
もちろん、とりあえずやってみる趣旨だったので、関係無いところでハマらないように配慮した結果なのですが。

では、CentOS7のfirewalldは有効にすべきなのでしょうか?

様々な環境で運用されるかと思いますが、ルーターや手前のファイアーウォールなどで一括して対応する場合もあれば、サーバー個々に設定するところまで必要な場合もあります。

うーん...

Azureの場合を考えてみましょうか。
エンドポイントに一応ACLが付いていますが、同じ仮想ネットワーク内のホストが乗っ取られた場合を考えた場合、firewalldはあった方がいいかもしれませんね。

そういえば、CentOS6までのiptablesのルールは「/etc/sysconfig/iptables」に書いてありましたが、firewalldの場合はどこにあるのでしょうか?

答えは「/etc/firewalld/zones/」の下のXMLファイルです。
Azureの場合、CentOS7の仮想マシンを立ち上げると、有効なzoneは「public」だけですので、「/etc/firewalld/zones/public.xml」になります。
中を見てみましょう。

[root@cocteau7 ~]# cat /etc/firewalld/zones/public.xml
  Public
  For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.
 
 

デフォルトで、dhcpv6-clientとsshが許可されています。
ここに直接記述しても良さそうですね。

起動時にfirewalldを有効にしてスタートするには、こうします。
[root@cocteau7 ~]# systemctl enable firewalld
ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/basic.target.wants/firewalld.service'

[root@cocteau7 ~]# systemctl start firewalld

詳しい設定などはこちらをどうぞ。

面倒でも、firewalldを使ってみてはいかがでしょうか?

2015年4月6日月曜日

FlashAir+Airio、luaでLチカ

Airioは、FlashAir評価ボードです。
http://yone2.net/airio

HTMLからボードでLチカできるんですが、もちろん私はluaスクリプトですよ。
以下のソースを置いて、ブラウザから実行するだけ。

print("\r\n\r\n")

print(fa.pio(0x1e,0x02))
sleep(1000)
print(fa.pio(0x1e,0x08))
sleep(1000)
print(fa.pio(0x1e,0x04))
sleep(1000)
print(fa.pio(0x1e,0x0C))
sleep(1000)
print(fa.pio(0x1e,0x06))
sleep(1000)
print(fa.pio(0x1e,0x0A))
sleep(1000)
print(fa.pio(0x1e,0x0E))
sleep(1000)
print(fa.pio(0x1e,0x00))


1秒ごとに赤、緑、青、シアン、マゼンダ、黄色、白、消灯とLEDの色が変化します。

CONFIGに「IFMODE=1」を追加するのを忘れずに!

2015年3月20日金曜日

FlashAirとMicrosoftAzureを連携してやる(ダウンロード編)

引き続き、ダウンロードもしてやりましょう。

なお、認証が難しいので、今回はAzureストレージのコンテナの設定を「パブリックBLOB」にします。
秘密の画像は置かないように。

まず、SDカードに次のプログラムをおきましょう。
$ vi /Volumes/FLASHAIR/download.lua
local function waitWlanConnect()
    while 1 do
        local res = fa.ReadStatusReg()
        local a = string.sub(res, 13, 16)
        a = tonumber(a, 16)
        if (bit32.extract(a, 15) == 1) then
            print("connect")
            break
        end
        if (bit32.extract(a, 0) == 1) then
            print("mode Bridge")
            break
        end
        if (bit32.extract(a, 12) == 1) then
            print("mode AP")
            break
        end
        sleep(2000)
    end
end

waitWlanConnect()

res = 0

while 1 do
  res = fa.HTTPGetFile("http://アカウント.blob.core.windows.net/コンテナ名/ファイル名", "/DCIM/保存するファイル名")
  sleep(600000)
end



FlashAirのLuaには、sleep関数(引数はミリ秒)が追加されています。親切設計です。
Wi-Fiに接続するのを確認して、定期的にファイルをダウンロードする仕様です。

このプログラムを起動時(SDカードを挿したとき)に実行するように設定します。
$ vi /Volumes/FLASHAIR/SD_WLAN/CONFIG
LUA_RUN_SCRIPT=/download.lua


ネットワーク設定などは前回を参考に。

これで定期的にファイルが増える(すでにあるファイルは後ろに番号がつく)のが確認できるかと思います。

こうやって見ると、Azureだからと言って特別なことは少ないのかなー




2015年3月18日水曜日

FlashAirとMicrosoftAzureを連携してやる(アップロード編)

東芝から発売されているSDカード「Flash Air™」をご存知でしょうか?
SDカード+Wi-Fi機能という、なかなかのものです。
http://www.flashair.info/

それだけなら、Eye-Fiとかでいいじゃん、と思うかもしれません。
ところが、こいつはLuaスクリプトを実行できるんですね。
さらに、PIO制御ができたり、なんか狂ってて素敵ですね。
そんな開発者向け情報はこちらで。
https://flashair-developers.com/ja/

なんとなく気になったので、もちろんMicrosoftAzureと連携してみます。

新しいファイル(sample.jpg)が追加されたら、MicrosoftAzureのBlobにアップロードする、というのをやってみましょう。
ただ、Azureストレージの認証ヘッダーをFlashAirだけで作れないので、セキュリティも考慮してPHP経由でアップロードしたいと思います。

まずは、FlashAirがインターネットにつながるように設定します。
Macなら、ターミナルで隠しフォルダと隠しファイルが直接編集できます。
カードの名前を「FLASHAIR」とします。

$ vi /Volumes/FLASHAIR/SD_WLAN/CONFIG
APPMODE=5
APPSSID=HWD15_581F28C13B88
APPNETWORKKEY=***************
LUA_SD_EVENT=/upload.lua

変更箇所だけ説明します。
APPMODEの初期値は4 (無線LAN親機)ですが、5(無線LAN子機)に変更します。
APPSSIDに接続するSSID、APPNETWORKKEYにはパスフレーズを設定します。
これで次回起動時に無線LANにつながります。
LUA_SD_EVENTは、カードにファイルが追加された際に発生するイベントで、そのタイミングで実行するLuaプログラムを指定します。
今回は、カードの「/」にあるupload.luaを指定します。

upload.luaは以下の内容です。
以下の例を参考に、PHPでのアップロードに必要なMAX_FILE_SIZEを追加します。

アップロード先は、今回はAzureWebSites上のPHPです。

$ vi /Volumes/FLASHAIR/upload.lua
boundary = "--1234567890"
contenttype = "multipart/form-data; boundary=" .. boundary
filepath = "sample.jpg"
mes = "--"
  .. boundary .. "\r\n"
  .."Content-Disposition: form-data; name=\"MAX_FILE_SIZE\"\r\n\r\n800000\r\n"
  .."--" .. boundary .. "\r\n"
  .."Content-Disposition: form-data; name=\"file\"; filename=\""..filepath.."\"\r\n"
  .."Content-Type: text/plain\r\n"
  .."\r\n"
  .."\r\n"
  .."--" .. boundary .. "--\r\n"

blen = lfs.attributes(filepath,"size") + string.len(mes) - 17

b, c, h = fa.request{url = "http://flashair.azurewebsites.net/up.php",
  method = "POST",
  headers = {["Content-Length"] = tostring(blen),
  ["Content-Type"] = contenttype},
  file = filepath,
  body = mes
  }


次は、アップロード先のPHPプログラムです。
Azure SDK for PHPの準備(https://github.com/Azure/azure-sdk-for-php)と、Azureストレージの設定とコンテナの作成が別途必要です。

$ vi up.php
require_once 'bin/vendor/autoload.php';
use WindowsAzure\Common\ServicesBuilder;

$account = 'Azureストレージのアカウント';
$key = 'アクセスキー';
$container = 'アップロード先のコンテナ名';

$connection = 'DefaultEndpointsProtocol=https;AccountName=' . $account . ';AccountKey=' . $key;
$blob = ServicesBuilder::getInstance()->createBlobService($connection);

/* save file */
$a = time();
$filename = "blob_" . "$a";
move_uploaded_file($_FILES['file']['tmp_name'], $filename);

/* upload Blob */
$content = fopen($filename, "r");
try {
  $blob->createBlockBlob($container, "claudia.jpg", $content);
} catch (Exception $e) {
}
fclose($content);

unlink($filename);


これで、sample.jpgというファイルをFlashAirに書き込むと、Azureストレージに自動でアップロードされます。

サンプル程度ですが、興味があればどうぞ。



2015年2月10日火曜日

心霊写真とか電子音声現象とか

電子音声現象を捉えるガジェットが発売される予定だそうだ。
http://www.ghostark.com/

詳しくはBingっていただくとして、記録装置がデジタル化していく過程で
明瞭に解析できることは興味深い。

しかしながら、アナログからデジタルに移行して最近あまり聞かなくなったものもある。
私が子供の頃は「心霊写真」というものが大変人気(?)があった。
フィルムになんらかのものが映り込む、アレである。
さらに古くは、フィルムに「念写」するというのもあった。(映画リングを見ましょうw)

これらは、解像度が低い故に幅広い解釈も可能なものが多かったように思う。
音声についても、20世紀頭から電子音声現象は捕らえられているが、
やはり不明瞭なものが引き起こす部分も多かれ少なかれあるのではないかと。

ただし、これらのものが全てが霊ではないとも言い切れないだろう。
世の中の多くのことはまだ解明されずにいるから。

「GhostARK」を買って考えてみようかな…。