上一篇提到 MySQL 在 5.6 版後提供 mysql_config_editor 這支 utility 讓使用者可以產生/修改加密後的 config file (或者叫做 option file),但是很奇怪的是官方提供的 API 不管是 C 或 Python 都不吃加密後的 config file。後來經過多方查詢研究後發現 python 有一個 package 叫 myloginpath 可以把加密後的 config file 解成明文,基於 python 沒秘密,所以這邊就來整理一下這弱到爆的加密方式
2018年10月4日
2018年10月2日
[MYSQL] C/Python Connector API for MySQL
MySQL client 登入時可以藉由提供一個 option file (比方說 .mylogin.cnf) 並且在裡面寫好 user / password / host 等資訊後,登入時直接使用 option file 連上 MySQL server。不過 option file 因為必須是明文,自然會有風險。只是 MySQL 自 5.6 版以後提供了 mysql_config_editor 這支 utility 讓使用者可以把 option file 加密 (目前看到的資料好像是會用 AES 128bit 加密) 來避免這個問題。
想當然爾,MySQL 也必須提供 API 讓使用者可以藉由這些 API 直接使用這些加密後的 option file 連上 MySQL server。這邊介紹的是關於官方原生提供的 C/Python API 上的狀況。
2018年10月1日
[C++] A Simple Wrapper on A Non-Thread Safe Container for Thread Safety
大部分的 container 像是 STL 的所有 container 通常都不是 thread safe 的,因為如果要做到 thread safe 的設計多半都要犧牲一些效能,但是大多數情況其實我們不會需要這種設計,因此不考慮 thread safe 對於這類考量泛用類型的架構是合理的。當然如果一開始就有考慮做成 multi-thread 的架構,也有許多 thread-safe container 可以使用,像是 Boost 或是 Intel Thread Building Block (TBB)。
但是假設今天用了 STL 的 container 後一段時間才想要改用 multi-thread 架構的話要怎麼辦?方法大致上就 2 種:
- 換掉 container:不過多半連既有程式的使用方式也要跟著做修改
- 想辦法把原本的 container 改成 thread-safe
第 1 點當然會是比較保險的,但是換 library 是大事,特別是如果想用的 library 沒有對應的 API 可以對回去原本 library 的用法那就很麻煩了。所以這邊提供第二種方式:增加一個 wrapper,在盡量不改變 usage 的情況下提供 thread safety。
2018年9月23日
[C++] A thread-Safe Bounded Queue Based on STL Container and C++11 Threading Library
要寫一個平行化的程式通常多半免不了需要一個 thread-safe 的 container,很不巧的是 STL 並沒有提供一個 thread-safe 的 container。雖然通常純讀不修改多半是可以 thread-safe,但如果要允許同時可讀又可寫就需要自己想辦法了。
這篇就是自己想辦法用 STL 的 container 生了一個 thread-safe 的 bounded queue。用 STL container 當基底純粹是因為我懶得自己做記憶體管理 XD
2018年8月24日
[C++] Lazy Evaluation for Function Argument
C++ 的 function call 在傳參數進去時基於一些因素會把所有參數都拿到最後的結果後才進入 function 本體去執行。比方說,傳進去的參數是一串四則運算時,會先算出最後的結果;如果也是個 function call,那也會先把 function call 執行完畢拿到結果。
在某些情況下如果我們知道其實進入 function 後根本不會用到這些參數的內容時,做這些計算其實就會變成浪費時間了。因此,最容易想到的解法是,有沒有辦法把這些運算的過程延遲到我真的需要時才讓他執行?
在某些情況下如果我們知道其實進入 function 後根本不會用到這些參數的內容時,做這些計算其實就會變成浪費時間了。因此,最容易想到的解法是,有沒有辦法把這些運算的過程延遲到我真的需要時才讓他執行?
2018年8月21日
[C++] Use std::condition_variable for Parallellism
C++11 開始 STL 就提供了 thread library以便寫平行化的程式,condition variable 簡單來說就是用來控制流程用的,他允許我們在過程中透過 condition variable 來決定是否要 block 某個 thread 等待另一個 thread 完成工作,也可以透過 notify 去讓一個 (或多個) 正在等待 thread 繼續往下執行他們的工作。
2018年8月9日
[C++] Compile-Time if in C++17 Can Have Code Not Able to Be Compiled with Regular Runtime if
Compile-time if 在 C++17 中也算是一個滿有趣的特色,其特點就在於能夠在 compile time 就幫你確認清楚 if statement 中會執行到哪一個判斷式對應到的區塊,從而把其他一定不會用到的區塊 "拔掉"。這點在現在電腦上算是個滿有用的特色,畢竟現在 CPU 的 branch prediction 一定錯誤通常都要承擔不小的後果 (註)
原本我以為 compile-time if 只是針對一些能在 compile-time 就能推知結果的運算做優化 (特別是在 template 上),結果今天看到一個例子才發現這玩意兒比想像中更猛,甚至能夠寫出一些原本 regular runtime if 做不到的功能。
2018年7月17日
[筆記] 狂歡西班牙 - 上課筆記
事情是這樣的,有一天在 Coucou穀穀你好 法式小食舖 上看到老闆娘為眾人著想(想不開)跟 Mia 老師 合作要開課,教的內容有包含前菜、主菜、甜點各一道。想說機會難得就找了一堂課去上了,所以下面就是上課的內容跟一些簡單筆記了。
2018年7月2日
[筆記] google perftools (gperftools) - 安裝與超簡易使用說明
google perftools 簡單來說就是一套用來做 memory 跟 CPU (也就是 runtime) 的 profiling tool,基本用途有三個:heap profile,單純每個看 component 的 memory 使用量;heap checker,用來檢查有沒有 memory leak;以及 CPU profile,用 sampling 的方式去探測 CPU 的使用量。這東西最大的優點就是幾乎沒有 overhead。所以比起直接用 valgrind 去跑,可以考慮先用 gperftools 先做簡單的 profiling 粗略掃描,有必要更深入檢測的話再丟給 valgrind/callgrind 去細部檢查。
2018年6月26日
[C++] prvalue sucks!
最近在看 YouTube 上的這部影片解釋 object, lifetime 還有 reference 相關的內容,裡面有個有個關於 prvalue 的範例讓我有點驚訝,驚訝地點在於 C++ standard 對於標準有定義的型態 (像是 primitive type) 跟未定義的型態 (像是 struct 或是 class) 有完全不一樣的行為,但為什麼會這樣定義卻想不通 = =
訂閱:
文章 (Atom)