2011年8月21日日曜日

Javaらへん読書会に行ってきた。

今日はJavaらへん読書会に行ってきた。

元々はJavaっぽい本について、みんなで持ち寄るっていう感じの趣旨だったので、
一番最近読んだJavaっぽい本ということで『Twitter APIポケットリファレンス』の
紹介をさせてもらおうと参加申し込みした。

参加メンバーさんとのTwitterでのやり取りの中で、Javaという縛りを緩くして、
もう少し幅広くしてもいいのではないか、という意見が出たり、『ジョジョの奇妙な冒険』
はプログラマの嗜みという話題が出たり、気がついたらなぜかジョジョに関するLTをやることになった。

しかもこんなムチャぶりっぷり!!


ちょww 基調講演ってwwww

とはいえ、僕もこういうノリは大好きなので頑張ってこのフリに乗っかってみた。

で、そのLTのスライドはこちら。


おかげさまで大変好評をいただきました。

で、本編では以前書いた書評の内容をベースに『Twitter API ポケットリファレンス』
の紹介をさせてもらいました。

あとは個人的に紹介したい本として、発表とは別に
Being Geek』と『アジャイルサムライ』を持っていった。

他の参加者の皆さんが発表されたり、持ち寄られたりした本は、
@Kuchitama さんがコチラにまとめてくださっている。

個人的には今日の発表を聞いて『レガシーコード改善ガイド』を読んでみたいなと思った。

今日の勉強会は凄く面白かった。

普段、みんながどんな本を読んでいるのか、どんな感想を持っているのかを聞けたし、
タイトルはよく聞くけれど実際に読んだことのない本についての解説や感想を聞けたり、
自分が本を買うにあたって参考となる話がたくさん聞けた。
今日は良い意見交換が出来たのではないかと思う。

どちらかというと勉強会って発表者の話やLTを聞いて、それで終わりっていうパターンが多いけれど、今日は発表者ではない参加者のお話も積極的に聞けたように思う。

機会があれば是非またやりたいと思った。

今日の勉強会の場を作ってくださった皆さん、本当にどうもありがとうございました。

2011年8月7日日曜日

play勉強会で発表してきた。

第1回「Play framework勉強会」IN 関西 で発表しました。




僕自信、あまり勉強が進んでいるわけではないのですが、第一回だし、軽い感じのセッションがあってもいいだろうと思い、play fameworkで作ったアプリをGAEで動かす場合の手順について、お話させていただきました。

スライドはこちらです。

デモで使ったコードはこちら。

デモその1:占いアプリ
https://github.com/daiksy/play-study
デモその2:sienaでDataStoreに対応したアプリ
https://github.com/daiksy/daiksyApp

Scala版だといろいろ上手くいかないパターンもあるようですが、
Java版であればスライドの手順を踏むだけで簡単にGAEで動くはずです。

デモその2のsienaについての詳しい解説は、
こちらのエントリに書いていますのでご参考に。

Play!でsienaを動かしてみた。
http://daiksy.blogspot.com/2011/07/playsiena.html

次の勉強会は東京で開催される計画があるそうです。
もう少し勉強を進めて、次も何か発表ができればいいなと思っています。

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は使わないほうがいいのかも…。

2011年6月11日土曜日

Twitter4jに学ぶ、スピード感

Twitter4jのコードリーディングに行ってきた。
(http://atnd.org/events/14143)

なんと、Twitter4jの作者である山本さんが来られるというこの企画。
せっかくなので、勉強会の前にモクモク会の土曜日Ver.も開催。
(http://atnd.org/events/16541)

すると、なんと山本さんはモクモク会にもいらしてくださった。
本当にありがとうございました。

ちょっとしたご縁があって、わたしもLTをさせてもらった。

そのスライドはこちら。

朝のモクモク会から懇親会まで、今日はここに書ききれないほどのいろいろな面白いお話をたくさん聞かせていただいたのだが、その中で最も印象に残ったエピソードをご紹介しよう。

ひと通り皆さんの発表が終わり、みんなでモクモクとTwitter4jのコードを読んで分からないことがあれば山本さんに聞こう、という流れになった。

そのなかで、こんなことがあった。



で、その現象を確認した山本さん。



ま、まさかのご本人によるバグフィクス!!!

そして数分後。



早い!!!

公式サイトみたら、最新版でもう修正されてる!!!!

あとで懇親会でこのやりとりについてのお話を伺うと、やはり「Webの世界はスピード感が一番大事。誰よりも先にやるということが重要」とのこと。

これはものすごくエキサイティングな体験だった。

なかなか経験できない、本当に貴重な時間をすごさせていただき、今日の勉強会に関わったすべての皆さんに感謝したい。

ありがとうございました。

2011年6月5日日曜日

歌川国芳- 萌えは時代を超え、そして僕は変態 -

大阪市立美術館に歌川国芳展を見に行ってきた。

歌川国芳といえば、

こんな絵や

こんな絵が有名である。

それになんといっても、浮世絵といえば武者絵と役者絵が花形なのだが、今回、僕はそういった「国芳らしい絵」よりも、少し違ったポイントでグッときた。

僕がグッときたのは、美人画である。

「美人」という定義は時代と共に変化する。江戸時代の美人画を見て、萌えることなどあり得ないだろうとタカをくくっていたのだが、僕はこの絵にやられたのである。


なんということのない、どこにでもある美人画である。
現代の萌え絵とは似ても似つかぬ、教科書にでも載っていそうな絵。

僕はこの絵の、足の部分に注目してみた。

着物越しに浮かび上がる足のライン。なんとなくセクシーではないだろうか。
通常、着物を着ている女性の足の形が見えることはない。しかしこの絵では、描かれている女性が座っているため、太もものラインが着物越しに見えてしまっているのだ。

僕は雷に打たれたような衝撃を受けた。

美人画鑑賞の真髄は、フェティシズムにあるのだ!!

そう思って他の絵を見てみると、着物の柄や布の流れが実に克明に描写されており、セクシーなのだ!


足元のチラリズム。


うーむ。実に艶めかしい……。

で、極めつけは次の絵。


お魚を咥えた猫をつかまえてたしなめる女性。
この絵のポイントは、左上に描かれた勇ましい武者絵である。

彼の名は、源頼政。鵺(ぬえ)退治で有名な武将である。

そう! 女性が猫をたしなめる状況を、頼政の鵺(ぬえ)退治に見立てているのだ!!

し…し…シチュエーション萌えキターーーーーー!!!!

なんという高度な表現技法であろうか……。国芳先輩、パネェっす!!!! オレ、一生付いていきます!!!!

今日の結論:僕はやっぱり変態