前の月 / 次の月 / 最新

KazLog ChangeLog / 2008-05

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 31

2009 : 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
2007 : 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
2005 : 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

2008-05-17 Sat

undef [Perl]

undefは未定義化する宣言であり、初期化ではない。

初期化は,

@array = ();

2008-05-11 Sun

NTFS to ext3 on /dev/hda1 [Linux]

WindowsパーティションとしてNTFSでフォーマットしてあった/dev/hda1を、ext3にフォーマットし直す。

デュアルブートだったが、Linuxのみの運用に集約し、Windowsを駆逐するため。

ブートセクタ関連で、grubの再インストールを行う必要が(たぶん)ある。


$ sudo fdisk /dev/hda

[stdin]

e : delete

n : create

b : set bootpoint

w : write

[stdout]

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.

The kernel still uses the old table.

The new table will be used at the next reboot.

Syncing disks.


$ sudo mke2fs -j /dev/hda1

$ sudo e2label /dev/hda1 /media/c

$ sudo e2fsck /dev/hda1

$ sudo vi /etc/fstab

LABEL=/media/c /media/c ext3 defaults 1 2


$ sudo grub-install /dev/hda

$ sudo shutdown -r now

$ sudo chmod 777 /media/c


cf.

2008-05-07 Wed

mkisofs cdrecord をパイプで。 [Linux]

isoイメージを作成しない方法

$ mkisofs -print-size -l -R -J -nobak /media/c/cheer/

Total extents scheduled to be written = 1984125

$ mkisofs -l -R -J -nobak /media/c/cheer/ | sudo cdrecord dev=ATA:1,0,0 -tao -eject -v tsize=1984125s -

// ラストの「-」を忘れないこと

cf. http://d.hatena.ne.jp/amt/20050422

2008-05-05 Mon

Pukiwiki -> chalow [ChangeLog]

自分用のメモや日記,情報整理のため,長らくPukiwikiをメインに使ってきた。

特に,物事を整理するために,「箇条書き」という手法が非常に有効であるという自身の経験則から,「-」を使用することにより箇条書きのネストを容易に実現できるpukwiikiを愛用していた。

その愛用を後押ししていたのがpukiwiki-mode.elで、極めて良質なlispであり、ブラウザ経由で編集することがはばかられるほどである。

それでも、現在もpukiwikiを継続使用している半面,少しずつChangeLogに書き込む頻度が増えてきた現状がここにある。


それらは,pukiwiki使用中に、以下のような問題に直面したことによる。

  1. コンフリクトがおきやすい
  2. レスポンスが悪い
  3. 起動が遅い
  4. 自動セーブ機能が無い


特に最後の自動セーブ機能が深刻だった.

私は,auto-save-buffers.elを愛用しており、C-xC-sのセーブ機能を全自動化している.

従って,HDDが壊れない限りは,停電が起きても,エディタがフリーズしても,書いた文章やコードはローカルに保存される。

その一方で,愛用のpukiwiki-mode.elにおけるpukiwiki-modeでは、残念ながらauto-save-buffersが有効にならないため,コミットするまでは気が気ではない.

(setq pukiwiki-save-post-data t)のおかげで大事には至らなかったものの,何度かコミットがエラーで弾かれることがあり,冷汗をかいた。


そのような過程で,保存が容易なChangeLogを使用する頻度が増えたのだが、こちらはこちらで問題がある.

  1. サイズの大きいテキストファイルに集約されるため、情報が埋もれる
  2. ネストの箇条書きができない


しかし、これらの問題は解決された。

1. は、clgrepやchalowが助力を発揮してくれる。

2. は、Text::Hatenaを利用するようchalowのソースコードを改変することで、ネストの箇条書きが実現できた.

cf.


*** chalow	2008-05-07 23:32:50.000000000 +0900
--- chalow.new	2008-05-07 23:32:50.000000000 +0900
***************
*** 464,474 ****
--- 464,503 ----
 }
 
 
+ # 1) >> ... << の内部をエスケープ
+ # 2) \n\n -> <br>\n
+ sub escape_inside_paren{
+ 	local($_) = shift;
+ 
+ 	my $str;
+ 	s!\n\n!\n<br>\n!gm;
+ 	my @array = split("\n", $_);
+ 
+ 	my $flag=0;
+ 	foreach (@array){
+ 		if(/^\t?>>$|^\t?>\|\|$/){$flag=1; $str.=$_."\n"; next;}
+ 		if(/^\t?<<$|^\t?\|\|<$/){$flag=0; $str.=$_."\n"; next;}
+ 		if($flag){
+			s!&!&amp;!g;
+ 			s!<!&lt;!g;
+ 			s!>!&gt;!g;
+ 		}
+ 		$str.=$_."\n";
+ 	}
+ 	return $str;
+ }
+ 
 ### 文字列の置き換え
 sub okikae {
 local ($_) = shift;	
 my ($ymd, $i) = @_;		# 何かに使えるかな?
 
+ 		$_=escape_inside_paren($_);
+ 		use Text::Hatena;
+ 		$_=Text::Hatena->parse($_);
+     s!<div class="section">\n<p>(.+)</p>\n</div>\n!$1!gm;
+ 		s!<pre>!<blockquote><pre>!gms;
+ 		s!</pre>!</pre></blockquote>!gms;
+ 
 escape_string(\$_);
 
 # 日付リンク情報の格納 - parse_entry にあったが、escape後に行なっ
***************
*** 477,482 ****
--- 506,512 ----
 $inside_ref{$1}{"$ymd-$i"}++;
 }
 
+ 		if(0){
 s/&/&amp;/go;
 s/\]>/\]&gt;/go;
 #    s/>/&gt;/go;		# > が &.. になると、URL とか引用のマッチ狂う
***************
*** 487,492 ****
--- 517,523 ----
 # カスタマイズのヒント: <s></s> を残す→ 
 # s|<(/?[a-rt-z]+)|&lt;$1|gi; <b> を残す→ 
 # s|<(/?[ac-z]+)|&lt;$1|gi; (副作用 = <br> なども残る)
+ 	}
 
 ### Read More ###
 s!^$readmore_tag$(.*)$!<div class="readmore">$1</div>!sm;
***************
*** 505,510 ****
--- 536,542 ----
 (join("<tr>", (map {join('<td>', split(/\|\|/ ,$_))} split(/\n/, $1))))
 .'</table>'!gsme;
 
+ 		if(0){
 ### 引用 (quote): ">>" と "<<" で囲む
 s!^>>\n!<blockquote>!gm;
 s!^<<\n!</blockquote>!gm;
***************
*** 517,527 ****
--- 549,561 ----
 } else {
 s!((^((\||>)[^\n]*)\n)+)!<blockquote>$1</blockquote>!gmx;
 }
+ 	}
 
 ### 日付で参照リンク
 # date ref : [YYYY-MM-DD]
 $_ = datestr2anchor($_);
 
+ 		if(0){
 ### URL表記を href で
 # URL : http://....
 # 正規表現は http://www.din.or.jp/~ohzaki/perl.htm#httpURL より。
***************
*** 532,537 ****
--- 566,572 ----
 s{(?<![\"\=|])((s?https?|ftp)://($URLCHARS+)($URLDELIM($URLCHARS+))*)}
 {'<a href="'.join(, split(/$URLDELIM/, $1)).'">'.
 join(, split(/\\/, $1)).'</a>'}gem; #")};
+ 	}
 
 ### 行頭のスペースは &nbsp; に置き換える。
 s!^( +)!{"&nbsp;" x length($1)}!gme;
***************
*** 543,555 ****
--- 578,594 ----
 # 各行の行末に <br> を付ける
 # memo: 昔は pre で囲んでいたが、v0.23 からやめた
 #print "1[$_]\n";
+ 		if(0){
 s!$!<br>!gsm;
 s!<br>$!!;
+ 	}
 #print "2[$_]\n";
 
 unescape_string(\$_);	# プラグイン呼び出しも行なう
 
+ 		if(0){
 s!</pre><br>!</pre>!g;	# ad hoc
+ 	}
 
 return $_;
 }


また、ChangeLogにシフトして発見した思わぬ副次的な有効作用は以下のとおり。

  1. ToDoの管理が驚くほど楽
  2. 公開したい内容と非公開の内容を、自動選択できる


1. は、clgrep-item-headerで[ToDo]だけ表示させるファンクションを.emacsでdefunし、global-set-keyでエイリアスを設けることで,瞬時にリストが表示できる。

; check your todo
(setq clmemo-file-name "~/usr/memo/diary.txt")
(defun clgrep-todo ()
(interactive)
(progn
(add-change-log-entry 
nil
(expand-file-name clmemo-file-name))
(clgrep-item-header "ToDo")))
(global-unset-key "\M-t")
(global-set-key "\M-t" 'clgrep-todo)
(clgrep-todo) ;; Emacs起動と同時にToDoリストが表示される

[ToDo]が片付いたら,[ToDo]を[ToBeDone]に書き換えるquery-replaceを使ったファンクションを、同じくdefunとglobal-set-keyすることで、ToDoリストを消去するのではなく、作業日誌として残すことができる。

; change your todo to ToBeDone
(defun todo2tobedone ()
(interactive)
(progn
(add-change-log-entry 
nil
(expand-file-name clmemo-file-name))
(query-replace
"\[ToDo\]"
"\[ToBeDone\]")))
(global-unset-key "\M-d")
(global-set-key "\M-d" 'todo2tobedone)


2. は、「p:」フラグによって非公開を実現している箇所のChangeLogReader.pmのソースを弄り、特定のカテゴリのみを出力し、また公開したくない文字列にマッチングした場合は公開しない等、あらかじめソースに記述することで容易に定義できる。

- if ($ih =~ /^p:/) { # Ignoring private items
+ ### 1) プライベートマークp:    2) []が存在しない     3) 公開用マッチング     4) 非公開用マッチング
+ if ($ih =~ /^p:/ || $ih!~/\]/ || $ih!~/Windows|Mac|Macintosh|Linux|Fedora|MySQL|Perl|PHP|ATOK|Emacs|Meadow|ChangeLog/i || $ih=~/Auction/i) { # Ignoring private items


さらにcrontabに、chalowの出力とncftpputによるサーバへのアップロードを任せておくことで、自動的な公開が可能となる。

公開用のChangeLogReader.pmと自分用のChangeLogReader.pmを、別のディレクトリに保存し、perl -I に渡すinclude用のライブラリパスでswitchすれば, p: を個別のエントリに設定する必要がなくなるかもしれない。

0 0 * * * kawachi /bin/rm -rf /tmp/chalow/; mkdir /tmp/chalow/ ; cd /tmp/chalow/ ; perl -I~/usr/lib/perl5/ ~/usr/bin/chalow -c ~/usr/etc/cl.conf ~/usr/memo/diary.txt ; \
ncftpput -m -u user -p password server.com /public_html/c * ; /bin/rm -rf /tmp/chalow


日常的にメモ書きを使用するには、ChangeLog + clgrep + chalow の組み合わせは非常に有用である。


ただし、ChangeLogがPukiwikiが果たしてくれていた役割を全てになっているかといえば、そうでもない。

長い文を記述したり,体系的に知識を整理したい場合は、pukiwikiに書き込む方が有効だ.

大規模な文章をChangeLogに記述することは,後から見返すことを考えるとあまり有効ではない。

抽象的だが,ChangeLogとPukiwikiの関係は,バイクと乗用車の関係に似ており,双方の利を理解した上で,両立して使用していくことが最良の道かと思う。


他にも,howmや紙copiなど多くの有用なツールがあるが,多機能さや導入のコスト故か、個人的に馴染めなかったため、ChangeLogとPukiwikiに帰結した。

ChangeLogはEmacsやViさえあれば起動できるし,Pukiwikiはブラウザとネット環境があればよく、携帯からでも編集できる。

このユニバーサルさも長く使用する上で重要な指標となる。


歴史上の成功者は,メモ魔が多いという。

その恩恵にあやかるべく,「ChangeLog + clgrep + chalow」「Pukiwiki + pukiwiki-mode.el」をこれからも愛用したい。

ツールの開発者様に謝意と敬意を表し、末筆とする。

~/usr/script/pkwk2cl.pl [ChangeLog][ToDo]

pukiwiki -> changelog

出力したファイルが、なぜかchalowにchangelogだと認識してもらえない。

now pending

Tab Width [ChangeLog][ToDo]

;;; http://at-aka.blogspot.com/2005/11/changelog-tab.html

;;; http://www.netlaputa.ne.jp/~kose/Emacs/Mule-Win32/main.html <- todo

^L

;;; Local Variables: ***

;;; mode: change-log ***

;;; tab-width: 4 ***

;;; left-margin: 4 ***

;;; End: ***

2008-05-04 Sun

chalow において -/--/--- を ul/liタグを用いてネストで箇条書き [ChangeLog][Linux]

2009 : 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
2007 : 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
2005 : 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

最終更新時間: 2009-05-28 23:58