PHP is_array()

同事维护的站点遇到一个SQL注入漏洞,最后发现是由于对in_array()的理解错误(一直以为是绝对匹配才会返回true),同时拼接SQL语句时也没有使用Prepared Statement导致。代码中使用in_array($var, $white_set)判断从Query String获得的变量是否符合要求,参见下面示例代码($var为一整型变量,取用时没有使用intval($var)或者(int)$var强制转换为整型)。

$white_set = array(11, 13, 16);
$var = $_GET['var'];
if (in_array($var, $white_set)) {
$query = ‘ … column = ‘ . $var . ‘ … ‘;

}

访问http://www.example.com/path/to?var=16′ and ‘x’='时,$var=16′ and ‘x’=',使用in_array($var, $white_set)判断会得到true,因为in_array的第三个参数默认为false,此时在依次比较$var和$white_set中的元素会进行类型转换,相当于使用==进行比较;如果第三个参数为true,则相当于使用===进行比较,两个变量只有完全一致才会返回true。

总结:in_array()第三个参数决定变量和数组中元素如何进行比较。值为false时(默认),相当于==;值为true时,相当于===。

ThinkPad E430小记

在淘宝聚划算上看到了ThinkPad E430的团购信息,再次勾起了我给自己购买个新笔记本的念头,在京东上搜了一圈之后,发现E430的配置还是挺不错的,3899的价钱比京东上便宜多了,最终决定购买之。

天猫物流,到货很快的说。

E430的外观改变了此前ThinkPad给我留下的四四方方、棱角分明的印象,更具现代感。键盘也不是传统的ThinkPad风格,变为新潮的巧克力键盘。屏幕的高度比我的HP 6531s短,对比后发现E430的长宽比更好,16:9。屏幕的清晰度也很好,比我的老化的6531s显示器和外接显示器好多了。

默认的系统是定制版Ubuntu 11.10,感觉很不好,重装为Ubuntu 12.04 AMD64版本,虽然默认只有2G内存,不过已经购买了8G内存的说。安装12.04也折腾了很久的说,来来回回刻录了好多次U盘安装盘,怎么都不好使,后来才发现10.10之后使用UltraISO直接刻录无法使用,UltraISO刻录后必须修改某个参数或者使用官网推荐的方法刻录才可行。

下面开始吐槽的说。

吐槽

最上面一排按键竟然默认是功能键的,组合Fn才是F1-F12,而F1-F12才是我比较常用的按键。(习惯之,或者找找看有没有改键程序的说)

E430的做工不够精细,不和同事的MBP/MBA比较了,连我的HP 6531s都不如。触控板有些松动,网上说这是通病。右下方的右键在Ubuntu系统下同左键效果。机体正面的棱角很“锋利”,我极度怀疑某天我不小心可能会被划伤。

CapsLock没有指示灯。

电池也很“坑爹”的说,回到家后才发现接通电源一下午,电量的最大值竟然还是39%,试验了下,发现少于39%会充电,到达39%又停止了。网上搜索的下,可能电池是坏的。第二天联系了客服经过了神奇的步骤后才激活电池的充电功能,干!(激活步骤后面会提及。)

神奇的步骤

  1. 关机,拔下电源,拔出电池。
  2. 插上电源,开机。
  3. 关机,拔下电源。
  4. 插上电池,插上电源。(这时候应该能看到电池显示灯亮,表示已经能正常充电啦!)
  5. 开机。(会显示“电源已接通,正充电”。)

PS:结合前两次购买笔记本的经验,发现京东上至少笔记本的价钱并不低。内存好像也是,三星黑金刚4G亚马逊的价钱更低,另外这次京东竟然不支持货到付款,同时由于京东不支持支付宝,提高了付款的门槛,果断转到亚马逊购买的说。最后,我决定成为“京东黑”的说。

PPS:此前购买护具,因为检查疏漏,过了几天真正使用时才发现其中一个有个裂口,感觉不影响使用也就没去申诉的说。于是这次购物就没有在收到货物后立即付款,感觉这才是在淘宝购物的正确的方法的说。

天寓书友会第一次线上活动记事

死宅了很久,觉得周末需要找些事情做,主要是要走出去多和他人交流,免得到时候连交流都不会了,找不到妹子的原因一定出在自己身上(即使现在不找,将来也是要找的嘛)。

于是昨天逛了逛豆瓣同城,希望找到个活动参与进去。虽然有不少小组比较有意思,比如不以婚姻为目的的去爱,但哥是个闷骚的人,不好意思去参加。另外,我对书友会比较情有独钟,于是最终选择了天寓书友会(因为地址是滨江),加入了QQ群(161667557,管理员@camomile是名老师的说)。基于上面提及的原因,我的内心火热起来了,破例登陆了很久不大用的QQ,并长时间保持登陆(当然隐身是肯定的)。

今天和@camomile一起交流如何组织活动,最终决定先尝试下线上“直播”的方式,以后有机会在组织线下活动。虽然我感觉这种文字直播是一种很怪异的方式,成员之间如何互动呢?写一篇读书笔记不就可以了吗?不过既然是尝试,看具体的效果吧。于是就晚上8点的时候直播进行了。

@camomile今天分享的是《寻路中国》,我没有看过,豆瓣上评分高达9.1的说,可见很值得值得一看的说。这是一篇外国人从普通国人的视角对中国改革开放以来的发展以及中国的一些传统的的看法。这不是一本游记,是一本社会纪实书籍,类似的书有《巨流河》和《夹边沟记事》,《巨流河》我看过两章,《夹边沟记事》看过阮一峰的书摘。感觉有时间这种类型的书还是值得一读的。在@camomile分享的过程中@肖遥也穿插着不少有价值的言论,让阅读量很少的浅薄的我自惭形秽啊。

第一次现场直播已经结束后,感觉还是不错的,我想如果大家积极些,也许排期要排很久的说。总的来说还是比较期待以后有机会组织线下的交流活动。我预定了下一次直播,主题是间隔年(Gap Year)。届时我会分享《我睡了81个人的沙发》和《迟到的间隔年》这两本书的内容。

Gap Year是一个舶来的概念,在国外的表达形式往往是不同阶段之间的旅游,这又分两种:1)是已经结束的上一段和已经确定的下一段时间存在Gap,2)是已经结束的上一段和未知的未来之间的Gap。-by- @肖遥

第一种Gap是自然发生的,比如暑假,第二种Gap是人为营造的。好吧,我已经没有自然发生的Gap,只好到时准备下自己的迟到的间隔年,不过能够实际成行还要看到时我的状态,因为我认为:如果知道了自己想要什么,也许就不用这个过程了。

总结:感觉这种活动还是很不错的,可以促进我去读更多的书,更多的和他人进行交流,结识更多的人。希望我能够保持热情的说,找个口好吧:为了妹子,哇咔咔 ;-)

PS:其实目前我认为自己最喜欢的是小型的技术交流活动,但是不知道那里能够找到附近组织或者分舵。

PPS:也许过段时间我可以尝试自己组织些技术交流活动的说,不过时间需要进行协调的说。

两种思考方式

今天下午来自淘宝的@kimihuang给我们普及了一些互联网广告的知识,有些收获。

不过这篇文章将不涉及@kimihuang分享的主要内容,而是由其分享的一种赚钱的故事引发的我的思考。

创建一个新的网站,没有流量,怎么赚钱呢?
通过AdWords购买较低的价位的关键词引入流量,再通过AdSense在网站上投放单次点击价位较高的广告,赚取之间的差价。

下午听到这个故事时,我的第一个反应就是:这种在国内是行不通的,因为国内的单次点击价位太低了(只是听说,没有实际了解过)。

晚上回来后想想,也许还种思考方式会更好:这确实是一种不错的赚钱的方式,不过需要解决一些关键的问题。

  • 哪些低价位的关键词能够带来流量?
  • 带来的流量属于什么类型的人群?
  • 他们喜欢什么类型的高价位广告?
  • 靠什么内容来吸引导入的用户停留下来,并点击广告?
  • 如果解决国内广告单次点击价位偏低的问题?
  • ……

通过以上的问题,我的结论是:这种方式不是那么好赚钱的,否则很多人早就这么干了。

虽然通过以上两种思考方式得到的最终结论是一样的,但是后一种思考方式是一种努力的结果,而不是一上来就否决(虽然有时直觉也是很有效的决策手段)。

PS:@kimihuang 应该是Tanx的产品负责人吧(应当是靠谱的猜测)。

PPS:@kimihuang的微博

一个人 vs. 两个人

某日工位相邻的同事去见丈母娘去了,午饭时和其他同事在电梯里的聊天记录如下:

……
我:感觉一个人挺好的
同事:两个人会更好

是不是这样呢?要不要知足常乐呢?……


最近看了古典的《拆掉思维里的墙》,其中有一节——“不要只和要结婚的人谈恋爱”[1]。感觉这节开始部分的故事里的类比很有意思:

  • 天真到认为可以一见钟情的小男生 <-> 天真懵懂,刚刚毕业,觉得自己会在一家公司干一辈子的员工;
  • 觉得结婚就行的老男人 <-> 身心疲惫,希望自己随便找一家公司干下去的“老油条”;
  • 觉得反正承偌又不上税的大忽悠 <-> 觉得反正先干着,大不了付一点违约金的员工;

抱着“只和可以结婚的人谈恋爱”的想法和“我只选择做要从事一辈子的工作”的心智模式一样。后者我知道自己的答案是什么,虽然我的目标是找到可以从事一辈子的工作,但是实际上知道目前我还在不断摸索中,改变着。类推到前者我大致知道了答案。

对于个人兴趣方面,我的观点是多尝试才能够找到真正喜欢的。尝试总是冒险的,而不尝试是最大的冒险。感情方面应该也是一样的,看来我应该转变观念,大胆尝试一下的说。

从哪里开始呢?

[1]:我买这本书的原因之一就是被这个标题吸引了,不过买回来之后发现就只有那么一节。

It’s My Life

很喜欢这首歌,Bon Jovi嘶哑的声音与有感觉的歌词。


This ain’t a song for the broken-hearted
这不是一首给伤心人的歌
No silent prayer for the faith-departed
没有为失去信仰者的默祷
I ain’t gonna be just a face in the crowd
我不希望自己只是芸芸众生之一
You’re gonna hear my voice
你将会听到我的声音
When I shout it out loud
当我大声呐喊出来

Chorus:
It’s my life
这是我的人生
It’s now or never
把握现在,机会稍纵即逝
I ain’t gonna live forever
我不希望长生不死
I just want to live while I’m alive
我只想趁活著得时候认真的生活
(It’s my life)
(这是我的人生)
My heart is like an open highway
我的心像是开放的高速公路
Like Frankie said
就像法兰克辛那屈唱的:
I did it my way
我走自己的路
I just wanna live while I’m alive
我只想趁活著的时候认真的生活
It’s my life
这是我的人生

This is for the ones who stood their ground
这是为坚守信念的人们而唱
For Tommy and Gina who never backed down
为从不退缩的汤米和吉娜而唱
Tomorrow’s getting harder make no mistake
毫无疑问的,未来日趋艰辛
Luck ain’t even lucky
幸运不再幸运
Got to make your own breaks
你必须自己寻求突破

Chorus:
It’s my life
这是我的人生
It’s now or never
把握现在,机会稍纵即逝
I ain’t gonna live forever
我不希望长生不死
I just want to live while I’m alive
我只想趁活著得时候认真的生活
(It’s my life)
(这是我的人生)
My heart is like an open highway
我的心像是开放的高速公路
Like Frankie said
就像法兰克辛那屈唱的:
I did it my way
我走自己的路
I just wanna live while I’m alive
我只想趁活著的时候认真的生活
‘Cause it’s my life
这是我的人生

Better stand tall when they’re calling you out
当别人找你麻烦,挺直身子
Don’t bend, don’t break, baby, don’t back down
不要屈服,不要放弃,宝贝,不要畏缩

Chorus:
It’s my life
这是我的人生
It’s now or never
把握现在,机会稍纵即逝
I ain’t gonna live forever
我不希望长生不死
I just want to live while I’m alive
我只想趁活著得时候认真的生活
(It’s my life)
(这是我的人生)
My heart is like an open highway
我的心像是开放的高速公路
Like Frankie said
就像法兰克辛那屈唱的:
I did it my way
我走自己的路
I just wanna live while I’m alive
我只想趁活著的时候认真的生活

Chorus:
It’s my life
这是我的人生
It’s now or never
把握现在,机会稍纵即逝
I ain’t gonna live forever
我不希望长生不死
I just want to live while I’m alive
我只想趁活著得时候认真的生活
(It’s my life)
(这是我的人生)
My heart is like an open highway
我的心像是开放的高速公路
Like Frankie said
就像法兰克辛那屈唱的:
I did it my way
我走自己的路
I just wanna live while I’m alive
我只想趁活著的时候认真的生活
‘Cause it’s my life
这是我的人生

一个GTD的替代系统

本文翻译自“GTD sucks for creative work. Here’s an alternative system. -by- Dave Lee”,他认为GTD在创意工作领域表现很糟糕,并在本文介绍一个替代的系统。

这篇文章在Hacker NewsReddit上很火,本文的评论中也有不少有意思的内容的说。


我的一个朋友问我使用什么系统来管理我的TODO清单(Todo List,待办事项清单):

你的TODO清单可能和我的一样,有上百万条那么多,而且还在持续增长中……你是否使用某个或某些系统来管理TODO清单呢?我以前曾不严格地使用GTD,目前则在使用文本文件来管理我的TODO清单。这个文本文件十分巨大……我喜欢它的简易的特性,复制、粘贴和再组织的效率……但排序是个痛苦的过程。我刚刚下载了Mac版Things,看看它能否减轻一些痛苦。

因此,我在这里写下我对GTD的看法。从2002年开始以及之后的4年里,我是GTD的死忠。我认为自己在使用GTD方面达到了“黑带”的水准,同时我也影响周围的人。然而,一段时间之后,GTD系统变成了累赘。有太多的项目(Project)和太多的下一步行动(Next Action)包含其中,已经信息过载了。我的大脑无法处理50-100个正在进行中的项目和下一步行动。

我认为GTD对简单的工作是有效果的,比如销售。销售时,你要打一堆的电话和发送一堆的电子邮件,因此你需要一个系统来跟踪所有的条目。然而,在创意工作领域,更多的是不断变动的内容而不是有100个要跟踪的条目。你需要专注,来推动项目的开发与创作。

虽然我仍然喜欢GTD的一些原则(下一步行动,设定项目的目标,清空大脑等等),我认为这个系统会对创意革新者产生不好的影响。当革新者需要空间去尝试和发现的时候,他们往往会被GTD系统中洪水般的任务吓到的说。

大部分任务/待办事项管理软件是基于项目和任务这两个概念的。这真是太失败了。成打的项目和任务最终将填满你的任务管理软件。每天当你察看接下来几周项目和任务时,得到的只有沮丧,它就像一条永无止境的充满压力的河流。

对于创意工作者来说,最重要的不是无穷尽的待办任务,而是发现并专注在重要的事情上,深入其中。创意工作者需要深入到功能或问题中去,越深入越能发挥出更多的创造力,从而给最终用户创造更多的价值。

因此,我的任务管理系统是什么样的呢?

  1. 我喜欢将我的一周划分为每日关注点,并且每周都是这样。我选择我的业务中最重要的5个领域,集中精力在它们上面,每天一个领域。
  2. 我选择3条本周最想要达成的目标,将它们作为本周的目标和愿景。
  3. 在开始一天的工作前,我选择3条今天最想要达成的目标。所有这3条目标与今天的关注点契合。
  4. 我使用番茄工作法,每25分钟专注地工作。我使用Mac软件“ My Little Pomodoro”进行管理并有规律地休息。
  5. 我将每日关注点视作独立的项目,因此,我只需要跟踪5个项目。
  6. 5个项目中的每个项目,我只保留需要关注的最少的信息。我不会让大量的任务和笔记充斥在项目中。我记录一些我需要处理的工作和相关的关键信息。我也会保持对关键指标的跟踪,目前在使用Google Spreadsheets和Asana(虽然设置软件的过程让我很不爽,不过至少让它们能够工作)。
  7. 对于当前的5个项目不重要的信息,我会将它们移动到团队Wiki中。Wiki作为一个快速参考空间供我放置哪些不那么重要的笔记和想法。它们是我不想遗忘的事物,也许将来某一天我会需要用到它们。我将它们与我的项目分离开来保证项目空间的简洁。
  8. 其他的不需要随手获取的信息将存储在Dropbox或邮件归档中。这将作为我的远程参考,在我将来需要的时候去搜索查找。
  9. 每天我优先处理每日关注点所处的领域和3条今日目标。在一天结束的时候,我会处理其他次重要的内容,如电子邮件。
  10. 保持工作台、系统桌面和电子邮件收件箱的干净整洁,以此来让混乱熵保持在较低的水平,并使得前面的1-9更好的运作。

就个人而言,我无法忍受使用Mac版Things(或类似的任务管理软件)来组织管理工作的想法。通常,你会创建一些项目,然后给它们添加一些任务,在你意识到你有那么多的项目和任务之前,它已经被淹没的。整个事情变成了一种干扰和阻碍。它使得工作变得很无趣。

每日关注点和最少的任务让我保持专注且超高的效率。它让创意工作变得有趣。

试一下吧^.^