跳到主要內容

發表文章

目前顯示的是 五月, 2016的文章

自製 Java BBCode Parser

BBCode 是常在論壇還是一些輕量級應用使用的標籤
他在實際執行時會從 [b]test[/b] 這樣的標籤轉譯成 HTML 標籤 <b>test</b>
開放讓使用者自行撰寫 HTML 內容時,容易有撰寫錯誤或XSS安全性問題
所以使用這種限定規格的標籤,對使用者來說是比較容易的,對網站方也是相對好處理的

不過在搜尋既有的 Solutions 時發現多數都是 JavaScript 用的 Library
Java使用者最常被推薦的可能是 kefirbb,只是查看了規格後我是不太想使用
因為我不需要其他的標籤轉換功能,例如 Markdown 之類的
我也不想維護一個並不是一目瞭然的格式轉換用的 XML,需要加入或修改標籤時會有困難

滿多人會選擇自行寫簡單的 regular expression 轉換
不過幾乎網路上查到的 pattern 都沒法處理好巢狀(nested) BBCode 結構
以及新的標籤要對應不同的 regular expression,我也覺得是一種負擔

後來我看到了 Extendible-BBCode-Parser 這個JavaScript Library
結構上我覺得不錯
能有彈性的新增、修改標籤行為,也能確實處理好 nested BBCode,所以動手改了個 Java 的版本
撰寫時考量還要支援Java 7,不能用 lambda 來寫真的很麻煩
不過目前應該調整到我覺得還可以的程度
改寫時我就只專注在我需要的部分,一些錯誤偵測我覺得沒必要就拿掉了
程式碼的長度覺得不適合整個貼上來,所以不貼code改貼程式碼 Gist 連結
跟參考的library一樣開放隨意修改、發佈

之前我對於 regular expression 大概就是基礎使用的程度
程式裡的那些 pattern 我也沒懂到可以說出什麼詳細教學
一些處理細節也是邊刻邊體會,從這次經驗學到了些東西,感謝原 Project 提供的各種想法

Android Studio java.lang.OutOfMemoryError: GC overhead limit exceeded

參考文章

我在包裝 signed APK 時碰到這個問題
原本在包測試的APK時都沒狀況
大概是包入驗證時的加密、解密處理多用到的記憶體剛好超過上限

根據查詢的文章提到,Android的dex machine預設記憶體使用上限為1GB
解決方式是在 build.gradle 裡在 Android 相關的設定裡加入以下紅字部分
android {
    ....

dexOptions {
        javaMaxHeapSize "4g"
    }

}

有看到其他文章提到4G記憶體在大多數狀況可能是過剩,設定成 "2g" 就足夠的意見
實際設定就依個人需求調整吧

Windows版 SourceTree 啟用認證暫存的方式

參考文章

SourceTree 是Git的GUI輔助工具
坦白說比起 Command Line ,我還是比較喜歡有GUI的輔助操作介面
特別是看線圖以及一些複合操作我是認為比原生的Git Bash及GUI好用
不過 Windows 版的使用者在一開始大概都會碰到無法登入 Git server 的問題
SourceTree 的認證暫存預設應該是封閉的
如果Git server沒啟用 keyless,那就得開啟認證暫存機制囉

操作步驟為
Win + R 叫出執行後,輸入 cmd 開啟 Windows 的命令提示字元

接著下以下指令

C:\Users\xxx> D:                                 ::切換到SourceTree的安裝硬碟槽,示範是D槽

D:\>cd D:\SubPrograms\sourcetree\tools\putty  :: cd到SourceTree下的 tools\putty目錄

D:\SubPrograms\sourcetree\tools\putty> plink.exe git.yourSite.com
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048......
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n) y  :: …