说说新浪微博的SNS化
新浪微博从2011年7月开始进行SNS化,至今已有半年时间。究竟效果如何,目前尚不得而知。笔者欲做个马前炮,预言一下:新浪微博SNS化是自寻死路。理由如下。
精选技术长文、实践记录与系统化阅读
低噪声、高可扫读;标题、摘要、来源、标签一目了然。
采集自各技术站点的近期文章。
新浪微博从2011年7月开始进行SNS化,至今已有半年时间。究竟效果如何,目前尚不得而知。笔者欲做个马前炮,预言一下:新浪微博SNS化是自寻死路。理由如下。
某服务器上一个 cron job 是 shell 脚本调用 Java 程序,最近老是报 Segmentation fault, 每次看见此信息 /bin/sh: line 1: 4285 Segmentation fault java ... 总觉得无处下手,bash 的问题?Java 版本不对?信息量太少了。其实遇到这种事情不能谎,表面上没有信息一定要挖出信息来。今天仔细一看,这个脚本把标准输出重定向到一个日志文件去了,于是去看日志。这个程序的主体是对一个信息列表做循环,恰好在每个循环的关键部分开始前、结束后都会写一条日志。其目的是为了计时,不过正是这两条日志让我很快找到了错误缘由,因为发现日志文件的末尾只有一个开始前的,说面在这个循环的处理过程里面发生了 Segmentation fault. 找出程序的源代码,发现循环里面调用的方法有一个是递归的,情况就开始明朗了,猜测就是递归
HTML 5的
把验证码存储在Cookie中 一般来说,我们会把验证码的值用Session存储起来,通过对比用户提交的验证码和Session中的验证码,就可以知道输入是否正确。由于Session会占用服务器资源,我曾经想过是否可以把验证码的值加密后存储在Cookie中。不过事实证明,这只是异想天开罢了。 假设验证码的值是a,通过sha1加密后得到的值为b = sha1(a),并且把b存储在Cookie中。而用户提交的验证码值为c,通过判断sha1(c)是否与b相等,可以知道输入的验证码是否正确。然而,Cookie是受客户端控制的。如果用户事先通过肉眼看到验证码的值是a,又从Cookie中得知此时的加密值为b,那么,他只要在提交前把Cookie的值修改为b,提交的验证码值为a,就可以永远通过验证。
这篇文章是漫话中文分词算法的续篇。在这里,我们将紧接着上一篇文章的内容继续探讨下去:如果计算机可以对一句话进行自动分词,它还能进一步整理句子的结构,甚至理解句子的意思吗?这两篇文章的关系十分紧密,因此,我把前一篇文章改名为了《漫话中文自动分词和语义识别(上)》,这篇文章自然就是它的下篇。我已经在很多不同的地方做过与这个话题有关的演讲了,在这里我想把它们写下来,和更多的人一同分享。 什么叫做句法结构呢?让我们来看一些例子。“白天鹅在水中游”,这句话是有歧义的,它可能指的是“白天有一只鹅在水中游”,也可能指的是“有一只白天鹅在水中游”。不同的分词方案,产生了不同的意义。有没有什么句子,它的分词方案是唯一的,但也会产生不同的意思呢?有。比如“门没有锁”,它可能是指的“门没有被锁上”,也有可能是指的“门
有三种流行的产品要素“动态流、瀑布流、奖章”,我称之为产品三俗,容易因其流行而被滥用。PM选择它们有可能是因为“时髦”“标配”“别人都在用”,这很糟糕。恰好动态流和奖章我都折腾过,多多少少吃过一点亏,总结如下。▎动态流动态流给产品带来的好处很多,比如以用户为节点来实现近乎于完美的信息分发网络。但在采用这个设计之前,首先要理解,在用户层面上其本质是“订阅”,而用户接受动态流的根本原因是,订阅的方式提高了他获取优质内容的效率。我们来看看用好动态流的一些前置性条件:-用户感兴趣的订阅源数量庞大,挨个查看特别麻烦,更适合聚合浏览-订阅源不仅数量庞大,还很难分类管理,更适合用户自定义订阅-订阅源能有效地自行管理内容输出质量,不会大量掺入杂质-用户容易发现自己感兴趣的订阅源-用户登录与发布的频度越高,就越适合动态流,反之则效果大量缩水对应动态流的反面,即内容的公共展区,在UGC产品里,论坛是最佳范例。
在 MySQL5.1.6 起,增加了一个不错的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度...
之前, 小顿和我提过一个想法, 就是从PHP语言层面去分析,找出一些可能的XSS漏洞代码. 当时我一来没时间, 而来也确实不知道从何处下手.. 直到上周的时候, 我看到了这个RFC: RFC:Taint. 但是这个RFC的问题在于, 它需要为PHP打Patch, 修改了PHP本身的数据结构, 这对于以后维护, 升级PHP来说, 很不方便, 也会有一些隐患. 虽然这样, 但这个RFC却给了我一个启发, 于是我就完成了这样的一个扩展:Taint Extension
前言 多线程程序中,锁的使用往往成为系统性能的关键。在做地址可视化项目的时候,由于内存管理部分需要频繁的更新内存的引用计数,所以产生了使用自旋锁的想法,这篇文章我们从自旋锁的性能开始说起,由浅入深的给出了一种改进的自旋锁的实现。 这里我们 1) 讨论自旋锁对并发程序性能的影响; 2) glic中自旋锁的缺陷; 3) 随后提出了一种改进的(用户空间)自旋锁的实现,供大家在今后的程序设计中参考、使用。欢迎给出改进的自旋锁中的不足和意见。 关于锁 总体上来看,锁分为两种:休眠式锁和自旋锁。休眠式锁的原理是当当前线程不能获取到指定的锁时,它就让出CPU,加入到一个等待队列中,直到被唤醒,它才会被重新调度执行。自旋锁的原理是若当前线程不能获取到指定的锁,它不会主动让出CPU,而是会在一个紧凑循环中重复的检测锁是否已经可用,即忙等待(busy wait)。 休眠锁与自旋锁的对比 如果对临界资源的访问时
单元测试也是一个开发中最常见的需求,在Java里我们用JUnit或者TestNG,在clojure里也内置了单元测试的库。标准库的clojure.test,以及第三方框架midje。这里我将主要介绍clojure.test这个标准库,midje是个更加强大的测试框架,广告下,midje的介绍在第二次cn-clojure聚会上将有个Topic,我就不画蛇添足了。通常来说,clojure.test足够让你对付日常的测试。 首先看一个最简单的例子,定义一个函数square来计算平方,然后我们测试这个函数:;;引用clojure.test(nsexample(:use[clojure.test:only[deftestisrun-tests]]));;定义函数(defnsquare[x](*xx));;测试函数(deftesttest-square (is(=4(square2)))(is(=9
高并发地进行insert经常导致阻塞很长时间。 有些场景下我们并不需要知道insert之后的结果。因此可以采用insert delayed方法。 insert delayed是myisam对与sql标准的扩展,在innodb引擎下并不支持。 insert delayed之后,系统会立刻返回结果,使用last_inserted_id方法不能获得insert delayed得到的主键ID
不知不觉网站PV就爆发了。nginx压力越来越大,一些默认参数就显得不够用了。 我们的主服务器硬件配置非常健壮(双路至强5620 + 48GB内存 + SSD),理论上可以承受每天过500万的PV,当然,前提是优化得够好。 简单罗列一下优化过的几个参数: ulimit -n 65535这个参数位于/etc/default/nginx 中,或者/etc/init.d/nginx 文件中直接设置。 默认是1024,意思是最多打开的文件个数。1024怎么够,至少开到8192,网上很多文章都直接开到了65535。 worker_processes 8; worker数量,位于nginx.conf头部,一般来说有几个cpu核心开几个,不算超线程。 worker_rlimit_nofile 65535; 位于nginx.conf头部,也是文件数量限制,直接开大吧。 worker_connection
负责LOFTER模板设计工作已有一些时间,一直没机会写写总结,趁此机会写些文字供大家观赏! 或许大家听的比较多的一句话是:“若把传统博客比喻为一本书,微博就是一份街头小报,而轻博客就像是一本杂志。与传统博客相比,轻博客的方式更简洁”。 个人觉得LOFTER首先是个好用的工具,然后才有可能成为一个好的社区。LOFTER必须简单易用,有一个简洁的发布操作端口(电脑页面及移动客户端),和精美的展示空间(博客模版和Timeline页面);是的,精美的展示空间——博客模板。 一、模板的重要性 首先分享一下我和LOFTER产品策划章行的交流,他说的一句话:“打个比喻,如果一个产品是一个女人,怎样才能爱上这个女人呢?你首先看的是她的第一印象,这个姑娘很美,你蠢蠢欲动了,你有了和她交往的欲望,你有了包容她小缺点小毛病的耐心,相处了一下,发现她性格也不错又有内涵,于是你彻底的爱上她了”。这是感性认识,但是我
直到今天为止,MySQL依然只支持一个Slave从一个Master复制数据,虽然也可以做到一主多备(M->S),双主复制(MM)等架构,但是局限性依然很大。 例如最近我们遇到一个问题,需要为线上的集群搭建在线延时备份,即从线上的双主集群中再延伸出一组Slave,以防重要集群主备都宕机。按照现在MySQL的架构,要搭建这种在线备份,只能启动相同数据的实例来实现,假设线上有128个实例在提供服务,那么我就需要128个实例来做这128个实例的复制,这个管理成本是巨大的。 之前我们也有个方案,利用Perl脚本来做,参见这篇文章:点我阅读。这个方案的最大问题就是管理不方便,没有可以监控的地方,也不能随便停止脚本等等,如果完善这些部分,代码量太大,几乎就实现了一个MySQL Replication,那还不如利用MySQL的管理部分,在MySQL里实现多Master。
Clojure的REPL非常方便,可以随时随地试验你的想法,REPL是read-eval-print-loop的简称。默认clojure.contrib有带一个shell脚本来启动REPL,具体看这里。你也可以用JLine来增强REPL:java-cp"%CLOJURE_DIR%\\jline-VERSION.jar;%CLOJURE_JAR%"jline.ConsoleRunnerclojure.main 不过,其实你还可以用rlwrap这个GNU库来增强clojure REPL。使用它有如下好处:1.Tab completion,使用tab做代码提示。2.括号匹配3.历史记录,哪怕你重启REPL4.通过.inputrc来绑定vi或者emacs 具体操作步骤如下:1.首先,你需要在你的机器上安装rlwrap,你可以通过apt或者port,homebrew等工具安装或者自己下载安装:su
文件读写是日常编程中最经常使用的操作之一。这篇blog将大概介绍下Clojure里对文件操作的常用类库。 首先介绍标准库clojure.java.io,这是最经常用的IO库,定义了常见的IO操作。 首先,直接看一个例子,可以熟悉下大多数常用的函数:(nsio(:use[clojure.java.io]));;file函数,获取一个java.io.File对象(deff(file"a.txt"));;拷贝文件使用copy(copyf(file"b.txt"));;删除文件,使用delete-file(delete-filef);;更经常使用reader和writer(defrdr(reader"b.txt":encoding"utf-8"))(defwtr(writer"c.txt":appendtrue));;copy可以接受多种类型的参数(copyrdrwtr:buffer-size4
Part 1 研究背景 1.1 触屏手机界面设计的背景与挑战 挑战1:发展时间短,国内外的研究都尚处在探索阶段,充满未知和不确定。 触屏技术最早被应用到手机上要追溯到1999年(motorola A6188),至今虽然已有12年时间,但真正为手指操作的触屏界面设计带来革命性变化还是07年1月9日发布的iphone1代以及他的多点触摸技术。时至今日,不过4年时间,以苹果设计团队为先驱国内外相关研究领域,包括触摸的手势、触屏界面的规范、触摸的可用性研究等等,都还处在探索阶段,这也意味着有很多现有的东西都是建立在猜测和尝试基础上的,他们的成熟度也是有待时间检验的。这些东西包括国外的期刊文献和图书,甚至是苹果app开发官网上的信息、设计原则。 挑战2:从鼠标键盘到手指,准确率问题、热区和死角的问题。 触屏手机交互研究与PC交互的研究存在着质的变化。输入设备从鼠标键盘变成手指,一方面,操作的精准度上
[导读] 相信大部分同学都已经可以熟悉操作puppet了,本小节接着上一小节,puppet如何创建目录树,以及有条件的删除过期文件, 而本节则是给我们了一个新的课题,是如何调度并确保资源运行,就是说,我不想在某个时间段运行某个资源,或者我在特定的时间
好吧,这是个有点儿蛋疼的文章,每个浏览器都可以有自己的行为和表现,只是webkit在apple的带领下,在UI上走的更远了一点儿,但是却给我们带来了点儿困扰,因为很多情况下,我们希望搜索...
一开始本来懒得自己写的,结果google被墙的厉害,百度什么都搜不出来…… 无奈之下,自己想办法搞了。 问题描述: 在WordPress写文章的时候,想插入一点简单的脚本,例如 javascript:tucao() 或者 onclick=”tucao()” 这样的代码,被WordPress的安全机制自动过滤成: javascript:void(0) 和 onclick=”\" 解决办法: 打开wp-include目录下的formatting.php文件,注释掉大概第2321行 $safe_text = str_replace( “\n”, ‘\\n’, addslashes( $safe_text ) ); 上传后,刷新后台,保存刚才保存不上的文章。 把formatting.php恢复原样。