android取得藍芽裝置連線狀態

Java

public static boolean isConnected(BluetoothDevice device) {
    try {
        Method m = device.getClass().getMethod("isConnected", (Class[]) null);
        boolean connected = (boolean) m.invoke(device, (Object[]) null);
        return connected;
    } catch (Exception e) {
        throw new IllegalStateException(e);
    }
}

Kotlin

fun isConnected(device: BluetoothDevice): Boolean {
  return try {
    val m: Method = device.javaClass.getMethod("isConnected")
    m.invoke(device) as Boolean
  } catch (e: Exception) {
    throw IllegalStateException(e)
  }
}

[心得]自製虛擬幣$TMC

先說明一下,4月才發現加密貨幣很夯, 但不管是挖礦,或是買幣都只能投入一些些;
於是我玩起自製幣(非ERC20), 只是好玩, 無法跟所有網路連線, 也只能提供最低2個節點, 讓伺服器正常跑起來.

我自製幣的網址為: https://tmc.kafeiou.pw , 可以取得錢包,與註記碼
然後, 然後就沒有然後了,因為這系統是PoS,無法透過挖幣取得, 好無聊!
於是我想了想該如何發幣:

  1. 空投
    只要寫錢包,與公鑰 , 我看到就會轉TMC過去
    https://docs.google.com/forms/d/1X-NpykI6RlMwjW3gTkoWdobNmoAGiVr97m4BwIOd7rI
  2. 自己寫了類似遊戲的線上獎勵程式
    只要在線,每隔一段時間得到1塊, 到最低金額會統一發放
    客戶端程式(含源碼):
    https://github.com/WilliamFromTW/ToolManCoinAirDropClient/releases
    下載程式後, 修改錢包與公鑰,就能因在線時間越久而得到獎勵.
    這樣很像挖礦的感覺,靠自己努力取得錢幣

心得:
網路上搜尋如何自製屬於自己的錢幣, 無奈都太過複雜,
而且大部分都需要”挖礦”取得錢幣.
最後我終於找到NXT未來幣(PoS), 該組織也讓大家能夠自製虛擬幣
https://github.com/sandoche/Proof-of-Stake-Cryptocurrency-generator

我自己覺得虛擬幣的世界真的無限想像, 真棒.
TMC=Tool Man Coin 工具人錢幣

PS.
伺服器端程式(含源碼)
https://github.com/WilliamFromTW/ToolManCoinAirDropServer
加入TMC節點的方式,可以到這下載
https://github.com/WilliamFromTW/ToolManCoin

很簡單直覺,java限制雙開的程式寫法

private static final int PORT = 9999;
private static ServerSocket socket;    

private static void main() {
  try {
    //Bind to localhost adapter with a zero connection queue 
    socket = new ServerSocket(PORT,0,InetAddress.getByAddress(new byte[] {127,0,0,1}));
    // 正常流程
    //
  }
  catch (BindException e) {
    // 異常流程
    System.err.println("Already running.");
    System.exit(1);
    Runtime.getRuntime().halt(0);
  }
}

Linux 將命令模式下執行程式,所輸出的紀錄引導到檔案

以java為例,

System.out.println(“log …”)

可以在console下看到結果, 但我們若需要未來分析使用, 就必須導到檔案.

執行時可以增加以下參數

java  -jar xxx.jar   > a.out  2>&1

以前常常搞不清楚, 現在也還是一樣不太懂, 沒差拉, 這樣就可以用了, 然後 tail -f a.out 就可以在螢幕看到即時訊息, 事後也能將a.out保存起來呢.

關於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
1 2 3 4