エンジニアになりたい

立派なエンジニアに憧れるへっぽこエンジニアのメモ書き

LL Diver レポート

日時:8月23日
場所:日本科学未来館

聞いたセッションは以下

  1. Angular.jsをメインに開発した note にてついて
  2. それでもNode.jsをやる
  3. GMOペパボのエンジニア新人研修
  4. mozaic.fm 出張版: TypeScript and Dart
  5. アプリケーションのIPv6対応のススメ
  6. サイバー戦争 2014年から未来へ
  7. LL短歌

Angular.jsをメインに開発した note にてついて

開発環境

  • RoR + angular

注目すべき点

SEO対策

  • Phantom JS で Angularをレンダリングする荒技を検討 -> 断念
  • サーバーサイドで返すように修正

Future of JS

  • HTML/JS分離の時代から、HTML + JSの部品の時代へ
  • Googleさんの時代
    • Polymer -> 部品化、再利用性の向上
    • Dart -> JSのパフォーマンス向上
    • HTTP2.0(SPDY) -> セキュア、つなぎっぱ
    • Wear -> どこでも、どのデバイスでも

スライドURL

http://www.slideshare.net/takamario/20140823-ll-divertakamaruangularnote

それでもNode.jsをやる

歴史的な話

  • C10K問題 2001年ころ
    • 1万台のクライアントが一度に接続したらサーバが死ぬ
    • アパッチ:接続のたびにスレッド、プロセス立ち上げ
    • シンプルなhttpリクエストなら1台のサーバで10kもさばかないが
      ロングポーリングでコネクションをつなぎっぱなしとかだと問題が起きる
    • Nginxの出現でイベントループが流行り出す
    • Ruby等の言語でもイベントループも出るが採用されだす
    • しかしRuby等にはIOの同期処理があり、イベントループが台無し
  • V8 2008年ころ
    • これまでのjs処理: 構文解析 -> 実行 = 遅い
    • V8: 動的にマシン語に変換 -> 実行 = めっちゃ早い
  • Node開発者が必要としていたもの
    • C10Kを解決するイベントループ
    • 高速な非同期I/Oとそれを強制可能な言語
    • 早い処理系

Node.jsとは

  • 非同期ライブラリとインベントループモデル で動く高速かつ省リソーなJavaScript実行環境
  • WebSocket,SSEのようにコネクションを張りっぱなしにするものと親和性が高い
  • 何にでも向くわけではない

TJがGOに移った理由

  • 分散環境でたくさんのサーバと協調する仕組みにNodeが向かなかった.
  • Webアプリを作るなら使用し続ける

スライドURL

https://speakerdeck.com/yosuke_furukawa/soredemonode-dot-jswoyaru

GMOペパボのエンジニア新人研修

研修を行う意味

  • ビジョンにどうやって到達するか
  • 経営資源: 人、物、金
  • ひとを育てる

エンジニアキャリア

  • チーフエンジニア
  • アドバンスエンジニア
  • シニアエンジニア
  • 一般エンジニア
  • 新人

新卒採用

  • 社会への入り口
  • 新卒を採用する企業は適切なスキルを身につけるように導く社会的責任を負っている

研修方針

  • 問題はさておき、まずは理想的な開発について教える

スキルの内訳

  • 知識スキル
    • エンジニア一般に期待される知識
    • 現場固有の知識
  • 行動スキル
    • 社会人一般
    • 会社固有

知識スキル

  • Webアプリ開発の基礎
    • Railsチュートリアル(原書)
    • 先輩エンジニアによる支援
      • 読書会
      • 現座ので得た知見
    • Puppetを使って構築
    • 開発スタイルの習慣
  • デザイナとの協同

行動スキル

  • みんなと仲良くするこkと
  • ファンを増やすこと
  • アウトプットすること

学習モデル

  • 前提
    • 学習転移モデル
      • 確立した知識
    • 経験学習モデル
      • 経験で学ぶ
  • 徒弟制: アプレンティスシップ
    1. モデリング
    2. コーチン
    3. スキャフォルディング
    4. フェーディング
  • 正当的周辺参加
    • 仕事の中での学び
    • 共同体への参加
  • トロイの木馬
    • 現場に送り込み、いい習慣・プラクティスを広げていく
    • 現場に新しい風を吹き込む
  • 式年遷宮
    • 20年ごとに作り替える
    • 定期的に繰り返すことで伝承する

まとめ

  • 経営のビジョンの元にある
  • キャリアプランを支援する
  • 知識スキル、行動スキル
  • 知識の伝達と経験による学習をミックス
  • 会社という共同体 へうまく巻き込む

QA

  • 新人側がやる気をだすことが大事。エンジニアスペシフィック。
  • 教える側が楽しそうにする,雰囲気作り

スライドURL

http://blog.kentarok.org/entry/2014/08/23/145417

altJS 出張版 #mozaicfm

参考URL

mozaic.fm http://mozaic.fm/
わかめさんのQiita http://qiita.com/vvakame/items/ae198ac3589f569d043b

安藤さん Dart

  • dartは大規模開発向け
  • C#,Javaに書き方は似ている
  • Typescriptは現実で、Dartは夢
  • サーバ側で動くDart VM
  • クライアント、サーバどちらも同じ言語で書けるのが理想。それを目指している。
  • androidDartで書ける
  • エコシステムがいい
  • Dartが吐くJSを読まなければならなくなったら負け。
  • Dartが死ねば、Dartとともに滅びる
  • Dartは既存のものを一から作り直す。Angular Dartとか。
  • Dart VMの開発者はV8の開発者。パフォーマンスではDartが勝つ。
  • Real Worldではまだ使用できない
  • coffeescriptは過去

わかめさん Typescript

  • おかしな変更を加えるとコンパイラが検知するのでリファクタリングしやすい
  • 型があるから使っている
  • 結局JSの勉強が必要なため、もし型が無ければ使う理由はあまりない。
  • Typescriptが吐いたJSは読めるのでTypescriptが死んでも生き残れる
  • ES6,7で機能が充実して型ももちはじめたらTypescriptはいらなくなるかも
  • ただし、型定義ファイルで既存のライブラリにも型を定義できるような仕様はESに入らないのでは無いか
  • 既存のライブラリに型をつけられる。
  • 型定義ファイルをみればどんなAPIかわかる。ドキュメントとしての型定義ファイル。
  • ESのスーパーセットのため余計なものはいれない -> ESに追従できる
  • JSにできないことはできない。Dartはできる。
  • coffeescriptというかRuby的な書き方が好きではない

アプリケーションのIPv6対応のススメ

サイバー戦争2014年から未来へ

Stuxnet以降の最新ウイルス BadBIOS

  • インターネットにつながっていないところへ攻撃
  • マイクとスピーカを使って超音波で攻撃

MITで学んだこと

  • ICチップの中にバッグドアがあったりする
  • Smart Phoneの充電器からウィルス

サイバー攻撃

QA

  • Q: 日本では攻撃に関して学びにくいが海外では

LL短歌

第1回スポーツIT勉強会 メモ

勉強会のメモです。本当にメモ程度です。

日時:8月22日
場所:国立スポーツ科学センター

JISS(国立スポーツ科学センター)について

開催の背景

  • スポーツITでは、新技術開発が必要になる場面が多い
  • 新技術開発では複数で協力した方がいい
  • 今までそういう場がなかった
  • ねらい
    • 情報提供
    • 情報共有
    • コミュニティ生成

テーマ

  • スポーツITとは何か
  • スポーツITの地図作り

スポーツIT はじめの一歩

  • 講演者: 伊藤浩志さん

競技現場のニーズ

  • パフォーマンスの最適化
    • 動作の客観的評価
    • 戦術の定量的評価
  • トレーニングの最適化
    • トレーニングの内容、効果の評価
    • コンディション
  • コーチングの最適化
    • 情報提供
    • アカデミー支援(コーチ養成)

パフォーマンスの最適化

  • シンクロの動画のフィードバックからはじまる(2001年)
  • 映像フィードバックの進化
    • テープからRAMへのデジタル化
    • ネットワーク: カメラでとってタブレットに転送(それまではカメラの小さい画面でみていた)
    • 映像配信 : サーバに飛ばして複数でみる
  • 映像のアーカイブ
    • MediaEdge with JISS製検索システム
    • SMARTシステム JISS製
  • スポーツ映像の再生
    • スロー再生、コマ再生、区間リピート、マルチ画面
    • JISS製 映像再生アプリケーション
      • SMART edge
      • BOOST /video
      • Dual Player
  • スポーツ映像のメタデータ(検索に使用)
    • 現在はスポーツ用のメタデータのフォーマットがほぼない(音楽ではある)
    • Key-Valueストア
    • 映像情報
    • シーン情報
    • ローカル環境ではID3タグ(ID3v2)の活用 (iTunesで分けてくれたりする)
      アーティストというカテゴリに選手名をいれたり
    • NASに保存した映像のメタデータを解析して、検索できるようなシステムにメタデータを使用している
  • 映像分析によるパフォーマンスの定量化
    • パフォーマンスを数値化する
    • 作業コストが高い
    • 座標を読み取りのツールコストも高い
  • センサーによるパフォーマンスの定量化
    • 動作計測のためのモーションセンサー
    • 位置/高度/速度計測 GPS受信機

ITとトレーニングの最適化

  • 50M走を万歩計で計っても歩数はずれる
  • Webによるコンディション情報の共有
    • 収集コストの低減
    • 遠隔管理
    • Meal Diary(食事管理:写真をとって栄養士がみる) JISS module
      • 栄養士は写真をみれば塩の量とかまでわかるらしい
  • Web情報の自動収集
    • 気象データ(セーリング)
      • 風の予想とか
    • リザルト(バレーボール、スピードスケート)
      • 過去数年のサイトに公開されている情報を収集
    • 現状は完全カスタマイズで作成している
    • JISS CMSを開発中

まとめ

  • スポーツにおけるIT利用のスパイラル
    • 利用、応用、制作、新技術
  • 製品化されているものをまず使う
  • 他の製品と組み合わせる
  • ニーズを満たすものを作成
  • 新技術がでる

  • 応用開発: 競技現場への直接的貢献

    • IOT (バスケットボールにチップが入っていたり)
    • M to M
    • ウェアラブル
  • 研究開発: スポーツITの基盤強化

  • 動画配信系の技術の話

    • 動画データベース、タグ付けと検索、トリック再生、圧縮技術、ライブ動画配信
  • 計測技術
  • 解析技術
  • 運用技術

東京Node学園 14時限目 メモ

勉強会のメモをとり始めました。 本当にメモ程度ですが。

日時:8月19日
場所:ヒカリエ DeNAセミナールーム

Synthについて

  • APIファーストなWAF

  • プリロード

    • クライアントサイドMV*の問題
      • ページロードしてもコンテンツが表示されない(はじめにデータを取得する必要がある)
      • HTMLにデータをバインドしたものをそのまま返す
        • 最初にAjaxでデータを再取得しなくていい
      • Promiseを使用して実現

まとめ

APIファース
プリロード
promise
URL mapping
すごいベータ版

URL

http://blog.otakumode.com/2014/08/20/tng14/

milkcocoaの運用(Docker + socket.ioの話)

  • バックエンドを提供
  • ユーザ一人一人に環境を提供

URL

https://slidebean.com/p/TO1HWyiK6r/milkcocoa

Rendrの話

SPAは初回ローディングが重い
バルクAPIを作る(複数APIをまとめて1本にする) 初回だけサーバーで描画する あとはAjax

Rendrなら

  • 初回はサーバ側
  • クライアントとAPIの間にRendrを挟む

こんなものにRendr

  • コンテンツを重視したSPA

URL

http://www.storyboards.jp/viewer/wo41ho

NodeConf探訪記

海外のConference

  • 自分の感覚をアジャスト
  • 人脈

NodeschooleのURL
http://nodeschool.io/

Node.jsでQueueを実現するkueの話

kueとは

  • RedisをバックエンドとしたQueue

ES6でよく使いそうなもの

楽に書けるよ偏

  • デフォルト引数: function(x = 100){}
  • メソッドでfunction書かなくていい
  • オブジェクトリテラルでコロン書かなくていい
  • 文字列内で変数を展開できる: 'aaa{value}aaa'

覚えると楽できる編

  • bitを直接かかる
  • オブジェクトリテラル演算子使える
  • アローファンクション
  • 可変長引数のリスト化、展開が簡単にできる
  • 分割代入: var [a,b,c] = [1,2,3]
    • オブジェクトでも使える

おまけ

  • let 変数のスコープが変わる

URL

http://slides.com/tomohirookayama/deck#/

Dockerのコマンドメモ

ドットインストールでDocker入門を受講したので学んだことをメモしておきます。
ほぼコマンドのみです。
詳細は公式サイトを。 https://www.docker.io/

1. VagrantUbuntu 環境構築

  1. Ubuntu Box の追加
    http://www.vagrantbox.es/ からUbuntu の64bit版のURLを取得して下記コマンドを実行

     $ vagrant box add trusty64 http://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
    
  2. ディレクトリを作成してinit

     $ mkdir docker
     $ cd docker
     $ vagrant init trusty64
    
  3. Vagrantfile の編集

     $ vi Vagrantfile
    

    config.vm.networkの行をコメントインして適当なIPアドレスを割り振る

  4. Vagrantの起動/接続

     $ vagrant up
     $ vagrant ssh
    

2. Docker インストール

参考 : http://docs.docker.io/installation/ubuntulinux/

  • インストール

      $ sudo apt-get update
      $ sudo apt-get install docker.io
      $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
      # 確認
      $ docker --version      
    

3. Imageの操作

  • Docker Index から Image を取得
    サイトURL : https://index.docker.io/

      # コマンドでの検索
      $ sudo docker search centos | more
    
      # Imageの取得
      $ sudo docker pull centos
    
  • Imageの確認

      $ sudo docker images
    
  • Imageの詳細

      $ sudo docker inspect <名前[:タグ] or IMAGE ID>
    
  • Imageの削除

      $ sudo docker rmi <名前[:タグ] or IMAGE ID>
    

4. Containerの操作

  • Containerを起動してContainer上でコマンド実行

      $ sudo docker run <Image名> <コマンド>
      # 例
      $ sudo docker run <Image名> echo "Hello world"
    
  • 実行中のContainerを表示

      $ sudo docker ps
    
  • 動作が終了したContainerを表示

      $ sudo docker ps -a
    
  • 最新の5つのContainerを表示

      $ sudo docker ps -a -n=5
    
  • Containerを削除

      $ sudo docker rm <CONTAINER ID>
    
  • バックグラウンドで実行

      $ sudo docker run -d <Image名> <コマンド>
      # 例
      $ sudo docker run -d centos free -s 3
    
  • 実行中のContainerのログをみる

      $ sudo docker logs <CONTAINER ID>
    
  • バックグラウンドで実行中のものをフォアグラウンドへ

      $ sudo docker attach --sig-proxy=false <CONTAINER ID>
      # ctrl + c で抜ける
    
  • 実行中のタスクをkill

      $ sudo docker kill <CONTAINER ID>
    
  • タスクの再開

      $ sudo docker start <CONTAINER ID>
    
  • Containerの中に入る

      $ sudo docker run -i -t <Image名> /bin/bash
    

5. Imageの作成

  • Imageの作成

      $ sudo docker commit <CONTAINER ID> <作成するImageの名前>
    

6. Dockerfileの使用

  • Dockerfileを作成することによってImageからContainerを作成し、変更を加え、それを元にImageを作成する一連の処理をスクリプト化することができる.

      $ vi Dockerfile
    
  • DockerFileの書き方

      FROM <元になるImage名>
      MAINTAINER <作成者>
      RUN <buildする時に実行されるコマンド(インストールなど)>
      CMD <runするときに実行されるコマンド>
      # CMD ["コマンド", "コマンド"] のような書き方が推奨されている
      # 例えば 
      CMD echo "now, runninng..." 
      # ならば 以下のように書ける
      CMD ["echo", "now runninng..."]
    
    
      # 例)
      FROM centos
      MAINTAINER name <mailaddress@hoge.com>
      RUN echo "now building..."
      CMD ["echo", "now runninng..."]
    
  • カレントディレクトリにあるDockerfileを使用してビルドする場合のコマンド

      $ sudo docker build -t <新しいImage名> .
    

Git コマンドメモ

ドットインストールでGitのレッスンを受けたのでメモしておきます。
Githubのはじめ方も簡単に書いておきます。

基本用語

  1. 作業ディレクトリ
  2. ステージングエリア(インデックス)
  3. リポジトリ (ローカル)

gitの設定

コミット時の名前設定

git config --global user.name "(your name)"

コミット時のemail

git config --global user.email "(your email)"

色分け

git config --global color.ui true

設定の確認

git config -l

はじめてのバージョン管理

初期化

git init

ステージングエリアに上げる

git add

リポジトリに上げる

git commit

ログの確認

git log

ログの確認オプション

1行でログの確認

git log --oneline

変更箇所の確認

git log -p

変更ファイルの確認

git log --stat

状態の確認

現在の状態

git status

変更箇所の確認(ステージングに上げる前)

git diff

変更箇所の確認(ステージングに上げた後)

git diff --cached

ファイル操作

カレントディレクトリ以下すべてをadd

git add .

ファイルの削除/移動

git rm <file>
git mv <file>

チェックアウト(元に戻す)

git checkout -- <file>

git管理に含めない場合

.gitignore というファイルを作成して、管理に含めないファイルを指定する
ファイルの中身の例(拡張子がlogのファイルをgit管理しない場合)

*.log

直前のコミットを変更

git commit --amend

過去のバージョンに戻る

直前のバージョンに戻る

git reset --hard HEAD

直前の1個前に戻る

git reset --hard HEAD^

リセットする前に戻る

git reset --hard ORIG_HEAD

ブランチ

ブランチを確認

git branch

ブランチを作成

git branch <branch name>

作成したブランチを使用

git checkout <branch name>

ブランチをマージ(マスタにマージする場合はマスタを checkout してから)

git merge <branch name>

ブランチを削除

git branch -d <branch name>

タグ

タグをつける

git tag <tag name>

commit id で指定

git tag <tag name> <commit id>

削除

git tag -d <tag name>

エイリアスの設定

checkout に co というエイリアスをつける

git config --global alias.co checkout

共同作業

共有リポジトリの作成

git init --bare

共有リポジトリの追加

git remote add origin <repos location>

共有リポジトリに master を push

git push origin master

共有リポジトリから clone

git clone <repos location> <clone location>

共有リポジトリから pull

git pull origin master

Githubのはじめ方

  1. Githubにのログイン後のトップ画面右下の“New Repository”を押す
  2. 次の画面で repositoryの名前など情報を入れ、“Create Repository”を押す
  3. 適当なディレクトリで git init
  4. git remote add origin [作成したReositoryのUrl]
  5. git push origin で push できます。


vagrant-vbguest インストール

vagrant up で 下記の警告が出て対処したのでメモ。

The guest additions on this VM do not match the installed version of
VirtualBox! In most cases this is fine, but in rare cases it can
cause things such as shared folders to not work properly. If you see
shared folder errors, please make sure the guest additions within the
virtual machine match the version of VirtualBox you have installed on
your host and reload your VM.

VirtualBox本体とguest addition のバージョンがずれているということらしい。
ということでゲストのバージョンを上げてくれるプラグインをインストールします。

以下はVagrant のバージョンが 1.1以上の場合です。

インストールはこれ

$ vagrant plugin install vagrant-vbguest


デフォルトではvagrant up, vagrant reload 時に自動で更新されてしまうらしいので
それが嫌な場合は設定ファイルを作成します。
~/.vagrant.d/Vagrantfile を作成して中身を下記のように編集。

Vagrant.configure("2") do |config|
  config.vbguest.auto_update = false
end


本体とゲストのバージョンが違うか調べるには下記コマンド。

$ vagrant vbguest --status


違いがあれば下記コマンドでゲストを最新にします。

$ vagrant vbguest --do install

最後にエラーがでるかもしれませんが、恐らく問題ありません。

あとは vagrant reload して反映して終了です。

詳細はここ https://github.com/dotless-de/vagrant-vbguest