也谈Boost::Serialization的用途和用法

研究生只念一年的坏处就是毕业设计好像变成一年一度的了……这次毕设是和并行计算有关(毕竟念的是「高性能计算硕士」),多线程是不够的,因为一台设备的CPU核心数毕竟有限,所以多进程的并行计算才能发挥计算机集群(HPC cluster)的计算威力。这方面的de facto standard就是MPI了,而在C++项目中可以通过Boost库的MPI包装更方便、「更C++」的来调用。Boost库的质量和重要程度个人感觉仅次于STL了,看看C++11吸收了大量Boost库进入STL就知道Boost有多厉害。

和Serialization的关系?既然用C++,就免不了自定义类吧,想要把一个类的实例通过MPI发送到其他MPI节点上,首先就要把类进行serialize,然后把serialized memory发送出去,接收方再unpack还原成一个实例。就不展开说了,简而言之这一点和MPI的通信原理有关。

Continue reading 也谈Boost::Serialization的用途和用法

我的第一本书《Qt 5 Blueprints》

从去年九月份开始写初稿,一直到前几天还在修改Prefinal,今天终于收到了邮件告知书已出版了!Qt作为一个负有盛名的C++开发框架,在下也不敢自称专家,拿Qt写过一些小程序,本科毕设时也用了Qt,最近活跃开发的就是Shadowsocks-Qt5了。

刚收到Packt Pub的邮件约稿时,蛮忐忑的,担心自己水平不够,英语又不是母语,再加上自己没有吓死人的Bio,也没有「几十年」的开发经验。不过当时联系我的编辑人挺好的,而且我也知道Packt Pub甚至有在联系一些本科学生写书,而且他们也是第一次写书。所以我也就答应了,毕竟出版商能加特效,书duang很好、很专业。

Continue reading 我的第一本书《Qt 5 Blueprints》

libQtShadowsocks项目介绍和备忘

shadowsocks应该是继各种VPN和GoAgent之后,目前最受欢迎的代理协议了。VPN不灵活,而且能够被防火墙识别特征,能够轻松封锁,GoAgent则面临可用IP越来越少的困境。懒得介绍原项目了,不知道shadowsocks的自己去Google查吧。

libQtShadowsocks就像名字暗示的一样,是一个Library(库),用Qt(C++)写的,实现了shadowsocks的各项功能。

Continue reading libQtShadowsocks项目介绍和备忘

材料微观组织图像分析软件即我的毕设项目开源

今天毕业设计答辩结束了,心情大好,于是回宿舍写下了本文~~(脑洞大开的节奏)

我的毕设项目是开发一个材料微观组织图像的分析软件,说直白点,主要功能就是数晶粒、测晶粒度级别数的,还能测多孔材料的孔隙率,第二相百分比等。软件名称是Computer-Aid Interactive Grain Analyser,简称CAIGA,名字没想太久,随便取的。。。

Continue reading 材料微观组织图像分析软件即我的毕设项目开源

浅析C++11的Lambda表达式

Lambda表达式(又称Lambda函数,英文原文是Lambda Expression),是C++11的新特性中非常实用的一个。

之前一直自动忽略C++11的新特性,因为很多新特性的应用场景都十分有限,Lambda表达式就不同了,网上放狗一搜可以看到「函数对象」的理念在不少语言中都有实现,标准模板库之前有std::function来把函数包装成对象来使用,而现在有了Lambda表达式之后就更加方便了。

下面稍微解释一下Lambda表达式。

Continue reading 浅析C++11的Lambda表达式