C++: Variadic Template and Fold Expression are Powerful.

这两天做一个Pipeline的Framework,见识了现在C++ Generic Programming 的强大功能,比原来的 Object Oriented Programming 看上去 Cool 多了:完全没有关系的一堆类型,一样可以放在框架里操作,写出来的程序也没有任何效率的损失,看来这些年C++又进步了很多。下面简要说说我的设计。 Class BaseData 表示 Pipeline 中的一个数据节点。 Class Phase 表示针对数据的某个操作。 Phase 接受一些 BaseData 作为输入,并输出到另外一些BaseData。为了灵活和简单起见,Phase 不设任何 Virtual Method 作为接口,只要就实现一个 Run Method 即可。程序概要如下: class BaseData { public: get() … set() … }; class DataA : public BaseData {…}; class DataB : public BaseData {…}; class DataC : public BaseData {…}; …

Use Mouse in Terminal Vim like a modern editor

现代的编辑器(Ultraeditor, Editplus) 对于鼠标的使用非常频繁,最常见的是使用鼠标单击来移动光标,鼠标滚轮来上下翻页,或者鼠标双击选中某个词,然后拷贝或者粘贴替换。我最近学到了如何在Terminal-Based Vim 中也这样操作。 首先设置Vim 在 Normal Mode 和 Visual Mode 下激活鼠标: set mouse=nv 这样我们就可以用鼠标单击或者滚轮移动光标了。另外,鼠标双击选中单词也正常工作了。 值得一提的是,我们也可以用键盘来选中一个词:假定我们的光标停在 information 这个词上(任何位置都可以),按下 viw 就可以选中整个词,这个操作不需要鼠标,在某些情况下很方便。 接下来的事情就容易了,拷贝: y 粘贴并替换当前选中的词: p  

编译 Vim (Compile Vim Wiht Python 3 Support on Debian)

下载源文件 $ git clone https://github.com/vim/vim.git $ cd vim/src $ vi Makefile 编辑Makefile 选择编译器 # COMPILER – Name of the compiler {{{1 # The default from configure will mostly be fine, no need to change this, just # an example. If a compiler is defined here, configure will use it rather than # probing for one. …

第一代之后,基因型不再变化(Stationary GenoType Distribution)

基因 A 和 a是一对等位基因,在人群中构成了三种基因型:AA, Aa 和 aa,其中A是显性,a是隐性。在某些遗传性状比如蓝眼睛、左撇子等,基因型决定了实际表现的性状,假定A代表右撇子,a代表左撇子,那么Aa和AA都表现为右撇子,只有aa表现为左撇子。 假定这三种基因型在男性和女性中的分布概率是一样的,分别是 u, 2v, w,那么我们有: (1)   如果我们用p代表基因A在人群中的概率,我们有: (2)   同样,我们用q代表基因a在人群中的概率,我们同样有: (3)   因为我们假定男性和女性的基因型分布是一样的,那么对于下一代子女来说,因为他(她)们的基因一半来自父亲,另一半来自母亲,所以他们之中纯合基因型AA发生的概率就是继承自父亲和母亲的基因都是A的概率相乘,也就是: (4)   根据同样的道理,子女代中基因型Aa和aa发生的概率分别是: (5)   上面的公式中我们依然使用 u, v, w 代表 基因型AA,Aa和 aa 的概率,但是使用下标1来表示这是子女代。有了每种基因型的概率之后,我们可以知道子女代中实际基因A和a的分布概率是: (6)   那么再下一代的三种基因型的概率分别是多少呢,同样我们可以简单计算如下: (7)   (8)   (9)   同样,第二代中基因A和a的概率分别是: (10)   (11)   计算了这么拉拉杂杂一大堆,到底有什么用处呢?下面是关键的一步,因为我们有: (12)   显而易见: (13)   我们很容易推导出上一代的基因A的概率和下一代基因A的概率关系如下: (14) …