2016年2月16日火曜日

プレゼンテーションは楽しむものか

私は仕事柄、依頼を受けたソフトウェアを「こんな風に実現します」ということを説明したり、立場上会社の説明を人前ですることが時々あります。本当に時々です。
でも私は全くもってこのスピーチとかプレゼンテーションが不得意科目で、少人数のまえでも熱い視線を感じると即座にアウアウアウアウアーとなってしまいます。
安定のド緊張チキンです。

そこでこのTEDを見て、スピーチとかプレゼンテーションの本質は何かを考えました。


正直な話、ウィル・スティーヴンは何を伝えたかったのかわかりません。
リスナーが彼の伝えようとしていたことを勝手に解釈すればいいのかもしれません。

個人的には人前で話すことを「楽しんでみたらどうよ?」って推奨しているかのように感じましたね。
こんなふうに自信をもって人前で話せるようになりたいす。

(完)

2016年2月5日金曜日

Arduinoはじめました(環境構築編)

「Arduinoはじめました」の第2回目、今回は開発環境の構築といきます。
まず前提ですが、こちらの環境はMacBook Pro、OSはYosemiteです。

では早速ソフトウェアを落としてきてインストールしましょう。
ソフトウェアのダウンロードは以下のリンク先から、Arduino謹製IDEです。
Windows、MAC、Linuxとあるので、自分がこれだと思ったものをダウンロードします。
https://www.arduino.cc/en/Main/Software

インストールは端折ります。

ではさっそくIDEを起動してみましょう。
素敵ですね、何の前触れも下準備もなく、しかもなんとなく何をしでかすのかわかるファンンクションネーム。
さあこれさえあればArduinoで実行するプログラムを作って、作成したプログラムをArduinoへ書き込んで、デバッグ用にログを表示するコンソールも準備完了。
環境構築\(^o^)/オワター
続いていちばん楽しみな、OSOYOO UNOとMacをUSBでつなぎますドキドキです。
およ、基盤の右側にあるグリーンのLEDが点灯してすんなり起動。
ちょっとは問題にぶち当たりたいかも。
嘘です。

さてここまできたら接続を確認します。
ArduinoのIDEをアクティブにして、メニューバーの[ツール]にマウスカーソルをあてて「マイコンボード」と「シリアルポート」になにやらデバイス感があればOKでしょう。
それでは今回の〆です。
OSOYOO UNOとMacをつないだときの写真、基盤中央よりちょっと左の上にあるオレンジのLED、その名も”L(える)”、こいつが点滅するプログラムを書いてボードに書き込んでみます。コードを書いて ➡︎ のアイコンをクリックするだけです。
void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13, HIGH);
  delay(100);
  digitalWrite(13, LOW);
  delay(100);
  digitalWrite(13, HIGH);
  delay(100);
  digitalWrite(13, LOW);
  delay(1000);
}
ちょ、たのしぃ。。。

2016年1月23日土曜日

Arduinoはじめました (出会い)


冬ですが夏を感じさせるタイトルで失礼します。

去年のクリスマス、長男にサンタさんからプレゼントがありました。

↓こんなのです
  

黒いサンタは子供をハッカーにしようとしているのかもしれません。
長男がテキストを進むにつれ、父はLEDとコンタクトスイッチとブレッドボードとジャンパーワイヤが必要となることを知ります。
そして父は自分の体温が上昇しているのを知ります。
インターネットを徘徊し、お得感最強な一品を探しだしAmazonしました。

↓こんなのです

電子部品だけでも個別に買えばいいお値段しそうですが、Arduino互換ボード付きで¥3,780(当時)です。
私はプライムな人間なので、その日のうちにこの互換ボードと出会うことになります。



OSOYOO・・・ 
「おそよお」と読むのでしょうか、寝坊した時の挨拶のようです。

そしてこの日の夜、OSOYOO UNOはキット同梱のUSBケーブルで、自身のMacBook Proとめでたく結ばれることになります。

このキットの詳しい説明はコチラ

To be continued...

2015年11月30日月曜日

CoffeeScriptのススメ

CoffeeScript は、シンプルな記述でJavaScriptのコードを生成するための一種のコンパイラです。
これにより、冗長な記述や誤りが入り込みやすい部分を、よりシンプルに記述することが可能になります。
そのCoffeeScriptでクラスを記述してみたいと思いますが、その前にライブラリをインストールします。
ここでは、Node.jsを既にインストール済みであることを前提とします。

$ npm install -g coffee-script

グローバル・オプションでインストールしました。これでCoffeeScriptのインストールは完了です。
コンパイルのコマンドは以下のようになります。

$ coffee -c hoge.js.coffee

CoffeeScriptによって記述された hoge.js.coffee をコンパイルすることにより、hoge.js が生成されます。
この流れが基本です。

JavaScriptにはクラスという考え方が存在せず、prototypeというクラスに似た考え方を利用して、あたかもクラスを実装しているように見せかけていますが、CoffeeScriptでは、classキーワードを使用してクラス定義を記述できます。

# TVクラスを定義
class Television
  # チャンネルプロパティを定義します。
  ch: '7'

  # 引数としてnameを受け取り初期化をするコンストラクタを定義します。
  constructor: (@name) ->

  # メソッド watach を定義
  watach: ->
    alert "#{@name}で#{@ch}を視聴中 ..."
    return

# Usage;
tv = new Television 'television'
tv.watch()


var Television, tv;
Television = (function() {
  Television.prototype.ch = '7';

  function Television(name) {
    this.name = name;
  }
  Television.prototype.watch = function() {
    alert("" + this.name + "で、ch " + this.ch + "を視聴中 ...");
  };
  return Dog;
})();

tv = new Television('4Kテレビ');
tv.watch();

結果は ...
「4Kテレビで、ch 7を視聴中 ...」


CoffeeScriptの @は、thisとほぼ同じ意味でインスタンス・プロパティへの参照です。
また、()なども省略可能で、インデントにより表します。このあたりは、Rubyや、Python、または、Jadeに似た感覚です。

2015年11月14日土曜日

DockerでGUIアプリケーションを動かしてみる

高性能なIDEなどを構築するのはとても手間な作業だと思います。
この実験がひとつの発火点になれば、より合理的に仕事ができるようになるかもしれません。

まず、以下のような Dockerfile を用意します。

FROM ubuntu:14.04

RUN apt-get update && apt-get install -y firefox
RUN export uid=1000 gid=1000 && \
    mkdir -p /home/developer && \
    echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
    echo "developer:x:${uid}:" >> /etc/group && \
    echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
    chmod 0440 /etc/sudoers.d/developer && \
    chown ${uid}:${gid} -R /home/developer

USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox

そして、イメージを作成します。
ビルドにはしばらく時間がかかります。

$ docker build -t kenny/gui-docker .

次に run します。

$ docker run -ti --rm \
       -e DISPLAY=$DISPLAY \
       -v /tmp/.X11-unix:/tmp/.X11-unix \
       gui-docker

すると Firefox が起動します。























たったこれだけの実験なのですが、ひとつ可能性の地平が拡がりました。




2015年11月11日水曜日

Docker ver. 1.9 を発表

米Docker が現地時間(11月3日)にバージョン1.9を発表しました。
大きなポイントとして、マルチネットワーキングへの対応と永続的ストレージ関連の強化あたりでしょうか。

ひとつめは、コンテナの配備に関係なく仮想ネットワークと紐付けてコンテナの通信を完全に制御できるという点です。複数のホストにまたがって仮想ネットワークが構築できるようになります。
つまり、仮想ネットワークで抽象化され、どのホストでコンテナを実行するのか、という事実を隠蔽します。今回は安定板という位置づけなので本番環境での利用も可能です。

つづいて永続化ストレージに関して
1.9ではボリュームシステムが完全に再設計されたようです。データボリュームは複数コンテナで共有できるようになります。また、Swarmとの連携で、たとえばクラスタ全体での永続化を管理できるようになります。

その Docker Swarm ですが、今リリースから ver1.0 に到達し正式版になります。
コンテナで構成したクラスタのスケールが自動的に管理されるようになります。

オーケストレーションの Docker Compose は、ver. 1.5 になりました。
今回からWindowsのサポートも加わりました。
Swarm上でComposeのアプリケーションを複数のホストにまたがってデプロイすることが可能になります。

以上、Docker 1.9 のバージョンアップの要点をまとめました。

2015年11月9日月曜日

MongoDBをDokcerに隔離してマニュアル操作する

まずは、MongoDBのコンテナを作成します。

$ docker pull mongo

Latestは3.2です。
早いです。
11月5日に MongoDB Blog でアナウンスされたばかりです。3系の最新版ということになります。
軽く主な変更点に触れておこうと思います。

1)注目はストレージエンジンです。負荷状況に応じた最適化の選択肢の設定を行いやすくなった点です。これにより複数のストレージ稼働でのスケールがより柔軟になり運用の負担を軽減します。
2)ドキュメントバリデーションも強化されました。
3)インデックス作成時にフィルタをかけることによりメモリ容量を節約する。
4)BIコネクタ (BI Connector) が導入されました。

主なところをリストしてみました。
BIコネクタの導入は簡易なBI分析に向けて、ビッグデータ的な大がかりではないようなちょっとしたことがいろいろ可能になるような夢を感じますね。

では、pullしたmongoDBコンテナを起動します。

$ docker run --name mongo-sampler -d mongo:latest

さて、起動したら念のため ps で確認してみてください。
クライアントを起動してMongoDBを扱いたいわけですが、ホスト側のローカル環境にはMongoのコマンドは存在しません。
そのために、クライアントの役割を演じるコンテナをひとつ起動します。

$ docker run -it --link mongo-sampler:mongo --rm mongo sh -c 'exec mongo "$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/sample-db"'

MongoDBの操作が終わればクライアントのコンテナは必要なくなるので -rm でオプションを設定して、これからログインするコンテナを抜けると同時に終了するように設定します。
--link で既に起動してある MongoDB のコンテナに接続します。
sh -c でシェルスクリプト経由で、$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT のコマンドを実行します。内容は、Dockerで自動的に生成される環境変数でMongoDBのIPアドレスとポート番号を参照するようにします。
最後の sample-db は MongoDB に作成するデータベースです。

先のDockerコマンドを実行するとMongoDBのコンテナにログインするので、作成されたデータベースを使ってみます。

> use sample-db
switched to db sample-mongo

データを投入します。

> db.records.insert({_id:1,title:"MongoDBへテストレコードを投入する。",number:100})
WriteResult({ "nInserted" : 1 })
> db.record s.insert({_id:2,title:"続いてレコードをもう1件投入します。",number:101})
WriteResult({ "nInserted" : 1 })

検索します。

> db.record s.find()
{ "_id" : 1, "title" : "MongoDBへテストレコードを投入する。 ", "number" : 100 }
{ "_id" : 2, "title" : "続いてレコードをもう1件投入します。 ", "number" : 101 }

更新します。

> db.books.update({ _id:2 }, { $set : { title: "上書きします。" } })

確認します。

> db.record s.find()
{ "_id" : 1, "title" : "MongoDBへテストレコードを投入する。 ", "number" : 100 }
{ "_id" : 2, "title" : "上書きします。 ", "number" : 101 }

削除します。

> db.books.drop()
true
> db.record s.find()
>
> exit
bye

そしてプロセスを抜けたので、クライアントのコンテナは消滅しました。
NoSQLを実感してください。