2015年振り返り
2015年について振り返ってみたいと思います。ちなみに、去年は2014年振り返り - n3104のブログでした。
ビッグデータチームのリーダーを担当した
2015年の前半は社内のビッグデータチームのリーダーを担当していました。主にやったのがプリセールスと全体のアサイン管理、個別プロジェクトの立ち上げです。案件によっては立ち上げだけでなくリーダーとしてお客様の窓口を担当したりしていました。後はサービスの設計とか作業の標準化の推進とかいろいろやってました。振り返りとしては以下になります。
- 初めてのお客様と話すことに慣れた気がする(内心冷や汗かかきながらではありますが)
- ビッグデータという切り口なので似たような案件なこともあり、お客様が困っている点の共通点が分かるようになった
- AWSやTableauについても多少詳しくなった(DXやRedshift、Tableau Server辺り)
- 新規の事業を作っていく過程について経験した
半年で10社ぐらい担当したのですが、やはり同じ領域で複数の案件を担当するのは大きいなと思いました。全体として見ると共通する部分と違う部分があり、どの辺りが共通の課題であったり技術要素であるのか分かるので。何よりいろいろなお客様の話を聞けるのが楽しいです。
後はエンジニア側のリーダーとして新規の事業を作っていく過程に立ち会えたのは大きいと思っています。ほんと最初はふわっとした所から徐々に形作っていくものだということがよく分かりました。全体としての方向性は決めつつも、後は臨機応変にやるものなんだなーと(事業によっては最初に事業計画を立てて、それを執行していくみたいな形でできるケースもあるのかもしれませんが)。後は、条件付きOKを出すということも大きな学びです。いろいろと課題が続出して、なので「やれない」と言いたくなるのですが、そうではなくて「こういう条件ならやれる」と回答することが重要なんだと実感しました。この辺りについては一緒にやっていた営業側のリーダーに色々と教えてもらい感謝しています。
データ分析チームを立ち上げた
2015年の後半はデータ分析チームというものを立ち上げました。具体的には4月にAmazon MLがリリースされたことに伴い、Amazon MLを利用した機械学習案件に取り組むようになりました。私自身はリーダーとしてプリセールス、個別案件のお客様との窓口を中心にやっていました。後はマーケティングとしてブログと登壇もやったりしました。とりあえず分かったのはデータ分析系の案件は自分にとって面白いということです。どの案件もその業務ドメインについて色々と知れるのも楽しいですし、仕組みについて検討するのも楽しいです。
新規に事業を立ち上げるという部分については、まだまだ立ち上げ中という感じではありますが、半年ぐらいでまったくゼロから立ち上げたにしてはそこそこ形になってきたかなと思っています。お客様とメンバーと会社に恵まれたなーと思ってます。あと、ブログとか登壇はほんと大きいなと思っていて、積み上げていくとそれだけでマーケティングにもなるし営業資料に使えるなーとw 何より自分自身の勉強にもなりますし、今後も継続していきたいと考えています。
ちなみに、会社ブログで機械学習関係は12本書いてました。機械学習そのものではなくてAmazon MLの機能に関するものが大半ですが(^_^;)
- SAP Predictive Analyticsの予測APIをAWS Lambdaを使って実現 | Developers.IO
- 良品計画様とAmazon Machine LearningのPoCを実施しました | Developers.IO
- Amazon Machine Learningでサザエさんじゃんけんを予測してみた | Developers.IO
- Amazon Machine Learningでバッチ予測の実行前に利用費が表示されるようになりました | Developers.IO
- FIT2015でAmazon Machine Learningの概要について話してきました | Developers.IO
- (レポート) BDT302: Amazon Machine Learningを使ったリアルワールドスマートアプリケーション #reinvent | Developers.IO
- RDS for MySQLでAmazon Machine LearningのDatasourceを作ってみた | Developers.IO
- Amazon AuroraでAmazon Machine LearningのDatasourceを作ってみた | Developers.IO
- EMR上でZeppelinとSparkを使ってレコメンデーション | Developers.IO
- マネジメントコンソール上でAmazon Machine Learningのリアルタイム予測を試せるようになりました | Developers.IO
- Amazon Machine Learningを利用したコンテンツの出し分け #アドカレ2015 | Developers.IO
- Amazon RedshiftでAmazon Machine LearningのDatasourceを作ってみた | Developers.IO
登壇
3回やりました。今後も機械学習関連のネタで登壇していければと考えています。
- 大晦日のメッセージ配信の裏側
- 「Tez on EMRを試してみた」というタイトルで話しました #cmdevio2015G | Developers.IO
- FIT2015でAmazon Machine Learningの概要について話してきました | Developers.IO
Hadoop
実務としては触らないで終わりました。勉強会もタイミングが合わず2回しか行けませんでした。会社ブログで振り返ると7本書いてました。
- EMR起動時に任意のソフトウェアを追加するには | Developers.IO
- 「Tez on EMRを試してみた」というタイトルで話しました #cmdevio2015G | Developers.IO
- AWSチーム社内勉強会「EMRおじさんに聞いてみよう」レポート | Developers.IO
- (レポート) BDT309: Amazon EMR上でデータサイエンスのためにApache Sparkを利用する際のベストプラクティス #reinvent | Developers.IO
- EMR上でZeppelinとSparkを使ってレコメンデーション | Developers.IO
- Amazon Elastic MapReduceのリリースバージョンの差異 | Developers.IO
- AWS再入門 Amazon Elastic MapReduce編 | Developers.IO
Tezの調査は面白かったです。YARNとかTezのソースを読んだりしつつ、EMRの挙動とかも調査したりしてました。あとはSparkですね。こちらは今後は本格的に使っていくことになるんじゃないかなと思ってます。あと次の機械学習にも関わりますがMahout in Actionの読書会もやったりしてました。
機械学習
半年ぐらいでかなり成長したなと思います。前職の頃から機械学習とか統計学について興味があって入門書を読んだりしていたのですが、実務経験はありませんでした。そのため正直どう進めればいいのか手探りでしたが、いまは案件の進め方は分かるところまで来たと思います。今後は理論面の強化と実務経験で引き出しを増やしていくという両方が必要だと感じていますが、とりあえず「やったことないからやれない」の壁は超えられたかなと思ってます。いやー、ほんと上手く行ってよかった(^_^;)
理論面の強化という点では社内で 統計学のための数学入門30講 (科学のことばとしての数学)の読書会をやっていて、半年かけてやっと25講ぐらいまで来ました。高校数学で挫折した状況だったので、いつも同僚の数学に詳しいメンバーに教えてもらっていて感謝しています。今後も数学の勉強を続けて、いつか数式の登場するようなブログを書きたいなと思っています。
あと機械学習は今まで積み上げてきたソフトウェア開発のスキルとはベクトルが異なるので、久しぶりにゼロから学習していくという経験も新鮮でした。ソフトウェア開発でそれなりにスキルが身についたと思えるようになるのに10年かかったので、機械学習も同じく10年ぐらいはかかるんだろうなーと思い、気長に取り組んでいくつもりです。
まとめ
他にも色々あり、2015年も非常に濃密な1年だったと思います。おかげさまで成長を感じられましたし、今後も学びたいことだらけなので、今年も充実した1年を過ごせればと思っています。
Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク
Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)
- 作者: 株式会社NTTデータ,猿田浩輔,土橋昌,吉田耕陽,佐々木徹,都築正宜,下垣徹
- 出版社/メーカー: 翔泳社
- 発売日: 2015/10/29
- メディア: 大型本
- この商品を含むブログを見る
初めてのSparkを読み終わったので、次にApache Spark入門も読んでみました。こちらも非常に読みやすかったです。Apache Spark入門は初めてのSparkの後に出版されていることもあり、Sparkのバージョンも1.5となっており、Spark SQLの説明がDataFrame API前提となり、MLlibではmlパッケージについての説明もありました。またSpark Rについての解説もありました。
初めてのSparkと比べてインフラ周りの説明も丁寧に書いてある印象でした。また、基本APIやSpark SQLのようなライブラリの説明についてユースケースを想定して主要なAPIの説明するスタイルでした。一方、初めてのSparkは網羅的に書かれている印象でした。なお、一番大きな違いとして初めてのSparkは Python / Scala / Java の3種類のソースで解説していることに対して、Apache Spark入門はScalaのみでした(公式ドキュメントは Python / Scala / Java の3種類が載っています)。
これから読む人にどちらを読んだらいいと聞かれたら、両方読めるなら両方読んだ方がいいと回答すると思います。記述している内容が異なる部分が結構あるので。どうしても片方というなら、基本的にはApache Spark入門をすすめます。Sparkの進化が早いのでなるべく最新バージョンに近い書籍の方がよいと考えるからです(初めてのSparkの原著が出版された2015年1月時点のSparkの最新は1.2でした。そこから3回バージョンアップされてます。。)。ただ、繰り返しますが、両方読めるなら両方読んだ方がいいと思います。
初めてのSpark
- 作者: Holden Karau,Andy Konwinski,Patrick Wendell,Matei Zaharia,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/08/22
- メディア: 大型本
- この商品を含むブログ (3件) を見る
そろそろSparkを使いたくなってきたのでここ2週間ぐらいで一気に読みました。一言で言うと非常に読みやすかったです。一部わからなかった所はありますが、そちらは実際にサンプルコードを見たり動かしたりすれば分かるだろうなという感じでした。
Hadoop 第3版のようにアーキテクチャの詳細に触れているかと思っていたのですが、インフラやアーキテクチャ寄りのことはあまり書いてなくて、Sparkを使ってアプリケーションを構築する人向けの本という印象でした。そもそもページ数も本編で240ページ程度しかなく、更にサンプルのソースコードがPython、Scala、Javaで3通り書かれていることもあり、実際にはもう少し薄く感じました。とはいえ、記録によると一通り読むのに5時間近くかかってましたが。。w
とりあえずSparkの使い方を押さえるという意味では非常に有用だと思いました。次はApache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)を読んでみるつもりです(読みました)。
なお、元々Hadoop周りを触ったことがない場合はアーキテクチャ周りについてはSparkを実際に使いながら調べていくという方針で気にせず読んだ方がいいのかなとは思いました。私自身は仕事でMapReduce Javaを使ったアプリケーションを書いていた時期がありますし、Sparkの概要については別途学習していてRDDや系統グラフも知っている状態でした。逆にSparkのAPIとかアプリケーションの書き方を知らない状態でした。ですので、本書に詳細が書かれていない範囲についての事前知識があったので読みやすかったというのはあると思います。
ちなみに、「11章 MLlibを使った機械学習」に書いてあることが6割ぐらいは分かるようになっていて、この1年ぐらいで機械学習周りの知識と経験がそれなりに付いたんだなーとちょっと感動してましたw
よくわかる心理統計 (やわらかアカデミズム・わかるシリーズ)
よくわかる心理統計 (やわらかアカデミズム・わかるシリーズ)
- 作者: 山田剛史,村井潤一郎
- 出版社/メーカー: ミネルヴァ書房
- 発売日: 2004/09
- メディア: 単行本
- 購入: 12人 クリック: 108回
- この商品を含むブログ (28件) を見る
Rによるやさしい統計学の中でよく取り上げられていたので副読本として購入してみました。非常に読みやすくて、個人的には買って良かったです。著者が同じで、まず「よくわかる心理統計 」(2004年9月)を書いた上で、「Rによるやさしい統計学」(2008年1月)を書いており、「Rによるやさしい統計学」で説明が省略されている部分についても書いてあるので理解が深まりました。
内容としてはRによるやさしい統計学の7章(第一部)までに対応した内容が書かれています。最初に理系ではない入門者向けに分かりやすい内容を目指したと書かれている通り、見開きで分かりやすくまとまっていました(数式もほぼ出てきません)。統計学の入門書は何冊か読みましたが、その中でも読みやすい印象でした。また、最後に統計をより深く学ぶ上でおすすめの本が紹介されており、1冊ずつどのような観点ですすめるのか具体的なコメントが書かれていてよかったです。
数式が少ない入門書は何冊か読んでいるので、次はもう少し数式が出てくる入門書に取り組んでみるつもりです。
Homomorphic encryption(準同型暗号)
暗号化したデータでそのまま計算するHomomorphic encryptionなんていう世界があるんですねー(゚д゚)! Machine Learning Classification over Encrypted Data(PDF) http://t.co/y5fyRKwCnt
— Satoshi Noto (@n3104) 2015, 3月 7
上記のツイートをした通りで、Homomorphic encryption、日本語で「準同型暗号」というものがあるそうで、要は暗号化したままのデータで足し算とか掛け算を行うもののようです。
- 準同型暗号 - Wikipedia
- Fully homomorphic encryption 完全準同型暗号の流れとか(その後)
- プレスリリース | クラウド向け暗号技術の安全性評価で世界新記録を達成 | NICT-独立行政法人 情報通信研究機構
Machine Learning Classification over Encrypted Dataでは病気の判定を機械学習で行う際に、利用者の個人情報を守る観点で暗号化したままトレーニングと判定の両方を行う方法について書いてあるっぽいです。Hadoop界隈でも2, 3年ぐらい前からセキュリティ周りの機能強化みたいな話があって、あまり関係ない話だなーと思っていたのですが、最近は仕事で個人情報とかセキュリティ対策みたいな話が出てくることがあり、ちょっと気になって調べてみました。将来的には暗号化したままデータを扱うというのも普通のことになるんですかねー。
ちなみに、Machine Learning Classification over Encrypted DataについてはO'ReillyのNewslettersのDataに載ってました。毎週10個ぐらいのトピックが送られてきて、タイトル眺めるだけでも流行り?が分かるような気がして気に入ってます。
Rによるやさしい統計学 第1章、第2章
- 作者: 山田剛史,杉澤武俊,村井潤一郎
- 出版社/メーカー: オーム社
- 発売日: 2008/01/25
- メディア: 単行本
- 購入: 64人 クリック: 782回
- この商品を含むブログ (69件) を見る
前提
- Mac 10.9.5
- R 3.1.2
1章
1.3 Rを導入しよう
- http://cran.md.tsukuba.ac.jp/
- http://cran.r-project.org/
- こっちが本家っぽい
- http://cran.r-project.org/
- インストール
- http://cran.md.tsukuba.ac.jp/bin/macosx/
- R-3.1.2-mavericks.pkgをインストール
- R-3.1.2-snowleopard.pkgとR-3.1.2-mavericks.pkgがあったので注意
1.4 Rをさわってみよう
- Rコンソール
- 割り算はint同士?でも小数点以下まで計算する
- tab補完使えた
- log(2, base=10)
- 名前付き引数が使える
- Ctrl+a, Ctrl+eが使える
1.6 Rの使い方のコツ
- varp
- 関数内で最後に評価した結果が戻りとなる模様
- pはpopulation(母集団)のp
- varはvariance(分散)の先頭3文字みたい
- http://aoki2.si.gunma-u.ac.jp/R/index.html
- 大量の関数というかスニペットが存在する。
- 色付きで日本地図とか書ける!
- http://web.sfc.keio.ac.jp/~watanabe/rfunction.htm
- 解説一切なし。
- http://cran.r-project.org/web/packages/
- 6,277あった。。。
- Rcmdr
- XQuartzのインストールが必要がある
- Rを起動する前にXQuartzを起動する必要がある
- [Rパッケージインストーラ]で[依存パッケージも含める]にチェックが必要
Rcmdrを起動するまでの軌跡
- 事前状態はXQuartzをインストールしてない状態。
- RcmdrパッケージでRcmdrだけインストールして試したら以下のエラーとなった。
> library(Rcmdr) 要求されたパッケージ splines をロード中です エラー: パッケージ ‘RcmdrMisc’ が ‘Rcmdr’ によって要求されましたが、見つけられませんでした
- [Rパッケージインストーラ]で[依存パッケージも含める]にチェックを入れて再実行したら以下のエラーとなった。
> library(Rcmdr) 要求されたパッケージ RcmdrMisc をロード中です 要求されたパッケージ car をロード中です 要求されたパッケージ sandwich をロード中です Error : .onLoad は loadNamespace()('tcltk' に対する)の中で失敗しました、詳細は: call: fun(libname, pkgname) error: X11 library is missing: install XQuartz from xquartz.macosforge.org エラー: ‘Rcmdr’ に対するパッケージもしくは名前空間のロードが失敗しました
- XQuartzが必要なことが判明しインストールした。
- http://xquartz.macosforge.org/landing/
- XQuartz-2.7.7.dmg
- ちなみに、よくよく読んだらRのMac用のダウンロードページにちゃんと書いてあったorz
Note: the use of X11 (including tcltk) requires XQuartz to be installed since it is no longer part of OS X. Always re-install XQuartz when upgrading your OS X to a new major version.
- XQuartz.appを起動してから試すと今度は以下のエラーとなった。
> library(Rcmdr) Error : .onAttach は attachNamespace()('Rcmdr' に対する)の中で失敗しました、詳細は: call: structure(.External(.C_dotTclObjv, objv), class = "tclObj") error: [tcl] invalid command name "image". エラー: 'Rcmdr' に対するパッケージもしくは名前空間のロードが失敗しました
- Rを再起動したら起動した
- http://www2.warwick.ac.uk/fac/sci/systemsbiology/facilities/computing/support/limmagui/
" then X11 has probably not started. Try re-starting the R console and X11"
- http://www.jichi.ac.jp/saitama-sct/SaitamaHP.files/statmedOSX.html
- EZRというRコマンダーの拡張パッケージ?のインストール手順が書いてあり分かりやすい。
- app napの設定は様子見することにした。
- http://www2.warwick.ac.uk/fac/sci/systemsbiology/facilities/computing/support/limmagui/
2章
2.2 本書で用いるデータの説明
- http://www.cc.aoyama.ac.jp/~t41338/lecture/aoyama/stat2e/stat2e_top.html
- 入力が面倒なので前述で公開されているshidouhou.csvを利用することにした。
- MS932のCSVをMacで読み取るにはfileEncodingオプションでエンコードを指定すればいい。
- shidouhou.csvがMS932で記述されていたのでそのまま読み込むと文字化けしてしまう。
- http://kingqwert.hatenablog.com/entry/20120618/p1
- 関数のヘルプはhelp関数の引数に関数名を書けばいい
- help(read.csv)
- read.csv("shidouhou.csv", fileEncoding="CP932")
- Shift-JISも使えるがCP932が適切。
- MS932とWindows-31Jはエラーになった。
- Rがサポートするエンコードの一覧は見つけられなかった。。
> 指導法データ <- read.csv("shidouhou.csv", fileEncoding="CP932") > 指導法データ SID name sex math stat psych_test stat_test1 stat_test2 method 1 1 大村 男 嫌い 好き 13 6 10 C 2 2 本多 男 嫌い 好き 14 10 13 B 3 3 川崎 男 好き 好き 7 6 8 B 4 4 多村 男 好き 好き 12 10 15 A 5 5 松中 男 嫌い 嫌い 10 5 8 B 6 6 小久保 男 嫌い 嫌い 6 3 6 C 7 7 柴原 男 嫌い 嫌い 8 5 9 A 8 8 井手 男 嫌い 嫌い 15 9 10 D 9 9 田上 男 嫌い 嫌い 4 3 7 D 10 10 松田 男 好き 嫌い 14 3 3 D 11 11 高谷 女 好き 好き 9 11 18 A 12 12 杉内 女 嫌い 好き 6 6 14 A 13 13 和田 女 好き 好き 10 11 18 A 14 14 新垣 女 嫌い 嫌い 12 9 11 C 15 15 大隣 女 嫌い 好き 5 7 12 B 16 16 水田 女 好き 嫌い 12 5 5 D 17 17 斉藤 女 嫌い 嫌い 8 8 7 C 18 18 柳瀬 女 嫌い 嫌い 8 7 12 C 19 19 佐藤 女 嫌い 嫌い 12 7 7 B 20 20 馬原 女 嫌い 嫌い 15 9 7 D
2.4 データの視覚的表現
- 指導法オブジェクトは
t(指導法データ["method"])
で作成できる。- そのまま
指導法データ["method"]
だと列データなので、t関数で行データに変換する(転置行列)。 - tはtranspose(転置する)
- そのまま
> 指導法 <- t(指導法データ["method"]) > 指導法 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] method "C" "B" "B" "A" "B" "C" "A" "D" "D" "D" "A" "A" "A" "C" "B" "D" "C" "C" "B" "D" > table(指導法) 指導法 A B C D 5 5 5 5
- hist関数はフォントファミリーを指定しないと日本語が文字化けする。
hist(心理学テスト, family="HiraKakuProN-W3")
- http://www.karada-good.net/analyticsr/r-58/
- hist関数のヘルプにfamily引数の記述はなかったが[...]の所に[graphical parameters]のリンクがあって、[Set or Query Graphical Parameters]の中にfamilyに関する記述があった
2.10 標準化
- z得点(z score)というか標準化はscale関数で出来る。
t(scale(指導法データ["stat_test1"]))
- scale関数は列を処理する。書籍では行を処理する例であったため、最初
scale(t(指導法データ["stat_test1"]))
にしたら全部NaNになったw - http://rtutorialseries.blogspot.jp/2012/03/r-tutorial-series-centering-variables.html
- http://www.statmethods.net/management/functions.html
- ここでscale関数がz得点に使えるのが分かった。関数が端的にまとまっていてよさげ
t(scale(指導法データ["stat_test1"],center = FALSE, scale = FALSE))
にすると当然だが値が全く変化しない- falseは参照エラーになる。TRUE/FALSEが最初から用意されているグローバル定数らしい
> t(scale(指導法データ["stat_test1"])) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] stat_test1 -0.3883216 1.164965 -0.3883216 1.164965 -0.7766432 -1.553286 -0.7766432 0.7766432 -1.553286 -1.553286 1.553286 -0.3883216 [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] stat_test1 1.553286 0.7766432 0 -0.7766432 0.3883216 0 0 0.7766432 attr(,"scaled:center") stat_test1 7 attr(,"scaled:scale") stat_test1 2.575185 > t(scale(指導法データ["stat_test1"],center = FALSE, scale = FALSE)) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] stat_test1 6 10 6 10 5 3 5 9 3 3 11 6 11 9 7 5 8 7 7 9 > scale(t(指導法データ["stat_test1"])) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] stat_test1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN attr(,"scaled:center") [1] 6 10 6 10 5 3 5 9 3 3 11 6 11 9 7 5 8 7 7 9 attr(,"scaled:scale") [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2014年振り返り
もう年が明けてますが、2014年について振り返っておきます。
- スマフォ向けWebアプリを作った
- アジャイルデータサイエンスの付録を書いた
- fullbokをがっつり使ってみた
- EMRを触った
ちなみに、去年は年末年始に仕事があってタイミングを逃して振り返りを書けませんでした。今年はその反省を活かして振り返りを書けて良かったです(今年も年末に仕事自体はしてたんですが、同僚のおかげで去年よりも忙しくなかったというのもあります。同僚の◯◯さん、ほんとありがとうございます!おかげさまで今年は嫁の実家に正月の挨拶に行けましたm(__)m)。
スマフォ向けWebアプリを作った
クライアント側はCreateJSを使ったCanvasベースのWebアプリで、サーバー側はNode.jsで、通信はSocket.IOみたいなものを1年ほどメンテしていました。どちらも他の方にベースを作ってもらったので私自身がスクラッチから作ったわけではないのですが、なるほどなーという感じでした。
クライアント側の開発にはMiddleman, Haml, SCSS, CoffeeScriptも使っていて、色々便利になってるなーという印象でした。まぁ、CoffeeScriptはあまり好きになれず、結局生成されたJS眺めてデバッグしてましたがw
当然実機のテストもするわけでiOSとAndroidそれぞれテストして複数端末対応の厳しさを実感したりしました。iOS系はブラウザの挙動自体は安定してたんですが、端末によってアスペクト比が違ったり、iOSのバージョンによってSafariの描画領域のサイズが違ったり、横向きの場合のどうするかとか色々悩まされました。Androidに関しては標準ブラウウザがまともに動かなかったり、端末によって利用できる音声フォーマットに差があったり、そもそもスペックが低くてfpsの調整したりとかしてました。
インフラ構築/運用の部分もメンテしていて、やはり他の方にCloudFormationのテンプレートを作成してもらったのですが、これまた便利だなーという感じでした。S3やCloudFrontの使い方についても覚えたりした感じで、一部は会社のブログに書いたりしてました。
- S3のRedirection Rulesを利用してリダイレクトする | Developers.IO
- [新機能] Amazon CloudFrontがCORSに対応しました | Developers.IO
アジャイルデータサイエンスの付録を書いた
縁あってアジャイルデータサイエンスの付録を書かせていただきました。
「アジャイルデータサイエンス」の付録を寄稿しました | Developers.IO
付録を書く上で本文を原著で読んだのはいい経験でした。仕事上、英語のドキュメントをちょこっと読むことはありますが、あれだけまとまった分量のものを読んだ経験はなかったので、読もうと思えば読めるという自信?を持てました。まぁ、面倒なのでほぼ辞書は引かずに読める範囲をフィーリングで読んでたので理解度は怪しいですが(^_^;)一応、社内向けにConfluenceに要約書いたり、Pigのコードについても読み込んだりして、色々勉強になりました。
付録のFluentdに関しても使ったことはあっても特に詳しいわけではなかったので、ドキュメントをがっつり読んだりソースをちょこちょこ読んで理解が深まって良かったです。あとFluentdはほんとネット上のリソースが充実しているので、何を書いたものか悩ましかったりしました。
fullbokをがっつり使ってみた
負荷試験用にJMeterクラスタを構築できるfullbokというツールがあるんですが、こちらを使ってCloudFrontへ負荷試験やったりしました。
CM re:Growth 2014 Tokyoで負荷試験ツールであるfullbokについて話しました #cmdevio | Developers.IO
OriginがAMS(Adobe Media Server)でHDSとかHLSについて調べたりしました。あと、CloudFrontに関してはかなり詳しくなった気がします。
EMRを触った
Hadoop好きと名乗ってたりするのですが、おかげさまでEMRの導入支援案件をやったりしました。あと、何度かHadoop関係の勉強会に参加したりしました。
- Hadoopソースコードリーディング 第16回に参加してきました | Developers.IO
- Hadoop Conference Japan 2014に参加してきました | Developers.IO
- EMRのAMI Verison3系でAWS-CLIを利用する際はBootstrap Actionの指定が必要 | Developers.IO
- EMR上でMahoutを使ってレコメンデーション | Developers.IO
- Hadoopソースコードリーディング 第17回に参加してきました | Developers.IO
その割にはHadoop関連のブログは上の5本しか書いていないわけで、今年はもうちょっと書いていこうと考えています。
Edisonのブログを書いて思うのは、知ってる人からするとほんと簡単なことなんだろうけど、知らない人からすると参考になるんだろうなーということ。自分がある程度詳しい分野は逆に書きづらくて書けなかったけど、知らない人はいるのだからもっと気軽に書けばいいんだな―と思ったりした。
— Satoshi Noto (@n3104) December 10, 2014
前述は Groveの温度センサーをEdisonにつないでみた | Developers.IOというエントリーを書いた際に思ったことなんですが、やはりHadoop関係は中途半端に知っているだけにブログを書きづらかったというのがありました(ブログのエントリー数が少ないのはそもそも仕事の忙しさに負けているというのもあるのですが)。ですが、全くHadoopやEMRを知らない人向けにブログを書くのは、それはそれで意味があることかなーと思い、今年はHadoopやEMR関連のエントリーを書いていくつもりです。
まとめ
振り返ってみると今年も色々と勉強したなーと思います。今年は定年(35歳)になりますが、おかげさまで毎年成長を感じられていますし、今後も学びたいことだらけだったりします。目標という意味では毎年思うのですが、今年こそはもうちょっとアウトプットを増やせるといいかなーと思ってます。