In Memory of Michael Jackson
北京时间6月26日,一代歌王迈克尔·杰克逊因心脏停动在洛杉矶逝世,享年50岁。
伴随了大多数人多年时光的天王Michael Jackson忽然间就逝去了,耀眼和平凡都是一瞬间的事情,Heal the World言犹在耳,却无法拯救自己。
对这位全球以个人名义资助慈善事业最多的人,我们心存敬意。
北京时间6月26日,一代歌王迈克尔·杰克逊因心脏停动在洛杉矶逝世,享年50岁。
伴随了大多数人多年时光的天王Michael Jackson忽然间就逝去了,耀眼和平凡都是一瞬间的事情,Heal the World言犹在耳,却无法拯救自己。
对这位全球以个人名义资助慈善事业最多的人,我们心存敬意。
因为最近提供了Free Hosting的计划,有不少朋友入住我共享的免费虚拟主机,也给每个朋友都安装了Wordpress(之前是2.7版本,现在登陆后台界面应该已经可以看到升级到2.8的提示了,不用担心,直接点Upgrade升级吧)。
如何让你的Wordpress Blog显得更专业,更美观,更让他人容易浏览呢?总结一下这几年自己用Wordpress的心得。
1. 选择合适的Theme
如果是技术性的blog,会粘贴大量的实验代码(包括SQL语句等)请选择两栏的Theme,其实就是让文章区更宽一些,这样可以容纳下绝大多数长度的SQL语句和输出结果,而三栏的Theme由于要预留两个侧边栏,通常文章区就比较窄,这样很多SQL语句会换行,让他人浏览起来很不舒服。
2. 首页全文输出
作为个人blog,如果不在乎你的首页到底有多长(再长恐怕也长不过新浪、网易啥的首页吧),也并不在乎你到底能获得多少点击率,那么还是在首页全文显示文章吧,没有”Read More”可以让别人少进行一次鼠标点击,这是很体贴的设计。
3. RSS全文输出
同样,对于RSS聚合输出,也请输出全文,这样方便通过RSS阅读器订阅你的blog的人群,我个人就很讨厌在Google Reader中只能看到一篇文章第一段话前几句的这种情况。对于RSS聚合,推荐使用Feedburner或者国内的Feedsky进行RSS烧制。这样做的好处是,统一且更加灵活设置RSS输出格式,另外,即使以后你改变了自己的域名,也只需要在feedburner中绑定一下新域名即可,对于其它订阅者来说,仍然是之前的RSS地址。
4. 代码美化插件
对于粘贴代码的文章,请一定要使用语法高亮的插件来进行美化,最常用的插件是WP-Syntax,在最新版本的Wordpress中可以直接从后台进行插件的安装(Plugins->Add New->Search Plugins),非常方便。
这是没有美化过的效果。
SQL> DROP tablespace SUMM_DATA07;
DROP tablespace SUMM_DATA07
*
ERROR at line 1:
ORA-14404: partitioned TABLE contains partitions IN a different tablespace appears.
这是美化过后的效果。
SQL> DROP tablespace SUMM_DATA07; DROP tablespace SUMM_DATA07 * ERROR at line 1: ORA-14404: partitioned TABLE contains partitions IN a different tablespace appears.
发表完文章之后自己先读一下,错别字尽量改正,自己看着舒服,别人才可能觉得赏心悦目。请以专业的心态对待自己的每一篇文章。
5. 垃圾留言屏蔽插件
垃圾留言是每个blogger头疼的事情,幸好有优秀的Spam Block插件可以使用,在新版的Wordpress中自带了Akismet,但是启用这个插件需要一个Wordpress.com API Key,这个Key可以通过免费注册Wordpress.com用户来获取,但是很可惜Wordpress.com在国内被GFW了,有需要的朋友可以翻墙出去。如何翻墙,可以查看这篇经典的翻墙教程。
在注册完Wordpress.com用户之后,可以通过后台管理界面的Users->Your Profile页面获知自己的API Key。大致信息如下。
如果确实无法注册Wordpress.com用户,无法得到API Key,也就无法启用Akismet,那么推荐使用Spam Karma 2插件,后台安装之后,几乎无需任何设置,也能很有效地进行垃圾留言屏蔽。
6. 数据库备份
作为一个Oracle技术人员,备份是时刻要放在心上的,那么对于Wordpress来说,后台使用的MySQL数据库也同样需要经常备份。同样可以通过插件来实现 – WP-DBManager,此插件可以实现定期对Wordpress后台数据库惊醒备份,并将备份文件压缩发送至指定的邮件地址。
7. 贴图
如果要贴图,我通常都是将图片通过Picasa3传到Google Web Album中,然后将Google Web Album中的地址粘贴到文章中,因为在这里可以选择到底将图片以多大px显示,这样就不会由于图片宽度过大而将整个blog页面布局损坏。如下图选择的是400px,这在一般的文章中会有很好的效果。
8. 介绍自己
为了介绍自己,请在Pages里面写一份完整的About me,对你的文章感兴趣的人通常对你到底是怎样的人也感兴趣。
9. 善用插件
没有插件的Wordpress就好比没有插件的Firefox,也好比没有插件的World of Warcraft,都让人无法忍受。我目前在使用的插件有:
Akismet:垃圾留言过滤。
All in One SEO Pack:简单地进行SEO设置。
CoolCode:之前使用的代码美化插件,现在已经用WP-Syntax替代,但是为了保留之前文章的格式,还是保留了此插件。
Custom Smilies:在文章或者留言中可以插入笑脸,这纯属是好玩。
Dean’s Permalinks Migration:重定向不同格式的permalinks。之前有修改过文章 Permalinks的格式,为了自动转化,使用了此插件,具体用处参看如何无风险的修改Permalink。
Dynamic Headers by Nicasio Design:在站点header处或者需要的地方,动态显示不同的图片。
Google Analyticator:在站点中自动添加Google Analytics代码。
Google XML Sitemaps:自动生成易于Google抓取的站点结构图。
Spam Karma 2:垃圾留言过滤。
WP-DBManager:提供Wordpress后台数据库管理,包括自动备份。
WP-PageNavi:提供文章分页。
WP-Syntax:提供代码高亮及美化。
10. 多学习别人的经验
在国内,我爱水煮鱼这个站点专门介绍使用Wordpress的经验,还有多种模板和插件推荐。适合不定期去浏览一下。
还记得2007年时候遭遇过一次由于cursor_sharing = similar导致的系统问题,大量游标无法共享,产生巨大的version count,最终让整个系统崩溃。
在这个案例中我提到有4个条件导致了问题的发生:
1. cursor_sharing = similar
2. 收集了列上的histogram
3. SQL中使用到了此列作为条件,并且条件是“等于”
4. 这个SQL是没有绑定变量的
在最近Optimizer Development Group的Why do I have hundreds of child cursors when cursor_sharing set to similar in 10g文章中又再次提到这个现象。
This is in fact the expected behavior when
1. CURSOR_SHARING is set to similar
2. Bind peeking is in use
3. And a histogram is present on the column used in the where clause predicate of query
在Oracle10g中这是正常的现象,如果在某列上收集了histograms信息,那么就等于告诉CBO这一列上的数据是不平衡的,如果都使用同一个执行计划那么就可能产生问题,因此对于每一个distinct值,CBO都会产生一个child cursor,这一点无法避免。当然,由于这是child cursor,因此比cursor_sharing = exact时候产生的parent cursor还是要节省内存空间,至少SQL语句本身不需要重复存储了。
在Oracle10g中解决方法是:
1. 去掉这列上的histograms统计信息,或者
2. 将CURSOR_SHARING = FORCE
虽然源于对Oracle Database的热爱,我们无条件接受了10g中的这个方式,并且不认为这是bug,但是实际上心里一定暗暗骂过,傻啊,我收集了histogram你就要每个值产生1个cursor吗?自己再分析一下不行吗?都是一样的执行计划何必要用不同的cursor空间呢?
我想Oracle自己也一定意识到了这点,于是在Oracle11g中这一切有了变化,Oracle推出了称为Adaptive Cursor Sharing(自适应游标共享)的游标共享机制,可以阅读这几篇相关文章。
Optimizer Development Group:Adaptive Cursor Sharing
Optimizer Development Group:Update on Adaptive Cursor Sharing
Arup Nanda:Adaptive Cursors and SQL Plan Management
Tim Hall:Adaptive Cursor Sharing in Oracle Database 11g Release 1
什么是Adaptive Cursor Sharing就不重复叙述了,上面的几篇文章说的非常清楚,那么ACS机制对于之前在10g中碰到的child cursor过多的情况有何种改善呢?
简单地说,在Oracle11g中我们可以保留cursor_sharing=similar并且也保留列上的histograms统计信息,ACS机制将不会对每一个distinct值都产生一个child cursor,而是对每一个不同的执行计划产生一个child cursor,这大大减少了子游标的数量。这种处理方式无疑是合理的,只有在执行计划确实需要不相同的时候才产生额外的child cursor,当然,在bind peeking之后,CBO是否确实能够选择一个最优的执行计划那另当别论,是另外的话题。
注意,实际上产生的child cursor数量仍然是会大于execution plan数量的,也就是加入对于一个绑定变量的SQL一共有2种执行计划,那么child cursor数量会大于2,因为CBO始终在监控SQL的执行效率,如果认为变量的某一个真实值跟其它值的分布情况有很大的不同,那么CBO就会让这个SQL再做一次hard parse,这样就会产生出来一个新的child cursor,即使最终这个cursor的执行计划还是跟之前的相同。但是我们不用担心这些多余的cursor,因为这些cursor被标志为无法共享(可以通过v$sql.is_shareable字段得知),在需要的时候将会被age out出去。
第九城市今天宣布:在中国大陆地区由第九城市所运营的《魔兽世界》,将于2009年6月7日凌晨0时起终止服务.感谢大家对第九城市四年来努力专心运营 《魔兽世界》的支持和宽容!
从2005年4月份某天开始,进入了这个叫作《魔兽世界》的游戏,经历过赞叹、疯狂、沉迷、疲劳、厌倦、回归、游荡、休闲各种不一而足的状态,断断续续地走到今天,回首算来,居然已经过了4年多。
曾经如此着迷于在这个世界中团队合作的氛围,沉浸于每次齐心协力闯过难关时无以言表的快乐与兴奋,可是随着朋友们的慢慢离去,它几乎已经蜕变为我的机器中一个单机游戏。只是每次用小号奔跑在贫瘠之地的月夜原野中,耳边那悠扬而又忧伤的音乐像流水一样潺潺而过,心中那份柔情总是会被不经意地触碰到。
我仍然怀念在魔兽世界中最初的那段日子,清晰地记得40个人历经艰难推到熔火之心第一个BOSS时的激动,我还保留着那些珍贵的截图,可惜,只能用物是人非来形容了。
在这张图上的朋友们现在还有几个仍然游荡在魔兽世界中?(很可惜,我只拖出了4个小组的名单,加上我自己这个小组才25人)
今天是九城魔兽世界的最后一天,谨以此文送给那些跟我一起在这个世界里挥霍了青春的朋友们。新的世界在等待吗?