rubyで関数ポインタが使えるのか?

  • ruby 1.8.7
  • MacOS 10.8.2
#!/bin/env ruby

class Calcurator
	def initialize(a,b)
		@a=a
		@b=b
	end 
	def add 
		p @a+@b
	end 
	def subRet
		return @a-@b
	end 
	def addValue(c,d)
		p @a+@b+c+d
	end 
	def addValueRet(c)
		return @a+@b+c
	end 
	def addMethod(m)
		return @a+@b+method(m).call
		
	end 
end

class CalcTest
	def exec
		calc=Calcurator.new(2,1)
		calc.method(:add).call			 
		p calc.method(:subRet).call	
		calc.method(:addValue).call(3,4) 
		p calc.method(:addValueRet).call(4)	
		p calc.method(:addMethod).call(:subRet) 
	end 
end

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

結果

3
1
10
7
4

jQueryのsuggestとautocompleteを使ってみる

googleなどの検索ボックスで予測したり、ぺろっと出てくるあれ、実装してみました

  • 予測で出てくるあれ

http://polarblau.github.com/suggest/

こちらからjquery.suggest.jsをゲット

  • ぺろっとでてくるあれ

http://api.jqueryui.com

こちらからjquery-1.9.0.jsとjquery-ui.jsをダウンロード





	     

Macでkakasi

KAKASIをMacにインストールしてみた

  • MaxOS10.8.2
  • kakasi-2.3.4
$ tar zxvfp kakasi-2.3.4.tar.gz
$ ./configure
$ make
make	all-recursive
Making all in src
make[2]: Nothing to be done for `all'.
Making all in lib
/bin/ksh ../libtool --mode=link gcc	-g -O2 -Wall -Wunused -Wuninitialized -Wmissing-prototypes -Wmissing-declarations -pedantic	-o libkakasi.la -rpath /usr/local/lib -version-info 3:0:1	-export-dynamic libdict.lo libkakasi.lo libkanjiio.lo liba2.lo libg2.lo libj2.lo libk2.lo libee2.lo libhh2.lo libjj2.lo libkk2.lo libitaiji.lo lib78_83.lo
rm -fr .libs/libkakasi.la .libs/libkakasi.* .libs/libkakasi.*
gcc -dynamiclib -undefined suppress -o .libs/libkakasi.2.1.0.dylib	libdict.lo libkakasi.lo libkanjiio.lo liba2.lo libg2.lo libj2.lo libk2.lo libee2.lo libhh2.lo libjj2.lo libkk2.lo libitaiji.lo lib78_83.lo	-lc -install_name	/usr/local/lib/libkakasi.2.dylib -compatibility_version 4 -current_version 4.0
ld: can't use -undefined warning or suppress with -twolevel_namespace
collect2: ld returned 1 exit status
make[2]: *** [libkakasi.la] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive-am] Error 2

エラーが出る

http://www.ki.nu/~makoto/diary/?200307b&to=200307131#200307131

こちらに対処法があったので修正

$ vi libtool
allow_undefined_flag="-undefined suppress"
↓
allow_undefined_flag=""
$make
#make install
$ echo "書かし"|kakasi.dSYM -Ja -Ka -Ha
kakashi

うまくいったようだ

GSONを使ってJson文字列をパースする

JSONの文字列を簡単にJAVAのクラスにしてくれます

  • gson-2.2.2.jar
  • java version “1.6.0_37”
  • iOS10.8.2
package jp.qri.search;

import java.util.List;

import com.google.gson.Gson;

public class GsonTest {
	public static class StockItem{
		public String string;
		public String code;
		public String toString(){
			return "("+string+":"+code+")";
		}
	}
	public static class StockList{
		public List stocks;	// 配列はListを使う
		public StockList(){}
		public String toString(){
			String ret="";
			for(StockItem item:stocks){
				ret+=item.toString()+",";
			}
			return ret;
		}
	}
	
	
	public static void main(String[] argv){
		Gson gson=new Gson();
		String jsonStr="{\"string\":\"ソニー\",\"code\":\"6758\"}";
		StockItem item=gson.fromJson(jsonStr,StockItem.class);
		System.out.println(item.toString());
		
		String jsonString="{\"stocks\":[{\"string\":\"ソニー\",\"code\":\"6758\"},{\"string\":\"ソニーフィナンシャルホールディングス\",\"code\":\"8729\"}]}";
		StockList list=gson.fromJson(jsonString, StockList.class);
		System.out.println(list.toString());
	}
}

結果

(ソニー:6758)
(ソニー:6758),(ソニーフィナンシャルホールディングス:8729),

ruby-mysqlで文字コード指定

rubyでMYSQLにつなぐ際にMySQL/Rubyを使っていたのですが、どうやら開発が止まってしまったらしくruby1.9には非対応とのこと

https://github.com/tmtm/ruby-mysql

こちらからruby-mysqlなるものをダウンロード。

ちなみにプロキシ越しのgemではうまくいきませんでした

# gem install ruby-mysql
WARNING:	Error fetching data: too many connection resets (http://rubygems.org/latest_specs.4.8.gz)
ERROR:	Could not find a valid gem 'ruby-mysql' (>= 0) in any repository
ERROR:	Possible alternatives: ruby-mysql

とりあえずインストール

# ruby setup.rb
  • 日本語

mysqlにはSjisでデータが入っており、クライアントがutf-8の場合には以下のように書く必要があります

#/bin/env ruby -w -Ku
# -*- coding=utf-8 -*-
client=Mysql.connect("localhost","root","pass","dbname")
client.charset="utf8"
res=client.query("select id,name from IdTable")
res.each{|r|
p r
}

kyototycoonをmemcachedモードで使う

kyototycoonをmemcachedモードで使ったときの不思議な現象が出たのでメモ

使用したバージョンはこれ

kyotocabinet-1.2.76

kyototycoon-0.9.56

MacOS10.8

  • まずはOKパターン
$ /usr/local/bin/ktserver -host 127.0.0.1 -th 2 -plsv /usr/local/libexec/ktplugservmemc.dylib -plex 'opts=f' ./ktserver.kch >> ./ktserver.log
$ telnet localhost 11211
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 88068
STAT uptime 8
STAT time 1360107774
STAT version KyotoTycoon/0.9.56
STAT pointer_size 64
STAT curr_connections 1
STAT threads 16
STAT curr_items 9800
STAT bytes 6794776
STAT db_apow 3
STAT db_bnum 1048583
STAT db_chksum 188
STAT db_count 9800
STAT db_dfunit 0
STAT db_flags 1
STAT db_fmtver 5
STAT db_fpow 10
STAT db_frgcnt 0
STAT db_ktcapcnt -1
STAT db_ktcapsiz -1
STAT db_ktopts 0
STAT db_librev 13
STAT db_libver 16
STAT db_msiz 67108864
STAT db_opts 0
STAT db_path ./ktserver.kch
STAT db_realsize 6794776
STAT db_realtype 48
STAT db_recovered 0
STAT db_reorganized 0
STAT db_size 6794776
STAT db_trimmed 0
STAT db_type 48
STAT set_hits 0
STAT set_misses 0
STAT get_hits 0
STAT get_misses 0
STAT delete_hits 0
STAT delete_misses 0
STAT incr_hits 0
STAT incr_misses 0
STAT decr_hits 0
STAT decr_misses 0
STAT cmd_set 0
STAT cmd_get 0
STAT cmd_delete 0
STAT cmd_flush 0
END
  • NGパターン
$ /usr/local/bin/ktserver -host 127.0.0.1 -port 11211 -th 2 -plsv /usr/local/libexec/ktplugservmemc.dylib -plex opts=f ./ktserver.kch
$ telnet localhost 11211
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
Connection closed by foreign host.

ポートを明示的に指定すると落ちてしまう

memcachedで日本語キーを扱う

memcachedの代わりにkyoto tycoonを試してみようとしています。

kyoto tycoonはmemcachedと同じインターフェースで起動できるとのことで、当然memcachedライブラリが使えます

日本語のキーが使えるかどうか確認します

  • memcachedライブラリ
$ su
# export http_proxy=proxy:port
# gem install memcached
#!/bin/env ruby -Ku 
# -*- encoding:utf-8 -*-
require "rubygems"
require "memcached"
require "nkf"

cache=Memcached.new "localhost:11211"
cache.set("sony","6758",0)
puts cache.get("sony")
key="ソニー"
cache.set(key,"ソニー",0)
puts cache.get(key)
$ ruby mem.rb 
6758
/Library/Ruby/Gems/1.8/gems/memcached-1.5.0/lib/memcached/memcached.rb:630:in `reraise': Key {"ソニー"=>nil} (Memcached::ABadKeyWasProvidedOrCharactersOutOfRange)
	from /Library/Ruby/Gems/1.8/gems/memcached-1.5.0/lib/memcached/memcached.rb:608:in `check_return_code'
	from /Library/Ruby/Gems/1.8/gems/memcached-1.5.0/lib/memcached/memcached.rb:306:in `set'
	from mem.rb:11

なんかだめ。。

ちなみにperlだと

#!/usr/bin/perl

use strict;
use warnings;
use Cache::Memcached::Fast;

my $memd=Cache::Memcached::Fast->new({
		servers => [ { address => 'localhost:11211' }], 
}); 

# 値を追加 key => value
my $key='ソニーal';
$memd->set($key=> 'そにー2');

# 値を取得
my $id = $memd->get($key);
print "$id\n";
$ perl mem.pl
そにー2

rubyのライブラリが悪いようだ

ちなみにOSはMountain Lion

vimのシンタックスハイライトにscalaを追加する

macでscalaを使うためにはbrewでインストールするのが一番簡単です

brew install scala

このままだとvimで.scalaを開いた際に色がつかないので非常にみづらいです

いろいろやり方はあるみたいですがこれが一番簡単でした

http://bsnyderblog.blogspot.jp/2012/12/vim-syntax-highlighting-for-scala-bash.html

mkdir -p ~/.vim/{ftdetect,indent,syntax} && for d in ftdetect indent syntax ; do wget --no-check-certificate -O ~/.vim/$d/scala.vim https://raw.github.com/scala/scala-dist/master/tool-support/src/vim/$d/scala.vim; done

KeyChain

iPhoneではパスワードなどを保存する際にはKeyChainなるものを使って厳密に保存する必要があるとのことです。SQLiteなどに保存するのはもってのほかとか。。

http://cocoadays.blogspot.jp/2011/02/ios-keychain-services.html

この辺りを参考にコーディング。

見よう見まねなのでよくわかっていなかったのですが、”v_Data”や”acct”は固定値だったのですね。勝手に追加しようとしたらおこられました

Windows8のWindows Defenderではまったので

Windows8にWindowsDefenderをプロキシ経由で使っていると更新時にエラーが出て更新できません

どうやらIEのプロキシ設定を自動で読み込んでくれない模様

http://win.just4fun.biz/Windows設定関連/プロキシ経由のWindows%20Updateができない場合の対処.html

こちらを参考に

管理者権限でコマンドプロンプトを開き

netsh winhttp import proxy source=ie

これでオK