也谈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的用途和用法

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表达式

自定义QWidget类使Qt图像控件能自动缩放

每次给这类文章取名字都很烦,一不小心就又臭又长了!>.< ...... 下面转入正(cai)题(guai) 相信大家一开始也和我一样,用QLabel来充当图像的显示控件,不过应该很快就会发现QLabel显示出来图像后,如果再改变父级控件的大小,此时QLabel的图像不会跟着变大而是保持原来的大小。更为糟糕的是,父级控件无法缩小了,因为QLabel的图像不会自动缩小,限制了父级控件的minimumSize! 其实是一个很囧的问题,网上一搜会发现几年前就有人提出怎么没有一个专门的QImageLabel啊?可能priority太低吧……Anyway,下面介绍通过自定义类(继承QWidget)实现一个可以自动缩放图像的控件。 Continue reading 自定义QWidget类使Qt图像控件能自动缩放

让Qt Designer设计的Widget随MainWindow增大而增大

入门Qt,各位老鸟见笑了。网上一搜有这个问题的还不少,而且一些中文博客/论坛用一些旁门左道误导不明真相的群众,还是写下本文吧。

问题描述

通过Qt Creator中的Designer(或者独立的Qt Designer程序)设计Qt程序外观的时候,里面添加的小部件(Widgets)不能随着主窗体(MainWindow)的增大而增大。

解决办法

Continue reading 让Qt Designer设计的Widget随MainWindow增大而增大

Linux下Qt创建和调用共享库文件.so

费了点功夫,总算get了编写共享库(Shared Library,Windows下称为“动态链接库”,即Dynamic Link Library)和调用的这个新技能!

动态链接库的好处是不言而喻的,一个稍微复杂一点的程序,顶层设计的时候良好的类库划分可以让工作变得很简单,而将不同类编译成共享库文件可以实现程序的模块化,提高代码复用程度,在保证接口兼容的情况下更新一个程序只用更新共享库(Windows下是dll,Linux下常见的是so)即可。

下面以Linux下的Qt Creator这个IDE为例,讲述Qt(严格意义上是C++)共享库文件的编译和调用。

Continue reading Linux下Qt创建和调用共享库文件.so

C++版(Qt)灵格斯LD2/LDX文件解析/读取工具

感慨一下开源的力量真是巨大。

自我感觉KDictionary的大部分功能都已经实现的大差不差了,所以现在想着手实现下一个重要特性:离线词典。瞄准了灵格斯词霸的海量词库文件,一大堆的LD2/LDX文件,而且封闭的文件格式也已经被高手破解了!

然后鄙人花了几天功夫,再一次Qt的现学现卖,把Java代码移植到了C++(使用了Qt库)。为什么要移植?因为Plasmoid不能用Java写啊……而且我不想学Java

Continue reading C++版(Qt)灵格斯LD2/LDX文件解析/读取工具

在OpenShift上用Octopress搭建静态博客

Octopress是一个基于Jekyll的框架,两者均开源,而且都是Ruby……为什么不推荐直接用Jekyll呢,呃……因为Octopress把Jekyll包装得很好了啊。嗯,为什么不直接在Github Pages上部署?在GP上部署很简单的,但是在OpenShift上部署就不那么容易了(略微tricky一点,整体还是很简单)。

下面就讲述一下我搭建Octopress的方法,目测比网上流传的各个版本简单!

Continue reading 在OpenShift上用Octopress搭建静态博客

添加圣经金句Widgets到你的WordPress

WordPress上的那些个Daily Verses的插件都很不好用,出来的Widgets效果很丑,不如直接用网上提供的JavaScript代码。我搜罗了一圈,整理了中英文等多个版本的圣经金句类的Widgets代码。

首先在WordPress添加小工具中添加一个文本小工具,文本标题随便你取什么,文本的内容根据你的需要选择下面的其中一个吧。

先说中文的吧,中文的是在W4J上找到的,不过这个是“动态圣经金句”,每次刷新页面都会变的(效果参见本站右侧的小工具),这里只列出UTF-8编码的范例。

Continue reading 添加圣经金句Widgets到你的WordPress