2017年6月27日 星期二

變更 Privoxy 預設行為

Privoxy 是個 Proxy 伺服器軟體,預設狀況下會做不少擋廣告之類的行為
不過也許在某些網站會遇到這些阻擋行為導致網站無法正常瀏覽。

2017年6月16日 星期五

在部落格使用 SyntaxHighlighter 4

部落格要放程式碼的時候,需要一些套件幫忙換顏色什麼的,讓程式碼更容易閱讀些
我的部落格很久以前就在用 SyntaxHighlighter 3
不過今天突然發現本來用的網域服務要收掉了,必須要把 SyntaxHighlighter 的 JavaScript 換地方放
此外同時也發現 SyntaxHighlighter 4 出現在 Github [1] 上,所以就順便嘗試了升級。

2017年5月26日 星期五

在 Java 設定 Command Line 參數:Apache Commons CLI 簡易使用(未完)

寫程式時,寫完的程式總是要被執行的。不過要怎麼被使用者執行呢?
現代來說,容易想到的就是做個 GUI 介面~
但實務上,很多小程式其實可能做 GUI 介面得花費的開發時間,甚至遠高於程式本身
而且 GUI 做出來有可能也只有兩三個按鈕,顯得挺不划算~。
因此,其實有相當多的程式,最後都還是會選擇最簡易的方式:以 Command Line 的形式讓使用者執行。

在 Java 中,main() 進入點都會有個 String[] args 的參數
這個陣列就是使用者在執行程式時,同時夾帶的 Command Line 參數。
當然我們可以自己去解析陣列的內容,但挺浪費時間。更好一些的作法,是使用已經有的現成函式厙。
而這裡要紀錄的,就是 Apache Commons CLI [1]。

2017年5月4日 星期四

在 Java 傳送訊息給 Amazon SQS

Amazon SQS 是 Amazon 的其中一個訊息服務
感覺上其實有點像是劣化版的 Kinesis。
Anyway,總之就是一種用來傳送訊息的方法,所以這篇要來簡要紀錄一下怎麼從 Java 控制它。

2017年4月18日 星期二

Java 字串與位元組的編碼

簡單小記,字串(String)因為任何理由要轉換成位元組(byte array)時,最好要指定編碼
否則在 Java 中,預設會以系統編碼來處理,就容易產生中文亂碼的問題。

String s = "some text here";
byte[] b = s.getBytes(CharSet.forName("UTF-8"));

s = new String(b, CharSet.forName("UTF-8"));

在 Amazon Linux AMI 上使用 Java 8

簡單的小問題~AMI 預設好像內建 Java 1.7,要更新成 1.8 的話,可以用以下的 YUM 指令。

sudo yum install java-1.8.0
sudo yum remove java-1.7.0-openjdk

其中要特別把 1.7 移除掉,是因為單純安裝 1.8 的話,預設 java 指令還是會呼叫 1.7。

參考資料
  1. How can I upgrade to Java 1.8 on an Amazon Linux Server?

2017年3月20日 星期一

在 Gitlab 上設定使用 AWS SES 作為郵件伺服器

其實試了一段時間之後,發現也不用特別紀錄什麼,因為官方有完整的設定範例 [1] 了 XD
唯一需要稍微注意的地方是….設定完以後要用 reconfigure 指令讓 Gitlab 重讀,不要用 restart
但這其實也寫在官方文件 [1] 上了。

參考資料
  1. SMTP Setting – AWS SES
  2. SSL certification error

2017年3月8日 星期三

如何維持軟體專案的可維護性?

最近半年,有時常在猶豫一些問題,最常遇到的,就是前些時候寫好的一段程式碼,現在必須在上頭追加一些新的功能,然後就感覺到「唔,當初沒有計畫要追加這個功能,所以結構不太適合這麼做」,或者是「當初時程有點趕,寫起來有點凌亂」等等,可能有著各種原因讓自己覺得之前寫好的程式碼有點髒。但現在新功能的時程也不是很長,如果去動了舊的程式碼,時程可能變得很緊湊,那該怎麼辦呢?

2017年2月15日 星期三

StartingSequenceNumber 49537979178794861780081237450294896636708704732336619521 used in GetShardIterator on shard shardId-000000000000 in stream primaryManifestStream under account xxxxxxxxxxx is invalid because it did not come from this stream

先簡要紀錄,收到這種一大串說 “it did not come from this stream” 的錯誤訊息
根本原因在於,使用 Kinesis 的 Consumer 時
設定 group ID 後 Consumer 會去 DynamoDB 建立一張 table,table 名稱會完全跟 group ID 一樣
因此如果有兩個在監聽不同 Stream 的 Consumer 用了相同的 group ID,晚建立的那個 Consumer 就會噴出標題的錯誤。

參考資料

  1. GetShardIterator... invalid because it did not come from this stream