リンク: [ホーム] [自己紹介] [リンク集] [アルバム] [ソフトウェア] [発表文献] [その他]

まさおのChangeLogメモ / 2006-06

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2006-06-30 Fri

* URL memo

- Special Topics: delicious19 users
The ESI Special Topics Web site is designed to complement Essential Science Indicators in providing citation analyses and commentary for selected scientific research areas that have experienced notable recent advances or are of special current interest.
- Academic Web Link Database Project: delicious users

2006-06-29 Thu

2006-06-28 Wed

2006-06-26 Mon

2006-06-23 Fri

* URL memo

- マジでマージ / 開発メモ: delicious users
HyperEstraier: インデックス内のサブデータベースの機能と構造
- Transitional Words and Phrases: delicious101 users
- ExtensiveReading : Extensive Reading: delicious users
- Grid Datafarm - Gfarm file system [Japanese]: delicious88 users
- The Opte Project: delicious247 users
Web Graph Layout
- CAIDA : tools : visualization : walrus: delicious420 users
Walrus is a tool for interactively visualizing large directed graphs in three-dimensional space. By employing a fisheye-like distortion, it provides a display that simultaneously shows local detail and the global context.
- YouTube - English Lesson 0 Matrix in Japanese accent: delicious users
- オモロ検索エンジン SAGOOL サグール: delicious166 users

2006-06-22 Thu

* 楽天ポイントDM

楽天から会員宛に送られてきたメールがスパム判定された。

・HTMLパートのみのメール
・販促商品の説明として{女性, 素敵な}などのスパム特徴語が入っている。

などの理由もあり、しかたがない面も否めない。

2006-06-21 Wed

2006-06-20 Tue

2006-06-19 Mon

* URL memo

- Information and Media Technologies: delicious users
言語処理学会,ヒューマンインタフェース学会,情報処理学会,映像情報メディア学会,人工知能学会,日本ソフトウェア科学会

2006-06-18 Sun

2006-06-16 Fri

* arno+jisg.vf

jsarticleを入れた時に、jisフォントメトリックの一部をインストールし
忘れていた模様。

ptetex の中に入っていたのをとりあえずもらってきてコピーする:

sudo mkdir -p /usr/share/texmf-local/fonts/vf/jis/
sudo cp -p jis* /usr/share/texmf-local/fonts/vf/jis/
sudo mktexlsr

2006-06-15 Thu

* The Turn

Integration of Information Seeking and Retrieval
in Context (The Information Retrieval Series):

Peter Ingwersen & Kalervo Jarvelin というコンビによる本が出ている
ことにいまごろ気付いた。。。
Referrer (Inside): [2008-01-24-3]

2006-06-14 Wed

2006-06-13 Tue

2006-06-12 Mon

2006-06-09 Fri

2006-06-08 Thu

* Google Analytics Invitation Code (2)

というわけで、使えるようにしてみました。

このページにもJavaScriptコードを埋め込んでみました。

不審な点などありましたら、ご連絡ください。

* Google Analytics Invitation Code

だいぶ前に気になったので申し込んでおいたGoogle Analyticsの招待状が
今朝とどいたらしいのだけど、text/plain なのにHTMLメールというアホ
なメールなので晒しておく。

# ついでなので、
# 「いつからここまで技術力の無い会社になったのだろう」
# と、偉そうに説教しておこう。。。

Date: 7 Jun 2006 15:32:18 -0000
Message-ID: <20060607153218.14090.qmail@cwar25.prod.google.com>
To: masao@nii.ac.jp
Subject: Google Analytics Invitation Code
From: "Google Analytics" <analytics-invitations@google.com>
MIME-Version: 1.0
Content-Type: multipart/alternative;
        boundary="=_c9bbe76124e67c36b7808b36815ce235"


This is a MIME encoded message.

--=_c9bbe76124e67c36b7808b36815ce235
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<STYLE>
BODY {
        FONT-FAMILY: arial,sans-serif
}
TD {
        FONT-FAMILY: arial,sans-serif
}
FONT {
        FONT-FAMILY: arial,sans-serif
}
P {
        FONT-FAMILY: arial,sans-serif
}
A {
        FONT-FAMILY: arial,sans-serif
}
</STYLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR>
</HEAD>
<BODY>
<TABLE cellSpacing=0 cellPadding=0 width=600 align=center border=0>
...

って、今気付いたけど、
<META content="MSHTML 6.00.2800.1400" name=GENERATOR>
あの、MS製品でメール書いとるの???

2006-06-06 Tue

2006-06-05 Mon

* syck+utf-8+escape

[2006-05-31]で調べた、YAML形式のファイル中でUTF-8文字列のうち、
ASCII範囲外がのきなみエスケープされて出力されてしまう問題。

手元が簡単なパッチを書いたら、直るようなので、メモしておく:

Index: ext/syck/emitter.c
===================================================================
RCS file: /src/ruby/ext/syck/emitter.c,v
retrieving revision 1.16
diff -u -b -r1.16 emitter.c
--- ext/syck/emitter.c 2 Feb 2006 15:02:49 -0000 1.16
+++ ext/syck/emitter.c 4 Jun 2006 19:53:26 -0000
@@ -776,25 +776,56 @@
 syck_emitter_escape( SyckEmitter *e, char *src, long len )
 {
     int i;
+ unsigned int c1, c2, c3;
     for( i = 0; i < len; i++ )
     {
- if( (src[i] < 0x20) || (0x7E < src[i]) )
+ c1 = src[i];
+ if (i + 1 < len)
+ c2 = src[i+1];
+ if (i + 2 < len)
+ c3 = src[i+2];
+
+ if( (0x20 <= c1) && (c1 <= 0x7E) )
         {
+ syck_emitter_write( e, src + i, 1 );
+ if( '\\' == c1 )
             syck_emitter_write( e, "\\", 1 );
- if( '\0' == src[i] )
- syck_emitter_write( e, "0", 1 );
- else
- {
- syck_emitter_write( e, "x", 1 );
- syck_emitter_write( e, (char *)hex_table + ((src[i] & 0xF0) >> 4), 1 );
- syck_emitter_write( e, (char *)hex_table + (src[i] & 0x0F), 1 );
             }
+ else if ( ((i + 1) < len) && /* UTF-8 - 2 bytes */
+ (0xc2 <= c1) && (c1 <= 0xdf) &&
+ (0x80 <= c2) && (c2 <= 0xbf) )
+ {
+ syck_emitter_write( e, src + i, 2 );
+ i++;
+ }
+ else if ( ((i + 2) < len) && /* UTF-8 - 3 bytes */
+ ( (0xe0 == c1) &&
+ (0xa0 <= c2) && (c2 <= 0xbf) &&
+ (0x80 <= c3) && (c3 <= 0xbf) ) ||
+ ( (0xe1 <= c1) && (c1 <= 0xec) &&
+ (0x80 <= c2) && (c2 <= 0xbf) &&
+ (0x80 <= c3) && (c3 <= 0xbf) ) ||
+ ( (0xed == c1) &&
+ (0x80 <= c2) && (c2 <= 0x9f) &&
+ (0x80 <= c3) && (c3 <= 0xbf) ) ||
+ ( (0xee <= c1) && (c1 <= 0xef) &&
+ (0x80 <= c2) && (c2 <= 0xbf) &&
+ (0x80 <= c3) && (c3 <= 0xbf) ) )
+ {
+ syck_emitter_write( e, src + i, 3 );
+ i += 2;
         }
         else
         {
- syck_emitter_write( e, src + i, 1 );
- if( '\\' == src[i] )
                 syck_emitter_write( e, "\\", 1 );
+ if( '\0' == c1 )
+ syck_emitter_write( e, "0", 1 );
+ else
+ {
+ syck_emitter_write( e, "x", 1 );
+ syck_emitter_write( e, (char *)hex_table + ((c1 & 0xF0) >> 4), 1 );
+ syck_emitter_write( e, (char *)hex_table + (c1 & 0x0F), 1 );
+ }
         }
     }
 }
@@ -849,12 +880,13 @@
 /*
  * Outputs a double-quoted block.
  */
-void syck_emit_2quoted( SyckEmitter *e, int width, char *str, long len )
+void syck_emit_2quoted( SyckEmitter *e, int width, unsigned char *str, long len )
 {
     char do_indent = 0;
- char *mark = str;
- char *start = str;
- char *end = str;
+ unsigned char *mark = str;
+ unsigned char *start = str;
+ unsigned char *end = str;
+ unsigned int c, c2, c3;
     syck_emitter_write( e, "\"", 1 );
     while ( mark < str + len ) {
         if ( do_indent > 0 ) {
@@ -864,21 +896,34 @@
             syck_emit_indent( e );
             do_indent = 0;
         }
- switch ( *mark ) {
-
- /* Escape sequences allowed within double quotes. */
- case '"': syck_emitter_write( e, "\\\"", 2 ); break;
- case '\\': syck_emitter_write( e, "\\\\", 2 ); break;
- case '\0': syck_emitter_write( e, "\\0", 2 ); break;
- case '\a': syck_emitter_write( e, "\\a", 2 ); break;
- case '\b': syck_emitter_write( e, "\\b", 2 ); break;
- case '\f': syck_emitter_write( e, "\\f", 2 ); break;
- case '\r': syck_emitter_write( e, "\\r", 2 ); break;
- case '\t': syck_emitter_write( e, "\\t", 2 ); break;
- case '\v': syck_emitter_write( e, "\\v", 2 ); break;
- case 0x1b: syck_emitter_write( e, "\\e", 2 ); break;
 
- case '\n':
+ c = *mark;
+ if ( mark + 1 < str + len)
+ c2 = *(mark + 1);
+ if ( mark + 2 < str + len)
+ c3 = *(mark + 2);
+ if (c == '"') /* Escape sequences allowed within double quotes. */
+ syck_emitter_write( e, "\\\"", 2 );
+ else if (c == '\\')
+ syck_emitter_write( e, "\\\\", 2 );
+ else if (c == '\0')
+ syck_emitter_write( e, "\\0", 2 );
+ else if (c == '\a')
+ syck_emitter_write( e, "\\a", 2 );
+ else if (c == '\b')
+ syck_emitter_write( e, "\\b", 2 );
+ else if (c == '\f')
+ syck_emitter_write( e, "\\f", 2 );
+ else if (c == '\r')
+ syck_emitter_write( e, "\\r", 2 );
+ else if (c == '\t')
+ syck_emitter_write( e, "\\t", 2 );
+ else if (c == '\v')
+ syck_emitter_write( e, "\\v", 2 );
+ else if (c == 0x1b)
+ syck_emitter_write( e, "\\e", 2 );
+ else if (c == '\n')
+ {
                 end = mark + 1;
                 syck_emitter_write( e, "\\n", 2 );
                 do_indent = 2;
@@ -886,20 +931,47 @@
                 if ( start < str + len && ( *start == ' ' || *start == '\n' ) ) {
                     do_indent = 0;
                 }
- break;
-
- case ' ':
+ }
+ else if (c == ' ')
+ {
                 if ( width > 0 && *start != ' ' && mark - end > width ) {
                     do_indent = 1;
                     end = mark + 1;
                 } else {
                     syck_emitter_write( e, " ", 1 );
                 }
- break;
-
- default:
+ }
+ else if ( (0x20 <= c) && (c <= 0x7E) )
+ {
+ syck_emitter_write( e, mark, 1 );
+ }
+ else if ( (mark + 1) < (str + len) && /* UTF-8 - 2 bytes */
+ (0xC2 <= c) && (c <= 0xDF) &&
+ (0x80 <= c2) && (c2 <= 0xBF) )
+ {
+ syck_emitter_write( e, mark, 2 );
+ mark++;
+ }
+ else if ( (mark + 2) < (str + len) && /* UTF-8 - 3 bytes */
+ ( (0xE0 == c) &&
+ (0xA0 <= c2) && (c2 <= 0xBF) &&
+ (0x80 <= c3) && (c3 <= 0xBF) ) ||
+ ( (0xE1 <= c) && (c <= 0xEC) &&
+ (0x80 <= c2) && (c2 <= 0xBF) &&
+ (0x80 <= c3) && (c3 <= 0xBF) ) ||
+ ( (0xED == c) &&
+ (0x80 <= c2) && (c2 <= 0x9F) &&
+ (0x80 <= c3) && (c3 <= 0xBF) ) ||
+ ( (0xEE <= c) && (c <= 0xEF) &&
+ (0x80 <= c2) && (c2 <= 0xBF) &&
+ (0x80 <= c3) && (c3 <= 0xBF) ) )
+ {
+ syck_emitter_write( e, mark, 3 );
+ mark += 2;
+ }
+ else
+ {
                 syck_emitter_escape( e, mark, 1 );
- break;
         }
         mark++;
     }
Index: ext/syck/syck.h
===================================================================
RCS file: /src/ruby/ext/syck/syck.h,v
retrieving revision 1.30
diff -u -b -r1.30 syck.h
--- ext/syck/syck.h 19 Dec 2005 14:13:27 -0000 1.30
+++ ext/syck/syck.h 4 Jun 2006 19:53:26 -0000
@@ -376,7 +376,7 @@
 void syck_emit( SyckEmitter *, st_data_t );
 void syck_emit_scalar( SyckEmitter *, char *, enum scalar_style, int, int, char, char *, long );
 void syck_emit_1quoted( SyckEmitter *, int, char *, long );
-void syck_emit_2quoted( SyckEmitter *, int, char *, long );
+void syck_emit_2quoted( SyckEmitter *, int, unsigned char *, long );
 void syck_emit_folded( SyckEmitter *, int, char, char *, long );
 void syck_emit_literal( SyckEmitter *, char, char *, long );
 void syck_emit_seq( SyckEmitter *, char *, enum seq_style );
Index: test/yaml/test_yaml.rb
===================================================================
RCS file: /src/ruby/test/yaml/test_yaml.rb,v
retrieving revision 1.18
diff -u -b -r1.18 test_yaml.rb
--- test/yaml/test_yaml.rb 16 Jan 2006 01:28:52 -0000 1.18
+++ test/yaml/test_yaml.rb 4 Jun 2006 19:53:27 -0000
@@ -1272,6 +1272,11 @@
       assert_equal([{}], o.keys)
     end
 
+ def test_toyaml_rawutf8_string
+ # Japanese Hiragana: "AIUEO"
+ assert_equal("--- \"abcdefghijklmnopqrstuvwxyzあいうえお\"\n",
+ "abcdefghijklmnopqrstuvwxyzあいうえお".to_yaml)
+ end
 end
 
 if $0 == __FILE__


CVS HEADに対するもの。

見れば分かる通り、正当なUTF-8の範囲のバイト列に対してはエスケープ
しないよう回避しているだけ。

暇になったらバグ報告する予定。

* SPSSからアウトライングラフ生成

SPSSの生成するグラフは、そのままコピー&ペーストすると、ビットマッ
プ形式になってしまい、拡大縮小すると見るに耐えないほど汚なくなって
しまうが、一旦Word/RTF形式にエクスポートすると、アウトライン形式の
画像が得られる。

バッドノウハウ的なのでメモしとく…。

2006-06-04 Sun

2006-06-03 Sat

2006-06-02 Fri

2006-06-01 Thu

* 兄へ

今日は21回目の命日ですね。
# 実は、昨日の親からのメールでようやく思い出すほど忘れていたけど、
# 怒らないでね。

なんか最近、たびたび、
「今、あなたが生きていたら、何をしていただろうか?」
ってなことを考えます。就職して働きはじめてからはなおさらかなあ。

何の職についているだろうか?
おれみたいにヤクザな院生を続けているのでなければ、もう10年戦士だね。
ってね。

嫁さんはもらっているだろうか?
子どもは何人いるだろうか?

何に笑い、何に泣いているだろうか?

知ってるとは思うけど、こちらは元気でやっていますから、心配しないで
ください。どうせ、どんなにガンバッテも今世紀中には、おれもそっちに
行きますから、しばらく待っててください。

ではまた。
サイクリング走行距離メーター
2001 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12