Archive for 九月, 2010

笔记本的fedora挂了,貌似是硬件问题,公司的OPS给换了个壳,即除了硬盘没换,其他都换了。

正常开机,但是上不了网。

首先解决有线网络的问题。

ifconfig可以看到eth1和lo两个网卡,而eth1的mac地址是新的,但是/etc/sysconfig/network-scripts/ifcfg-eth0里的mac地址是旧的,所以要首先更改该文件的mac地址。

HWADDR=00:1C:23:4C:17:E0 # 新mac
#HWADDR=00:1C:23:23:80:18 # 旧mac

更改之后,刷新可以连接有线网络了。

继续解决无线问题。

终于找到一篇貌似可以参考的文章:http://huzuofeiwei.com/2009/03/wireless-network-under-fedora-10.html

首先lspci查看接口信息:

$ lspci 

0c:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g (rev 01)

802.11b是无线网络协议,所以我的电脑的无线网卡应该是Broadcom Corporation BCM4312。

rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
yum update # 这个可能会比较慢,我的系统需要下载1G的更新包,也可以跳过

yum install broadcom-wl #安装无线网卡驱动

但是安装完成之后还是无法看到无线网卡,又找到一篇文章:http://linuxwireless.org/en/users/Drivers/b43,是官方对于无线支持方面的说明。

使用lspci -vnn|grep 14e4,可以看到无线网卡的具体型号:

[yicheng@chengyi ~]$ lspci -vnn|grep 14e4

09:00.0 Ethernet controller [0200]: Broadcom Corporation NetXtreme BCM5755M Gigabit Ethernet PCI Express [14e4:1673] (rev 02)

0c:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11b/g [14e4:4315] (rev 01)

在官方说明里可以看到对其的支持度:

14e4:4315

partially supported 2.6.33 and later (PIO mode)

BCM4312

b/g

LP

b43/wl

这时,查看我的系统版本:

[yicheng@chengyi ~]$ uname -a

Linux chengyi 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 i686 i386 GNU/Linux

貌似是版本不够新,那么还是yum update试试吧!

2010-9-27 看懂了LDA的思想:降维,使同一分类的平均距离最小,不同分类的距离最大。开始理解文档关键词提取的思想。

2010-9-29 今天很混乱,整理了一份SEO规范给开发和QA team;协同装了一台geetoo的机器。

2010-9-29 计划:看完LDA的原始论文;看完3篇overseo的文档。

2010-10-10 初步学习了Expect语言。

2010-10-12 开始学习R语言,使用php和R各自写了计算cosine相似度的代码。

2010年5月百度算法调整的一些地方如下:

1、对网站放有大量JS或iframe的站点适当降权。
2、网站无原创内容,文章全为转载的站点权重提升慢。
3、双向链接过多,加上链接到质量差的网站给予降权。
4、导出单向链接过多,并且是链到无权重的站给予降权,防止链接交易站点作弊,多年老站适度导出影响较小。
5、限制了新站优化的关键词排名,这一调整致使新网站做优化后关键词排名浮动较大,稳定性不好。
6、对一些不正当行业的网站更新慢,排名靠后,通过优化排名也很难靠前。

2010年8月百度算法调整的一些地方如下:

第一、从百度对网站收录方面来看

1、收录周期缩短,特别是新站,收录已经从以前的一个月缩短到一周左右的时间。
2、大多数网站收录收录页面有所增加。
3、新站收录几乎不需要有什么外部链接,只要有内容就行了。
4、更新时间:每天更新是 7-9点 下午5-6点,晚上10-12点; 周三大更新,调整为每周四大更新凌晨4点。每月大更新时间是11号 和 26号,特别是26号,更新幅度最大,K站也是最多的。 企业站建议懒的话,每周四前更新一下内容,勤快的话,每天更新3篇。

第二、从百度对关键词排名方面看

1、百度进一步提高自己产品关键词排名次序,百度自己的产品主要有百度知道、贴吧、百科等。
2、百度赋予自己合作伙伴好的关键词排名优势
3、百度排名次序调整周期缩短,原来一个星期进行一次排名,现在是一天三四次的排名顺序调整。百度母婴用品排名次序变化规律:排名第一位的,2-9位排名位置变化频繁。在对几十个网站关键词排名进行观察时发现,发现除了是第一位的外,没有一个稳定的。
4、不同地区、不同网络排名位置也有所不同,例如江苏、广州的,电信、网通等排名都不一样。
5、公司网站排名比个人网站排名有优先权。这可能是应对清理网站低俗内容专项行动,对中小型网站不放心的缘故吧!
6、百度认为是垃圾站的排名也不好。因为有个网站为了省事,就使用了相同的模板,结果百度调整之后,百度流量基本上就没有什么流量了。
7、权重高的要比权重低的网站好多了。纵观站长网,在这次调整中不但没有出现关键词排名降低,相反得到了提升。这可能就是做常青树网站缘故吧。
8、人工干预进一步加强。只要你的网站关键词排名高,从百度过去的流量大,百度就有可能通过人工干预,给你网站关键词降权甚至百度收录中剔除去。

2010年9月百度算法最新调整

9月3日凌晨百度进行了9月的第一次更新,经过对多个网站的观察分析,初步简单的总结了一下几点:

第一:从百度对网站的收录方面来分析:

1.收录周期有所减短,特别是对新站的收录,可以说是放宽了不少,从以前新站需要一个月甚至更久的时间,顽石发现减少为现在个别新注册域名2小时即可收录。
2.新的站点,几乎不是多需要去注重外部连接数量及质量了,只需要尽量做好站内内容就好了。
3.百度大更新时间上的调整,从以前的周三更新,更改为周四。
4.百度对质量要求明显比以前更为简单,大多数的网站,收录量明显的增加。

第二:从百度对关键字的排名情况来看:

1.百度进一步的提高了自身产品关键字排名的次序,包括知道、贴吧、百科等;对于自己的合作网站及伙伴的权重,更是提高了不少!
2.百度排名次序调整周期变短,由原先的一个星期调整一次排名,到现在一天都能三四次的排名调整;
3.对一些低俗网站的处理方法,顽石经过分析认为公司性质的网站要比个人网站排名更有优势;对于一些垃圾站,更是加大了力度,仿站一律不给于排名。

第三:从外链权重来分析:

1.百度对论坛和博客站点的导入连接进行降权,现在的论坛、博客外链将没有以往那么好使了;
2.以往论坛签名将会是一个很好的外链来源,这次调整过后,论坛签名已经对百度失去了以往的效应;
3.对门户网站的外链权重加强,对门户网站的外链权重算法调整,将会影响到所以SEOER的工作方向;

第四:网站内部因素影响加深:

1.对于站点弹窗广告这样的网站,百度予以降权处理;
2.页面、站点里面大量的JS代码内容给于适当降权处理;
3.参与广告联盟站点予以适当降权;
4.对于友情连接过多的站点(10-20合理),或者是不雅站点友情链接的站点,给于降权处理;
5.导出的单向连接过多,给于降权处理;(针对黑链及连接买卖的站点)

zz from: http://www.seowhy.com/bbs/thread-172456-1-1.html

最近在做的项目,需要为其他产品提供一些接口,如果由QA测试的话,就还需要一个图形化的页面,而直接看接口的返回值,都是json字符串,就感觉比较麻烦和不靠谱。

所以,使用了PHP自带的run-tests.php,实现一些自动化测试的功能。刚开始玩这个,理解较浅。仅给一个具体的例子。

比如,针对某个接口http://interface.a.com/ri.php?act=test&id=23&cnt=1,返回值是:

{“Result”:1,”Msg”:[{“ID”:12345,”BlogId”:890,”Title”:”\u4e00\u5f00\u59cb\u7684\u672a\u6765\u3002\uff09″,”Description”:”\u4e00\u5929\u6bd4\u4e00\u5929\u7737\u604b\u3002\uff09 ……- -\u3001\u7761\u7720\u3002 . \u81ea\u52a9\u9910\u2014\u2014\u5168\u5e26\u58f3\u7684\u98df\u7269\u3002 \u72fc\u7c4d\u4e00\u7247\u3002 \u2014\u2014\u2014\u2014\u751f\u6d3b…”,”DateAdded”:”Sep 14 2010 10:38AM”}]}

其中Result是用来标示接口处理是否成功的,如果成功则具体信息是在Msg里。在这种情况下,Msg是一个数组,数组中每个元素可以decode为一个stdClass的对象。利用反射,我们可以取得该对象的属性名称。(其实decode为数组,直接获取其keys也可以)

那么如果直接写代码,为:

$jsonStr = get_http_result(“http://interface.a.com/ri.php?act=test&id=23&cnt=1″);
$obj = json_decode($jsonStr);
$reflect = new ReflectionObject($obj->Msg[0]);
$props = $reflect->getProperties();
sort($props); # 排序,以保证输出唯一
foreach ($props as $prop) {
print $prop->getName() . “\n”;
}
function get_http_result($url) {
assert(strlen($url));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, “$url”);
curl_setopt($ch, CURLOPT_TIMEOUT, 8);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if( $info[‘http_code’] != 200 )
return ”;
return $result;
}

在这里,我只想进行简单的测试,确保接口返回的keys是一致的就可以了,所以以上代码满足我的要求。那么写入到自动化测试脚本为001.phpt:

–TEST–

interface test

–SKIPIF–

–FILE–

<?php

$jsonStr = get_http_result(“http://interface.a.com/ri.php?act=test&id=23&cnt=1″);
$obj = json_decode($jsonStr);
$reflect = new ReflectionObject($obj->Msg[0]);
$props = $reflect->getProperties();
sort($props); # 排序,以保证输出唯一
foreach ($props as $prop) {
print $prop->getName() . “\n”;
}
function get_http_result($url) {
assert(strlen($url));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, “$url”);
curl_setopt($ch, CURLOPT_TIMEOUT, 8);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if( $info[‘http_code’] != 200 )
return ”;
return $result;
}

?>

–EXPECTF–

BlogId

DateAdded

Description

ID

Title

在保证当前目录可写的情况下,从php源代码复制run-tests.php到当前目录,并设置export TEST_PHP_EXECUTABLE=”/path/to/php/bin/php”,执行:

php run-tests.php 001.phpt,看到的结果应该类似:

=====================================================================

CWD         : /curwork/web/autotest

PHP         : /usr/local/php/bin/php

PHP_SAPI    : cli

PHP_VERSION : 5.2.5

ZEND_VERSION: 2.2.0

PHP_OS      : Linux

INI actual  : /etc/php.ini

More .INIs  :

Extra dirs  :

=====================================================================

Running selected tests.

PASS rec fashion/feeling/travel blogs [001.phpt]

=====================================================================

Number of tests :    1                 1

Tests skipped   :    0 (  0.0%) ——–

Tests warned    :    0 (  0.0%) (  0.0%)

Tests failed    :    0 (  0.0%) (  0.0%)

Tests passed    :    1 (100.0%) (100.0%)

———————————————————————

Time taken      :    0 seconds

=====================================================================

IBM的文档很清楚:http://www.ibm.com/developerworks/cn/opensource/os-cn-php-autotest/index.html

最近工作需要,自己维护一个MySql的数据库,所在服务器的硬盘空间不是很大、性能也一般。

需求是:由于一些临时的数据分析,需要将N天的log日志格式化处理后,导入到数据库,进行一定的分析计算之后,就可以全部清除了。

一些常用的命令整理如下(我记性很差,经常把各个数据库之间的命令记混):

启动数据库服务

sudo  -u mysql /usr/bin/mysqld_safe &  # 以mysql用户身份,在后台运行

之后可以看到有两条mysqld相关的进程:

mysql    19370  0.0  0.0  88908  1424 pts/0    S    10:03   0:00 /bin/sh /usr/bin/mysqld_safe

mysql    19402  2.9  3.4 187812 71204 pts/0    Sl   10:03   7:18 /usr/sbin/mysqld –basedir=/usr –datadir=/ms/var/mysql –pid-file=/var/run/mysqld/mysqld.pid –skip-external-locking –port=3306 –socket=/var/run/mysqld/mysqld.sock

由于启动时没有指定任何参数,所以basedir等都是从my.cnf文件中读取的默认配置。

停止数据库服务

sudo -u mysql mysqladmin shutdown -u username-p’passwd’

mysql客户端连接

mysql -u username-p’passwd’ [dbname]

为mysql添加用户

mysql> grant all privileges on *.* to ‘username’@’localhost’ IDENTIFIED BY ‘passwd’ WITH GRANT OPTION;

Query OK, 0 rows affected (0.00 sec) # 从localhost连接到数据库的

mysql> grant all privileges on *.* to ‘username’@’%’ IDENTIFIED BY ‘passwd’ WITH GRANT OPTION;

Query OK, 0 rows affected (0.00 sec) #从任意host连接到数据库的

grant all privileges on *.* to ‘mysql’@’192.168.80.0/255.255.255.0′ identified by ‘password’ with grant option; # 从C类子网192.168.80.0连接的

查看当前运行的sql句子进程,删除指定Id的sql句子

mysql> show  full processlist;
mysql> kill 15;

清除mysql log

(因为仅drop掉表,其log还是很很很占空间的!)

mysql> show binary logs;

mysql> purge binary logs to ‘mysqld-bin.000013′; # 不删除13

临时文件无法写入

当执行耗内存的sql句子后,出现无法写入tmp临时文件的时候,可以看下目标dir是否有空闲空间,必要时可以清理,或者写个my.cnf的tmpdir,指向空间较大的磁盘分区。

Continue reading ‘MySql数据库的初级管理’ »

下面代码中有两种查询数组中是否存在某个值的方式:grep和loop。通过linux下的time命令计算它们的运行时间:grep方式需要1.224s,而loop在0.210s。
for($i=0; $i<100; ++$i){
$what = 1313268051;
#   foreach (@monifyUserIds){
#       if ($what == $_){
#           #print “ok\n”;
#       }
#   }
if (grep /^$what$/, @monifyUserIds){
#print “ok\n”;
}
}