2011年7月17日日曜日

コラムニストとして情報発信するということ - OSC京都 2011 -

7月15日、16日の二日間にわたって開催された、オープンソースカンファレンス 2011 kansai@kyotoにエンジニアライフのメンバーとして参加してきた。

前回の神戸でのOSCの懇親会で、あるスタッフさんとお話ししていた際にご提案いただき、エンジニアライフの編集部の快諾も得られ、初参加の運びとなった。

Facebook上で仲の良いコラムニストさんたちと意見交換をしながら企画を練り、準備を重ね、ブースセッションを持つことになった。

イベント前日には紹介記事まで書いていただき、本番当日を迎える。


ブースにはコラムニスト募集のチラシとコラムニストカードを置き、いろいろな方とお話させていただいた。ただ、他のオープンソースコミュニティと比べるとデモなどブースならではで紹介できるものがなく、「情報発信コミュニティ」としてのブース出展の難しさも感じた。
初日にブースに遊びに来てくださった、まっちゃだいふくさんも、以前セキュリティ勉強会のブースを出展したものの、やはり同様の難しさを感じたと仰っていた。
次回はこのあたりをもう少し上手くやる方法を考えてみたいと思う。

一方、コラムニストのはがねのつるぎさんも、エンジニアライフメンバーとしての参加と並行して個人出展もされており、こちらは自作のJQueryプラグインのデモが好評だった。


途中でフィンランドの方がブースに来られ、「英語でコラム書いてもいいですか?」と聞かれたものの、一介のコラムニストにすぎない我々では返答に困る場面などもあった。
(あの後、編集者に確認したら、OKだとのことでした。もしこのブログをご覧になってらしたら、是非お申し込みください)

そのような感じでブースを出展しつつ、二日目にいよいよセッションである。

10:00より、はがねのつるぎさんによるセッション「JQueryプラグインの『使い方』ではなく『作り方』」は朝一のセッションにも関わらず大盛況だった。


この会場がほぼ満席になるほど!!

セッションの録画はこちら。



そして13:00より、エンジニアライフによるLTセッションである。
「コラムニストとして情報発信するということ」というテーマで7名のコラムニストによるライトニングトークを行った。


ちなみに僕のセッションは29:00ごろから。

僕のスライドはこちら。

それほど大きくない会場だったということもあったが、お客さんが会場に入りきらず廊下に立ち見が出るほどの盛況だった。

その後の懇親会でも「見たかった」というお言葉をいろいろな方からいただき、自分の予想以上に注目度の高いセッションだったようだ。

個人的な感想としては、今回の参加は初めてということもあり、少し内側に向きすぎていたかな、という気がしている。
どちらかというと、文化祭的なノリで参加してしまっていたんじゃないかな、という反省点がある。

次回も参加を許されるなら、もう少し今度は外に向いて、来場者を意識しつつ幅広くリーチしていけるような関わり方をしたいなと思う。

まぁ、このようにいろいろ個人的な反省点はあるものの、今回の参加は大成功だったと評価しても良いと思う。

スタッフのみなさん、コラムニストのみなさん、編集部のみなさん、本当にありがとうございました。次回もよろしくお願いします。

2011年7月2日土曜日

Play!でsienaを動かしてみた。

※今回の実行環境
Play! 1.2.1
Play!のGAEモジュール 1.4
Play!のsienaモジュール 1.5
これらの環境がインストール済みであること。

さてさて。今回はPlay! でsienaを使ってdatastoreを使ってみよう。
この辺りがクリアできれば、GAEでBigTableが使えるようになるはずだ。

と、いうことでまずはローカル環境で実験。

application.confに以下の記述を追加する。

# The siena module
module.siena=${play.path}/modules/siena-1.5

これで準備完了!

app/models配下に、Comment.javaクラスを作成する。
package models;

import siena.*;

@Table("Comment")
public class Comment extends Model {

  @Id(Generator.AUTO_INCREMENT)
  public Long id;

  @Column("Comment_Value")
  @Max(200) @NotNull
  public String commentValue;

  public static Query all() {
    return Model.all(Comment.class);
  }

}

@Table、@Column、@Maxといったアノテーションは、BigTableに対しての定義になるみたい。
@Idアノテーションがついたフィールドがキーになるようだ。Id値は自動採番。

Model クラスを継承することで、sienaとしてinsert, update, deleteといったメソッドが使えるようになる。

これでModelクラスの定義が完了。
基本的にはこいつに対して操作してやることで、datastoreが触れるはず。

さっそくテストを書いてみよう。

test/ 配下にあるBasicTest.javaにテストを追記。
import org.junit.*;
import java.util.*;
import play.test.*;
import models.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

    @Test
    public void sienaTest() {
      Comment cm = new Comment();
      cm.commentValue = "テスト";
      cm.insert();

      //insertが成功したかのテスト      
      List<comment> getList = Comment.all().fetch();
      assertEquals(getList.get(0).commentValue,"テスト");

      //後片付けにデータを削除(ついでにデータ更新のテストも兼ねる)
      for(Comment deleteKeys :getList) {
        Comment delcm = new Comment();

        //データ更新のテスト
        delcm.id = deleteKeys.id;
        delcm.commentValue = "更新されてる?";
        delcm.update();
        List<comment> afterUpdateList = Comment.all().filter("id",delcm.id).fetch();
        assertEquals(afterUpdateList.get(0).commentValue,"更新されてる?");

        delcm.delete();
      }

      //削除ができていれば、fetch結果は0件のはず
      List<comment> afterDeleteList = Comment.all().fetch();
      assertEquals(afterDeleteList.size(),0);
    }

}

さきほど作ったCommentクラスのインスタンスを生成し、commentValueに値を設定。
insertメソッドを呼び出す。

これで、datastoreに値が保存されたはず。

getListにデータをfetchし、確認してみる。

あとは後片付けでデータ削除。ついでにupdateとdeleteのテストもやっておく。

これでテストを実行!!




上手く行ったようだ。

playで作るGAE用のwebアプリをscalaで書いたら、テストが動かないでござる。ニンニン。の巻

※今回の実行環境
Play! 1.2.1
Play!のGAEモジュール 1.4
Play!のscalaモジュール 0.9

先日Play frameworkを使ってGAEで動かすための実験アプリを作った。

コレ→ http://play-study.appspot.com/

まずはGAEで動かすぞ! ってことがテーマだったので、まだテストを書いていない。
そこで、次のステップとしてPlay frameworkでTDDを実践するため、まずはファーストステップとしてこのアプリのテストを書いてみた。

で、颯爽とテストを書き、"play test"コマンドを華麗に叩いたのち、"http://localhost:9000@tests"にブラウザでアクセスして大胆にテストを実行しようとしたところ…。


な、なんか出たーーーー!!?

前日にPlayでのテストを学ぶため、今回のアプリとは別のアプリを新規作成して実験していた際には普通にテストが動いていたので、いったい何が原因なのか…。

と、いうわけで、アプリを新規作成して、実験してみた。

まずは"play new [Application name] with --scala"と繊細にコマンドを叩き、アプリの新規作成。

この段階で"play test"でテストを動かしてみる。

……。うん。動いた。

続いて、テストを書いてみる。

……。うん。動いた。

で、テストが通るようにロジックを実装。

……。うん。動く。

viewを実装し、占いアプリの全体像が仕上がった。

テスト実行!!


…動くやないの。

ここで、GAEのモジュールを適用していないことに気づく。

dependencies.ymlに
  -play -> gae 1.4
という記述を追記し、"play dependencies --sync"を実行!!

で、テスト動かす。


う、動かなくなったーーーーー!!!!

続いて、scalaモジュールを入れずにJavaで全部書いてGAEモジュールを入れたところ、正常に動いた。

結論として、playでscalaとGAEのモジュールを混在させるとどうも上手くいかないみたい。理由までは調べてないけど。

※:アプリ作成時に、"play new [Application name]"でJava用の新規作成を行ったのち、GAEとscalaのモジュールを追加すると一応動いた。
このパターンで二種類ほどアプリをつくってみたけれど、片方はやっぱり同様のエラーで動かなくなっちゃったので、GAE用のアプリでテストを動かしたければ、まだscalaは使わないほうがいいのかも…。