Blog | Phodal - A Growth Engineerhttp://www.phodal.com/blog/2016-12-30T23:47:24.974083+00:00Blog三年职业编程生涯里,遇到的那些挑战2016-12-30T14:16:44+00:002016-12-30T23:47:24.974083+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/think-about-challege-in-three-years/> 常听人说,在我司待上三年,你就该“毕业”了。
说工作多少年总是有种秀资历的感觉,一点儿也不好,下次让我们换个口味:你的年假有多少天。
简单的来一下流水线:
- 2013 年 12 月 30 日,开始在现在的公司实习——从一个电焊工变成了一个键盘侠。
- 2014 年 12 月 30 日,期间挖了一个大 Bug 导致下线。
- 2015 年 12 月 30 日,和我们家 @花仲马 手牵着手下班。
- 2016 年 12 月 30 日,交付了第二本书,它总结了这三年(快把买书的钱准备好)。
2016 的最后一批狗粮如预期一样,已经发放完了,请期待 2017 年的狗粮。
是时候进入正题了。
实习:同侪压力
---
实习的时候的主要压力源是:同侪压力(或称同辈压力、朋辈压力,指的是同侪施加的的一种影响力,它可以鼓励一个人为了遵守团体社会规范而改变其态度、价值观、行为。)。同时进公司的同事大部分都是重点学校的研究生。这种事情落在一个二流学校的本科生身上,就是一种压力——和他们相比,你不知道究竟差了多少。即使是相差无已的,你也会觉得他们比你强。概况我又不是计算机专业的,而在大学之前我一直在为成为 Kernel Hacker 而努力着。
这种压力倒算是正向的,在为更强大的自己为努力着。然后,你就 Move Fast,也不得不 Move Fast。生怕有一天,你就落后于其他人。后来你就知道了,我开始刷 GitHub 来提高经验值、开始刷书提高理论值。那时还有一个时间段,我以每天一篇的文章在刷博客。
等毕业的时候,因为更具有挑战性,便想去尝试国内交付。通过 PM、Buddy、Sponsor 等去与上级讨论,遗憾的是都没有这样的机会。毕竟这些机会都是有限的,哪天已经长成的时候,它就会来找你,而你已经不想要了。
这段时间倒也成了成长最快的时候,没有工作上的压力,还有人指导你成长,还能在项目实战上成长。
初入职场:Interview ++ 和 Coaching 新人
---
开始正式工作之后,就进入了半年的试用期。虽然并不会因为有半年的适用期而影响,但是项目还是一个项目,多少就会变得有点无聊。
这时候的挑战变成了:Interview ++ 和 Coaching 新人。
度过试用期的标准是:愿意不愿意和 Ta 一起工作。但是当你在试用期的时候,就会遇到每个月的一次 Interview++。项目上的其他成员(已经过试用期)会对你进行一次组内考核,这种反馈是多方面的——不限于技术。如我在最初的时候,遇到的主要问题就是说话语速过快、普通话发音和英语问题。
后来,**语速大家习惯了**,**胡建话大家也习惯了**,**英语提高了一点,大家也习惯了**。再后来,我就去翻译书,还能愉快地用英语培训客户。
当你好不容易解决了一个反馈的时候,在下一次 Interview++ 的时候,你就会收到一个新的反馈,然后好好改正吧!少年。你就会一直在变得更好的路上,同时更加累。
入职的三星期后,七个人的团队里有四个新人(包括我)。由于我们采用结对编程的方式工作,这就不得不和其他新人结对,去 Coaching 新人。这种体验一点儿也不好,每天你都要提前做好准备,还有会遇到你的 Pair 问的各种问题。
在你也不是很熟悉快捷键的时候,还需要去教会你的 Pair 使用快捷键,你就不得不加倍去练习这些技能。当然这种成长也会更快、更累,顺便带你的小伙伴一起飞。
Be Profressional
---
当然,事情并没有这样一帆风顺。有一次,写了一个大 Bug 进去,然后上线又下线了。因为采用的是一个迭代上线一次,所以事情不算太糟糕,就是回滚到上一个迭代的版本。
这个 Bug 起先是为了 SEO(搜索引擎优化),他成功的跳过了:需要运行一小时的功能测试、数量众多的功能测试、QA 们的测试,最后是由 Google Analytics 发现了这个 Bug。同时他也困扰了我一段时间,那是我在当时找到的方法,然后也没看出大问题,就愉快地修改了。对于这个十年左右的代码库,我终究还是太年轻了。
现在,这些代码仍然在线上运行着。不过,据说已经没人会去修改这些代码了。
团队里的大部分人都是从 TWU 里出来的,同时采用了标准的结对编程流程,因此我们一直自豪的宣称:中国区对文化和敏捷遵循最好的团队。可惜,现在已经不存在了。
我们遵循着制定下的一个个软件实践:保持提交信息一致,保持持续集成的最高可用性等等。当你的持续集成是红的时候,就会有人愉快地去帮你查看失败的原因,诸如 Check Style 失败的、红过夜的是要买酸奶的。不及时修复的、修复难度比较大的,会立马被 Revert。
当你犯错的时候,记得:**Be Profressional**!
后来,在工作上的挑战也就越来越少了。
Lucky & Unlucky
---
有的人可以在三年里经历一系列的项目,刷下一堆经验值。有的人可以在三年里经历一个项目,留下一段篇章。
记得,在公司法中说:公司是指一般依法设立的,有独立的法人财产,以**营利为目的的**企业法人。当你工作的时候,一切都需要以营利为目的。如果公司营利多了,那么什么都好说。反之,你懂的。因此无论在哪,领导层都以公司的营利为核心。随后,才是公司文化,才是你的个人利益。再好的文化也会有变的一天,只有“利益是永恒”的。
因此,只要你把工作当成工作,公司当成公司,就会发现一切都很轻松。毕竟,**技术好**本身是没有价值的,有价值的是技术做好的事。
三年里只经历了两个项目,即算是一种不幸,也是一种幸运。不幸的是,从工作上能学习到的东西少之又少。幸运的是,可以有大量的时间去刷 GitHub、写博客、翻译书。
在这个时候,你总得去寻找你的下一个挑战点在哪。
我在寻找下一个挑战点,你呢??
信息流的思考2015-12-24T23:50:22+00:002015-12-24T23:50:56.710284+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/think-about-information-stream/之前我一直用的是Nokia Lumia 1020,对就是那个4100万像素的手机,WP到底是一个特别安静的世界(没有应用)。那时从未感受到,我就是一个消息控。
自从这个世界有了各种头条以后,世界似乎变了。消息从一个地方被复制到了另外一个变化,并且每天我们都会看到重复的内容,有一天我们变开始讨厌这些。复杂的世界里,似乎一个就够了。但是我还没有发现有一个好的渠道去让人们更好地学习某个事物,这是一个值得沉思的问题。每天收藏那么多文章,你会去看么?到底还是需要有一个更好的媒介来帮助人们成长。
各个地方都在以一篇篇的文章写着React的趋势,而你看到的多数只是一些入门,干货毕竟只是少数,并且都是被收藏起来的。
成长是一个很有意思的话题,多数时候我们并不关心别人写的那些取得成就的文章,而是更希望从中获取一些营(ji)养(tang)。从某方面来说,我们在自动过滤一些无用的知识。这就是为什么通常来说,你在某某头条上看到的头条,不会是xx语言实战,而是各种鸡汤。因为多数人的技术栈是不一样的,所以胜出的往往是那些通有的元素。
这时,我们还是要去思考我们到底需要什么。技术的异己文化2015-11-28T08:36:43+00:002015-11-28T08:44:56.709732+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/technical-anti-self-culture/最近在尝试做一些图形和硬件相关的学习和开发工作,然后遇到了一些平台相关的问题。然后,Mac OS变成了我用过的最烂的硬件、游戏开发的操作系统,没有之一。而又因为自己没电脑不得不使用Mac OS来开发硬件——自己的电脑在毕业时坏了,因为某些原因不能为自己攒钱买电脑。便又想起了又前想写的一篇文章,便还是草稿了一下。
> 群体很容易在短时间内从一个极端跳到另一个极端。
网上的大部分文章中似乎在说开发人员大部分用的是Mac OS,这些开发人员大部分是Web和Android、iOS开发人员。当然,我也是这些开发人员之一。
人们总在说Mac OS是"最好的系统",因为他们都在互联网公司工作的——互联网公司需要的是简单、实用、美观的操作系统。然后,他们在为Windows操作系统上的用户开发网页,用着Chrome整天在吐槽IE。最后,他们产品上线的时候使用的是GNU/Linux系统。
如果Windows在.NET这一层早点开源的话,情况可能不变了。现在开源了,可能也不晚。但是我们很少见过用Mac OS作为服务器的例子。
##技术、利益与偏见
技术本身没有好与坏,也没有偏见,只会依据所使用的人而发生一些变化。
###Window Phone、iOS与Anroid
技术本身着存在很多的利益相关问题。许多iOS应用没有Android版,并非因为其他手机平台(如Android、Windows Phone)开发难度大,而是因为收不回成本。换句话说,这存在一些利益问题。作为一个Nokia WP时期的用户,我深知如此——即使是
1. 不作恶的Google也出于利益问题,没有推出一个Windows Phone上的应用。
2. Apple在这方面做得比Google好一点,推出了第一个Android应用是一个iOS迁移工具。
3. 作为一家正走向Open的公司来说,微软作得比他们还好。
因为我的女朋友经常做一些编辑相关的事,加上我也有一些编辑、排版相关的工作,我们就需要一个Office。而这些软件在我用的所有设备——Lumia 1020、 Meizu MX5、iPod Touch、MBP上都有,而且可以协同工作。
在那之前,能这样工作的软件只有Amazon Kindle。阿里也做得还行,虽然他们也在Applce Watch推出的时候,第一时间推出了支付婊。但是至少也还有一个两年前的WP客户端可以用。
要知道Google正在走向封闭,Apple没有开放的打算。人们存在过多的偏见,坏人做了点好事,就变『成黄鼠狼给鸡』。
> 站的位置越高,就越看不到底层的艰难,也会越看不到底层生活的人们。
从过去到现在无一不是如此,人们倾向于根据人们使用的事物去划分人群,而不是他们内心的真正想法。而越是想去维护他们的外在表现,则需要越来越排斥另一方。
##The Fans
接着,不同的人群就想站在其中的一方去争论。人们依据他们能想到的优点去为自己争辩,尽量去扬才避短。这时往往人数多的人更有优势——毕竟真理掌握在少数人的手里。有一些特性在某些手机上就会变成某个手机的特色
然后变变成某个品牌手机的首创,毕竟舆论的所有权是掌握在他们的粉丝的手里。某些产品的粉丝必然会和某些产品的粉丝开始互掐。一个好的产品可以让用户钟爱,不想离开,但是不应该主要去束缚他们。
作为一个技术人员,我就不想被捆绑住。
###民主与专制
这个问题非常有意思。见过非常之多的开发人员在否定自己的国家,而在述说某些民主国家的好处。民主意味着更多的混乱,专制意味着更多的安定。民主的前提是国民素质水平都是相当的,只要存在利益问题这点就不可能实现。但是无论是哪一种制度都只是少数人的民主。墙外的人往墙内钻,墙内的人想往墙外去。
不多阶层的人都会看到不同的世界,思考的问题也就越不同了。顶层看底层的人就是无知,觉得他们很悲哀,而底层的人则觉得自己很快乐。
人们害怕自己往低处走,就需要去维护自己的台阶。越是需要去维护自己不同阶级的台阶,就越需要去花费时间和精力来维护这个群体。当你在最底层的时候,你就不需要去维护这个台阶了。表面光鲜,则需要花费相应的时间和精力。
粉丝总想去维护自己的Super Star的光环,直到心灰意冷的一天。作为一个Super Star也一直想去维护自己的光鲜,而不去让自己的粉丝失望。
软件抄袭与创新的思考2015-06-22T10:06:59+00:002015-06-24T23:38:44.796395+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/think-about-software-copy-innovation/周末不想写太多的代码,一是因为手部神经性压迫导致疼痛(职业病啊),二是因为我觉得有必要再扩大一下知识范围。在找小说未果的情况下,先是买了本微创新,然后收获挺多的,又买了两本(基于亚马逊推荐。。加上我的成功率,我想只要找到一本就可以找到另外的三本):
- 《微创新:5种微小改变创造伟大产品》
- 《第三种创新:设计驱动式创新如何缔造新的竞争法则》
- 《模仿的技术:企业如何从"山寨"到创新》
看完了三本书,收获还是蛮大的。就想着写篇心得,兼作软文。
##[一个快速实现的想法](http://www.phodal.com/blog/think-about-software-copy-innovation/)
三周之前,我对策划了几天的基于HTML的PPT、博客、演示框架开始了编写之路。到了今天,已然有了243次提交,这意味着每天可能有12次左右的代码提交(ps:感谢党和组织,感谢长年不加班的公司让我有机会去写代码)。
如果你用过``impress.js``和``reveal.js``,那么我想你是知道网页版的Slider是长什么样的。如果不知道的话,快来看看[EchoesWorks Demo](http://demo.echoesworks.com/)吧。
- ``impress.js``有着酷炫的动画效果,但是不支持Markdown。
- ``Reveal.js``支持Markdown,但是一点儿也不炫。
于是,在很久以前我有一个想法是,基于两者做一个这样的框架,但是觉得这样子显得没有创意。这也是为什么到了,现在EchoesWorks还没有华丽动画效果的原因之一(ps:另外一个原因是我对CSS3的动画效果还没有深入的研究,如果你研究过快来加入我们吧)。显然,这激发不了激情。
直到有一天,我在想为什么我的博客还是静态的, 应该要有点弹幕,应该要有点动作。便让我联想到了视频,拿视频当博客有点儿戏,又浪费时间。一个Slider和视频的差距,我想只有``字幕``和``音频``了。接着,来了一场头脑风暴,开始编码之后,就有了之前很水的一篇文章: [《EchoesWorks —— 打造下一代技术Blog/Presentation 框架》](http://www.phodal.com/blog/build-echoesworks/) 。
So,来看看我是如何快速再造一个Slider的:
1. 首先,我找到了一个叫``bespoke.js``的框架,它是一个``DIY Presentation Micro-Framework``,有了这个框架也有就有了基本的轮廓。
2. 接着,我需要处理用户输入来控制Slider,便参照来了``impress.js``的代码。
3. 由于,需要基本的计时工作,就参考了``timeline.js``的基本原型设计来完成。
4. 需求告诉我,还需要一个进度条,接着就找到了``nanobar``。
5. 在微博上发的时候,发现对移动设备支持不友好,就参考了``Swipe``来完成左右滑动的功能。
结局便是,我抄了一堆软件来再造一个Slider,虽然还没有造完。等等,我做了什么?
- 写了一堆胶水代码。用于连接各个模块间的功能。
- 写了比产品代码还多的测试代码。用于保证大多数情况下的代码修改都不会破坏系统的功能。
- 对其中某部分写得不好的代码,做了重构。
看上去,不像是抄袭,什么是抄袭?什么不是抄袭?
##创新
基于那几本书,我对于创新的分类大致有:
- 体制内创新
- 体制外创新
上面的分类无异于把这个世界上的处理器分类为:
- ARM
- 非ARM
###Unix与GNU/Linux
不存在一个好的方法可以成功的把世物分类,不同行业的人的来同创新方法,只告诉我们一件事,这个事件上是没有绝路的。如果这个路行不通,一定还有别的路,只是你没学到罢了。只是就如一些作者所说,创新是可以学习的,但是不是很有的创新都是可以学习的。
如果人看过《技术的本质》的话,那么我想你对书中的一些理论一定很熟悉。如,**新的技术是基于现有技术发展起来的**。又如,《适应性创新》一开始举到的**造一台多士炉要花一辈子**的例子是一样的,如果我们要从头造一个系统要花一辈子。
再回到现实,Linux是一个内核,BASH是一个Shell工具,glibc是C运行库,GCC是编译器,还有Binutils、Coreutils、Diffutils、Gawk等等都是一堆库,或者称之为技术,如果没有胶水般的程序将之整合成一个系统的话,那么这些模块有些可能就消亡了。然而,是Unix告知了GNU/Linux系统的开发者们,你们要用怎样的胶水来粘合这些模块。故而,在过去到现在的很长一段时间里,GNU/Linux都逃不了Unix的阴影。
不幸的是,今天已然是GNU/Linux的天下,未来人们就会各种诉说GNU/Linux是如何创新。
同我当时在课上学习设计模式一样,只有先模仿和基于别人的模式,之后才有可能有更大的突破。同理GNU/Linux已经达到这样的阶段。不要和我说苹果是如何创新,没有模仿,只是它们做了胶水做得更好,或者说现在,他们设计了更好的胶水。
###说说创新
过去,每天我们都闪现着不同的灵光。有时,我们经常和自己说不可能,说多了有时候就不再想了。或许受当前的条件约束,和所谓的梦想一样。想想,所谓的创新要么就是在现有的产品进行微创新,要么就是某种形式的"无中生有"。人们通过不知道他们知道什么,或许又如《乌合之众》说到的那样,群众只接受简单观念、群众不知道他们需要的是什么,你也难于动摇一群群众。
于是,当我们创造出一种新的产品的时候,我们很难确定这是不是市场所能接受的。而有时候调研,又没有办法办法来帮我们合理地解决创新产品的问题。也从某种情况上说明,像苹果、微软这种后来者,更容易获取市场占有率的原理。因为先来者,已经将更多的理念赋予大众。那么,后来者只需要研究用户体验、用户需求,便可以创造出更好的产品,前提是要有足够的速度。而,速度从侧面反映了一家企业的意识形态。
很多时候一家大公司只所以被新创企业打得无还手之力的原因,除了速度,也还在于错误的决策。而错误的决策在当时可能是最有效的,但是如果没有足够快的意识到这样的创新,便同诺基亚一样,需要当明年重新复苏。而有这样的机会的公司是少之又少。
总得有那么一些人,需要看看他们新产生的竞争对手。笑他们,还不如去学习他们。
创新,其实是``Keep Study``。
##其它
###启示
作为一个技术人员,除了保持速度和学习。还要尽快地做到所谓的``守``、``破``、``离``,作为一个中国人看到这三个汉字从中国传到了日本,再从日本传到了美国,又从美国传到了中国。难道就不应该有一点点觉悟么,从模仿开始,到自由自在地创造。
模仿和创新只在一刹那之间,想想你做这个东西是为了什么。除去你模仿的功能看看你还能添加什么?不要从一开始模仿,而要从一开始在模仿的基础上创新。腾讯、小米关于模仿的败笔骂名就是在于此,先模仿而后创新。不过,他们有能力、实力可以很好地做到了上面的三个字,即从模仿 -> 赚钱 -> 创新。
但是,如果是一家小公司,那么只有死~~。
**关于标题**
本来标题应该是``写在EchoesWorks三周之后``,后来似乎有了更好的突破点。
也想不到一个好的标题来描述主题,这里的抄袭说的不算是真正意义上的抄袭,算是某种意义上的Copy,又或者是某种意义上的再造车轮。
**EchoesWorks**
快来加入我们吧,项目首页: [https://github.com/phodal/echoesworks](https://github.com/phodal/echoesworks)
(ps: 觉得写得好的,点个star,点个分享)
微服务的小思考2015-05-25T14:33:27+00:002015-05-25T14:50:29.796489+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/think-about-microservices/在一堆软件架构方面的书里混了几天,发现世界还是不一样的。
在前面的几篇文章时,对比了下宏应用(monolithic)与微服务:
- [微服务架构](http://www.phodal.com/blog/microservices/)
- [微服务与SOA](http://www.phodal.com/blog/soa-vs-microservices/)
- [微服务架构——不是免费的午餐](http://www.phodal.com/blog/microservices-is-not-a-free-lunch/)
##说说微服务
通常来说对于一个微服务来说,大概会是在千行级别代码左右。这似乎意味着我们在考虑创建一个新的微服务的时候,也需要考虑到语言因素。
对于一个复杂的系统来说,我们构建了一个又一个的微服务,那么我们就需要维护不同stream。如果一个team的容量是有限的话,那么如果我们在不同的微服务里使用不同的语言(ps:微服务的优势),那么维护这微服务群的难度就会上升。所以,一个结果是我们应当倾向于在少数几种语言来决定使用的语言。
如果我们在最后决定我们的微服务用一种语言来写,那么他相比于宏应用的优势呢?
- 更复杂的架构
- DevOps经验
- 更复杂的测试
- 带来更多的就业机会(笑)
###微内核与宏内核
众所周知,Linux用的不是微内核,但是借鉴了很多微内核的优势,故而Linux是一个Hybrid内核。对于一个小的Team来说,微内核不会带来明显的优势,但是切换过去要花费大量的成功。尝试借鉴于Linux的经验,似乎是一个很好的开始。
![Hybrid Services][1]
[1]: /static/media/uploads/hybird-service.jpg当我写博客时,我在想什么2014-05-12T14:07:39+00:002014-05-16T07:51:11.880094+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/what-i-think-when-i-write-blog/#当我写博客时,我在想什么
这个标题似乎有点仿村上春树的《当我谈跑步时,我谈些什么》,只是一直听闻这本书,然而没有好好看上几眼。一直不是一个容易专注的人,只是到底有多少人是真正的专注,走路时我们在想些什么?
当自己是一个年轻的程序员(从自己知道自己的职业算得上是程序员)时,自己已经写过一些东西,于是就那样慢慢地写了越来越多的东西。
##为何在坚持写作
上面的说法有点扯淡,只是似乎现在是如此。写作是一项有意思的事
- 获得人们的评论
- 看看不同的人对于同一个话题会有怎样的看法
- 找点有意思的东西,你可以向这个世界宣称某某东西是最好的
- 看看人们都在关心什么
然而对于我来说一开始我只是想试试SEO,``SEO是一门艺术``。对于用``Google Analytics``,我们可以
- 看看不同的人会有怎样的行为。从这个链接跳到首页,再到某个页面,关心下作者在干些什么
- 看看人们是怎样找到网站的。从关键词、点击去分析,再获取一些有意思的东西,如关键词排名。
- 看到原来周末的时候大家都很少编程。至少大部分的人是那样的,然后流量就掉了下来,即使是Github也是如此。
当我们有越来越多读者的时候,我们总会想着去给读者写更多的东西。对于一个作者来说,这就是动力的来源。
##当我写博客时
写过算是有些博客,而最近正在试着天天去写,出于某种目的,或许是因为PR值的影响,或许是为了激励某个孩子。当我写博客时,我会
- 试着去表达一些技术上的细节,也会省去一些技术上的细节。
- 以自己学习的角度去想怎样写可以一步步下来。
- 加入一点点自己的情感,博客和文档是不一样的。(详细见下文)
- 编写更简洁的内容,因为技术博客与此文不同的是,技术博客是面向寻找信息的人。
###不是写文档
博客与文档不一样的是,我们需要别人来评论,然而文档是不需要有那么多人评论。文档只会教一个人如何进去下一步,博客更多的像是一种交流。加入自己的情感,一开始的时候可以抱怨些在这个解决问题的过程中遇到的坑。
我没有写过文档,不过太部分的文档感觉都是相当严肃的,或者说专业。
###让博文更简洁
准确的来说标题是错的,但是没有那么重要。对于一篇以技术为主的博客,简洁的方法和写好技术博客是类似的,以把信息推送给用户为主:
- 代码。必要的时候贴出代码,会是一种快速有效的方法,工作的时候是为了完成某个任务。
- 列表。列表可以简明扼要的说明你想要表达的内容。
- 图表。一张流程图可以说明程序的步骤,一个表格可以作好一个对比。
- 标题。标题的好处,可以让用户快速定位,让用户找到想要的内容。
- 链接。一个好的URL对于使用英文的人来说,可以利于SEO,对于中文,使用的人可以判断出文章的专业与否。
###让博文看起来专业一点
专业一点,这个说法,有点意义。但是不仅仅在于那几个字上,而在一些细节上
- 排版。一些小的细节,还有一些缩进。
- 大小写。对于技术文章来说,大小写所要的表达的意思是不一样的。Python说的是这门语言,而python说的可能是python语言的软件。
- 语法加亮。在文章的代码有语法加亮是相当重要的,至少看上去会像是你写的,而不是复制的,只是复制的也会有的,但是加亮总是好一点的。
重构个人网站的畅想2014-03-15T06:30:30+00:002015-12-01T15:08:19.677277+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/refactor-person-homepage-think/经过上次的升级的惨痛代价之后,终于明白不能依赖于一个框架,我们所需要的只是数据。换句话说,这才应该是真正的一个符合RESTful的网站,不过这只是一个步骤,真正的想法来源于自项目的经历。
##现有框架##
再有的框架简单的来说就是依赖于Django+Bootstrap,前端的话很容易可以代替,而诸如Django这些怕是没有那么简单。
如果有一天和上次一样,框架有了一个大的升级,那么我们是依赖于这个框架,还是?或者有一天我们的服务器提供商关门大吉了,有这么多的可靠的不可靠的因素存在着。
现有的博客的文本用的是Markdown,这又是一个坑,如果我们放到别的地方去的时候,我们 的框架怕是不知道会变成怎样子。
数据库换成了SQLite3,这个算是上次做的比较好的一个决定,不过也并非如此,当我们需要将数据库迁移到MySQL的时候就不会有原来那么简单,原来只是复制粘贴博客,但是现在呢?数据越来越多,写个脚本算是一个比较好的方案,Django虽然原生支持,但是显得不是那么可靠。
还有一部分原因是现有的页面不是静态的,在哪种程度上来说,问题很大。
##畅想##
这部分内容由在项目上的内容联想到的,构架设计果然是一种美妙的东西,而也需要在我们了解到了更多的东西之后,我们才会明白这其中的有趣之处
###JSON###
首先,我们需要将博客的内容转为json,而又有一些复杂的总是,没有想过这其中的加密问题,这还真是一个复杂的问题啊。
```javascript
{
"name": {
"first": "Michael",
"last": "Jackson"
},
"age": "RIP"
}
```
而后,我们需要花时间去选择一个用于生成RESTful的框架,诸如之前在设计最小物联网系统的时候用的Laravel,或者是Django RESTFramework,或者也可以是Ruby中的框架,NodeJS似乎也是可以的,所以有下面这些可选的
- PHP Laravel
- Django REST Framework
- Ruby
- Javascript Nodejs
而后面的部分就是去解析JSON,这个也就是Javascript Template的好玩之处了。
- mustache.js
- doT.js
问题的另外一个关键是,是否考虑用MVC
- AngularJS
- EmberJS
##需要解决的问题
###Javascript SQLite3
如果Javascript可以直接读取本地文件,如json之类的话,那么应该可以直接读取DB?
###REST框架###
用哪种框架会更高效?
重新审视javascript2014-02-28T00:58:26+00:002014-05-14T04:02:11.566021+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/more-javascript-think/或许这个话题相当有趣,只是因为Javascript会有一个新的增长,web是未来,Javascript也会有未来,当没有一个新的语言可以在web方面代替的时候。
#强大的Javascript#
Javascript或许有这样那样的语法问题,然而重要的是,他已经替换掉了与操作系统无关之外的大部分东西,而且还有着更强大的平面能力,在那之外我想到的就是python。只是Python现如今已经没有Javascript走得远,网景的一时之作,在市场的作用下成为了经典。
##nodejs##
事情是开始于2009年,关于nodejs
<blockquote>
Node.js是一个可以快速构建网络服务及应用的平台。该平台的构建是基于Chrome's JavaScript runtime,也就是说,实际上它是对Google V8引擎(应用于Google Chrome浏览器)进行了封装。
</blockquote>
Javascript之所以能那么流行的原因,在于写web后台的总会写点前端的代码,而在Javascript可以代替后台的时候,这又是一个新的开始。Javascript组件把一个又一个的web组件替代掉了,那么这时候已经可以独立撑起web大任。
#看看Javascript#
过去一直对于javascript的理解及运用仅限于
<pre><code class="javascript">
document.getElementById();
document.write();
</code></pre>
换句话说,也就是jQuery所做的努力,对于DOM的操作。
<pre><code class="javascript">
$( "p" ).removeClass( "myClass yourClass" )
</code></pre>
而不是类似于
<pre><code class="javascript">
Calc = function () {
};
Calc = function (num1,num2) {
};
Calc.prototype.add = function (num1,num2) {
return num1+num2;
};
Calc.prototype.sub = function (num1,num2) {
return num1-num2;
};
</code></pre>
的理解及运用,当然还有更多的东西需要去好好补充这个语言,诸如:
<pre><code class="javascript">
_.map([1, 2, 3], function(num){ return num * 3; });
=> [3, 6, 9]
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
</code></pre>
这个是[underscore.js][0]提供的
[0]:http://underscorejs.org/#map
当然还有更多的东西,如:
<pre><code class="javascript">
each
find
every
...
</code></pre>
现在还有一个更强大的功能,也就是说一个现代的语言所需要的包管理
<pre><code class="bash">
bower install
</code></pre>
这些还不是很完善,但是已经渐渐开启一种语言的新的未来。
##更多##
angularjs在mvc方面已经显得有足够的能力,但是在某些方面还是有些混乱。
<pre><code class="javascript">
var myApp = angular.module('myApp', [], function($interpolateProvider) {
$interpolateProvider.startSymbol('<%');
$interpolateProvider.endSymbol('%>');
});
</code></pre>
我们还需要替换掉Laravel框架里面的符号,但是已然足够了。
还有在其他语言在看到的
<pre><code class="ruby">
require 'json'
</code></pre>
已经可以用require.js解决
<pre><code class="javascript">
require.config({
paths: {
"jquery": "jquery/jquery-1.8.0.min",
}
});
require(["jquery"], function(util) {
});
</code></pre>