oinume journal

Scratchpad of what I learned

YAPC::Asia 2015に行ってきた(1日目)

1日目感想

遅刻してしまいLarry Wallの話が聞けなかったのが一番悔やまれるところだったけど、他の聞きたいトークは全部聞けたし、前夜祭で初めて話したnekogataさんのトークがすごく良くて、さらにその後懇親会でも話せたのですごく嬉しかった。YAPCは毎年何かしら新しい人との出会いがあって、今年で最後になってしまうというのが本当に悲しい。

あとDMM英会話を最近始めた成果なのか、Electronの発表をしていた人の英語は80%ぐらい聞き取ることができた。たぶんすごく丁寧に喋っていた気がするんだけど、今までは英語のトークはほとんど内容が理解できてなかったので少しは成長したのかなぁと思う。

Effective ES6

@teppeis さん発表。Web+DB Pressの特集でもあったES6の話。JavaScriptがやっとやっと、、、まともな言語になってきた!という印象。これで様々なバッドノウハウベストプラクティスが不要になるのは本当に喜ぶべきことだと思う。

あと、JavaScriptってハッシュにメソッド足していくのとかはPerlに似ているなぁとずっと思ってた。

JavaScriptの落とし穴

  • Prototype inheritance
    • クラスベースの継承じゃない
  • new, this
    • new忘れるとつらい
  • variable scope (function scope)

  • Effective

  • Best practice
  • 開眼JavaScript

ECMAScript 6

  • 2015/6/17にリリースされた
  • こんな風にクラスが書ける
classs Person {
  constructor(name) {
  }
  greet() {
  }
}

ES6のサポート状況

  • Safari9
  • IE11はサポートしてない

Transpiler and polyfill

  • ES6のソースをES5 or ES3に変換する
  • ES6 Polyfill
    • ES6の機能をJavaScript(ES5)で実装したもの

Babel

  • 最も互換性が高いTranspiler(71%)
  • polyfill library搭載 (core-js)
  • REPL
  • JS Fiddle もBabel対応したらしい

ES6 Features

  • 新しい文法
  • 新しく追加されたビルトインクラス
  • 既存のクラスの拡張

Arrow function

var add = (a, b) => {
  return a + b;
};

[ 1, 2, 3 ].filter(n => n % 2 === 0).map(n => n * n);

Class

  • public, privateみたいなものはない

Module

  • CommonJS Module
    • browserify/webpackを使う必要がある
    • 静的に解析するのが難しい
export var foo = "foo";
export function bar() {}
export class Baz {
}

import {foo, bar, Baz} from "./module";
console.log(foo);

use strict

block scope

  • function scope
  • weird hoisting
  • let or const
    • もうvarは使わなくていい
function foo() {
  let num = 1;
  if (true) {
    let num = 2;
  }
  console.log(num);
}

Default parameters

function add (a = 1, b = 2) {
}

Rest parameters

Destructuring assignment

function draw(x, y, {width = 320, height = 160} = {}) {
}

size(0, 0);
size(0, 0, { width: 1 });

Template literal

var name = 'Bob';
var str = `Hello, I'm ${mame}.`;

Other features

  • Iterator
  • Spread Operator
  • Generator
  • Tail call optimization

New build-in claeses

Promise

new Promise((resolve, reject) => {
}

Hash/Set

  • WeakMap/SeakSet
  • TypedArray
  • Symbol

既存のクラスの拡張

  • Object
  • String

ESLint

結論

  • ES6 is awesome

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

@kazuho さん。立ち見だったのでメモが取れなかったんだけど、すごく良い発表だった。h2oの最適化が素晴らしい。Nginxじゃなくてh2o使おうかなと思うぐらい。なお、Nginxの開発者の人とも情報交換をしていて、h2oの実装を参考にNginxにもHTTP2の処理が入っていくのではないかとのこと。年内ぐらいには正式にHTTP2に対応したNginxが出てくるといいなぁ。

はじめに

  • 2秒遅くなるとクリック率が4%下がる
  • 4年間でデータの量は倍ぐらい増えてる
  • bandwidthも大きくなってるからいいのでは?
    • webpageのロード時間はbandwidth速くなっても変わらない
  • ページロードはレイテンシが小さいほうがいい

Perlで学ぼう!文系プログラマのための、知識ゼロからのデータ構造と計算量

Shinpei Maruyama (nekogata.com)さん。自分も文系なのでこの手の話はすごくよく分かる。プログラミング初心者にもわかりやすい内容で自分もいい復習になりました。

メモリ

int main(int argc, char* argv[]) {
  int a = 1;
  int b = 2;
  int c;
  c = a + b;
  printf("%d", c);
}


### オーダー法
* データの数がn個のとき、n回計算をしないといけないとき、O(n)という
* O(n)
    * データが増えた時、計算量も同じ量で増える
* O(log n)
    * データが多い時にデータが増えても計算量はそんなに増えない


## [Electron: Building desktop apps with web technologies](http://yapcasia.org/2015/talk/show/7d66b640-0a6b-11e5-b1a0-67dc7d574c3a)
Ben Ogleさん。すごく英語が聞き取りやすかった。かなりゆっくり喋ってくれたのかな?Electron自体はよくしらないけどAtomは普段から使っているので大体知っている内容だった。awesome-electornのリポジトリ見ると、かなりたくさんのアプリがElectronでできてるんだなぁと思ってその勢いの凄さにびっくりした。だってちゃんとAtomがリリースされてからまだ半年も経ってないし。

* Work on Atom
* Engineer at GitHub
* AtomのクールなところはWebテクノロジーを使ってできているところ

### Electron
* JavaScript, HTML, and CSS
* io.js
* Chromium
* OS

### どんなものができるか
* GitHub Atom
* MS Visual Studio Code
* Facebook Nuclide
* Jibo (Electron based robots)
* Fireball
* Slack client

https://github.com/sindresorhus/awesome-electron

### KittyDetect
* 猫の顔があるかを認識するアプリ
* 2時間で作った

### 質疑応答
* AtomもCoffeeScriptやめてES6に書き直している途中らしい
* OAuthで戻ってくるのってどうすればいいの?
    * protocol handler使う

YAPC::Asia 2015行ってきた(前夜祭)

今年でJPA主催のYAPCは最後ということで、いつもは前夜祭は参加しないのだけれど行ってきた。

最初に聞いたのは @hsbt さんの言語開発の現場という話。Rubyはリリース作業が特に大変だと言っていた。自動化したくてもなかなか面倒くさいものなのかなぁ。Rubyは日本人の開発者が多いので、外国人から「日本語でやりとりして仕様が決まっているのではないか」みたいに思われることがあったとか。しかしそのぐらい公共のものになってきている感じがすごいと思った。

その後、@myfinderさんに捕まって出会ってMicrosoft Azureの面白そうな話をいろいろ聞いた。そういえば転職されてから話すのは初めてだったかもしれない。Azureはデータ処理のサービスが面白そうで、NorikraみたいにSQLでストリームのデータにアクセスでき、さらに処理とデータ保存が分離されているのでロックインされずらいそうだ。AzureってMachine Learningもすごそうだし純粋に使ってみたいなぁと思った。

とりあえず明日から本番なので1日目は特に飲みに行ったりせずに大人しく帰宅。

Make VirtualBox's network faster with paravirtualized network adapter

I develop applications with Vagrant and VirtualBox and feel frustrated about slowness of VirtualBox. Since I found virtio (paravirtualized network adapter), I tried it out on my application.

How to enable virtio with Vagrant

Add following lines into your Vagrantfile.

v.customize ["modifyvm", :id, "--nictype1", "virtio"]
v.customize ["modifyvm", :id, "--nictype2", "virtio"]

Results

I ran time vagrant provision with old and new settings and virtio-net is 1.2x faster than 82540EM (default network adapter).

  • vagrant provision 14.85s user 12.49s system 5% cpu 8:20.59 total with Intel PRO/1000 MT Desktop (82540EM)
  • vagrant provision 14.63s user 12.62s system 6% cpu 7:00.70 total with virtio-net

Ansible: Up and Running

Ansible: Up and Running

Building Vagrant box from VirtualBox OVF

www.packer.io

I realized that Packer can build Vagrant box from VirtualBox OVF file not only from ISO image. Building Vagrant box takes much time to run an installer so I'm very happy to skip the step.

I created Ansible installed Vagrant box from another box to try.

  1. Run 'vagrant box add oinume/ubuntu-14.04-jp'
  2. Downloaded box is stored in ~/.vagrant.d/boxes/oinume-VAGRANTSLASH-ubuntu-14.04-jp/1.0.1/virtualbox and box.ovf is in the directory.
  3. Specify the path of .ovf like below in template.json and run 'packer build template.json'
  4. 'ubuntu-14-04-x64-jp-ansible-virtualbox.box' created.

Ansible: Up and Running

Ansible: Up and Running

RDS(MySQL)のバイナリログはすぐ消えるから注意

これ知らないとハマるかもしれないのでメモ。

docs.aws.amazon.com

に"Amazon RDS normally purges a binary log as soon as possible"とある通り、RDSではバイナリログはすぐ消えてしまう。もし自前でスレーブを立てたりするためにバイナリログをある程度とっておきたい場合は、

call mysql.rds_set_configuration('binlog retention hours', 24);

のプロシージャを実行してバイナリログの保持期間を伸ばすことができる。

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド