たごもりすメモ

コードとかその他の話とか。

2011-01-01から1年間の記事一覧

node.jsで複数の処理を並列に実行して全部完了したらコールバックを呼び出したい

I/Oを含む処理はnode.jsにおいてコールバックを繋げる一連の非同期処理として実装するんだけど、これらの一連の処理を複数並列に実行し、それら複数の処理が全部完了したら特定のひとつのコールバックを呼び出す、というようにしたいなー。 と思ってうっかり…

Google Font APIからSQL/HQLに使えそうなのを探した

いま作ってるWebアプリはHiveQL(見た目ほぼSQLみたいなの)をガッツリと表示させるのがメインのお仕事なので、そこに使う文字には少々こだわりたい。しかし当方UIには腕の覚えがまったくなく、クロスブラウザできちんと同じように見えるフォントの指定のしか…

いっしょに仕事をしたいプログラマ 5つの特徴

ちょっとこんなことを考えるきっかけがあったので、ざっと書き出してみた。Webに公開されている情報からあるプログラマについて見てみたとき、どういう人ならいっしょに働いてもいいかについて。 ここに書く内容はソースコードの品質以前の問題についてのみ…

.isドメインを運用する人はさくらVPS使っとけ

ついネタドメインを思い付いてしまって後先考えずに取得してしまったものの、いざ運用しようとしたら罠が多数あってしまった! 結局取っただけで使えねえ! とカネをドブに投げ捨ててしまった悲しい気分のあなた向け。*1結論: さくらVPS使って毎月1960円 (さ…

xargs を使ってカジュアルに並列処理

シェルからでも重い処理というのはちょこちょこあって、例えば超デカいログファイルを移動して圧縮したりというお仕事は世界中のあらゆる場所で毎日行われていたりする。コマンドラインからでも大量の圧縮済みログファイルをいっぺんに展開したい、とか。あ…

boost 1.46 で boost::filesystem の非互換に死んだ

scribedをまたぞろビルドしてたら、以下のようなエラーが出てコケた。いちおうメモ。 if g++ -DPACKAGE_NAME=\"scribe\" -DPACKAGE_TARNAME=\"scribe\" -DPACKAGE_VERSION=\"1.5.0\" -DPACKAGE_STRING=\"scribe\ 1.5.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE…

簡単にscribedにログを転送するためのエージェント scribeline を作った

まあ実際のコード自体はずいぶん前に書き上がっててGitHubにあったんだけど。tagomoris/scribe_line · GitHub 何で作ったの scribedはログ収集サーバとしてはグッドなんだけど、なぜかエージェント側、ログを送出する側のコード例が極めて貧弱で、たとえば俺…

Webサーバ勉強会#3に参加してきたよ&しゃべってきたよ

震災の影響で日程が変わって行けるようになったけど定員ぴったりだなー、と思ったら枠が増えたので参加してきた。なんと全員発表ということだったので、2日前からネタを急遽考えはじめる始末。結局昔のネタを掘り出して、最近の状況をちょっとまとめてきまし…

Linux mdを構成したら実戦投入する前に実施しておくべきたったひとつの重要なことがら

再起動し、再起動後に md が正常に構成されているか cat /proc/mdstat して確認する。 なんで? Linux md はパーティションタイプ fd (Linux RAID AutoDetect) になっていれば、OS起動時にアレイ構成に必要なパーティションを自動的に集めてきて md をスター…

hp SmartArrayをhpacucliコマンドを使って設定変更する

hpacucliコマンドはHPのサーバ関連のソフトウェアツールキットに含まれてる。インストール方法とかはぐぐって適当に。あまりに使い方がよくわからなくてダメな感じなのでいくつかの手順をメモっておく。 そもそもの使いかた まず hpacucli とコマンドを実行…

16TBを超えるサイズのファイルシステムを作る

無事20TBのRAID-6ボリューム /dev/md0 ができたので、ファイルシステムをどうしようかなー、まあext4でいいか安定路線で、と思って調べてみたら ext4 の最大サイズは 1EB らしい。素敵! ということで作ろうとしてみたら、なんかうまくいかない。 # mkfs -t …

RAIDレベルの話: 各レベルのアレイのビルド/リビルド速度について

RAIDアレイをなんらかの指標をもとに設計するとき、容量、性能および安全性と価格が最初に来るのはともかくとして、それに付随する重要な要素としてディスクがfailしたときのリビルドの所要時間およびリビルド中のパフォーマンス低下具合についても注意は必…

Linux Software RAIDでmdをベリファイする

RHEL系OSでmdadmを入れていると cron.weekly にraid-checkというスクリプトが入る。これは作成済みのmdすべてに対してベリファイをかけるもので、何も考えていないLinux Software RAID利用者でも実は既にベリファイは行われていたんだよ! なんだってー! と…

RAIDレベルの話: 1+0と6はどっちが安全か?

仕事でちょっくら12台のHDDを使ったRAIDアレイを組むんだけど、その折にちょうどTwitterで「RAID-1+0にしないとRAID-6とか怖くて使えませんよ!」というウソ八百な内容のWebページのURLを見掛けたので、いいかげんそのような迷信が消え去ってもよかろうと思…

Hiveに対するThriftの各RPCレスポンス

メモ。HiveServer用に定義されている各メソッドをThrift RPCで呼んだときに何が返ってくるのよ、と。順序的には、基本的には execute をまずクエリつきで呼んで、それに対してクエリプラン・結果データのスキーマ・結果データそのものを取得する、というかた…

複数クライアントからHiveServerへの同時接続

Hadoopクラスタは(ノードの処理能力が許すかぎり)複数のジョブを並行に起動できるが、その一方でHiveServerはシングルスレッドで動作し、複数のクライアントを(厳密な意味で)同時に相手にはできない。そのあたりはWikiに書いてある。 The HiveServer is curr…

HiveServerを使用してnode.jsからHiveQLを実行する

HiveServerはThriftプロトコルをしゃべるので、おなじくThriftで接続すると任意のクエリを発行できたりして大変便利。ということで node.js からもやった。以前からやってる内容の続き。 HiveServerを使用してPythonやPerlからHiveQLを実行する - tagomoris…

圧縮ファイルを入力にしても展開されない症状

CDH3b2にて。 Hadoop Streaming (MapReduce) では入力が圧縮ファイルだと拡張子を見て適当に展開してくれる。くれるはずなんだけど、なんか気付いたらうまく展開できないようになってた。どうもバイナリデータのまま mapper に渡されているらしい。 しかし手…

node.js用のKyoto Tycoonクライアントライブラリ2種類を比較

アプリのデータ格納にKyoto Tycoonでも使うべ、と思って調べてみるとnode.js用には2種類のクライアントライブラリがあるようだ。 kyoto-client - Kyoto Tycoon client for node.js node-kyoto-tycoon - SWDYH どちらも npm install kyoto-client および npm …

node.jsの非同期I/Oにおけるデータ受信のパターンのバリエーション

そもそもなんでnode.jsのThriftライブラリではBufferedTransportがサポートされず、FramedTransportのみが使える状態だったのか。Thriftの歴史的にはBufferedTransportの方が先行して存在しており、また仕様自体も単純のようだ。*1 実装を開始してみてわかっ…

node.js用のThriftライブラリにパッチを書いた

先日の node.jsからThrift経由でHiveServerに通信しようとして力尽きた - tagomorisのメモ置き場 の記事に書いた件、しばらくThriftの BufferedTransport の他言語実装を眺めていたらなんとなく作れそうな気がした*1ので、transport層を置き換え可能にするた…

node.jsからThrift経由でHiveServerに通信しようとして力尽きた

力尽きたのでメモだけ。 Thriftがバージョン 0.6.0 でnode.jsに対応したことになっているが、送信/受信ともに FramedTransport でしか動作しない 開発はここ https://github.com/wadey/node-thrift 今のところFramedTransport以外の実装を作る気配はなさそう…

OSXでfuse hdfs mountしたい(できてない)

Mac OSX環境で fuse hdfs なシステムの開発・テストをしたいので調べてみたら macfuse - The Easiest and Fastest Way to Create File Systems for Mac OS X - Google Project Hosting なるものがあるらしいじゃないデスカ。 ということでこれをさくっとダウ…

ActiveDirectoryサーバへの接続のタイムアウトについて調べた

ApacheからLDAP経由*1でWindows ActiveDirectoryサーバに接続して認証をやっているのだが、よくわからないタイミングで status 500 になったりして挙動が怪しい。LogLevel debugを設定して見たりしてもいまいちよくわからないが、どうやら確立済みのLDAP接続…

HiveServerを使用してPythonやPerlからHiveQLを実行する

HiveServerはThriftプロトコルをしゃべる*1ので、おなじくThriftで接続すると任意のクエリを発行できたりして大変便利。ということで、やったので、そのメモ。 準備 まずHiveServerだけど、hiveコマンドを叩いてクエリが実行できる状態なら以下のコマンドで…

Hive CLIをHiveServerに接続して使いたい(が、現状ムリ)

Hive CLIはHiveQLをがんがん書くとさくさくMapReduceされて超絶便利なんだけど、HiveServerをどこかに立てて複数のアプリケーションからそこに接続する場合、Hive CLIをどう使えばいいの、というのがぱっとわからなかった。ぐぐってみてもぜんぜん方法がひっ…

MacOSXでnode.js/npm/nvmをインストール

メモ。(3/4 15時に修正) $ brew install node $ curl http://npmjs.org/install.sh | sh $ npm install nvm $ source ~/.bashrc # nvmのインストール時に指示される $ nvm install v0.4.2 # など 最初に brew install node するけど、ここで入るnode.jsのバ…

bashでパターン展開を行うときの注意点

おや、と思ったのでメモ。ブレース展開とグロブ展開を組合せたとき bashはブレース展開後のグロブ展開時、パターンにマッチするものがなければパターンをそのまま出力する tcshはブレース展開後のグロブ展開時、パターンにマッチするものがなければ何も出力…

rubyで関数合成を適当に

評価関数を扱うコードを書いたりしてると関数合成は割とやりたいことがあって、でも細かいことを考えないといけなかったりでめんどいなーとスルーすることが多いんだけど、このエントリを今日見て刺激を受けた。 Groovy 1.8 のクロージャ合成 - A Memorandum…

Apacheログパーサを書いた

ApacheのログをparseしたいがCPANを見てみるとなんかぴったりなのがない。"Apache Log" で検索した限り、LoggerはいっぱいあるんだけどParserがビミョー。なぜ。見付かったのは以下ふたつのみ。 Apache::ParseLog - search.cpan.org ファイルを全部読み込ん…