YAPC::Asia TOKYO 2015に行ってきた #yapcasia
行ってきた。
募集開始後ダラダラしていたら売り切れてしまって、早く買っておけばよかったなあと後悔していたところ、先週入場のみの追加販売が残っているのを発見し滑り込み購入。
1日目、2日目の参加。 2日目は、朝に洗濯機が完全に壊れて手間取ったがなんとか参加することが出来た。
聞いたセッション(ラリーとか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日目
感想
同時通訳が各自に手渡されるイヤホン付き端末から流れるのだが、率直にすごかった。自分は英語も聞きたかったので左耳だけにイヤホンを入れて音量はあまり大きくなり過ぎないようにして利用。
この方式だと英語だけ聞きたい人は使わなければいいわけだから便利。同時文章通訳だとそれを見る必要があるし、2カ国語が同時にスピーカーから出ていると訳が分からなくなるし。
以下、雑多な感想。
- ちょっとよく分からないけど偽ラリーが色んな人と写真撮っててウケた。尚、本人なしでも撮影OKとのことで、自分が書いたボードを持ってもらって撮影。TeraTailのお姉さん美人で良い
- CoreOSの人がロボットレストラン推しててウケた
- ひとでくん、負債に苦しめられ手であることが分かったけど、着々と改善していっているようで楽しそうで良かった。やたら本買わせようとしてたのが気にはなる
- やはり自分でもっとWebサービスなりガンガン作っていかないとダメだと感じた。esaの中の人が言った「リンクを持つまでやる」というのが秀逸だった。尚、esaまだ使っていないけどとりT(スプラトゥーンのいかTに対抗してesaの人が作ったやつ)着ていたらesaの人に発見されて話す機会があったので良かった
- データ分析基盤がどう変遷してきたかを知ることが出来て良かった。運用が大変だからなるべく自分で用意しないで利用した方が良いとのこと。確かにHadoopとか運用するより本業のことを解決することに経営資源を使いたいしね。ここら辺は、データ分析基盤に限らず、最近割りと共通している考え方だと思う
- 現在担当しているサービスがIDCで運用していて、AWS移行に若干関わりそうなので拝聴。1ヶ月とかで移行していると聞いたので参考にしたい。古いPostgreSQLを使っていてデータ量が多いのが悩みの種。pg_dumpで22GBくらいダンプしたところでエラーで落ちる現象知っている人いたら連絡ください
- 新しいことをやるときの抵抗勢力についてセッション終了後に質問してみたところ、若手の人が多いとのことだった。自分が相手にするのは年上で中年の人が多いので、すんなり参考にはならなさそう
スピーカーの皆さん、スタッフの皆さん、来場者の皆さん、俺、お疲れ様でした。
— シャック (@eiryu) 2015, 8月 21
同時通訳ヘッドフォン凄い #yapcasia
— シャック (@eiryu) 2015, 8月 21
多くのオーク #yapcasia
— シャック (@eiryu) 2015, 8月 21
— シャック (@eiryu) 2015, 8月 21
しかしラリー良い声 #yapcasia
— シャック (@eiryu) 2015, 8月 21
いきなりのロボットレストラン推しw #yapcasia
— シャック (@eiryu) 2015, 8月 21
この時にロボットレストラン行ったのかw #yapcasia https://t.co/cvocwmJy9q
— シャック (@eiryu) 2015, 8月 22
"うまく進捗していることを確認します" じわったw #yapcasia #yapcasiaA
— シャック (@eiryu) 2015, 8月 21
k8sはステートレスアプリケーション #yapcasia #yapcasiaA
— シャック (@eiryu) 2015, 8月 21
"動画変換で家が建つ" #yapcasia #yapsasiaE
— シャック (@eiryu) 2015, 8月 21
ひとでくん、結構負債に苦しめられ手だな #yapcasia #yapcasiaE
— シャック (@eiryu) 2015, 8月 21
JavaだとDTOとEntityは普段から考えること多いな #yapcasia #yapcasiaE
— シャック (@eiryu) 2015, 8月 21
やっぱソース読まなくても動かせる環境重要だよなあ。ある種、参入障壁に近い #yapcasia #yapcasiaE
— シャック (@eiryu) 2015, 8月 21
新手YouTuberのセッション来た #yapcasia #yapcasiaA pic.twitter.com/yMXGZW0loF
— シャック (@eiryu) 2015, 8月 21
公開してURLを持つところまでやる #yapcasia #yapcasiaA #esa
— シャック (@eiryu) 2015, 8月 21
とりT着てたら #esa の人に発見されてステッカーもらえて便利 #yapcasia
— シャック (@eiryu) 2015, 8月 21
懇親会難民は日比谷のhubにいる #yapcasia pic.twitter.com/D0b4dkHfvF
— シャック (@eiryu) 2015, 8月 21
醤油豚骨 #yapcramen https://t.co/TvmSB131jZ
— シャック (@eiryu) 2015, 8月 21
#yapcice https://t.co/LzywAfVlvw
— シャック (@eiryu) 2015, 8月 21
洗濯機がドカーンつって動かなくなった
— シャック (@eiryu) 2015, 8月 22
— シャック (@eiryu) 2015, 8月 22
本人なしでも良いとのこと #yapcasia pic.twitter.com/Jiri9hy7cm
— シャック (@eiryu) 2015, 8月 22
AWSへ移行した過ぎるので来た #yapcasiaE #yapcasia
— シャック (@eiryu) 2015, 8月 22
— シャック (@eiryu) 2015, 8月 22
#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
尚、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
して回避
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
Mavenはbrewで、Javaはbrew caskで入れるのだが、この逆の依存関係になっているものもあったら嫌だなあと思い、brewとbrew 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の方がインストールの依存関係に悩まされないということと、現在インストールされているものを出力出来てそのままプロビジョニングの元ネタとして使えるのでよいと思う。
おまけ
brew、brew 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でリリースしてみた
と言ってもやったことは、基本参考ページを見ながら順番に進めていっただけ。意外と公式ドキュメントに情報が揃っていることが分かったが、そもそもそこにたどり着くために参考ページが役に立った。
リリースした雑ライブラリは以下。
最終的な 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
リリースがちょっと分かりにくかったが、ちゃんと英語を読めば手順が書いてあった。Staging RepositoryをClose、Releaseの順番で操作してリリースする
最初GPG鍵を作ってはいたが公開鍵サーバーに送っていなかったせいで、Staging RepositoryのClose処理で鍵のVerifyエラーが発生してしまった
参考
- http://blog.eiel.info/blog/2013/07/31/gpg/
- http://int128.hatenablog.com/entry/20130409/1365434513
- http://tagomoris.hatenablog.com/entry/20141028/1414485679
- http://blog.64p.org/entry/2015/04/19/085909
- http://central.sonatype.org/pages/apache-maven.html#performing-a-release-deployment
- http://central.sonatype.org/pages/gradle.html
- http://central.sonatype.org/pages/releasing-the-deployment.html
JJUG ナイトセミナー 「Reactive Streams特集」に行ってきた #jjug
6月24日(水)に開催された件のイベントに行ってきた。
最初の発表は@okapiesさんによる「Reactive Streams 入門」。
現在Akka、Reactor等のReactive Programmingの実装が複数あり、それらのランタイムの相互接続性を保証するためにReactive Streamsが発表されたとのこと。
標準化目標のJava9までまだ大分時間があるので、何か1つ触ってみようと思う。Spring Frameworkをよく使っているのでreactorが妥当か。
次の発表は@grimroseさんによる「Reactive Streamsを使ってみよう」。
先の発表が座学だとするとこの発表は実技。コード例が多く、Reactive Programmingの実際といった内容だった。
Vert.xからReactive Programmingに興味を持たれたそうで、すぐに手を動かせるあたりはいつも驚かされる。自分もこのくらい早く手を動かせるようになりたいものだ。。
そして懇親会の乾杯の挨拶は何故か「リアクティ〜ブ!」だった。これは流行らなさそう。
会場提供のOracleさん、運営のJJUG幹事の皆様、発表者の皆様ありがとうございました。
着席 #jjug pic.twitter.com/R55TKhBMDs
— eiryu@夏休みoon (@eiryu) 2015, 6月 24
アンケートシステム、 @making 氏がせっかく作ったのに本番前に動かなくなったとのこと #jjug
— eiryu@夏休みoon (@eiryu) 2015, 6月 24
BackPressure、ぱっと思いつくイメージは、松屋の券売機で何買うか悩んでる時に後ろに並ばれたって感じ #jjug
— eiryu@夏休みoon (@eiryu) 2015, 6月 24
アンケート編集画面発見した。ヒント https://t.co/t1sOF8P5LF https://t.co/CbttUb0nt3
— eiryu@夏休みoon (@eiryu) 2015, 6月 24
retrofitもRxJavaに対応しているとのこと #jjug
— eiryu@夏休みoon (@eiryu) 2015, 6月 24
"JustTechTalk# 02 形態素解析のあれやこれや@ ジャストシステム" にいた #justtechtalk
いた。行ってきたではない。なぜなら運営側だったから。
この企画自体はNLP軍団発で、せっかく自社で開催するのなら、と完全に運営のお手伝いとして参加。よく考えたらこのくらいガッツリ運営を手伝ったのは初めてかも知れない。
自分自身は、NLP軍団ではなく、昔少しだけMeCabをJavaから使ったことがあるというくらいで、NLPに関しては素人。
発表は大きく2つで、最初は当社の形態素解析についての話、その次は各言語(Go、JavaScript、Phython、Ruby)の形態素解析器実装者によるパネルディスカッションだった。
形態素解析の世界でも「良いマシンを買う」とScalaみたいな話があったり、なぜかGoの話が結構詳しく聞けたりしてウケた。Goは最近少しだけ触ったりしている。
最近は行くイベントをかなり厳選していたのだが、普段関わりのない言語、開発内容について話を聞くのもいい刺激になるので、もっと色々行ってもいいかもしれない。「形態素解析器を実装するのはNLPでのHello World」は箴言だった。
懇親会はお店に移動して30名ほどで開催。金融工学関係の方や大学生の方もいらしていたようで、研究内容に関するやりとりもあった。
ご来場いただいた皆様ありがとうございました。運営者の皆様お疲れ様でした。
本日です / JustTechTalk#02 形態素解析のあれやこれや@ジャストシステム (07月03日) #justtechtalk https://t.co/Hx0LUMwse7 @just_techtalkさんから
— ♨︎ (@eiryu) 2015, 7月 3
設営されつつある #justtechtalk pic.twitter.com/gQG479lXG0
— ♨︎ (@eiryu) 2015, 7月 3
#justtechtalk pic.twitter.com/KLS46IIEJh
— ♨︎ (@eiryu) 2015, 7月 3
「良いマシンを買う」来た #justtechtalk
— ♨︎ (@eiryu) 2015, 7月 3
私からは以上です。 https://t.co/TcEPb8B8Lc #justtechtalk
— ♨︎ (@eiryu) 2015, 7月 3
T口さんだ #justtechtalk
— ♨︎ (@eiryu) 2015, 7月 3
速攻片付いてウケた #justtechtalk pic.twitter.com/RzObFLI7xv
— ♨︎ (@eiryu) 2015, 7月 3
懇親会 #justtechtalk pic.twitter.com/MMRco8H2rF
— ♨︎ (@eiryu) 2015, 7月 3
Macの移行アシスタントメモ
MacBookを買って、最初は環境構築の自動化のことを考えず、今使っているMacBook Airから環境丸ごと移行しようと試みた。
Time Machineからの移行は出来なかったので移行アシスタントを使用。
移行元をYosemiteに上げてバックアップを取れば出来たかも知れないが、Mountain Lionの環境を捨てたくなかったというのもあった。
そうしたら色々移行出来ていないところがあったのでメモ。移行アシスタントてこういうもんなんだろうか。。