Linux 將命令模式下執行程式,所輸出的紀錄引導到檔案
以java為例,
System.out.println(“log …”)
可以在console下看到結果, 但我們若需要未來分析使用, 就必須導到檔案.
執行時可以增加以下參數
java -jar xxx.jar > a.out 2>&1
以前常常搞不清楚, 現在也還是一樣不太懂, 沒差拉, 這樣就可以用了, 然後 tail -f a.out 就可以在螢幕看到即時訊息, 事後也能將a.out保存起來呢.
以java為例,
System.out.println(“log …”)
可以在console下看到結果, 但我們若需要未來分析使用, 就必須導到檔案.
執行時可以增加以下參數
java -jar xxx.jar > a.out 2>&1
以前常常搞不清楚, 現在也還是一樣不太懂, 沒差拉, 這樣就可以用了, 然後 tail -f a.out 就可以在螢幕看到即時訊息, 事後也能將a.out保存起來呢.
我找了2資源, 想法都很不錯, serversocket 的做法最容易接受 , 但真的被反組譯修改,也是防不勝防,除非連程式都簽章加密處裡.
https://rosettacode.org/wiki/Determine_if_only_one_instance_is_running#Java
一直以來,我都是讓使用者執行bat, 開啟命令提示視窗, 來啟動java程式,但 這樣很難讓麻瓜接受使用,
因此網路上找到好用的轉換程式, 可以直接把jar檔案轉換成exe檔案, 這樣就方便多了
使用方式可點這裡看教學 ,
比較值得注意的是,可以勾選single Instance , 限制只能執行一次, 不能多次執行, 這功能真是太棒了
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 GP版本, 提供 web service 呼叫 .但是鼎新只會給web service的說明文件, 並不會技轉建立開發環境., 我因此研究了數天, 將建立開發環境的說明文件製作出來,
接下來如何開發, 就是自身能力的問題, 網路很多資源, 可幫助學會這10多年前就已經成熟的web service,
我工作上用的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
原本用習慣的git server gitblit , 在2016年發表1.8.0版本之後, 原創者就不再更新, 當時也因為參與修改幾個bug,以及中文化花了不少心血, 覺得非常可惜, 撐到2018年之後, 覺得該專案不再更新, 安全性與bug都無法處理, 就毅然決然改用gitea 吉茶.
用了吉茶之後, 發現非常不能適應, 吉茶並沒有多子目錄的設計 , 方便我們建立階層式管理專案, 例如我要建立it部門, 吉碧麗除了畫面會分類成it之外, 連網址都與分類一致, https://yyy.zzz/r/it/xxx.git , 非常直覺.
吉茶則是團隊, 群組的概念, 對於專案的分類並沒有這樣的設計, 應該都儘量與github相同,程式師才會容易上手.
至於gitlab有分類,但似乎只能一層,無法達到gitblit的多子階層的功能.
以下是docker安裝吉碧麗的步驟:
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
每次都會忘記, 因此寫下來
jdbc:mysql://localhost:3306/database?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
有時候透過別人寫好的web設定界面, 會造成寫入xml錯誤 , 因此要注意所搭配系統是否使用xml當作設定檔.
例如&useUnicode=true ,寫到xml會出現 &useUnicode=true
請將多餘的amp;移除,只要留下 &useUnicode=true 即可
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);