Number Rounding Business

Rounding numbers is probably one of the topics in primary school. In school, we’ve learned that half rounds up, anything less than half rounds down. For example, 0.5 rounds to 1, but 0.4 rounds to 1. Duh, I’m stating the obvious you think. It only came to my attention that this is NOT really the default behaviour in a very popular programming language: Python.

Here, is a simple example to try in your own Python console.

Continue reading “Number Rounding Business”

Building KDE Frameworks on Windows from Source

Some notes on how to build KDE Frameworks packages from source on Windows using Visual Studio tools.

To do so, you need to first have a version of Qt compiled by MSVC installed. Some system environment variables to be set, using Qt 5.15.2 as an example:

  • PATH needs to add C:\Qt\5.15.2\msvc2019_64\bin
  • Qt_DIR needs to be set to C:\Qt\5.15.2\msvc2019_64

Example instructions for building CMake-based projects (all KDE projects), the command below should be executed in x64 Native Tools Command Prompt.

mkdir build && cd build
cmake .. -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX="C:\Qt\5.15.2\msvc2019_64"
nmake && nmake install

This will install the compiled KDE module into the Qt installation path. You can install it elsewhere, but if you do, make sure you update PATH environment variable accordingly.

運用Termux將Android平板電腦變身程式設計利器

去年就把手上的Chromebook在eBay賣掉,加了點錢在Amazon買了一台華碩的7英吋平板電腦。上禮拜買了羅技的藍牙鍵盤,這下和平板電腦配合在一起就真的能當台小電腦💻用了。所以有琢磨著怎樣可以在不方便攜帶筆電的情況下用來旅途中練習一些算法題。

熟悉程式設計的(我也希望都是在UNIX環境下的)或多或少可能有過想在平板電腦上偶爾練練手的想法,Android畢竟是基於Linux設計的,加上系統多年的更新換代發展,灌上一個Linux的工作環境應該不會太難,而且將會是一個非常大的效率提升。不過如果真的灌一個完整的Linux環境,一來是佔用很大的磁盤空間,二來電力損耗估計也是會讓人頭疼。好在我在Google馬上找到了Termux,安裝步驟簡單到不行,直接在Google Play點選安裝即可。

Continue reading “運用Termux將Android平板電腦變身程式設計利器”

也谈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表达式”