多年以来, 我一直希望做一个自由职业者,能够靠写写代码和文章, 一家人也能过的不错。 然而, 我什么也没有做好, 只学会了给出我的可以扫描的二维码支付宝账号。
Mobile_Detect.php
毕业设计的网页之前一直没有考虑到在移动端的显示效果,还得再做一套网站去适配移动端。
Mobile_Detect.php是一个检测移动设备的php库,开源作者还进行单元测试和定期调查,看起来很用心。
.gitignore文件的作用
在团队开发中,不是所有的文件都需要共享的,比如数据库配置文件。你和别人在本地开发时,数据库密码可能会不一样,生产环境和测试环境的数据库密码也会不一样。这时.gitignore文件就可以帮你忽略这些更新,比如在.gitignore文件里加入这么一行:
database.config
来忽略你的数据库配置。 另外再值得一提的是,我们一般会配置一些常量,这时最好将数据库常量和其它常量分开,因为上面就提到数据库连接的问题了。
笔者当然经历过调试bug很久,最后发现是git pull下来后数据库常量值变了的苦逼情况。 来看看.gitignore文件的匹配模式是怎样的?
空白行不会匹配任何文件,所以一般为了可读性作为分隔符。
#开头表示注释一行。 连续的两个
**号匹配一切文件夹,**/foo/bar匹配一切foo下的bar文件夹,abc/**匹配abc的一切文件和文件夹,但是这些匹配都是相对于当前的.gitignore文件位置来说的。a/**/b匹配a/b,a/x/b,a/x/y/b。/*.c会匹配cat-file.c,但是不会匹配mozilla-sha1/sha1.c。
/* !/foo /foo/* !/foo/bar这个感叹号的意思可以看做是不包括,它是对上一条规则的重新定义,比如/*忽略一切文件和文件夹,但是!/foo表示不忽略foo里面的文件和文件夹。
最后我们不要忘记在.git/info/exclude文件里也是添加忽略文件的。
毕业实习报告
终于要毕业了。第一次参加这么长的社会实习,也算不得“社会”二字,毕竟同事也是学校的老师和同学,但是算得上幸运。因为公司是老师和学生开的,大家在一个桌子上共事了许久。
读书十六载,用到“载”字,估计语气也沉重了许多。这次毕业不像小学毕业、初中毕业或者高中毕业,这次毕业很有可能意味着是我学生时代的终结。读了这么多年的书,终于要换一个环境,或者说终究要换一个环境,以后都不再踏入校园,心情多少回有点不一样。 还是说我的毕业实习的情况。 一:早点起床。 上班的日子,让我最印象深刻的是要勤奋。如果你今天8:30起床,那么你明天就会8:30之后起床,这样就会增大上班迟到的风险。同时,如果你早上8:30起床的前天晚上睡觉时间是12:00,那么你就更有可能在下次睡觉时间推迟到1:00,这样一来总有迟到的那一天。迟到了一天,如果一个人知道警醒,就会做出调整,如果这个人不是never learn,那么这一次调整就是最后一次调整。不过我重点要说的还是要早点起床,回到一日之计在于晨这句话,只有早点起床才会有更大的发挥空间。 比如说,早上起来可以看《道德经》,在实习期间,我不只一次想早起看《道德经》,但最终因为道德品质太差起床太晚导致读经失败。说到读经,有下面一段有意思的文字:
顾栋高先生复初,清康熙辛丑进士,性倨慢不合时,仅三载即归田。深于经学,自幼至老,未尝一日不读书,于五经皆有发明。
掌教淮阴时,夏月坚闭重门,解衣裸体,寸丝不挂,手执一卷,高读不辍。客至,自门隙窥之,大笑。
先生仓皇著衣而出。谈者传为笑柄云。
我也可以这样。 二:早点吃饭。
大家知道一到吃饭点,人们就会出公司吃饭,这个时候人会巨多,需要排队等候,排队往往会浪费更多时间,看起来因提早吃饭而破坏公司规矩,但是实际上是获得了更好的体验并且赢得了时间。 吃饭的哲学在于细嚼慢咽,而饭菜的哲学是体现食物原来的味道。最恨那种吃饭赶着去投胎,没吃之前你等他半天,吃完了他抹鼻子走人不等你的人;而饭菜,最恨是放了一堆调料,吃不出猪肉和鱼肉的区别。 吃饭有个难点,就是不知道在哪里吃?去这家店子吃了两个月,如果想要换一家反而自己觉得做了亏心事。做顾客做到这样良心发现,估计这家店的味道要变差了。 三:慢的哲学。 代码写的越慢质量越高。如果要得出这样的结论,可能要加上一些故事前缀:
我写代码多年,有一天夜里,我满身大汗醒来,梦到了阿兰·图灵和冯·若依曼对着我说:你写代码太快了,都是bug。
代码之道在于精益求精,而只有“慢”,才能让你写出能运行更久的代码。戏谑者称,代码之道在于慢,以后所有的编码人员都会对着电脑发呆,双手放在裆下,美其名曰:思考未来。 四:不可说的秘密。 我虽然因为起床太晚,没有完全看完《道德经》,所以只记得“道可道,非常道”,实习中的其它体会同样也是不可说的,说出来就没有意思了。 人完全有这样的一种情绪,很微妙,让自己快乐也让自己哀愁,这种情绪是不能袒露的,它的全部意义在于情绪的所有者。
五:想想未来。 哈,这种思考双手不用放在裆下。学生时代的结束,是打工仔时代的开始,这也许是我们每人美好生活的开始。
怪谈“观察者模式”
对于代码的设计模式,我用的不多,又不甘心说自己是乱说,所以只能取个“怪谈”的名字。
观察者—我对这个名字充满了好感,如果你也像我一样,对这个名字多念了几次,就能读出世态炎凉人情冷暖的味道来。
所谓观察者模式,就是“冷眼旁观”的写程序,我在一旁盯着,老板说这个功能不要了,那好,我撤销一个观察者;过了一些时日,老板又说,你再加个功能,很简单,我再加一个观察者。在这样的情况下,无论老板怎么虐我,我都能快速的组织代码,实现功能。
不过大家不要误会,我拿老板做例子,不是总是树立雇佣双方的矛盾,在实际开发中,需求改变在所难免。
观察者模式的代码实现具体是怎样的呢?
abstract class Observer { abstract function update(); } class Observer1 extends Observer { public function update(){ echo “我是第一个观察者<br>”; } } class Observer2 extends Observer { public function update() { echo “我是第二个观察者<br>”; } } class Eventer { private $observers = array(); public function addObserver($observer){ $this->observers[] = $observer; } public function trigger(){ foreach ($this->observers as $observer) { $observer->update(); } } } $eventer = new Eventer(); $eventer->addObserver(new Observer1()); $eventer->addObserver(new Observer2()); $eventer->trigger();
上面的代码串的意思是使用了一个叫做“Eventer”的观察者类,来管理继承了“Observer”这个父类的类,通过Eventer观察者来处理操作监听Observer类的状态,反正思想大致如此,具体实现随便玩。
有时,我为了强用设计模式,甚至写出这样的代码来记录一个日志:
interface Observer { public function addLog(); } class LogObserver implements Observer{ private $file_path = “./error.log”; private $message; private $special_message; public function __construct($special_message) { $this->message = date(“Y-m-d H:i:s”).”===”; $this->special_message = $special_message.PHP_EOL; } public function addLog() { error_log($this->message.$this->special_message,3,$this->file_path); } } class LogMaster{ function __construct(Observer $observer) { $observer->addLog(); } } new LogMaster(new LogObserver(‘log info’));
有人说,上班久了,无聊了,要开始炫技了。
“人生苦短,何必学Python?”
标题的名字,不是我说的,不出你所料是鼎哥说的。
话出有因,我用Python写的同步印象笔记的代码不能同步中文笔记,我对Python不熟,调试了好久也没有弄清问题的症结在哪,只能让鼎哥来。最后,鼎哥果然神勇,花了三个小时,通过加了个str函数解决了这个问题。
鼎哥抚了抚袖子,长吁一口气:“人生苦短,何必学Python?”。
这就是标题的来源。
这个debug的故事说明了两个问题,一个是Python的字符操作要谨慎;另一个问题是,要不要学Python。
以前我如果介绍牛逼的程序员的时候,我会用这样的词汇,比如此人精通八种计算机语言,熟练使用八种计算机语言输出“hello,world。 ”,现在估计我不会这样去介绍别人了。
你会再多语言也不过是码农,就像一个农夫只是换了一个锄具,你能在别人的面前炫耀你会使用八种锄头锄田吗?作为一个农夫,你原本就必须使用八种甚至更多锄头才行。
再说一个问题,我为什么瞧不起码农? 在外人眼里看来,我也逐渐要成为一个码农了,每天上班的事情别无二致,从计算机的角度讲,是最低级的编码人员。
但是,我有意规避了这个称谓,我自称“web艺术家”,想甩别人一条街。在我看来,码农的可替代性太强了,耕田谁不会,但是web艺术家,可能还讲究一些故弄玄虚的奇技淫巧。
说白了,我自称web艺术家,也是遮掩自己对计算机懂得不多的弊病。
有人会说,你瞧不起码农,比尔盖茨、莱纳斯、扎克伯格都是码农,你瞧不起他们?我不会回答这个问题,因为问这种问题的人,连码农的概念都没有搞清。 再回到题目,人生苦短,要不要学Python?我的回答是,当然要学,但是不止于Python。道家说过,知止于不知,何等的嘲讽,但是做人总要有些挣扎。
从匪夷所思的bug说起(一)
昨天,某媒体过来采访,OK记现场展示自己,结果出现严重bug:摘录的无论是图片还是文字,最后通通都变成了美女(是穿了衣服的)。站在背后的化妆了的媒体姑娘已经在嗤嗤地笑,但是作为一个开发人员,这个时候要表现出自己强大的心理素质,要装作什么事情都没有发生。 人生如戏,演完了之后,自然要debug一番。打开了控制台,一看网络请求,发现报了一个错误:数据库插入错误,主键重复了。反正调试过程省却了180个字,无聊又乏味,一度以为有人通过cdn上传代码文件攻击我们,三个人一起花费了三个小时,才勉强找到原因,准确的讲是没有找到具体原因,只能删除重复主键的数据了事。这个事情,其实说明一件很重要的事:如果做互联网持续开发,持续做一个产品,它的服务器数据库域名都应该是分离的,最大限度的测试代码,最后才配置到生产服务器,使用生产数据库。
我靠,这件事情昨天发生的,今天写发现没激情了。
突然想到
我挺想念这些老人的,他们开始说话缓慢,听不清楚,理解事物的思维方式还是和他们年轻的那个时代一样,他们说这些东西太贵了,注意骗子,多吃饭。
开始听了,会有些厌烦,但逐渐就会对他们的叮嘱唯唯诺诺,变成一股温暖的力量。 人老了,总会有一些悲凉,谁都知道等待着他们的是什么。
我有时候想想这些,对我自己还是一件蛮好的事,我现在就开始想这些事情了,至少我老了,我不会太恐惧,至少现在,我还能不去做太多无谓的等待。
想念是一件很美妙的事,就像这冬天的早上,我蜷缩在被子里,双手捂在胸前,胸口是热的,但是时间久了会咯人。
需要想念,也被想念所害。
css有趣的选择器
要不要开黑?
敬启。
回来之后思考良久,难以抉择,但是还是要尽早给一个答复。
出于对科技和数据的崇拜,你们公司确实有很多吸引我的地方,我也深刻明白抓住时代的脉搏,公司和个人才会有更好的发展。但是,出于对未知的畏惧和人性的偏安,我还是选择在旧公司上班一阵,好一点的说是因为回报知遇之恩和坚持梦想。
非常感谢你和你们老板给我这么好的一个机会,对于一个涉世未深的学生实在是抬举太高了。再次感谢,也替我感谢你们老板。
要不要开黑?

