たゆたふ。

定まる所なく揺れ動き、いろいろやってみたメモ。など

Mozilla Open Web Day に行ってきた

f:id:HeRo:20141005184118j:plain

台風が近づく中、 3331 Arts Chiyodaで行われた Mozilla Open Web Day in Tokyo に行ってきた。

思ったより人は少なく感じたが、盛況は盛況。Mozilla は大学といくつかの研究プロジェクトをやってたりらしく、参加者の年齢は若く感じた。

最初に以前から気になっていた FirefoxOS 搭載の開発用スマホ Flame の即売ブースがあったので、展示機をいじらせてもらった。スペックからすると、もっとカクカクした動きかと思いきや、結構サクサク動作だったので、衝動的に欲しくなり購入してしまった。隣のブースで売っていた Tech Booster の FirefoxOS 本も合わせて購入。この秋は FirefoxOS 向けのアプリにも挑戦してみよう。

f:id:HeRo:20141005184101j:plain

さて、今回一番気になっていたのは、金曜日に KDDI が発表した開発キットなのだが、実物を見ることができた。 最初に全展示内容の LT 的な発表があったのだが、その中で何やら重大発表があるという。後ほどのセッションをお楽しみにと勿体つけるので、楽しみにしながら、Open Web Board の実物デモをみた。

f:id:HeRo:20141005184110j:plain

f:id:HeRo:20141005184114j:plain

Open Web Board 本体は上の 1 枚目の写真の上部の USB メモリみたいなやつ。結構小さいが、HDMI 端子と USB-A 端子、WifiBluetooth を備え、Zigbeeバイスや mbed とも接続容易で、USB 端子に Web カメラだって接続可能という拡張性の高い設計。まさに IoT のためのデバイス。なかなか良さそうだ。 デモではセンサーからの入力を Zigbee 経由で Open Web Board で集め、Websocket でサーバに送信しているという。 Gluin という Web ベースのデバイス管理ツールも提供され、デバイス間の連携も簡単に行えるらしい。自分は組み込み系のエンジニアではないので、JS を使って拡張できる仕組みが用意されているのは助かる。

このイベントの冒頭で Mozilla 代表の瀧田さんもおっしゃっておられたが、FirefoxOS を IoT デバイスにも活用しようとしているらしい。Arduino にもチャレンジしたがやはり馴染みのない言語を覚えないといけないのはとっつきにくかった。FirefoxOS をなら JS で実装できるので、Web 系エンジニアにも始めやすだろう。 今後、Open Web Board はハッカソン等のイベントで配布するという。是非参加したいな。

あと、OpenStreatMap の人も参加していて、最近の OpenStreatMap についていろいろ聞くことができた。以前からかなり進化しており、びっくりした。特に地図を登録するツールが使いやすくなっていたので、久々に使ってみようと思った。

おっと、書き忘れそうになったが、重大発表というのは au から FirefoxOS のスマホが年内、クリスマス時期に出るらしい。わざわざ社長がビデオメッセージで発表したので出るのだろう。端末のデザインにも力を入れているとのことなので、こちらにも期待。

Chcolatyを使ってみた

普段、MacLinux を使っていてあんまり Windows を使う機会が減っているのだが、久々に Windows を触ってみた。

Windows って初期からセットアップしようとするとあちこちからインストーラをダウンロードしてって作業があるので LinuxMac よりめんどくさいと思っていた。 apt や homebrew の様にコマンドラインからソフトをインストールできるという Windows 版パッケージマネージャで以前から気になっていた Chocolatey を試してみた。

インストール

インストールする前に Windows update で最新にしておく。インストールしたばかりの Windows だとそうしないと .NET フレームワークがインストールされていなくて warning が出ることがある。

cmd を管理者モードで起動する https://chocolatey.org/ をブラウザで開き、そこに乗っている次の文字列をコピー&ペーストする。

C:\Windows\system32>@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

少し時間はかかるが、後は自動的にインストールされる。

インストール後の確認として chocolatey version を実行してみる。 これも若干時間がかかるが次の様な出力が表示されればインストール成功。

C:\Windows\system32>chocolatey version


name          : chocolatey
found         : 0.9.8.27
latestCompare : 000000000000.000000000009.000000000008.000000000027
verMessage    : Latest version installed
latest        : 0.9.8.27
foundCompare  : 000000000000.000000000009.000000000008.000000000027

パッケージのインストール

一度インストールしてしまえば、いろんなソフトウェアが cinst コマンドを使って簡単にインストールできる。

例えば、Git と Ruby をインストールするなら次のコマンドを実行すれば、ダウンロードからインストールの作業が自動的に実行される。

cinst git ruby

これまで、それぞれの配布サイトに行ってインストーラーをダウンロードしていたのと比べるとなんと便利なのだろう。

また、GitHub が開発しているエディタ Atom も今のところ Windows にインストールするには chocorateyを利用することを勧めている

その他にも JDK などもインストールできる。 インストールできるパッケージはChocolatey Software | Packagesで探すことができる。

一度使ってしまうと便利で手放せなくなった。

RubyでExcelファイルをCSVの様に読み込む

集計したいデータが Excel 形式で提供されることがある。 数が少なければ ExcelLibreOffice などで CSV に変換してから扱えばよいが、ファイル数が多いと面倒。

Excel ファイルの読み込みだけで書き込みがない、しかも Ruby で扱うなら、excel2csv が便利。 Excel ファイルを CSV のように読み込むことができる。

インストール

gem で簡単にインストールできる。

gem install excel2csv

もちろん、次の様に Gemfile を作って、Bundler を使っても良い。

gem 'excel2csv'

基本的な使い方

次の様な Excel ファイルを読み込んでみる。

f:id:HeRo:20140920163022p:plain

次のように foreach メソッドで行ごとに読むことができる。

require 'excel2csv'

def read_excel(filename)
  Excel2CSV.foreach(filename) do |row|
    p row
  end
end

read_excel 'sample.xlsx'

実行結果は次の通り。

["cell-A1", "cell-B1", "cell-C1", "cell-D1"]
["cell-A2", "cell-B2", "cell-C2", "cell-D2"]
["cell-A3", "cell-B3", "cell-C3", "cell-D3"]

結合されたセルや、複数シートも読める

次の様に結合されたセルも読み込むことができる。

f:id:HeRo:20140920163121p:plain

結合されたセルは左上のセルに値が入っているものとして扱われ、実行した結果は次の様になる。

["cell-A1", "cell-B1", nil,       nil]
["cell-A2", "cell-B2", "cell-C2", "cell-D2"]
["cell-A3", nil,       "cell-C3", "cell-D3"]
[nil,       nil,       "cell-C4", "cell-D4"]

複数のシートがある場合、デフォルトでは 1 シート目を読むが、foreach メソッドに sheet オプションで指定することで 2 シート目以降も読むことができる。 次の例は 2 シート目を読むこむ例。

require 'excel2csv'

def read_excel(filename)
  Excel2CSV.foreach(filename, sheet:1) do |row|
    p row
  end
end

read_excel 'sample.xlsx'

また、例では xlsx 形式のファイルを使っているが、xls ファイルも問題なく読み込める。