2011年5月 的存档

又一次重装系统

前两天抱着极大的热情,将我的ubuntu10.04给删除了.然后换上了期盼已久的debian6,同样也上网查了好多的资料来解决安装的过程中遇到的问题. 遇到的问题以及解决的过程,大家可以看上一篇文章.这里就不说了.

可惜,在我安装LAMP的时候,遇到了我无法解决的错误.sqlserver总是无法配置成功,异常情况导致安装过程停止.可是网上的那些人都是那样安装的也没出错.看来是我的人品问题.
debian6的感觉就是比ubuntu快了很多.可惜我没法安装lamp方便我本地调试wordpress,虽然windows可以安装php环境,但是我总感觉windows不好用.
无奈,看来只有把debian6给删除了. 昨天晚上一咬牙,重装了ubuntu,然后装上了lamp.感觉真不错.霍霍.

可是今天我好像又脑子转过来了.我的ubuntu有30多G的空间.为什么不能两个系统平分呢?晕,当时怎么就没有想起来呢?
说干就干,删掉昨天晚上装的ubuntu,然后把分给他的空间拿出来一半安装ubuntu,装好后再把另一半给debian,呼呼,这样就可以享受快速的系统了.想要调试wordpress的时候,就进去ubuntu.可能以后用的时间长了,知道是什么原因导致debian安装sqlserver失败后再安装上,那样就可以转移到debian啦.哈哈.
我现在的系统就是 一个win7 一个ubuntu10.04.2 一个debian6,感觉真的不错.霍霍
我真的发现我挺能折腾的..... :jiong:

[解决]数据结构八皇后问题

今天一天都没怎么上网,一直都在鼓捣数据结构问题.原来我就在一篇文章中写过 初识八皇后问题 可惜当时什么都不会.只是写了写这个问题的要求是什么.
今天终于把这个问题给解决了.
还是再说说这个问题吧.
百度百科中的解释:
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。
维基百科中的解释:
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n = 1 或 n ≥ 4 时问题有解。

基本要求就是这样:同行,同列,同对角线不能有棋子就OK了.
我的数据结构课本上给的提示是用递归的方法做.所以我就把我的代码写一下.顺便做下注释.如果大家有更好的解法,可以给我说哦.
我发现我的代码量有点多,由于我不太懂那些用一维数组的方法,所以我的方法显得有点笨,但是好歹可以做出来.
代码

C CODE
/*****************************
Program:八皇后问题
Author:lwent90
Date:2011-5-4
*****************************/
#include<stdio.h>
int queen[8][8];	//定义一个二维数组,存放棋盘
int m=1;	//定义解法个数
int check(int i,int j)
//检查函数,结果用k返回,如果k=0,则所有的检查位置都符合条件,可以放棋子
{	int k=0;int a,b;
	for(a=0;a<i;a++)//检查同列是否有棋子
		if(queen[a][j]==1)
		k++;
	for(a=i-1,b=j-1;a>=0&&b>=0;a--,b--)//检查左对角线元素
		if(queen[a][b]==1)
		k++;
	for(a=i-1,b=j+1;a>=0&&b<8;a--,b++)//检查右对角线元素
		if(queen[a][b]==1)
		k++;
	return k;
}
void put(int i)  //递归函数,放棋子
{	int j;
	if(i>=8)   //当i大于等于8时,输出已经放好的棋子,i从0开始
	{
		printf("第%d种解法:\n",m++);
		for(i=0;i<8;i++)
			{
				for(j=0;j<8;j++)
					if (queen[i][j]==1 )
						printf("%d ",j);
					else printf("- ");
				printf("\n");
			}
		printf("\n");
 
	}
	else 		//递归放棋子
		for(j=0;j<8;j++)
		{	queen[i][j]=1;
			if(check(i,j)==0) put(i+1);
			queen[i][j]=0;
		}
}
int main()  //主函数
{put(0);
return 0;
}

输出格式为:
"第X种解法:
棋盘布局;"

Debian6安装小记

今天终于装上了 debian6,代号叫squeeze是吧?前几天的时候在Microhu's Blog 中,正好遇到了博主问我用的是什么linx系统,于是聊起来了.当时Microhu说他用的是debian感觉速度很快的时候,我就心里痒痒了.一直都听说debian很好,很稳定.虽然软件什么的都比较旧,但是我不是一个喜欢追新的人,即使是使用ubuntu的时候,我也从来没有更新过.想想吧,从10.04出来后我就没装过别的系统,一个连10.10都没用过的人,新出的11.04更是不鸟他阿.哈哈.这样想来,debian的稳定正是我需要的阿,于是马上行动,下载了安装光盘的CD1.话说debian的安装光盘真是多,CD有40多个,DVD有也有5.6个,不知道搞这么多干嘛的.
还好,可以只下载CD1进行安装.
安装过程的问题小点,毕竟我也用了ubuntu老长时间了,那些个分区的问题.设置东西的问题,一扫而过,但是进入系统之后还真是遇到了很多的问题.所以这里记录一下,如果有谁想要>安装debian试试,我们可以交流交流哦.哈哈.
说说遇到的问题吧,

首先是乱码问题.

安装过程中选择的是 简体中文,但是安装完系统,进入桌面后.我就郁闷了,一个个的麻将字,让我们这么看啊.还好网上有解决办法,是因为没有安装字体的原因.把win里面的宋体拿过来.

su   //这里要使用su命令,因为还没有配置sudo,所以无法用普通用户转换root权限
cp simsun.ttc /usr/share/fonts/truetype/
chmod a+r simsun.ttc  //然后给字体增加读权限.
fc-cache -f //刷新字体缓存
fc-list  //查看是否已经安装上宋体了.

使用同样的方法,还可以给debian安装win里面的微软雅黑等等.
这样字体乱码的问题就解决了.

第二个就是解决网络问题了.

(以下均为root操作)

先激活网卡

ifconfig eth0 up

然后就是安装你的网络客户端了,此处因个人而异,由于我们学校使用的是h3c客户端,所以过程就不说了.
连上网络后,先输入以下命令,将原来的源改了,

gedit /etc/apt/sources.list

因为安装的时候使用的光盘,所以源里面默认的就是从光盘中读取东西,但是光盘中的东西毕竟有限,而且我已经将光盘拿出来了.所以用以下内容替换/etc/apt/sources.list 中的那个没加注释的那一行

deb http://mirrors.163.com/debian squeeze main non-free contrib
deb http://mirrors.163.com/debian squeeze-proposed-updates main contrib non-free
deb http://mirrors.163.com/debian-security squeeze/updates main contrib non-free
deb-src http://mirrors.163.com/debian squeeze main non-free contrib
deb-src http://mirrors.163.com/debian squeeze-proposed-updates main contrib non-free
deb-src http://mirrors.163.com/debian-security squeeze/updates main contrib non-free
deb http://http.us.debian.org/debian squeeze main contrib non-free
deb http://non-us.debian.org/debian-non-US squeeze/non-US main contrib non-free
deb http://security.debian.org squeeze/updates main contrib non-free

我使用的是163的源,感觉速度还可以.
做完后进行一下apt源的更新.

apt-get update

然后使用以下命令修复一下安装过程中的错误.

apt-get -f install

//此命令因人而异,可能有的人不需要用,但是我遇到了,不用这句话.就不让安装别的软件.

最后就是添加root用户组了

接下来才是要命的东西.前面说了这么多都是使用su命令切换到root身份.我们都知道,可以
用普通用户切换到临时的root,但是当你真正试验的时候,就会发现,根本就找不到sudo这个
命令,于是网上有人说,要修改/etc/sudoers文件.在这里我就要向 网上那些到处教授配置debian的root用户组的人 问一下啦,他们到底真正安装过debian吗? /etc里面根本就没有sudoers文件,你编辑个屁啊!真想对他们说声,以后没真正做过就不要误人子弟!!
靠,说了就来气,都是那些人害的我到处找sudoers文件,可是这么也找不到.最后原因 就是debian里面根本就没有安装sudo,所以你找到天上也找不到这个文件.
解决方法(root命令)

apt-get install sudo
chmod u+w /etc/sudoers //给此文件增加写入权限
gedit /etc/sudoers

找到root ALL=(ALL) ALL一行,在下一行添加
sayme ALL=(ALL) ALL 将sayme换成你的用户名
然后更改文件权限,

chmod 0440 /etc/sudoers

不做这一步你的普通用户就无法使用sudo命令.
这样你再以普通用户身份使用sudo命令 时候就可以了.
自此,我安装debian的时候遇到的问题就基本解决了.当然安装输入法,就不算是问题了,还>是在这里说一下.
此时又想说一下网上的那些人,我安装完debian,源里面根本就没有fcitx,还要人家使用apt-get的命令安装!
我是从fcitx的googlecode的项目主页上下载了deb包,然后安装的.
sudo dpkg -i *.deb
这样就行了.为什么使用dpkg呢,因为debian里面双击deb不是默认安装的,而是使用归档管>理器打开deb包.要想双击deb包安装软件的话,需要安装一个教gdebi的软件.

sudo apt-get install gdebi

这样双击deb包,就会默认提示你安装了.

基本的问题解决了,但是肯定有更多的问题等着俺啊,没办法,使用debian的时候我就做好了
心里准备.遇到问题就说明是我进步到过程啊,呵呵.
大家有想使用debian的吗?可以交流交流哦.速度感觉非常快.适合于那些喜欢简洁的人哦~~

[转]代码实现社会化分享工具

呼呼,五一假期就是好.可以一直上网,没人打扰.因此嘛,我就多转转,找找好东西.这不,又看到了好东西.所以就直接拿来用了.

代码实现社会化分享,这样就不用那些个什么Jiathis 还有 bshare什么的了,使用那些工具的不好的地方就是那样的网站加载起来一般都比较慢,拖慢了网站的整体速度,因此最好的办法就是网站原生带有这些东西.

今天正好找到了这个玩意,因此和大家分享一下.具体效果可以看文章右下角.
原文地址动点创想的分享条插件,表示非常感谢.虽然作者的网站是emlog的,但是代码是通用的.所以....嘿嘿.
此作者的方法我感觉非常好,不用在页面上写一大堆的代码,把这些代码放到js文件里面加载,节省了空间.(也有人可能不喜欢js,那就自己看着办吧.)
写很麻烦,还是直接转载吧,大家可以去动点创想亲自去看看哟. 只是作者的网站上贴的代码好像有点错误.附件中的代码是正确的,因此我斗胆将附件中的代码替换了原文中的代码.
------------原文开始---------------
曾几何时,我为了这个分享条工具折腾了好久,刚开始还在我很菜的时候我用过“Jiathis分享道”等第三方平台提供的JS代码,后来自己在网上找独立的JS代码,然后一点点淘汰掉。这个东西,要说确实也没什么大用,几乎没人会点击分享,就算分享到SNS网站,对于带链接的东西几乎也没人点击。不过,我还是乐此不疲。
然后我慢慢总结了一些常用SNS分享站点的地址,比如腾讯微博,QQ空间,人人网等等的share平台地址和格式。偶然的机会在WP大神mg12的博客看到一段jQuery获取网址和文章标题、链接的代码,正好最近看《锋利的jQuery》看到DOM操作,可以用了,然后就诞生了此插件。其实根本不算什么emlog插件,是一个通用的jQuery插件吧。因为做成插件一来必要性确实不大,另外做成插件只能占用相关日志的挂载点,还不如提供一个JS的插件供大家继续折腾呢。下面是具体方法:
首先,为了获取网站的网址和分享文章的标题、链接,我们用jQuery相关方法操作,代码如下:

JAVASCRIPT CODE
/*
	name:分享条工具JS插件
	Author:sprityaoyao
	website:www.11reading.com
	Email:13919361718.cool@163.com
	*/
jQuery(document).ready(function($){
function getParamsOfShareWindow(width, height) {
	return ['toolbar=0,status=0,resizable=1,width=' + width + ',height=' + height + ',left=',(screen.width-width)/2,',top=',(screen.height-height)/2].join('');//定义好弹窗样式
}
 
function bindShareList() {
	var link = encodeURIComponent(document.location); // 文章链接
	var title = encodeURIComponent(document.title.substring(0,76)); // 文章标题
	var source = encodeURIComponent('自说Me话'); // 网站名称
	var windowName = 'share'; // 子窗口别称
	var site = 'http://ISayMe.com/'; // 网站链接
 
	jQuery('.twitter').click(function() {  //DOM操作html的class元素
		var url = 'http://twitter.com/home?url=' + link + '&text=' + title;//分享网址格式
		var params = getParamsOfShareWindow(500, 375);
		window.open(url, windowName, params);//弹出一个窗口中打开页面
	});
 
	jQuery('.renren').click(function() {
		var url = 'http://share.renren.com/share/buttonshare?link=' + link + '&title=' + title;
		var params = getParamsOfShareWindow(626, 436);
		window.open(url, windowName, params);
	});
 
	jQuery('.sina').click(function() {
		var url = 'http://v.t.sina.com.cn/share/share.php?url=' + link + '&title=' + title;
		var params = getParamsOfShareWindow(607, 523);
		window.open(url, windowName, params);
	});
 
	jQuery('.t_qq').click(function() {
		var url = 'http://v.t.qq.com/share/share.php?title=' + title + '&source=' + source + '&url='+ link;
		var params = getParamsOfShareWindow(642, 468);
		window.open(url, windowName, params);
	});
 
	jQuery('.qzone').click(function() {
		var url = 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?title=' + title + '&url=' + link + '&site=' + site;
		var params = getParamsOfShareWindow(634, 668);
		window.open(url, windowName, params);
	});
}
bindShareList();//调用
});

按照相关注释修改成你的网址和网站名称后,将以上代码按照UTF-8编码保存为share.js,然后再header.php的< head>标签内或者footer.php的< /body>之前引用。
然后,我们还得有分享样式,以下是html代码:

HTML4STRICT CODE
<div class="share clearfix">
 <span><a class="t_qq" title="分享到腾讯微博">腾讯微博</a></span>
 <span><a class="sina" title="分享到新浪微博">新浪微博</a></span>
 <span><a class="twitter" title="分享到Twitter">Twitter</a></span>
 <span><a class="renren" title="分享到人人网">人人网</a></span>
 <span><a class="qzone" title="分享到QQ空间">QQ空间</a></span>
    </div>

将以上代码放在你需要放置的位置,比如echo_log.php的文章末尾处。
当然还得有样式规范,以下是CSS样式代码,放在你模板的css文件即可:

CSS CODE
/*分享到*/
/* 这是清除浮动的代码 */
.clearfix:after{content:".";clear:both;height:0;visibility:hidden;display:block;}
.clearfix{display:inline-block;}
* html .clearfix{height:1%;}
.clearfix{display:block;}
/* 清除浮动代码结束 */
 
/* 这是分享部分的样式代码 */
.share{padding:5px;}
.share span{float:left;margin:0 15px 0 0;}
.share span.txt{margin:0;}
.share a{background:url("images/icon.gif") no-repeat 0 0;display:block;padding:0 0 0 18px;height:16px;line-height:16px;color:#0066CC;overflow:hidden;margin:2px 0 0;text-decoration:none;float:left;}
.share a:hover{color:#E05C23;}
.share .twitter{background-position:0 -16px;}
.share .renren{background-position:0 -32px;}
.share .qzone{background-position:0 -48px;}
.share .t_qq{background-position:0 -64px;}

最后,是一个图标了,在附件中提供下载。当然注意CSS代码中的图标路径要匹配。
至此,整个分享条制作完毕,感觉这样是不是舒服多了。呵呵,兼容性嘛,样式完全兼容,但是在IE6下,本来是小窗口新页面显示分享站点的却是整个页面显示了,没什么大问题。这个我只能表示让蛋疼的IE6去死吧,懒得兼容了。最后提供打包好的代码。

---------原文结束--------------
说明一下.那个icon.gif,由于我的主题文件中已经有了icon.gif文件,因此如果想要再使用的话.就要改名了.我改成了icon2.gif,要不然就会一片难堪哟.呵呵.
另外那个css部分,大家看着自己调整吧.我就不把我调整的拿出来了.想要我的话,自己看源代码. :lol:

文中提到的 附件地址.我上传到了115网盘,点击此处下载.

[转]防止攻击 - WordPress登录邮件提醒

首先祝大家五一快乐,劳动光荣. :lol:
今天看rss订阅,无意见又看到了好东西了.是个防止自己的博客被人恶意登录的东西,可以防止别人通过穷举的方法尝试密码哦.不说了.先转过来再说.
原文地址在烙 印防止攻击 - WordPress登录邮件提醒,这里表示感谢啦.
---------------以下为烙印原文------------
WordPress 不像Dedecms,可以任意的修改后台管理目录文件夹的文件名,防止有人恶意穷举登陆来破解密码。随着 WordPress 的发展,关注的人越来越多,漏洞也越来越多,我们更应该注意自己的后台安全。

为了防止博客被人穷举登陆,我们可以使用下面的代码来自动发送邮件提醒自己。

首先需要确定的是空间有无邮件功能,此功能需要邮件功能支持,测试有无邮件功能的方法:登录界面点击“忘记密码”,有邮件发到你邮箱就有邮件功能。

一、登录成功提醒
这种方法就像银行的登录提醒一样,如果有人登录了系统,就会发一封邮件到邮箱,提醒你有人登录了,如果当时不是你登录,就要引起警惕了。将以下代码放入主题的functions.php中:

PHP CODE
/*****************************************************
 函数名称:wp_login_notify v1.0 by DH.huahua.
 函数作用:有用户登录wp后台就会email通知博主
******************************************************/
function wp_login_notify()
{
    date_default_timezone_set('PRC');
    $admin_email = get_bloginfo ('admin_email');
    $to = $admin_email;
	$subject = '你的博客空间登录提醒';
	$message = '<p>你好!你的博客空间(' . get_option("blogname") . ')有登录!</p>' .
	'<p>请确定是您自己的登录失误,以防别人攻击!登录信息如下:</p>' .
	'<p>登录名:' . $_POST['log'] . '<p>' .
	'<p>登录密码:' . $_POST['pwd'] .  '<p>' .
	'<p>登录时间:' . date("Y-m-d H:i:s") .  '<p>' .
	'<p>登录IP:' . $_SERVER['REMOTE_ADDR'] . '<p>';
	$wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
	$from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
	$headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
	wp_mail( $to, $subject, $message, $headers );
}
 
add_action('wp_login', 'wp_login_notify');

二、登录失败提醒
第二种方法我就得比较有效,有人尝试登陆你的系统,但是没有成功,这种反复尝试的动作本身就需要被记录下来,发给博主,这样,只要有错误的登录,就会发一封邮件到自己的邮箱,将对方尝试的登录名和登录密码发送到你邮箱。将以下代码放入主题的functions.php中:

PHP CODE
/*****************************************************
 函数名称:wp_login_failed_notify v1.0 by DH.huahua.
 函数作用:有错误登录wp后台就会email通知博主
******************************************************/
function wp_login_failed_notify()
{
    date_default_timezone_set('PRC');
    $admin_email = get_bloginfo ('admin_email');
    $to = $admin_email;
	$subject = '你的博客空间登录错误警告';
	$message = '<p>你好!你的博客空间(' . get_option("blogname") . ')有登录错误!</p>' .
	'<p>请确定是您自己的登录失误,以防别人攻击!登录信息如下:</p>' .
	'<p>登录名:' . $_POST['log'] . '<p>' .
	'<p>登录密码:' . $_POST['pwd'] .  '<p>' .
	'<p>登录时间:' . date("Y-m-d H:i:s") .  '<p>' .
	'<p>登录IP:' . $_SERVER['REMOTE_ADDR'] . '<p>';
	$wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
	$from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
	$headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
	wp_mail( $to, $subject, $message, $headers );
}
 
add_action('wp_login_failed', 'wp_login_failed_notify');

个人推荐使用第二种方法,第一种如果你经常登陆后台的话,会造成邮箱大量邮件积累。不过你要是跟我一样习惯离线使用WLW发布的话,就无所谓了。目前烙印已经加入此功能,如果有人愿意尝试穷举登陆,我不介意将他加入访问黑名单。
参考来源DH 博客,感谢DH.huahua。
-------------------原文结束-------------------
我也是把第二段 放到functions里面,然后一试.效果确实不错. 效果图大家可以去烙印博客看看.推荐大家是使用这段函数.