リーダー(前半)

リーダー(前半)

こんにちはKEYチームの荒木です。今月もブログを書いたので読んでいただけたら嬉しいです。

開発者としてプロジェクトマネージャーとしていくつかのプロジェクトに関わってきました。 そして、この世界に入ってからずっと現役でコードを書き続けると思っていました。しかし、2014年6月に会社の変革と自らの気持ちが一致して、チームの管理を行うチームリーダーに自らなることを決断しました。

リーダーとして1年やってきた経験を2回に分けてお伝えしたいと思います。

愛がなければ続けられない

チームリーダーの仕事は思っている以上に大変です。向き不向きがあるかもしれません。 リーダーに求められていることは何でしょう?

一言でいうと結果を出すことです。

チームの開発能力を高くしても、結果が出なければリーダーとしてはダメです。メンバーのモチベーションを高め、最新の技術やプロセスを駆使して、時には怒り、時には褒め、苦渋の決断を下し、方針を決定しながらチームとして結果を出し続けなければなりません。失敗は常にリーダーの責任になります。そして、成果はメンバー全員の努力のおかげです。

結果を出すことに動機がなければ続けられないです。つまり、チームへ仕事への愛が必要です。

結果をだすために重要と感じたこと3点。

1つ目は良きメンバー(パートナー)にであうことです。 困難なときに問題はリーダーだけでは解決できません。仲間と共に協力して行く必要があります。 人間関係が大切で、結果を左右することだと、理解しておく必要があると思います。

2つ目はチャレンジし続け前に進むことです。 チャンスはいたるところにあります。怖がらずにチャレンジし続け、全力でぶつかった人にだけしか成功は訪れないと思いました。最初はほんの僅かの可能性だけかも知れません。ですが、そのほんの僅かの可能性を信じ、行動し、少しでも状況を変えられたとしたら、それってもう結果に向かって進んでいるんだと思います。

3つ目は謙虚であることです。 常に自分に問題があるかもしれないと思い自分が正しいと思いすぎないことです。

無視を恐れず失敗は他のリーダと共有

リーダーになりたての頃は、メンバーに何を話したらいいのか分かりませんでした。伝え方が悪かったり、しゃべりすぎたり、いろんな失敗をしてきました。メンバーへの遠慮もありました。他のリーダーとも会話もまったくなく意見交換もありませんでした。

その思いをリーダー達に伝えましたが他のリーダーには響かなかったようで孤独感が襲ってきました。

img3.png

その後、あるリーダーがチームの課題を素直にオープンにしました。その決断は素晴らしく、チームのコンセンサスが取れていない状態をオープンにして自信をなくしていることを伝えているのだと感じました。それからは他のリーダーとも時折会話するようになり共有を図るようになりました。

伝え方は千差万別。どのように伝えるかは難しいです。共有を図ることで成功させる可能性を上げることができます。

このことから学んだことは、話し方の重要性と機が熟していないタイミングで話をしても無視されることです。もし無視されていたら機を熟させる方法を考えることにしました。

続きはこちらです。

 全文検索システム「SOLR」の紹介 - 第3回「検索ノイズと検索漏れ」

全文検索システム「SOLR」の紹介 - 第3回「検索ノイズと検索漏れ」

みなさん、こんにちは。lunettesチームの的場です。 今回は「検索ノイズと検索漏れ」について説明します。

検索ノイズと検索漏れ

前回Solrでは転置インデックスを作成して全文検索を行うと紹介しましたが、その際に気をつけることとして検索ノイズと検索漏れがあります。

検索ノイズとは

例えば「東京都」という単語には「京都」という単語が含まれています。「京都」で検索した場合に「東京都」と書いてある文書も検索結果に含まれてしまうのが検索ノイズです。 これは前回紹介した転置インデックスの作成方法の内、N-gramで起こりやすい現象になります。形態素解析の場合は辞書に載っている単語で検出するので「東京都」が辞書に載っていれば「京都」で検索した場合に「東京都」が結果に出ないようにすることが出来ます。

検索漏れとは

検索漏れは検索ノイズと逆で、例えば「小学校」「中学校」という単語が文章内に含まれている場合に、「学校」で検索したときに検索結果に含まれない場合が発生します。 検索漏れは形態素解析の場合に起こりやすい現象となっています。N-gramでは基本的に検索漏れは起こりません。

まとめ

全文検索では単語の検出方法によって、検索ノイズと検索漏れが起こります。

その他にも以下のような特徴があります。

  • 形態素解析
    • インデックスのデータは比較的小さくなる
    • 検索速度は比較的速い
    • 辞書のメンテナンスが必要
  • N-gram
    • インデックスのデータは比較的大きくなる
    • 検索速度は形態素解析よりは遅くなる

用途に応じて使い分けましょう。

Announcement- atWare is Now a Typesafe System Integrator

We are proud to announce that atWare is now a Typesafe System Integrator.

"We're very excited about this opportunity. Typesafe's support of reactive application development is closely aligned with atWare's focus of providing scalable solutions for customers. We're looking forward to working closely together." said Koji Kitano, VP of atWare.

By partnering with Typesafe, atWare can leverage the powerful combination of Scala, Akka middleware, Apache Spark, and developer tools via the open source Typesafe Stack, as well as commercial support, maintenance, and operations tools via the Typesafe Subscription service. As a Typesafe partner, atWare will provide consulting services to accelerate the commercial adoption of Scala, Akka, and Apache Spark.

FOOTGOLF

FOOTGOLF

KEY チームのアライです。技術系以外のネタです。

弊社では数々のブカツドウを行っています。
ブログでも紹介しています「はんだ部」を筆頭に、「自転車部」、「ラーメン部」などなど…
その中の一つにアライ一人で活動しているフットゴルフ部があります。

What is FOOTGOLF ???
サッカー(フットボール)とゴルフを融合した新しいスポーツで、 一言で言うと「サッカーボールを蹴って、ゴルフをする」です。
※日本フットゴルフ協会抜粋

2014年2月に日本フットゴルフ協会(http://www.jfga.jp/)が発足しましたが、
2009年にはオランダでルール化され、2012年にはハンガリーで第一回ワールドカップが開催。
現在欧米を中心に30カ国以上でプレーされています。特にイギリス、オランダ、アルゼンチン、ハンガリーが盛んなようです。

世界ではジワジワ来ているフットゴルフですが、日本ではまだプレーできるゴルフ場が少なく、
現在常設コースを持っているゴルフ場は全国で栃木宇都宮、兵庫三田、静岡御殿場の3つのみ。

このような環境の中、協会の尽力により1day大会を開催させてくれるゴルフ場は少しずつ増え、
これまで協会主催大会のジャパンオープンが各地で12回実施されています。


2015年1月に日本フットゴルフ協会が国際フットゴルフ連盟(FIFG)に正式加盟したこともあり、
先月6月5~7日にオランダで開催された国際大会「THE CAPITAL CUP(キャピタルカップ)」に
日本フットゴルフ協会が選考した日本代表を派遣することになりました。

4つのジャパンオープン兼代表選考大会における獲得ポイント上位6名が初代日本代表候補となり、
な、なんと私アライが総合2位で初代日本代表に選出され、日本代表として国際大会に参加してきました!!
選出された記事はコチラ
候補として選出されたことが「スッキリ!」で少し放送されたこともあり、
各方面から応援が届き、非常に嬉しく思うと同時に、日本代表としての重みを感じました。
会社から餞別もいただき、またお休みも快く承諾して貰い、気持ち良くオランダに向かいました。

初めてヨーロッパ。

「THE CAPITAL CUP(http://www.footgolfcapitalcup.com/)」はヨーロッパツアーの1大会で、3日間でチャンピオンを競います。
ヨーロッパツアーの中で最も規模大きく、参加者も多い大会です。今回は世界13カ国110人が参加しました。

大会会場となったゴルフ場は非常に大きく、隣のホールではラフな格好でゴルフを楽しむ地元の方々が見られました。

【初日】
イギリス人、オランダ人、ハンガリー人、イタリア人、そして日本人のパーティーでスタート。
緊張の中、初の国際大会で初のティーキック。
普段通りのキックができ、初ホールで初バーディー!
しかしその後は続かず、ボギー、ダブルボギーなどもあり、18ホールで「+1」で初日を終えました。

【二日目】
この日のパーティーは初日とは異なるイギリス人、オランダ2人、ハンガリー人、そして私。
前日の経験を活かしてスコアを伸ばしたいところでしたが、18ホールで「0」。トータル「+1」。
しかも池ポチャのオマケ付きです…

【最終日】
全選手が1番ホールからのスタート。
オランダ人、ハンガリー人、フランス人、アイルランド人、そして私。
最後は楽しみつつ、しかし結果にこだわって戦うも、18ホールで「+2」。
3日間のトータルは「+3」で、最終順位は60位タイでした。

滞在期間中は天気に恵まれ、一緒に回った選手達もコースも素晴らしく、ヨーロッパでのトップ大会と実感しました。
良い結果は出せませんでしたが、国際大会のコース、雰囲気などを感じ、
また程良い緊張感の中でプレー出来たことは貴重な経験となりました。

「THE CAPITAL CUP 2015」の様子はコチラ↓
1:22にアライが出ています!

2016年1月7~10日にアルゼンチンで開催される「FIFG アルゼンチン ワールドカップ2016」の日本代表選考会が
今週日曜(7/19)の「第13回フットゴルフジャパンオープン」を皮切りにスタートします。
ワールドカップはサッカーに携わって来た者としては、まさに夢の舞台。
サッカーと関係性のある競技なので、是が非でも参加したいです!
11月には良い報告が出来るように頑張ります。

尚、フットゴルフにご興味のある方は、是非ご一報下さい!
フットゴルフ部部長アライ:araco@atware.co.jp

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

Mackerel + Raspberry Pi で 職場環境をモニタリング

Mackerel + Raspberry Pi で 職場環境をモニタリング

皆さんMackerelをご存知ですか?

Mackerel とは はてな社が提供しているサーバー監視のサービスで、 サーバーにエージェントと言われるモジュールを設置するだけで、サーバーの状況がブラウザからグラフィカルに確認できるサービスです。

また、監視ルールを設定しておくことにより、サーバーが特定の状態(CPU使用率90%以上など)になった場合アラートを通知したり 無料プランでも一部制限はありますが、サーバー5台まで監視可能など、お手軽、便利、太っ腹なサービスです。

今回は、そんな本来はサーバー監視のサービスであるMackerelを本来の用途以外に使ってみようと思います。

突然ですが、夏ですね

だんだん気候も夏めいて来た今日このごろ、やはり気になるのはオフィスの環境。 健康を害するような環境で仕事をしないためにも、暑さで仕事の効率が落ちないためにも職場環境には気を使いたいところです。

というわけで、今回は職場(でなくてもいいですが)の温度と湿度を計測したいと思います。

温度・湿度を測定する

では、実際に監視システムを構築していきたいと思います。

今回使うもの

  • Raspberry pi 2 Type B
  • 温湿度センサー
    • 今回はAM2320 を使用しました。
  • Raspberry pi と 温度センサー接続用のブレッドボードやジャンパ線
    • 温度センサーとRaspberry Pi をつなぐための線を必要な分用意します。
  • 以前に使用したズゴック(オプション)

ハードウェアの準備

Raspberry Pi と AM2320 を接続する

この実体配線図のようにAM2320をRaspberry Pi と接続します。 AM2320は型番のシルク印刷を表に見た場合、 左から * VDD <-> Pin #2 5V * SDA <-> Pin #3 SDA * GND <-> Pin #20 等 GND * SCL <-> Pin #5 SCL と接続します。

raspi_am2320

ソフトウエアの準備

Raspberry Pi で I2C を使えるようにする

今回使用する AM2320 という温湿度計モジュールは I2C インターフェース経由でデータを取得します。 RaspberryPIは初期状態ではI2Cが有効になっていないため、 こちらのページ を参考にし、I2Cを有効にします。

AM2320からデータを取得するプログラムを用意する

こちらのコード をベースにし、出力をMackerelに対応させたコードがこちらです。

これをRaspberryPI上でコンパイルし、パスの通った場所に配置します。

$ curl -LO https://gist.githubusercontent.com/yenjoji/40d135519a0741d3718b/raw/5c7835651a539f16f3446108e15aa482f6c2111f/am2321.c

$ gcc -lm -o am2321 am2321.c

$ chmod a+x am2321 mv am2321 /usr/local/bin `

Mackerelとの連携

Mackerelに登録してオーガニゼーションを作成する

Mackerelのヘルプにそって、オーガニゼーションを作成します。

maeckrel-agent をインストールする

パッケージをダウンロードし、インストールします。

$ curl -LO http://file.mackerel.io/agent/deb/mackerel-agent_latest.all.deb
$ sudo dpkg -i mackerel-agent_latest.all.deb

ARM 版バイナリに実行ファイルを置き換える

通常ならば、パッケージをインストールすれば完了ですが、 RasperryPiはもともとMackerelが想定しているCPUとアーキテクチャが違うためかそのままではうまく起動しません。 そのため、RaspberryPiのCPUにあったアーキテクチャのMackerelの実行ファイルで上書きします。

$ curl -LO https://github.com/mackerelio/mackerel-agent/releases/download/v0.17.1/mackerel-agent_linux_arm.tar.gz tar xf mackerel-agent_linux_arm.tar.gz

$ sudo mv /usr/local/bin/mackerel-agent /usr/local/bin/mackerel-agent.org sudo mv mackerel-agent_linux_arm/mackerel-agent /usr/local/bin/mackerel-agent

maeckrel-agentの設定

インストールが完了したので、設定をしていきます。

設定ファイルに apiKeyとカスタムメトリクスの設定を追加します。 /etc/mackerel-agent/mackerel-agent.conf に オーガニゼーションの画面に表示されているAPIKEYと 以下のカスタムメトリクスの設定を追加してください。

# Get room status
[plugin.metrics.temperature]
command = "/usr/local/bin/am2321 -m" `

mackerel-agent 起動

以上で設定がひと通り完了しましたので、エージェントを起動します。

$ sudo /etc/init.d/mackerel-agent start

これで、先ほど作成したオーガニゼーションに自動的にホストが追加され、 mackerelのデフォルトの監視項目と、温湿度計のデータが記録されていくようになります。

mackerel-room

アラートの設定

無事に温度と湿度の記録が始まりました。 しかしながらこれだけでは、職場が危機な状況になっても気づくことが出来ません。

ということで、職場の労働環境を監視する尺度として、不快指数を使って職場環境をモニタリングしたいと思います。

実は先程のMackerelカスタムメトリクス取得プログラムには、温度、湿度以外に不快指数も取得できるようにしてあります。 なので、手順通りに設定した場合は、すでにカスタムメトリクス上に不快指数が記録されていると思います。

wikipediaによると、日本人は不快指数が77を超えた辺りから一部の方々が不快を覚え始め、80を超えるとみんなが不快感を感じるそうなので、 この値を超えた場合に通知が来るように設定したいと思います。

  • Macerel管理画面から Monitor メニューをクリックし、監視ルールを追加ボタンをクリックします。 mackerel-monitor_001
  • ポップアップしたウィンドウに監視条件を入力し作成ボタンをクリックします。 今回は不快指数(custom.room.1.discomfortindex)を選択し、77でWarning、80でCriticalとなるように設定します。

    mackerel-monitor_002

  • 作成した関し条件が一覧に表示されていれば成功です。 これで不快指数がしきい値を超えるた際にメール通知がされるようになりました。また、チャットなどメール以外の通知方法も用意されています。(私はHipChatにも通知しています。) momongar-discomfortindex

ズゴックと連携する

以前作成した、ズゴックXFDですが、 チームのみんながちゃんとテストが通ることを確認してからソースコードをPushするため、ほぼ活躍する機会がありません。 このままだと ただ職場にガンプラをおいている人になってしまう ので、 ズゴックの存在意義を上げるべく温度計を連携させたいと思います。

温度計の実装

  • ドリルで大まかな穴を開けた後、ニッパーで穴をつなぎ

    DSC_0093

  • カッターで凹凸を整えます

    DSC_0094

  • センサーを開けた穴にはめ込み、配線を足経由で踵から外部に引き出せば完成です。

    DSC_0101

  • 組み立てるとこんなかんじになります。

    DSC_0108

  • 後ろ

    DSC_0105

結果

晴れてズゴックに温度計が付き、職場の状況をモニタリングすることが可能になりました。

これで、自分の居室の不快指数を計測し放題です。 計測したところで、特に快適になったりはしないのは残念ですが、 計測データを元に現場のリーダーに職場環境のカイゼンをお願いする材料くらいにはなるはずです。

ただ、残念ながら、温度計を付けてもズゴック見た目に変化がないので、 相変わらず傍から見るとガンダム好きな人にしか見えないという点は今後の課題とします。

みなさんもMackerelと様々なセンサーを組み合わせて遊んでみてはいかがでしょうか?

参考URL

Raspberry Pi の I2C を有効化する方法 (2015年版)

Raspberry Pi で湿度センサ AM2321 を使う

Mackerelについて

不快指数

jsxをtransformする livereload 環境の比較

jsxをtransformする livereload 環境の比較

こんにちは、KEYチームの荒木です。先月来日していたPriyatamさんがタスクランナーでsassのコンパイルの遅さを指摘されていました。たしかにそうですね。では他の状況はどうかと思い、watchifyを使ったlivereload環境の速度と安定性について npmとgruntとgulpで比較してみることにしました。

比較

npmだけ

live-serverで環境を構築、速度を考えてwatchifyで差分ビルド。

保存した0.5から1秒後にリロードされました。起動も早いですし安定した動きですね。


grunt

yeomanによくあるconnect-livereloadで環境を構築。

かなり早いですね。押した瞬間にリロードされました。ですが、保存直後すぐに修正して保存した場合に限りリロードされても反映されませんでした。 すぐに修正することも少ないのでほとんど影響ない範囲ですね。


gulp その1 browser-sync

browser-syncを使ったlive環境

npmとかわりないですね。


gulp その2 gulp-live-server

gulp-live-serverをつかってもlive環境をつくれますのでやってみました。

QuickTimeで録画するとうまく動かず録画できませんでしたが、こちらもnpmと変わりないですね。


結論

transformするコード量は少ないですが、Gruntが少し早いていどでそんなに大差はなかったですね。 なにを採用しても良い環境は作れると感じました。

おすすめ

チョット書く程度でしたらnpmで。 タスクをキレイに整理して書きたいのならgulpでしょう!

Scala, Sparkを学ぶ。楽しむ。挑戦する。アットウェアのインターン

Scala, Sparkを学ぶ。楽しむ。挑戦する。アットウェアのインターン

Spark-logo-192x100px.png

世界中が注目する技術を学べるインターン!!

株式会社アットウェアは、今年の7月に米国Typesafe社とのコンサルティングパートナーを締結したことを機にScala, Sparkなどを活用し、Reactiveアーキテクチャを使ったシステム・プロダクト開発を推進していくため、新たにScala, Akka, Sparkエンジニアの採用強化を行っております。Reactiveアーキテクチャは、本来、固有のメーカーやフレームワークに依存するものではなく、耐障害性や柔軟性の高いシステムを構築していく考え方を指しています。それらの考え方を学んだ上で、Scala, Akkaを利用したシステム開発をさらに学んでいくことは非常に重要なことです。

そこで株式会社アットウェアでは、Scala, Sparkなどの技術を学べるインターンシップを実施しております。Twitter社やNETFLIXなど世界のトップリーディングが注目・採用しているアーキテクチャ・技術を無料で学べるチャンスです。興味が有る方は是非私達にコンタクトしてください。


<募集要項>

期間:3ヶ月程度〜
 *現職エンジニアについては、土日などを利用し、期間を延長して調整する場合あり
 *個人のスキルにより期間を調整する場合あり


内容:
 ・講義(集合、オンライン教材)、演習、アプリ制作、プロジェクト


実施形態:オフライン + オンラインのミックス
 ・オフライン(講義、メンターへの質疑、プロジェクトへの参加)
 ・オンライン(オンライン教材、演習、アプリ制作)*オフラインでの実施も可能(アットウェアオフィスにて)


支給/貸与:
 ・自宅からオフィスまでの交通費、開発マシン、クラウド環境(AWSなど)


インターンで習得できること:
 ・関数型言語Scalaを使って、Web・サーバアプリケーションの作成
 ・Apache Sparkを使い、ストリーミング処理、ビッグデータ解析、繰り返しの機械学習などを行う基礎、およびデータサイエンスなどそれら応用への適用


応募方法:
 以下の応募フォームにて御連絡ください。担当のものから必要書類や面接スケジュールなど御連絡します。
 不明点がある場合も以下フォームから問い合わせください。


応募条件:
 学生、ITエンジニア
 プログラミング経験が1年以上あること


選考:
 応募書類および面接にて選考


応募フォーム

We are Reactive 〜株式会社アットウェア Typesafe社とのコンサルティングパートナーを締結しReactiveSystemを推進していきます〜

We are Reactive 〜株式会社アットウェア Typesafe社とのコンサルティングパートナーを締結しReactiveSystemを推進していきます〜

2015年7月7日、株式会社アットウェア(代表取締役 牧野隆志)は、日本のシステム開発分野において今後の新システムで求められているReactive System(以降リアクティブシステム)のシステムインテグレーションおよびコンサルティング事業を積極的に進めていくため、米国Typesafe社とコンサルティングパートナー契約を締結しました。

今日の求められているシステムに対する要件は高く、システムの利用者はミリ秒の応答時間と 100% の稼働率を期待し、データはペタバイト単位のものを分析しリアルタイムにユーザやアナリストにフィードバックするなどです。今実際に利用されているシステムアーキテクチャで、それらのユーザの要求をすべて満たすことは容易なことではありません。

リアクティブ宣言で宣言されているように、私たちアットウェアでは、Reactive System アーキテクチャがそれらの厳しい要件を満たすためのひとつの解とし、即応性、耐障害性、弾力性、メッセージ駆動を備えたシステム開発を進めていきます。より柔軟で、疎結合で、スケーラビリティがあるシステム開発をユーザ企業とアジャイル開発を通して推進していくことで、ユーザ企業のビジョンの実現を加速させるとともに、私たちのミッション"システムで人々をしあわせに"の実現を目指していきます。

Typesafe社は、JVM上で動作するScala言語の生みの親Martin OderskyがCo-founderとして創設したオープンソースソフトウェアをベースとしたビジネスをしているグローバル企業です。Play framework, Akka, Apache Sparkなど、Scala/Java等から利用できる、今日において先進的で有益なオープンソースソフトウェアにたいしてコントリビュートしているエンジニアが多く所属し、それらのコンサルティング、トレーニング、または開発・プロダクション環境においてのサポートサブスクリプションを提供しています。

Typesafeが進めているReactive SystemアーキテクチャのEcoSystemとして、それらScala, Play, Akka, Sparkなどがあり、株式会社アットウェアはそれらのEcoSystemに通じ、それらの技術を含むシステム構築、コンサルティングを日本国内で実施していきます。 具体的には、スループット問題などパフォーマンスに関わる事やスケールアウトの困難な問題、およびスケールアウトに伴う費用肥大化、またHadoopなどの大規模データの並列分散処理の効率化についてReactive Systemにより改善が見込まれます。また既存システムへの適応だけではなく、新規開発として、小規模システム〜大規模システムの初期構築についても威力を発揮し、弾力性(Elastic)を兼ね揃えたシステムを構築するのも可能となります。

株式会社アットウェアでは、今回のScala, Akka, Apache Sparkなどの先進技術、言語においてのシステム開発のコンサルティング、およびシステム開発(受託開発)を日本市場において実施などの新たな取組みと合わせて、グローバル開発の展開も視野にいれており、DevOps開発体制の強化も計画しております。

今後の株式会社アットウェア、Typesafe社のアクションにご期待ください。

we-are-reactive-blue-right.png

First Steps with Scala Programming

I get asked periodically at work about getting started with Scala programming. This is a published answer to that question.

By far the easiest way to get started is with Activator

What is Activator?

Activator is SBT + a UI + a tool for downloading and installing templates that include tutorials. You don’t need anything else. Follow the link above to install it and get started.

What is SBT?

SBT is a build tool- it compiles your code and handles your dependencies. It’s just like Maven or Gradle, and has the most comprehensive support for Scala.

It’s easy to get started with SBT. There is substantial documentation available, including a book co-authored by one of the SBT committers, Josh Suereth.

Something to keep in mind as you’re getting started. There are, to my knowledge, three different syntaxes for writing build scripts with SBT. You’re liable to come across all three. The three are:

1- Straight up Scala When you see Build.scala, it’s straight up Scala code importing SBT. It’s fine, and it works, but it is not the latest form of SBT. I personally avoided looking at these examples, as I found them a little difficult to read.

2- build.sbt, with a space between each line This is a new/old style of SBT syntax. At one point in SBT evolution, the space between each line was used to delimit a line command. This was for SBT before 0.13.7. If you see this, it’s important to know that you are not looking at the latest SBT syntax.

3- build.sbt, without spaces between each line This is the latest version of SBT. 0.13.7 and later.

It’s quite common to scour github looking for examples of what you want to do. Keep these three syntaxes in mind as you do so.

What else?

There are some alternatives to using Activator.

giter8 has some interesting project templates you can install. Among other templates, there is a template for a Scala-based Android app.

conscript augments giter8, but I have not used this.

What should I do first?

First, install Activator and it’s dependency, the JDK.

Then find a project to download and run. Check out the templates here, and find one you like. I would recommend the amazing, interesting Spray Spark React template, because it’s really well done and has fascinating tutorial (Disclaimer, I am the author).

The templates all have their own page explaining how to get started. But for completeness, just do this:

$> activator new amazing spray-spark-react

This will spit out some instructions for you

$> cd amazing $> activator ui

This will launch a browser and the activator ui. This will allow you to browse and edit the code, as well as view the tutorial.

Conclusion

It’s always nice to have a fully functioning project to get started with a new development platform. Scala has a reputation for being a little bit difficult to learn. I think this is largely unwarranted, and there are some really good tools for getting started quickly. Go forth!

shibboleth ready!

shibboleth ready!

ホームページがリニューアルされてから、Shibboleth関連についての初投稿になります。

Shibboleth-logo-smaller.jpg

Shibbolethとは、米Internet2が開発したオープンソースのシングルサインオンを提供するするソフトウェアです。

日本では、特に学術認証基盤を実現する技術として採用されています。有名なのは、GakuNinですね。

GakuNinは、全国の大学等とNIIが連携して構築する学術認証フェデレーションであり、 公開されている情報では、IdPは、165の組織が参加しており、SPは、64サービスにものぼります。

構築のお手伝いをしてきた者の感覚になりますが、近年、GakuNinの参加機関が急激に増加しており、学術機関としては、Shibboleth対応して、GakuNinに参加するという流れができつつあるのではと感じてます。

 

弊社は、そのような ShibbolethのSPやIdPの構築を行っております。 簡単ですが、実績の紹介になります。

  • Shibboleth/GakuNin関連のシステム
    • 金沢大学殿 携帯電話プロキシサーバ
    • 国立情報学研究所(NII)殿 TV会議システム「FaMCUs」
    • しぼすけ(アットウェア提供 スケジュール調整サービス)
  • Shibboleth導入支援
    • 国立大学殿 Shibbolethバージョンアップ
    • 公立大学殿 IdP導入、冗長化
    • Atlassian製品 Confluence/JIRA Shibboleth化
 

ここまでは、以前のホームページの中でもふれていたことですが、新たに下記のようなこともやっております。

  • uApprove.jpの構築
  • Shibboleth-DSの構築
 

このような実績と数多くのオープンソースソフトウェアの利用およびカスタマイズの経験を生かし、

今後も、大学やサービスプロバイダなどのお客様がShibbolethを導入して認証基盤を構築される際の支援をいたしてまいります。

Connecting SquirrelSQL To Apache Spark via Thrift Server JDBC

Introduction

Apache Spark is a great software project; a clustered computing environment that is well designed and easy to use. The attention it has been generating the last few years is well deserved.

Using Spark and SQL together has appeal for developers not accustomed to map, flatmap, and other functional programming paradigms. And allows developers to use SQL, a query language most are already familiar with.

Spark SQL can also act as a distributed query engine using JDBC. This is a useful feature if you plan to use Spark and SQL together, but the documentation falls a little short in places. This post is a first attempt to rectify that issue. It is a step by step guide to a fundamental method of connecting an SQL client to a standalone Spark cluster.

Setting up A Simple Spark System

The first step is to download and set up Spark. For the purposes of this post, I will be installing Spark on a Macbook. It should be the same steps in general on any operating system.

At the time of this writing I am downloading a Prebuilt Spark for Hadoop 2.6 and later.

Download this prebuilt instance of Spark. Also download SquirrelSQL, the sql client this tutorial will configure to connect to Spark.

Next we need to do a little configuring.

I added the following environment variables to my .bashrc:

# Spark local environment variables

export SPARK_HOME=CHANGEME!!! 
export SPARK_MASTER_IP=127.0.0.1 
export SPARK_MASTER_PORT=7077 
export SPARK_MASTER_WEBUI_PORT=9080 
export SPARK_LOCAL_DIRS=$SPARK_HOME/../work 
export SPARK_WORKER_CORES=1 
export SPARK_WORKER_MEMORY=1G 
export SPARK_WORKER_INSTANCES=2 
export SPARK_DAEMON_MEMORY=384m 
alias SPARK_ALL=$SPARK_HOME/sbin/start-all.sh 

You will need to change SPARK_HOME to the location where you unpacked the download. I configured the port that spark will use to commute, as well as the port for the webui. I configured it to use 1 core, two worker instances, and set some fairly strict limitations on memory.

I also added an alias to start all of them at once.

It is important to note that spark uses ssh to communicate with itself. This is a secure method of communication, but it is not common for a distributed system to talk to itself on a single machine. Therefore, you will probably need to do make some local changes to allow this on your machine. OSX has a Remote Login setting that allows this. Linux has several options. I don't recall what the Windows equivalent is. But to proceed beyond this first step, you will need to allow the workers to communicate via ssh.

Once you have your environment variables set, and they can communicate via ssh, we also need to add hive configuration. In order to connect with an SQL client, we're going to need to run a small server to act as a JDBC->Spark bridge. This server corresponds to the HiveServer2 (this is the Spark documentation wording. I really don't know what they mean by "corresponds to". I assume the Thrift JDBC/ODBC server is in fact HiveServer2).

In order to run the Thrift Server/HiveServer2 we will need to configure a location for the server to write metadata to disk.

Add the following file to $SPARK_HOME/conf/hive-site.xml

<configuration>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:derby:;databaseName=<my_full_path>/metastore_db;create=true</my_full_path></value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>


<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>


<property>
  <name>hive.metastore.warehouse.dir</name>
  <value><my_full_path>/hive-warehouse</my_full_path></value>
  <description>Where to store metastore data</description>
</property>
</configuration>

Now, with the configuration out of the way, you should be able to run spark all. Via the alias I described above,

# > SPARK_ALL

On my Macbook, I am prompted for my password twice, once for each work I configured. You can configure ssh with keys to avoid this, but I'm not going to discuss that in this post.

To test that your Spark instance is running correctly, in a browser go to http://127.0.0.1:9080

Note that $SPARK_HOME/sbin/stop-all.sh will stop everything.

Adding Data

Spark provides a number of convenient ways to add data. Presumably one might do that via database, but for this demonstration we're going to do use the method described in the Spark documentation.

We will use the data provided here

# > cd $SPARK_HOME

# > bin/spark-shell

scala> val dataFrame = sqlContext.jsonFile("path/to/json/data") scala> dataFrame.saveAsTable("tempdepth")

Storing this data as a table will write metadata (ie, not the data itself) to the hiveserver2 metastore that we configured in an earlier step. The data will now be available to other clients, such as the SQL client we're about to configure.

You can close the spark shell now, we're done with it.

Run the Thrift Server

So now we have a running Spark instance, we have added some data, and we have created an abstraction of a table. We're ready to set up our JDBC connection.

The following is reasonably well documented on the spark website, but for convenience:

# > $SPARK_HOME/sbin/start-thriftserver.sh --master spark://127.0.0.1:7077

You should see a bunch of logging output in your shell. Look for a line like:

"ThriftCLIService: ThriftBinaryCLIService listening on 0.0.0.0/0.0.0.0:10000"

Your thrift server is ready to go.

Next, we will test it via beeline.

# > $SPARK_HOME/bin/beeline
beeline> !connect jdbc:hive2://localhost:10000

This will prompt you for your password and username, you can use your machine login name and a blank password.

The resulting output should say "Connected to: Spark Project Core".

Now you know you can connect to spark via JDBC!

Install a Client

If you haven't already done so, download SquirrelSQL.

First, you will need to add the JDBC driver. This is the Hive driver, and to get that you can either download hive, or use the two jars I have provided in my github repo. hive-cli and hive-jdbc are the required. As are some classes in the spark-assembly jar. Add those to the Extra Classpath and you should be able to select the HiveDriver as the image below describes.

Save this driver.

And finally we will create a connection alias. Give the alias a name, select the driver you just created, and the URL should look like the image below.

Once you have created the alias you can click the Test button to test your connection. Hopefully you are successful!

Once you connect, you should be able to find the table you created earlier, and query via SQL.

ScalaDays San Francisco 2015 Recap

Sunset over the Golden Gate bridge

Sunset over the Golden Gate bridge

Last March, I attended ScalaDays in San Francisco. It was a fantastic experience!

I came away with a much better understanding of the Scala ecosystem, and was really impressed with the caliber of speakers at the event. I volunteered as a staff member, which is something I would recommend to others.

In fact, I should put in a plug for this- last year at OracleWorld I volunteered to teach kids to program with Devoxx4kids. I would highly, highly recommend it to anyone even remotely interested. It was an incredibly rewarding experience, and I got to meet awesome people.

This volunteer event was a bit different- I didn't get to hang out with kids interested in programming, for one, and I had to do manual labor. But I still got to meet awesome people, so it was worth it. If you're going to a conference, it's good to meet people. If you just go there, absorb the lectures, drink beer and hang out with your coworkers, I think you are missing out. So next time, volunteer, and you'll have a better time.

Ok, with that aside, here are some thoughts a month or so after the event.

The Future is Tasty

Martin Odersky introduced Tasty files to me during the keynote at Scaladays. I had never heard of them before, and they are still somewhat of a mystery to me. I'm dying to work with them. It is such a cool idea, I just have not had the time yet to see what is available now and figure out how it will work.

The gist is that Tasty files will solve binary compatability issues going forward for Scala, and at the same time will also allow the compiler to convert Scala to both class files and Javascript. To paraphrase something I attribute to Odersky but can not longer seem to find on the internet, Scala is no longer be a single platform language. So I've got that going for me, which is nice.

Spark

If you are a developer and do not live under a rock then you have probably heard of Apache Spark. Reynold Xin gave a really nice recap of the effort required to take a vanilla Spark instance turn it into a Sort Benchmark winner.

What you may not know is that Spark was initially developed with Akka. I'm not sure if it still uses Akka or not.

Shapeless

I attended the Shapeless talk and came away feeling a bit shapeless about the whole thing, actually. But after reading a little bit about it, it's easy to see why the talk was so well attended. The generic programming library is definitely worth looking at further.

ScalaJS

My one regret was not attending a ScalaJS talk, it was brought up repeatedly in the key note, and it's definitely worth looking at further. ScalaJS has support for use with ReactJS and Angular,

Here are the complete list of talks from the conference if you're interested in checking them out.

One last bit- I attended Advanced Akka Training after the conference. It was put on by BoldRadius. One of the instructors, Michael Nash, also spoke at the conference. The training was excellent.

なるほどわかった? Moodle Part2 プラグインの種類

なるほどわかった? Moodle Part2 プラグインの種類

みなさんこんにちは。アットウェアの不破です。

前回はMoodle全体の事を書きましたが、今回はMoodleのもっと奥深い事を書いていきます。

プラグインの種類

Moodleはプラグインを導入することで利用できる機能を拡張することが出来、ここがMoodleの醍醐味です。インストールすることが出来るプラグインにも種類がありますが、今回は「ブロック」について取り上げます。

「ブロック」とは?

画面左右に出てくる、これです。

ブロックはサイトトップ・コース画面・マイページに設置することが出来、ドラッグアンドドロップで左右であれば自由に配置できます。 ブロックを配置するときのコツは、「注意を引きつける」にあります。「〜さんが投稿しました!」や「締め切りが近い課題があります!」といった情報を表示させる場所として最適です。

サードパーティー製のブロックはmoodle.orgからもダウンロードすることが出来ます。 https://moodle.org/plugins/browse.php?list=category&id=2

ブロックは基本的に何個でも配置できるのですが、あまり多く配置してしまうとサイト全体が重たくなってしまうため、多くても10個程度にするのが最適です。また、ブロックが多いと学生の注意を引きつけにくくなります。

ちなみに私は"Misaka"という「コンシェルジュブロック」を開発しています。 https://github.com/yuesan/moodle-block_misaka

Moodleが持っているログデータを分析しその日のアドバイスを表示させるブロックで、状況に応じてキャラクターの表情も変わるようにしています。 学生さんのモチベーションをアップさせることを目的としており、「毎日Moodleにログインし、学習してもらえるようにサイトを明るくする!」を目指しています。 ちなみにMisakaは、今年のMoodle Mootで「ベスト・ムードル・イノベーション賞」佳作を頂いております。

ブロックはMoodleのプラグインにおいても比較的開発しやすい方で、下記URLにテンプレートが準備されています。 https://github.com/danielneis/moodle-block_newblock

次回は「mod」について紹介します。

 全文検索システム「SOLR」の紹介 - 第2回「全文検索の仕組み」

全文検索システム「SOLR」の紹介 - 第2回「全文検索の仕組み」

みなさん、こんにちは。lunettesチームの的場です。 前回に引き続き、全文検索システム「Solr」を紹介していきます。

全文検索の仕組み

全文検索では検索を高速に行うため、あらかじめ転置インデックスというデータを作成しておく必要があります。

転置インデックスは専門書の最後の方に付く索引をイメージしてもらえばわかりやすく、どのような言葉がどの文書のどの位置に存在するかを記録したデータです。

作成された転置インデックスは特定の順序で並べられており、検索で指定された文字や文章が索引に存在するかを高速に調べ、存在する場合はどの文書内に検索したい文字や文章が含まれているか取得することが出来ます。

転置インデックスの作り方

転置インデックスを作る際に一番問題となるのは単語の検出方法です。英語のような言語ではスペースで単語が区切られているため、単語の検出が容易ですが、日本語ではどこまでを一つの単語として扱うかは課題が多いです。

日本語における転置インデックスの作成方法としては形態素解析を用いる方法とN-gramを用いる場合があります。

形態素解析による単語検出

形態素解析は辞書に登録してある単語に基づいて単語を検出する方法です。

例えば、「アットウェアは神奈川県横浜市西区みなとみらいに所在しています」という文章に形態素解析処理をすると以下のようになります。

  • アット(名詞)
  • ウェア(名詞)
  • は(助詞)
  • 神奈川県(名詞)
  • 横浜市(名詞)
  • 西区(名詞)
  • みなとみらい(名詞)
  • に(助詞)
  • 所在(名詞)
  • し(助動詞)
  • て(助詞)
  • い(助動詞)
  • ます(助動詞)

形態素解析は辞書に載っている単語で区切りますので、この辞書にはアットウェアは登録されていないようですね。アットウェアが辞書登録されていれば、アットウェアのひとかたまりで名詞として検出されます。

形態素解析を使うことによりこの文書に含まれている単語は「アット」「ウェア」「神奈川県」「横浜市」「西区」「みなとみらい」「所在」などであることがわかり、それらを転置インデックスに登録することにより、その単語が含まれる文書を高速に探すことが出来るようになります。

n-gramによる単語検出

n-gramは意味のある単語は意識せずに、文字数で文章を区切って単語を検出する方法です。 1文字で区切る場合はuni-gram、2文字で区切るbi-gramと呼びます。

bi-gramで「神奈川県」という単語を区切った場合は「神奈」「奈川」「川県」という単語が検出されます。

検索で指定された言葉もbi-gramで区切って検索するので「神奈川」で検索した場合は「神奈」と「奈川」が含まれる文書を探すことになります。

それぞれの特徴

形態素解析のメリットとしては「n-gramに比べて転置インデックスのデータ量が小さい」点で、デメリットとしては「検索漏れがある」があります。

n-gramのメリットとしては「検索漏れがない」点で、デメリットは「転置インデックスのデータ量が大きい」「検索ノイズが多くなる」になります。

検索漏れと検索ノイズについては重要な内容ですので、次回詳しく説明します。

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

atWare English Speech Contest

atWare English Speech Contest

第1回チームTAN-TAKA-TAN主催のアットウェア英語スピーチコンテストを開催しました。7名の日本人社員がエントリー。審査員はHuyさんとAlisherさん。

このコンテストの主旨は、少しでも英語に慣れて、英語でのコミュニケーション活性化のためです。アットウェアには5名の外国人エンジニアが在籍しています。中には日本語が得意ではない人もいるため、英語でのコミュニケーションを使っていますが、大半を占める日本人エンジニア側はあまり英語は得意ではないのが事実。そこのギャップを埋めていこうということです。

スピーチ参加の7名の方には、「趣味や好きなモノ、事」をテーマに話をしてもらいました。最低時間は5分間。カンペを用意する人も居ましたが、思っていたよりも自分の言葉で話す人が多く、とても楽しいコンテストになりました。

審査の結果、優勝者はTakenagaさん。彼は2014年入社の新人です。英語の勉強をするという目標を持って継続して来たこともひとつの要因でしょう。立派でした。

さて、優勝者には鍛高譚一升瓶トロフィー(中身入り)が授与されました。

なぜ鍛高譚なのかは、アットウェアに訪問して聞いてみましょう!

IMG_9606 (1).jpg