2009年3月19日木曜日

Bluffでグラフ描画

以下、配布サイト(http://bluff.jcoglan.com/)からの抜粋。

BluffはGruff graphing library for RubyをJavaScriptに移植したもの。
他のライブラリへの依存を最低限にしつつ、Gruffの全ての機能をサポートするようにデザインした。
必要なサードパーティーのスクリプトはJS.Class(約2kb gzip圧縮時)と、Internet Explorerでcanvasをを使えるようにするGoogleのExCanvasだ。
これら2つのスクリプトはBluffと共に提供されている。Bluff自身はgzip圧縮時に約8kb程度。

とのこと。

で試しに書いたスクリプトが以下。

<html>
<head>
<script language="javascript" src="js-class.js" type="text/javascript"></script>
<script language="javascript" src="bluff-min.js" type="text/javascript"></script>
<script language="javascript" src="excanvas.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function drawSample(){
var g = new Bluff.Line('example', 800);
//g.theme_keynote();
//g.theme_37signals();
//g.theme_rails_keynote();
//g.theme_odeo();
//g.theme_pastel();
//g.theme_greyscale();
//g.hide_line_markers = true;
g.hide_dots = true;
//g.hide_legend = true;
g.minimum_value = 0;
g.maximum_value = 200;
g.x_axis_label = 'Year';
g.y_axis_increment = 25;
g.zero_degree = 90;
g.title = 'グラフ描画サンプル';
g.data('Apples', [1,2,3,4,4,3,4, 1,2,3,4,4,3,4]);
g.data('マンゴー',[3,4,5,6,7,8,9, 10,12,13,140,15,16]);
g.data('Oranges', [4,8,7,7,3,1,4, 4,8,7,7,3,1,4]);
g.data('なにか', [100, 120, 100, 119, 98, 102, 100, 100, 120, 100, 119, 98, 102, 100]);
g.labels = {0:'2003', 4:'2004', 8:'2005', 12:'2006' };
g.draw();
}
</script>
</head>
<body onload="drawSample()">
<canvas id="example" width="100%"></canvas>
</body>
</html>

2009年3月13日金曜日

Windowsでwhich

whichがないと何かと不便。
whichはとっても便利なのになんで標準装備されていないのだろう・・・

#! ruby

def search_dir(result, target_path)
puts " #{target_path}" if $DEBUG
Dir[target_path].each do |file|
unless result.index(file)
puts(file.gsub(/\//, '\\'))
result << file
end
end
end

def main(args)
if args.size == 0
puts "Usage error: which keyword"
exit
end

target = args[0]
result = []

(['.'] + ENV['PATH'].split(';')).each do |path|
path.sub!(/^"*/, '').sub!(/"*$/, '')
search_dir(result, File.expand_path(File.join(path, "#{target}")))
search_dir(result, File.expand_path(File.join(path, "#{target}.*")))
end
end

main(ARGV)

2009年3月5日木曜日

Win32APIでDLLの関数を呼ぶ

DLL
extern "C" {
struct P3 {
char* a;
char* b;
wchar_t* c;
};

void __declspec(dllexport) study2(P3* ptr)
{
ptr = ptr;
ptr->c[0] = L'希';
}
}
Ruby
#!/usr/local/bin/ruby -Ku
# -*- encoding: utf-8 -*-
require 'Win32API'
require 'nkf'

def sjis(x)
NKF.nkf('-m0 --ic=utf8 --oc=cp932', x)
end

def utf16le(x)
NKF.nkf('-m0 --ic=utf8 --oc=utf-16le', x)
end

fn_study2 = Win32API.new('Study.dll', 'study2', %w(p), 'v')
x = [ sjis("hello"), sjis("world"), utf16le("あかさた") ]
fn_study2.call(x.pack("ppp"))
puts(NKF.nkf('-m0 --ic=utf-16le --oc=cp932', x[2]))

2009年3月2日月曜日

RubyのWin32APIとUNICODE

Ruby-1.9.1でWin32APIを使ってUNICODE文字列を渡す例。
#ほとんどRubyリファレンスマニュアルのコピペ。

#!/usr/local/bin/ruby
# -*- encoding: utf-8 -*-

require 'iconv'
require 'Win32API'

class Win32API
MB_OK = 0

@@messagebox = nil

def self.MessageBox(wnd, text, caption, type = MB_OK)
@@messagebox ||= Win32API.new('user32', 'MessageBoxW', %W(p p p i), 'i')
@@messagebox.call(wnd, text, caption, type)
end
end

a = Iconv.iconv('utf-16le', 'utf-8', 'やぁ')[0]
b = Iconv.iconv('utf-16le', 'utf-8', 'うあは??')[0]
Win32API.MessageBox(0, a, b)

2009年2月16日月曜日

MacFUSE + NTFS-3G で起動ディスクからWindowsが消えた!

結論を先に書くと、起動ディスクのリストに表示されないだけで起動することは可能。

NTFSを読み書きできる!と喜んでいたのもつかの間、さてWindowsで起動しようと環境設定から起動ディスクを選択しようとしたところ・・・

あれ?

Windowsのパーティションが起動ディスクに表示されていない?

NTFS-3Gをインストールした直後だったのでこれ以外に邪魔しているものはいないだろう。
うむぅ。

起動ディスクの選択肢に表示されるための条件はよくわからないが、パーティションのブート情報が書き換えられてしまったのかも・・・と最悪の状況も覚悟しつつ、とりあえずNTFS-3GをDisableにしてMacを再起動する。

しかし表示されない。

あぁぁぁ

幸いMacでマウントは可能なので必要そうなファイルをバックアップして、Windowsのインストールメディアを探して・・・

そうしている間にふと気がついた。iMacを起動するときに起動するOSを選ぶ機能があったはず!
コントロールキー押しながら起動だっけ?コマンドキー押しながら?オプションキー押しながら?
あー覚えてない。

一通り試してみたけど全部だめ。だめというのは起動できないのではなくて、選択画面にならないだけ。
Bluetoothがだめなのか?と疑って、たまたま机の上にあったUSBのキーボードを接続して再挑戦。
Altキー押しながらで成功。やったWindowsを選べる。という流れで無事Windowsを起動することができた。

さてApple Wireless Keyboardではだめだった理由はわからないが、iMacを再起動するのではなく、Mac OS Xを完全にシャットダウンした状態で、Optionキーを押しながらiMacの電源を入れると起動ディスクの選択ができた。再起動ではだめだったのね。知らなかったよ。

WindowsからはタスクトレイのBootcampでMacで再起動が普通に機能する。
MacからWindowsに変えるのは一手間かかるようになったけれど、NTFSを読み書きできる便利さをとることにした。

いや~よかった。

Lenovo IdeaPad S10e はじめました

衝動買いに近いけど、ついに買いました。49800円。

それでもEeePCがリリースされた頃からリサーチしてきたし
ネットブックの中でも最後発と言われるS10e
そろそろネットブックの第1世代が出そろったのでは?と思う。

ネットブックのCPUがAtomに集約されてきたことで、ベンダーはハードウェア構成の選択肢がほとんどないらしい。だからどのネットブックもほとんど同じ。

その中でIdeaPadを選んだ理由は
  • デザインが気に入ったこと
  • 6セルバッテリーが標準で約5時間稼働すること
  • キーボードに慣れられるとおもったこと
  • QuickStartを触ってみたかったこと
  • Lenovoというブランド
そんなところかな。

バレンタインデーに発売された新色のブルーとホワイトで迷ったけれど、運良く(逆か?^^)川崎のビックカメラにはホワイトしか在庫がなかったのでホワイト。パンフレットやWebの画像で見るよりも綺麗だなという印象。

さてどうカスタマイズしていこうかな~
しばらく楽しめそう。

2009年2月10日火曜日

MacFUSE + NTFS-3G

Bootcampを使ってインストールしたWindowsのNTFS領域を読み書きするために試してみた。
ダウンロードしたソフトは次の2つ。
  1. MacFUSE-2.0.3,2.dmg
  2. NTFS-3G_2009.1.1u1-stable-catacombae.dmg
両方ともインストーラ(.pkg)をクリックしていくだけでインストール完了。
NTFS-3Gのインストールの後に再起動を求められた。
再起動のあと、システム環境設定に2つのアイコンが表示されている。
Windowsのドライブも通常通り表示されているのだが、情報を見たところNTFS-3Gの表記が!
試しにフォルダを作成してみたところ問題なく作成できた。
想像していたよりも簡単だった。
さすがMac。

MacFUSE
http://code.google.com/p/macfuse/

NTFS-3G for Mac OS X
http://macntfs-3g.blogspot.com/