Windows SDK 7.1 first appeared in 2010.05. It has been 10 years since then. It was designed as an SDK for Windows 7, and many projects still use Windows 7 as the base support today. This is why these projects still want to use this 10 year old version as the most basic development base.

When Windows SDK 7.1 was released, the expected version of Visual Studio was VS2010, which is why SDK 7.1 projects always require VS 2010 support. This is also why it is so difficult to work with the latest versions of VS (2017 / 2019).

Let’s…


Ryzen Master

最近把自己的AMD平台升級到 Ryzen R7 5800x。赫然發現 AMD Ryzen Master 竟然不支援正(繁)體中文的使用。於是,開始研究如何讓 AMD Ryzen Master (以下簡稱 RM) 支持正體中文顯示。

我們將介紹如何分析UI、如何使用中文翻譯工具來替我們實現自動中文化的過程。所有的 CODE 可以在我Github上找到。

研究UI的建構方式

首先要理解一個 UI 程式中文化方式最好的方法就是分析他的UI建構方法。每個 UI 建構方法都有其特徵。常見 UI 框架,QT、WFP、WxWidget、Chrome Based 都可以很容易得由 Win32 Window Class 來理解。此外,經常使用的自動化工具也能協助完成這些工作。

這邊推薦幾個常用的分析工具:


前些日子,跟兒子們用客廳的HTPC玩起了遊戲。但當初組裝的HTPC以小、薄、低耗能為主。完全沒考慮可以玩遊戲,主要還是做為4K影片播放為主。

但是隨著科技進步,過去所謂的小電腦 (Home Theater PC) 在現在的眼裡根本已經是個大傢伙。想想Intel NUC 現在多小一台啊。重點是價格也非常便宜。而且CPU能力也遠勝我的HTPC。另外,省電也完全輾壓我的HTPC,一台NUC CPU TDP才25W左右,整體只需要65W的電源就能推得動!


多年以來,要開發Android裝置,基本上你只能使用Linux環境來完成這個工作。過去,我基於 OS X 下的 Vagrent 來編譯 AOSP,但是效能與效果非常地不理想。最終,我只好放棄這開發方式。老實的安裝了一套Linux來做做為開發平台。使用 Ubuntu 來開發 AOSP 說真的非常的方便,但是這跟我常用的Windows 與 macOS 開發平台產生了很大的不方便。

Microsoft Love Linux

Microsoft Love Linux

大概誰也沒想到Windows會在2016年迎來一個重大的改變,WSL (Windows Subsystem for Linux)。這很不 Microsoft。Windows 中竟然開始支援 Linux Subsystem。這個改變時在嚇壞了大家,也完全顛覆了人們對於Microsoft的刻板印象。 至於甚麼 Linux …


介紹一個超級無敵好用的 C/C++ 函式庫管理工具。如何使用與安裝可以參考:
https://github.com/microsoft/vcpkg

如果你在Windows上開發C++的專案,想要引用一些開源的代碼,首先你一定是找找有沒有已經編譯好的版本。就算你找到一個編譯好的版本,也常常要面臨該發行的版本是否能正常支援你的C++編譯環境。如果沒有,你的下一個動作就是可能就是要下載原始碼來到你的環境,用你目前的編譯環境重新編譯代碼。但是很有可能,這些開源環境根本無法採用你目前的編譯環境(比方 Visual Studio 2019 C++)來工作。於是乎,你就得開始折騰如何讓這些開源能在你的環境上正常工作。 結果就是,你花了一堆時間,根本都還沒開始觸碰到你真正工作部分。

相信每個人或多或少都有類似這樣的痛苦經驗。然而,這些工作到了Linux環境變得超級無敵容易。

sudo apt-get install clang-4.0 lldb-4.0
sudo apt install -y bc build-essential ccache curl imagemagic

然後,在你的 makefile 引用這些 headers 與 libs 就完成這些工作。這對於在Windows工作的人實在羨慕不已。當然Windows環境自然有其別的優勢。這不是本文的重點。

安裝包的概念,在許多程式語言都是基本功能:

go get -u github.com/xxx/go-curlgo
python pip install
npm install electron

幾乎每個語言都有會自己的內建package管理設計,但是 C/C++ 就是一個這麼原始又固執的語言。他扮演的腳色幾乎就是負責底層與基礎方面的打造工作。

為了解決各種auto make的各自為政,CMake這個工具被提出來,做為中繼與再生成目標make 環境的重要工具。這有點像 LLVM 扮演 IR 與 IL 的過程。隨著越來越多的專案開始支持 CMake,如今幾乎主流的專案都能用 CMake 來完成編譯。

也正因為 CMake 逐步被大多數專案給支持,這也促成了 VCPKG 成為了可能。說了半天,到底VCPKG是甚麼呢? VCPKG 就是微軟為了打造一個類似 Package 管理工具並且能運行於 Windows 下,且與 Visual Studio 完美結合的工具。當然VCPKG的企圖不僅止於 Windows,目前也能運行於 Linux 與 macOS 上。

.\vcpkg install boost qt openssl wxwidgets

上述指令就讓你完成了 boost、QT5、OpenSSL 與 wxWidgets 安裝。回到你自己的專案,你甚麼也都不需要設定,就能直接使用這些代碼了。

#include <boost/interprocess/sync/named_mutex.hpp>
#include <boost/interprocess/sync/scoped_lock.hpp>
#include <boost/interprocess/detail/os_thread_functions.hpp>
#include <openssl/evp.h>#include <openssl/aes.h>
boost::interprocess::named_mutex mutex(boost::interprocess::open_or_create, info->resourcename); boost::interprocess::scoped_lock<boost::interprocess::named_mutex> lock(mutex,boost::interprocess::try_to_lock);
...
AES_set_encrypt_key(user_key, 128, &key) < 0);
...

你幾乎完全不用折騰之前那些繁瑣工作。要知道由原代碼開始編譯一套QT、boost 或是 OpenSSL 是非常累人的工作。而且這些工作,都只是在環境建構而已。何必把時間花在這些惱人的事物上呢!

下次就在自己的專案上用上VCPKG,保證你省下大把的時間!

延伸閱讀:
Vcpkg 線上文件
如何在Vcpkg使用特定版本函式庫
Using Specified Lib Version in Vcpkg


Vcpkg is a Microsoft C and C ++ library management solution on the Windows platform. Of course, Vcpkg can also run on Linux and Mac platforms. However, these two platforms already have their own default library system, so I think most developers are unlikely to use vcpkg as their own library management.

On Windows, there is always a lack of a unified Library Manager. We always use case by case way to solve libraries installation. In addition, Windows does not have a unified compilation environment. It is fundamentally different from the way of unix, you can’t use a makefile to…


Vcpkg 作為微軟在Windows平台上的函示庫管理方案。當然Vcpkg也能運行於Linux與Mac平台上。只是這兩個平台上原本就有unix系統上與生俱來的庫管理系統,我想多數開發者都不太會使用vcpkg作為自己的庫管理工具。

在Windows上,一直缺乏統一的Library Manager。所以幾乎都是採用Case by Case的方式運作。此外,Windows也沒有統一的編譯環境。或者說與unix的方式有著本質上的不同,你無法用一套makefile來完成所有工作。總之,一切運作起來總是顯得格格不入。Vcpkg就是這麼一個為了解決此問題而提出的重要工具。

致命缺點:不具備版本管理

然而,嚴格來說,Vcpkg並不是一個完善的解決方案。至少我不這麼認為。他有著一個非常致命的缺點-他不具備版本管理的功能。這個缺點非常 …


每年到了某個時候,總是會讓人再度想起這個時代的眼淚。對於他不僅僅是懷念更多是不捨與同情。不知怎麼了,每年我總是會再把這語言拿出來使用一番。說真的,在那年代,這樣的語言,那樣的平衡性,實在讓我太喜歡了。

Modernizing the VB6 IDE, https://i.imgur.com/Yn4N58j.jpg

最近拜讀了LinkFX 在vbforums發表的 Modernizing the VB6。實在大為激賞。誰能想到2020的今日,VB6還能談及 Modernizing。藉由VB6可擴充套件,不斷地增強與強化VB6的生命。當然這最重要的部分就是 CodeSmart 這個超強擴充套件。讓VB6的IDE看起來一點也不輸給現在的IDE工具。

Modernizing VB6 具備了那些特性呢?

  • IDE體積小。一個VB6的開發工具Portable 版本,只有約10MB左右的大小。壓所後,更是僅有5MB左右。

Recently, my network software encountered strange security issues. The vulnerability testing software showed me that it can gain access to protected resources without authorization.

Access Protected Resource

I have a protected resource:

https://ip/secured/neverseen.txt

If you try to access “https://ip/secured/neverseen.txt”, it will redirect to authorization page. Everything looks fine.

https://ip/./secured/neverseen.txt

When you try to access “https://ip/./secured/neverseen.txt”, it is still okay. According the RFC 3986, the “.” will be normalized so that client will send “https://ip/secured/neverseen.txt”, too.

Of course, the web access shouldn’t depend on client side to sent standard URI request. I try to use “curl” to test the issue again.

Test with curl Tool

curl https://ip/./secured/neverseen.txt


I am looking for a super fast USB disk as a replacement for my portable hard drive. The normal USB flash drives are not a good enough. See Tom’s Guide’s Best USB drives 2019 documentation, the fastest USB drive is about 400MBps Read/Write. This is not the ultra-fast portable drive I want.

Instead of looking for USB flash drivers, I find the new NVMe USB controller could be the only hope for me. The NVMe external enclosure installs a USB NVMe bridge controller so that you can install your NVMe M.2 …

Allen Kuo (kwyshell)

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store