标簽/Tag為[Perl]的文章 [ 1/3 ]

Perl eval 和 $SIG{__DIE__} ,

一般來說, Pel 中的 eval 可以捕獲異常。 至少我是這樣用的: 用來嘗試運行一些操作,要是出錯了也不會退出。 比如我經常用 Image::Info 來判斷一個圖像文件是否真的是圖像,但是服務器上是否有 Image::Info是個問題。 簡單概念代碼如下:

code eval("use Image::Info qw(image_info);");
if ([email protected] eq "")
{
my $info = image_info("$tmpfilename");
if ($info->{error} eq "Unrecognized file format"){
$esB::base->error("該文件不是合法的圖片文件。");
}
}

由于 eval 的存在, 如果系統沒有 Image::Info ,那麼簡單的跳過判斷,并不影響程序的繼續執行。。

直到有一天, 我決定用 $SIG{__DIE__} 來自定義程序的的出錯信息。 一樣,概念代碼如下

code $SIG{__DIE__} = \&esb_die;
sub esb_die {
my $error = shift;
$error =~ s!$ENV{'DOCUMENT_ROOT'}!/{you_root_dir}/!i;
my ($msg, $path) = split " at ",$error;
print "Content-type: text/html\n\n";
print qq~
<html>
<head><title>Easun CGI Error</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
</head>
<body >
<font size='6' color='#333366'>Easun CGI Error</font>
<hr size='1' color='#000000' noshade>
<font size='3' color='#00000'>
很抱歉,程式因為以下錯誤而異常退出:
<br><br><b>$msg</b><br><br>錯誤大概發生在: <font color='#000099'>$path</font><br><br>
<font size='3' color='#990000'><b>請注意,為了保證您的安全,您的程序的真實路徑已經被程式自動過濾。</b></font>
</font>
</body></html> ~;
exit();
}

該操作也達到預期目的。

但是,當這兩者同時運行時,$SIG{__DIE__} 居然捕獲到了 eval 内的 [email protected] 。當系統沒有找到Image::Info 時候,程序不再默默跳過繼續執行。而是直接跳出到自定義錯誤頁面。
信息如下

很抱歉,程式因為以下錯誤而異常退出: Can't locate Image/Info.pm in @INC (you may need to install the Image::Info module) (@INC contains: ./config ./ShareLib ./ D:/usr/site/lib D:/usr/lib .) 錯誤大概發生在: (eval 10) line 1.

如何協調這兩者,是個問題。。。

記錄下來,作為備忘。

--EOF--

Warning: Default SSL_verify_mode deprecated 的解決辦法 ,

由于 Vultr VPS 默認是禁止程序通過 sendmail 發郵件的。另外 sendmail 發的郵件通常是被一些郵箱當作 spam 處理的。

所以, 我的 MT 是通過設定 stmp 服務器和用戶名、密碼認證登陸到 mail.qq.com 發送郵件。 簡單配置如下:

config # in mt-config.cgi
EmailAddressMain [email protected]
MailTransfer smtp
SMTPServer smtp.qq.com
SMTPUser UserName
SMTPPassword MyPassword
SMTPAuth ssl

這個配置可以正常工作。。。

[MT Plugin]全新改寫的 Markdown 解析插件 ,

一直在用 Markdown 寫Blog。
總覺得貌似解析效率有點不高。何況引入 代碼高亮 後,處理代碼顯示是個問題。

檢查了 MT 自帶的 Markdown 解析插件 ( plugins/Markdown/Markdown.pl ) , 原來是 John Gruber 2004 寫的第一版。

My God , so oooold。。。

John Gruber 這個原代碼寫的很經典, 但是究竟很老了。。

[JS随筆]網站評論、顯示界面細微調整和雜談 ,,

随筆寫下一些東西,作為 SiteLog 和備忘。

都是一些評論、顯示界面的調整,一個意圖:用戶體驗。 說的不好聽的就是"路楊的強迫症又犯了",反正是折騰無極限。。

這兩個月, 整個 Blog 的 js 估計被我修改過不下10次,有些是純粹為了閉包,有些是為了美觀和清晰流程。。。

簡單記下曾經的修改吧。

先說前端:

  1. ajax提交優化。 所有流程徹底閉包為一個函數,和 json 顯示本地評論互動,增加了提交成功後如果通過審查的話,動态加載新評論及動畫,并同時重置評論提交表單。
  2. 多說評論界面優化。 綁定了原來系統的顯示/隐藏評論、 顯示/隐藏評論框的函數,讓原來界面的操作同時操作兩個系統的界面。 在 SOTHINK提示下,雖然依然設置多說評論框為默認,但是登錄本地系統(包括QQ等本地系統支持的社交帳号)的朋友則顯示"本地評論系統評論框"。 代碼片段為:

    codevar check_mt_user = function(u) {
    if(typeof duoshuoQuery.is_ds_hide =='undefined') {
    if (!u) u = w.mtGetUser();
    if (u && u.is_authenticated) { duoshuoQuery.is_ds_hide=true;}
    else duoshuoQuery.is_ds_hide=false;
    }
    };
    
  3. 本地json評論界面優化。 徹底完成本地評論js的閉包。進一步和多說評論界面糅合, 增加了刷新重載 兩個操作界面,前者從本地文本靜态json cache中重新獲取本地評論,後者讀取 MySQL 庫實時獲取本地評論。

  4. 延遲加載圖片重寫。 也完成了一次JS閉包。 美化了延遲加載圖片時候占位的動畫,因為目前本站僅在評論者頭像上使用延遲加載圖片技術,也許大家并不能徹底體驗到界面的加載過程(因為加載的太快了)。。。

上面的所有修改,均可以查看本站現有 JS 來獲得代碼。 本站的 JS 并無加密 :P

再說後台:

  1. 徹底解決了QQ頭像、Gravatar 頭像顯示問題。 并緩存Gravatar 頭像到本地。 不同原來的做法。這次寫 插件,直接 hook 了 MT::Author::userpic_url 。 比較極端的做法。 代碼如下:

    codeour($old);
    {
    no warnings 'redefine';
    no strict 'refs';
    require MT::Author;
    If ($old = MT::Author->can('userpic_url')) {
    *MT::Author::userpic_url = sub{
    my ($author) = @_;
    if ( ($author->auth_type =~ m/^QQ/ ) && $author->hint && ($author->hint=~ m!^https?://!) ) { return $author->hint. '#QQ' ;}
    my ($oldurl) = $old->(@_);
    return $oldurl if ($oldurl);
    my $email = $author->email;
    return &_hdlr_gravatar_url_mail($email);
    };
    }
    }
    
  2. 更換了後台插入圖片後的顯示,适應 HTML5。 這個沒有寫插件,直接Hacklib/MT/Asset/Image.pm 中的 can_html 。 更加的簡單粗暴。 代碼片段如下:

    code$text = sprintf(
    '<figure class="post-image"><img title="%s" src="%s" %s %s /></figure>',
    MT::Util::encode_html( $asset->label ),
    MT::Util::encode_html( $asset->url ),
    undef,undef,
    );
    

要查看詳細的修改文件,可以移步到我的 GitHub

其他:

話說,多說 服務器維護了。 貌似以為會好一點,結果似乎結果一樣? 另外,多說評論加載不出來時候,下面的加載動畫一直顯示的時候, 這個時候刷新就OK了,覺很奇怪, 查看了一下 log。 結果,100% 的在出現這個狀态的時候,浏覽器報錯:

17:24:55.691 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://easun.duoshuo.com/api/threads/listPosts.json?thread_key=301&author_key=1&url=http%3A%2F%2F%2Fblog%2Farchives%2Fgodaddy_cpanel_perl_dbdmysql.html&title=Godaddy%20cPanel%20%E4%B8%BB%E6%9C%BA%E5%92%8C%20Perl%E6%A8%A1%E5%9D%97%20DBD%3Amysql&require=site%2Cvisitor%2Cnonce%2Clang%2Cunread%2Clog%2CextraCss&site_ims=1442293934&lang_ims=1442293934&referer=http%3A%2F%2F%2Fblog%2F&v=15.4.27. (Reason: CORS header 'Access-Control-Allow-Origin' missing).1

幹啥子嘛~~
明顯的服務器響應問題。。。
判斷跨域的服務端腳本的得到沒有執行。。
其實listPosts.json 返回數據了,可惜被浏覽器拒絕了。 難怪不顯示。。。。。。
話說,抛開 服務器 判斷跨域的服務端腳本的問題。 listPosts.json 難道一定要用 JSON 模式? 又不是 POST, GET 而已,換成 JSONP 模式不就萬事大吉了,而且也能節省服務器的判斷跨域,輸出 Access-Control-Allow-Origin header。。。。。。

另外,服務器維護了, 貌似腳本的版本還是 2015-04-27 。。。。

--EOF--

Godaddy cPanel 主機和 Perl模塊 DBD:mysql ,

純粹是手閑惹的禍。

Godaddy cPanel 主機已經用了幾個月了,越發覺得慢了。。 又看見别人的 MT 貌似都很快? 于是決定: Reset cPanel hosting account to its origina 。 也就是删除所有文件重新建立一次。。。

于是乎,備份, 重置。。 重設管理員賬号,MySQL賬号,重新綁定域名。。
嗯,煥然一新,cPanel 的地址變了, IP 地址也變了。 空空如也的空間貌似感覺快了????

恢複 MySQL 數據庫,恢複 Movable Type 文件。。。準備進 Movable Type 後台。。等等。。。居然出錯了:

Your server does not have DBD::mysql installed..

怎麼可能? Linux 服務器沒有安裝 DBD::mysql 模塊? 這個不是标配嘛? 上次安裝一點問題都沒有的。 看來這次的主機真夠*幹淨*的。。
算了,自己裝吧, 進 cPanel 安裝。 繼續運行,依然報錯。查看了一下 @INC,呃,不包含自己安裝的 Perl 路徑 。查看幫助:

Using Your Perl Module(s)

您的 Perl 腳本需要知道如何查找您的路徑中的模塊。 可通過将以下兩選項之一添加至腳本頂部來完成此操作:

#!/usr/bin/perl use cPanelUserConfig;

或者

#!/usr/bin/perlml

My GOD,讓我一個個修改文件嗎? 算了,還是換個思路,修改 MT.pm,寫入@INC,一勞永逸 。

打開 lib/MT.pm, 增加

codesub set_cpanel_lib
{
my $mt = shift;
my $g_path = '/MYPATH/TO/SITE/';
my @mylib = (
$g_path.'perl5/lib/perl5',
$g_path.'perl5/lib/perl5/x86_64-linux-thread-multi',
$g_path.'perl/usr/local/lib64/perl5',
$g_path.'perl/usr/local/share/perl5',
$g_path.'perl/usr/lib64/perl5/vendor_perl',
$g_path.'perl/usr/share/perl5/vendor_perl',
$g_path.'perl/usr/lib64/perl5',
$g_path.'perl/usr/share/perl5',
);
push @INC, @mylib;
}

找到 sub init_paths,在其中增加 $mt->set_cpanel_lib();。 OK,運行之,準備進了後台, MT 一切正常。。。。

既然在 Cpanel 後台,綁定子域名,設定 Cron 作業 等等, 慢着,又不對了。 在面闆上明顯的寫着: 資源等級 1 。。

我的神捏,記得很清楚上次我化15$升級到了 資源等級 2 呢。。。。

隻能找客服了,可惜居然沒有 Email 客服, 在線 Chat 又一直顯示Offline, 越洋電話? 算了吧。。 直接發 Email 到 [email protected] ,很快自動回複。大意:我們不在接受 Email 咨詢。。

GoDaddy Customer, it looks like you emailed our team with a question or comment. We no longer provide support via email. Please try one of these two support options.

• Visit our Help Center for guides, articles and more. • Call our support team around the clock at (480) 505-8877

隻好改天看看是否可以 在線 Chat 了。。

流水賬,寫下一次不是很愉快的重置賬号過程。

--EOF--

[Perl]緩存 Gravatar 頭像到本地服務器 ,

This is a sitelog of .

Logo_Gravatar.png

一直在用 多說Gravatar 頭像鏡像服務器, 最近不知道怎麼的。 這個服務器經常返回 503 ,于是乎,本地評論的朋友頭像又不顯示了。

雖然最近貌似檢測到 cn.gravatar.com 顯示正常。 但是為了安全,還是選擇最後一招吧: 緩存頭像到本地服務器。。。。。

Perl 代碼貌似很簡單, 機制: 緩存7天,7天後删除重新下載。。 當然,因為CDN 的存在,也許你換了頭像,14天後本站才會更新:(7天本地緩存。7天CDN緩存)。

記錄下修改的 Perl 代碼片段:

[MT Plugin]QQ互聯插件-用QQ賬号登陸您的MT ,

QQ互聯插件-用QQ賬号登陸您的MT

( QQ Connect Commenters Plugin for Movable Type )

Authors: 路楊 (EasunLee) Copyright 2015 . License: Artistic, licensed under the same terms as Perl itself

qq_login.png

概述

MT QQ互聯插件 (QQ Connect Commenters plugin for Movable Type) 允許用戶用 QQ 号碼登陸你的 Movable Type 博客。
本插件嚴格使用 QQ互聯 的 Open API 編寫。安全可靠。 它可以給您的博客帶來良好的用戶體驗。 一旦使用這個插件,評論者可以自動獲取QQ昵稱、頭像等資源。

請注意: QQ互聯 (QQ Connect)官方使用的機制是審核制度,并不是使用這個插件就直接可以使用QQ登陸。 您需要去 QQ互聯 (QQ Connect) 官方注冊您使用本插件的網站并獲取屬于自己的 APPID 并提交審核。審核過程可能需要1周或者更長時間。

關于 QQ互聯 (QQ Connect) 的注冊,請 百度 之。或者讀取官方資料: http://wiki.connect.qq.com/

運行環境

  • Movable Type 4.2 或者更高版本
  • JSON::XS 2.0 或者更高版本
  • jQuery (非必需,建議)

Movable Type 的 extlib 中已經包含了必需的 JSON:XS 版本。

安裝

  1. 下載并解壓本插件。

  2. 複制(上傳) QQCommenters/mt-static 下的内容到 /path/to/mt/mt-static/

  3. 複制(上傳) QQCommenters/plugins 下的内容到 /path/to/mt/plugins/

  4. 登陸您的 Movable Type 後台 -> Plugin Settings 去設置您的 QQ APP IDAPP KEY

  5. 在 後台->Registration Settings -> Authentication Methods 中選啟用 QQ 。
  6. 在前台選擇登陸,您會看見 QQ 登陸 的選項已經有了。 如果您的網站通過審核,可以之直接使用了。

關于 QQ互聯 功能的申請

關于 QQ互聯 功能的申請,簡單減少一下流程:

  1. 用您的QQ賬号登陸 http://connect.qq.com/intro/login 并申請網站接入。
  2. 詳細描述您要接入的網站信息。請注意 回調地址 一定要填寫為*您的Movable Type 後台 CommentScript 的完整地址,并且帶上 http:// 或者 https:// 的前綴*。比如 (http://your_domain/cgi-bin/mt/mt-comments.cgi)。
    可以設置多個回調地址,用 分号 分開即可。 QQ互聯 (QQ Connect) 的官方APP幫助文檔 寫的像漿糊一樣,而且處處錯誤。這個地方官方文檔寫就是有問題。
  3. 騰訊 的QQ 登陸審核一個要求,就是登陸頁面要設置 醒目的QQ登錄入口。而我們的前端如果不做修改的話,會很簡潔,這個就需要自己在前台放端代碼。 簡單的分享一下我的一些前端 JS 代碼:

[随筆]Movable Type 的數據庫瓶頸與多說評論反向同步 ,

随筆 而已,能力所限,隻是個人看法。

就向大家看見的這樣,由于多說服務器的原因,路楊正在逐步把 多說的評論寫回本地 Movable Type 的數據庫。

過程不算難。通過 API 獲得 JSON 數據,分析後寫入MT評論數據庫罷了。 為了區分和拓展,給 MT 數據庫的評論表增加了3行,分别記錄 遠程服務器名(remote_service),遠程服務器ID (remote_id) 和 UA ( agent)。

mt_db_table_comment.png

開始直接 Perl 腳本。核心代碼為

[JQ+Perl]JQ AJAX跨域請求HTML/JS頁面内容總結 ,

路楊有2個域名, easunlee.org 統統指向同一個地址。
而小站的 blog 主頁 的分頁獲取是通過 jQuery 的AJAX完成的。 見抓圖。
index_15_6_5.png

核心代碼為自寫。如下:

codefunction ajax_get (url, mode,callback)
{
var sdiv = $("#search-results");
if (!sdiv) return true;
$.ajax({
url:url,
data: {'format':'js'},
success: function(data){
if ( data.error == null ){
if (mode == 'append') sdiv.append(data.result.content);
else sdiv.html(data.result.content);
if (data.result.next_url) { next_url = data.result.next_url; }
else { $('#show-more').hide(); }
return false;
}else { location.href = url;return true;}
},
error:function(req, status, obj){ location.href = url; return true;},
beforeSend: function(xh){ /*do sth before send*/ },
complete: function(xh){ /*do sth for complete*/ } ,
});
}

其中url 為本站後台地址,大緻為:
/{path-to-mt}/mt-search.cgi?IncludeBlogs=2&archive_type=Index&template_id={main_index_tmp_id}&page={num}

加上format=js參數則為JSON結構, 返回的數據大緻為

code{"error":null,"result":{"next_url":"下一頁的地址","content":"本頁展示數據"}}

如果出錯,則在本頁面打開沒有 format=js 參數的完整 HTML 版本。

但是,這個腳本還是有問題的。

如果以域名 /blog/ 訪問,則毫無問題, 一旦用 http://easunlee.org/blog/ 則基本上不能完成。 不用說後期路楊打算給後台設置不同的子域名。
原因很簡單: ajax 不能跨域。(當然某些BT 的 ie 版本正常跨域,汗。)

有沒有辦法解決這個問題呢?

研究了一番,發現使用 jQuery 的 JSONP 方式即可完成。
即讓後台返回的數據為

codemycallback( {"error":null,"result":{"next_url":"下一頁的地址","content":"本頁展示數據"}} );

當然需要修改核心代碼,讓 $.ajax 工作在 JSONP 下:

codefunction ajax_get (url, mode,callback)
{
var sdiv = $("#search-results");
if (!sdiv) return true;
$.ajax({
url:url,
data: {'format':'js'},
dataType: "jsonp", /*定義dataType*/
jsonpCallback:"mycallback", /*定義jsop 回調函數*/
success: function(data){
if ( data.error == null ){
if (mode == 'append') sdiv.append(data.result.content);
else sdiv.html(data.result.content);
if (data.result.next_url) { next_url = data.result.next_url; }
else { $('#show-more').hide(); }
return false;
}else { location.href = url;return true;}
},
error:function(req, status, obj){ location.href = url; return true;},
beforeSend: function(xh){ /*do sth before send*/ },
complete: function(xh){ /*do sth for complete*/ } ,
});
}

不用擔心返回的 JSONP 數據在 success: function(data) 中無法解析,隻要定義了
dataType: "jsonp",jsonpCallback:"mycallback",success: function(data)中的 data 自動為 JSONP 中包含的 JSON數據。 而不是 JSONP 數據串。
現在的問題,是後台的 mt-search.cgi 不具備輸出 JSONP 格式的能力, format=js 隻能輸出 JSON 格式,這個時候如果不想修改 mt 代碼。則隻能通過自己寫的腳本(Perl)來中轉了。

[Perl]本站使用的文本緩存Tag搜索的Perl腳本 ,

Movable Type 資源瓶頸基本上都是mt-search.cgi

不管是站内自定義搜索,還是按照Tags進行查詢,都調用的是這個腳本。

本站靈感來之 AnySQL 的文本緩存。 但是不同于 AnySQL 的一直是獨立的cgi文件進行緩存,配合.htaccess 和默認搜索慢闆完成

這次更新後台,這個獨立cgi腳本也做了小的邏輯修改。

特共享之,供有動手精神的同好自我完善。

代碼如下:

[Perl]一段cookie操作的封裝代碼

順手寫下,防止忘掉。
草稿,估計定稿不會是這個 :D
原因: 網站下同時存在多個相同的程序的副本,但是并不想 cookie 相互影響;
代碼如下

###---- cookie By EasunLee 2012-03-11--------###
sub get_cookie_path
{
if ($esB::INFO->{'COOKIE_USED'} eq 1) { $esB::INFO->{'cookiepath'} ='';}
else {
my $boardurltemp = $esB::INFO->{'BBS_URL'};
$boardurltemp =~ s/http\:\/\/(\S+?)\/(.*)/\/$2/;
$esB::INFO->{'cookiepath'} = $boardurltemp;
$esB::INFO->{'cookiepath'} =~ s/\/$//;
}
$esB::INFO->{'cookiepath'} ;
}
# 設定cookie
sub set_cookie_str
{
my ($name,$value,$expires) [email protected]_;
&get_cookie_path() unless ( defined ( $esB::INFO->{'cookiepath'} ) ) ;
my $prefix = $esB::INFO->{'cookie_prefix'} ;
$esB::CGI->cookie(-name => $prefix.$name, -value => $value, -path => $esB::INFO->{'cookiepath'}.'/', -expires => $expires);
}
# 讀取cookie
sub get_cookie_str
{
my $name =shift;
&get_cookie_path() unless ( defined ( $esB::INFO->{'cookiepath'} ) ) ;
my $prefix = $esB::INFO->{'cookie_prefix'} ;
$esB::CGI->cookie (-name => $prefix.$name) ;#, -path => $esB::INFO->{'cookiepath'}.'/');
}
#### End cookie subs

[Perl]關于 NDBM_File 的奇怪事

準備把本站的 Tag索引 寫入 DBM ,折騰了一段Perl 小程序,使用了 NDBM_File 模塊, 結果稀奇古怪。

代碼如下;

#!/usr/bin/perl -w
use strict;
use CGI;
my $tagdir ='/blog/tag';
my $q = CGI->new;
print $q->header(-charset => 'utf-8');
use NDBM_File;
use Fcntl;
&do_tag_db();
sub do_tag_db
{
my $all_tag_text = $tagdir .'/tag.txt';
return 1 unless (-s $all_tag_text);
my $all_tag_db = $tagdir .'/tag.db';
return 1 if (-s $all_tag_db);
if (open my $fh, $all_tag_text) {
tie (my %DB, 'NDBM_File', $all_tag_db,O_RDWR|O_TRUNC|O_CREAT, 0666);
my @list =split ',', <$fh>;
close $fh;
foreach my $tmp (@list) { $DB{$tmp} = &getCacheFileName($tmp) ; }
untie %DB;
}
return 0;
}
sub getCacheFileName {
my($str) = @_;
$str =~ s!([^a-zA-Z0-9_.~-])!lc sprintf "%02x", ord($1)!eg;
$str;
}
1;
程序正常運行。但是在目标目錄并沒有發現所需要的 tag.db 文件, 而是一對文件,名字為 tag.db.dir 和 tag.db.pag

把上述文件的
use NDBM_File;
...
tie (my %DB, 'NDBM_File', $all_tag_db,O_RDWR|O_TRUNC|O_CREAT, 0666);
換成
use DB_File;
...
tie (my %DB, 'DB_File', $all_tag_db,O_RDWR|O_TRUNC|O_CREAT, 0666);
即改用 DB_File, 則一切正常。 tag.db 正常生成。

是什麼原因呢?? 難道 NDBM_File 模塊還有啥意外的用法? 看來 Perl 真的荒廢很久了。。。

--EOF--

Beijing Perl Workshop 2011

PerlChina 主辦,2011 年 7 月 2 号星期六舉行的 Beijing Perl Workshop 是一個免費的開源技術交流會,大會全天,向所有對開源技術感興趣的朋友開放。

大會的主題為 Perl, Database, Javascript, , 分布式,集群,Lua等開源軟件。演講會在兩個廳同時進行,其中一個廳以 Perl 内容為主,另一個廳是所有其他的主題。

報名參加大會的朋友請先注冊新用戶(注冊過2008 或 2009大會的朋友無需再注冊新用戶,直接登錄後登記參加本次大會即可),演講的朋友登錄後即可提交演講主題和介紹。

--EOF--

北京 Perl Workshop 2008 網站開張 - 接受大會注冊,演講報名

logo_2008pw.png
網站開張了, 地址是 http://conference.perlchina.org/bjpw2008/

PerlChinaPostgresql China 合辦,2008 年 11 月 8 号舉行的 Beijing Perl Workshop 是一個免費的 Perl 交流會,向所有對 Perl 感興趣的朋友開放。大會将包括衆多 Perl 和 Postgresql 的演講,我們也邀請到了國外的 Perl 和 Postgresql 高手參加做演講。報名參加大會的朋友請在本站注冊用戶,有意演講的朋友請先注冊,登錄後提交你的演講主題和簡介。 

下面是 Qiang 的宣傳 :D

你可以注冊大會 和 報名演講。注冊後如果有事不能參加别忘記在本站取消大會注 冊。因為場地的限制(150左右),如果你決定參加,請及時注冊。
這次演講的宗旨是盡可能給更多人演講的機會,共享 Perl 的知識。 有意報名演講的朋友請注冊後在本站提交演講的主題和簡介。如果你的演講被接受,你會收到确認的 email. 我們會在10月中下旬把演講定下來。

目前已經收到 7 個演講,請大家再接再厲!
另外,這次 Perl 6 項目主管和 RT, Jifty 的創始人 Jesse Vincent 也會來參加 大會。


--EOF--

[Sitelog]Perl Forum 正式遷移到 MT 平台 ,,

Test Forum 測試了幾天,解決了用戶和帖子轉移問題,今天,正式把 Perl Forum 遷移 到了 MT 4.21 pro 平台,也算整個 Site 統一進了數據庫時代:)

利用 Community Pack 1.6 搭建的  MT Forum 說起來實際上并不是完整的 Forum ,和真正的 Forum 對比起來,貌似少了很多功能,但是全靜态化對小規模,小用戶群的準 Forum 還是很有吸引力的。究竟它有完整的 注冊用戶發/回帖功能,滿足自己的需求了:)

所有的原 Perl Forum (Base on LB_ES Lite) 用戶全部轉到 MT 的數據庫,大家可以用 舊 ID,密碼 登陸本站,這個ID不但可以在新建立的 Perl Forum 中發表帖子和回複評論,而且也可以在 包括本 Blog 在内的所有的文章/帖子發表評論

當然,轉移也不是全部轉移過來了。由于靜态頁面,貌似加密權限之類帖子無法體現,所以 "[ 測試私密區 ]"依然保留在舊的文本Perl BBS 程序之上,地址不變,原來的有權限的朋友也可以正常訪問和發回帖子:)

收尾問題: 對原Perl Forum 裡面的 帖子均做了重定向,最大可能的減少了因為地址改變帶來的麻煩:) 新 Perl Forum 的地址為 /perl/forum ,歡迎大家訪問。

--EOF--

Perl Forum User -> MT User, 密碼問題原來很簡單 ,

This is a SiteLog of Easun's WebBlog。

裝了自帶 Community Pack 1.6 的 Movable Type 4.21 Pro,也用 Community Pack 功能建立了測試的 MT Forum,初衷是想用這個MT Forum 取代 基于 LB5000 ES Lite 建立的本站半廢棄狀态的 Perl Forum
簡單的作了測試,帖子的轉移很簡單,用Perl寫個小玩意,導出成 MT 系統能認識的文本就足夠了。而User的轉移貌似出現的密碼問題上了。
當初匆匆檢測功能,沒有細思量,總之, Perl Forum 采用的 MD5 加密密碼,而 MT User 的密碼則是采用随機數和原始密碼用 Unix crypt function 來加密的。貌似轉化起來很是有點問題。
好久沒有看原代碼了,今天晚上有點時間,看了看 MT 關于 Auth 的代碼。發現其實很簡單,在用戶輸入的時候多一重判斷就是

[PerlChina]11月8号 北京 Perl Workshop -- 征集演講 ,

Qiang 的 征集演講,這裡發一次:)

大家好,
Perlchina 正在準備北京 Perl Workshop,向所有對 Perl 感興趣的朋友免費開放, 大會定于11月8号(星期六)舉行,時間為 1 天,地點在黃莊地鐵站附近。 大會注冊會在一個星期後開放,屆時會在此向大家通知。
現在的工作是開始征集演講。提交演講的截至日期是 10月27号。
演講的時間有四種:20,40,60分鐘,第四種是 5 分鐘的閃電演講。閃電演講的介紹請看 http://xrl.us/oqs8c
大會演講沒有高手,低手之分,對于第一次演講的朋友,5 分鐘快速演講會是個鍛煉的好機會。 希望大家踴躍報名,積極參與,一起來 push, unshift, slice 演講到我們的 @talks 裡。
有意演講的朋友請在 10 月 27 号前把演講主題和演講簡介發到 [email protected]

這裡也提供一些演講的主題,供大家參考。

* 你的 Perl 成功故事
* 你有在别人意想不到的地方或領域使用 Perl 嗎?讓我們驚奇一下!
* 我是 xxx 語言程序員,但 Perl 讓我完成了 xxx 語言不可以實現的功能。
* 為什麼你喜歡模塊 X。
* 我用 Perl 實現了 yyy, 我從中學到了 ....
* 你的公司使用 perl 嗎? 講講 Perl 在公司裡的應用。
* 講講如何用 Perl 解決了某個問題。
* 結合某個領域: Perl 和 垃圾郵件, Perl 和 生物學, Perl 和中文, Perl 和測試 等等。

--EOF--

[随筆]小駱駝,地鐵,牛皮癬廣告和其它

貌似又是好久沒有寫Blog :) 今天随便寫寫最近的一些瑣事,也算随筆吧?

第一就是周末去了一趟 西單圖書大廈,驚奇的發現了有 小駱駝第四版(中文) 出售.貌似這本書一直是 缺貨缺貨再缺貨 , 呵呵,難得見到,激動之餘抓拍了一張照片,見下:
perl.png

小駱駝 是 Perl 入門的經典圖書,我這裡有它的第3版,關于它的介紹,似乎不用我多費口舌:) 隻是要說的是:書不多,有需要的要抓緊哦

第2說的就是另人郁悶的事情了,久不坐地鐵,居然在地鐵上也發現了牛皮癬--辦證廣告,苦笑ing,也順手抓拍了兩張(電話号碼作了模糊處理):
sw1.png
sw2.png

最近單位事情頗多,不多的上網時間也給了 起點中文網 ,Blog的事情也就放在一邊了。自Blog系統換用 MT4.1 後主頁的界面也再沒有統一,DreamHost 上登陸MT4.1後台也慢的厲害,恩。。。隻好等有空再滿滿整合了:)

--EOF--

Foorum v0.07, a Perl forum system by Fayland

什麼是 Foorum?這個是 Fayland 使用Perl語言寫的一個基于 Catalyst + DBIx::Class + Template 的論壇系統:)

國内基于 Perl 語言的論壇系統很少,除了原來曾經名氣沖天的 LeoBBS(LB),LB的框架和編程思想都太古老了,界面和代碼混在一起不說,編碼風格也一團糟,要改進需要動大手術,加上國内的主機服務商對 Perl 的支持和文本論壇的弊端以及混亂無序的code帶來的低下的性能,讓大家對 Perl 論壇望而卻步。說起來,對 LB 的2次開發或者吸收 LB 的優點來改進性能和界面 DIV+CSS 化的 Perl 論壇,前幾年似乎好象還有N個版本,但是堅持下來的很少,因為工作量實在太大了,這個包括我的 LB5000 ES Lite版本,現在依然停留在 2004.03.29。

另外的國内的原創的 Perl 論壇是 麻辣 CCB, 因為不怎麼喜歡這個的界面的風格,一直沒有怎麼測試過,但是很多編程的理念還是不錯的。

Fayland 原來的野文論壇使用的是 NiBoard,的一個基于 LB 和 CCB 二次開發的變種系統,覺得界面很清淡,但是依然基于文本,界面和代碼也沒有分開。

這次的 Fayland 寫的 Foorum,基于 Catalyst 框架,代碼和界面全部分開(使用 Template),存儲使用了 MySQL,告别了文本結構,精練嚴謹的代碼讓速度運行和性能也不在是問題了:)
界面延續了 NiBoard 的淡雅,非常不錯。

目前 Foorum 的版本是 0.07,是 Fayland 利用國慶假日推出的版本,大家可以在http://www.fayland.org/blog/labels/Foorum.html看到這個系統的界面抓圖。

如果有人有興趣,可以到 http://www.fayland.org/blog/2007/10/foorum-v007.html下載源代碼。

另外,如果有朋友對這個系統的開發有興趣,還可以聯系 Fayland :)

--EOF--

[路楊Perl随筆]為什麼你的Perl程序維護困難

提記:最近老有人抱怨自己的Perl程序越來越難維護,也在抱怨Perl的執行效率低下,特寫下自己的不成熟的體會,和同好者共勉之。

1。你的程序使用 use strictuse warnings 了嗎?
不得不承認,Perl語法的随意性雖然很靈活多變,但有時間給維護和效率都帶來了很大麻煩,如果碰見自己的糟糕的編程習慣和随意的語法,那麼太長的代碼就意味着一場噩夢,但是幸好我們有 use strictuse warnings . 有了這個,我們可以很快的找到變量的拼寫錯誤(類似“$xxx 隻使用了一次”的提醒),use strict 迫使你的語法變的嚴謹。當然如果你是維護别人的舊代碼,而原始作者又是習慣使用 全局變量(Global symbol ) 的家夥,那麼,加上 use strict 将讓你陷入更大的維護危機(除非你想全部重寫他的代碼)。加 use strictuse warnings 困難嗎? 不,你隻需要在 你的程序的開頭 '#!/usr/local/bin/perl' 後面加上下句就行:

use strict;
use warnings;

我的建議:
養成良好的編程習慣,盡管 Perl 語法允許你靈活和随意,新寫的程序一定要加上use strict 和 use warnings .這樣可以迫使你定義變量的範圍,免避以後出現的效率低下和變量污染(一般都是Global symbol惹的禍 )

1   2   3