關於Java Single Instance只能執行一次的解法

我找了2資源, 想法都很不錯, serversocket 的做法最容易接受 , 但真的被反組譯修改,也是防不勝防,除非連程式都簽章加密處裡.

https://rosettacode.org/wiki/Determine_if_only_one_instance_is_running#Java

http://www.sauronsoftware.it/projects/junique/manual.php#5

launch4j把java程式轉成exe可執行檔案

一直以來,我都是讓使用者執行bat, 開啟命令提示視窗, 來啟動java程式,但 這樣很難讓麻瓜接受使用,

因此網路上找到好用的轉換程式, 可以直接把jar檔案轉換成exe檔案, 這樣就方便多了

使用方式可點這裡看教學 ,

比較值得注意的是,可以勾選single Instance , 限制只能執行一次, 不能多次執行, 這功能真是太棒了

ubuntu 安裝oracle jdk 8

1. 先到oracle網站下載

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
下載 jdk-version-linux-x64.tar.gz 

2.   解開 tgz

sudo tar zxvf jdk-version-linux-x64.tar.gz -C /usr/lib/jvm

3. 安裝到 update-alternatives

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_version/bin/java" 1

4. 設定oracle java

sudo update-alternatives --config java 

建立可用來呼叫鼎新電子表單easyflow web service的開發環境

鼎新電子表單EasyFlow GP版本, 提供 web service 呼叫 .但是鼎新只會給web service的說明文件, 並不會技轉建立開發環境., 我因此研究了數天, 將建立開發環境的說明文件製作出來,

接下來如何開發, 就是自身能力的問題, 網路很多資源, 可幫助學會這10多年前就已經成熟的web service,

https://docs.kafeiou.pw/!/#iammis/view/head/%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0/HowTo/10032_eclipse%E5%BB%BA%E7%AB%8B%E5%8F%AF%E5%91%BC%E5%8F%AB%E9%BC%8E%E6%96%B0webservice%E7%9A%84%E7%92%B0%E5%A2%83.docx

git server移轉注意事項

我工作上用的git server有兩個, 一個是吉茶(gitea), 另一個是吉累(gitlab), 因為重新使用吉碧麗(gitblit), 所以將吉累狠心地關閉, 因為他功能太多, 架構龐大, 太耗資源, 願意用的原因只有一個, 就是分類的方式比吉茶好, 現在終於來了一個分類更強的server – gitblit.

我將gitlab上面的git專案, 直接複製到gitblit 目錄上, 一切正常, 但卻遇到 lfs 檔案移轉失敗的現象, 也就是gitblit上面的lfs並無法真正的指向檔案實體位置, 全部都是空的.

我嘗試很多指令想解決這問題, 如 git lfs clean , git lfs pust –all 等等要麻就是無反應timeout, 要麻就是出現檔案不存在等等奇怪現象, 皇天不負苦心人, 我終於爬文爬到有位專家 https://github.com/sprohaska 提出解法 https://github.com/git-lfs/git-lfs/issues/1113 , 最後如願從client端將大檔案正確的放到新的gitblit上, 指令如下:

git lfs ls-files -l | awk '{ print $1 }' | xargs git lfs push --object-id origin

再次擁抱-吉碧麗gitblit – git server 使用docker

原本用習慣的git server gitblit , 在2016年發表1.8.0版本之後, 原創者就不再更新, 當時也因為參與修改幾個bug,以及中文化花了不少心血, 覺得非常可惜, 撐到2018年之後, 覺得該專案不再更新, 安全性與bug都無法處理, 就毅然決然改用gitea 吉茶.

用了吉茶之後, 發現非常不能適應, 吉茶並沒有多子目錄的設計 , 方便我們建立階層式管理專案, 例如我要建立it部門, 吉碧麗除了畫面會分類成it之外, 連網址都與分類一致, https://yyy.zzz/r/it/xxx.git , 非常直覺.
吉茶則是團隊, 群組的概念, 對於專案的分類並沒有這樣的設計, 應該都儘量與github相同,程式師才會容易上手.
至於gitlab有分類,但似乎只能一層,無法達到gitblit的多子階層的功能.

以下是docker安裝吉碧麗的步驟:

  1. 官網
    https://github.com/gitblit/gitblit-docker
  2. 設定volume之後, 啟動gitblit , 指令的port隨時可改, 預設帳密都是admin , 登入後請馬上更改
    docker volume create gitblit-etc
    docker volume create gitblit-data
    docker run -d --restart always --name gitblit -v gitblit-data:/var/opt/gitblit/srv -v gitblit-etc:/var/opt/gitblit/etc -p 8443:8443 -p 8089:8080 -p 9418:9418 -p 29418:29418 gitblit/gitblit:latest

mysql(mariadb) java 連線設定(connection string)

每次都會忘記, 因此寫下來

 
jdbc:mysql://localhost:3306/database?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

有時候透過別人寫好的web設定界面, 會造成寫入xml錯誤 , 因此要注意所搭配系統是否使用xml當作設定檔.

例如&useUnicode=true ,寫到xml會出現  &useUnicode=true

請將多餘的amp;移除,只要留下 &useUnicode=true 即可

優化Android搜尋藍牙裝置方式(API 21)

Android 6.0(API 21)以後, 搜尋藍芽裝置的方式改成:

BluetoothAdapter.startScan (ScanCallback callback)

這種方式我一直用了很久, 也沒遇到問題.

直到有一個需求是隨時監控廣播封包,

這種寫法就會遇到問題, 無法快速取得周遭藍牙廣播資料, 因此需要修改寫法, 把能下的藥都下下去(但耗電):

final List<ScanFilter> filters = new ArrayList<>();
ScanFilter filter = new ScanFilter.Builder().build();
filters.add(filter);

final ScanSettings scanSettings =
        new ScanSettings.Builder() .setNumOfMatches(ScanSettings.MATCH_NUM_MAX_ADVERTISEMENT).setMatchMode(ScanSettings.MATCH_MODE_STICKY).setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();


BluetoothAdapter.getBluetoothLeScanner().startScan(filters,scanSettings,mLeScanCallback);
1 2 3 4 5