windows uwp 檢查網際網路真是有夠麻煩的
有個網站寫得很好:
https://developerinsider.co/check-internet-connectivity-in-uwp
我只要網路有通就好了,不須取得能否能連上網際網路的資訊
bool isNetworkConnected = NetworkInterface.GetIsNetworkAvailable();
有個網站寫得很好:
https://developerinsider.co/check-internet-connectivity-in-uwp
我只要網路有通就好了,不須取得能否能連上網際網路的資訊
bool isNetworkConnected = NetworkInterface.GetIsNetworkAvailable();
API,傳資料只用簡單的3DES加解密,但是java 預設只有3DES的PKCS5Padding,要達到PKCS7Padding(windows c# 只支援PKCS7Padding),就只能請Bouncy Castle幫忙,我使用bcprov-jdk15to18-1.78.1.jar、jdk17。
程式改寫大概如下:
// java 只有padding5,用bouncycastle,改寫成可使用padding7
static {
if(Security.getProvider("BC")!=null) Security.removeProvider("BC");
Security.addProvider(new BouncyCastleProvider());
}
// 使用CBC、PKCS7Padding
原本寫法
Cipher decryptCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
改成
Cipher decryptCipher = Cipher.getInstance("DESede/CBC/PKCS7Padding","BC");
在Eclipse開發時很正常,正式執行時,出現以下錯誤:
jce cannot authenticate the provider bc
我查了一下原來jdk 17是17.0.9版,這問題於jdk 17.0.10(2024年1月)解決,就這麼剛好只差一版;最後,我升級至目前最新 jdk17.0.12版就解決了。參考來源
另外 windows uwp c#寫法也幾乎一至,因java是API,windows app為client,所以也就順手了解一下
public static String Encrypt3DesCbcPKCS7Padding(String sIV,String sSecretKey, String sData)
{
TripleDES tdes = TripleDES.Create();
IvParameterSpec ivSpec = new IvParameterSpec(System.Text.Encoding.UTF8.GetBytes(sIV));
SecretKeySpec secretKeySpec = new SecretKeySpec(System.Text.Encoding.UTF8.GetBytes(sSecretKey), "DESede");
Cipher encryptCipher = Cipher.GetInstance("DESede/CBC/PKCS7Padding", "BC");
encryptCipher.Init(Cipher.ENCRYPT_MODE, secretKeySpec, ivSpec);
return Base64.ToBase64String(encryptCipher.DoFinal(System.Text.Encoding.UTF8.GetBytes(sData)));
}
sqlplus 下指令,常遇到欄位過長,顯示變形;所以需要下指令整理
spool xxx.log
prompt &_DATE
set wrap off
set termout off
set pagesize 0 embedded on
set trimspool on
select ... from ...
spool off
exit
公司來了一位excel很強的財務主管,建議我公司全面換成office 365,這樣就能擁有office 365專屬的函式,例如 sort。
可惜公司不會全部(含各廠)升級到o365;沒關係,我們還有vba。
(一)先開啟開發人員功能(方便執行)或是按下 Alt+F11 直接叫出vba來。
(二)寫VBA
Sub SortData()
Range("A:G").Sort , _
Key1:=Range("E2"), Order1:=xlAscending, _
Key2:=Range("D2"), Order2:=xlDescending, _
Header:=xlYes
End Sub
(三)打開Excel表格,輸入ALT+F8執行巨集(VBA)
即可進行排序
幾年前為了讓公司習慣nextcloud,決心將原本安裝的會議室預約系統停用,改為nextcloud上面的行事曆,但是nextcloud上面的行事曆讓公司老屁股覺得難用,直到最近我覺得大家已經習慣nextcloud,於是答應恢復原本的會議室預約系統。
以前是mrbs直接安裝,現在新版已經能使用docker安裝,非常方便。
安裝步驟如下:
git clone https://github.com/meeting-room-booking-system/mrbs-code.git
cd mrbs-code/docker_app/
vi php/config.inc.php
#########################
$auth["type"] = "ldap";
$ldap_host = "192.168.1.1";
$ldap_v3 = true;
$ldap_tls = false;
$ldap_base_dn = "OU=xxx,DC=test,DC=com,DC=tw";
$ldap_user_attrib = "sAMAccountName";
$ldap_port = 389;
$ldap_debug = true;
$ldap_dn_search_attrib = "sAMAccountName";
$ldap_dn_search_dn = "CN=xxxxx,CN=Users,DC=test,DC=com,DC=tw";
$ldap_dn_search_password = "password";
$mrbs_company = "XXX公司";
# AD登入帳號,那些可成為管理者
$auth["admin"][] = "xxxx";
$auth["admin"][] = "yyyy";
##########################
#然後修改 docker-compose.yml,看看還有沒需要修改的
#檢查完畢,就執行
docker compose up -d
因為我與Micro$oft AD整合,需要額外安裝php ldap元件
docker exec -it docker_app-www-1 bash
# 進入容器後,安裝ldap套件
apt update && apt-get install libldap2-dev -y
docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/
docker-php-ext-install ldap
#安裝完畢重開容器,就可以跟AD整合了
docker compose restart
裝置語言取得如下
# get(0)為第一語言、get(1)為第二可能使用的語言
Resources.getSystem().getConfiguration().getLocales().get(0)
#輸出
zh-Hans-CN
zh-Hant-TW
還有一種方式,但比較不精準
#中國與台灣一律為zh
Locale.getDefault().getLanguage()
以前掛載新的磁碟或分區(partition),只要確認磁碟在哪就可以直接掛載上去。
例如新的磁碟在/dev/sdb1 ,就可以直接寫在fstab,執行systemctl daemon-reload,重開機就能直接掛載辛的磁碟機。
/dev/sdb1 /docker xfs defaults 1 1
沒想到我這次栽了跟斗,RL9重開機後系統直接掛掉,原來是新磁碟機從sdb變成sda,而原本開機的sda變成sdb;我更正後重開機,又亂變代號,此時系統正式掛掉,只能重新安裝。
我後來才發現,fstab早就改成UUID的掛載方式,讓UUID自動綁定磁碟代號,以往我沒遇到問題,直到用了RL9,甚至AlmaLinux也是一樣狀況。
輸入 ls -al /dev/disk/by-uuid 可以查看磁碟對應的UUID
nextcloud 搜尋很好用,若能有全文檢索能力就更棒了,於是外掛 fulltextsearch_elasticsearch就登場了。
開發團隊只針對還在維護的nextcloud版本進行更新,也就是說一旦我們的nextcloud已經EOL了,就不會再收到ElasticSearch的更新。
以下是甘苦談
原本使用的nextcloud 25.x 能搭配ElasticSearch 7.x ,但遇到外掛存在非常嚴重效能低下問題(兩萬個檔案有設定分享,100人使用,建立索引表算一算需要至少三、四個月,太誇張了);由於nextcloud 25版已經停止維護,於是我只剩下升級nextcloud一途。
我的nextcloud架設在 CentOS 7,docker上面跑好多容器,很穩定;但nextcloud要升級到26時候,出現容器dns錯亂,無法進行dns查詢,只好先還原回25版。
初步認定是CentOS 7或docker版本過於老舊,但我不敢隨意升級docker,最後只能將nextcloud資料複製到新的虛擬主機(RockyLinux 9.4),測試由25升級到26,然後26升級27 結果就很正常,沒有出現dns錯亂問題。
移轉注意事項請參考「將nextcloud從CentOS7移轉到RockyLinux9。」
** 升級nextcloud到27,搭配新fulltextsearch外掛,初始索引要18小時,效率差了百倍以上。
開始安裝囉
安裝 ElasticSearch 8.x(ES 8) 引擎
Nextcloud 26或以上必須搭配 ES 8,最新docker版本可至此查詢 https://hub.docker.com/_/elasticsearch
#RockyLinux 9.4、docker 27.0.2
############## 檔案 ./docker-compose.yaml ################
version: "3.9"
services:
elasticsearch:
build:
context: .
dockerfile: ./docker/es/Dockerfile
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- xpack.security.http.ssl:enabled=false
ports:
- 9200:9200
- 9300:9300
networks:
- elastic
restart: always
volumes:
- indexdata:/usr/share/elasticsearch/data
# 索引過的資料將存放到 /usr/share/elasticsearch/data裡面
networks:
elastic:
driver: bridge
volumes:
indexdata:
driver: local
###########################################################
################ 檔案 ./docker/es/Dockerfile ###############
FROM elasticsearch:8.14.2
# ingest-attachment 一定要安裝
RUN bin/elasticsearch-plugin install ingest-attachment
###########################################################
# 執行容器
docker-compose up -d
安裝完畢,瀏覽器測試一下引擎是否正常 http://ip:9200/ ,事後需填入到nextcloud外掛設定裡面。
nextcloud 安裝外掛 fulltextsearch
#若安裝出問題,請移除app後,再刪除以下資料庫資料,之後就可以正常安裝了
drop table oc_fulltextsearch_indexes;
drop table oc_fulltextsearch_ticks;
delete from oc_appconfig where appid='fulltextsearch';
delete from oc_appconfig where appid='fulltextsearch_elasticsearch';
delete from oc_appconfig where appid='files_fulltextsearch';
delete from oc_appconfig where appid='files_fulltextsearch_tesseract';
DELETE FROM oc_migrations WHERE app='fulltextsearch';
DELETE FROM oc_preferences WHERE appid='fulltextsearch';
外掛需要設定
外掛安裝完畢,還需要填入引擎網址、與索引名稱,其他預設值即可。
「檢查」外掛設定是否正常
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:check
「測試」外掛設定是否正常
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:test
一切正常後,就可以開始建立索引表了,這裡建議定期重做索引。
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:index
這裡強烈建議「文件掃描PDF檔」需要利用acrobat adobe pro版內建文字辨識功能(OCR),進行一次自我辨識
第一次初始化索引建立後,才可以使用
最後還需要額外執行live指令,針對後續異動的檔案進行索引
# 自動索引官方沒建議怎做,我自己是在容器本體VM(RL9.4)利用console常駐執行
# 這樣做比較麻煩,需要注意重開後需要手動做
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:live
** 有一次我要刪除原本的索引,一直失敗,搞了很久很久很久很久,才發現要先進入容器下指令才有用
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:reset
** 目錄裡面新增「 .noindex」 這個檔案,就可以不做index
** 若有安裝tesseract ocr這個外掛,記得進nextcloud容器,額外安裝相關程式(此功能我一直沒成功過)
apt install tesseract-ocr tesseract-ocr-chi-tra-vert tesseract-ocr-chi-tra tesseract-ocr-chi-sim tesseract-ocr-script-viet tesseract-ocr-script-hant tesseract-ocr-script-hant-vert
** 以前安裝Micro$oft單機版sharepoint,是個重量級系統,早就有全文檢索功能,但實在是太吃系統資源了,果斷不用。