使用graphviz绘制流程图

前言

日常的开发工作中,为代码添加注释是代码可维护性的一个重要方面,但是仅仅提供注释是不够的,特别是当系统功能越来越复杂,涉及到的模块越来越多的时候,仅仅靠代码就很难从宏观的层次去理解。因此我们需要图例的支持,图例不仅仅包含功能之间的交互,也可以包含复杂的数据结构的示意图,数据流向等。

但是,常用的UML建模工具,如Visio等都略显复杂,且体积庞大。对于开发人员,特别是后台开发人员来说,命令行,脚本才是最友好的,而图形界面会很大程度的限制开发效率。相对于鼠标,键盘才是开发人员最好的朋友。

graphviz简介

本文介绍一个高效而简洁的绘图工具graphviz。graphviz是贝尔实验室开发的一个开源的工具包,它使用一个特定的DSL(领域特定语言): dot作为脚本语言,然后使用布局引擎来解析此脚本,并完成自动布局。graphviz提供丰富的导出格式,如常用的图片格式,SVG,PDF格式等。

继续阅读使用graphviz绘制流程图

卷积神经网络CNN总结

卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。

继续阅读卷积神经网络CNN总结

清理DriverStore文件夹中的驱动程序

不少人发现,Windows使用一段时间后,C:\Windows\System32\DriverStore目录越来越大。对于还在使用128G或者更小容量的SSD用户来说,更是头疼。

DriverStoreWindows用来存放第3方驱动程序的,当你安装一个驱动时,对应的文件就会被拷贝到DriverStore。当你卸载驱动时,文件会从DriverStore中删除。如果你升级驱动时,Windows会保留旧版驱动,这样有问题时可以回滚。
更多DriverStore信息请见[https://msdn.microsoft.com/en-us/library/ff544868(VS.85).aspx]

很美好是不是?可惜现实总是有好些不如意的地方。
比如你有一块Nvidia显卡,老黄比较勤快,一个月发一两次新驱动,每个版本驱动安装后会占用几百兆空间。半年后你一看,DriverStore已经有好几G了。
于是你去百度/Google/Bing了一把:怎么给DriverStore减肥。搜出来的帖子大部分都是教你获取文件夹权限,删除。
然后你就照做了,恭喜你,你已经对系统造成了不可恢复的破坏,以后很可能会有些莫名其妙的错误。

其实Windows一直都有一个自带工具pnputil.exe,用这个可以列出DriverStore中的驱动,还可以删除。具体信息请见:[https://msdn.microsoft.com/en-us/library/windows/hardware/ff550419(v=vs.85).aspx]
但是,命令行的工具太麻烦了。。。怎么办?DriverStore Explorer来拯救你。

继续阅读清理DriverStore文件夹中的驱动程序

Windows磁盘文件分析软件SpaceSniffer

当电脑用久了之后,大多数人都会发现Windows会越来越慢,而且硬盘空间也慢慢地满了。

可让人苦恼的是,虽然想动手,但却不清楚到底是什么文件或文件夹在占用着你最多的空间。如果一个个文件夹逐个查看,对懒人来说无疑是一件噩梦。不过有了SpaceSniffer就轻松多了!它可以为我们统计出各个文件夹和文件的大小,然后以直观的区块、数字和颜色来显示硬盘上文件夹,文件大小。让你完整地了解你的硬盘空间到底是怎样被用掉的……

继续阅读Windows磁盘文件分析软件SpaceSniffer

Ubuntu 16.04系统上Clang与GCC之间切换

在编译C++代码的时候,我们有时需要比较一下不同编译器之间优化性能的差异,因此需要在ClangGCC之间进行切换,用来比较最后的实际效果。

Ubuntu 16.04系统上使用如下命令进行切换

$ sudo apt-get install clang
$ sudo update-alternatives --config c++

参考链接


Switching between GCC and Clang/LLVM using CMake

Ubuntu 16.04上使用TCMalloc

最近在研究如何提高C++程序的性能,Google开源的TCMalloc,在C++小对象频繁创建销毁的处理上拥有非常大的优势。

Ubuntu 16.04上使用如下命令安装最新的TCMalloc

$ sudo apt-get install google-perftools

对于已经编译好的程序,可以使用如下命令,让程序加载TCMalloc来大致测试一下程序性能的提升

$ LD_PRELOAD="/usr/lib/libtcmalloc.so.4"

参考链接


Ubuntu 16.04上Linux C++程序性能分析工具perf使用入门

目前,perfLinux系统上最全面最方便的一个性能检测工具。由Linux内核携带并且同步更新。

Ubuntu 16.04系统上需要执行如下命令安装:

# 常规内核使用
#sudo apt-get install linux-tools-generic
# 低延时内核使用
#sudo apt-get install linux-tools-lowlatency

# 因此我们根据内核自动选择安装
$ sudo apt-get install linux-tools-`uname -r | cut -d- -f1-2`-`uname -r | cut -d- -f3`

$ sudo apt-get install linux-tools-common

#解决报错"Kernel address maps (/proc/{kallsyms,modules}) were restricted. Check /proc/sys/kernel/kptr_restrict before running 'perf record'".

$ sudo sh -c " echo 0 > /proc/sys/kernel/kptr_restrict"

使用方法如下(gcc编译时最好使用-g参数,生成符号,方便调试):

#生成性能日志文件,默认生成 perf.data
$ sudo perf record -e cpu-clock -g ./hello

#解析性能日志
$ perf report -g -i perf.data

参考链接


Linux C++程序进行性能分析工具gprof使用入门

软件的性能是软件质量的重要考察点,不论是在线服务程序还是离线程序,甚至是终端应用,性能都是用户体验的关键。这里说的性能重大的范畴来讲包括了性能和稳定性两个方面,我们在做软件测试的时候也是要重点测试版本的性能表现和稳定性的。对于软件测试过程中发现的性能问题,如何定位有很多的方法。基本的方法可能是开发者对代码进行review,或者是使用一些工具对代码进行性能分析。常见的性能分析工具有哪些呢?以下两篇文章做了详细的总结:

gprof是可用于Linux C++代码性能分析工具之一。
继续阅读Linux C++程序进行性能分析工具gprof使用入门

Ubuntu 16.04下使用GCC5,CUDA 7.5编译Caffe时候报告错误'error: identifier "__builtin_ia32_mwaitx" is undefined'

Ubuntu 16.04下使用GCC5,CUDA 7.5编译Caffe时候报告如下错误:

/usr/lib/gcc/x86_64-linux-gnu/5/include/mwaitxintrin.h(42): error: identifier "__builtin_ia32_mwaitx" is undefined

目前比较好的解决方法是在编译的时候增加_MWAITXINTRIN_H_INCLUDED宏。

如果使用cmake来编译代码,则只需要在CMakeLists.txt中增加如下语句即可

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_MWAITXINTRIN_H_INCLUDED")

参考链接


Trying to get CUDA 7.5 to work with GCC 5.x

Ubuntu 16.04系统上使用skipfish检测网站安全

skipfishGoogle的工程师MIchal Zalewski开发的一款网站安全检测工具,它完全实现了全自动化操作,不需要人工干预.

Ubuntu 16.04上使用skipfish是比较简单的,使用如下命令安装

$ sudo apt-get install skipfish

网站检测命令如下:

$ skipfish -o output_folder http://www.example.com

其中output_folder是检测结果的输出目录,扫描结束后可打开index.html查看扫描结果。

参考链接