09

SVNKit(1)

今時SVNのAPI触ってるなんて人に聞かれたら袋叩きにされるのだろうか。 とにかくRepositoryにある内容を取得したい。

ドキュメントを見るとAPIが2段階あるらしいことがわかる。

  • high-level api (working copy api)
    • org.tmatesoft.svn.core.wc および org.tmatesoft.svn.core.wc2 パッケージ
    • たぶん、実際SVNを使ったツールを開発するにあたっては当然必要になるワーキングコピーをベースにしたユースケースをカバーするAPI
  • low-level api
    • org.tmatesoft.svn.core.io パッケージ
    • リポジトリとプロトコルを直接的にインタフェースするとある
    • 上記を構成するために使用される低レイヤーのAPIなんだろうか?
    • 個人的にはこのレベルでもだいぶユースケースよりな設計の印象を受ける
SVNRepository

APIドキュメントを眺めているとどうやらリポジトリオブジェクトを作ってそこから操作をするらしい。

SVNRepositoryオブジェクトを作るにはSVNRespositoryFactoryというファクトリクラスを使うらしいが、その前に接続先のプロトコル(http: か、svn:またはsvn+hoge:か、file:か)によってセットアップをしてやる必要があるらしい。

        if (url.toLowerCase().startsWith("http")) {
            DAVRepositoryFactory.setup();
        } else if (url.toLowerCase().startsWith("svn")) {
            SVNRepositoryFactoryImpl.setup();
        } else if (url.toLowerCase().startsWith("file")) {
            FSRepositoryFactory.setup();
        } else {
            fail();
        }

こんな感じか。urlは普通にsubversionの接続先として使用するURLの文字列。

なんでsvnの場合だけImplがついているのか。ってSVNRepositoryFactoryにそれをさせるわけにいかなかったってことか。しかしファクトリのセットアップを別のクラスに切り出して、そっちを呼ばせるというのも、なんだか妙な設計に思えるが・・・まあ大した実害はないかもしれない。

続いてリポジトリオブジェクトを作成

        final SVNRepository repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url));
        final ISVNAuthenticationManager authenticationManager = SVNWCUtil.createDefaultAuthenticationManager(user, password.toCharArray());
        repository.setAuthenticationManager(authenticationManager);

ISVNAuthenticationManagerはその名のとおり接続時の認証情報を管理してくれるものらしい。この場合は単純にhttpのベーシック認証に渡すユーザ名とパスワードをSVNWUtilというユーティリティに渡してインスタンスを作ってもらっている。なんでパスワードがchar配列なのかよくわからないが、これは単にパスワードの平文文字列。たぶんSSH経由のSVNとかだとこの辺のやり方は認証方式に応じて変わるんだろう。

ISVNEditor

でとりあえずチェックアウトはこんな感じになるが

        repository.checkout(-1, "trunk", true, new ExpEditor());

最後の引数に要求されているExpEditorISVNEditorを実装したオブジェクトで、どうもチェックアウト実行中にはリポジトリ中の変更情報が順に流れてくるのでそれを処理するハンドラというか、Visitorのようなものを実装する必要があるようだ。ExpEditor自体は今回動きを確認するために適当に作った実装。

とりあえずどんな動きをするのか、ということでこんな構造のリポジトリを作った

[carrotsword trunk]$ ls -la
total 20
drwxrwxr-x 2 carrotsword carrotsword 4096 Mar  6 01:55 .
drwxrwxr-x 6 carrotsword carrotsword 4096 Mar  6 01:55 ..
-rw-rw-r-- 1 carrotsword carrotsword  208 Mar  6 01:55 .project
-rw-rw-r-- 1 carrotsword carrotsword   16 Mar  6 01:55 file1.txt
-rw-rw-r-- 1 carrotsword carrotsword    7 Mar  6 01:55 file2.txt

一応コミットは何度かに分けてある

[carrotsword trunk]$ svn log --diff

  ... 略 ...

------------------------------------------------------------------------
r3 | test | 2016-03-04 03:15:19 +0900 (Fri, 04 Mar 2016) | 1 line

commit2

Index: file2.txt
===================================================================
--- file2.txt   (revision 0)
+++ file2.txt   (revision 3)
@@ -0,0 +1 @@
+commit2
\ No newline at end of file

Property changes on: file2.txt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: file1.txt
===================================================================
--- file1.txt   (revision 2)
+++ file1.txt   (revision 3)
@@ -1 +1,2 @@
-commit1
\ No newline at end of file
+commit1
+commit2
\ No newline at end of file

------------------------------------------------------------------------
r2 | test | 2016-03-04 03:14:34 +0900 (Fri, 04 Mar 2016) | 1 line

commit1

Index: .project
===================================================================
--- .project    (revision 0)
+++ .project    (revision 2)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>test</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>

Property changes on: .project
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: file1.txt
===================================================================
--- file1.txt   (revision 0)
+++ file1.txt   (revision 2)
@@ -0,0 +1 @@
+commit1
\ No newline at end of file

Property changes on: file1.txt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property

------------------------------------------------------------------------
r1 | test | 2016-03-04 03:12:54 +0900 (Fri, 04 Mar 2016) | 1 line




------------------------------------------------------------------------

これに対して、ISVNEditorがどんな呼ばれ方をするのか。 各メソッドに呼ばれたメソッド名とパラメータを簡単に出力するだけの実装をして実行してみたところ、以下のような出力が得られた。

#targetRevision start > [rev.3]
#openRoot start > [rev.3]
#openDir start > trunk[rev.3]
#changeDirProperty start > svn:wc:ra_dav:version-url /svn/test/!svn/ver/3/trunk
#changeDirProperty start > svn:entry:committed-rev 3
#changeDirProperty start > svn:entry:committed-date 2016-03-03T18:15:19.061137Z
#changeDirProperty start > svn:entry:last-author test
#changeDirProperty start > svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#addFile start > trunk/file2.txt
#changeFileProperty start > trunk/file2.txt svnkit:entry:sha1-checksum 54563f95fefa691baa82a522156322c21f7d6df3
#changeFileProperty start > trunk/file2.txt svn:wc:ra_dav:version-url /svn/test/!svn/ver/3/trunk/file2.txt
#changeFileProperty start > trunk/file2.txt svn:entry:committed-rev 3
#changeFileProperty start > trunk/file2.txt svn:entry:committed-date 2016-03-03T18:15:19.061137Z
#changeFileProperty start > trunk/file2.txt svn:entry:last-author test
#changeFileProperty start > trunk/file2.txt svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#changeFileProperty start > trunk/file2.txt svn:mime-type text/plain
#applyTextDelta start > trunk/file2.txt
#textDeltaChunk start > trunk/file2.txt 0:0:7:1:7:8:0
#textDeltaEnd start > trunk/file2.txt
#closeFile start > trunk/file2.txt
#addFile start > trunk/.project
#changeFileProperty start > trunk/.project svnkit:entry:sha1-checksum 4d0a7da34b1a6f2e1416d746bf268c1137453e14
#changeFileProperty start > trunk/.project svn:wc:ra_dav:version-url /svn/test/!svn/ver/2/trunk/.project
#changeFileProperty start > trunk/.project svn:entry:committed-rev 2
#changeFileProperty start > trunk/.project svn:entry:committed-date 2016-03-03T18:14:34.687289Z
#changeFileProperty start > trunk/.project svn:entry:last-author test
#changeFileProperty start > trunk/.project svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#changeFileProperty start > trunk/.project svn:mime-type text/plain
#applyTextDelta start > trunk/.project
#textDeltaChunk start > trunk/.project 0:0:208:3:208:211:0
#textDeltaEnd start > trunk/.project
#closeFile start > trunk/.project
#addFile start > trunk/file1.txt
#changeFileProperty start > trunk/file1.txt svnkit:entry:sha1-checksum 994c650e0954fd76b6859dae6d87caf2fad19e35
#changeFileProperty start > trunk/file1.txt svn:wc:ra_dav:version-url /svn/test/!svn/ver/3/trunk/file1.txt
#changeFileProperty start > trunk/file1.txt svn:entry:committed-rev 3
#changeFileProperty start > trunk/file1.txt svn:entry:committed-date 2016-03-03T18:15:19.061137Z
#changeFileProperty start > trunk/file1.txt svn:entry:last-author test
#changeFileProperty start > trunk/file1.txt svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#changeFileProperty start > trunk/file1.txt svn:mime-type text/plain
#applyTextDelta start > trunk/file1.txt
#textDeltaChunk start > trunk/file1.txt 0:0:16:1:16:17:0
#textDeltaEnd start > trunk/file1.txt
#closeFile start > trunk/file1.txt
#closeDir start > 
#closeDir start > 
#closeEdit start > 

これは面倒そう!

ざっと見る限り、コミットされているファイルの内容が見えない。 これはtextDeltaChunkの引数に渡されるSVNDiffWindowオブジェクトがその情報を持っている。 適当に吐き出してみたところSVNヘッダ+ファイルの内容のバイナリストリームを持っているっぽい。 ということは、その内容を指定のパスに吐き出してやれば(checkoutだけど)export相当のことはできるようになるのかも。

今回はこの辺で。

teslogger-server

少し前に以下で発表されたやつ

www.slideshare.net

試してみたかったけどClojure力が足りない

なんとか動かしたメモ

Leiningen はあらかじめ入れておく。公式ではbatファイルをお勧めされるけど、Windows10ではなんだったか忘れたがエラーになったと思うので、インストーラ使った気がする。

  1. teslogger-servergit clone して持ってくる。
  2. axebomber-clj が必要だが Clojars にないようなのでこれも git clone して持ってくる
    • lein uberjar して axebomber-clj-0.1.1-standalone.jar をビルド
  3. teslogger-server/lib/ に axebomber-clj-0.1.1-standalone.jar を配置
  4. teslogger-server/project.clj を修正した
    • :dependencies
      • [net.unit8/axebomber-clj "0.1.0-SNAPSHOT"] をコメントアウト
      • [net.unit8/ulon-colon "0.2.3"] はSNAPSHOTじゃない
    • :resource-paths ["lib/axebomber-clj-0.1.1-standalone.jar" "resources"] を追加
  5. clojure script をコンパイルする
    • lein cljsbuild once
  6. サーバを起動する
    • lein ring server
  7. ブラウザが起動して 【START TO EVIDENCE】が表示されたら teslogger を起動すればいい。

日付のパース

iAP上で日付を固定書式でパースしたいのだが。

DateTimeFormatter: intra-mart Accel Platform SSJS API Documentation

とある既存コードを眺めていて気になったので試してみた

Debug.browse(
   DateTimeFormatter.parseToDate('yyyy/M/d', '2015/9/9'),
   DateTimeFormatter.parseToDate('yyyy/MM/dd', '2015/9/9'),
   DateTimeFormatter.parseToDate('yyyy/M/d', '2015/09/09'),
   DateTimeFormatter.parseToDate('yyyy/MM/dd', '2015/09/09')
);

結果は

1   Wed Sep 09 00:00:00 JST 2015    Date
2   Wed Sep 09 00:00:00 JST 2015    Date
3   Wed Sep 09 00:00:00 JST 2015    Date
4   Wed Sep 09 00:00:00 JST 2015    Date

そうだよねえ。

ちなみにパースに失敗すると例外が飛ぶ。javacript 側の try-catch で捕まえられるから、それで何とかするしかないねえ。

嵌り実況

  1. ファイルをアップロードする画面が必要になった。intra-mart Accel Platform 上なので当然 imuiFileUpload を使うことを考える。
  2. ただアップロードするだけじゃなく、アップロードに際していくつか入力する項目が付属するので、ファイルは imuiFileUpload に任せて、 imuiFileUpload がアップロードしたファイルについての情報と付属項目を一緒に <form> にいれて imuiAjaxSend で送信するのが楽そう、と考える。
  3. 画面全体を <form> で囲ったら imuiFileUpload のスタイルが剥がれて、おそらくまともに動作していない状態になった。
    • ファイルをアップロードする性質上フォームとは相性が悪いのか?
  4. 選択肢としてありそうなのは imuiFileUploadouterFormId 属性の指定。
    • でもこれって単にマルチパートとして送信してしまうのでは?
    • 別にそれでもいいんだけど、imuiFileUpload がサーバサイドで Session Scope Storage に自動的に保存してくれる機能を活かしたい
  5. とりあえず、全ての値を hidden で保持するフォームを作成して、入力された値はそこに転記して imuiAjaxSend することにしようと考える。
  6. でも入力値はバリデーションしたいので、上記の転記先のフォームに対して imuiValidate のルールを定義して呼び出してみる。
    • エラーメッセージ表示は関数を与えることでコントロールできるので、バリデーション対象が hidden でもいけると踏んだ
  7. 何を入力してもまったくバリデーションエラーにならない(入力値に何を入れても imuiValidateの戻り値が true
  8. jQuery validation plugin hidden でGoogle検索したらデフォルトでは hidden 項目はバリデーションの対象にしないらしいことが分かる。これを無効にするにはバリデーションを無視する項目を指定する引数に [] (空配列)を渡せばよいらしいことが書いてある。
  9. 与えてみるが何も変わらない。
  10. DOMエレメントツリーを見ていると上記の転記先の <form>novalidate なる属性が付与されていることを発見する。
  11. 調べてみると html5 の機能でバリデーションを無効にする指定らしい。StackOverFlowにてjQueryのvalidation pluginも何らかの条件下でこの属性を付与するようで困るというようなポストを見つけた。
  12. StackOverFlowの同スレッドにて $("#form").removeAttr("novalidate") せよとのポストが見つかったので試してみるも novalidate はなくなるが(あたりまえ)動作には変化ない。
  13. ここまで書いたところでふと思い当たってバリデーション無視対象を [] でなく '' にしてみる

・・・やっと imuiValidate がエラーを返してきた。[-_-]

敗因は?

ファイルアップロードが中途半端に混ざってる画面設計か、もしくは4で outerFormId 使うほうを選んでたらもっと簡単に解決したのだろうか(試してない)。 あとはバリデーション無視対象はString型だよ、と一応公式ドキュメントには書いてあるので、それを見逃した点かな…。

あの人は今

消息が気になったので調べている。

Applet ってまだつかえるの?

たぶん・・・。

セキュリティ状況については正直もうわからない。恒常的に使い続けるものではなくなってそう。

Applet と Java Web Start どっちが良いのか?

AppletはHTMLに埋め込みのものだが、Java Web Startはそうではない?基本的には独立型のアプリケーションという形態のよう。デスクトップにショートカットを配置したりできる。

なので、カバーするユースケースはまったく同じというわけではないみたい。

参考: https://docs.oracle.com/javase/jp/6/technotes/guides/jweb/decision_guide.html

Applet は ローカルファイルにアクセスできないのでは?

上記の参考URLにあるが、Java Network Launching Protocol (JNLP) を使用して起動されたアプレットはローカルファイルへのアクセスが可能らしい。

Java Network Launching Protocol (JNLP) を使用してアプレットを起動するとはどういうことか?

参考: http://itpro.nikkeibp.co.jp/article/COLUMN/20090423/328953/

JNLPファイルがあればいい? でも現在動作しているアプレットを調べてみたが、特にそんなものはない様に見える。

Java FXは使えるのか?

使えそう。大分古い記事なので最新では事情が異なるかも。

参考: http://skrb.hatenablog.com/entry/20081031/p1

JavaFXを使うとして、プラットフォームはどう選べばよいのか

たとえば、多くのサーバ運用環境はJDK 7以前だろうが、 クライアントサイドで動くのでクライアントのバージョンが新しければよいのかな?

開発環境どうする

Eclipse + e(fx)clipse

参考: http://www.coppermine.jp/docs/programming/2013/12/efxclipse.html

Net BeansだったらデフォルトでJavaFXのための環境が付属するようだ。

JavaFX の Scene Builder の配布元が見つからない

オープンソース化してOracleからは配布していない?

参考: http://qiita.com/sh-ogawa/items/16dc36996626775d5c4c

YAPC::Asia Tokyo 2015

f:id:carrotsword:20150820180654j:plain

今年も行ってきました、ということで。

前回の感想エントリでは門外漢が行くべきかどうだかな〜と思っていたのだけど、いざ参加募集が始まったら迷ったものの結局行くことにした。前夜祭から参加。

Day 0

聞いたのは以下のトーク

PHP帝国の逆襲!(を願うPHPerが話す最近のPHPについてのクイックツアー PHP7対応版)

Yet Another Perl Conference の口火をきるのがPHPとRubyのトークというのがやはりここのところのYAPC::Asiaらしさなのかな。 多分 uzulla さんのトークを聞いたのは初めてなんだけど前年ベストトーク賞を取っているだけあってどんどん会場をあっためていくのはさすがとしか。 しかし内容はだいぶ濃かった。もともと長い枠向けに書いていたのか?かなりボリュームがある内容をどんどん喋っていくので、PHPに関してはせいぜいにわかというレベルの自分には途中まったくわからない点などもちらほら。

とはいえたまにPHPの案件などもあったりするのでPHP7情報は今後役に立ちそう。

はてなブックマークのトピックページの裏側

はてなブックマーク10周年おめでとう御座います。

ということで10周年の企画として作ったというトピックページの裏側がどうなっているかという話。意外と「これとこれとこれを使えばできる」というような話で随分簡単なんだなという印象。(まあ実際にはいろいろ困難もあるのだろうけど)

最近 elasticsearch をいじっているので自分の作っているもので使えそうかな〜と考えながら聞けた。

技術ブログを書くことについて語るときに僕の語ること

どうやればブクマを稼げるか、というところから話が始まった。個人的にここのブログにはどういったことを書いたものだかなというのはしばしば悩んでいるんだけど、あまりそういう悩みの参考にはならないかな、という雰囲気だった。

ただ最終的には

  • 良いエントリを書くにはそれなりに時間も知見も必要になる
  • 時間や知見が必要になるエントリを書くにはエネルギーが必要。
  • エネルギーを得るためにブクマ(まあブクマじゃなくてもいいけど)を稼がねばならない

とうまくまとめられてしまった感じ。 ちまちまネットで調べたことを書き綴っても仕方ないというのは確かにそう思うんだよな〜。

Day 1

なぜだか 10:00 開場と感違いしていて 10:10頃到着。 オープニングトーク聞きたかったのだが失敗。

メリークリスマス!!

ラリーの英語トークだったんだけど、同時通訳のレシーバ売り切れだったのかもらえず、そのまま入ったのでとりあえず通訳なしで聞いてた。ホビットの話をしてたのはともかく、まあ全体的には細かい話がよくわからなかった。残念。

Perlの大将いい声で喋るな〜と思って眺めていた。

DeepLearning の前に知っておくことがある! 再帰型のニューラルネットワークや自己組織化マップについて語ろう

ニューラルネットワークの経緯的な話から始まってだいぶ頑張ってい急いで喋っていたのだけど、時間が足りずに全て説明仕切れていなかった感。今回聞いたトークでは割と多かったんだけど、説明がやたら早かった。

個人的には全然この辺の分野は知らないものの経緯的なところはなんとなく聞いたことはあって、逆にちょっと突っ込んだ話になると全くわからなかった。 ただ質疑応答の時間には全くよくわからない会話がされていたので、分かる人には分かる内容だったのだろう。

TBD

Rubyの大将のお話。

トークの導入でRubyを封印しますといってやっぱ封印解きますといった話の流れとか結構慣れた感じで全編面白おかしく聞くことができた。 すでにいろいろなところで書かれているけどRubyのまずかったところとして「Perlの影響を受けすぎた」「Lispの影響を受けすぎた」といったことをあげてた。けどまあ質疑応答でRubyのほとんどは正しいはずとも言い直していて結局どっちなのか感はある。

Rubyはほとんど書かないけど個人的にRubyの嫌いなところはto_sとか。短くしたいにしても中途半端な対応に見える。まあどうでもいいか。

後半Streemの話だったけど、パイプラインを構成して一向という2フェーズある感じが、わかりやすいのは間違いないのだけどなにかもやもやする。普通のソフトウェアなら設定とコードに分かれるような感じがあるからかな。

Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜

ベストトーク賞1位おめでとうございます。

はてなのサービスの内側の概要と、はてなブログを作るにあたってどういった設計を採っているかという話。途中幾つか書籍が引用されてて「最高」とのことなんだけど、喋ってる内容としては(十数年Webシステムを作っては壊ししている身としては)特に新しさはない感じではある。まあ結局こうなるのかというような。 しかしこういった現在の着地点を確認できるトークは安心して聞けるし、自分のやってきたことの振り返りになって良い。

ドメイン駆動設計はどうなんだろう?まあユビキタス言語等個別プラクティスそれぞれについていろいろあるが、個人的にはここ10年でさすがに無理が出てきていたり、時代にそぐわない部分が出てきているように感じている。

PietでLISP処理系を書くのは難しい

Pietってそもそも何か知らなくて、トークが始まる前の休憩時間にググってみたんだけどビットマップをインプットとして解釈する言語らしい。ただいろいろ制約が多くて(ただでさえビットマップを書くのが大変そうなのに)もう辛くて辛くて仕方ない、みたいな話だった。

ただのもの好きがやる事かと思ってたら質疑応答の時間にPiet処理系いじった経験のある人が出てきたりガチLISPerがそんなんじゃ困るみたいな意見を申し立てていて面白かった。

発表はちょっと準備不足感があって、トークの途中で出てきたURLとかちゃんと共有されるのか不安。

Perl6 on JVM: It works??

Perl6のサブセットというのかミニマルセットというのか、nqp(Not Quite Perl)というものが定められていて、nqpが動けば、そこでPerl6を動かすことができるということで、今のところParrot、More-VM、rakudo-startという3種のVMが開発中。で、以前はだいぶ遅かったんだけど、ここのところだいぶ早くなってきて実用的ですね!という話。 多分 nqp と rakudo の話はだいぶ前のrebuild.fmでtokuhiromさん出演回でも話をしていたのでその辺はなんとなく知っていたんだけど、インストールもだいぶ簡単にできるように整えられていますよ、というのは初めて聞いた。

スレッドに関してはJVM上で動いているrakudoはだいぶましだけどMore-VMでは動くけど思った風には動いてくれないということを言っていたので、まだ前途多難なのかもな~。

Lightning Talks Day 1

LTに関しては一言づつ

  • 日本最多のオフィス訪問シリーズ 「行ってきたシリーズ」のTOP5+αとして日本のイケてるオフィスを紹介しちゃうよ!
    • マイクロソフトオフィス(製品ではない)のPVが高いとのこと。あとISUCONのCMが半分
  • Gitの作り方
    • 意外とお手製でやれるという話。
  • SaaSを組み合わせて作る, ぼくらの障害対応術!
    • デモ中にガチ通知飛んできて最高
  • cpm - an experimental cpan client
    • 依存解決を並行処理して最高
  • Norikraで作るPHPの例外検出システム
    • システムでカバーしなければキャッチできない例外がPHPにはあるんです!
  • RSSをざっくりクロールしてゆるふわにパースする
    • 結構複雑なユーザ入力の検証なんかでよく出てくる問題。あまりがちがちにやるといい感じに処理できないという。
  • Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
    • 別の方面でも一度聞いたことがある話の気がする。なんでこういうのSlackがいいんだろうか。やってることはバッチとかシェルスクリプトのような気がせんでもないんだけど。
  • YAPC?雨事情
    • 今は北陸で働いているんだけど、確かにオフィスビルで仕事してた時代は本当に外に出るまで雨とか気にしない事が多かった気がする。窓の外を眺めさえすればいいはずなんだけど。
  • Haskell Strikes Back
  • (昔の) PHP が誇った最高の機能 register_globals の真実、そして未来へ
    • マニュアル「その結果に驚くことでしょう」
    • 「ちゃんとかけ」
  • Perl同人活動報告2015
    • レスペーパー化の時代にワープロであるところのMicrosoft Wordなんて不要になったんじゃと思ったけど意外と需要が生き残ってた

Day 2

どうしてこうなった? Node.jsとio.jsの分裂と統合の行方。これからどう進化していくのか?

個人的にはNode.jsでアプリケーションを書くことはないんだけど、フロントエンドのビルド環境としては度々使うので、まあ若干の不安があったので聴講。 コミュニティリーダーの交代とロールモデルの変遷について話していて、なかなか興味深かった。ほかのプロダクトなんかではどうなっているのか興味ある。Javaだと支配者がいたとしたら James Goslin だろうか。結構早い段階からJCPが成立していたような気がするけど。 取り合えず今後の使用に関しては問題ないのかな~という感触を得たけど、まあ先のことなんてわからないしな。

NASA主催の世界最大級ハッカソンSpaceAppsを運営した話

発表者の湯村さんは別の筋で見かけたことがあったので、リアル湯村さんを見に聴講。

SpaceAppsというハッカソンの運営は以前からやっていたのだけど、今回石川に住まいを移したのでリモートでの運営ということでいろいろ苦労したとのこと。Google Hangoutsを使ってたくらいの説明しかなかったと思うんだけど、個人的に今の仕事もいろいろチームが分散して作業することが多いのでその辺もっと突っ込んで聞いておけばよかったかも。

アイディアソンにはそれ専門の人を呼んでるといってたな~。どんなことをしているかも軽く話してくれてたけど、それでうまくいくのかどうかまったくわからないので何とも。

3分でサービスのOSを入れ替える技術

正直インフラ屋ではないものの、最近ちょいちょい手を出し始めているので興味があったので聴講。

インフラの現場がわかっていればいろいろ納得感があったのかもしれないけど、rebuild.fm で聞いたような単語がしっかり出てくるなーというような感覚で聞いてた。時系列で問題を順次解決していくような形で説明されてて内容はとてもわかり易かった。 SSHみたいな何でもできるみたいな手段は極力封じておいたほうがイノベーションが進む、みたいな考え方がでてきたんだけど、現場で初めからそのように思い至って進めたんだろうか。後から振り返ったらそうなってたというのならわかる気はするのだけど、そうでなければ自分ではそんな発想には至れなさそうだ。ただまあ、SSHが使えるようになるところまでも若干しんどいと思われるので、そのしんどいところを超えてしまえるのならSSHに頼らなくてもいいかも、とは考えられるのかな。

最後のBlue Green Deploymentのところはやはりストレージまでは対応できていないということで、その辺の「現状ここまで」感がわかったのもよかった。

ソーシャルゲームにおける AWS 移行事例

個人的に社内のあれやこれやをいい加減AWSでやれないのか、と思い始めていたので聴講。

移行時間を短くするためにいろいろ調べていて、実際に自分でやるときにも使えそうかもな~という感じで聞いていた。 MySQLに関してだいぶいろいろやっていて、今思い返してみるとこれらの問題はどうやって検出したんだろう?移行期間は手順をChef化したりRDSの検証をやったりで約一か月間くらいらしい。割となんども移行してみてテストしてを繰り返したのかな。

yrmcds って初めて聞いたなーと思ったら、Garoonのバックエンドなのか。

developer.cybozu.co.jp

あと一つ上のトークでも出てきたけど、結構Consulが今回のYAPCでは頻出ワードだったみたい。まったくマークしていないのでちょっと手を動かしてみておくかなあ。

HTTP2 時代の Web

ベストスピーカー賞2位おめでとうございます。

mozaic.fm とどのくらい違うんだろうなどと思いながら聴講。

HTTP2を理解した上で移行しないのもありと話しながらも、言いたいこととしてはHTTP2使っていこうぜということだったんだろう。 多分個人的にはそんなに高トラフィックの対応を要求されることも多くないのでさして差し迫って必要という感覚ではないし、インフラがいつの間にか対応してたところに乗っかっていけるといいなくらい。ちょっと気になるとすれば、HTTPS化かなあ。

Lightning Talks Day 2

  • MySQL 5.7の罠があなたを狙っている
    • すごく面白かったし、役に立ちそうな情報が満載だった。個人的にはPostgreSQL派なので、MySQLは使わないかもしれないけど。
  • 吉祥寺.pmというイベントを作った話〜聞きたいトークが有れば自分でイベントを作ろう!〜
    • 勉強会毎回遠いよね。遠い遠い。
  • 命名の話をします
    • なんだかイマイチ落としきれていない感じだったけど
  • botになる技術
    • コンテンツ力が極まるとBotになれる
  • モダンなクライアントサイド JavaScript に追い付くためのための小さな(しかし大変な)一歩の話
    • あるある
  • Evaluating your stylesheets
    • Naoya 最高!
  • Thank you for ${^ENCODING} variable
    • perl 最高!
  • 本物の "ロック" ってやつを魅せてあげますよ - 分散排他ロック篇
    • 高信頼で高可用性で伝統も実績もある電話最高!
  • コミュ力あげてこ
    • 電話より伝統も実績もあるモールス最高!絶対やると思ってたけど
  • CONBUの道具箱
    • デモが圧巻でした
  • Vim script静的解析の光と闇
    • ざわざわ落とさなくても闇しかないと思ってた

The END

このエントリはさっき一度間違って公開してしまったんだけど、yuuki氏のアドバイスに従って予約投稿により平日にポストするとしようと思います。逆に被って埋もれてしまうかな。ま、それはさておき。

今回を以てYAPC::Asiaはいったん終了するとのことで、自分が参加したのは去年の今年の二回だけだったんだけど、今回も非常に楽しめました。

運営の方々、スピーカーの方々、参加者の方々、お疲れ様でした。ありがとうございました。

f:id:carrotsword:20150822175357j:plain

まだWSHで消耗してる

var shell = new ActiveXObject('WScript.Shell');
shell.run('java -version' , 0, true );

これを実行するとどういうわけか

Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

fatal: Not a git repository (or any of the parent directories): .git
C:\test\test.js(2, 1) (null): エラーを特定できません

なぜ Git が・・・・。

ちなみに java ではなく notepad とかなら問題ない。Javaが何かしてんのかなあ。

var shell = new ActiveXObject('WScript.Shell');
shell.run('cmd /c java -version' , 0, true );

これならいける。