Pages

2012-03-16

Notepad++插入日期文字

說也好笑,連Windows內建的陽春Notepad筆記本編輯器,都有內建F5插入日期文字,身為有UltraEdit替代品的Notepad++文書編輯器(以下簡稱NPP)竟沒有!! 搜尋了一下,發現使Notepad++用的外掛「Python Script」方式加上Hot Key捷徑,還能做到日期字串的客製化。而且Python還能做到很多功能,一想到這些無限的可能,就原諒了Notepad++沒內建日期字串的缺點了。

1. 在工具Menu上的「Plugins/Plugin Manager/Show Plugin Manager」,安裝「Python Script」(須重啟NPP)。
NPP Plugin Manager

2. 開啟Menu選單「Plugins/Python Script/New Script」,在以下使用者路徑新增一個「InsertDateTime.py」,內容輸入:

import time
editor.replaceSel(time.strftime('%Y/%m/%d %H:%M:%S'))

C:\Users\用戶名XXX\AppData\Roaming\Notepad++\plugins\config\PythonScript\scripts\
它的「User Scripts」有固定的放置位置,你也可以建立在「Machine Scripts」的安裝目錄下,方便管理就成。
Python Script Config
這個「InsertDateTime」的項目就會出現在以下的位置:
Python Script MenuItem
3. 它預設並沒有Shortcut或Hot Key,因此重新NPP後,我們在選單Menu「Settings/Shortcut Mapper」找到該項目,並給予Hot Key (我設成UltraEdit的F7鍵,因為不肯定是否會重回它的懷抱? XD)
Shortcut Mapper
在「Plugin commands」下搜尋「InsertDateTime」項目,並設定熱鍵Hot Key. 要注意該Hot Key可能被註冊走了,例如F7被「Main menu/Search Result Window」項目給設定,必須把它取消才有效果。

4. 重啟NPP,發現Hot Key產生日期字串OK了。Python可以做很多的自動化工作,詳情皆可看Python Script官方網頁說明。

2012-03-12

替Google Blogger加入Facebook留言

Facebook Comments留言功能主要的優勢是挾帶3.5億臉書用戶的普及度,不需另行註冊即可在各種平台留言,帶來很方便的互動效果。然而,Google Blogger網誌設定中的「版面佈置/Blog Posts」區塊並不支援Facebook留言嵌入功能(畢竟是社群應用市場的競爭對手),因此我透過置底的「HTML/Javascript小工具」佈署這樣的功能。

1. 閱讀重灌狂人的教學文章「在部落格嵌入 Facebook 留言板,借3.5億個會員讓流量破表!」,取得Facebook Comments的嵌入程式碼。
Facebook Code

2. 在Blogger設定的「版面佈置」下方加入一個HTML/JavaScript小工具。Blog Posts處並無法嵌入語法,我也不想每次post文時都在文章下方把這些嵌入碼置入,畢竟模組嵌入的獨立原則概念必須把持。
Blogger Layout

3. 重點來了,留言的資料是依賴Facebook Plugin Code中的「data-href」來區別,但我們無法以伺服端語言自動產生網址,所以我用Javascript的document.location變數來代替,新增如下代碼:

<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/zh_TW/all.js#xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
document.write('<div class="fb-comments" data-href="'+document.location+'" data-num-posts="5" data-width="470"></div>');
</script>

4. 測試一切正常,雖然留言位置無法跑到最適當的文章下方,但還能接受。
Facebook Comments

Cobian Backup備份保留次數

Cobian Backup是一套免費的備份軟件,它主要特色是支援Windows陰影備份(使用中的檔案可被複製),常當作Server端的備份機制。我習慣以一個目錄為單位來作備份,為了增加效率,希望它平時只備份異動的檔案就好,第3次再作一次完整的目錄備份即可。
Backup Type

以上是Cobian Backup的設定畫面,步驟1-2會形成以下History記錄的循環順序效果:
Backup History

為了節省備份空間及加速備份檔案複製至其他磁碟機,每次的備份壓成ZIP檔最好,檔名標示出日期/時間。
Backup Archives

為了避免這些備份檔日累月積把磁碟灌爆,最好是只保留三份完整備份ZIP即可,這就是選項「Full copies to keep」的功能實現。當每次執行備份完畢,它會讀取History的資料,抓取倒數第3次的Full備份時間,將它之前的所有檔案(Full+Incremental)全部刪除。在Cobian Backup裏,History並不像純Log文字記錄,它是備份軌跡的重要依據資料。

有了這自動回收的機制,我們就不用怕備份檔耗竭磁碟空間。備份次數設定裏,我很愛「3」這個數字,因為備份距離時間太近太遠都不好,選擇這數字是長久累積的備份經驗也。

2012-03-07

複製Opera的頁籤名稱及網址

當我們要複製一個網頁URL給別人時,最好是能把該Page Title及URL一起複製,這樣能讓別人迅速了解你轉貼的頁面大意。舉凡Maxthon, Firefox, Google Chrome都有Extension支援這樣的"Copy Tab Title and URL”的功能,唯獨老牌的Opera瀏覽器沒有!!

對於Opera的Extension豐富度有點小小失望,因為身為老牌瀏覽器卻缺乏一些主流常見的功能,後續的發展趨勢令人擔心了。不管如何,各自一片天,還是介紹如何實作在Opera頁面中,實現「Copy Tab Title and URL」的功能。

1. 打開Opera安裝目錄下的”/ui/standard_menu.ini”檔案,搜尋”[Document Popup Menu]"字串,在此項目”Item, MI_IDM_POPUP_ADDRESS            = Copy document address” (約720行)下新增以下內容:

Item, "Copy Tab Title and URL"="Go to page, "javascript:(function() {var s=window.getSelection(),t=document.title+'\r\n'+location.href,t=s?t:t;window.prompt('',t);})()" & Delay, 10 & Copy & Cancel"

2. 儲存檔案,並重新開啟Opera。在任一Web Page頁面按滑鼠右鍵,出現:
 WebPage ContextMenu


3. 點選該項目後,會出現一個提示視窗,但隨其就不見。這是因為Javascript無法直接存取local的剪貼簿,所以透過提示視窗複製再令其消失,乃折衷辦法也。所以本來很容易的一項人性功能,官方不做,就是累死百姓了!
Tab Title and URL


我使用OperaPortable版本沒辦法成功,它好像讀取別地方的ini檔案,但我遍尋不找。你可以直接執行”\Portable\OperaPortable\App\Opera\opera.exe”即可。

2012-02-17

10分鐘得到Dropbox的免費5GB空間

官方福利說明:
Dropbox正在準備推出相機照片及影音的同步新功能,為了回饋測試的用戶,只
要透過論壇裏的Beta新版上傳5GB的照片/影音,即可得到5GB空間,即使刪去
那些檔案,得到的空間亦會保留。
image
 

文件教學目標:
依正常的程序,你得準備隨身碟內5GB的相片或影片,經過漫長的上傳等待,
才能得到此福利。此檔透過一些捷徑方法,可以讓你簡單地在10分鐘內就得到
官方福利,避開了漫長的上傳等待。

教學文件下載:(PDF, 1.54MB)
Dropbox

2012-02-09

快速大檔產生器

有時候我們需要臨時產生一個大檔來作某用途的應用,例如測網速或磁碟Quota測試,這個工具可以讓你極快速產生一個指定Size的檔案,例如下圖5GB的檔案的產生,只需要約85 miliseconds時間(不到0.1秒)。
image

工具下載 (2012/02/09 Updated, 9.52KB)
DropBox
***免安裝,需要.NET Framework 4.0以上版本。***

2012-01-31

智邦PP一元簡訊API呼叫

台灣市面上的一元簡訊服務,大部分採各自會員網頁介面,很少有提供程式API讓用戶自行撰寫程式發送簡訊。終於在智邦PP一元簡訊消費平台上,終於有提供簡易API方式給用戶:
http://pp.url.com.tw/option/api
image

智邦API是使用HTTP POST方式傳入,回傳時使用PHP陣列,使用C#還是可以輕易完成整個API的呼叫。網上關於如何實作POST多參數資料的傳遞範例碼很多,為了方便使用,我將它包成一個Helper物件:
 image

回傳的文字訊息,則可依照官方網頁的API說明作字串擷取判斷。透過這樣API方式,您可以自己打造符合手機Screen Size的網頁或開發APP來傳送一元簡訊。
 image
最後,小抱怨一下台灣簡訊價格相較大陸,實在太貴啦~ 以電信數據及3G資料量的比例原則,公道自在人心。

2012-01-11

跳過蘋果動新聞嵌入廣告

蘋果動新聞是蠻有趣的新聞報導方式,雖然它的內容有誘導及想像之處,但一切就端視閱聽人自己心中的一把尺。片頭常有很煩人的廣告,而且至少得等到播一半才能Skip略過,是屬於比較暴力式推銷方式。

為了跳過這樣煩人的置入式廣告,有網友分析出它是利用Cookie來記錄是否已播放過廣告,可以在IE「網際選項/隱私權/網站」裏把此網站的Cookie禁用,有效防止AD播放。但一些非IE的瀏覽器(如Maxthon)因為有自己專屬的Cookie控制,因此得利用Javascript來控制Cookie.

先分析動新聞網頁源碼:
image

由上圖源碼得知,只要obj.newstate=’COMPLETED’,嵌入式廣告就會消失。所以只要在網址列上輸入特定的Javascript來覆蓋這段函式,就可以達到此目的。

javascript: changeADState({newstate: 'COMPLETED'}); changeADState(); history.go(0); void(0);
其程式意思在於先設定該newstate Cookie變數為"COMPLETED”狀態,再呼叫執行它使之儲存,再重新載入該頁!你可以把這段程式碼Bookmark起來,遇到廣告播放時按一下就行了。

2011-12-31

使用RAR作日期壓縮備份

RAR一直是我最喜歡的壓縮程式,儘管它是商業軟件,但是我實測過壓縮具有千萬個圖片的目錄(總和Size > 2GB),免費的7-Zip崩潰了,但RAR依舊硬梆梆。加上中國大陸網絡也偏好使用RAR壓縮,所以還是選擇使用了它。

通常,我會用RAR來幫我作備份資料上的壓縮工作,主要是集成一個單檔好管理。我不會很注意要壓得多小,因為解壓縮時相對的時間更多,現在磁碟空間那麼便宜,時間成本比磁碟成本昂貴的多。我喜歡壓縮成檔名+日期的格式,如:Test_20120101.rar
image

上圖是修改WinRAR的預設壓縮行為,其檔名就會後綴一個”_YYYYMMDD” 的日期。若想要使用Console版的Rar.exe程式來自動排程壓縮,其推薦的壓縮語法如下(可以結合*.bat批次檔來實作更佳):
"C:\Program Files\WinRAR\Rar.exe" a Test.rar -n@RarIncList.txt -ag_YYYYMMDD
它會把RarIncList.txt中所示的檔案壓縮成「Test_20120101.rar」,日後我們只需要改變list檔就好。
image

Rar.exe /? 說明文件如下:
a             Add files to archive
ag[format]    Generate archive name using the current date
n@<list>      Include files listed in specified list file

2011-11-05

自己畫Cell Container

當有個UI程式畫面需要開發如下圖:
image

一般作法是尋求DataGrid或一些具有窗格的控制項來作基底,每個格子Cell可能有特殊的功能及顯示
我的作法會儘量以既有Container控件項為基礎,透過User Control自訂控件及Table物件結構來描述這個UI的對映資料
畢竟User對這個UI的操作,必須儲存下來做一些運算。

以下是我的VS2010專案架構,我總是喜歡透過目錄階層把程式的架構作分類呈現:
image

即透過讀取xml檔將資料載入MenuData等物件結構裏,依這些資料結構的描述將窗格畫出來
為了達到Reuse及模組化的標準,我包成User Control自訂控項,最後就顯示成所需要的畫面。

查看原始碼,每個*.cs都很短且簡略,但它們能有張力地呈現Rich UI及功能封裝,
與「程式打字員」總是一大雜鍋地從頭寫到尾的傳統寫程序方式,
這種比較能獲得工作的喜悅感。

PS. 很多時候沒有適合的UI控件來滿足特殊Grid的要求,也懶得去找各家商業UI控件,就自己動手畫格子。
在最下面舖一張黑色Panel,裏頭每個格子都是Button,再設定每個Button的Margin屬性,就產生格線效果!
看起來好像UI雜工很多,其實也沒想像中複雜…