2014年6月25日水曜日

【DJ】2014.06.27(fri) ANIQUAD at 大宮444quad #ANIQUAD

6/27(金)22:00~ 大宮444quadにてDJします。

ANIQUAD
http://tweetvite.com/event/aniquad


■DATE
2014. 6. 27 (Fri)  22 : 00~5 : 00

■DOOR/ADVANCE
¥2,500/1D
¥2,000/1D (twvt GuestList "Yes")

■PLACE
444quad (Saitama Omiya)

■ACT
[SPECIAL GUEST DJ's]
DJ WILDPARTY
DJ 濱

[GUEST DJ's]
KoC_kun
HokBoy
Fuka
お父ちゃん。

[ANIQUAD DJ's]
Plaque Control
DJ ざんねん

[Guest VJ]
Routes



アニソン中心のオールジャンルです。
今回2度目の出演ですが、前回は初大宮ということで客層も雰囲気もとても新鮮だった記憶があります。

古越やお父ちゃんなど合ロリメンバーもいるので楽しみ。
状況みてremixも原曲もアニソンじゃないのも色々かけてこうと思います。

個人的には今とてもハンターハンター初期アニメの曲をかけたい。

お近くの方は是非!

2014年6月24日火曜日

気象庁のオープンデータを取得する(購読確認)

気象庁のオープンデータについて調査してこいといわれ
簡単に取得するまでの流れとJavaでのSubscriber構築についてメモする

Javaのサンプルソース全然ないんだよね…


■気象庁のサイト
気象庁防災情報XMLフォーマット 情報提供ページ


■手順
  1. 上記サイトにある申請フォームを使って登録申請
  2. 気象庁からAlert Hub経由で”購読確認”がGETリクエストで送られてくる
  3. 予め構築したSubscriverでリクエストを返す
  4. 登録終了後、同Subscriverに随時更新フィード(xml)がPOSTリクエストで送られてくる
  5. 更新フィードから欲しい情報を取得する
大まかにいうとこんな感じ。
PubSubHubbubっていう、フィードをリアルタイムで配信(プッシュ)するプロトコルを使っているシステム。

なんにせよSubscriver(購読側)を構築してサーバにあげてリクエストを受けられる状態にしておかないといけないわけなんだけど、”購読確認”と”更新フィード受信”っていう全然違う機能を同じURLで受け付けなきゃいけないのがちょっと厄介。


■実装
まずGETとPOSTの受け口を作る。そんで購読確認を返せるようにするんだけど、更新フィード受信後の処理はおいときます。

rubyなら
http://www.mk-mode.com/octopress/2013/11/20/rails-implement-pubsubhubbub-subscriber/

PHPなら
http://washitake.com/blog/archives/117

この辺りのサンプルが分かり易い。

しかしJavaはシンプルなやつがなくて。一応サンプルあるんだけど古いし分かりづらい。。
てことで作ってみたやつ↓

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Subscriber")
public class Subscriber extends HttpServlet {

 enum MessageStatus {
  ERROR,
  OK
 };

 public Subscriber() {
  super();
 }

 /**
  * 購読確認
  * GETリクエストを取得し、ステータスコード200とhub.challengeを返す
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  String hubmode = null, hubchallenge = null;
  MessageStatus stsMessage = MessageStatus.ERROR;

  if (request != null) {
   if (request.getParameter("hub.mode") != null) {
    hubmode = request.getParameter("hub.mode");
   }
   if (request.getParameter("hub.challenge") != null) {
    hubchallenge = request.getParameter("hub.challenge");
   }

   if (hubmode != null && hubchallenge != null) {
    if (hubmode.equals("subscribe") || hubmode.equals("unsubscribe")) {
     stsMessage = MessageStatus.OK;
    }
   }
  }

  // ヘッダーのContent-Typeをtext/plainに設定
  response.setHeader("Content-Type", "text/plain");

  switch (stsMessage) {
  case OK:
   // OKの場合ステータスコード200と、hubchallengeの値をそのまま返す
   response.setStatus(HttpServletResponse.SC_OK);
   ServletOutputStream sos = response.getOutputStream();
   sos.print(hubchallenge);
   sos.close();
   break;
  default:
   response.sendError(HttpServletResponse.SC_NOT_FOUND, "404 not found");
   break;
  }

 }

 /**
  * 更新フィード受信
  * POSTリクエストで更新フィードからデータを取得する
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  // 取得xml毎の処理
 }

}

要するに肝は
GET リクエスト時、HEADER の Content-Type に text/plain を設定し、GET リクエスト受信時に取得した「チャレンジコード(hub.challenge の値)」をそのまま、ステータスコード 200 とともに返却しないといけない。(チャレンジコードの末尾に改行があってはならない)
ってところです。

ちなみにGETリクエストのパラメータは以下。verify_token は今回無視。
hub.mode … subscribe(購読登録) か unsubscribe(登録解除)
hub.topic … フィードの URL
hub.challenge … Hub 側指定の認証用のランダムな文字列
hub.verify_token … 購読者側指定の認証用のランダムな文字列(但し、Hub 登録時に指定した場合のみ)
hub.lease_seconds … Hub 再登録までの時間(但し、Hub 登録時に指定した場合のみ。上記の例では使用していない)
■テスト
とりあえず購読確認のテストをしてみる。
購読確認が問題なくできれば、あとはどんどん更新フィードを送ってくれる。

テストはGoogle がテスト用に公開している Hub を利用する。
https://pubsubhubbub.appspot.com/

ここのSubscribeページでフォームの内容を入れてDo it!ボタン押す
Callback URL:用意した Subscriber の URL を入力する。
Topic URL:フィード発行側の URL を入力する。
Verify Type:は、デフォルトのまま。
Mode:Subscribeを選択する。
Verify Token:認証用文字列を入力する。(利用したい場合のみ)
HMAC secret:デフォルト(空白)のまま。
Lease seconds:デフォルト(空白)のまま。(指定すれば、購読意思確認(Hub から GET リクエストが届く)間隔を変更できる。デフォルトは「5日」)
Topic URLは、適当にブログなんかで更新フィード作ってatom.xmlのURLを貼るのが楽。

次に、同ページの【Subscriber Diagnostics】のほうにURLを入力してGet infoボタンを押す

すると購読確認の結果が表示される。
statusverifiedならOK

あとは任意にPOSTのほうの実装をやればよいと

2014年6月18日水曜日

【制作】H.K.WORKS - UNIKE-5th Anniv. DJset

だいぶ経ってしまいましたが、、
UNIKE - 5th Anniversary - にて、 H.K.WORKS (HokBoy & KoC_kun) での再現DJmixを公開しました。




~ S e t L i s t ~

01. Fugenn & The White Elephants - mukougawa Remix
02. Annabel - スモルワールドロップ (ujaku Remix)
03. 北白川たまこ(洲崎綾) - ねぐせ (vvotaronidone garage)
04. 安藤裕子 - ニラカイナリィリヒ (fazerock 2013 remix)
05. Miii - The Automatic Scatter Machine
06. Terror Danjah - Upton Lane
07. Kettel - Afwezig
08. 秦基博 - rain (remix) by itsu
09. eufonius - メグメル (C∆ЯT∆LET Remix)
10. imoutoid - PART1 (Love of Digital Remix)
11. rei harakami - Own Cake
12. sHimaU - LxCxDxT (Shako-Pani Remix)
13. FaltyDL - Danger
14. Reliq - rushhour
15. ふんわりちゃん - M/M
16. Alizzz × Ray - lull ~そして僕らは~ (TANUKI Mashup)
17. Ray - ebb and flow (Nagi no Asukara Lull U Tonite Mashup) by Oblongar
18. ROCKY CHACK - Perfect World(H.K.WORKS Remix)
19. Lone - Lizard King
20. Wisp - Teddy Oggie
21. kaihatz - ptpia
22. Geskia! - Headroom Mindphone
23. Erast - Geogianintokyo
24. JM - Act Ⅰ - Kefka Palazzo
25. HImuro - Future in the Past
26. The Wedding Mistakes - Dramatic Behavior


”26.The Wedding Mistakes - Dramatic Behavior” は現場ではかけれませんでしたが、今回のmixでは最後に入ってます。この曲もそうですが、みーきゅんの関わってる曲はエモくてIDM寄りなものも多くてとても好きです。

僕の好きな感じと古越の好きな感じがごっちゃに、エモさだけでなんとかした感じ…
和洋折衷、温故知新です。

個人的に気に入ってるのは、
19. Lone - Lizard King
20. Wisp - Teddy Oggie
21. kaihatz - ptpia
22. Geskia! - Headroom Mindphone
23. Erast - Geogianintokyo
この辺。
LoneのLizard Kingはこの前Bleepから出た10周年コンピ収録の曲。箱鳴りやばくてかけてて最高に気持ちよかった。



そんなもんで次 H.K.WORKS の活動はあるかどうか分かりませんけど、
よかったらMIX聴いてみて下さい。

2014年6月13日金曜日

【お知らせ】合法ロリパーティー今年はやりません

合法ロリパーティー今年はやりません!!!!!

Stringのequalsメソッド

Stringのequalsメソッド、初め何も考えてないときはこんな感じで書いてた
String str = testDto.getName();

if (str.equals("test")) {
 //処理
}
これだとstrがnullだった場合エラーになるので、if文の前にnullチェックしないといけない。

でもこうすればチェックする必要がない↓
String str = testDto.getName();

if ("test".equals(str)) {
 //処理
}
もしstrがnullだとしてもエラーにならずfalseで返ってくる。

他人のソース見てて、定数先に書くこと多いなーと思ってたらちゃんと理由があったのね…
こうゆう常識的だけど知らねーってことけっこうあると思うので、 規約とか作法の本ちゃんと読む。。

2014年6月12日木曜日

staticメソッドへのDI

DIのことよく分かってないままにSpringで実装してたのでつまづいた。のでメモ。



ちなみにDIについてはマネージャに教えて頂いたこのページが分かり易かった。
>>要するに DI って何なのという話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く


つまづいたのはstaticメソッドでDIしたフィールドを使おうとしたとき。
改修しなきゃいけないとこがstaticメソッド内だったんでどうしてもそん中でDIしたDaoを使いたかったんだけど、@Autowiredはstaticフィールドには使えない。。

てことで、staticフィールドに直接DIしないでsetterに@Autowiredをつける。
setter経由でDI。
なんとなくこんな感じ。

public class StaticTest {
 static TestDao testDao;

 @Autowired
 public void setTestDao(TestDao testDao) {
     StaticTest.testDao = testDao;
 }

 static String getTestData(int id) {
  return testDao.selectDataById(id);
 }
}

でもこれだと本番環境でのテストでうまくいかず…多分大丈夫な気がするんだが…
でやり方変えて直接xmlから定義情報とってくる感じでセット。
一応これでうまくはいった。。

public class StaticTest {
 static ApplicationContext appCtx;
 static TestDao testDao;

 static {
  initializeStaticDao();
 }

 private static void initializeStaticDao() {
  appCtx = new ClassPathXmlApplicationContext(new String[] { "ApplicationContext.xml" });
  testDao = (TestDao) appCtx.getBean("TestDao");
 }

 static String getTestData(int id) {
  return testDao.selectDataById(id);
 }
}

2014年6月10日火曜日

Xi-lium vol.40 Anniversary Special かけた曲

Xi-lium vol.40 Anniversary Special

01. 種ともこ - MESSAGE #9 (ガサラキ OP)

02. midori - はじまりの朝に光あれ。 (シャングリ・ラ ED)

03. Kalafina - oblivious (空の境界 第一章 俯瞰風景 ED)

04. Buzy - Venus Say (ふたつのスピカ OP)

05. KOKIA - たった1つの想い (GUNSLINGER GIRL -IL TEATRINO- OP)

06. KOTOKO - BLAZE (灼眼のシャナII -Second- OP)

07. AZUMA HITOMI - ハリネズミ (フラクタル OP)

08. ROCKY CHACK - リトルグッバイ (ゼーガペイン ED)

09. See-Saw - Obsession (.hack//SIGN OP)

10. ROMANTIC MODE - DREAMS (機動新世紀ガンダムX OP)

11. Annabel - Light of Dawn (戦う司書 The Book of Bantorra ED)

12. YUI - again (鋼の錬金術師 FULLMETAL ALCHEMIST OP)

13. MELL - Red fraction (BLACK LAGOON OP)

14. JUNO REACTOR - GUARDIAN ANGEL (XAVIER'S EDIT) (TEXHNOLYZE OP)

15. BOOM BOOM SATELLITES - SHUT UP AND EXPLODE (亡念のザムド OP)

16. SUPERCAR - STORYWRITER (交響詩篇エウレカセブン 挿入歌)

17. ROCKY CHACK - Perfect World (狼と香辛料II ED)

18. ねごと - シンクロマニカ (ガリレイドンナ OP)

19. 戸松遥 - Girls, Be Ambitious. (ソ・ラ・ノ・ヲ・ト ED)

20. 千佳(千葉紗子)・美羽(折笠富美子)・茉莉(川澄綾子)・アナ(能登麻美子) - いちごコンプリート (苺ましまろ OP)