042015.12

埃隆·马斯克:无限的创想与意志的胜利

http://www.lifeweek.com.cn/2013/0926/42600.shtml

http://www.lifeweek.com.cn/2013/0926/42601.shtml

14:38:47 已有0条回复
262015.11

花了两个星期写了一个分布式版本控制系统:牛人是怎样的一种概念

今天在和同事聊天时,我惊叹到,Linus花了2个星期写了git,按照外国人的作息习惯,前后也就不过几十个小时而已,他到底是怎么做到的?于此同时,我想到了UNIX的诞生,Ken Thompson和夫人去度假,一个月左右的时间写出了UNIX的原型,而他们那时的年龄,也很年轻。

在开发这个领域,我已经四五年了,却仍旧觉得自己所掌握的技术鳞毛凤角,我自己写一个极其简单的主题,也花了半个来月,而这些顶尖的程序员们,是怎么做到在那么短的时间完成如此精妙的作品?切勿说去思考系统的逻辑细节,就论码代码的时间,也不仅限于此啊。同事一句话说的似乎很有道理,他说:对尖端程序员来说,写代码需要灵感,灵感来了,挡都挡不住。

Linus被迫要开发一个版本控制系统的时候,和社区的小伙伴讨论:这个系统要有什么特性呢?速度要快!好的。分布式!好的。大规模代码性能不减!好的……额,还有……等一下,我已经把前面的特性实现了,还有什么?

!!!

Linus喝了口自己现磨的咖啡,一边十指在键盘上游走,一边转过脸和来访的朋友说话,“嘿,Linus,最近在干嘛?”“你瞎么,没看到我在写代码。”又要写个什么鬼?”“一个版本控制系统,要速度快,搞得定大规模项目代码,还要分布式!”“靠,这么牛叉!什么时候开始写的?”“两个星期前。”“听起来好像要写很久。”“不,我已经写完了,要不要过来试试爽爽!”

!!!

一口盐汽水喷了一地,大牛就是这样,谈笑间代码已经写完了。在他们的脑海里,根本没有语法、算法、BUG的限制,就像我们走路呼吸一样,程序对于他们而言,完全是无障碍的一种表达形式,就像我们做一场梦、喝一杯水一样,所需要的,仅仅是时间流逝。

他们是出于兴趣、职业?还是渴望、梦想?我想都不是吧。或许更多,他们出自有些东西自己不出马别人搞不定,只好花点时间不磨咖啡、钓鱼、享受生活了。在我所有接触过的人里面,未曾见过这样坦然,坐下来谈笑风生间写一个令人尖叫的程序。

中国的程序员为什么都在脸上写着苦逼两个字?我想更多的原因是真正有望成为牛逼的程序员,没有足够的钱刁刁的喝着咖啡写代码,而不得不为俗世折腰。当然,也不排除,彼人境界太高,我等凡夫俗子达不到。

23:10:21 已有0条回复

发布APIWiki

今天已发布ApiWiki(开源的API文档系统),这个项目是为那些公司内部开发API接口的开发者准备的,使用这个系统,可以减少与APP端开发人员的不必要的麻烦,降低沟通成本,让开发者更专注于开发本身(除花时间去写API文档之外)。

22:14:04 已有0条回复
012015.11

ubuntu firefox提示已阻止使用早期版本的flashplayer

升级到15.10后,ubuntu仍然没有内置升级firefox的flash插件,不得不采用手动升级来解决弹出“已阻止使用早期版本的flashplayer”的提示。

如果我们按照弹出提示进行升级,会发现,升级会打开软件中心,但是软件中心的flash版本确实还很低所以不能靠软件中心来升级。我们进到 https://get.adobe.com/flashplayer/ ,选择下载linux tar.gz包,下载下来以后解压出来,你会看到一个.so和一个usr目录。

cd到解压的目录,执行下面两条命令,来把文件复制到对应的目录去:

>> sudo cp libflashplayer.so /usr/lib/mozilla/plugins/
>> sudo cp -r ./usr/* /usr/

重启firefox,即可使flash成为最新版本,打开优酷之类的网站,可以直接启用flash,不需要激活。

02:40:41 已有0条回复
262015.10

开始积累自己的技术成果,做一个写诗的程序猿

在以前很久一段时间,我把大部分时间都花在思考一门语言的算法,并通过语言实现算法的难度和性能去区分它的好坏。但随着时间的流逝,我发现无论一门语言的语法和性能怎么样,都有它的可贵之处。javascript是一门再浅显不过的语言,然而它在HTML5时代的今天,却比任何一门语言都重要。这启示我一个道理,那就是一门语言无论是被成为烂尾也好,或者当下被夸赞的无法接受也好,到最后,都会随着时代的需要而变革,或退出历史舞台,或自我变革后适应新的需要。而在所有的这些里面,能够实现功能和算法,才是一切技术的核心,无论这些功能或算法是由什么语言实现的。

有段时间,我比较抵制使用第三方工具来进行开发,觉得那不够酷,自己写一大堆代码才能显示出自己的逼格。可是如果不用第三方工具,必然导致开发周期加长,开发效率降低。一个不懂学习最新的第三方工具来进行开发的程序猿,一定是一个落伍者。

除了在使用第三方库上的觉悟,积累技术成果,形成自己的资源库也是很重要的一种技术积累。作为程序员,或多或少会有代码洁癖,会在代码的可读性和美观程度上浪费很多时间。但是,如果一个库的出现,虽然它很好用,但是不能满足一些特定的要求,自己还要去重写的话,远远不如在这个库的基础上进行扩展,最终形成自己的库来的有用。

因此,我打算今后不断的把自己的代码放到服务器上面,不断的去维护和更新。虽然提交到github很好,但是放上去不能预览,所以,我干脆把代码直接丢在博客的子目录,可以被直观的看到。我要放的第一项目,是为公司写的一个HTML5页面,手机扫描下面的二维码来查看,该页面仅作为手机端展示效果,PC上没有效果。

a7f0184f88dbb12abcadabca893ac38c

这是一个手机端HTML5展示页,包含的效果包括:

  1. 左右划屏,iSlider插件
  2. 划屏时,背景图跟随滚动,类似安卓机桌面切屏时背景视差滚动
  3. 载入页面时的动作
  4. 视频播放控制
  5. 不同屏幕尺寸分为md/sm样式进行切换

这样的案例库,未来会全部以HTML的形式放到我的这个trunk目录下。这也让我养成一个新的习惯,即所有的项目未来必先形成html原型,再转换为模板或php文件进行提交,在后期进行调整之后,有重新整理到html中。这样就可以维持项目效果可以得到收集和展示。

00:43:12 已有0条回复
272015.7

使用群晖nas搭建私有git服务器

212015.7

项目不易

6月29日入职至今,已经3个多星期,在这3个多星期中,我对项目的理解经历了几次整体的变革,由于自己对项目的把握不够,导致走了很多弯路,现在就把入职了解一个项目及其规划的一些心得写下来,作为今后的一些借鉴吧。

我在面试时,PM给了我一个大致的产品轮廓,让我知道这是一个关于未来创客空间的服务平台,为创客空间内的用户提供设备设施服务和社交服务。设备设施服务包括空间办公室的租赁,会议室的在线订、APP开锁等一条龙无人工在线操作,也就是用互联网解决一些以前需要人工进行解答、赋予权限、操作的工作,方便创业者在空间内充分利用资源,节约时间。而社交服务,主要是在入驻的创业公司之间,构建一个交流平台,不同的创业公司的员工之间可以在一起探讨某个问题,参加一个活动或聚会,甚至私下会面等等。

我对这个项目的兴趣非常浓,因为对创客空间的互联网化比较有信心,相信未来互联网是创业者必备的基础设施。问题是,如何开始呢?从购买服务器、域名备案转移等开始,再到服务器环境的搭建,php框架的选择,中间经历非常漫长的尝试过程。我的第一个星期大部分时间都是在熟悉业务,和搭建服务器环境和编程环境中度过的。

第二个星期,在确定了php框架之后,我终于开始编程。但是,实际上,由于对整个产品的细节理解不到位,对具体业务环节不熟悉,我基本上处于臆断猜测的阶段,凭着自己从PM那里获得的信息,开始了整个产品的后台架构。在T的帮助下,构建数据库结构,开始后台界面的编写等等。

然而,在这个过程中,我发现,每每写好一个功能,又不得不重新打乱写过,因为稍加了解,就发现实际需求不止这样,写的这些功能无法满足这个需要。我这个时候才意识到,我缺少一个产品经理,对这个项目的细节和业务结合在一起的进行分析的东西太少了。于是,我又回头来,重新自己编写了数据库结构文档,并且勾画业务流程图和系统结构示意图。

第三个星期,我第一次和相关业务负责人进行面对面交流,把我们传统的工作流程了解了一遍,才知道,自己很多都没有考虑进去,比如预约体验的部分,当客户过来看房体验的时候,我们应该如何跟踪、记录这些客户信息,如何在系统中对业务进行处理呢?这些都通过和负责人交流后才确定下来。这个时候我才明显感觉到,自己谱写的业务结构才慢慢符合实际,而不是自己脑海中抽象的理想结构,很多实际中的问题才被考虑进来。所以,和具体业务负责人交流,即使他们以前从来没有进行过线上操作,对我们设计系统是很有帮助的。

这个星期,我基本就是根据上周获得的这些信息,进行功能的调整和完善。

因为我仅仅获得了预约和会议室预订这两项具体业务的具体流程,所以,我目前,也就围绕这两项业务进行开发,其他的业务功能,等到后期有需要的时候,再进行扩展即可。因为我们第一期的工作,也就是这两项,不能想的太远,而久久不能做出成形的产品。

明天,可以把办公室的模块完成。完成之后,直接进入手机端界面的开发,因为PC端界面还在设计师的稿子中,所以,我必须通过手机端入手,做出一个成形的产品,否则,进度就变为不可见了。

21:41:15 已有0条回复
272015.6

PHP非阻塞模式

242015.6

今天发布了第一个css的开源项目magic.css,该项目主要是为了让开发者可以快速使用一些class类来完成一些要经过思考或多次测试才能完成的css效果,其中一些是我自己在平时里积累起来的,一些是从网上看到的比较好的效果,都在注释中给出了来源出处。

20:47:26 已有0条回复
222015.6

找工作的一些心得

终于可以安静的写一下这段时间的一些经历。上个星期去深圳找工作,非常幸运,已经获得了几个offer,薪资水平都在自己的预期范围内,甚至有公司给出了相对比较高的薪资,让我有些心动,但是,找工作对于刚毕业的我来说,不能光看薪资水平,而更要看潜力,所以应该写一下我的一些想法,梳理一下我未来的一些发展。

刚毕业,虽然可能某些方面的能力都已经具备了,但是实际上在面对社会型多用户多功能高并发等方面的开发中,自己还是白纸一张,还要学很多,刚参加工作,也不太可能被作为主力来用,而更多的可能是作为副手,完成一些思路明确的开发工作,为主力分担工作量。因此,我更倾向于潜力比较大的公司,特别是既有极客风格,又在业务领域有美好前景的公司,在这样的公司,自己可以一步一步看到一个明晰的发展方向。另外,有一家公司虽然给了不错的薪资,公司规模也挺大,但是我回来一想,觉得这家公司的业务已经比较成熟了,从它线上的产品来看,也基本比较完备了,在面试时,我也尝试问了一下主考官公司未来的业务扩展,从他的回答中我大概知道,未来公司也没有业务上的大举扩展,所以说如果我进了这家公司,主要要是作为现有平台的一个“螺丝钉”,对已有平台进行修复和升级,对一些小功能进行扩展,而无法经历一个产品从雏形到上线的种种过程,也就无法在这种过程中成长。所以,最终我还是希望进到另外一家前景较好,业务平台相对来说还不是太成熟的公司。

我自己的开发能力基本上还是处在“便利贴”的层次,也就是哪里拿来都可以用,也可以完成任务,但是无法做到大神般的完美,用一个词来概括,就是“半吊子”。所以,我也逐渐明确自己需要在哪些方面进行提升扩展,也是我未来在工作及业余时,必须自己学习和提升的方面:一,Linux平台下的惯用操作和优化;二,PHP的底层原理;三,MySQL的底层原理;四,PHP算法及思维扩展。在面试的时候,很多题目我只能是一知半解,这主要原因是我在平时的开发中,以实现功能为目的,而没有从底层原理出发去剖析一些更深的知识,如果再去深入学习,相信未来必定会有一个大的突破,也会慢慢从“打下手”的角色逐渐进入“主力”的行列。

23:11:56 已有0条回复