2011年9月29日

Online Regular Expression Tester:線上正規式測試驗證工具網站


先前(其實是好久以前了)的文章中介紹過了 java 中正規式的應用,
也介紹了一個在 eclipse 中測試、驗證正規式的好用套件,
另外也給了一些介紹正規式用法的連結,分別條列如下:
  1. java.util.regex正規式的應用:Pattern和Matcher
  2. Eclipse 好用套件:Regular Expression Tester
  3. Java Regular Expression的學習筆記 [精華]
今天要介紹的其實是線上的 Regular Expression Tester,
畢竟有時候要寫 code 出來測試也太麻煩了,
不如先在線上好好測試過,ok後再一一寫進 code 中。
而且這些網站對初學 Regular Expression 的人也很有幫助,
只要填入測試資料和寫好的 Regular Expression 就能得到測試結果,
也就能得知自己的做法對不對囉!

以下就附上幾個常見且好用的測試網站:
  1. Regexp Editor:http://myregexp.com/
    這個網站使用 java 寫成,需要 java 才能執行,但可以測試很多不同的功能,
    如:Find, Match, Split, Replace等,另外他也支援將 regular expression轉換為 java用法,
    也就是自動幫你加上 escape 的 \,非常好用。
    另外這個網站也提供了 Eclipse 的 plugin,http://myregexp.com/eclipsePlugin.html
  2. RegexPlanet:http://www.regexplanet.com/simple/
    這個網站在測試後會將你所用的語法、escape過的java語法列出來,
    另外也會整理出測試符合的字串、數量等,也是相當好用。
    介紹可見:[工具] RegEx: online regular expression testing
  3. RegExr:http://gskinner.com/RegExr/
    這個網站可以測試基本的 matching 和 replace,在右方也有基本的語法供使用,
    想知道更多關於此網站的介紹,可見:
    RegExr : Online Regular Expression Testing Tool (線上測試Regular Expression工具)
  4. Rubular : http://rubular.com/
    似乎是給寫 ruby 的人用的,不知道有什麼不同的地方。
除了常用的測試網站外,這次也又看到幾篇針對不同程式語言的正規式教學:
關鍵字:java.util.regex, Online, Regular Expression, Tester, Editor, 測試, 結果, 驗證, 工具, RegEx, 編輯, 網站, 網頁
參考資料:

2011年9月23日

Windows Live Messenger 2011 連不上:Proxy問題,Error 81000306


MSN 出現 Error Code 81000306 是幾乎每個用過 MSN 的人都遇到過的問題,
而這個問題的解答眾說紛紜,只要 google 一下就能發現許多人的解答
不過印象中遇上這個問題時通常是因為微軟的 server 掛了或有錯誤才暫時連不上,
照著那些步驟去做不一定有效,等到微軟修好後就連得上了。

第一段就撇清了解答 Error Code 81000306 的責任,那這篇到底要說些什麼呢?
如果你符合以下的一些狀況的話再進來看,不然就去看 許多人的解答 即可。
這篇針對 Windows Live Messenger 2011或 Windows Live Essentials 2011才可能出現的問題做處理,
而這兩樣都只能在 Win7 安裝,所以如果不是可以不用繼續往下看了。
  1. 使用 Windows 7 (Win7)
  2. 安裝 Windows Live Messenger 2011或 Windows Live Essentials 2011
  3. Windows Live Essentials 2011無法線上安裝,就算用離線安裝成功後最後也連不上
  4. 透過 Proxy 上網
  5. 無法登入Live Essentials其他服務,如Live Mesh,或登入 MSN 時得到 Error Code 81000306,訊息類似:您無法登入 Windows Live Messenger  您可能因為 Proxy 設定、DNS 快取或防火牆發生了問題而無法登入。
  6. 同學、同事、其他台電腦使用舊版 MSN 可正常連線登入
如果你符合上述的條件,恭喜你!你即將要脫離這困境了。
這個問題的原因是因為:
新版的 MSN 不只透過 IE 上的 Proxy 設定連線,
還加上部分程式走 Winhttp 的 Proxy 設定連線,但因為 winhttp proxy 的預設值就是直接存取,
所以就算再 IE 上設定了 proxy 還是連不上,唯一的辦法就是去修改 winhttp 的 proxy 設定。

解決方法:
  1. 進入win7 dos mode後輸入命令:
    C:\Windows\system32>netsh
    netsh>winhttp
    netsh winhttp>
  2. 設定winhttp的proxy為ie設定的proxy:
    netsh winhttp>import proxy source=ie
  3. 如果因為工作、學校環境和家中環境不同而要回復為預設的話:
    netsh winhttp>reset proxy
  4. 查看winhttp proxy目前設定:
    netsh winhttp>show proxy
更改完後如果你還沒成功安裝,可試試線上安裝是否可以成功,
或是用離線安裝完直接試試連不連得上啦,
理論上如果你的條件都和我相同的話,連不上的原因就出在 proxy 上,
如果IE 的 proxy 有通,那這邊設定好 proxy 應該就可以成功連線囉!

關鍵字:Windows Live Messenger, Windows Live Essentials, 2011, 連不上, 無法安裝, 無法連線, proxy, server, 解決方法, 解決方案, 方式, 步驟, Live Mesh, 不通, 網路, 問題, 錯誤, 錯誤碼
參考資料:

2011年9月22日

SVN:快速刪除 .svn 目錄


Subversion (SVN) 是個很好用且廣受歡迎的版本管理工具軟體,
但因為他的版本控制會將某些資料寫在 .svn 資料夾中,
且只要有加入的資料夾底下就會有一個 .svn,
這讓我們到時候要發佈程式碼,
或想將某個資料夾移出版本控制時遇上很大的麻煩。

當然我們可以手動進到每個資料夾將 .svn 給移除,
然而當資料夾一多,且每個資料夾底下又有許多資料夾,
如此一層一層刪根本就不可能。
這一篇整理了我在網路上看到的兩種做法供大家參考:

第一種方法就是下簡單的指令來刪除,
方法是用 windows 的 cmd 或 Linux 的 command line 切換到所要刪除的根目錄,
然後下這個指令:for /r ./ %a in (./) do @if exist "%a\.svn" rd /s /q "%a\.svn"
如果覺得這個指令太麻煩,也可以將他做成 batch 來執行。

第二種方法是將上面的指令換一種方式來執行,
先將以下分隔線內的文字存成 .reg 檔,
點兩下執行後就會註冊到 windows 的機碼中,
之後可以在資料夾的右鍵選單選擇「Delete SVN Folders」,
執行後就會發現要刪的東西已經被清空囉。
==============================================================
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN] 
@="Delete SVN Folders"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command] 
@="cmd.exe /k \"TITLE Removing SVN Folders in %1 && FOR /r \"%1\" %%f IN (.svn _svn) DO RD /s /q \"%%f\" \""
==============================================================

關鍵字:刪除, 移除, Subversion, .svn, 資料夾, 檔案, 目錄, 管理, 版本, 控制, 文件, 所有, 全部, 清除, 清理, 隱藏
參考資料:

XenCenter 無法顯示 VM 的 Console 視窗


有在使用虛擬化環境的人最熟悉的應該就是 VMware 了,
而另外也有人使用的是 Xen ,
架設 XenServer 後我們可以使用 XenCenter 來控管所有的 VM,
上面有許多 Tag 能讓我們看到及設定 VM 的相關資料,
例如:General、Storage、Network等等

而在所有頁籤中最常用的大概就屬 Console 了吧,
他可以讓我們像透過遠端連線一般直接連接到電腦進行操作,
但如果連線後卻發現 Console 一片空白要怎麼辦呢?
解決方法如下:
  1. 移動到 %AppData%\Citrix\ 目錄
  2. 當中會有個 XenCenterMain.exe_Url_xxxxxxxxxx 的資料夾
  3. 刪除這個 cache 資料夾
  4. 接著 Console 和 Performance 應該就都可以正常運作囉!
關鍵字:xen, xen server, xen center, console, 視窗, 無法, 錯誤, 空白, blank, not working, 失效
參考資料:

2011年9月20日

Eclipse環境設定:修改預設編碼設定、顯示行號、調整字體大小與自動完成


對 Java 程式開發人員而言,Eclipse 是相當熟悉的一款 IDE,
就算本身是使用 NetBeans、JBuilder 等其他的 IDE,
應該至少也有聽過他的大名吧。

每個程式開發的環境都一樣,
雖然一旦建起來之後幾乎就都不需要去動了,
但總是會有機會需要重新建立。
對 Eclipse 而言,每次我在重新建立環境的時候一定要更改一些設定,
分別是:
  1. 預設編碼
  2. 顯示行號
  3. 調整字體大小
  4. 程式自動完成
首先預設編碼的地方除了 IDE workspace console 本身的編碼外,
還要設定預設的 html, css, jsp 等的預設編碼,
他們修改的路徑如下:
  1. workspace:Window->Preferences->General->Workspace
    右方 Text file encoding,建議改為 UTF-8
  2. html:Window->Preferences->Web->HTML files
    右方 encoding
  3. css:Window->Preferences->Web->CSS files
    右方 encoding
  4. jsp:Window->Preferences->Web->JSP files
    右方 encoding
顯示行號則可在 Window->Preferences->General->Editor,
右方 show line numbers 勾選。

除了上面的編碼和顯示行號的設定外,
因為每天寫程式用眼過度對眼睛實在很偒,
所以記得要去調整一下字體的大小喔!
調整的地方在:Window->Preferences->Corlors and Fonts->Java->Java Editor Text Font
如果要調整所有的字體的設定的話則可以在:
Window->Preferences->Corlors and Fonts->Basic->Text Font 調整,
預設 Java Editor Text Font 就會引用 Basic 的設定,要在哪邊改就看大家囉。

另外我們在寫程式時常常需要用到自動完成的功能,
除了讓我們不用打那麼多字外,也省去打錯字修正的麻煩。
Eclipse 預設在使用時輸入 . 會帶出自動完成,
否則就要自己輸入「Alt + /」來呼叫,
雖然有快捷鍵,但有沒有辦法像 . 一樣輸入每個字都自動完成呢?
方法如下:
  1. 工具列 Windows -> Preferences -> Java -> Editor -> Content Assist
  2. 勾選 "Enable auto-activation"
  3. Auto activation delay 為提示出現的延遲時間,可以設為 0 
  4. Auto activation triggers for Java 為遇到何種字元會自動啟動提示,預設只有 dot,請改為 .abcdefghijklmnopqrstuvwxyz(,
完成環境設定後若想加入套件 (plugin),請參考:
Eclipse新增、更新與移除套件(Plugin)教學

關鍵字:Eclipse, Java, 編碼, Eclipse 編碼設定, MS950, utf-8, 自動完成, 自動補完, 補全, 不動, 提示
參考資料:

無法遠端連接MySQL:message from server: "Host xxx is not allowed to connect to this MySQL server"


通常無論我們在寫測試程式或demo,
如果要用到資料庫,我們常會使用MySQL。
為了方便起見,通常就都在本機(也就是localhost安裝一份MySQL),
使用起來倒也相安無事。

然而事情總不是這麼簡單 orz,
平常在 Java 裡再平凡也不過的一行程式碼,
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", username, password);
換作了從非本機的遠端 IP 連接,
conn = DriverManager.getConnection("jdbc:mysql://remoteIP:3306/test", username, password);
竟然死也連不上,還跳出一個訊息是:
message from server: "Host  is not allowed to connect to this MySQL server"
這到底是怎麼一回事呢?

後來查了一些資料,發現出現這種狀況都是因為想直接用 root 帳號從遠端連,
會出現錯誤訊息其實是因為 MySQL 為了安全性的因素,
所以將權限最大的 root 帳號限定只能由本機端 localhost 連到資料庫。
那要怎麼解決這種狀況呢?解決方法有兩種:
  1. 把 root 的權限開放,讓他也能從遠端連!
  2. 新建一個帳號,讓他只有所要連接的資料庫的權限,只要是非 root 帳號都可以從遠端連。
接下來針對兩種解決方法做分析,
第一種方法有點自找麻煩,就已經因為安全性的問題要把 root 帳號綁在 localhost 了,
你竟然還要找死把權限開放,如果不是什麼程式已經寫死的問題的話,
真的很不建議這麼做。
就算真的要這麼做,也請把要開放的 remoteIP 範圍設定好,
透過限定適當的 IP 範圍,也可避免直接被外部攻擊。
要開放帳號連接權限的方式如下:
  • shell> mysql --user=root -p  
  • 輸入密碼
  • mysql> use mysql  
  • mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON [db_name].* TO [username]@[remoteIP] identified by '[password]';   
  • mysql> FLUSH PRIVILEGES;
其中幾項參數名稱的說明如下:
  • db_name:想要從遠端連接的資料庫名稱
  • username:就是 username 嘛,若你是遇上這個問題,這個通常就是 root 囉!
  • remoteIP:用戶或程式所在的遠端 IP,這邊可以使用 % 來開放某個網段,如:'192.168.%.%',注意兩個單引號是一定要加的喔!
  • password:就密碼啦,最好也加上兩邊的單引號。
  • 最後的最後記得加上 ; 因為這是SQL語法。
以上的方法是參考自:
第二種方法則是新建一個帳號,
方式可以用 MySQL 的圖形介面或是參考以下的教學:
  • shell> mysql --user=root -p  
  • 輸入密碼
  • mysql> use mysql  
  • mysql> GRANT ALL ON db_name.table_name TO newUserName@remoteIP identified by 'password';
  • mysql> FLUSH PRIVILEGES;
語法和前一個很像,db_name.table_name 可改成 db_name.* 甚至是 *.*,
這樣就能產生一個新的使用者且對 ALL (SELECT, UPDATE, DELETE......) 的操作有權限了。

以上方法參考自:
  1. MySQL 新增使用者與權限設定 (筆記)
  2. [技術文章] MySQL 指令、語法及管理
不管使用了哪種方法,現在應該都可以正常地連上資料庫了,
無論是哪種方法,記得盡量把權限和 IP 的範圍縮小,
以達到最高的安全性喔!

關鍵字:MySQL, Java, 錯誤, 無法連接, 連不上, Host, 遠端, IP
參考資料:

2011年9月7日

Online UUID Generator:線上UUID產生器


引用別人寫的 javascript 簡單做了一個線上 UUID 產生器如下:


上面如果沒出現輸入框和按鈕的話可能是主機出問題了,請稍後重試或回報給我。
出現亂碼的話請選擇 UTF-8 編碼再重新讀取一次。

其他我寫的線上工具:
Online UrlEncoder:線上轉換中文網址為UTF-8編碼

關鍵字:javascript, 線上, online, uuid, guid, generator, 產生器
參考資料: