mof-brown

ずっとモフモフしてたい

YAPC::Asia Tokyo 2015 1日目参加レポート

今年が最後の YAPC ということで、初めて参加してきました。
その1日目で参加したトークに関するレポートです。

メリークリスマス!

本物だ!YAPC ってすごい!というミーハー気分に。

Effective ES6

www.slideshare.net

  • ES6 の概要と、主要な追加仕様に関するトーク
  • 正式には ECMAScript 2015
  • モダンなシンタックス追加、大規模開発向けの仕様追加、後方互換サポート
  • 各環境の対応状況は ECMAScript 6 compatibility table
  • Babel が現時点で最も ES6 の機能を実装している transpiler
  • IE11 は ES6 をサポートしないらしい
    • Babel 使っていきましょう、ということらしい

無性に ES6 書きたくなるトークでした。とりあえず Babel 触ろう。

HTTP/2時代のウェブサイト設計

www.slideshare.net

  • HTTP/1.1 の問題点と、それに対する HTTP/2 の解決方法をわかりやすく解説
  • H2O の特徴もちょいちょい解説、今のところ H2O 最強っぽい
  • nginx のHTTP/2 サポートは秋頃?
  • 現時点でまともな感じで実装しているブラウザは Firefox くらい
    • 普及していくのは来年以降?
  • CDN を利用している場合にどのように運用すべきかがイメージ湧かない...

正直ちゃんと理解できていない領域だったので非常に勉強になった。スライドをまた改めて見なおす。

Conway's Law of Distributed Work

  • リモートワークにおけるベストプラクティス・テクニックについてのお話
  • 最適なツールを選定しよう
    • チャット (Slack、HipChat...)
    • ChatOps (hubot)
    • オーディオ/ヘッドフォン/カメラ (物理的なツール)
    • スクリーンシェアリング (screenhero...)
    • プロジェクト管理 (Pivotal Tracker、Trello、JIRAは嫌いらしいw)
    • ファイルストレージ (DropboxGoogle Drive...)
    • カレンダー (Google Calendar)
  • テクニック
    • 全員がリモートワークを体験してみる
    • 定期的に会う
    • すぐに話せない代わりに、アイディア等を書いて積極的に共有する
    • 自分の個性を表現・共有する
    • 共通で使うタイムゾーンを決める

これはリモートワークに限らず、チームビルディングに必要な知見では。 メンバー全員がタスクのこと・考えていること・アイディアとかあらゆる情報を積極的に共有する必要があるし、その必要性をメンバー自身が理解している必要があるということかな。それが難しいんだけど...。

Electron: Building desktop apps with web technologies

  • Electron の話
  • npm の資産が流用できるの素晴らしい

Electron、面白そうなんだけど作りたいものが無くて困ってる。デモ中心だったのでちょっと眠かった。

esa.io - 趣味から育てたWebサービスで生きていく

speakerdeck.com

  • (\( ⁰⊖⁰)/)
  • スライドかわいい
  • Bundle update の PR とても良い。真似たい。
  • 無料プランのリクエストの意見が出てた
    • 個人的には学生向けのプランは良いけど、一般には現状通りでも良いと思う
    • 良いサービスには対価を支払うべき

esa.io、最近使い始めて気に入っているサービスなので話が聞けてよかった。
好きなものを作って、それが誰かの幸せになって、その対価で自分が食っていけるって理想ですね。サービス作りたくなるトークでした。

2014年を振り返る

年明けてしまいましたが、昨年を振り返ってみます。
去年は↓のようなことを書いてました。

サーバーサイドエンジニアへ復帰

前職ではサーバーもフロントも両方やってたのですが、 今の会社ではフロントエンジニアとして入社しました。

で、昨年末から新しいプロジェクトにジョインしてフロント周りをやってたのですが、

  • サーバーサイドエンジニアが不足していた
  • ブラウザ×ソシャゲのフロント周りの技術については、前プロジェクトで一通り触って一旦満足してた
  • 今のプロジェクトのフロント周りは、技術的にレガシーなところや歴史的経緯によるコードが多く、モチベーションを保つのが難しかった

といった理由で、サーバーサイド側への復帰を希望してました。

会社として注力タイトルであったこと、リリース直後でリソースを寄せなければいけなかったこともあり、3月くらいからサーバーサイドエンジニアに復帰できました。

これまで経験したことのない規模の負荷であったり、ソシャゲならではのスピード感を求められる開発は色々勉強になってます。

社内チューニンガソンで1位になった

9月に社内チューニンガソンが開催されたのですが、中途メンバーの中で1位を取ることが出来ました。 まさか1位を取れるとは思ってなかったけど、1ヶ月くらい集中して勉強して入賞狙いにいってたので、これは素直に嬉しかった。

と同時に、小さい子供がいる中で勉強時間を確保するのは大変なことを実感...。

長男が1才になった

さらに可愛くなっている。ウンコは臭い。

勉強した技術

  • Spring 3.2
  • Java 8
  • Node.js
  • TypeScript
  • Golang
  • Beego
  • AWS
  • Chef
  • Ansible
  • Jenkins
  • zsh

こんな感じ。

はてなブログに引っ越しました

これまで「さくら×WordPress」でブログを運用してたんだけど、
特にその必要性を感じなくなってきたのと、
かかってた費用を違うところに使いたくなったので
はてなブログに引っ越しました。

といっても、技術的なネタは最近 Qiita に書いてますが。

Spring MVC で複数データソースを扱った場合の挙動を調べてみた

Spring MVC で扱うデータソースが2つある時、片方だけトランザクションを張った場合にもう片方の更新が反映されない、という問題に直面したので色々試してみた。Spring 初心者すぎて辛い。

環境

Spring 3.2.4

元々のソース

例えば user と groupというテーブルがあり、それぞれに対して更新する処理を書いていた。

#!java

@Service

public class HogeService {

@Transactional

public void update() {

userService.update();

groupService.update();

}

}

ここで、user と group とでDBを分けることになり、DataSource と TransactionManager を複数に分けた際、デフォルトの user は更新されるが group の更新がされなくなった。この挙動自体はまぁ当然。

(1) groupService 側にも @Transactional を指定してみる

これで両方トランザクションが張られて正常に動作した。

#!java

@Service

public class GroupService {

@Transactional(“group")

public void update() {

// update...

}

}

(2) afterCommit を利用してみる

今回は group 側にトランザクションを張らなくても良いケースだったので、試しに TransactionSynchronizationAdapter#afterCommit を利用してみた。

#!java

@Service

public class HogeService {

@Transactional

public void update() {

userService.update();

TransactionSynchronizationManager.registerSynchronization(

new TransactionSynchronizationAdapter() {

@Override

public void afterCommit() {

groupService.update();

}

}

);

}

}

これでうまくいくかと思ったが、group への更新は反映されなかった。何かイメージと違う。afterCommit の後に何か処理が走っているのか。

(3) user、group への更新処理をメソッド毎分ける

StackOverflow とか Spring 関連の記事を見ていると、結局これに落ち着きそうな感じ。もちろん想定通りに動作する。

#!java

@Service

public class HogeService {

@Transactional

public void updateUser() {

userService.update();

}

@Transactional(“group")

public void updateGroup() {

groupService.update();

}

}

時間も無く、結局うまいやり方が見つからないので、(3) の実装で一旦落ち着いた。

Eclipse 開発環境構築手順メモ (Mac OS X)

Eclipse をダウンロード

http://www.eclipse.org/downloads/

執筆時点では Kepler SR2 が最新でした。

eclipse-xxx.tar.gz を解凍し、好きな場所に配置

個人的には ~/dev/eclipse/kepler とかディレクトリ切ってます。

Eclipse を起動して各種設定を行う

  • 行番号を表示する
  • 文字コードの設定を UTF-8 にする
  • Code Assist のショートカットキーを Command + Space に変更する
  • Project Explorer ではなく Package Explorer を使う
  • Package Presentation を Hierarchical に変更する

必要に応じてプラグインをインストール

とか。

Mac の Evernote を完全アンインストールする手順

久しぶりに Evernote の断捨離をしてみたところ、1台の Mac だけうまく同期がされない現象が発生。Evernote を再インストールしてみるも以前の同期データを保持しているようでうまく行かず。

色々調べてみたところ、AppCleaner を使ってアンインストールしてみたところ、Evernote が完全にアンインストールされ、再度一から同期することが出来ました。

AppCleaner

  1. AppCleaner をインストール
  2. AppCleaner を起動して Evernote を検索
  3. Evernote を削除
  4. ゴミ箱を空にする (これをしないと完全アンインストールされなかった...)