2011年5月31日火曜日

Domain名でAccessしたときにApacheの応答が異様に遅い

社内のServerをReverse Proxyを使って外部に公開する設定をしたときに、Domain名でAccessすると異様に遅い。IP Addressの場合は全く問題なし。

http://hoge.domain.com/

http://192.168.0.xxx/
の違い

Apacheの設定やServer側の名前解決など、いろいろ疑ってみたけど、よく分からない。Domainを指定すると、Apacheの応答が遅いので、Serverで何か処理しているのかな?と思いつつ(↓FirebugのTimeline)

image

気付いた!

FirefoxにProxyの設定をしてあって、Domainを指定すると日本のServer経由で参照してた・・・。orz

これに気付くまでに3時間。

 

< Related Posts >

ApacheにReverse Proxyを設定して社内の別Serverを外部に公開

2011年5月30日月曜日

ApacheにReverse Proxyを設定して社内の別Serverを外部に公開

前に調べた特定のDomainは社内の別Serverに転送するやり方。外部からは転送されていることは分からない。これをReverse Proxyというらしい。

やりたい事は社内に複数のVirtual Machineが違う環境で存在していた場合に

http://mydomain.com/app1 -> Virtual Machine1に転送
http://mydomain.com/app2 -> Virtual Machine2に転送

という感じに振り分けたい。

今回は既に80 Portを受け取るServerがいるので、そのApacheのConfig Fileに追記した。

<VirtualHost *:80>
  ServerName stage.my.domain
  ProxyRequests Off

  ProxyPass /app1 http://192.168.0.81/app1
  ProxyPassReverse /app1 http://192.168.0.81/app1

  ProxyPass /app2 http://192.168.0.82/app2
  ProxyPassReverse /app2 http://192.168.0.82/app2
</VirtualHost>

特定の人にしか見せたくない場合は、Basic認証をかける。前の記事を参考に。

mod_proxy - Apache HTTP サーバ

 

次回引越しのときには外部からのAccessを一元管理するServerを一台用意して、そこにDelegatePoundをInstallして振り分ける予定。

Poundで作るロードバランサとSSLラッパ(1/4) - @IT

 

< Related Posts >

1つのGlobal IPでDomainごとに別のWeb ServerにRoutingしたい(調査編)

2011年5月27日金曜日

Google Tech Talksの講演動画には役に立つ情報がたくさん

HTML5やnode.jsに関して調べているときにYouTubeにあるGoogle Tech Talksの動画に素晴らしい情報がたくさんあることに気付いた。.

英語だけど。

あとでじっくり見るためにMemo.

Building a JavaScript-Based Game Engine for the Web

 

Node.js: JavaScript on the Server

 

Speed Up Your JavaScript

 

Google検索しても見つかりづらいので、YouTubeに実装してほしい機能は

  • 音声からTextの抜き出し
  • 動画からTextの抜き出し

近い将来実装されてそう。

2011年5月26日木曜日

[VMware Fusion]LinuxにVMware ToolsをInstallして時刻同期

はVMware ToolsをInstallしなくてもcron + ntpupdateで時刻同期すればいいと書いていたけど、SingaporeにHostごと持ってきたときに全てのGuest MachineのNTPの設定を変更しないといけないことに気づいたので、VMware Toolsで時刻同期することにした。

Host環境: Mac OS X Server 10.6.7 + VMware Fusion 3.1.2

Virtual Machine: CentOS5.5

まずはVirtual Machine -> Install VMware ToolsからImageをMount. then Virtal MachineのConsoleで

# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom/
# cp /mnt/cdrom/VMwareTools-8.4.5-332101.tar.gz ./
# tar xzvf VMwareTools-8.4.5-332101.tar.gz
# cd vmware-tools-distrib/
# ./vmware-install.pl

全てDefaultで答えていけばOK. 自動起動も勝手に登録してくれる。確認

# chkconfig --list
# /etc/rc.d/init.d/vmware-tools status
# date

 

< Related Posts >

【VMware Server】LinuxゲストマシンにVMware Toolsをインストール
VMwareでLinuxの時間がずれるのをなんとかする(時刻同期)

2011年5月25日水曜日

MongoDBをyum経由でCentOSにInstall

node.jsの開発をするときにMongoDBを使おうとInstall、設定したときのMemo

環境はCentOS5.5 64bit

Official Siteにyum経由でInstallするやり方があるので、そちらを参考に。

# yum install mongo-10gen-server

今のVersionは1.8.1。起動Scriptが/etc/rc.d/init.d/mongodに出来るので、それを読めば何となく分かる。

# less /etc/rc.d/init.d/mongod

/etc/mongod.conf
/etc/sysconfig/mongod
から設定を読み込んで起動しているみたい。各項目はOfficial Siteのこの辺を読めば分かりそう。

とりあえず起動してStartUpに登録しておく。
# /etc/rc.d/init.d/mongod start
# chkconfig --add mongod
# chkconfig mongod on

 

< Related Posts >

MongoDBの概要を調べる

2011年5月24日火曜日

MongoDBの概要を調べる

node.jsを使った開発をする際にDatabaseをどれにしようか迷ったときMemo.

node.js関連でよく見かけるMongoDB(official site)。NoSQL(Not only SQL)のDocument-oriented databaseに属するみたい。詳しくは下記Siteを参考に。

特徴としては、

  • Dataの持ち方自体がJSONを元にしたBSONという形式
  • JavaScriptを使用してDBにAccessできるShellが用意されている(JavaScriptの関数をそのまま渡すことが可能)
  • このためnode.jsとの相性が非常にいい
  • 複数Serverを用いた負荷分散、Replicationが簡単
  • MySQLと比べて(ちょっとだけ?)高速
  • Transactionは使えない

JavaScriptを知っていれば、Database, Server, Clientと一環したProgrammingが出来るので面白そう。

最後にこんな記事も見つけた。

NoSQLをRDBの代わりに使うと、どういう恐ろしいことが起こるか。PARTAKEの作者が語る - Publickey

2011年5月23日月曜日

初空手稽古 in Singapore

昨日はSingaporeに来て、初めての空手稽古。

「稽古したいなぁー」とつぶやいていたら、「○○さんはここで稽古しているよ」と友人が教えてくれたので、さっそく連絡して行ってきた。

さっき検索したら、下記Blogがあったので日本の方はこちらに連絡した方がいいかも。

久しぶりの稽古だったので、やっぱり体が思うように動かない。

どんどん下手になっているし・・・。

でもやっぱり空手は気持ちイイね!

2011年5月20日金曜日

[node.js]Express + ejs + Socket.ioを使ったSample Site

前まではnode.jsとSocket.ioをInstallしてSampleを動かしただけ。今度本格的なApplicationを開発しようとExpressというnode.js用開発FrameworkをInstallしてみた。

参考にしたのは下記Site.

npmを使ってサクっとInstallできる。

# mkdir /opt/express_test
# cd /opt/express_test

expressが使うmoduleを先にInstallしておく
# npm install connect qs mime
# npm install express socket.io ejs
# ./node_modules/express/bin/express -t ejs

app.jsはdefaultで3000 portが設定されているので、任意に変更しておく。

# node app.js

これで、http://192.168.0.xxx:8080/にAccessすると表示されるはず。

 

各Module一覧

underscore.js
(github)(Document)
便利関数の詰め合わせ。
connect
(github)(Document)
Pluginのように3rd party middlewareを動作させるためのFramework
qs
Query StringをParseしてjson形式で返す
mime
Multipurpose Internet Mail Extension. MIME Typeの一覧
ejs jsp likeなtemplate engine.

 

< Related Posts >

node.js, socket.ioをInstallしてWebSocketを試す(Sample実行編)
node.js, socket.ioをInstallしてWebSocketを試す(Install編)
WebSocket, node.js, Socket.IOって何?

2011年5月19日木曜日

node.js, socket.ioをInstallしてWebSocketを試す(Sample実行編)

前回node.jsとsocket.ioのInstallまで成功したので今回は実際にSampleを動かしてみる。

Sample sourceは~/node_modules/socket.io/example/にある。この中にあるserver.jsは8080 portを使うように書かれているので、Firewallの設定を忘れずに行っておく。

起動してみる。

# cd ~/node_modules/socket.io/example/
# node server.js

これでClientから

http://192.168.0.xxx:8080/

で接続すると次のような画面が起動するはず。

image

複数のBrowserでAccessするとchatっぽくなっているのを確認できる。

そのうちWordpressと連携したApplicationを開発したいと模索中。

node.jsでhttp sessionを共有するsocket.ioのテストを書く

 

< Related Posts >

node.js, socket.ioをInstallしてWebSocketを試す(Install編)
WebSocket, node.js, Socket.IOって何?

2011年5月18日水曜日

node.js, socket.ioをInstallしてWebSocketを試す(Install編)

前回でnode.jsって何?というのが大体分かったので、今度は実際にServerにInstallしてみた。

環境: CentOS5.5

node.jsのバージョン管理ソフトnvm (Node Version Manber)経由でインストールすることにした。

基本はOfficial SiteのReadmeを見ながら。

GitがInstallされていなければ、まずはDAG(RPMForge)を追加してyum経由でInstallできるようにする。詳しくは前の記事を参考に。

# rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS//rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
# yum update
# yum install git

ここからnvmのInstall

# git clone git://github.com/creationix/nvm.git ~/.nvm
# . ~/.nvm/nvm.sh

これで"nvm"が使えるようになっているはず。Loginしたときに常に使いたいので
# vi ~/.bashrc

. ~/.nvm/nvm.sh

を追記して保存。

node.jsの最新版をInstall。最新版はOfficial SiteでCheck。

# yum install gcc-c++ openssl-devel
# nvm install v0.4.7

Now using node v0.4.7
/usr/bin/which: no npm in (/root/.nvm/v0.4.7/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
Installing npm...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3874  100  3874    0     0   1357      0  0:00:02  0:00:02 --:--:-- 14401
fetching: http://registry.npmjs.org/npm/-/npm-1.0.6.tgz
0.4.7
1.0.6
prefix=/root/.nvm/v0.4.7

This script will find and eliminate any shims, symbolic
links, and other cruft that was installed by npm 0.x.


All clean!
! [ -d .git ] || git submodule update --init
node cli.js cache clean
node cli.js rm npm -g -f --loglevel error
node cli.js install -g -f
/root/.nvm/v0.4.7/bin/npm -> /root/.nvm/v0.4.7/lib/node_modules/npm/bin/npm.js
node-uuid@1.1.0 /root/.nvm/v0.4.7/lib/node_modules/npm/node_modules/node-uuid
npm@1.0.6 /root/.nvm/v0.4.7/lib/node_modules/npm
It worked

無事終わればnode.jsのInstallは完了。Package管理のnpmも同時にInstallされた様子。これをshellから使えるようにする。

# nvm use v0.4.7

Login時にも使えるようにbashrcを編集。
# vi ~/.bashrc

nvm use latest(installしてないとErrorになるので明示したほうがいい)
nvm use v0.4.7

Versionを確認するには
# nvm ls

次はSocket.IOのInstall
# npm install socket.io

npmを使ってInstallするときはGlobalかLocalを選択できる(v1.0以上)。通常はLocal Installになるので、各Project Directoryに移動してからCommandを実行するやり方になるみたい。

全てのProjectで使いたいModuleの場合は"-g" Optionを付けるとPathが登録されて、どこからでも実行できる。
# npm install -g node-inspector

Globalで登録されたModule一覧を確認するときは
# npm list -g

 

< Related Posts >

2011年5月16日月曜日

WebSocket, node.js, Socket.IOって何?

HTML5とWebSocketを調査していて辿り着いた「node.js」。何これ?と思ってGoogle先生に聞きまくってたときのMemo.

WebSocket
(wikipedia)
HTTPと同じような通信規格(Protocol)の一つ。非常に高速。ServerからPush配信できる。前はHTML5の仕様の一部だったらしい。
node.js
(公式Site)
(Wikipedia)
Server Side JavaScript Engine Framework. 高速。全てのI/Oが非同期に処理され、ブロックされることがない。このためWebSocketとの相性がいい。
このスライドが分かりやすい。
socket.io
(公式Site)
node.js上でWebSocketを使うためのLibrary. Server側とClient側両方のJavaScript Libraryを提供してくれる。WebSocketに対応していない端末でも通信できるようになっているらしい。
npm
(公式Site)
node.js用のPackage Manager. socket.ioを使いたい場合はnpm経由の方が管理が楽。
nvm
(Readme)
Node Version Manager. node.js自体のVersion管理をしてくれる。これを使ってnodeをInstallしておくと後が楽。
同様の機能でnaveというのもあるらしい。

大枠は理解できたので、次は実際にnode.jsのinstallからsampleの起動まで行う予定。

 

< 2011/0519 Modified >
面白い記事があったのでLink

node.jsは普及しそうに無い: ニュースの社会科学的な裏側

Node.jsについてのよくある誤解 - 自分の感受性くらい

 

< Related Posts >

HTML5とWebSocketについて調査、勉強(関連Link集)

2011年5月12日木曜日

HTML5とWebSocketについて調査、勉強(関連Link集)

役に立ったSiteのMemo.

< HTML5 >

HTMLの大幅な改訂版。HTML4までは「文書」の作成が主な目的。HTML5では「Application」も作成できる機能が加わる。詳しくはwikipedia.

HTML5ROCKS

HTML5.JP

HTML5ベースのWordPressのテーマファイルのまとめ

HTML5+Canvasタグによるアニメーションユーティリティ「gury」

Chrome Experiments

 

< WebSocket >

XMLHttpRequest(XHR)の欠点を解決する手段として開発。ServerからClientにPushできる。iPhone, iPadのSafariでも動作可能。詳しくはwikipedia.

最近のWebSocket事情についてまとめとく

@IT 第1回 node.jsの衝撃とWebSocketが拓く未来

 

HTML5(canvas) + CSS3 + WebSocketでiPhone, iPadでも動作するApplicationを作ってみたい。

2011年5月11日水曜日

Ajax通信しても固定URLを持たせてGoogle Analyticsに記録したい

Ajaxを利用してPage全体をReloadしない仕組みにしたけど、下記の要望に対応したMemo。環境はWordpress 3.1.2

  • 詳細記事にBookmarkしたい。
  • Google Analyticsでアクセス解析したい。

 


詳細記事にBookmark

これを実現するために非同期で詳細情報を取得して描画した後に、URLを変更しないといけない。location.hashを使うのが一般的みたい。検索してみるとjQuery HistoryHashListenerというLibraryを使えば簡単に設定できそう。

ただ#以降のURLはServer(PHP)側で取得できないので、実際そのURLを指定したら、onLoadのEventを使って(Client側で)記事を検索、表示させてあげないといけない。

Server側で処理をしたい場合はQuery Stringに埋め込む。これを受け取ったあとの処理は前に導入したqTranslateというWordpress Pluginを参考にするとできそう。

 


Google Analyticsでアクセス解析したい

location.hashにsetする時に

_gaq.push(['_trackPageview', '/home/landingPage']);

を発行すればいいみたい。詳細はGoogle Codeで。

 

< Related Posts >

Wordpressで多言語対応。「qTranslate」pluginを導入

2011年5月10日火曜日

1つのGlobal IPでDomainごとに別のWeb ServerにRoutingしたい(調査編)

1つのGlobal IP Addressしかないのだけれど、社内LANにある複数のServerを外部に公開したくて調査したMemo。

そういった機能はReverse Proxy(リバース プロキシ)というらしい。

@IT【リバース・プロキシ/リバース・プロクシ】

実現するにはApacheだけでも出来るらしい。他にもWikipediaにいくつか紹介されている。

そのうち社内に導入する予定。

 

< Related Posts >

一つのIPアドレスで複数のWebサイトを運営するapacheの設定

2011年5月9日月曜日

Marina Bay SandsでCasino(カジノ)をやってみた

Casino好きの知人が日本から来ているので、Marina Bay SandsのCasinoを体験してみた。

実はその知人は先週からSingaporeに来ていて、連れて行ってもらうのは今回が二回目。前回はSlot Machineをやって、S$300(2万円)負けた。このうちS$100は自腹で、残り200はS$100を取られて呆然としていたら知人(←とてもお金持ち)が提供してくれた。

今回挑戦したのはRoulette(ルーレット)

テーブルを囲むと思いきや、一人一台使うTouch PanelのDisplayが置いてあって、それにTapしてBetする。最初は知人の横に座って、どんな感じか見学。一時間ぐらい出る目の傾向を調査して、いざ挑戦。

今回の資金はS$50。最低S$10からなので、最悪5回外れればGame Over。

結果。。。

S$160になった。

前回の自腹分を取り返せて満足。Slotよりも長く遊べるので初心者向けかな?

最初は論理的に出る目の傾向を掴もうとしていたけど、やっているうちにどうでもよくなる。最終的には「勘(運)」。

今回は勝ったけど、一人で行こうとは思わない。ちなみに中はFree Drinkなので買い物に疲れたら、Drinkだけ飲んで出てくるのもあり(?)。

2011年5月6日金曜日

Singaporeの固定電話から日本の固定電話にかける

Singapore(会社)の固定電話から日本の固定電話にかけたときのMemo.

(外線)-(国際識別番号)-(国番号)-(先頭の0をとった日本の電話番号)

9-001-81-xx-xxx-xxxx

を使うみたい。

2011年5月5日木曜日

Windows7のCommand

Windows7のCommand覚え書き。

説明 Command
SendTo(送る)Folderを表示 shell:sendto
StarupのApplicationを停止、管理 msconfig

見つけたら追記予定。

2011年5月4日水曜日

Wordpressで多言語対応。「qTranslate」pluginを導入

Wordpressを使って多言語対応のSiteを作ったときのMemo.

環境はWordpress 3.1.1

すでにいくつか多言語化するpluginが公開されている。今回は人気もあり入力がしやすそうな「qTranslate」を選んだ。

導入するのは他のpluginと同様にplugins directoryにおいてactivateする。

設定画面を開くと

Could not write to "/opt/hoge/wp-includes/languages", Gettext Databases could not be downloaded!

とerrorが出るので、wp-content/languagesを作ってapacheが書き込み出来るようにする。

# cd /opt/hoge/wp-content/
# mkdir languages
# chmod 777 languages

日本語の設定を開くとlocaleが「ja」になっていて、文字化けの元になるらしいので、これは「ja_JP」に変更する。他は適当に。

基本はこれで完了。記事を投稿するときに別言語で登録できるようになっているはず。

次はThemeの多言語化。これはWordpressの基本機能を使う。Twentytenを元にしているなら、function.phpで

load_theme_textdomain( 'twentyten', TEMPLATEPATH . '/languages' );

と指定しているので、twentyten/languages/jp_JP.moを置くと自動で読み込んでくれる。mo fileの名前は管理画面で設定した「locale」。(qTranslateがadd_filter('locale', 'qtrans_localeForCurrentLanguage',99)してるから。)

ちなみにmoファイルを作成するには、Poeditを使うと簡単に生成できる。詳しくは下記Blogを参考に。

Poedit 取扱説明書

2011年5月3日火曜日

[xyzzy]DefaultのClipboard-EncodingをUTF8nに設定

最近はVitenam(ベトナム)とかThailand(タイ)の言語も扱うので、xyzzyの「クリップボードエンコーディング」の初期値がsjisになっているのを変更。

.xyzzyに下記を記述

(setq-default *clipboard-char-encoding* *encoding-utf8n*)

 

< Related Posts >

【xyzzy】デフォルトの文字コードと改行コードを指定する
Related Posts Plugin for WordPress, Blogger...

Blog Archives