2019年1月24日 星期四

[線性代數]以SVD處理已知兩點求直線系數


學完線性代數的這幾年間,漸漸褪去國中數學的直覺式幾何思考,的確,在處理幾何問題上,相較歐氏幾何的邏輯,線性代數的公理化思考很抽象,很不好傳達給其他人理解,也要三不五時複習一下,咬文嚼字規格間的邏輯關係與意義,不過倒是越嚼越有味(齁假

但也正是如此,線性代數作為以公理出發推演而生的一套思考系統,在運用時可以避免處理問題時陷入案例列舉,這個的思維性質,尤其在軟體系統裡要追求一致性高的實作時,乃至撰寫測試案例,採用線性代數的處理手法相較於直覺式幾何思考,目前我仍認為是比較強健的方法,可以避開許多誤區,不用透過案例窮舉來檢視演算法的可靠度,因為先賢先烈們已經用許許多多的數學證明完善了邏輯上的縝密性


----------------------------------------戰鬥開始


2019年1月20日 星期日

[自動化工程]馬達功率的快速粗略選定攻略

羊毛出在羊身上
-到底是誰說的?

從上圖釐清,根據能量守恆的概念,對於一物體,在其加速過程中,功率即是當前推力與速度的乘積,而產生此動力的源頭就是馬達(電能-動能轉換裝置),傳動機構在之中只是扮演轉換的角色,不增加/減少能量(理想狀況)

因此,我們可以先忽略馬達(動力源)至移載物之間的傳動關係,光是從移載物質量、加速度、最高速...等參數,反推估加速段所需功率,就可以推估出所需馬達額定功率;接著再根據馬達特性(額定轉速,額定扭矩),細部設計傳動機構,調整轉速/扭矩轉換後的比值


2019年1月3日 星期四

[自動化工程]螺桿推力計算

做個螺桿扭矩轉推力計算心得,採用自己比較習慣的思路,雖說習慣但一陣子沒用還是會忘記,沒事寫個筆記磨磨槍:

-------------------------------主要採用能量守恆觀點-------------------

2018年12月30日 星期日

[自動化工程]所需馬達扭矩計算-以輸送帶系統為例-概念

宅哥常在工作場合聽到:

這組機構400W馬達應該夠力吧?以我的經驗應該用100W就夠了!感覺這個這麼重,應該要來個750W!

這樣的討論內容有點愧對工程師這個頭銜,18 19世紀各種偉大科學家也都一併擁有冠上工程師這個頭銜呢,我們雖沒有這樣的才智好歹也要追求這樣的精神,更何況我們面對的問題好像僅是牛頓第二定律?多點數學少點感覺Let's go

2018年12月21日 星期五

[C/C++][STL][C#]集合處理筆記

標準模板函式庫(STL)Wiki:

STL 將「在資料上執行的操作」與「要執行操作的資料分開」

對於構築集合處理的方式,.NET與STL思想上略有小小不同。

NET趨向物件導向想法(結合資料與操作成為一物件),將集合操作用函數以成員函數形式(member function)附屬在樣板容器之下,相當於在集合操作用函數中隱含(implicity)帶入自身參考。

.NET集合操作用函數無法直接帶入函數指標,而是要帶入委派(delegate),建立對應操作的委派的方式之一:

2018年12月11日 星期二

[Qt]分離Ui執行緒與Worker執行緒


有時候為了增進Ui的響應速度,不得不把例行工作,尤其那些需要定時呼叫或狀態控制的工作,移到背景執行緒,形成雙執行緒的工作架構(基本上就是自動化產業的101招):

  • 主執行緒(Main thread)負責Ui的訊息迴圈,捕捉使用者事件如滑鼠點擊,鍵盤按下等等
    • 通常開發框架都幫忙搞定好訊息迴圈架構了,我們只需要填寫各事件的處理常式
      • 心得:處理一圈迴圈的延遲能在100ms內搞定,使用者基本上會感覺流暢

  • 背景執行緒(Working thread),可能就負責收集外部I/O的資訊,內部物件狀態控制,等等...與介面無關的工作
    • 時脈上就與使用者的反應無關,這個執行緒Looping的速度盡量越快越好
      • 心得:處理一圈的延遲能在10ms內搞定,順序控制在大部分應用情況不會太糟

2018年12月2日 星期日

OpenCVSharp@MACOS 安裝步驟

步驟大致參考此,另外註記心得
https://github.com/shimat/opencvsharp/tree/master

OpenCVSharp只是opencv的C# wrapper,所以本機上必須要有opencv套件+opencvsharp
,需要特別注意版本對應問題,本篇針對opencv4.0.0做紀錄

2017年10月11日 星期三

[Raspberry PI][Flask] 土炮MJPG Stream

WIKI
Motion JPEGM-JPEGMJPEG,Motion Joint Photographic Experts Group,FourCC:MJPG)是一種影像壓縮格式,其中每一影格圖像都分別使用JPEG編碼。
或許是實作上相對單純好理解,據說MJPEG常用在網路攝影機(IP-Camera)等相關的應用,由於也是相對古老的實作方式,大多的瀏覽器都支援.mjpg格式;在網路上最常被提到的知名套件是MJPG-Streamer ,在輕鬆的設定播放相關參數後可以輕易的將你的攝影機影像投到網頁上.

今天練習用flask實作簡單的mjpg-streamer,算是練練python還有學習一點html與http的概念:

2017年9月25日 星期一

[Blogger][Javascript] 在撰寫區標記Google Prettify區段

Google prettify簡單又好用,只是在Blogger內貼程式碼時,還要手動轉到HTML頁籤在落落長的HTML元素裡找到正確排版位置、透過HTML Escape跳脫字元、自己標記<pre class="prettyprint">...</pre>...有點麻煩

2017年9月21日 星期四

[VS Code][C/C++] 基本開發環境設定


這次輪到在VS Code上開發C/C++程式,被宇宙最強IDE Visual Studio寵壞的關係,一開始搞不清楚到底在設定什麼東西,最後終於搞懂幾件關於VS Code的機理:

2017年9月20日 星期三

[VS Code][Bash Shell Script] Debug環境設定


Shell Script也是可以Debug的,下斷點、看變數內容...都可以,VS Code配來寫Shell Script也是很下飯,記錄一下環境設定

2017年9月18日 星期一

[LINUX] 跨網域連接NFS伺服器 - Part2 - 透過ssh tunnel連接NFS

透過Part1,example.ddns.net:22已經開通,通過這個連接點再配合Virtual Server連接到內網伺服器進行ssh登入,可以開始在異地登入ssh替伺服器做設定

2017年9月17日 星期日

[LINUX] 垮網域連接NFS伺服器 - Part1 - 設定DDNS與Virtual Server


目前有某台CentOS主機放在老家作為個人小伺服,硬碟裡面收藏了無數家珍(嘿嘿),只是就算開了NFS服務(Network File Systme)也只能在老家的區域網路內使用,回到租屋處該怎麼透過網際網路連回去呢?

2017年8月2日 星期三

[.NET] 流(Stream)的改變輸出入導向


衍生(Dervied)/聚合(Composited)流(Stream)的類別,具有流的輸出入能力,透過這個基礎介面,我們可以用來銜接不同類型的輸出入裝置,不需要實作任何轉換細節,對呼叫端而言只管將字串資料輸出入,可以把流看成某種程度的抽象化硬體

2017年7月30日 星期日

[.NET][Python] 集合處理筆記

Wiki
MapReduce is a programming model and an associated implementation for processing and generating big data sets with a paralleldistributed algorithm on a cluster.
集合之間的轉換,與元素操作是資料處理的日常,第一次認識MapReduce概念其實是從Python來,但發現.NET也有等價的處理(從Stackoverflow發現,搜尋"Python Map Equipvalent in c#"):

2017年7月26日 星期三

[Blogger]文內插入Latex(Mathjax)

紀錄一下如何在Blogger中插入Latex,用到的Javascript來自mathjax,他的說明提供了很簡要快速的步驟:

2017年7月22日 星期六

[.NET] 流(Stream)的理解心得


Wiki說得好:
「流」是一連串從I/O設備讀寫的字符(Byte)

流(Stream)是.NET中非常基礎的型態,存取方式是很單純的位元組依序寫入/讀出(Byte by Byte Writing/Reading),會有一個內藏Counter紀錄住目前存取位置(Position,有點類似座標),存取時都是從目前位置開始存取.

若將整個讀取完畢的Stream攤平開來,也是可以想像成時域信號圖,橫軸是位置,只是要確定好座標原點(Origin)在何處

跟位元組陣列有著類似的概念,只是位元組陣列可以隨機存取:給定INDEX存取,座標原點就是第一個元素,只需一個存取動作:給定INDEX後返回該位置的資料;若要做類似隨機存取操作,Stream必須先透過Seek改變目前位置,才能開始存取,因此需要兩個存取動作:改變目前位置、存取資料

Stream存的個別元素是位元組,也就是0-255之間的一個數值,可以說是資訊系統內超級底層的資料型態之一,也就是說Stream是一種極為基礎的資料儲存結構;任何的高階資料型態(物件、字串)都能轉換成位元組形式去表達(某種映射):

  • 物件-位元組轉換(物件與位元組之間的映射)
    • 序列化與反序列化(Serialization/Deserialization)
    • 而反序列化/序列化則是互為反函式(Inverse)

  • 字元-位元組轉換(字元與位元組之間的映射)
    • 按字碼表Encoding/Decoding
    • 線性映射?
Stream的資料表達方式容易直接轉化為現實上的物理資料傳輸,舉凡磁碟資料寫入(File)、網路資料傳輸、通訊埠資料傳輸,都是出口Stream(Out-Stream)內按位元組取出,轉化成位元(1/0)脈衝信號後在物理層一點一滴傳達;接著在目標系統物理層中收集這些脈衝信號還原成位元組,按位元組一個一個塞進目標系統的入口Stream(In-Stream)中

後續應用就視情況看是要透過反序列化還是Decoding,轉換成更高階的資料表達型態

.NET的類別規劃上,可以在相關的硬體抽象物件找到Stream的身影,好比說以下衍生自Stream的型別:
既然都是Stream,肯定是有共同性質的:)後續研究學習

參考:這系列對於Stream介紹蠻不錯