YAPC::Asia TOKYO 2015に行ってきた #yapcasia

行ってきた。
募集開始後ダラダラしていたら売り切れてしまって、早く買っておけばよかったなあと後悔していたところ、先週入場のみの追加販売が残っているのを発見し滑り込み購入。
1日目、2日目の参加。 2日目は、朝に洗濯機が完全に壊れて手間取ったがなんとか参加することが出来た。

yapcasia.org

聞いたセッション(ラリーとかLTは省略)

1日目

  • Managing Containers at Scale with CoreOS and Kubernetes
  • Consulと自作OSSを活用した100台規模のWebサービス運用
  • Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜
  • Electron: Building desktop apps with web technologies
  • esa.io - 趣味から育てたWebサービスで生きていく

2日目

  • データ分析基盤を支える技術
  • ソーシャルゲームにおける AWS 移行事例
  • 辛いことをやめる!から始まる業務改善とInfrastructure as Code

感想

同時通訳が各自に手渡されるイヤホン付き端末から流れるのだが、率直にすごかった。自分は英語も聞きたかったので左耳だけにイヤホンを入れて音量はあまり大きくなり過ぎないようにして利用。
この方式だと英語だけ聞きたい人は使わなければいいわけだから便利。同時文章通訳だとそれを見る必要があるし、2カ国語が同時にスピーカーから出ていると訳が分からなくなるし。

以下、雑多な感想。

  • ちょっとよく分からないけど偽ラリーが色んな人と写真撮っててウケた。尚、本人なしでも撮影OKとのことで、自分が書いたボードを持ってもらって撮影。TeraTailのお姉さん美人で良い
  • CoreOSの人がロボットレストラン推しててウケた
  • ひとでくん、負債に苦しめられ手であることが分かったけど、着々と改善していっているようで楽しそうで良かった。やたら本買わせようとしてたのが気にはなる
  • やはり自分でもっとWebサービスなりガンガン作っていかないとダメだと感じた。esaの中の人が言った「リンクを持つまでやる」というのが秀逸だった。尚、esaまだ使っていないけどとりT(スプラトゥーンのいかTに対抗してesaの人が作ったやつ)着ていたらesaの人に発見されて話す機会があったので良かった
  • データ分析基盤がどう変遷してきたかを知ることが出来て良かった。運用が大変だからなるべく自分で用意しないで利用した方が良いとのこと。確かにHadoopとか運用するより本業のことを解決することに経営資源を使いたいしね。ここら辺は、データ分析基盤に限らず、最近割りと共通している考え方だと思う
  • 現在担当しているサービスがIDCで運用していて、AWS移行に若干関わりそうなので拝聴。1ヶ月とかで移行していると聞いたので参考にしたい。古いPostgreSQLを使っていてデータ量が多いのが悩みの種。pg_dumpで22GBくらいダンプしたところでエラーで落ちる現象知っている人いたら連絡ください
  • 新しいことをやるときの抵抗勢力についてセッション終了後に質問してみたところ、若手の人が多いとのことだった。自分が相手にするのは年上で中年の人が多いので、すんなり参考にはならなさそう

スピーカーの皆さん、スタッフの皆さん、来場者の皆さん、俺、お疲れ様でした。

#TwFavView をアップデートした

今見ているページをTwitterのお気に入りにする機能を追加。お気に入りにするために事前にツイートも行う。

TwFavViewにログインした状態で、以下のブックマークレットを実行する。

javascript:(function(e){window.open("http://apps.eiryu.com/twfavview/tweetAndFav?url=%22+e(location.href)+%22&title=%22+e(document.title),null,%22width=480,height=240%22);})(encodeURIComponent);

普段使っているみてるなうを参考にさせていただいた。

eiryu梅雨のプロビジョニング祭りやってみた

以前やると言っていたやつ。以下の2つについて実施。

  • Ansible
  • Brewfile

github.com

尚、ServerKitでもやろうとしたのだが、なぜかしょっぱなからエラーが出て動かないため断念。

https://github.com/serverkit/serverkit/issues/9

共通点

クリーンインストール状態からprovision.shを実行してプロビジョニングする。

手順

Ansible

基本的にt-wadaさんのもの踏襲。

http://t-wada.hatenablog.jp/entry/mac-provisioning-by-ansible

  • hostファイルを実行可能にしていたらエラーになった
ERROR: The file hosts is marked as executable, but failed to execute correctly. If this is not supposed to be an executable script, correct this with `chmod -x hosts`.

言われるままchmod -xして回避

  • Mavenを入れる際にJavaがないとエラーになった
PLAY [localhost] ************************************************************** 

TASK: [homebrew の tap リポジトリを追加] ***************************** 
<localhost> REMOTE_MODULE homebrew_tap tap=caskroom/cask state=present
changed: [localhost] => (item=caskroom/cask) => {"changed": true, "item": "caskroom/cask", "msg": "added: 1, unchanged: 0"}

TASK: [homebrew をアップデート] **************************************** 
<localhost> REMOTE_MODULE homebrew update_homebrew=yes
ok: [localhost] => {"changed": false, "msg": "Homebrew already up-to-date."}

TASK: [brew パッケージをインストール] ***************************** 
<localhost> REMOTE_MODULE homebrew name=git state=latest install_options=
changed: [localhost] => (item={'name': 'git'}) => {"changed": true, "item": {"name": "git"}, "msg": "Package upgraded: git"}
<localhost> REMOTE_MODULE homebrew name=maven state=latest install_options=
failed: [localhost] => (item={'name': 'maven'}) => {"failed": true, "item": {"name": "maven"}}
msg: Error: An unsatisfied requirement failed this build.
<localhost> REMOTE_MODULE homebrew name=tig state=latest install_options=
changed: [localhost] => (item={'name': 'tig'}) => {"changed": true, "item": {"name": "tig"}, "msg": "Package upgraded: tig"}

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/Users/eiryu/localhost.retry

localhost                  : ok=2    changed=1    unreachable=0    failed=1   

Mavenbrewで、Javabrew caskで入れるのだが、この逆の依存関係になっているものもあったら嫌だなあと思い、brewbrew caskそれぞれを実行するtaskを分離した。

自分のパターンは、brew caskをしてからbrewするようにするだけで解決出来たと思われるが、タスクを別ファイルに分割する際にAnsibleについて少し手を動かすことが出来たのでよしとする。変数のデバッグ便利。- debug: var=packages

Brewfile

以下を参考に作業。

http://rcmdnk.github.io/blog/2015/03/24/computer-mac/

brew file dumpで/usr/local/Library/Brewfileに現在インストールされているものが出力される。

その出力されたファイルはbrew file installでそのまま使える。ここがすごく便利。

Ansibleと違い、BrewfileはJavaの前にMavenを書いてもエラーにならなかった。裏側でその部分についてはよしなにやってくれている?

まとめ

Brewfileの方がインストールの依存関係に悩まされないということと、現在インストールされているものを出力出来てそのままプロビジョニングの元ネタとして使えるのでよいと思う。

おまけ

brewbrew caskのインストール済みのものを削除する。

for i in `brew cask list`; do brew cask uninstall $i; done
for i in `brew list`; do brew uninstall $i; done

Maven CentralにGradleでリリースしてみた

と言ってもやったことは、基本参考ページを見ながら順番に進めていっただけ。意外と公式ドキュメントに情報が揃っていることが分かったが、そもそもそこにたどり着くために参考ページが役に立った。

リリースした雑ライブラリは以下。

github.com

最終的な build.gradleは以下。

https://github.com/eiryu/templa/blob/8ce567bb422df0f3ed0d4c6dadaf8fc4c4169c2d/build.gradle

apply plugin: 'groovy'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'signing'


description = 'A New HTML Template Engine'
group = 'com.eiryu'
version = '0.1.0'
archivesBaseName = 'templa'

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

[compileJava, compileTestJava, compileGroovy, compileTestGroovy].each {
    it.options.encoding = 'UTF-8'
}

repositories {
    mavenLocal()
    jcenter()
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.4.3'

    testCompile 'org.spockframework:spock-core:0.7-groovy-2.0'
    testCompile 'junit:junit:4.12'
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.5'
}

task javadocJar(type: Jar, dependsOn: groovydoc) {
    classifier = 'javadoc'
    from "${buildDir}/javadoc"
}

task sourcesJar(type: Jar) {
    from sourceSets.main.allSource
    classifier = 'sources'
}

artifacts {
    archives jar
    archives javadocJar
    archives sourcesJar
}

signing {
    sign configurations.archives
}

uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

            repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
                authentication(userName: ossrhUsername, password: ossrhPassword)
            }

            snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
                authentication(userName: ossrhUsername, password: ossrhPassword)
            }

            pom.project {
                name 'Templa'
                packaging 'jar'
                description project.description
                url 'https://github.com/eiryu/templa'

                scm {
                    connection 'scm:git:https://github.com/eiryu/templa.git'
                    developerConnection 'scm:git:https://github.com/eiryu/templa.git'
                    url 'https://github.com/eiryu/templa.git'
                }

                licenses {
                    license {
                        name 'The MIT License (MIT)'
                        url 'http://opensource.org/licenses/MIT'
                    }
                }

                developers {
                    developer {
                        id 'eiryu'
                        name 'Hidetaka Koda'
                        email 'eiryu.co@gmail.com'
                    }
                }
            }
        }
    }
}

つまずいた・気になったところ

  • sonatypeにuploadする際に、Could not find metadataと出たが問題なく上がっていた
$ ./gradlew --daemon uploadArchives
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:groovydoc UP-TO-DATE
:javadocJar UP-TO-DATE
:sourcesJar UP-TO-DATE
:signArchives UP-TO-DATE
:uploadArchives
Could not find metadata com.eiryu:templa:0.1.0-SNAPSHOT/maven-metadata.xml in remote (https://oss.sonatype.org/content/repositories/snapshots/)
Could not find metadata com.eiryu:templa/maven-metadata.xml in remote (https://oss.sonatype.org/content/repositories/snapshots/)

BUILD SUCCESSFUL

Total time: 25.408 secs
  • SNAPSHOTはMaven Centralに同期されないらしい。参考

  • リリースがちょっと分かりにくかったが、ちゃんと英語を読めば手順が書いてあった。Staging RepositoryをClose、Releaseの順番で操作してリリースする

  • 最初GPG鍵を作ってはいたが公開鍵サーバーに送っていなかったせいで、Staging RepositoryのClose処理で鍵のVerifyエラーが発生してしまった

参考

JJUG ナイトセミナー 「Reactive Streams特集」に行ってきた #jjug

6月24日(水)に開催された件のイベントに行ってきた。

jjug.doorkeeper.jp

最初の発表は@さんによる「Reactive Streams 入門」。

現在Akka、Reactor等のReactive Programmingの実装が複数あり、それらのランタイムの相互接続性を保証するためにReactive Streamsが発表されたとのこと。

標準化目標のJava9までまだ大分時間があるので、何か1つ触ってみようと思う。Spring Frameworkをよく使っているのでreactorが妥当か。

次の発表は@さんによる「Reactive Streamsを使ってみよう」。

先の発表が座学だとするとこの発表は実技。コード例が多く、Reactive Programmingの実際といった内容だった。

Vert.xからReactive Programmingに興味を持たれたそうで、すぐに手を動かせるあたりはいつも驚かされる。自分もこのくらい早く手を動かせるようになりたいものだ。。

そして懇親会の乾杯の挨拶は何故か「リアクティ〜ブ!」だった。これは流行らなさそう。

会場提供のOracleさん、運営のJJUG幹事の皆様、発表者の皆様ありがとうございました。

"JustTechTalk# 02 形態素解析のあれやこれや@ ジャストシステム" にいた #justtechtalk

いた。行ってきたではない。なぜなら運営側だったから。

justsystems.doorkeeper.jp

この企画自体はNLP軍団発で、せっかく自社で開催するのなら、と完全に運営のお手伝いとして参加。よく考えたらこのくらいガッツリ運営を手伝ったのは初めてかも知れない。

自分自身は、NLP軍団ではなく、昔少しだけMeCabJavaから使ったことがあるというくらいで、NLPに関しては素人。

発表は大きく2つで、最初は当社の形態素解析についての話、その次は各言語(Go、JavaScript、Phython、Ruby)の形態素解析器実装者によるパネルディスカッションだった。

形態素解析の世界でも「良いマシンを買う」とScalaみたいな話があったり、なぜかGoの話が結構詳しく聞けたりしてウケた。Goは最近少しだけ触ったりしている。

最近は行くイベントをかなり厳選していたのだが、普段関わりのない言語、開発内容について話を聞くのもいい刺激になるので、もっと色々行ってもいいかもしれない。「形態素解析器を実装するのはNLPでのHello World」は箴言だった。

懇親会はお店に移動して30名ほどで開催。金融工学関係の方や大学生の方もいらしていたようで、研究内容に関するやりとりもあった。

ご来場いただいた皆様ありがとうございました。運営者の皆様お疲れ様でした。

Macの移行アシスタントメモ

MacBookを買って、最初は環境構築の自動化のことを考えず、今使っているMacBook Airから環境丸ごと移行しようと試みた。

Time Machineからの移行は出来なかったので移行アシスタントを使用。

移行元をYosemiteに上げてバックアップを取れば出来たかも知れないが、Mountain Lionの環境を捨てたくなかったというのもあった。

そうしたら色々移行出来ていないところがあったのでメモ。移行アシスタントてこういうもんなんだろうか。。

  • 移行元 OS X Mountain Lion 10.8.5
  • 移行先 OS X Yosemite 10.10.3
  • 移行する項目は全てにチェック
  • キーボード設定は引き継がれない(USキーボードなので、ControllキーとCaps Lockキーを入れ替えていた)
  • 移行元でApacheで動かしていたphpアプリが動かなかった
    • httpd.confでphpを有効化。php5_moduleのコメントアウトを戻す
    • php.iniがなかったので作成
    • pg_connect()でエラー。phpinfoを見ると、PostgreSQL拡張が入っていないぽい?尚、Yosemiteではphpが5.3から5.5に上がっていた
  • ATOKIMEとして移行されていなかった
  • 移行後に移行元MacでTime Machineでのバックアップが「バックアップディスクが見つからない」と出て失敗する。再起動したら出来るようになった