newcomer

newcomer

KEY チームのアライです。

今年度の新入社員3人が研修を終えて、8月からチーム、プロジェクトへの配属となります。
先日配属前に弊社メンバが参画している社外プロジェクトの開発現場を見学させていただきました。
弊社は請負での仕事がほとんどなため、
社外で作業するメンバがどのようなに立ち振舞、どのようにお客さんと信頼関係を築いているのかを見て、感じて欲しいです。

一日の始まりは、朝会です。弊社メンバがファシリテーションしていきます。
午前中は内部ミーティングを行い、まずはペアワークの見学。
気になるコトを質問すると、忙しい中丁寧に回答してくれます。新人だけの特権です。

今日のランチメンバで一枚。 よくお客さんとも一緒に行きます。

午後は別プロジェクトのスクラムイベントや打合せなどを見学させていただきました。
あまり質問ができる状況ではなかったので、少しでも何かを吸収しようと一層目を凝らし、耳を傾けました。
その後はまたペアワーク見学に戻り、タイミングをみて質問するなど、最後まで集中して取り組んでいました。

今日一日を終えて、各人から感想を貰いました。

mishima

mishima です。一日ありがとうございました。スクラムイベント、打合せなどを見学させていただきましたが、特に印象的だったのが、ペアプログラミングでした。二人で合意を取って、常に議論しながら慎重かつ迅速に開発を進めているという印象を受けました。社外の開発現場の雰囲気や、先輩社員の活躍などを見て、良い刺激を受けることが出来ました。

nam

nam です。I really appreciate for welcoming us.I felt the meetings very professional and I like the way that people work and discuss together.I learned Japanese so much when I talked with other people about everything in life, working, etc.

yamamoto

yamamoto です。一日ありがとうございました。先輩社員が朝会を主導したり、スクラムイベントで積極的な発言したりと社内だけでは見られないことや雰囲気を感じることが出来ました。また知らない技術を目の当たりにして、とても勉強になりました。

一日という時間でしたが、それぞれが違う形で貴重な経験や刺激を受けることが出来、
また社内だけでは感じることが出来ない現場の雰囲気や、先輩社員の立ち振舞も感じることが出来たようです。
どのチーム、どのプロジェクトに配属されたとしても、積極的にコミュニケーションを取り、
色々なことを吸収して、チャレンジして、次世代の atWare を担う存在になることを期待しています。

一日の終わりは、ノミニケーション。
お客さまにも参加していただき、楽しい時間となりました。
この場を借りて、ありがとうございました。

Gebでスマートフォン用ブラウザ上での表示を確認する

Gebでスマートフォン用ブラウザ上での表示を確認する

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

今回も前回に引き続きGebネタです。 前回の記事はこちら

つい先日、先輩に 「Gebでスマートフォンのテストってできないの?」 と聞かれました。
確かにできたら便利な場面はあるはずだと思い、調査して実際に動かしてみたのでそちらについて書いていきます。
スマートフォンのブラウザでの確認であってアプリの確認ではありません。

GebでiPhone版の画面を表示するためのコードが以下のものになります。

ユーザエージェントをiPhone6のものに設定することで実現可能になりました。
ユーザエージェントに関してはこちらのサイトを参考にしました。

実際に動かす際には上記で作成した「MobileSpec」を継承したクラスを作成します。
下記の例は、iPhone6で「Yahoo! JAPAN」へアクセスするものになります。

作成したGebを動かしてみたものが以下の動画です。

確かにスマートフォン版の画面表示をさせることが出来ました。

最近ではWebサイトはスマートフォンに対応していることがほぼ当たり前になってきていると感じています。
このようにスマートフォン版ブラウザでのUIテスト自動化を行う機会は増えていくと思いますので参考になれば幸いです。

Raspberry Pi上でCouchbase Liteを動かしてみた

Raspberry Pi上でCouchbase Liteを動かしてみた

RaspberryPiでCouchbase Liteを動かしてみた

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

技術ネタ第2弾!!「Couchbase LiteをRaspberry Piで動かしてみた」です。
過去記事の目次はこちらに移動しました。

Couchbase Liteとは?

みなさん、Couchbase Liteが何かというのはご存知でしょうか?Couchbase Liteというのは米Couchbase社が提供している製品の一つです。

Couchbaseはドキュメント指向のNoSQLデータベースです。Couchbase Liteではモバイルのローカル上にあるデータベース(SQLite)をあたかもKey-Value形式のように使えるようにしたものです。ですので、モバイルとは言え、高速なレスポンスが実現されています。

また、Couchbase Sync Gatewayと接続することにより、Couchabse Serverとの自動データ同期を可能とします。同期するデータも指定することができますので、モバイルのデータベース領域を食いつくす心配もありません。さらに、同期さえ済んでいれば、電波の通じないところでもネットワーク通信を行わないので、ネットにつながらなくてデータが取得できなくてイライラすることがなくなります。

どうやって Couchbase Lite を使うの?

Couchbase Liteで調べると、AndroidやiPhoneでの使い方は色々と紹介されています。AndroidやiPhoneで利用するには当然ですがある程度コーディングをする必要があります。ですが、Couchbase LiteにもREST APIが用意されているので、そちらを使ってコーディングなしでやりたいと思います。

色々と探っていたところこちらのGithubにありました。このサイトからcouchbase-lite-local.jarを実行するだけです。

ですが、2015/04/24時点、Sync Gatewayに対しての同期が正常に動作していませんでした。FacebookのJapan Couchabse Users Groupに質問したりして何とか解決することができました。

Couchbase Liteの起動

というわけで、実行するjarを作成しなおしてそのjarを実行するだけでCouchbase Liteの起動です。jarは私のGithubにおいてあります。そのうち、公式のほうが修正されると思いますので、そちらを待ちましょう。

    wget用
    $ wget https://github.com/Burning-Chai/couchbase-lite-sample/raw/master/couchbase-lite-local-new.jar

ドキュメントの保存など

起動が完了したら、データベースの作成、ドキュメントの保存、Sync Gatewayとの同期を行う必要があります。こちらの手順については私のGithubのREAD MEに書いてありますのでそちらをお読みください。

Sync Gatewayの用意

Couchbase Serverがどこかで起動しているのなら、Couchbase Liteとデータを同期したいものです。データの同期を行うのにはSync Gatewayを準備する必要があります。同期の仕方はREAD MEの最後に書いてあります。

Sync Gatewayインストール手順

Sync GatewayのインストールはLinuxに対して行いました。

1. こちらのサイトからダウンロード。

    $ wget http://packages.couchbase.com/builds/mobile/sync_gateway/1.0.4/1.0.4-34/couchbase-sync-gateway-enterprise_1.0.4-34_x86_64.rpm

2. Sync Gatewayのインストール

    $ sudo rpm -ihv couchbase-sync-gateway-enterprise_1.0.4-34_x86_64.rpm

3. コンフィグを指定しながらSync Gateway起動

    $ cd /opt/couchbase-sync-gateway/bin/
    $ vi sg-config.json
    {
      "log": ["REST", "REST+", "HTTP", "HTTP+", "Access", "Cache", "Shadow", "Shadow+", "CRUD", "CRUD+", "Changes", "Changes+", "JSON", "JSON+"],
      "verbose": true,
      "databases": {
        "blog": {
          "server": "http://localhost:8091",
          "users": {
            "GUEST": {
              "disabled": false, "all_channels": ["*"], "admin_channels": ["*"]
            }
          },
          "bucket": "sync_gateway",
          "sync": `function(doc) {channel(doc.channels);}`
        }
      },
      "facebook": {
        "register": true
      }
    }
    $ ./sync_gateway -verbose=true sg-config.json >> sg.log 2>&1 &

このコンフィグはSync Gatewayにblogというデータベースを用意し、sync_gatewayというCouchbaseのバケットと同期を行います。serverはCouchbaseのIPを指定します。userssyncで同期する関する設定をおこいます。databasesには複数のデータベースを書くことができます。

Sync Gatewayはログを出力しないので、リダイレクトを行ってログをファイルに書き込みます。

おわりに

今回一切コードを書かずにCouchbase Liteを使ってみました。Raspberry Piも最近ではお手軽に入手可能なので、これらを使うことによってIoTプロジェクトが作りやすくなるかもしれません。ぜひ、みなさんも試してみてください。

また、Raspberry PiやCouchbase、Couchbase Liteを使って「こんなことがしたい」という方はご連絡ください。一緒にやっていきましょう。ご連絡お待ちしております。

Email: yanou at atware.co.jp

Atlassian Bamboo + Crowd 後編:Crowdとの連携

Atlassian Bamboo + Crowd 後編:Crowdとの連携

BambooとCrowdの連携

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

前回(記事はコチラ)はBambooのインストールを行いましたが、今回はその続きとして、いよいよBambooとCrowdを連携させて、 ユーザーをCrowdで一元管理できるようにしたいと思います。

作業は、公式の手順(リンクはコチラ) に沿って 「Crowd設定」 -> 「 Bamboo設定」 という流れでですすめていきます。

Crowd設定

まずはCrowd側にBamboo用のユーザーの作成と、連携のための設定を行います。

今回はCrowdに以下のユーザーを作成してBambooと連携します。

ID Group Bambooのロール
bamboo bamboo-admin 管理者
bamboo-user bamboo-user 一般ユーザー

ユーザーの追加

Bamboo用にユーザーを追加します。

Top画面から「Users」タブをクリック

「Add User」リンクをクリックし、ユーザー登録画面にて必要な情報を入力し「Create」ボタンをクリック

同様に一般ユーザーも追加します

グループの作成

Bambooでユーザーのロール制御を行うため、ロールに対応したグループを作成します。

「Groups」>「Add Group」リンクをクリック

グループ登録画面にて必要な情報を入力し「Create」ボタンをクリック

同様に一般ユーザー用グループも作成します

グループへユーザーを登録

作成したグループへユーザーを登録します。 管理者にしたいユーザーは bamboo-admin グループへ。 一般ユーザーにしたいユーザーは bamboo-user グループへ登録します。

「Groups」をクリック、「bamboo-admin」リンクをクリック

「Direct members」タブをクリックし「Add Users」ボタンをクリック

「Search」ボタンをクリックすると、ユーザーが表示されるので、管理者にしたいユーザーにチェックをし、「Add Selected Users」ボタンをクリック

同様に一般ユーザーも一般ユーザー用のグループへ登録します

アプリケーションの作成

Crowdで作成したユーザーとBambooを関連付けるため、アプリケーションを登録します。

「Application」 -> 「Add application」 をクリック

下記の情報を入力し「Next」をクリック

項目 設定値
Apprication type Bamboo
Name Bamboo
Password 任意のパスワード

ここで設定するパスワードはBambooとCrowdが連携する際の認証に使用します。

BambooとCrowdの通信設定を入力し「Next」をクリック

URLにユーザーがアクセスするURLを、Remote IP AddressにBambooサーバーとCrowdサーバーが通信する際のBambooサーバーのIPアドレスを設定します。

ユーザーディレクトリの選択

Bambooの認証で使用するユーザーが存在する、ユーザーディレクトリを選択します。 今回では、先ほどの手順でユーザーを作成した際に指定したディレクトリを選択します。

グループの選択

Bambooで認証に使用するグループを追加します。

登録内容の確認

登録内容を確認し登録します。

Bamboo の設定

Crowdとの通信設定

crowd.properties の編集

{BAMBOO_ROOT:/opt/atlassian/bamboo}/atlassian-bamboo/WEB-INF/classes/crowd.properties を編集します。

マニュアルには以下の4点を変更せよと書いてありますが、session.validationintervalはデフォルトの2分で問題ないためそのままにします。

設定項目 設定値
application.name bamboo
application.password {CrowdのApplication設定で設定したパスワード}
crowd.server.url http://127.0.0.1:8095/crowd/services/
session.validationinterval 2

Bambooの認証システムのCrowdへの切り替え

atlassian-user.xml の編集

{BAMBOO_ROOT:/opt/atlassian/bamboo}/atlassian-bamboo/WEB-INF/classes/atlassian-user.xml を編集します。

Crowd用の設定がコメントアウトされているので、コメントを外します。

<!--<crowd key="crowd" name="Crowd Repository"/>-->

<crowd key="crowd" name="Crowd Repository"/>

ユーザーディレクトリの設定

Bambooに管理者でログインし 「右上の歯車マーク > Overview」をクリック

「Bamboo administration」画面が表示されるので 「Security」グループの「User repositories」をクリック

Server URL, Application Nameを確認、 Application PasswordにCrowdに設定したパスワードを入力します。

これでめでたくBambooの認証をCrowdに統合することが出来ました。

連携しているサービスがBambooだけですとそれほどメリットが感じられないかも知れませんが、 ここで上げたBamboo以外に、JIRA、Confluence、StashなどのAtlassianの製品を導入していくにつれてユーザー管理コストの軽減効果が実感できるものと考えております。

また、ユーザーの追加・削除漏れなどのセキュリティリスクの軽減にもつながりますので、Atlassian製品導入の際には合わせてCrowdの導入もご検討ください。

Report: GEEKSCHOOL ハッカソン

Report: GEEKSCHOOL ハッカソン

8月8日,9日とアットウェアにてGEEKSCHOOL夏のハッカソンが実施されました。 GEEKSCHOOLに参加している学生さんと、株式会社永和システムマネジメント、ウルシステムズ株式会社、株式会社アットウェアのサポーターがチームを組み、合計4チーム、サポーターを含めると約20名でハッカソンが行われました。

その様子を写真と動画で綴っていきたいと思います。 2日間ぶっ通しのハッカソンでは、アットウェアの社長の牧野の手作り料理を振る舞われ、それに舌鼓を打つ参加者。夜には参加者全員で近くの銭湯に行くなど、ハッカソンだからこそできる貴重な体験もできました。2日目の夕方からの発表では各チームから15分の発表が行われ、各社の代表者からの総括でハッカソンは終了。初めてハッカソンに参加する方が多い中で、これほど充実したハッカソンが出来たのは、皆さんの熱意が導いたことだと思います。 これからもハッカソン、GEEKSCHOOLを運営していくモチベーションが高くなりました。

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

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

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

まず、海外からのインターンシップとして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年以上あること


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


応募フォーム