PC関係のメモ
RDスタイルからWikiスタイルに変換 / タイ写真
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));
}
タイ写真
このメモの今後 / tDiaryを最新にアップデート
このメモの今後
各機能をサービスとして別立てして、疎結合させたい。
- コメント管理を外部に。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)
Google日本語入力の不具合? / 文書管理システム / 文書管理システム2
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番目が近い。
文書管理システム
こんな感じの文書管理システムが欲しい。
履歴管理と検索ができて、Wiki形式のテキストをHTMLに変換して表示できるシステム。
文書管理システム2
一覧DBは検索DBと重複するので要らない。
検索にはHyperEstraierを採用。リポジトリはGitがいいけど使い慣れてるからとりあえずSVNで。
スケールはとりあえず考えない。
Social IMEがオープンソース化 / PostgreSQL 9.0の新機能
PostgreSQL 9.0の新機能
http://lets.postgresql.jp/documents/technical/8.5/1
ホット・スタンバイとかストリーム・レプリケーションとか、高可用性に関する目玉機能が実装予定。
楽しみ。
後で読む
Cプログラムをデバッグする基本的な方法
http://journal.mycom.co.jp/news/2010/03/17/060/index.html
Web Notifications/Desktop Notifications
http://dev.w3.org/2006/webapi/WebNotifications/publish/
http://dev.chromium.org/developers/design-documents/desktop-notifications
OpenData
SQLのBNF
Oracleの構文については驚くことに公式ドキュメントでBNF記法が記載されていた。
http://otndnld.oracle.co.jp/document/products/lite10g/10.2.0/html/B19286-02/sqcmd.htm


_ てすと [てすと]