博文

目前显示的是 十一月, 2010的博文

更新日志

今天给我的网站修补了如下bug:1、atom输出中的content标签少了type字段。导致含有html的entry在google reader以及IE8下显示原始的html标签。2、修正发布时间显示的时候被截断的问题同时增加如下功能及改动:1、给首页及blog页面添加google analytics2、把MathJax加到blog的显示页面中3、把view层从jstl更换成freemaker4、可以在blog上留言。5、blog的文章可以显示分类。发布的时候可以选择分类。6、添加google analytics

TLS’s Server Name Indication

我的一个同事打算在单个IP上通过http虚拟主机的方式配置多个https域名。关于这个问题的讨论可见这里:https://blog.delphij.net/2009/06/apacheiphttps.html 。令我惊讶的是,他成功了。后来我发现,Apache和delphij所说的问题,是针对SSLv2的。TLSv1中的Client Hello请求可以带Extensions,其中extension type中有一类就是server_name。而wget在发起https请求的时候并没有把这个带上,而IE8带上了。其它的我还没测试。总之nginx是支持根据这个选择所用的证书,这个功能在rfc4366中被称之为Server Name Indication。查了一下关于SNI的支持情况:库: openssl: 0.9.8f客户端:Mozilla Firefox 2.0 or laterOpera 8.0 or later (with TLS 1.1 enabled)Internet Explorer 7.0 or later (on Vista, not XP)Google ChromeSafari 3.2.1 on Mac OS X 10.5.6服务器:apache/nginx的较新版本都支持,主要取决于tls库(比如openssl)。

我在想怎么在苹果店浏览其它网站

昨天去了西单的苹果店,是家很小的,应该不是新开的吧.反正比三里屯的小多了,而且它很恶心的是,利用家长控制功能只让上苹果的官网和taobao.然后我就在想怎么能上其它的网站。我发现它有perl和python和java。可惜我不会python,否则应该很容易。我想用perl从cpan装LWP,但是不知道为什么,CPAN不好使。然后我就想,手写一段java代码,就可以从网上以http方式下东西了。但是下什么东西下来呢?如果能找到一个纯java的浏览器就好了。否则那个系统连gcc都没有。下个opera下来? 需要安装吗? 呃,关键是我对苹果的系统不熟悉。。。

在chroot下跑tomcat

我承认我代码写的很烂,为了可以放心大胆的继续开发后续功能,所以我急着要把tomcat扔到一个较为安全的环境中。首先,第一点是要把用户权限降下来。不要让tomcat在80/443这样的特权端口上监听,而是8080/8443这样的。然后通过iptables做转发(如果数据量不大或者用xinet也可)然后我创建了一个目录,/export/tomcatroot,作为chroot的根目录。然后下载tomcat,解压缩。然后下载jre,解压缩。然后创建一个lib目录,放动态链接库。root@snnn:/export/tomcatroot# ls
apache-tomcat-7.0.4 apache-tomcat-7.0.4.tar.gz jre jre22.bin lib为了检查是否缺少动态链接库,需要有ldd。为了能使用ldd,必须把/lib/ld-linux.so.2复制到/export/tomcatroot/lib下,并且把static版本的bash放到/export/tomcatroot或它的某个子目录下。还有我发现还需要cat这个命令。root@snnn:/export/tomcatroot# cp /bin/cat binjava需要的so没几个。# ls lib
ld-linux.so.2 libc.so.6 libdl.so.2 libm.so.6 libnsl.so.1 libpthread.so.0然后我发现JAVA还是起不来。/jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory。经查,原因是没有挂/proc,因为java启动的时候是从/proc/self/exe读取自己的位置。于是干脆把/dev和/proc都mount了。root@snnn:/export/tomcatroot# mkdir proc dev
root@snnn:/export/tomcatroot# mount -o bind /proc /export/tomcatroot/proc
root@snnn:/export/tomcatroot# mount -o bind /dev /ex…

生成DOM树的时候怎么在根节点上添加namespace定义?

我想生成这样一棵DOM树<servicexmlns="http://www.w3.org/2007/app"xmlns:atom="http://www.w3.org/2005/Atom"><workspace><atom:title>Main Site</atom:title></workspace></service>我知道在创建根节点的时候用doc.createElementNS("http://www.w3.org/2007/app", "service");就可以生成这样的节点:<servicexmlns="http://www.w3.org/2007/app" />但是假如我想同时在这个节点上定义atom这个namespace呢?该用什么方法?我现在用createElementNS创建节点的时候它都是在需要的时候才定义namespace

关于计数器的想法

我想统计每篇日志的点击量。你们看看我的想法对不对。首先,尽量的把同一个人在同一个浏览器会话中的多次点击计算成一个。那么,首先,这些页面必须启用session,即,没有session的访问即创建session。然后服务器在session中放一个Set<String>。对于需要统计的页面,把url往这个set里面插,如果insert返回true,就是说set里面现在还没有,那么去更新数据库,计数加1。可以不?

勉强能发文了

今天写了一个atom publishing service,然后可以利用这个接口加上live writer发日志了。但是有一个小问题没有搞定。我在发布成功后回复的包里加上了response.addHeader("Location", url);但是貌似没有起作用。而eclipse的那个server monitor功能我怎么用都不好使,一直监听不到包。现在我想到一个折衷的方案就是把我本机的8080映射到我家路由器的8080上,然后访问路由器的8080,并通过wireshark抓包。这样应该能抓到。我在想,能不能在tomcat上直接部署一个SIP server?睡吧。明天早点起来

在网游中嵌入sina微博?

不知道有没有哪个网游准备把sina微博嵌入进去。不是说这个网游公司自己做一个微博,而是直接借sina的平台。在网游中发生某些事件的时候,自动通过sina微博广播出去。目的是通过这个平台做宣传。最好是支持能直接在客户端截图直接发。况且,一旦关闭了游戏客户端,在游戏里的什么记录都没有了。但是在微博上依然能看到一些重大事件的记录。嗯,会不会有人拿这些信息去盗号呢?这就要看GM根据什么来判断帐号是不是你的了。

一个游戏想法

刚想到一个玩法:在游戏里设计一个铜人巷这样的场景。是个单独的副本,进入之后会有很多怪物从四面八方涌过来。拿回合游戏来说,你就得不停的遇怪进战斗,而且还没经验。但是,战斗奖励可能是很珍贵的物品,大多数情况下是草根树皮等不值钱的草药。RMB玩家可以购买炸药,不用进战斗直接把周围的怪炸飞。奖励掉路在地上,如果不拾取,高级物品出副本的时候自动邮寄到邮箱。这个特效可以做华丽一些,就像三国无双里一路放无双放到末尾一样。有三点:
1.它不是彩票。它是玩家通过努力所得(一直释放大招)。所以是合法的。
2.玩家很爽。N多怪倒下,地上都是金灿灿的。奖励是自己打出来的,不是买的。
3.使用方便,消耗速度快。
4.在审计这个问题上,从来不认为战斗中消耗性药品的价值会传递到战利品上。为了体谅玩家包裹容量有限,出副本的时候有个NPC,支持退货。

2010-11-20

今天一时兴起想重写下blog,用java实现这样就可以彻底抛弃php了。然后下午回来开始写,目前已经完成的部分有:1、index页。翻页还没做2、内容页。不能显示评论、不能写评论。3、rss和atom顺便准备把oauth整合进来,用sina的账号做登录,方便别人留言。可以说,oauth已死,有事烧纸吗?明天要去学车。大约后天替换上来。

tomcat的classloader的问题

今天用jstl+spring写一个小东西的时候,我用这样的方式引入jstl:
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
然后用这样的方式格式化一个java.util.Date变量<fmt:formatDatepattern="yyyy-MM-dd"value="${now}" />结果遇到这样的错误:
org.springframework.web.servlet.support.JstlUtils$SpringLocalizationContext cannot be cast to java.lang.String
查了一下发现,原来是这样:我把spring的jar放在了tomcat的lib目录下,而把jstl放在了自己的webapp的lib目录下。结果因为classloader不同,没有能从SpringLocalizationContext 转成 LocalizationContext。How Sadly... 还是怪我对java的web开发太欠缺经验了。

准确率90%是个什么概念?

最近看到这样一个问题。
拿胃癌来说,我所知道的最准确的诊断方式就是做胃镜。假设在有胃癌的情况下被检查出胃癌的概率是90%,并且在没有胃癌的情况下被检查认为是胃癌的概率是10%。并且胃癌在群体中的患病率是千分之一。
如果现在我去做胃镜检查,检查结果表示可能是胃癌。那么我实际上有胃癌的概率是多大?
通过贝叶斯公式可以算出,这个概率是0.001*0.9/(0.001*0.9+0.999*0.1)约等于0.89%。
好吧,既然你说90%太低了,那么高一些。假设在有胃癌的情况下被检查出胃癌的概率是99%,并且在没有胃癌的情况下被检查认为是胃癌的概率是1%。那么实际上有胃癌的概率是0.001*0.99/(0.001*0.99+0.999*0.01)约等于9.02%。
我觉得可以得出两个结论:
1、每年花上千元做体检是没有必要的。只有那些对发病率很高的病做检查才是有意义的。
2、医生只是拼命的开检查单,实际他们自己也不怎么信。我的观察是只有检查结果自相矛盾的时候他才会把准确率搬出来做挡一挡。

“swapper: page allocation failure”这个日志可忽略

我的messages里有很多这样的日志:Nov 8 06:57:03 snnn kernel: [239273.336284] swapper: page allocation failure. order:4, mode:0x4020
Nov 8 06:57:03 snnn kernel: [239273.336292] Pid: 0, comm: swapper Not tainted 2.6.xx-xx-virtual #xx-Ubuntu然后是kernel的Call Trace。很明显,这句话的意思是说内存不够了。据我对Call Trace的统计发现,无一例外都是在执行ip_finish_output函数的过程中使用kmalloc分配内存失败。据我找到的资料看,这个是Xen特有的。然后我从xen的邮件列表中找到一封06年的邮件,http://lists.xensource.com/archives/html/xen-devel/2006-12/msg00490.html,邮件里这么说:“Harmless and not entirely unexpected. I'll add __GFP_NOWARN to the allocations to quieten things down. ”同时在red hat的bugzilla上也找到了类似的问题,信中说,“The good news is this is just diagnostic, and not indication of an actual failure. The problem is we're trying to satisfy a fairly large allocation of a certain type, which after the machine has been up for a while, is difficult. We retry atomic allocations when they get failed, so the system keeps going.. ”。于是可以放心的舒口气了。下面接着说到,“That said, the driver shouldn't be asking for such obscene amou…

svn+ssh小记

图片
因为lighttpd貌似不支持subversion,我就只好采用别的途径访问svn。服务器不需要做什么配置修改也不需要单开多余的进程,但是客户端需要2个东西:1、TortoiseSVN2、cygwin并且装了ssh client首先在服务器上看下,/export/svn$ ls -lhad *
drwxrwsr-x 7 www-data subversion 4.0K 2010-10-29 00:16 miscsvnadmin在创建repos的时候,是采用组内可写(g+rw)的方式,组是subversion。所以用root添加一个用户,名字可以随意,但是必须在subversion这个组里。$ adduser --ingroup subversion svnuser这样,这个用户就可以读写svn仓库里的文件了。然后切换到svnuser这个用户下,用ssh-keygen生key
$ ssh-keygen -b 2048 -t rsa -f sshkey
$ cat sshkey.pub >> .ssh/authorized_keys然后用chmod把ssh和authorized_keys的权限分别改成0700和0600。然后把key复制到我的笔记本上。
然后从笔记本测试登陆
ssh -i sshkey svnuser@myhost.com
然后在服务器上修改authorized_keys在刚才那行key的前面加上no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty,command="svnserve -t -r /export/svn/ --tunnel-user=sunchangming"目的是为了防止用这个key获取shell或是做端口转发。再像刚才那样测试:ssh -i sshkey svnuser@myhost.com登陆就会失败然后就是修改TortoiseSVN的配置告诉它去哪里找key然后最终就可以用这样的方式访问了 svn+ssh://svnuser@myhost/misc缺点是执行svn操作的时候会有黑乎乎的窗口弹出来,我想用cygwin的run.exe去掉它,但是没有成功,貌似得改点东西。没有help,没有文档,名字起的实在是太普通了想google都难。这个…

更换到lighttpd

把http server从apache换成了lighttpd,原有的应用,如wordpress/awstats都挪过来了,可是subversion我没辙了。lighttpd有mod_dav模块,但是貌似很简略,不知道能不能用它做svn服务器。官方的文档中有一篇是讲在lighttpd之外再开一个apache然后把请求转给它。http://redmine.lighttpd.net/projects/lighttpd/wiki/ApacheSubversionRecipe,就这样,还有无法提交的bug未解决。
本来想用tomcat代替apache,但是跑php-cgi的时候问题出在缺少REDIRECT_STATUS这个环境变量。有一个简单做法就是写一个wrapper把php5-cgi套起来先设置REDIRECT_STATUS环境变量然后执行/usr/bin/php5-cgi,但是我不确定这个wrapper该怎么写以及会不会产生安全风险?总之官方文档的意思是尽量不要以cgi的方式运行php?
囧。要不要换回apache?

2010-11-11

貌似明年的今天更精彩,因为是6个1。嗯,不过应该都跟我没啥关系。刚刚得到一个好消息,如果我打算继续在这里住下去,那么房租每个月给我降200,从下次交房租的时候开始。其实我本来是这个月或者下个月打算搬去南城吃卤煮的,离MM也近点。嗯,犹豫中……这么便宜的房子在北京估计得到二拨子、史各庄才能找到了。想当初住回龙观的时候真是欢乐啊,虽然便宜且宁静,但是晚上娱乐活动挺多的。他们喜欢去打台球或者杀人,我喜欢一个人散散步。当时在回龙观社区网上还认识了好几个朋友。最终直到搬走的时候,我也没把那“井”字形的路认对几条。twitter观光团的力量很大,让我的blog的单日的visitor数量首次突破1000,rss的订阅数也从20多个涨到100多个。于是,于是,我现在写东西紧张啊,就像被蒙上眼睛在大堂里演讲一样。路过的朋友请留下点什么吧,陪我说说话。今天在网上查了一下,貌似vmware还没有支持2..6.35 kernel的版本,以至于我暂时都没有win2000用了,也暂时不方便上QQ了。虽然webqq最近又可以用了,可是貌似它故意没有把一些功能放出来,比如退群。而我加了10几个群,太吵了。我在创建vmware的虚拟磁盘的时候特地选的是单一文件。qemu支持这样的vmdk文件,但是貌似有限。我用这样的方式能启动我的freebsd:qemu-kvm -drive file=FreeBSD.vmdk,if=scsi,bus=0,unit=1,media=disk,format=vmdk,boot=on ,但是无法启动win2000,引导失败。我在寻找关于freebsd对arm的支持以及uboot。我想试一试看能不能把某个bsd用uboot在手机上引导起来。delphij 今天遇到一个很郁闷的问题,他的DNS收到一些很奇怪的查询请求,IP包的src address是广播地址。他问我这样的包该不该收,我猜他是想在防火墙上禁掉这样的包。可是我查了一半天文档也没有得到100%确定的答案。今天在linux下看man手册的时候还看到一个很有意思的东西,socket中有一种特殊的domain是AF_NETLINK(freebsd下没有),大致思想是利用socket接口,在用户态和内核之间传递数据。由于大家对socket的用法都很熟悉了,所以看一看手册很容易上手。通过这样的方式可以扩展系统功能而不必增…

满篇都是page allocation failure

我的web server是买的256M的VPS,按理说内存不小了,平时都跑的很平稳的。但是偶尔,某些时间点,比如凌晨3:00或者凌晨7:00的时候,就会报告page allocation failure。可是我的crontab中没有在这些时间点跑的东西啊,莫非是web spider干的?。现在/var/log/messages里主要的信息都是page allocation failure。烦死了,如何在内存有限的情况下选择一款合适的http server真是难题啊,目前看来最保险的就是apache的prefork模式。每个进程占大概20M,规定好最大只能有5个进程,基本可以限制死内存上限为100M。可惜我前几天切到mpm event了,过几天切回去看看。这种偶发的事情是最难查的。

队列(一)

我刚来公司的时候,我的头lch给我以及其它的几个新毕业的同学出了一道练习题:写一个FIFO队列,要求是线程安全的。后来在新项目组招人的时候,这个被我拿来当笔试题,大多数人答的还不错。为什么说lch是神人呢?因为这个问题可难可易,可深可浅。对于科班出身的朋友,那么在学完《数据结构和算法》这门课之后,自己用C/C++或Java写一个队列不是难事儿,但是这门课一般不考虑多线程的问题。如果把多线程的问题考虑清楚了,研究结果在国外的二流杂志上发几篇paper都行。这个题中所说的队列,总体来说可以分为bounded和unbounded的。bounded是说在插入的时候,如果满(size()=capacity),则等待,而unbounded则没有这个问题,直接插。在lch看来,这两种队列的实现方式有很大差异。lch当时提到说这其实是apue上的例题。我刚去翻书把代码找出来了#include <pthread.h>struct msg { struct msg *m_next; /* ... more stuff here ... */ }; struct msg *workq; pthread_cond_t qready = PTHREAD_COND_INITIALIZER; pthread_mutex_t qlock = PTHREAD_MUTEX_INITIALIZER; voidprocess_msg(void){ struct msg *mp; for (;;) { pthread_mutex_lock(&qlock); while (workq == NULL) pthread_cond_wait(&qready, &qlock); mp = workq; workq = mp->m_next; pthread_mutex_unlock(&qlock); /* now process the message mp */ } } voidenqueue_msg(struct msg *mp){ pthread_mutex_lock(&qloc…

2010-11-7

今天在http://sudone.com/在技术文章的时候,发现旁边有杨建的博客链接,然后把他08年末写的那些技术分享认真学习了一遍。很佩服他所做出的成果,之后也不免唏嘘一番,我和他差不多同时去的sina(我比他晚半年左右)。他和我熟悉起来最早是因为他经常会有些FreeBSD的问题来问我。我觉得当时,我和他的技术水平差不多吧,各有所长。可是两三年后,看看人家在sina做出的东西,再看看我,唉……杨建现在在互联网行业名气可大了。而我在sina那段时间,什么大东西也没做,主要是在学习。比如去sina之前,虽然会用mysql,但是仅限于自己个人用用。而去sina之后,有大规模的mysql集群需要维护。那时候我最熟练的就是修库、做从库了。08年杨建在sina财经带一帮人干的热火朝天的时候,我来了现在这家公司,然后从头到尾做完了一个项目,可依然没有什么可拿出来说的。虽然我blog每周都在更新,但是我的blog上基本不会谈自己的工作,是的,你看到了很多很多技术话题但是那都是和我在公司的工作无关的。其实在内部的技术交流会上我也讲过很多次,但主要是针对项目本身讲,比如你需要的什么什么接口,什么什么服务该找公司的谁谁谁要,服务器上线的时候在安全设置上有哪些要求等等。外边的人也不感兴趣。就拿我刚做完的那款网络游戏来说吧,你要说技术上有什么创新?的确挺大的,第一个采用java,整套架构包括DBMS都是新写的。可要说技术难点、核心算法,无非就是Btree和A*,其它都是简单的if…else, foreach。可是对于Btree这样的东西,不要说科班出身的了,就算是学文科生考过计算机等级考试三级的都知道。(在我正在写的时候,又有人通过支付宝给我捐了三块钱)Ok。我准备把我之前某次ppt的内容补上文字,写一个系列叫《网络游戏服务器架构设计》,做为阶段性的工作总结。皆属原创,绝无抄袭。如果侵犯到任何人的知识产权,请来电话或来信告知。

imsettings 续

我还是有几点没弄明白
1、为什么只有gconf那个backend往dbus注册了,而xim没有。
2、imsettings-xim由谁来启动?我现在是手动启动的
3、QT的backend目前是不是根本就没做完呢,不能用?
4、我能清楚的看到,当imsettings-xim从dbus收到ChangeTo请求的时候,把消息通过gxim库转发给了当前的XIM server。于是我当前的输入法就失效了。但是,新的输入法并没有起效啊。如果这个能工作,那么就实现了所希望的,在不重启程序的情况下切换输入法(天哪,这个要求在windows下多容易被满足啊)
5、hildon-input-method进程只要被kill掉,那么机器会立马关机。这是为什么?这意味着如果要用imsettings框架,那么必须修改系统本身出厂自带的一些配置文件,这一点,对于我打包很不利。
6、找不到关于XSETTINGS的详细资料,不知道maemo上有没有符合XSETTINGS的daemon。否则gconf那个backend就是个摆设吧?并且,这种方式应该只影响程序启动的时候。并且,貌似QT不理会它?

imsettings on n900 剖析

我提交到maemo上去的im-chooser有问题,刚有个日本人问我怎么用不了。http://maemo.org/packages/package\_instance/view/fremantle\_extras-devel\_free\_armel/im-chooser/1.3.2-1/
然后找这个问题的答案我花了有3个小时。
首先,在我手机上的现象是,打开im-chooser,列表是空的,没有任何可以选。然后我去查im-chooser的代码,发现原因是cur_iter==NULL,就是说它不知道当前用的是什么输入法,于是它就不显示任何输入法。
它不知道当前用的是什么输入法在于imsettings_info_is_system_default对于任何输入始终返回false。而 cur_iter==NULL的真正原因是那个while循环中strcmp(running_im, name)始终都不等于0.说来说去就是,我当前所用的im,它没在它的im模块列表中找到。看来这还是imsetting没挪对。因为我在手机上运行imsettings-info其结果是任何项目前面都没有星号。找了许久,看起来是imsettings_request_whats_input_method_running这个函数的问题。
为了方便于调试imsettings,我去找它的dbus接口说明。http://code.google.com/p/imsettings/wiki/DBusInterfaces。可是它没有说dest以及destination object path应该填什么。于是我就打开dbus-monitor,看了一下输出,然后照抄过去。
dbus-send --print-reply --dest=com.redhat.imsettings /com/redhat/imsettings com.redhat.imsettings.WhatsInputMethodRunning,在我电脑的fedora上运行返回是ibus,但是在我手机上返回的是空字符串。
然后找到大概是因为ibus的daemon不是由imsettings启动的所以imsettings不知道ibus的pid,所以在 imsettings_manager_real_whats_im_running中用_get_pid_from_nam…

我才发现web.qq.com上不去了

我说,您用得着这样吗?! 这个网站碍着谁了啊?它完全不在360和tencent的冲突范围内啊。但是你为了逼用户卸载360,于是你就把这个网站也关了?

今天多亏n900帮我把笔记本引导起来了

今天升级fedora,从13升级到14.但是那个傻瓜yum,不知道为什么,把我的/boot/grub2/下的东西给我清理掉了。而且是把大部分mod删掉了。没有这些mod当然就无法启动啦,grub直接进了rescue mode。但是grub.cfg还给我留着,谢天谢地。然后呢,如果现在是在公司,那么很好办,随便找个电脑刻一个usb启动盘就能把它救活。但是现在我在家里,除了n900什么都没有。这个状况也比较囧。我想用chainloader引导win7,但是ntfs.mod和chain.mod都没有。内置的只认识ext3文件系统。于是我就想到了n900,还好我的n900有microSD卡,可以直接把microSD卡通过usb线导出给电脑。于是,我就在手机上用mkfs.ext3把SD卡格式化成ext3,然后拿手机上http://mirrors.163.com,从cygwin目录下面下载了grub2的编译好的文件,主要是那些mod,企图用它来启动。可惜不行。后来就从fedora的目录下找,但是只有grub1没有grub2.然后就去ubuntu的目录下找,还好,这次有。
然后把deb包用wget下载到手机上,然后用deb -x 解压缩到存储卡上,然后用cp把那些mod文件移动到存储卡的根目录下,否则路径名太长,在grub2的rescue mode下输入那么长的东西很不方便。
然后我就用insmod (hd0,1)/normal.mod这样加载,结果还是不行。ntfs.mod可以加载,但是normal不行,说找不到文件。但是文件明明在啊,于是我想,肯定是依赖的mod没有找到。然后我就想起来prefix这个环境变量。
set prefix=(hd1)/
然后insmod normal就成功了。
然后进入普通模式
> normal
然后加载配置文件
> configfile (hd0,7)/grub2/grub.cfg
然后就是那个我很熟悉的界面了。可惜字体没有加载进来,不过这个无所谓啦第一次启动,还是失败了,2.6.35的kernel在刚开始启动的时候就panic了。但是老的2.6.34的kernel 是没问题的。
所以我现在就可以打开firefox用电脑敲下这段教训了。
教训是: 升级完系统后,一定先仔细检查grub,重新更新一次grub2的配置文件是最保险的。然后再重启。

论仙人掌能吸收辐射

光线是电磁波 电磁波都是辐射 仙人掌不是全透明的 所以仙人掌能吸收辐射

uboot-pr13 发布了,是Carsten Munk提交的!

http://maemo.org/packages/view/uboot-pr13/
但我不知道这个包做了什么,怎么用。
我去看看meego的wiki更新了没

用QML写了一个支持新浪微博的客户端

https://sunchangming.com/qtsinaclient.html
在qt demo的基础上改的
主要是 支持OAuth以及用数据库保存用户名密码