每日nba视频微信公共账号

某夜睡不着写,爬起来用tornado和redis写了个nba视频微信公共账号.

可以搜索球星/球队的视频,输入日期(今天昨天)的话返回当天五佳球/视频集锦,视频可直接观看。请搜索allnba或扫描下面的二维码.

可惜现在微信不支持自动主动推送,要不就能在视频更新后第一时间推送到手机了。

weixin

Python的正则提取技巧

用python正则提取字符串的方法


在日常工作中经常遇见在文本中提取特定位置字符串的需求.python的正则性能好,很适合做这类字符串的提取,这里讲一下提取的技巧,正则表达式的基础知识就不说了,有兴趣的可以看re的教程. 提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置的字符串.日志分析会遇到这种情况.下面我会分别讲一下对应的方法:

1. 单个位置的字符串提取


这种情况我们可以使用(.+?)这个正则表达式来提取. 举例,一个字符串"a123b",如果我们想提取ab之间的值123,可以使用findall配合正则表达式,这样会返回一个包含所以符合情况的list,代码如下:

1
2
3
4
import re
str = "a123b"
print re.findall(r"a(.+?)b",str)
#输出['123']

1.1贪婪和非贪婪匹配


如果我们有一个字符串”a123b456b”,如果我们想匹配a和最后一个b之间的所有值而非a和第一个出现的b之间的值,可以用?来控制正则贪婪和非贪婪匹配的情况. 代码如下:

1
2
3
4
5
6
7
8
9
import re
str = "a123b456b"
print re.findall(r"a(.+?)b", str)
#输出['123']
#?控制只匹配0或1个,所以只会输出和最近的b之间的匹配情况
print re.findall(r"a(.+)b", str)
#输出['123b456']
print re.findall(r"a(.*)b", str)
#输出['123b456']

1.2多行匹配


如果你要多行匹配,那么需要加上re.Sre.M标志. 加上re.S后, .将会匹配换行符,默认.不会匹配换行符. 代码如下:

1
2
3
4
5
6
str = "a23b\na34b"
re.findall(r"a(\d+)b.+a(\d+)b", str)
#输出[]
#因为不能处理str中间有\n换行的情况
re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
#s输出[('23', '34')]

加上re.M后,^$标志将会匹配每一行,默认^$只会匹配第一行. 代码如下:

1
2
3
4
5
str = "a23b\na34b"
re.findall(r"^a(\d+)b", str)
#输出['23']
re.findall(r"^a(\d+)b", str, re.M)
#输出['23', '34']

2. 连续多个位置的字符串提取


这种情况我们可以使用(?P<name>…)这个正则表达式来提取. 举例,如果我们有一行webserver的access日志:'192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"',我们想提取这行日志里面所有的内容,可以写多个(?P<name>expr)来提取,其中name可以更改为你为该位置字符串命名的变量,expr改成提取位置的正则即可. 代码如下:

1
2
3
4
5
6
7
8
import re
line ='192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"'
reg = re.compile('^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)" (?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"')
regMatch = reg.match(line)
linebits = regMatch.groupdict()
print linebits
for k, v in linebits.items() :
    print k+": "+v

输出的结果为:

1
2
3
4
5
6
7
status: 200
referrer: http://abc.com/search
request: GET /api HTTP/1.1
user_agent: Mozilla/5.0
date: 25/Oct/2012:14:46:34
size: 44
remote_ip: 192.168.0.1

音乐搜索in微信

昨晚花了3小时做了个微信音乐搜索,在微信里扫描下面的二维码或者点击朋友们–>添加朋友–>搜号码,搜索getall就可以了.

关注后输入想听的歌曲或歌手名,就会给你返回个搜索结果,点击结果中的歌曲就可以完整收听. 欢迎关注,欢迎反馈使用感受哦:) weixin

我的github

我的github:liuzhida

把自己业余写的两个小项目放上去了:

一个是提醒天气变化的小网站:weathercare

如果北京地区的温度下降超过3度,或者有雨雪大风等天气,会向你订阅的手机自动发送你自定义的短信提醒。 拿Tornado+Redis写的。

另一个是简单的音乐搜索,具体原理大家看代码吧,也是用Tornado+redis实现的。

下面聊聊工作上的事情。

来到豌豆荚做的第一个project music search, mentor不是很满意,我也在反省中,从纯后端转向新产品开发,我还有太多的知识需要学习了,产品设计这个工作远没有我之前想象的那么简单。再另外找时间写篇blog谈谈自己的体验吧。

另外尝试了一下gevent和node.js,对比tornado测了一下benchmark。没有写下来,直接发在weibo上了,看来weibo的冲击对blog的确很大,我已经越来越难下定决心写一篇完整的blog了。

That’s all.

你好 Octopress

今天终于把Blog从Wordpress搬到了Octopress,彻底摆脱了php-fpm和mysql的束缚。

切换完nginx的规则后,第一件事就是彻底卸载mysql,linode 512MB的VPS跑php+mysql还是太重了。

我的Redis再也不用担心内存不足了。 从此以后彻底转向Tornado+Redis,ruby用起来还是有点不顺溜,难道我是python的脑残粉吗。

另外准备把自己写的一些东西整理之后,逐渐的放在Github上。

EOF

我的MAC软件列表

分为两部分,一部分是我直接在Mac App Store买的,另一部分在macx或者其他站点下载的,大家自行搜索下载,不给link了

In Mac App Store


  • Reeder
    • 花了68买的,最好的reader,没有之一;
  • ForkLift
    • 特价的时候收的,整理文件时非常实用;
  • Dunno
    • 越来越爱用,收集资料非常方便,自带帆樯功能,把墙外搜索结果缓存起来
  • Dash
    • 一些语言的语法糖,各种服务器的配置,可以都存在Dash里,实用
  • Fetcher
    • 桌面版firebug,不用开浏览器了,debug的时候很方便;
  • 有道词典
    • 凑合用
  • Time Track
    • 追踪自己把时间花在哪上面了,也推荐下RescueTime,都分析出报告来了;
  • DoublePane
    • 神器,快捷键下相当方便,各种重组窗口;
  • Evernote
    • 不多解释了,Simplenote也不错;
  • MPlyerX
    • 有口皆碑的播放器
  • Caffeine
    • 保持不休眠
  • Sparrow
    • 自带的Mail已经很完美了,Sparrow吸引我的唯一一点就是支持Gmail快捷键;

Not in Mac app store


  • Alfred 2
  • RescueTime
    • 最好的事件追踪工具,每周都会给你发一篇Report,详细介绍你这周时间都花在哪了.
  • iTerm2
  • Mou
    • 个人感觉很好用的Markdown编辑器,所见即所写,本文就是用Mou写的,完全免费。
  • Keka
    • 替代系统解压软件的最好选择,完全免费,收费的BetterZip也不错.
  • Consolas.ttf
    • 编程最佳字体
  • Xcode command line tools
    • 如果不是做iOS开发的话,不必下载那么大的xcode,这个command line tools基本上包括了所有需要的依赖环境.
  • Paragon NTFS
    • 如果你需要读写NTFS格式的硬盘,这个软件真心需要.
  • Marsedit
    • 在Mac下写Wordpress Blog必备,支持Markdown.
  • Fakethunder
    • 迅雷离线下载工具(现在官方迅雷也支持离线下载了)
  • Istat menus
    • 在状态栏监控系统性能, 能实时看到下载上传速度,以及内存/CPU使用情况
  • Carousel
    • 桌面版Instagr.am
  • Appcleaner
    • 卸载软件必备,小巧实用
  • CleanMyMac 2
    • Mac系统清理软件,话说2比1提高太多了.强烈推荐.
  • Diumoo
    • Mac上最好的豆瓣FM客户端,没有之一.
  • Miao
    • 如果你喜欢用Tweetbot看Twitter的话,你绝对会喜欢Miao,Mac上最好的微博客户端.
  • ClipMenu
    • 最喜爱的提高效率的工具,把复制过的文本历史都储存起来.Command+shift+v就可以把调用之前曾经复制过的文本.
  • Totalfinder
    • tab模式的Finder,还有各种自定义配置,很方便,不付费也可使用.
  • Securt Socks
    • 帆樯必备,是一个图形化的ssh工具,配合chrome的switchy使用,GoAgentX也不错,感谢wujinhai推荐。
  • Macvim
    • 神器,不过现在我更爱直接在iTerm2里使用vim
  • 搜狗输入法
    • 不解释了
  • Growl
    • 桌面通知工具,现在Mountain Lion的桌面通知已经很不错了,估计后面growl就会被淘汰掉。
  • Chrome
    • 跨平台的书签同步功能很实用,但我更喜欢safari 6
  • Xee
    • 小巧的看图工具,Mac版的ACDSee
  • Homebrew
    • Mac版apt-get,神器
  • Dropbox
    • 生活真需要,我直接把Mac用户目录下的文档之类的全部软链过去,非常方便。
  • Sublime 2
    • 太爱vim了,这个就当个普通的文本GUI了,非主力编辑器
  • Transmit
    • Mac上最好的FTP
  • Adium
    • Mac上最好的Gtalk客户端,Message的Gtalk太容易掉线了
  • Firetask
    • 用过Things,Wunderlist,The hit list之后,总算有一个软件满足了我的需求:支持Mac和iOS云同步,简单,中文友好
  • Skim
    • 小巧的pdf阅读器
  • Instashare
    • 非常强大的局域网传输工具,支持Mac,iOS全平台,支持不同Mac之间,Mac和iOS之间,iOS之间的文件传输。

What Are Questions?

What are questions?

昨天我mentor王俊煜同学有幸和传说中的Clayton Christensen神聊了一会。。可惜我没有幸,还好他回来分享此次会面,里面有一点让我深有感触,blog已有好几个月没有更新,今日有空,特此写一篇讲讲Clayton Christensen带给我们的启发。

Clayton Christensen就不多作介绍了,currently a professor at Harvard Business School, is best known for his book, 《The Innovator’s Dilemma》.

mentor着重指出的是他说的关于“someone can’t be taught until they’re ready to learn”的认识。

这句话已经被太多的例子验证了,但究竟是为什么让人费这么大劲呢?

以下是Claytond大师的解释:

Questions are places in your mind where answers fit. If you haven’t asked the question, the answer has nowhere to go. It hits your mind and bounces right off. You have to ask the question – you have to want to know – in order to open up the space for the answer to fit.

This is the power of questions.

记得前段时间看过xiaolai的一篇blog,引出一个问题:Why Smart People are Getting Smarter?

xiaolai给出了一个答案:Because they always ask right questions.

一个Harvard student写的blog正是说的此事: What I’ve Learned About Smart People

这里引用以下他描述的smart people的特征,说的跟Claytond有异曲同工之妙:

I can of course make no authoritative claims here, but I have noticed one overarching theme among smart people: they ask questions. When someone explains something new to me, I’ll usually just nod my head like I know what they’re talking about. If I don’t understand something, I’ll just Google it later. After all, I don’t want this person to think I’m a moron. Smart people are different. If they don’t understand something, or even if they think they understand something, they’ll ask questions. I distinctly remember, as an immature and perhaps arrogant freshman, a guest lecture in one of my classes. After explaining what I thought was a straightforward concept, the guest lecturer asked if anyone had any questions. Looking around the room, every student simply nodded, indicating everything was clear. A question, however, came from a tenured professor who had undoubtedly been exposed to the material before. At the time, I thought nothing of it, and perhaps even thought that I was smarter than the professor because I understood a concept he/she didn’t. Now, I am confident that this professor did not ask the question just to make the guest lecturer feel better, to start a discussion, or anything else. The intonation of the question and the intensity with which the professor listened to the response definitively suggested that the professor’s question was genuine, and that the answer was of great importance.

这才是进步的真正方法。

请给它 5 分钟的时间

这是一篇很久前在 37 Signal 日志 SVN(Signal v.s. Noise )读到的文章,作者是 37 Signal 的 Jason F.。很有启发的一个故事,与大家分享。

标题是「Give it five minutes」,下面的故事,都是以 Jason 的第一人称陈述。

几年前,我曾经是个急性子(hothead)。不论任何人说任何事情,我都是不赞同。只要事情不符合我的世界观,我就极力回击。

什么事情,什么我都要是第一个提出来的。(观点也好,想法也好,发的微薄也好)就好像,第一个怎么怎么样很重要。

但事实上争做第一个的同时也就意味着我没有足够认真的能去思考一个问题、一件事。你越快想去作出回应,你所思考的就越少。可能并没有这么绝对,但大多时候都是如此。

这事说起来很轻松,就好像你本能的觉得只有别人才这样。你其实也一样。

说道这个先让我们回到 2007 年的一天,我当时在一个「商业创新工厂」的会议上做演讲,同去的还有 Richard Saul Wurman。他在我讲完后上台,介绍了他自己,还对我的发言做了一番称赞。他真是太客气了,其实根本没必要那么做。

但你知道当时我是怎样的吗?我在他还在台上发言的时候,就对他提出的一些库存的事情提出了反对看法,我对他的观点不同意,所以一有机会我就迅速地驳斥他的想法。当时的我真的,简直就像个混球一样。

他的回应却改变了我的一生。非常简单的一段话。

他说:「老兄,给它 5 分钟的时间。(Man, give it five minutes.)」

我问他说的话是什么意思。

他回答:「有不同的观点没什么,要回应也没什么。有坚定的想法和信仰是好事,但在你确定想要与我争论前,请允许我先把我的想法全部讲完,让大家明白。完全听过我的想法后,再做回应。(It’s fine to disagree, it’s fine to push back, it’s great to have strong opinions and beliefs, but give my ideas some time to set in before you’re sure you want to argue against them.)」

「5 分钟」代表着「思考」,而不是作出回应。

他是对的,我的做法似乎是要在讨论中去证明什么,而不是为了学习什么。

那一刻对我影响深刻。

Richard 花去了他大部分职业生涯思考这些问题,他用了 30 年时间。我却不愿意为这些想法给出 5 分钟的时间。

当然,他可能也是错的,我也许是对的。可是在完全坚定自己正确前还是好好再仔细琢磨琢磨。

还有「提出问题」和「作出回应」之间也有不同。去回应就是说你已经认为你自己知道。而提出问题代表你想去知道。你想要问更多的问题,了解更多。

学着先去想而不是快速去回应,是长久一生的追求。并不那么容易。我常常还是会时不时不该性急时,脑袋发热。但我还是为我在这个进步的过程中受益感到高兴。

这就像乔布斯热爱想法、点子,也热爱去做一些东西出来。他有着其少见并且敬重的态度对待着创新的过程。我觉得他比任何一个人都懂得,一个好的想法可以最终变得十分强大,但这些想法起初却十分脆弱。这些点子和想法很少可以成形,轻易就会错过,很容易就妥协,也很容易被压扁被否定。

And just as Steve loved ideas, and loved making stuff, he treated the process of creativity with a rare and a wonderful reverence. You see, I think he better than anyone understood that while ideas ultimately can be so powerful, they begin as fragile, barely formed thoughts, so easily missed, so easily compromised, so easily just squished.

这太深刻了。想法是脆弱的,起初的一个想法如此的无力(Ideas often start powerless.)。这些想法就像不存在一样,因为太容易被忽视,太容易被忽略或错过。

这个世界上有两件事情不需要你任何本事就可以做:

1. 花别人的钱

2. 对一个想法的不屑

对一个想法的不屑,是那么容易。因为它不需要你投入任何工作。你可以嘲笑它,你可以忽视它, 你甚至对它可以乱说一通。这很容易。

难得的是去保护它,对这个想法做些思考,让它在你脑子里呆一段时间,去探索发现它,获取它的精髓,然后尝试它,付诸实践。

You can scoff at it. You can ignore it. You can puff some smoke at it. That’s easy. The hard thing to do is protect it, think about it, let it marinate, explore it, riff on it, and try it.

这段让我想到了苹果的那则广告:「Think Different.」

所以下次你听到什么东西,或者有别人谈论一个想法,抛出一个想法,提出一个想法,请给它 5 分钟的时间。哪怕就稍微对这个想法思考那么一点,再作出回应,再去说实现它有多难,需要花费多少工作。

或许真的很难,真的需要太多精力,但或许它真的值得你去做。
本文转自:http://www.nooidea.com/2012/04/give-it-five-minutes.html

从Reader加星号文章说起

最近用起了reeder for mac,使用体验非常好,基本取代了我原有的web浏览reader的习惯.

通过reeder的统计功能,我震惊的发现我的加星号文章居然有4249篇之多.

而且其中的大部分文章,我已经完全没有了印象.

更甚的是我现在已经完全养成了一个习惯,就是看到值得学习blog,尤其是需要花时间实践和思考的技术blog,我会直接加个星号,然后接着看下一条…

我已经完全把加星号这个动作当作我真正学习过的一个标记了,好像加过星号之后,这篇blog就已经存入我的大脑.

但真相是,我根本没有认真的看过和思考过这些blog.

趁着周末我认真的看了大概几百篇,发现里面不乏有很多发人深省的好文章.但更多的是我目前工作中完全用不到的知识.这其中信息的过载超出我的想象,而且是在我的reader经过筛选之后的,我从不订阅新闻资讯类的blog,更多的订阅的是私人blog.我仿佛想起我加星号时的心理过程,”这篇文章说不定以后有用,虽然现在用不上”,看来贪婪真的是人类的原罪,无论是对金钱,还是对知识.

知识真是学不完的,记得刚来公司的时候总监给我开了一个学习路线图,现在七七八八的也看的差不多了.但我总觉得还是不够底层,不够深度,我现在真切的感受到我真是刚刚入门,很多原来似是而非的现象,现在自己总算能有个自圆其说的理解.操作系统够底层了吧,还有内核,还有各种语言的parsing,当初学编译原理完全是为了考试.除了这些深度的东西,广度的知识更多,各种高可用的解决方案,nginx的各种原理,各种modules.每天reader上都有人分享的架构设计经验.nosql之类的新概念.甚至产品的理念.

太多的技术和知识仍源源不断的向我涌来,我感觉自己快要溺死在这知识里面.

直到我最近读了咖乐但涩学长的一篇文章.一句话让我醍醐灌顶.

“只会学习,不会做事的人是干不了大事情的。因为你学习的目的是为了更好地做事。在做事的过程中学习,才是真正会学习的人。”

那些现在用不到,未来有用的东西,把他们全部从星号文章里面去除掉吧,相信大脑的索引能力,需要用到的时候自会用关键字去找他们,但现在,重要的事是用有限的精力focus在提升我工作能力的知识上.

上面说到了我的总监,这也是另外一件我想谈的事.

刚来公司的时候,很佩服我们的总监,他清华本硕毕业后,仅仅工作了6年就成为了这家公司的创始人和技术总监.我很惊讶于他的成长速度,自己唯一有自信的地方就是家乡教育体系馈赠给我的低年龄.

我上学的时候小学5年初高中6年,再加上入学早,(其实我应该是05级的,学前班的时候多上了一年),所以在大学的时候,我基本上是最小的一个,来到任何一个公司,我总是最小的那几个,不过现在好多了,公司里总算有比我小的九零后了.

我隐隐的感觉到我总监的学习能力,很幸运能直接向他汇报,我觉得每个人每一年都有一个成长加速度,大家的可能是1.0x,但他的加速度我觉得特别快,无论是做技术还是现在从技术转做管理.(技术+管理会成为今后的主流吧,因为你技术不好,无法服众,管理不会,带不了团队作战.),他都能柔韧有余.

向他学习吧.

初心

iTunes DJ总会给我安排出很多惊喜,事隔N年以后的今天,我重新听到了八度空间以前的周杰伦,重新听到了遇见我时候的曹方.

让我感慨的是,现在的他们变得太彻底了,谁都会变的.那个当初留着长发有些羞涩的周董现在MV里的三大件就是钢琴跑车加嫩模,曹方的浅彩虹整个一个曹绮贞.

你们的音乐里有了越来越多的元素,越来越多的概念,越来越跟得上时代,专辑的名字越来越洋气,但越来越难打动我的心.