Git显示漂亮日志的小技巧
原文:http://garmoncheg.blogspot.com/2012/06/pretty-git-log.html (墙)
Git的传统log如下所示,你喜欢吗?
看看下面这个你喜不喜欢?(点击图片看大图)
要做到这样,命令行如下:
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --
这样有点长了,我们可以这样:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --"
然后,我们就可以使用这样的短命令了:
git lg
如果你想看看git log –prett ...
rsync 的核心算法
rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并适当利用查找文件中的不同块以减少数据传输。rsync中一项与其他大部分类似程序或协定中所未见的重要特性是镜像是只对有变更的部分进行传送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。rsync利用由Andrew Tridgell发明的算法。这里不介绍其使用方法,只介绍其核心算法。我们可以看到,Unix下的东西,一个命令,一个工具都有很多很精妙的东西,怎么学也学不完,这就是Unix的文化啊。
本来不想写这篇文章的,因为原先发现有很多中文blog都说了这个算法,但是看了一下,发现这些中文blog要么翻译国外文章翻译地非常烂,要么就是介绍这个算法介绍得很乱让人看不懂,还有错误,误人不浅,所以让我觉得有必要写篇rsync算法介绍的文章。(当然,我成文比较仓促,可能会有一些错误,请指正)
目录
问题
算法
rolling checksum算法
图示
问题
首先, 我们先来想一下rsync要解决的问题,如果我们要 ...
10大经典错误
下面是10、11个经典的错误,升序排名。希望大家补充!
目录
10、DOS的Abort,Retry, Fail?错误
9、Windows Vista 的红屏错误
8、PC机的开机报警
7、Twitter的大鲸鱼
6、Kernel Panic
5、Windows的非法操作
4、Windows RPC Error
3、Xbox 360 三红错误
2、Web上的404错误
1、Windows 蓝屏错误
0、该页无法显示错误
10、DOS的Abort,Retry, Fail?错误
85年以后出生的人可能不知道DOS是什么了,只有那老家伙还知道这是什么。我还记得当时的我对于Abort和Fail这两个选择还是比较清楚的,不过,今天完全忘记了Abort和Fail的差别是什么?这个出是DOS下的经常出现,也相当的经典,以至于在Wikepedia上都有专门的业面 Abort, Retry, Fail?。简称为ARF。当然,ARI – Abort, Retry, Ignore?
9、Wind ...
程序员技术练级攻略
注:该文最新的版本在这里《程序员技术练级攻略(2018版)》(需要付费阅读)
月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来了一些他的心得和经历,我在把他的心得做了不多的增改,并根据我的经历增加了“进阶”一节。这是一篇由新手和我这个老家伙根据我们的经历完成的文章。
我的这个朋友把这篇文章取名叫Build Your Programming Technical Skills,我实在不知道用中文怎么翻译,但我在写的过程中,我觉得这很像一个打网游做任务升级的一个过程,所以取名叫“技术练级攻略”,题目有点大,呵呵,这个标题纯粹是为了好玩。这里仅仅是在分享Mailper和我个人的学习经历。(注:省去了我作为一个初学者曾经学习过的一些技术(今天明显过时了 ...
GNU/Linux下有多少是GNU的?
一个葡萄牙的学生写了一篇文章 《How much GNU is there in GNU/Linux?》 – GNU/Linux下有多少是GNU的。他的这篇文章主要分布了今年4月份的Ubuntu Natty的Linux分发包。其主要是用代码行来做的分析,其给了两个饼图。
第一个饼图如下,其指明了各种主流的开源项目组的分布情况。可见GNU只占了8%,当然,GNome也是GNU的,加起来也只有13%,只占整个分发包很少的比重。
第二个图,作者把GNU的部分拿了出来,再进行了分析:
在下面这个图中,我们可以看到主要是四大块——gcc, gdb, binutils 和 glibc,所以,作者说,这些东西都不是最终用户需要的,不是每一个用户都是需要搞开发的。所以,如果去除这些,再去除Gnome(这个桌面UI也不是很力),那么GNU的东西几乎没有了。
所以,作者以此来挑战Richard Stallman提到的 GNU/Linux的这个说法。好像更为好的说法应该叫——
GNU/KDE/java/xorg/Linux
我对这篇文章有下述一些感觉:
以代码行来衡量重要性,非常的不准 ...
在Web上运行Linux
一个叫Fabrice Bellard的程序员写了一段Javascript在Web浏览器中启动Linux(原网页,我把这个网页iframe在了下面),目前,你只能使用Firefox 4和Chrome 11运行这个Linux。这不是什么假的模仿Linux的东西,这是实实在在的运行一个Linux。这一举动还引起了很多很牛人的关注,包括Javascript的创建者Brendan Eich。
清除启动开始启动
随后,Fabrice Bellard发布了相关的技术说明:http://bellard.org/jslinux/tech.html,从这份文档中我们可以看到:
这个模似器完全由Javascript写成
CPU仿真器使用的是QEMU(接近于原古的486),为了装上Linux,其做了一些改动。
Javascript的终端本来可以使用termlib,但他还是自己写了一个,因为OS的按键和Web浏览器不一样(here)
Linux 使用了2.6.20内核,编译配置在这里,并做了一些小改动。
磁盘用的是Ram Disk,在启动的时候装载。其文件系统由Buildroot ...
Linux 2.6.39-rc3的一个插曲
2011年4月12日,Linux 2.6.39-rc3发布了,Linus Torvalds写了一个发布邮件,其中包含了一个长长的为这个版本做过贡献的人员名单,这个名单中有很多看上去应该是中国人的名字,我挺为他们感到骄傲的(不知道你是否还记得以前本站的”Linux是由谁写的“)。
不过,没过一会,发现了一个bug,经过大家的调查(2.6.38版没有发现这个问题),很快,找到了原因,是因为一个内存地址的问题,一个叫Yinghai Lu的人(看其名字应该是中国人,其邮件是@kernel.org)找到了原因—— radeon card使用了一个不正确的内存地址[0xa0000000 – 0xc000000]。Joerg Roedel跟贴说,这个地址超出了4GB的内存,然后他和Alex Deucher聊了一会,觉得不应该是这个问题,因为这个地址应该是GPU的,而不是系统内存的。
好像,Yinghai Lu没有理会他们说的不应该是这个问题,给出了个fix:
diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/ape ...
如何学好C语言
有人在酷壳的留言版上询问下面的问题
keep_walker :
今天晚上我看到这篇文章。http://programmers.stackexchange.com/questions/62502/small-c-projects
我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!
我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:
虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。
大量的封装好的类库也屏蔽了很多实现细节。
一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(上,下,续)》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技术,很自然的,C语言就被提了上来。
下面是我给这位朋友的一些 ...
纯文本配置还是注册表
我们知道Unix/Linux下的程序配置文件从来都是纯文本的,你可以自由地修改和查看,他们也没有什么什么XML之类的玩意(参看XML的这两篇文章:一,二),这个最重要的Unix文化(参看Unix传奇下篇)40多年来就这么沿续下来了。我很佩服Microsoft的创新能力,一会儿用INI,一会儿用注册表,一会又是用XML,这就是Windows的编程中那“强大”的创新。在网上又看到有人在争论为什么用注册表而不是纯文本,所以,写下这篇文章。
目录
引入注册表所谓的原因
我的观点
纯文本配置文件的好处
真正的原因
引入注册表所谓的原因
首先,让我们来看一下为什么微软觉得要使用注册表而不是ini文件,下面是一些其列出来的ini方面的毛病:
ini文件不支持Unicode
ini文件的安全权限不够
ini文件在多进程下存取会有问题
如果一个进程锁上了这个文件,另一个进程就无法获得,只能出错。
ini文件只能包含字符串,无法使用二进制
解析ini文件相对来说性能比较慢,第一次读写都需要把整个文件读入内存,然后再写回去。
in ...
Linux的cycle日历(你懂的)
这是一个开源项目:http://cycle.sourceforge.net/,其是用python写的。在项目的主页上说,这是一个给妇女用的日历程序,叫cycle,周期,给妇女的,我不多说了,你懂的。下面是一些介绍(请大家注意学习相关的英文单词)
当然,这个小程序不单单只是查看妇女的“周期”(menstruation),其还提供了以下的功能:
第一次的周期 – 在日历上显示为粉色。menstruation周期长度由用户输入的六次周期取平均值确定。
排卵期(Ovulation day)- 在日历上显示为亮绿色,
受精期 (Fertile period)- 在日历上显示为绿色
安全期(Safe Sex)
预产期(Date of birth)
还允许你记一些notes – 医生建议你服用一些荷尔蒙避孕药(hormonal contraceptive)
下面是屏幕截图 ——
注意以下的免责条款:
本程序并不能成为一种避孕的方法。
本程序也不能阻止各种性传染病,如:AIDS
本程序更不能取代你的妇科医生。
一些非常有意思的杂项资源
下面是一些最近在互联网上看到的一些各式各样的资源和文章,当然,都是英文社区的,本来想每一个写一篇文章,但是觉得一篇文章一句话真没劲,所以,把这些东西合并写成一篇文章,这样有利于减轻本站的负载,也有利于节省网络带宽,同样,也就节省了能力和电力,因此也就很环保,很低碳。呵呵。
先是一个《Windows Internal》第五版的第五章的电子版(英文的),你可以在这里下载。关于其它一些电子书,你可以看看本站的这篇文章《免费电子书列表》、《非常不错的编程技术教程》、《超过100本的linux免费书籍》和《20本最好的Linux免费书籍》
→
http://www.3dtin.com/是一个用纯Javascript搞的一个3D作图的网站,Javascript是越来越强大了。这个演示可以让你看到以后Web应用的潜力。关于Javascript的一些东西,你可以参看本站的这些文章《JS1K 演示》、《又一个Javascript试验田》、《一个Windows 3.1的Web网站》、《哥是玩程序的》。
→
说到这些很酷很炫的东西,大家一定会想到使用Flash,不过,目前的Flash正在受 ...
用脚本实现哄宝宝睡觉(Demo)
去年,本站发布了一篇文章《用脚本哄宝宝睡觉》,具体想法是把摇篮和光驱连一起,然后用脚本把光驱弹出和收入以实现驱动摇篮。今天在网上看到一个具体实现,呵呵。看下面的视频:
使用grep恢复被删文件内容
在Unix/Linux下,最危险的命令恐怕就属rm命令了,每次在root下使用这个命令的时候,我都要盯着命令行看上几分钟才敢把回车敲下去。以前,看到同事在脚本中使用rm命令 —— rm {$App_Dir}/* 。因为脚本没有判断变量$App_Dir是否为空,结果,在一次用root操作的时候,整个操作系统一下就不见了,还好只是开发机。从此,我们大家都再也不敢使用rm命令了。
这里给大家介绍一个小技巧用来恢复一些被rm了的文件中的数据。我们知道,rm命令其实并不是真正的从物理上删除文件内容,只过不把文件的inode回收了,其实文件内容还在硬盘上。所以,如果你不小删除了什么比较重要的程序配置文件的时候,我们完全可以用grep命令在恢复,下面是一个恢复示例:
grep -a -B 50 -A 60 'some string in the file' /dev/sda1 > results.txt
说明:
关于grep的-a意为–binary-files=text,也就是把二进制文件当作文本文件。
-B和-A的选项就是这段字符串之前几行和之后几行。
/dev ...
Unix传奇(上篇)
【本文曾于2007年3月于我在CSDN上的BLOG发布,现在我把其搬到酷壳来,一来是觉得这段历史相当传奇,值得大家再看看,二来也和我在酷壳上发布的一些文章相互链接。】
了解过去,我们才能知其然,更知所以然。总结过去,我们才会知道我们明天该如何去规划,该如何去走。在时间的滚轮中,许许多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考验散发着经久的魅力,让人津津乐道,流传至今。要知道明天怎么去选择,怎么去做,不是盲目地跟从今天各种各样琳琅满目前沿技术,而应该是去 —— 认认真真地了解和回顾历史。
Unix是目前还在存活的操作系统的元老了,走过了40年的历程(参看《Unix 40年:Unix年鉴》、《Unix 40年:昨天,今天和明天》)。在技术更新如此迅速的计算机世界的今天,Unix始终保持它那神圣的光环,它那曲折和令人叹息的历史,以及由它引发的思想变革,对当今计算机文化造成的深远影响,这40年所产生的人和事,让它成为了一个传奇,不能不让人为之惊叹。
这是一段所有从事计算机行业人员尤其是软件开发人员需要了解的历史。Unix的传奇历史是整个计算机世 ...
ldd 的一个安全问题
我们知道“ldd”这个命令主要是被程序员或是管理员用来查看可执行文件所依赖的动态链接库的。是的,这就是这个命令的用处。可是,这个命令比你想像的要危险得多,也许很多黑客通过ldd的安全问题来攻击你的服务器。其实,ldd的安全问题存在很长的时间了,但居然没有被官方文档所记录来下,这听上去更加难以理解了。怎么?是不是听起来有点不可思议?下面,让我为你细细道来。
首先,我们先来了解一下,我们怎么来使用ldd的,请你看一下下面的几个命令:
(1) $ ldd /bin/grep
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 (0xb7eca000)
/lib/ld-linux.so.2 (0xb801e000)
(2) $ LD_TRACE_LOADED_OBJECTS=1 /bin/grep
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 ...
用脚本实现哄小孩睡觉
当然,不并需要一个天才式的人才能做到这个事,其实这个事情很简单。让我来一点一点向你解释。下面是一些准备工作。
首先,你得找一台PC机,得配上光驱,光驱可以破一点。
然后,你得给这台PC机上装上Linux,不需要太多的东西,最基本的就行了。
然后,你得写下下面的代码。
while [1 = 1]
do
#弹出光驱
eject
sleep 1
#收回光驱
eject -t
sleep 1
done
在运行代码之前,请确保你们小孩的摇篮和PC机的光驱连接在一起。当然,你也可以在脚本中播放一曲催眠曲。注意,脚本其中的sleep 1是为了配合上摇篮的节奏,这样需要你在实际过程中调试一下。
这样的成本是不是有点高?居然还要达上一台电脑,呵呵。所以,我就不建议你用Windows来实现了,那样的成本可能会更高。
CentOS上php的问题及Selinux安全设置
最近有位站长在用我们WebIM客户端的时候,无法登录我们的WebIM服务器,十分惊讶。 在我们的用户里尚属首例,其实更惊讶的是我的CentOS也遇到了同样的问题。然后分析了这位站长的HttpResponse , Shamee :( 一样的OS.
搜了一下,发现的解决方法都是在代码上。 我想可能关键词有错误,因为我坚信我的问题肯定不在代码上,应该是来自OS本身的限制。于是重新debug了一下代码,报错 permission (13) connection。然后直接在洋人的邮件列表里搜了一下。
问题确定了 是SeLinux(http://zh.wikipedia.org/wiki/SELinux)安全策略的限制。
这下问题明了了,执行 /usr/sbin/setenforce 0就能迅速关闭SELINUX,或者vi /etc/selinux/config 把enforcing改成permissive 然后reboot.
但是我想了一下,就算安全级别为B1的Linux被攻击的可能小,但是总会有面对这种问题的时候,况且这种解决访问本身并不优雅。
于是想了下 把Apache脱离SeLinux ...
如何调试bash脚本
Bash 是Linux操作系统的默认Shell脚本。Shell是用来处理操作系统和用户交互的一个程序。Shell的脚本可以帮助用户自动化地和操作系统进行交互。你也可以理解为一种脚本式的编程。即然有编程,那么,程序的编译器,解释器,调试器就必不可少了,Bash也一样,但在调试方面可能会有一些和编程语言不一样的东西和技术,所以,下面这篇文章主要是说明调试bash脚本的各种技术。
跟踪脚本的执行
你可以让bash打印出你脚本执行的过程中的所有语句。这很简单,只需要使用bash的-x选项就可以做到,下面让我们来看一下。
下面的这段脚本,先是输出一个问候语句,然后输出当前的时间:
#!/bin/bash
echo "Hello $USER,"
echo "Today is $(date +'%Y-%m-%d')"
下面让我们使用-x选项来运行这段脚本:
$ bash -x example_script.sh
+ echo 'Hello chenhao,'
Hello chenhao,
++ date +%Y-%m-%d
+ echo 'Today is 2009-08-31'
Toda ...
Linus Torvalds 语录 Top 10
下面是Linux的创始人Linus Torvalds的一些言论,这是我个人认为最有意思的10句。如果你想看更多的Linus Torvalds说过的话,你可以看看他在维基百科上的词条:Linux Torvalds。我们在下面给出中英文对照,希望你能喜欢。
“Really, I’m not out to destroy Microsoft. That will just be a completely unintentional side effect ” (真的,我并不是想要干掉Microsoft,如果真是那样了,那完全是一个无意的副作用)——”The Way We Live Now: Questions for Linus Torvalds”, 接受《New York Times》的采访, 2003-09-28.
“Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it”(只有愚昧的人才会用 ...
你用Linux命令行吗?
想一想,如果你要把一个图片的尺寸改小一点,你会怎么办?当然,我一定会启动一个图形编辑软件,然后,打开图片文件,从菜单上选择相关的工具选项,更改大小,然后保存文件。就算是在Linux下,我可能也是这么干的,比如Ubuntu下也是这样,如下图:
但其实,如果你用命令行来更改图片大小的话,一条语句就可以搞定了。如:
convert -resize 300 profile.jpg profile_small.jpg
当然,如果你要使用这样的命令,你需要安装Imagemagick,你可通过apt-get install imagemagick来安装一下。
不管怎么说,很简单吧,下面还有几个:
1)给图片加阴影
给图片加阴影可以使用下面的这个命令:
convert screenshot.jpg
\( +clone -background black -shadow 60×5+0+5 \)
+swap -background white -layers merge +repage shadow.jpg
效果如下:
2)把两个MP3拼起来
cat 1.mp3 2.mp3 > ...