ページ

2015年3月30日月曜日

Play2で簡単WebSocket

今回はPlay FrameworkでWebSocketに挑戦します。今回準備するのは以下の二つ。
  • Play Framework 2.3
  • jQuery 2.1.3
Play2は以前使ったのでこちらを参照ください。
jQueryは公式サイトからダウンロードしましょう。ダウンロードしたファイルはプロジェクト配下の \public\javascripts にコピーします。

さて今回はできるだけシンプルなサンプルを心がけました。特に何かの役に立つものではないですが、仕組みの理解を優先したつもりです(が分かりにくかったらゴメンなさい・・・)。

まずはアクセス方法から。

--------------------------------------------------
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                           controllers.Application.index()
GET     /message                    controllers.Application.message()

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)
--------------------------------------------------

/messageを追加しました。これで"ws://localhost:9000/message"でWebSocket接続が可能になります。(localhostの部分は適当に読み替えてください。)

次にindex.scala.htmlです。

--------------------------------------------------
@(message: String)

@main("WebSocket Sample") {

    <p>@message</p>
    <div id="text"></div>
    <p></p>
    <input type="button" value="Start" onClick="start()">
    <input type="button" value="Stop" onClick="stop()"><p>
    <form name="form">
    <input type="text" name="message" value="サンプルテキスト">
    <input type="button" value="Send" onClick="send()">
    </form>

}
--------------------------------------------------

今回はStartボタンでWebSocket接続を行い、Sendボタンでテキストボックスの文字列をサーバに送信、StopボタンでWebSocketを切断するといった操作を実現します。

--------------------------------------------------
var connection = null;

function start() {

$("#text").text("");
connection = new WebSocket("ws://localhost:9000/message");
connection.onopen = function() {
log("connected.");
}
connection.onerror = function(event) {
log("error.");
}
connection.onclose = function(event) {
log("closed.");
}
connection.onmessage = function(event) {
log(event.data);
}
}

function stop() {
connection.close();
}

function send() {
connection.send(document.form.message.value);
}

function log(message) {
$("#text").append(message + "<br>");
}
--------------------------------------------------

ここで・・・まだURLをベタ書きしてます・・・。うまく置き換えれるはずなのですが、まだちゃんとやってないです。
ちなみにログ的に動作状況を確認するために文字列はボタンの上部分のdivタグ内にテキストを追加していってます。
最後はコントローラ部分。ここがPlay2でWebSocketするときの肝の部分ですね。

--------------------------------------------------
package controllers;

import play.Logger;
import play.libs.F.Callback;
import play.mvc.Controller;
import play.mvc.Result;
import play.mvc.WebSocket;
import views.html.index;

public class Application extends Controller {

    public static Result index() {
        return ok(index.render("WebSocket Sample."));
    }

    public static WebSocket message() {
return new WebSocket() {
      @Override
    public void onReady(final WebSocket.In in, final WebSocket.Out out) {
      Logger.debug("connected.");
      in.onMessage(new Connection(out));
    }
  };
    }

    public static class Connection implements Callback {

     private WebSocket.Out out;

     public Connection(WebSocket.Out out) {
       this.out = out;
     }

     @Override
     public void invoke(String event) {
    Logger.debug(event);
    for (int i=0; i<5; i++) {
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      out.write(event);
    }
  }
    }
}
--------------------------------------------------

index()で最初の画面を表示します。まー特に変わったところはないです。
message()が問題のWebSocketの接続を受けるメソッドです。index()と異なりWebSocketを返します。このときにWebSocket.Inにその後のメッセージを受信するためのコールバックオブジェクトを登録し、返信用のWebSocket.Outオブジェクトを保存しておきます。
コールバックオブジェクトではメッセージ受信用のハンドラをオーバーライドします。このサンプルでは受け取った文字列を1秒ごとに5回クライアントに返送しています。この部分を実際の処理に書き換えるといろいろ出来そうですね。

あとはもう少しコードをキレイにしたり切断時の処理のことを考えておけばそれなりに使えそうです。いやーそれにしても世の中便利になったもんだ。

2015年3月29日日曜日

なぜか突然オチェーアノ

今日はようたのサッカーもななのテニスもお休みということで、奥さんが数日前から急きょ企てミラコスタにあるオチェーアノでランチすることになりました。まー、春休みということでたまにはいいかな。
この日は天気予報もあまりよろしくなかったせいか道もすいすい。TDL付近に来ても特に渋滞なくスムーズにミラコスタまでたどり着きました!

ただ、さすがに直前に予約しようとしたのでランチ時間帯よりちょっと前の11:30の予約のおかげか受付はガラガラです。ちょっと早く着いたのでソファでゆっくり待ちました~。


ただ、ここはどちらかというと子供向けのシェフミッキーと違いメニューが超偏食の私に不向き・・・やっぱりこんな彩ない感じになっちゃいました。


ちなみにシーの入り口付近の桜はこんな感じでキレイに咲いてました!


そしてななはシェフミッキー近くのチックタック・ダイナーでニッコリ。


さて次はいつになるかね~。

2015年3月22日日曜日

六年生の追い出し会

今日はいよいよ六年生が卒部になるということで、毎年恒例の各学年vs六年生のゲーム会が行われました。
いきなりの試合結果となりますが、我が四年生は先制点こそ許してしまいますが、その後逆転して2-1で勝利しました~。
まー、六年生も年下のチーム相手になかなか恥ずかしくて本気出せなかったのかもしれませんね。

ただ、ゲーム運びはここ最近にないくらい良かったです。
ボランチの選手も試合開始直後こそ持ちすぎなところもありましたが、時間が経つにつれて球離れが良くなってきて、そのおかげで攻撃にリズムが生まれたような気がします。
そのボールの受け手になったのはトップ下のようたです。六年生が厳しくマークに付かなかったおかげもあり、ほとんどの攻撃の起点となり左右にスルーパスを通してチャンスを量産していました。 あとはそれほどプレッシャーが厳しくなかったのでもう少し自分で持っていってもよかったかなと思ったりはします。

前の選手もいつもよりボールをさばく意識があり、ようたのあがりをしっかり待ってパスを落としたり、さらに後ろの選手を使ったりと非常に良いプレーでした。サイドの選手もようたのスルーパスに反応してしっかりとボールに追いつき、いくつかのクロスボールをしっかりと上げていました。

ディフェンダーはキャプテン不在のところをしっかりといつものように弾き返して前線の攻撃を支え、途中から出てきた選手はループ気味のミドルシュートを決めるなど、連動した良いプレーがいくつも見られました。

あとは、ラストパスの精度だったりシュートの精度だったりですね。今日のようにテンポよくパスをつなぐようなゲーム運びが今後も継続でき、ラストの精度も上げることができれば、強豪相手にも一泡吹かせられそうな気がします。

さー、良い締め方で新学年が楽しみになってきましたね。みんなガンバレ!

2015年3月21日土曜日

四年生の締めは親子サッカー

明日はいよいよ六年生の負い出し会のため、今日はLL(3、4年生)最後の練習となりました。そこで監督さんの粋な計らいで今日は親子サッカーちっくなゲーム会が開催されました。

チーム編成は4年2チーム、3年チーム、コーチチーム、父チーム、母チームの計6チームで子供たちとサッカーを楽しみました。ただ父チームとは言っても人数がさほどいないので、お父さんコーチたちも混ざってもらってとなりました。

しかし普段体育館でのフットサルしかしてないから土のグランドは難しいですね。(ってのっけから言い訳
そしてようたにだけは点を取られないようにと思ってやってたのですが、広いグランドでなかなか動き回れず・・・ って狭い小学校のグランドでそんなこと言ってるようじゃもう引退近いですわ。
で、ちと油断した隙にようたにシュートを打たれて失点・・・うーん残念。

まーでもたまにはこういうのも楽しいですね。ただもっと子供たちに魅せれると良かったのですが、今度また機会があったらもう少し練習してサッカーの楽しさを共有できるといいかなと思ったりしました。

では明日の追い出し会での四年生の頑張りに期待しましょう!

2015年3月15日日曜日

四年生の振り返り

今年度はようたもいろんな経験をした一年でした。
昨年度は多くの試合を一学年上のチームで出させてもらい、いろいろ経験を積ませてもらいましたが、今年はその経験を持って自分の学年に専念し、多くの勝利を得た一年でした。
以下は出場した大会一覧です。
  • 第41回 横浜市春季少年サッカー大会(ベスト16)
  • 2014年度 港南区リーグ(★優勝)
  • 第47回 J-SPORTS FC招待大会(予選リーグ突破、決勝トーナメント悪天候で中止)
  • 第20回 ヨコハマメトロポリタンカップ少年サッカー大会(準優勝)
  • 第8回 向田カップ(★優勝)
  • 第46回 横浜国際チビッ子サッカー大会(ベスト16)
  • 第21回 座架依CUP(★優勝)
  • 第41回 神奈川県少年サッカー選手権大会(ブロックトーナメント3回戦敗退)
  • 第30回 港南区選手権(★優勝)
  • 南毛利杯(高学年大会に予選のみ参加)
  • 第27回 アルファジュニアカップ(予選1位通過、決勝トーナメント悪天候で延期)
  • 富岡SC40周年記念大会(★優勝)
私が記録してただけでも大小合わせてこれだけの大会に出場しています。
(ようたが病欠したりとかもあったのでチームとしてはもう少し出てたかな。)

こういった大会で優勝5回と言うのは見事ですね。ただ個人的には、優勝した大会にも劣らない経験をしたのはマリノスプライマリーやリトルジャンボといった神奈川県上位のチームと試合が出来たことかなと思っています。試合自体はどちらも負けてしまいましたが、あわやというシーンが作り出せましたし、子供たちも自信になったと思います。

また年明けの招待試合でようたがインフルエンザにより不在になったときには、何人かの父兄の方や選手の子に「ようたがいないと別のチームになる。」と言ってもらえてたのは非常に嬉しいことでした。元気よく声がけするタイプではありませんが、プレー面でだんだんとチームの支柱的存在になれているのかなと思うと成長を感じます。

あと、ボカスクールではちょうど一年前のセレクションでまさかのSELECTIVO合格。しかも五、六年生のSELECTIVOとの半年間の練習は非常に良い経験になりました。
元々フィジカルに課題があったところで自分より大きく上手い選手ばかり・・・、そんなこんなで最初の三か月ほどは戸惑うばかり・・・。でもその経験のおかげでそれなりに少しはボールキープ力もあがってきたかなと思います。やっぱり中盤の選手はタメが作れないとね。
ただ、10月以降はスクールの体制も変わり、人数も増え、半年間はADVANCEでの練習となりました。それでもやはり五、六年生との練習は良い経験になったと思います。

さあ、もうすぐ五年生になります。公式戦自体は減ってしまうようですが、四年生でそれなりの成績を収めているので練習試合が少しでも増えてくれると嬉しいかなと思います。(この試合経験こそがチームに入った一番の理由ですしね。)
五年生からは11人制が中心となるらしいので、またフォーメーションがどうなることか。ただどこのポジションで試合に出ても高いパフォーマンスが出せるよう練習に取り組みましょう。

またボカでは満を持して同学年のSELECTIVO(この春からはPrimeraと呼ぶらしい)になります。この一年間、五、六年生と練習していた成果を見せたいところですね。
ただ、まわりを引っ張っていくようにはなかなかなれないんだろうな~。

¡Vamos, Yota!

2015年3月14日土曜日

富岡SC40周年記念大会優勝

今日は富岡SCさんの記念大会に参加してきました。この大会はどうやら4チーム総当たりで予選を行い、予選の順位3、4位で3位決定戦、1、2位で優勝を決める方式のようです。予選は15分1本、決勝と三位決定戦は15分前後半で戦うみたいですね。
しかも今回は久々の8人制。8人制だとようたの守備の負担が増えるかな?

さて初戦はジュニオールとです。先日の練習試合ではいい勝負をしましたが、噂によると相手はベストメンバーじゃなかったとか?でもこの練習試合の後にジュニオールは冬の県大会で3位になった実力を持つので今日も戦い甲斐がありますね。

ようたはいつものようにトップ下で先発です。そしてどうもジュニオールは今日もベストメンバーじゃなさそうですね。ちょっと残念。
試合は開始早々に美晴が先制します。左サイドの選手がうまくこぼれ球に合わせましたね。キレイなゴールでした。
その後もペースを握り続けますが追加点は取れず、そのまま試合終了で初戦をものにしました。

美晴SC 1-0 ジュニオールSC


第二戦は主催の富岡SCとです。富岡にはようたが昨年の9月までマリノスの木曜日クラスにいたころ一緒に練習していた選手がいます。さてお友達対決やいかに。

試合は美晴ペースですかね。攻める時間が多いような気がします。
そして試合も中盤に差し掛かったころ、相手のゴールキックがようたのところに飛んできます。それをダイレクトでエースフォワードにパス。そのまま抜け出して先制点です。

そのあともエースが抜け出して追加点。予選二連勝で決勝進出が決まりました。

美晴SC 2-0 富岡SC


第三戦は鶴が台、茅ケ崎市のチームみたいです。
この試合、ようたはお休みです。とりあえず決勝に備えてということで。
と思っていたら、試合中盤あたりで出番登場。両チームとも無得点で進んでいたので、このまま無失点で切り抜ける作戦でしょうか、ポジションはボランチに入りました。
そして、中盤でのボール奪取が増えてきて何回か良い攻撃がありましたが、なかなか得点奪えず、そのまま試合終了となりました。

美晴SC 0-0 鶴が台スパイダーズSC


これで予選終了。2勝1分で予選1位となりました。

そして決勝戦の相手は予選最終戦で対戦した鶴が台。この試合ではようたを含めて3試合目に休んだ選手も先発して真っ向勝負ですね。

試合がはじまり、先制点はようたです。ゴールキーパーからのボールが相手ディフェンダーの頭を越えたところを見逃さず、すかさず抜け出します。



そのままゴールキーパーの直前でちょこんと浮かしたシュートでゴールをゲットします。



本人「ちょっとキーパーに当たっちゃった。」と言ってました。

そして試合中盤に得たコーナーキック。この日の左サイドのコーナーキックは別の選手に任せます。そしてそのコーナーキックをようたが落としてエースが決め追加点。前半は2-0で折り返します。

後半早々に1点返されてしまいましたが、その後に得たコーナーキック。こちらのサイドはようたの出番です。丁寧なボールがゴール前に飛んでいきます。


このボールにスルスルとゴール前に入ってきた選手が頭で合わせて追加点です。写真で見ると結構難しい高さですよね。うまく合わせています。



それにしてもこの選手は本当にヘディングがうまいです。今年はだいぶコーナーキックからの得点が多くなりました。 高学年になったらサインプレーとかも覚えられるといいのかな?

そして試合終盤、最後のダメ押し点もようたのアシストから生まれます。インサイドで優しいスルーパスにエースが抜け出します。写真を見ても分かりますが、うまく噛み合ってますね。


最後はキーパーもかわして丁寧にインサイドでゴールに流し込みます。このあたりはさすがです。



試合はこのまま終了し、ようたは全得点に絡んで見事優勝をゲットしました。

美晴SC 4-1 鶴が台スパイダーズSC ようた1得点


さて、四年生最後の試合は優勝で締めくくりました。また最後の大会でMVPに選らんでもらえたので、さらにいい締めくくりになりましたね。(まー、順番みたいなものですが。


四年生もあと半月ですが、しっかり練習して新学年に備えましょう!

3/15追記:
そういえば最近ようたが先制点取った試合では負けたことないかも。いいジンクスになるといいですね~。