Version info
3/10
- IE8相容性修正
- Node.js穩定度調整
- 安全性增強 ## 3/9
- 新增"換顏色"功能
Intro
用Win7的便條紙一段時間,難免會覺得不能帶著走實在有點不方便,而且各種各類的便條摻在一起雜亂無章,興起了想寫一個便條紙網站的念頭。
於是經過三天的努力,"EnskyNote 便條紙!"網站完成了
Features
如果把它想像成Win7的便條紙的話,他多了以下功能:
- 多重桌面:你可以開很多張桌面,不同的標題
- 多人同步操作:你的操作會即時顯示在每個人的瀏覽器上(移動、改變[顏色、大小]等等)
- 公開連結:擁有連結的使用者可以進來修改(所以連結很長)
- 註冊很方便,直接登入就可以了
TODO(不一定會做)
- OpenID
- pin / unpin
- Read-only
- 決定 layer順序
- 短網址&公開/私人權限設定
- 出現"正在輸入"的圖案
Known issues
如果你在打字的時候有別人在打同一篇 中文輸入法會死掉
Technique
- Server: PHP , Node.JS
- Database: MySQL , Redis
- Middleware: Socket.io
- PHPFramework: Codeigniter
- JSFramework: Backbone.js
- JSLib: jQuery, Underscore.js
- AMD: Require.js
Enjoy it!
目的
將同網域的Windows電腦大量關機
需求
- 你必須有該網域的administrators之權限。
- Windows版本XP以上。
方法
Win7和WinXP和Win2008的shutdown這隻程式似乎長得不太一樣,但功能應該大同小異,
打開CMD輸入shutdown /?或者shutdown --help就可得到說明
而我測試的版本為Windows2008,指令為
shutdown /s /m \\電腦名稱 /t 秒數
即可在某固定秒數內將電腦(們)關機。
參數說明可以看windows自訂說明,其實寫得很清楚也不用多提。
問題
-
寫成批次檔的話會一直等待已經關閉的電腦回應,關機要很久
可利用批次檔的START指令,該指令功能就像fork一樣,會自己呼叫新的cmd出來,可以達到一次關閉很多台電腦的功能
EX:
START /B shutdown /s /m \\CCCC-12345 /t 10
而其中/B代表的是幕後執行,因此不會彈出很多個小黑窗。
另外如果你怕一次執行太多可以用timeout /t 秒數指令延緩執行,
比如說你可以關10台執行timout /t 20讓他每關10台等待20秒再關下十台這樣。 -
Win7沒辦法遠端關機?
可能是防火牆設定的問題,試著允許"檔案與印表機共用"這個欄位試試看。
Reference
前言
由於網路程式設計課程的關係需要在C++中用到Regular expression,
google之後發現有許多解決方案,如Regex++ 、 Boost.Regex 、 PCRE 、 regix.h 等等,
但考慮到系上工作站未必有安裝上述套件,而PCRE卻是人人都有,
所以我選擇使用pcrecpp這個lib。
安裝
- Environment: FreeBSD 8.2
% sudo portmaster devel/pcre++
使用
-
CASE 1: FULLMATCH & PARTIAMATCH
FullMatch就是需要完全相符,就像/^(regular expression code)$/一樣
PartialMatch則反之
#include <iostream>
#include <pcrecpp .h>
int main(int argc, char ** argv)
{
if (argc != 3)
{
std::cerr < < "Usage: " << argv[0] << " pattern text\n";
return 1;
}
pcrecpp::RE oPattern(argv[1]);
if (oPattern.FullMatch(argv[2]))
{
std::cout << argv[2] << " fully matches " << argv[1] << "\n";
}
else if (oPattern.PartialMatch(argv[2]))
{
std::cout << argv[2] << " partially matches " << argv[1] << "\n";
}
else
{
std::cout << argv[2] << " dose not match " << argv[1] << "\n";
}
}
執行結果
% g++ TestPcre Cpp.cpp `pcre-config --cflags` `pcre++-config --cflags` - lpcrecpp -o pcrecpp
% ./pcrecpp
Usage: ./pcrecpp pattern text
% ./pcrecpp "http:\/\/.*\.qq\.com" "http://www.qq.com"
http://www.qq.com fully matches http:\/\/.*\.qq\.com
% ./pcrecpp "http:\/\/.*\.qq\.com" "http://www.qq.comiii"
http://www.qq.comiii partially matches http:\/\/.*\.qq\.com
% ./pcrecpp "http:\/\/.*\.qq\.com" "http://www.qqq.comiii"
http://www.qqq.comiii dose not match http:\/\/.*\.qq\.com
-
CASE 2:CONSUME之完全比對
有時候你會想把整個字串比對完,像是你想parse一整篇html或文章中所有的email,你或許會這樣寫
string contents = ...; // Fill string somehow
pcrecpp::StringPiece input(contents); // Wrap in a StringPiece
string name, site;
pcrecpp::RE re("([^@]+)@([^\s]+)");
while (re.Consume(&input, &name, &site)) {
...;
}
然後就可以成功抓到一篇文章所有的email。
切記,StringPiece一定要記得Wrap,否則會型態不符喔!
Note
經實際測試結果,compile時必須加上
% g++ `pcre-config --cflags` `pcre++-config --cflags` -lpcrecpp
才可以成功compile,且如果他說找不到lpcrecpp請手動symbolic link到/usr/bin下才可執行
% sudo ln -s /usr/local/lib/libpcrecpp.so.0 /usr/lib/