カテゴリー別アーカイブ: 勉強会

参加しました「第二回 JetBrainsユーザーグループ in 大阪 #jbugj」


1/30(水) 第二回 JetBrainsユーザーグループ in 大阪 #jbugj に参加しました。

vimとかemacsをメインに使っている会社ではなかなか IDEのネタを共有することがないので、IntelliJ IDEAのかゆいところにも手が届く感じとかとても勉強になったし、楽しかった。


講演者の方のスライドまとめてみました

  • JetBrains製品のライセンス形態 や Community、Ultimate の違いなどとても分かりやすいです。13ページ目にUltimate Editionにしか存在しない機能の説明があります。使えない機能が結構あるのでUltimate Editionを買うべきなんだろうなー!


気になったことのメモ

  • IDEAの読み方は「イデア」じゃなくて「アイデア」

  • Commercial License $499
    業務用

  • Personal License $199
    個人用 (個人で購入してねという事, 業務で使用してもいい)

  • ひとりIntelliJ IDEA Advent Calendar 2012 インデックス

  • ピンチアウト、ピンチインでコードのビューを拡大縮小出来る!

  • Option + Enter => 出来る操作の候補を出す(テスト)

  • Productivity Guide を使おう
    help -> Productivity Guid
    IDEA内でよく使っている機能を抽出してヘルプを一覧できる。
    各ユーザによって表示される機能が違う。
    @mumoshuさんはコードナビゲーション(Goto系)の機能をよく使う

    • Cmd + n => クラス、ファイルを開く
    • Option + Shift + Cmd + n => メソッド名変数名など検索してジャンプ
    • Cmd + b => メソッド、変数の定義元へジャンプする
    • Cmd + Option + F7 => このメソッドを使用している箇所を特定する
    • Cmd + Shift + a => Goto Action (何かしらの機能(Action)を検索する)
    • Cmd + e => 最近使ったファイルを開く
       
  • Docコードのサポートが手厚い

  • Gitの操作

    • ステータスやDiffが見やすい (Cmd + d)

気になるツイートまとめてみました


* やっぱりそういうことかー

TDDBC大阪3.0外伝 参加しました!


2013年はじめのTDD Boot Camp in 大阪 外伝
開催日:2013年01月13日

午前は講演、午後は演習(ペアプロ)の2段構成でした。 10時から18時までと長丁場でしたが本当に楽しかったし、周りの皆さんと色々話もできてモチベーションが上がった!!


午前の講演時のメモ

いろふさん(@irof)、渡辺さん(@shuji_w6e : 資料)のお話を聞きました!

テストの価値は失敗することにある.

  • テストを失敗させる
    • 失敗するバグを埋め込む
      ちゃんと失敗してくれる、 失敗は最小、 失敗をわかりやすく

  • 他人の書いたテストはわかりづらい
    • テストはわかりづらいだから当たり前にしよう
    • 特別なことを当たり前にする

あたりまえのこと(特別なことはない)

  • テストは落ちるもの
  • テストは読みにくいもの

TDDは開発手法

良いプログラムは開発できるが、良いシステムを開発できるわけじゃない。
TDDはテストリストが起点
良いシステム = 顧客の求めるシステム

「何を構築するか?」を考える
顧客の言葉を使ったシステムの使い方
ユースケースユーザストーリ
システムの外部的な振る舞い

ユースケース駆動開発

ユースケースを開発の起点として定義する。

  • システムとユーザインタラクションを記述
  • 一行で一つのアクション
  • 〜すると記述(できるは避ける)

外部設計 => システムを外から見た時の利用者視点

ユースケースから実装を導く

  • ロバストネス分析
    バウンダリ
    コントローラ
    エンティティ

ユースケース中の名詞 -> ドメイン として定義
ユースケース中の動詞 -> メソッド として定義

抽象的なユースケースのシナリオから、具体的な例として変更する => 具体的な値を入れることでユースケースから受け入れテスト(機能テスト)を導く事ができる。ユースケースを用いることでシステム全体を設計する

(例)自動販売機にお金を入れる => 自動販売機に100円入れる


午後の演習

@oota_kenさんと@kyon_mmさんとペアを組ませて頂きました。Groovyを触ってコツを掴んだ気がします。新しい言語でコードを書くときはいつもプログラミングは楽しいなーと感じます。
そして、GroovyとSpockはホントテストが簡潔に書けると実感。これは覚えるべきだなと思いました!!

演習の時のコードをアップしてもらいました。TDDBC Osaka Groovy

和田さんのペアプロでのレビュー

パラレルチェンジ(でかいリファクタリングの時に有効となる方法)でリファクタリングをした。
パラレルチェンジとは(參考

変更箇所が多数ある場合に、リファクタリング前のコードとリファクタリング後のコードを同居させ、1箇所ずつ変更するごとにテストコードで確認しながらリファクタリング後のコードへ移行させていく。

演習中でのパラレルチェンジをする流れ
・お金の扱いをInteger から Moneyクラスにする
・メソッドオーバーロード
・Integerで扱うところをなくしてMoneyを使うことにする

余談(イベント中で印象に残ったこと)

@kyon_mmさんと何気なく話していた時に話していた内容がとても刺激をうけた!!!!

「(@kyon_mm)今日は4時間で20数コミットかー、普段は60コミットくらいはしているけどなー」・・・
なんだって!!!コミット数が全てを物語っていると思う。自分は短時間でこんなにコードに変更を加えた経験はないし、いったとしても4時間で20コミットまで行くか行かないかだと思う。。。こういう所が差なんだろうなーと。

これからは技術書を読むことに加えて、もっとコードに戯れて楽しんでいけるようにしたいなー!!
いろんなコードをコミットしまくれる1年にしたい!

Scala関西ビギナーズ 第1回 に参加しました!


前から気になっていたプログラミング言語 scala を勉強してみようということで参加してきました。
初心者向けということで、言語の特色や関数型言語の説明の後にはProject Euler (プロジェクトオイラー)という数学の問題サイトをもとにScalaに触れ合って行く感じの勉強会でした。やっぱり、勉強会で実際に実装するのは楽しかった!!!!

Scala関西ビギナーズ 第1回
開催日:2012年12月22日(土)


セッション中のメモ

  • イミュータブル(状態を変えないこと)を重要視している・・・変数(var)よりも定数(val)を

  • メソッドの引数の書き方が特殊。
    以下の2つのメソッドは同じ意味のメソッド。
    引数の2つあることを表す.カッコで引数を区切ることが出来る。

def hogeList(num: Int)(limit: Int): List[Int] = {
    println(num + limit)
    return List(num, limit)
}

def HogeList(num: Int, limit: Int): List[Int] = {
    println(num + limit)
    return List(num, limit)
}

お役立ちサイト
Courser(英語)
Scala Cookbook
hishidamaさんのブログ


ScalaのVim環境

実際にScalaを書いてみようということで、始める前の作業として、、
コンパイル言語でも僕の場合、IDEを使う程でもない時はVimを使うようにしています。まずはVimの環境ということで、シンタックスカラーと補完の設定を入れてみました。

  • Vim Scala統合環境の構築
    vim , scalaの統合環境として、vim-scala というプラグインを入れました。
vimrcに以下の内容を定義
% vim ~/.vimrc
Bundle 'derekwyatt/vim-scala'


インストールを実行
% vim 
:BundleInstall


Project Eulerの第一問を解いてみました

Project Eulerの日本語化されたサイトもあります!
Project Euler 日本語

  • 第一問
    2通りのやり方をかいてみました。
    Scalaでforループを使う方法、Rangeオブジェクトを操作する方法。
    この場合も2つ目のやり方が完結で、直感的で分かりやすいですねー

関西Javaエンジニアの会スペシャル!
JavaOne 2012に参加してきた!


関西Javaエンジニアの会がとても面白そうだったので、参加してきました!!
スピーカーの方も豪華ですごかった。そして、じゃんけんに勝ってJavaOneグッズを貰っちゃった。。
JavaOne タンブラーをGet

関西Javaエンジニアの会スペシャル! JavaOne 2012
開催日:2012年12月1日

内容は
JavaOneサンフランシスコの報告やJava8のlambdaなど


JavaOne 2012 サンフランシスコの報告

寺田さん @yoshioterada

JavaOne 2012の紹介されていたもので自分の中で気になったものをメモ

-Nashorn
JVM上で動くJavaScript エンジン
Rhinoに後継(パフォーマンスが良くなる)

-JavaFX Scene Builder
JavaFx用のGUIツール

-NetBeans 7.3 Beta
HTML5, JavaScript, CSS の開発環境を提供
Chromeのエクステンションを提供。(ホットリロードに対応。)
JavaFXを利用するのにも今のところはNetBeans

各プロジェクトの状況

Java SE 8
Lambda式の追加
JavaScriptエンジン統合
JavaFX

Java SE 9
Jigsaw(モジュール化)対応

Java EE 7
HTML5シンプル化

Java EE 8
クラウド化、モジュール化

単純にJavaOneに参加してみたいという思いが強くなったーーー
来年は東京開催のやつには参加しよう!!


Lambdaについて

さくらばさん @skrb
Java in the Box や IT Pro Java 技術最前線 の方。

lambdaを表すと
・Background
・Lambda Syntax
・Iteration API

【lambdaの構文】
(引数, 引数) -> {処理}

こんな感じのAdderインターフェースがある
interface Adder { int add (int x, int y); }

それを lambda で実装する場合、以下のように出来る。
Adder adder1 = (int x, int y) -> { return x + y; };

型推論があるから型を省略、returnも省略出来る
Adder adder2 = (x, y) -> x + y;

※引数なしの場合は () -> 1 + 2;
lambda の Iterator API(Stream API)

【lambdaの前に事前知識としてイテレータとは….以下の2つがある】
・拡張for文(外部イテレータ)
・Iteratorクラスのforeachメソッド(内部イテレータ

【Stream API(終了の制限のないコレクション) 以下のようなメソッドがある】
・filter
・sorted
・map
・reduce

【使用方法】
サンプルとして以下を考える。
「色」と「重さ」のフィールドを持ったShapeクラスのListからカラーが青の重さの合計を計算する。

@irofさんのサンプル https://gist.github.com/4180737

List shapes = new ArrayList();
shapes.add(new Shape("blue", 10));
shapes.add(new Shape("red", 30));
shapes.add(new Shape("blue", 50));
shapes.stream()
      .filter(s -> s.getColor()==Color.BLUE)
      .map(s -> s.getWeight())
      .reduce(0, (l, r) -> l + r);

・filter,map,reduceと 3回ループするように見えるけど filter や mapではループしない。reduceのところで一度ループする
・reduce メソッドは コレクションクラスの各要素を1つずつ処理していく
・stream()のところはparallel()に変更もできる(並列処理が出来る)

【「Default Method」について(インターフェースに対しての追加機能)】
これは使えそう!!!!インターフェースを実装しなくても、デフォルトを返すことができる。でも、意識して使わないとカオスにはなりそうだなー。インターフェース未実装のコンパイルエラーがでないようになりそうだし。

インターフェースにabstractメソッドだけではなくてdefault修飾子を付けられる。
interface foo {
    void sayHello();
    default void sayGoodBye() {
        System.out.println("Default Good Bye");
    }
}

【おまけ】
lambdaで実装した処理をPerlだったらどんな感じかなということで実装してみた。
パッと見、lambdaのメソッドチェーンで書かれているものが直感的で分かりやすいかなーー?!
そして、初めてGistも使ってみた。Gistに書くのいいねー!すぐに共有できるしシンタックスも充実してるし。

なんか、話を聞いているうちに、関数型言語への思いが増大していったー!!


javaEE7 のHTML5対応

寺田さん @yoshioterada
まず、、、最初に言われたのが、
Struts と Tomcat はやめようキャンペーン中」とのことでした!!!笑

http://yoshio3.com/2012/11/12/websocket-twitter-timeline-sample/

-JSF2.2 (Webコンポーネントライブラリ)
XHTML形式で扱える。デザイナー・エンジニア双方が同時に扱える。
プログラマ側が扱うフィールドなどの情報もタグ内に埋め込むことできる。
開発工程でデザイナーが更新したデザインをいちいちWebアプリサーバのコンテナに持っていかなくても扱うことが出来る。
ブラウザ上でタグを変換することが出来る

-サードベンダのコンポーネント
ICEfaces
PRIMEFaces

-WebSocket
TCPベース
双方向、全二重通信

通信の基本的な流れ
1,コネクション確立
2.双方向にメッセージのやりとり
3.コネクション切断

以下のようなアノテーションが提供されている
@websocketEndpoint(“[URL]”)
@webSocketMessage

-Project Avatar
HTML5 アプリ構築フレームワーク
モジュール化対応、JavaScriptフレームワーク
軽量なサーバ・アーキテクチャ(Thin-Server アーキテクチャ)
JavaScript と JavaEEを結びつけることが出来るのが Project Avator

【JSFの感想】
JSFは個人的にもとてもいいViewのライブラリだと思う。自分自身も使ってみた経験から、JavaScriptをガリガリ書かなくてもリッチなコンテンツも作れるし、HTMLのタグ内に属性として追加することもできるから、テンプレートとサーバの処理が分割できるってところはいいよねー!
よくある、デプロイしないとテンプレートのデザインが見れないっていうのが解決できそう。


JavaFXについて

さくらばさん @skrb

・Brand New GUI Library for Java(次の時代のGUIJava)
・Swingの後継 + Java 2D + α
・Java SE 8 includes javaFX
・基本的にはNetBeansの方にも

【Swing とは何が違うの?】
FXML(MVCのViewの部分をFXMLで書く)
Scene Builder 1.0 (Scene Builder)でViewを作る(Linux版も出た)

Swingだったら -> JCOmponent

JavaFXだったら -> Node

  • ControlShape
  • Browser
  • Chart
  • Media
    1. Chart
    2. CSS
    3. Animation / Effect

groovy G*のレポートについて

@kiyOtakaさん

JavaOneの中でG*関連の報告をしてくださいました。

javaOne Report for G*

【Groovy 2.0新機能】
静的Groovy
@TypeChecked アノテーション
@CompileStatic アノテーション
@Log アノテーション

G*のアドベントカレンダーもあるとのことだったので、見てみようと思う!!

大阪Node学園 四時限目に参加した-


またまた、参加してから数週間たってしまいましたが、参加した記録を残しておきます!
前回の三時限目からちょうど1年ぶりぐらいの開催でした。
ただ、感想としては、、、とてもおもしろかった!!!

大阪Node学園 四時限目
開催日:2012/11/24(土)

内容としては、以下の様な流れでした!

・テストについて
・実務での実例(Slidrsについて)
・yeomanについて
・東京Node学園祭参加レポート


テストについて

@craftgearさん
サーバサイドのテストはフレームワークの紹介程度であとはクライアントサイドのブラウザテストの紹介でした。個人的にもブラウザのテストって、難しいなーと思っていたのでフレームワークの使い方などとてもわかり易かった。testacularがよさそうなのと、MVCフレームワークも色々出ているけどangular.js がよさそうだなと思った。

【サーバサイド】
テストフレームワーク:mocha, expect.js(chai.js)

【ブラウザテスト】
testacular (node 0.8 over)
Angular.jsを採用している

Testem (node 0.6 over)
実行結果をブラウザで表示できる

Angular.jsの機能テスト(e2eテスト (End to End)のテスト)が使いやすい
Angular_scenario.js(Angular.jsに同梱されている)

angular.js の実装例で用意されてる機能テスト(e2e)参考
https://github.com/angular/angular-phonecat
https://github.com/angular/angular-seed


実務での実例(Slidrsについて)

@kumatchさん スライド資料

Nodeの利用したサービス(スライド共有サーービス)での環境構築から実際の中身の実装までの結構細かい内容を説明してくれた。実際のサービスで使用している例だったので、Nodeを使う上でのnginxの設定方法やNodeのデーモン化など、本番運用でのキーポイントをいくつも挙げていただき、がとても参考になった。

【nginxの設定】

  • try_files
    (メンテナンスページなどへの切り替え)
  • X-Accel-Redirect
    (大きなファイルをユーザへダウンロードさせる時などはnodeがシングルスレッドなのでnode自身がファイル転送でロックされるのを防ぐため、ファイルを生成したあとはnginxへレスポンスを返させる)

【node.jsのプロセスの管理】
・supervisord
pythonで作られたもの。簡単に利用できる!!
※自分はPerlで利用するときは「daemontools」を使ってるなー

【アプリケーションはexpress3 で開発】
2.x -> 3.x マイグレーション情報

【Redisを利用】
キャッシュなどの保持に使っている

【MongoDBを利用】
データストレージとして使用している。
monkを使っている(MongDBを簡単に叩く時に便利な簡易的なツール)
mongooseではない

【クライアントサイド】
テンプレートエンジン:jade
クライアントJSライブラリ:knockout.js

依存するモジュールも解決できる
Node/AMD (サーバ/クライアント) 共通化モジュールを書く
AMD (Asynchronous Module Definition) は、Javascript のコードをモジュールとして定義して、非同期ないし遅延ロードするための仕組みです。

【Node,ExpressのTips】
●expressのresponseオブジェクトを拡張できる

    app.response.send401 = function (realm) {...};

●initialize function

【route.js】
module.exports = function(myapp) {
    var routes = {
        index: function(req, res, next) {...}
    };
    return routes;
}
【app.js】
var routes = require('./routes')(myapp);
app.get('/', routes.index);

●ガーベジコレクション
node.jsのガーベジコレクション 処理が落ち着いた段階でGCが走る。(アクセスが終わって数秒後に)

●nodeの起動オプションで、任意のタイミングでガーベジコレクションを発生させることが出来る

起動する時に以下のオプションをつける
% node --nouse_idle_notificatio --expose_gc app.jp
実際にGCをかけるときはプログラム上で以下のようにする.
global.gc();

http://devjar.me/post/22886448979/manually-run-gc-in-node-js

【node.jsのメモリ調査ツール】
node-memwatch

【おすすめ本】
「RESTful Webサービス」 オライリーの本
「Node.js入門」


YEOMANの紹介

yeoman公式
yeomanのソース

クライアントサイドのテスト/ビルドツール
railsのような機能がある.

強力なscaffolding
cofeescript sass compass を自動でコンパイルする
構文チェック(jshintを使った構文チェック)
画像最適化
自由なテンプレート
自動リロード(ファイルの変更を監視HTTPサーバの自動うでリロード)grunt.js
パッケージ管理(Twitter Bower)


東京Node学園祭参加レポート

この報告会の内容がいつも大阪Node学園で楽しみ。。
今回の東京Node学園祭は特にホームページを見てもわかるようにすごい豪華なメンツ。
Ustreamのビデオとスライドの資料もあるので、今後見てみようと思う!