[PHP] PlurkRssParser for plurk users

其實是自己太無聊想要為Hax4.in做一些小玩具,目前是Copy Plurk Widget的樣式來做出的頁面,而實際的展示可以在網誌旁邊的Widget列看到。其功能就是能夠整合多人的Plurk資訊並依時間先後排列,目前是整合了我們Hax4.in所有成員的資料。

附上在Github上的原始碼。

順便打個廣告吧,其實我們Hax4.in的網頁很早就寫好了,不過只是個雛型放出來而已,到時候會把我們寫過的一些玩具、視覺設計、案件資訊放出來,希望大家會喜歡:P

δ 2010/11/21 加入 feed.cache mechanism 並改變專案名稱為 PlurkRssParser

[PHP] Shark 改版

目前shark計畫正在做大規模的改版(加入了sharkCore Class及模組抽換),不過因為機器人的需求各式各樣,所以想要利用大家的能力來收集一些已經寫好的規則並整合至shark內。以我自己為例,我目前做了「對特定關鍵字的噗做一次性回覆」這個規則(可能的應用如「小籤籤的抽籤功能」「占卜功能」「食我機器人」…等),允許使用者自行定義關鍵字、Qualifier、還有回應、以及回應用的Qualifier,另外在03/06的時候我又做好了一個「在特定時間發噗」的規則(相關的應用如「定時亂喇賽來維持karma」「定時發自訂的消息」…等),可以一次定義多時段的發噗內容,例如說我可以在每天十二點問大家吃飯沒,同時每一小時會發出天氣預報。

同時也實作了三種方法來抓取「回應」的內容,你可以把回應的內容放在網路上以檔案的形式呈現,或是你也可以為你的網站設立一個API的接口,透過HTTP的方式去讀你網站的資料(例如你的網站是有關於美食的,你就可以提供一個接口給shark連結,即時提供一些存在於你網站內的美食資訊給使用者),另外一種就是讀取本機已寫好的檔案,而最後一種就是以變數的方式直接設定回應的內容。有一點要補充的就是目前回應的資料都是以JSON的格式來設定

如果你有意願幫忙加入一些有趣的機器人規則的話(像是來個人工智慧的機器人,或是定時發噗之類的),麻煩參考一下我在github的資料並參考我簡介頁面的信箱來信。

另外就是,因為我還在學習團隊合作的方法,所以可能在寫法或是想法上有一些較主觀的成份在,歡迎大家給我一些建議與意見,讓我也能和大家一起學習,感謝。

[PHP] optimization for shortening the API calls

最近為了降低API calls,所以在Shark內加入了一個Method可以讓使用者自行依自己的需要來延遲整個程式的執行:

http://gist.github.com/309735.js?file=gistfile1.php

參數是所需延遲的秒數,0就是不延遲。

雖然這裡沒有什麼技術上的難度,講白點就是丟給sleep()去跑而已,但是我想討論的是它所造成的影響。先看一下下面的統計圖:



2/14和2/15是平常的情況,所謂的平常就是用無窮迴圈去跑Bot,只算「登入」和「基本檢查」這幾個動作,而已,就會拉高整個呼叫API的情況,非常的跨張,這就是為什麼北極冰山快融化完的關係,因為大家只要寄個信給Plurk官方就可以突破原先50000次的限制,要怎麼用就怎麼用,非常爽快。

但是再看看2/18和2/19的時候,這是我讓Shark加入了延遲的動作,我記得是設3秒鐘,夠誇張吧,直接下降到23000的次數了,你連寫信去Plurk的動作都省下來了,還有27000次讓你做別的事情,這樣不是很開心嗎!? (大約下降了78%..),真是從小處著手,就有很大的改變呢…(忘了說,使用者很難感受到機器人回覆plurks的時間差,一樣很快)

所以麻煩大家不要一直用「while(true)」或是「for(;;)」這樣子的東西,要用的話至少也要加個中止條件或是延遲,不僅可以減少系統資源的開銷,還可以保護北極熊不會因此死光…

[PHP] Shark – 整合性 plurk bot

圖 from here

這是我最近一直在做的東西,也許是因為之前「JaceJu」的那堂課讓我對物件導向的模式有點嚮往,所以就試著用用看物件導向的概念在這次的專案下,先來介紹一下這個玩具吧:

一開始我是看到朋友們一直在討論plurk bot這個玩具,所以就想說來做個什麼(其實我就是一個很怪的人,我很多做出來的小玩具都是因為看到人家的討論串才開始做的,而這次也不例外XD),因此就想打造一個整合性的plurk bot,而不是只為了特定功能而實作的東西。我想可能也是受到Hax4理念的刺激,為了製作出讓人家覺得有趣又好玩的東西,所以我們必需把最麻煩的部分都實現並封裝起來,就算使用者不是一個程式設計師(我也不是XD),也能夠輕易的上手,這就是我的想法。

實作的部分,因為我是在PHP下做的,所以就沿用官方認可的php-plurk-api,用他們已經實作好的API去和官方做溝通,這真的是省事很多,這樣我就不用自己刻一個爛爛的介面來用了,也提昇了穩定度。因此整個Shark class是直接繼承它的類別,再設計新的骨架在其之上,一來我可以開心的使用API,連第三層的使用者也能輕易的使用(繼承真的是很神,更神的是所有在plur-api下的Method都是protected的,大家都可以開心用XD),所以這樣一來我沒有破壞到它原始的架構,反而再多建了一些我想做的東西讓大家玩,這樣真酷!

講這麼多,快點上我在Github上的Shark專案把相關的核心抓下來玩玩看吧,忘了說,我本意是想讓大家都可以輕易做像是「小籤籤」的plurk bot,可以自動回覆一些特定資訊,而一些設定的細節就麻煩去看我寫好的說明啦,如果對這個專案有什麼建議的話,麻煩直接回信到我的信箱並在主旨打「About: Shark」,我就會盡快回覆你的。

感謝你的觀看XD。

δ 目前Shark有改版的資料並徵求有志之士來寫好玩的規則,請看站內的另一篇文
δ 整個專案是相容於php_plurk_api 1.4,但是目前最新是1.4.2版,這點要注意一下。

[Hax4] Rainbow

測試頁面:在這、專案資訊:在這

這幾天因為心血來潮,想說來練習一下pure javascript,所以就都不用jQuery來做事情(雖然最後還是有用,不過我只用來做特效而已XD)。這個Idea其實是源於我以前做的一個很爛的liu-translator,它只能單方面做字根對字的轉換,所以就想說利用Ajax的概念來實作一個線上的IME,因此我就去找了之前Luke的網蝦米來研究他的UI介面。

研究了一下後就開始著手動工整個JS的架構,邊看深入淺出Ajax邊試著實作他說的一些思惟,像是要怎麼寫的很MVC,所以就開始學著把程式切成粗略的「資料」、「模組」、「樣式」三類,雖然之間還是有些耦合性,但是比較以前的我,這次的實作算是很成功的分離了。

之後又想到行易公司的練習嘸蝦米的打字程式一直沒有跨平台,只支援該死的M$,所以為何不幫他們設計一個Cross Platform的Web Application?反正只要解決Cross Browser的問題就可以了,雖然我在Cross Browser這條路上只是一個剛入門的新手,但總比Cross Platform好多了吧…因此就把分離完的架構再修改,改成有點像是遊戲的小程式。

原本已經接近完工的狀態了,但是Bu因為是「大新倉頡」的愛好者,所以就給個建議要我加入的其字根對應表,去擴充可支援的輸入法,就又經過了一場編碼和正規表達式的戰爭後,終於把切換輸入法的功能也加上了,這完全要歸因於先前的MVC架構,讓我能夠在很短的時間完成這個動作。

最後一個也是最重要的啦,為了提高遊戲性,我設計了一段可以自動去抓使用者給定URL的頁面回來,把該頁面上所有符合UTF-8繁體中文的字全部抓下來當成題目,這又比起以前行易公司設計的那些題目多了一些趣味。多了這個設計,你還可以邊看Yahoo!奇摩新聞邊練打字咧!!

附上程式截圖:




§2010/05/13 補上程式的Demo連結,原來我都沒有放出來= = ,舊的在這,新的在這
§2011/02/05 更新連結、圖片、介紹。

[Mac] How to enable GD lib ?

意外找到這個開發者寫的pkg檔,真的是一裝就Happy Ending了,省下不少時間,

以下是該pkg檔的特色,記下來給以後有需要的人!!

連結

  • the MySQL and PostgreSQL databases
  • the cURL library for various communications protocols
  • the GD image creation library (with PNG, JPEG, PostScript Type 1 and TrueType font options).
  • the expat XML parser and WDDX support
  • XSLT transformations
  • LDAP access
  • the IMAP client library
  • mcrypt encryption functions
  • GNU gettext

[PHP] Wxetch bot 三連發

昨天意外的看到一個討論串 , 就在那邊寫了一個新的 Wxetch Tricker 寫到三點…原因是因為有些地方一直卡住才卡這麼晚 , 囧…

A – Wxetch Tricker

是能夠用中花電信的 proxy server 來做到 cheating 的作用


<?php
if(isset($_POST['url'])){

$cookie = 'cookie.txt';
$url = trim($_POST['url']);
$pattern = "/www.wretch.cc/blog/(.*)/i";

if((preg_match($pattern,$url,$last))==TRUE){
$url = $last[1];
}
for($i=0;$i<25;$i++){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"www.wretch.cc/blog/$url");
curl_setopt($ch,CURLOPT_PROXY,"proxy.hinet.net");
curl_setopt($ch,CURLOPT_PROXYPORT,80);
curl_setopt($ch,CURLOPT_TIMEOUT,5);
curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie);
curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_exec($ch);
curl_close($ch);
}
}else{
echo '
<html>
<head>
<title>Wxetch Tricker</title>
</head>
<body>
<form method="post" action="tricker.php">
請輸入Wxetch帳號:<input type="text" name="url" value="">
<input type="submit" name="click" value="click">
....default: 50 times
</form>

Author: EragonJ

</body>
</html>
';
}
?>

因為這個要是中花電信的用戶才能使用他們的proxy server , 不過台灣還蠻多用戶的ISP都是他 , 所以應該都可以做到就是了!

我一直在想 , proxy server 不過就是個中繼站嗎? 那這樣子的話是怎麼可能做到cheating的功效 , 如果我推論沒錯的話 proxy.hinet.net:80 這是主要的server , 其下還有很多子server可以供主server 發佈命令去做中繼的動作 , 所以就可以做到cheating的功用 ,因為是由各個子proxy server去和Wxetch做接觸的!!

就算是小量cheating的動作就是了..

B – Wxetch Observer

有兩個版本 , 一個是Full size version
而另一個是Short cut version

這兩個都是可以直接去抓取相簿圖片的小程式 , 但是該死的IE6用右鍵會抓不到圖 , 但FF就沒有這個問題 , 可以來用用看FF3呀XD~ 真的是現在都用這個了~ 超好用 , 又有很多add-ons

大概就是這三個啦 , 下次還有什麼有趣的東西再放出來~

[PHP] PHPmailer

今天第一次用PHPmailer,為了學著用線上寄信的功能。

而這在經過多次設定後,發現了很多問題= =” ,因為不太會玩嘛~

由於本機沒有裝SMTP Server ,所以就借用Google的SMTP Server來實現。

1.剛開始要先include class.phpmailer.php (自行去官網下載最新版的)

2.還要再inlcude class.smtp.php(都在同一個壓縮檔內)

3.setting


$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true; //啟用SMTP認証
$mail->SMTPSecure = "ssl"; //以SSL加密連線
$mail->Host = "smtp.gmail.com"; // Gmail的SMTP Server address
$mail->Port = 465; // Gmail的SMTP port

$mail->Username = "xxxx@gmail.com"; // GMAIL 帳號
$mail->Password = "xxxxxx"; // GMAIL 密碼

$mail->From = "xxxx"; //從誰寄來
$mail->FromName = "First Last"; //從誰寄來(名字)
$mail->Body = "Hey buddy, heres an email!"; //信件內容
$mail->Subject = "PHPMailer Test Subject via gmail"; //信件主旨

$mail->WordWrap = 50; // 設定斷字的長度

$mail->AddAddress("recept@mail.com", "John Doe"); //設定收件人的Email和Name

$mail->setLanguage('zh'); //我自己翻譯的中文錯誤訊息(可不加)

if(!$mail->Send()) { //寄信成功與否
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}

基本上這樣設定就沒有問題了,下次再打我研究出來的結果。

可以留言討論呀:D~