见世界

身不饥寒,天未曾负我

0%

2017年9月,开了一家小公司。转眼已经四年了。
遇到问题,解决问题。成长,是对我而言最重要的收获。

无数次凌晨秒回客户消息,无数次通宵写代码,许多回次日到客户公司宣讲培训。
而前后十几名同事,朝10晚6双休从不加班。
公司成立之初的初心未忘。

做了几个还行的系统,手上终于有牌可打了。

下一步,提速。

7年前工作中开始接触perl,之后成为自己的首选脚本语言,我用perl陆续写了大约一万行代码。perl是我的思维翻译工具,我能毫无心理负担的手写『朝生暮死』的快速实现。
但是这种『完成一件事不止一种方法』的哲学,与软件工程相悖,不为主流coder所容。常常有人问我,为什么要选择perl?

面对陌生人的提问,很难几句话解释清楚。

  1. 假设提问者只是一个从众者,他很可能不了解perl,这样就没有没有共同的术语体系,无法三言两语让人理解,遑论产生同感;
  2. 假设提供者有独立思考能力,两个选择了不同方向的人的碰撞,必然会是一场辩论,『辩论者』的风格与能力跨度极大,错误的辩论对象无法达到目的,还可能会伤感情,辩论这种形式,也不是答案应有的样子。
  3. 还有预设答案、以己度人的人,心中有块磁铁,把你的答复吸附在他的理解上。

怎么可能几句话解释清楚?

答案


我给过千奇百怪的答案。
真正的答案也并不复杂,三个关键词:程序,性格,哲学。

程序与性格

  • 我天生缺乏耐心,三分钟热度,只愿意在一劳永逸的事物里花时间。面对新东西,无论是学校的科目、体育项目、新游戏、新编程语言、新的理论或哲学,我有120%的动力学习理解实践。而一旦新鲜感变成了按部就班平铺直叙,就会失去心力。如果硬要从前30年的行为模式里总结出一个优势,那我总是应该『尝试在一个领域用同样的时间做的比80%的普通人好,然后在热情耗尽前换个领域』。
  • 无耐心导致粗心毛躁,我强迫自己重复指定的步骤以挽回粗心毛躁的不良影响,毕竟『唯有原则能对抗天性』。结果这成为了另外一个问题:作为立身之本的语言和代码,其形式结构逻辑性,必须是我能力范围内最好的。否则就会长期占用大脑一块内存。影响难以消除,因为原则来自长久的刻意培养。

缺乏耐心,所以周期越长的边角项目越容易丧失专注——而perl鼓励你走捷径,鼓励你使用各种奇技淫巧极速验证,小微项目中perl的使用者总能在更短的时间里完成同样的工作。
代码洁癖,是因为违背了代码规范——但你所使用的perl就是perl的代码规范。
这是我选择perl的主要原因。

一点哲学

  1. 也许世上有天生的摄影师一生不知单反为何物,有天生的赛车手终其一生没见过发动机。对于某件事,你是世上最擅长的人,但你却从来没有尝试过。这是『人应该拓展生命边界』的理论基础。
  2. 我们被鼓励尝试多种编程范型,却也被鼓励使用“更严谨”的脚本语言,其中有不同的考量。但如果学习使用一门语言对你来说是一件”易事”,那何妨偏离一下适用于大多数人的准则,感受下别样的人生。

这是我选择perl的次要原因。

还想说的话


  • 代码大全中单列了看似与程序无关的一章:个人性格
    那年我还是初窥门径的懵懂少年,读完得出一个结论:能否成为高手,是命中注定?!我仿佛看到大牛说,『你这样的人,要想成为厉害的coder,要走一条比别人艰难的路。』
    选语言,扯起性格来,不算跑题。
  • 说起“原则能对抗天性”,我还能记得儿时一件小事:
    我小学成绩稳定前几名,一百内加减法心算理应有90%以上的正确率。但在小学组织的一场一百以内加减法的心算比赛里,我只完成了2/3的题目,因为每道题目我都会用笔算验算。出分总分第九,数学老师因此揍了我一顿。
    趁还记得,暂记一笔。毕竟“好记性”来自拳不离手的熟悉,更来自无声的遗忘。
    自认为是一个解决问题的人,曾为人生的每一个问题一本正经的寻找答案。“对自己人生的责任感,随着年龄增大而减小”也许是一件好事,我已不再关心那些我无法改变的“小事”了。
  • 至少有100次,我使用vim新建r.pl文件,写一个200行以内的项目解决工作中遇到的问题。我所写过的perl项目中,这个商城爬虫是最规范的 https://github.com/qdladoooo/b2c_crawler
    perl6已经低调的失败。我最近连续用python写了两个项目,以后应该不会有规模更大的perl项目出现了。

自省

  1. 我发现大脑会存储不用的知识,哪怕自己很少意识到,也会潜移默化的影响自身判断。工作以来,潜意识里我一直相信一个观点:一个人长久的做一类事情,大脑结构会特化,导致做同样的事效率越来越高,代价则是切换任务或理解新模型更迟钝。
  2. 当你习惯一种生活方式,沉浸其中时主观时间的流速会变得非常快。
  3. 人生的发展要经历许多阶段,每个阶段都应该全力以赴。但最终目标所需要的思维模型,与过程中所需要的知识与能力,可能完全不同,甚至相互背离。

以上三点,就是『为什么应该避免「沉浸式」生活?』的原因。

所谓『因』,既可以是一种公理,也能是一种论据。存在无穷无尽不同层面的『因』,支撑世上所有的观点和行为。拥有强自我认知、强自控力的人,会根据可靠的『因』制定自己的目标与生活准则;普通人往往只是信手拈来,为自己的生活习惯辩护。

基于一种浅薄的优越感,以及对人生下限容忍力的乐观,我常常持有唯心主义的想法。踏入社会,我最初的追求是先财富后爱好。但当我要义无反顾的追求财富时,又害怕丢了初心。这种纠结,跟上文那种游移不定偏安一隅的逻辑一脉相承,是孱弱的体现。我不得不承认,所有这些从客观上证明了我是个普通人:生活在潜意识之中,所谓『自我意识』不过是『潜意识为所有行为习惯安排的所有解释』的阐述人。

近况

  1. 10月份,我使用 handlebars + webpack + director.js 写了一个单页应用。
  2. 基于项目需要建立了框架,我有心发出来,但公司项目不便透露。剥离业务代码不是一个选择,因为懒。
  3. 自知始终具有足够的前端能力,只是在公司把任务交由我手前缺乏动力。做完翻看相关实践,原来赶上了前端界两年前的潮流。

对我而言,所有技能的升级,都有一个价值纬度:如果我自立门户,能为我带来什么价值。
从这个角度看,这次实践不能带来许多增益;从市场角度看,年薪应该可以涨一些。

计划

我已经害怕订立计划了。我这样懒散的人,说好听点儿,简直是教科书式的随遇而安;说难听点儿,对待自己时简直不要脸。所有雄心壮志,本质都是『贤者时间』里刻意对自己人生发出的挑战。

总之,17年到来前,我要完成手头的iOS游戏。在17年上半年,完成一款单机版赌博游戏。

我有很多技能,却不知该用哪些来赚钱。闭门造车不可取,也不能停滞不前。先干起来吧!哪怕只是为了减缓生命流逝的速度。

Laravel 用了两年,做了几个项目。
常用的包丢在 libs 文件夹拷来拷去,不清真。
这周把一个很小的数据库工具包推送到 composer 源 packagist.com 上。
全面进入 composer require 时代。

目的

package 来自09年第一次做自己项目时,php 框架的中间层。

提交 package 的目的,首先当然是为了日后引用方便;第二,更重要的,是摸清提交到 packagist 的整个流程,同时对包管理、PSR规范、持续集成有更直观的了解。

涉及工具

用到几个东西:

  1. 代码版本库 github
  2. composer 包信息管理 packagist.org
  3. 持续集成 travis-ci.org
  4. 徽章自动更新 poser.pugx.org
  5. PHP 编码规范 PSR-4

成果

Sweeter-fetch 希望在 ORM 之外提供一种便捷执行 sql query 的方案。如此,对于复杂语句就不需要学习不同 ORM 千奇百怪的语法实现了。此外 Sweeter-Fetch 会对数据库结果集做一些基于 pdo 配置的预处理,可以稍微简化控制层逻辑。

写这篇文章的原因

公司项目多人少,新项目需要外包,找到上海比较好的上市公司操作。我们希望使用PHP作为后台语言进行开发。而对方公司JAVA积累比较丰富,希望使用JAVA开发并提出了JAVA优于PHP的一些特点。语言之争毫无意义——主观判断,太多细节取舍,太多立场之争,永远不应该在公众场合展开讨论,浪费时间。作为甲方我们完全支持他们选择最擅长的实施方案。

但我需要给我的上级平衡的信息,以避免我这次的妥协使他在今后的架构选型中有错误的定势——于我而言,这是有必要的防微杜渐。

正文

对PHP的疑问:

  1. java在数据库访问方面要比PHP强一些,例如:用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。
  2. java是面向对象的设计php是面向过程的
  3. PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。
  4. java在性能上要比php强,java系统易维护、可复用性较好

来自PHP的解答:

  1. pdo作为php内置的数据库中间层,支持mysql到oracle的无缝迁移,只需很少的修改。
  2. php支持多种编程思想包括oo,而oo也逐渐不再是一个必选项。我一向认为oo旨在提供一种降低复杂度的机制,以期按部就班的模仿现实世界。它可以令年薪10万的coder完成原本年薪20万coder才能完成的工作,是工程界的伟大创造。oo与非oo侧重点不同,没有优劣之分。我个人私下觉得写oo代码缺乏乐趣。
  3. 对术语『层』的定义不是很确定,我揣测他的意思稍微解释一下:跟java这种全能语言不同,PHP是web开发语言,当我们谈及『PHP架构』我们谈的是LNMP,是整个『PHP系』的开源世界。这个世界里的工具非常多,并且facebook,新浪这种大公司顶在前面,可以相信,好的机制、有效模型会不断被引入,以保证每个场景都有对应方案。
  4. 编译型语言执行效率应该比解释型语言强,这个毋庸置疑。易维护性我不了解java,不敢妄言。可复用性,由于composer的存在,加上PSR*规范的推行,应该还好。

额外的,PHP还有以下特点:

  1. 有处理超大型项目的案例

    Digg,Flick,Wikipedia,Facebook,Yahoo,新浪微博……这些项目中都有PHP的影子,它们的存在说明高负载高并发的大型项目在PHP架构下有解。规模在此以内的项目不需要有负载能力的担心。开源世界的生态保证了这些解 能够甚至易于 使用。

  2. 有不错的开发效率

    Ruby的风行一时提醒了人们一件事:相较于硬件资源,开发资源资源同样宝贵。实现速度也是选型考量之一。

  3. 有特定的适用场景

    爆炸性增长的项目,它的技术选型常常会经历螺旋上升的过程,比如淘宝。淘宝从 一套PHP商城代码oracle商用方案 再到 自研架构组件,每次都是在遇到瓶颈后更换技术方案。这一方面说明,技术方案的选择应该是业务驱动的;另一方面则暗示了,技术方案应该适配项目规模,合适的才是最好的。BTW:今天的PHP早已不是淘宝当年遇见的PHP了。

  4. 处在青壮年时期,乐于成长和改变

    在web编程领域,假如JAVA对PHP有碾压级的优势,那么人们的选择会趋同,PHP会逐渐消失。也许PHP最终会进入这样的阶段,但至少目前看来还很有活力:有人试图提高开发效率(laravel, cakephp), 有人试图提高执行效率(hhvm, phalcon, yaf, php7), 有人引入最新流行的开发泛型(匿名函数,swoole框架)……PHP不完美,但PHP保持活力保持成长,这是生命力的体现。

有生之年,我会乐于看到PHP死去,因为原因一定是,我们有了公认的更好的选择。

年前配了一台次旗舰主机,人生的第10台电脑。第一次按照心意而非价格选购兼容机,性能喧嚣,配件浮夸,比之前买的所有电脑都贵。
本来良好性能配上25寸2k分辨率的Dell U2515h,用来写代码感觉再好不过,但是用惯OS X系统乍回到windows,部署、包管理、SSH处处不习惯。新电脑只能用来打游戏。
于是考虑买台静音的家用服务器。自己组装itx或者上G8,始终没有下定决心。
前天睡前逛『什么值得买』,发现树莓派3已降到合理价位。3b本身性能不错,稍微跟进发现已经能装centos 7…………买买买!

今天下班回家收货:

  1. 树莓派的三个主要芯片贴上散热片,放入原装外壳
  2. 下载CentOS树莓派版,使用如下三个命令写入tf卡
    • df -h
    • sudo diskutil unmountDisk /dev/disk2
    • sudo dd if=CentOS-Userland-7-armv7hl-Minimal-1603-RaspberryPi3.img of=/dev/rdisk2 bs=1m
    • 注意of=/dev/rdisk2 disk2前面有个r
  3. 部署lnmp. 由于没有可用的epel,php7与nginx需手动安装
  4. 迁移本机开发中的git repo到树莓派,同时与阿里云服务器定期同步
  5. 搞定收工

这是一台静音、低能耗、手掌大小的开发服务器,所有配件一共不过350软妹。
再次证明了便宜可治选择困难。

树莓派套装

*我发现这套博客系统(hexo)的md解析器,对嵌套列表的渲染与MacDown不一致,不知是md标准不严格,还是程序bug. 今天有点累,哪天搞清楚了提个issue

背景:

求职跟找对象类似:

  • 寻找另一半的双方有各自的时间窗口;
  • 『所有适龄配偶』这一市场信息是不透明的;
  • 每一方都倾向于寻求对自己最有利的选择,因而常常存在博弈。

对我而言有额外的困难。虽然我在自己的编程兴趣上投入了大量时间,跟我合作过的每一位都认可我的能力,但是由于放弃了本科学历,并且没有一份鲜亮的履历,许多我能够胜任的工作都不对我开放。这是我常常要面对的情况——不缺工作,缺好的机会。

收到过百度腾讯豌豆荚HR或技术直接打来的邀约,每次我都告诉别人我没有拿到自己的学位证甚至毕业证。同时我自己也知道,即便我有这些,之前多次跳槽和创业失败经历,要在济济人才中脱颖而出拿到offer,也并不容易。

综上所述,我的求职心态用两个词可以概括:悲观,且轻松。

理论:

简单描述如下,假设一个女孩子一生能够结识100个可能的伴侣,为了找到最优选择,她应该了解并拒绝前37个人,此后,一旦遇到比之前所有人都优秀的人,就毫不犹豫的决定下来。

对这个理论,我只有一个大概的印象,不知道哪里看到过。我决定用这个理论,找一份能够稳定做两到三年的工作。

为了写这篇文章,我找到一个较为全面的出处。
死理性派恋爱法:拒绝掉前面37%的人

实践:

当时我有一个年30w税后的offer,来自一个我以顾问形式服务过一段时间的公司。不想去这家的原因是,里面缺乏水平过线的基层coder,而微信外包业务实在枯燥且缺乏想象力。这是退路。

根据前期跟猎头的沟通,以及从求职平台得到的反馈,我预计至少会有20家面试。其中前六家,我全力配合面试笔试,但是要求高于市场正常水平的薪资。之后每一家都以合理薪资去聊,遇见迄今为止最好的一家,就立刻入职。

没有波澜。

我看别人面试文章时,常常对我没有的经历,或者跃跃欲试的部分感兴趣。看过太多学霸刷flag、bat之后,对于自己的面试公司,我没有动力罗列。
虽然大狗叫小狗也要叫,但如果对多数人无意义,就是浪费时间了。

我以前曾说过自己笔试面试无敌。现在沉稳了,能摸到更高层次了,所以不再说了。在人们期望我所在的层次,在天花板以内,在高级/资深PHP开发和初级架构岗位上。题目都已不是问题了。

总之这轮面试,我的感受是

  • 2345对笔试非常重视,PHP题目出的特别全面,考到编码逻辑层面和安全领域,我常希望自己也能如此科学的面试别人。
  • 特赞的leader可能会是个很好的朋友,这家公司的创始核心团队层次很高却务实有追求。活在理想人生中的人,总是让人乐于接近。

总结:

胡搞瞎搞。平淡人生的一次狂欢。

底气在于能接受多种状况和结果,也在于朋友的支持信任。

这次实践并没有给我带来多少实际意义,原因是对我来说正交的取舍太多,优劣难以量化。误差幅度比工作之间的差异还大。

但这style我是爱的,难得的本性释放。

2015年下半年,我离开了加入近两年的团队,结束了一个“第一次”——第一次自己投钱、拿股份的创业经历。

我当时的计划是,做一家主营微信公众号业务的公司维持生计,同时尽快实现一个跨平台的社交游戏。这款游戏是我心心念念多年的构思,是个可能的机会;另外,这个项目也可以证明自己的全栈技术与统筹构架能力,是一份答卷,是迄今为止学习编程技术的一次总结。

筹备公司期间,我找了许多在上海的朋友、同事、人生导师,一起吃饭,聊自己的想法。有几个朋友提出了有价值的观点:

  • 外包业务同质竞争激烈,竞争力在销售(销售非我强项)
  • 运营再小的公司,也要投入全部精力。妄图以“半个人”与别人整个团队竞争,是幼稚想法
  • 同时做两件事,往往哪件事都做不好

当局者迷,旁观者清。结合自身情况,我发现自己看似全面的计划,实不可行。找一份稳定工作,存钱,买下自己时间做事情,更靠谱一点。

1

2

不奢求遵守PSR规范方便纳入框架,好歹测一下再发布。
微信支付PHP demo中居然还有这种错误,口口声声说什么『PHP是最好的语言!』
口是心非!无情!负心!薄幸!
若是职业PHPer负责就更不应该,外人戏谑无妨,自己更宜慎待。

需求
不变图片比例,居中裁切至指定大小。
脚本效果
指定输出文件夹及裁切参数(长x宽),批量裁切source文件夹中的图片。
工具&环境:
imagemagick, perl
代码:

#!/usr/bin/perl -w
#use strict;
use warnings;

#将source文件夹中图片裁切至指定大小存入指定文件夹,图片不拉伸,居中裁切
#e.g.: perl r.pl './dianping/' 640x400
#e.g.: perl r.pl './meituan/' 660x480
#e.g.: perl r.pl './tao/' 1080x575
$target = $ARGV[0];
$param = $ARGV[1];

print $target . "\t" . $param . "\n";
system("mkdir ${target}");

opendir (DIR, './source');
while( $filename = readdir(DIR) ) {
 next if($filename eq '.' || $filename eq '..');

 $source_name = './source/' . $filename;
 $target_name = $target . $filename;

 system("convert ${source_name} -alpha Background -background white ${target_name}");
 system("convert ${target_name} -resize '${param}^' ${target_name}");
 system("convert ${target_name} -gravity Center -crop '${param}+0+0' +repage ${target_name}");
}

closedir(DIR);

一直忙没写日志。闲下来,补一篇。

立刻行动
linode是美国知名VPS服务运营商,销售优质中小型linux虚拟机。
摩尔定律指出硬件相关行业成本将随时间降低,若售价不变,利润会随时间增加(参见小米压货模式)。作为一家良心机构,2014年4月,linode将全线产品配置免费向上调高一级。

为运行个人博客与作品,保证信息渠道畅通,我一直使用最低档20刀/月的vps。
配置升级后多出的空间、流量与性能,对我的需求提升不大。
理智的做法,我应该立刻切换到最低档10刀/月。

A.如果2014年4月我立刻进行操作,那么账户剩余金额,足以支撑到2016年10月.
B.拖沓如我,2014年10月才完成操作,此时账户余额只能支撑至2015年10月.
结论,懒散的人难以把握细节,细节的负向累计,导致优势的削弱。**
**

专注、极致、舍得
linode VPS提供了丰富的自助操作接口,但是向下切换时由于硬盘空间差异,加上国内对外网络环境特殊,不是特别方便。我只好选择重新购买手动迁移的策略。

我的vps配置,项目,数据库每周会自动备份到dropbox。
但是由于时间久远,我用了三天时间回忆、遍历,以免遗忘了某些重要的角落。
点击旧VPS删除按钮时,我没有十足把握,不确定是否已经面面俱到。
只有“如果过去一年都没有用到,那么失去也不可惜”这种退而求其次的底线。

结论:
我花了一些时间,做了个不错的备份系统,这个系统本来足以给我信心,做100%把握的事情。只要我手动加一个change log,及时更新,并且在必要时为系统添加一些新功能。
但我没有这种追求极致的动力。
这导致一种状况:虽然我花时间做了90%的准备,但在实际需求面前,90与0没有差别。“是否有把握”这件事上,99与100是有差别的。
所以,重要的事要做到100分,不重要的事1分也是浪费。学会区别两种事情。

福利
linode在官网屏蔽了年付优惠入口(10%每年,15%每两年)。
但登陆后还可以找到优惠页面,能正常使用。

linode

需求:
在collectionView: cellForItemAtIndexPath: 方法中为不同cell更换背景图片。

症状:
滚动时背景图片没有出现在预期位置。

调试:
cell中加入label,text设为indexPath.item. 发现label出现叠加现象。

解决方案:
获取reusableCell后,删除所有subview。

代码:

//collection item
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
                 cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
     UICollectionViewCell *myCell = [collectionView
                                    dequeueReusableCellWithReuseIdentifier:@"levelCell"
                                    forIndexPath:indexPath];
    //设置圆角
    myCell.layer.cornerRadius = 8;
    myCell.layer.borderWidth = 1;

    //删除已存在的subview
    for(UIView *view in myCell.subviews) {
        [view removeFromSuperview];
    }

    //item背景图片
    UIImageView *cellBg = [[UIImageView alloc] initWithFrame: myCell.bounds];
    NSString *theme = [Utils StatusOPValueAtKey:@"currentTheme"];
    NSString *imgName = [NSString stringWithFormat:@"%@_grid_bg_%ld.png", theme, (indexPath.item/3+1)*3 ];
    cellBg.image = [self getGrayImage:[UIImage imageNamed:imgName]];

    //将rank图片加入背景图片
    CGRect rankFrame = CGRectMake(0, 92, 90, 32);
    UIImageView *rank = [[UIImageView alloc] initWithFrame: rankFrame];
    rank.image = [UIImage imageNamed:@"HaiZei_rank_0.png"];
    [cellBg addSubview:rank];

    [myCell addSubview:cellBg];
    [myCell sendSubviewToBack:cellBg];

    return myCell;
}

梦到跟陌生而亲近的妹子,在大城市的夜晚里翱翔,穿梭过一栋栋房屋,内部结构都一样。

梦到跟妹子不发一言,没有目的,疾行,到天台上去。周围的人陆续一跃而下,安然无恙。原本擅长跳跃的我,十分惶恐。到天台的路,要经过繁复的楼梯,没有细节的在梦中认定风格是大友克洋笔下的世界。高台四面高度不一,下面站着许多已经下去的家伙在聊天。我遍观四面,最高处大约盘山路一层的高度,20米。最低出不过7、8米。我知道在这个世界里,别人能做的事我也能做,事实上由于在翻墙并一跃而下上做过许多训练,自认为比一般人强。但要像妹子一样一跃而下,心中有个结。我知道一定会受伤,两次了。我翻身过栏杆,眼前是塔内部,扭进内部,高度骤减,轻轻落在地上,是高度最低的那边。

梦到数学考试没带任何文具。跟欧志强借了50块,到小卖店买中性笔,铅笔,橡皮。店主柜台上有两盒削的歪歪扭扭的2B中华绘图铅笔,我觉得一两根可能不够用,需要旋笔刀。中性笔不好用,便换圆珠笔。下一秒在用钢笔写画,问价要35,心想可能不够。店主总是跟我扯皮,我则顺着店主话头开着无关紧要的玩笑,眼看着时间从考前5分,到开考,逐步向30分接近。下一个场景店主坐在考生的位置,周围许多同学。有邢萌萌,说了熟悉的话,另一个男生则在劝我。

梦到带回。许多大巴,选择第一辆。人很多,或坐或站着许多同学。选择第一辆大巴的同学往往是强势而朋友众多的,或者希望接近加入这种人的同学。我不常做这样的选择。大家会给我面子,希望我加入。但我不愿使自己处于那样的境地。

车上吴cj拉起我的两只手,说田gw告诉她。在未来,我会带给她她最缺少的一样东西。我淡淡的解释这事情的无稽之处,心里想着自己当然会尽力的保护所有认识的人。手心出汗。我甩开她的手,在自己身上抹了抹。醒了。

PS:最近做了许多梦。醒来时清晰,然后就忘记了。暂记一笔。

症状:
打开wordpress站点,持续白屏。

原因:
近日(2014-06-02 22:22:22 +2d),由于众所周知的原因,google服务被屏蔽。wordpress使用了google提供的网络字体API,由于加载不到字体,阻塞了浏览器渲染。(亲测chrome 35.0)

解决方案:
1、
2、帮助我P建立自信,正视历史;
3、肉身翻墙;
4、在网站用户群中推广VPN;
5、停止使用google提供的公共服务。

代码:
wp-includes/script-loader.php 第585行,跳过该判断。
//todo: RIP.
if (false && ‘off’ !== _x( ‘on’, ‘Open Sans font: on or off’ ) ) {

wp-content/themes/writr/functions.php 第129行,注释该行。
//todo: farewell google
//add_action( ‘init’, ‘writr_fonts’ );

PS:
另附使用WordPress 内部函数的方案:http://www.xuanfengge.com/turn-off-automatic-loading-wordpress-open-sans-fonts.html
我未做尝试。

 

11年在上海一家母婴服务类网络公司,见到在DB层与应用层之间添加sphinx层,以提高网站负载能力。
我认为在查询结果不需要严格一致的场合,这么做实在轻便而有效。

e.g.
sphinx默认返回匹配度最高的1000条结果,而人类用户通常都不会翻阅1000条以外的结果,这就是“查询结果不须严格一致”的场景。
至于“严格一致”场景。千人以上的公司发薪水;“所有”交通违章信息;账单,等等。

我打定主意今后建立可能存在高负载的应用时添加sphinx层。
今天无意中看到这篇文章,可作为借鉴。
Better MySQL searches with Sphinx

**更新于2014年01月21日05:52:45
**

网易公开课翻译过的前两课已看完。
由于单词量太小,听不懂原声,只好按照课件继续学习。

学习过程中发现课件与前文不能呼应,需要自行改一些代码。
很别扭,一直用“专用视频,通用slide”骗自己。
后来实在骗不下去了,才发觉下载到的课件并不是ios7开发,而是2012-2013冬天同一个教授的课程 = =b

进而发现真正的课件下载地址:https://itunes.apple.com/us/course/developing-ios-7-apps-for/id733644550
课程主页:http://www.stanford.edu/class/cs193p/cgi-bin/drupal/
吾已打包上传百度云:ios7-CS193p

一直都是急匆匆地,认为许多事情都是浪费时间。
随着年龄的增长,终于有的是时间,好像也没创造什么重大价值。
那还是慢下来,把经手的每一件事做到丰满吧。
没有完美,所以要立刻行动。只是做了也没什么了不起,有内容有价值才算做的好。

===========惭愧隐藏的分割线========

没能在斯坦福大学官网找到出处,只好花1积分从51cto下载。
点了二十几次,手好累,感觉不会再上51cto了。

为减少后来者骂娘的次数,打包放在百度云上。
Stanford-CS193p-ios7-2013-Lecture-Slides

感谢whatudo 于2013-04-01 17:37上传了这些课件。麻烦总好过没有。
相信在那个宜人的春天傍晚,whatudo带着矛盾的心情把这些制作精美的slides上传到反人类的51CTO,完全是由于没有更好的分享手段。

祝愿iask网盘,百度云盘早日一统江湖,祝福积分下载的始作俑者早日出院。
莫坑爹,人们会骂娘。

关键字:CS193p, iOS7, 斯坦福iOS7公开课课件

我有写作困难症。
考虑到整个高中阶段,我只在考试时写过语文作文还都很纠结。所以今天才说出这样的话,以为不算矫情。

对于作文,我找不到它的意义。当我想用自己的方式去讨好它的时候,总发现马屁拍在马腿上。曾经把写不好归因为:作文的『好』与正常文字的『好』,其判别标准不在一个位面距离过于遥远。
对于写文章,我没那么多话要说。有推理出的结论,要有条理的罗列过程,感觉很烦人。
另一个问题是,很多时候潜意识里写文章的动机是“想说一件关于自己的事”。自我中心的执念与正常审美能力相互拉扯,导致我反复重读、修改,最终要么通篇删除,要么自暴自弃放置不理。

我把过去文章分成“可怜的技术实践”与“可怜的个人观点”两类,因为它们是如此单薄,我见犹怜。
今后的文章希望能尽力摒除与中心无关的段落词句,长短不限争取做到围绕主题,有观点,有论证,有条理。

最近有篇文章给了我不小鼓舞,如果能在3年、5年、10年前理解这些东西,很多决定都会改变。
这篇文章叫做《程序人生的四个象限和两条主线》,作者微博名叫 @easy.

这篇文章主要讲述以程序员为终身职业的人,通常作为备选的两条道路,以及应当如何按部就班的走好这两条路。
它给我鼓舞的方式,并非是使我明白“应该做什么”,而是令我确信:我不能从常规渠道赢得体面且符合自身意愿的生活。

对编程有兴趣,有一些解决问题的能力,一直期望自己能做一些不那么码农的事。
事实却是:没有好的学历,没有好的基础,跟不思进取的码农比可能略胜一筹,同得过且过的科班硕士比却差的很远。
而且因为资质问题,没有人会把我希望做的事交给我做。必须证明自己的我,却由于种种原因,迟迟拿不出这份证明。

如果10年前我对此有所了解,那我会努力考上一所一流大学。
如果5年前我明白自己将面对这样的状况,那我不会放弃自己的一本学位证。
如果3年前我知道自己在做的事有意义,那我会持续学习,而非停下来怀疑人生。

虽然我并不后悔————————
毕竟没有10年前那个决心按自己意愿生活的自己,就不会有今天的我。
甚至暗自庆幸更理想主义的自己,以当时的情境做出判断并执行,走了和大多数人不一样的路。
————————但我确实需要脚踏实地,解决当下的问题。

继续打工,会有饿不死人的收入,幸福的家庭,会有车,辛苦一点的话可能会有房。
然后老去,看着下一代面对Ta的青春,Ta的人生,Ta的梦想。
这是黄色树林里足迹较多的一条路,我将来可能会回头来走。
现在我需要的是拼搏。

一个月前,我对自己十分失望。
soho生活令我的弱点逐一暴露:
过去的经验使我认为,在LNMP框架内,自己能够解决千万访问量以内的所有问题————————就像中等程度的中小学生能解决寒假作业中的所有问题一样。
然而面对我应该做的事,在没有人督促的情况下,我竟如同过去十几年每次面对寒假作业时一样,无法“强迫”自己去完成————————我对自己选择的事业“逃学”了。
不存在同样问题的人可能无法想象我的处境。非常无力并且沮丧。

没有自制力,不知道自己的工作效率,也不知道自己是否能有效率的工作。
我开始接受面试。
面了三家,拿到两个offer都不是特别理想。
第四家是上海业内第一梯队的外包公司。
工作的四年多里,我以“深入技术”为名推掉过许多外包项目。对职业程序员来说,外包公司算是中下之选。
但我通过笔试、面试、加试,成为此公司的一员。
在公司的十天里,我用公司框架写了两个企业站,和一个商城的大部分功能。
感受了程序界“富士康”的氛围,认清了自己的效率和优势。然后退出。
退出前跟很有能力的老板谈过,做他的下游团队,处理他无法处理的单量。商定了分成模式。
然后回家,做官网,联系之前的关系,开始自己的外包公司之旅。

生性内敛,容易悲观,内心深处并不知道这份新的“工作”能否支撑自己的生活。
但我知道:
惶恐是人类天性,习惯没有收入而不感到害怕时便走出了第一步;人生是个退而求其次的过程,绝境中打破书生思维小农意识绵羊教育…种种桎梏,贪婪思考如何赚钱的时候,才算真正踏上舞台;而当我开始行动,我必须像每一次面对感兴趣的事物时一样,用同样的时间,做到比80%的人好,再赌上一切争取最佳的结果。
官网,推广,团队。做好拼命工作的准备,完成这项低科技的计划。
创业就像赌博,外包公司胜率稍微高那么一点点。

 

上周从广州回到上海,终于能和家人团聚了。
没有开始投简历,因为我想趁机开始soho.
初步打算尝试两个月,若能进入良性发展就继续下去。

起因:
展开讨论就偏离主题了,简单叙述我的想法:
1、社会主义是理想驱动,资本主义是物欲驱动。后者效果好。
2、社会如此运作,覆盖面足够广,其实已算是相对公平。无对错,是个人选择。
3、思考之余,保持追求主流价值标准,使自己被判断。
我喜欢做技术方面的工作,希望能深入进去掌握一些有意义的本领,做些有价值的项目。
同时我也希望能多多益善的赚钱,发挥自己的潜力赢取符码价值,获得一定的自由。
这种情况下,我感到上班不是最好的选择。

计划:
soho是零售自己的时间,对自我管理有很高的要求。
工作主体目前看来包括:兼职、外包、自己项目。
兼职与外包是维持生存的必要劳动,自己项目的目的是
创业
产生作品
必要的准备工作:
1、todo list + 优先级列表(选用了wunderlist)
2、规律作息,保障工作时间(基本与上班保持一致,周末读书出游,适当编码)

 

todo list:
1、dentoto,熟悉、接手
2、xhprof、xdebug,了解掌握
3、做一个作品列表页面,体现自己“编码能力”以及对“前端最佳实践”与“后端性能调优“的掌握
4、原型设计—>Demo实现—>展示推广,掏出一个作品。各方面都有一定基础,时不我待,必须开始发力了

—EOF—

 

之前提到过svn钩子脚本的简单应用 (svn的一些细节),当网站与svn在同一台服务器时,简单配置即可实现“svn提交代码,自动更新网站根目录”。

工作中碰到 “网站与svn在不同服务器” 的情况,存在两个障碍:
1、ssh远程命令无密码参数;
2、post-commit脚本执行账户为www,此账号无法通过写入公钥自动登陆。

我的解决方案是使用expect,代码如下

#!/usr/bin/expect -f  
 set ip 10.10.1.105
 set password mypasswd
 set timeout 30
 spawn ssh svnagency@$ip
 expect {
 "*yes/no" { send "yes\r"; exp_continue}
 "*password:" { send "$password\r" }
 }
 expect "$*"
 send "svn up /var/www/pub/docs\r"
 send  "exit\r"
 expect eof