2010-03-09(Tue) [長年日記]
_ Google日本語入力の不具合?
ある日突然、日本語キーボードの配列が英語版になってしまった。
たとえば「全角/半角」を押すと「`」になってしまうし、「[」を入力しようとすると「]」になってしまう。
もしやと思ってIMEを「Google日本語入力」から「ATOK」に戻したら治った。不思議なのは、IMEがOFFの状態でも上記の状態になってしまうこと。なんだこれ。
しょうがないので超快適だった「Google日本語入力」をやめることにした。
報告しようと思ったが、ヘルプフォーラムに似たような事象を発見。
- http://www.google.com/support/forum/p/ime/thread?tid=542f712537e7e627&hl=ja
- http://www.google.com/support/forum/p/ime/thread?tid=01c20754efcf594a&hl=ja
- http://www.google.com/support/forum/p/ime/thread?tid=49796cda05be2c3a&hl=ja
2番目はKasperskyが原因だったようだが、自分の環境にはインストールされていないため別要因。
3番目が近い。
_ 文書管理システム2

一覧DBは検索DBと重複するので要らない。
検索にはHyperEstraierを採用。リポジトリはGitがいいけど使い慣れてるからとりあえずSVNで。
スケールはとりあえず考えない。
2010-03-08(Mon) [長年日記]
_ このメモの今後

各機能をサービスとして別立てして、疎結合させたい。
- コメント管理を外部に。Disqusみたいな。
- 画像管理を外部に。Flickrみたいな。
- タグ管理を外部に。
- 日記の内容をバージョン管理したい。
- それぞれの横断検索
現状は下記
- tDiary標準機能
- image_ex.rb
- tDiary標準機能
- 未実装
- 日記とコメントについてHyperEstraier
それぞれの移行先
- 新規実装
- 新規実装(gyazoを元に)
- 新規実装
- バックエンドをSVN/Gitあたりで検討中。
- HyperEstraierを使ってごにょごにょ
_ tDiaryを最新にアップデート
2.2から2.3HEADにアップデートした。
理由はWikiスタイルのバグ修正が入ってたから。
具体的には下記のときにうまくリンクが貼られない。
[[てす|と|http://www.example.com/]]
「てす」しかひょうじされず、「と」は表示されない。
これは今までのtDiaryに添付されていたhikidoc.rbのバージョンが古かった(0.0.2)ため。
tDiaryの2.3HEADでは最新のhikidoc.rb(0.0.5)が添付されており、上記ケースにも対応している。
多分下記のコードが原因。これが最新。
def compile_bracket_link(link)
if m = /\A(.*)\|/.match(link)
これが以前のコード。
def compile_bracket_link(link)
if m = /\A(?>[^|\\]+|\\.)*\|/.match(link)
2010-03-05(Fri) [長年日記]
_ RDスタイルからWikiスタイルに変換
過去の日記データはRDスタイルで書いていた。Wikiスタイルに統一するために変換スクリプトを書いた。
やっつけ仕事。もし使うなら自己責任で。
<?php
define('STATE_HEADER', 0);
define('STATE_BODY', 1);
define('STATE_BLOCKQUOTE', 2);
function inline($buf)
{
$state = INLINE_STATE_NONE;
$wiki = '';
$len = strlen($buf);
for($i = 0; $i < $len; $i++){
// TODO: 毎回substrなので効率悪い
if(preg_match('/^\(\(<(.+?)>\)\)/', substr($buf, $i) , $m)){
// link
$i += strlen($m[0]) - 1;
$link = str_replace('|URL:', '|', $m[1]);
$link = preg_replace('/^URL:/', '', $link);
$link = preg_replace('/^"/', '', $link);
$link = preg_replace('/"\|/', '|', $link);
$wiki .= '[[' . $link . ']]';
}else if(preg_match('/^\(\(%(.+?)%\)\)/', substr($buf, $i), $m)){
// plugin
$i += strlen($m[0]) - 1;
$wiki .= '{{' . $m[1] . '}}';
}else if(preg_match('/^\(\(\*(.+?)\*\)\)/', substr($buf, $i), $m)){
// bold
$i += strlen($m[0]) - 1;
$wiki .= "''" . $m[1] . "''";
}else{
$wiki .= $buf[$i];
}
}
return $wiki;
}
function block($buf)
{
$wiki = '';
if(preg_match('/^(=+)(.*)/is', $buf, $m)){
// 見出し
for($i = 0; $i < strlen($m[1]); $i++){
$wiki .= '!';
}
$wiki .= inline($m[2]);
}else if(preg_match('/^\*(.*)/s', $buf, $m)){
// 箇条書き1
$wiki = '*' . inline($m[1]);
}else if(preg_match('/^ \*(.*)/s', $buf, $m)){
// 箇条書き2
$wiki = '**' . inline($m[1]);
}else if(preg_match('/^ \*(.*)/s', $buf, $m)){
// 箇条書き3
$wiki = '***' . inline($m[1]);
}else if(preg_match('/^\\([0-9]+\)(.*)/s', $buf, $m)){
// 番号付リスト1
$wiki = '#' . inline($m[1]);
}else if(preg_match('/^ \([0-9]+\)(.*)/s', $buf, $m)){
// 番号付リスト2
$wiki = '##' . inline($m[1]);
}else if(preg_match('/^ \([0-9]+\)(.*)/s', $buf, $m)){
// 番号付リスト3
$wiki = '###' . inline($m[1]);
}else if(preg_match('/^ (.*)/s', $buf, $m)){
// 整形済みテキスト
$wiki = $buf;
}else{
$wiki = inline($buf);
}
return $wiki;
}
$filename = $argv[1];
$fp = fopen($filename, 'rb');
if($fp === false){
echo "file not found\n";
exit;
}
$state = STATE_HEADER;
$is_rd = false;
while(!feof($fp)){
$buf = $wiki = fgets($fp);
if($state == STATE_HEADER){
if($buf == "\n"){
$state = STATE_BODY;
}else if(preg_match('/^format: *([a-zA-Z]+)/is', $buf, $m)){
if($m[1] == 'RD'){
$is_rd = true;
$wiki = "Format: Wiki\n";
}else{
$is_rd = false;
}
}
}else if($state == STATE_BODY){
if($buf == ".\n"){
$state = STATE_HEADER;
$is_rd = false;
}else if($is_rd === false){
// RDでないときは何もしない
}else if(preg_match('/^--- *<blockquote>/is', $buf)){
// 引用
$state = STATE_BLOCKQUOTE;
$wiki = '';
}else{
// その他
$wiki = block($buf);
}
}else if($state == STATE_BLOCKQUOTE){
if(preg_match('/^--- *<\/blockquote>/is', $buf)){
$state = STATE_BODY;
$wiki = '';
}else{
// その他
$wiki = '"" ' . block($buf);
}
}
echo $wiki;
}
ディレクトリ内のtd2を全部変換するときはこんな感じのスクリプトを別途用意。
<?php
$files = glob(dirname(__FILE__) . '/*.td2');
foreach($files as $file)
{
system('php rd2wiki.php ' . basename($file) . ' > wiki/' . basename($file));
}
_ タイ写真

2010-02-14(Sun) [長年日記]
_ ユーザプロファイルをリストアップする
また、手っ取り早く以下のレジストリデータからも取得可能ですが、このデータは1度ログオンが実行されていないと作成されないので注意が必要です。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList



ツッコミを含む