autocompleteで送信パラメタをカスタマイズしてみた

jQueryAutoCompleteではデフォルトの送信パラメタはtermのみでちょっと使い勝手が悪かったりします。

そこでカスタマイズしてみます

source:function(request,response)をオーバーライド



	Insert title here
	    


 

test.js

$(function() {
		var url="./searchEngine.jsp";
		var val1=$("#val1").val();
		var val2=$("#val2").val();
		$( "#searchTags" ).autocomplete({
		source : function( request, response ) {
					 request["val1"]=val1;
					 request["val2"]=val2;

			 $.ajax({
				url: url,
				data: request,
				dataType: "jsonp",
				jsonpCallback:'callback',
				success: function( data ) {
					response( data );
				},
				error: function() {
					response( [] );
				}
			});
		},

		});
});

searchEngine.jsp

<%@ page language="java" contentType="text/html; charset=Shift_JIS"
		pageEncoding="Shift_JIS"%>
Map map = request.getParameterMap();
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
	String name = (String)it.next();
	String[] val = (String[])map.get(name);
	for (int i = 0;i

MacOS10.8のVirtualBox上でUSB接続のDVDを認識させる

  • iMac MacOS10.8
  • DVD Drive Buffalo BRXL-PC6VU2
  • ゲストWindowsVista Ultimate 32bit

この組み合わせでVirtualBox上のVistaにつなげるにはちょっと苦労しました。

VirtualBoxの設定からポート、USB を選択し+ボタンでBUFFALO Optical ODDを追加します。この際にUSB2.0コントローラを有効にしますが、こちらはVirtualBoxの追加パッケージを入れておく必要がありました。

このまま起動すると、Vista上では不明なデバイスとして認識されてしまい、DVDは使えません。

ネットを調べたところ皆さん苦労しているようで、起動前にUSBをMacから物理的にはなしておき、VirtualBox起動後につけるとかあったのですが、うまくいきません。

半ばあきらめていたのですが、OKWebにあったこれ

「CPUを一個にするとうまくいく!」

半信半疑でVirtualBoxのCPU数を2個から1個へ。

これがうまくいきました。Explorer上でちゃんとDVDドライブとして認識されています

YAML.dumpで日本語が文字化けする

YAML.dumpでUTF8文字列をダンプする際にはバイナリと認識されてしまい、ファイルに保存した際にちょっと困ったことになります。

Psychなどを使う方法があるとのことですが、1.8だと気軽には使えません。

一つすばらしいやり方が紹介されていたのでちょっと改造してみます

http://projectzero-swb.blogspot.jp/2010/06/rubyyaml2.html

  • CentOS5.4
  • ruby1.8.7
#!/usr/bin/env ruby																																											 
# -*- encoding: utf-8 -*-

require "yaml"
require "yaml/encoding"

# String.is_binary_data?で必ずfalseを返すように書き換える
class String
	def is_binary_data?
		return false
	end
end

class Name
	attr_reader:no,:name
	def initialize(no,name)
		 @no=no
		 @name=name
	end
	def to_s
		return @no.to_s+":"+@name.to_s
	end
end

data = {"はつね"=>Name.new(1,"みく"), "はちゅね"=>Name.new(2,"みく"), "かがみね"=>Name.new(3,"りん・
れん"), "めぐりね"=>Name.new(4,"るか")}

# 通常どおり表示
#puts "Escape:"
yaml = YAML.dump(data)

# アンエスケープして表示
#puts "Unescape:"
yaml = YAML.unescape(yaml)

f=open("test3.yaml","w")
f.write(yaml)
f.close

f=YAML.load_file("test3.yaml")
f.each{|k,v|
	puts k+","+v.to_s
}

実行結果

はちゅね,2:みく
めぐりね,4:るか
かがみね,3:りん・れん
はつね,1:みく

test3.yaml

--- 
"はちゅね": !ruby/object:Name
	name: "みく"
	"no": 2
"めぐりね": !ruby/object:Name
	name: "るか"
	"no": 4
"かがみね": !ruby/object:Name
	name: "りん・れん"
	"no": 3
"はつね": !ruby/object:Name
	name: "みく"
	"no": 1

rubyのマルチスレッド

rubyはマルチスレッドのプログラムを書いても、CPUは一個しか使ってくれないらしい。

GIL というもののせいらしい。。

http://ja.wikipedia.org/wiki/グローバルインタプリタロック

そこでマルチプロセスのプログラムを作ってみる

#!/bin/env ruby
class Test
	def exec
		t1=fork{calc}
		t2=fork{calc}
		Process.waitpid t1
		Process.waitpid t2
	end
	def calc
		tim=rand(10)
p Process.pid.to_s+",start,"+tim.to_s
		sleep tim
p Process.pid.to_s+",end,"+tim.to_s
		exit
	end
end

if __FILE__ == $0 then
	Test.new.exec
end