Monthly Archives: September 2009

最近在看Andriod SDK

本想买iPhone,不过鉴于联通版iPhone的垃圾与高价,以及换号的不便,最好在M8和HTC hero之间徘徊.带老婆去魅族的专卖柜台,老婆看了一眼就很讨厌M8,我也没办法。我也认为M8还是个不错的机器,至少从性价比上来说超过了iPhone或者HTC hero,不过M8的非主流用户让我觉得很不爽,算了还是多掏点钱买htc hero算了。

颜色有黑色,白色和玫瑰红几种,上次买M600的时候没有买白色的很遗憾,这次坚决选白色的.屏幕的3.2寸的高分屏,显示效果不错,内置的gmail和gtalk客户端很好用.比较爽的是hero可以自己刷rom,android的系统是开源的,如果你愿意完全可以自己根据源码编译一个系统自己刷上去用.

后壳的白色涂料是一种叫做”铁氟龙”的东西,看起来比较耐磨;前面的面版使用的是金属的,耐磨性也不错.触摸屏的材料也是玻璃,但是听说没有iphone硬度高.轨迹球用起来要比四维摇杆方便一些.

除了硬件的原因,我还是很看好Andriod系统的.虽然现在apple的iphone很风光,但是我觉得Andriod会像当年PC击败apple一样,Andriod通过开放集结大家的力量来击败apple.iphone’的成功很大程度上依靠iphone的竞争对手实在是太垃圾了,WM的智能机就不说了,SB的系统和诺基亚一样陈腐不堪,其他的智能手机都是电话加上一块大得显示屏而已,谈不上智能.Andriod如果发扬光大,再加上完全免费,真得有可能完全代替MS,成为第三波信息技术的核心.

Andriod的SDK也是基于java,默认的IDE是eclipse.毕竟是给mobile系统使用,Andriod的MVC体系看起来有些奇怪,并且目前的资料也不多,初期入门比较费劲.大致了解到:

  1. 没有program的概念 所有的program都是由很多activity组合而成.
  2. 每个activity都是单独线程.
  3. UI可以写在code中,但是最好使用xml文件描述,跟css差不多
  4. IDE能够智能转换xml到java class文件.

在FreeBSD NAT网关服务器中使用iftop查看各个内网电脑的流量

昨天下午网速很慢,用systat -if查看发现流量1.7MB每秒,肯定是有人在下迅雷了,但是使用netstat无法查询都nat服务器后面内网各个电脑的流量,很是尴尬。后来还是人工查找后发现了“凶手”。

后来在网上发现了iftop这个不错的工具,具体位置在

/usr/ports/net-mgmt/iftop

然后安装:

make install clean

安装好了以后就可以在bash中敲出iftop来观察内网流量了。
iftop

默认界面跟top命令差不多,显示的信息有点杂乱,不过有几个命令可以改善显示结果:

s键             Hide source host,可以直接显示每个内网ip的流量

<(>)键      根据每个ip的流量排序(正序或者倒序)

SEO Smart Links使用总结

SEO Smart Links是个不错的增加内链的工具,原来自己Blog根本就没有在文章中加过内链,从某种方面来说也损失了SEO的机会,关键是自己手工加内链是一个比较吃力的活。后来找到了SEO Smart Links安装以后但是没有发现增加文章内的内链,查看了它的源码,发现添加了这几行:

if ($options['post'] || $options['page'])
add_filter('the_content',  array(&amp;$this, 'SEOLinks_the_content_filter'), 10);
if ($options['comment'])
add_filter('comment_text',  array(&amp;$this, 'SEOLinks_comment_text_filter'), 10);
}

首先判断是否在options中允许在post和page中添加内链,如果允许的话,就使用函数处理内容。看起来也没错,但是我不理解他是如何判断post或者page中那些关键词比较匹配那些title,然后加上内链哪?或者是因为我的Blog是中文,而原来的插件仅仅是为了配合英文而无法配合中文的关键词查找?测试一下全部是英文的post试试。很遗憾,即使用英文,还是无法添加内链。

继续查看源码后,稍微有些眉目,暂且放下是否能够匹配中文的问题。首先在关键的SEOLinks_process_text($text, $mode)函数中,会自动查找是否有用户自定义的类似于如下的规则:
[cc lang=”html”]css,CSS,http://www.youurl.com[/php]
如果有的话,就把key,value取出来,使用正则表达函数替换post中的主题,这个很好理解,不再多说。
下面就是如何内链自己的posst的title了,首先在wordpress的cache中查找数据:

if ( !$posts = wp_cache_get( 'seo-links-posts', 'seo-smart-links' ) ) {
$query="SELECT post_title, ID, post_type FROM $wpdb-&gt;posts WHERE post_status = 'publish' AND LENGTH(post_title)&gt;3 ORDER BY LENGTH(post_title) DESC";
$posts = $wpdb-&gt;get_results($query);

wp_cache_add( 'seo-links-posts', $posts, 'seo-smart-links', 86400 );
}

我猜是为了性能的原因,如果每次显示post都要在db中查找一番,对性能影响绝对是巨大的。这个参数“86400”代表什么需要了解一下,我猜单位是秒,换算一下正好24小时,也就是一天。这也能解释为什么我刚才使用了title和content全部是英文的页面但是没有任何反应的原因了。然后就是查找post的title是否跟某个word重合,如果是的话就替换链接。这样解释倒也合情合理,只有等明天看看英文post是否有内链了。

很遗憾,即使使用英文作为title,但是仍然没有内链生成.猜想还是因为语言的原因,于是就在一个纯英文的网站上测试,结果一切OK.

简约而不简单的WP主题-iBlog2

xp-iBlog-title

iBlog2在XP下的显示效果

iBlog2是一个非常简约的WP主题,看到这个Theme以后就把原来的Theme更换了。在中文Blog中,iBlog2显示的效果稍微有些不同,尤其是在XP下,nav的字体好像有重影一样,但是在我的Macbook下面就比较正常。

但是在Mac OS下的显示效果就非常棒:

Mac-OS-iBlog-title

iBlog2在Mac下的显示效果

原因还是字体的问题。iBlog2原来使用的是“”Lucida Grande”,”Lucida Sans Unicode”,Arial,Verdana,sans-serif”字体,这种字体在Mac下的显示小效果很好,但是到了XP下,边缘的毛刺就很明显,所以还是把字体修改一下,兼容性稍微好一些,毕竟使用XP的人还是多于Mac的用户的。

iblog2字体修改版下载

Google mini & Google GSA

Google mini是谷歌出售的一种小型化服务器:这玩意能模拟google的搜索结果!

硬件上只是一个1U的服务器,但是内部包含了很多谷歌的搜索算法,mini版本的只能搜素最多5000个文档,出售对象是一些想建立自己内部搜索引擎的公司企业用户。虽然硬件很一般,但是google mini确包含着google最为核心的产品:搜索引擎。虽然是简化版的,但是对于SEOer来说,这就是最为重要的东西。

还有更NB的,比google mini大一些的是GSA,下面上图:

Google GSA

Google GSA

你可以把这个GSA看做是google 的微缩版,它有爬虫,有索引库,有排序算法。它的的硬件和软件都是现在google.com这个网站正在用的东西。所以两者之间相似程度非常的高。我在过去操作google mini的时候已经证实:至少它的抓取机制和现在的google.com几乎是一摸一样的。

这玩意挺贵的,估计只有专业做SEO的公司才有钱能够买到。

CSS盒子模型纠错

自己的一个WP网站,用的是一个国外的Themem,显示的时候有些问题,具体情况描述如下:

begin

有时候标题会把图片给挤过去了,并且影响了整个页面的排列,很不美观。HTML的结构如下

[cc lang=”html”]

recent from category one

How to Introduce Dog

Many dog owners seem to forget the basic rule whilst proudly showing off their new acquisition , to their family and friends. They bypass the correct introduction sequence, which is both basic, simple and logical. We should always place ourselves in our dog’s position, and ask ourselves a few questions…

[/php]

第一次修改:治标不治本

我发现一个奇怪的现象,如果标题的长度如果比较长的话,就不会出现这样的效果。比如 我在firebug里面把标题的内容人为加长

test1

看来是title-boxes的长度属性没有固定 如果标题太短的话不足以支撑起html的结构,那好就给它固定一个width属性:
[cc lang=”css”]width:100%;[/php]

如果图片层不知道换行的话,就让标题占满100%的位置,强迫图片层换行.这样OK了,但是原因还没有找到。是不是Theme的设计有缺陷?

第二次修改:查找CSS模型

重要的是[cc lang=”html”][/php]这个span。css属性中“display”是“block”的,我的理解,按照css盒模型,如果该div的display如果是block的话,这一个div就是一个”块”,即使是前面有空余空间 也要另起一行.所以,如果给图片所出得div加上display为block的属性的话,图片是否就会自动换行?很遗憾,及时给图片所在的层加上block属性,位置也么有任何变化.经过无数次测试,我的结论是:如果想让某个div自动换行,出入你把他挤到下一行去,它是不会自动去下一行的.

FreeBSD网关使用PF来控制内部网络流量分配

营业部内部原来使用的是一个廉价家用路由器,共享使用一条10MB光纤共享上网。但是经常上网速度时快时慢,并且老板后来吩咐说他觉得自己网速慢,想要把他的网速分的快一些。家用路由器没有这个功能,所以自己装了台FreeBSD作为网关,共享上网。制作网关过程可以参看这里。但是没有介绍如果使用ALTQ来控制内部流量分配。后来参阅了OpenBSD的pf(pf是原本在OpenBSD上面,后来被移植到了FreeBSD上面)说明,pf有三种流量优先方法:

  1. Class Based Queueing
  2. Priority Queueing
  3. Random Early Detection

要求:Boss的带宽必须保证,员工的带宽也不能慢,客户经理室的电脑经常下载电影,看视频,所以要限制一下,并且降低客户经理室的网络包优先级。

Class Based Queueing(CBQ)

Class Based Queueing (CBQ) is a queueing algorithm that divides a network connection's bandwidth among multiple queues or classes. Each queue then has traffic assigned to it based on source or destination address, port number, protocol, etc. A queue may optionally be configured to borrow bandwidth from its parent queue if the parent is being under-utilized. Queues are also given a priority such that those containing interactive traffic, such as SSH, can have their packets processed ahead of queues containing bulk traffic, such as FTP.

CBQ可以用来控制网络中分给某给工作站的网络带宽.给某个网卡上分一个父带宽,下面可以划分很多子queue.
[cc lang=”java”]
Root Queue (10Mbps)
UserA (4Mbps, priority 1)
UserB (3Mbps, priority 1)
UserC (3Mbps, priority 1)
[/php]

配置文件为:
[cc lang=”java”]
ext_if=”bge0″
int_if=”rl0″
routerip=”192.168.1.1″

internal_net=”192.168.1.0/24″
ext_addr=”222.85.***.***”

NoRouteIPs = “{127.0.0.0}”
Danger_port=”{445 135 139 593 5554 9995 9996}”
ssh_port=”2223″ #更改ssh默认端口22
loop=”lo0″

boss = “192.168.1.64,192, 168.1.201”
core = “192.168.1.62, 192.168.1.68, 192.168.1.57”

altq on $int_if cbq bandwidth 10Mb queue{other_in,boss_in,core_in,www}

queue other_in bandwidth 4Mb cbq(default)
queue boss_in bandwidth 3Mb cbq(borrow)
queue core_in bandwidth 3Mb cbq(borrow)

nat on $ext_if from $internal_net to any -> ($ext_if)

block quick on $int_if inet proto tcp from any to any port $Danger_port
block quick on $ext_if inet proto tcp from any to any port $Danger_port
block in quick on $ext_if inet proto tcp from any to any port $ssh_port #取消外部IP访问ssh

pass in all
pass out all
pass out quick on $int_if proto {tcp,udp} from any to {$boss} queue boss_in
pass out quick on $int_if proto {tcp,udp} from any to {$core} queue core_in
pass out quick on $int_if proto {tcp,udp} from any to any queue other_in
[/php]

这种方式话分的带宽是固定的,一个人(或者组)分了那么多就固定那么多了,除非使用borrow关键词.但是我测试了borrow后发现还是单个用户的那么多带宽,并没有能从父队列借出一丁点带宽来.

试用结果:单位原有的带宽是10Mb的,如果不是高峰期下载的话,每个人用迅雷能下载到1.7MB左右.使用CBQ限速后,每个人最高只能下载到自己所分的带宽,效率不太高.

Priority Queueing (PRIQ)

Priority Queueing (PRIQ) assigns multiple queues to a network interface with each queue being given a priority level. A queue with a higher priority is always processed ahead of a queue with a lower priority. If two or more queues are assigned the same priority then those queues are processed in a round-robin fashion.

PRIQ可以用来分配某种网络优先权.比如说你想让SSH的优先权高于FTP,这样SSH就不会出现命令延时的问题了.
[cc lang=”java”]
Root Queue (2Mbps)
Queue A (priority 1)
Queue B (priority 2)
Queue C (priority 3)[/php]

PRIQ能够比较高效的利用带宽资源.如果不是拥挤的情况下,每个人都可以使用最高的带宽,但是如果优先级高得人的queue比优先级低的人有优先权,这样就既能保证boss的速度,又能不影响大家的速度.

Random Early Detection

Random Early Detection (RED) is a congestion avoidance algorithm. Its job is to avoid network congestion by making sure that the queue doesn't become full. It does this by continually calculating the average length (size) of the queue and comparing it to two thresholds, a minimum threshold and a maximum threshold. If the average queue size is below the minimum threshold then no packets will be dropped. If the average is above the maximum threshold then all newly arriving packets will be dropped. If the average is between the threshold values then packets are dropped based on a probability calculated from the average queue size. In other words, as the average queue size approaches the maximum threshold, more and more packets are dropped. When dropping packets, RED randomly chooses which connections to drop packets from. Connections using larger amounts of bandwidth have a higher probability of having their packets dropped.

RED这种方式暂时还没有研究.

参考:PF: Packet Queueing and Prioritization

关于PPstream和PPlive的问题

我原来一直使用PPstream,但是最近对PPstream的意见越来越大了.

  • 速度越来越慢,不是视频下载速度而是软件打开,刷新速度.
  • 直播频道的第一财经也是越来越慢,甚至无法保证正常速度收看.
  • VIP政策,把一部分最新的影视搞成VIP内容,普通用户无法收看.
  • 软件界面冗长,经常出现想把播放器全屏但是无法全屏的毛病,还经常出现界面假死的状态.
  • 没有魔兽对战季节赛的内容,这一点PPlive做得很好.
  • 没有记忆功能,比如说我昨天看了天龙八部的第10集,但是今天忘了,如果用PPstteam就的凭借记忆一集一集的找.

PPlive相对于PPstream的几点缺点,不足之处就是没有第一财经,其他的部分还都可以接受

WordPress使用代码高亮插件-CodeColorer

CodeColorer是一个WordPress的代码高亮插件。原来的代码高亮是用Theme自带的css效果,但是这次更换主题以后新的主题并没有对代码进行高亮的优化,本来可以更换wp的editor,不过颇为麻烦。后来找到了个code高亮插件 CodeColorer 基本上比较完美的解决了问题。用法比较简单,只要在编辑的时候切换到HTML标签,但是选取代码片段,点击”cc”按钮,输入代码语言的种类,这就OK了.