TWiki
TWiki 的應用與技巧 從 TWiki 3.0 開始我就陸續有在參與 TWiki 的發展,在這裡,將會陸續將一些 TWiki 的經驗分享給大家。TWiki 是一個相當成熟的知識管理平台,除了可以進行文件整理之外,還可以訂製個人的部落格,乃至於成為專案管理平台。已經有數間國際級的大公司陸續採用。
2 months, 4 days ago in BlogDev, TWiki by MoyaTseng
之前的 Blog 是採用 TWiki-4.1.2 合併 BlogPlugin 所建構的,版本已經有點老舊了,所以想要換成新版本的系統。
在 4.2.0 釋出的時候,曾經嘗試升級過一次,但是當時的 Plugins 都沒有跟上新的 TWiki API 標準,所以失敗。這次捲土重來,總算有點成果。 其實新的 4.2.2 版本和一些老舊的 Plugins 還是不太合,所以,我勢必要考慮修改支援的功能才行。之前在 4.1.2 當中已經做過的 Patch 還是得全部再做過一次,因為之前沒有把這些 Patch 送回 TWiki 總站,納入新的程式管理的關係,所以現在只好重作。
以後再另外找時間來包裝這些我已經 Patch 過的檔案,然後再送回去 TWiki 總站吧。
另外,本來想嘗試把留言功能打開來,不過,試過幾次,都需要先申請帳號之後才能夠留言,相當的不方便。特別是我其實都還沒有想要開啟公開註冊的功能,所以當然就不可能留言。這個之後再另外找時間測試看看吧!應該是有方法吧,只不過我也不是那麼確定,畢竟目前知道的都已經測試過了。
然後,我把 TWiki 和 Blog 的部分頁面設計都重新最佳化過了一次。因為對 NatSkin 的瞭解更深入了一些,所以有些設定我已經比較懂得該怎麼調整了。其實調的地方不多,就是把最上方的底圖先換掉,然後取消 TWiki 的 Border,再把 Blog 的 Boder 由 thin 改到一般的 Border 模式。
最後,雖然 4.2.2 有支援 admin only 模式,但是我都不太會想要用 admin 發表文章,所以還是繼續沿用一般模式,但是把註冊功能給完全 disable 掉了。省得偶爾會有人來註冊不過,然後發信過來問我,看到信的時候會有點不好意思,所以還是完全取消算了。
5 months, 1 week ago in BlogDev, TWiki by MoyaTseng
研究了一陣子,再加上之前已經小規模測試的結果,覺得似乎還滿有意思的,所以決定全面支援推推王的功能支援。未來應該也會考慮增加其他的流通管道的,只不過這個網站的 performance 不太好,有很大的改善空間。 @_@、、 稍微嘗試了一下,有上推推王的文章的閱覽率還真的滿不錯的。
個人覺得對於「靜思晨語」以及「人間菩提」這兩個部分的文章,既然是有讓大家來閱覽的推廣需要,所以決定在網站上增加推推王的支援。這樣我也可以比較方便的推文上去,多一個管道,讓上人開示的內容,有多一點讓人接觸到的管道。
也歡迎大家在閱讀之後,一起來推文。讓好的觀念、思想、正念、正思維都可以普及出去。牽引更多的人來加入新道德重整時代。
以下是相關的 BlogPlugin patch:
*** RenderFullTeaser.txt-orig 2008-06-11 16:54:42.000000000 +0800
--- RenderFullTeaser.txt 2008-06-11 16:46:14.000000000 +0800
***************
*** 64,69 ****
--- 64,74 ----
~~~ by [[Blog.$formfield(BlogAuthor)][$formfield(BlogAuthor)]]
~~~ </span>
~~~ </div>
+ ~~~ <div class=\"funp\">
+ ~~~ <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td>
+ ~~~ <script language=\"JavaScript\" src=\"http://funp.com/tools/button.php?url=http%3A%2F%2Fmoya.iyard.org%2Fbin%2Fview%2FBlog%2FBlogEntry318&s=12\" type=\"text/javascript\"></script>
+ ~~~ </td></tr></table>
+ ~~~ </div>
~~~ <noautolink>
~~~ %STARTALIASAREA%
~~~ <div class=\"blogText\">
*** RenderBlogEntry.txt-orig 2008-06-11 16:56:09.000000000 +0800
--- RenderBlogEntry.txt 2008-06-11 16:57:44.000000000 +0800
***************
*** 87,92 ****
--- 87,97 ----
~~~ <span class=\"blogAuthor\">by [[Blog.$formfield(BlogAuthor)][$formfield(BlogAuthor)]] </span>
~~~
~~~ </div>
+ ~~~ <div class=\"funp\">
+ ~~~ <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td>
+ ~~~ <script language=\"JavaScript\" src=\"http://funp.com/tools/button.php?&s=12\" type=\"text/javascript\"></script>
+ ~~~ </td></tr></table>
+ ~~~ </div>
~~~ %STARTALIASAREA%
~~~ <div class=\"blogText\">
~~~
<noautolink>
5 months, 3 weeks ago in TWiki by MoyaTseng
TWiki 有提供統計記錄的功能,同時也提供了自動更新的功能。設定方法不太難,只要增加一個 crontab 就可以了。
crontab 需要使用與 apache22 相同的帳號設定:
0 0 * * * (cd /usr/local/www/twiki/bin; ./statistics >/dev/null 2>&1)
- TWiki Site Tool 的參考文件
- Blog 使用統計記錄
5 months, 3 weeks ago in TWiki by MoyaTseng
因為「靜思晨語。法譬如水」以及「人間菩提」這兩個單元,佔了我的網站很大的比例,而這兩個又是圖檔特多的,所以影響所及就是頻寬佔用太大,無論對於提供流量的單位或是讀者,其實都是一個負擔。
為了要讓開啟網頁的速度,載入圖檔的速度提昇,所以要研究一下如何在不影響圖檔呈現的品質的狀況下,適度的調整檔案的尺寸。 經過大約半小時的研究之後,想起以前在某大網路公司的工作經驗,當時最後一個執行的工作專案,就是負責調校該服務平台的圖檔機制。曾經採用過 ImageMagick 這個軟體,其中有一些不錯的工具。
因為我的圖檔其實可以不需要有 Exif 的資料,所以如果可以拿掉這個部份的資料,大約可以省下 ¼ ~ 1/3 左右的檔案尺寸,也有節省儲存體(硬碟)的效果。同時對於頻寬當然也會負擔比較小。
另外,因為我的圖檔在預設都是 Quality 99 的,相當高的畫質,但是其實網頁顯示只要有 75 就很好了,肉眼不太能分辨。折衷方案,採用 Quality 85 的畫質,對於講究一點的,依據當時實際上得盲測,已經讓很講究的人也分不出來畫質的差異。所以繼續沿用這個數值來做調整。
convert -strip -quality 85 source.jpg target.jpg
這個指令當中, -strip 是告知要移除 Exif 等相關的附加資訊。而 -quality 85 則是把畫質降低到 85% 即可。
實驗了一下,開啟網頁的時候,載入圖檔的速度明顯變快,算是相當有幫助的了。其實如果可行的話,應該要考慮把 TWiki 的 ImagePlugin 加上主動進行移除 Exif 以及 quality 限定的功能,不過,暫時沒空,所以這個計畫就先放著吧!反正只要記得上傳完圖檔之後,要跑一下那個指令,調整圖檔的檔案大小即可。
6 months, 2 weeks ago in BlogDev, TWiki by MoyaTseng
因為有時後會想要先把文章寫好,但是又想要讓他可以在時間到了之後才發佈出去,但是目前的 TWiki BlogPlugin 沒有支援這個功能,所以需要作點修改。 這一次的修改只做到列表的時候不會出現,但是針對的是全部的人,當然包括我自己在內。這樣的修改還有改善的空間,至少還需要做到讓管理員可以看到才對。如果連管理員都看不到,要作修改等等的就沒辦法了。
這次的修改,是修改位在 ~twiki/data/Blog/RenderFrontPage.txt 這個檔案的內容。在採用 DBQUERY 的時候,增加判斷「發佈時間」是否是在「系統時間」之前,如果是在系統時間之前的話,才會把他顯示出來,不然就先隱藏起來。
參考的文件:
- TWiki:Plugins/DBCachePlugin
- TWiki:Plugins/DBCacheContrib
- TWiki:TWiki/TWikiVariables
Perl Modules 的 Patch 內容
- perl Time::Parse 預設不認得 dd mmm yyyy – HH:MM 的格式,最多也只認識 dd mmm yyyy HH:MM 而已,所以我們需要讓他有能力多認識一下 BlogPlugin 的時間格式。
--- ParseDate.pm-orig Tue May 20 16:26:24 2008
+++ ParseDate.pm Tue May 20 16:26:24 2008
@@ -665,7 +665,7 @@
{
my ($tr, $hr, $mr, $sr, $tzr, %options) = @_;
- $$tr =~ s#^\s+##;
+ $$tr =~ s#^(-)\s+##;
if ($$tr =~ s!^(?x)
(?:
TWiki 的 Contrib module 的 patch 內容:
- DBCacheContrib 只提供小於、大於指定時間的功能,如果是等於的話就沒辦法判斷,所以增加了「小等及等於」和「大於及等於」指定時間這兩個新的判斷式。
- TWiki/Contrib/DBCacheContrib/Search.pm
--- TWiki/Contrib/DBCacheContrib/Search.pm-orig Tue May 20 11:20:31 2008
+++ TWiki/Contrib/DBCacheContrib/Search.pm Tue May 20 11:19:26 2008
@@ -72,7 +72,9 @@
'>' => { exec => \&OP_greater, prec => 4},
'<' => { exec => \&OP_smaller, prec => 4},
'EARLIER_THAN' => { exec => \&OP_earlier_than, prec => 4},
+ 'EARLIER_EQUAL' => { exec => \&OP_earlier_equal, prec => 4},
'LATER_THAN' => { exec => \&OP_later_than, prec => 4},
+ 'LATER_EQUAL' => { exec => \&OP_later_equal, prec => 4},
'WITHIN_DAYS' => { exec => \&OP_within_days, prec => 4},
'IS_DATE' => { exec => \&OP_is_date, prec => 4},
'!' => { exec => \&OP_not, prec => 3},
@@ -88,7 +90,7 @@
);
my $bopRE =
- "AND\\b|OR\\b|!=|=~?|<=?|>=?|LATER_THAN\\b|EARLIER_THAN\\b|WITHIN_DAYS\\b|IS_DATE\\b";
+ "AND\\b|OR\\b|!=|=~?|<=?|>=?|LATER_THAN\\b|LATER_EQUAL\\b|EARLIER_THAN\\b|EARLIER_EQUAL\\b|WITHIN_DAYS\\b|IS_DATE\\b";
my $uopRE = "!|[lu]c\\b";
my
ow = time();
@@ -397,6 +399,25 @@
return ( $lval > $rval )?1:0;
}
+sub OP_later_equal {
+ my ($r, $l, $map) = @_;
+
+ my $lval = $l->matches( $map );
+ if ($lval !~ /^-?\d+$/) {
+ require Time::ParseDate;
+ $lval = Time::ParseDate::parsedate( $lval );
+ }
+ return 0 unless( defined( $lval ));
+
+ my $rval = $r->matches( $map );
+ if ($rval !~ /^-?\d+$/) {
+ require Time::ParseDate;
+ $rval = Time::ParseDate::parsedate( $rval );
+ }
+ return 0 unless( defined( $lval ));
+ return ( $lval >= $rval )?1:0;
+}
+
sub OP_earlier_than {
my ($r, $l, $map) = @_;
@@ -414,6 +435,25 @@
}
return 0 unless( defined( $lval ));
return ( $lval < $rval )?1:0;
+}
+
+sub OP_earlier_equal {
+ my ($r, $l, $map) = @_;
+
+ my $lval = $l->matches( $map );
+ if ($lval !~ /^-?\d+$/) {
+ require Time::ParseDate;
+ $lval = Time::ParseDate::parsedate( $lval );
+ }
+ return 0 unless( defined( $lval ));
+
+ my $rval = $r->matches( $map );
+ if ($rval !~ /^-?\d+$/) {
+ require Time::ParseDate;
+ $rval = Time::ParseDate::parsedate( $rval );
+ }
+ return 0 unless( defined( $lval ));
+ return ( $lval <= $rval )?1:0;
}
sub OP_is_date {
TWiki 的 BlogPlugin Template 的 patch 內容:
- RenderFrontPage.txt
--- RenderFrontPage.txt-orig Wed May 7 23:37:26 2008
+++ RenderFrontPage.txt Wed May 7 23:36:45 2008
@@ -17,7 +17,7 @@
%STARTINCLUDE%
~~~ %DBCALL{"RenderGoogleAdsense" TYPE="text_image"}%
%~~ DBQUERY{
-~~~ "TopicType=~'\bBlogEntry\b' AND State='published'
+~~~ "TopicType=~'\bBlogEntry\b' AND State='published' AND Date EARLIER_EQUAL '%SERVERTIME%'
~~~ %IFDEFINED{"%CAT%" then="AND SubjectCategory=~'\b%CAT%\b'" glue="off"}%
~~~ %IFDEFINED{"%TAG%" then="AND BlogTag=~'\b%TAG%\b'" glue="off"}%
~~~ %IFDEFINED{"%AUTHOR%" then="AND BlogAuthor=~'\b%AUTHOR%\b'" glue="off"}%
- RenderRecentPostings.txt
--- RenderRecentPostings.txt-orig Mon May 12 18:46:44 2008
+++ RenderRecentPostings.txt Mon May 12 18:46:02 2008
@@ -13,7 +13,7 @@
%STARTINCLUDE%
~~~ %STOPALIASAREA%
%~~ DBQUERY{"TopicType=~'\bBlogEntry\b' AND
-~~~ State='published'
+~~~ State='published' AND Date EARLIER_EQUAL '%SERVERTIME%'
~~~ %IFDEFINED{"%CAT%" then="AND SubjectCategory=~'\b%CAT%\b'"}%
~~~ %IFDEFINED{"%AUTHOR%" then="AND BlogAuthor=~'\b%AUTHOR%\b'"}%"
~~~ order="createdate" reverse="on" limit="%LIMIT%"
- RenderArchives.txt
--- RenderArchives.txt-orig Mon May 12 18:56:48 2008
+++ RenderArchives.txt Mon May 12 18:58:39 2008
@@ -11,7 +11,7 @@
%STARTINCLUDE%
*~~
-%~~ DBSTATS{"TopicType=~'\bBlogEntry\b' AND State='published'
+%~~ DBSTATS{"TopicType=~'\bBlogEntry\b' AND State='published' AND Date EARLIER_EQUAL '%SERVERTIME%'
~~~ %IFDEFINED{"%CAT%" then="AND SubjectCategory=~'\b%CAT%\b'" glue="off"}%
~~~ %IFDEFINED{"%AUTHOR%" then="AND BlogAuthor=~'\b%AUTHOR%\b'" glue="off"}%
~~~ "
- RenderBlogArchiveCat.txt
--- RenderBlogArchiveCat.txt-orig Mon May 12 18:57:24 2008
+++ RenderBlogArchiveCat.txt Mon May 12 18:58:39 2008
@@ -14,7 +14,7 @@
<noautolink>
*~~
%~~ TAGCLOUD{
-~~~ "%DBQUERY{\"TopicType=~'\bBlogEntry\b' AND State='published'\"
+~~~ "%DBQUERY{\"TopicType=~'\bBlogEntry\b' AND State='published' AND %Date EARLIER_EQUAL '%SERVERTIME%'\"
~~~ format=\"$formfield(SubjectCategory)\" separator=\", \"
~~~ }%"
~~~ buckets="30"
- RenderBlogArchiveChron.txt
--- RenderBlogArchiveChron.txt-orig Mon May 12 18:56:59 2008
+++ RenderBlogArchiveChron.txt Mon May 12 18:58:40 2008
@@ -15,7 +15,7 @@
*~~
<div class="blogArchiveDateSelect">
<div class="blogArchiveYears">
-%~~ DBSTATS{"TopicType=~'\bBlogEntry\b' AND State='published'
+%~~ DBSTATS{"TopicType=~'\bBlogEntry\b' AND State='published' AND Date EARLIER_EQUAL '%SERVERTIME%'
~~~ %IFDEFINED{"%URLPARAM{"year"}%" then="AND Date=~'$test'" glue="off"}%
~~~ "
~~~ field="Date" sort="created"
- RenderBlogArchiveHitList.txt
--- RenderBlogArchiveHitList.txt-orig Mon May 12 18:57:35 2008
+++ RenderBlogArchiveHitList.txt Mon May 12 18:58:40 2008
@@ -13,7 +13,7 @@
*~~
<div class="blogArchiveHitList">
<a name="hits"></a>
-%~~ DBQUERY{"TopicType=~'\bBlogEntry\b' AND State='published' %QUERY%"
+%~~ DBQUERY{"TopicType=~'\bBlogEntry\b' AND State='published' AND Date EARLIER_EQUAL '%SERVERTIME%' %QUERY%"
~~~ %IFDEFINED{"%URLPARAM{"skip"}%" then="skip=\"$test\""}%
~~~ limit="15"
~~~ order="created"
- RenderBlogArchiveLex.txt
--- RenderBlogArchiveLex.txt-orig Mon May 12 18:57:46 2008
+++ RenderBlogArchiveLex.txt Mon May 12 18:58:41 2008
@@ -67,7 +67,7 @@
</div>
*~~
%~~ TAGCLOUD{
-~~~ "%DBQUERY{\"TopicType=~'\bBlogEntry\b' AND State='published'\"
+~~~ "%DBQUERY{\"TopicType=~'\bBlogEntry\b' AND State='published' AND Date EARLIER_EQUAL '%SERVERTIME%'\"
~~~ format=\"$formfield(Headline) $formfield(Teaser) $formfield(Text)\"
~~~ separator=\", \"
~~~ }%"
- RenderBlogArchiveTag.txt
--- RenderBlogArchiveTag.txt-orig Mon May 12 18:57:56 2008
+++ RenderBlogArchiveTag.txt Mon May 12 18:58:41 2008
@@ -14,7 +14,7 @@
<noautolink>
*~~
%~~ TAGCLOUD{
-~~~ "%DBQUERY{\"TopicType=~'\bBlogEntry\b' AND State='published'\"
+~~~ "%DBQUERY{\"TopicType=~'\bBlogEntry\b' AND State='published' AND Date EARLIER_EQUAL '%SERVERTIME%'\"
~~~ format=\"$formfield(BlogTag)\" separator=\", \"
~~~ }%"
~~~ buckets="40"
- RenderCategories.txt
--- RenderCategories.txt-orig Mon May 12 18:58:07 2008
+++ RenderCategories.txt Mon May 12 18:58:42 2008
@@ -9,7 +9,7 @@
---++ Implementation
%STARTINCLUDE%
*~~
-%~~ DBSTATS{"TopicType=~'\bBlogEntry\b' AND State='published'"
+%~~ DBSTATS{"TopicType=~'\bBlogEntry\b' AND State='published' AND Date EARLIER_EQUAL '%SERVERTIME%'"
~~~ field="SubjectCategory"
~~~ header="
~~~ <div class=\"blogSideBarSection blogSideBarCategories\">
- RenderDocNavigation.txt
--- RenderDocNavigation.txt-orig Mon May 12 18:58:18 2008
+++ RenderDocNavigation.txt Mon May 12 18:58:42 2008
@@ -84,7 +84,7 @@
<div class="alt">
%~~ DBCALL{"%TOPIC%"
~~~ NAME="BlogEntry0"
-~~~ WHERE="TopicType=~'\bBlogEntry\b' AND State='published'"
+~~~ WHERE="TopicType=~'\bBlogEntry\b' AND State='published' AND Date EARLIER_EQUAL '%SERVERTIME%'"
~~~ }%
</div>
- RenderBlogEntry.txt
--- RenderBlogEntry.txt-orig 2008-09-16 18:12:35.000000000 +0800
+++ RenderBlogEntry.txt 2008-09-16 18:11:35.000000000 +0800
@@ -19,7 +19,8 @@
~~~
%~~ DBCALL{"RenderDocNavigation"
~~~ NAME="%NAME%"
-~~~ WHERE="TopicType=~'\bBlogEntry\b' AND State='published'
+~~~ WHERE="TopicType=~'\bBlogEntry\b' AND State='published' AND Date EARLIER_THAN '%SERVERTIME%'
~~~ AND SubjectCategory=~'\b%URLPARAM{"cat" default=".*"}%\b'"
~~~ REVERSE="on"
~~~ PARAMS="%IFDEFINED{"%URLPARAM{"cat"}%" then="cat=$test"}%"
- RenderBlogEntry.txt
--- RenderBlogEntry.txt-orig Mon May 12 18:58:26 2008
+++ RenderBlogEntry.txt Mon May 12 18:58:38 2008
@@ -33,7 +33,7 @@
~~~ }%"
~~~ }%
~~~
-%~~ DBQUERY{"State='unpublished'" topic="%NAME%"
+%~~ DBQUERY{"State='unpublished' OR Date LATER_THAN '%SERVERTIME%'" topic="%NAME%"
~~~ format="%DBCALL{\"BlogHelpText\"
~~~ section=\"Unpublished\"
~~~ NAME=\"posting\"}%"
|
|
|
Copyright © 1999-2008 by the contributing authors. All material on this collaboration platform is the property of the contributing authors. Ideas, requests, problems regarding Moya's Blog? Send feedback.
|
|