C/C++

🔖Gperftools中tcmalloc的简介和使用 内存泄露

今天看到文章推荐使用 TcMallo 替代 glibc/malloc,无论在性能上、还是在操作上都有显著的提升,有时间可以再仔细研究一下。

📚An Introduction to Modern CMake

最近重新学习了一遍 cmake,发现在版本 3.0 之后,引入了更加现代的代码结构,这也使得 cmake 愈发像一门正式的编程语言。因此,我们现在会听到要尽量使用 modern cmake 的呼声。上面这个教程就提倡我们通过结构化、层次化的规则编写科学高效的 CMakeLists.txt

我个人的体会有几点:

  • 学习和使用 c/c++ 这类需要编译才能运行的程序语言,需要配合一套得心应手的工程工具套件,否则极其容易地就倒在了第一步,无法成功构建工程项目,更何谈启动程序执行
  • 尽量使用 target_* 函数家族,减少在宏观层面对整个项目的影响
  • 学会定义 .cmake 文件,把常用的参数设置放在配置文件,然后使用 include 直接引入(本质是插入复制)
  • 使用 find_package() 有两种匹配模式

    • module 模式
    • config 模式

    有两种实现方式

    • find_package(XXX PATH xxx_path)
    • set(XXX_DIR xxx_path)

另外,可以多看看以下几篇文章,基本把 Modern Cmake 的东西讲的很透彻了,强烈建议采用结构化的方式进行构建整个项目代码。

R

📦patchwork: 直观的构建复杂多图组合

原生的 ggplot2 是无法支持多图放在一个显示界面的(当然,可以使用 facet 按组划分)。为了支持多图放在一个页面,我们现在可以使用的包有:

  • grid.arrange() from gridExtra
  • plot_grid() from cowplot

现在,作者又提供了一个更加直观的操作方式,可以实现「所见即所得」的效果,比如

(p1 | p2) /
   p3

上面这个代码就可以实现上面两个图谱+下面一个大图片的效果。用起来相当酸爽。

📦skimr: 快速查看数据统计特征

skimr 已经更新到了 v2.0 版本,我觉得应该好好研究一下这个软件包,提供了快速查看数据特征方法。

skim(chickwts)

## ── Data Summary ────────────────────────
##                            Values  
## Name                       chickwts
## Number of rows             71      
## Number of columns          2       
## _______________________            
## Column type frequency:             
##   factor                   1       
##   numeric                  1       
## ________________________           
## Group variables            None    
## 
## ── Variable type: factor ─────────────────────────────────────────────────────────────────
##   skim_variable n_missing complete_rate ordered n_unique top_counts                        
## 1 feed                  0             1 FALSE          6 soy: 14, cas: 12, lin: 12, sun: 12
## 
## ── Variable type: numeric ────────────────────────────────────────────────────────────────
##   skim_variable n_missing complete_rate  mean    sd    p0   p25   p50   p75  p100 hist 
## 1 weight                0             1  261.  78.1   108  204.   258  324.   423 ▆▆▇▇▃

Python

📚数据分析:R 与 Python 对比参照

Another Book on Data Science:Learn R and Python in Parallel 提供了分别使用 RPython 进行数据分析的方法,经过这几年的开发,我觉得应该好好对比一下两者的「同」与「异」,并通过参照比对,巩固知识体系。

可以重点关注 chapter 3: data.table and pandas

开发

📄文档的重要性

程序员最怕写文档!,而且,这是真的!!!我们宁愿写代码,也不肯花费一丁点的时间用来写文档。但是,这正是问题的所在。

  • 一方面,我们写的代码,很大一部分是需要跟团队一起配合才能运行;
  • 另一方面,未来的自己也可能需要重新回过头来进行重构代码(refactoring)。

因此,编写一套良好的代码文档,既可以快速让同事把握程序设计的整体框架,也有利于未来的自己想起当时设计的思路。

上述的两个链接都强调了代码文档 README 的必要性和重要性。因为 README 是一个项目的最原始入口,从这里我们开始了解代码的安装依赖、执行环境、编译步骤、注意事项等。我最近也在通过 git 进行团队的代码管理,对这一点深有体会。