YAPC::Asia 2015参加レポートと敗北
今年で最後と噂されていたYAPC::Asia 2015にいってきた。
僕みたいなコミュ障ですら知ってる人が何人もいるくらい規模がでかい。最終日に言ってたけど関係者が2000人超えだったらしい。
1日目
下記の発表をみた。
発表者の名前とかにつられないぞ〜〜〜って気持ちでタイトルだけ見るものきめた。
メリークリスマス! - YAPC::Asia Tokyo 2015
Perlの父、ラリー・ウォールの発表。 英語力を試すために同時通訳の力を借りずに聞こうとしてたけど、 だいたいがホビットとかロード・オブ・ザ・リングにからめて話を展開してくるから「こりゃかなわん」と思って速攻同時通訳のイヤホンをつけた。
同時通訳ききながらでもホビットたとえのところはやっぱり意味がわからんくて「こりゃかなわん」って思った。 あと、余談だけど同時通訳の人がすげえクオリティ高くて「投票できるならこの人にベストスピーカー賞を捧げたい」っていう信仰にも似た気持ちになった。
ラリー氏が尋常じゃなく病気にかかりながらもPerl6つくっててウオオオーーーってきもちになったし、約束しないながらもクリスマスにPerl6公開するって言っててウオオオーーーってきもちになった。
Web由来の組み込みエンジニアの半年間のすべて 〜WebとiOSとBLEとハードウェアデバイスのこと〜 - YAPC::Asia Tokyo 2015
見に行ったら大学時代の先輩の発表だった。 相変わらず好青年の権化のような出で立ちであられた。
「あとはファームでカバー」って言っててめっちゃ笑ったし、 たぶんファーム担当する人は笑いどころじゃねえんだろうなって感じだった。
ハードウェアは、大体においてミスったときの手戻りやコストがプログラミングするより大きくて、 ケアレスミスが多い自分は大学時代から絶対に手を出したくない分野だったので、 それで起業しちゃうのすごい。
今フロントエンドで何が起こっているのか - YAPC::Asia Tokyo 2015
昨今、気が狂ったようにいろんな技術が動き出してるフロントエンド界隈の流れをわかりやすくまとめてくれてて、 頭の整理をするうえでも非常にためになる発表だった。
ES6がES2015って呼ばれるようになったの、「ウオオオーーー今年中に終わらすぞーーーー」って意味だと思い込んでたけど、 「すでに決定した仕様とかをコンスタントにだしていくぞーーーー」っていう気持ちの現れだったということをしって「学び」って気持ちだった。
Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜 - YAPC::Asia Tokyo 2015
ベストトーク第一位になった発表だった。
「オブジェクト指向!ドメイン駆動!最新のFW!俺達の考えた最高の技術!」という気持ちになりやすい一部のエンジニア(僕)にとって、ちゃんと見ておいたほうがいいな〜ってなる発表だった。
どんな技術でも、「なにを解決するために必要なのか」を表面だけじゃなくて、 いまぶちあたってる問題にしっかりあてはめていかないと本領発揮できないのだという気持ちになった。
あと、スライドのテンポがとっても良くて、気を抜いたら今後自分でスライド作る時に「最高」ってすぐかいちゃいそうで気をつける必要がある。
うっかりをなくす技術 - YAPC::Asia Tokyo 2015
これのメモをとるとき「ukkari.md」ってファイル作ったんだけど、スライドでいきなり「Technology for reduce of mistakes」ってでてきて「アアーーー」ってなった。 ラリー・ウォールの英語を聴きとるぞ〜〜なんて思う資格がないなと反省しながら聞いた。
一個一個はけっこうきいたことあるな〜って技術だったり意識付けだったりするんだけど、 こうやってまとめてもらってあらためて考えると、「こんなのあったな〜〜」って思い出したりしていい勉強になった。
そして「こんなのあったな〜〜〜」ってなることを減らすには・・・?という考えに至り、人生って複雑だなって感じだった。
Lightning Talks Day 1 - YAPC::Asia Tokyo 2015
みんな発表うますぎない・・・?ってくらいみんな発表のクオリティ高かった。
個人的に一番良かったのは「 (昔の) PHP が誇った最高の機能 register_globals の真実、そして未来へ 」だった。 PHPの発表におけるポテンシャル、高過ぎると思う。
あと、ちょいちょいでてくるmakamakaさんが最高に面白かった。
2日目
この日はインフラ寄りの話が多かった。
普段から 「インフラなんて絶対にやりたくない!失敗した時の負担が大きい!やってくれてるひといつもありがとうございます!」 って思いながら日々業務ってるので、少しは勉強しないとと決意していろいろ見て回った。
ISUCONの勝ち方 - YAPC::Asia Tokyo 2015
ISUCONに勝つためにはここに情報かかないほうがいいのでは・・・?????
ひとまず自分のOTSUTOME-SAKIでできることありそうだな〜って内容が多かったので、いろいろ試してみる予定になった。
我々はどのように冗長化を失敗したのか - YAPC::Asia Tokyo 2015
スライドの背景画像と「式年遷宮インフラストラクチャ」が醸し出す圧倒的インパクトがすごかった。
「あ、これやべえやつだな」って思って帰ろうと思ったけど、部屋が満員で出づらかったのでそのままみた。
ちゃんと聞いてみると「冗長化ってやったところで障害時にあんまりスイッチングできないことが多いよね」というあるあるから、「常にアクティブ/スタンバイを切り替えることでスイッチングを担保しておきながら冗長化しよう」という至極まっとうな解決案を提案していて、それを実施するまでの推移、問題点、解決策、そして失敗、失敗した理由を盛り込んでてくれてて、めっちゃ普通に勉強になった。
怖い発表でも学びがあるという学びを学んだ。
MySQLで2億件のシリアルデータと格闘したチューニングの話 - YAPC::Asia Tokyo 2015
2コア/メモリ8GBというDBサーバーで2億件のシリアルデータをさばくという話だった。 「狂気かな」と思いながら聞いてたけど、 ちゃんと対応しようと思えば大分よくなるんだな〜という結果になってて、自分が富豪化してる環境に慣れてるだけなんだなと認識を改めた。
いろんなものが札束でぶんなぐれば解決できるから僕もお仕事できてるだけで、 いざこういう仕事任せられたら自分はきっと何もできないと思うと 結局基礎を固めるしかない・・・・という気持ちにしていただいた。
3分でサービスのOSを入れ替える技術 - YAPC::Asia Tokyo 2015
「中学生以下の英語なんで」って言いながら全部英語のスライドだった。 たぶん中学生は英語で資料は作らない。
ChefやPuppetみたいなConfigurarion Management Toolを使っていくのは、冪等性保ちながら同じ環境を作れるのが強みっていうのはわかってたんだけど、 OS入れ替えたいときにつかうのすごい王道だよなって思いながら聞いた。
前述のとおりずっとインフラを避けてきた人間なので、しらない単語とそれの活用方法がバーーーっとでてきて正直ついていけなかったけど、 そういう単語を用途と一緒に一気にインプットできただけでも聞いた甲斐があった。
ソーシャルゲームにおける AWS 移行事例 - YAPC::Asia Tokyo 2015
よく名前を聞くconsulを活用してAWS移行するお話だった。
この発表だけじゃなくて他の発表でもconsulってめっちゃ聞いた。「勉強しとけよな」っていう神の啓示な気がする。
2台ある冗長化されてないdevサーバーをひとつにまとめるとか、結構自社のAWS移行時にあった現象の話もあって、 脳内で比較しながら話がきけて面白かった。
HTTP2 時代の Web - YAPC::Asia Tokyo 2015
HTTP2を選択するのかしないのか、HTTP2というものをちゃんと知った上できめようという話。
全然関係ないけど、この発表も例のごとく満員で、仕方なく地べたを這いずりまわりながら発表を聞いてたらやっぱりスライドは視界に入らなくて、 「あ、これmozaic.fmモードだな」って気持ちになった。
画像読み込み時のデモの部分を見るだけでも結構な人が「HTTP2やるな」って気持ちになるだろうし、 あれが実際の総合速度としてはめちゃくちゃ早くなってるわけでもないって事実は 「人類が人類に与える最高の経験とは一体」という疑問を持たざるを得なかった。
Lightning Talks Day 2 - YAPC::Asia Tokyo 2015
makamakaさんが登場して社名を名乗るだけで爆笑を起こしてたの、THE センセーショナルって感じだった。
moznion氏の電話 から cho45氏のモールスに続く流れが最高だったので、この2人になにか賞が与えられるべきではとおもった。
その他
- ビッグサイト最高だった。喫煙所が3箇所もあった。
- 運営の皆様、今年も最高の体験をありがとうございました。
- http://builderscon.io/
- 2日目おわってそのままMusic Hack Day Tokyo 2015っていうのにYAPCのTシャツに着替えてむかった
jsx(Reactのほう)に慣れる
この投稿は VirtualDOM Advent Calendar 2014 22日目の記事です。
jsx自体は特に難しいわけではないんだけど、何ができるか詳しくしらなかったので 調べたりしたことを書いていきます。
基本
jsxは、reactのDOM生成部分のsyntax sugarを用意してくれてるイメージ。
Reactで要素を作成するときは
React.createElement('a', {href: 'http://facebook.github.io/react/'}, 'Hello!')
こんな感じで書くけど、これを
<a href="http://facebook.github.io/react/">Hello!</a>
こんな感じでhtml / xmlライクに書けるようにしてくれるのがjsxの役割。
jsxの構文が実コードでどうなるか知りたい人はここ で見ることができる。
もちろん、コンパイルされたコードみたいに直接Reactを使うことも可能だけど、 Reactがアップデートされたときに提供するAPIの変更があったら辛いことになりそうなので 素直にJSXTransformer使っとくのが良さそう。
jsxコンバータを使おう
jsxで書くのが楽になるのはいいけど、 それでもいきなりReact書く上でjsxの部分を意識する難しい人もいると思う(自分のこと)。
そんな人のため、ありがたいことにjsxコンパータ が用意されている。
Create class
のチェックを外すとjsx部分のみの生成ができる。
for
をhtmlFor
, class
をclassName
に変え忘れるとか最初のうちはよくやりそうなので
なれるまではコレを使うの有りだと思う。
ただし、syntaxチェック的なことをしてくれるわけではないので、 元のhtmlが変だと生成されるjsxも変になったりするので気をつけたい。
あと、実体参照を含むhtmlは、jsx Gotchas で言及してるなかの「一番かんたんな方法」でしか変換されないのに注意。
<div>First · Second</div>
↓
<div>First · Second</div>
Spread演算子でkey-valueを展開
下記はエラーになる
var props = { className: "myClass", defaultValue: "50" }; var MyComponent = React.createClass({ render: function() { return ( <input {props} /> ); } }); React.render( <MyComponent />, document.getElementById('content') );
単純に{props}
みたいにしてもkey-valueが展開されたりしない。
しかし、jsxではSpread演算子(...args
みたいなやつ)がサポートされていて、
下記のような書き方なら正しく動く。
var MyComponent = React.createClass({ render: function() { return ( <input {...props} /> ); } });
さらに、これはSpread演算子そのままなので上書きもできる
var MyComponent = React.createClass({ render: function() { return ( <input {...props} defaultValue={"100"} /> ); } });
デフォルト値を用意しておくのに便利。
ついでに、属性を指定するfoo={bar}
の書き方は、
barがObjectのときはtoStringされて[object Object]
になるが、
style
属性の指定に限ってはSpread演算子のときと同様にkey-valueを展開されるので
以下のように書くことができる。
var props = { className: "myClass", defaultValue: "50", style: { background: "black", color: "white" } }; var MyComponent = React.createClass({ render: function() { return ( <input {...props} /> ); } });
falsyの扱い
属性ノードに使用するのかテキストノードに使用するのかでfalsyの扱いが全然違うので気をつけたい。
属性ノードのとき
- 文字列になるのは
false
,0
- 空扱いになるのは
""
- 設定していない扱いになるのは
null
,undefined
var mountNode = document.getElementById('content'); React.render(<input value={null} />, mountNode); // valueに設定する値を変えるとわかる
テキストノードのとき
- どれでもテキストノードは生成されない(文字列になったりはしない)
var mountNode = document.getElementById('content'); React.render(<div>{null}</div>, mountNode);
混乱しそうなので覚えておきたい。
その他
章立てするほどのことじゃないやつ
style
を設定するとき、style="width: 100"
ってかくと単位が自動的にpxになる- jsxコンパータは↑の関係でpxをついたstyle渡しても自動でpx外してくれる(最初バグかと思った)
<div className={false ? "hoge" : "fuga"} />
みたいに{}
の中では三項演算子が使える
おわりに
だいたいのことはDocument に書いてあります。
nedbでmongooseっぽくデータベースをいじる
同僚に「2時間くらいのあいだ、少人数で使えるしょぼいツイッターみたいなのつくってよ」っていわれてつくってたんだけど、あとで見返したいからツイート(便宜上こう呼ぶ)保存しときたいって言われたので方法を考えてた。
普通にmongoとか使えばいいとは思うんだけど、作業用サーバにmongo入れてなかったし、規模感的にもそこまでする必要性が感じられなかったのでどうにかならんかなーーめんどくさいなーーって感じだった。
jsonデータでやる
最初はjsonファイルで直接やりとりしようとおもった。
var data = require("hoge.json");
みたいな。
でもnode.jsではrequireしたファイルはキャッシュされるので、データを読み込みしようとするたびにrequire("hogehoge").cache
を毎回deleteしないといけなくてださい。
delete require("hoge.json").cache; var data = require("hoge.json");
ださい。
だからといってfs.readFile
とJSON.parse
/JSON.stringify
でやりくりするのもめんどい。
誰かやってくれてないかなーーめんどくさいなーとおもってぐぐったらちょうどいいのがあった。
nedb (Node Embedded DataBase)
名前からしてなんやお手軽にいけそうな感じがする。 そして、後述するけど乱暴に言えばファイルに読み書きしてるだけだからnpm installする以外に準備がまったくいらない。
素晴らしそうな香り。
nedbつかう
とりあえずinstall
$ npm install nedb
とりあえず使う
var Database = require("nedb"); var db = new Database({filename: "./data/post"}); db.loadDatabase(function (err) { db.insert({post: "hogehoge", date: new Date()}); });
- コンストラクタに渡す
filename
は存在しないファイルだったら新規で作られる - 存在してるファイルだったらそいつを読み込んでくれる
loadDatabase
でファイル読み込んで、insert
にObject渡して更新insert
に渡すのをObjectの配列にすれば複数更新insert
の第2引数にcallback渡せばinsert後に実行される
取得するときはfind
を使う
// 全部取得 db.find().exec(function (err, data) { console.log(data); }); // postが"hogehoge"のやつ db.find({ post: "hogehoge" }).exec(function (err, data) { console.log(data); }); // dateを降順で上限10件 db.find().sort({ date: -1 }).limit(10).exec(function (err, data) { console.log(data); });
偉そうにつらつら書いてみたけど、お気付きの通りAPIはmongooseと合わせてきてくれてるので使いやすい。
完全に要求が満たせている。満足という他ない。
githubのスターもいっぱいついてるのに検索しても日本語だと数件しか記事がなくてなんでだろって思った。
ちなみに
$ cat ./data/post {"post":"hogehoge","date":{"$$date":1414595614292},"_id":"mtgJ3bQjeNeEjEhC"}
みたいな感じで、内部的には結局json形式でデータが保持されてる。
ちょっとだけ実装みたけど、lib/storage.jsっていうそれっぽいファイルでfs
とmkdirp
をexportしてるから、jsonファイルをrequireじゃなくてfsでごにょごにょする方法をとってるっぽい。
あと、githubによるとブラウザでも使えるっていってる。試してないけど。
自炊させてくれる店に自炊しにいってきた
タイトルだけだとリア充が行くようなキッチン貸してくれる居酒屋のことっぽくなるけど、本の自炊です。
概要
会社の先輩がipad miniを購入しており、それをみて衝動買いをしてから早半月以上。
まともな電子書籍が手元にほとんどなく悶々としていたので、手元にある数少ない技術書を自炊しようとおでかけしたのだった。
いった場所は五反田から徒歩2分にあるすきゃん堂さん。
五反田駅東口を出て左手に見えるケンタッキーの上の方を見ると名前がかいてあるのでわかりやすい。
ケンタッキーにたどりついて、そのビルの3Fに昇ると渋い玄関が・・・みたいなことは他の記事に書いてあるのでそちらを参照。
[レポート] 五反田の自炊レンタルスペース「すきゃん堂」が便利! - Serendipity blog.
ほとんどのこと(料金・特徴)はお店HPや上記ブログにかいてあるので割愛。
かかったお金
計2,250円也。
USBメモリ代を引いて考えると1450円、レクチャー受けたり、スキャンした本の分厚さを考慮すると安く済んでると思う。
裁断も自分でやるとぶきっちょで失敗しそうだしやってもらえてよかった。
どのレビューにも書いてるけれど、次からはもう少し早くスキャンできるだろうし。
自炊したものとその行方
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 49人 クリック: 1,514回
- この商品を含むブログ (68件) を見る
読みたかったけどいつ買おうかなーと思ってたら、社内で無料でくれたのでラッキーだった。
262ページ / 59.7MB.
コアjQuery+プラグイン/jQuery UI 開発実践技法 (Programmer’s SELECTION)
- 作者: Bear Bibeault,Yehuda Katz,吉川邦夫
- 出版社/メーカー: 翔泳社
- 発売日: 2011/08/31
- メディア: 大型本
- 購入: 7人 クリック: 277回
- この商品を含むブログ (15件) を見る
jQueryは好む好まずに関わらず、コードを目にする機会があるので買っといたけど全然読んでなかった本。
498ページ / 221.3MB.
- 作者: David Flanagan,村上列
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/08/10
- メディア: 大型本
- 購入: 8人 クリック: 218回
- この商品を含むブログ (10件) を見る
こいつのスキャンが一番時間かかった。ページ数頭おかしい。もちろん持ち歩く気になれなかったものなのでこいつ自炊できてほんとよかった。
842ページ / 310.4MB. (ページ数頭おかしい。)
すべて スーパーファインでスキャン / 表紙・裏表紙カラー / 中身グレーでの結果。
思ったより容量が大分大きいですね。
- 作者: Mark Lutz,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/26
- メディア: 大型本
- 購入: 11人 クリック: 381回
- この商品を含むブログ (111件) を見る
参考までに、もとより電子版で購入したこいつは
809ページ / 4.7MB.
差でかい・・・
まあ電子版で配布しているものは当然原稿データのまま配布しているだろうと思うので、所詮画像であるスキャンしたpdfとは差があるものなのでしょう。
容量下げたい方はスーパーファインより低めのものにしてみるのも一手かも。
OCRつけたときの精度とか、単純な綺麗さがどの程度落ちるのかはわかりませんが。
はてな記法って設定でつかえるようになるんですね
[日記][漫画]
後輩が「はてな記法でかけないじゃんプププ」っていってたけど設定でできたわ。
あとはてなに登録するの初めてだし使い方よくわからんわ。
とりあえず見出しが使えるからそれでよしとする。
日記というものを続けたいのだけれど、特にかくことがないのである。
備忘録的なものはevernoteにまとめるようにしているので、なおさら書く事がない。
日常を記すことが重要なのはわかっているのだけれど。
とりあえず最近読んだ漫画をメモることにする。
少年ノート
現在2巻まで。未完。
音にすごく敏感な少年が中学から合唱部に入って音の素晴らしさと危うさに振り回されて泣いたり笑ったり泣いたりオペラやったりする話。
泣いたりが2回なのは嬉し泣きと悲し泣きがあるから。
共感覚もちみたいな少年が主人公。その共感覚による「宇宙の音がする」のような発言にギャラリーが「ほぉ・・・」みたいな顔するのが定番化している漫画。
たぶん音の色を暗号にして迷路攻略とかできるんだと思う。
主人公の話より周りの脇役がメインの話のほうが面白いのでそっち多めに話展開してほしい。
結構面白い。
強制ヒーロー
全3巻。完結。(頭痛が痛いみたいな表現である)
徴制令という国民に警察の権限を一時的に与えて犯罪を取り締まるっていう制度が実施。
その第一回目の国民に選ばれたサラリーマンが嫌々ながらも愉快な仲間たちと警察の真似事をしていく話。
徴制令に選ばれた人たちは全員色がついた名前をしていて(主人公の名前は青田とか)、国がどんな選出法をとったのか疑問である。
一応一般市民が対象なので、対象者を保護するためにパワードスーツみたいなものが支給される。
これを着たらめっちゃ強くなる。ガンツスーツみたいなもん。
俺なら着るときに「着装!」って絶対叫ぶけどみんな普通に着てた。
最後のシーンを書くために作ったのではと思えるような漫画。まあありがちな終わりだけど好きな終わり方だった。
主人公が短期間の間にちょっとだけ成長する話が好き。あまりでかく成長しすぎると違和感ある。ファンタジーは別だけど。
桜子さんだけあんまりキャラ掘り下げられてなかったのと、赤木さんのその後だけ気になるけど読みやすかった。
鉄楽レトラ
現在1巻まで。未完。
無駄にプライドが高い割に才能ないせいで友達(もどき)をバスケで怪我させた無気力ぼっちが一念発起してフラメンコはじめる話。
らしけどまだ今のところフラメンコ教室に泣きついただけ。
1巻の完成度高すぎてこれで最後にちょっとフラメンコやるだけでキレイにまとめられると思う。
妹と和解するシーンはたぶん読んだ人みんな泣いたのではないのだろうか。
泣いたんちゃうやろか。
妹天使すぎる。
最近読んだ漫画では一番よかったけど、前述の通り1巻での完成度が高いので今後どうなるか期待半分不安半分な漫画。
新しめの漫画だとこのへんだろうか。エアギアとか今日買ったけどカズ様マジ主役くらいしか言うことない。
Niigata.pmの忘年会2011(ニーゼロイチイチ)に潜入してきた。
時は2011/12/10(サタデー)。
こちらに参加してきました。アルバイト先の後輩@aokcub君と一緒に。
今回は忘年会なので詳しいレポートっていうほどのこともなく、
「みんなが一枚LTして交流深めよう、新潟でもperlハッカーぐいぐい行こうぜ!」
っていう企画。(で、あってますよね?w)
それぞれどんなLTだったかっていうのは他の方がしっかりメモってくださってるので、申し訳ないですが自分は感想だけ。
とりあえず思ったことは
「技術者ってすげー。かっけー。」
のひとことに集約されている。
正直会話についていけない部分とか大いにあって、技術的な会話のときは
ウンウン頷くことしかできなかったのが多いのですが(笑)
その技術的な会話を楽しそうに話す様子はかっけーのひとことであり、
このような会話に平然と混ざれるような技術者になりたいなーと思えた一日でした。
東京にいったらエンジニアとして働く訳なので、努力必須であります。
あと、技術的な部分で知識が負けているのは相手はプロの方だし自分の勉強不足が問題なので
よいのですが、自分の一番の趣味である漫画の知識がまったく通用しなかったことは
地味にショックだったかもしれないw
いいんだ。俺は少年漫画が大好きなんだ。そう思った一日でもあります。
もしかしたら新潟に住んでる間にはもう参加できる機会がないかもしれませんが、
自分の初めて参加した技術的な交流会(とはいっても飲み会ですがw)だったので
大切にしていきたいなーと思いました。
このような場を提供してくれた@neko_gata_sさんをはじめ、参加者のみなさまに感謝!
ちなみにみなさん何らかのデモとか色々用意してくださってたのに
自分は本当に自己紹介だけで終わらせてしまったのが心残り。なんかつくっていけばよかったー