2024年1月8日 星期一

SimpleDateFormat 12-31 加1年的異常

日前USER反映12/31的資料產出異常,從系統日誌來看當天是2023-12-31但記錄上都看到2024-12-31,所以當然資料產出異常原因就是檢索的日期2024-12-31沒相對應的記錄 XD

本以為是伺服器時區設定的問題,但比對其他執行的JOB有些正常有些有同樣的狀況,故伺服器時區出錯的假設看來不成立。這時候請教GOOGLE大神看來還是免不了,爬到這篇網誌 後看來是解迷了,系統取日期的方法確實與此篇描述相同,調整寫法把YYYY改成yyyy來避開ISO 8601規則,冀望來年別再採坑了。

後記: 其他同事系統也有發現類似狀況(+1 Year),與他分享時也表示為相同原因,看來這個坑踩的不冤,不過這段Code要打太極也能說委外廠商寫的,驗收時沒問題...就是此潛藏的異常要被察覺不容易罷了!! 經一事長一智是職場職務邁向更PRO的歷練,備忘囉!!



2023年11月21日 星期二

Code Standard

 單打獨鬥久了,Code Style通常都是自己習慣為準,當然解譯他人專案看多了通常難免會調整下自己編碼的習慣,最近被拉入Code Standard訂定的討論小組,做個memo囉!! 自己的習慣不一定是標準,跟一個人走的快一群人走的遠,哈...

保哥的文章,淺顯易懂的教學直接在IDE上套用,也不用去深究裡面為什麼這麼訂,讓工具來輔助也不賴



2023年10月24日 星期二

雜...

 好久沒寫了,最近忙啥哩? 忙著解源碼掃描的問題,終於把高風險項目歸零了;接著處理專案引用的Library,不管是MAVEN或ANT專案去動Framework或是引用的Library就是個風險,跑得好好的站台去更動然後挖坑點火跳下去,歐耶...這麼幹的人應該不在少數但自己還是Do it.

版本的迭代除了新功能外,既存的異常或弱點處理也是重要的一環,今天若當沒看到改日這就是可預測的風險哪時候爆炸都有可能,不過使用者就不會這麼想啦,一但有狀況造成異常大概率也是一陣洗臉後再~~

隨遇而安吧! 對的事情做 不對的不要做 認真做 某人的口頭禪但也值得仿效,哪天真心冷了就改成別沒事找事做。

2023年3月6日 星期一

Image to Base64 帶入img的src內顯示

 承之前的狀況,HTML TO PDF的做法近期使用者回報圖檔會有缺圖的問題,這再開發環境並未發現但正式環境再轉檔當下若載圖有狀況就會有此問題,故調整作法直接把圖放在HTML內改善。

不過缺點顯而易見的是轉Base64那頁面的SIZE會大增,若照片多等待時間就變得更久了...不過照片多再轉PDF也是得等待故有逾時,若是再瀏覽器顯示因為有快取機制所以只有第一次得等...這就不好比較!

HTML:
<div class="flex-row" >
    <c:if test="${pic.status==true}">
<img  style="height:300px;max-width:500px;width: expression(this.width > 500 ? 500: true);" src='data:image/jpg;base64, ${pic.picbase64}' ></img><br>
    </c:if>
  </c:forEach>
</div>
  <c:forEach var="pic" items="${piclist}">

JAVA:
//轉base64 string
Base64.Encoder encoder = Base64.getEncoder();
pic.setPicbase64(encoder.encodeToString(blob.getBytes(1, (int) blob.length())).trim());

小計:
data:image/jpg; base64, 紅字處實測png, jpeg ... 只要是圖都會正確顯示,所以不用特別去抓副檔名來放,但保險起見建議還是依照實際的檔案格式來放入相對應的MIME TYPE!

2023年2月17日 星期五

檢查網路連接埠是否已被使用

日前使用者反映AP開埠起來會自動消失,看了作業系統的事件檢視器發現是SocketException造成的,因此增加連接埠是否已被使用的檢查邏輯。

備忘囉:
using System.Net.NetworkInformation;

public static bool PortInUse(int port){
bool inUse = false;
IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();
foreach (IPEndPoint endPoint in ipEndPoints)
{
if (endPoint.Port == port){
inUse = true;
break;
}
}
return inUse;
}

if (PortInUse(80)) {
    MessageBox.Show("80埠已被占用。");
} ......