Archive

Archive for the ‘エンジニア’ Category

Quick Zsh Tip: ディレクトリのブックマーク

2月 20th, 2011

Y CombinatorのHacker Newsを見てたら、Bashにおけるディレクトリのブックマーク方法について書かれてました。
これでcdの手間がすごい省ける!
» Quick Bash Tip : Directory Bookmarks

そのzsh版もコメント欄に書かれていたのですが、コピペするだけじゃ動かなかったので、修正版をUP。

# ZSH Directory Bookmarks
alias m1='alias g1="cd `pwd`"'
alias m2='alias g2="cd `pwd`"'
alias m3='alias g3="cd `pwd`"'
alias m4='alias g4="cd `pwd`"'
alias m5='alias g5="cd `pwd`"'
alias m6='alias g6="cd `pwd`"'
alias m7='alias g7="cd `pwd`"'
alias m8='alias g8="cd `pwd`"'
alias m9='alias g9="cd `pwd`"'
alias mdump='alias | grep -e "g[0-9]=" | grep -v "m[0-9]" | sed "s/^g/alias g/g" > ~/.bookmarks'
alias lma='alias | grep -e "g[0-9]=" | grep -v "m[0-9]" | sed "s/^g/alias g/g"'
touch ~/.bookmarks
source ~/.bookmarks

こうするとブックマークされて↓

# This will create a bookmark for the /var/www directory
/var/www% m1

こうするとブックマークしたディレクトリに移動できます↓

# This will cd into /var/www
/var/www% g1

`lma`コマンドで今のブックマーク状況をチェックできます。

/var/www% lma
alias g1='cd /var/www/'
alias g2='cd /etc/httpd/conf.d'

8maki IT, proposal, エンジニア

マニアックな金融系サイトをnode.jsとMongoDBで実装してみた(実装編)

1月 19th, 2011

さて、前回の記事「マニアックな金融系サイトをnode.jsとMongoDBで実装してみた(概要編)」に続き、実装の詳細を書こうと思うのですが、こちらはどうせ技術者しか見ないので手っ取り早く、コードとシェルを中心にします。

この記事では、開発から運営まで一連の流れを示して、node.jsとMongoDBである程度のWebサービスを提供できるようになること、を目的としています。

SakuraのVPSにMongoDBとnode.jsをインストール

以前、別のサーバーにMongoDBを入れてアクセス解析をしようとしたのですが、どうやら32bit版だと1つのDBは2GB以上入れられないらしく。
しかたなしにSakruaのVPS(CentOS64bit)に64bit版のMongoDBをソースコードから入れました。
※32bitだとyumとかapt-getとかで入ったのにー

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz
tar xvzf mongodb-linux-x86_64-1.6.5.tgz
sudo mv mongodb-linux-x86_64-1.6.5 /usr/local/bin # どっか適当に
sudo mv /usr/local/bin/mongodb-linux-x86_64-1.4.3 /usr/local/bin/mongodb
useradd mongodb
mkdir /var/lib/mongodb  # 中身を入れるディレクトリ
chown -R mongodb:mongodb /var/lib/mongodb
mkdir /var/log/mongod
chown -R mongodb:mongodb /var/log/mongod
sudo /sbin/chkconfig --add mongod
/sbin/chkconfig mongod on
/sbin/chkconfig --list |grep mongod
sudo /etc/init.d/mongod # 起動スクリプト
sudo /etc/init.d/mongod start
sudo easy_install pymongo # ついでにpythonから使うのでライブラリインストール

ちなみに、デーモン化したかったので簡単な起動シェルをこちらから拝借してきました。
» 技術メモ
(こちら、公開してなかったらゴメンナサイ。そしたら別にファイル作ります。)

試しにmongoのシェルから動いてるのを確認してみてください。

mongo
----
MongoDB shell version: 1.6.5
connecting to: test
> show dbs
admin
local
test

次にnode.jsを入れます。
安定版の0.2.6をインストール。ssl使う場合はもっと大変そう。

wget http://nodejs.org/dist/node-v0.2.6.tar.gz
tar zxvf node-v0.2.6.tar.gz
cd node-v0.2.6
./configure --without-ssl
make
sudo make install

また、node.jsはライブラリのパッケージ管理にnpmというものを使っていて、こちらもインストール。

ここまできて、npmは/usrとか/usr/localにroot権限で入れるのではなく、$HOME/.npmrcを設定して一般ユーザーの権限で入れるのがベストプラクティスなのだと理解した。
» npmをインストールする – スコトプリゴニエフスク通信

とのことで、おとなしくそれに従う。ってか実際rootで入れると、sudo npm install xxxするときに怒られます。

wget https://download.github.com/isaacs-npm-v0.2.14-6-14-g0cec5bf.tar.gz
cat >>~/.npmrc <<NPMRC
root = $HOME/.node_libraries
binroot = $HOME/bin
manroot = $HOME/share/man
NPMRC
tar -zxvf isaacs-npm-v0.2.14-6-14-g0cec5bf.tar.gz
cd isaacs-npm-v0.2.14-6-14-g0cec5bf
make install

で、必要なライブラリをインストール。

npm install express # これは古いらしく結局ソースから読み込み・・・
npm install mongodb
npm install ejs
npm install spark # 結局使わず・・・
npm install forever

node.jsでwebサーバーを書く

これで一通り環境が整ったので、適当なフォルダにapp.jsかなんかのファイル名でごりごり書いていきます。
前提として、mongoDBに既に必要なデータは入ってるものとします。
詳しくはmongoDBの日本語マニュアルを参照。@doryokujin君に感謝!

ちなみにnode.jsコミュでは一番メジャーっぽい、express.jsっていうフレームワークを使っています。
githubにサンプルコードがたくさん載っていて、特にmvcがとても参考になりました。

なお、フォルダ構成はこんな感じです。
/service
 /public・・・cssとかimgとか静的ファイル
 /express・・・expressの本体
 /views・・・テンプレートファイル
  body.html
  layout.html
  header.html
 app.js

app.js

var express = require('./express'),
	phpjs = require('./php');

var app = module.exports = express.createServer(),
	Db = require('mongodb/db').Db,
	ObjectID = require('mongodb/bson/bson').ObjectID,
	Server = require('mongodb/connection').Server,
	db = new Db('dbname', new Server('localhost', 27017, {}));

app.set('views', __dirname + '/views');
app.register('.html', require('ejs'));
# express.jsはテンプレートエンジンにjadeを使ってるがキモいのでejs
app.set('view engine', 'html');
app.use(express.staticProvider(__dirname + '/public'));
# 静的フォルダの指定
app.use(express.logger('\x1b[33m:method\x1b[0m :date :status \x1b[32m:url\x1b[0m :response-time :remote-addr :referrer'));
# loggerはnode.jsが使っているConnectのformatに対応
app.helpers({ # テンプレートから呼び出せるヘルパー関数群
  helper1: function(){ return false; },
  helper2: functoin(){ return true; }
});
# routingの部分。 / にアクセスしたらこれが実行される
app.get('/', function(req, res){
	getCollection1(function(result1){
		getCollection2(function(result2){
			res.render('body', { # layout.htmlを使ったbody.htmlを描画
				layout:'layout',
				result1: result1,
				result2: result2
			});
		});
	});
});

db.open(function(){}); # dbをオープン。これしないと接続できなかった。。。
function getCollection1(callback) {
	db.collection('collection1', function(error, stock_info) {
		if( error ) console.log(error);
		else {
			stock_info.find({}, function(error, cursor){
				if( error ) console.log(error)
				else{
					cursor.toArray(function(error, results) {
						if( error ) console.log(error)
						else callback(results);
					})
				};
			})
		}
	});
}
function getCollection2(callback) { /* 以下同文 */ }

console.log('Express app started');
app.listen(3000);

layout.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
	<div id="header"><%- partial('header') %></div><!-- こういう風にヘッダも分けれる -->
	<div id="body"><%- body %></div><!-- 中身がここに書かれる -->
</body>
</html>

開発のポイントとしては、
php.jsが便利すぎる!
 phpの関数をjavascriptでどう書くか?というスニペット集。
 上記コードでは必要な関数を外部モジュール化して使ってます。
loggerのformatが不明だった
 node.jsが使っているConnectのサイトにAPIが!
DBへのアクセス毎にcallbackが入れ子していくので、とにかくアクセスは少なく!
 いやはやMongoDB使ってて正解でした。
 これがMySQLだったらどれだけ入れ子していったことか。
 もちろんjsdeferredとか使って同期処理させることはできますが。

これでモノは揃ったので、実際に実行してみます。

cd /path/to/service
node app.js

すると”Express app started”と出るので、実際に http://localhost:3000/ から確認してください。
ポートは自由に変えられます。

nodeのデーモン化を行う

一応以上までで実装は完了してるのですが、これをちゃんとサービスとして運営するにはあともろもろ必要ですよね。

一番てこずったのが、デーモン化。
なんかエラー出して止まっちゃったときに、自動で再起動してくれないと困る。
結論から言うと、npmでインストールできるforeverというライブラリを使っているのですが、右余曲折ありまして。

1. どうやらspark(configの設定、マルチコア対策)+upstart(デーモン化)+monit(監視)がテッパンらしい。
» Deploying Node Apps with Spark – How To Node – NodeJS
» Deploying Node.js With Upstart and Monit
2. sparkはすんなり入った。
3. upstartが動かん・・・ってrequirementがpython2.5以上で他にもCentOS5向けじゃなさそう・・・
» What are the requirements for building Upstart?
4. じゃあmonitから直でspark呼ぶか、ってnpmとか諸々$HOMEに入れてるから、monitから起動できない模様・・・
5. なんか他にも、spark2とかdaemon.nodeとかforeverとか色々あるな~
6. daemon.nodeは割と有名っぽいけど、作者が同じforeverが簡単そう!

cd /path/to/service
forever start app.js

7. 動いた!←イマココ

これで何とかデーモン化ができました。

実際にデプロイする

ちょっとポートを空けてうんぬんとか面倒くさかったので、ApacheからProxyさせました。
これだとloggerの:remote-addressにIPが出ないんですけどね・・・
近々改善予定。
» mitukiii.jp | Ubuntuにnode.js入れてApacheからProxyさせてみた

ついでにMongoDBの状況をmuninでチェックできるように、mongo-muninとやらを導入しました。

sudo ln -s /usr/share/munin/plugins/mongo_ops /etc/munin/plugins/mongo_ops
sudo /etc/init.d/munin-node restart

まとめ

いやいや、MongoDBもnode.jsも初めてだったので四苦八苦しました。
しかもnode.jsに関しては、まとまった日本語ドキュメントが無いという・・・
ていうか全体的にドキュメントが不足がち。
しかもまだ安定運営周りの方法が確立していないようで、色々議論されてました。
node servers, npm scripts, spark2 and monit
たしかにnpm start app.jsで管理できたら便利やなー

でもこれで、一通りnode.js周りのことが勉強できたし、足りないとこだらけなので貢献していければなーと思います。
久々の長文ありがとうございました。

今回リリースしたサイト↓
http://marketgeek.net/ja/

8maki IT, proposal, エンジニア, サービス , ,

マニアックな金融系サイトをnode.jsとMongoDBで実装してみた(概要編)

1月 19th, 2011

ちょっと半分趣味で、Marketgeekなるマニアックなファイナンス系のサイトを、意味もなくnode.jsとMongoDBで実装、リリースしました。

ただ、node.jsとMongoDBは結構はやりな割に、運用実績がすごく少ないようで、その技術の背景など含めてまとめてみました。
※なお、開発回りのことだけ知りたい方はこちらへどうぞ↓
» マニアックな金融系サイトをnode.jsとMongoDBで実装してみた(実装編)

node.jsとは何か?

node.jsは、サーバーサイドJavascriptのフレームワークで、簡単にWebサーバー等を実装することができます。

サーバサイドJavascriptは昔から注目されていましたが、node.jsの登場で一気にその流れが加速。
理由といえば、こういう類のモノにしては、びっくりするくらい速い!こと。
Google Chromeで採用していたV8をJavascrptエンジンに使っており、スピードUPが測れたとのこと。
いわゆる”Pythonより速い”らしいw

加えて、昨今HTML5も騒がれていますが、そうなるとサーバーへのリクエストが細分化されますよね?
そうすると非同期で処理するnode.jsはうってつけかも!という流れもあり(WebSocketとか)、今年はnode.jsの年!と言われるようになったのかも。

node.jsに関してはこの記事が詳しいです↓
» 2011年はサーバサイドJavaScriptの年になる - Publickey

MongoDBとは何か?

MongoDBとは、いわゆるNoSQL系のDBで、最新DBの中では一番注目されているオープンソースです。
今まで主流のDBであるRDBは、いわゆるExcelのようにまず列を決めてその属性群(スキーマと言う)をもったデータを行として入れていく、というスタイルのものでしたが、NoSQL系のDBではkey(IDのようなもの)でデータを管理し、そのデータの属性(スキーマ)は一定に決めなくてもよい、という柔軟なデータ構造を取れるため各所で使われ始めています。
スキーマレスDBとも言われています。

中でもMongoDBは、KVS(Key Value Store)だけでなく、複雑な検索を行ったり、インデックス張ったり、簡単にスケールさせられたり(サーバー増やしやすい)と、実用にかなった機能をもっているため広まってきています。

ちなみに実用実績としては、ForsquareがMongoDBを採用してるようです。
MongoDBと他のDBとの比較はこの記事が詳しいです↓
» MongoDB’s performance as compared to others

また、3月頭にMongoDBの商用サポートを行っている10genのイベントが東京であるらしいので興味ある方はどうぞ。
» Mongo Tokyo

なぜnode.js+MongoDBを使って実装したのか?

柔軟に金融情報を管理しようとするとスキーマ決めるのって難しいよねーっていう感じと、今後もっとリッチなVisualizationを作っていくためにAjaxとかWebSocketに適してるっぽいのがいいという勘で、MongoDBとnode.jsを選んでみました。

。。。正直あんま理由とかはないですけどねf^^;
ていうか、もともとこういうサイトを作る気合いはあったのですが、ただ技術的には何も新しい・難しいことはないので、だったら勉強がてらやってみよう!というノリでw

あと、オープンソースコミュニティにもそろそろ絡んでいきたいなーと思っていて、発展途上のnode.jsとMongoDBは最適だ思ったので。
開発して分かったのですが、まだまだ色々な問題点があるので、随時コミットしていきたい。

なぜMarketgeekを作ったのか?

日本のベンチャー界隈も「世界へ出ろ!英語化しろ!」とはやし立てられてますけど、実際世界と日本の違いをまともに話せる人、まともに比較できるリソースがあまりにも少なすぎるかなー、と。
それだと「とりあえず英語化して、海外視察して、ちょっと英語でプレゼンしてみて。」っていう感じで終わってしまう気がする。
そこで、具体的に何を目標にどうアプローチしていけばよいのか、思考のネタになるものを作ってみたかったとです。

加えて、逆に英語圏の人からアジアのベンチャーとかって、中々見えにくいのではないでしょうか?
2バイト文字ばっかだし。
もちろん中国とかシンガポールとかにたくさんVCは進出してきてある程度情報が海を越えてるかもしれませんが、英語で書かれた米メディアに比べて、アジアの英語メディアって圧倒的に少ない。
特に東南アジア。
これからはアジアの時代になると言われていますし、思った以上にニーズがありそうで、かつそれなりのポジションを築けそうだったのでホイホイ作ってみました。

まぁなにより作ってて単純に楽しかったです。
最先端の技術使って、興味のあるマニアックなもの作ってw
Naspersって2兆円もあるのか!フヒヒヒヒヒっwwwみたいなw

あ、ちなみにNaspersは@anritさんが作ったこの図が凄く分かりやすい。
Zynga、Groupon、Facebookの金の供給元ってすごいですよね。
naspers

とりあえず見てみてください。随時機能拡張予定です。
http://marketgeek.net/ja/

あと、要望とかコメントとかあったらtwitterへどうぞ⇒@marketgeek_net

技術編はこちら↓
» マニアックな金融系サイトをnode.jsとmongoDBで実装してみた(実装編)

8maki IT, proposal, エンジニア, サービス, 金融 , , , ,

GAE専用のフレームワーク「Kay Framework」のチュートリアルを試す

9月 5th, 2010

ちょっと大量のデータをやりとりするようなWebアプリケーションのプロトタイプを作って、色々データ分析したくなった。
そこで、ちょちょっとTwitterの分析系アプリを作ろうと思い立って、大量のデータを安価に、簡単にスケールさせられることからGAE(Google App Engine)に手を出した。

実は結構前からGAEを色々いじくってるんだが、いつもpythonのWebフレームワークとして使っているdjango(正式にはジャンゴと読むらしい)がGAEだと結構めんどくさそう。
バージョンも0.9と古いということでうまいやり方を探していいたところ、友人にKay FrameworkなるGAE専用の日本人作フレームワークを教えてもらったので使ってみた。

結論:かなり使いやすい!

Twitter OAuthとの繋ぎこみあたりなんか、デフォルトで仕組みが組み込まれてて、5分くらいで実装できた。
そこまで行くのに、チュートリアルとかいじりつつ、4時間ぐらいか。

» 1. Kay チュートリアル — Kay v0.10.0 documentation

日本人の方が作っているということで日本語ドキュメントもそれなりに整備されていて、かなり扱いやすかったのだが、manage.pyを使わず、Google App Engine Launcherを主に使って嵌った点があったのでまとめる。

1.2.4. GAE にアップロードする

デプロイしてwebを確認したら、下記のようなエラーが出た。
TemplateNotFound: myapp/index.html
どうやら、tenplateファイルをコンパイルする必要があるらしい。
実際、下記のコマンドを実行するとエラーは消えた。

python manage.py preparse_apps

1.7.2. 管理用スクリプト

データベースのマスタデータの挿入などの管理スクリプトの実行をどうするのか迷ったが、普通に下記のようにコマンドを打てば大丈夫。

python manage.py create_categories -h localhost:8080 --no-secure

これは、本番環境でも使える。
localhost:8080 -> xxx.appspot.com

OAuth

さて、実際にTwitter OAuthと連携させる段階。
どうやらKay FrameworkはOpenIDやOAuthにも既に対応しているらしい。

» Kay Framework で認証に Twitter の OAuth を使う方法

この通りにやったら本当にできてしまった。
一瞬。

これから簡単なTwitterアプリを作ろうって人は、Kay Frameworkが激しくオススメ!!
» kay-framework – Project Hosting on Google Code

※今までメディアブログを意識して文体は丁寧語でしたが、もっと気軽にブログを書きたいと思ったので、ゆるい感じの文体に戻そうかと。

8maki IT, proposal, エンジニア

アイディアの発想法とData Visualizationは同じ構造なのではないか?

11月 30th, 2009

(Data Visualization is the same as how to organize ideas [en])

先日、元サイボウズでアメリカでLUNARRを立ち上げられた高須賀さんにお会いしました。そこで、最近研究している Data Visualization について発想が沸いたので書き残します。各データの種類(スキーマ)から自動で適切な Visualization 方法を選択して表現する、という研究です。

高須賀さんのお話

「アイディアをひねり出すとき、いきなりすごいアイディアを考えるよりも、切り口を見つけてそこから発展させた方がいい。アイディアと切り口のバランスが取れた位置が一番エネルギーがある。」ものすごく簡単にまとめるとこういうお話でした。

つまり、ものごとを構造化してとらえ、ツールを使って着想を得た方がアイディアを出しやすい、ということ。

例: 新しいレーザーを考える。レーザーは点であり直進する。点の反対は面で、直進の反対は曲がる。これらを2次元グラフにプロットし、各象限に何が当てはまるか頭をひねる。面・曲がるという象限、つまりどこにおいても光を反射させ、面に映し出すという切り口から、スクリーンの前に置かなくてもよいプロジェクターというアイディアが生まれた。

このとき、切り口からアイディアをひねるために用いたツールが、高須賀さん曰く2×2というもの。要は2軸ある2次元グラフで昔私もマトリックスとも呼んでいました。構造化してアイディアを得る・まとめる方法は以下の高須賀さんの記事が分かりやすいです。

» 事業を考える切り口 – Toru Takasuka の起業・経営ブログ

» 新しい concept のはじまり – Toru Takasuka の起業・経営ブログ

松岡正剛の編集学校で教える編集術

こういった発想の訓練、実は以前にも受けたことがありました。松岡正剛の編集学校で体験授業です。

割と戦略コンサルのケーススタディ訓練に似ているのですが、MECEに限らず、もっと自由に発想する、ということが目的で楽しかったのを覚えています。そこでいただいたパンフレットに、6個のツールが載っていました。

edit1

1. Combination (一種合成型)
2つのものを合成して新しいアイディアを生み出す。

2. Triple Jump (三間連結型)
ホップ・ステップ・ジャンプ型で発想を展開。大・中・小や過去・現在・未来などの切り口もあり。

3. Branching (二点分岐型)
一つのものを2つに展開。この例ではブランドを切り口に展開した。

4. Trinity (三位一体型)
三位一体型、3点セットで考える発想パターン。3Cなどが代表例かも。

5.1 All Around (二軸四方型1)
Branching型の枝が2つ増えて、四方へと分岐する発想法。

5.2 2×2 (二軸四方型2)
2軸を決めてそれぞれのマスに何が入るか考える。マトリックス型。

※英語は勝手に私が変換したものです。

edit2

Data Visualizationとの関係

さて、本題ですが、切り口をツールにあてはめアイディアを得るという発想法と、Data Visualization は、頭の中では同じ構造で処理しているのではないか?というのが今回のパラダイム・シフトでした。

edit3

どちらも「分かりやすく考える」「分かりやすく表現する」ということで、頭の使い方が非常によく似ているような気がします。Data Visualization というと Computer Science チックですが、何か考えを図にまとめるときのことを考えると分かりやすくて、まず扱う対象があって、それを一つの側面で切ったデータ群があり、それをどう Visualize するか?というのは、高須賀さんのおっしゃる構造的な思考と同じプロセスを踏むのではないでしょうか。

普通 Data Visualization を調べる場合、どういった Visualization があるのか、どうプログラミングで表現するのか、といったことに目が行きがちになります。オライリー本の”Visualizing Data“もアルゴリズム中心の本でした。

そこを、扱うデータから Visualization を発想するというパラダイムに変換することで、おもしろい表現ができるだけでなく、説得力のある Data Visualization 手法を考案できる気がしました。

参考までに、こちらの図↓は様々なチャートを目的別に一覧表示しています。チートシートとして使うと便利かも。

» Chart Suggestions – A Thought Starter

p.s.

オフィスにお邪魔した際、VentureBEATの勝屋さんもいらっしゃいました。Blogに写真を載せてさらにリンクまで張っていただきました。ありがとうございました!最強のコネクターと言われるだけのことあって、超人懐っこいでしたw

» 人のつながりは無限(∞)につながる – 勝屋久の日々是々

  • Ben Fry, 増井 俊之 (監訳), 加藤 慶彦
  • 定価 : ¥ 3,780
  • 発売日 : 2008/12/01
  • 出版社/メーカー : オライリージャパン
  • おすすめ度 : (6 reviews)
    可視化の一つの手段としてProcessingの概要を知りたい人に
    情報の可視化入門
    目からウロコが。。。
    日本人の本より読みやすい
    既存のマッシュアップAPIを使うのとは違ったWeb情報の楽しみ方

8maki IT, proposal, エンジニア , , ,

Python-MySQL(MySQLdb)のメモリリーク対策

10月 27th, 2009

会社のスクリプト言語がPythonに統一されて、今月からPythonをメインに使っているのですが、MySQLに接続する際なぜかものすごくメモリを食う時がありました。その備忘録。

最近技術ネタが続いていますがf^^;

結論から先に書くと、MySQLdbのfetchallの部分を下記のように書きなおすとメモリリークが起きなくなりました。

sql = "SQL文"
con= MySQLdb.connect(db = db, host = host, user = user, passwd = passwd)
cur = con.cursor()
cur.execute(sql, params)
result = cur.fetchall()

sql = "SQL文"
con = MySQLdb.connect(db = db, host = host, user = user, passwd = passwd)
con.query(sql)
r = con.store_result() # use_result()も可
result = []
while(True):
  row = r.fetch_row()
  if not row: break
  result.insert(0, row[0]) # 初めにデータを挿入してリストの再構成を防ぎ高速化!
con.close()

» ueBLOG | PythonをつかってMySQLの巨大な結果を返すselect文を処理する
主にこちらのブログを参考にしたのですが、cursorを使わず直接connectからクエリを投げるようにしています。
大きな違いは、一度にデータを取得するのではなく、1行ずつ取得するようにしている、ということだと思います。6~9行目で取得する行を一つ一つリストに格納しています。

なお、4行目でstore_result()を使っていますが、use_result()も可能で、use_result()を使うとデータをサーバに保持しそこから一行ずつ取得するようになるので、よりメモリの消費が抑えられる、気がしますf^^;
確認していないので何とも言えないのですが。

SQLAlchemyだとメモリリークしない、と聞いて試してみたのですが、ORマッピングで導入が面倒くさそうなうえに、生SQLを叩く際は結局MySQLdbを使うようで問題は解決しませんでした。
大量のデータをMySQLに保存しそこから全文検索(エンジンはSenna)でデータを引っ張る処理を行っていて、ある特定のSQLを書く必要があったので。

参考:
» MySQLdbのメモリー・リーク – スコトプリゴニエフスク通信
» [Python] MySQLdbのメモリリーク (それなりブログ)

8maki IT, proposal, エンジニア , , ,

シリコンバレー訪問5:Adobe-エンジニア

9月 9th, 2008

本日は昼から研究室の先輩(Mozzillaでインターンされててこっちに来ている)と合流し、IntelやApple等のメジャー企業を周りました。

Adobeの女性エンジニアの方とお茶

その後、ウノウの山田さんにご紹介いただいて、Adobeの方とお会いしました。
そして、Adobe San Joseオフィスの中を案内していただきました。

adobe.png

やはりAdobeでも個室が一人一人に与えられるのですが、それが広かった!およそ2.5m四方くらいでした。

オフィス内もさすがデザインツールの会社、細部まで凝られていておしゃれでした。様々なフォントが額縁に飾ってあるのは秀逸でした。

社内レイアウトもZ型に通路が出来てるなど、おもしろい仕組みが満載でした。Googleは郊外の大きなキャンパスというイメージでしたが、Adobeは都会のおしゃれビルって感じでした。

その後、カフェテリアで軽くお茶しました。

家族を持つとやはり大企業がいいかも。

これは米国でも同じですね。
ただ日本は独身中心のキャリア感ですが、こっちは家族単位で物事が進むそう。男の産休とかザラ。

こっちで留学考えるんだったらTOEFLやらないと。

奨学金を得るにもTOEFLが高いと有利とのこと。ただスピーキングもあるため、日本にいても留学生とかとつるんで常に英語力を鍛えないといけないですね。
その点うちの研究室は1/3が留学生になるので有利ですw

就職するなら景気を読め。

これは就職の本質だと思いますが、やはり不景気のときより景気の良いときの方が就職のうまみが大きいということです。
これから少なくとも2,3年は米国も日本も危ういので、留学して時間稼ぎもありだよねーっていう話をw

こっちで起業するにしろ就職するにしろビザが問題

ここでも出ましたビザ問題。
こちらに進出する場合、圧倒的な日本企業のスポンサーが必要のようで、そういう意味では大企業に入りこちらに派遣というやり方が一番手っ取り早いかもしれません。
他にも、未踏のスーパークリエイターの方は経産省がバックについてくれるという話も聞いた事があり、色々な手法がありそうではありますが。

雑感:
こちらの日本人女性は個性的というか、芯が強くActiveです。
もちろん日本でも仕事をされている女性は多いですが、こっちは家族単位、つまり働きながら、色々な活動をしながら子育てがしやすい環境なのだなぁと改めて実感。

実際、生活も訪れたことのある他のどの国よりもしやすいです。

8maki IT, proposal, エンジニア, シリコンバレー, 海外 ,

シリコンバレー訪問4:Google-エンジニア

9月 7th, 2008

この日は午前中、残してしまった仕事をして、午後はGoogleのエンジニアの方に訪問しました。
ちょうど毎週金曜のSocialization Eventだったらしく、Familyやら色々な方がいらっしゃいました。

google.png

Googleのエンジニアの方とmtg

職探しはコネもコネ。

転職ありきのこっちではreference・人との付き合いは大事。
referenceとはレジュメに書く、他人からの自分の紹介。
前職のボス等に、自分はどういう人間か、どんな功績を残したかを書いてもらうケースが多いみたいです。
逆に敵を作ってしまうとその会社に入れなくなるということもシバシバ。

4年もいると長いねと言われる。

こちらの方は3,4年周期で転職を考えられているようです。
もちろん大企業を見れば10年戦士もざらにいらっしゃるようですが。

面白いのはモバイル

日本にもiPhoneが上陸しましたが、こっちでのiPhone熱は異常w
異常というか、iPhoneにより米国のモバイル事情が一気に変わるという見方が濃厚のようです。
未だにモバイルよりPCの普及率のほうが高い米国で、これからコンテンツとしてのモバイルが面白いし、変化をもたらすべき領域だと感じました。

やっぱりGoogleはエンジニアにとっていい会社だよ

直前に、グーグル、豪華な福利厚生の大半を廃止へ――同社を去る従業員が増加 という記事を読んで、どんなもんかと思っていたのですが、相変わらず好きなことができて、優秀な人が多いこの会社はエンジニアにはとても良い会社だと思いました。
(この記事についてはお聞きしませんでしたが。。。)
この方に限らず、こちらの人のGoogleの評価は未だに非常に高く、「そろそろ落ち目なんじゃね?」という見方も昨今見られますが、そんなマクロ的な分析とは関係ないみたいですね。

chromeのリリースによるWEB包囲網戦略は、Googleの成長を見る上で重要なポイントですね。

その後Googleキャンパスをうろうろしたのですが、とにかく広い!
数十の建物が散在していて、全て車で回るのも一苦労でした。
朝とかはGoogleに行く車の列で渋滞するそうなw

8maki IT, proposal, エンジニア, シリコンバレー, 海外 ,

IT業界キャリアセミナーのパネルディスカッションで

11月 28th, 2007

ということで以前告知したイベントの詳細がCNetに上がっていました。

it_career_panel_cnet.png

» IT業界でキャリアアップするとはどういうことか–業界人が議論

初めてのパネルだったのでちょっとばかし感想&反省を。

○全く準備が無かったのでテンパった

運営者の方を批判するわけではないですが、何も考えずに臨んでしまいました。
結果、ろくな発言をしておりませんf^^;(記事を見ていただけるとわかりますが)

面接だと自己PR、志望動機、長所短所など準備していけるので対応が可能なのですが、いきなりの質問に対して即答するのは至難の業でした。

ですが、他のパネラーの方はこれぞという発言をされていることもしばしば。
やはり人生哲学(今回の場合エンジニア哲学)を確立しているとすぐにアウトプットが出せるようです。

私も今まで考えることに関しては自信があったのですが、圧倒的な経験不足を思い知らされました。

○学生だからと尻込んでしまった

これは今回で一番の反省です。
上記の状況から、途中ろくな発言ができていないことに気づき尻込んでしまいました。

どうせ学生の言うことなんて浅く参考にもならない、だろうと。

○学生だからという地位を活かせなかった

つまり、これは学生という地位をうまく活かせなかった、とういことです。

学生なので企業のしがらみは全くありません。
ですのでかなり好戦的な発言をしようと思ってはいたのですが、やはり「キャリア」の話になると全くキャリアなんぞ歩んだことの無い私はツッコみどころをその場で探すことができませんでした。無念。

※後半からは逆に開き直って思ったことを素直に言うようにしましたが。

○声がイイと言われた

うれしかったので載せますw

そもそも面接やプレゼンなどで緩急をつけることで、人をひきつける話方というのを意識しているので役に立ったのか、な?

○写真写りが微妙w

微妙!慣れてない感が・・・

以上、つらつらと。

またタイムリーにも田口さんがパネルについてのエントリーを書かれているので参考にしたいです。

» パネル限界論

———————————————————
ついでなのでCNetに上がっている自分のコメントを取り上げます。

コーディングできなくても会社は成り立つけど、社長がコードを書ける会社は元気な印象があります

ウノウとかはてなとかですよね。エンジニアが生き生きしている会社って。
やっぱり技術系の会社を見ると社長が(元)エンジニアであることが多いと思います。

それはエンジニアの気持ちっていうのはエンジニアをやってみないとわからん、ていうのが僕の自論です。

でもそれは竹岡さんによると「生き生きしていると思わされているだけ」と。

これは一見相反する意見ですが、本質は一緒で僕のはある程度の待遇があった上での”生き生き”です。
もちろん給料は無いけどカリスマエンジニア社長についていきます!系は生き生きとは呼べないと言う点で同意。

考え方として、お客様に対する仕事はすべてサービス業だと思います

これはそもそもサービス業だの製造業だの分類は議論として無意味だと思ったのであっさりスルーしただけの発言ですねf^^;

やりたいことをやりたいですが、収入の最低ラインは維持していたいですね。ITや環境を変えていけたらいいなと思います

これは今のIT業界は賃金の最低ラインさえ維持されていない、と学生に思われている、という僕の発言からのものです。
給料が低いと言うか、労働分の給料に見合ってない、と”思われている”と。

ただこれは実際のところどうなのでしょうか?
僕が学生代表と名乗りにはあまりにもIT業界を知りすぎている気がします(うぬぼれ)

まだ学生の私が言うのもなんですが、私は『穴掘り』を極めたんです(笑)。子供の頃ですが、庭に穴を掘って自分の背丈まで掘れたら成功という。極めたことで、どこを掘ればいいのかという場所選びや、最後までやり抜くことなどを学びました。たぶん、これはすべてのことに共通すると思うんですよね

ウケ狙いのためスルー。でもこれで場を持っていくことができたw

よく人の多いところは『渋滞する道』に例えられますが、人と同じことをせずに別のルートを探る、開拓していくことも重要です

まあうん。そんな感じ。もっといいたとえをしたつもりだったんだけどなーw

以上初パネルの顧み。

8maki IT, proposal, survey, イベント, エンジニア, 八巻 ,

Mozilla 24にスタッフとして参加

9月 16th, 2007

お久しぶりです。

今日は秋間氏に誘われてMozilla 24のスタッフをしています。
今もなおリアルタイムにw

562596552_69.jpg

Mozilla 24ということで24時間のイベントです。ITイベントで深夜突入は初めて。

でもこのイベント。24時間っていうことで以外にも色々と面白い企画がちりばめられています。

まずShibuya.js

言わずもがなの人気イベントのため、開始数分でいっぱいになるという。。。
当日も盛況で250人近く参加していた模様。かなり高度な話題が多かった。

でもCUIでphotoshopをイヂる、というのは圧巻でしたw

次にドキッ! 丸ごとウェブ!! ブラウザだらけの討論大会 ~Chatでユーザのポロリもあるよ~

livecoding.jpg

ブラウザベンダーやユーザさん同士のパネルなのですが、リアルタイムに動画を配信し、IRC(チャット)でイベントに参加できる。
ustreamの存在で一気に動画配信が身近になった感じですね。
てか会場でPC使ってあえてWEBから参加する人の多さw

双方向性を実現するイベントとしてはかなり質の高いイベントだったと思います。

そして今がLiveCoding

LiveCodingっていうのはリアルタイムに簡単なプログラムを作成するシーンをスクリーンに映して、実際にコーディングを見せる、というもの。
これは23:30~3:30っていう激しいスケジュール。

たった今、はてなの神原さんがニモTVなるサイトを開発されていますw
最近は就活生として、コーディングから離れた生活をしていたのですが、こういう雰囲気の中にいるとなんかうずきますよね~

さあ、後はサバイバル。いつまで耐えていられるかっていう新しい感覚も味わえるイベントでしたw

8maki IT, proposal, survey, イベント, エンジニア