使用.net 搖控 DJI TELLO 無人機

 

看到DJI TELLO有SDK,幾個重點

1 使用的是UDP

2   IP是: 192.168.10.1

3  使用的PORT有 8889(指令) 8890(狀態) 11111(取得畫面)

程式碼大概就是


// 定義 IP

string DJIIP = "192.168.10.1";

//定義埠號

int DJIPort = 8889;

// 開啟

UdpClient udpClient = new UdpClient();

udpClient.Connect(DJIIP,DJIPort);

//
Byte[] sendCmdBytes = null;

sendCmdBytes = Encoding.UTF8.GetBytes(“takeoff”);

udpClient.Send(sendCmdBytes, sendCmdBytes.Length);

 

 

https://www.ryzerobotics.com/zh-tw

https://www.ryzerobotics.com/zh-tw/tello/downloads

 

 

C# ChatGPT取回後轉語音合成 將base64轉音檔

從ChatGPT的api,取得文件後,再透過語音合成轉為base64音檔念出。

 

台灣雅婷 https://www.yating.tw/zh/api-text-to-speech-zh/

雅婷文字轉語音 https://tts.yating.tw/

文件  https://developer.yating.tw/doc/tts-%E8%AA%9E%E9%9F%B3%E5%90%88%E6%88%90#%E7%AF%84%E4%BE%8B

後台: https://developer.yating.tw/zh-TW/dashboard

其他參考

https://ai.baidu.com/tech/speech/tts

 

https://aws.amazon.com/tw/polly/

https://tw.piliapp.com/text-to-speech/

https://azure.microsoft.com/zh-tw/products/cognitive-services/text-to-speech/#overview

https://cloud.google.com/text-to-speech?hl=zh-tw

https://azure.microsoft.com/zh-tw/products/cognitive-services/text-to-speech/

https://www.xfyun.cn/services/online_tts

https://everest-ai.ximalaya.com/charm-studio/


static void DecodeBase64ToFile(string Base64String, string filenames)
{
try
{

byte[] bytes = Convert.FromBase64String(Base64String);
using (var fs = new FileStream(filenames, FileMode.Create, FileAccess.Write))
{
fs.Write(bytes, 0, bytes.Length);
fs.Flush();
}
}
catch (Exception e)
{

}
}

C#資料結構與演算法

使用對的演算法與資料結構,在程式效能上有很大的幫助。常用的資料結構有array、stack、 queue、 linked list、 tree、 graph、 heap、 hash。在c#上常見的是使用array 、arraylist、 list、 dictonary 以及queue可以滿足絕大部份的場景。

以下介紹github上二個高階資料結構與演算法的項目。

一、C Sharp Algorithms

一開始是學習資料結構,在不斷更新以及維護後,可以用在正式環境。

https://github.com/aalhour/C-Sharp-Algorithms

二、Advanced Algorithms

https://github.com/justcoding121/advanced-algorithms

Nginx 視覺化管理工具

https://github.com/onlyGuo/nginx-gui

https://nginx.org/

首先先安裝 nginx,下載nginx後解壓縮,修改conf目錄下的 nginx.conf把listen改掉需要的port

然後 cmd start nginx.exe 就可以

停止的話 nginx.exe -s stop

重新載入設定則為 nginex.exe -s reload

nginx-gui解壓後

修改 conf/conf.properties

指定完路徑後,可以用startup.bat打開  shutdown.bat 停止

預設的port是 8889 ,帳密都是admin

 

 

透過前端程式開啟檔案的方式

一、 tag a

<a href=”” download=””>download</a>

or

const taga = document.createElement(“a)

taga.href= “”

taga.download = “”

taga.click()

這邊的download屬性是html5加上的,如果沒有指定的話就會依照content-disposition確定,再沒有的話就依url 最後request的部份

2 window.open

window.open(”,’_blank’)

or

window.open(”,’_blank’,’download=’)

3 location.href/location.assign/location.replace/location.reload

與window.open一樣

4 XMLHttpRequest

就是ajax,與axios、fetch相同

const xhr= new XMLHttpRequest()

xhr.open(‘GET’,”)

xhr.send()

xhr.onload = function(){

const blob = new Blob([xhr.reponse],(type:”})

const a = document.createElement(‘a’)

a.href= URL.createObjectURL(blob)

…..

}

MySQL監控常用語法

1 mysql連線數

一、取得mysql最大連線數

show status like ‘Max_used_connections’

二、取得mysql目前開啟的連線數

show status like ‘Threads_connected’

2 mysql 暫存

show status like ‘Innodb_buffer_pool_reads’

show status like ‘Innodb_buffer_pool_read_requests’

show status like ‘Innodb_buffer_pool_pages_total’

show status like ‘Innodb_buffer_pool_pages_free’

(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%

((Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free)/Innodb_buffer_pool_pages_total)*100%

3 鎖

show status like ‘Innodb_row_lock_waits’

show status like ‘Innodb_row_lock_time_avg’

show open TABLES where in_use>0;

4 sql語法

一、慢查詢mysql 語法開關是否打開

show variables like ‘slow_query_log’;

二、慢查詢mysql語法打開

set global slow_query_log=1

三、設定慢sql的時間(秒)

set long_query_time=1

三、慢sql路徑

show variables like ‘slow_query_log_file’;

四、透過慢sql分析工具格式化記錄

mysqldumpslow -s at -t 10 /export/data/mysql/log/slow.log

四.1、取出使用最多的10條慢sql

./mysqldumpslow -s c -t 10 /export/data/mysql/log/slow.log

四.2、取出查詢時間最慢的3條sql

./mysqldumpslow -s t -t 3 /export/data/mysql/log/slow.log

幾個會導致sql變慢的原因

1 子查詢

SELECT FROM t1 WHERE id (SELECT id FROM t2 WHERE name=’hechunyang’);

改用 join ,但update/delete沒作用

2 避免用函數

SELECT FROM t WHERE YEAR(d) >= 2016;

改用 SELECT FROM t WHERE d >= ‘2016-01-01’;

3 用in 取代 or

SELECT FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;

改用  SELECT FROM t WHERE LOC_IN IN (10,20,30);

4 雙%號無法用到索引

SELECT FROM t WHERE name LIKE ‘%de%’;

改為 SELECT FROM t WHERE name LIKE ‘de%’;

5 分組統計可以禁止排序

SELECT goods_id,count() FROM t GROUP BY goods_id;

改為  SELECT goods_id,count () FROM t GROUP BY goods_id ORDER BY NULL;

6不要用無意義的order by

SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;

改為

SELECT count (1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id;

 

.Net 7 開發增進效能的小撇步

預計在2022年11月發布的.net7目前進入RC2的版本。來談談.net7 做了那些效能上的改進~

LINQ部份

1針對max/min最佳化

2針對Average/sum

3新增order/orderDescending 取代orderby/orderbydescending

4 System.IO的改善 WriteAllText改ReadAllText

5 針對Jsonserializer NoCachedOptions提昇

6Guid的 GuidEquals提昇

7ParseBigInt提昇

8ParseBool

9 Stopwatch中的getprocessbyname與getcurrentprocessname

10 在stopwatch加上getelapsedtime取得時間戳