Archive for the ‘技术’ Category

debian下编译pidgin2.4.0

Tuesday, April 15th, 2008

edited on March 7, 2008 3:50 PM, 这篇文章是在服务器down掉的日子里写在google doc里的.

终于在debian下成功编译了pidgin2.4.0,简单记录一下.

多数情况下编译不成功或者不能编译都是因为缺少库文件, 下面是编译pidgin2.4.0用到的库,我的debian版本是4.*

gcc
autoconf
gdb
automake1.9

libgtk2.0-dev
libxml2-dev
gettext
libnss3-dev
libnspr4-dev
build-essential
libxml-parser-perl
libglib2.0-dev
libglib2.0-dev
libgstreamer0.10-dev
libnss-dev(用来解决msn的ssl支持问题)

然后
./configure  
make
make install

后记: 刚刚用linux的时候在网上找编译相关的教程, 一个网友说解决编译失败最简单的方法是把光盘中全部的库都装上… 不过由于我比较懒, 并没有那么长时间来试.

vForm ver1.3 build 20071207

Friday, December 7th, 2007

为了简化烦琐的javascript前端验证代码,

为了更好的通过w3c标准认证,

Oh yeah, vForm诞生了!

下载程序请直接拉到文章最后的附件部分.

什么是vForm?

vForm是一个php和一个javascript的结合, 再具体点说,vform由一个php类和一个javascript验证函数库组成, php的作用就是控制调用和生成javascript.

为什么开发vForm?

javascript验证是我们公司每个项目必须要做的工作, 为了避免反复写大量的javascript验证代码, 所以抽出了一些时间开发vForm.

vForm有多方便?

因为本人很懒, 所以需要程序一定要完成大部分工作.不说废话,上代码,看看vform如何完成一个表单验证. 注:需要将vform.php和vform.js放到同目录下.可以直接下载程序包,里面也有这个例子.

___________________simple.php____________________

<?php
/**
*   这是一个vfrom使用的一个离子.本例中为大家演示了各种验证规则
* 的使用和同页面多表单验证的实现方法.
*/
require_once(’vform.php’);
$config  = array(
array(”,’username’,’require’,’请输入帐号’),
array(’len’,’username’,’10′,’帐号不能超过10位’,’5′,’帐号不能少于5位’),
array(”,’pass’,’require’,’请输入密码’),
array(’len’,’pass’,’16′,’密码不能超过16位’,’6′,’密码不能少于6位’),
array(’s’,’repass’,’pass’,’两次输入的密码必须相同’),
array(”,’qq’,’number’,’QQ号码必须为数字’),
array(’len’,’qq’,’9′,’QQ号码不能超过9位’,’5′,’QQ号码不能少于5位’),
array(”,’phone’,’phone’,’电话号码由-和数字组成’),
array(”,’name’,’chinese’,’姓名必须是汉字’),
array(’len’,’name’,’4′,’这里不欢迎日本人’,’2′,’名字太短了’),
array(”,’ename’,’english’,’英文名必须是英文’),
array(’len’,’name’,’25′,’你是火星人么?’,’2′,’名字太短了’),
array(”,’age’,’number’,’年龄要是数字才行’),
array(”,’postcode’,’postcode’,’这个是邮政编码’),
array(”,’p’,’percent’,’一个百分比’),
array(”,’f’,’float’,’一个有理数,正负小数整数等等’),
array(”,’nc’,’nochinese’,’不能输入汉字’),
);
$config2  = array(
array(”,’username2′,’require’,’请输入帐号2′),
array(”,’pass2′,’require’,’请输入密码2′),
array(’s’,’repass2′,’pass2′,’两次输入的密码2必须相同’)
);
$vform   = new vform($config, ‘form1′);
$xform   = new vform($config2, ‘b_2′, ‘click’);
?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en” lang=”en”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>vForm示例</title>
<style type=”text/css”>
*{
margin:0;
}
body,html{
font:12px;
text-align:center;
}
h1{
font:36px;
font-weight:bold;
text-align:left;
background:#ccc;
border-bottom:2px solid #666;
margin-bottom:10px;
}
form{
margin:10px;
}
img{
border:0;
}
#main{
width:275px;
margin:0 auto;
text-align:left;
}
#main p{
text-align:right;
padding:2px;
}
.text{
width:150px;
background:#eee;
border:1px solid #666;
}
.botton{
width:75px;
color:#fff;
font-weight:bold;
background:#555;
border:1px solid #000;
padding:2px;
}
</style>
<?=$vform->p();?>
<?=$xform->p(true);?>
</head>
<body>
<h1>vForm示例</h1>
<div id=’main’>
<form action=’http://www.m4ker.net’ method=’get’ id=’form1′ >
<p><b>帐号:</b><input name=’username’ class=’text’ id=’username’ /></p>
<p><b>密码:</b><input name=’pass’ class=’text’ id=’pass’ /></p>
<p><b>重复密码:</b><input name=’repass’ class=’text’ id=’repass’ /></p>
<p><b>电话号码:</b><input name=’phone’ class=’text’ id=’phone’ /></p>
<p><b>QQ号码:</b><input name=’qq’ class=’text’ id=’qq’ /></p>
<p><b>姓名:</b><input name=’name’ class=’text’ id=’name’ /></p>
<p><b>英文名:</b><input name=’ename’ class=’text’ id=’ename’ /></p>
<p><b>年龄:</b><input name=’age’ class=’text’ id=’age’ /></p>
<p><b>邮政编码:</b><input name=’postcode’ class=’text’ id=’postcode’ /></p>
<p><b>百分比:</b><input name=’p’ class=’text’ id=’p’ /></p>
<p><b>有理数:</b><input name=’f’ class=’text’ id=’f’ /></p>
<p><b>非汉字:</b><input name=’nc’ class=’text’ id=’nc’ /></p>

<p><input type=’submit’ value=’验证’ class=’botton’ id=’b_1′ /></p>
</form>
<form action=’http://www.m4ker.net’ method=’get’ id=’form2′ >
<p><b>帐号2:</b><input name=’username’ class=’text’ id=’username2′ /></p>
<p><b>密码2:</b><input name=’pass’ class=’text’ id=’pass2′ /></p>
<p><b>重复密码2:</b><input name=’repass’ class=’text’ id=’repass2′ /></p>

<p><input type=’submit’ value=’验证’ class=’botton’ id=’b_2′ /></p>
</form>
<p><a href=”http://validator.w3.org/check?uri=referer”><img src=”http://www.w3.org/Icons/valid-xhtml10” alt=”Valid XHTML 1.0 Transitional” height=”31″ width=”88″ /></a></p>
</div>
</body>
</html>

______________________________________

Ok了, 一点javascript都不需要.更详细的使用方法就需要大家自己发掘了.

附件:vform ver1.3 bulid 20071207

SaBlog-X1.6 -> WordPress 2.2.3 数据完美转移.

Sunday, November 18th, 2007

因为有很多的朋友向我要 sablog转wordpress 的程序, 但由于我当初写的程序只处理了数据, 而图片缩略图是用acdsee转的, 所以如果大家想进行数据转移可能需要等一阵子, 我有时间会完善一下程序然后发给大家.  – 08.4.19

全自动的转换程序已于昨晚完工, 现在是测试阶段, 预计在这周之内可以发出来. – 08.4.22

转换程序已经发上来了, 地址: http://www.foolbird.net/?p=738 , 最近要换空间, 地址可能会变, 大家可以在标签里找关键字 “转换程序”. – 08.4.24

Sunday, November 18th, 2007

写了2天的代码,终于把数据全转移过来了,但是程序还没有完全完成,生成缩略图是我用ACDSEE完成的.

WordPress真是个好东西,也是个奇怪的东西,我花了整整一天的时间研究它的数据库结构,这种结构让我很难理解,但它的确做到了很多程序做不到的事情,这一点很值得我们学习.

下面来说一说进行转移的具体步骤吧.

1.移动附件

2.生成缩略图

3.导入分类
categories -> category

4.导入附件
attachments -> posts
-> postmeta

5.导入文章
articles -> posts
-> post2cat

6.修改附件所属文章
posts.parent_id

修改文章guid
post.guid

7.导入评论
comments -> comment

8.导入链接
links -> link
-> link2cat

这些全部都做完之后基本上就OK了,就是本站现在这个效果.

程序写完可能会发到网上,这个我还很犹豫,因为我还是很舍不得sablog的,我不希望sablog用户都跑来用wordpress,但无论怎样,如果您需要我的帮助,还是可以联系我的.

sablog模板设计教程[3] – default/style.css文件分析

Friday, January 5th, 2007

———————————————————-        +                +
titlelogo                                |
}pageheader
navlink         |
———————————————————-             +                |
description        |     guestlink                }topmenu
———————————————————-+           +                 |
|                           |                        |
|                           |                        |
|                           |                        |
|                           |                        |
|                           |                        |
|                           |                        |
left        |         right                  |                        |
|                           |                        |
|                           }page                }这部分是inmain 这之外是outmain
|                           |                        |
|                           |                        |
|                           |                        |
|                           |                        |
|                           |                        |
|                           |                        |
|                           |                        |
|                           |                        |
|                           |                        |
|        page**                   |                        |

———————————————————–                        |
footer
———————————————————–                         +

body {//整体页面的样式
margin: 0px;//外补丁设置为0,主要为了去掉页面内容和浏览器间的空隙
font: 12px “Verdana”, “Tahoma”, “sans-serif”;//字体样式
line-height: 140%;//行高
color: #000;//字体颜色
background-color: #cdd6dd;//最底层背景颜色
text-align: center;//页面内容对齐方式,居中
}
form {//表单样式
padding: 0px;//表单内补丁为0,为了去掉表单其他内容间的空隙
margin: 0px;//表单外补丁为0,为了去掉表单其他内容间的空隙
}
h1 {
font-size: 14px;
color: #000;
margin: 0px;
padding: 0px;
}
ol li {//列表的样式
list-style-position: outside;
list-style-type: decimal;
}
a {//链接的样式
color: #333399;
text-decoration: underline;//默认有下划线
}
a:hover {//鼠标在链接上停留时链接的样式
color: #CC0000;
text-decoration: none;//停留时无下划线
}
td {//表格中的样式
font: 12px “Verdana”, “Tahoma”, “sans-serif”;
line-height: 160%;
color: #000;
}
textarea {//表单文本域的样式,添加评论时的文本域等都被这个控制着
font: 12px “Verdana”, “Tahoma”, “sans-serif”;
padding: 4px;
}
input  {//控制文本框 密码框和按钮的样式
background-color: #fff;
color: #000;
font: 12px “Verdana”, “Tahoma”, “sans-serif”;
padding: 3px;
}
hr {//输出一条横线  sablog中很多地方都是用这个来分隔内容的
height: 1px;
border: 1px solid #B3CBE1;
margin-top: 15px!important;
margin-top: 5px;
margin-bottom: 15px!important;
margin-bottom: 5px;
}
#description {//站点描述样式
float: left;
padding-top: 0px!important;
padding-top: 3px;
text-indent:2px;
font: 12px “Verdana”, “Tahoma”, “sans-serif”;
color: #003366;
}
#guestlink {//菜单链接的样式   就是 注册 | 登陆 字样的样式
float: right;
font: 12px “Verdana”, “Tahoma”, “sans-serif”;
color: #003366;
}
#page {//中间部分整体样式
width: 100%;
background-repeat: repeat-y;
margin: 0px;
padding: 0px;
float: left;
background-color: #fff;
background-image: url(sidebar_border       $1.gif);
border-bottom: 1px dotted #386792;
margin-bottom: 1px;
clear:both;
}
#viewmode {//浏览模式 标准 列表 字样的样式
float: right;
}
#right {//中间右侧部分的样式
float: right;
width: 525px;
padding: 12px 15px 15px 15px;
text-align: left;
}
#top {
padding-bottom: 12px;
margin-bottom: 15px;
border-bottom: 1px solid #386792;
}
#left {//中间右侧部分的样式
float: left;
margin: 0px;
width: 180px;
padding: 20px 15px 15px 15px;
text-align: left;
}
#left h2 {//标题的样式 在default里用来控制左侧 日志分类 热门标签 日志归档 搜索文章 等字样的样式
font-size: 14px;
color: #999;
padding: 15px 0px;
margin: 15px 0px 0px 0px;
border-top: 1px solid #B3CBE1;
}
#left ul {
margin: 0px;
padding: 0px;
list-style-type: none;
}
#left ul li {
margin-bottom: 2px;
overflow:hidden;
display:block;
width:178px !important;
width /**/:178px;
clear: both;
}
#left #icp {//备案信息样式
margin-top: 15px;
padding-top: 15px;
border-top: 1px solid #B3CBE1;
}
.formbox {
line-height: 150%;
padding: 5px 0px;
}
.title {//标题
font-size: 14px;
clear:both;
position:relative;
height:18px;
font-weight: bold;
text-indent: 5px;
border-left: 6px solid #d6e3ef;
border-bottom: 1px solid #d6e3ef;
padding: 2px;
}
.newcminfo {
font-size: 11px;
padding-bottom: 7px;
color: #606060;
line-height: 13px
}
.formfield {
color: black;
background-color: #edf2f8;
border:1px solid #bbb;
padding: 3px;
}
.formbutton {//表单按钮
color: black;
background: #edf2f8;
border:1px solid #bbb;
padding-top: 0px!important;
padding-bottom: 3px!important;
padding: 3px 2px 0px 2px;
height: 21px;
border-left: 4px solid #bbb;
}

.cal_day1 {//日历
font-size: 11px;
text-align: center;
}
.cal_day1 a {//日历
text-decoration: underline;
}
.cal_day1 a:hover {//日历
text-decoration: none;
}
.cal_day2 {//日历 今天的样式
font-size: 11px;
text-align: center;
border: 1px solid #999;
font-weight: bold;
}
.cal_day2 a {//日历 今天的链接样式
text-decoration: underline;
}
.cal_day2 a:hover {//日历 鼠标停留在今天的链接上时的样式
text-decoration: none;
}
.curdate {//日历 年月的样式
font-weight: bold;
font-size: 11px;
text-align: center;
padding-bottom: 10px;
}
.curdate a {//日历 年月的链接样式
text-decoration: none;
}
.curdate a:hover {//日历 鼠标停留在年月的链接上时的样式
text-decoration: underline;
}
.attach {//附件
padding: 10px 0px;
}
.attach-desc {//附件
background-color: #edf2f8;
padding: 5px;
border: 1px solid #000;
display: inline;
}
.content {//文章正文样式
clear: both;
display: block;
margin-right: auto;
margin-left: auto;
}
.tags {//标签的样式
padding: 10px 0px;
}
.pagelink {//翻页部分 普通页码样式
padding:1px 3px;
font-size:11px;
font-weight:normal;
border:1px solid #386792;
}
.pagelink a {//翻页部分 普通页码链接样式
color: #333399;
text-decoration: none;
}
.pagelink2 {//翻页部分 第一页 最后一页 上页 下页的样式
padding:1px 3px;
font-size:11px;
font-weight:bold;
border:1px solid #386792;
}
.pagelink2 a {//翻页部分 第一页 最后一页 上页 下页的链接样式
color: #333399;
text-decoration: none;
}
.pagelink3 {//翻页部分,Record:的样式
padding:1px 3px;
font-size:11px;
font-weight:normal;
border:1px solid #386792;
background-color:#edf2f8;
}
.pagecurrent {//翻页部分,当前页链接的样式,如果当前是第一页,那么1就为此样式
padding:1px 3px;
font-size:11px;
font-weight:bold;
color:#000;
background-color:#d6e3ef;
border:1px solid #386792;
}
.post {//文章整体样式
margin-right: auto;
margin-left: auto;
overflow: hidden;
}
.posttitle {//文章标题样式
text-indent: 8px;
border-left: thick solid #386792;
font-size: 14px;
font-weight: bold;
padding: 2px;
margin-top: 5px;
clear:both;
}
.posttitle a {//文章标题链接样式
color: #333399;
text-decoration: underline;
}
.posttitle a:hover{//鼠标停留在文章标题链接上时的样式
height: 70px!important;
background-color: #d6e3ef;
border-bottom: 1px solid #386792;
vertical-align: text-bottom;
}
#titlelogo {//博客名称 或者 logo 的样式
padding: 10px;
float: left;
}
#article-other {
text-align: center;
margin-bottom: 15px;
}
#tburl {
margin: 5px 0px 15px 0px;
}
#trackbacks {//引用部分的样式
margin: 5px 0px 15px 0px;
}
.tbcontent {
margin: 5px 0px 10px 0px;
}
.tbdate {
color: #777777;
font-size: 11px;
padding-top: 2px;
text-align: right;
margin-bottom: 12px;
padding-bottom: 12px;
border-bottom: 1px solid #B3CBE1;
}
.cmcontent {//评论内容样式
margin: 5px 0px 15px 0px;
overflow:hidden;
display:block;
width:523px !important;
width /**/ :571px;
clear: both;
}
.cmdate {//评论日期样式
color: #777777;
font-size: 11px;
padding-top: 2px;
text-align: right;
margin-bottom: 12px;
padding-bottom: 12px;
border-bottom: 1px solid #B3CBE1;
}
#message {//message.htm中消息的样式
margin-top: 100px;
background-color: #fff;
text-align:center;
width: 500px;
padding: 20px;
border: 1px dotted #386792;
margin-right: auto;
margin-left: auto;
}
.navlink {//Home Archives Users Attachments Rss Tags Trackbacks Wap  菜单的样式
float:right;
padding-bottom:5px;
font-family: “Tahoma”, “sans-serif”;
font-weight: bold;
margin-top: 50px;
}
.navlink a {//Home Archives Users Attachments Rss Tags Trackbacks Wap  菜单的链接样式
padding-right:10px;
text-decoration: none;
}
.navlink a:hover {//Home Archives Users Attachments Rss Tags Trackbacks Wap  菜单的链接样式
padding-right:10px;
text-decoration: underline;
}
#topmenu { //description + guestlink的整体样式
height: 18px!important;
background-color: #edf2f8;
border-bottom: 1px dotted #386792;
padding: 5px;
}
.week {//日历中 星期 一 二 三 四 无 六 日 的样式
padding: 3px;
font: 11px “Tahoma”, “sans-serif”;
background-color: #eee;
border-bottom: 2px solid #aaa;
text-align: center;
}
.keywordtd {
padding: 3px 10px;
border-bottom: 1px solid #ccc;
}
.listtd {
padding: 3px 0px;
border-bottom: 1px solid #ddd;
}
.listtd a {
text-decoration: none;
}
.listtd a:hover {
text-decoration: underline;
}
.phpcode {//这个是在添加文章时用的,用来显示php或者其他代码,要手动添加
border: 1px solid #b3cbe1;
border-left: 3px solid #b3cbe1;
background-color: #f8f8f8;
color: #000000;
margin: 5px;
padding: 5px;
}
.quote {
margin: 5px 0px;
padding: 5px;
border: 1px solid #000;
background-color: #edf2f8;
}
.divOFF {
display:none;
}
.divON {
display:block;
}
.attachttitle {//日志归档标题样式
font-weight: bold;
}
.attachicon {//日志归档
float: right;
}
.attachdesc {//日志归档
padding: 10px 0px;
}

先写这些吧,台湾地震之后博客访问就奇慢,又连不上了,有高手帮补充一下
未完待续

作者:maker

发表时间:2007.1.5

sablog模板设计教程[2] – sablog模板的组成

Friday, January 5th, 2007
下面我来介绍一下sablog-x模板的组成部分,sablog与其大同小异,但比sablog-x更加简单

这里要提前讲一下模板文件是如何被使用的,以便理解下面内容,php中的模板不是由页构成,而是由块构成,我们可以把一个首页理解成若干个块,以sablog来举例,一般分为 header,footer和page,header块显示在页面最顶部,一般用来显示logo;footer块显示在页面最底部,一般用来显示版权信息;page块也就是中间的主要内容部分,很重要的是page还分为两块,分别是left和right,left就是首页中间左面的部分,用来显示日历,最新评论,日志分类,日志归档,友情链接等内容,而其实日历,最新评论,日志分类,日志归档,友情链接其实也是属于left中的块;right就很复杂了,在不同的页面中他显示不同的内容,调用不同的模板,比如在首页标准浏览模式下他调用normail.htm,列表模式下他调用list.htm,而在用户列表页面他调用user.htm等等.而这里指的模板不是整个页面的模板,而是某一块的模板.

目录
calendar

    calendar目录用于存放日历的背景图片,就是日历后面的很大的月份数字 1,2,3,4,5…..11,12
     

样式表
style.css

    style.css是sablog模板中很重要的一部分,他控制着整个模板的样式风格,很多时候我们不需要修改其他文件而只修改style.css就能做出一个很漂亮的模板了.
     

页面文件
attachment.htm

    attachment.htm是附件列表的模板,也就是yourdomain.com?action=attachment页面
     

comments.htm

    comments.htm是添加评论页面的模板
     

footer.htm

    footer.htm是页脚的模板,也就是最下方版权信息那部分
     

index.htm

    index.htm也是非常重要的一部分,他控制着整个模板的显示的布局,也控制着菜单栏的显示.
     

left.htm

    left.htm是左侧部分的模板,也就是显示显示日历,最新评论,日志分类,日志归档,友情链接等内容的那一块
     

list.htm

    list.htm是列表浏览模式下文章的显示模板,也就是列表模式下right那块显示的模板
     

login.htm

    login.htm看名字就知道,是登陆页面的模板
     

message.htm

    message.htm 返回信息并进行跳转,一般在触发某事件时调用,比如刷新过快.
     

none.htm

    none.htm 返回未定义操作,是出错之后显示的页面
     

normal.htm

    normal.htm是标准浏览模式先文章的显示模板,也就是标准模式下right那块显示的模板
     

profile.htm

    profile.htm是修改个人资料的模板
     

reg.htm

    reg.htm是注册页面的模板,也就是yourdomain.com?action=reg页面下right块的模板
     

rss.htm

    rss.htm是聚合订阅页面的模板,也就是yourdomain.com?action=rss页面下right块的模板
     

search.htm

    search.htm是高级搜索页面的模板,也就是yourdomain.com?action=search页面下right块的模板
     

searchstats.htm

    searchstats.htm 热门搜索页面的模板,也就是yourdomain.com?action=searchstats页面下right块的模板
     

show.htm

    show.htm是显示文章的模板
     

showuser.htm

    showuser.htm是显示特定用户信息的模板,就是在用户列表内选择了用户之后显示的内容
     

tag.htm

    tag.htm是标签列表的模板,也就是yourdomain.com?action=tagslist页面下right块的模板
     

trackbacks.htm

    trackbacks.htm 是引用列表的模板,也就是yourdomain.com?action=user页面下right块的模板
     

user.htm

    user.htm是用户列表的模板,也就是yourdomain.com?action=trackbacks页面下right块的模板
     

图片
big5.jpg 这个基本上没有什么用,用来显示编码的
gbk.jpg 这个基本上没有什么用,用来显示编码的
noface.jpg 这个是在用户没有设置头像的时候默认显示的头像图片
sidebar_border.jpg 在默认模板default中是中间部分的背景,主要是为了控制显示中间的竖线
top_home.gif 这个是什么没有太注意…
watermark.png 是水印标记,当在后台打开了水印功能请修改此图片

这里再给大家举了例子,来说明一下模板是如何工作的,当用户发出请求进入yourdomain.com的时候,也就是进入你的首页的时候,我们这里先不涉及缓存问题,首先程序会从设置里找到你当前使用的模板名,然后去指定模板目录调用index.htm,index.htm又会调用header.htm,left.htm,footer.htm,然后程序再根据当前的请求来判断right部分去调用哪个模板,如果当前浏览模式为标准,请求为index.php,那么right部分会调用normal.htm在调用这些模板的同时对模板中的变量进行替换,然后再生成缓存,最后输出我们看到的首页.不过我说的这个并不是sablog-x中模板的工作流程,因为一直很忙,没有太多时间去读sablog-x的程序,这里只是为了让大家更好的理解模板的工作方法,从而做出更好的模板.

未完待续
本人技术有限,难免出现错误,希望高手指出
在接下来的文章里我将详细的为大家介绍如何修改每一个文件

作者:maker
发表时间:2007.1.5