12_Steps_to_Better_Code

Copy From:
The Joel Test: 12 Steps to Better Code
https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/

1. Do you use source control?
2. Can you make a build in one step?
3. Do you make daily builds?
4. Do you have a bug database?
5. Do you fix bugs before writing new code?
6. Do you have an up-to-date schedule?
7. Do you have a spec?
8. Do programmers have quiet working conditions?
9. Do you use the best tools money can buy?
10. Do you have testers?
11. Do new candidates write code during their interview?
12. Do you do hallway usability testing?

Chinese Translation
http://local.joelonsoftware.com/wiki/Chinese_(Simplified)#The_Joel_Test:.E8.BD.AF.E4.BB.B6.E5.BC.80.E5.8F.91.E6.88.90.E5.8A.9F_12.E6.B3.95.E5.88.99

卸载旧版本Linux内核

Linux系统经过多次升级以后,会有很多旧版本的内核保存在硬盘,可以将这些不再使用的内核卸载,节省硬盘空间。

系统升级安装的内核

查看已安装的内核

$sudo dpkg -l | grep linux-image
$sudo dpkg -l | grep linux-headers

其中,linux-image-VERSION 是内核映像文件,linux-image-extra-VERSION 是内核扩展模块,linux-headers-VERSION 是内核头文件,VERSION 代表具体的内核版本号,比如

linux-image-4.8.0.2-amd64
linux-headers-4.8.0.2-amd64

确定要删除的内核版本,用下面的命令进行删除

$sudo aptitude purge linux-image-VERSION
$sudo aptitude purge linux-extra-VERSION
$sudo aptitude purge linux-headers-VERSION

更新 grub

$sudo update-grub2

手动编译安装的内核

从源码手动编译安装的内核版本,需要手动删除文件。查看所有可引导的 Linux 内核

$ls -l /boot

删除内核文件

sudo rm -rf /lib/modules/*VERSION*
sudo rm /boot/*VERSION*
sudo rm /var/lib/dpkg/info/linux-headers-VERSION*
sudo rm /var/lib/dpkg/info/linux-image-VERSION*
sudo rm -rf /usr/src/linux-headers-VERSION
sudo rm -rf /var/lib/initramfs-tools/VERSION

更新 grub

$sudo update-grub2

Code Snippet - Run_Only_One_Instance_of_Application

在实际使用场景中经常要求程序同时只能运行一个实例,特别是硬件独占型的任务。如果有多个进程对硬件进行操作,往往会引发莫名其妙的错误。

实现此需求最简单的方式是使用互斥量Mutex,创建互斥量的函数原型为

HANDLE WINAPI CreateMutex(
  _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes,
  _In_     BOOL                  bInitialOwner,
  _In_opt_ LPCTSTR               lpName
);

- 继续阅读 -

Code Snippet - ListCtrl_with_Edit_and_ComboBox

MFC中的ListCtrl是一个使用频率相当高的控件,不过框架自带的控件功能有限,如果需要在ListCtrl中嵌入其他的控件,比如Edit或ComboBox,则需要用户来实现。codeproject上有一个实现

Customized Report List Control With In Place Combo Box & Edit Control
https://www.codeproject.com/Articles/5709/Customized-Report-List-Control-With-In-Place-Combo

不过这个工程已经非常古老,还是2003年提交的代码,直接放到新版本的VS中会编译不过,需要对代码进行修改。有网友提供了修改后的代码,下载地址见参考资料。

- 继续阅读 -

推荐两个有趣的软件

1. Gource

Gource是一个基于OpenGL的3D虚拟化演示工具,通过读取版本控制系统的日志,将所有commit历史通过动画展现出来,非常酷炫,支持Git、Mercurial、Bazaar及SVN。

官网地址
http://gource.io/

GitHub地址
https://github.com/acaudwell/Gource

要是问Gource有什么实际作用,就是做Presentation时收获若干 Wow, cool~~

2. PaperBack

最有效的数据保存方式是什么?

《三体》中的答案是刻在石头上...

OllyDbg的作者Oley Yuschuk大神给出了另外一个办法:Paperbak,可以把文件存储到一个巨大的Bitmap图像中。根据官网的介绍,如果打印机的分辨率达到600 DPI,一张A4纸可以保存500000 Bytes的数据。

使用说明及软件下载,请访问官网
http://ollydbg.de/Paperbak/