エンタープライズギークス (Enterprise Geeks)

企業システムの企画・開発に携わる技術者集団のブログです。開発言語やフレームワークなどアプリケーション開発に関する各種情報を発信しています。ウルシステムズのエンジニア有志が運営しています。

Cognitive Servicesと Raspberry Piによる音声デバイスの作成

先日、弊社ではプロジェクト事例の知見の交換や社内の技術者交流を目的として、社内向けの技術イベントを開催した。 私はこの4月から Amazon Echo の調査、Cognitive Services の LUIS を使用したチャットボットの作成など、機械学習や自然言語処理サービス…

Akkaで始める並行処理(4) - Propsの使用方法とAskパターン

今回はアクターの生成で用いるPropsの詳細と、Askパターンについて解説する。 なお、今回からサンプルコードは主に Scala を用いる。 コンストラクタ引数を持たないアクターの生成 Propsはアクター生成時に用いるオブジェクトで、アクターの型やアクター生成…

AWS Lambdaにおける「ステートレス」なキャッシュ利用

AWS Lambda は、AWSが提供するイベントドリブンなプログラム実行環境であり、昨今ではサーバーレスアーキテクチャの実現手段として注目を集めている。 AWSの公式ドキュメントによると、AWS Lambda の関数はステートレスな実装にする必要がある。一方でステー…

Akkaで始める並行処理(3) - アクターの基本 (Java編)

前回の記事では、Scala による Akka の基本的なサンプルプログラムを紹介した。 Akka は Scala と Java それぞれに対応した API を提供している。 今回は、前回 Scala で作成したサンプルプログラムの Java 版を紹介する。 サンプルプログラムの全体構成を以…

「いまさらアジャイル巡業 in Tokyo 2016」で講演

11/19(土)にアジャイルプロセス協議会が主催する「いまさらアジャイル巡業 in Tokyo 2016」が開催された。あいにくの雨だったが、40名近くの人が参加した。また、この日は会場が株式会社ドワンゴの会議室だったこともあり、ニコニコ生放送での同時配信も行っ…

Atlassianユーザグループで「Bitbucket を使用したコードレビュー改善事例」を発表

9/27(火)に第19回 Tokyo Atlassian ユーザグループ(AUGJ)のイベントが開催された。 そこでは、ウルシステムズの伊藤が、担当しているプロジェクトにおけるコードレビューの事例を発表した。 augj.connpass.com Atlassian ユーザグループは、アトラシアンユ…

Akkaで始める並行処理(2) - アクターの基本 (Scala編)

前回は、Akka と アクターモデルの概要について説明した。 今回は、2つのアクター間でメッセージを交換する基本的なプログラムを紹介する。 今回のサンプルプログラムでは、Scala を用いる。 この連載では主に Scala によるプログラムを扱うが、次回は Java …

Akkaで始める並行処理(1) - アクターモデルとAkkaの概要

概要 近年、コンピュータの CPU はマルチコアが当たり前になった。マルチコアを使うにはマルチスレッドプログラムを扱う必要がある。 また、アプリケーションでは Web サービスなど複数のネットワーク通信を使用することが多くなっている。通常ネットワーク…

XP祭り2016でエンタープライズへのアジャイル開発の導入事例を講演

9/24(土)にXP祭り2016が早稲田大学西早稲田キャンパスで開催された。雨の中多くの方が参加していて、現在でもXPの熱量は冷めていないことを実感した。ウルシステムズの吉原の講演では、エンタープライズへのアジャイル開発の導入事例を紹介した。 今回のXP祭…

Cloud9の概要

Cloud9はいわゆるクラウドIDEである。ブラウザからクラウド上の開発環境を操作して開発できる。ローカルマシンに開発環境を構築せず、ブラウザだけあれば開発を始められるので非常に手軽である。先日(2016/7/14)、Amazonが買収したニュースが発表されてい…

JavaEE7をはじめよう(最終回) - CDI 拡張機能による独自スコープの作成

今回は Java EE 7 連載の最終回として、CDI の拡張機能を紹介する。 CDI は拡張ポイントを提供して独自の拡張ができるようにしている。具体的に可能なのは以下のようなことである。 独自スコープを追加する CDI Beanでないクラスを CDI Bean として登録し、…

DDD超入門(後編) - Domain-Driven Designの適用Step

前編ではDDDの概要についてふれたが、後編ではDDDの適用Stepを3つのStepに分けて紹介する。 まずStep1として、アプリケーションに登場しうる概念を抽出してドメインモデルで表現する。 次にStep2として、各ドメインの概念を深掘りしてソフトウェアとしてどう…

Nexus(大規模スクラム開発)の概要

Nexusとは Nexusはスクラムを開発したKen Schwaberが2015年に発表した大規模スクラム開発の手法である。言うまでもなく、スクラムはXPと並んで最も有名なアジャイル開発手法である(→Nexusの公式サイトへ)。 Nexusはスクラムを大規模開発向けに拡張している…

DDD超入門(前編) - Domain-Driven Designの概要

DDD

今回から2回に分けて、Domain-Driven Design(ドメイン駆動設計。略してDDD)を紹介する。 DDDとは、Eric Evans氏が2000年代初頭から提唱しているソフトウェア設計手法で、機能中心ではなくドメイン(ビジネス上の関心領域)に設計の重心を置いたオブジェク…

JavaEE7をはじめよう(28) - Concurrency Utilities for Java EE (後編)

前回の記事では Concurrency Utilities for Java EE のManagedExecutorServiceによる並行処理の例を紹介した。 今回はManagedScheduledExecutorServiceについて解説する。 ManagedScheduledExecutorServiceのサンプル この仕組みは、以前の記事で紹介した1分…

エンタープライズアジャイルで成功するために必要なこと

少し前の話になるが、今年の4月15日に品川で開催されたエンタープライズアジャイル勉強会で、ウルシステムズの河野が講演を行った。 エンタープライズアジャイル勉強会は、企業システムへのアジャイル開発の適用推進を目的とした勉強会で、この分野に取り組…

ニュースになったディープラーニング関連の論文を紐解く

2012年あたりから、急激にディープラーニング関連の驚くべきニュースを目にする機会が増えた。たとえば以下のようなものである。 2012年: Googleのコンピュータが自動的に猫を認識できるようになった 2012年: 画像認識コンペティションでディープラーニング…

JavaEE7をはじめよう(27) - Concurrency Utilities for Java EE (前編)

今回から2回に分けて Concurrency Utilities for Java EE を紹介する。今回は前編として、Concurrency Utilities for Java EE の概要と、アプリケーションサーバー側で管理・提供するスレッドプールの1つであるManagedExecutorServiceを紹介する。 Java SE …

Thymeleaf3 の fragment expressions で View の共通化を促進する

2016年5月に、 主に Spring MVC で使われるテンプレートエンジンである Thymeleaf のバージョン3がリリースされた。 (Thymeleafの本家サイトはこちらを、変更点の一覧はこちらを参照のこと。) このバージョンの主な変更点としては、以下のものが挙げられる…

JavaEE7をはじめよう(26) - Bean ValidationとJPAの連携

前回は Bean ValidationのListとgroupsを使って、複雑な制約条件を記述する方法を紹介した。今回は Bean Validation を組み込んだフレームワークの例として、JPA での使用例を紹介する。 JPA では、エンティティクラスに制約アノテーションを設定することで…

いまさらアジャイル巡業 in 広島

2016年3月12日に広島で「いまさらアジャイル巡業 in 広島」が開催された。 いまさらアジャイル巡業とは、アジャイルプロセス協議会が各地で行っている無料の勉強会である。松山、福岡、石川など全国各地で実施してきたが、今回はウルシステムズが企画・運営…

JavaEE7をはじめよう(25) - Bean Validationで複雑な条件を記述する

前々回と前回の記事では、Bean Validation の基本的なアノテーションの使用方法と、カスタムアノテーションの作成方法を紹介した。基本的にこれらは、1つの Bean に対して共通のバリデーションを定義するものである。 今回は、1つの Bean に対して複数の制約…

JavaEE7をはじめよう(24) - Bean Validationでカスタム制約を作る

Bean Validation では独自のバリデーションを行うカスタム制約を作成できる。今回はカスタム制約を作成する方法を紹介する。 カスタム制約は以下の2つの方法で作成可能だ。 既存の制約を組み合わせる。 独自のバリデーション処理を作成する。 方法1:既存の…

JavaEE7をはじめよう(23) - Bean Validationの基本

今回から数回に分けて、Bean Validation を紹介する。 Bean Validation(JSR-303)は JavaBeans のバリデーションを行う仕組みである。Java EE6 から追加され、Java EE7 でのバージョンは1.1である。 Bean Validationとは Bean Validation は、JavaBeans の…

JavaEE7をはじめよう(22) - WebSocket クライアント API

前回の記事までは、WebSocket のサーバー側の実装例を中心に紹介し、クライアント側の実装は JavaScript を利用してきた。 しかし、Java EE の WebSocket API はクライアント用の API も備えている。そのため、このクライアント用 API を使用すれば、ブラウ…

JavaEE7をはじめよう(21) - WebSocketによるプッシュ通信とCDIのイベント通知

前回までは、WebSocket を使ってクライアントからのリクエストに対して応答を返す方法を中心に解説してきた。 WebSocket ではクライアントとサーバーで相互通信を行えるため、クライアントからのリクエストを契機にするだけでなく、サーバー側から任意のタイ…

JavaEE7をはじめよう(20) - WebSocket - デコーダとエンコーダ

前回の記事では WebSocket の基本的な実装方法を示した。 WebSocket を用いて本格的なアプリケーションを作る場合、メッセージの送受信をどのように行うかが課題となる。WebSocket には、HTML の FORM のように、構造的なデータを送る仕組みはない。このため…

Andrew Ng先生の機械学習講義を解説する勉強会資料を公開

シリコンバレーの有名大学であるスタンフォード大学で、Andrew Ng先生の教える機械学習の講義が人気を集めている。この講義は形を変え、courseraという無料のWeb上オンラインコースとしても受講でき、ここ日本でも機械学習の勉強がしたい人達の間でも人気の…

JavaEE7をはじめよう(19) - WebSocketの基本

今回から数回に分けて、 Java EE7 で追加された機能の1つである WebSocket の解説を行う。 WebSocket はクライアント(ブラウザ)とサーバー間で相互通信を行うためのプロトコルで、1つのコネクションを使ってブラウザとサーバーが何度もメッセージの送受信…

JavaEE7をはじめよう(18) - CDI インターセプターとステレオタイプ

以前の記事 で、 Java EE7から追加された @Transactional による宣言的トランザクションについて解説した。その中で、glassfish4.1 では、ロールバック時に根本原因がわからないという不具合があることを述べた。 また、その対策として例外ログを出力するイ…