しょんぼり技術メモ

まいにちがしょんぼり

Rubyのcatch句のコストはそこまで安くない

制御構造を適当にやっつけで作るときに(たまに)便利なcatch句のコストは、あまり安いわけではなさそうだ。 以下のベンチマークが妥当かどうかは別として、catchじゃなくてもできる処理ならば、catchを書かずに実現した方がたぶん早い。 ほとんどthrowする…

FuseでQEMUにディスクイメージを提供する場合に、O_DIRECTフラグ付きのリクエストが来てEINVALを返して終了してしまう場合には、-driveオプションでcache=writethroughを指定すると良い

タイトルで完結シリーズ。 fusefsでディスクイメージを提供しているとき、qemuを起動すると"qemu: could not open disk image"と出て即死してしまう。straceすると、O_DIRECTフラグ付きのリクエストが来ているので、どうもそのあたりがクサい。 で、このO_DI…

XenServerでiSCSI上のSRを見失い、no such deviceと言われてしまったときの対応

How to Identify If SCSI Storage Repository has Changed SCSI IDsに書いてあります。 XenServer5.6SP2, 47101pで確認。ちょっとわかりにくいので自分用のメモもかねてまとめておくと: XenServerのコンソールにログインする XenCenterのConsoleから入るな…

UTF-8のBOMを手っ取り早く消す

$ perl -i.bak -p -e 's/\xef\xbb\xbf//' *BOM(0xEF, 0xBB, 0xBF)を消し去る。バイナリファイルが含まれるところで実行するとアレかもしれない。そのときは、末尾のワイルドカードをアレしてください。 元のファイルは、一応.bakっていう拡張子が付いて保存…

SL6.1にRuby 1.9(rpm) + Rails3 環境を作る

Scientific Linux 6.1のslリポジトリにあるRubyは1.8.7なので、自分で1.9のrpmを作ってインストールしてみた。 環境 $ cat /etc/redhat-release Scientific Linux release 6.1 (Carbon) checkinstallのインストール $ git clone http://checkinstall.izto.or…

Drawing horizontal lines in specified range with Gnuplot

to draw horizontal lines with Gnuplot, define a function like this: step(x,from,to,y)=( (from <= x) && (x <= to) ) ? y : 0/0 # draw y=7, horizontal line, in range: 5<=x<=7 plot step(x, 5, 10, 7) points are: gnuplot abandons drawing if NaN …

gnuplotで区間を指定して横線を描きたい

step(x,from,to,y)=( (from <= x) && (x <= to) ) ? y : 0/0 # 5≦x≦10のあいだだけ、y=7の横線を描く plot step(x, 5, 10, 7) 以上。 あそんでみる こんな感じのスクリプト #!/bin/env ruby height = 50 length = 3 str = <

nwdiagで手軽にネットワーク図を作成

感動したのでメモ。環境はMac OS X SnowLeopard/homebrew。 インストール $ brew install python $ /usr/local/share/python/pip install --upgrade distribute $ /usr/local/share/python/pip install pil $ /usr/local/share/python/pip install nwdiag $ …

Intel vProのAMTのRemoteControlで電源のON/OFFをリモートから行う

Intel AMTのSDKは適当に探してダウンロードしておいてください。今回はバージョン6を使用。LinuxでSOAP版の電源操作を行うコマンドはLinux/Intel_AMT/Samples/Soap/RemoteControlにある。 というわけで早速コンパイルしてみる。方法については、Linux/Intel_…

Ruby1.9ではBignumのインクリメントはFixnumのインクリメントに比べて倍ぐらい遅い

タイトルで完結シリーズ。しかも割と「いまさら」ではありますが。システムの稼働中に延々とインクリメントする変数が必要だったので、実際に実験してみた。 先に結果を。 ***** Hello, this is a test benchmark script for Incrementing Integer number. I…

XenServer5でシステム上にゲストOSのディスクイメージを作成した環境でゲストのファイルを吸い出したい

某所で使っているサーバが、地震やら停電やらの影響で死んでしまいました。おおさーばよ しんでしまうとはなさけない そのマシンにはXenServerがインストールしてあり、その上で動作していたゲストOSのファイルにアクセスする必要が出てきました。さて困った…

sambaのパスワードをApacheから使う on CentOS

Apacheで認証をかけたいけど、そのユーザアカウントはsambaと共通にしたい。というシチュエーションがあったので調べてみると、smbuserなる方法があるらしい。というわけで早速使ってみた。…らハマった。記事の環境はGentoo、こちらはCentOS。 下準備 libtdb…

ぼくのTwitterポリシー

ぼくのTwitterポリシー - くだらぬみちくさにっき ---- To waste one’s time on the road might be good, I think. に影響されて。念のため書いておきますが、「個人の見解」です。「こう使え」というものではなく、「こう使っています」というものです。 使…

MessagePack-RPCでバイナリデータを扱うときにUTF-8のままsliceすると死ぬほど遅いのでforce_encodingしよう(Ruby 1.9)

Ruby 1.9から、文字列にそのエンコーディングが含まれるようになった。また、MessagePack-RPCでは、Encoding::ASCII_8BITの文字列を送っても、受け手側ではEncoding::UTF_8になってしまうという仕様がある。 そのため、受け取ったデータをそのままsliceした…

MessagePack-RPCのFutureについての簡単な実験

MessagePack-RPC for Rubyの非同期RPCで使われるFutureについての簡単な実験。実験環境はRuby 1.9.2。 結論を先に: Future.getを複数回呼ぶとどうなるの? → 別に問題ない Future.getはスレッドセーフ? → いいえ。ロックしないと死ぬ。 Future.getを複数回…

MessagePack-RPC for Rubyででかいデータをやりとりするときの性能についての簡単な調査

をやってみた。環境はLinux 2.6.35.6, Core2 Quad Q6600, 4GB RAM. $ ruby --version ruby 1.8.6 (2010-02-05 patchlevel 399) [x86_64-linux] 結果 結果から先に。 $ ruby mprpc-bench.rb 127.0.0.1 12345 10 ********** Local Call ********* 1MB 0.001449…

RubyでWHOIS情報を参照する

Rubyを使ったスクリプトの中で、WHOIS情報を参照したいことがあったので調べてみたところ、Whoisというgemがあるらしい。すばらしい。 gem install whoisでOK。リファレンス等はhttp://www.ruby-whois.org/api/を参考に。 単純に問い合わせたい Whois.whois…

そうだ、DNSを調べよう。

なんかYahooにつながらないネタがHOTなので。 基本 DNSの調査を行うときは、digコマンドが便利です。詳しくはぐぐれ。 $ dig A 調べたいホスト名 @使用するDNSサーバが(Aレコードに対する)基本形です。担当するネームサーバなども知りたいときは、AではなくA…

kvm/RBD(RADOS Block Device) に成功した

長かった…基本的には、wikiを参照。こいつの不正確な情報のせいで苦労したけど コンフィグ テスト用のコンフィグはこんな感じ。ceph1-3全てでMon, MDS, OSDを起動する。RBDだとMDSはいらないかも。 [global] debug ms = 0 [mon] mon data = /data/mon$id deb…

Gmail(に限らず)受信トレイはキレイにしよう

他人のGmailの画面を見ると、案外散らかってたり無造作にされてたりという印象があるので書いてみる。うちのGmailは、3分割されている。画像参照。Gmailには、"Multiple Inboxes"という機能がある(Labs)ので、これを使っている。 (1)受信トレイ 1つ目は、受…

RubyでDNSを解決したりする

自分用メモ。Net::DNS(net-dns) irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'net/dns/resolver' => true irb(main):003:0> require 'pp' => true # 8.8.8.8(google public dns)を使って名前解決を行うインスタンスを生成 irb(ma…

ファイルを開く際のモード指定の罠

いやぁハマった。RubyでFile.open()する際のモードの話。結論から言うと、"r+"が万能で、"w+"はすでにファイルがあるときは0バイトにされ、"a+"は末尾にしか書けない。リファレンスはこれ。読んだつもりだったけど理解が不十分だったらしい。 やりたいこと 1…

Ruby/PGPlot

ソースから入れたら詰まった。悲しい。 extconf.rbでは共有ライブラリ(.so)を見に行くけど、ソースからのインストールだとスタティックライブラリ(.a)しか作られないのが原因だったっぽい? NArray gemから入れる。 # gem install narray PGPlot 諦めてRPMか…

続・ディスクイメージのスループット

ディスクイメージのスループット - しょんぼり技術メモの続き。ext3パーティションを作ってからマウントして計測していたが、思ったよりもvirtioがふるわずという結果に。twitterで相談したら、デバイスファイルに直接読み書きしてみたら?とアドバイスを受…

ディスクイメージのスループット

コミケ原稿の関係でKVMをいじっていたので、ついでにide modeとvirtioで比較してみようと思いついたので、早速測定。環境:C2Q 6600 / 4GB RAM / HGST 500GB SATA2.0 / Fedora 12 x64 / KVM(yumから)ゲストOS:2CPUs / 2GB RAM / Fedora 13 x64 準備 ホスト…

SuicaとかPiTaPaは何の略?

と言う疑問が、予想外のところで解決した。発端は情報処理学会のデジタルプラクティス。いつものようにトイレで用を足しながら流し読みしていたのだが、今月は「特集:ICカードが社会を変える」というもの。研究室物販システム用に、FeliCaのIDmを使った簡易…

億とか京とか

Ruby-listのMLで流れていた、[ruby-list:47175] 金額を漢字フォーマット 億, 千, 万を見て、汎用的に「n桁で区切っていく接頭辞系」を作れないかなと思って試しにやってみた。 #!/usr/bin/ruby -Ku # -*- coding: utf-8 -*- Units = [ "" , "万", "億", "兆"…

あるディレクトリにある全てのファイルの内容を置換する

d:id:d-kami:20100613を見て、それ別にRuby使わなくてもシェルで、しかも一行でできるよ、と思ったので書いておく。原理はカンタン、対象となるファイルをfindでリストアップして、xargsで他のコマンドに渡すだけ。sedコマンドは、"-i"オプションでファイル…

IPアドレスを扱う

IPアドレス・サブネット関係の処理が必要になったので調べた。 "IPAddr"クラスを使うようだ。そのメモ。参照:プログラミング言語 Ruby リファレンスマニュアル irb(main):001:0> require 'pp' => true irb(main):002:0> require 'ipaddr' => true irb(main)…

V-Fieldを使ってみた

りべんじ。 前回のエントリについて 前回(d:id:syonbori_tech:20100530)はコンパイルに成功したところまで。そこでいくつか修正を行ったが、それがあってるかどうか不安だったので、[twitter:@frsyuki]に聞いてみた。 どうやら、"-static"はgccへの指定で、…