微信公众号订阅人数突破1000人,更新帮助&调整显示

四天以前我发帖子从公共号数据看STEEMIT中文区,公众号的关注人数是993人,今天去后台一看,哇终于突破了1000人大关,达到了1020人,真的是可喜可贺。

其实公众号我有好多想法想实现,理论上也可以实现,但是现在玩点其它的东西,一时半会没功夫去弄公众号了。这就是到处挖坑的弊端啊。坑挖得多了,连自己都坑。

不过为了庆祝突破1000人大关,还是要略作维护,时不时地刷刷存在感还是很有必要的,否则万一你们把我忘记了呢。

帮助内容

info 指令

公众号增加info指令已经很久啦,但是帮助信息一直没有同步更新。这次要加上。

info 查询STEEM区块链信息

见证人相关

公众号增加了很多见证人相关的信息,比如查看见证人的基本信息、查看排名状态(实际排名)、查看见证人在线状态以及收益等等。

尽管增加了N多见证人相关内容,但是为了使用方便,通通塞到一条指令中,嗯,这个也要更新到帮助列表中。

@steemid?w 查询见证人相关信息

其它功能

至于查询用户bandwidth啊,查询SP代理回收时间、查询用户Power Down信息等等,为了方便使用,都集成到其它功能中,所以也没必要单独更新到帮助信息里啦。

显示调整

账户信息

在账户信息的首尾加上分隔符,看起来能更好看一些吧。

查询资产

查询BTS内部市场的价格信息,支持如下资产:
open.btc, open.eth, open.eos, open.steem, open.sbd, open.doge, gdex.btc, gdex.eth, gdex.eos, yoyow, ipfs
可以直接输入资产名称查询对应资产在BTS内盘的价格信息。

公众号添加方法

  • 方式一:
    进入微信通讯录->点击公众号->点右上角加号->搜索steemit,关注即可。

  • 方式二:
    直接扫描以下二维码:


This page is synchronized from the post: 微信公众号订阅人数突破1000人,更新帮助&调整显示

谁动了我们的隐私?

昨天浏览网易新闻,发现一则消息,大意是说前两天五四青年节微信上流行一个“我的前世青年照”可能涉嫌收集个人隐私云云。


(图源 :pixabay)

说到这个“我的前世青年照”,我属实被朋友圈的好友们刷屏了。朋友们一个个前生要么是巨贾、要么是文人,总之个个都是名人。突然发现我有这么多名人朋友,兴奋之余我感到颇有压力。想想五四青年节变成了P图狂欢节,倍觉嘲讽。

不过感兴趣就玩呗,也无可指责,就算是时光回到1919年,你也不能要求每个学生都去参加学生运动不是嘛。不过说到隐私,我就乐了,在网上,你和我谈隐私?这不让人笑掉大牙嘛。

前两天吵得沸沸扬扬的莫过于知乎的隐私条款了,据说大致是你不同意它的隐私条款,就无法使用知乎。按说我不怎么用知乎,对这事没啥发言权,不过知乎这么做,难道不是约定成俗的普遍做法吗?难道我们正确的做法不是默默忍受吗?有什么好吵的呢?

对,就是这样,我手机上安装好多APP的时候,都会提示我要拨打电话的权限、要访问通讯录的权限、要使用相机以及麦克的权限、要访问相册的权限,对此我内心是无比抗拒的。然后我通通拒绝,然后APP提示我没有XXX权限,应用将无法使用,于是我含着眼泪把这些权限都挑上了。

安装APP是这样,使用的时候更是要求你实名认证,要求输入身份证号、要求绑定电话,得亏现在科技发达了,人民的生活水平也提高了,有个一两个手机号码是很正常的事,否则将会有多少APP用不了啊。


(图源 :pixabay)

总之,一句话,你不把自己剥光,或者不让这些应用把你剥光,那么你是无法畅游网络世界的。然后我们被剥得光光的信息,在地下市场或明或暗地被打包甩卖,成为不法份子赚钱的资源。还有那些卖房、卖保险、放高利贷的,为什么会有我们的信息,答案还用说吗?

其实我们在网络上,都是裸体人,你访问的每个域名、上过的每个网站,你在微信、QQ里和朋友聊的每一句话、你在淘宝京东等网站的每一笔消费、你和情人在酒店宾馆的每一次开房记录,等等等等,你以为你做的隐秘,其实一切都在别人的掌握之中。

你的数据没被曝光,没被公之于众,没有引起轩然大波,仅仅是因为你的数据没有价值或者是没有必要公布,当需要的时候,人家可以随手拿来,不费吹灰之力。

换句话说,我们在网上(网下),从来就没有过隐私。所谓的隐私,只不过对吃瓜群众而言,不让吃瓜群众随随便便获取你的各项数据,这就是隐私的真谛。所以,有人一本正经地说哪个APP涉嫌泄露隐私我就觉得好笑,是五十步笑百步,还是只许州官放火不许百姓点灯?


(图源 :pixabay)

当然了,其实我们还是要注重一下个人隐私的。还有那些什么乱七八糟的前世照玩起来很有意思吗?即便你前生如何精彩又如何呢?不如当下好好努力才是正道。


This page is synchronized from the post: 谁动了我们的隐私?

被坑到吐血,vector 元素地址会变!

在我的程序中,我用到一个Combo-Box控件,控件里的数据是在动态插入的。为了在程序中可以访问到Combo-Box控件选中项目对应的数据,我给对话框设置了一个成员变量vector <string> m_str;用于保存所有待选条目对应的数据。


(图源 :pixabay)

故障

在添加数据的代码代码段中,我用如下代码段(1)添加:

1
2
3
4
5
6
7
8
while (!recset.IsEOF())
{
......
int index = m_pComboBox->InsertString(-1, CA2T(str));
m_str.push_back(str);
m_pComboBox->SetItemDataPtr(index, (void *)&m_str[index]);
......
}

然后在程序其它部分需要读取的时候,我使用类似如下代码读回数据:

1
2
int index = m_pComboBox->GetCurSel();
str = *(string *)m_pComboBox->GetItemDataPtr(index);

结果这程序行为时而正常,时而崩溃,我意识到我的程序可能哪里有问题,但是会是哪里的问题呢?

原因

因为崩溃时都是内存读写错误,出在这个语句上:str = *(string *)m_pComboBox->GetItemDataPtr(index);所以我想到可能是我写入的数据不对,导致读出不正常。

于是我将代码段(1)修改成这个样子,就是写入之后马上读回校验一下:

1
2
3
4
5
6
7
8
9
while (!recset.IsEOF())
{
......
int index = m_pComboBox->InsertString(-1, CA2T(str));
m_str.push_back(str);
m_pComboBox->SetItemDataPtr(index, (void *)&m_str[index]);
str = *(string *)m_pComboBox->GetItemDataPtr(index);
......
}

事实证明在此处写入和读出的数据没有一点问题。

那么问题会出在哪里呢?我想来想去,想到一种可能,我的程序不同部分之间传递的是vertor元素的地址,如果元素的地址变化了呢?但是元素的地址会变化吗?于是我写了一个程序验证一下这个问题。

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 <string>
#include <vector>
#include <iostream>
using namespace std;

void add_data(vector <string> &v, vector <string *> &v_p, int count)
{
for (int i = 0; i < count; i++)
{
v.push_back("test" + to_string(i));
v_p.push_back(&v[i]);
}
}

int main()
{
vector <string> v_str;
vector <string *> v_str_p;
add_data(v_str, v_str_p, 10);
for (int i = 0; i < v_str.size(); i++)
{
cout << i << ":" << v_str[i] << ":" << v_str_p[i] << ":" << &v_str[i] << endl;
}
}

上述代码输出如下:

也就是说,除了最后添加的元素,其它元素地址均发生了变化,这也解释了为何我的程序有时候好用有时候崩溃(选择最后的项目时,因为地址没变,所以可以读出数据)

解决

知道了这个问题的原因所在,解决起来就好办多啦。我可以将上述代码修改为这个样子:

1
2
3
4
5
6
7
8
9
10
11
while (!recset.IsEOF())
{
......
int index = m_pComboBox->InsertString(-1, CA2T(str));
m_str.push_back(str);
......
}
for (int i = 0; i < m_pComboBox>GetCount(); i++)
{
m_pComboBox->SetItemDataPtr(i, (void *)&m_str[i]);
}

当然了,其实我还可以直接用序号,不用来回传递指针。

结论

看似很简单的问题,却又浪费我小半天时间。看来基本功不扎实就是要反复做无用功呀。


This page is synchronized from the post: 被坑到吐血,vector 元素地址会变!

读书 & 《去年今日此门中》

昨天的帖子读书 & 《花褪残红青杏小》中写到了杏,我的朋友私下里和我说:“你那哪是什么读书啊,分明是一些八卦。八卦一些时下的事还不行,连古人私生活你都关心上了!”

额,有句话咋说来着:“人艰不拆”,对这就是这个词。知道我挂羊头(读书)卖狗肉(八卦)就算了,拆穿就不好玩了。不管他了,今天我们继续八卦读书。

20180428_074547.jpg

昨天说了杏,今天我们说桃 ,咦,怎么又变成水果开会了。哦,搞错了,今天我们说桃花。之所以说桃花,是因为我前几天路遇一株桃树,那桃花那个美啊,我不由得就想起了崔护《题都城南庄》,全诗如下:

去年今日此门中,人面桃花相映红;
人面不知何处去?桃花依旧笑春风。

关于这个诗有一个美丽的故事。说的是一个闭门苦读诗书的书生崔护,在一年清明节那天,一看天这么好,咱也别在家宅着了,出去溜达溜达,万一就有艳遇呢,然后,他就溜达溜达溜达到了城外的村庄。

可是溜达这么远之后,他才发现光想着溜达了,没提前做点准备,比如说带点牛肉干、巧克力、营养快线、东方树叶啥的该有多好,可是现在又累又饿又渴,早知如此,不如在家看书了,那边《区块链编程指南》才看了个开头。

后悔是没有用的,于是崔护合计找户人家讨口水喝吧,看到一个桃花掩映的茅屋,他便走了进去,结果里边竟然有个大美女。美女给他倒茶后,崔护就开始了高谈阔论,极力表现自己,美女也被他深深地打动了。

可是那时候都讲究男女授受不亲,大美女虽然倾心于崔护,但是也不好表现的太过于直白。而崔护这个书呆子,聊了一会发现美女不咋说话,就以为人家讨厌他了,失望之余,打道回府。

崔护回家后,就开始奋发图强苦读书,什么《区块链编程指南》什么《Mastering Bitcoin》,开始猛啃,那叫两耳不闻窗外事、一心只读圣贤书啊。就这样,闷头苦读,读了一年抬头一看,我靠,又到清明时节了,桃花又开了,崔护又想起那个城南村庄中的美女了。

崔护给自己鼓足勇气,我就是去看看,去看看而已。然后来到城南村庄桃花掩映的茅屋,结果茅舍门上挂了一把锁,没有人在家。崔护怅然若失,题诗一首,就是这首《题都城南庄》。

故事到这并没有结束,崔护回去以后茶饭不思,满脑子都是美女的身影,于是过了几天再次造访茅舍,结果发现一老翁在那嗷嗷哭。崔护问老丈为何哭泣?老人问莫非你就是崔护?崔护答是,老人说就是你害死了我的女儿。

原来去年崔护进来讨水,茅屋内的美女就对之一见倾心。但是碍于面子没敢表白,崔护这书呆子还会错意,一去就一年了无音讯,害女子白白苦等一年。于是今年清明,老汉就陪女儿出去散心,结果回来时看到崔护的题词,女子想这下算彻底这段姻缘擦肩而过了,然后一病不起,绝食数日,卒。

崔护一听这来龙去脉,痛彻心扉啊。冲进屋子里,抱住美女的尸体,泣不成声。也许是他们的痴情感动了上苍,美女竟然死而复生,然后王子与公主就愉快的生活在一起了。崔护表示,再也不想看什么《编程指南》之类的了,太耽误事了!


可是桃花我也看到了,然而美女呢?美女在哪呢?😭


This page is synchronized from the post: 读书 & 《去年今日此门中》

每天进步一点点:MFC中使用Access数据库

我想在一个小程序中加一点数据库的功能,因为可能需要一些编辑和修改等功能,所以我打算选择Access作为数据库管理系统。这样我可以在程序中查询,又可以在Access软件中浏览和编辑。


(图源 :pixabay)
我是在MFC程序中使用ODBC连接Access数据库。

打开数据库

在使用数据库之前,我们首先需要打开数据库。为了使用数据库,我们需要先包含头文件: afxdb.h。

#include "afxdb.h"

然后声明一个数据库类的实例:

CDatabase db;

指定ODBC Driver:

CString sDriver = TEXT("Microsoft Access Driver (*.mdb, *.accdb)");

指定数据库信息:

CString sDBInfo = TEXT("C:\\Northwind.accdb");

指定连接字符串

CString sConnect;
sConnect.Format(TEXT("ODBC;DRIVER={%s};DSN='';DBQ=%s;"), sDriver, sDBInfo);

之后就可以打开(连接)数据库了。

BOOL ret = db.Open(NULL, false, false, sConnect);

我们可以用返回值判断打开是否成功。之后也可以使用db.IsOpen()来进行判断,当然,也可以将打开数据库的代码段放到TRY{ }CATCH(CDBException, e){ }END_CATCH;代码块中。

访问数据库(查询数据)

成功连接数据库之后,我们就可以访问数据库啦。

在此之前,我们需要声明一个CRecordset实例,并和数据库建立起来关联。

CRecordset recset(&db);

之后就可以准备我们的查询语句了(SQL),比如:

CString sql = TEXT("select * from table_a;");

然后就可以去查询啦:

recset.Open(CRecordset::forwardOnly, sql, CRecordset::readOnly);

然后就可以遍历返回结果啦:

1
2
3
4
5
6
7
8
9
10
11
while (!recset.IsEOF())
{
CString strTmp;
recset.GetFieldValue(TEXT("field1"), strTmp);

// Process the row
.......

// goto next record
recset.MoveNext();
}

处理完所有结果之后记得关闭记录集:

recset.Close();

数据库使用完毕,记得关闭数据库:

db.Close();

其它问题

在Office 2007之前,Access 数据库文件的扩展名为*.mdb,Office 2007之后扩展名变化为*.accdb。针对老版本的数据库文件,我们可以使用如下Driver:

CString sDriver = TEXT("Microsoft Access Driver (*.mdb)");

如果是2007之后版本的Access文件,则要使用:

CString sDriver = TEXT("Microsoft Access Driver (*.mdb, *.accdb)");

另外要注意程序的目标平台(X86 还是X64),以及安装的Office版本(X86 还是X64)等因素,否则会类似如下的错误:

我被这个坑害得一整晚没睡觉😭。

参考资料


This page is synchronized from the post: 每天进步一点点:MFC中使用Access数据库

读书 & 《花褪残红青杏小》

20180503_074600.jpg

前两日外出,发现路边的杏树已然结果。看到这青杏,突然想起了苏轼 的《蝶恋花·春景》,用在此处,极为应景。

如果单提《蝶恋花·春景》,可能很多人不知道是哪首词,但是用“花褪残红青杏小”,大家都会知晓的,所以标题中我直接用的这个。《蝶恋花·春景》全文如下:

花褪残红青杏小。
燕子飞时,绿水人家绕。
枝上柳绵吹又少。天涯何处无芳草。

墙里秋千墙外道。
墙外行人,墙里佳人笑。
笑渐不闻声渐悄。多情却被无情恼。

上阕写景,寥寥几笔勾勒出一幅暮春的景色。其中天涯何处无芳草,更是成了千古名句,无数找不到女朋友的单身狗或者被女朋友甩掉的男人,都应该感谢一些苏轼,让他们在尴尬之时可以故作轻松地甩出一句“天涯何处无芳草”,然后潇洒的转身,只留下一个孤寂的背影,其中的心酸就只有自己知晓了。

说到枝上柳绵吹又少,倒是有好几个故事可讲。其中一个说的是一天下雪,谢安一家聚会赏雪,谢安问道:“白雪纷纷何所似?”,其侄子答道:“撒盐空中差可拟。” 而侄女谢道韫答道:“未若柳絮因风起。”,就因为就这一句话使得谢道韫名垂千古。

不过说到柳絮,我还是比较欣赏《红楼梦》中薛宝钗好风凭借力,送我上青云那句。全诗也非常不错:

白玉堂前春解舞,东风卷得均匀。
蜂团蝶阵乱纷纷。
几曾随逝水?岂必委芳尘?
万缕千丝终不改,任他随聚随分。
韶华休笑本无根。
好风凭借力,送我上青云。

前一阶段,朋友圈流传一段话:

当年,宋美龄喜欢法国梧桐,蒋介石就在南京种满了梧桐树,爱一个人,倾一座城。
我就想问问当年的XX市长是谁? 你老婆是不是喜欢柳絮毛?

内容大同小异,就是把XX换成了不同的城市,后边或者是柳絮毛或者是杨树绒。 😀

额,跑题了。下阙描写的高墙大院里姑娘打秋千,边玩边笑。外边的行人听到这银铃般的笑声呆住了,想象着墙内的美女,做着迎娶白富美走向人生巅峰的美梦。结果人家佳人荡会秋千没啥意思就回屋了,外边的行人也就梦醒了。好伤感呀。😭

20180503_074548.jpg

哎,这种伤春惜春的感觉要不得啊,还是宝钗的好风凭借力,送我上青云比较好呢。


This page is synchronized from the post: 读书 & 《花褪残红青杏小》

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×