裝了 YCM 後知道寫 C# 跟 C++ 會自動完成很好用, 最近再找 html/css 自動完成才發現 YCM 可以跟 vim 內建的 html/css Omnicomplete 結合, 不用再裝其他 plugin 就可以做到 html/css 自動完成, 只要在 vimrc 裡面加上下面 config 就好
let g:ycm_semantic_triggers = {
\ 'scss,sass,css': [ 're!^\s{4}', 're!:\s+' ],
\ 'html': ['<', '"', '</', ' '],
\ }
在這邊還有人貼出更多的 language support
2017年4月19日 星期三
2017年4月15日 星期六
RS232 接頭
RS232是序列通訊傳輸用的接頭, 有分 DB9 跟 DB25 兩種, 現在大部分的儀器通訊介面應該都會走 usb 比較多, 但是一些比較老的設備還是會用 RS232, 不過目前見過的都是用 DB9, 還沒見過用 DB25 的
DB9 pin 腳定義
實體長相
DB25 pin 角定義
實體長相
DB9 pin 腳定義
實體長相
DB25 pin 角定義
實體長相
grep 出現 Binary file (standard input) matches
在用 grep 時出現 Binary file (standard input) matches 這個錯誤, 看起來像是從 standard input 讀到 binary file 所以不能做 grep, 但我很確定我是餵文字檔給它吃
後來發現加 -a 參數就可以掃 binary file, 用了之後發現是中文, grep 看不懂中文就會以為掃到 binary file
後來發現加 -a 參數就可以掃 binary file, 用了之後發現是中文, grep 看不懂中文就會以為掃到 binary file
2017年4月12日 星期三
C# 確保 event handler 只註冊一次
有時候不確定 event handler 是否已註冊到某個 event 中, 這時可以先 remove 一次再 register, 因為即使 event handler 沒有註冊過也是可以安全的 remove 的
恩, 是個很實用的方法
obj.MyEvent -= MyEventHandler obj.MyEvent+= MyEventHandler
恩, 是個很實用的方法
2017年4月10日 星期一
C# virtual com port 無法接收資料
最近在 C# 中用 SerialPort 這個 class 來打開一個 virtual COM port, 並跟一個裝置溝通, 但怎麼樣都無法從裝置中收到資料, 後來發現要設定了 RtsEnable 這個屬性為 true, 才能收到資料
估狗了一下, 在這裡有寫到 virtual COM port 這個屬性要設為 true 才會觸發接收資料的流程, 在 stackoverflow 也有人寫到應該設定 HandShake 為 RequestToSend, 讓 driver 幫你設定適合的 RtsEnable 值, 測了一下只設定 HandShake 的確也是可以收到資料
猜測比較有可能的原因是 virtual COM port 會需要這些設定, 因為網路上也有一些用 real COM port 的例子是不需要設定 RtsEnable 的屬性就可以接收資料
估狗了一下, 在這裡有寫到 virtual COM port 這個屬性要設為 true 才會觸發接收資料的流程, 在 stackoverflow 也有人寫到應該設定 HandShake 為 RequestToSend, 讓 driver 幫你設定適合的 RtsEnable 值, 測了一下只設定 HandShake 的確也是可以收到資料
猜測比較有可能的原因是 virtual COM port 會需要這些設定, 因為網路上也有一些用 real COM port 的例子是不需要設定 RtsEnable 的屬性就可以接收資料
2017年4月7日 星期五
用 python 剪輯影片
markdown
想要從影片檔中剪一段出來, 用 python 就可以輕鬆辦到, 不過要先下載 moviepy 套件, 只需要幾行 code 就可以將你想要的片段剪出來
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip ffmpeg_extract_subclip("video1.mp4", t1, t2, targetname="test.mp4")moviepy 套件其實背後是使用 ffmpeg 這個強大的工具, 如果你沒有的話, moviepy 也提供了 API 去下載它, 下載後會存到 C:\Users\[user_name]\AppData\Local\imageio\ffmpeg\ 目錄下 ffmpeg 的功能非常多, 若是不想用 python, 直接用這個工具, 也可以做到編輯影片的功能
2017年4月4日 星期二
C# 的 event, delegate, System.Delegate 解析
C# 寫了一段時間, 但幾乎只用過 delegate, 對 event, delegate 之間的關係一直很模糊, 甚至 System.Delegate 類別也不知道是做甚麼用的, 故先在這裡記錄一下
上面這段 code 宣告了一個名為 MyDelegate 的型別, 所以可以用 MyDelegate 來 create 變數 d, 並且可以用 () 運算子直接呼叫, 概念上跟 C/C++ 的函式指標很類似
event 是用來修飾 delegate 欄位的修飾詞, 被 event 修飾過的 delegate 欄位, 本質上還是 delegate, 但實際上 compiler 會幫你把這個欄位加料, 變成類似屬性的用法, 讓 User 使用這個欄位時多了一些限制, 例如 event 欄位不能用 = 賦值, 只能用 +=, -= 去註冊或註銷你要掛上去的 event handler
所有的 delegate 類別都會繼承這個類別, 它定義了一些 delegate 都會用到的功能, 例如 Combine 和 Remove, 但我們不該, 也應該沒有機會直接使用他, 通常是 compiler 會用到
delegate
public delegate void MyDelegate(); MyDelegate d = () => { }; d();
上面這段 code 宣告了一個名為 MyDelegate 的型別, 所以可以用 MyDelegate 來 create 變數 d, 並且可以用 () 運算子直接呼叫, 概念上跟 C/C++ 的函式指標很類似
event
public delegate void EventHandler(object sender, My_EventArgs args); public event EventHandler Click;
event 是用來修飾 delegate 欄位的修飾詞, 被 event 修飾過的 delegate 欄位, 本質上還是 delegate, 但實際上 compiler 會幫你把這個欄位加料, 變成類似屬性的用法, 讓 User 使用這個欄位時多了一些限制, 例如 event 欄位不能用 = 賦值, 只能用 +=, -= 去註冊或註銷你要掛上去的 event handler
System.Delegate
所有的 delegate 類別都會繼承這個類別, 它定義了一些 delegate 都會用到的功能, 例如 Combine 和 Remove, 但我們不該, 也應該沒有機會直接使用他, 通常是 compiler 會用到
訂閱:
文章 (Atom)