Viewing entries in
KEY

RaspberryPiにサーバをたてよう!

RaspberryPiにサーバをたてよう!

RaspberryPiにサーバをたてよう!

皆さん、こんにちは。KEYチームの矢納です。少し間が空いてしまいました。
過去記事の目次はこちらに移動しました。

今回RaspberryPiにサーバをたてるのにFlaskを使ってみたので、使い方を紹介しようかなと思います。 RaspberryPiにサーバを立てるということで軽量なWEBサーバは何だろうと調べたら、Flaskがヒットしました。

Flask(フラスク)は、プログラミング言語Python用の、軽量なウェブアプリケーションフレームワークである

wikipediaにしっかりと書いてありました(^o^)

では、今回試した事の紹介に入りたいと思います。全てRaspberryPi上実行しています。

1. pip、Flaskインストール

$ sudo apt-get install python-pip
$ sudo pip install Flask

2. サンプル作成

$ mkdir flask && cd flask
$ vi index.py
$ python index.py

WEBサーバが起動したので、http://<IPアドレス>:5000/にアクセス。Hello Worldと画面に表示されます。

3. SSLに対応

3.1 自己証明書の作成

$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key > server.csr
$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
$ rm -f server.csr

作成した鍵たちは任意のところに保存しておいてください。

3.2 FlaskでSSL通信を行う

起動時の設定に証明書を設定

server.crtserver.key は先ほど保存したパスを指定して下さい。

これで https://<IPアドレス>:5000/ にアクセスすると無事にsslでの通信が完了です。

4. Basic認証をかける

こちらのサイトを参考にやってみました。

こちらのサイトに説明になってしまうので、簡単に説明します。

  • decorator.pyの作成
    • ここでID/PASSのチェックを行います
  • FlaskにもFilterのような物が存在しているために、その部分で認証を行う

おわりに

このブログで書いたコードはGitHubにあげてありますので、参考にしてください。 https://github.com/Burning-Chai/Flask

Email: yanou at atware.co.jp

VirtualBox から vagarnt の box 作成

VirtualBox から vagarnt の box 作成

みなさん、こんにちは。KEYチームの矢納です。
過去記事の目次はこちらに移動しました。

プロジェクトでCentOS 5.8(32bit)を使うことがあり、vagrantのboxを探していたのですが、見つかりませんでした。
vagrantのboxは http://www.vagrantbox.es/ に置いてあります。
ですが、ここにはCentOS 5.6(32bit)、CentOS 5.8(64bit)しかありませんでした。今欲しいのはCentOS 5.8(32bit)だよ。
無いのなら作るしか無い精神で今回作ってみました!
今回はその手順を紹介して行きたいと思います。

VirtualBox, vagrant のインストール

ここのインストール方法は省略します。各々のサイトからダウンロードしてインストールしてください。

VirtualBoxにCentOS 5.8を作成する


1.VirtualBoxに新規VMを作成します

2. VMの設定を行います

3. CentOS 5.8 インストール

新規作成ボタンを押して下さい。ここでisoファイルの指定ができます。 ここでは CentOS-5.8-i386-netinstall.isoを使いました。

4. 色々と設定を行います

4.1 起動時にupしていないNICの設定を見直す。

# sed -i -e "s:^ONBOOT=no$:ONBOOT=yes:" /etc/sysconfig/network-scripts/ifcfg-eth0
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep ONBOOT
# service network restart
# ip addr show eth0

4.2 MACアドレスとUUIDを無効化

# ln -f -s /dev/null /etc/udev/rules.d/70-persistent-net.rules 
# sed -i -e "s:HWADDR=.*::g" /etc/sysconfig/network-scripts/ifcfg-eth0
# sed -i -e "s:UUID=.*::g" /etc/sysconfig/network-scripts/ifcfg-eth0

4.3 sshの設定後。 UseDNS を起動

# sed -i -e "s:^#UseDNS yes:UseDNS no:" /etc/ssh/sshd_config
# service sshd start
# chkconfig sshd on

4.4 vm へ ssh

ここからの手順は、通常のターミナルからVirtualBoxにアクセスして作業することとする。

$ ssh root@localhost -p 2222

4.5 vagrant グループ&ユーザ追加

# groupadd vagrant
# useradd vagrant -g vagrant -G wheel
# echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers # sudo設定
# sed -i -e "s:^.*requiretty:#Defaults requiretty:" /etc/sudoers # requiretty を無効

4.6 vagrantユーザ用の公開鍵を配置

# su - vagrant
# mkdir ~/.ssh
# chmod 0700 ~/.ssh
# curl -k -L -o ~/.ssh/authorized_keys  https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
# chmod 0600 ~/.ssh/authorized_keys

4.7 VirtualBox の Guest Additions をインストール

# yum install -y wget 
# mkdir /media/VBoxGuestAdditions
# wget http://download.virtualbox.org/virtualbox/4.3.18/VBoxGuestAdditions_4.3.18.iso

※VirtualBoxのバージョンに合わせてダウンロードしてください。 # mount -o loop,ro VBoxGuestAdditions_4.3.18.iso /media/VBoxGuestAdditions # sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run

Installing the Window System drivers
Could not find the X.Org or XFree86 Window System, skipping.
は無視しても良いそうです!

4.8 後処理

# rm VBoxGuestAdditions_4.3.18.iso
# umount /media/VBoxGuestAdditions
# rmdir /media/VBoxGuestAdditions/

5. box を作成する(各自の端末で)

# cd ~/VirtualBox\ VMs/centos-5.8_x32/

※各自でVirualBoxの保存先は変更してください # vagrant package --base centos-5.8x32 --output centos-5.8x32.box

あとがき

後は作成したboxを使って

$ vagrant box add centos-5.8_x32 centos-5.8_x32.box
$ vagrant init centos-5.8_x32
$ vagrant up

とすればvagrantを使ってCentOS 5.8(32bit)を使用することができます。

今回VMにCentOSをインストールする際にnet-install版を使用しました。実はこれ 4.1 ~ 4.3 の手順をする必要はないかもしれません。また、iptablesで外部からのアクセスが制限されているかもしれませんので、各自でご確認ください。それから、今回CentOS 5.8(32bit)だけでなく、CentOS 5.7(32bit)も欲しかったので、同様の手順でさくさくと作っています。

では、またお会いしましょう(^^)/

Raspberry Pi で XFD

Raspberry Pi で XFD

突然ですがXFDというものをご存知でしょうか?

XFDとは

オブジェクト倶楽部 http://objectclub.jp/community/xfd/ によると

プロジェクトステータスやメトリクスは、目に見えにくい。見えないからこそ難しい。
そんな悩みを解決してくれるのが、XFD(eXtreme Feedback Device)です。
目に見えて、楽しい、ユニークな装置。目に付いて、絶対見落とさないような装置を指します。安上がりならなおよろし。

とのことです。

例えばCIによるビルドエラーに連動したパトランプ http://gitgear.com/xfd/ など、 そのままだと気づきにくいイベントを気づきやすくするデバイスを指すようです。

今回すること

今回はそんなXFDをRaspberry Piを利用して作成してみたいと思います。 なお、今回はAtlassian の CIサーバー Atlassian Bamboo を対象としますが、ビルド結果取得の部分だけ替えればJenkinsなどにも対応可能です。

用意するもの

  • Raspberry Pi x 1
    • 今買うなら Raspberry Pi 2 Type B がお得だと思われます。
  • 赤色LED x 1
    • 色はお好みで。 今回はビルド失敗のエラー感を出すため 3mm径の赤色高輝度LEDとしました。
  • 330Ω抵抗 x 1
    • LEDが壊れないよう基本に則って抵抗を使用します。
  • ブレットボード x 1
  • 配線用ジャンパワイヤ 適量
    • その他配線用の機材を適宜用意します。

くみたて

上記のパーツを組み込むとこのようになります。

DSC_0078

一応実体配線図も作ってみました。

raspi-XFD

プログラム

例えば以下のようにREST APIでBambooのビルド結果を取得します。
なお、今回はBamboo上に複数ブランチが登録されていることを前提としているため、ブランチがないと動きません。

結果

これで、Bambooの指定したブランチがビルドエラーになった際には、 接続されたLEDが点灯するようになりました。

DSC_0079

しかし、ちょっとこれでは寂しいので、ひと手間加えたいと思います。

最近はだいぶJOJOや、仮面ライダーに押されているとはいえ、 エンジニアといえばガンダムです。

という訳で、ちょっとガンダム要素を足してみました。

ドリルでモノアイ部分に穴を開けてLEDを装着し、

DSC_0097

なるべく目立たないように配線をします。

DSC_0098

最近のプラモはよく出来ていて、関節可動部分が多いので、 昔のプラモのように脚部の中がスカスカでなかったのは誤算でした。

今回はちょっと妥協してこのくらいにしておきますが、機会があればもう少し綺麗に配線をしたいと思います。

動作例

さて、再度どうなるか試してみます。

万が一Bambooでのビルドが失敗した場合には

bamboo_build_failed

光ります。

DSC_0084

これでだいぶ危機感が増しました。

ジムがやられる前になんとしてもビルドエラーを修正しなければなりません!!

まとめ

Raspberry Piが発売されたことによって、ネットワークを利用した電子工作が簡単にできるようになりました。

電子工作初心者でも簡単に作れるオリジナルのXFDでプロジェクトを活性化して行きましょう!

Atlassian crowd インストール編

Atlassian crowd インストール編

こんにちは KEYチームの円城寺です。

せっかく Atlassian Expert なので Atlassian の記事を書いてみよう第2弾ということで、
今回は Crowd サーバーのインストールをしてみます。

下記の環境に Crowd をインストールしていきたいと思います。

  • OS : CentOS 7
  • Java : OpenJDK 1.7
  • mariadb : 5.5
  • Atlassian : Crowd 2.8

K. 仮想環境の準備

今回は 予算の都合上 実験ということで、MacOSX 上の「VirtualBox+Vagrant」の仮想環境に環境を構築します。
専用のサーバーを用意されている方はこの部分は読み飛ばして頂いて結構ですが、
気軽に壊せる環境というのも便利ですので、今回の実験用に試しに構築してみるのもよろしいかと思います。

 Virtualbox のインストール

Virtualbox の以下サイトより、お使いのプラットフォームに合わせたバイナリをダウンロードして、セットアップしてください。
https://www.virtualbox.org/wiki/Downloads

 Vagrant のインストール

Vagrant の以下サイトより、お使いのプラットフォームに合わせたバイナリをダウンロードし、セットアップしてください。
https://www.vagrantup.com/downloads.html

 VMの準備

1. vagrant box を準備する

        $ vagrant box add centos7.0 [任意のCentOS7のBoxファイルURL]
        $ mkdir crowd
        $ cd crowd
        $ vagrant init centos7.0


2. Vagrantfile の下記部分のコメントを外して、内部IPで通信できるようにする
config.vm.network "private_network", ip: "192.168.33.10"

3. VM を起動する

        $ vagrant up


これでひと通り仮想環境の準備は完了です。

E. Crowd のインストール

さて、環境も整いましたので、いよいよ Crowd のインストールと参ります。

 前提条件の準備

早速 Crowd をインストールといきたいところですが、Crowd を動かすための前提ソフトウェアをまずインストールしましょう。

1. Java のインストール
まずは Java をインストールします。
今回は yum で簡単にインストールできる OpenJDK を使用しましたが、
Oracle の JDK(こちらのほうが無難という噂もあり)をご使用される場合は適宜インストールをお願いします。

        $ sudo yum install java-1.7.0-openjdk


2. mariadb のインストール
次に Crowd のデータ保存先であるデータベースのインストールです。
今回は MySQL ではなく、CentOS7 系なので、mariadb を使用します。

        $ sudo yum install mariadb-server


3. mariadb の起動

        $ systemctl start mariadb


 Crowd のインストール

さて、とうとう Crowd のインストールです。
基本的には 公式ドキュメント( https://confluence.atlassian.com/display/CROWD/Installing+Crowd )にそってインストールを行っていきます。

1. 最新版のダウンロード
まずは、以下公式サイトより最新版をダウンロードします。
https://www.atlassian.com/software/crowd/download
今回は Crowd Standalone 版をダウンロードします。

        $ wget http://www.atlassian.com/software/crowd/downloads/binary/atlassian-crowd-2.8.0.tar.gz


2. 展開と配置
次にダウンロードしたバイナリを Crowd のインストール先ディレクトリに展開します。
今回は便宜上、

  • Crowd のインストール先を /opt/atlassian/
  • crowd home を /var/atlassian/crowd

としていますので、 /opt/atlassian にダウンロードしたバイナリを展開します。

        $ tar -xf atlassian-crowd-2.8.0.tar.gz
        $ sudo mkdir /opt/atlassian
        $ sudo mv atlassian-crowd-2.8.0 /opt/atlassian/
        $ sudo ln -s /opt/atlassian/atlassian-crowd-2.8.0 /opt/atlassian/crowd


3. crowd home の準備
次に、Crowd のデータ保存先になる crowd home を準備します。

        $ sudo mkdir -p /var/atlassian/crowd


4. 設定ファイルの編集
次に、Crowd の環境依存部分の設定を設定ファイルに設定します。
対象のファイルは以下。
${crowdインストール先}/crowd-webapp/WEB-INF/classes/crowd-init.properties
このファイルの crowd.home を下記のように先ほど作成したディレクトリに変更します。

crowd.home=/var/atlassian/crowd


 Crowd 用データベースの準備

次に Crowd のデータ保存先であるデータベースを準備します。

1. データベースの作成

        create database crowd character set utf8 collate utf8_bin;


2. Crowd ユーザーを作成し、権限を付与

        GRANT ALL PRIVILEGES ON crowd.* TO 'crowduser'@'localhost' IDENTIFIED BY 'crowdpass';


3. Crowd 用に mariadb に設定を追加
/etc/my.cnf の[mysqld]セクションに以下の4設定を追加

[mysqld]
---中略---
character-set-server=utf8
collation-server=utf8_bin
default-storage-engine=INNODB
transaction-isolation = READ-COMMITTED


4. mariadb(mysql)の Java ドライバをインストール

        $ yum install mysql-connector-java.noarch
        $ cp /usr/share/java/mysql-connector-java.jar /opt/atlassian/crowd/apache-tomcat/lib/.


Y. Crowd の起動

さて、準備が整いましたので、Crowd を起動してみます。

 Crowd の起動

        $ cd /opt/atlassian/crowd/
        $ ./start_crowd.sh


 Crowd の初期設定

1. Crowd 初期設定画面へアクセスする
Crowd の初期設定画面 http://localhost:8095 にアクセスします。
設定画面へは、Crowd のサーバー上からしかアクセス出来ないようなので、
別サーバーからつなぐ場合は SSH トンネルなどを用意します。
(例)

        $ ssh vagrant@192.168.33.10 -i ~/.vagrant.d/insecure_private_key -L 8095:localhost:8095


初期設定画面にアクセス出来た後は、画面の指示にしたがって必要な情報を入力してゆきます。

以降は今回の設定例です。必要に応じで参考にしてください。
あくまでテスト用の設定ですのでご注意ください。

Set up Crowdボタンを押して設定をスタートします。

ライセンスを入力します。お試しの場合は、ライセンス入力エリアの下にあるリンクより評価ライセンスを取得することが出来ます。

ライセンスを入力します。お試しの場合は、ライセンス入力エリアの下にあるリンクより評価ライセンスを取得することが出来ます。

今回は新規インストールなので、 New instllationにチェックをしてContinueします。

今回は新規インストールなので、 New instllationにチェックをしてContinueします。

先ほど設定したデータベースの接続情報を設定します。

先ほど設定したデータベースの接続情報を設定します。

設定を確認してContinue

設定を確認してContinue

今はメールサーバーを設定しないので、Laterを選んでContinue

今はメールサーバーを設定しないので、Laterを選んでContinue

今回は初期設定でContinue

今回は初期設定でContinue

初期管理者の情報を入力してContinue

初期管理者の情報を入力してContinue

今回はこのままContinueします。

今回はこのままContinueします。

これで初期設定は完了です。

ログイン画面より、先ほど設定した管理者アカウントでログインできるようになっていると思います。

次回は、Crowd と他の Atlassian プロダクトを連携させてみたいと思います。

 

認定スクラムマスター研修に参加してきました

認定スクラムマスター研修に参加してきました

みなさんこんにちは。KEYチームの武永です。

先日開催された認定スクラムマスター研修に参加してきました。

参加までの経緯

現在私が参画しているプロジェクトはスクラムを取り入れており、普段から「スクラム」や「アジャイル」という単語をよく耳にする環境にいます。
そこで、「スクラムについて学ぶことで実際の業務に役立てていきたい」、「アジャイル・スクラムについて学んで今後のコミュニティ活動などにも活かしていきたい」という思いを持ち参加することにしました。

認定スクラムマスター(CSM)とは

ScrumAllianceが認定してる資格の一つです。
「スクラム」と呼ばれるチーム開発手法における役割の1つになります。 スクラムにはスクラムマスターというロールがあって、そのロールをこなすための知識を認定しているのがCSMです。
決してスクラムをマスターしていますということを認定している訳ではありません。 (とはいえスクラムマスターの役目を果たすにはスクラムのことを正しく理解し、説明することが必要)

研修内容

  1. イントロダクション
  2. スクラムの歴史
  3. スクラムの理論、コンセプト、プラクティス
    1. アジャイルについて、アジャイルはなぜうまくいくのか
    2. スクラムの3つのロールモデル: プロダクトオーナ、スクラムマスタ、チーム
    3. スクラムの4つのミーティング: リリース計画、スプリント計画、デイリースクラム、スプリントレビュー
    4. スクラムの3つのリスト: プロダクトバックログ、スプリントバックログ、障害リスト
    5. プランニングポーカーによる計画
  4. リリース計画
    1. プロダクトバックログ
    2. プロダクトバックログ作成演習
  5. 生産とスプリント
    1. スプリントのゴール
    2. スプリント計画
    3. タスクボード
    4. デイリースクラム
    5. バーンダウンチャート
    6. ベロシティと障害物
    7. アーキテクチャとインフラ
    8. 完了の定義
    9. スプリント署名
    10. スプリントのプレゼンテーション
  6. ベロシティ・ゲーム
  7. 障害に打ち勝つ
  8. マネジメント、分散、スケールアップ

基本的にスライドを見ながらの座学を中心にワークショップを交えながらの2日間でした。

学んだこと、感じたこと

  • スクラムマスターの役割
    スクラムマスターとは開発が「スクラム」と呼べる状態にする人のことで、 開発チームに対して指示はすることもなく、プロセスの管理をする。
    チームがチームを管理して自律的なチームを目指す。
    スクラムマスターはチームが困っている時に助言する
    チームの障害となるものを取り除いていく。
    例えば、 プロダクトオーナー(PO)がスプリントの途中で別のアイデアを考えたからそれをスプリントに取り入れてくれという要求を出してきた際には

    「確かにそれはいいアイデアですが、このスプリントには入れずに次のスプリントに入れていきましょう」

    というようにPOからの新しい要求(障害)を取り除いて開発チームが上手くスプリントをこなしていけるように環境を整える役割を持っています。
    もし、この要求を受け入れてしまえば開発チームのリズムというものが崩れてしまいスプリントが上手く回らなくなってしまいます。このリズムを崩すこと無く開発を進めていけるようにするのがスクラムマスターの役割なのではないかと感じました。

  • 非効率の「3つのM」

    • Muda:ムダ
    • Mura:ムラ
    • Muri:ムリ

    この3つをどんどん無くしていくことでチームをより良いものへとしていくことが必要。

    「チームを加速させようとしていくのではなくムダ、ムラ、ムリを無くしていくことで間接的にチームを加速させていくことが重要」

    特にこの言葉が印象に残っています。
    何か良いツールや手法など新しいものをどんどん取り入れていくと、逆にどれも中途半端になってしまい、チームを減速させてしまう。そうではなくて現在のプロセスの中に潜む3つのMを取り除いていくことでチームを加速させてから新しいものを取り入れていく方がより良いチームへ成長していけるのではないかと感じました。

    スプリントを上手く回していく、より良いチームにしていくためにはどんどん3つのMを取り除いていく、改善していくということが大切です。

最後に

研修は受けましたが、まだ資格は取得していません。研修後、オンラインの試験を受けてから正式に認定スクラムマスターの資格が得られます。
「改善」というものを常に意識して自分達はチームの一員で自分達がチームを良い物に変えていくという考えがとても重要なものなのだと改めて実感した研修でした。
今回参加した研修でスクラムの「型(守破離の守)」を学ぶことが出来ました。まずは、ここで学んだことを実際に実践していくことで「知識」でしかない部分を「経験」にしていけばスクラムマスターに近づいていけるのではないか、より良いチームにしてくことができるのではないかと考えています。
とりあえず、早くオンライン試験を受けて正式に資格を取得したいですね。
もっと研修のこの部分の内容を知りたいなどありましたら以下のメールアドレスまでご連絡ください。
takenaga at atware.co.jp

第 9 回 はんだ部 活動レポート

第 9 回 はんだ部 活動レポート

みなさん、こんにちは。KEYチームの矢納です。今日も張り切ってはんだ部レポートを書いていきたいと思います。

Raspberry Piを使っているのに、技術ネタが今まで出てきてませんね(^^;;

と、いうことで今回は簡単にWeb Server?作成の手順をあげていきたいと思います!

今回やりたいことはこんな感じです。

さて、今回は大好きなJavaではなく、Pythonでやっていきたいと思います。なぜPythonなのかというと、せっかくRaspberry Piの推奨?言語なので、使ってみようと思った訳です。

では、最初にFlaskというフレームワークをインストールします。Flaskはpipを使います。

$ sudo apt-get install python-pip
$ sudo pip install flask

では、次にPythonでコードをガリガリと書いていきます。

from flask import Flask, render_template
import RPi.GPIO as GPIO
import datetime

OUTPUT_PIN = 4

app = Flask(__name__)

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(OUTPUT_PIN, GPIO.OUT)


@app.route("/")
def show_top_page():
    now = datetime.datetime.now()
    time_string = now.strftime("%Y-%m-%d %H:%M")
    template_data = {
        'title': 'Sample Top Page',
        'time': time_string
    }
    return render_template('top.html', **template_data)


@app.route("/light/on")
def light_on():
    GPIO.output(OUTPUT_PIN, GPIO.HIGH)
    return '{"result":"ok"}'


@app.route("/light/off")
def light_off():
    GPIO.output(OUTPUT_PIN, GPIO.LOW)
    return '{"result":"ok"}'


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80, debug=True)

とても簡単です。@app.route("/")でアクセスを受けて、処理を行います。今回 / でアクセスされた場合はHTMLを返すようにしてあります。HTMLを返すのにはFlaskのrender_tempalteを使用します。これは* templates *のフォルダにあるHTMLを返します。

では、top.htmlを見てましょう。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
<h1>{{ time }}</h1>
<hr>

<p id="msg"></p>

<button id="on" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-arrow-up"></span> On</button>
<br>
<button id="off" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-arrow-down"></span> Off</button>

<script type="text/javascript" src="{{ url_for('static', filename='js/jquery-1.11.2.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/top.js') }}"></script>

</body>
</html>

{{ }}で書かれている部分がpythonで記述されていたtemplate_dataに対応します。また、Javascriptやcssも読み込みたいと思います。そのときはurl_for()を使います。第一引数はstatic(多分これだといけない気がします)、第二引数はその配下のファイルをしてします。ディレクトリ階層は下図の通りです。

あとはこれらのファイルを転送して sudo python top.py を実行するだけです。実行後ブラウザでRaspberry Piにアクセスしてみてください。画面上のボタンの「ON」」「OFF」でLEDの点灯・消灯が可能です。

意外と簡単に作成することができました。本当はBootstrapを使おうとしたのですが、よくわかりませんでしたので、今回はスキップです。軽く調べてみたら、Flask Bootstrapというのがあるらしいですね。まぁそれはおいおいということで(^^;)

今回はここまで。

Email:yanou at atware.co.jp

チーム合宿

チーム合宿

こんにちは。KEY チームのアライです。

3/13(金)に箱根強羅でチーム合宿を行いました。

ほとんど坂道。しかも急坂です・・・

部活合宿の坂道ダッシュを思い出します・・・

 

 

まずは12月からの四半期のふりかえり。KPT*1 で実施。

チームの事、個人の事、会社の事・・・

*1 KPTとは、ふりかえりを行う際のフレームワークの一つです。それまでの活動で良かったこと、次もやりたいことを「Keep」、問題だったことを「Problem」、問題に対する解決策や次にやりたいことを「Try」として、3つの軸で整理していく手法です。

 

 

夕食を終えて、合宿パート2のスタート。

チームリーダーが夜食を用意してくれて、準備万端!

ちなみにロシアンおにぎり。

 

 

 

今回は色々なセンサ(臭い、距離、温度など)と Raspberry Pi2 *2 を組み合わせた IoT *3

一人一センサで試行錯誤を繰り返し、夜が更けていきました・・・

結果的には完成形となるモノはできませんでしたが、みんな楽しく取り組めたので良しとしましょう!

*2 Raspberry Pi とは、ARM プロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財産が開発。

*3 IoT (Internet of Thing)とは、一意に識別可能な「もの」がインターネット/クラウドに接続され、情報交換することにより相互に制御する仕組み。

 

 

最後は合宿といえば、トランプ!

時間を忘れて朝4時まで・・・

チームの輪が更に深まった一日となりました!!

Atlassian ID 管理ツール Crowd

Atlassian ID 管理ツール Crowd

こんにちは 、 KEYチーム所属の円城寺です。

当社は Atlassian Expert と呼ばれる Atlassian 社のパートナー企業の一社として名を連ねさせて頂いております。

そんな当社ですが、あまり Atlassian Expert であることをアピールしていませんでした。
ということで、せっかく Atlassian Expert なので、Atlassian の記事を書いてみようと思います。

今回は、JIRA や Confluence などに比べて注目されにくいものの、
意外と便利な Crowd についてどのようなものかを書かせていただきます。


Crowd とは

Crowd とは Atlassian 社が提供する、ユーザー管理、シングルサインオンソフトウェアです。

公式には、

「使用、管理、統合がとても簡単なシングルサインオンとユーザー ID のためのツールです。
Active Directory、LDAP、Crowd 自身、あるいはそれらの組み合わせでも何でも、ユーザー情報を取り込めます。
アトラシアン製品、Subversion、Google Apps、独自アプリなど全てのアプリケーションのパーミッションを一箇所で制御できます。」

と説明されていますが、JIRA や Confluence に比べてマイナーであり、
最近では Atlassian のクラウドサービスである、Atlassian OnDemand が Atlassian Cloud に名称変更し、
Crowd と Cloud というややこしい事になったりといろいろあるプロダクトです。

そんな Crowd ですが、実は Atlassian 製品と連携することにより、ユーザーIDと権限(グループ)を集中管理することができ、
また、シングルサインオン環境を構築することも可能な縁の下の力持ちなプロダクトなのです。

Crowd 以外にシングル・サインオンなど同様の機能を持つプロダクトとして、shibboleth などが存在します。


Crowd ができること

  • アカウント管理の一元化

Atlassian 製品を通常の手順でインストールすると、ユーザーIDと権限管理は、JIRA であれば JIRA のユーザーと権限、
Confluence であれば Confluence のユーザーと権限というようにプロダクト毎の管理となってしまいます。
ユーザー・プロダクトが増えてくるに連れて、管理者視点からは、ユーザーアカウント管理コストの増加の問題、
ユーザー視点からはパスワード管理・変更のコストが増えるというデメリットがあります。
ユーザーIDを Crowd で一元管理する事により、管理者、ユーザー双方のID管理コストが削減できます。
また、ユーザーの削除漏れや権限付与・剥奪漏れなどの管理ミスが起こりにくくなり、それに起因するセキュリティリスクの軽減にもつながります。

  • シングルサインオンの実現

Crowd を利用することにより、JIRA や Confluence のID一元的に管理することができます。
ただ、IDの一元管理だけであれば、JIRA でも同様のことが可能であるため、わざわざ Crowd を使う必要はありません。
JIRA に対しては Atlassian 製品および、Crowd に対応した製品間でのシングルサインオンが実現できることが Crowd のアドバンテージといえます。

  • Atlassian 製品との連携

Crowd は Atlassian 製であるため、当然 Atlassian 製品との親和性が高いです。
JIRA や Confluence などの Atlassian 製品と Crowd との連携は、各製品の管理画面から簡単に設定することができます。
ただし、シングルサインオン構成を行う際には、設定ファイルの修正など、JIRA などシングルサインオンを提供される側の対応が必要です。

  • Atlassian 製品以外との連携

Atlassian 製品との連携は当然簡単にできる Crowdですが、Atlassian 以外の製品との連携も可能です。
使用するプロダクトの対応状況にもよりますが、Apache のBasic 認証を Crowd でおこなうことなどが可能です。
また、独自に Crowd との連携部分を開発することも可能で、自社のサービスを Crowd に対応させたりすることも可能です。


つぎは

さて、Crowd の概要はこのくらいにして、 (もし、続けば) 次回からは実際の Crowd のセットアップや、各サービスとの連携設定について具体的な例を上げてご紹介させていただきたいと思っております。

第 7 回 はんだ部 活動レポート

第 7 回 はんだ部 活動レポート

みなさん、こんにちは。KEYチームの矢納です。今日は1月のはんだ部の活動をレポートしていきたいと思います。

今まで何をしてたの?

最初に今まで何をしていたかをご紹介しましょう。と、いってもたいしたことは何もしておりません。電子回路の作成になれてもらうための活動。RaspberryPiにファンを接続して、そのファンを制御プログラムの作成。ホコリセンサーをRaspberryPiに接続し、掃除中の社内のホコリ状況を測ってみたりなどです。ちなみに、ホコリ状況ですが、掃除中はそんなにセンサー値は大きくありませんが、終わってから2時間後ぐらいに大きな値が出ました。推測ですが、舞い上がったホコリが落ちて来たのでしょう。

今まではこのような活動をしてました。とりあえず電子回路になれる、RaspberryPiの使い方を知るがメインの活動でした。

今は何をしているの?

では、今は何をしているのか?これから何をしていくのか?

これからは今まで作成したものを連携して一つのシステム?を作ろうかと思います。どんなものかというと、センサーで環境データを読み取り、そのデータにより、エアコン等を自動制御するものです。下図はイメージです。

これを作るにあたって、エアコン等を制御する部分を作成していきます。エアコン等はリモコンがありますので、そのリモコンの赤外線を一度受信し、同じ赤外線を送信するものを作成します。サンプル等もあったので、すぐにできると思ったら、全然すんなりと作業がすすみませんでした(ToT)

作業風景です

作業風景です

今後はこのシステム?を作っていきます。毎月第4土曜日に活動をしています。”こんな物をつくりたい!“、“私もやってみたい”という方は是非参加してみてください。もちろん、電子回路がわからない人や、ただ単にRaspberryPiを触りたい人でもOKです。興味のある方はご連絡ください。

Email: yanou at aware.co.jp

余談

Raspberry Pi 2 が発売されましたね

Windows10 Technical Preview のIEで近未来ES6を体験

Windows10 Technical Preview のIEで近未来ES6を体験

こんにちは、KEYチームリーダーの荒木です。

ECMAScript6はみなさん興味があると思いますが、ブラウザで直接体験することはなかなか出来ない状況です。 最近Windows10 Technical Preview(以後TP)でECMAScript6の実装がかなり進んでいることを知りちょっと使ってみました。

今回はWindowsAzureでWindows10TPを利用しました。 2月4日時点ではこんな感じです。

71%になっていてClassが12/15もありますね。

ちょっと触ってみます。

class-img.png

おおおっっ!!

まずは、Class。 次に、constructor、static methods、最後にprototype methodsです。

直接かけるのはやっぱり素晴らしいですね。

次回は、あまり実装がないextendsをやってみます。

ECMAScript6の環境がすぐそこまで近づいてきています。すごく楽しみですね。

プロジェクト技術紹介

プロジェクト技術紹介

認証基盤

みなさん、こんにちは。KEYチームの矢納です。
最近ますます寒さが厳しくなってきましたね。体調を崩さないように気をつけてください。

さて、今回は認証基盤開発プロジェクトの紹介を行いたいと思います。 様々なクラウドサービスを簡単に使うことができるようにするためのプロジェクトです。

このプロジェクトで重要になるのは、やはり認証部分になります。強固な認証、ですが認証は簡単に。 また容易にクラウドサービスを使えるということで、ユーザ管理等もできなければなりません。

認証

認証の基本部分はミドルウェアに任せており、様々な認証プロトコルに対応しています。複数の認証プロトコルを利用していてもセッションを共有してくれます。

また、認証の情報を保存しておくDataBaseは、高稼働性、ハイパフォーマンス、容易なスケーラビリティなものを利用しています。莫大な認証情報、大量不可が想定されるなかで稼働し続けるものを選択して利用しています。

さて、少し認証の部分について話していきましょう。

強固な認証

従来の認証だと、ID/パスワードの認証だけです。このシステムでも基本の認証はID/パスワードで行います。ですが、パスワードはあまり変更が行われない、簡単なパスワードがよく使われたり、ID/パスワードはブラウザに覚えされる事が多いのでID/パスワードだけではとても強固な認証とは言えません。そこで今回のシステムでは、ワンタイムパスワード等を利用した2段階認証を取り入れてあります。

また二段階認証だけではなく着信認証を行うことができます。ID/パスワードを入力した後に、そのユーザに設定されている電話番号に電話がかかってきます。そこで認証コードを入力することにより認証成功となります。

容易な認証

さて、2段階認証などを行うことにより強固な認証を行うことができます。ですが、毎回クラウドサービスに直接アクセスし無ければならないのでしょうか?利用しているクラウドサービスが少ないのなら良いのですが、たくさんのサービスを利用する際に、直接アクセスのためのURLを覚えるのも、それらのブックマークを全てとるのは面倒でしかありません。

そこで各クラウドサービスへの入り口を一つにするポータルの出番です。このポータルにログインするだけで各クラウドサービスへのログインが可能になります。これで1回認証をすませば各サービスを利用できるSSO(Single Sign On)の実現です。

アーキテクチャ

各クラウドサービスへの利用は容易に行うことができるようになりました。では、ユーザ・セキュリティ等の管理はどうでしょうか?。それらを各々サービスで行うのは大変です。そこで、それら操作は一つのポータルから管理を行うことができます。では、このポータルはどのように作られているのか見てみましょう。

シングルページアプリケーション

Web画面はシングルページアプリケーションとして作られています。操作をする度に画面がフラッシュされることなく、スムーズな作業を行うことができます。これを実現しているのは、フロントMVCの一つであるBackbone.jsを使っています。jQueryでは面倒であったイベント処理やRESTなリクエストを送信するのは非常に楽ができます。また、Backboneだけでは少々手が届かない部分に手を加えてくれるMarionette.jsも使用しています。

バックサイドはJava

バックサイドはJavaで書かれており、WebフレームワークとしてSpringを使用しています。Spring4系のフレームワークを利用してアプリケーションが作られています。バックサイドはSpringをメインで使いますので、Springを使って簡単なWebアプリケーションを自分で作れるようになりました!管理側のDatabaseにはPostgresを使用しており、Version9から実装されたJSON型を使用しています。JSON型にすることにより、カラムの増減が発生した際の作業が軽減されます。また、JSON内部のパラメータを直接条件にも書くことができますし、インデックスもはることができます。

認証系と管理系は疎結合

管理系で追加したユーザは認証のDataBaseに反映する必要があります。直接認証DataBaseに修正をかけても良いのですが、認証系単体でも動くシステムなので認証系と管理系のシステムは疎結合で作られています。そこでユーザ等を作成した際には一部のステータスを変更しておき、予約状態にします。予約状態になっているデータを認証系へプロビジョニング(データ反映)をおこいます。いわゆるバッチですね。このバッチの部分もSpring系のフレームワークでSpring Batchを使用しています。データ取得部分・処理部分・後処理部分と構成が分かれており、基本的には処理部分を増やしていく形となっています。

システムの全体像

システムの全体像

最後に

さて、いかがだったでしょうか?認証基盤開発プロジェクトの大まかなシステムの説明を書いてみました。色々と省略して書いてしまった部分もあるので、"もっと詳しく知りたい"、"ここはどういう意味?"などと質問がある方は下記のメールまで気軽にメールしてください。答えれる範囲でお答えしていきたいと思います(^^;;

では、皆さん体調を崩さずに!!

Email:yanou at atware.co.jp

新人研修

新人研修

12月20日は今年度新卒入社の武永が担当します。

アットウェアの新人研修は4月〜7月の4ヶ月間の技術研修があります。
今回はこの新人研修についてお話させていただきます。

この記事の画像が季節外れの桜になっているのは新人研修といえば春だろうという安直な考えから画像を選ばせていただきました(^_^;)。

ここ数年、新人研修はお付き合いのあるIT企業様と合同で行っています。
今年度の新卒入社は私一人だけなのですが、新人研修を通して同期と呼べる仲間ができて非常に楽しく充実した時間を過ごすことが出来ました。

4月「C言語研修」

まず4月はC言語研修を行います。
C言語を題材にプログラミングの基礎、メモリとポインタの概念、アルゴリズムとデータ構造の基礎を学びます。また、Linux環境で実習することでLinuxの操作にも慣れます。

5月「Java基礎」

5月からはJavaを学んでいきます。
Javaの基本文法、開発環境、使用頻度の高い標準ライブラリ、オブジェクト指向の概念・設計手法を学びます。

6月「Webアプリケーション開発基礎」

6月はWebアプリケーションの開発について学びます。
Webアプリケーションの動作原理、ServletやJSPなどJavaEEの基礎、データベースとSQLなどWebアプリケーション開発に必要な最低限の技術要素を学びます。

7月「システム構築実習」

7月はチームに別れて自分達でWebアプリケーションシステムの構築を行います。
与えられた要件定義を元に、Webアプリケーションシステムの設計~開発~テストまでをチームとなって役割分担して開発します。

設計書を相談しながら作成し、講師の方に指摘を受けて修正の繰り返しで非常に難しい作業でしたが、最終的にはチームで協力して1つのWebアプリケーションを作成することができて非常に達成感がありました。

以上が今年度の新人研修の基本的な流れになります。
その他に「特別講義」という講義の時間が週に1、2回あります。
内容としては

  • 単体テスト
  • 結合テスト
  • SQL
  • Android基礎
  • HTML/CSS

などがあります。
なかには社長自ら講師となり私達に教えていただく時間もありました。

下の画像は新人研修の最後に行った成果発表のものになります。

アットウェアではこのような新人研修を行っています。
基本的な文法から教えていただけるので、プログラミングをほとんどやったことがなかった同期もどんどんプログラムが書けるようになっていきました。

非常に充実した新人研修を受けることができたと今振り返ってみて改めて感じています。

はんだ部 ~社内活動~

はんだ部 ~社内活動~

12月19日はKEYチームの矢納が担当します。Advent Calendarを始めて書くものですから、何を書いていいのかさっぱりわからない状態です。

ということで、社内での活動を紹介をしたいと思います。その名もはんだ部です。

名前からも推測できる用に、はんだごてを使って、基盤に部品をつけて何かを作っています。と、言いたいところですが、実際にはんだを使ったのは1回だけです(・ω・)。

では、実際にはどのような活動をしているのか見ていきましょう。基本的には月1回活動しています。中身は電子回路を触ってみたい人に少しレクチャーしたり、実際に回路を組んでもらったりをしてもらっています。実際に組んでみた回路です。

いやー何をする回路全然わかりませんね。これは3つの入力だけで隅っこに写っている7セグメントLED(デジタル数字を表示するやつ)を光らす回路です。実はこれ正しく動作しません(^^::

はんだ部ではRaspberryPiという小型コンピュータを使って、物とインターネットをつなげての制作にも始めています。センサー等で環境値を読み取り、それらのデータをソフトウェアで制御する何かを作ります。

 

実は部員が私と社員が一人しかいません(ToT)電子回路を触りたい人、RaspberryPiを触ってみたい人、色々な人を募集中です。社内・社外・学生、どんな方でも大丈夫です。興味のある方はご連絡ください。では、今年も残りわずかですが、楽しんでいきましょう!!

Email: yanou at atware.co.jp

Rouleur

Rouleur

こんにちは。本日のAdventCalendarを担当させていただきます、円城寺です。

私は「ルーラー」という肩書を名乗らせて頂いています。 耳慣れないと思いますが、ルーラーとは、自転車ロードレースの競技者のタイプの一つです。

詳しい解説はwikipedia にお任せしますが、

ざっくりいうと、チーム競技である自転車ロードレースにおいて、風よけになったり、食料を運んだりと、チームのアシストを担う役割がルーラーです。

なぜ、ITエンジニアの肩書に自転車用語と思われるかもしれませんが、 システム開発、中でもアジャイル開発手法であるスクラムの役割の中にスクラムマスターという物があります。 この役割はサーバントリーダーとも言われ、チームが最大限の成果を発揮できるようにアシストするという役割です。

チームがより楽しく仕事ができる一助になりたいという願いと、自転車アピールを兼ねてルーラーと名乗らせて頂いています。

アットウェアの社員も、当然皆多様な趣味を持っていますが、その中で最大級の人口を誇る(っていた)のが実は自転車です。

そのような背景もあり、社内には「チームすずめ」という自転車同好会があります。

皆でまったりとサイクリングなどを楽しんだり、エンデューロと言われるチームリレー形式の自転車イベントに参加したり、マイペースで自転車を楽しんでいます。

主な活動場所は、三浦半島、ヤビツ峠(表、裏)、境川サイクリングロード、湘南、鎌倉など神奈川方面ですが、江戸川サイクリングロードや、道志みちなどにも出かけたりします。

今年はメンバーの予定がなかなか合わず、活動回数が少なかったのですが、来年こそはもう少し活発に活動したいと思っています。

私も「ルーラー」として、そんなチームの状況を見るにつけ、なんとかしてモチベーションをあげられないかと考えた結果、やはり一緒に走る仲間が多くなればチームのモチベーションも上がり、活動頻度も上がるに違いないという、他力本願な作戦を考えつきました。

というわけで、チームすずめでは「一緒に走ってもいいよ」と言ってくれる仲間を募集中です。

アットウェアに関わりのある方も、ない方も、リクルート活動の一環としてでも一緒に楽しんでもらえるなら大歓迎です!

Facebook page (更新してない!)、もしくはアットウェアのコンタクトフォーム(会社公認なので)OK(なはず!)から、ご連絡お待ちしております!

海外でのお仕事

海外でのお仕事

本日は荒木が担当します。

atWareは、お仕事や視察や勉強などで海外へ行くことがよくあります。最近だとCouchbaseやjavaやアジャイル関係でアメリカに行っています。過去にはオランダの方にも、いろいろやっていますね。 CouchbaseやJavaやアジャイル関係は毎年行っていて、日本に閉じずにいろいろな刺激を積極的な受け入れている会社です。

私自身は海外の仕事に興味はありましたが縁はないかなと思っていました。しかし、今年はオフショアでの開発の仕事があり、ベトナムへ行ってきました。(研修旅行とダブることになりました)

私は初めてのオフショア開発で、まったくの素人ででいろいろな不安がありました。コミュニケーションだったりもありますが、一番の不安は成功するために何をしたらいいかがわからないことでした。そんなこともあり、社外のオフショア開発の経験者に話を聞くなどをしました。

一部聞いた話を上げると

  • ハノイはベトナムの中では勤勉の方が多い
  • 地方の出身者のほうが優秀な方が多い
  • 行間を読まない
  • ブリッジの方が優秀でもメンバーが優秀とは限らない
  • 契約指向なので最後は契約を盾にしてくる
  • ドキュメントを書くのが苦手
  • メールでの指示は一つ一つ分けて行う
  • 言っただけではやっぱり伝わらない
  • 日本みたいな感覚で接するとうまくいかない
  • 日本の報道はいいことしか言わない。悪いことはいいこと以上に多い
  • みんな最初は失敗する

などなど

40日ほど現地での作業をやって来ました。本当に楽しい仕事でした。

また、現地の作業をやってみて感じたことは、

  • 英語力が高い
  • 向上心がある
  • 仕様通りに作るクオリティは非常に高い
  • 助けあって問題・課題に取り組んでいる。すごくメンバーの仲がいい。
  • パーティーが沢山あって楽しい職場。
  • 若くて能力の高い開発者が多い。伸びしろを感じる。
  • のんびり屋さんが多い。
  • 8:30〜17:30(昼休み1時間)が労働時間。基本的には残業はない。
  • 会議でネガティブだったことを言わない。出来たことを強調する。
  • 行間は読んでくれないことは納得できた。
  • 例外処理は苦手。
  • TDDができない。
  • 教育の仕組みを考える必要がある。
  • 時々停電、瞬断がある。
  • ネットは遅い。

などなど

成功の鍵はコスト削減を目的にしないことかなと、個人的には思いました。

海外で働いてみたいとか海外の企業と一緒に仕事をしてみたいということはatWareで沢山機会があります。私は英語がほとんど出来ませんが、海外での仕事の機会がありました。おそらく、海外での仕事をしてみたい、成功させたいというモチベーションだけは持ち続けていたからかなと思います。