GDB 7.0 发布
2009年10月06日,GDB7.0正式发布,新的版本你可以在这里下载。本次版本,不但有大家所关注的《GDB回溯调试技术》,同样还有其它大量的新特性,和对新平台的支持。
新版的GDB7.0支持如下新的平台或配置:
x86/x86_64 Darwin
x86_64 MinGW
Lattice Mico32
x86/x86_64 DICOS
S+core 3
The remote stub now supports x86 Windows CE
其主要的新加入的功能有:(看上去相当地高科技啊,很多术语都不知道怎么翻译,请注意后面的相关解释)
Python 脚本调试
回溯调试,调式过程记录并重演。
不间隔调试。 Non-stop debugging
并行调试。 Multi-architecture debugging
多进程调试。Multi-inferior, multi-process debugging
注释:
Non-stop 的意思是,当我们在调试一个进程中的某一个或某一些线程时,可以让没有被调试的线程继续运行不停止。
Multi-a ...
mochiweb参数化模型Req相关功能
本文的笔记讲述如何从client请求中获取各种参数,如method, request path, headers, cookie等。
Mochiweb是Erlang实现的一个开源Web服务器,它设计的一个亮点就是他本身的Http请求的参数化模型。因此我们可以用OO的方式来理解它的相关用法。
它的实现在mochiweb_request模块.在mochiweb中,每个client请求其构造一个 Req 对象(注:这个“对象“只是便于理解的提法), Req 可以理解成 mochiweb_request 的一个参数化或实例化.
1.Req:get(method) -> ‘OPTIONS’ | ‘GET’ | ‘HEAD’ | ‘POST’ | ‘PUT’ | ‘DELETE’ | ‘TRACE’.
获取Http请求的方式.
2.Req:get(raw_path) -> String().
获取raw_path.比如 http://www.nextim.cn/session/login?username=test#p,那/session/login?username=t ...
高科技:GDB回溯调试
也许大家知道,GDB 版本7.0 (2009年9月release) 会是第一次开始支持Reversable Debugging (回溯调式技术),这是一种可以让在debug程序时当我们运行单步调试或是运行到断点时,可以以逆向执行程序的一种技术。(这是GNU的新闻链接)
下面是GDB7.0版本所支持的回溯调试的命令,其中包括,continue,step,以及调试方向的设置。
reverse-continue (‘rc’) — 继续程序运行到断点,但是是逆向运行程序。
reverse-finish — 逆向运行程序直到跳出本层函数。
reverse-next (‘rn’) — 语句单步向后跟踪程序。
reverse-nexti (‘rni’) — 指令单步向后一条指令。
reverse-step (‘rs’) — 向后执行一条语句,单步进入。
reverse-stepi — 向后执行一条指令,单步进入。
set exec-direction (forward/reverse) — 设置程序执行方向,向前或向后。
在网上查了一下,发现VS2010好像也准备要支持这个东西,微软叫这个东西为 ...
算法和数据结构词典
我们知道,在编程的世界里,主要就是两个事,用一定的算法去处理一定的数据。算法可以理解为业务逻辑流程,而数据自然一定是按某种结构来存放,这就是数据结构。我们知道,数据结构的修改一定会导致算法的修改,我们也知道,数据结构直接关系到了整个程序的繁简性,高效性。而算法则是关系到数据处理的时间、空间性能,以及日后的扩展和维护。这两个东西是计算机科班出生的人或是需要学习编程的人必需要注意的两件头等大事。
下面这个网站,由 Software and Systems Division, Information Technology Laboratory 创建。
http://xlinux.nist.gov/dads/
这是一个关于算法,算法技术,数据结构,系统架构等相关问题的一个词典。其中,算法包括了一些常见的算法,比如: Ackermann’s function ,一些算法问题包括了 traveling salesman(销售员出差问题) and Byzantine generals(拜占庭将军问题),还有一些关于这些问题,算法的 实现链表 以及更多的信息。而索引页包括 领域索引 和 ...
TCP网络关闭的状态变换时序图
TCP共有11个网路状态,其中涉及到关闭的状态有5个。
在我们编写网络相关程序的时候,这5个状态经常出现。因为这5个状态相互关联,相互纠缠,而且状态变化触发都是由应用触发,但是又涉及操作系统和网络,所以正确的理解TCP 在关闭时网络状态变化情况,为我们诊断网络中各种问题,快速定位故障有着非常重要的作用和意义。
下是是根据W.Richard Stevens的《TCP/IP详解》一书的TCP状态转换图。
非常简单的Python HTTP服务
如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等。那么, Python 可能帮助你。使用Python可以完成一个简单的内建 HTTP 服务器。于是,你可以把你的目录和文件都以HTTP的方式展示出来。佻只需要干一件事情,那就是安装一个Python。
实际上来说,这是一个可以用来共享文件的非常有用的方式。实现一个微型的HTTP服务程序来说是很简单的事情,在Python下,只需要一个命令行。下面是这个命令行:(假设我们需要共享我们的目录 /home/haoel 而IP地址是192.168.1.1)
$ cd /home/haoel
$ python -m SimpleHTTPServer
这就行了,而我们的HTTP服务在8000号端口上侦听。你会得到下面的信息:
Serving HTTP on 0.0.0.0 port 8000 ...
你可以打开你的浏览器(IE或Firefox),然后输入下面的URL:
http://192.168.1.1:8000
如果你的目录下有一个叫 index.html 的文件名的文件 ...
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 ...
微软在从Google赢取搜索引擎市场份额
7月到8月,微软市场份额从8.9%到了9.3%; Google掉了1.7%
Bing显然让Google有些紧张,不仅Bing在界面上赢得了一部分消费者的好评,而且其在某些垂直领域的深度整合使得Bing的盈利能力具有了相当竞争力。相信Google在幕后紧锣密鼓的测试新界面和新搜索功能的同时,也在严阵以待地部署销售团队(如果经济萧条好转,旅游和健康将会是最先复苏的领域,也是Bing目前占有优势的战场)
拭目以待吧!
原文地址:http://news.bbc.co.uk/2/hi/technology/8268356.stm
Microsoft increases search share
Microsoft’s Bing search engine is making inroads into Google’s dominance of the search market according to data from US net measurement firm ComScore.
Its latest figures show Microsoft’s share of t ...
C++的std::string的“读时也拷贝”技术!
C++的std::string的读时也拷贝技术!
嘿嘿,你没有看错,我也没有写错,是读时也拷贝技术。什么?我的错,你之前听说写过时才拷贝,嗯,不错的确有这门技术,英文是Copy On Write,简写就是COW,非常’牛’!那么我们就来看看这个’牛’技术的效果吧。
我们先编写一段程序
#include <string>
#include <iostream>
#include <sys/time.h>
static long getcurrenttick()
{
long tick ;
struct timeval time_val;
gettimeofday(&time_val , NULL);
tick = time_val.tv_sec * 1000 + time_val.tv_usec / 1000 ;
return tick;
}
int main( )
{
string the_base(1024 * 1024 * 10, 'x');
long begin = g ...
WebTTY!太酷了!
这真是一件很Cool的事,在Web上操作Linux,请访问下面这个链接:
http://19.testape.com/webtty_page.php
于是你会看到页面中间的红色,一个小操作系统启动了,红色的最下方是一个bash-2.05b#
试着输入一下命令吧。
bash-2.05b# uname -a
Linux (none) 2.6.18 #2 Mon Dec 29 19:47:06 UTC 2008 i686 GNU/Linux
命令支持的不多,好像只是一个单机版的虚拟机,一但你打开网页时就起动一个。当然,也不排除其完全是假的,因为太简单了,一切都可以fake出来。
Alice梦游UNIX仙境
本文来源:http://www.pma.caltech.edu/Publications/alice.in.unix.land.html
(这是一篇1989年的文章)
Alice 正在在她的显示器上读着一些信息,她开会怀疑所有的事情并不是应该的那样。“程序太大了,而无法适应内存”,她读到。
“一个很奇怪的事情”,她说,“我所做的也就是在启动我的字处理程序会运行了14个TSR(terminate-and-stay-resident 常驻程序)。所有这些程序需要使用4M的内存,我希望我能使用超过640K以上的内存”。
就在那个时候,一个小的白色的顾问(一个非常白的顾问)跑过了房间。“哦,我的外套和领带”,他说到,“我要迟到了。并且是每小时150元。”Alice本想对他说点什么,他却跳到了Alice的显示器里并到在操作系统后面消失了。
Alice 从来没有见过有人可以跳到显示器里,并且肯定不是通过操作系统干。但是,曾有人告诉他,DOS这个操作系统是非常肤浅的。于是,她没有怎么犹豫,Alice也跳了进去。
Alice发现她自己在一个明亮的走廊里。她不知道要做什么,她开始向前走,走过了一 ...
编译vim解决中文支持
最近开始抛弃Ubuntu折腾CentOS 5.3(注:无意挑起OS之争),每当换一个OS,第一个配置的就是VIM。
介于以前在MacOSX的编译经验,直接三部曲
./configue && sudo make && sudo make install
解决的问题。 但在CentOS之后发现无论如何都不支持中文。
通过文档的翻阅和google的搜索,发现了问题出现在编译上。vim支持中文需要2个基本feature:multi_byte和iconv。
在vim中输入 :version 发现这2个feature都是 – multi_byte 和 – iconv。看来编译的时候参数没有配置对。
于是重新执行以下代码
./configure –prefix=/usr –with-features=huge
sudo make
sudo make install
问题就解决了。
另外vim配置文件从第一行(我是unicode的统一论者),加上
set enc=utf-8
set tenc=ut ...
Oracle的战书!
http://www.oracle.com/features/suncustomers.html
8个实用而有趣Bash命令提示行
很多人都对过命令行提示的重要性不屑一顾,甚至是一点都不关心。但是我却一点都不这么认为,一个好的命令行提示可以改变你使用命令的方式。为此,我在internet上找到一些非常实用,优秀,并有趣的bash的命令行提示。下面我将我最喜欢使用的一些命令行提示罗列如下。
注意 – 要使用下面这些提示,你可以拷贝粘贴这些以”PS1″打头的内容到你的终端上,为了使你的改变永久生效,还要将这些内容粘贴到你使用用户的~/.bashrc文件中去。
1. 在成功执行的命令上增加一个笑脸符号
这个命令提示行可能是这个命令行提示列表中最有趣的一个,但是它也依然有使用的价值。这个提示的想法是基于当你命令被成功执行,你将会得到一个笑脸作为你的命令行提示,一旦的命令执行失败,命令行提示将会换成一个哭脸。
例子:
代码:
PS1=”\if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\[\u@\h:\w]\\$ “
2.更改失败命令的颜色
下面这个命令行提示是我最喜欢的 ...
编程真难啊
上周,在Sun的Java论坛上出现了一个这样的帖子,这个贴子的链接如下:http://forums.sun.com/thread.jspa?threadID=5404590&start=0&tstart=0
LZ的贴子翻译如下:
大家好,我是一个Java的新手,我有一个简单的问题:请问我怎么才能反转一个整数的符号啊。比如把-12转成+12。是的,毫无疑问这是个简单的问题,但我弄了一整天我也找不到什么好的方法。非常感谢如果你能告诉我Java有什么方法可以做到这个事,或者告诉我一个正确的方向——比如使用一些数学库或是二进制方法什么的。谢谢!
这个贴子的沙发给出了答案:
n = -n;
LZ在四楼回复到:
我知道是个很简单的事,可我没有想到居然这么简单,我觉得你可能是对的。谢谢你。
过了一会,又回复到:
不开玩笑地说,我试了,真的没有问题耶!
看到这样的贴子,就能想到国内论坛上很多这样的“问弱智问题的贴子”,结果可能都会是比较惨!是的,国外的互联网文化和国内差不多,都是恶搞的人多于热心的人,呵呵。不过,国外的网民们有一点是好的,再恶搞也是就事搞事,不会有 ...
十个Web开发文章和教程
下面是十个在2009年8月份里出现的十个非常不错的Web开发方面的文章和教程。推荐给大家,当然,都是英文啦。如果你愿意,欢迎翻译后提交给酷壳。
1)一个简单的Lava 灯式的菜单(使用jQuery完成)
2)使用jQuery自动生成文章内容的目录。就像是使用Word一样,设置一下标题,然后可以自动生成文章的目录。
3)使用jQuery为图片创建图片标题和描述。这是一个超Cool的效果,当你的鼠标移到图片上的时候,图片的上下会出现遮覆,上面是标题,下面是描述,相当不错的用户体验,当鼠标移开后,遮覆消失。
4)CSS3速成教程。主要讨论了CSS3的这些特性:旋转和改变大小,动画,Photoshop风格的遮罩,图片倒影,色彩渐变,转换等。有一个不错的flash视频。
5)30+相当有用的Wordpress的巧门。相当相当不错的一些和Wordpress相关的插件和小巧门,非常非常地实用。
6)htaccess技术的权威性指南。本文给出了12个非常有用的apache的设置,可以让你更容易设置你的站点,在这篇文章的最后,还列出了一些经验上的东西。另外,你可以参考本站的《16个简单实用的.hta ...
如何调试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 ...
初学C#编程的注意事项
下面是8个C#编程时的注意事项是给初学者的,可能你知道,也可能你不知道,不过这些都是一些可能会让人疏忽的地方,还是要注意一下。
1.使用String变量:
考虑有下面的一个程序想判断一下字符串是否有内容。
if (someString.Length > 0)
{
// …
}
但是,这个字符串对象很可能是个空对象,所以,最好先判断一下null
if (!String.IsNullOrEmpty(someString))
{
// 是不是更好一些?
}
2.字符器连接
string s = “dev”;
s += “-”;
s += “the”;
s += “-”;
s += “web”;
s += “.”;
s += “com”;
这样做没什么问题,只不过性能不高,因为+=操作符其实调用的是String类的Append访问,所以,+=会有两次函数调用,下面的则会好一些。
StringBuilder s = new StringBuilder();
s.Append(”dev”);
s.Append(”-”);
s.Append(”th ...
谁写了Linux
2009年8月,Linux软件基金会发布了一份叫《Who Writes Linux and Who Supports It》(PDF)的报告。这份报告主要对Linux 2.6.x的开发进行了全方位的统计。看了以后才知道,原来Linux的开发的生产率竟是这样的惊人,而且相当的的令人振奋,所以,在第一时间转过来给大家看看。让人不得不惊叹,这不可思议的具有非凡活力的社区。(注意,我们这里说的是Linux,不是GNU的那些东西,所谓Linux就是Linux的Kernel)
下面是一个导读,希望每一个看到这篇文章的朋友都能看看原文的报告:《Who Writes Linux and Who Supports It》(PDF)
这份报告的一开始就对Linux的开发进行了总结:
每2-3个月一个release
最近的每一次release都超过10000个补丁
有超过1000个开发人员进行开发,他们来自200个公司或组织。
自2005年以来,超过5000个来自500个不同公司的开发人员为Linux内核做过贡献。
自2008年以来,每次release,都大约增加了10%左右的开发人员,而且, ...
Unix Pipes 管道原稿
40年前,Unix操作系统横空出世,Unix不仅仅带来了一个操作系统,还创造C语言,Socket,开源,黑客等等文化,这些文化影响着整个计算机世界的文明,直到今天。
如果说Unix是计算机文明中最伟大的发明,那么,Unix下的Pipe管道就是跟随Unix所带来的另一个伟大的发明。管道的出现,解决的就是让不同功能的程序可以互相连通通讯,从而可以让软件开发,程序开发更加的“高内聚,低耦合”,从而可以让程序“Do one thing, Do it well”,从而可以让程序“Keep it Simple Stupid”等等,这一哲学引影了一代又一代的软件架构,直到今天的云计算。
管道的发名者叫,Malcolm Douglas McIlroy,他也是Unix的创建者,是Unix文化的缔造者之一。他归纳的Unix哲学如下:
程序应该只关注一个目标,并尽可能把它做好。让程序能够互相协同工作。应该让程序处理文本数据流,因为这是一个通用的接口。
下面是管道在1964年10月11日,出现的第一个打印稿,下面是扫描件。
全文如下:
- 10 ...