發表文章

目前顯示的是 9月, 2018的文章

我安裝的 Firefox extensions

多數在其他瀏覽器應該也有 (因為webextension容易移植) 裝越多會消耗越多資源,不常使用的可以安裝後關掉 (disable) uBlock Origin 有名的擋廣告,優點是記憶體用量比較小 必備,安裝後可減少Firefox使用的資源量,加快網頁載入 Update Scanner 檢查網頁有無更新 Rotate and Zoom Image 旋轉,放大圖片 Video DownloadHelper 下載影片用,youtube等各平台 Open Multiple URLs 想一次開多個網頁? ex: 文字檔紀錄遊戲相關網頁一次全開 Country Flag + 看網站是在哪個國家 Tab Reloader ClearURLs 強化隱私,清除網址追蹤 (ex: google...etc) Search by Image 找圖片來源,可設定用多個網站 修正google search的連結 https://addons.mozilla.org/firefox/addon/google-search-link-fix YouTube High Definition YouTube背景播放 (Android限定) 死掉的extension ,還沒等到新版 Tab Mix 我寫的extension Youtube audio_only youtube只收聲音/只播放聲音 https://craftwarblog.blogspot.com/2017/11/firefoxchrome-extension-youtube.html Android也支援(建議安裝背景播放,85還不給裝,要等firefox開放安裝,不想等就用nightly版) Last Used Tab 回到上一個使用的tab https://craftwarblog.blogspot.com/2020/10/firefox-return-to-the-last-used-tab.html

改成 Message Signaled Interrupts(MSI) 減少latency 提高顯卡效能

圖片
說明/介紹 https://en.wikipedia.org/wiki/Message_Signaled_Interrupts https://forums.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts.378044/ https://www.reddit.com/r/GlobalOffensive/comments/3q0d3u/a_little_help_for_performance_issues_on_cs_go/ MSI工具程式 https://github.com/CHEF-KOCH/MSI-utility 原來源好像死了備份連結 https://mega.nz/#!U9cChaYa!QnqyHutZFvkFHiZ1gDELcvqz_efDdGFYSXI2uTFtRbE 好像是新的Interrupt方式,Nvidia的卡driver預設沒有打開,AMD的聽說有 舊的是 line-based interrupts 打開後會稍微降低延遲,提高效能 使用方式用管理者執行,把要開的裝置MSI打勾就行了,設定完按Apply重開機 如果裝置不支援,有可能無法開機,請先備份系統或是先確認裝置有支援 好像開不了機可以按F8選上次的設定開進來 ? 建議測試確認開啟前後的差異,再決定要不要使用 有些裝備開了反而效能會降低 (因為不支援?) IRQ顯示為負值的就是已經用MSI mode運作中了 我只把顯卡打開,其他都是預設值 重裝過driver,可能需要再打開一次

Windows上播放器的硬體解碼設定 Lavfilter/VLC, D3D11/DXVA, hardware decoder

圖片
參考資料 http://lysandria1985.blogspot.com/2013/01/2-lav-filters.html 硬體解碼的效能一般會比較好,因為有特製化解碼用晶片 品質和軟解沒有差別,除非你有使用後續處理 (post processing) 缺點是根據硬體解碼的能力會有差別,不是所有影片都能解 顯卡太老舊的情況下,用CPU軟解會比較好 h264都只支援8bit,nvidia10系列後才有其他格式(比h264新的格式)非8bit的支援 https://www.tomshardware.com/reviews/video-transcoding-amd-app-nvidia-cuda-intel-quicksync,2839-5.html tomshardware的說法: 只有顏色上有差異,肉眼很難分辨出來 (2011年資料) 現在技術改進應該差異更小 Nvidia的硬解能力 (看下面的NVDEC Support Matrix) 或是用 DXVAChecker 檢查 (各廠牌顯卡通用,只檢查DX硬體加速) Lav filter內可選用 顯卡特有解碼 (不用GPU運算) Nvidia Cuvid IntelⓇ QuickSync AMD? 不熟,沒看到選項 顯卡通用的硬體解碼 (要用GPU運算) DXVA(2) D3D11 DXVA和D3D11的選擇 Win8以後系統建議使用 D3D11 Video Acceration (DXVA2加強版) 舊的系統沒有DirectX 11.1 (Win7或更早) DXVA2 (沒有D3D11 Video Acceration可以用 ) 有兩種模式 native和copy-back https://en.wikipedia.org/wiki/DirectX_Video_Acceleration#DXVA2_implementations:_native_and_copy-back copy-back會在顯卡解碼完後把資料從顯卡VRam copy回CPU的memory 要做後續處理的才需要,否則用native解碼完直接輸出會比較快 設定範例 Lavfilter (mpc-hc有內建) 不支援的情況下會自動變軟解 (勾了不支援的

C/C++ 的差異

基本上C++是C的強化版,C能用的C++都可以 (有少數例外) C static function是指function只能在檔案的scope存在 C/C++ const convention https://en.wikipedia.org/wiki/Const_(computer_programming) C++變數可以要用再宣告,可以省記憶體 (也許程式沒執行到那邊),但降低可讀性 data和使用的地方接近也可增加效率 C要宣告在最前面 C才有VLA (Variable-length array) Names at file scope that are const and not extern have external linkage in C (as the default for all file-scope declarations), but internal linkage in C++. boolean C Bool, 4 bytes C++ bool, 1 byte

C++ smart pointer

std::unique_ptr比起自己管理在memory和speed上會有可忽略的overhead destructor會check pointer是不是nullptr (某些內建釋放的function原本會檢查就變兩次) 如果在scope內自己管理,可能要寫好幾個delete 會增加code size,有可能讓CPU cache miss減低效能 主要優點是程式碼會簡潔多了,也比較不容易出錯 array type要注意用 [],否則deleter是沒有[]的,應該會有memory leak https://github.com/obsproject/obs-studio/commit/f775070c809b296333dfa1e07643b6fc31938644 改用std::make_shared, std::make_unique 避免使用new是好習慣 用在C或其他的deleter std::unique_ptr<char, decltype(&std::free)> str(std::malloc(20), &std::free); GCC extension cleanup attribute (可以給C用) CLANG好像也有 https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html https://echorand.me/site/notes/articles/c_cleanup/cleanup_attribute_c.html MSVC輸出asm的方法,可以比較不同寫法產生的結果 https://docs.microsoft.com/en-us/cpp/build/reference/fa-fa-listing-file asm的 npad    5  = repeat nop   參考資料 https://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/

When MSDN says NULL, is it okay to use nullptr?

https://blogs.msdn.microsoft.com/oldnewthing/20180307-00/?p=98175 結論上來看,如果是需要pointer的地方可以用nullptr 但是NULL有另一個意義,可能是 integral constant zero,這時候nullptr就會出錯

C/C++ malloc 只要失敗會crash就不用鳥,反正程式會自爆?

圖片
https://github.com/obsproject/obs-studio/blob/797b3dc1211c674ccf6cd8b162b144bb615bd233/libobs/util/darray.h#L398 static inline void darray_move_item(const size_t element_size, struct darray *dst, const size_t from, const size_t to) temp = malloc(element_size); temp會被拿去給memcpy用 總之OBS那邊的回應應該是不必處理就是了,教材一般不是這樣教的 想想是有幾分道理,也不是全部情況都適用 只要失敗的情況不會讓程式在不確定下運作就可以考慮忽略 不值得寫回復/重試機制的就讓它爆炸? performance critical部分就省略,否則會影響效能 畢竟失敗的情況下是少數,和影響效能相比哪個比較重要很清楚了

Android/PC 共用/分享 網路/顯示畫面,share network and display

Android使用PC的網路 https://github.com/Genymobile/gnirehtet PC使用Android的網路 Android打開網路分享就可以了,建議用usb連線會比較省電 分享Android畫面 (不限定到PC上) 有些軟體不分享聲音,要另外接線輸出到電腦line in (輸入) Android 7~9因安全性規定,無法錄內部聲音(internal audio) 除了某些廠牌有修改開放,軟體只能透過Mic錄音,或靠破解 (root/magisk之類的) 似乎Android 10有重新開放? 待查證 scrcpy, 沒有傳聲音 https://github.com/Genymobile/scrcpy This application provides display and control of Android devices connected on USB (or over TCP/IP). It does not require any root access. It works on GNU/Linux, Windows and MacOS. asus 5z測試過用wifi連線,畫面經常性小lag ApowerMirror Mobizen LetsView 似乎把手機影音打到另一個螢幕/電腦的功能還沒有統一標準? Miracast,似乎要有無線網卡才可以? laptop似乎有內建 由於是wifi網卡的功能,iphone應該也可以用 https://support.microsoft.com/zh-tw/help/15053/windows-8-project-wireless-screen-miracast Chromcast 要有支援chromecast的裝置才可以 MHL https://en.wikipedia.org/wiki/Mobile_High-Definition_Link 錄音Internal audio https://appuals.com/how-to-record-internal-audio-on-android/ 實況 https://forum.xda-developers.com/android/genera

CI/CD

https://azure.microsoft.com/en-us/blog/announcing-azure-pipelines-with-unlimited-ci-cd-minutes-for-open-source/ http://appveyor.com/ job build time都是30min M$的好處是可以同時執行多個job 更新頻率大約都是一個月?

C99 VLA (variable-length array)

https://github.com/obsproject/obs-studio/pull/1465 OBS pr看到的,效能會比較差 (可簡化程式) C99必要,C11又改成非必要的功能 VLA長這樣 size_t dev_len = strlen(name) - 8; char device[dev_len];

Windows 更新 不支援的硬體 解法,Unsupported Hardware

某些Windows 更新擋,會加入硬體檢查 應該是 KB4012218 和 KB4012219 (對應Win7和Win8.1) 太新的CPU會不讓你更新,強迫你升級Win10 (太舊的CPU據說也有被影響) 建議還是升級的新的系統,才能利用到CPU完整的功能,否則效能會比較差 Win7微軟已不繼續支援,建議更新到Win10,才不會有安全性上或其他問題 安裝這個破解就能繼續更新了 https://github.com/zeffy/wufuc 原理 這個檢查是用 wuaueng.dll 提供的function,破解會修改成永遠回報ok,就能更新 由於是開放原始碼的,安全上應該無虞