kurrunk

不停转圈的人

有趣的流程图编辑软件Graphviz

今天又要画流程图,找了一下找到一个有趣的软件:graphviz,在archlinux中可以直接安装。

GraphvizGraph Visualization Software的缩写)是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形。它也提供了供其它软件使用的库。

印象中的画图软件都是和photoshop一样,有一个窗口,有一堆的图案,用鼠标画。但是graphviz却可以像写代码一个画流程图。

比如,用文本文件编辑test.dot:

digraph G{
“身份验证”->”功能列表”[label="通过"];
“身份验证”->”登录页”[label="拒绝"];
“功能列表”->”新建实验”;
“功能列表”->”实验列表”;
“实验列表”->”查看实验”;
}

然后执行命令:

$dot test.dot -Tpng -o test.png

这样就会生成一个png文件:

 

大与小,新与旧,管它呢 !

如果算上部队的生活,走入社会已经十年多了,也算是经历多种不同的环境,知道,能在互联网中生活绝对是我的一种幸福。假设换个时代或经历,那么我会是谁?我会失去这个也会失去那个,难以想像那样的事情。

对一件事物的期待或许是最重要的事情,活在期待中是最幸福的,我还是期待互联网的世界,在充満变化的空气中感受当下的前所未有。的确是这样的,互联网十年是怎么样的十年?从im+email+bbs到如今的微博、blog、sns、电子商务等等的以前不敢想像的玩意儿,怎么能不让人幸福呢?

谢谢天地,我算幸福的,但这幸福绝对来自那些优秀的、小团队的创新。

互联网的进化完全是创新的结果,创新不等于商业的成功,但是不创新绝对影响不了互联网的进化,当然如果站在纯商业的角度,只要不触及法律,抄袭产品形式也没什么,只是为了嫌钱嘛,但是那些以纯商业目的的抄袭行为很不要脸,复制一种其它地区已验证了的产品,扩大了用户规模后还要给自己立个贞操牌。如果一个人对互联网有一种深深的情感就应该会理解这样的情感差异,同样的网络服务,不论商业成功或失败,只有第一个是会让人永远记住的,如同爱因斯坦、牛顿……没几个人会知道第二个认识到万有引力的存在的人。

身在大公司才会理解到,互联网真的是小团队的天堂,只有小团队不会拘泥在规范上,只有小团队才会喜欢尝试新的思路,也只有小团队的产品才会与众不同。

看上去,大公司的身体似乎一样的肥,首先,公司内部不断地出来各种规范,再就是不断有战略的方向,还有无比细致的审批流程。

在大公司设计一个产品开发方案,要考虑的太多了,第一不能太出格,也就是说选择点要主流的,比如开发网站选择php而不能选择ruby;第二要大家的支持,要考虑你出走后有人能迅速接手;第三,如果选择较新的技术就要先调研,然后和大家坐在一起讨论;

起码我自己是那种喜欢尝试新的东西的人,那样我才能感受到互联网技术在进化。一直用一些老掉牙的技术很是没劲,如果考虑到推动新技术的繁琐也是很无奈。认真想想算了,何必这么较劲呢,公司不是我的,开发出的东西也不是我的,何必费大劲去推动新的技术呢。

呜呼!那些……勇敢尝试新事物的、有正常审美观的、十来个人的小团队,你们辛苦了,我感谢你们让新鲜的草长了出来。

关于go语言的种种

Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

发现自已有洁癖,总是想找一个完美的东西,以前喜欢过java php python,现在又喜欢上go语言了,这一次我都有些瞧不起自己的善变相了。

但学习了go语言后的确发现了它在很多场景中的表现比我掌握的其它语言要更合适。

简洁的语法和适时的表现

计算机语法对我来讲很重要,习惯了C语言的语法形式后我很难去接受其它语法;只使用过命令式语言,对于函数式语言也不容易接受;go语言语法继承了C语言,同时力求简洁,比如去除while,去除if后的括号,行尾不必加分号,等等。

相比较如C这样的语言,go语言开发起来要轻松很多,我感觉主要是go语言本身就支持现在开发必要的一些模块,比如字符串处理,比如是unicode,比如一些常用的库,像json xml http rpc,甚至websocket,而且有垃圾回收的功能,这样开发时要轻松很多。

运行速度

学习了go语言后第一任务就是测试速度,官方宣称接近C的速度,但结果并不是那样。

第一次,功能是从一个文本文件中逐行读数据依次写入在新文件中,印象中记得用的时间值是:go 1s,php 2s,python 3s。

第二次,用正则表达式解析日志格式,php最快,go要远远慢于php的速度。

第三次,基于第二次的代码,把go中的正则表达式改写(去除.*)后,处理20万行日志时,go用时2分38秒,php用时3分35秒;内存方面go表现的突出,只用了1.8M内存,而php用4.3M。

第四次,基于第三次的代码,去除go的正则表达式,用Split代替,结果go处理20万行的日志只用37秒。

总体来讲并不甚理想,真的应该试试在php中用split后的表现。

官方网站写着应该用go的方式使用GO开发,这个等后面更深入的使用吧。

代码量上看,go还是很不错的,比php写的程序的代码量要小一点。

不习惯的地方

以前都在使用动态语言,动态语言的数据结构很灵活,比如python中的字典,value可以是任何数据类型,而go中的map只能是一种value。这样我在开发复杂的结构时,GO的复杂程度就提高了很多。这一点琢磨了很长时间不得其解,网上相关的中文知识太少了,英文又看不懂,又没有静态语言的编程经验……

总之

语法喜欢,速度满意也期待新的版本,无英文能力学习门槛相对高,期待中文内容的丰富。

加上go的并行特性,我的工作中比较适合用go来开发,今后会优先考虑go语言来开发。

失意、方向、规划、加油!

如果算当兵的两年,现在的我已经工作了十一年有余了,真是一个大大的数字,都有些不敢去想,岁月的消磨并没有让我有多少改变,还是那样喜欢批评,喜欢选择,喜欢集中精力地去思考。

可怜之处就是这样,环境已大不同,我还是我。

公司都有员工级别评定,这是对员工肯定的一个方式。我们几个人所在的原来部门解散,这些人被流放在各个产品线上,和另外一种人在一起,技术不同,方式不同,结果也应该能想像的到:两年内四次职称评定,没有一个人的职称改变过。

相信抱怨没有意义,那什么有意义呢?只相信自己,给自己一个工作之外的目标,不要再去被动接受审查式的询问,不要再寄希望于不给力的平台。

这几年在若干公司来来往往,得到的只是生活资本,还好工作之外积累了一些想法,从一堆想法之内挑选出了一个自认为“难度”和“价值”较平衡的目标,今后聚焦自己的脑力去实验之。

为了以后的道路平坦一些,2012年应该有一个可以不清晰的规划:

  • 首先是保持学习的状态,花时间在自己感兴趣的事情上;
  • 其次是提高专业技术水平,有几个部分:
    1. 一门精通的语言,想像一下自己学的太杂了,从html javascript 到php python mysql java,现在开始专心研究golang,因为它是一门通用性较强的语言,且语法较符合我的背景;
    2. 网络通信知识,在互联网干了这么多年,网络通信的知识相对贫乏的太多,只是能模糊知道tcp http 的基本意思,以后必须得掌握具体的内容;
    3. 数据存储,一直在做高级的开发,低层的存储一窍不通,比如有一个大文件,怎么修改指定位置的内容?
    4. 各操作系统的API,包括windows ios android linux mac等系统的常用api
  • 完整目标的实现方案和步骤;

为了做到这些,很多东西是要限制的,比如看电视、上网、上班花的精力。还有必须做到的,多看相关书,去深入学习。

为了更为长远的未来,在这一年要夯实基础,努力!