변경사항 (가장 최근의 "다른 사용자에 의한 수정"부터)
(일반적인 수정, 소소한 수정)
| -6,7 +6,7  | 
| ** UseMod:UseModWiki/NewFeatures - 1.0 의 새로운 기능 설명 | 
 | 
| * 필수 요구 사항 : | 
| ** [[/SlashLink]] 패치가 되어 있을 것 | 
| ** [[/SlashLinks]] 패치가 되어 있을 것 | 
 | 
| * 사용법: | 
| ** wiki.pl?action=rss[&days=숫자] | 
| -656,7 +656,7  | 
 | 
| 어디선가 괄호를 안닫은듯. 페이지가 이상하게 표시되요. <mysign([[Nyxity]],2006-3-22 6:05 pm)> | 
 | 
| {{{perl }}} 에서 사용했던 source-highlight 패키지가 버전업이 되면서 출력이 바뀌어 버리는 바람에... -_-;;; 이 페이지 뿐 아니라 저렇게 소스 코드를 표시한 페이지들은 지금 난리가 아닙니다. ㅠ,.ㅠ <mysign([[Raymundo]],2006-3-22 6:31 pm)> | 
| {{{#!vim perl }}} 에서 사용했던 source-highlight 패키지가 버전업이 되면서 출력이 바뀌어 버리는 바람에... -_-;;; 이 페이지 뿐 아니라 저렇게 소스 코드를 표시한 페이지들은 지금 난리가 아닙니다. ㅠ,.ㅠ <mysign([[Raymundo]],2006-3-22 6:31 pm)> | 
 | 
| :아 그런거였군요. 저런~ <mysign([[Nyxity]],2006-3-22 6:33 pm)> | 
 | 
최근변경내역의 RSS 제공
-  RSS논의에서 얘기하던 것.
 -  최근변경내역을 xml 형식으로 출력하여, 다른 프로그램이나 웹사이트(어떤 곳이 있는지 모르겠지만)를 통해서 변경 내역을 받아 볼 수 있다.
 -  오리지널 UseModWiki 1.0 에 들어있는 코드를 ext 버전에 맞춰서 고쳐 넣었다. 
 
-  사용법:
-  wiki.pl?action=rss[&days=숫자]
-  days 값은 최근 몇일 동안의 변경 내역을 출력할 지를 지정한다. 생략하면 기본값은 RssDays 변수의 값이 지정된다.
 
 -  몇 가지 환경변수가 추가되었다. 아래 "config.pl 수정" 항목을 참고할 것
 -  ext1.65의 업데이트에 의해 FireFox의 라이브북마크 기능을 지원하며, 다른 RSS리더에 내 RSS주소 대신 그냥 위키사이트의 주소를 넣어도 RSS를 읽을 수 있다. (물론 RSS리더 쪽에서 그 기능을 지원해야 한다)
 
 
-  부작용:
-  UseModWiki 1.0 의 소스에서 관련 있다고 판단된 부분을 가져왔는데, 빠뜨린게 있을 수도 있다.. -_-; 특히나 rss 출력과는 직접적인 관계가 없지만 최근 변경 내역 처리나 다른 부분에서 고쳐진 부분이 반드시 필요한데 주인장이 발견하지 못하고 빼먹었을 수도 있다. xml 출력이 정확한지 보장하지 못한다. rss 수집 프로그램 세 가지로 테스트해봤을 때는 별 문제가 없어 보였다.
 -  기존 0.92 의 코드도 수정을 해야 되는데 ext 버전에서 워낙 잡다하게 뜯어고치다보니 겹치는 데가 많아서.. 남아도는 코드가 생겼다.
 
 
config.pl 수정
다음 환경 변수들을 추가한다.
$InterWikiMoniker = '';         
$SiteDescription  = $SiteName;  
$RssLogoUrl  = '';              
$RssDays     = 7;               
$RssTimeZone = 9;               
-  InterWikiMoniker - 뭔지 모르겠다. 아마 인터위키에서처럼 자신의 홈페이지를 가리키는 명칭을 얘기하는 듯.
 -  SiteDescription - 주석문으로 보건데, 간단한 사이트 소개?
 -  RssLogoUrl - 로고 이미지의 URL 을 적어준다.
 -  RssDays - 별도로 인자를 주지 않았을 때, 디폴트로 며칠 동안의 변경 내역을 보여 줄지를 정한다. 여기서는 7일.
 -  RssTimeZone - 오리지널 코드에는 없고 주인장이 덧붙인 것. 홈페이지가 있는 서버의 시계가 어디에 맞춰져 있는지를 적어준다. 세계표준시라면 0, 한국표준시라면 9 가 될 것이다.
 
wiki.pl 수정
환경 변수와 전역 변수 추가
use vars qw(
    $UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4
    ...
    $InterWikiMoniker $SiteDescription $RssLogoUrl $RssDays $RssTimeZone
    );
...
use vars qw(%RevisionTs $FS_lt $FS_gt $StartTime $Sec_Revision $Sec_Ts
    ...
    $QuotedFullUrl);
기존의 DoRc 함수가 인자를 받도록 바뀌었다. 0이면 rss, 1이면 기존 html 이다. 따라서 기존 코드에서 DoRc() 로 되어 있던 것들을 DoRc(1) 로 고친다. (0과 1을 반대로 했다면 안 고쳐도 되었을 텐데.. -_-)
sub DoBrowseRequest {
    ...
            &DoRc(1);
    ...
}
sub BrowsePage {
    ...
        &DoRc(1);
    ...
}
DoRc 함수를 인자에 따라 다르게 동작하도록 고친다. 아래에서 주석문에 rss 가 들어간 부분을 찾아서 고친다.
sub DoRc {
    my ($rcType) = @_;
    my $showHTML;
    my ($fileData, $rcline, $i, $daysago, $lastTs, $ts, $idOnly);
    ...
    my $showbar = 0;
    if (0 == $rcType) {
        $showHTML = 0;
    } else {
        $showHTML = 1;
    }
   ...
        $starttime = &GetParam("from", 0);
        if ($showHTML) {
            print "<h2>" . Ts('Updates since %s', &TimeToText($starttime))
                        . "</h2>\n";
        }
    } else {
        $daysago = &GetParam("days", 0);
        $daysago = &GetParam("rcdays", 0)  if ($daysago == 0);
        if ($daysago) {
            $starttime = $Now - ((24*60*60)*$daysago);
            if ($showHTML) {
                print "<h2>" . Ts('Updates in the last %s day'
                             . (($daysago != 1)?"s":""), $daysago) . "</h2>\n";
            }
            
            
            
        }
    }
    if ($starttime == 0) {
        if (0 == $rcType) {
            $starttime = $Now - ((24*60*60)*$RssDays);
        } else {
            $starttime = $Now - ((24*60*60)*$RcDefault);
        }
        if ($showHTML) {
            print "<h2>" . Ts('Updates in the last %s day'
                . (($RcDefault != 1)?"s":""), $RcDefault) . "</h2>\n";
        }
        
    }
    }
    
    ($status, $fileData) = &ReadFile($RcFile);
    ...
    $lastTs++  if (($Now - $lastTs) > 5);  
    $idOnly = &GetParam("rcidonly", "");
    if ($idOnly && $showHTML) {
        print '<b>(' . Ts('for %s only', &ScriptLink($idOnly, $idOnly))
                    . ')</b><br>';
    }
    if (!($IsPDA)) {
    if ($showHTML) {
    foreach $i (@RcDays) {
        print " | "  if $showbar;
    ...
        print " (".
            Ts('currently set to %s', &TimeToText($bookmark)).
            ")<br>\n";
    }
    }
    }
    
    ...
        last if ($ts >= $starttime);
    }
    if ($i == @fullrc && $showHTML) {
        print '<br><strong>' . Ts('No updates since %s',
                                            &TimeToText($starttime)) . "</strong><br>\n";
    } else {
        splice(@fullrc, 0, $i);  
        
        if (0 == $rcType) {
            print &GetRcRss(@fullrc);
        } else {
            print &GetRcHtml(@fullrc);
        }
    }
    if ($showHTML) {
        print '<p>' . Ts('Page generated %s', &TimeToText($Now)), "<br>\n";
    }
}
기존의 GetOldPageLink 를 수정하고, 새로운 함수 GetOldPageParameters 를 추가한다.
sub GetOldPageParameters {
    my ($kind, $id, $revision) = @_;
    $id = &FreeToNormal($id) if $FreeLinks;
    return "action=$kind&id=$id&revision=$revision";
}
sub GetOldPageLink {
    my ($kind, $id, $revision, $name) = @_;
    $name =~ s/_/ /g if $FreeLinks;
    return &ScriptLink(&GetOldPageParameters($kind, $id, $revision), $name);
}
action=rss 이면 DoRss 를 부르게 한다.
sub DoOtherRequest {
    ...
        } elsif (($action eq "comments") || ($action eq "longcomments")) {
            &DoComments($id) if &ValidIdOrDie($id);
        } elsif ($action eq "rss") {
            &DoRss();
        } else {
            
            &ReportError(Ts('Invalid action parameter %s', $action));
    ...
}
이제는 페이지를 저장할 때 rclog 화일에 페이지 revision 번호도 저장한다.
sub DoPostMain {    
    ...
    &WriteRcLog($id, $summary, $isEdit, $editTime, $user, $Section{'host'}, $Section{'revision'});
    ...
}
sub WriteRcLog {
    my ($id, $summary, $isEdit, $editTime, $name, $rhost, $revision) = @_;
    my ($extraTemp, %extra);
    %extra = ();
    $extra{'id'} = $UserID  if ($UserID ne "");
    $extra{'name'} = $name  if ($name ne "");
    $extra{'tscreate'} = $Page{'tscreate'};
    $extra{'revision'} = $revision if ($revision ne "");
    $extraTemp = join($FS2, %extra);
    
    ...
}
이하의 함수들은 통채로 추가.
DoRss 본체는 xml 헤더만 출력하고 DoRc(0) 을 부른다.
sub DoRss {
    print "Content-type: text/xml\n\n";
    &DoRc(0);
}
DoRc 는 인자 0 을 받았다면 GetRcRss 를 부른다.
sub GetRcRss {
    my ($rssHeader, $headList, $items);
    
    $FullUrl = $q->url(-full=>1)  if ($FullUrl eq "");
    $QuotedFullUrl = &QuoteHtml($FullUrl);
    $SiteDescription = &QuoteHtml($SiteDescription);
    my $ChannelAbout = &QuoteHtml($FullUrl . &ScriptLinkChar()
        . $ENV{QUERY_STRING});
    $rssHeader = <<RSS ;
<?xml version="1.0" encoding="$HttpCharset"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns="http://purl.org/rss/1.0/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wiki="http://purl.org/rss/1.0/modules/wiki/"
>
    <channel rdf:about="$ChannelAbout">
        <title>${\(&QuoteHtml($SiteName))}</title>
        <link>${\($QuotedFullUrl . &QuoteHtml("?$RCName"))}</link>
        <description>${\(&QuoteHtml($SiteDescription))}</description>
        <wiki:interwiki>
            <rdf:Description link="$QuotedFullUrl">
                <rdf:value>$InterWikiMoniker</rdf:value>
            </rdf:Description>
        </wiki:interwiki>
        <items>
            <rdf:Seq>
RSS
    ($headList, $items) = &GetRc(0, @_);
    $rssHeader .= $headList;
    return <<RSS ;
$rssHeader
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="${\(&QuoteHtml($RssLogoUrl))}">
        <title>${\(&QuoteHtml($SiteName))}</title>
        <url>$RssLogoUrl</url>
        <link>$QuotedFullUrl</link>
    </image>
$items
</rdf:RDF>
RSS
}
GetRcRss 는 다시 GetRc(0) 을 부른다. 또 DoRc 가 html 출력을 할 때는 GetRcHtml 을 부르는데 이녀석은 별 하는 일 없이 GetRc(1) 을 부른다. 0.92의 GetRcHtml 이 1.0 에서는 GetRc 로 바뀌고 인자에 따라 다르게 동작하게 한 건데... ext 버전에서는 GetRcHtml 이 워낙 많이 수정되어서 그냥 함수를 별개로 두기로 한다. 즉,
0.92 :
HTML: DoRc ------> GetRcHtml
1.0 :
RSS:  --------+-> DoRc ---+---> GetRcRss ----------+-> GetRc ---------------+--> GetRssRcLine
      DoRc(0) |           |               GetRc(0) |  (기존 GetRcHtml 수정) |
              |           |                        |                        |
              |           |                        |                        |
              |           |                        |                        |
HTML: --------+           +---> GetRcHtml ---------+                        +--> GetHtmlRcLine
      DoRc(1)              (이건 그냥 더미) GetRc(1)
ext 버전 :
RSS:  --------+-> DoRc ---+---> GetRcRss ----------+-> GetRc ---------------+--> GetRssRcLine
      DoRc(0) |           |               GetRc(0)    (1.0의 것을 사용)     |
              |           |                                                 |
              |           |                                                 |
              |           |                                                 |
HTML: --------+           +---> GetRcHtml                                   +--> GetHtmlRcLine
      DoRc(1)              (기존 것 계속 사용)                          (결과적으로 사용되지 않음)
따라서 GetRcHtml 과 GetRc 는 비슷한 코드가 반복된다. GetRc(1) 을 호출하는 부분이 없기 때문에 GetRc 에서 해당 경로를 죄다 삭제해 주면 좀 보기에 좋겠지만... 첫째로 귀찮고 둘째로 나중에 다시 필요해질지 모르니 그냥 두기로 함.
어쨌거나, 그래서 이것이 통채로 추가해 버린 GetRc 함수
sub GetRc {
    my $rcType = shift;
    my @outrc = @_;
    my ($rcline, $date, $newtop, $author, $inlist, $result);
    my ($showedit, $link, $all, $idOnly, $headItem, $item);
    my ($ts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp);
    my ($rcchangehist, $tEdit, $tChanges, $tDiff);
    my ($headList, $historyPrefix, $diffPrefix);
    my %extra = ();
    my %changetime = ();
    my %pagecount = ();
    
    $showedit = &GetParam("rcshowedit", $ShowEdits);
    $showedit = &GetParam("showedit", $showedit);
    if ($showedit != 1) {
        my @temprc = ();
        foreach $rcline (@outrc) {
            ($ts, $pagename, $summary, $isEdit, $host) = split(/$FS3/, $rcline);
            if ($showedit == 0) {  
                push(@temprc, $rcline)  if (!$isEdit);
            } else {               
                push(@temprc, $rcline)  if ($isEdit);
            }
        }
        @outrc = @temprc;
    }
    $rcchangehist = &GetParam("rcchangehist", 1);
    $tEdit    = T('(edit)');
    $tDiff    = T('(diff)');
    $tChanges = T('changes');
    $diffPrefix = $QuotedFullUrl . &QuoteHtml("?action=browse\&diff=5\&id=");
    $historyPrefix = $QuotedFullUrl . &QuoteHtml("?action=history\&id=");
    foreach $rcline (@outrc) {
        ($ts, $pagename) = split(/$FS3/, $rcline);
        $pagecount{$pagename}++;
        $changetime{$pagename} = $ts;
    }
    $date = "";
    $all = &GetParam("rcall", 0);
    $all = &GetParam("all", $all);
    $newtop = &GetParam("rcnewtop", $RecentTop);
    $newtop = &GetParam("newtop", $newtop);
    $idOnly = &GetParam("rcidonly", "");
    $inlist = 0;
    $headList = '';
    $result = '';
    @outrc = reverse @outrc if ($newtop);
    foreach $rcline (@outrc) {
        ($ts, $pagename, $summary, $isEdit, $host, $kind, $extraTemp)
            = split(/$FS3/, $rcline);
        next  if ((!$all) && ($ts < $changetime{$pagename}));
        next  if (($idOnly ne "") && ($idOnly ne $pagename));
        next if (&PageIsHidden($pagename));
        %extra = split(/$FS2/, $extraTemp, -1);
        if ($date ne &CalcDay($ts)) {
            $date = &CalcDay($ts);
            if (1 == $rcType) {  
                
                if ($inlist) {
                    $result .= "</UL>\n";
                    $inlist = 0;
                }
                $result .= "<p><strong>" . $date . "</strong></p>\n";
                if (!$inlist) {
                    $result .= "<UL>\n";
                    $inlist = 1;
                }
            }
        }
        if (0 == $rcType) {  
            ($headItem, $item) = &GetRssRcLine($pagename, $ts, $host,
                        $extra{'name'}, $extra{'id'}, $summary, $isEdit,
                        $pagecount{$pagename}, $extra{'revision'},
                        $diffPrefix, $historyPrefix);
            $headList .= $headItem;
            $result   .= $item;
        } else {  
            $result .= &GetHtmlRcLine($pagename, $ts, $host, $extra{'name'},
                        $extra{'id'}, $summary, $isEdit,
                        $pagecount{$pagename}, $extra{'revision'},
                        $tEdit, $tDiff, $tChanges, $all, $rcchangehist);
        }
    }
    if (1 == $rcType) {
        $result .= "</UL>\n"  if ($inlist);  
    }
    return ($headList, $result);  
}
GetRc 함수 안에서 불려서 rss 출력의 각 라인을 생성하는 함수
sub GetRssRcLine {
    my ($pagename, $timestamp, $host, $userName, $userID, $summary,
        $isEdit, $pagecount, $revision, $diffPrefix, $historyPrefix) = @_;
    my ($itemID, $description, $authorLink, $author, $status,
        $importance, $date, $item, $headItem);
    my $encoded_pagename = &EncodeUrl($pagename);
    
    $itemID = $FullUrl . &ScriptLinkChar()
            . &GetOldPageParameters('browse', $encoded_pagename, $revision);
    $itemID = &QuoteHtml($itemID);
    $headItem = "                <rdf:li rdf:resource=\"$itemID\"/>\n";
    if (($summary ne "") && ($summary ne "*")) {
        $description = &QuoteHtml($summary);
    }
    $host = &QuoteHtml($host);
    $host =~ s/\d+$/xxx/;
    if ($userName) {
        $author = &QuoteHtml($userName);
        $authorLink = "link=\"$QuotedFullUrl?$author\"";
    } else {
        $author = $host;
    }
    $status = (1 == $revision) ? 'new' : 'updated';
    $importance = $isEdit ? 'minor' : 'major';
    $timestamp += $TimeZoneOffset;
    my ($sec, $min, $hour, $mday, $mon, $year) = localtime($timestamp);
    $year += 1900;
    $date = sprintf("%4d-%02d-%02dT%02d:%02d:%02d+%02d:00",
        $year, $mon+1, $mday, $hour, $min, $sec, ($TimeZoneOffset/(60*60) + $RssTimeZone));
    $pagename = &QuoteHtml($pagename);
    
    $item = <<RSS ;
    <item rdf:about="$itemID">
        <title>$pagename</title>
        <link>$QuotedFullUrl?$encoded_pagename</link>
        <description>$description</description>
        <dc:date>$date</dc:date>
        <dc:creator>$author</dc:creator>
        <dc:contributor>
            <rdf:Description wiki:host="$host" $authorLink>
                <rdf:value>$author</rdf:value>
            </rdf:Description>
        </dc:contributor>
        <wiki:status>$status</wiki:status>
        <wiki:importance>$importance</wiki:importance>
        <wiki:diff>$diffPrefix$encoded_pagename</wiki:diff>
        <wiki:version>$revision</wiki:version>
        <wiki:history>$historyPrefix$encoded_pagename</wiki:history>
    </item>
RSS
    return ($headItem, $item);
}
마찬가지로 GetRc 함수 안에서 불려서, html 출력의 각 라인을 생성하는 함수. 그렇지만 현재는 호출될 일이 없기 때문에 내용은 비워둔다. 호출되면 서버에러를 낸다.
sub GetHtmlRcLine {
    die "GetHtmlRcLine -- must not be executed!!!";
}
ext1.65에서 추가로 수정된 부분. html 헤더에 RSS를 얻을 수 있는 URL을 넣어서 출력한다.
sub GetHtmlHeader {
    ...
    $html .= qq(<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$HttpCharset">\n);
    $html .= qq(<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">\n);
    
    $html .= qq(<link rel="alternate" type="application/rss+xml" title="$SiteName" href="http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}?action=rss">\n);
    $html .= qq(<script src="$JavaScript" language="javascript" type="text/javascript"></script>);
    ...
}
추가 업데이트 내역
ext1.53a - 관리자가 감춘 페이지도 RSS 출력에 포함되어 나오는 문제를 수정했습니다. 
오타 수정... DoRc 함수 안에 다음 줄이 오타가 있네요. 거의 호출되지 않는 부분이라 알아채지 못했었군요.
    if ($idOnly && &showHTML) {   를
    if ($idOnly && $showHTML) {   으로 (showHTML 앞의 & 를 $ 로) 고칠 것
/최근변경내역아이템갯수지정 패치를 적용하면 '최근 몇 개'의 엔트리를 출력할 지 지정할 수 있음. 
ext1.54a - 출력 항목에 dc:creator 를 추가하고, wiki:diff 에는 diff=4 대신에 diff=5 가 출력되게 하였습니다. 로그인 한 사용자의 경우는 rss 리더에서 바로 diff 링크를 갈 경우 /북마크가 적용됩니다. (그런데 wiki:diff 항목을 지원하는 리더가 있는지 모르는 상태입니다 -_-)
ext1.65 - 
UseModWiki소스수정/라이브북마크 의 내용을 반영합니다. 제 홈페이지를 FireFox에서 볼 때 제대로 동작하는 것을 확인했습니다만, 안 되면 알려 주세요. 참고로 [RSS에 대한 잡담]도 읽어 볼만 하군요. 후자의 글에서 주장하는 "RSS는 미리 (정적으로) 생성되어 있어야 한다"는 말도 일리가 있긴 한데 언제 반영할지 모르겠습니다.
ext1.88
-  RSS에서 author 항목에 나오는 IP주소의 마지막 자리를 xxx 로 감추게 함
 -  페이지 이름에 한글이 들어간 경우 인코딩함
 
관련 링크
Notes
'최근 며칠 동안의 변경내역' 옵션 말고 갯수를 지정하는 옵션도 추가하는 게 좋지 않을까 생각합니다. RSS를 뽑았는데 항목이 텅 비어 있으면 당황할 것 같네요. 참고로 WikiX는 갯수지정 옵션만 있고요, 야후! 뉴스 같은 곳도 RSS로 뽑아주는 뉴스의 갯수가 정해져 있군요. -- 
Danny 2003-10-9 3:47 pm 
-  갯수로 옵션을 주는 사이트들을 봤습니다만 도저히 수긍이 안 가던데요.. 스무개 출력하게 했는데 하루 사이에 50개 글이 올라오면... 반대의 경우는 뭐 보통은 자기가 사이트를 방문하는 주기보다는 days 값을 크게 줄 테니 별 상관없을거라는 생각입니다. 애초에 
WikiPatches/XmlRss 에서는 그래서 rsslimit 라는 갯수 지정 인자를 줄 수 있게 했는데.. 거기서도 days 를 "more useful option" 이라고 표현하고 있고, 1.0에서는 rsslimit 은 빼 버렸더라고요. 고로 갯수지정을 하려면 코드를 별도로 고쳐야 한다는 얘기... 일단 시도는 해 보도록 하지요. 
 
-  반영했습니다. 
 
[Abilon]이라는 프로그램을 설치해서 써보고 있습니다만... author가 안나오니 좀 허전하군요. dc:creator 를 $author로 채워주면 잘 나옵니다. 그리고... description에 페이지 diff가 같이 나오게 할 수는 없을까요? 보통 description을 안 적기 마련인데 좀 휑하네요. 
-  UseModWiki 1.0 에서는 dc:contributor 를 사용하던데, 왜 그러는지 의문이네요. 그냥 슬쩍 dc:creator 를 추가해 넣을까요? 그리고 어차피 마지막 수정자의 이름만 보는 거니까 큰 의미도 없다고 생각합니다. 
 
diff 출력을 따로 볼 방법이 없어서, 저도 정작 위키 사이트는 다시 웹브라우저로 봅니다. 그리고 abilon 은 summary 가 없으면 빈 칸으로 나와서 다시 클릭을 해야 하지만 제가 쓰는 SharpReader 는 (이것도 예상대로 동작하지 않아서 좀 문제가 있는 듯 합니다만) summary 가 없으면 바로 페이지를 보여주니 더 낫더군요. 
 
rss 출력 내에 diff 를 보는 링크의 정보도 있는데 (wiki:diff) 정작 그 링크를 지원하는 리더를 못 찾았네요. 매우 아쉬운 부분입니다. 
 
http://jof4002.net/?action=rss 땜빵으로 넣어봤습니다. 
FireFox 에 라ㅤㅅㅠㅂ님이 적은 문제에 대해서 좀 시도를 해봤습니다만, 제가 Abilon을 안쓰기 때문에 [Blogline]에 대해서 해봤습니다. 
1. item rdf:about에 대해서 URLEncode 를 호출해서 넣어주면 Bloglines에서는 잘 열립니다. 뭐. 아빌론에서도 되지 않을까 싶네요. 
2. 그런데 그게 문제가 되는지 모르겠는데 현재 
FireFox 에서 라이브 북마크를 보면 오히려 영어로 된 페이지 이름만 표시되고 있습니다. 
현재 회사고, 회사에서는 FTP가 안되는 관계로 더이상 테스트 불가입니다. -_-;;; 
 
그리고 페이지 내용에 대해 걸리는 링크가 제대로 안되는 문제는 보니 블록라인이 utf-8을 쓰고 있고, 한글을 utf-8로 처리해서 링크를 보내기 때문에 생기는 문제더군요. 뭐 이것도 URLEncode 를 불러주면 될 것 같습니다만, 매우 귀찮습니다. -- 
조프 2004-12-24 12:23 pm 
-  2번 문제를 해결했습니다. 
sub GetRssRcLine에서 $itemID = &QuoteHtml($itemID);를 $itemID = &URLEncode(&QuoteHtml($itemID));로 바꿔주기만 하면 양쪽 다 잘 될 것 같다는 것입니다. (원래는 URLEncode를 $headitem 업데이트 한 다음에 호출했었는데, 그것 때문에 문제가 됐었던 것 같네요.) 
확인 후 반영 부탁드립니다. 
 
-  그러니까... 저 한 줄 수정만 하면 불여우 문제와 위 1번2번 전부 다 해결이란 건가요? 아니면 저 1번에 적힌 "URLEncode를 호출해서 넣어주면.."은 따로 하고 그와 별도로 위 한 줄 수정도 해야 한다는 건가요? 
 
올불로그나 블로그코리아나 RSS수집이 안되서 올블로그에서 테스트를 해보니 에러가 나는군요. 뭔가 문제가 있는지.. 
잘은 모르겠지만, 한RSS가 잘 해주고 있는 걸로봐서 올블로그가 이 버전의 RSS를 제대로 처리하지 못하는게 아닌가 생각됩니다. blog_rss 매크로의 출력과, 위키 자체의 action=rss 출력의 양식이 서로 다르거든요. 올블로그 쪽에 RSS주소를 알려주고 문의해 보시죠. 
-  쳇, 올블로그에 열심히 문의를 적었고 확인 버튼을 눌렀더니만 글쓰기 권한이 없다고 나오는군요. :-/ 
 
- 저런.. 허탈감이라니. 
 
어디선가 괄호를 안닫은듯. 페이지가 이상하게 표시되요. 
{{{#!vim perl }}} 에서 사용했던 source-highlight 패키지가 버전업이 되면서 출력이 바뀌어 버리는 바람에... -_-;;; 이 페이지 뿐 아니라 저렇게 소스 코드를 표시한 페이지들은 지금 난리가 아닙니다. ㅠ,.ㅠ 
- 아 그런거였군요. 저런~ 
 
올블로그에 전체RSS등록하면, 한글이 깨져버리고 모노로그의 RSS를 등록하면 페이지가 제대로 표시가 되네요. 뭐가 차이가 나는 걸까요. 
-  음 글쎄요 전 올블로그는 등록을 안해서... 근데 예전부터 전체RSS(유즈모드에 단 RSS형식이... 전체RSS의 경우와 다이어리RSS가 버전과 형식이 다른 건 아시죠?)는 좀 이상했던것 같기도 하고... 잘 모르겠네요 ^^;;; 
 
-  역시.. 그렇군요. 감사합니다. 
 
위키위키분류