you21979の日記

実験ネタとか。仮想化とかnodejsで嵌った所とかおもしろかったところとかいろいろ

東京node学園祭2013行ってきました

東京node学園祭2013行ってきました

 

■基調講演

 印象に残ったのは

・strongloopのように優秀なモジュールを組み合わせた環境を用意したりするのもkernelとdebianみたいな関係でnodeコミュニティとしては問題ないと。

・小さなコアを維持する

・モジュール機構は完成している

・stream2は後方互換性を維持

・node.jsは後方互換性を重視する

 

特に後方互換性を重視する姿勢はプロダクションレベルのソフトをつくる基準にたっしているとおもう。

 

Grunt, yeoman, bower

YOおじさんがテンプレートから自動生成して開発を助けてくれますよという話で

generator-generatorつかえば自動生成機能も簡単に作れますよという感じでした

gruntやbowerはそこそこ使われてるけどyeomanはまだあまり使われてないみたい。

 

自分はyeoman使ってないけれどrailsみたいなイメージでした

 

JSXネタ

前半は@kazuhoさんの話でした

DeNAでたくさん使われているかといえばそうではなくて新規プロジェクトで条件が合えば使うみたいな感じでした。

 

後半は@wasabizさんの話でした

コンパイラを担当されているようで今後C#のasync-waitの構文をいれてみるとかそういう話をしてました

 

JSの問題点である、オブジェクト指向言語、最適化、コールバック地獄の解決をやっているようで

JSX使ったゲームフレームワークとかも公開してくれると使いやすいかもなぁとおもったりしたのですがその辺どうなんだろうなぁ

普及するかしないかはフレームワークがあるかどうかにかかってるとおもうし。

(ノウハウは金になるから公開しないだろうなぁとおもいつつ。)

 

アフィン変換で行列をあつかっているスライドがあったけど、JSで行列の速度まともにでるならつかってみたいかなと。

この辺、自分で実装してテストしたのだけど普通に実装するとメソッド呼び出しでかなり時間が取られることがわかってるのでインライン展開使いたいなぁ。。。

 

ES6で変わるNode.jsプログラミング

プリミティブな型の整理が言語として行われているという話でした

・generatorとpromise

・クラス

・イミュータブルな値

・変数スコープのブロック化

・引数や配列など基本的なところ

 

JSの構文がついに整理された感じです

 

ロボットの外部脳としてのnode.js

Bluetoothによるシリアル通信でセンサーからのデータをうけとりnode.jsで制御するという話だった。

・組み込みは通常コンパイルしてROM焼き込みという手順をするのだがjavascriptでは手直しして再起動という手順ができるので楽。

・フィジカルとネットワーク(スマートフォンなど)のつなぎ込みはお金の匂いがします。

(実際センサーからのデータ使ってzabbixやfluentdと組み合わせたりスマートフォンでモニタリングしたりいろいろできそう)

 

総括

 

nodeはフレームワークとか使い道とか多様性(WEBに限らない)が出てきていて

一つのプラットフォームになりつつあるなぁという感じです

 

以下資料

 

録画

http://www.youtube.com/playlist?list=PLuLCOB9HcrT0ZeWiyddLVNR93QdGmtW57

 

基調講演

https://docs.google.com/presentation/d/1IYwvHLAT0sFLAOmBGQ7dUyD7NKajwfkOgh8SAYvJa2c/preview?sle=true#slide=id.p

 

Grunt, yeoman, bower

https://speakerdeck.com/yosuke_furukawa/yeoman-grunt-bower

 

Rendr入門

http://www.slideshare.net/mshk/rendr

 

JSXネタ

http://www.slideshare.net/kazuho/jsx-oct-26-2013

http://www.slideshare.net/yuichinishiwaki/jsx-generatorimpl

 

Node.jsを選ぶとき,選ばないとき

http://www.slideshare.net/tricknotes/nodejs-27589695

 

WebRTCを始めよう

http://www.slideshare.net/mganeko/2013-web-rtcnode

 

#台風の開催ポリシーがしっかりしてたのでとても良いと思いました

運営サンGJ

懇親会のピザパーティもアドリブだったのによかったです

VMWARE ESXi 5.5 その1

 VMWARE ESXi 5.5 が公開されていたので試してみた。

 

構成は前の記事参照のこと

簡単になったGPUパススルー - you21979の日記

 

とりあえず確認することは5.0、5.1ではパッチが当たるたびに使えたり使えなくなったり迷走していたUSB3のPCIパススルー関連から。

 

結論から言うとまったく問題なくなっていた。

 

再起動するとUSBだけPCIパススルーのチェックが外れる不具合もなおってる。

GPUのパススルーもすこし試したぶんには特に問題はない。

f:id:you21979:20130925234204p:plain

 

 

vSphere Clientのインストール時にwindows xpだとインストール時に警告画面が出た。

f:id:you21979:20130925170022p:plain

(XPでは接続できないかもしれない。)

 

特に問題なく使えるが、vSphere Clientを使っている限り新機能がまったく使えない。

新機能を使うにはweb clientをインストールしなければならないがvCenterの機能のため無料のライセンスで使えるのか試したことがないのでよくわからない。

 

ネットワークカードでintel82579lmのドライバはまだ同梱されていなかった

 

他についてはまた次回へ。

 

 #追記

フリーのライセンスで登録した情報

メモリ制限がなくなっている

f:id:you21979:20130925232343p:plain

 

#追記2

蟹チップの入ったマシンにインストールしようとしたら認識されなくなっている模様

http://www.tinkertry.com/install-esxi-5-5-with-realtek-8111-or-8168-nic/

 

GPUとUSB3のPCIパススルーができるESXiのバージョンはどれ?

ちゃんとした情報がまとまってるページが見つからなかったので書いておく。
 
すぐ動かせるカスタムISOイメージ
 
VMware-ESXi-5.1.0-1021289-Fujitsu-v251-2.iso
 
自分でパッチ当てるなら以下の組み合わせ
 
VMware-VMvisor-Installer-5.1.0-799733.x86_64.iso
ESXi510-201303001.zip
 
ESXi510-201303001以前、または5.1 update1 以降はなぜかUSBをPCIパススルーできない
 
しかも毎回再起動するたびにUSBのパススルをチェックしなければならない面倒くささ(自分はあまり再起動しないのであまり気にしてない)
 
#一度直ってまた再発してるのはなにか問題があるのだとおもうが単にやる気がないのかもしれないし、意図的なものなのかもしれないしその辺はわからぬ
 
#追記
5.5でまったく問題なくなっている模様

簡単になったGPUパススルー

富士通のFMVじゃなくてprimergy tx100 s3pという安鯖をいまさら買ってみた。

メモリはなんか3月に比べて倍近くになってるようで円安に加えかなり供給を絞ってるから急な値上がりになってる模様。

買う時期が悪いように見えるがそれでも安いと思える安鯖。

primergy tx100 s3p:ヤフオクで6000円(送料込み)

Xeon e3-1230v2(4core8thread):アマゾンで23500円

ECC DDR3 8GB*2=16GB:アマゾンで18500円

pci1:radeon 6570ファンレス

pci2:usb3

pci3:空き

pci4:pt3

OS:VMWARE ESXi5.1

 

ちなみにヤフオクだと4core*2のハイパースレッド16コア機がたまに3万で出てる。

 

この安鯖構成のなにがいいかというとGPUパススルー(VGAパススルー)がとても簡単であること。

ハイパーバイザー用のグラボをささなくてもよいことがあげられる。(オンボードがある)

ESXi使いにはやさしいNICが2つあること。

NIC二枚あるといろんなネットワークの実験がやりやすい。

 

そしてAMD機についてたハードディスク付け替えただけで再インストール無しで環境移行がすんだこと。(esxiすら再インストールいらず)

当然esxi上で動いてたVMもそのまま動く。

簡単すぎて泣けてくる。

 

GPUパススルーのなにが大変だったかというと

以前の環境ではパススルーしてもドライバ入れたりするとBSOD

パススルーできたと思ってもGPU使う処理(dxvaなど)すると画面が乱れたり崩れたり。

kvmとかだとkernelに渡すbootパラメータ調整とかすれば直ったりしたけど

esxiでは対処の仕様がなかった。

USBのパススルーにまだ少し問題があるとはいえその辺乗りこえれば普通に使えるレベルに達したのがよい

 

#部材選定に当たって以下のWIKIがとても参考になりました

http://wiki.nothing.sh/page/%C9%D9%BB%CE%C4%CC%20PRIMERGY%20TX100%20S3p

 

#GPUパススルー上で問題なく使えたアプリ

League of Legends

MPC-HC(dxva)

 

#アイドル時の消費電力

120w が 50wへ。(グラボささなければもう少し減る)

 

#サウンド

以前はUSBサウンドを使用してたけど今はhdmiからspdifをとってる。USBと違って音飛びしない

http://item.rakuten.co.jp/donya/84480/

 

#ESXiの個人的なTIPS集

https://gist.github.com/you21979/6098759

 

富士通 PRIMERGY TX100 S3 OSレスタイプ PYT10PZD2X

富士通 PRIMERGY TX100 S3 OSレスタイプ PYT10PZD2X

 

node.jsで簡単にircへメッセージ送信

https://github.com/you21979/bot-irc-notifier

 

サーバーからircにサーバー落ちたよとエラーメッセージを通知をするシステムが欲しかったので作ってみた。

ただ作るだけじゃおもしろくないのでtypescriptで作ってみたけど単純な仕組みなので

あまり型の恩恵ない。

 

さて、実装方法だがredisを使っている

なんで使っているかというと

・redisはコマンドラインから簡単にメッセージを流せる

・redisとircはどちらもチャンネルと言う概念がある

・npmにライブラリがある

 

チャンネルという共通点を生かしてredisのチャンネルにポストすればirc上の同じチャンネルにポストするようにすればチャンネルも送信時に選べるしお手軽。

(irc側は事前にチャンネルに入っておく必要があるけども) 

 

こういうシステムとシステムを繋げるのにnodeはお手軽にできるからいいね

 

↓みたいなシェルでircにポストできる

#!/bin/bash
CHANNEL="#hogehoge"
MESSAGE="テストです"
redis-cli publish $CHANNEL $MESSAGE

スキルシート

プログラマの求人みていて思うのだがなぜ言語を最重要視するのだろうといつも思ってた。

言語はたしかに大事だがそれは道具の使い方の話だろうし武器にたとえるならいろいろな流派もあるはずだ。

 

武人にもしスキルシートがあればこんな感じだろうし

・流派

 柳生新陰流(日本刀)

 宝蔵院流槍術(十文字槍)

・奥義

 無刀取り

 活人剣

 居合

・型(稽古、基本戦術)

 燕飛

 三学圓之太刀

 奧之太刀

 槍しごき

 

プログラマもこんな感じでいいんじゃね?と思ってしまう。

・流派

 C++Lua

・奥義

 メタプログラミング

 人工知能

・型(稽古、基本戦術)

 オブジェクト指向プログラミング

 関数型プログラミング

 モデル駆動開発

 デザインパターン

 テスト駆動開発

 

求人募集をみても流派の募集しかしてないところが多い。

みんな流派(環境)を重視してるのだろうか

システム開発とは流派ありきなんだろうか

 

戦で兵を募るときは流派で募集かけたりするものだろうか

 

#厨二病っぽい

re:Ryan Dahl の面接試験:csv データのオブジェクト配列への変換

中島聡さんのブログにある頭の体操をやってみた

所要時間15分くらい

http://satoshi.blogs.com/life/2012/12/ryan-dahl.html

 

JavaScript は Node.js の最新バージョンに使われているものを前提としてください(←ヒント)。

とあるがもっと簡単にできるのかな?とりあえず何も考えずに書いてみた。

 

var http = require('http');
function get(callback){
    var opt = {
        host: 'ichart.finance.yahoo.com',
        port: 80,
        path: '/table.csv?s=AAPL&a=11&b=1&c=2007&d=12&e=1&f=2012&g=m&ignore=.csv',
        method: 'GET',
        agent: new http.Agent({maxSockets: 1})
    };
    var req = http.request(opt, function(res) {
        var data = '';
        res.on('data', function(chunk) {
            data += chunk;
        });
        res.on('end', function() {
            callback(parsecsv(data));
        });
    });
    req.end();
}

function parsecsv(data){
    var begin = 1;
    var count = 0;
    var header = [ ];
    var table = [ ];
    data.toString().split('\n').forEach(function(line){
        if(line !== ''){
            var n = 0;
            var obj = {};
            line.split(',').forEach(function(col){
                if(count >= begin){
                    if(n === 0){
                        obj[header[n]] = col;
                    }else{
                        obj[header[n]] = parseFloat(col);
                    }
                    table.push(obj);
                }else{
                    header.push(col);
                }
                ++n;
            });
        }
        ++count;
    });
    return table;
}

get(function(table){
    // 最終結果表示
    console.log(table);
});

#はてなブログってトラックバックないのか?