第11期ふりかえり

第11期ふりかえり

今年もatWare Advent Calendarやります!

例年、初日の12月1日はアットウェアの新しい決算期を迎える特別な日でもあります。今年も無事にこの日を迎えられたことを嬉しく思っています。創業から現在に至るまで、非常にたくさんのお客様に支えられ、多くのパートナー企業の皆さんにご協力いただきました。また、社員の皆が努力を積み重ね、共に歩んできてくれました。アットウェアに関わってくださった全ての人に感謝です!

ということで、今年も先期のふりかえりから。

先々期から取り組んでいる、次代を担う若いリーダーを中心とした自律したチーム体制への移行は、道半ばながら期待した成果を挙げつつも一方では様々な課題を抱える状態です。我々はルールや仕組みを大事に守ることが重要ではなく、常に課題を解決するためのカイゼンに取り組むことが重要と考えています。これまで諸々の課題解決を進めてもいますが、根本の部分で会社としてあるべき組織像を社員皆で議論をし、この新しい期を機会に大幅な改革を行うことにしました。その内容については、まだまだ試行錯誤でチャレンジしていく段階にしかありませんので、また別の機会に(良い成果報告ができることを願っています)。

受託のSIプロジェクトとしては、先々期から取り組んでいる当社としては大きな案件が一年を通じて厳しいながらも、サービスのローンチを迎えることができ、多くの学びを得るとともに、これから我々が進むべき道を確認することができました。その他の多くのプロジェクトでも様々な経験を積み重ねました。特にお客様との恊働を軸とした、創業時から取り組んできているアジャイルとDevOpsの経験は今後の当社の力となるものと信じています。

一方、昨年から模索してきていたReactive Systemへの取り組みが7月のTypesafe System Integratorの認定を経て、いつくかのプロジェクトで成果を挙げれるようになってきました。こちらはまだまだ道半ばではありますが、当社が力を入れて取り組む事業の一つとしてより高いレベルの技術を携え、今までにない価値を生み出していきたいと考えています。

また、SIとは異なるサービスへの取り組みは、ようやく形が見えてきて社内での利用を経て、近々ローンチできる見込みです。既にいつくかの企業様に関心を持っていただいていますが、より多くの企業、エンジニアをはじめとするたくさんの方々に使ってもらえるよう、より一層スピードを上げて開発していきます。

今年もたくさんの新しい仲間を迎えました。大きな可能性を秘めた新卒新人をはじめ、経験豊富なエンジニアあるいは元研究者なども加わり、より一層、様々なことにチャレンジしていける組織に育ってきていると感じています。また、恒例のインターンでもたくさんの将来ある若者を迎えました。仕事というもの、企業というもの、IT業界というもの、そしてアットウェアというものを肌で感じて、少しでも彼らの将来の一助になればと思っています。

決してこのような良いことばかりの一年であったわけではありません。むしろ、企業としての成長としてはまだまだ思ったようにはいけてない。経営者としての力不足を大いに感じる一年でもありました。この期末には、ほぼ初めて社員全員との面談をしました。皆が何を思い、何を考え、また私自身が何を考えているか、限られた時間ではありましたが、いくらかでも共有できたことは良かったと思っています。

社員皆が「システムで人々をしあわせにする」ことをミッションとし、より多くの人にしあわせを届ける、またより高いレベルのしあわせ・価値を届ける組織となれるよう、今後もお互いに切磋琢磨し、リスペクトし、成長できる仲間でありたいと願っています。もちろん、私自身がその先頭で皆を率いていけるよう、さらなる努力をしていく覚悟です。

今期こそ大きな成長を遂げ、我々自身を含めたアットウェアに関わる全ての人、あるいは今まで関わりのなかったより多くの人がしあわせになるようにします。 皆様のより一層のご支援を賜れますよう、お願いいたします。

webpack + Angular

webpack + Angular

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

今回はwebpackを使った記事を書いていこうと思います。Angularは1系です。

webpackとは何か?

さて、いきなりwebpackと言われても何もわかりません。

webpack takes modules with dependencies and generates static assets representing those modules.

公式ドキュメントによると上記のことだそうです。依存解決ツールでもあり、複数のファイルをまとめてくれるものです。

実践

とりあえず、手を動かしていきましょう。

1.初期準備

$ mkdir ~/sample
$ cd ~/sample
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (sample) [何も入力せずにEnter]
version: (1.0.0) [何も入力せずにEnter]
description: [何も入力せずにEnter]
entry point: (index.js) [何も入力せずにEnter]
test command: [何も入力せずにEnter]
git repository: [何も入力せずにEnter]
keywords: [何も入力せずにEnter]
author: [何も入力せずにEnter]
license: (ISC) [何も入力せずにEnter]
About to write to /Users/yanu/sample/package.json:

{
  "name": "sample",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes) [何も入力せずにEnter]

npm init 後の質問は基本的には何も入力せずにEnterで大丈夫だと思います。

2.webpackやAngular等のインストール

$ npm install webpack webpack-dev-server stubby --global
$ npm install angular angular-route bootstrap --save-dev

stubbyはMockServerです。

3.loaderのインストール

webpackは様々なlodaerを使って依存を解決します。

$ npm install css-loader file-loader html-loader style-loader url-loader --save-dev

loaderはたくさん用意されていますので、ドキュメントを参照して下さい。

4.アプリ作成

Githubに用意しましたので、こちらを利用して下さい。

5.webpack.config.js

このファイルにentryやoutput先、loaderの設定等を書きます。

6.package.json

このファイルのscriptsオブジェクトに色々と追加します。

  "scripts": {
    "dev": "webpack-dev-server --colors --inline",
    "stub": "stubby -d server/server.yaml",
    "serve:windows": "start npm run stub && npm run dev",
    "serve:mac": "npm run stub & npm run dev",
    "build": "rm -f app/bundle.js && webpack --colors",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

7.実行

$ npm run serve:mac

ブラウザで http://localhost:8000/app/ にアクセスすれば、画面が表示されると思います。Bootstrapや独自で作成したcssファイルは app.js で読み込んでいます。

8.ビルド

$ npm run build

実行後、 app 配下に bundle.js が作成されています。このファイルにhtml, javascript、css、imageはBASE64に変換されて書き込まれています。html, css に関しては webpack.config.js で minimizeを設定してありますので、圧縮されます。
作成された bundle.js と index.html をサーバに配置すれば完了です。

おわりに

webpackを使って複数あるファイルを一つにすることができました。grunt や gulp 等を代わりになるのではないでしょうか。

今回、javascript の minify ができませんでした。webpack は UglifyJsPluginというのを用意しているのですが、変数名を変えてしまうので、anguler が依存解決に失敗してしまいます。だれかご存知でしたら、ご教示ください。

Email: yanou at atware.co.jp

Scala先駆者インタビュー VOL.2  エムスリー瀬良さん

Scala先駆者インタビュー VOL.2  エムスリー瀬良さん

「オープンソースの成長の源はフィードバック! 」

インタビューイー エムスリー 瀬良

インタビューワー アットウェア 北野/浅野/ヌーラボ 吉澤

北野:こんにちは。今回はScalaのWebフレームワークであるSkinny Frameworkの創始者の瀬良さんにインタビューしたいと思います。実はアットウェアの社内ナレッジシステムにはSkinny Frameworkが使われているのですが、その話はもう少し後にして、まずは、Scalaを使い出したきっかけを教えて下さい。

瀬良:最初に触ったのは2009年頃ぐらいですかね。その時はJavaをメインで使っていて、Scalaをちょっと触ってみたのがきっかけですね。その時は、私の当時の用途ではIDE のサポートなども弱かったこともあり、まだ実用で使うものではなかった印象でした。その後、今の会社に移って 2010 年頃から少しずつScalaの勉強を同僚とやり始めたのがよく触るようになったきっかけです。最初から思うと、こんなにScalaを触るようになるとは思っていなかったですw

北野:私の周りにもJavaをやってる人が多いのですが、参考にそこからScalaに惹かれたのはどうしてですか?

瀬良:自分がやり始めた当時はSIの世界だとJavaからRubyと言われていた時で、 でもJavaとRubyは結構違うし、それだけが次の方向なのかなと。その頃少しずつ触っていたScalaはJavaをベースにしつつもRubyに負けない記述性があって、静的な型付けがありました。そういうところが惹かれたところですかね。

北野:Scalaというと関数型というコンセプトがありますが、そのあたりはどうですか?

エムスリー 瀬良氏。SkinnyFrameworkの創始者・開発者

エムスリー 瀬良氏。SkinnyFrameworkの創始者・開発者

瀬良:そうですね、私はもともとJavaをやっていたので、Better JavaとしてのScalaをやりはじめて、いまもそのスタンスでやっています。関数型バリバリでScalaを使いたいという感じではないんです。いま使っている人の中には、Haskellとか本当は使いたいと思っているけど仕事ではScalaでやっていますという人もいると思うんですが、私はちょっとそれとは違いますね。

北野:今はお仕事でもScalaを使っていると思いますが、仕事で使うとする場合、Scalaのようなチームに取って新しいものを取り入れているときなどに注意することってなんですか?もし経験などがあれば。

瀬良:Scalaバリバリ(関数型)の書き方をして、チームの人達がわからなくなるような記述をしないようにすることですかね。ちゃんと皆がわかるようにすることは大事だと私は思っています。 Scalaを使うことが目的では本当はないはずで、ちゃんと目的のものを作るということであれば、さくっと仕事が終わり、バグも前よりも格段に減るというようなうれしいことが無いと仕事でScalaを使う意味はないはずです。 そういう時にScalaらしく書くというのは第一優先ではなく。使いはじめた時に「あっ、こんな書き方もあるのか?」とかいろいろやっていると楽しくなることもあるんですが、それもほどほどにしておかないと、周りのチームの人達がついて来れなくなったり。それは注意したほうがいいですね。 だから、あまり難しく凝った書き方をしないようにしようと言っています。

吉澤:そうですねw。 瀬良さんが書いているSkinny Frameworkの中とか見ても、関数型臭がぷんぷんする感じじゃないですものね。

北野:あくまでも道具としてまずは皆で使い出して、皆で良さを共感していかないとってところなんですかね。1人だけの意向で突き進んでいくのはリスクも増えていくことか。

北野:瀬良さんは、Skinny Frameworkをオープンソースとして開発していますが、実は、アットウェアでもSkinny Frameworkを使っています。 弊社のナレッジシステムのSiitaというQiita互換のようなものを社内で開発して社内ナレッジを貯めるところとして稼働しています。 SiitaのSはScalaのSというよりは、SkinnyのSなんですw

瀬良:えぇ、そうですか。面白いことやっていますね。是非公開して欲しいです!今度アットウェアに訪問して見てみたいです。

北野:でも、どうしてSkinny Frameworkを開発しようと思ったんですか?

瀬良:そうですね。 ScalikeJDBCというものがあって、それはそれでよかったのですが、もっと一般的なORM であるようなhas-manyの関係性の定義とか簡単にできるといいなと思ってプロトタイプを作ってみたところ、思ったより使えそうな感じにできたんです。また、その頃、仕事でScalatraを使っていたことがあったんですが、少し自分で改良したいなぁと思うところがあったので、それらWeb部分とORM部分、そしてバリデーションの3つをまとめたものが形になりそうだなというところでつくることにしました。

その時はまだORMのプロトタイプしかなかったんですが、その年の10月にドワンゴさんで勉強会があって、来年春までに出します!と言っちゃうことで、 自分でモチベーションを上げていったという経緯もあります。

北野:有言実行ですか、素晴らしいですね。OSSだとフィードバックをもらって成長していくというのは大事なことだと思うのですが、Skinny Frameworkをオープンソースでやっていてフィードバックはどうでしたか?

瀬良:そうですね。GitHubのスターとか、プルリクエストとか来るのは非常に嬉しいことですね。いろいろなフィードバックがあることは本当に助かります。何も反応がないのが一番つらいというか、どこがよくないという具体的な指摘だったり、漠然とした批判的な意見でも何か言ってもらえる方が全然いいです。そんなフィードバックのおかげで、今があると思っています。 あとは身近な人が使ってくれることですね。やはり社内の人とか身近な人からバグってますよと言われるとすぐに直してリリースしたくなりますからね。

吉澤:サービスやアプリでもなんでもそうですよね? 無視されて、なんも反応ないのは本当に寂しいですもん。 みんな本気で使い出すと指摘しだす人もいたり。それって本当に使っているってこと事ですしね。

北野:今後はどのような活動をメインに?

瀬良:Skinny Frameworkのバージョンアップを考えています。今のバージョンは1.3ですが、2系のバージョンアップの活動をメインでやっています。 今のSkinny Frameworkは、他のOSSのライブラリなども使っているところがあって、そのOSSとの依存があったりします。中にはアクティブで無くなってしまったOSSなどもあるので、それを見極めながら、整理をしているところですね。

北野:瀬良さんの話はITに関わっているものとしてすごく感銘しました。もちろんSkinny Frameworkもです。今後も活動をつつけて、日本を代表するOSSコミッターを続けていってもらいたいと思います。瀬良さんとして、そのような活動をコミュニティなどを通して広げており、若い人が瀬良さんの背中を追う日も近い、そんな感じがしました。

北野:さて、次回のインタビューの人をご紹介お願いします。

瀬良:それでは、こちらもGitBucketをはじめとするOSSの活動をアクティブにされていて、受託開発・自社サービス開発の両方でScalaの実用経験をお持ちの竹添さんで!

北野:ありがとうございます。

Atlassian Stashの耐障害性を高めよう その4 分散ストレージ設定編

Atlassian Stashの耐障害性を高めよう その4 分散ストレージ設定編

今回もStashの高可用性を目指してクラスタを組んでいきたいと思います。
前回までで、サーバーとStashのプロセスの冗長化は一旦完了したので、
今回は一番重要なデータ保存領域の冗長化を目指します。

お知らせ

今までAtlassian Stash を冗長化しようと頑張ってきましたが、つい先日なんとAtlassian Stashがなくなってしまいました。
今度からは生まれ変わった? Bitbucket Server をよろしくお願いします。

・・・閑話休題・・・

それでは、Stash改めBitbucket Serverのストレージを冗長化したいと思います。

Atlassianの公式によるとストレージは GFS2 + DRBD でストレージの冗長化を行っていますが、
今回は個人的な興味で、GlusterFSを使って冗長構成をしてみたいと思います。

事前準備

VagrantにDISKを追加

Virtualbox コンソール経由で、node01,node02 にDISKを追加します。
Stashのデータに使用するので、保存するデータの容量によって大きさを考える必要があります。
今回は仮に8GBとして データ用にパーティション /dev/sdb1 を作成しました。

GlusterFSのインストール(全ノード)

パッケージのインストール

    cd /etc/yum.repos.d/
    curl -o glusterfs.repo http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo
    yum install glusterfs-server

通信ポートの開放

まずは、通信に必要なポートを開放します。
今回は実験用途なのでどこからでも通信可能に設定してしまいます。

/usr/lib/firewalld/services/glusterfs.xml を以下の内容で作成します。

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>GlusterFS</short>
  <description>GlusterFS</description>
  <port protocol="tcp" port="1111"/>
  <port protocol="tcp" port="24007-24100"/>
    <port protocol="tcp" port="49152"/>
</service>

作成したファイルをもとにfirewallの設定を変更します。

firewall-cmd --permanent --add-service=glusterfs
firewall-cmd --reload

GlusterFS Volumeの作成

次にGlusterFSで使用するディスクの準備をします。

ファイルシステムの作成

GlusterFSは共有するボリュームのファイルシステムをXFSにする必要があります。
まずはデータ用のボリュームをXFSで用意します。

mkfs.xfs /dev/sdb1

/etc/fstab の末尾にエントリを追加します。

/dev/sdb1       /data                      xfs     defaults        0 0

マウントします。

mount -a

GlusterFSの起動

systemctl start glusterd
systemctl enable glusterd    

GlusterFSのノード登録

node01

gluster peer probe node02

node02

gluster peer probe node01

GlusterFSのVolume作成(任意の1ノードで実行)

mkdir -p /data/atlassian/stash
gluster volume create stash_vol replica 2 node01:/data/atlassian/stash node02:/data/atlassian/stash
gluster volume start stash_vol

GlusterFSのマウント

マウントポイントの作成

まずマウントポイントを作成します。
既存のStashのデータディレクトリはあとでGlusterFS上にコピーするためリネームして退避しておきます。

mv /var/atlassian/application-data/stash /var/atlassian/application-data/stash.org
mkdir -p  /var/atlassian/application-data/stash
chown atlstash:atlstash /var/atlassian/application-data/stash

fstabの修正

次に各ノードで /etc/fstab にエントリを追加します。

node01

node01:stash_vol        /var/atlassian/application-data/stash   glusterfs       defaults        0 0

node02

node02:stash_vol        /var/atlassian/application-data/stash   glusterfs       defaults        0 0

ファイルシステムのマウント

次に、両方のノードでglusterfsをマウントします。

mount -a

既存データのコピー

次に、今までのデータをどちらか一方のノードでコピーします

cp -rp /var/atlassian/application-data/stash.org/* /var/atlassian/application-data/stash/.

これで課題だったDISKの冗長化も出来、Stash改めBitbucketServerのクラスタリングが完了しました。
実際の運用では、定期的なデータのバックアップは行う事はあっても、クラスタリングをすることはまれかもしれませんが、
クラスタリングを検討されている方の参考になれば幸いです。

※ このシリーズの記事はあくまで検証用途でクラスタの設定を行っているため、実際の環境では使用に耐えない可能性があります。
実際にHAを構成を行う場合には十分な検証を行うことをおすすめします。

GJ Camp レポート

GJ Camp レポート

皆様、こんばんは。私、アットウェアの新入社員のMassanです。技術的な記事が多いなか、イベント的な記事をポストしたいと思います。そもそもGJってなに?というところから、社内の活動や雰囲気までふわっと伝われば幸いです。写真が全体的に黄色いのは、僕のカメラテクニックが低かったということもありますが、間接照明のせいでもあります。

GJとは

GJとはGood Job チームの略で、僕が所属するチームの名称です。弊社は現在、チーム制というものを導入しており、所属するプロジェクトとは別に様々な特色をもったクラスターによってチームを構成しています。GJ チームはGood Jobな仕事をしよう!という思想の元集まった集団です。私とNamさんが今年から加入して、6名となりました

GJ Camp

GJ Campは9月末に行われ、コワーキングスペースを借りて、丸一日もくもくと開発をするイベントでした。弊社では社内のコミュニケーションツールとして、Nulabさんが提供しているTypetalkを使用しており、社内でTypetalkのbotの開発が少し盛り上がっていたこともあり、一人一個botを作るという目標を立てました。

 

参加者と成果

GJ Campで作成しようとしたプロダクトと、それぞれのキャラクターを紹介します。


朝活推進派。

朝活推進派。

S.K:おすすめランチbot

GJチームのボス。一見でこぼこなチームをさらっとまとめる紅一点。
Campではみなとみらい近郊のランチ情報をポストするBotを開発。アイコンがキュートでした。


M.S:airconbot改

GJチーム最強のエンジニア、Javaをこよなく愛しています。
Campでは、typetalkのチャットからエアコンを操作するbotの改良を行いました。

チャイナでご満悦の室長


遅れてきたのに、いち早くbotを開発し終えた

遅れてきたのに、いち早くbotを開発し終えた

K.A:乗り換えbot

GJチームのインフラ担当。自己啓発本を読みまくり、メンタル的な面でも、技術的な面でも自分のブラッシュアップを怠らない、常に進化し続けるエンジニアの鏡です。Campでは天気の情報と、乗り換え案内を駆使して、どの電車に乗るべきかを教えてくれそうなbotを開発。ソースを全然公開してくれません。


紹興酒を飲みまくっている 懇親会にて

紹興酒を飲みまくっている 懇親会にて

O.F:

GJのご意見番。仕事が忙しすぎて、チームミーティングや活動にジョインできていません。会社への貢献度は計りしれません。飲み会も遅れてやってきました。


真剣なときのナムさんと、メガネを取ったときのナムさんはイケメン。

真剣なときのナムさんと、メガネを取ったときのナムさんはイケメン。

Nam Lai:connect server

GJのチャーミング担当。ナムさん。Goをこよなく愛するベトナムからの刺客。5月からアットウェアにジョインしましたが、新卒とは思えないほどの実力者です。Campではスケールが壮大すぎるプロジェクトに手をつけ出して終わってしまいました。
日本人の彼女募集中。


当日はカメラマンだったので、ナムさんに撮られたこの写真しかなかった。

当日はカメラマンだったので、ナムさんに撮られたこの写真しかなかった。

Massan:weekCheck.go

GJのフレッシュ担当。大学が情報系だったが、さぼりにさぼってここまできてしまいました。すこしずつ成長中です。Campでは、Goで曜日bot開発を行いました。


懇親会

関内で作業を行っていたので、近くの中華屋さんで懇親会を行いました。チームに加入してから初めて、全員と顔をあわすことができて、とてもよいCampとなりました。ボス曰く、チームとしても今期初の全員集合会だったらしく、まとまり感が出てきていい感じだそうです。

今回はクローズドなCampでしたが、今後はオープンな勉強会なども行っていく予定です。
今後ともGJチームをよろしくお願いしまーす!!!

HerokuでJavaのバージョンを固定しないと起こりうる問題

HerokuでJavaのバージョンを固定しないと起こりうる問題

HerokuでWebアプリケーションを稼働させる時に気にしておくべきことを紹介します。

HerokuはPaaSなのでライブラリなどはHerokuがプラットホームとして用意し提供してくれます。セキュリティパッチや新バージョンへのメンテナンスも全てHerokuが実行してくれます。言い換えれば、自分でメンテナンスしなくても済むというメリットはありますが、いつもならやっていた互換性を確保するという事を自身で管理しなくてもいいというわけではありません。

例えば一般的なJavaのwebアプリケーションならこんな事を気にするでしょう。

  • JDKのバージョンを固定する
  • 使用しているライブラリのバージョンを固定する
  • 実行環境の条件を固定する

最近ですと開発環境とステージング環境と本番環境全て同じ環境にして、オーケストレーションツールを利用し構築・再現方法も同じにするという事を行うのが一般的です。

HerokuのTwelve-Factor Appでも述べられている通りです。

http://12factor.net/ja/dev-prod-parity

現時点ですがHerokuのJavaがdynoを再起動すると最新のJavaのバージョンを参照するようになっているので、マイナーバージョンアップした時に前提条件が全く同じでないので、タイミングによっては前提条件が崩れる事があります。

下記のような致命的なエラーが発生するケースもあったので、原因と回避方法をお伝えしておきます。

現象

JDK8u60を利用するようになってから、バージョンを固定して使っていたAWS SDKのS3へのアクセスでエラーが発生。

原因

JDK8u60で時刻関係の扱いに変更が入ったのと、JodaTimeのバグとAWS SDKの認証トークン・シグネチャの生成の仕組みの組み合わせが重なり、不正なトークンが生成される形となった。

詳細はaws-sdk-javaのIssueを参照

https://github.com/aws/aws-sdk-java/issues/444 https://github.com/aws/aws-sdk-java/issues/484

対策方法

  • joda-timeのバージョンを事情があって変更できない場合
    • Java8u51を固定して利用する
    • Java8u60を使う場合
      • aws-sdk-javaのバージョンを最新にする

Javaのバージョンを固定する

HerokuでJavaのバージョンを固定化して利用するにはherokuコマンドでパラメータで実行します。

$heroku config:set JDK_URL_1_8=http://lang-jvm.s3.amazonaws.com/jdk/openjdk1.8.0_51-cedar14.tar.gz

固定する事で万が一dynoのrebootが走っても前提条件を担保できます。

根本的な対応

JDKのバージョンを固定するというのは意図しない動作をしないためのものであって、長い運用の中では一定のサイクルで見直すべき事です。テスト実施後にリリースタイミングを見計らい最新バージョンでも動くようしましょう。

今回の例なら根本的な対応しとして、根本的に解決するにはJodaTimeを2.8.1を使用する必要があり、aws-sdk-javaを1.10.1以降のバージョンに更新することで問題を解消できます。

最後に

オーケストレーションツールを使ってImmutable Infrastructureを意識し構築していく事は対応速度・開発効率だけでなく運用トラブルを避ける事にも繋がります。 クラウドサービスは便利な反面、押さえておかないポイントも多々あるので意識して使っていきたいですね。

2017/06/07 追記

Twitterにてコメントをいただきましたので追記します。

言及ありがとうございます。タイトルが少しミスリードでしたね。 実行環境がデプロイした時に想定していないバージョンの組み合わせになっていたという所から発生するので、PaaSに限らずこの辺意識していきたいところです。

atWare girls

atWare girls

Hi, everyone! Thanks for reading my post. I am Kaoru Matsuoka and I work for atWare as a developer.I am a member of KEY TEAM in atWare.

I am not that a good writer so I just want to simply introduce atWare's girls today.

There are 6 girls at atWare includ me. I'd like to interpret them one by one.


The first is H.K. さん

1
She is a great manager and besides, a completely tokyo citizen own a good sense of style.



The second is Y.K. さん

2
She belongs to Back Office at atWare. She is a working mother.
Balancing work and family life perfectly.



The Third is M.I. さん

3
She also works in Back Office at atWare.
She is always smiling and do many paper works for us.
In every monthly routine meeting day, She prepares lunch boxes for us.
And bellow is the pleasent moment picture I token at last week.

4



The fourth is S.K. さん

5
She is the only female leader at atWare.
With strong ability in listening, communication and organization.
Sometimes she speak with a Kansai accent.
As far as I know, her favorite food is chicken.



The last is J.I. さん

6
She is the youngest girl at atWare. Sometimes a kind of Shy.
As a system engineer, she has a great experience in web application development.
She is now lives in Houkaidou.



As a minority group , we always eat lunch together.
We like each other and enjoy great time together.
At the end, I want to show a picture of what we have lunch together.

7

Couchbase Live Tokyo 2015

Couchbase Live Tokyo 2015

みなさん、こんにちは。アットウェアの矢納です。
先日8/31(月)に豊洲で開催されたCouchbase Live Tokyo 2015にスピーカとして参加してきました。今回は発表の内容を紹介して行きたいと思います。

IoT Platform 「Yanoh!(TBD)」

今回のセッションのタイトルは"IoT Platform 「Yanoh!(TBD)」"です。「Yanoh!」は正式名ではありません。正式名は後ほど。

プラットフォーム名

zabuton-couch.png

内容の紹介に入る前にプラットフォーム名をご紹介します。

Zabutton




なぜZabutonなのか?

Couchbaseからカウチ(ソファ)を連想することができると思います。ソファは家人や来客がゆったりとくつろげるようにする物です。カウチの歴史は18世紀にフランスで誕生したものです。つまり西洋風の物なのです。
では和風な家人や来客がゆったりとくつろげるようにする物はなんでしょうか。そうです。座布団です。さらに座布団はどこにでも持ち運びが可能でどこでも使う事ができます。

これらの意味をこめて「Zabuton」という名がつきました。

Couchbase Mobile × IoT

さて、「IoTの分野にCouchbase Mobileは合致するのだろうか」という率直な疑問に答えていきましょう。

  • IoTの分野では多くのデータのやり取りを行います。リアルタイムを求められる状況で1ms以下の応答時間は非常に大事な物になって行きます。
  • 複数デバイスとの同期 IoTの分野ではセンサー等を使い、多くの場所からのデータを取得すると思います。その際のデータの同期処理を独自で実装するには非常にコストがかかります。この同期の処理が非常に簡単に書く事できます。

この2つの要点からCouchbase MobileとIoTのコラボができることを判断しました。

Office × IoT

CouchbaseとIoTをコラボさせるのは分かっていただけたでしょうか。では、次はどの分野とコラボするかです。今日、IoTは様々な分野に進出しています。家や鉄道、農業、学業、オフィス、商業施設など様々です。その中、今回選択したのは オフィス です。
農業じゃないのか!?と思われた人もいるかもしれません。確かに気温や空気流れ等を測定し、温度調整や換気窓の開閉の制御など色々と思い浮かべるかもしれません。ですが、農業とコラボをしようするとかなり多くのコストがかかります。自分でビニールハウスを建てるわけにはいきません。農家さんと協力が得れても、窓の開閉に使うモータの設置にコストがかかります。
それに比べオフィスはどうでしょう。私たちに身近なところにもなります。みなさん、会社の中を見回してみてください。解決したい問題なのに軽視されているものはありませんか。今回考えたユースケースはそのような問題に対してのソリューションです。

Technology

ユースケース紹介の前に「Zabuton」がどのような技術を使って実現しているかを見て行きましょう。

ベースレイヤー

ここはCouchbase社の Couchbase Mobile です。Couchbase Mobileは "Couchbase Server""Sync Gateway""Couchbase Lite" で構成されています。
Sync Gatewayを使う事により、複数のモバイル端末とデータの同期を簡単に行う事ができます。

エンドレイヤー

ここは 人とモノをつなげる 部分をなります。
iBeaconやNFC、各種センサーを使い、身の回りのデータを集めます。

ミドルレイヤー

ベースレイヤーとエンドレイヤーだけではデータを集めて、それを保存しているだけです。この二つのレイヤーだけでは動きません。 なので 収集したデータを中継・表示する ものが必要となります。スマートフォンやブラウザ、RaspberryPi等を使って、それらをやります。

アプリケーション

では、今回作成した「Zabuton」の紹介と「Zabuton」を使ったアプリケーションを紹介していきます。
ここで今回考えたユースケースを簡単に理解してもらうために動画を用意致しました。こちらをどうぞ。

今回考えたユースケースはこちらになります

  • リソース空き状況確認
  • チェックイン/チェックアウト
  • トラッキング

リソース空き状況確認

最初は リソース空き状況確認 ですね。動画でもあった通りトイレの空き状況チェックアプリです。

オフィスビルだとトイレの数はそれほど多くないのですぐに渋滞になることがあります。またオフィスビルだけでは無く、将来的に商業施設への展開を考えました。トイレについてから状況が分かっても仕方ないのです。トイレに着く前に空いているトイレがどこかを知りたいのです。

処理フロー

  1. IR Sensar(赤外線センサー)で人を認識。常にONになっているiBeaconをOFFにします。
  2. RaspberryPiがiBeaconのステータスを監視
  3. iBeaconのステータスを更新。
    iBeaconのステータスを更新する際に今回作成した「Zabuton」の一部、 "Zabuton Server"のAPI を呼びます。この"Zabuton Server"がSync GatewayのREST APIを使いデータを更新します。
  4. スマートフォンとはSync Gatewayにより自動同期され、空き状況を確認することができます






「なぜRaspberryPi上にCouchbase Liteを起動させないのか」と疑問を持たれた方もいるのではないでしょうか。
開発初期の頃はRaspberryPi上にCouchbase Liteを起動させ、Sync Gatewayを使って自動同期を行っていました。ですが、データ同期に10秒以上という非常に時間がかかっていました。この問題を解決するために"Zabuton Server"を開発し、そのAPIを呼ぶようにしました。
では、なぜ同期に時間がかかったのでしょうか。簡単な話でした。Couchbase ServerとSync Gatewayを動かしているサーバのスペック不足でした。サーバのスペックを上げたところ、同期にかかる時間が1秒近くになりました。

チェックイン/チェックアウト

次に2つ目の チェックイン/チェックアウト です。動画ではある場所についた際、アプリを使ってその場所のロックを解除することができるものでした。当初はiBeaconを使ってそれを実現しようと考えていましたが、時間との都合がつかず完成に至りませんでした。
ですが、その人がある場所に来たというのをNFCを利用して実現することができました。

処理フロー

  1. ICカードリーダでカード情報読みます。
  2. カードのIDをKEYにして、その人がどの場所に入った(出た)かを記録します。
    この際も"Zabuton Server"を経由してデータを更新しています。
  3. チェックイン状況はWEBから確認することができます。


これで誰がどこに行ったかは記録できるのですが、どのNFC(RaspberryPi)がどの場所なのかを事前に登録しておく必要が有ります。これは専用のサイトから登録が可能です。





トラッキング

最後に3つ目のトラッキングです。動画ではボスの位置を把握して慌てずに会議室に行くというものでした。ボスの位置を見ながらではなく、時間前に会議室に行くのがベストですよ。
さて、これを実現するにはこれは各所にiBeaconが配置されている前提です。各所に配置されたiBeaconを使ってその人がどこにいるかを記録するものです。

処理フロー

  1. スマートフォンでiBeaconシグナルを受けとる。
  2. 10秒以上連続でシグナルを受け取っている場合にその場所にいると判断する
  3. データの更新


これを利用すればチェックイン/チェックアウトにも適用することは可能です。





今後

「Zabuton」があることでほんの少し皆さんが幸せになるのではないのでしょうか。
ですが、まだ問題はたくさんあります。トラッキングでは個人がどこに行ったのかがまるわかりになってしますので、プライバシーの問題になりかねません。また、各所に配置するiBeaconの情報登録サイトは作成したのですが、セキュリティがありません。全員がすべてのiBeacon情報を更新することができます。
もちろん問題だけではありません。期待もあります。限度はあると思いますが、個人の情報を集めることができますので、その人だけの情報をお届けすることが可能となります。

スマートフォン向けのライブラリは現状Androidしかありません。iOS版は作成中です。また、RaspberryPi上でCouchbase Liteを動作させていませんでしたので、Couchbase Liteを使ったタイプを作成する予定です。
今回作成したライブライはatWareのGithubで公開予定です。公開した際にはこのブログで紹介したいと思います。

開発協力者

名前:Nguyễn Anh Huy(ベトナムインターンシップ生)
ニックネーム:ジャック
好きなこと:食、旅行、スポーツ、音楽
スキル:英語、Android、Go言語

名前:Tue Ngo(ベトナムインターンシップ生)
ニックネーム:けんじ
好きなこと:飲み、スポーツ
スキル:ハードウェア、Python

名前:Priyatam Mudivarti
会社:Facjure, LLC
「Zabuton」の名付け親

名前:北野弘治
役職:福社長
「Zabuton」のアドバイザー

AngularJS+GoogleMapに挑戦したら予想以上にはまった話

AngularJS+GoogleMapに挑戦したら予想以上にはまった話

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

現在GoogleMapを使ったWebアプリを作っています。
ほぼ初挑戦となるAngularJSを使っています。
予想では2時間程でできるかなと思っていたのですが、
かなりはまったので今後同じことにならないよう自分のためにも記録しておこうと思います。

その際使用していたのが「angular-google-maps」です。
こちらを使用した日本語の記事がいくつかあったのでそちらを参考にしていたのですが、上手くいかず
サンプルコードをそのままコピー下にもかかわらず動きませんでした(汗)

原因としては「angular-google-maps」のバージョンアップに伴い使い方が一部変化しており、
私が参考にした日本語の記事のものでは動かなかったということでした。

では、はまった部分も含めて実際のコードを見ていきましょう。
今回作成したものはGoogleMapを表示してマップ上に複数のマーカーを表示するというものです。

「angular-google-maps」のインストール

以下コマンドを実行

bower install angular-google-maps --save

scriptタグを追加 bower install を実行後は「angular-google-maps.js」が追加されています。 それよりも前に以下のタグを追加します。

<script src="//maps.googleapis.com/maps/api/js?sensor=false"></script>

app.jsの作成

map.jsの作成

map.htmlの作成

CSSの設定

実はこれに一番悩みました。
これを行わないとGoogleMapは表示されないのですが、
私は指定しなくても適当なサイズで表示されるものだと勝手に思い込んでいました。
1時間弱悩んでまさかと思い、追加してみて表示された時は本当にムダな時間を使ったと感じてしまいました。
解決した後に公式をもう一度見直すと

Specify an height via CSS for the map container

としっかり書かれてました。見落としてました。。。

実際に動かしてみたものがこちらになります。

表示させてみると非常に単純なものなのに予想以上に時間がかかりました。

最後に

色々悩みましたが目的としていた部分までほぼ知識がない状態で辿りつけたので動作した時には嬉しかったですね。
同じようなはまり方をしている人の少しでも参考になれば幸いです。
今回使用したAngularJSは1系で2系では書き方が大幅に変わるらしいのでそちらも勉強していきたいです。

Go for Argentina

Go for Argentina

KEYチームのアライです。
以前 footgolf について書きましたが(記事はコチラ)、最近更にテレビや雑誌で取り上げられることが多くなってきました。
それもそのはず!2012年に第一回ワールドカップが開催されたので、サッカーワールドカップ開催周期と同様に、
4年後の来年2016年に第二回ワールドカップがアルゼンチンで開催されます。

余談ですが、サッカーワールドカップの開催周期が4年なのは、オリンピックに対抗したためだそうです。
アマチュアだけでは世界一を決められないとサッカー界が主張していたものの、
オリンピックは今でこそプロも参加していますが、以前はアマチュア主義を貫いていたため、 サッカー界は独自の大会を主催し、ワールドカップが誕生しました。

 日本では、2015年7月の大会を皮切りに、既に日本代表の選考が始まっています。
今回は10名の選出を予定していて、選出規程は以下の通り(詳細は日本フットゴルフ協会HP参照コチラ)。
 第13回から第18回の「フットゴルフジャパンオープン 」で各大会の上位5名に入ることで、
11月8日に開催される「フットゴルフジャパンオープン ファイナル 2015」への出場資格を取得できます。
「フットゴルフジャパンオープン ファイナル 2015」で上位5位までに入賞された選手5名と、
協会が対象大会及び「ファイナル2015」に出場した選手などから選出する5名の合計10名が選出されます。

このブログの投稿日9月27日は、第17回フットゴルフジャパンオープンがまさに行われていて、 アライも参加しています。
第14回大会で3位になったので、ファイナルへの出場権は得ていますが、
外国人選手との実戦経験を比べると差は歴然としているので、出来る限り大会に参加しています。
このタイミングでは結果を載せられませんが、国内でまだ一度も優勝したことがないので、
優勝を目指して頑張っていると思います!

もちろんワールドカップ日本代表を目指しています。
11月に良い報告を期待してください!!
Go For Algentina !!

Thinking about INVEST

Thinking about INVEST

INVEST

Have you ever heard the acronym "INVEST"?

The INVEST mnemonic was created by Bill Wake and it is introduced in The Agile Samurai(@jrasmusson 2010) .

"INVEST" is as a reminder of the characteristics of a good quality user story,

  • Indipendent
    • The user story should be self-contained, in a way that there is no inherent dependency on another user story.
  • Negotiable
    • User stories, up until they are part of an iteration, can always be changed and rewritten.
  • Valuable
    • A user story must deliver value to the end user.
  • Estimable
    • You must always be able to estimate the size of a user story.
  • Small
    • User stories should not be so big as to become impossible to plan/task/prioritize with a certain level of certainty.
  • Testable
    • The user story or its related description must provide the necessary information to make test development possible.

quated from wikipedia)

"Valuable" is easy understand Of these six words, So everyone will care But Testable,Small and Estimable are often forgotten.

If you noticed follow problems, It may be able to solve it by being conscious of INVEST.

  • Story goal is difficult to understand, Because acceptance criteria is not clear.
  • Story is hard to estimate, Because the size is huge.

INVEST User Story

Then I think about an example about the user story that is INVEST.

As a Administrator,
I want search user by name
So that I don't use time for find user in list.
  • Indipendent
    • OK. This story is inipendent feature.
  • Negotiable
    • OK. This story is not specified implementation.
  • Valuable
    • OK. To improve Administrator's work efficiency
  • Estimable
    • OK. It story may be modified 1 view (and 1 logic)
  • Small
    • OK. It is simple and small.
  • Testable
    • OK. Story is simple, (please confirm the acceptance criteria properly in PO.)

It is INVEST and good user story.

As a ramen JIRO lovers (sometimes called Jirolian),
I want to know which JIRO is open now
So I wants to go to Jiro as soon as I thought.

And this user story is INVEST too.

Conclusion

INVEST is good practice for writing user story.

How about if you try a Story-Gathering workshop while being conscious of INVEST?

Will be valuable to the workplace

Will be valuable to the workplace

My day

The most important thing is to serve as my role on the team. Create a team atmosphere that we can remove all the obstacles and support the consensus of the team. Sometimes you can make a midnight snack in the team. As well as give advice and, if necessary, the team fills a hole to proceed smoothly.

The work would defile my hand.

Company has a harmful person

It does not have a band or a person other than social etiquette. Do not chase him the same thing. Give it a good map to help chase the man of action. 1 and 2 will listen on that 5 and 6 times. Otherwise, this was detrimental to the team who continue No competent people to leave good people coming into the team.

People are not perfect.

Priority

If you want to achieve their professional duties at work, you must set the priorities. Mentors also receive comprehensive idea. However, it has the right to determine how to achieve their goals.

With strict with myself.

インターンシップ体験記・2015(神奈川大学 本田さん)

インターンシップ体験記・2015(神奈川大学 本田さん)

はじめに

こんにちは。神奈川大学経済学部の本田です。
8月31日~9月18日までの3週間、アットウェアでのインターンシップを経験させていただきましたので、その経験について書かせていただきます。

私はアジャイルチームとして、実践的なアジャイルプロセスを体験させていただきました。
開発したアプリケーションの概要や開発手順については先に投稿された幾谷さんの記事 コチラ をご参照ください。
3週間という長いようで短い期間のインターンシップでしたが、
まるで3年間ほどアットウェアで過ごしたかのように思える密度の濃い日々を送らせていただきました。
私が学ばせていただいたことは数え切れないほど多いのですが、中でも終生の思い出になると感じた3つの学びについて書かせていただきます。

アットウェアでの3つの学び

アットウェアのインターンシップを通じて私が学んだ3つのこと

  • HTML・CSS・bootstrapを中心とした様々な開発スキル
  • アジャイルプロセスがどのように開発現場で実践されているのか
  • 文系大学生として交流したことがない方々の生き方や考え方

HTML・CSS・bootstrapを中心とした様々な開発スキル

「Gitってなんですか?コマンドプロンプト使ったことないです」、これがインターンシップ初日の私の惨状でした。

アジャイルチームは私と幾谷さん計2人のチームで、
高専在学中の幾谷さんとプログラム未経験の私とでは時間にして7年分以上の経験の差がありました。
そこで私は浅学ながら少しだけ経験のあったHTMLやCSS等の開発のフロント部分を担当させていただき、幾谷さんがその他の全ての開発を担当する、という分担になりました。
しかし、フロント部分の開発だけでも相当に難航してしまいました。
冒頭でも述べたように私はGitの存在さえ知らず、幾谷さんとソースを共有するだけでも一苦労、という状態だったからです。
当然、HTMLエディタなんて使ったこともなく、ページの余白調整だけで丸一日を浪費してしまうこともありました。

このように、なぜインターンシップに応募しようと思ったのか?と思われても仕方がないような状況にも関わらず、社員の不破さんと矢納さん、幾谷さんは初歩の初歩から開発に必要な知識を丁寧に教えてくださいました。
不破さんにはCSSコーディングの一連の手法やデバッグの仕方を、矢納さんには私では手も足も出ないような技術の導入の仕方を、幾谷さんにはその他開発の途中で必要になる知識を逐一教えていただきました。

皆様のおかげで、ひよっこではありますが初日とは比べ物にならないくらいのスキルを身につけることができました。
springbootやbootstrap、gradleなんて聞いたことすらなかったのに、それらを触りだけでも扱えるようになったのはアットウェアの皆様のご教授があってのことです。
ありがとうございます。

アジャイルプロセスがどのように開発現場で実践されているのか

アジャイルプロセスという言葉はインターンシップ直前にネットで30分ほど調べただけで一体どのような手法なのか?やどんなツールを用いるのか?は全く知りませんでした。
しかし、この3週間の経験によってアジャイルプロセスがどんなものかおぼろげながら掴めた気分です。

特にアジャイルプロセス理解のための参考になったのは初日の武永さんのアジャイル講習です。
もし何も分からぬまま「アジャイル」という言葉を聞きかじっただけの状態で開発が始まってしまっていたら……、と考えるとこの講習にどれだけ助けられたか計り知れません。
開発中は何度もこの講習のノートをこっそりチートシートにして「イテレーション」や「スプリント」、「バックログ」といった用語を知ったふうに振舞っていました。
またアジャイルプロセスを実践するにあたって新井さんにはどれだけ感謝しても感謝しきれません。
私達のチームはタスクの切り分け方が雑だったり、足りなかったり、タスクにないことをやってしまっていたりと、
アジャイルプロセスを実践できていなかったところも多々あったのですが、新井さんは私達がどんなに失敗してしまっても、見捨てずにアドバイスをしてくださいました。
常に私達のことを案じてくださり、本当にありがとうございました。
一度失敗したことを二度失敗しないように今後も気をつけていきます。

アジャイル開発を実践させていただいたことで、
イテレーション毎の計画ゲームによるタスクの洗い出しや、イテレーション中のタスク管理、KPTによる振り返り等、
どんな本を読んでも決して学ぶことができない"アットウェア流"アジャイルプロセスを学ぶことができました。

文系大学生として交流したことがない方々の生き方や考え方

さまざまな知識を学べたことも良い経験でしたが、インターンシップでの一番の経験は多くの社員の方々と交流させていただいたことです。

私達はたった3週間のインターンシップ生であるにも関わらず、初日から最終日まで社員の方々はいつもにこやかに話しかけてくださいました。
毎日お座敷でお昼ご飯をご一緒させていただき、エンジニアリングや野球、家族の話など楽しかったり、ためになったりするお話をうかがうことができました。
休日には牧野さんのご自宅にお招きいただいてとてもおいしいご飯をいただき、とても楽しい時間を過ごすことができました。
このインターンシップでの一番大切な思い出です。

まとめ

このように私はアットウェアでのインターンシップでたくさんの知識と経験、思い出を得ることができました。

  • HTML・CSS・bootstrapを中心とした様々な開発スキル
  • アジャイルプロセスがどのように開発現場で実践されているのか
  • 文系大学生として交流したことがない方々の生き方や考え方

実は、私は就職での希望業界を全く考えておらず今までなんとなくパソコンが好きというだけで「希望業界はIT系・・・?」などと言っておりました。
今回のインターンシップも他のインターン生のような「これがやりたい!」という意思を持って参加していなかったことは否めません。

それでも今回のインターンシップを通じて将来はIT系に進みたいなあと明確に思えるようになりました。
他のインターン生と比べると私のスキルが劣っていることは明らかだったので、今後は猛勉強が必要だと思いますがこのインターンシップでの経験を思い出にがんばっていきます。

3週間本当にありがとうございました!

Try to React Native for Android

Try to React Native for Android

Hello everyone. I'm Masahiro Yanou of KEY Team.
Technology Post No7!!「Try to React Native for Android」.

Past Post List is here.

React Native published on GitHub as open source by Facebook. This blog introduce the React Native for Android Sample.
Attention Today(2015/09/24), React Native supported only OSX.

Preparation

Install JDK

Java Download Site

Install Homebrew

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Install Android SDK

$ brew install android-sdk

Add ANDROIDHOME to .bashprofile

ex) $ export ANDROID_HOME=/usr/local/opt/android-sdk

Download Android SDK

$ android

Start Emulator

$ android avd

After create, click Sart...

Install node(nodebrew)

$ curl -L git.io/nodebrew | perl - setup
$ nodebrew install-binary latest
$ nodebrew use latest

Install watchman and flow

$ brew install watchman
$ brew install flow

Quick Start

$ npm install -g react-native-cli
$ react-native init AwesomeProject
$ cd AwesomeProject/
$ react-native run-android
※In this time, run Server to load a JavaScript from device.
If don't run server, output as follows:
[warn] JS server not recognized, continuing with build...
※In this time, if device don't exist, happen error.
$ $ANDROID_HOME/platform-tools/adb shell am start -n com.raproject/.MainActivity
Starting: Intent { cmp=com.raproject/.MainActivity }

After run command, start application.

Add Button

Before this section, sample only. so, I try to add button.

$ npm install react-native-button --save

When create button, you need to another module. I was very surprised.

In this time, when click button, output current time. When output current time, I used moment.

$ npm install moment --save

HTTP Connection

One more thing.

When development android with Java, you should write http code as background.
But in this time, you don't care it. It's too easy.

I used ajax Library SuperAgent.

$ npm install superagent  --save

LAST

If you think react is very easy, you try React Native for Android .
See you next time.

Email: yanou at atware.co.jp

live alone one and a half years

live alone one and a half years

Hi, I'm Takenaga KEY team member.

I have lived alone one and a half years. This time, I wrote about living alone.

Meal

Colleagues and friends often ask me "Do you cook for yourself?".
It is very welcome because I receive the feelings that they are worried about me.
Pepole around me know that I don't cook.

breakfast

The first time I ate toast at home. I like to eat toast with cheese.
These days I buy breakfast at a convenience store and eat at office.
I want to sleep until the last minute because I hate mornings :-}.

lunch

Lunch is eating out because I don't cook.
I go to lunch with project members. It is a fun time to be able various talk with members.

dinner

Pepole around me cares about dinner.
I cook rice, but side dishes have been bought at the supermarket. So there are many fries. I am careful.
I consider nutritional balance to buy such as cup salad.

I sometimes cook simple things on holiday. For examle, sauteed vegetables, curry and rice etc.
I will continue to take care meal in the future because I think meals are the base of health management.
The photo is for illustrative purposes only :-)

cleaning

My parents often ask me about cleaning.
Every weekend I want to clean room, but I can't because I have plans or I don't have motivation :-&
Once every two weeks I vacuum the floor.
I was surprised that dust accumulates many despite I don't have too long time I'm in house.
It was good to buy a vacuum cleaner first.

last

It is a little, but I wrote that around pepole often ask me since I started living alone.
At first it was very anxious whether I can be well. However, It's going to be okay :-D
There are a lot of pepole who have experience living alone around you.
If you have a trouble, they will help you. So don't sweat it.
Now I enjoy the freedom of living alone.
I want to spend fun in the future.

Welcome to atWare

Welcome to atWare

I'm Susumu Arai KEY Team.
This time, I will introduce the company's environment.
The concept is "at home".

atWare, Inc. is located in the Minato Mirai, the nearest station is Minato Mirai Station.
Go out "No.4 Exit" and turn right when you see at "7-Eleven".
Take the escalator and walk rightward to take the escalator, you will arrive the 1st floor of the building.
And take the long escalator to 3rd floor,
walk rightward to take the elevator for the lower floors to 11th floor.
Then turn two left from the hall, you will see the entrance to the front.

 

It is arrived at the "Genkan" in 23 second.
The Genkan has a table-tennis table and an aquarium.
Please come in with your shoes on.

 

There are two rooms on the left side of the Genkan.
The first is a large conference room, We called the "OHIROMA".
The conference room can accommodate about 30 people.
Since the projector is attached, it can also be used for internal and external study session.

 

The second is mainly for the visitors room, We called the "KYAKUMA".
The meeting room can accommodate about eight people, both wall is a white board.

 

And then, we will introduce the interior of the office.
Office is one floor, shared space in the middle, both sides are working space.
In a shared space, there are a meeting space "Famires", a multi-purpose space " Zashiki" and a relaxation space "Daidokoro".

We are able to drink all drinks such as coffee and water for free.
There is a blackboard.

 

We were not able to introduce all in this time, so we will introduce in the next opportunity.

Criteria in Job-Hunting

Criteria in Job-Hunting

Hi, I'm Hiraku Mishima. I'm a rookie at atWare that belonging to KEY team. In this week we will present our posting in English.
So, I would like to start the first one.


Motivation

This posting is for students who will prepare to start their job-hunting. Today, from my viewpoint, I will introduce you about my criteria for selecting company/job. And I hope this posting will be a good reference for your selection.


Self Introduction

I lived in Hakodate in Hokkaido. I graduated from National Institute of Technology Hakodate College and mainly learned about mechanical engineering. Now I'm trying to develop a fast calculation system by distributed processing with Apache Spark.


Nice meeting with atWare

About 2 years ago, I met this company at 2013's atWare internship. At that time I'm not familiar with IT technology but I was really interested in employee at atWare. In that activity, I can remember that I enjoyed talking with employees and got good inspirations from them. Through the internship my fixed idea was broken and got a positive feeling to IT company/job. After finish that internship I of course keep the relationship between atWare. Now fortunately I'm belonging to this company and enjoying learning about new technology.


Why I wanted to work at atWare

Do you have any criteria to select company/job? Company welfare, workplace, working time, atmosphere, company event and so on. From my viewpoint the important criterias are small company and sympathy between employees.
I want to work at small company because I think it's better way for making strong cooperative between employees. atWare already had kindness mind like "at-home". So people in there sometimes take care each other sincerely. I thought that it's suitable for me. And I thought that I want to work in the same atmosphere.
When I got employment exam I wasn't familiar with IT technology (programming, software development, ...) but I didn't care about my weakness point. My attention is, whether I can get sympathy with people working in there.


In atWare

Now In this company's atmosphere I can express my original characteristics naturally without any obstacle in my mind. I every time feel fun because I can possible to work with people who made this good atmosphere. So, I want to be able to sustain/adapt it.
It spend about 6 month when I entered in here. Not only in the project, also lunchtime or freetime, people sometimes pay attention me for giving a lot of good advice. From now on I will make conversation with other people more aggressively for getting good inspiration.
In atWare there are good environmens that gives me a lot of energies.


Nice meeting make your fulfilling life

You might worry about something related to your carrer path. Forexample your parent, stress from new environment, living alone, long-distance love and so on. But you should get-rid of that kind of negative image to take a new step for your life. And then Let's create a lot of new relationship at any places/events. All of new exciting meeting grow up your sence of values. If you have a good chance you can also easily join GEEKSCOOL event held at atWare. Also there are a lot of company or community events in this area.
So, please enjoy finding new relationship!

Atlassian Stashの耐障害性を高めよう その3 HAリソースセットアップ編

Atlassian Stashの耐障害性を高めよう その3 HAリソースセットアップ編

今回も引き続きStashの高可用性(HA)クラスタを組むべく進めていきたいと思います。

ATLASSIAN STASHの耐障害性を高めよう その2 HAセットアップ編はHAクラスタをくんだものの、
IPアドレスの設定のみで終わってしまい、全くStashの可用性が高まらないまま終わってしまいました。

このままでは表題に偽りありと言われても反論出来ないので、今回こそは、Stashの可用性を高めていきたいと思います。

前回は、ノードが切り替わる際にIPアドレスが自動的にアクティブノードに付与されるように設定を行いました。
ただ、アクティブノードにIPアドレスが付与されるだけでは、Stashにアクセス出来ません。

というわけで今回は、ノードの切り替わり時に自動的にStashが起動する様にします。

前提条件

  • 前回までの設定が終わっている
  • Stashが各ノードにインストール済み&初期設定済み
  • Stashの自動起動がOFFになっている
  • StashのデータベースはStash以外のサーバーのものを使っている

ここまでの設定が終わっている前提で進めていきます。
Stashはインストーラーを利用しても、tar.gzを利用しても問題ありません。

なお、今回のStashはインストーラーを利用してセットアップしました。

リソース制御スクリプトの追加

今回クラスタの制御に使用しているPacemakerは、一般的なクラスタリソースの制御スクリプトが最初から用意されています。
また、クラスタリソース制御スクリプトが用意されていない場合、
Pacemakerの指定する形式に沿った自作のスクリプトを所定のディレクトリに配置すると、制御対象のクラスタリソースを追加することが出来ます。

Atlassian Stashも残念ながらPacemakerにスクリプトを用意されるほどにはメジャーになっていないようなので、自作のスクリプトを配置する必要があります。

このスクリプトを一から自作するとなかなか大変なのですが、Atlassian社がサンプルで用意しているリソース制御スクリプトがあるので、今回はそれを拝借します。

CentOS 7.1 + Pacemaker 1.1 の構成では
/usr/lib/ocf/resource.d/ 以下に
自作スクリプトを配置することによりクラスタリソースが追加されます。

ということで、このファイルを各ノードの /usr/lib/ocf/resource.d/heartbeat に配置します。

cd /usr/lib/ocf/resource.d/heartbeat
curl -o stash https://bitbucket.org/atlassian/stash-ha-example/raw/1397712da2b11ab4894c91446009aacae94fcf3d/vagrant/scripts/heartbeat-stash
chmod 755 /usr/lib/ocf/resource.d/heartbeat/stash

リソースが定義されているかの確認をします。
pcs resource list コマンドの結果に
ocf:heartbeat:stash が含まれていればOKです。

# pcs resource list
--中略--
ocf:heartbeat:slapd - Manages a Stand-alone LDAP Daemon (slapd) instance
ocf:heartbeat:stash - Manages a Stash instance
ocf:heartbeat:symlink - Manages a symbolic link
ocf:heartbeat:tomcat - Manages a Tomcat servlet environment instance
--以下略--

Stashリソースの定義

リソースを定義する準備が整いましたので、クラスタにリソースを追加します。 下記コマンドを実行して、stashのリソースを定義します。

pcs resource create stash_res ocf:heartbeat:stash params stash_user=atlstash stash_home=/var/atlassian/application-data/stash stash_inst=/opt/atlassian/stash/3.11.3 op monitor interval=15s op start timeout=240s

次にstashが単一のノードでしか起動しないように設定します。

pcs resource meta stash_res migration-threshold=1

最後に、stashのプロセスと、VIPが同時に同じノードで起動するように設定します。

pcs constraint colocation add stash_vip with stash_res INFINITY

リソースを定義した後、クラスタの状態を確認しこのようにstashvipとstashresが同じノード上でStartedになっていればOKです。

# pcs status
Cluster name: stash
Last updated: Sun Sep 20 10:07:15 2015        Last change: Sun Sep 20 09:32:39 2015 by root via cibadmin on node01
Stack: corosync
Current DC: node02 (version 1.1.13-a14efad) - partition with quorum
2 nodes and 2 resources configured

Online: [ node01 node02 ]

Full list of resources:

 stash_vip    (ocf::heartbeat:IPaddr2):   Started node01
 stash_res    (ocf::heartbeat:stash): Started node01

PCSD Status:
  node01: Online
  node02: Online

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled
  

ノード切り替えの確認

それでは、設定が出来たのでノード障害時に自動的に切り替わるか確認したいと思います。

まず現状を確認します。
諸事情で、node02がアクティブになっています。

# pcs status
Cluster name: stash
Last updated: Sun Sep 20 11:03:59 2015        Last change: Sun Sep 20 09:32:39 2015 by root via cibadmin on node01
Stack: corosync
Current DC: node02 (version 1.1.13-a14efad) - partition with quorum
2 nodes and 2 resources configured

Online: [ node01 node02 ]

Full list of resources:

 stash_vip    (ocf::heartbeat:IPaddr2):   Started node02
 stash_res    (ocf::heartbeat:stash): Started node02

PCSD Status:
  node01: Online
  node02: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled
  

では、ここでnode02の電源をOFFします。

# pcs status
Cluster name: stash
Last updated: Sun Sep 20 11:08:36 2015        Last change: Sun Sep 20 09:32:39 2015 by root via cibadmin on node01
Stack: corosync
Current DC: node01 (version 1.1.13-a14efad) - partition with quorum
2 nodes and 2 resources configured

Online: [ node01 ]
OFFLINE: [ node02 ]

Full list of resources:

 stash_vip    (ocf::heartbeat:IPaddr2):   Started node01
 stash_res    (ocf::heartbeat:stash): Started node01

PCSD Status:
  node01: Online
  node02: Offline

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled
  

しばらく後にクラスタの状態を確認したところ無事にnode01に切り替わっていることが確認出来ました。

さいごに

今回で、ようやくStashが切り替わる様になりました。これで可用性が高まって枕を高くして眠れるかと思いましたが、実はまだ設定が足りませんでした。
実は、Stashはハードディスク上にもデータを保存しているのです。

というわけで次回はディスクを冗長化して、こんどこそ真のStashの耐障害性向上を成し遂げたいと思います。

なにが売れるかわからないべ

なにが売れるかわからないべ

みなとみらい

みなとみらいで、最近売れているはこれですね。

そうこれです。

3D9A3949.jpg

これです。

近所のサッカー小僧に売れるのはわかりますが、一般の方もよく買っているみたいです。

ちょっと小腹が空いた時にはいいですね。

でも、よくよく考えるとこれが売れているとはすごいですね。

一見お湯を入れなければいけない手間を考えると手に取ることをためらってしまいますが、

すでにその発想が頭が固い状態なのかもしれません。

アットウェア

アットウェアで売れている(押している)のは

アジャイル開発、Java、Scala

ですが、なにか自社のプロダクトを開発できたかというと…なかなか難しい。

アットウェアでも日々使って嬉しいもの、楽しい物を、便利なものを追い求めております。

その価値が何なのか。

アツい気持ちで、頭を柔らかくして、必死にアイデアを搾り出したいです。

何が売れるか、何が愛してやまないプロダクトになるのか!

インターンシップ体験記・2015(奈良高専 幾谷さん)

インターンシップ体験記・2015(奈良高専 幾谷さん)

はじめに

奈良工業高等専門学校専攻科2年の幾谷です。 ソフトウェア工学を専攻し、以前から開発プロセスに興味があったので、今回アットウェアでのインターンシップに参加しました。 結論として、ここでのインターンシップは、ぼくにとって大きな衝撃と感動に満ち満ちていました。 とくに以下の3点について素晴らしい経験ができたと考えています。

  • アジャイル開発を実際に自分で計画・実行することができた
  • 実際にアジャイルツール(カンバン、KPTボード)を動かしながら開発できた
  • 新技術に飢えているハイスペックギークな方々とたくさんお話ができた

情報が好きで、プログラミングが好きで、新しいものが好きな方はアットウェアでのインターンシップに参加することを強く勧めます。 私がアットウェアで3週間どのようなことをしたかを記事としてまとめることで、IT企業を目指す就活生やインターンシップへ参加したい学生の一助になれば幸いです。

作成したいアプリケーションの決定

アットウェアでのインターンシップは8月31日から9月18日までの3週間でした。 アジャイルの手法にのっとって、2人のチームで自分たちで考えたアプリケーションを開発することが私のミッションでした。

初日(8月31日)にチームメンバーの顔合わせ、「アジャイルとは何か」についての講習、作りたいアプリのコンセプトの決定をしました。 アジャイルチームの社員の方々との検討の結果、我々は学生向けのマッチングサービスをWebアプリケーションとして開発することになりました。 コンセプトをインセプションデッキという形でまとめることで、より詳細に作ろうとしているアプリケーションを想像できるようになりました。

インセプションデッキの構築後は、タスクの洗い出しとユーザーストーリーマッピングを行いました。 社員の方々が実際に使っているやり方で開発の計画をつくることで、私のアジャイルへの理解がとても進みました。

スケジュール

2日目以降はおおむね以下の画像のとおりに作業を進めました。 実働10日間を2つのスプリントに分割し、それぞれの中で計画・開発・ふりかえりをまわすというやり方が基本となりました。

開発

開発はJava+Gradle+Springで行いました。 アットウェアでは多くの方がJavaでシステムを書いているので、困ったときにはすぐに質問できる環境になっていました。 10時から19時まで昼休憩を除いて、毎日7時間弱ぐらい開発に没頭していました。 開発時のタスクはすべてカンバンで管理し、毎日タスクカードがCheckIn -> ToDo -> Doneと流れていきました。

ふりかえり

各スプリントの最後にはふりかえりの時間が設けられていました。 ふりかえりでは、作成したプロダクトのデモ・KPTによるチーム改善・次のスプリントの計画を行いました。 毎週このようなデモがあるので、1週間の開発時間内に動く成果を出すことが要求されます。 すこしプレッシャーもありましたが、動く成果を出し続ける作業は進捗の明確化はもちろんのこと、作業者の精神衛生にとっても有益だと感じました。

デモの後はKPT法でいまのチームが「続けるべきこと(KEEP)」、「問題(PROBLEM)」、「問題解決のための施策(TRY)」を議論しました。 毎週このような場を設けて、定期的にチームを改善することで、アジャイルの土台が保障されるのだと思いました。

KPTのあとは次のスプリントの計画を行いました。 このスプリントで取り組むユーザーストーリーをバックログから選択し、それぞれについてタスクの洗い出しと見積もりをしました。

成果物

実働10日間の開発の結果、facebookアカウントで登録するマッチングサイトが完成しました。

まとめ

この3週間のインターンシップで以下のことをとても深く学ぶことができました。

  • アジャイルにのっとったソフトウェア開発のやり方(カンバンによるタスク管理、KPTによるふりかえりなど)
  • JavaによるWebアプリケーション開発(Java+Gradleの使い方、SpringによるWebフレームワーク開発)
  • 新しい技術を学ぶ姿勢、追いかける姿勢

学校の授業や独学でなんらかの情報技術を学んでいる人にとって、アットウェアでのインターンシップは、コーディングだけではないソフトウェア開発のイロハを学ぶために最適な機会になると考えています。 プログラミングをやっていない人にとっては(ぼくの相棒はプログラミング経験なしでした)、IT企業が実際にどんなことをしているのかを知るためや、プログラミングを自分の技術にするためのまたとない機械になると考えています。 すこしでも情報に興味があって、最先端の現場で通じる技を知りたい方は、是非アットウェアでのインターンシップに応募してみてください。

最後に、アットウェアの皆さんには、アジャイル手法の教示から開発の支援まで、さまざまな場面で多くのご支援をいただきました。 社会経験として、技術の鍛錬として、素晴らしい3週間をほんとうにありがとうございました。