gitとsubversion

忘れないように先にメモ。
あとで続きを書く。

cd /var/lib/git
git svn clone -s --prefix=svn/ file:///var/lib/svn/gitsvnrepo_subversion

mkdir gitsvnrepo.git
cd gitsvnrepo.git
git init --bare --shared=true
cd ..
cd gitsvnrepo_subversion
git push --all ../gitsvnrepo.git
cd ../gitsvnrepo_subversion
git push ../gitsvnrepo.git 'refs/remotes/svn/*:refs/heads/svn/*'
cd ../gitsvnrepo.git
git branch -a

# gitから取り込み、svnへコミット
cd /var/lib/git/gitsvnrepo_subversion
git pull --rebase ../gitsvnrepo.git master
git svn rebase
git svn dcommit

# svnから取り込み、gitへpush
cd /var/lib/git/gitsvnrepo_subversion
git svn rebase
git push  ../gitsvnrepo.git master

とりあえずこんなで動いているのだけど、書くのコマンドの意味をもう少し知りたい。

Ubuntu Desktop CD を使って、マシンのバックアップをしてみる

現在実行中、うまくいくかわからない。
自己責任で。

Ubuntu 10.10 の Desktop CD をダウンロードしてきて、焼く。

立ち上がった後、以下のコマンドを全部 sudo つけて実行中

apt-get update
apt-get install smbfs qemu-kvm
# sambaをマウント
mount -t cifs //windowssamba/share /mnt/smb -o username=guest,codepage=cp932,iocharset=utf8,defaults
# 移動
cd /mnt/smb
# イメージ作成
qemu-img create newdisk.img -f raw 100G
# nbd を読み込む
modprobe nbd
# 
qemu-nbd -c /dev/nbd0 newdisk.img
# パーティションを切る
fdisk /dev/nbd0

## n
## を押して、新しいパーティション作って
## w
## 押して書き込み

# 今ここ、今回はwindowsなんで、ntfsclone
ntfsclone -O /dev/nbd0p1 /dev/sda1
# 終了
qemu-nbd -d /dev/nbd0

mysql-proxy mysql-proxyとmysql sandbox

mkdir libs
cp plugins/proxy/.libs/libproxy* libs
cp plugins/admin/.libs/libadmin* libs
src/mysql-proxy --admin-address=127.0.0.1:4041 --proxy-backend-addresses=192.168.1.24:5154 --plugin-dir=/home/hogehoge/mysql-proxy/libs --admin-username=admin --admin-password=admin --admin-lua-script=/home/hogehoge/mysql-proxy/lib/admin.lua --proxy-lua-script=/home/hogehoge/mysql-proxy/mysql-proxy/example.lua

必要があれば LUA_PATH を追加する

LUA_PATH="/usr/share/lua/5.1/?.lua:lib/?.lua" mysql-proxy ....

いろいろ追加したかったので、

--lua-path="./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;/home/manabu/work/mysql-proxy/mysql-proxy/lib/?.lua;" --lua-cpath="./?.so;/usr/local/lib/lua/5.1/?.so;/usr/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so"

WebService::Solr を使った追加と検索のサンプル。

WebService::Solr 0.11

localhost:8983
でsolrをうごかしているとき。
solr 1.4.1 のサンプルとか。

#!/usr/bin/perl
use WebService::Solr;
use WebService::Solr::Query;

my $solr = WebService::Solr->new;

my @fields;
my $id_field = WebService::Solr::Field->new( id => 'foobar' );
my $price_field = WebService::Solr::Field->new( price => 10000 );
push(@fields, $id_field);
push(@fields, $price_field);
my $doc = WebService::Solr::Document->new;
$doc->add_fields( @fields );
$doc->boost( 2.0 );
my $id = $doc->value_for( 'id' );
print $doc->to_xml()."\n";

my @docs;
push(@docs, $doc);
$solr->add( @docs );

my $query  = WebService::Solr::Query->new( { id => 'foobar' } );

my $response = $solr->search( $query );
for my $doc ( $response->docs ) {
    print $doc->value_for( 'id' )."\n";
}

実行結果

<doc boost="2"><field name="id">foobar</field><field name="price">10000</field></doc>
foobar

luke で lucene 3.x で compress でstoreしたデータをみるパッチ

lucene 3.x(3.0.2だったり3.1devだったり) でCompressionTools.compressStringで格納したfieldのデータを
lukeでみようとしたんだけど、luke 1.0.1 では見れなかった。
Show Full Textしたあと、Show Contents AsでCompressという選択肢を追加するようにした。

lukeのサイト
http://code.google.com/p/luke/
から、
subversionをチェックアウトしたものにあてる。

documentの画面でみれたらいいなぁとおもったり、
選択肢は、Compressじゃなくて、Decompressなんじゃないかなぁとか、
そもそも自分の日本語がおかしいなぁとかいろいろあるが
とりあえず。

Index: src/org/getopt/luke/Luke.java
===================================================================
--- src/org/getopt/luke/Luke.java	(revision 39)
+++ src/org/getopt/luke/Luke.java	(working copy)
@@ -31,6 +31,7 @@
 import java.text.NumberFormat;
 import java.util.*;
 import java.util.Map.Entry;
+import java.util.zip.DataFormatException;
 import java.util.zip.GZIPOutputStream;
 
 import javax.swing.JFileChooser;
@@ -40,6 +41,7 @@
 import org.apache.lucene.analysis.*;
 import org.apache.lucene.analysis.payloads.PayloadHelper;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.document.CompressionTools;
 import org.apache.lucene.document.DateTools;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
@@ -2871,6 +2873,14 @@
       setString(find(dialog, "unit"), "text", " bytes");
       value = Util.bytesToHex(data, 0, data.length, true);
       len = data.length;
+    } else if (enc.equals("cbCompress")){
+    	try {
+    		value = CompressionTools.decompressString(data);
+    		len = value.length();
+		} catch (DataFormatException e) {
+			warn = true;
+	       value = Util.bytesToHex(data, 0, data.length, true);
+		}
     } else if (enc.equals("cbUtf")) {
       setString(find(dialog, "unit"), "text", " UTF-8 characters");
       value = f.stringValue();
Index: src/xml/positions.xml
===================================================================
--- src/xml/positions.xml	(revision 39)
+++ src/xml/positions.xml	(working copy)
@@ -19,6 +19,7 @@
 			<choice name="cbHex" text="Hex dump"/>
 			<choice name="cbInt" text="Array of int"/>
 			<choice name="cbFloat" text="Array of float"/>
+			<choice name="cbCompress" text="Compress"/>
 		</combobox>
 	</panel>
 	<table colspan="3" name="pTable" halign="fill" valign="fill" weightx="1" weighty="1">
Index: src/xml/field.xml
===================================================================
--- src/xml/field.xml	(revision 39)
+++ src/xml/field.xml	(working copy)
@@ -19,6 +19,7 @@
 			<choice name="cbNum" text="Number"/>
 			<choice name="cbInt" text="Array of int"/>
 			<choice name="cbFloat" text="Array of float"/>
+			<choice name="cbCompress" text="Compress"/>
 		</combobox>
 	</panel>
 	<textarea colspan="2" font="courier" width="370" height="150" wrap="false" weightx="1" weighty="1" halign="fill" valign="fill" editable="false" border="true" name="fDataText"/>

Bio::Das::Lite 2.04を試す。その後

そもそも、テストが通らない原因は、
http statusで302が返ってきたときに、次の場所をみにいかないようになっていたためのようだった。

http://www.ensembl.org/das/Homo_sapiens.NCBI36.reference
にアクセスすると
http://uswest.ensembl.org/das/Homo_sapiens.NCBI36.reference
こちらをみるように 302 で伝えられるが、そこをみにいかないので
そもそもダメだったようだ。

とりあえずおいかけられるようにしたら、07-singledsn-multiseg.tこれは通るようになった。
あてたパッチ

--- ./lib/Bio/Das/Lite.pm.orig	2010-09-01 22:23:12.984429549 +0900
+++ ./lib/Bio/Das/Lite.pm	2010-09-01 22:25:58.540430294 +0900
@@ -841,6 +841,7 @@
     $curl->setopt( CURLOPT_NOPROGRESS, 1 );
     $curl->setopt( CURLOPT_USERAGENT, $self->user_agent );
     $curl->setopt( CURLOPT_URL, $url );
+    $curl->setopt( CURLOPT_FOLLOWLOCATION, 1 );
 
     if (scalar @headers) {
         $curl->setopt( CURLOPT_HTTPHEADER, \@headers );
@@ -931,6 +932,7 @@
         my $req  = $reqs->{$id};
         my $uri  = $req->{'uri'};
         my $head = ${ $req->{'head'} } || q();
+        $head = substr($head,rindex($head,"HTTP"));
         my $body = ${ $req->{'body'} } || q();
 
         # We got a response from the server:

ただこれを適用すると 01-general.t で
DASのないページにアクセスするところで www.google.com にアクセスしているが、
すべてのデータをとれず、うまくいっていないようだった。
www.example.com に変更したらうまくいった。

{
  #########
  # test single http fetch (on a non-DAS page!)
  #
  my $str  = q();
  my $urls = {
              'http://www.google.com/' => sub { $str .= $_[0]; return; }
             };
  my $das  = Bio::Das::Lite->new();
  $das->_fetch($urls);
  ok($str =~ m|<html.*/html>|smix, 'plain http fetch');
}

残すは、次の2つだが

  • 05-singledsn.t
  • 10-multidsn.t

これらはどうも
http://das.ensembl.org/das/dsn
ここをみているのだけど、ここがそもそもサービスをしていないようだ。

This site "das.ensembl.org" is not currently being served by the Sanger Institute.

とりあえず生きているサイトで、リダイレクトはできるようになったとおもう。