2011年9月26日星期一

阮一峰的网络日志

阮一峰的网络日志


全文Feed重新发布

Posted: 26 Sep 2011 02:44 AM PDT

好几年前,我曾经发布过一些新闻媒体的全文Feed。

当时,采用了Yahoo的Pipes服务。但是,那个服务不稳定,中文乱码问题始终无法解决。8月底,它改版以后,索性就不能用了。(对一家连Delicious都要卖掉的公司,你还能有什么期望呢?)

放弃这些Feed,有些舍不得,毕竟它们可以提供大量有用信息。

因此今天,我把"全文Feed服务"搬到了自己的服务器上。从此以后,我用自己的资源支持这个服务。

下面是我目前维护的4个Feed,欢迎大家订阅。

(说明:所有Feed托管在Feedburner上面,大陆读者只有用Feed阅读器订阅,直接点击会被屏蔽。)

1. 德国之声

Feed:http://feeds.feedburner.com/dw-world

[说明]

来自德国的权威中文网站,聚焦德国、欧盟与中国的时事新闻话题,以及德中之间经济、文化动态。

2. 华尔街日报(中文版)

Feed:http://feeds.feedburner.com/wsj_cn

[说明]

《华尔街日报》中文版网站,提供美国、亚太、欧洲及中港台政治经济新闻。

3. 《体坛周报》国际足球

Feed:http://feeds.feedburner.com/titan_full

[说明]

体坛网国际足球频道,详尽报道欧洲各大联赛。

4. CNbeta

Feed:http://feeds.feedburner.com/cnbeta_full

[说明]

IT业界资讯。

(完)

文档信息

2011年9月22日星期四

阮一峰的网络日志

阮一峰的网络日志


德国盗版党选举获胜的感想

Posted: 22 Sep 2011 01:14 AM PDT

上周日(9月18日),德国柏林地区选举的结果揭晓。

盗版党获得8.9%的选票,成功进入柏林议会,提名的15个候选人全部当选。

德国盗版党受瑞典盗版党的启发,成立于2006年。2009年议会选举,该党获得2%的选票,没有到达5%的门槛,无法进入议会。今年,总算成功了。

这是除了瑞典以外(瑞典盗版党目前是该国在欧洲议会的第三大党),盗版党第一次在其他国家获得选举胜利。很多分析家认为,这个结果对未来的德国政治影响深远。

大家看看照片,就知道为什么"影响深远"了。

(图片说明:电视辩论时,谁是盗版党一目了然。)

(图片说明:盗版党议员与媒体见面。)

我们常说,政治家必须反映人民的心声。有了盗版党,我们才意识到,政治家还必须看上去像人民,不能高高在上,装得一本正经,跟普通人一点不像。因为说到底,政治就是一群普通人的自我管理。

盗版党的政治主张,非常简单,只有两点:

  (1)获取信息是一种人权。为了个人使用的目的,自由获取版权材料的权利,应该得到保护。

  (2)反对网络审查。

从快速上升的支持率来看,这些主张正在得到越来越多的人的拥护。人们对现行版权制度和网络监管制度,感到越来越不满。

盗版党的发起人和中坚分子,主要是程序员和计算机爱好者。一般来说,程序员对政治不太感兴趣,但是这不代表他们没有政治主张。

Paul Graham在《黑客与画家》中这样说:

"为什么程序员那么在乎言论自由?部分原因在于,革新对于软件行业实在太重要了,而革新和异端实际上是同一件事。"

如果政治家们漠视程序员的心声,强行维持一种封闭的制度,不允许自由表达,不允许改革,那么总有一天,程序员会登上政治舞台,领导一股新兴的、年轻的政治力量,彻底荡涤这个旧制度。

(完)

文档信息

2011年9月18日星期日

阮一峰的网络日志

阮一峰的网络日志


学习C语言的教材

Posted: 18 Sep 2011 12:12 AM PDT

我的C语言是自学的,这些年看过不少教材。

下面,我对其中一些教材做个点评。

1. How to Think Like a Computer Scientist: C version

这是我读过最易懂的C语言教材。

虽然它只讲解最基本的语法,但是写得特别好懂,深入浅出,读起来不觉得累,而且它还允许免费下载。我认为,这是C语言的首选入门教材。

下载网址:http://prof.beuth-hochschule.de/scheffler/lehre/programmieren-in-c/

2. C Primer PlusC Programming: A Modern Approach

上面这两本,都是著名的C语言初级教材,都是厚厚的大部头。

我通读过它们,感觉都写得不错,都值得推荐。但是因为这两本书定位类似,内容重复,相比之下,我觉得C Primer Plus可能更适合中国读者的思维,更易读一些。

3. C Programming Language (2nd Edition)

这是最著名的C语言书籍。

但是,它不是写给初学者看的,更偏重C语言的编程技巧和算法思维。我读过两遍,还是觉得很多地方没读懂。

4. 国产教材

通常来说,国产教材质量不高,不值得推荐。但是有两本,我想特别提一下。

《零基础学C语言》,康莉等著,机械工业出版社,2009。

这本是我在图书馆里偶然捡起来的,翻了几页,发现是原创的,而且写得比较认真,代码解释详尽,行文错误少,就把它读完了。我认为,在国产教材中,这本书的质量很高,值得推荐。

《Linux C编程一站式学习》

这本书在国产书籍中罕见地采用了GFDL许可证,http://learn.akae.cn有在线阅读,可以免费下载。这一点值得高度肯定。

但是,正如前言所说,它的主要资料来源是两本英语教材《How To Think Like A Computer Scientist: Learning with C++》和《Programming from the Ground Up》,以及一些教师的上课讲义,然后拼在一起,做成一本书。所以,造成它的体系比较生硬,缺乏整体感,衔接得不好,很多地方没有做到由潜入深、循序渐进。所以,我觉得这本书不适合初学者,可以当做手册查资料。

5. Beginning Linux Programming

这是我现在正在阅读的书。我看它在Amazon上排名Linux C编程的第一位,就选了它。

它主要讲解如何用C语言调用Linux的系统API,偏重基本概念的解释,我已经读了两章,感觉还不错。

=================================

下面想听听大家的意见。

我现在的C语言,到了这样一个水平:语法已经基本掌握了,可以独立开发一些小程序。下一步,我想进一步提高C语言水平,主要用于Linux开发。

大家能不能推荐一些C语言的中级教材?

(完)

文档信息

2011年9月12日星期一

阮一峰的网络日志

阮一峰的网络日志


理解RESTful架构

Posted: 12 Sep 2011 12:53 AM PDT

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。

这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。

网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,现在我们必须考虑,如何开发在互联网环境中使用的软件。

RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

但是,到底什么是RESTful架构,并不是一个容易说清楚的问题。下面,我就谈谈我理解的RESTful架构。

一、起源

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。

Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。

他这样介绍论文的写作目的:

"本文研究计算机科学两大前沿----软件和网络----的交叉点。长期以来,软件研究主要关注软件设计的分类、设计方法的演化,很少客观地评估不同的设计选择对系统行为的影响。而相反地,网络研究主要关注系统之间通信行为的细节、如何改进特定通信机制的表现,常常忽视了一个事实,那就是改变应用程序的互动风格比改变互动协议,对整体表现有更大的影响。我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。"

(This dissertation explores a junction on the frontiers of two research disciplines in computer science: software and networking. Software research has long been concerned with the categorization of software designs and the development of design methodologies, but has rarely been able to objectively evaluate the impact of various design choices on system behavior. Networking research, in contrast, is focused on the details of generic communication behavior between systems and improving the performance of particular communication techniques, often ignoring the fact that changing the interaction style of an application can have more impact on performance than the communication protocols used for that interaction. My work is motivated by the desire to understand and evaluate the architectural design of network-based application software through principled use of architectural constraints, thereby obtaining the functional, performance, and social properties desired of an architecture. )

二、名称

Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。

如果一个架构符合REST原则,就称它为RESTful架构。

要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词代表了什么涵义。如果你把这个名称搞懂了,也就不难体会REST是一种什么样的设计。

三、资源(Resources)

REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。

所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。

所谓"上网",就是与互联网上一系列的"资源"互动,调用它的URI。

四、表现层(Representation)

"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。

比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

五、状态转化(State Transfer)

访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。

互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

六、综述

综合上面的解释,我们总结一下什么是RESTful架构:

  (1)每一个URI代表一种资源;

  (2)客户端和服务器之间,传递这种资源的某种表现层;

  (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

七、误区

RESTful架构有一些典型的设计误区。

最常见的一种设计错误,就是URI包含动词。因为"资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。

举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,然后用GET方法表示show。

如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:

  POST /accounts/1/transfer/500/to/2

正确的写法是把动词transfer改成名词transaction,资源不能是动词,但是可以是一种服务:

  POST /transaction HTTP/1.1
  Host: 127.0.0.1
  
  from=1&to=2&amount=500.00

另一个设计误区,就是在URI中加入版本号

  http://www.example.com/app/1.0/foo

  http://www.example.com/app/1.1/foo

  http://www.example.com/app/2.0/foo

因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分(参见Versioning REST Services):

  Accept: vnd.example-com.foo+json; version=1.0

  Accept: vnd.example-com.foo+json; version=1.1

  Accept: vnd.example-com.foo+json; version=2.0

(完)

文档信息

2011年9月9日星期五

阮一峰的网络日志

阮一峰的网络日志


Michael S. Hart去世了

Posted: 08 Sep 2011 01:44 PM PDT

早上起床看到讣告,古登堡计划宣布,创始人Michael S. Hart(1947-2011)去世。我非常难受。

古登堡计划是世界上最早的电子书网站,全部由志愿者维护,主要提供公共领域的文史作品下载,完全免费。目前,藏书量约为36000种,囊括20世纪之前的主要英语文学作品。

它是由Michael S. Hart在1971年创建的。那一年的7月4日,美国国庆日,24岁的Hart像往常一样,去伊利诺斯大学的机房上班。路过一家药店的时候,有人发给他一张传单,上面印着《独立宣言》。Hart看着这张传单,心想也许可以把它输入电脑,他就这样成了世界上第一个将《独立宣言》变成电子文本的人。(请注意,那个年代的电脑既没有显示器,也没有键盘,所谓"电子文本"指的就是一卷纸带,而制作纸带比键盘打字麻烦得多。)

Hart意识到,电子文本的传播比纸质文本方便得多,可以让更多的人受益。从此一发不可收拾,他接连将《圣经》和莎士比亚作品输入电脑,并且发起了古登堡计划(古登堡是印刷机的发明者),号召全世界的志愿者加入,一起把公共领域的书籍变成电子文本,放上网供人们下载。

上世纪末,我开始上网的时候,Google和Wikipedia都还不存在。我想看英语小说,但是不知道哪里有。这时,我就发现了古登堡计划。我被它震惊了,世界上居然有人做这样的"傻事":辛辛苦苦把一本书输入电脑,然后放上网供用户下载,一分钱也不收,只为了让你看到它,只为了让这个世界变得更美好一点!

我就是从这个时候,开始明白了,有一种人生叫做"分享",有一种方式叫做"合作",有一种态度叫做"开放",有一种精神叫做"奉献"。生命的意义或许就是让别人得到更多。后来,我在维基百科和开源软件中,一再目睹这种模式的威力,坚定了自己的人生也走这条道路的决心。

Michael S. Hart与理查德·斯托曼一样,都是我心目中的英雄和伟人。他有一句口号"把电子书带给世界"(Give the world eBooks),我一直觉得这是一句很伟大的话,就好像普罗米修斯说"把光明带给人类"。只有那些最了不起的人才有勇气说出这种话,并用一生实践它。

几个月前,Michael S. Hart曾经写过一段话,很好地反映了他的想法:

"大多数人没有意识到,电子书有一个特点。它是人类有史以来,制造出来的第一种像空气一样取之不竭的产品。如果你仔细思考这一点,你就会意识到,我们正在做正确的事情。"(One thing about eBooks that most people haven't thought much is that eBooks are the very first thing that we're all able to have as much as we want other than air. Think about that for a moment and you realize we are in the right job.)

现在,他去世了,但是他开辟的事业永存。那是正确的道路,将一直有人走下去。

四年前,"Book People"邮件列表关闭的时候,我曾经写过一段话,我想套用在这里作为本文的结尾:

"谢谢你,Michael S. Hart先生。感谢你所做的一切。在遥远的中国,这对一个青年的成长起到了决定性的影响。"

(完)

文档信息

2011年9月4日星期日

阮一峰的网络日志

阮一峰的网络日志


curl网站开发指南

Posted: 03 Sep 2011 08:20 PM PDT

我一向以为,curl只是一个编程用的函数库。

最近才发现,这个命令本身,就是一个无比有用的网站开发工具,请看我整理的它的用法。

===================================

curl网站开发指南

阮一峰 整理

curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。

它支持多种协议,下面举例讲解如何将它用于网站开发。

一、查看网页源码

直接在curl命令后加上网址,就可以看到网页源码。我们以网址www.sina.com为例(选择该网址,主要因为它的网页代码较短):

  curl www.sina.com

  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <html><head>
  <title>301 Moved Permanently</title>
  </head><body>
  <h1>Moved Permanently</h1>
  <p>The document has moved <a href="http://www.sina.com.cn/">here</a>.</p>
  </body></html>

如果要把这个网页保存下来,可以使用-o参数,这就相当于使用wget命令了。

  curl -o [文件名] www.sina.com

二、自动跳转

有的网址是自动跳转的。使用-L参数,curl就会跳转到新的网址。

  curl -L www.sina.com

键入上面的命令,结果就自动跳转为www.sina.com.cn。

三、显示头信息

-i参数可以显示http response的头信息,连同网页代码一起。

  curl -i www.sina.com

  HTTP/1.0 301 Moved Permanently
  Date: Sat, 03 Sep 2011 23:44:10 GMT
  Server: Apache/2.0.54 (Unix)
  Location: http://www.sina.com.cn/
  Cache-Control: max-age=3600
  Expires: Sun, 04 Sep 2011 00:44:10 GMT
  Vary: Accept-Encoding
  Content-Length: 231
  Content-Type: text/html; charset=iso-8859-1
  Age: 3239
  X-Cache: HIT from sh201-9.sina.com.cn
  Connection: close

  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <html><head>
  <title>301 Moved Permanently</title>
  </head><body>
  <h1>Moved Permanently</h1>
  <p>The document has moved <a href="http://www.sina.com.cn/">here</a>.</p>
  </body></html>

-I参数则是只显示http response的头信息。

四、显示通信过程

-v参数可以显示一次http通信的整个过程,包括端口连接和http request头信息。

  curl -v www.sina.com

  * About to connect() to www.sina.com port 80 (#0)
  * Trying 61.172.201.195... connected
  * Connected to www.sina.com (61.172.201.195) port 80 (#0)
  > GET / HTTP/1.1
  > User-Agent: curl/7.21.3 (i686-pc-linux-gnu) libcurl/7.21.3 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
  > Host: www.sina.com
  > Accept: */*
  >
  * HTTP 1.0, assume close after body
  < HTTP/1.0 301 Moved Permanently
  < Date: Sun, 04 Sep 2011 00:42:39 GMT
  < Server: Apache/2.0.54 (Unix)
  < Location: http://www.sina.com.cn/
  < Cache-Control: max-age=3600
  < Expires: Sun, 04 Sep 2011 01:42:39 GMT
  < Vary: Accept-Encoding
  < Content-Length: 231
  < Content-Type: text/html; charset=iso-8859-1
  < X-Cache: MISS from sh201-19.sina.com.cn
  < Connection: close
  <
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <html><head>
  <title>301 Moved Permanently</title>
  </head><body>
  <h1>Moved Permanently</h1>
  <p>The document has moved <a href="http://www.sina.com.cn/">here</a>.</p>
  </body></html>
  * Closing connection #0

如果你觉得上面的信息还不够,那么下面的命令可以查看更详细的通信过程。

  curl --trace output.txt www.sina.com

或者

  curl --trace-ascii output.txt www.sina.com

运行后,请打开output.txt文件查看。

五、发送表单信息

发送表单信息有GET和POST两种方法。GET方法相对简单,只要把数据附在网址后面就行。

  curl example.com/form.cgi?data=xxx

POST方法必须把数据和网址分开,curl就要用到--data参数。

  curl --data "data=xxx" example.com/form.cgi

如果你的数据没有经过表单编码,还可以让curl为你编码,参数是--data-urlencode。

  curl --data-urlencode "date=April 1" example.com/form.cgi

六、文件上传

假定文件上传的表单是下面这样:

  <form method="POST" enctype='multipart/form-data' action="upload.cgi">
    <input type=file name=upload>
    <input type=submit name=press value="OK">
  </form>

你可以用curl这样上传文件:

  curl --form upload=@localfilename --form press=OK [URL]

七、Referer字段

有时你需要在http request头信息中,提供一个referer字段,表示你是从哪里跳转过来的。

  curl --referer http://www.example.com http://www.example.com

八、User Agent字段

这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页,比如手机版和桌面版。

iPhone4的User Agent是

  Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7

curl可以这样模拟:

  curl --user-agent "[User Agent]" [URL]

九、cookie

使用--cookie参数,可以让curl发送cookie。

  curl --cookie "name=xxx" www.example.com

至于具体的cookie的值,可以从http response头信息的Set-Cookie字段中得到。

十、增加头信息

有时需要在http request之中,自行增加一个头信息。--header参数就可以起到这个作用。

  curl --header "xxx: xxxxxx" http://example.com

十一、HTTP认证

有些网域需要HTTP认证,这时curl需要用到--user参数。

  curl --user name:password example.com

【参考资料】

  * Using cURL to automate HTTP jobs

  * 教你学用CURL

(完)

文档信息

2011年9月1日星期四

阮一峰的网络日志

阮一峰的网络日志


思思诞生记(转载)

Posted: 01 Sep 2011 02:05 AM PDT

首先,插播一条消息。

去年七月,我曾去上海儿童医学中心,探望白血病儿童马粒之。当时,他的情况很危险,癌症复发,但是他家已经接近破产,无力承担30万元的骨髓移植手术费。

我在网志上呼吁大家为他捐款,经过社会各界的支援,最终募集到了四十多万元。2010年9月19日,马粒之进入隔离舱,完成了骨髓移植。

一年过去了,病情没有复发,手术初步成功。昨天,他的爸爸马书柱告诉我,他们准备离开上海,返回老家了。具体情况请看他的留言

我很高兴,没有辜负大家的信任,这件事情有了一个圆满的结果。谢谢所有去年捐过款的朋友,你们的爱心拯救了一个孩子的生命。

马粒之能够活下来,全因为你们。我代表他谢谢大家。

==============================================

下面是今天我想说的另外一件事情,我需要大家的帮助。

事情要从十年前讲起,请保持耐心读完。

回到2002年,我管理着一个论坛。互联网上我最早的一些朋友,都是在那个论坛上认识的。

当时,Pin还是一个小姑娘,刚从某个大专的"外贸英语"专业毕业,在浙江一个县里的私营家具公司当外贸业务员。有一次,她去迪拜参加家具展销会,回来后就兴冲冲地在论坛上分享她的迪拜见闻。那时,她对未来有很多幻想,会跟我们讨论,有个约旦客户在挖她,要不要去那里。

后来,一家香港服装公司招聘菲律宾工厂的业务员,她就应聘了。在蚊虫出没的菲律宾乡下,她与当地的纺织女工,一起在集体宿舍里住了将近三年。

每隔几个月,她会给我发一封邮件,谈谈那里的生活。我记得,她说梦想回国后成为服装设计师,就报名参加了一个马尼拉的服装设计培训班,每周末借进城的机会去上课。

但是,那终究只是一个梦想。2006年,Pin辞职回国了,想在青春消逝之前,确定自己的人生到底该干什么。除了被别人当做标准零件、在流水线上过完一生以外,她想看看还有没有其他出路。她先是在中国传媒大学参加了一个影视制作培训班,学费一万元,这花掉了她很大一部分积蓄。她在北京郊区租了一张床,每天单程坐两个小时公共汽车去听课。课程上完以后,每人拿到了一张结业证书,于是一切就这样结束。Pin发现,除了风沙以外,北京留给她的印象就是一个巨大冰冷的迷宫,对于她这样的外来者,奔波一天只能做一件事,甚至一件事也做不成。

她回到武汉,在电台当实习记者,偶尔兼主持人,但是终究拿不到正式编制。于是,她最后还是干上了老本行----外贸培训,为企业培训外贸业务员。2010年12月,Pin结婚了,我们都为她找到归宿而感到高兴。

但是,不幸的事件发生了。今年2月7日,新婚还不满三个月,她的丈夫因突发脑溢血去世,留下了她和肚子里的孩子。

Pin忍着巨大的悲伤,在经济条件十分拮据的情况下,明知困难重重,依然决定要把孩子生下来,抚养成人。今年7月12日,她的女儿诞生了,取名为"思思",思念的思。

现在,她没有工作,一个人在家带孩子,经济压力非常大。她跟我说,这次分娩只花了3000多元,目前坚持用母乳喂养,希望老天保佑自己和孩子不要生病。我想请求大家帮帮她和她的女儿,能不能为她介绍一个合适的工作。(目前是哺乳期,只能兼职,几个月以后可以全职。)她现在武汉,但是其他城市也愿意去。

她的Email是pin1121@163.com,有意的朋友欢迎与她联系。

谢谢。

===============================================

思思诞生记

作者:Pin

原文网址:http://blog.bomoo.com/pin/archives/1535/

0.

怀孕后第一个月,我有少量出血,这是我根本没想到自己怀孕的原因,我以为是月经。若是知道了的话,就不会飞赴菲律宾舟车劳顿地出差,在海里游泳以及傻乎乎地吃了不少感冒药。

我的妊娠反应是困得要命,每天下班后第一件事就是想扑倒在床上,然后是晨呕,手心发烫,最后一项最特殊,就是屁股痛,据说只有2%的孕妇会产生这种坐骨神经痛。

各种平媒广告里介绍的验孕棒真的不可信,我买过一根棒棒,说是出现两条线则说明怀孕,一条则是未孕----但棒棒显示的结果是第一条线明显,第二条若隐若现,我将丢入垃圾桶的棒棒捡起来不甘心地又观察过几次,这似怀非怀的,怎么个判断法呀?

1.

去医院挂号后排队等候诊断,进入诊室,前面队伍里,问及几孕几胎时,数字最多的居然是8孕1胎!我很庆幸自己报出0孕0胎的记录。

一说症状,马上叫我去验血,我之前一直以为只有验尿才能判断是否怀孕,原来血液也可以。

化验单显示怀孕了,医生说的第一句话不是"恭喜",而是冷冰冰的"要不要?"

我瞪了她一眼,连忙道:"要要,当然要!"

拿着早孕检查单,我琢磨我马上都三十了,怎么还是早孕呢?

原来"早孕检查"的意思是孕早期检查而非你怀孕太早,我这方面的知识还真是欠缺。

B超检查完后,医生问的更直接----"打不打(胎)?"

什么世道?

2.

按照各种孕期保健书上说的,检查至少是14次,尤其到了孕晚期,要求一周一次的检查,但当得知后期每次去了只是测体重,量腰围宫高,我就没去检查了,只在预产期之前一周去做了最后一次检查。整个孕期,我只做了5次检查,唐氏筛查以及糖尿病的检查都因为错过时间而没查。

不想去检查的原因除了怕麻烦、没时间(当时我还在一所大专代课)之外,还有一个就是讨厌医生极尽所能地开药或营养品。

比如听到我问因为伤心过度是否会影响胎儿发育则马上给我开保胎的中药、看到我因为晕车而脸上无光时便说我营养不够要开维生素和营养针,听说我没有补充叶酸和钙片则马上威胁我说不补的话胎儿就畸形,就流产!

太可怕,我一律回绝了。

3.

建议所有的准妈妈备一本孕育方面的小册子,去妇幼保健领围产手册时,一些奶粉商也制作了一些类似的册子免费发给去检查的孕妇们,里面详细介绍了孕早期、中期以及晚期需要注意的事项以及可能产生的症状,避免自己疑神疑鬼地跑医院检查。

在接近预产期时,我每天就在翻看这些储备知识,这使我知道阵痛、见红才是分娩前24~48小时的预兆,我耐心地等待,不想太早去住院。

4.

所谓阵痛,是可以忍受的,难以忍受的是在产程中,偶尔会将"阵"字去掉,只剩下个"痛"。

如册子上所述,阵痛一开始是不规律的,可忍受的,类似痛经的加剧版,直到呈规律发展,每次阵痛间隔大约十分钟,持续40秒到60秒----感谢这些数字,让我在阵痛时就数着40秒,这使我有个盼头,盼着它40秒后结束,又盼着它10分钟后重新开始,因为我知道,阵痛不加强,孩子是生不下来的。

我是2011年7月11日凌晨4点微微感觉下腹开始有隐隐的疼痛,6点半开始疼痛加重,我便拿了小本子和笔,记录每次阵痛来临的时间。到9点钟左右,我尚未见红,但疼痛更加厉害了些,本不想去医院,但做过妇产科护士的表妹骂我道,你还想等到什么时候?!

入院时我也是问医生:现在入院是否太早了?

医生厉声道:"早?!你想生在家里么?"

我噤声。

5.

没想到没多久,中午时分就见红了。

检查完毕后医生问我是想顺产吧?我点点头。她表示我的条件允许,鼓励我顺,给我安排了个两人病房。我进去时,同病房的已经生了,孩子第三天,我挺着肚子过去打招呼,逗了逗她的小女儿。

中午到傍晚,阵痛一直很有规律,慢慢地在加强,我不喊不叫,还沉着地做阵痛记录。直到夜晚的11:01分,阵痛突然持续了近5分钟,我终于忍受不住,甩开了阵痛笔记,左右手分别抓住表姐和母亲,捏得她们发疼,自己却尽量忍住不发太大的声音,只是急喘。同病房的那户隔着帘子对我喊话:"如果痛就喊出来吧,没事的,不会影响到我们休息!"

我知道,只有忍无可忍的时候叫护士,她才不会那么不耐烦。

果然,护士过来后检查说开指了,发展得不错,让我待会儿有剧烈的排便感时再叫她。

十五分钟后,那般像铁铲从你的背面砍下一刀的阵痛又一次袭来,我按下呼叫护士站的铃,她来后又检查了开指情况,说,恩,可以下楼去产房了!

是的,让我自己下床,走到电梯去楼下产房,我的天,那种一边被凌迟一边还要往前走的昏天黑地的感觉实在是挑战我的极限,但人真是被逼出来的,我还是顺利下了楼,被扶着睡在产房外的病床上继续被阵痛折磨。

6.

这时,我身旁还有一位孕妇,他老公在她身边抚摸她的背部以企图降低她的疼痛,但她连哭带喊,痛苦地呻吟不止。

不知是否受她影响,我这才哇哇大喊以表示自己也很痛。

我俩的喊声此起彼伏,弄得医生甚是不耐烦,大声吼道:叫什么叫,叫又没有用!呆会儿让你们没气力生!

没想到我能比那位早来的孕妇早入产房。

说是开了五指(也就是十公分)才能生下小孩,医生说我虽然晚到但是开得比另一位孕妇快,将我推进产房。

7.

明晃晃的产房空间居然甚大,我之前一直以为是一间小黑屋。

艰难地从推我入内的病床上爬到产床后(医生不扶,叫你自个儿爬),我被迅速地带上胎心监护器、血压计,还被吊了一瓶不知是生理盐水还是葡萄糖,平时还是挺怕戳吊针的,那个时候,吊针什么的都是浮云了,我眼睁睁看着针管进入血管,一点痛感也没有。

没多久,那位门外的孕妇也进来了,我们相隔一墙,医护人员不紧不慢地两边观察,在一旁的工作台上做文字记录。

我躺在那里痛得不知如何是好,脑袋两头甩,汗如雨下,两腿却不可控制地发抖。医生终于又来了,检查了最后一次开指情况,说,很好,八公分了,还有两边一点点,你现在不要用力,呆会儿让你使劲再用力!

还要呆会儿!我的妈呀!我不禁内心咆哮。

医生说完后就都跑去看另一位了,把我一个人留在那里,好几次阵痛来临之时,我都以为我会自己把孩子给生出来而身旁没有医生。

8.

因为我久不破羊水,助产大夫对我说,现在我要人工破水了,说完就用止血钳左右使劲一捅。

我说过,除了阵痛外,一切痛已经不叫痛了。羊水流出来的时候,暖流阵阵,我居然觉得特别舒服。

助产大夫这时问:"你还有力气吧?开始用力吧!"

虽然我看过小册子上如何用力的介绍,但实际操作起来还是很迷惑,我双手扶着产床的铁栏杆上使劲,却被医生一巴掌打下来,厉声吼道:"怎么现在的产妇都不会用力呢?"

我问:"怎么用力法?"

她教我用手握住两腿的膝盖,头朝着自己的肚脐,像解大便一样用力。
这个指示就明确多了,医生兴奋道:"很好,见到小毛毛(湖北话,小宝宝的意思)的头了!"

经过三次如此这般的用力,第四次剧烈的阵痛,我想着痛死也就这么着了,再用点力吧!助产大夫往我的肚子上使劲一推,我嘶声力竭喊叫出来,下面大夫用手一拖,我顿感一个小肉球滑落出来,顷刻的轻松感袭来,暖洋洋的,同时听见哇哇的洪亮的啼哭声,跟电视里演的一样,我眯着眼睛隐约见到医生们将她抱起来擦拭,递给我看了看,是个女孩子,我笑了。

孩子出生的时间是2011年7月12日,凌晨3:39,从推入产房的1:30到生下孩子,算是很顺利了。

9.

至于胎盘娩出,侧切(完全不知道是什么时候切的)伤口的缝合都已经是尾声了,虽然缝针时也还是疼得嗷嗷直叫,但也真算不了什么了,最后医生还对我说:"伤口很小很漂亮哦!"

我无语。

10.

当妈后才知道,你疼孩子,孩子疼你----生时阵痛,生后伤口疼、腹疼、继而奶胀疼,乳头被吮吸破皮皴裂直到重新长出一层粉兮兮的鲜肉皮......所以你一定得把身边这个小家伙疼回来,她让你多疼,你就要多疼她。

此为记。

(完)

文档信息