正则表达式给力小伙伴

7~8年前,很多人会告诉你「不会C++的程序员不算是真正的程序员」,现在看到这句话的你可能会忍俊不禁,但的确是那个「桌面软件时代」的事实。如今,又有一句非常有意思的话出现得越来越频繁「不会正则表达式处理字符串的程序员不是好前端」。Anyway, 这里不讨论语言优劣,更不掺和程序员的「评价标准」。借这个话题向大家推荐一个非常给力的「正则表达式在线学习、编写、测试的工具」:RegExr

据我观察,很多人在处理字符串的时候,在特定字符串函数(如strpos, str_search)与正则表达式之间,往往选择前者。除去部分简单场景的确适合使用特定字符串处理函数,很多人其实是因为思维/学习惰性,根本不去想怎样用正则表达式「更加优雅」的处理手上的问题。甚至有些人宁愿用str*函数族写好几十行且不完备的字符串处理代码也不尝试用正则表达式。每当看到这样的程序小猿,我就会毫不犹豫的向他们推荐RegExr。RegExr给力之处体现在一下几个方面:

  1. 极快的页面加载速度。在这之前,我使用过一些其他的正线正则表达式工具,但是加载速度都没有RegExr快。
  2. 极简的在线帮助。让你不再畏难学习正则表达式。这点很重要,想想你身边有多少人学习正则表达式不了了之吧。
  3. 典型够用的实例。
  4. 资源丰富的社区。直接搜索常用的正则表达式,节约时间,避免重新发明轮子。
  5. 实用的收藏/保存功能。收藏、保存自己常用的一些正则表达式。
  6. 实时的响应,酷炫的tip提示。编写表达式时,系统会实时执行该表达式进行字符串匹配。在表达式和匹配的字符串上都会给出非常友好的tip。
  7. 两分钟入门,好吧,其实是2’45”:

另外,作者Grant Skinne是一个非常乐于分享的家伙,在GitHub上可以找到这个项目的源代码,有兴趣的童鞋可以自己研究一下。我才不会告诉你「只有研究了RegExr的源代码的程序员才算会处理字符串的程序员」呢。

生命中最难的阶段不是没有人懂你,而是你不懂你自己

昨晚,辗转难眠之时,瞥见一句话,心里为之一惊:

对待生命,你不妨大胆冒险一点,因为好歹你要失去它。如果这世界上真有奇迹,那只是努力的另一个名字。生命中最难的阶段不是没有人懂你,而是你不懂你自己。

——弗里德里希·尼采

过去的一年,哪怕现在,我知道过得很难。但是,大多数时候,只不过是自己在感动自己罢了。而对于自己追求的那种本质的生活于事无补。

无意中,翻到了自己三年前摘录的一段话。那激荡飘逸的文字,无论在什么时候、什么地点、什么心情看见,每每都能让自己重新拾回一些久违的东西:


I do not choose to be a common man,

It is my right to be uncommon … if I can,

I seek opportunity … not security.

I do not wish to be a kept citizen.

Humbled and dulled by having the
State look after me.

I want to take the calculated risk;

To dream and to build.

To fail and to succeed.

I refuse to barter incentive for a dole;

I prefer the challenges of life

To the guaranteed existence;

The thrill of fulfillment

To the stale calm of Utopia.

I will not trade freedom for beneficence

Nor my dignity for a handout

I will never cower before any master

Nor bend to any threat.

It is my heritage to stand erect.

Proud and unafraid;

To think and act for myself,

To enjoy the benefit of my creations

And to face the world boldly and say:

This, with God’s help, I have done

All this is what it means

To be an Entrepreneur.

Thomas Paine, Common Sense

我是不会选择做一个普通人的。

如果我能够做到的话,我有权成为一位不寻常的人。

我寻找机会,但我不寻求安稳,我不希望在国家的照顾下成为一名有保障的国民,那将被人瞧不起而使我感到痛苦不堪。

我要做有意义的冒险。

我要梦想,我要创造,我要失败,我也要成功。

我拒绝用刺激来换取施舍;

我宁愿向生活挑战,而不愿过有保证的生活;

宁愿要达到目的时的激动,而不愿要乌托邦式毫无生气的平静。

我不会拿我的自由与慈善作交易,也不会拿我的尊严去与发给乞丐的食物作交易。

我决不会在任何一位大师面前发抖,也不会为任何恐吓所屈服。

我的天性是挺胸直立,骄傲而无所畏惧。

我勇敢地面对这个世界,自豪地说:在上帝的帮助下,我已经做到了。

这才是真正的企业家。


学会与自己相处,尝试去懂自己。

「Thinking Clearly about Performance」阅读笔记

在国内,不知道有多少软件工程师在讨论问题的时候口口声声把性能挂在嘴边,但是到实际设计、编码和运营阶段,却完全将性能抛在了九霄云外。2011年京东促销,网站一度崩溃,东哥直接扔出一句“增加三陪服务器,活动重搞一次”。在引起广大程序员一片欢声笑语的同时,也揭示了天朝在“性能”上普遍存在的问题:并不持续的关注性能,直到出了问题的时候才进行补救。“安全”问题在国内的现状也类似。

缺乏系统性“性能”的关注与对这个概念的认知不清晰不无关系。Cary Millsap主题为Thinking Clearly about Performance的文稿对这一概念驾重就轻,信手拈来,真正做到了深入浅出。其中词汇部分的解释简洁准确,是这个文稿的一大亮点,值得细细品味。

关键点笔记

  1. Performance is an attribute of each individual experience with a system.
  2. 性能只需要关注两个点:吞吐量(throughput)和响应时间(response time)。
  3. 两幅图形象说明什么是性能
    Thouhgput responsetime 1
    Thouhgput responsetime 2
  4. 性能的衡量应该是具体而精确,否则你就是使用了错误的衡量指标。
  5. 序列图理流程,profile看数据,分析系统性能目标是否可行,以及哪些地方是系统的瓶颈。
  6. 把系统最繁忙的资源当做系统瓶颈往往是不可取的。不同的任务/应用,瓶颈也会各不相同。
  7. 明确你的knee在什么位置,据此设计系统容量和在随机访问情况下的knee负载。
  8. 性能优化就是与三座大山死磕:inefficiencies, queueing delays, coherency delays.
  9. 三座大山是永远无法夷为平地的,但是只要持续尝试,会发现越来越多可持续改进的点。
  10. 性能是一个特性,应该从一开始就有所考虑:

The software designer who integrates performance measurement into his product is much more likely to create a fast application and—more importantly —an application that will become faster over time.
—Cary Millsap