■_
一日遅れですが
日曜日の深夜(正確には日付は変わってますが)、
久しぶりにフジのF1中継を観てたんですよ(何故かは訊かないで(笑))。
ハミルトンすげーっ
佐藤琢磨すげーっ
琢磨のオーバーテイクシーンはようつべにもあるのか。
regparse.c
onig_st_lookup_strend
property_name_to_ctype
ONIGENC_PROPERTY_NAME_TO_CTYPE
fetch_char_property_to_ctype
TK_CHAR_PROPERTY
fetch_escaped_value
st.c
st_lookup
regenc.h
typedef struct {
OnigCodePoint from;
OnigCodePoint to;
} OnigPairCaseFoldCodes;
typedef struct {
UChar *name;
int ctype;
short int len;
} PosixBracketEntryType;
unicode.c
static st_table* NameCtypeTable;
HashEntryData[]
init_name_ctype_table
onigenc_unicode_property_name_to_ctype
static PosixBracketEntryType HashEntryData[] = {
{ (UChar* )"NEWLINE", 0, 7 },
{ (UChar* )"ASCII", 14, 5 },
#ifdef USE_UNICODE_PROPERTIES
{ (UChar* )"Any", 15, 3 },
{ (UChar* )"Zs", 53, 2 },
{ (UChar* )"Arabic", 54, 6 },
{ (UChar* )"Han", 76, 3 },
{ (UChar* )"Hangul", 77, 6 },
{ (UChar* )"Hanunoo", 78, 7 },
{ (UChar* )"Hebrew", 79, 6 },
{ (UChar* )"Hiragana", 80, 8 },
{ (UChar* )"Inherited", 81, 9 },
{ (UChar* )"Kannada", 82, 7 },
{ (UChar* )"Katakana", 83, 8 },
{ (UChar* )"Ugaritic", 113, 8 },
{ (UChar* )"Yi", 114, 2 },
#endif /* USE_UNICODE_PROPERTIES */
{ (UChar* )NULL, -1, 0 }
};
static const OnigCodePoint* CodeRanges[CODE_RANGES_NUM];
static int CodeRangeTableInited = 0;
static void init_code_range_array() {
THREAD_ATOMIC_START;
CodeRanges[0] = CR_NEWLINE;
CodeRanges[1] = CR_Alpha;
extern int
onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar* name, UChar* end)
{
int len, ctype;
UChar buf[PROPERTY_NAME_MAX_SIZE];
UChar *p;
OnigCodePoint code;
p = name;
len = 0;
while (p < end) {
code = ONIGENC_MBC_TO_CODE(enc, p, end);
if (code >= 0x80)
return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
buf[len++] = (UChar )code;
if (len >= PROPERTY_NAME_MAX_SIZE)
return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
p += enc_len(enc, p);
}
buf[len] = 0;
if (NameTableInited == 0) init_name_ctype_table();
if (onig_st_lookup_strend(NameCtypeTable, buf, buf + len,
(void*)&ctype) == 0) {
return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
}
return ctype;
}
typedefs
typedef struct OnigEncodingTypeST {
int (*mbc_enc_len)(const OnigUChar* p);
const char* name;
int max_enc_len;
int min_enc_len;
int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end);
OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end);
int (*code_to_mbclen)(OnigCodePoint code);
int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf);
int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to);
int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg);
int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[]);
int (*property_name_to_ctype)(struct OnigEncodingTypeST* enc, OnigUChar* p, OnigUChar* end);
int (*is_code_ctype)(OnigCodePoint code, unsigned int ctype);
int (*get_ctype_code_range)(int ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]);
OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p);
int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end);
} OnigEncodingType;
typedef OnigEncodingType* OnigEncoding;
OnigEncodingType OnigEncodingUTF16_LE = {
utf16le_mbc_enc_len,
"UTF-16LE", /* name */
4, /* max byte length */
2, /* min byte length */
utf16le_is_mbc_newline,
utf16le_mbc_to_code,
utf16le_code_to_mbclen,
utf16le_code_to_mbc,
utf16le_mbc_case_fold,
onigenc_unicode_apply_all_case_fold,
utf16le_get_case_fold_codes_by_str,
onigenc_unicode_property_name_to_ctype,
onigenc_unicode_is_code_ctype,
onigenc_utf16_32_get_ctype_code_range,
utf16le_left_adjust_char_head,
onigenc_always_false_is_allowed_reverse_match
};
- プロパティの名前のデータベースは自前(作成方法は不明)
- エンコーディングごとにデータベースを持てる
- 使用に先立って名前データベース→ビットマップテーブルへの変換をする?
■_
gawk random.c
--- gawk-3.1.5/random.c 2005-05-12 00:28:17.000000000 +0900
+++ gawk-3.1.5g/random.c 2006-09-15 21:15:45.000000000 +0900
@@ -10,11 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -31,6 +27,22 @@
* SUCH DAMAGE.
*/
+/*
+ * Per the statement at http://opensource.org/licenses/bsd-license.php,
+ *
+ * The advertising clause in the license appearing on BSD Unix files was
+ * officially rescinded by the Director of the Office of Technology
+ * Licensing of the University of California on July 22 1999. He states
+ * that clause 3 is "hereby deleted in its entirety."
+ *
+ * I removed the advertising clause in the above copyright.
+ * The above web site points to
+ * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change.
+ *
+ * Arnold Robbins
+ * 15 September 2007
+ */
+
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)random.c 8.2 (Berkeley) 5/19/95";
#endif /* LIBC_SCCS and not lint */
Arnold、年を間違えとるぞ(^^;
それはさておき確かに random.c 自体に変更はない。
d:\src\gawk-3.1.5>.\gawk --ver
GNU Awk 3.1.5 build date Mar 23 2007
Copyright (C) 1989, 1991-2005 Free Software Foundation.
d:\src\gawk-3.1.5>cd test
d:\src\gawk-3.1.5\test>..\gawk -f rand.awk
62 67 88 6 35 77 3 68 30 96 90 26 35 8 88 93 49 53 37
d:\src\gawk-3.1.5\test>cat rand.ok
62 67 88 6 35 77 3 68 30 96 90 26 35 8 88 93 49 53 37
d:\src\gawk-3.1.5\test>cd \work\t\0531\gawk-3.1.5g\test
d:\work\t\0531\gawk-3.1.5g\test>..\gawk.exe --ver
GNU Awk 3.1.5g
Copyright (C) 1989, 1991-2007 Free Software Foundation.
d:\work\t\0531\gawk-3.1.5g\test>gawk -f rand.awk
62 67 88 6 35 77 3 68 30 96 90 26 35 8 88 93 49 53 37
d:\work\t\0531\gawk-3.1.5g\test>cat rand.ok
62 67 88 6 35 77 3 68 30 96 90 26 35 8 88 93 49 53 37
つーことでさいとうさんのビルド環境に問題があると思われ。
とりあえず本当にgawkのソースツリーの random.cにある srand/randomを使っているか
どうか確認されたし。
■_
お題拝借
西尾泰和のブログ @ Cybozu Labs: Pythonコード添削道場
「Pythonコード添削道場」はこのワークショップのセッションの一つで、私、西尾 泰和と増田 泰さん、柴田 淳さんの3人で投稿されたコードを添削するという企画です。
この企画はみなさんにコードを投稿して頂かないと始まりません。コードの内容は自由なので、ぜひご投稿ください。
また「投稿してといわれても、ちょうどいいコードがないなぁ」という人のために、お題が7つ用意してあります。お題に挑戦してみて結果のコードを投稿するのもよいでしょう。
* お題1:ファイルの同期
* お題2:単語数カウント
* お題3:シングルトン
* お題4:入れ子リストの中身を順に表示
* お題5:行列の回転
* お題6:名簿の並び替え
* お題7:整数とビット列の相互変換
勉強のため、Haskellでやってみようと思い立ったはいいが
どれから手をつけるのが良かろうか?
リスト(お題4)かなあ?
さいとうさんがawkで解くのはデフォルトですのでよろしく :)
(でもawkで1はちときついかも)
んでHaskellといえばで脱線
Inemuri nezumi diary(2007-06-12)
Haskellを推す
何故私は Haskell を推すのか。Haskell の根底に流れている思想を私たちは共有している。
すでに。あなたがそれに気がついていない。のだ。
略
オブジェクト指向があなたの人生を変えたように、遅延評価と関数型もあなたの人生を変える。重要な事はいつ行っても重要である。重要でないことは隠せ*1。複雑な物は分解でき、
単純な物はより見やすく書くことができる。
では、Haskellは何故皆の手に渡らないのか。私の仮説では、Haskellをわかった者は
Lispとその処理系の実装を紳士淑女のたしなみとしてすでにわかっていたからではないか、
と推測する。
Graham の本を除いて、Haskellについてのいくつかの教科書の序文にはこうある:
「読者は関数型言語について幾分かの知識を持っているものと仮定する」
これはあんまりだ。
略
世界樹の迷宮はシビアなゲームだ。
街を出たばかりの1FのフロアにLv1では倒せない敵がいる。
全ての実用的プログラミングにはこの魔物が棲む。
- printf(s)は危険
- scanf("%d", s)は危険
- mktemp(f)は決して使わないこと
- etc.
(略)
初心者向けの教科書には、もちろん、この手の魔物については書かれていないため、
例えば、
携帯電話のバグさえ引き起こしてしまうかもしれないのだ。
■_
perl-mode
mieki256's diary: xyzzyのperl-modeで
open(IN, $infile) or die $!; と書くと、indent-region が正常に働かないな…。open(IN, $infile) || die $!; なら大丈夫だけど。
エディタの機能制限で、ソースの記述方法まで制限を受けてしまうという見本、になりそうでちとマズイ。
mieki256's diary - Meadow 3.00 開発版をインストール
xyzzy の perl-mode があまりよろしくないので、Meadow の cperl-mode はどんなものだろうかと。てことでインストール。や、以前から一応入れてはあったのだけど、バージョン的に古いのか新しいのかがよく判らなかったので。
xyzzyのperl-modeって結構な部分をC/C++と共用していて、
しかもそれがコアのC++で書かれている部分だったりするので
直そうにも結構辛いんですよね。
xyzzy-lispオンリーで書き直したら遅いかなあ…
(それ以前に全部Lispで書きなおせるほどLispもxyzzyもわかってないけどなっ)
めもがき:2007/6/6(Wed)
http://sigsegv.s25.xrea.com/diary/?20070606#06
もしかしてUnicodeの中ではリガチャ(合字)の最も長いものは
U+FDFA(ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM)なのかな。
U+FDFA = U+0635 + U+0644 + U+0649 \
+ U+0020 + U+0627 + U+0644 + U+0644 + U+0647 \
+ U+0020 + U+0639 + U+0644 + U+064A + U+0647 \
+ U+0020 + U+0648 + U+0633 + U+0644 + U+0645
うひゃ。
日本語なんてこの方面ではかわいいもんだ。
■_
ReadyBoost
ふむそういうカラクリだったのか。
ちょっと前に某MVP様が××の説明は間違っているとお書きになられていたのだけど、
これが正しいというのを(ポインタすらさえも)書いてくださらなかったので
ちと悶々としておりましたのですよ。ええ。
フラッシュメモリ活用による高速化技術を理解するためのキーワード- @IT
■ReadyBoost(レディブースト)
Windows Vistaで導入されたフラッシュメモリを利用したキャッシュ機能の1つ。
正式には、「Windows ReadyBoost」という。
フラッシュメモリがReadyBoostとして設定されると、そのルート・フォルダに
「ReadyBoost.sfcache」という名前のキャッシュ・ファイルが作成され、ここに
SuperFetchのデータ・ファイルが保存される。このデータ・ファイルは、
2:1の圧縮比になるように圧縮されるため、 1Gbytesのキャッシュ・ファイルには
2Gbytesのデータが格納されることになる。また、このファイルには、
書き込むブロックごとに128bit のAdvanced Encryption Standard(AES)
で暗号化されるため、抜き出したフラッシュメモリを紛失しても、
そこから情報漏えいするようなことはないとしている。
またReadyBoostでは、ランダムアクセスに対してはフラッシュメモリ上の
キャッシュ・データから読み出しを行うが、シーケンシャルアクセスに対しては
ハードディスクの方がフラッシュメモリよりも高速なため、データがキャッシュに
存在しても、直接ハードディスク上から読み出すようになっている。
■SuperFetch(スーパーフェッチ)
頻繁に使用するアプリケーションを認識して、あらかじめメモリにこれらの
アプリケーションや関連ファイルを読み込むことによって、システムの応答速度を向上させる
Windows Vistaに実装されたメモリ管理技術。正式には、「Windows SuperFetch」という。
SuperFetchでは、アプリケーションやファイルなどの使用パターンを分析し、
よく使うアプリケーションのメモリ・イメージをあらかじめロードしておくことで、
メモリへのロード時間を短縮するなどすることで、コンピュータの応答時間を改善する
機能である。これにより、アプリケーション起動やハイバネーションからの復帰の高速化、
アイドル時などに実行される、バックグラウンド・アプリケーション
(検索用インデックス生成など)実行後の性能低下防止などを可能にする。
SuperFetchは、頻繁に使用するアプリケーションのメモリ・イメージをキャッシュし、
これを実際の実行開始以前にメモリにプリロードしておくことにより、
アプリケーションの起動速度を高速化する。またSuperFetchは、
バックグラウンド・アプリケーション(ウイルス検査やデスクトップ検索のための
インデックス生成など。コンピュータのアイドル時に自動実行されるものが多い)
の実行完了を検出すると、それ以前の状態にメモリを自動的に復帰する。これにより、
例えば昼休み中にバックグランド・アプリケーションが実行され、
大量のスワップが発生した場合でも、ユーザーは昼食後に気持ちよく作業を再開できる。
ふむ。
なんとなくではあるが動作のイメージがつかめたような気がする。