you21979の日記

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

node.js

nodejsをプロジェクトで適用してメンバーに使わせてみた話

node.jsを1からプロジェクトメンバーに教えてみて思ったことを書いていきます チームのメンバーはC++使える新卒4人とPHPを扱う中堅3人といった構成です。 それぞれ知識のバックエンドが違うのでそれぞれ教える方法も変えました。 PHPプログラマー ■JavaScr…

node.jsのセキュリティ

nodeの脆弱性について http://www.ustream.tv/recorded/40193490 node学園のLTでコレをみて思い出したのだけれどHTTPの脆弱性を直してもバックエンドが遅い場合 nodeの場合いくらでもリクエストを受けてしまってバックエンドのリクエストをキューにためてし…

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

東京node学園祭2013行ってきました ■基調講演 印象に残ったのは ・strongloopのように優秀なモジュールを組み合わせた環境を用意したりするのもkernelとdebianみたいな関係でnodeコミュニティとしては問題ないと。 ・小さなコアを維持する ・モジュール機構…

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

https://github.com/you21979/bot-irc-notifier サーバーからircにサーバー落ちたよとエラーメッセージを通知をするシステムが欲しかったので作ってみた。 ただ作るだけじゃおもしろくないのでtypescriptで作ってみたけど単純な仕組みなので あまり型の恩恵…

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

中島聡さんのブログにある頭の体操をやってみた 所要時間15分くらい http://satoshi.blogs.com/life/2012/12/ryan-dahl.html >JavaScript は Node.js の最新バージョンに使われているものを前提としてください(←ヒント)。 とあるがもっと簡単にできるの…

ストリーム型通信でプログラマが知らなければいけないこと

基本は3つしかない。 これはバイナリだろうがテキストだろうが同じ。 ・バッファリング 一回の受信ではデータが揃わないのでデータが解読できるまで貯めておくこと。 ・ディスパッチ データを解読してイベント処理を発行すること。 ・イベント イベント処理…

nodejsで実行時にスクリプトファイルを読み込んで実行する

C++などでluaを使ってよくやるスクリプトシステムと同等の仕組みを意味があるか別としてやってみた。 new Functionを使うと簡単かつJITが効く速いコードができる。 逆にこういう用途に使うであろうvmモジュールはくっそ遅い上にunstableなので使いにくい var…

東京node学園祭2012参加してきました

東京node学園祭2012参加してきました イントロダクション 基調講演New Readable Stream in Node 0.10 Nodeコアの歩き方~Nodeの開発に参加しよう~ Running Node.js in Production layering distributed systems ECMAScript tools - composable modules and …

node.jsのベンチマークいろいろ

githubにリポジトリ作った https://github.com/you21979/nodejsbenchmark ・new Function new Functionで動的にコード作るのたしかに早い。 evalはJIT効かないけどnew Functionは効いてる requireが使えないけど。 ・mysql + ayncblock mysqlでasyncblock使…

最適化2

前回の最適化で気になったので調べてみた http://you21979.hateblo.jp/entry/2012/10/19/143845 nodejsでswitch ~ case遅いとあったけど実際に試してみて5000超えたあたりから許容できないかもしれない 20000のenumを作ってcaseしまくってるのだが https://…

node.jsの0.8系

そろそろ使っても大丈夫そうだろうか やばそうなバグもだいぶ取れてるっぽいし(メモリリークとか) 0.6系のアップデートが12月までだしなぁ 起動管理ツールでforeverが使えないとやっぱきついなぁと思っていたのだが 最近qilinもよさそうに感じてる

最適化

↓の記事を読んで自分なりに解釈 https://github.com/felixge/faster-than-c こんなかんじで最適化してるのか。DSLでソースコードジェネレートすればこういうのもありだな。オブジェクトを初期化時に項目を設定することが最適化につながるようだ -- 最適化前 …

リアルタイムサーバーでのリソース管理

nodejsで大量のオブジェクトを管理する方法 WEB系のPHPerの人は意外にしらないようなので普通のサーバーアプリケーションのリソース管理方法を記載してみる 下のようにシングルトンのマネージャを作成しマネージャ経由でオブジェクトを生成する 削除もマネー…

node.js

node.js触ってて職業プログラマが仕事で触るにはまだ早いかもなぁと思ってしまう。 以下の2つを何かの言語で習得してないならnode.jsはきついと思う リアルタイムプログラミング ネットワークプログラミング オンラインゲームを支える技術を読んで理解でき…

node.jsをサーバーとして立ち上げるときにやること1

1.daemon化 foreverを使うのがよいが0.8~しかサポートしなくなった 0.6系を使うならstart-stop-daemonを使う https://github.com/jiem/start-stop-daemon これで以下のコマンドで制御できる node --expose_gc ./daemon.js start node --expose_gc ./daemo…

node.jsの構文による速度比較

なんかブラウザの常識と違う気がする v0.8.4で測定 オブジェクト生成 var x = null; for(var i=0;i<100000000;++i){ x = new Object(); } real 0m2.619s user 0m2.573s sys 0m0.005s var x = null; for(var i=0;i<100000000;++i){ x = {}; } real 0m0.419s u…

node.jsのオブジェクト

ハッシュテーブルとして使った場合遅くて使えない・・・ 削除しなければいいのだけど削除が入ると死ぬほど遅くなる var x = {}; for(var i=0;i<1000000;++i){ x[i] = 0; if(i%10000 === 0){ console.log(i); } } for(var i=0;i<1000000;++i){ delete x[i]; i…

node.jsのガベコレ

よくメモリリークしてるとか言われているがどういうときに起こるか そもそもnode.jsのガベコレは他のガベコレと同じようにリアルタイムアプリケーション作る場合によくやるフレーム毎にGC処理をコールしてやる必要がある(UNITY,AS3など) これをやらないと…

node.jsでのMYSQLトランザクション処理実装例

今回の御題はasyncblock fiberで実装されたI/O処理同期化モジュール コレを使ってSQL処理に特化したnode-seqに似たようなことをやってみた 前回の記事の3番の実装例っす https://github.com/scriby/asyncblock var q = new Query(mysqlconn); q .begin() .qu…

node.jsでmysqlはつらい

mysqlのモジュールで普通に組むといろいろな問題に直面する ・1.1アクセス1コネクションだとあっというまにmysqlの接続上限に達する ・2.コネクションプールしてコネクションをユーザー間で使いまわすとトランザクションが使えなくなる ・3.クエリー…

node.jsで参考にした記事とか

はてブをさらしておく http://b.hatena.ne.jp/you21979/node.js/ http://b.hatena.ne.jp/you21979/node.js/module/

websocket + node.js + node-http-proxyで負荷分散

websocketでググルとsocket.ioばかりヒットするがブラウザの対応がまちまちなことによる一過性の技術だとおもうので使わない方針 WorlizeのwebsocketがActionScript3版のライブラリも用意しててブラウザ使わないならよさそう https://github.com/Worlize/Web…

node.jsのfiber実験

こんなことしてもいいのだろうか script.js var Fiber = require('fibers'); (function(){ var check = (function(){ var i = 0; return Fiber.prototype.run.bind(Fiber(function() { // なんかする while (true) { // 完了するまで待つ if(i>=10000){ brea…