/media/photologue/photos/Old_Time_Bicycle_by_khairulrahman_2.jpg 无意中翻到一篇旧文,2007-06-30 21:13

不知道赖克这外号是怎么来的,非正式说法是以前有人讲他Like母猪,英文应该叫Like吧,但据我所知,叫他Like他很乐意,叫Like母猪他要翻脸。

赖克是我高中最好的哥们之一,高三之前,我从来没见过真正的红绿灯,不过10年过去,现在我们县城也有红绿灯了。

第一次高考落榜之后,赖克让我有了第一次见红绿灯的机会,他跑到邻居湖南怀化去转了转,来游说我一起到怀化一中去复读,后来我们一起去了怀化读了一年。

刚去的时候,我看见赖克朝地下吐痰,我批评他,咋这么乡巴佬呢,在城市里还吐痰,赖克很无辜,他讲,我是看前面那个人吐我才敢吐的。

他过马路跟在我们那个小县城一样,很嚣张地慢慢踱过去,身后喇叭声一片,我在马路这边叫他,那个乡巴佬快点过来。

人生地不熟,周围都是湖南佬,我们在一起踢球,周末跑到录相厅去看毛片,在一起讨论关于女人关于性的话题。

那时候赖克还是处男,有一天他跟一个湖南同班同学一起不知道从哪本书看到说男人包皮裹着龟头不好,有包皮垢,容易有这样那样的毛病,他俩痛下决心,去水房一人提了半桶水,把那玩意小心翼翼翻了出来,洗干净后,穿上裤子去上晚自习,那天我走在他俩后面,那姿式我这一生也忘记不了,两个人叉着腿,撅着屁股,很艰难地朝教室移过去,那湖南佬一边走一边唱“我把包皮翻了过来”。。。

赖克回头对我说,麻...麻得很,然后辅以一个痛苦的表情。

同宿舍一小子打完球回来,经常用别人的桶和盆之类的洗脸,我看过他很多次用赖克他们拿洗龟头的那桶洗脸,一边洗,一边呼呼嘴里吐气。

再后来,我去东北念书,他去湖南念书,他给我发过一次邮件,讲别人带他去KTV的事,他说,只摸了几下而已,我什么也没干。

03年我在上海的时候,通过一次电话,那时候他在遥远的齐齐哈尔,刚毕业就已经结婚,不是处男了,我当时在公司刚刚被提拔上来,雄心勃勃,滔滔不绝地跟他说了一堆远大理想,他安静听完后说,我这辈子就平平淡淡过完算了,不想别的了,兄弟,你好好干。

我们一起离开贵州之后,再也没见过面,一别十年,坐在南京路这栋豪华的建筑下面,人来人往,我很想念乡巴佬赖克。

本博客程序从1.5升级到1.6.2,so easy,就修改了tinymce下的urls.py,把django.conf.urls.defaults改成from django.conf.urls import patterns, include, url。

That's all.

妈妈和女朋友再也不用担心我今晚熬夜了:) Yeah!

据江湖传言,如果是从1.4.x升级,就有点麻烦喽,江湖传言在这里,有链接有真相:http://django-china.cn/topic/368/

在urls.py里设置好接口地址,并在微信公众号里面也配置好,如果一切顺利,显示配置成功的话,接下来我们就打算干点实际的东西了,接受事件推送。

当用户在关注,取消关注等行为时,微信服务器会把相关的数据post到你配置好的接口地址上,下面实现一下用户关注(订阅)你的公众号时,你给用户一条欢迎信息的功能。

因为微信给你post的数据是xml格式的,所以要引进lxml这个包来解析,如果是centos,可以这么安装:

$yum install libxml2 $yum install libxml2-devel $yum install libxslt-devel

别的操作系统,请自行google之

接收微信服务器post过来的数据的python代码如下:

if request.method == 'POST': str_xml = request.body xml = etree.fromstring(str_xml) msg_type = xml.find('MsgType').text …
提前准备 一个有公网IP的服务器。 一个部署好的Django应用。 Pycurl(如何安装Pycurl?) 接入

官方接入文档在这里,但是检验signature的代码,官方只有php的,在Django中的python代码应该这么写:

import hashlib from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponse @csrf_exempt def wechat(request): signature = request.GET.get('signature') timestamp = request.GET.get('timestamp') nonce …

微信的自定义菜单的接口要的是json格式数据,如果post过去只要是中文就报(英文都正常):{"errcode":40033,"errmsg":"invalid charset. please check your request, if include \uxxxx will create fail!"}

python的解决方案:

在post过去的json字符串后面加上.encode('utf-8'),比如 menu_json.encode('utf-8')。

/media/photologue/photos/4c65d01c6ada11e394b3123e087b8285_8.jpg

/media/photologue/photos/100525234476667ec18a6d4b07.jpg

 

Hey Jude, don't make it bad.

2001年到2002年,使用asp为主要开发技术开发网站,偶尔用VB写COM+业务组件,2年。

从03年到09年,使用.net作为主要开发技术做B/S管理软件项目,以及建立垂直电子商务网站,7年。

2010年才开始混开源社区,开始学习python,linux,重新回头练习C语言,到现在为此,3年多一点,哦,差点忘了,这期间还穿插Objective-C,Node.js之类的语言或者技术用于开发衍生项目。

这中间,少不了Java的身影,中间参与过J2EE的项目,但主要职责不是在一线开发,Android的Java代码除外。

讲好话:

C#是一门很好的语言,我现在还认为C#比Java要优雅(很俗,但找不到更恰当的词来形容了),每次写Java代码,碰到类型转换啊,异常处理这些东东的时候,无比怀念C#。 入门门槛低,能用低成本程序员迅速启动项目,比如我曾经的一个同事,就是上海英雄钢笔厂一个多年的钳工上几个月北大青鸟转行过来的,当然,他后来总是怀念以前在国企时福利多么优厚,过年过节可以大块扛肉,大箱拿东西回家的日子,这是后话。 版本升级流畅。 MSDN真全啊,几乎绝大份问题都可以从MSDN中得到答案。 IDE真强大。

 

不过这男一人变心,看问题的角度一变,有时候优点变缺点,上面2、4、5就是这种情况。

讲坏话:

入门门槛低,往往带着的潜台词是团队整体素质相对低,在项目启动的时候不会暴露太多问题,但一旦进入发展期,团队解决问题的能力不高。这也是多数.net团队只能作中小项目的原因。 MSDN太全了,当在MSDN里找不到解决方案时,习惯性放弃了寻找别的解决方案的尝试。普通.net程序员(非牛B程序员)在google上查阅资料的能力低于使用python等开源技术的程序员。 IDE太强大的后果是,程序员学习.net系列语言其实是学习怎么使用Visual Studio .Net,对语言特性等等往往是在学习了很久之后才意识到。 .net团队习惯性依赖微软的官方技术支持,当出现问题,而官方也没有解决方案时,.net开发人员通常选择的是等微软发布下一个.net版本。 非心灵鸡汤小故事: A:在jQuery插件还没这么发达的年代,我当时所处的一个开发团队有一名Javascript高手,本来打算写一个下拉菜单,但是看到预告说asp.net下一个版本要内置这东西,然后放弃了,而这“下一版本”,等了差不多半年。 B:我担任架构师的某垂直电子商务网站,我首先使用了asp.net的图表控件,但是生成图片的,很不生动,后来打算换silverlight,再后来把这部分开发工作转给另外一个同事,不了了之。。。事实上,当时的flash解决方案处处皆是,而且跟.net结合也不是什么难事,所有人都明白这一点,但是,大家都习惯性地依赖微软,到现在为此,我离开那家公司两年多了。。。还是用当初那个图表控件。 对中小团队来说,VS.NET,Sql Server,Windows服务器等,都价格不菲(要说是可以用盗版,就只能,嗯,啊,今天天气不错啊)

…

/media/photologue/photos/html5.jpg

在家陪父母这几天没啥事,更新了下博客程序。

1、前端HTML5 + CSS3,响应式设计,可以试试在手机或平板的浏览器里浏览,但遗憾的是,对IE9以下版本的IE支持很糟糕。

2、Django更新到1.5,重新设计了新的用户模型。

ps. 在windows下看,字体真是惨不忍睹啊,google font api又没有中文解决方案,郁闷。

git clone https://github.com/laonan/yibaidocs.git

一个极简单的API文档和任务清单项目,最早是为编写在线文档花两天时间搭建的,后来加入任务清单功能。

https://github.com/laonan/yibaidocs

git clone https://github.com/laonan/Bubblebox.git

音乐SNS网站dongting.fm开源,2010年学习django写的第一个网站,开始是基于django1.3,后升级为1.4。

项目地址:https://github.com/laonan/dongtingfm

原网站:dongting.fm

点击project的properties,选择"Android",在"Project Build Target"项,选择合适的项打上勾。

更多参考:

http://stackoverflow.com/questions/11278319/importing-project-gave-unable-to-resolve-target-android-7

/media/photologue/photos/1010112303249ad4fe71c0effa-1.jpg

三宝侗寨位于榕江县的车江大坝,进寨要买门票,正逢一家法国人在导游的带领下接受寨门口的敬酒,纯表演性质的。进去之后,我试着跟他们讲英语,不理我,而我表示跟他们学法语时,他们突然来劲了,“蹦猪蹦猪”地教了我们半天。看来法国人会讲英语却不愿意讲的传闻是真的。

进寨就碰到一个妇人在气急败坏地骂街,非常有情调,跟我小时候在老家听到的那架势一模一样,可惜他们讲的话不不大听得懂。

寨里的参天榕树保护得很好,之前在另外一个叫黔途网的网站上看到站长拍的三宝榕树照片很棒:http://chiyou.name/page/new/2009/csgk/5/index.htm。

本文自maxburstein.com翻译而来,文章原作者为Max Burstein, 已经作者授权翻译用于非商业用途。原文地址:http://maxburstein.com/blog/realtime-django-using-nodejs-and-socketio/

曾在项目中使用python非阻塞框架eventlet来实现过相似功能,这篇文章介绍了另外一种实现实时在线交互的方式。

我们今天的目标是使用Django, Node.js, Redis和Socket.IO创建一个实时在线聊天室。虽然使用其它技术也可以轻松创建类似于聊天室的应用, 本文将展示如何把无状态的REST app(关于REST概念, 请自行google之)变为实时交互的web app, 我将用Django来创建REST部分, 你也可以使用任何你熟悉的语言和web框架来代替,闲话少说, 代码先上,对了,在上代码之前,我们有以下东东需要安装。

安装 Django 1.4+ Redis 2.6.x (somewhat optional, but recommended) Redis-py …
安装 wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz tar zxvf webbench-1.5.tar.gz cd webbench-1.5 make && make install

如果出现下面错误:

ctags *.c /bin/sh: ctags: command not found

那么

yum install ctags

或者

wget http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz tar zxvf ctags-5.8.tar.gz …
/media/photologue/photos/0910171529e9280d455b0a1260_s.jpg

到堂安的时正是日落时分,除了西藏札达,这是我见过最美丽的日落。

山脚下是著名的肇兴侗寨,车水马龙,灯红酒绿,游人如织。堂安在山顶上,没什么游客,很安静,跟挑着稻谷回家的村民打招呼。我们坐在田埂上张望,我对高铎说,你来肇兴开酒吧的话,我每年来一次,就来堂安,每天吃了睡,睡了吃,傍晚就坐在田埂上。

高铎他们说,搞一张,搞一张。

/media/photologue/photos/1010112311ae1a24c7cf292ff6_s.jpg

拜道路太泥泞所赐,车被堵在这里,才在锦屏县城不远处发现这么一个村子,正值傍晚,炊烟袅袅,有那么一点点世外的感觉。

这条江叫“亮江”。

 

 

有时候为了只让有权限的用户下载,不能直接把文件放在硬盘上以静态文件的方式直接提供下载,下面这段代码实现通过文件流的方式下载:

def download_android(request): your_file_path = '/xxx/xxx/' original_filename = 'xxx.xx' file_path = your_file_path + original_filename fp = open(file_path, 'rb') response = HttpResponse(fp.read()) fp.close() type, encoding = mimetypes.guess_type(original_filename) if type is None: …
本文自theprojectspot.com翻译而来,文章原作者为Lee Jacobson, 已经作者授权翻译用于非商业用途。原文地址:猛戳这里进入

如果你还没读过第一篇,先跑到这里去瞧一瞧,我保证你多花这么一点时间是值得的。

到目前为止,我们已经学会了用Node.js做一些基本的事(比如用来打印金光闪闪的Hello World), 接下来我们将去学习一下回调函数并了解为什么这玩意是如此的有用。

为什么是Node.js?

现在已经有很多编程语言,并且各有各的优缺点。能够对比不同编程技术,并选出最佳编程语言来解决问题,是创建一个可靠的产品的重要前提条件。跟所有别的编程语言一样,Node.js有它自身的优点和缺点,那么让我们来看一下应该在什么情况下使用Node.js吧。

优点:

a) Node.js用于解决高并发带来的瓶颈。比如你要创建一个需要短时间内处理成千上万的请求,那么Node.js无疑是一个很棒的选择。 b) 这就是JavaScript,这意味着任何有前端JavaScript编程经验的人都可以把以前的经验带到Node.js编程里来,并且它是基于Google的V8引擎,速度极快。 c) 如果你在客户端和服务器端同时使用JavaScript,这会让你的编程变得轻松和快速。比如:你如果要做一些校验,服务器端和客户端可以共用一样的代码。而前后端数据结构一致,数据传输时超容易。 d) 你会让那些做PHP的同志们惊讶得下巴掉下来。(这哥们黑PHP可真是不遗余力啊。)

光说好的也不行对吧,让我们来看一下不好的。

…