日志
1

web.py serve static files in gunicorn

web.py 与 gunicorn配合, 静态文件解析。

web.py的应用部署

1. 在开发环境下,一般直接 python code.py 1234 就会启动一个http server监听在1234这个端口上,这时,无论是静态文件,还是动态请求,都是由python直接处理的。

例如 code.py 一般如下所示:

....
app = web.application(urls, globals())
if __name__ == '__main__':
    app.run()

2. 在生产环境下,一个经典的部署方式就是:nginx + uWsgi + web.py

其中 nginx可以使用lighttpd、apache等代替,uWsgi可以使用 gunicorn,mod_wsgi等代替。

注意,static/目录下面的js,css,images 等静态文件,我们一般都是直接使用nginx来处理,对于剩下的动态请求,再upstream到后端的python来处理。

对于这种正常情况,那么,code.py 一般如下所示:

....
app = web.application(urls, globals())
application = app.wsgifunc()

然而,在某种特殊的情况下(比如nginx的配置,我们控制不了),static/目录下面的静态文件,不得不使用python来解析,这时,code.py 必须如下所示:

....
app = web.application(urls, globals())

from web.httpserver import StaticMiddleware
application = app.wsgifunc(StaticMiddleware)

也就是说,必须要使用StaticMiddleware这个中间件,否则static文件会404

gunicorn一般用类似如下命令启动:

gunicorn code:application --error-logfile=./error.log
日志
0

晚上不知道,发什么神经

回家,研究了一堆 宝马x3 和 揽胜极光 pk的帖子。

真是,屌丝瞎操心:)

——-

祝媳妇节日快乐!

没有准备什么礼物,陪媳妇看场电影吧

恩,下午下载的 《the hobbit》,看看:)

——-

生活,自娱自乐自嘲,很重要

日志
0

上班路上真堵啊,堵的我都不想活了

上一天班,你说累,也就认了

上班路上,比上班还累… 唉

早上8点20出门,8点25到达回龙观地铁站,结果花了30分钟才进站

9点上地铁,这时候,我的腿已经僵硬了

9点20到达大望京西地区

打出租,9点50,达到大酒仙桥地区。

真的太累了

不仅仅是肉体,心更累

然后上完一天,等待你的又是下班路上。。。

什么时候,才能逃离北京啊

状态
0

今天有幸和互联网的两位前辈,一起探讨了价值观,朋友圈,大数据,武术,旧时光等多个方面的话题,获益良多。

希望接下来大家的工作都顺利,实现自我价值,多多交流,有机会一起合作。

昨天周六,公司年会,早上7点半起床,8点半赶到国家会议中心,9点开始部门分会,下午是公司全员大会,每个创始人都来了一发,整到6点多,讲话才结束,orz…

晚宴7点开始,节目蛮精彩,可是员工的融入感不强,座位离舞台的太远,另外时间持续太久了,整到11点才结束,出门走了一里多路才搞到车,回到家都12点了。

正所谓 开年会 都要开出加班的风格!

年会中了一个kindle,送给媳妇用:)

日志
0

昨天晚上吃完晚饭后,就发现脖子很痒,并有红肿。

晚上到家后,就比较严重了

刚开始,我通过写代码我分散注意力缓解

到了1点后,困了,就睡觉了,结果痒的我,只想挠,我在想,我的皮肤应该接下来会变差!!

晚上基本上一直都没有睡着

早上起床后,去药店买了开瑞坦,三年前公司的卫生员给我吃过

然后,在家休假,修整了一天。

到了下午,晚上,情况又变坏了,更狠的是我吃了葱,肉,鸡蛋之类的,过敏大忌,omg!

希望晚上睡醒后,能好起来!

日志
0

工作日结束了,等来了周末:),很高兴,然后到了周日晚上,又会有些低落。

最近的一段时间,有些闲暇时间,一般会用来温习、追美剧。

工作、学习、生活,应该有张有弛,前段时间,一直在张,哈,搞的有些身心俱疲,所以,放松了一周哦。

这个周末,在看《lost》,两天空闲时间,连续消灭了24集左右:),感觉有些堕落~

另外,近段日子,追着看了《行尸走肉》《终极审判》等,都属于我和媳妇喜欢的类型。

—————-

到了周末,第一个重要的事情,就是睡觉,周一到周五,一般早上7点多起来,晚上12点多睡着,欠了不少的睡眠时间,所以,周末一般都会补一补。

第二个重要的事情就是吃,一般会在家仔细做几餐,同时会去外面吃一些东西,媳妇做的大盘鸡、炸酱面、麻辣米线都是很好吃的。
周六去吃了汉拿山,调料我很喜欢,烤肉味道也是很赞的,推荐:)

第三个重要的事情,就是采购一周要吃的东西,包括买菜、买水果、牛奶饮料、零食等等。今天在路上还买了糖炒栗子,蛮好吃的,据说,10个就顶一小碗米饭,不晓得是不是。

—————-

上周,工作上的事情,比较懈怠,可能是一直比较累,所以有所懈怠吧,下周又会好起来的。

工作上的事情,很多,需要有条例的一件一件去想、去push、去动手做。想明白问题真的很累很劳心。

从下周开始,准备做一些技术分享的事情,一起讨论学习学习,一天到晚都在工作,大家都会很累的:)

想到的有:

版本管理git、svn的使用介绍和进阶

python 以及web编程框架学习

程序员做设计 与 bootstrap

golang是否值得学习和应用场景

PaaS/CloudFoundry

….

0

九月九,真是个好日子

九月九,嗨,这日子还真不错!

两年前的今天

laiwei哥哥和linjuly姐姐,结婚了,从此,他们过上了幸福的生活(虽然没房没车,然后钱也不多^^), 哈哈,大家快快送个祝福吧。

两年来,虽然偶尔吵吵架,打打对方,事情平息过后,发现打打骂骂都是为对方好,自然也就不生气了。

总体来说,经过这么多年的相处,嗯,对对方那是相当的好,至少laiwei哥哥这边如此。

回想这两年来,做个简单总结

1、生活方面,渐渐趋于稳定,比较规律(不包括作息,作息那是一如既往的不规律)。

2、工作方面,相对稳定,虽然laiwei哥哥换了一次工作(或许是两次),基本能做到养家糊口,稍微有点结余的水平,不过后面的路还很长,希望laiwei哥哥继续加油,争取早日让linjuly姐姐过上有房有车有狗有猫有花有草有淘宝的幸福生活。

3、感情方面,如前所述,稳步友好发展,继续保持哦﹌

4、个人业余生活方面,laiwei哥哥一般就是写写代码,做做网站(thepast.me 有了2200个用户了,还可以),买买域名,烤烤肉,踢踢球,总之都是一些相当健康的爱好啦。linjuly姐姐,一般就是逛逛淘宝,买买东西,吃吃烤肉,逛逛淘宝,逛逛淘宝,逛逛淘宝……

5、朋友圈,过去一年多,两位主人公,都认识了一些要好的朋友

曾经有位名人说过:

人生,一部分因为有了朋友而精彩。 — laiwei

所以,继续贯彻真诚的对待好朋友的方针策略不动摇。

最后,感谢一下linjuly姐姐,真是眼睛瞎了,竟然一直陪着一穷二白的laiwei哥哥,一走就是2年!

接下来的日子,会更好。

0

About SSO

前言:

SSO 是单点登录(Single sign-on )/单点登出(Single sign-off ) 的缩写。
SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。同理单点登出,即用户在一处登出,其他系统也相应登出。它是目前比较流行的企业业务整合的解决方案之一。

SSO与OpenIDOAuth的区分和联系:

OpenID 和 SSO的思想有相似之处,他们的宗旨就是用户使用统一的帐号,可以对不同的系统进行授权,也有一些较大的差别:
1、SSO是在一处登录,其他各处自动生效,在于集中管理;
2、OpenID是由用户自行决定是否允许其他第三方使用自己的帐号信息,在于去中心化,类似OAuth协议(其实目前国内开放平台的使用第三方帐号登录,就是使用OAuth协议模拟的伪OpenID),同时,OpenID是没有办法定义单点登出的(因为是去中心化的)。

已经有很多SSO的实现(包括开源的和商业的),不过都非常复杂,且依赖多,理解、部署、和现有系统集成都比较困难。

因此,在这里,从0开始,设计一套SSO的方案:

流程图:

名词解释:

1、Browser :客户端浏览器
2、Broker:siteA.com,siteB.com, etc…
3、SSO-Server:sso.com
4、token:broker和sso-server用来相互通信的凭证
5、token_cookie:broker种的cookie,是一个(随机数 + broker_name + SECRET)的加密值
6、session_cookie:sso-server种的cookie,可以理解为一个随机数
7、broker_name:每个broker都有一个标志identity
8、secret:每个broker都有一个secret,该secret只有该broker和sso-server知晓,用来加密(起到签名的作用)。
9、sign:对token_cookie, broker_name, nonce的签名
10、action: 为setup或者immediate, 默认为setup,表示如果用户在sso那里处于未登录状态,则跳转到login,immediate则意味着不跳到login页面,只是检查一下是否登录罢了。

流程说明:

用户第一次访问Broker :

1. 用户访问broker,由于是第一次访问,所以没有token_cookie,这时,Broker会生成一个随机数token,并将该token加密后,作为token_cookie种在浏览器中,然后将用户重定向到sso-server,请求sso-server把该token-cookie 和 用户的session绑定起来。

2. 用户访问sso-server,请求绑定token_cookie和用户session,传递的参数包括:上一步中生成的token, broker_name, nonce + 上述三者的签名 sign。

3. sso-server接到绑定请求后,首先验证签名,再检查cookie中是否有session_token,并且该session_token是否合法,如果合法,则把用户session和 md5( token_cookie + broker_name + SECRET )绑定起来,即通过后者可以查到该用户。反之,则重定向用户到sso/login页面,要求用户登录
这里会有action参数,默认为setup,如果没有登录,则引导用户跳转到sso/login页面

4. 用户访问sso/login 进行登录,提交的参数包括:token, broker_name, nonce + 上述三者的签名sign, username, password。sso-server对签名做验证,对用户名密码做验证,验证通过,则种一个session_cookie,并且按照上一步中的绑定策略,将用户session和 md5( token + broker_name + secret )绑定起来。之后,重定向用户到broker/index
用户访问broker/index,这时候,cookie中已经有token_cookie了,所以参考下面一节

用户再一次访问Broker :

用户访问broker,cookie中已经存在token_cookie,所以,broker会使用token_cookie 去sso-server那里,查找用户session:
1. 如果查到了,则返回用户信息
2. 如果没有查到,则重新生成一个token 和 相应的加密结果token_cookie,走“用户第一次访问Broker”流程

单点登出:

用户在任何一处登出时,都会把sso-server与该用户session绑定的token都删掉,来达到单点登出的目的。

1

thepast的初衷

昨天晚上,收到了funfunsay.com《纷纷说》开发者的来信,交流了一下thepast和纷纷说的一些设计思路。

funfunsay.com目前的笔记功能主要是:创建笔记,将笔记归入不同的脉络(Threads),创建文章(Paper)并且从已有笔记中选择纳入相关的笔记。系统支持对文章中的笔记进行拖动排序。笔记通过文章的形式共享(文章可以共享,同时文章中的笔记需单独设置共享后才能随着文章一起共享)。用户还可以收纳(Take in)其他用户共享的文章中的笔记。

简单的说,funfunsay.com/n的笔记功能主要目的是让用户更容易的整理自己的文字。通过细粒度的笔记条目组成完整的文章。

借此机会,我重新理了一下thepast到底是为了解决什么样的问题而来的:

thepast的初衷是保存个人在互联网上的“印迹”!

目前聚合了个人的qq微博、sina微博、twitter、豆瓣、blog的rss

由此衍生了一些小的功能:

1、对这些“印迹”,以PDF的形式,供用户离线保存。(现在是PDF形式,后续会考虑更好、更多的形式,比如纸质的timeline)

2、每天提醒用户,自己过往历史上的今天发生的一些事情,有时候会带来一些惊喜。

3、对这些“印迹”,能更好的搜索,管理

4、做一些数据挖掘,推送一些相关的,用户感兴趣的东西。

最后,thepast 做了一些简单的事情,同样也希望解决一些简单的问题,仅此而已。

update:

收到一位豆友在archlinux发行版环境,搭建好了thepast的运行环境,并写了一篇blog来记录过程中遇到的问题和心得,记录在这里:

http://blog.sina.com.cn/s/blog_6f97247e010117ms.html

0

持续锻炼身体 刻不容缓

因为冬天比较冷,加上晚上一般会做一些业余项目,所以每周一次的豆瓣足球,好有2个月没有参加了。

昨天晚上踢球去参加了,大场,由于较长时间未参加锻炼,刚上场的前20分钟,明显感觉胸口很闷,头稍微也有些疼,还以为自己都坚持不下去了。

还好,经过20多分钟的适应,慢慢有所好转。

工作这四年来,身体素质有明显的下滑,这个问题应该引起重视了,坚持每周锻炼身体,健康是家人的依靠和保障。

另外,晚上没和媳妇一起回家,怪想的^^

3

一个小小的开源项目:个人杂志计划

我在业余时间,做了一个小小的开源项目,叫做个人杂志计划。

目前在做的功能:

聚合个人在豆瓣广播,新浪微博,twitter的内容,并生成排版后的PDF文件,可供下载。

个人杂志计划的目的:

1. 一方面可以永久保存自己的timeline到本地。
2. 另一方面,排版后的PDF版本,在移动设备上(手机,pad)的离线阅读体验很不错,或者发送到kindle上。
3. 此外,如果我们还有精力的话,不妨把排版做的更好,这样出一本记录自己,讲述自己的纸质杂志应该还是很令人期待的。

还有一些更多可以做的东西

1. 聚合更多的内容,包括饭否,腾讯微博,wordpress……
2. 对聚合后的消息,提供搜索功能
3. 对聚合后的消息,做去重
4. PDF排版,更美观
5. 如何做纸质的杂志,包括版式设计,排版,打印

技术细节:

linux(debian6) –http://debian.org, stable and powerfull
nginx/uwsgi –web server and serve static file
mysql
python
flask(python web framework) –http://flask.pocoo.org
redis –nosqldb, store text,img etc, and used for cache instead of memcached
xhtml2pdf –convert html to pdf, https://github.com/chrisglass/xhtml2pdf
git/github –code version control
v2ex –thanks for v2ex and css of v2ex^^

项目地址: https://github.com/laiwei/thepast

官方主页: http://thepast.me

作为开源项目,期待大家加入,也欢迎吐槽。

thanks

0

我睡觉有那么投入吗

年前事情好多,比较累
到了晚上,11点左右就困的不行了
睡着后基本处于不省人事的状态
今天早上起床,我擦,发现我满脸是血
晕,原来晚上睡觉流鼻血了,然后我迷迷糊糊的不知道,用手抹了一脸
早上起来才发现
我这是到底睡的有多投入啊

ps 这要是半夜起来媳妇一开灯不得吓个半死啊啊啊啊啊

0

Password Strength Checker

用户注册网站的时候,本着对用户负责的态度,应该提示用户他的密码复杂度,免得被容易的破解!

所以需要有个简单的规则来提示用户。

设计原则

加分因素

  1. 长度>=8, score + 20
  2. 长度>=12, score + 20 again
  3. 含有小写字母, score + 20
  4. 含有数字, score + 20
  5. 含有大写字母, score + 20
  6. 含有特殊字符, score + 20

扣分因素

  1. 出现3个连续顺序小写字符,score – 20
  2. 出现3个连续逆续小写字符,score – 20
  3. 出现3个连续顺序大写字符,score – 20
  4. 出现3个连续逆序大写字符,score – 20
  5. 出现3个连续数字,score – 20

强度判别标准

  1. 得分小于60分,弱
  2. 得分介于60到80分,中等
  3. 得分大于等于80分,强 Continue reading
0

Gnu screen scroll up and copy && past

screen中如何上下滚屏?

ctrl + a + [ 进入copy模式,然后 使用j、k上线滚屏

更多滚屏快捷键:

h 左移一个字符

l 右移一个字符

j 下移一行

k 上移一行

0 移动到行首

$ 移动到行尾

G 移动到指定的行,默认是移动到最底部

Ctrl + u 上移半屏

Ctrl + d 下移半屏

Ctrl + f 下移一屏

Ctrl + b 上移一屏

screen中如何复制 粘贴?

Ctrl + a + [进入拷贝模式,然后:

1、移动你需要开始拷贝的地方

2、按空格键,表明要开始复制

3、移动j k h l 进行复制

4、再次按空格键,结束复制

5、Ctrl + a +]粘贴。

http://www.linuxscrew.com/2008/11/14/faq-how-to-scrollback-in-gnu-screen/

0

早起了20分钟

早起了20分钟(7点10分起床)

就在家吃上了热乎,可口的早饭

猪肉+粉条+萝卜 汤

炒辣椒 配热馒头

鸡蛋没吃掉。。。。

亲爱的媳妇,很辛苦,感谢