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

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

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

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

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

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

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

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

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

we-are-reactive-blue-right.png

First Steps with Scala Programming

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

By far the easiest way to get started is with Activator

What is Activator?

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

What is SBT?

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

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

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

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

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

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

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

What else?

There are some alternatives to using Activator.

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

conscript augments giter8, but I have not used this.

What should I do first?

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

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

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

$> activator new amazing spray-spark-react

This will spit out some instructions for you

$> cd amazing $> activator ui

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

Conclusion

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

shibboleth ready!

shibboleth ready!

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

Shibboleth-logo-smaller.jpg

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

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

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

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

 

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

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

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

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

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

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

Connecting SquirrelSQL To Apache Spark via Thrift Server JDBC

Introduction

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

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

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

Setting up A Simple Spark System

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

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

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

Next we need to do a little configuring.

I added the following environment variables to my .bashrc:

# Spark local environment variables

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

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

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

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

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

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

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

<configuration>

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


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


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

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

# > SPARK_ALL

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

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

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

Adding Data

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

We will use the data provided here

# > cd $SPARK_HOME

# > bin/spark-shell

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

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

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

Run the Thrift Server

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

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

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

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

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

Your thrift server is ready to go.

Next, we will test it via beeline.

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

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

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

Now you know you can connect to spark via JDBC!

Install a Client

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

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

Save this driver.

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

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

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

ScalaDays San Francisco 2015 Recap

Sunset over the Golden Gate bridge

Sunset over the Golden Gate bridge

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

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

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

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

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

The Future is Tasty

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

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

Spark

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

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

Shapeless

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

ScalaJS

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

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

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

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

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

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

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

プラグインの種類

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

「ブロック」とは?

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

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

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

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

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

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

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

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

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

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

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

全文検索の仕組み

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

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

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

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

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

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

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

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

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

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

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

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

n-gramによる単語検出

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

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

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

それぞれの特徴

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

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

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

VirtualBox から vagarnt の box 作成

VirtualBox から vagarnt の box 作成

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

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

VirtualBox, vagrant のインストール

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

VirtualBoxにCentOS 5.8を作成する


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

2. VMの設定を行います

3. CentOS 5.8 インストール

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

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

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

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

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

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

4.3 sshの設定後。 UseDNS を起動

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

4.4 vm へ ssh

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

$ ssh root@localhost -p 2222

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

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

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

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

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

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

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

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

4.8 後処理

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

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

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

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

あとがき

後は作成したboxを使って

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

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

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

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

Raspberry Pi で XFD

Raspberry Pi で XFD

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

XFDとは

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

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

とのことです。

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

今回すること

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

用意するもの

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

くみたて

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

DSC_0078

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

raspi-XFD

プログラム

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

結果

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

DSC_0079

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

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

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

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

DSC_0097

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

DSC_0098

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

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

動作例

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

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

bamboo_build_failed

光ります。

DSC_0084

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

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

まとめ

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

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

Atlassian crowd インストール編

Atlassian crowd インストール編

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

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

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

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

K. 仮想環境の準備

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

 Virtualbox のインストール

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

 Vagrant のインストール

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

 VMの準備

1. vagrant box を準備する

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


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

3. VM を起動する

        $ vagrant up


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

E. Crowd のインストール

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

 前提条件の準備

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

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

        $ sudo yum install java-1.7.0-openjdk


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

        $ sudo yum install mariadb-server


3. mariadb の起動

        $ systemctl start mariadb


 Crowd のインストール

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

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

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


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

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

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

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


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

        $ sudo mkdir -p /var/atlassian/crowd


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

crowd.home=/var/atlassian/crowd


 Crowd 用データベースの準備

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

1. データベースの作成

        create database crowd character set utf8 collate utf8_bin;


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

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


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

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


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

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


Y. Crowd の起動

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

 Crowd の起動

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


 Crowd の初期設定

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

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


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

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

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

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

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

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

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

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

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

設定を確認してContinue

設定を確認してContinue

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

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

今回は初期設定でContinue

今回は初期設定でContinue

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

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

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

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

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

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

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

 

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

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

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

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

参加までの経緯

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

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

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

研修内容

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

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

学んだこと、感じたこと

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

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

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

  • 非効率の「3つのM」

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

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

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

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

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

最後に

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

atWare English Speech Contest

atWare English Speech Contest

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

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

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

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

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

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

IMG_9606 (1).jpg

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

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

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

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

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

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

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

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

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

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

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

OUTPUT_PIN = 4

app = Flask(__name__)

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


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


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


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


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

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

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

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

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

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

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

</body>
</html>

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

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

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

今回はここまで。

Email:yanou at atware.co.jp

Happy Scala Day from SF!

Happy Scala Day from SF!

20150316_171257.jpg

Hi, I am Jeff. I am here in SanFrancisco now to come to Scala day! This year from Mar 16-20(include training), Typesafe,inc hold this event in SanFrancisco. It's amazing event!!

Last year, I and some atWare colleague visited to SF to attend OracleOpenWorld and Javaone. It was also good. However, one aspect of this conference that is very different than OracleOpenWorld is that all the major names are here and it's a much smaller group. I recognize many of the names and faces from stack overflow, blogs, and frameworks.

I am so excited!! Don't worry I will get a better photo with odersky together!!

Happy Scala day!!

チーム合宿

チーム合宿

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

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

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

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

 

 

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

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

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

 

 

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

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

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

 

 

 

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

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

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

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

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

 

 

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

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

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

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

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

こんにちは!
はんだ部紅一点、スマイルエンジニアの木村です。
 
本日は待ちに待った!?、
はんだ部の活動日ということで
ちょっと活動内容をレポートしちゃいます!
 
昨年の 5 月から開始したはんだ部ですが、
第 8 回目(全然キリよくない!)となる今回は、
なんと!
 
新たなメンバー 2 名(Jeff & Huy)を迎えての活動となりました!
 
 
初参加ということもあり、
今日は Raspberry Pi のセットアップと
LED の点灯、と Raspberry Pi ビギナーなら
誰もが通るであろう道を 2 人にも体験してもらいました!
 
普段、英語を話す 2 人には、
レクチャーするのももちろん英語です!
 
内容的には初心者向けでも、
慣れない英語を使っての説明はなかなかのハードモード。
 
電子工作どんとこいの先輩メンバーでも
言語の壁に苦戦中ー!?

 
先輩たちの熱意が伝わったのか!?、
作業に取り組む 2 人もこ〜んなに真剣!!

みんなの頑張りの結果、
最後は無事に、
2 人とも L チカ(LED 点灯)することができました!
 
 
先日、Windows 10 も動くと噂の、
New バージョン Raspberry Pi 2 も登場し、
ますますアツイ IoT 界隈。
 
はんだ部でも今後どのように活躍してくれるのか、
これからが楽しみですね!
 
期待で胸いっぱいになってきたところで、
本日はこの辺で!
 
 
とってもインターナショナルなはんだ部の
第 9 回の活動は 3 月下旬頃を予定しています。
 
次回のレポートもお楽しみに!  
 
 

■ はんだ部とは?

はんだ部は
「楽しく電子工作してみよう!」
をモットーに活動する、
アットウェアの部活動の 1 つです。
 
メンバーは男女混成で、過半数が電子工作初心者です。
 
「はんだ部」という名前ではありますが、
はんだの使用は必須ではなく、活動内容に縛りはないので、
最近はもっぱら Raspberry Pi 中心でやってます。
 
 

現在、新規メンバー絶賛募集中です!
 
電子工作にちょっとでも興味がある方なら、
どなたでも OK !
 
あなたの参加をお待ちしております!!    
 

みなとみらいアットウェアオフィスの周辺環境

みなとみらいアットウェアオフィスの周辺環境

みなとみらいには魅力がたくさん。5分も歩けばこんなリフレッシュできる場所も!

アットウェアの本社みなとみらいオフィスは、東横線から直結しているみらとみらいラインのみなとみらい駅付近にあり、風光明媚で観光資源や商業施設が豊富にある横浜みなとみらいエリアの中心にあります。オフィスから5分も歩けば、様々な種類の施設をめぐることができ、気分もリフレッシュ。今日は、オフィスの近くにどんな建物、施設、スポットがあるのか、書いてみたいと思います。

 

みなとみらいのランドマーク 「ランドマークタワー」

横浜みなとみらいに来たら、誰もの目に入るのが、ランドマークタワー。このランドマークタワーは一時期、日本一高いビルとして君臨。現在は他のビルに抜かれてしまいましたが、今でも観光として有名です。また、低層階はランドマークプラザとしてショッピングモールになっていて、高級ブランドの他、レストランやイベントなどでも利用されています。

太平洋の白鳥と呼ばれた「日本丸」

ランドマークタワーの前には1930年代に作られた大型帆船の日本丸があります。日本丸は現在観光用として展示されているだけですが、時々、帆を広げるイベントを行っているようです。見たい人は是非日付をチェックして訪れてはどうでしょうか?

IMG_9487.JPG

世界一の大きい時計台「コスモクロック21」

さらにランドマークタワーの隣にあるコスモワールドという遊園地でも人目を集める大きな観覧車「コスモクロック21」。この観覧車は世界一大きい時計台として登録されているようです。対岸からの眺めが最高ですし、乗っても最高です。約15分の観覧になりますが、よければスケルトン仕様のカゴが4つあるので、乗ってみてはいかがでしょうか?夜は30分ぐらい並びます。

IMG_4997.jpg

不思議なオブジェ「モクモク ワクワク ヨコハマ ヨーヨー」

ランドマークプラザとクイーンズスクエアの間にあるこのオブジェ。名前は「モクモク ワクワク ヨコハマ ヨーヨー」と言って、風の通り道、流れを意識し、「たなびく雲」をイメージして作られたようです。この周りには大道芸人が週末になると芸をしているので、興味のある人は訪れてはどうでしょう?私は個人的に、近くにあるフローズンヨーグルトが好きです。

 

横浜の文化と世界の美術を鑑賞できる「横浜美術館」

先ほどのオブジェから歩いて1分程のところにあるのが横浜美術館。こちらの前には大きな池が2つある公園のようになっていて、日向ぼっこやゆっくり時間を過ごす人がベンチに座っているなど憩いの場となっています。私もきばらしに時々ココらへんをゆっくり歩いては考えをまとめたり、ヒントをもらったりしています。当然、美術館ですので、自分の嗜好にマッチしていたら入って観てみるのもよいでしょう。

http://yokohama.art.museum/

私達の台所。新ショッピングモール「Markis」

MARKISは三菱地所グループのショッピングモール。若者、特に子育て層をターゲットにしたお店が多く出店しているショッピングモールです。地下には食料品スーパーやいわゆるデパ地下のような惣菜、おみやげのお店が多くあり、私達のお昼のお弁当やおつまみなどの台所として利用しています。また4階にはフードコートやレストランもあり、その日のお腹の具合とおさいふと相談してどこに行こうか決めることができます。

まだまだ魅力はたくさん!!

今回は徒歩5分圏内の施設、スポットを紹介しましたが、徒歩10分だともっと色々な施設があります。

  • 特徴的な形のインターコンチネンタルホテル
  • 海が綺麗な臨港パーク
  • オリジナルカップヌードルが作れるカップヌードルミュージアム
  • シアターとお買い物ができる横浜ワールドポーターズ
  • 不思議な組み合わせな、BMW&ポルシェ&ニトリ
  • The 横浜 横浜赤レンガ倉庫
  • 優雅に散歩 汽車道

是非観光がてらアットウェアオフィスに来てみてください!!

 

 

Atlassian ID 管理ツール Crowd

Atlassian ID 管理ツール Crowd

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

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

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

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


Crowd とは

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

公式には、

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

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

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

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


Crowd ができること

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

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

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

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

  • Atlassian 製品との連携

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

  • Atlassian 製品以外との連携

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


つぎは

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

全文検索システム「Solr」の紹介

全文検索システム「Solr」の紹介

みなさん、こんにちは。lunettesチームの的場です。

肩書きはTechnical Promoterを名乗っています。 役割としては、新しい技術の利用を推進したり、技術レベルの底上げなどになります。

今回はチーム内のプロジェクトでよく使われているオープンソースの検索エンジン「Solr」を紹介します。

Solrとは

Apache Software Foundationで提供されているオープンソースの全文検索システムです。 全文検索自体はApache Luceneという同じくApache Software Foundationで提供されている全文検索エンジンを使用しています。

全文検索とは

全文検索とは、大量の文書から特定の文字や文章が含まれている文書を検索する仕組みです。

みなさんもよく使われているGoogleも全文検索の仕組みを使って世界中のWebサイトを検索しています。 また各Webサイトごとに全文検索を持っているものを多く、それらは各Webサイト内に限った検索が出来るようになっています。

全文検索を利用することによって、大量にある情報から必要な情報を得ることが出来るのです。

なぜSolrを選んだか

通常のWebシステムではデータの保存や検索にはMySQLやPostgreSQLなどのリレーショナルデータベースシステムを利用することが多いです。それらの中にも全文検索に対応しているものはありますが、標準機能ではなくてインストールが面倒だったり、成熟されていないため安定性に不安があったり、性能や機能面における拡張性に不安があったりします。

SolrはJavaのみで動作するためインストールは簡単で、利用者も多いため比較的安定しており、性能や機能面における拡張性も十分考慮されています。 また、日本人も開発に参加しているため、日本語の検索も考慮されています。

ただし、Solrを使えば全てのデータに対応出来るわけではなく、リレーショナルデータベースシステムで良く扱う関係性を持ったデータなどは不得意な場合もありますので適材適所という形になります。 チーム内のプロジェクトでもSolrと別のデータストア(PostgreSQLやCouchbaseなど)を併用しています。

次回はSolrの検索の仕組みを紹介したいと思います。

デジタルサイネージ計画Part1: INTELベアボーンDN2820FYKHにUbuntu desktopを設定

デジタルサイネージ計画Part1: INTELベアボーンDN2820FYKHにUbuntu desktopを設定

はい、福社長の北野です。先日Raspberry Pi2を買って、デジタルサイネージ計画を実行したのですが、若干パワーが思ったよりも足りないかな?と思いましたので、適当なものを探して春節のアキバをうろついていました。そこに、Intel NUC DN2820FYKHが飛び込んできました。なんと128GB SSDと合わせて19800円。メモリを別に買う必要がありますが、それを含めても2.5万円ぐらいで買えてしまいます。気がついたら、レジで「あれください!!」と言っていました。

買ったのがこれです。みなさんもお馴染みのドスパラです。まだたくさんありました。

さて、ベアボーンなので、買ってきただけでは、動きません。まずは最終組立が必要です。自分でPCを組み立てた経験がある人であれば、説明書なしで大丈夫でしょう。そうじゃない人は、説明書がついてますので、それの絵をみれば大丈夫です。 まずはネジで開けて見て、メモリとSSDを所定のところに差し込みます。コネクタが全然違うので、まちがって指すことはないでしょう。他は触らないこと。あと、電子機器を触る際は、アーシングをして静電気を逃がしましょう。例えば水道栓に触ったり、大きな金属に触れたりして。そして、それらを挿したら、差し込みがちゃんと奥までささっているか確認しましょう。

あと、ついでにこのコンピュータの端子を見ておきましょう。 ディスプレイはHDMI。キーボードとマウスはUSBでつなぎます。Bluetooth4.0もあるそうなので、セットアップ後に無線にもできそうですね。LAN端子もありますし、Wireless LANも入っているようです。あとはオーディオ端子と電源アダプタですね。必要最低限のものは揃っています。上の2つの口はファンの口ですね。ファンレスではないですが、かなり静かです。

さて、ディスプレイをつなげてスイッチを入れてみましょう。

案の定、立ち上がりません。それもそのはず、OSを入れていませんから。BIOSの設定の画面を見てみると、少しかっこいいです。

さて、OSを入れないとなにもできません。なにを入れましょう。ということで、Ubuntuを入れましょう。Ubuntuというのは、皆さんもご存知、数あるLinuxのディストリビューションの1つ。私が大学の頃はSlackwareとかあって、社会人になった頃にDebian、Redhatが出てきて、途中Miracle Linuxとかあったりしましたねー。Ubuntuに選んだ理由は、私が家で普段使っているのがUbuntu Desktopだからです。最新のLTS(サポートが5年あるもの)は14.04 LTSですが、家のマシンが14.04にしてから遅くなったように思ったので、このマシンには12.04 LTSを入れることにしました。本家サイトからダウンロードしてみましたが、2時間ほどかかるとのことなので、日本のミラーサイトを幾つか試してみたところKDDI研究所が7分ぐらいで落ちてきました。と、ここでCD-Rが無い。おっと、誤算。ネットワークインストールは以前試して遅かったので、ここはSDメモリーでやってみようと思いました。ちょうどあきばお~で32GBのSDをMicroSDと間違って買ってきてあったので、ここは使うしか無いと。ダウンロード終了後、md5sumでMD5をしっかり確認しておきましょうねー。

さて、ダウンロードしたISOファイルですが、それをSDカードに移しても起動してくれません。ここでUNetbootinを使って、ISOイメージをブータブルなイメージとしてSDカードに展開してもらいましょう。その後、SDカードをカードリーダー経由でベアボーンマシンに刺して見ると、無事Ubuntuがグラフィックインストーラーで起動しました。ここまでくれば、あとはWindowsのインストールとほぼ同じです。ロケールやキーボードの選択、ネットワークの設定、初期アカウント設定などを終えれば、10分程でインストール完了。無事Ubuntuマシンの出来上がり。

Firefoxを使ってブラウジングをした感触では、RaspberryPi2の4,5倍ぐらいはあるんじゃないか?と思いました。これで、デジタルサイネージのクライアント側のマシンの初期設定は完了です!次回は、これに色々アプリとか仕掛けを積んでいきます。