夏のインターンシップが活況

夏のインターンシップが活況

今年もアットウェアでは国内・国外からたくさんのインターンシップ学生の受け入れをしています。

まず、海外からのインターンシップとして3名のベトナム ホーチミン工科大学から7月〜8月末までのの2ヶ月間のインターンシップを実施しています。

Shiroがリーンスタートアップにて開発しているMVP「Booksharing」

Shiroがリーンスタートアップにて開発しているMVP「Booksharing」

左から、Jack, Shiro, Kenji(いずれも日本人にわかりやすいようなニックネームをつけています) 7月頭からインターンシップを実施しているため、既に1ヶ月が経過し残り3週間となってきています。彼らのインターンシップの成果が大体形になってきており、残りの期間でスパートをかけて目標以上のものを作っていってもらいたいものです。

具体的には、ベトナムの1人の学生は、リーンスタートアップにてアイデアの具現化を実施しています。本の貸し借りをテーマに、社内の人や友人などを介してインタービューを行い、問題の確認とソリューションの提案などを行ってきました。社内リリースは既に終わっており、フィードバックを得ながら近々の外向けにリリースに向けて改善中です。

今年でベトナムからのインターンシップも3年目を迎え、すっかり恒例行事のようになってきました。ベトナムとの文化も慣れてきて、海外の人がオフィスで作業するということにもアットウェアとして日常になってきました。ベトナムの学生さん達は本当に仲が良く、いつもにこにこしているので、社内にとって良いムードメーカーにもなっています。8月末で帰ってしまい、少しさみしくなりますね。

さて、また国内からの学生さんのインターンシップも8月10日より開始しています。今年は3週間のスケジュールで実施しており、リーン、アジャイル開発、英語でScalaの3種類の中からテーマを選んで実施しています。

まだ始まったばかりですが、8月末には彼らの一皮むけた成長が見れることを期待しています。

Atlassian Summer Campaign

Atlassian Summer Campaign

KEY チームのアライです。

突然ですが、Atlassian ページ再開記念と暑い夏を吹き飛ばそう企画として、
「JIRA + JIRA Agile」25ユーザー版ライセンス(サーバー版)の無償利用キャンペーンを実施します。
以下応募条件を全て満たした企業様の中から、独自審査で1社を選定し、約1年間無償でご利用いただきます。

JIRA とは、「作業を計画し、タスクを共有、追跡するプロジェクト管理ツール」
JIRA Agile とは、「スクラム、カンバンでアジャイル開発を手助けするツール」

【応募概要】

  • Atlassian 「JIRA + JIRA Agile」25ユーザー版ライセンス(サーバー版)
  • 応募期間:2015年8月11日から8月31日
  • 当選企業発表日:2015年9月7日(予定)
  • 応募条件:
    1. 企業であること
    2. 応募理由(利用用途、想定ユーザー数含む)をアツく説明できること
    3. サーバーが用意できること
    4. 年数回の利用レポートを行うこと
    5. 貴社名を出して利用レポートを弊社ブログなどで公開可能なこと


再開した Atlassian ページのコチラからご応募下さい。
沢山のご応募お待ちしております!!

リーダー(後半)

リーダー(後半)

こんにちは、KEYチームの荒木です。本日は先週からの続きで1年やってきたリーダーの経験について書きました。前半はこちらです。あわせて読んでいただけると嬉しいです。

チームメンバーとよく対話する

やはりチームの主役はメンバーです。メンバー自身の想いが発揮できてこそチームと呼べると思います。チームメンバーのそれぞれの想いを100%とはいえないですが、自発的に行いたいと思うことはやれるようにしました。そして、その思いを受け止めるために、メンバーとよく会話し少しでも現状を知ることに努めました。

ちいさな力

どんなことに興味があるのか、どんな勉強をしているのか、将来どんなことをしたいのか?定期的に1対1で面談し、お願いや問題を聞き、リーダーからの期待を伝えます。そうすることで小さい力ですがサポートすることができます。

決断はむずかしい

リーダーはタイプによって異なりますが、チーム方針の決断をします。その場面場面でいいと思う決断を下すのは本当に難しいし、なにより辛いです。

だれでも結論を出せること、結論が決まっていることはリーダーが決断する必要はないと思いますが、 リーダーが決断しなくてはいけないことと感じたことは「やらなくてもいいことをやる」と「チームに影響を与える」ことだと思います。

やらなくてもいいこと

将来を見据えて大事に感じていることをやることです。直ぐにやる必要性がないことをやることです。例えば、英語とか!

チームに影響を与えること

正しく機能するチームは各メンバーが役割を認識し、そして、メンバー特性のバランスがとれていることだと思います。その機能するチームが出来たとして、チームに影響を与える(メンバーがいなくなったりする)決断をしなければいけないことが何より悩みます。 メンバーの主体的な想いから決定したとはいえ、口では「ノープロブレム」と言いつつ気持ちは「なんでだよ」と思ってしまいます。ん〜っ、辛い。

会議は多いが本当に重要なものだけ出る

リーダーになれば出席する会議が増えます。チームだけのことだけではなく会社全体として気配りをしなければいけません。プロジェクトとの調整がうまく行っていないと何一つリーダーとして役割を果たせなくなります。全ての会議に出ていてはプロジェクトへの対応がほとんどできなくなります。

工夫する

しかし、出席しなければチーム運営にも支障がでます。なので本当に必要と思える会議を選択してそれのみ出席するようにして、それ以外のものは代役を立てられるようにする工夫が必要です。

同じ方向に向かってもらうには本気を示せるかにかかってくるかも

具体的なことをかけないことはご理解していただきたいと思います。 メンバーはリーダーの決定を、なかなか受け入れてくれません。人は変化に弱いみたいです。ある決定から起こりえる将来が100%明るいと感じられない場合だと受け入れてくれません。それは人としてあたりまえだと思うようになりました。ではある決定の方向にメンバーの気持ちを向かわせるのはどうしたらいいのでしょうか? いまだにわかりません。ただ、何事にも本気でぶつかり少しでも決定が示す未来がいいものだと伝え続けることが大事ではないかと感じています。

結果はチーム全体で出す

結果を出すことがリーダーの役割ですが、一人で結果を出すことはできません。結果はチームメンバー全員で出すものです。プロジェクトが多忙だと自分自信の勉強だったりに時間を使えなくなります。バランスが大事になってきます。そのためにチームとして結果が出せるように多忙にならないようにします。時には稼働が高くなることもありますが、基本的には能力以上の稼働にならないようにします。

バランス

プロジェクト以外にもいろんな仕事が降ってきます。「それが行える時間があるのか」「メンバーが力を出せる状態なのか」を判断するために一人ひとりの稼働を見ておく必要があります。

コーディングしたい気持ちは捨てない

リーダーになってからは仕事でのコーディング量は減りました。こんな会議にでるよるよりコーディングしたいという気持ちは最初はありましたが、いまは「出来る時間でいかに成果を出すか」ということに集中するようになりました。

常に技術を取り込む気持ちを持ち続け、休日や通勤時間を使って本やネットから情報をいれ、プライベートでコーディングを行い、いつまでも開発者で在り続けないと、メンバーとの会話ができなくなったりし、リーダーとしては結果は出ないのではないかと思います。

最後に

リーダーへのプレッシャーはとても大きく、難しい決断の連続です。 ですが、やりたいことを成し遂げるために、人間関係が大事だと思っているメンバーと協力関係を作り上げ結果を出すことにやりがいを感じています。

なぜリードするのか

この1年わからないことだらけでした。 「問題解決のため、わざわざ面倒なことをするのか」 「より良いと思う方向に前進しようとしているのに、厳しい批判に耐えなくてはいけないのか」 「主催した勉強会の空席の多い時に何を求めればいいのか」 リーダーをやめるたくなることはたくさん出てきます。

ですが、やめませんでした。 答えはとてもシンプル。

周りの人に認められたい。 お金を得ることよりも、日々の小さな喜びを共有する日常・絆を得たいからです。

私は私ができることで他の人と繋がりたい。

Gebでのドラッグ&ドロップ

Gebでのドラッグ&ドロップ

みなさんこんにちは。KEYチームの武永です。
今回はWebテスト自動化フレームワークであるGebのNavigator APIのドラッグ&ドロップを使ってみましたのでそちらについて書いていこうと思います。
最近はNavigator APIの説明をしている記事は結構増えてきているのですが、 ドラッグ&ドロップを使用した記事は私が見る限りでは見つけられなかったため使ってみました。

Gebとは

  • Luke Daley氏を中心に開発されているWebアプリケーション向けの機能テストを自動化するためのGroovy言語で書かれたフレームワーク
  • GroovyなのでJavaと互換性があり、SeleniumWebDriverの資産をそのまま利用できる
  • jQueryライクな記述で簡潔なDSLでテストスクリプトを記述可能
  • Page Object Patternをサポートしているので画面変更に強いテストを簡単に作成可能
  • JUnitやSpockなどのテストフレームワークと統合することも可能なため、TDDやBDDなどの開発プロセスに取り入れやすい
  • テスト中の画面をキャプチャして出力できる

このような特徴があるテストフレームワークです。
ちなみに「ジェブ」と発音します。
私の周りで初めて「Geb」という単語を見た時に「ゲブ」と発音した方がいたので結構間違える人も多いのではないでしょうか。
公式でも「ジェブ」と発音しろと明記されているほどです。
http://www.gebish.org/

  • jQueryのような文法でHTML要素を取得することができるAPIのこと
  • "$"関数を使うことでコンテンツ内容を取得することができる
  • inputタグ, selectタグの値取得はもちろんのこと、値のセットも簡単におこなうことができる
  • クリックやドラッグ&ドロップといった動作も実行することができる

"$"関数の定義は

$(«css selector», «index or range», «attribute / text matchers»)

のようになっており、以下のようなコードを書いた場合は

$("h1", 2, class: "heading")

h1タグでクラスが"heading"の要素の中の、3番目(indexの最初は0)のものを取得できます。

以下、一例ですが、form内の要素の値検証、値入力等が非常に簡単だと思っています。
・HTML

・Geb

では本題のドラッグ&ドロップに入って行きたいと思います。
今回は以下の様な青と赤のブロックをグレイのブロックの上に移動すると
メッセージが表示されるというページを作成しましたのでこれを使って進めていきます。

このページに対してGebのコードは以下になります。

では、実際に動かしてみましょう。

マウスで動かすように徐々に移動するのではなく一瞬で移動するので分かりづらいかもしれませんが、
無事、赤いブロックを移動させてメッセージが表示されることの確認が出来ました。

最後に

現在参画しているプロジェクトでは実際にGebを使用していますが、このNavigator APIは非常に便利で使いやすいと感じています。
私は、Gebが初めて触れたWebテスト自動化フレームワークだったので他のフレームワークと詳しく比較することはできませんが、
個人的に少しWebDriverを使ってみた時には圧倒的にGebのほうが使いやすいと感じました。
WebDriverはちょっとしたことを書くためでもGebよりもコードが長くなってしまい見づらくなるのではないかと思っています。
今回使ってみたドラッグ&ドロップでもWebDriverでの実装よりGebならばコード量は明らかに減るということが分かりました。
実際にドラッグ&ドロップを使ったテストを書く機会があるのかはプロダクト次第かもしれませんが。。。

今後もGebを学んでいって、Gebに関する記事を書いていこうと思っていますのでまた読んでいただけたら嬉しいです。

Atlassian ページの再開

Atlassian ページの再開

KEY チームのアライです。
HP リニューアル後、atlassian ページが無くなっていましたが、いよいよ再開させます。
もう少々お待ちください!

ブログやページ内で各製品の事例などもお届けしていきます。
過去の Atlassian 関連ブログはコチラ↓

ApacheでProxyを実現

ApacheでProxyを実現

みなさん、こんちには。KEYチームの矢納です。

頑張って技術ネタを連続で投稿していこうと思っています。
過去記事の目次はこちらに移動しました。

今回はApacheでProxyを行う方法です。よくこの関連記事は見るのですが、毎回忘れてしまうのでここに残します。

Apacheをインストールしよう

今回はCentOS7にインストールします。

    # yum -y install httpd

自動起動の設定を追加し、Apacheの起動です。

    # systemctl enable httpd.service
    # systemctl list-unit-files | grep httpd
    httpd.service                               enabled
    # systemctl start httpd

Proxyを有効にする

httpd.confでProxyのmoduleを有効にする。 httpd.confは今回/etc/httpd/confにありました。

    #LoadModule proxy_module modules/mod_proxy.so
    #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    この2行のコメントアウトを外す

とおもっていたのですが、56行目が

    Include conf.modules.d/*.conf

となっています。 なので/etc/httpd/conf.modules.d/のディレクトリの中を覗いてみました。

    -rw-r--r-- 1 root root 3739 Mar 12 14:57 00-base.conf
    -rw-r--r-- 1 root root  139 Mar 12 14:57 00-dav.conf
    -rw-r--r-- 1 root root   41 Mar 12 14:57 00-lua.conf
    -rw-r--r-- 1 root root  742 Mar 12 14:57 00-mpm.conf
    -rw-r--r-- 1 root root  894 Mar 12 14:57 00-proxy.conf
    -rw-r--r-- 1 root root   88 Mar 12 14:57 00-systemd.conf
    -rw-r--r-- 1 root root  451 Mar 12 14:57 01-cgi.conf

たくさんありました(^^; 上記の二つのモジュールを有効にする必要が有るので検索です。

    # grep -e mod_proxy.so -e mod_proxy_ajp.so *
    00-proxy.conf:LoadModule proxy_module modules/mod_proxy.so
    00-proxy.conf:LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

あれ?最初から有効になっていますね。

Proxy設定を追加する

Proxyの設定をhttpd.confに追加しましょう。

    ProxyPass /static !
    ProxyPass /api http://localhost:8080/twm
    ProxyPassReverse /api http://localhost:8080/twm

この設定は

  • /static/* のアクセスは何もしない
  • /api/* のアクセスは http://localhost:8080/api/* に転送する

おわりに

CORS(Cross-Origin Resource Sharing)を避けるためによくProxyを使って回避するのですが、一度設定してしまえばもう見ることのない部分です。また、他の人が設定してしまえばさらに見ることはかなり減ってしまいます。

そのようなわけでよく忘れてしまうのです(^^;

Email: yanou at atware.co.jp

Atlassian Bamboo + Crowd 前編:Bambooの導入

Atlassian Bamboo + Crowd 前編:Bambooの導入

Bambooとは

Atlassian社製のCI(継続的インテグレーション)/CD(継続的デリバリー)を実現するソフトウェアであり、同様のソフトウェアにはJenkinsやCircleCI、TravisCIなどが存在します。

今回は、そんなBambooをセットアップし、ユーザー管理を以前紹介したCrowdに統合する方法をご紹介したいと思います。

これにより、システム管理者、運用者の負荷を軽減してくれるBamboo。それ自体の管理負荷を下げて、より生産的で楽しいことに注力できるようにしたいと思います。

今回は、前編として、Bambooのインストール方法をご紹介させて頂きます。

Bamboo の インストール

基本的には公式手順にのとって進めていきます。

前提条件

システム環境

  • OS : CentOS 7.0
  • Java : Oracle JDK 8u51
  • DB : 5.5.40-MariaDB

Bamboo配置先

  • インストール先 : /opt/atlassian/bamboo
  • データディレクトリ : /var/atlassian/application-data/bamboo

インストール

最新版のダウンロード

  • 公式サイトより最新版をダウンロードします。
wget https://www.atlassian.com/software/bamboo/downloads/binary/atlassian-bamboo-5.9.3.tar.gz

展開と配置

ダウンロードしたBambooのアーカイブを展開し、配置します。

tar xf atlassian-bamboo-5.9.3.tar.gz
mv atlassian-bamboo-5.9.3 /opt/atlassian/
ln -s /opt/atlassian/atlassian-bamboo-5.9.3 /opt/atlassian/bamboo

bambooの初期設定

  • Bambooデータパスの設定

マニュアルに記載のある通り /opt/atlassian/bamboo/atlassian-bamboo/WEB-INF/classes/bamboo-init.properties を以下の様に修正します。

bamboo.home=/var/atlassian/application-data/bamboo

  • Bambooメモリ設定の変更

/opt/atlassian/bamboo/bin/setenv.sh のメモリ設定を任意の値に変更します。 最大1GB程度にしておけばひとまず問題ないと思われます。

JVM_MINIMUM_MEMORY="512m"
JVM_MAXIMUM_MEMORY="1024m"

データベースの準備

次にデータ保存先であるデータベースを準備します。 今回はBambooのデータ保存先としてcrowdインストール編で用意したMySQL(MariaDB)を使用します。

  • データベースの作成
create database bamboo character set utf8 collate utf8_bin;
  • ユーザーを作成し権限を付与
GRANT ALL PRIVILEGES ON bamboo.* TO 'bamboouser'@'localhost' IDENTIFIED BY 'bamboopass';
  • DBドライバの配置

Mysqlのドライバを予めBamboo配下に配置しておきます。

/opt/atlassian/bamboo/lib

以下に ドライバのjarファイルを配置しておきます。

起動

ひとまず起動します

cd /opt/atlassian/bamboo
bin/start-bamboo.sh

初期設定

http://{bambooインストールIP}:8085/ にアクセスすると、 初期設定画面が表示されるので、画面に従って初期設定を行います。

  • ライセンスキーの入力

事前に用意してあればそのライセンスキーを入力します。 評価用であればAtlassian公式サイトよりトライアルキーが取得出来ますので、それを入力します。

  • Bambooディレクトリ設定

通常であれば変更の必要がないため、そのままContinueします。

  • データベースの選択

Bambooのデータを保存するデータベースを選択します。 今回はMySQLに保存するため、MySQLを選択しContinueします。

  • データベース接続パラメータの設定

データベースの準備で作成したデータベースへの接続パラメータを入力しContinueします。 Continueを押すと、データベースの初期設定が始まります。 しばらく時間がかかるので、根気よく待ちましょう。

  • データ移行

今回は新規インストールですので、「Createa new Bamboo home」を選択しContinueします。

  • 管理ユーザーの作成

任意のIDとパスワードで管理ユーザーを作成します。

以上で、Bambooのインストールは完了です。 次回は、以前インストールしたCrowdとBambooを連携させて、ユーザー管理をCrowdに統合したいと思います。

リーダー(前半)

リーダー(前半)

こんにちは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.