博客

  • 新浪微博的不科学研究

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

    我的新浪微博 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?)。

  • DotNet程序员面试问题评估

    欢迎各位Dotnet程序员回答。不需要回答出具体问题,只要标记大致程度即可。
    1什么是DotNet的CLR? CLR作用是什么?

    A不知道     B知道很少    C知道一些    D非常了解

     

    2 DotNet中如何使用Win32的DLL?(没有reference可以添加)

    A不知道     B知道很少    C知道一些    D非常了解

     

    3 C#使用什么关键字实现可变个数参数(variable number parameters)?

    A不知道     B知道很少    C知道一些    D非常了解

     

    4 C#中的weak reference是什么?用于什么场合?

    A不知道    B知道很少    C知道一些    D非常了解

     

    5 C#中的using dispose模式是什么?用于什么场合?

    A不知道     B知道很少    C知道一些    D非常了解

     

    6 C#中Garbage Collection是什么?简介GC的internal工作方式(如果你是微软开发人员,如何实现GC)?

    A不知道     B知道很少    C知道一些    D非常了解

     

    7 C#中的关键字as, yield, out/ref, virtual/abstract/override?

    A不知道    B知道很少    C知道一些    D非常了解

     

    8 Strong name signature是什么?有什么用?

    A不知道     B知道很少    C知道一些    D非常了解

     

    9 字符串intern暂留机制是怎么一回事?

    A不知道     B知道很少    C知道一些    D非常了解

     

    10 Windows平台下多进程通讯方式?越多越好

    A不知道     B知道很少    C知道一些    D非常了解

     

    11 Delegate, Event, Action, Func都是什么?

    A不知道    B知道很少    C知道一些    D非常了解

     

    12 MVC, MVP, MVVM设计模式?

    A不知道     B知道很少    C知道一些    D非常了解

     

    13 除了工厂模式和单例模式,列举并且简单介绍你知道的设计模式以及应用场合?

    A不知道     B知道很少    C知道一些    D非常了解

     

    14 C#中overload和override如何实现?

    A不知道     B知道很少    C知道一些    D非常了解

     

    15 接口和抽象类有什么区别?都应用在什么场合?

    A不知道     B知道很少    C知道一些    D非常了解

     

    16 LINQ是什么?写一个简单的LINQ语句?

    A不知道     B知道很少    C知道一些    D非常了解

     

    17 C# Lambda是什么?写一个简单的lambda?

    A不知道     B知道很少    C知道一些    D非常了解

     

    18 C#中class与struct区别?

    A不知道     B知道很少    C知道一些    D非常了解

     

    19 是否听说过或者了解MEF, Unity, Prism?

    A不知道     B知道很少    C知道一些    D非常了解

     

    20 面向对象设计思想/原则有哪些?(SOLID)

    A不知道     B知道很少    C知道一些    D非常了解

     

    21 如何实现一个plugin插件可扩展系统?

    A不知道     B知道很少    C知道一些    D非常了解

     

    22 DotNet中的LinkedList与SortedList有什么不同?内部如何实现?

    A不知道     B知道很少    C知道一些    D非常了解

     

    23 设计一个字符串类(不能使用类库中的string class)?简要说明关键方法

    A不知道     B知道很少    C知道一些    D非常了解

     

     

  • 大连InfoQ活动QClub记事-35岁程序员这个坎如何进行职业规划

    2011年的7月23日必定会成为一个令人难忘的日子,因为这一天发生了太多神奇的新闻。不过这里想说的是大连IT从业者、程序员的一次聚会,是由InfoQ组织的QClub。

    (下文中提到的推,是指的twitter,而微博指的是新浪微博)

    大概一两个月之前,有人在微博上提醒我,@侯伯薇 会组织一次大连的QClub活动。这个事让我感觉很兴奋、很开心。

    作为程序员,会经常被人搭上各种各样固定的tag,比如“宅”,比如“闷”、“无聊”,“不会沟通”,“害羞”,“冷笑话”等等。QClub不能说是宅男们的反击,而应该说是程序员期待与人面对面沟通交流的那种感觉。在这个时候,一个名字、一个ID会变得更鲜活生动,更加有生命力。

    早上起来发现天气极为恶劣,@gamtin在推上说,也许又要像去年Python用户组那次(大连Python用户组活动简记)的天了,好在接近中午的时候雨渐渐小了,而且天气也开始放晴。侯伯薇在微博上发消息说,他已经出发去会场准备了。

    我也提前一小时出发,到的时候大概是一点左右(定的是一点半开始),屋子里还没有几个人,前面有两三个人在准备电脑神马的,由于去的早,InfoQ的海报也还没有放在会议室外面,我是好一顿撒磨(大连话,意为探头探脑的看)才敢进去,吼吼。

    过了十几分钟,侯伯薇与欧兰辉 @ouland 一起到了,侯伯薇看上去比网上感觉的要年轻,这也是搞技术的最大好处啊!!我们简单交谈了几句,提到了这次InfoQ对于大连程序员以及搞IT方面的朋友,真是极为难得。侯伯薇提到了百年人寿对本次活动提供赞助。

    IMG_20110723_141051这次QClub主要是三个议题,由于是架构专场,演讲议题都与架构有关系。首先是时代麦微(follow5)的CTO张爽介绍了follow5这个微博平台的架构。个人感觉由于不是太了解听众群兴趣、层次,张爽的presentation偏向于普及,我比较感兴趣的问题涉及的不多,也许是不方便,具体的数据也不多(比如具体架构选型,神马Linux用了神马开源项目,数据流量多少,哪个微博同步量更多,基于用户微博是否有二次数据挖掘的想法,如何盈利,下一步计划等等)由于我也是一个Open话题的主持人,所以就没法分身与张爽进行讨论。其实大言不惭的说一下,我对另外两个讨论话题或多或少都有涉及,比如微博同步,我有写过一个twitter同步到新浪、腾讯微博的小程序,用了GAE;再比如NodeJS,那件让人羞射的T恤就是我研究写文章得来的哦。

     

    第二个话题是侯伯薇主讲的“选择合适的架构”。其中我觉得很关键很同意的观点就是,架构本身不是一成不变的,要根据具体的情况来做平衡(trade off)抉择,架构师之所以值钱,不是因为他们知道架构如何如何,而是他们知道在某种情况下应该选择什么架构、不应该选择什么架构技术,而且能够用代码把这种技术的可能性show出来。

     

    第三个议题我这里也有参与,准备的话题是“35岁程序员这个坎,如何进行职业规划职业发展”,没想到参与的人也不少。欧兰辉在开始帮我撑了一会场子(后来这家伙跑到别的讨论组去了)。为什么要选这个话题?其实大家搜索一下各种招聘网站或者是各种博客就能发现“35岁为程序员应聘上限”“35岁以后不写程序,要搞管理”“35岁以后的程序员没有前途”之类的言论比比皆是。35岁以后就必须转型?不能搞技术?不是做管理就不行了?这次讨论组就想跟其他朋友一起探讨一下这个问题。

    首先让大家做了一个简单的自我介绍,发现做了几年、接近35的开发者还不少,也有刚毕业入职的学生对前途比较迷茫,还有人对程序员这个职业很迷惑不知道该如何走,另外也有人关注程序员这个群体的健康问题。关注的点都非常有价值,我把问题记在便签上,后面慢慢讨论。

    要说明的是,我提到的35岁程序员,指的是在这个年龄段可能是Senior Developer,可能是Leader或Manager,也可能是架构师,也可能是业余的移动App开发者;这里说的程序员,指的是35岁以及35岁以后还有兴趣继续编程,而且在工作中也能够继续编程,而且以编程为乐趣的IT从业者。如果把程序员局限在某个头衔下,天天看着式样书敲程序的码工(coding worker)那我也不同意35岁的时候还是这样。

    在讨论中我提出一个观点,在总结的时候也是这样说的,就是程序员这个职业,在中国现阶段,赚钱方面比其他行业可能还要差一些,如果坚持做技术可能会有类似的问题。很多人选择程序员作为职业,是因为自己喜欢编程,喜欢编程中能控制一切的感觉,喜欢与电脑打交道的直接(而不是管理团队要考虑的麻烦事),或者说,编程就是一种业余爱好。如果觉得大连程序员收入低,可以试试北上广,或者试试肉身翻墙,学英文学日文的翻墙出去有啥用?我们这样搞技术的技术移民那就相对容易多了。另外也可以试试与志同道合的朋友一起搞搞App开发,虽然说现在不是那种一个人包打天下的时代,但是两三个高手做出一个应用程序,也不是不可能。最重要的还是要经营自己的品牌,把自己在这个圈子里变得知名,把技术功底打得扎扎实实,这样才有比较好的前途有比较多的选择方向。

    有些朋友选择程序员,是因为就学的这个专业,也找不到别的好工作(类似工资水平下)。这时候我的建议是,在30岁之前考虑你的转型问题,30岁左右开始做转型。程序员在现阶段的中国,只能算是一个中等甚至中等偏下的行业,它的长久发展可持续性在中国体现的非常不够(在日美这些地方就不一样了)。所以说,但你仅仅为了养家糊口而选择成为程序员,要么早点考虑转行,要么早点出国多赚钱镀金。

    大家讨论了一个多小时,在5点多的时候各位主持人做了总结发言。然后会议结束。

    这次QClub可以说是一个胜利的大会,一次奋发向上的大会,一次令人斗志昂扬的大会,一次红旗飘飘的大会。。。。。。