作者: admin

  • 近期的一些技术新闻

    我在《敏捷之旅2011大连站暨QClub大连站2011年第三期》上跟着凑热闹,也有一个关于GAE的session,大连的朋友欢迎捧场。

    http://agiletour.cn/dalian/

     

    IronPython2.7.1发布了,写了一个关于IronPython的PPT,大家可以看看,蜻蜓点水介绍一下DotNet下使用IronPython。

    http://www.slideshare.net/ak47/python-with-dot-net-and-vs2010

    IronPython使用Sqlite.net

    http://code.google.com/p/csharp-sqlite/

    http://stackoverflow.com/questions/3513981/using-sqlite3-with-ironpython-2-6-for-net4

     

    如果想在Windows下使用Lua的整合安装包,除了Lua for Windows,可以试试这个Idle编程一样,是Lua的变体。

    http://idle.thomaslauer.com/

     

    一个跟Lua游戏开发相关的(love2D)github账号

    https://github.com/BlackBulletIV

     

    generic socket control mechanism for large numbers of connections 

    https://github.com/icgood/ratchet

     

    有性格的Mike Pall(LuaJit作者)强文,关于他碰到的俩搞笑开发故事

    http://article.gmane.org/gmane.comp.lang.lua.general/84483

     

    斯坦福大学一个学习视频,关于Web应用开发

    http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=WebApplications

     

    有人在LuaList问能否把Lua GC摘出来,不是很容易,不过IOLanguage有

    http://www.dekorte.com/projects/opensource/libgarbagecollector/

     

    (Python)同步tweets和feeds更新到facebook/新浪微博/腾讯微博/豆瓣/人人/饭否等

    https://github.com/lyxint/wet

  • 我的code review规则

    1) 是否有语法错误,编译错误,编译警告。
    做法:下载最新代码,将编译警告级别提升到最高,检查output信息。
    
    2)是否符合需求,完成requirement文档要求的内容,不能多,也不能少。
    注意:即使发现有问题代码,如果与需求关联不大,不要涉及。
    应该让每次enhancement和bug fix最简洁,牵涉范围最小,影响到组件最少。
    
    3)是否符合编码规范:
    	a) 注意等号前后,操作符前后的空格和tab,行尾不要有多余空白字符
    	b) 注意命名规范,少用缩写形式,少用2/3/ex这种增强版
    	c) 对于循环局部变量,注意少用I,j在较长代码中(三四行OK)
    	d) ..
    
    4)代码美感
    	a) 不能有嵌套的if-for-switch-while出现
    	b) 不能有非常复杂的条件判断表达式(用于if-while之类)
    	c) 足够的注释,对于复杂操作,对于条件判断,可以注释。尽量让代码自己说明自己。
     	d) 如果代码不能在短时间内理解,或者稍作解释就可以理解,应该看看能否有更简洁的方式
    	e) 函数不要过长,不能超过一屏显示,最多不应该超过2-3屏。
    	f)经常问自己是否有更好的办法,更简洁明了的代码形势
    	g) 一个函数只做一件事,如果需要多个功能,再写一个
    	h) 少用boolean 作为参数切换功能,用withXXXcase, usingXXXcondition函数名字来自说明。道理同g)
    	i) 少用重载功能,没必要类似函数用一个名字,既然有不同函数实现,那么应该有不同条件描述,可参考h)的命名
    	j) 抽象层次不要过多,不要过早和过多考虑设计模式/抽象/抽取通用功能这些事情,这些在代码重构阶段可以修改调整。
    
    5)逻辑
    	a) 参考上一条4),基本上有足够美感的代码,逻辑上问题都不大
    
    6)杂项
    	a) 性能的关注应该基于profiling data,而不是猜测
    	b) 代码的正确与否,不是基于猜测而是基于test case
    	c) 扩展性不需要考虑过多,有一点点就好
    	d) 时时问自己,这个函数/变量/逻辑判断/.. 有没有必要,是不是可以删掉的
    	e) 时时问自己,如果不用手动测试,自动化测试自己这段代码,可以不可以?如何实现?(MEF or 数据界面分离… )可否通过脚本、工具自动化某些流程?
  • 新浪微博的不科学研究

    首先说明,这篇文字只是我个人的一些看法,借用问答形式展现,不具备什么科学性也没有详细的数据收集分析。

    我的新浪微博 http://weibo.com/sagasw

     

    微博现状?

    如果说网络产品,2011年最火的毫无疑问是微博,几大门户基本上都推出了微博产品,据我观察,基本上排名顺序是:新浪、腾讯、网易与搜狐不确定。新浪微博现在投入最大,宣传最火爆(不过也没有SB到购买春晚关键字的地步)。腾讯微博还是依托它庞大的用户群,但是腾讯微博的缺点也很明显,就是马化腾没有像新浪管理层那样全力投入。没有全力投入,现状就是腾讯还有其它类似微博的产品,比如腾讯空间说说,这就像自己跟自己打架。

     

    微博是什么?微博能做什么?

    微博是什么,很难说清。你可以把它作为一个新闻来源,现在各种突发事件,很快就会在微博上爆炸式传播。也可以把它作为个人自言自语、自怜自爱的一个日记本,只不过这个日记本是公开的。或者可以把它当做微型的论坛,评论回复发言各种功能也都有。

     

    微博的特点?

    使用微博的最大特点是快捷方便。借助智能手机上面的程序(用fashion的方式叫app),拍照、上传、写两句话一分钟搞定。在博客时期,徐静蕾就有类似微博化的倾向,几句话就是一篇博客。但是博客特点是有内容才好看,太短了就像是敷衍。而微博可以简单到就是一句话,一个字甚至就一张图片。

    现在新浪微博上的话题大致分成几种:心灵鸡汤,名人名言类的,抚慰心灵类的,冷笑话什么的,这一类将来会慢慢减少,但是现在还是挺多的。其次是朋友聊天型的,也就是把微博当成聊天工具来用,另外自言自语当成日记使用也是一种变型,我们可以称之为社交性内容。再就是讨论问题的,有些能争论到骂街,但是微博的短小决定了很难争论出什么一二三来,到最后就是各自回家吃饭罢了。再有就是新闻类的,把网站新闻或者文章链接贴上来,也许加上一两句评论,比如什么南方周末之类的媒体。

     

    前世今生?与Twitter比较?

    首先得说,微博不是新浪发明的,而且现在最火的也不是新浪而是twitter。我的Twitter账号是:http://twitter.com/sagasw

    twitter与新浪微博相比有如下特点:

    1)Twitter不排除删某些违法贴,但是新浪微博上删帖大多不是因为违法,这个不多展开说明。

    2)使用Twitter需要一定的技术手段或者需要身在国外,所以中文用户数量相比新浪微博差了几个量级,大多数Twitter上非政治言论几乎在新浪微博上有同步的内容

    3)现在新浪微博上的IT技术讨论已经超过Twitter,这也是因为用户数量导致的

    4)新浪微博多了很多花哨的功能,比如评论转发,比如微博群等等,但是评论和转发相比而言比较难区分,另外微群功能基本上是废的

    5)Twitter的API非常大方,但是新浪微博的API质量以及Quota都太小气了,而且所谓的微群功能还没有API

     

    微博为什么要140个字?

    140个字是一个很有意思的限定。这个设定来自Twitter的140个字限制,而Twitter限制来自手机短信140个字。但是新浪微博是140个中文字,而Twitter是140个英文字,换成中文其实是70个字,也就是一个正常短信的长度。但是新浪微博140个中文字其实就很奇怪,因为手机短信不可能一次发140个中文。

    但是140个字的限定,其实还有一些好处的。首先一点就是字数限制让内容变得简洁,跑题一下说,其实微博最好的问题就是古诗,比如五言七言,文字优美还表达了很深含义。如果想多写字,那简单啊,使用博客发长文章就好了。说到这里还得评论某个很搞笑的功能,就是把长文字变成一个图片贴上去,这功能太蛋疼了。字数限定的第二个好处是,大家都不必写长文字,所以几句话的自言自语也不会有人说什么,就是快餐一样的快捷,也不会期望有什么太深刻的内容。

     

    微博的营销策略?

    微博本身怎么赚钱是一个大问题,至少我现在没发现微博赚钱的方式,广告、话题营销都是其它Web载体用过的,很难说微博用了就会不一样。但是微博庞大的客户群以及更重要的微博人际关系,应该是可以挖出宝贝的。

    但是对于大多数需要服务的产品而言,建立官方微博已经是势在必行的事情了。学校、公司、政府机关、产品、个人都可以建立自己的品牌,回应粉丝的问题,广而告之发布各类信息、新闻、链接等等。先别想着用微博赚钱,把微博做一个广告载体或者是服务窗口,把人气旺起来。

     

    微博的不足?

    微博求快求关注度,以及话题的时效性,导致微博有些不足。话题本身求新求快,有时候很难保证话题内容的正确性,所以产生了谣言以及辟谣功能,有些是真谣言,有些。。。其次,为了吸引眼球,话题可能偏于低俗化,比如每篇必加上一张性感美图,但是与内容一点也不搭。或者是由于微博本身发的太快,导致某些”明星“的真性情真水平都表露出来,霸气侧漏了,实在不该。

     

    微博的发展?

    有人说新浪微博最终会把新浪拖垮,有人说Twitter估值过高,我一介屁民实在也没法看透将来如何。但是就如今的发展趋势来看,网络产品的趋势是:短小化(或者说快餐化)、移动化(便携化)、平民化、社交化,而微博就是最符合这个发展趋势的。就此来看,至少一两年时间不会有新的网络产品代替微博,我很看好微博发展。

    另外现在微博数据是一个很有意思的东西,因为微博内容相比博客或者是论坛,内容相对比较真实,所以数据应该可以挖掘出很多东西,针对这个社交特性可以做不少开发,不过我现在没想好能做什么,看各位高人的了。

  • C++工程实践 值语义–读后感及补充

    C++ 工程实践(8):值语义 http://www.cnblogs.com/Solstice/archive/2011/08/16/2141515.html

    由于近期一直不做C++,看着都有些陌生了,阅读速度并不快,而且C++这块实际上陈硕提到的方面,以前用得不多。但因为这里面很多概念与C#共通,所以也不难理解。

    下面是一些问题以及相关资料的补充。

    1)“标准库里的 complex<> 、pair<>、vector<>、map<>、string等等类型也都是值语意,拷贝之后就与原对象脱离关系”

    如果对C#的字符串类型稍有了解,便知道它们都有类似intern的机制,在Ruby中则为Symbol,另外微软BSTR类型也会做类似字符串驻留。目的都是让字符串字面值在内存中只有一份,使用者都指向同一份好了。

    稍做实验便可得知标准库中string是值语义。但是对于模版类型,比较有疑问,因为它们都不是完整类型,怎么说明是值语义?

    关于值语义,我这里也有一个解释,不一定对。对于值语义类型他们的拷贝是所谓的深拷贝(byte by byte),而引用类型常规拷贝是所谓的浅拷贝(shallow copy),只不过大家指向同一个引用。对于引用类型的取值也与值类型不一样,是先取引用地址,然后从这个地址取内容,相当于两个动作。

    关于shallow copy http://en.wikipedia.org/wiki/Object_copy#Shallow_copy

    2)“值语义,引用语义”。在C#中有值类型和引用类型,对照的更为明显一些。另外,在C语言中全部都是值语义,不存在引用语义。

    3)”Java 有 value object 一说,按(PoEAA 486)的定义,它实际上是 immutable object”。

    对于C#,值类型都来自于System.ValueType。

    4)另外与本文列举模版类比如vector不同的是,在loop中,C#中的范型类型可以修改其内容,但是修改以后再继续使用iterator就会跑出异常,因为对象中有个version信息,修改后会增加。而C++中没有这种机制,loop中修改vector内容是OK的。

    5)POD,Plain Old Data,类似C语言Structure这样。没有什么包装多态vtable这些东西,按byte拷贝没有问题。

    http://en.wikipedia.org/wiki/Plain_old_data_structure

    6)对象语义的 object 由于不能拷贝,我们只能通过指针或引用来使用它。

    C#所谓managed heap,专门存放对象语义的object实例。

    7)“一旦使用指针和引用来操作对象,那么就要担心所指的对象是否已被释放,这一度是 C++ 程序 bug 的一大来源”.

    个人感觉这是本文中工程实践味道最浓的部分。对象互相通知生存状态变化,是很麻烦。如果你再用个object pool机制,那就更麻烦。

    8)一个 smart pointer 应该是 weak reference,否则会出现循环引用,导致内存泄漏

    在C#中也有weak reference机制,保证可以观察对象生存状态,又不至于影响到GC.

    9)SGI Assignable concept

    http://www.sgi.com/tech/stl/Assignable.html

    10)值语义是C++语言的三大约束之一

    这里面的三大约束,没找到来源(update http://blog.csdn.net/Solstice/article/details/5455835),在wiki上http://en.wikipedia.org/wiki/C%2B%2B

    Philosophy. In The Design and Evolution of C++ (1994), Bjarne Stroustrup describes some rules that he used for the design of C++:
    ... ...

    11) RVO返回值优化

    http://en.wikipedia.org/wiki/Return_value_optimization

    ==================================

    从这篇文章以及我个人感受而言,要么用语意定义更为明确,语言更为规范的C#做面向对象开发,要不使用C语言来开发。C++真是有些鸡肋。如果用C++,也可以把它学好以后,在工作中当成Enhanced C来使用。

     

     

     

     

     

     

  • 关于线程Thread、协程Coroutine、生成器Generator、yield资料

    关于Green Thread(绿色环保线程)、Native Thread,以及线程的一些普及问题,下面这个presentation最为翔实

    http://www.slideshare.net/tmm1/threaded-awesome-1922719

    另外毫无疑问要看看维基百科上的这一条 http://en.wikipedia.org/wiki/Thread_%28computer_science%29

     

    如果你像我一样也喜欢Lua这个支持协程http://en.wikipedia.org/wiki/Coroutine (或者我们可以称之为Green Thread)特性的编程语言,这一篇论文非常值得参考,印象中这一篇论文以及《revisiting coroutine》介绍了为什么Lua不实现抢先式以及continuation的设计思路 www.inf.puc-rio.br/~roberto/docs/corosblp.pdf  http://www.inf.puc-rio.br/~roberto/docs/MCC15-04.pdf

    这一篇教程可以帮助你了解Lua协程的基本用法http://lua-users.org/wiki/CoroutinesTutorial 

    有人也许质疑Lua的协程功能不支持C函数扩展,那么可以试试大名鼎鼎的LuaJit作者出品的Coco http://coco.luajit.org/ 

    喜欢中文资料的可以参考TimYang这篇介绍http://timyang.net/lua/lua-coroutine/ 

    另外如果想实战使用的可以试试copas http://keplerproject.github.com/copas/manual.html

    我也有翻译一篇Lua协程与Python Generator比较的文字 http://sunxiunan.com/?p=1654

    还有使用Lua协程实现斐波拉切 http://sunxiunan.com/?p=1689

     

    关于Native Thread,还有一个词语叫做Fiber纤程,意思是比纤程更细微轻量,好像Pthread和Windows都有支持。印象中看到过一篇文字说C#的yield就是利用Fiber实现,这个问题先放着。http://en.wikipedia.org/wiki/Fiber_%28computer_science%29 另外也有人称之为绿色环保线程 http://en.wikipedia.org/wiki/Green_threads

    Erlang也有类似术语,叫做Green Process,大致意思差不多(?)。

    Python相关概念http://en.wikipedia.org/wiki/Generator_%28computer_programming%29

    前面提到了一个continuation概念 http://en.wikipedia.org/wiki/Continuation 不过好像前面Lua论文里面提到过,设计一个正确continuation的程序太复杂(就我看来能正确理解coroutine这种简化级别continuation的都不容易),所以很少有程序语言支持(smalltalk?)。