sqlite数据库加密

最好的解决方案是:

1
git clone https://github.com/utelle/wxsqlite3.git

打开里面wxsqlite3\sqlite3secure\build目录下的对应VC工程文件,编译sqlite3shell项目,在wxsqlite3\sqlite3secure\bin-vc12\lib\debug下就为生成的sqlite3shell.exe

加密数据库:

1
2
3
sqlite3shell.exe example.db
sqlite> pragma rekey=123456;
sqlite> .exit

读取数据库:

1
2
3
sqlite3shell.exe example.db
sqlite> pragma key=123456;   <-- 这条语句必须在打开数据库后作为第一条语名执行
sqlite> select * from table1;

自已写的程序中一打开数据库db_,就加一句:

1
sqlite3_key(db_, "123456", 6);

opencv保存内存位图数据到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <opencv2/opencv.hpp>
 
#ifdef _DEBUG
#pragma comment(lib, "opencv_highgui249d.lib")
#pragma comment(lib, "opencv_core249d.lib")
#pragma comment(lib, "opencv_calib3d249d.lib")
#pragma comment(lib, "opencv_imgproc249d.lib")
#else
#pragma comment(lib, "opencv_highgui249.lib")
#pragma comment(lib, "opencv_core249.lib")
#pragma comment(lib, "opencv_calib3d249.lib")
#pragma comment(lib, "opencv_imgproc249.lib")
#endif
 
Mat mat(iHeight, iWidth, CV_8UC3, pData);
Mat yuvMat;
cvtColor(mat, yuvMat, CV_RGB2YUV);
imwrite(path, yuvMat);

No such method QQuickText::setText(QString)

1
bool bRet = QMetaObject::invokeMethod(textLabel, "setText", Q_ARG(QString, "world hello"));

执行这句会报如下错误:

QMetaObject::invokeMethod: No such method QQuickText::setText(QString)

原因是在QQuickText对应的头文件,比如在C:\Qt\5.6.3\msvc2013\include\QtQuick\5.6.3\QtQuick\private\qquicktext_p.h中,setText方法定义前没有Q_INVOKABLE宏。

正确调用QQuickText::setText的方式是:

1
textLabel->setProperty("text", "hi, bingo");

std function 调用成员函数的两种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <functional>
 
class Test124 {
public:
	int Sum(int x, int y) {
		return x + y;
	}
};
 
int main()
{
	Test124 testObj;
 
	// functional1 can be defined using 'auto' keyword instead
	std::function<int(int, int)> functional1 = std::bind(&Test124::Sum, testObj,
		std::placeholders::_1, std::placeholders::_2);
	int result1 = functional1(1, 2);
 
	// functional2 can not be defined using 'auto' keyword instead
	std::function<int(Test124, int, int)> functional2 = &Test124::Sum;
	int result2 = functional2(testObj, 1, 2);
 
	return 1;
}

ON_SCOPE_GUARD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class ScopeExit {
public:
	ScopeExit() = default;
 
	ScopeExit(const ScopeExit&) = delete;
	void operator=(const ScopeExit&) = delete;
 
	ScopeExit(ScopeExit&&) = default;
	ScopeExit& operator=(ScopeExit&&) = default;
 
	template <typename F, typename... Args>
	ScopeExit(F&& f, Args&&... args) {
		func_ = std::bind(std::forward<F>(f), std::forward<Args>(args)...);
	}
 
	~ScopeExit() {
		if (func_) {
			func_();
		}
	};
 
private:
	std::function<void()> func_;
};
 
#define _SCOPE_CONCAT(a, b) a##b
#define _SCOPE_MAKE_SCOPE_(line) ScopeExit _SCOPE_CONCAT(defer, line) = [&]()
 
#undef ON_SCOPE_GUARD
#define ON_SCOPE_GUARD _SCOPE_MAKE_SCOPE_(__LINE__)
 
int main()
{
	FILE* fp = fopen("d:/aa.txt", "w+");
 
	ON_SCOPE_GUARD {
		fclose(fp);
	};
 
	fprintf(fp, "hello, file system.\n");
	return 1;
}

非控制台程序中显示控制台

1
2
3
4
5
6
7
8
9
10
11
void init()
{
	AllocConsole();
	freopen("CONIN$", "r+t", stdin);
	freopen("CONOUT$", "r+t", stdout);
}
 
void fini()
{
	// FreeConsole();
}

HWND绑定用户数据

1
2
3
4
5
6
7
hWnd = CreateWindow(...);
SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)12345);
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	LONG_PTR pData = GetWindowLongPtr(hWnd, GWLP_USERDATA);
	...

sys/cdefs.h: No such file or directory

有一种情况是系统编译器是arm-linux-gnueabihf-gcc,而软件编译需要arm-linux-gnueabi-gcc,这样/usr/include下需要的是arm-linux-gnueabi头文件目录而非arm-linux-gnueabihf目录,所以需要手动指定,比如在cmake的脚本中:

1
2
3
4
5
SET(CMAKE_C_COMPILER "arm-linux-gnueabihf-gcc")
SET(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++")
SET(CMAKE_SYSTEM_PROCESSOR "armv7-a_hardfp")
add_definitions(-I/usr/include/arm-linux-gnueabihf)
add_definitions(-D__ARM_PCS_VFP)

学英语之食物风味

savory 咸味|对比 savior|例: It's a delicious cuisine to be savoured
cured 腌的
authentic 地道的
cuisines 美食|对比 cousin
It got variety in the taste 口味变化多

I would also say that making high end Chinese food is not really the goal. Unlike Korean and Japanese food, most Americans (due to history) don’t see Chinese food as “high end”, they see it as “fast food” so the margins are quite small for the restaurant. Why put in a lot of expensive imported ingredients? It raises cost.

Well, even if you don't have this kind of "bad idea", let me tell you that if you say "American Chinese food", then Chinese food is the most fashionable in both San Francisco and New York. If you say the authentic recipe in China, let me tell you that I'm eating at a Cantonese restaurant in Guangdong and replying to you!

I feel a kind of anger from your answer, so why are you so angry? I'm sure you must be a Chinese or related to the interests of Chinese food!

I can guarantee this with my personality.

We shouldn't be so "arrogant". In the eight years of living in China, I am sorry for my prejudice. Yes, that prejudice still exists in my domestic friends.

We should face the facts bravely, instead of reveling in a lie that doesn't exist, and even ridicule some people who expose the facts!

This is a once in a lifetime chance that I will cherish forever.

There is a bird in the tree, there is a apple on the tree.

学英语之nevertheless

Although such messages contain no data, they nevertheless consume kernel memory.

Jayde Rossi, actress who gave her likeness to female protagonist of Mass Effect Andromeda.

Steve showed me, and all of us, what it means to serve humanity. We miss him, today and every day, and we'll never forget the example he set for us.