显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

蜻蜓点水 举重若轻

君子终日乾乾

 
 
 
 
 
 

首届中国 PyCon 大会!让我们聚首上海

2011-10-13 22:13:32 阅读4299 评论0 132011/10 Oct13

首届中国 PyCon 大会

世界 Python 爱好者的顶级盛会 —— PyCon 大会将首次在中国举办!本次大会由(Python 软件基金会下的)PyCon.Org 正式授权 GTUG、TopGeek、CPyUG 等社区联合举办,由 Python 作者 Guido van Rossum 及其所在的 Google 公司提供关键支持。

本次大会云集了国内外最为杰出的 Python 开发者,国内 Python 领域的领军人物几乎悉数到场、作为 Python 重镇的各大知名公司几乎无一缺席,所有嘉宾都承诺将自己压箱底的 Python 绝活呈现给大家!我也会在大会上进行题为《Python,通向未来之路》的纯技术演讲,欢迎捧场。


12 月,让我们聚首上海!
大会订票已经开始 pycon.51qiangzuo.com 手速一定要快哦!


会议为期两天(12 月 3 日至 4 日),票价 60¥,全部用于会议期间的就餐费用,其余大会所有费用及礼品主要由 Google 等公司承担赞助。作为国内最大的赞助者之一,我们也同样很荣幸能够服务于广大中国 Python 爱好者。


   首届中国 PyCon 大会!让我们聚首上海 - 沈崴 - 蜻蜓点水 举重若轻  首届中国 PyCon 大会!让我们聚首上海 - 沈崴 - 蜻蜓点水 举重若轻

作者  | 2011-10-13 22:13:32 | 阅读(4299) |评论(0) | 阅读全文>>

程序员的 100 种境界

2011-1-28 15:38:46 阅读10652 评论20 282011/01 Jan28

境界零:混沌态、浆糊状(小白、新兵)

                 程序员的 100 种境界 - 沈崴 - 蜻蜓点水 举重若轻

刚刚毕业、初出茅庐,有丰富把妹经验,无任何项目经验。

典型台词:“哇塞,薯熟你居然能写出这样这样酷的程序啊”。

此时身为薯熟的你切不可信以为真,因为任何简单的程序对他们来说 ……

                 其实都是写不出来的。

技能:hello world!

经验:0 年

角色:新手村游荡者(虽然 ID 很酷,但改变不了时常被怪虐的事实)

境界一:CODE SMELL(IT 民工)

对于一些不太残忍的需求,竟已经能够完成了!了不起。

技能:面向对象、无脑肉搏

经验:1 年

角色:肉盾、坦克、血牛

公司终于可以放心地把一些 “没那么关键” 的项目扔给他了。

但遗憾的是,公司绝大部分的编码工作其实都 “没那么关键”。 这很容易理解,因为 “管理层“ 是不写代码的,高手则忙着折腾那几行关键代码。

                 兄弟!剩下的就全靠你啦。

在这个配合良好的团队中,身处一线承担 90% 的炮火,此时他们最需要的技能是 “吸引攻击” ……

“你每天编几个小时程序?能不能承受得起?”

“每天 77 小时,承受得起。”

                 —— 大家都露出了 YD 的笑容。

典型台词:“面向过程什么的最讨厌了”。

其他常用语:“瀑布模型什么的最讨厌了”。

高手很快从他们这些代码中闻到了坏味道,至于是 “不够面向” 或者 “不够工程” 导致的, 还是他们根本就没空清理代码,这是一个迷。

                

当然说句公道话,我们知道程序上线后能死撑多久,是和味道无关的。

赶时间随便凑起来的代码基本是稳定的,被自己恶心到于是下决心认真经营的那些代码一般会随机崩溃。

                 显然这只和人品相关。

境界二:SUCKS(TEAM LEADER、架构师、高手)

对于一些不太残忍的需求,竟已经能够华丽丽地完成了!了不起。

对仍在 “新手村论坛” 上转悠的那些童鞋们,你简直就是神一样的存在。 别犹豫了,不是新手的坏家伙毕竟是少数,你的确就是神一样的存在。

“虽然我那几千行没有一行是实际做事情的,但是,架构很重要” 你说道,“你懂的”。

次日 ……

“虽然我那几千行是面向复用和好味道设计的,但是,重构很重要” 你说道,“所以我重写了”。

技能:设计模式、软件工程、ppt

经验:2 年

角色:TEAM LEADER

典型台词:“我们的目标是,木有一行重复代码”。

正如预想的那样,很不幸,战斗顺利演变为缠绵悱侧的恶斗。 大伙抬起头遥望天边如血的残阳,麻的,又要甲板。

是的,项目延期,再次地。

大家已经数不清曾经已经延期了多少项目。 但好像,项目保质保量按时完成的情况,就如同新闻联播中的传说,似乎从来没有出现过。

似乎 LEADER 再次给出了乐观得不行的预期,虽然工期是三个月,但是我们都知道没有三年是搞不掂这事的 —— 但更迫在眉睫的是公司会在三年内上市(虽然公司今年夏天才开张)。

如果不够乐观,这种不给力的感觉,届时老板会毫不犹豫地把这个部门裁掉,然后找一堆更便宜,并且更加乐观得不行的家伙把你们替换掉。

要知道网上无所不能,并且对现实工资非常不满的程序员遍地都是。面对这个残酷的现实,你必须乐观起来才行!

……

经过数年的延期,终于赶在公司上市前把项目搞定了,谢天谢地。 在万分危急的最后一刻,LEADER 再次 “重构” 了整个系统,团队终于逃出生天。

然而在一个阴暗的角落,是主程冷峻的目光,注视着高手们的代码。

                

“SUCKS!” 从他的牙缝中迸出几个字,轻蔑在他的嘴角蔓延。

境界三:MAGIC(主程)

技能:精通各种 MAGICHACK

经验:3 年

角色:法师

典型台词:“IE 的这个 BUG 只要用 IE 另外的一个 BUG 就可以解决了”。

你曾经不小心看到了主程的源码,这个文件充斥着大量注释为(也是唯一的一种注释)“HACK” 的代码,剩下的则全都是 MAGIC。 从此你就很后悔因为好奇打开了这个文件。

后来主程去了纳尼亚,你的朋友小明就奉命继续维护他的代码,这从一开始就是一个错误,其中一个 BUG 花了他将近两年的时间 —— 仍然没有搞定。 所以后来小明也去了纳尼亚。

幸运的是你接手了小明的工作,你试图说服公司,与其在主程的程序里调试,重新实现一遍要快得多。

公司冷酷的答复是,不行。这是公司宝贵的精神财富,是照耀所有员工不断前进的动力。 况且这些代码还 HARDCODE 了各种 8086 指令,来加速最新的 ARM,这让我们的竞争对手不寒而栗。

                

心灰意冷的你于是决定看破红尘,但是无名禅师的一番话让你幡然醒悟。于是你回到公司按主程的程序原样抄写了一遍

                 —— BUG 消失了。

境界四:迷

技能:UNKNOW

经验:UNKNOW

角色:UNKNOW

传说在每一个挨踢公司里都有一个扫地大妈,会在某天经过你的身边,扫一眼代码淡淡地说 “小心,栈溢出了”……

作者  | 2011-1-28 15:38:46 | 阅读(10652) |评论(20) | 阅读全文>>

IE 也支持的 DEFLATE 格式

2010-12-15 13:19:03 阅读1973 评论2 152010/12 Dec15

zlib.compress(data)[2:-4]

作者  | 2010-12-15 13:19:03 | 阅读(1973) |评论(2) | 阅读全文>>

得道的程序员 。。。

2010-11-23 16:26:41 阅读5860 评论1 232010/11 Nov23

“得道的程序员,既不封装,也没有重复代码。”



无意中翻到了 06 年时笔记本的桌面,那时博客的副标题还是很给力的。留念下。

今天,你得道了吗?得道更健康 。。。

PS. 那时网易博客左上角还有 163 徽标,他们现在应该是想通了,与其被 crack 掉还不如自宫 

作者  | 2010-11-23 16:26:41 | 阅读(5860) |评论(1) | 阅读全文>>

这是幻觉来的 。。。

2010-7-21 10:29:57 阅读3307 评论1 212010/07 July21

#!/usr/bin/env python
from thread import start_new_thread
def loop():
    while 1:
        pass
start_new_thread(loop, ())
start_new_thread(loop, ())
start_new_thread(loop, ())
loop()

关于 cpython 线程能否充分用到 cpu 多核,相信很多人都做过这个测试。每个线程都起一个空循环,如果能把 cpu 多核全部占满,则说明已经用到多核。

这个实验很久以前做过,结果当然是只有一个 cpu 核心 100% 满载,其他核心无负荷。关于这个问题,似乎早有定论,由于 GIL 的存在 python 多线程是无法充分使用多核的。

最近又就此做了下测试,忽然发现机器上的双核都用完了。而且在 cpython2.5.5、cpython2.6.4、cpython2.7、unladen swallow q3、pypy-jit1.3 上普遍如此。



AMD Athlon(tm) Dual Core Processor 5000B
#37-Ubuntu SMP Fri Jun 11 08:03:28 UTC 2010

关于这件事,我在 python-cn 论坛上发了个贴。不多时,zoomq 说的洗具发生了,在其他机器上也得到了相同的结果。




由 Zoom Quiet 提交
Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz
ubuntu 10.04 i686


由 GKermit 提交
i5 430M 2.26Hz, 1066 MHz FSB
ubuntu 10.04

这意味着至少在一些情况下 python 线程是可以使用多核的。

最新测试结果表明,这是幻觉来的 。。。

#!/usr/bin/env python
from time import time, sleep
from thread import start_new_thread
def ipp():
    i = 0
    while 1:
        if time() > t:
            print '[i]'%i
            break
        i += 1
t = time() + 5
start_new_thread(ipp, ())
start_new_thread(ipp, ())
start_new_thread(ipp, ())
start_new_thread(ipp, ())
ipp()
sleep(1)

在这种简单情况下,只能用到单核。并且单线程完成的循环数要高于多线程的总循环数,性能更好。

幻觉,一切都是幻觉。空循环只是个特例,大家洗洗睡吧 ……

作者  | 2010-7-21 10:29:57 | 阅读(3307) |评论(1) | 阅读全文>>

在 64 位 ubuntu 上使用 pypy-jit

2010-7-13 10:53:15 阅读6280 评论3 132010/07 July13

其实这篇文章应该叫 “在 64位 linux 上使用 32位程序”。事实上在开源世界,代码都是可以跨平台编译的,这种愿望并不很强烈。而 pypy-jit 是一个例外。

这里提供一种在 64位平台上运行 pypy-jit 的思路。chroot 是一种比较简单的方法,不太熟悉 chroot 的朋友可以按照这篇文章进行部署。

首先使用 debootstrap 建立 ia32 root。这里使用了 163 lucid 的仓库。

$ sudo apt-get install debootstrap
$ sudo debootstrap --arch i386 lucid /opt/lucid-i386 http://mirrors.163.com/ubuntu/

这需要一定时间。然后复制一些需要的文件到 ia32 root,这里也复制了一些用户文件,这样你就可以在 32位系统上使用当前主机上的帐号了。

$ sudo cp /etc/apt/sources.list /opt/lucid-i386/etc/apt/
$ sudo cp /etc/passwd /opt/lucid-i386/etc/
$ sudo cp /etc/shadow /opt/lucid-i386/etc/
$ sudo cp /etc/group /opt/lucid-i386/etc/
$ sudo cp /etc/sudoers /opt/lucid-i386/etc/

在 32 位系统上挂接一些需要的目录,然后 chroot 到 32位系统,进行更新。

$ sudo mount --bind /home /opt/lucid-i386/home
$ sudo mount --bind /tmp /opt/lucid-i386/tmp
$ sudo mount --bind /dev /opt/lucid-i386/dev
$ sudo chroot /opt/lucid-i386
# mount -t proc none /proc
# mount -t sysfs none /sys
# mount -t devpts none /dev/pts
# apt-get update
# apt-get upgrade

你现在已经以 root 身份进入了 32位系统,安装 pypy 需要的 libexpat1 包。然后下载一个 pypy-jit 的预编译包放到 opt 目录下。

# apt-get install libexpat1 wget
# cd /opt
# sudo wget http://pypy.org/download/pypy-1.3-linux.tar.bz2 -O- | tar -xjf -

现在退出 32位系统。

# exit

为方便在 64位主机上直接调用这个 32位的 pypy-jit 程序下面进行一些配置。

$ sudo apt-get install dchroot
$ sudo vi /etc/schroot/schroot.conf

编辑 schroot.conf 的内容如下。

[ia32]
aliases=default
command-prefix=
description=ia32 chroot (dchroot 兼容性)
directory=/opt/lucid-i386
environment-filter=^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|TERMINFO_DIRS|TERMPATH)$
groups=
personality=linux
priority=0
root-groups=
root-users=
script-config=script-defaults
type=plain
users=你的用户名,多个用户名用逗号分开

建立 32位 pypy-jit 的 “快捷方式”。

$ mkdir ~/bin
$ cd ~/bin
$ vi pypy

编辑文件内容如下。

#!/bin/sh
exec dchroot -c ia32 -d -q "/opt/pypy-1.3/bin/pypy" "$@"

尝试执行 pypy-jit 。

$ pypy
Python 2.5.2 (75551, Jun 24 2010, 05:12:10) [PyPy 1.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``Every time someone argues with
"Smalltalk has always done X", it is always a good hint that something needs to
be changed fast. - Marcus Denker''
>>>> import platform
>>>> platform.platform()
'Linux-2.6.32-23-generic-x86_64-with-debian-squeeze-sid'
>>>> platform.architecture()
('32bit', 'ELF')

种种迹象表明 pypy 很快将获得进入生产领域的足够能力,对常规公司而言确实如此。而很多充满信心的技术人员则在生产环境中使用 pypy 这一族技术已经很久了。我相信 pypy-jit 登陆 64位平台已可预期,在不远的将来。而在此之前,即便是 64位的服务器,我们也已经迫不及待地准备在项目中尝试 pypy-jit 了。

参考资料 Ubuntu AMD64 Howto

作者  | 2010-7-13 10:53:15 | 阅读(6280) |评论(3) | 阅读全文>>

在这里 http://code.google.com/p/winevil/

写了个在 ubuntu 上安装配置 wine、迅雷和 QQ 的自动化脚本 - 沈崴 - 蜻蜓点水 举重若轻

脚本是 python 的,带有星际2 补丁

作者  | 2010-7-8 15:43:16 | 阅读(2144) |评论(2) | 阅读全文>>

张秀才

2010-3-12 10:37:29 阅读3468 评论2 122010/03 Mar12

安装

sudo apt-get install build-essential
sudo apt-get install autoconf libtool iptables-dev
wget http://scholarzhang.googlecode.com/files/west-chamber-0.0.1.tar.gz
tar -xzf west-chamber-0.0.1.tar.gz
cd west-chamber-0.0.1
./autogen.sh
CFLAGS="" ./configure --prefix=/usr --libexecdir=/lib
make
sudo make install
cd examples
sudo ipset -R < CHINA
sudo ipset -R < GOOGLE
sudo ipset -R < YOUTUBE
sudo ipset -R < NOCLIP
sudo iptables -A INPUT -p tcp --sport 80 --tcp-flags FIN,SYN,RST,ACK SYN,ACK -m state --state ESTABLISHED -m set --match-set NOCLIP src -j ZHANG -m comment --comment "client-side connection obfuscation"
sudo iptables -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j CUI -m set --match-set CHINA src -m comment --comment "server-side connection obfuscation"
sudo iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -m gfw -j LOG --log-level info --log-prefix "gfw: " -m comment --comment "log gfw tcp resets"
sudo iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -m gfw -j DROP -m comment --comment "drop gfw dns hijacks"


使用健康的 DNS

1) sudo vi /etc/dhcp3/dhclient.conf,加入 prepend domain-name-servers 8.8.8.8;
2) 重启网卡 sudo ifconfig eth0 down,然后 sudo ifconfig eth0 up

network-manager 也可以,直接改 /etc/resolv.conf 一般不是很推荐。


项目信息:GFVVREV
参考资料:http://blog.xiaogaozi.org/ 、INSTALL 、USAGE

作者  | 2010-3-12 10:37:29 | 阅读(3468) |评论(2) | 阅读全文>>

Vi 编辑器快速上手

2010-3-4 16:21:17 阅读3127 评论3 42010/03 Mar4

接触 vi 也有十多年了。这里也试着聊下 vi 编辑器快速上手的方法,对刚开始准备使用 vi 的朋友可能会有点帮助,高手就不用看了。

方法很简单,去用,就很快会了。当然 vi 的操作确实比较繁多,不知怎么下手。我这里提炼出一些常用的,一丁点内容,保守用两天来熟悉。不用怀疑,对于所有编辑任务确实已经够用了。既然这样,读完后,马上就开始用,去用,就很快会了。

vi 主要是两种模式,按 Esc 键进入指令模式(常见有人会狂按 Esc 直至电脑喇叭发出哔哔声以确认进入指令模式),按 i 键(insert)进入输入模式(可以输入东西编辑文件了)。



开始时默认进入的是指令模式:

用 h(左)j(上)k(下)l(右)移动光标。Ctrl+f 向下翻页,Ctrl+b 向上翻页。

i 键插入当前光标位置,或 a 键在光标后插入。同时进入输入模式,进行编辑,按 Esc 键再返回命令模式。

x 删除当前字符,dd(按两次 d)删除(剪切)当前行。

u(undo)撤销。

保存文件:

在指令模式中(最不用动脑筋的办法是乱按一通 Esc 可以保证从编辑模式进入指令模式)按“:”键(冒号)可以进入 vi 的末行模式,退出末行模式回到命令模式只要按退格键删除“:”字符即可。

输入 :wq(回车)即是保存退出。:w 保存不退出。:q! 退出不保存。



以上内容,花一天熟悉。浏览文件,做点简单编辑已经足够了。注意不要用小键盘,比如上下左右这些,否则就很难学会 vi 了。在 vi 里手不会离开大键盘,用不了多久这些指令就会条件反射,编辑效率比较高。



下面是相对不太常用的:

o 在当前行后插入一行,O 在当前行前插入一行。和 i、a 一样,同时进入输入模式。

数字键 0 跳到行首,$ 跳到行尾。

Shift+j 将当前行和下一行合并成一行。

Ndd 剪切 N 行(N 是一个数字)。

yy 复制当前行。Nyy 复制 N(N 是一个数字)行。按 p 键粘贴。

:N 跳到第 N 行。直接打 N 跳到当前行后的第 N 行。N 可以是负数。

在命令模式下输入 /word(回车)来在文件中搜索字符 word。按 n(next)跳到下一个搜索到的字符。

使用“:s/被替换字符/替换字符/g”这行命令来进行搜索替换。比如“:s/^M//g”是把 windows 文件的行尾 ^M 删除掉。其中“^M”的输入方法是按住 Ctrl+v,然后保持 Ctrl 并放掉 v 键,再按 M。

这就开始使用 vi 吧。



主题无关,这里聊些其他的。其实很多貌似常用的指令我都没有写,比如 X 删除,sS 替换等等,我觉得刚开始用记那么多负担太重。况且 s 我经常用打个 x 再打个 i 效果一样。

记这么点东西我觉得够了。用熟练了,再找资料学更多方便编辑的命令和配置方法。一口气吃不成胖子。我自己比较特别,用 vi 写代码是不用自动补齐和自动缩进的。拿自动缩进来说,不喜欢在文件里有我不知道的空格悬挂在那里。也不显示行号,甚至不用代码着色。这样代码稍微冗长一点,稍微混乱一点,读起来麻烦,视觉上马上就警惕了。帮助我避免写出烂代码(当然也有会觉得程序越长越复杂越牛逼的,人都有不同,各取所好吧)。所以 ssh 到其他管理员配置的服务器上,我有时会把那些对我没用,看着麻烦的配置都还原掉。因为对我来说没那么多复杂的东西,可视模式啊,分屏什么的,基本没用,所以也没写。文中的东西够我所有日常应用了,理论上,对我来说不需要 vim,给个 vi 就够了。

vi 是神器,即便 emacs 或者其他玩家,简单了解下也是要的。less 命令或者看 man 手册,甚至 python 的 help() 函数用的到处都是 vi 指令。



另外,遇到 vi 编辑中非正常退出的文件(被锁),ls -a 一下把 .swp 文件删了就可以了。差点忘了,编辑系统文件用 sudo vi,除非在 /root 下生成一堆 X 配置文件你觉得无所谓,那么用 gedit 之类的 gui 编辑器也无所谓。

作者  | 2010-3-4 16:21:17 | 阅读(3127) |评论(3) | 阅读全文>>

关于 WSGI

2010-2-24 21:09:54 阅读6862 评论4 242010/02 Feb24

正和朋友讲解 WSGI 。打了一大段没发出去 QQ 就崩溃了 (没打补丁)。我想对准备接触 WSGI 的初学者朋友都有会点用, 就记在这里吧。

WSGI 主要是读一下 PEP333 。其实把里面两段示范代码看了就明白了。我读了下示范代码和环境变量的要求, 就写了 (eurasia) WSGI server 事情就这么简单。

一个比较容易产生疑惑的地方是, 可能会把 (1) WSGI server 和 (2) 基于 WSGI 的 framework 混淆了。其实 WSGI 是分成 server 和 framework (即 application) 两部分 (当然还有 middleware)。严格说 WSGI 只是一个协议, 规范 server 和 framework 之间连接的接口。

(1) WSGI server 把服务器功能以 WSGI 接口暴露出来。比如 mod_wsgi 是一种 server, 把 apache 的功能以 WSGI 接口的形式提供出来。

(2) WSGI framework 就是我们经常提到的 Django 这种框架。不过需要注意的是, 很少有单纯的 WSGI framework , 基于 WSGI 的框架往往都自带 WSGI server。比如 Django、CherryPy 都自带 WSGI server 主要是测试用途, 发布时则使用生产环境的 WSGI server。而有些 WSGI 下的框架比如 pylons、bfg 等, 自己不实现 WSGI server。使用 paste 作为 WSGI server。

Paste 是流行的 WSGI server, 带有很多中间件。还有 flup 也是一个提供中间件的库。

搞清除 WSGI server 和 application, 中间件自然就清楚了。除了 session、cache 之类的应用, 前段时间看到一个 bfg 下的中间件专门用于给网站换肤的 (skin) 。中间件可以想到的用法还很多。

这里再补充一下, 像 django 这样的框架如何以 fastcgi 的方式跑在 apache 上的。这要用到 flup.fcgi 或者 fastcgi.py (eurasia 中也设计了一个 fastcgi.py 的实现) 这些工具, 它们就是把 fastcgi 协议转换成 WSGI 接口 (把 fastcgi 变成一个 WSGI server) 供框架接入。整个架构是这样的: django -> fcgi2wsgiserver -> mod_fcgi -> apache 。

虽然我不是 WSGI 的粉丝, 但是不可否认 WSGI 对 python web 的意义重大。有意自己设计 web 框架, 又不想做 socket 层和 http 报文解析的同学, 可以从 WSGI 开始设计自己的框架。在 python 圈子里有个共识, 自己随手搞个 web 框架跟喝口水一样自然, 非常方便。或许每个 python 玩家都会经历一个倒腾框架的阶段吧。

作者  | 2010-2-24 21:09:54 | 阅读(6862) |评论(4) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 

海南省 中沙群岛的岛礁及其海域

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016

注册 登录  
 加关注