[转载]Twitter到底有多大?

在CNBeta上看到的数据,很有意思。

另外前些天看到新闻报道,巴菲特认为那些没有上市的社交网站价值被高估了,有兴趣可以去查查。

当然,第二句话和360没有关系。

1532230482217114

发表在 博客, 唠叨, 网络 | 标签为 , , | 留下评论

WCF 基础实例实现的注意细节

clip_image001

小心添加多个Service的时候出现配置文件重复,会导致不能调用。

多重绑定

clip_image002

手动配置 App.config文件

clip_image003

WCF简单上手也不是很难,照着入门书敲一遍就行。

只是深入学习要了解的知识点比较多,例如 SOA,SOAP ,基础协议 net.TCP, 命名管道等等,托管细节,安全实现都需要很多的知识面。

发表在 C#, Windows, 编程 | 标签为 , | 留下评论

深入理解计算机系统——第五章小结(1)

中午装Server 2008, 顺便找来CS:APP看了一会。以后弄创新杯的事情,中间抽空看一看吧。

5.1-5.7 描述了一个内容,即通过代码优化来不断减少CPE(cycles per element, 每元素的周期数)度量

 
首先要理解CPE 
例如 1.4GHZ表示CPU频率 1400兆赫兹,而一个2GHZ的CPU时钟周期为0.5纳秒。

详细的解释看这里:http://www.seenthewind.com/?p=1088
下面两个程序

void vsum1(int n)
{
    int i;
    for (i = 0; i < n; i++)
       c[i] = a[i] + b[i];
}


void vsum2(int n)
{
    int i;
    for (i = 0; i < n; i+=2) {
      c[i] = a[i] + b[i]
      c[i+1] = a[i+1] + b[i+1]
    }
}

其中,vsum1大约消耗 80+4.0n,而vsum2大约消耗83.5+3.5n。 即 80~84的常数周期加上 3.5或者4.0的线性因子。

而这时候,我们我们的CPE定义为,vsum1为 4.0, vsum2为3.5.


接下来谈一谈代码优化。

1. 消除循环的低效率。

    for (i = 0; i < vec_length(v); i++){

    // ....
    }

    将vec_length(v)移出循环式,改为常量,我们一般成为代码移动(Code motion)。可以降低10~20的CPE.
    也许你会觉得并不太明显,但是如果是

    for (i=0; i < serlen(s); i++) {
    // ....
    }

    这样的话,在长度为262144的字符串时,整整需要3.1分钟完成对字符串的大小写反转,而使用常数只需要0.006秒。

2. 减少调用过程

    如果出现在循环中调用检查是否越界的函数。如:

    for (i = 0; i < length; i++) {
    //....

    get_vec_element(v, i, &val); // 获得v向量中第i位元素,存入val
    
    }

    可以改为

    data_t *data = get_vec_start(v);

     for (i = 0; i < length; i++) {
    //....

    *dest = *dest OPER data[i;]
    
    }

    虽然看起来会有些损害模块性和抽象性,但是改进最高可以达到3.5X(即3.5倍,X表示相对性能 = Told/Tnew)

3. 消除不必要的寄存器引用。

    开启 -o2开关时,编译器会主动帮助你优化代码,但是大部分时候他会严格保证程序的正确执行,包括某些特殊情况
    (比如你想让两个指针指向的值相加,但有时你传入了相同的指针)。

    这种时候我们需要稍微研究机器码,分析不必要的寄存器引用,可以优化代码。

    例如

    movl (%edi), %eax
    imull (%ecx, %edx, 4), %eax
    movl %eax (%edi)
    incl %edx
    .....

    截取自以下代码的一部分:
    for (i = 0; i < length; i++) {
    // ....
    *dest = *dest OPER data[i];

    }

    汇编指令1,3对存放在dest中的值频繁读写,看上去是种浪费,所以我们改为:

    data_t x = IDENT;
    for (i = 0; i < length; i++) {
    // ....
    x = x OPER data[i];

    }
    *dest = x;


   得到的汇编码:
    imull (%eax, %edx, 4), %ecx
    incl %edx


    这样的好处在 data_t 类型为浮点数的时候尤其明显。CPE下降了100~120。

    将会在下一小结继续讨论这个问题。


发表在 C, 编程, 读书 | 标签为 , | 留下评论

使用VIM修正网络文章格式

-1. Vim 替换 :%s /\n\n\n / \r\r   把隔两行换成隔一行,至于为什么前面是\n匹配,而后面写\r , 从网上下载的文本会有全角的回车符,而\n可以匹配,但是在vim里替换成\n就变成^@这样的符号,使用\r正常。

0. 余下正文,有些意思,不过在折腾装服务器,就没弄了。

 

继续阅读

发表在 网摘 | 标签为 , | 留下评论

密码保护:我不明白。

这是一篇受密码保护的文章,您需要提供访问密码:

发表在 唠叨 | 标签为 , | 要查看留言请输入您的密码。

[3月26日] 近期小结

1. 最近又开始翻《编程珠玑》, "72定律" 表明:如果 x*y = 72 那么 x%的增益进行y时间差不多会翻倍。

打个比方,如果你在银行里存入 1k RMB, 利息 8%, 那么9年后你差不多有2K的存款。

粗略计算放在工程角度很有用处,例如 : N =10时,时间消耗 K=1k, 而 if  N + = 1,K = (1+ 12%) * K,那么也就是说,当 N+=6 ,K 差不多要翻倍,而 N+=60时,K 约等于 1000 * K  (2^10 = 1024 )

2. 去参加了一回笔试,以后笔试要认真做了,不能一时想不起来的就连蒙带骗的,实在不靠谱。

3. 配好了 Gvim for Windows, vim的配置文件依旧还是那么强大..

4. 开始看Python, 但是却没有比较想用脚本做的事情,琢磨下,看看有什么需求,也许我只是还不够懒。

5. 去上了摄影课,外出实习拍樱花。(PS: 我觉得人拍的倒不错…)

6. 申请俱乐部的活动室失败。

7. 后天就出 Windows Phone 7 的初赛成绩了。

8. 去霸面了..

9. 走的路不少,脚也有些疼,但是怎么吃饭就吃的比他们都少点点呢。。

10. 想买单反 囧。

11. 就到这里吧。

发表在 唠叨 | 标签为 | 留下评论

[笔记]Python 简明教程(续)

1. 记住,脚本的名称总是sys.argv列表的第一个参数。注意,Python从0开始计数,而非从1开始。

2. 每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行,我们可以进行相应的恰当操作。

3. shoplist = ['apple', 'mango', 'carrot', 'banana']

4.想要删除列表中的第一个元素,使用del shoplist[0].

5. 元组和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。

6. zoo = ('wolf', 'elephant', 'penguin');  print(len(new_zoo))

7. print '%s is %d years old' % (name, age)

8.   键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }

9. for name, address in ab.items():
    print 'Contact %s at %s' % (name, address)

10. if 'Guido' in ab:

    print "\nGuido's address is %s" % ab['Guido']

11. 这样,shoplist[1:3]返回从位置1开始,包括位置2,但是停止在位置3的一个序列切片,因此返回一个含有两个项目的切片。类似地,shoplist[:]返回整个序列的拷贝。

12. 索引同样可以是负数,在那样的情况下,位置是从序列尾开始计算的。因此,shoplist[-1]表示序列的最后一个元素而shoplist[-2]抓取序列的倒数第二个项目。

13. 给Perl程序员的注释
记住列表的赋值语句创建拷贝。你得使用切片操作符来建立序列的拷贝。 mylist = shoplist[:]

14. startwith方法是用来测试字符串是否以给定字符串开始。in操作符用来检验一个给定字符串是否为另一个字符串的一部分。

15. find方法用来找出给定字符串在另一个字符串中的位置,或者返回-1以表示找不到子字符串。str类也有以一个作为分隔符的字符串join序列的项目的整洁的方法,它返回一个生成的大字符串。

发表在 Python, 编程 | 标签为 , | 留下评论

[笔记]Python 简明教程

1. (-5+4j)(2.3-4.6j)是复数的例子。

2. Python允许你处理Unicode文本——你只需要在字符串前加上前缀uU。例如,u"This is a Unicode string."

3. 给C/C++程序员的注释
     在Python中没有专门的char数据类型。确实没有需要有这个类型,我相信你不会为此而烦恼。

4. 给正则表达式用户的注释
     一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。例如,后向引用符可以写成'\\1'r'\1'

5. 标识符名称是对大小写敏感的。

6. 事实上,我 从来没有 在Python程序中使用过或看到过分号。

7. 空白在Python中是重要的。事实上行首的空白是重要的不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。

8.  3 ** 4得到81(即3 * 3 * 3 * 3)

9. 2 * 3得到6。’la’ * 3得到’lalala’。

10. ~5得到-6。 ~x = -(x+1) PS:原文中写错

11. 短路计算存在

12. Lambda表达式 运算优先级最低

13.  ->例如,你想要让程序做一些决定,根据不同的情况做不同的事情,例如根据时间打印“早上好”或者“晚上好”。

         ->不,我不想这样,这样看起来傻透了。

14. C#程序员会注意到Python的for循环与C#中的foreach循环十分类似。

15. 记住,else部分是可选的。如果包含else,它总是在for循环结束后执行一次,除非遇到break语句。

16. range(1, 6) 是 1, 2, 3, 4, 5

17. shoplist = ['apple', 'mango', 'carrot', 'banana'] 他可以使用 sort, del, append 等控制

18. 你可以使用同一个global语句指定多个全局变量。例如global x, y, z

19. 一旦x标记为global, 则对它的操作都是会实际对原先的x进行的

20. 例如,def func(a, b=5)是有效的,但是def func(a=5, b)无效 的。

21. 关键参数  func(c=50, a=100) 由于我们不必担心参数的顺序,使用函数变得更加简单了。

22. 假设其他参数都有默认值,我们可以只给我们想要的那些参数赋值。 

23. 文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。 强烈建议 你在你的函数中使用文档字符串时遵循这个惯例。

—————— TODO 第七章 函数 DocStrings

发表在 Python, 编程 | 标签为 , | 留下评论

[转载]每天早上叫醒你的不是闹钟,而是梦想

励志是一支海洛因,让你每一天醉生梦死地沉迷其中。

每个人在成长中都经历过这种事——

听完一场激动人心的励志讲座,回去后通宵背单词。

然而励志是一种精神毒品,

如同药物一样,在血液的浓度中达到峰值后开始下降。

这种亢奋状态一般会持续三天左右。

三天之后,一切照旧。

该上网的上网,该DOTA的DOTA。

所以人最好是每三天听一场励志讲座。

这确实不可能实现。

所以你要给自己各种不同的励志。

那天早上闹钟响,看看表,7:30,昏昏沉沉。

我开始闭上眼睛想自己为什么要早起。

是为了那匡扶正义的梦想?

还是为了让世界变得更美好一点?

还是在这“大道既晚,人情万端”的时代坚守自己?

是,都是。

于是我清醒了,起来了。

但是第二天早上如果还是很疲劳,想这些还有没有那么好的效果?

肯定没有那么好的效果了。

因为励志也像是抗生素,长期使用同一种类的会产生耐药性。

所以第二天早上,拿出手机把QQ开了。

朋友的头像亮着,可能也是刚起。

然后在心里狠狠抽了自己一耳光。

因为他们的头像照片是我帮拍的,手底下按着一部单反。

我心说,MD不早起读书,以后喝西北风去啊?

很自然的,立刻清醒地坐起来了。

第三天,不用我说了,再看见男(女)朋友的头像还有没有用?

没用了。

看到我妈的头像亮着呢。

又是狠狠地一耳光抽在心里。

MD不早起读书对得起你妈给你那么多钱买衣服买新鞋吗!

起了。

所以说励志是需要每天都换新花样的,

你只有一本《赢》或者《卡耐基全传》或者什么《李开复给谁谁谁们的信》是不够的。

这支精神鸦片要永远注射下去,直到你的身体习惯它,直到奋斗变成你的习惯。

李敖说怕吃苦吃苦一辈子不怕苦吃苦半辈子,(不会断句的自己百度)

但我确实佩服的是那种已经可以不再吃苦依然从未有一天改变曾经的工作状态和习惯的人。

确实,这个世界,

可怕的不是那么多人比你努力,

而是那些比你牛逼几倍的人依然比你努力。

睡不够又能怎么样,

饿一两顿又能怎么样,

死不了。

每天晚上疲劳地坐到椅子上时,

才觉得真真切切地过了一天。

顺便说一句,

尽管努力必不可少,

但它只是个必要条件而不是充分条件

人生最重要的并不是努力,

而是方向。

不是每个人都注定成功,

信念就是,

即使看不到未来,

即使看不到希望,

也依然相信,

自己错不了,

自己选的人错不了,

自己选的人生错不了。

祝你们的每一天,都有新的鸦片,都还记得自己的理想。

发表在 唠叨, 网摘, 网络 | 标签为 , | 留下评论

[3月12日]近期小结

转眼又到了樱花开的时候。

国软的实验室在大家的折腾下终于落成了,接下来的好几天,是该好好补一些东西了。

明天看完樱花,就开始最后的奋斗吧,已经走到这里,再辛苦也不算什么的。

记一下最近的一些事情:

1. 向FM大大请教了面试的经验,发现还是有很多要准备。

2. 开始强迫自己早起,这样晚上不知不觉就会觉得很困。

3. 每天走的路都很多,刚开始脚上有水泡,慢慢的就好些了,体力应该也会好些的吧。

4. 给101实验室装了网线和路由,虽然自己带的寝室以前的路由有点小问题,不过还好。可以通宵。

5. 开始看APUE《UNIX环境高级编程》(Advanced Programming in the UNIX Environment )

6. 看完了《浪潮之巅》,正在看《1984》。

7. 查看了自己的学分,公选, 专选 一本满足。

 

之后的一些安排:

1. 认真找点事情做吧,比如继续写OS,就是挺好的一个方法。

2. .NET下面有个WCF架构,基本的概念是提供一个远程服务器端API调用协议,只不过整合很多M$已有框架(MS就喜欢这样..),另外至今还是没有了解想Facebook一类的SNS网站的机制和API提供的方法。

3. 多关心现在在你身边的人。

4. 以前我一直在担心,我会不会变的和学院里曾经的学长大牛一样的厉害,很担心,可是这样总是想着没什么效果的吧,既然想明白了,就多做些事情吧。

5. 以后每天都要早起,现在的时间,用和不用会有很大区别。

6. 夏天要来了吧…(鉴于武汉的春天只有俩星期)

7. 这学期要完整的任务,专业必修,ImageCup, 实习。

8. 最后,找不到事情做的时候把以前的书拿出来看看吧。

 

考虑到低调的发在Blog上,最后履行偌言的不到1/3,这次也发到豆瓣和人人上去。

发表在 唠叨 | 标签为 | 留下评论