华子的代码空间

逆水行舟,不进则退。 关注系统编程、网络编程、并发、分布式。

12 2012 档案

linux编程多进程和libnotify桌面通知
摘要:OS: ubuntu 12.04 x86_64GCC: gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)#include <stdio.h>#include <stdlib.h>#include <getopt.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <libnotify/notify.h>void usage(char *);int close_std();char * cons 阅读全文

posted @ 2012-12-27 15:15 华子的代码空间 阅读(950) 评论(0) 推荐(0)

unix系统编程常见问题
摘要:错误提示:Makefile:2: *** 遗漏分隔符 。 停止。原因makefile中 gcc语句前 缺少一个 tab分割符错误提示: bash: ./makefile: 权限不够原因 makefile 是文本文件不可执行,即使是root,也会权限不够我们应该在命令行下使用make, 该指令会自动搜寻所在目录下的makefile文件,如果使用其他名称如(makefile.am)则应加参数指出,如:make -f makefile.am错误提示 : a.c:6: 错误:程序中有游离的 ‘\200’a.c:6: 错误:程序中有游离的 ‘\200’a.c:8: 错误:程序中有游离的 ‘\343’a. 阅读全文

posted @ 2012-12-25 01:36 华子的代码空间 阅读(413) 评论(0) 推荐(0)

图解HTTPS
摘要:我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。 HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。1. 客户端发起HTTPS请求 这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。 2. 服务端的配置 采用HTTPS协议的服务器必须要有一套数字证书,可以自... 阅读全文

posted @ 2012-12-19 12:14 华子的代码空间 阅读(238) 评论(0) 推荐(0)

再见 Linux DE ???
摘要:曾经作为一个微软黑,我现在也可耻的想逃离Linux DE,难道MAC真是我的归宿?哦,节操碎了一地。。。http://xiaoxiongmao.me/2012/12/12/goodbye-linux-de.html 阅读全文

posted @ 2012-12-17 17:59 华子的代码空间 阅读(218) 评论(0) 推荐(0)

python的协程和并发-使用yield实现并有使用详解
摘要:从原理到入门到高级,详解yield的使用。不过捏,大部分代码不好拿到生产环境用,当然最重要的是理解基于协程的异步、事件、I/O调度的库的实现。http://www.dabeaz.com/coroutines/index.html 阅读全文

posted @ 2012-12-17 17:53 华子的代码空间 阅读(1006) 评论(0) 推荐(0)

tornado的gist
摘要:http://tornadogists.org/ 阅读全文

posted @ 2012-12-17 17:51 华子的代码空间 阅读(166) 评论(0) 推荐(0)

在tornado的异步http请求中托管一个阻塞的任务到线程池
摘要:实际代码中使用的是进程池,不过代码很简单,你可以将它替换为线程池。 1 from time import sleep 2 from tornado.httpserver import HTTPServer 3 from tornado.ioloop import IOLoop 4 from tornado.web import Application, asynchronous, RequestHandler 5 from multiprocessing.pool import ThreadPool 6 7 _workers = ThreadPool(10) 8 9 def run_b... 阅读全文

posted @ 2012-12-17 17:43 华子的代码空间 阅读(728) 评论(0) 推荐(0)

python的参数传递机制
摘要:调用函数时,函数参数仅仅是引用传入对象的名称。参数传递的基本语义和其他编程语言中已知的方式不完全相同。例如“按值传递” 或 “按引用传递”。例如,如果传递不可变的值(如tuple、string list),参数看起来实际是按值传递的。但如果传递可变变量(如列表或字典)给函数,然后再修改次可变对象,这些改动就会反映在原始对象中。像这样悄悄修改其输入值或者程序其他部分的函数具有副作用。一般来说,最好避免使用这种编程风格,因为随着程序的规模和复杂度不断增加,这类函数会成为各种奇怪编程错误的来源。(例如,如果函数具有副作用,只看函数调用是无法明显找到问题的。)在设计线程和并发性的程序中,使用此类函数的 阅读全文

posted @ 2012-12-15 01:47 华子的代码空间 阅读(448) 评论(0) 推荐(0)

用LL(1)递归下降语法器构造一个计算器
摘要:LL(1)何为LL(1)?通俗来说就是向前看一个词法单元的自顶向下解析器。两个L都代表left-to-right,第一个L表示解析器按“从左到右”的顺序解析输入内容;第二个L表示下降解析时也是按“从左到右”的顺序遍历子节点。而(1)表示它使用一个向前看 词法单元。我们从一个简单的计算器来看看递归下降的语法器如何构造。对于 2 + 3 * 5 的抽象语法树如下:我们可以使用如下文法表示计算表达式:# expr ::= expr addop term | term# term ::= term mulop factor | factor# factor ::= number | ( expr )# 阅读全文

posted @ 2012-12-15 01:41 华子的代码空间 阅读(823) 评论(0) 推荐(0)

Python使用spark模块构造计算器
摘要:Spark简介Spark 解析器与 EBNF 语法有一些共同之处,但它将解析/处理过程分成了比传统的 EBNF 语法所允许的更小的组件。Spark 的优点在于,它对整个过程中每一步操作的控制都进行了微调,还提供了将定制代码插入到过程中的能力。Spark的最新版是10年前发布的,真是非常的长寿,可见设计精良。其中的采用的设计模式有Reflection Pattern、Visitor Pattern、Pipes and Filters Pattern和StrategyPattern。初识Spark第一次知道Spark这个模块是在IBM的网站[3]上看到的。第一次激起我学习这个模块的兴趣是在看Pyt 阅读全文

posted @ 2012-12-15 01:31 华子的代码空间 阅读(685) 评论(0) 推荐(0)

说说Python程序的执行过程
摘要:1. Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。2. 解释型语言和编译型语言计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。编译型语 阅读全文

posted @ 2012-12-15 01:27 华子的代码空间 阅读(380) 评论(0) 推荐(0)

apue编译错误汇总(Ubuntu 12.04)
摘要:apue源码make:/usr/include/bits/timex.h:31:7: 错误:expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ be的解决方法如题,出现这个问题的原因是在timex.h的第31行出现了status的定义:intstatus;/*clockcommand/status*/而文件apue.2e/ipp/ipp.h中有宏定义:#definestatusu.st这样编译的时候就出问题了,如编译提示:expected‘:’,‘,’,‘;’,‘}’or‘__attribute__’before‘.’token解决方法是把ipp.h文 阅读全文

posted @ 2012-12-13 11:27 华子的代码空间 阅读(289) 评论(0) 推荐(0)

ubuntu 12.04下配置APUE环境
摘要:今天开始学习《unix高级编程》出现了奇怪的gcc链接错误 说找不到XXX.h文件找了很多资料原来是缺少glibc 所以综合了大家的建议,希望对大家有用1 获得源码从apue的官方网站http://www.apuebook.com/下载源码。2 WKDIR编辑源码解压生成的apue.2e文件夹下的Make.defines.linux修改WKDIR=/home/sar/apue.2e为你的apue.2e目录,比如我的apue源码解压在主目录下,那我就改为:WKDIR=/home/tgl/apue.2e3 nawk然后进入apue.2e/std 目录,编辑linux.mk。修改里面所有的nawk为 阅读全文

posted @ 2012-12-13 11:24 华子的代码空间 阅读(375) 评论(0) 推荐(0)

tornado的gen.engine浅析
摘要:1. 首先看看示例代码,也是官方给出的: 1 class Main(RequestHandler): 2 @tornado.web.asynchronous 3 @gen.engine 4 def get(self): 5 if _DEBUG: 6 pdb.set_trace() 7 http_client = AsyncHTTPClient() 8 response = yield gen.Task(http_client.fetch, "http://code.rootk.com") 9 ... 阅读全文

posted @ 2012-12-10 22:48 华子的代码空间 阅读(2653) 评论(0) 推荐(1)

再谈python的属性拦截
摘要:__setattr__是python重载协议中的内容,用于在实例中设置属性。实际使用方式:class Old(object): def __init__(self): pass def __setattr__(self, key, value): print "__setattr__: ", key, value object.__setattr__(self, key, value) def __getattribute__(self, key): print "__getattribute__: ",... 阅读全文

posted @ 2012-12-04 21:29 华子的代码空间 阅读(1063) 评论(0) 推荐(0)

tornado模板解析过程总结
摘要:0. RequestHandler中调用loader.load函数,传入模板文件名,生成模板实例 (1). 检测模板文件名,并返回合法的文件名 (2). 根据文件名做模板的内容缓存,节省了每次解析模板内容并编译的开销 (3). 如果未找到编译好的模板,则调用Template类创建新模板1. 将内容用_parse函数逐行解析: (1). 对于普通的表达式直接加入到_Expression实例中 (2). 遇到end则直接返回,并继续处理下一行 (3). 如果都不是,则得到操作符,例如是if,extends等等 (4). 遇到extends, import, include, set, raw, m 阅读全文

posted @ 2012-12-03 17:59 华子的代码空间 阅读(512) 评论(0) 推荐(0)

python线程的又一细节
摘要:首先,在python的线程中,任何在run函数中调用的代码,都是运行在新线程中。其他的实例方法,全部运行在主线程中。上代码: 1 #!/usr/bin/python 2 # -- coding: utf-8 -- 3 4 import threading 5 import signal 6 import time 7 8 # 注意:run函数中执行的代码都是在新线程中 9 # 而hander方法在主线程中,可以查看它们的thread id10 11 def thread_sig():12 # 在子线程中发送信号13 signal.alarm(3)14 15 class ih... 阅读全文

posted @ 2012-12-03 17:37 华子的代码空间 阅读(5790) 评论(0) 推荐(0)

一些重要的算法
摘要:下面是一些比较重要的算法,原文罗列了32个,但我觉得有很多是数论里的,和计算机的不相干,所以没有选取。下面的这些,有的我们经常在用,有的基本不用。有的很常见,有的很偏。不过了解一下也是好事。也欢迎你留下你觉得有意义的算法。(注:本篇文章并非翻译,其中的算法描述大部份摘自Wikipedia,因为维基百科描述的很专业了)A*搜寻算法 俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。Beam Search束搜索(bea 阅读全文

posted @ 2012-12-03 03:06 华子的代码空间 阅读(198) 评论(0) 推荐(0)

中国的互联网:草根与精英
摘要:我有两个朋友。L的公司在上海,大半时间跑广东。他是华南某所不太知名的大学毕业的,小眼睛质朴男,多年以前还是个文学青年。哥们做手机网游的,我见他使过好几款手机, 但最贵的一个也不过1千多块钱。比起什么Web2.0、移动互联网的概念,他更关心珠三角的几千万农民工和城市边缘的大学生“蚁族”,怎么关心?在东莞的 夜宵摊上跟他们拼啤酒,在富士康厂区外网吧里刷夜,跟靠做他们生意开上宝马的便利店老板扯淡……W猫在北京中关村。他从小就是个脑袋很大眼睛发亮的天才少年,数理化成绩很好,逻辑思维超强,英文和中文一般流利。在首都某著名大学毕业后,W 直接去美国名校拿了硕士,接着回国创业。我一直觉得,他是硅谷Geek们 阅读全文

posted @ 2012-12-03 03:05 华子的代码空间 阅读(222) 评论(0) 推荐(0)

tornado模板语法
摘要:tornado的文档非常的匮乏,不过这是表面现象,其实个中乾坤都在源文件里,源文件的注释里有非常的文档资料,值得仔细研究。今日将模板系统的内容翻译之,以供日后使用。此处意译为主,并未逐字翻译A simple template system that compiles templates to Python code.一个简单的模板系统,将模板编译成python代码Basic usage looks like::基本的用法如下: t = template.Template("<html>{{ myvalue }}</html>") print t.ge 阅读全文

posted @ 2012-12-03 03:01 华子的代码空间 阅读(1037) 评论(0) 推荐(0)

很有意思的总结
摘要:欲先为贼;利先为贩;义先为商!善己者为奴,善伴者为工,善众者为商!羡鱼者终穷,羡渔者终饱,羡网者终富!奴者多怨,工者多思,商者多行!嗜蜜者多盗,品苦者多商!三四者为奴,一一者为商!滥情者为奴,多情者为工,寡情者为商!小贩:嗜蜜、好群、意淫、尚奢巨商:品苦、喜独、意精、知俭 阅读全文

posted @ 2012-12-03 01:31 华子的代码空间 阅读(184) 评论(0) 推荐(0)

导航