2020年9月23日 星期三

[java]使用okhttp3時發生SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at sun.security.ssl.Alerts.getSSLException(Unknown Source)

at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)

at sun.security.ssl.Handshaker.fatalSE(Unknown Source)

at sun.security.ssl.Handshaker.fatalSE(Unknown Source)

at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)

at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)

at sun.security.ssl.Handshaker.processLoop(Unknown Source)

at sun.security.ssl.Handshaker.process_record(Unknown Source)

at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)

at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)

at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:268)

at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:238)

at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:149)

at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:192)

at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121)

at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100)

at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)

at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)

at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)

at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)

at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)

at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)

at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)

at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)

at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)

at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)

at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)

at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185)

at okhttp3.RealCall.execute(RealCall.java:69)


 

解法

new OkHttpClient();改成getUnsafeOkHttpClient();

import javax.net.ssl.HostnameVerifier;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSession;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;


/**

* okHttp3信任所有證書

* @return OkHttpClient

*/

public static OkHttpClient getUnsafeOkHttpClient() {

try {

final TrustManager[] trustAllCerts = new TrustManager[]{

new X509TrustManager() {

@Override

public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {

}

@Override

public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {

}

@Override

public java.security.cert.X509Certificate[] getAcceptedIssuers() {

return new java.security.cert.X509Certificate[]{};

}

}

};

final SSLContext sslContext = SSLContext.getInstance("SSL");

sslContext.init(null, trustAllCerts, new java.security.SecureRandom());

final javax.net.ssl.SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

OkHttpClient.Builder builder = new OkHttpClient.Builder();

builder.sslSocketFactory(sslSocketFactory);


builder.hostnameVerifier(new HostnameVerifier() {

@Override

public boolean verify(String hostname, SSLSession session) {

return true;

}

});

return builder.build();

} catch (Exception e) {

throw new RuntimeException(e);

}

}






2020年6月11日 星期四

[java]java.sql.SQLException: I/O Error: Connection reset by peer: socket write error

java.sql.SQLException: I/O Error: Connection reset by peer: socket write error
at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1065)
at net.sourceforge.jtds.jdbc.TdsCore.microsoftPrepare(TdsCore.java:1191)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.prepareSQL(ConnectionJDBC2.java:693)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:978)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)

主要原因還是在 Tomcat 的 connection pool 與 DB Server 斷線所引起。
重啟server即可

tomcat相關設定
maxWait="3000"  從池中取連線的最大等待時間,單位ms.
initialSize="10"  初始化連線
maxIdle="60"  最大空閒連線
minIdle="10"  最小空閒連線
maxActive="80"  最大活動連線
validationQuery = "SELECT 1"  驗證使用的SQL語句  
testWhileIdle = "true"  指明連線是否被空閒連接回收器(如果有)進行檢驗.如果檢測失敗,則連線將被從池中去除
testOnBorrow = "false"  借出連線時不要測試,否則很影響效能
timeBetweenEvictionRunsMillis = "30000"  每30秒執行一次空閒連接回收器
minEvictableIdleTimeMillis = "1800000"  池中的連線空閒30分鐘後被回收
numTestsPerEvictionRun="10"  在每次空閒連接回收器執行緒(如果有)執行時檢查的連線數量

removeAbandoned="true"  連線洩漏回收引數,當可用連線數少於3個時才執行  
removeAbandonedTimeout="200"  連線洩漏回收參數,200秒,洩露的連線可以被刪除的超時值。當連線時間大於200秒,不等資料庫回應就砍連線。
removeAbandonedTimeout        屬性是設定資料庫連線被釋最多空閒時間多少秒之後設定為空閒。預設移除廢棄連線的時間為300秒。





2020年5月29日 星期五

[java]NoClassDefFoundError

問題
Caused by: java.lang.NoClassDefFoundError: org/apache/http/HttpEntity

NoClassDefFoundError 錯誤發生原因
因為程式在執行時,找不到此class導致的錯誤。此時jvm就會拋出NoClassDefFoundError

如何解決
找出此class對應的jar,載入到classpath中即可

[攝影]空拍小技巧

拍照小技巧
  • 線條
  • 尋找形狀
  • 重複場景
  • 分割畫面
  • 找亮點
影片小技巧
  • 飛高飛遠
  • 鳥瞰飛高
  • 鳥瞰雲台移動
  • 水平運鏡(小心障礙物)
  • 空拍機上升同時雲台往下;空拍機下降同時雲台往上

2020年5月28日 星期四

eclipse 快速提醒相關聯指令

看到前輩key 任何字,馬上就有相關聯的提示出現
不同於alt + /
立馬詢問怎麼調整

點選 Menu: Windows > Preferences > Java > Editor > Content Assist
在Auto activartion triggers for Java填入『.@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ











結果

網站的憑證資訊怎麼看



2020年5月27日 星期三

[小知識]扣打的由來

扣打」,是來自於日本的英語借詞「クォータ(ローマ字:kuo-ta)。 
クォータ其實這詞就是借於英語「quota」一字。

[攝影][空拍]DJI Mavic Air2 vs DJI Mavic mini 規格一覽比較


Mavic MINI
Mavic Air 2
飛行器 飛行器
起飛重量 重量
249 g 570 g
尺寸 尺寸
折疊: 140 × 82 × 57 mm(長 × 寬 × 高) 折疊:180×97×84 mm(長 x 寬 x 高)
展開:160 × 202 × 55 mm(長 × 寬 × 高) 展開:183×253×77 mm(長 x 寬 x 高)
展開(含槳葉):245 × 290 × 55 mm(長 × 寬 × 高)
對角線軸距 對角線軸距
213 mm 302 mm
最大上升速度 最大上升速度
4 m/s(運動檔) 4 m/s(運動檔)
2 m/s(普通檔) 4 m/s(普通檔)
1.5 m/s(平穩檔)
最大下降速度 最大下降速度
3 m/s(運動檔) 3 m/s(運動檔)
1.8 m/s(普通檔) 3 m/s(普通檔)
1 m/s(平穩檔) 5 m/s(運動檔、俯衝)
(4500 米以上會限制俯衝速度至 3 m/s)
最大水平飛行速度(海平面附近無風情況下)
13 m/s(運動檔)
8 m/s(普通檔)
4 m/s(平穩檔)
最大起飛海拔高度 最大起飛海拔高度
3000 m 5000 m
最長飛行時間 最長飛行時間(無風環境)
30 分鐘(無風環境 14 km/h 勻速飛行) 34 分鐘
最大抗風等級 最大抗風等級
8 m/s(4 級風) 5 級風
最大可傾斜角度 最大可傾斜角度
30°(運動檔) 35°(運動檔)
20°(普通檔) 20°(普通檔)*
20°(平穩檔) * 強風狀況下為 35°
最大旋轉角速度 最大旋轉角度
150°/s(運動檔) 250°/s(運動檔)
130°/s(普通檔) 250°/s(普通檔)
30°/s(平穩檔)
工作環境溫度 工作環境溫度
0°C 至 40°C -10°C 至 40°C
工作頻率 工作頻率
型號 MT1SS5:5.725 - 5.850 GHz 2.400-2.4835 GHz
型號 MT1SD25:2.400 - 2.4835 GHz,5.725 - 5.850 GHz 5.725-5.850 GHz
發射功率(EIRP) 發射功率(EIRP)
型號 MT1SS5 2.400-2.4835 GHz:
5.8 GHz : <30 dBm (FCC); <28 dBm (SRRC) FCC: ≤26 dBm
型號 MT1SD25 CE: ≤20 dBm
2.4 GHz : <19 dBm (MIC/CE) SRRC: ≤20 dBm
5.8 GHz : <14 dBm (CE) MIC: ≤20 dBm
GNSS 5.725-5.850 GHz:
FCC: ≤26 dBm
GPS + GLONASS CE: ≤14 dBm
SRRC: ≤26 dBm
懸停精度 懸停精準度
垂直:± 0.1 m(視覺定位正常工作時)± 0.5 m(GPS 正常工作時) 垂直:
水平:± 0.3 m(視覺定位正常工作時)± 1.5 m(GPS 正常工作時) ± 0.1 m(視覺定位正常工作時)
± 0.5 m(GPS 正常工作時)
水平:
± 0.1 m(視覺定位正常工作時)
± 1.5 m (GPS 正常工作時)
最長懸停時間(無風環境)
33 分鐘
最大續航里程
18.5 km
最大水平飛行速度
19 m/s(運動檔)
12 m/s(普通檔)
5 m/s (三腳架模式)
螺旋槳
靜音快拆折疊槳
GNSS
GPS+GLONASS
指南針
IMU
機身內置儲存容量
8 GB
電池 電池
電池容量 容量
2400 mAh 3500 mAh
標稱電壓 額定電壓
7.2 V 11.55 V
充電限制電壓 充電限制電壓
8.4 V 13.2 V
電池類型 電池類型
Li-ion 2S LiPo 3S
能量 能量
17.28 Wh 40.42 Wh
重量 重量
100 g 198 g
充電環境溫度 充電環境溫度
5℃ 至 40℃ 5°C 至 40°C
最大充電功率 最大充電功率
24 W 38 W
相機 相機
影像傳感器 影像感測器
1/2.3 英吋 CMOS 1/2 英吋 CMOS
有效像素 1200 萬 有效像素:1200 萬以及 4800 萬
鏡頭 鏡頭
視角:83° 視角:84°
等效焦距:24 mm 等效焦距:24 mm
光圈:f/2.8 光圈:f/2.8
焦點範圍:1 m 至無窮遠 對焦點:1 m 至無窮遠
ISO 範圍 ISO 範圍
影片: 影片:
100 至 3200(自動) 100-6400
100 至 3200(手動)
照片: 照片(1200 萬像素):
100 至 1600(自動) 100-3200 (自動)
100 至 3200(手動) 100-6400(手動)
照片(4800 萬像素):
100-1600(自動)
100-3200(手動)
快門速度
電子快門: 4 至 1/8000 s
最大照片尺寸 最大照片尺寸
4:3 寬高比:4000×3000 4800 萬像素 8000×6000
16:9 寬高比:4000×2250
照片拍攝模式 照片拍攝模式
單張拍攝 單拍:1200 萬像素和 4800 萬像素
定時拍攝:2/3/5/7/10/15/20/30/60 秒 連拍:1200 萬像素,3/5/7 張
自動包圍曝光(AEB):1200 萬像素,3/5 張@0.7EV
定時拍:1200 萬像素 2/3/5/7/10/15/20/30/60 秒
智能拍照:場景識別、純淨夜拍和 HDR
HDR 全景:
豎拍(3×1):寬 3328×高 8000
廣角(3×3):寬 8000×高 6144
180° 全景(3×7):寬 8192×高 3500
球形全景(3×8+1):寬 8192×高 4096
照片格式
JPEG/DNG (RAW)
錄影解像度 錄影畫質及幀率
2.7K:2720×1530 25/30 p 4K Ultra HD: 3840×2160 24/25/30/48/50/60 fps
FHD:1920×1080 25/30/50/60 p 2.7K: 2688×1512 24/25/30/48/50/60 fps
FHD: 1920×1080 24/25/30/48/50/60/120/240 fps
影片最大碼率 4K Ultra HD HDR: 3840×2160 24/25/30 fps
2.7K HDR: 2688×1512 24/25/30 fps
40 Mbps FHD HDR: 1920×1080 24/25/30 fps
支援檔案系統 色彩模式
FAT32(≤32 GB) D-Cinelike, Normal
exFAT(>32 GB)
影片格式
圖片格式
MP4/MOV (H.264/MPEG-4 AVC, H.265/HEVC)
JPEG
影片最大碼率
影片格式
120 Mbps
MP4(H.264/MPEG-4 AVC)
支援記憶卡容量
最大支援 256GB 記憶卡
支援文檔系統
FAT32 及 exFAT
數碼變焦
雲台 雲台
結構設計範圍 結構設計範圍
俯仰:-110° 至 +35° 俯仰:-135° 至 45°
橫滾:-35° 至 +35° 橫滾:-45° 至 45°
偏航:-20° 至 +20° 偏航:-100° 至 100°
可控轉動範圍 可控轉動範圍
俯仰:-90° 至 0°(預設設定)-90° 至 +20°(擴展) 俯仰:-90° 至 0°(預設設定)
-90° 至 24°(擴展)
穩定系統 軸數
三軸機械雲台(俯仰、橫滾、偏航) 3 軸(俯仰、橫滾、偏航)
最大控制轉速(俯仰) 最大控制轉速(俯仰)
120°/s 100°/s
角度抖動量 角度抖動量
± 0.01° ±0.01°
感知系統 視覺系統
下方 前視
精確懸停範圍:0.5 至 10 m 精確測距範圍:0.35 至 22.0 m
可探測範圍:0.35 至 44 m
有效使用環境 有效避障速度:12 m/s
視角(FOV):
表面為漫反射材質,表面可辨別 水平 71°,垂直 56°
反射率 >20%(如牆面、樹木、人等)
光照條件充足(>15 lux,室內日光燈正常照射環境) 後視
精確測距範圍:0.37 至 23.6 m
可探測範圍:0.37 至 47.2 m
有效避障速度:12 m/s 
視角(FOV):
水平 44°,垂直 57°
下視傳感器配置
雙目 + ToF
下視
ToF 有效測量高度:0.1 至 8 m
精確懸停範圍:0.5 至 30 m
視覺懸停範圍:0.5 至 60 m
左視/右視
下視補光燈
單個 LED
安全
避障系統
APAS(高級輔助飛行系統)3.0
遙控及圖傳 圖傳系統
圖傳方案 圖傳方案
增強版 Wi-Fi Ocusync 2.0
2.4 GHz/5.8 GHz 自動切換
最大訊號有效距離(無干擾、無遮擋) 最大圖傳距離
型號 MR1SS5 10 km (FCC), 6 km (CE), 6 km (SRRC), 6 km (MIC)
5.8 GHz : 4000 m (FCC); 2500 m (SRRC)
型號 MR1SD25
2.4 GHz : 2000 m (MIC/CE)
5.8 GHz : 500 m (CE)
即時圖傳品質 即時圖傳品質
遙控器:720p/30fps 720p/30fps 或 1080p/30fps
圖傳延遲(視乎實際拍攝環境及行動設備) 圖傳延時(視乎實際拍攝環境及行動設備)
170 至 240 ms 120 - 130 ms
影片編碼格式
H.265
即時圖傳最大碼率 即時圖傳最大碼率
4 Mbps 40 Mbps
工作頻率 工作頻段
型號 MR1SS5:5.725 - 5.850 GHz 2.400-2.4835 GHz
型號 MR1SD25:2.400 - 2.4835 GHz, 5.725 - 5.850 GHz 5.725-5.850 GHz
遙控器
圖傳方案 遙控圖傳系統
增強版 Wi-Fi OcuSync 2.0
支援接口類型 支援接口類型
Lightning, Micro USB (Type-B), USB Type-C Lightning, Micro USB, USB-C
支援行動設備 支援的移動設備最大尺寸
最大長度 160 mm 180×86×10 mm(長 × 寬 × 高)
厚度 6.5 至 8.5 mm
工作環境溫度 工作環境溫度
0°C 至 40°C -10°C 至 40°C
發射功率(EIRP) 發射功率(EIRP)
型號 MR1SS5 2.400-2.4835 GHz:
5.8 GHz: <30 dBm (FCC); <28 dBm (SRRC) FCC: ≤26 dBm
型號 MR1SD25 CE: ≤20 dBm
2.4 GHz: <19 dBm (MIC/CE) SRRC: ≤20 dBm
5.8 GHz: <14 dBm (CE) MIC: ≤20 dBm
5.725-5.850 GHz:
FCC: ≤26 dBm
CE: ≤14 dBm
SRRC: ≤26 dBm
工作電流/電壓 工作電流 / 電壓
1200 mA/3.6 V(連接 Android 設備時) 1200 mA@3.7 V(連接 Android 設備時)
450 mA/3.6 V (連接 iOS 設備時) 700 mA@3.7 V(連接 iOS 設備時)
內置電池容量
2600 mAh
充電器
輸入
100-240 V, 50/60 Hz, 1.3 A
輸出
電池接口:13.2 V⎓2.82 A
USB 接口:5 V⎓2 A
電壓
13.2 V
額定功率
38 W

以上資訊取自DJI官網,只有做順序的調動
若官網資訊有更新,請以官網資訊為主

https://www.dji.com/tw/mavic-mini/specs
https://www.dji.com/tw/mavic-air-2/specs


2020年5月25日 星期一

[程式]啟動Tomcat時報錯:Server at localhost was unable to start within 45 seconds

在Tomcat啟動時,有時會報錯
Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.

解決方法:
在server視窗雙點擊Tomcat服務,開啟設定視窗
在Timeout項目,將"Start (in seconds):"的45秒調大







再次啟動Tomcat
^