给WordPress加上自动链接辨认[Auto-Link]功能

虽然WordPress已经发展到Version 2.5.1,但是我认为WP仍然缺少一个我们需要的一个十分常用而又简单的功能:自动链接辨认[Auto-Link]。很多朋友喜欢在博客里面添加很多链接,但是烦于不停的给URL路径加上链接,WP里面也暂时没有这方面的设置。我们可以自己手动做个简单修改达到这个功能:

在wp-includes目录里面找到post-template.php这个文件:

打开编辑,找到 function get_the_content()这个函数

在它的最后面作如下修改:

[code lang=”php”]return $output;[/code]

增加为

[code lang=”php”]$pattern = “/[s]http://([^s"]+)/ism“;

$replacement = “ http://$1“;

$output=preg_replace($pattern, $replacement, $output);

return $output;[/code]

YUM介绍

一台新服务器上用的是Redhat Enterprise 5.1的操作系统(RHEL5),用up2date却说找不到这个命令,原来它用的是Yum 3.0来自动升级。Yum这东东我第一次接触,看看到到底是何来历。
Yum (Yellow dog Updater Modified) 是一中在LInux下与RPM兼容的软件包管理和自动升级软件,通过命令行来操作。用于Red Hat系统的更新和管理。已经被Fedora, centos和许多其他与RPM兼容的基于Linux发行版所运用,包括黄狗Linux的本身[难怪它叫Yellow dog Updater Modified B-)],用来取代原来的YUP(Yellowdog Updater),所以,可以说Yum是YUP与RPM的孩子。

主要命令如下:
安装: yum install package name
安装RPM: yum install my_package.RPM
组安装:yum groupinstall “MySQL Database”
升级:yum update package name
更新组:yum groupupdate “MySQL Database”
删除:yum remove package name
删除组:yum groupremove “MySQL Database”
搜索:yum list package name
高级搜索:yum search package name
更新系统:yum update
激活每天自动更新: /sbin/chkconfig –level 345 yum on; /sbin/service yum start
软件包名称说明:
例如:tsclient-0.132-6.i386.rpm
软件包名称:tsclient 带有版本号和发行版本的软件包名称:tsclient-0.132-6
*带有硬件架构的软件包名称:tsclient.i386

yum 以 名称.架构 的格式来列出软件包。仓库通常也将软件包存储在以架构区分的目录中。每次为软件包指定架构的时候,实际指定的是此软件对机器架构的 最低 要求。
i386 - 适于任何现有的 Intel 兼容计算机
noarch - 适于所有架构
ppc - 适于 PowerPC 系统,例如 Apple Power Macintosh
x86_64 - 适于 64 位 Intel 处理器,例如 Opterons

Mysql Error: No database selected

一个网站的mysql数据库(Server version: 4.1.22-standard; MySQL client version: 4.1.22)的负担太重被空间商临时关闭了账号。恢复后出现了一个令人啼笑皆非的错误:Mysql Error: No database selected。检查数据库的用户名和密码以及数据库名称并没有异常。联系空间商,他们也说没有暂停mysql账号。再检查所有文件的完整性,也一切正常。这就奇了怪了哦!根据webdeveloper论坛上的解释:

the database was not selected because the user did not have permission to select it. 应该是mysql账号的权限无法读取数据库。
郁闷的是为什么mysql账号没有权限会出现“No database selected”的错误,给人错误的指引和误导。而不是提示“No permissions for that database”。或者是有什么没有遇见过的特殊情况,继续跟进中。。。

更新:暂时解决办法:放弃旧账号,创建新账号,问题解决。

mod_rewrite简单教程

mod_rewrite是Apache模块中非常有用的一个模块,用于URL的重写与简洁化。
Version 1.2-1.3 来源
RewriteEngine on|off: 激活或者进制重写规则
RewriteBase /subcat 指定重写规则适用的根路径
RewriteCond TestString CondPattern :TestString是规则对象,CondPattern是匹配的具体规则;用于定义重写规则的条件;和RewriteRule一块使用。
常用的TestString包括以下服务器变量:
HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST, HTTP_ACCEPT
connection & request: REMOTE_ADDR, QUERY_STRING
server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL
system stuff: TIME_YEAR, TIME_MON, TIME_DAY
RewriteRule Pattern Substitution: Pattern是规则表达式,Substitution是重写替换的对象。
下面是规则表达式的一些说明:

. 匹配任何单字符
[chars] 匹配字符串:chars
[^chars] 不匹配字符串:chars
text1|text2 可选择的字符串:text1或text2
? 匹配0到1个字符

  • 匹配0到多个字符
  • 匹配1到多个字符
    ^ 字符串开始标志
    $ 字符串结束标志
    n 转义符标志
    反向引用 $N 用于 RewriteRule 中匹配的变量调用(0 <= N <= 9)
    反向引用 %N 用于 RewriteCond 中最后一个匹配的变量调用(1 <= N <= 9)

RewriteCond适用的标志符
‘nocase|NC’ (no case)忽略大小
‘ornext|OR’ (or next condition)逻辑或,可以同时匹配多个RewriteCond条件

RewriteRule适用的标志符
‘redirect|R [=code]’ (force redirect)强迫重写为基于http开头的外部转向(注意URL的变化) 如:[R=301,L]
‘forbidden|F’ (force URL to be forbidden)重写为禁止访问
‘proxy|P’ (force proxy)重写为通过代理访问的http路径
‘last|L’ (last rule)最后的重写规则标志,如果匹配,不再执行以后的规则
‘next|N’ (next round)循环同一个规则,直到不能满足匹配
‘chain|C’ (chained with next rule)如果匹配该规则,则继续下面的有Chain标志的规则。
‘type|T=MIME-type’ (force MIME type)指定MIME类型
‘nosubreq|NS’ (used only if no internal sub-request)如果是内部子请求则跳过
‘nocase|NC’ (no case)忽略大小
‘qsappend|QSA’ (query string append)附加查询字符串
‘noescape|NE’ (no URI escaping of output)禁止URL中的字符自动转义成%[0-9]+的形式。
‘passthrough|PT’ (pass through to next handler)将重写结果运用于mod_alias
‘skip|S=num’ (skip next rule(s))跳过下面几个规则
‘env|E=VAR:VAL’ (set environment variable)添加环境变量

Version 2.0 来源

注意:
.htaccess或conf文件中需要设置 RewriteEngine On
并且确认所在目录支持 Options FollowSymLinks

例子:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]
RewriteRule ^.* - [F,L] 这里”-“表示没有替换,浏览器为IE和Opera的访客将被禁止访问。
更多事例可以参考:http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html
例子:
RewriteEngine On
RewriteBase /test
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ([^/]+)$ /test/$1.php

#for example: /test/admin => /test/admin.php
RewriteRule ([^/]+).html$ /test/$1.php [L]

#for example: /test/admin.html => /test/admin.php
限制目录只能显示图片
< IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^..(gif|jpg|jpeg|png|swf)$
RewriteRule .
$ - [F,L]
< /IfModule>

TAG标签重写

#/tag+me.html => /tag/me/
RewriteRule zhaiduo/tag/([0-9a-zA-Z]+)/$ zhaiduo/tag+$1.html [L]

#/tag+me2.html => /tag/me/2/
RewriteRule zhaiduo/tag/([0-9a-zA-Z]+)/([0-9]+)/$ zhaiduo/tag+$1
$2.html [L]

Google提供空间和框架你做项目,愿意么?

Google果然不愧是互联网的创意先锋,Google App Engine的推出,让很多有才华但是缺少资金的程序员有了一个开发运行(展示自己才华)的免费平台。和Project Hosting和不同,500M的免费空间,足够的CPU和每月5百万的访问量带宽支持,Python的运行环境以及基于Google自己研发的数据存储技术,足以吸引不少对Google技术的好奇者。
另一方面,Google的这一举动却引起了日渐壮大的PHP社区对Google为什么只推出支持Python环境的App引擎的争论:
phpclasses: Google App Engine needs PHP support
Michael Kimsal: Why not PHP for Google’s App Engine?

大部分PHPer(包括其他非Python的开发人员)都表示了希望Google尽快增加支持其他语言的呼声。我个人的看法,趋于少数人:Google App Engine支持PHP固然好,没有也没什么遗憾的。LAMP的免费环境让PHP开发人员很容易找到空间(自己的电脑)开发自己的技术,各种免费PHP框架社区层出不穷。PHP社区的繁荣已经完全“自给自足”。对我来说,对Google感兴趣的只是基于Google自己开发的那部分技术。另一方面,Google的这一举动虽然慷慨,不过还是有它的精明之处的。如今互联网上最值钱的是什么?那就是创意!:-)

WP里面tag cloud的中文显示问题

Wordpress2推出的tag cloud功能确实不错,不过最热门的tag显示字体大的太过难看。

tag_clouds.jpg

修改办法:编辑PHP源文件:wp-includes/category-template.php

找到function: wp_generate_tag_cloud里面的这么一项:
( $smallest + ( ( $count - $min_count ) * $font_step ) )
修改为:
( $smallest + ( ( $count - $min_count ) * $font_step ) * 0.3 )
其中的0.3是为了缩小最大的TAG尺寸,大家可以根据自己喜好设定比例。

LAMP与Microsoft和Sun的故事

随着LAMP(Linux+Apache+Mysql+PHP)的广泛应用和不断扩大的用户群,开发速度和成本上的优势逐渐明显,互联网上的“大鳄”也开始窥视LAMP这块大蛋糕。于是网上有这样两个传说:B-)
为什么Sun要收购MYSQL?新闻来源

Scott(Scott McNealy, founder and chairman of Sun): “I knew this Java thing was a bad idea in the first place! I see only one solution. We need to buy this Lamp!”
Accountant: “Euh, LAMP is not a company. It’s an acronym. It’s Linux , Apache, MySQL and PHP”
Scott: “Then buy me Linux!”
Accountant: “But we still have this Solaris thing..”
Scott: “Then buy me Apache!”
Accountant: “That’s a foundation. Nothing to buy there.”
Scott: “Then buy me MySQL!”
Accountant: “We don’t do databases.”
Scott: “It’s a database?”
Accountant: “What rock have you been living under?”
Scott: “Sweet. I can own the Lamp AND piss off Oracle at the same time!” (waves fake plastic magic wand) “Make it so!”
为什么Microsoft要收购Yahoo? 新闻来源
Steve(Steve Ballmer, Microsoft CEO): “Hey, you heard about this PHP thing?”
Bill(Bill Gates): “Pee Age Pee? You’re not that old yet, are you?”
Steve: “What? No, wait, it’s a programming language, apparently better than ASP.NET.”
Bill: “Who cares if it’s better. I mean; we made the worst operating systems ever and still rule. (Checked out Leopard yet? It is SO cool.)”
Steve: “I don’t know Bill… remember that internet thing that we didn’t know about years ago? Kind of nearly missed the boat there.”
Bill: “Right. Didn’t we solve that in the same way? Worst browser, highest market share, that sort of thing?”
Steve: “Yes we did, but then we also didn’t know about this ‘mp3’ thing until it was too late.”
Bill: “We did manage to make Zune the worst player, but somehow we’re not market leader. Guess we got sloppy?”
Steve: “Maybe it’s just different times. Maybe we should have a different strategy.”
Bill: “Ok, so let’s just buy PHP then.”
Steve: “It’s not a company. But Encarta says it’s written by a Rasmus Lerdorf.”
Bill: “So let’s hire him.”
Steve: “Tried that. Didn’t want to join. Can’t blame him, works at Yahoo.”
Bill: “Then I guess we’ll have to buy Yahoo.”

好用的Google图表插件

Google Chart API提供一个很好的接口帮助我们快速生成各种统计图表。从常见的条状、线条、馅饼图表到维恩图(用于显示元素间的重迭关系),甚至用地图的方式来显示统计图表,种类繁多,应用灵活,给我们带来了很多方便,而且这个API可以不受限制的调用,我们可以很方便的在博客或其他网页上调用。感觉不足之处是不支持中文和和缺少动态的展示方式。

例如我们看看2008年台湾大选的得票比较图:

调用说明:
http://chart.apis.google.com/chart? 调用路径
chs=250x100& 调用变量chs:指定图表尺寸大小
chd=t:51.7,36.5,11.8& 调用变量chd:用逗号分割的数据组,可以用|分隔多组;不确定数据可用-1表示。t: 表示数据类型为数字 s:表示数据类型为单字母,如(chd=s:ATb19,Mn5t)e:表示数据类型为双字母,如(chd=e:AA,AZ,Aa)
cht=p3 调用变量cht:表示地图类型:

lc:线条 lxy:点线图 ls:火花线 bhs:水平对比条 bvs:垂直对比条
bhg:水平条 bvg:垂直条 chbh:指定条的宽度 p:饼状图 p3:三维饼状图
v: 重迭图 s:散点图 r:雷达图
t:地图 chtm指定地图区域
&chl=Ma|Xie|Others 调用变量chl:用逗号分割的对映数据的文字说明
更多用法:
chco: 指定颜色
chm: 区域颜色填充
chtt: 指定图表标题

CSS样式表常用技巧

全局通配符 *
通配符可以涵盖定义页面上所有的CSS对象,例如:

  • {padding:0;margin:0px;border:0px;}
    overflow可以不显示超过对象尺寸的内容,也可以用于清除周围(floated)浮动的元素。
    .anyclass {overflow:hidden;}
    同时指定多个class样式
    < div class=”class1 class2 class3”>
    class内包含对象的css定义(用空格分隔):
    .div subelement {width:100px;}
    同级对象的css定义(用逗号分隔):
    .class1, .class2, #myid {color:#000;}

这里有篇Eric写的文章,推荐给网页定义默认的CSS样式,这样可以避免不同浏览器之间默认样式表设置给页面风格带来的干扰,让我们的网页做到真正的所有浏览器都一个模样,真正的标准化.

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-weight: inherit;
font-style: inherit;
font-size: 100%;
font-family: inherit;
vertical-align: baseline;
}
/ remember to define focus styles! /
:focus {
outline: 0;
}
body {
line-height: 1;
color: black;
background: white;
}
ol, ul {
list-style: none;
}
/ tables still need ‘cellspacing=”0”‘ in the markup /
table {
border-collapse: separate;
border-spacing: 0;
}
caption, th, td {
text-align: left;
font-weight: normal;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: “”;
}
blockquote, q {
quotes: “” “”;
}

Smarty简单教程

Smarty简单教程翻译自Smarty Manual:

评论:{ this is a comment }
输出变量值:{$title}
包含文件:{include file=’header.tpl’}
{$foo.bar} <– 输出数组foo中,键名为bar的变量内容, 相当于 $foo[‘bar’]
{$foo.$bar} <– 输出数组foo中,键名为$bar的变量内容, 相当于 $foo[$bar]
{$foo->bar} <– 输出对象foo的”bar”属性
{$foo->bar()} <– 输出对象foo的”bar”方法
<– 输出默认配置变量foo
{$smarty.config.foo} <– 的另外一种表达方式
{$foo[bar]} <– {section}专用内部变量”bar”
{assign var=foo value=’baa’}{$foo} <– 模板中定义变量foo的值为”baa”, 并输出
调用函数:{funcname attr1=’val1’ attr2=’val2’}
If语句:
{if $logged_in}
Welcome, {$name}!
{else}
hi, {$name}
{/if}
输出$_GET变量”page”: {$smarty.get.page} => $_GET[‘page’]
格式化时间:{$smarty.now|date_format:’%Y-%m-%d %H:%M:%S’}
定义常量:{$smarty.const.MY_CONST_VAL} => define(‘MY_CONST_VAL’,’CHERRIES’);
显示当前模板名称:{$smarty.template}
大写变量$title:{$title|upper}
字符串长度截取(40):{$title|truncate:40:’…’}
规则表达式:{$title|regex_replace:”/[rtn]/“:” “}
for循环$myArray关联数组:
{foreach from=$myArray key=k item=v}

  • {$k}: {$v}

  • {/foreach}

    转让闲置刀片式宝德服务器一台

    刀片式宝德服务器
    刀片式宝德服务器刀片式宝德服务器
    刀片式宝德服务器刀片式宝德服务器
    现有一台机房托管3年后的闲置刀片式宝德服务器一台,如有需要,可以与我联系(zhaiduo#gmail.com)。
    因托管服务停止,决定转让他人。有兴趣的朋友可以买回家玩玩,:-)
    刀片式服务器主要配置

    型号:PT450R
    服务器类型:1U 刀片式
    处理器主频:Intel 奔腾P4 2.66GHz
    内存容量:512MB/ECC DDR
    硬盘存储容量:80G IDE
    双网卡、光驱、软驱、集成网卡、集成显卡
    其他配件:Intel Power Leader操作系统安装指南,主板说明书及主板光盘,电源线一条

    关于图片上传目录777权限的解决办法

    最近有个网站频繁被黑客攻击,由于网站采用的内容管理系统直接生成静态网页和上传文件,而空间的目录又必须设成777(对所有人可读,写和执行的权限),才能将新文件复制到目标目录。这样如果上传文件每次通过FTP去修改目录权限太过麻烦,而打开777的权限又将冒着被黑客不断攻击的危险,真是进退两难啊。

    其实我设想的理想状况是这样的(针对的是Apache服务器):

    PHP文件所在的组应该和空间目录属于同一组,甚至是同一所有者,这样上传文件就不需要再进行权限设置。但是有个前提是做好上传文件的安全检测,以防鱼目混珠。这样可以有效避免匿名用户对空间文件的修改。
    但是,空间提供上的权限设置往往无法满足这样的要求,这样给处理权限的设置带来了一定得麻烦。如果只从自己这一方来考虑,防范黑客透过777目录权限来攻击的话,我能找到的方法暂时之有以下两种:
    1、上传文件到通过web不可以访问的目录,然后通过cron定时将上传文件移动到web可以访问的目标目录。
    2、使用.htaccess对目标目录进行限制,添加AddType application/x-httpd-php-source .php禁止执行PHP文件。

    Adsense推荐中等矩形 (300 x 250)来展示广告

    昨天,Google的AdSense讨论组向大家推荐了一条adsense优化技巧。根据Google的统计,中等矩形 (300 x 250)是最佳的广告展示单元之一,同时,讨论组向大家征求使用(300 x 250)中等矩形广告单元的感想和看法,希望以此不断提高(300 x 250)中等矩形广告单元的展示效果,并且能给广大Adsenser带来更多的利润。

    根据网上对各种Google的AdSense广告单元投票的结果来看:
    页首横幅 (728 x 90) 16% 横幅 (468 x 60) 6% 摩天大楼 (120x600) 7% 宽幅摩天大楼 (160x600) 12% 小矩形 (180x150) 2% 竖幅 (120 x 240) 2% 正方形 (250 x 250) 4% 正方形 (200 x 200) 4% 中等矩形 (300 x 250) 20% 大矩形 (336 x 280) 27%
    (300 x 250)中等矩形广告单元确实是公认的比较好的广告展示单元。

    google的工程哲学

    googlesystem提到去年的Google开放日图片中关于对google的工程哲学的介绍。

    原文如下:

    1. All developers work out of a ~single source depot; shared infrastructure!
    所有开发人员在同一个源代码库下工作,共享基础架构。
    2. A developer can fix bugs anywhere in the source tree
    任何一个开发人员都有权利修改整个代码库内的任何错误。
    3. Building a product takes 3 commands (“get, config, make”)
    开发常用三个命令(“get, config, make”)
    4. Uniform coding style guidelines across company
    全公司统一编码风格
    5. Code reviews mandatory for all checkins
    所有代码的Check-in必须反复检查
    6. Pervasive unit testing, written by developers
    开发人员需要进行深入的单元测试
    7. Unit tests run continuously, email sent on failure
    经常进行单元测试,发生错误是邮件通知
    8. Powerful tools, shared company-wide
    好用的工具,全公司共享
    9. Rapid project cycles; developers change projects often; 20% time
    快速的项目周期,开发人员有20%的周转空间
    10. Peer-driven review process; flat management structure
    开发人员之间相互检查程序,实行扁平化的管理模式(相对于金字塔模式
    11. Transparency into projects, code, process, ideas, etc.
    所有项目、代码、进度和构思对全公司都是开放的
    12. Dozens of offices around world => hire best people regardless of location
    任何地方都可以建立办公室,雇用最好的员工,无论他们身处何处
    虽然我不是专职的程序员,也没有项目管理的经验,具体含义理解的也有所出入,但是google的工程哲学的大概思想我想我还是能理解的,那就是平等,开放和统一。想想和现在流行的社区网站,倒是有写相似之处,高度总结的哲学概念无论是运用到公司运作还是社区的组建,在我看来都是有效的。谁是最先掌握社会发展潮流工程哲学的人,就是最先掌控未来的人。

    利用“301”HTTP头给网站更换域名

    由于要给一个网站更换新的域名,考虑到保留网站现有的搜索排名,而且希望访客访问http://旧网站.com/somepage.html可以直接跳转到http://新网站.com/somepage.html,于是决定采用“301”HTTP头来做转向。

    由于网站属于Linux空间+Apache服务器(支持Mod-Rewrite模块),所以采用.htaccess文件来控制“301”HTTP头的转向,创建内容如下:
    Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.新的网址.com/$1 [R=301,L]

    下面是一些其他实现301转向的办法:

    IIS服务器上的设置

    * 在需要转向的文件或者目录上点击鼠标右键
    * 选择“转向到其他网址”
    * 输入新的转向网址
    * 选择永久转向
    * 点击应用即可
    

    ColdFusion
    <.cfheader statuscode="301" statustext="Moved permanently"> <.cfheader name="Location" value="http://www.新的网址.com">

    PHP
    <?php Header( "HTTP/1.1 301 Moved Permanently" ); Header( "Location: http://www.新的网址.com" ); ?>

    ASP
    <%@ Language=VBScript %> <% Response.Status="301 Moved Permanently" Response.AddHeader "Location","http://www.新的网址.com/" %>

    ASP .NET
    <script runat="server"> private void Page_Load(object sender, System.EventArgs e) { Response.Status = "301 Moved Permanently"; Response.AddHeader("Location","http://www.新的网址.com"); } </script>

    JSP (Java)
    <% response.setStatus(301); response.setHeader( "Location", "http://www.新的网址.com/" ); response.setHeader( "Connection", "close" ); %>

    CGI PERL
    $q = new CGI; print $q->redirect("http://www.新的网址.com/");

    Ruby on Rails
    def old_action headers["Status"] = "301 Moved Permanently" redirect_to "http://www.新的网址.com/" end

    个人觉得服务器上的301转向比脚本转向更加一劳永逸,只需简单设置或是一个文件即可实现整个网站所有文件的转向。

    话筒的烦恼

    不记得系统安装过什么软件,Skype的时候话筒用不了,检查过音频属性,看不出话筒设置有什么异样和问题,换了一个新的耳机,在笔记本上没问题,换到我的电脑也不行,正在怀疑声卡出问题的时候,突然想到电脑用的是集成主板,于是赶紧去Intel的驱动器页面下载最新的主板驱动程序(Intel® 82845G),重新安装后,果然一切恢复正常,遗憾的只是浪费一晚上的时间哦。

    13920080228004734.jpg

    这是恢复正常后音频设备的属性框,觉得和之前的有点区别,注意看“录音”的“高级”按钮是灰色的,记得之前是可以点击打开的。
    14220080303222159.jpg
    上面两个选项不要打勾,经测试,任选其中一项话筒立即变哑巴。

    测试硬件的时候,可以看到录音的绿色竖条随着录制的声音上下跳动,我们就可以判断,话筒录音已经正常。

    Windows批处理(BAT)技巧

    最近写了一个自动检测局域网状况的批处理(BAT)文件,写完才发现批处理(BAT)里面也有不少名堂可以学习。

    If 命令
    if 表示将判断是否符合规定的条件,从而决定执行不同的命令。

    1、if “参数” == “字符串”  待执行的命令
    参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。
    如if “%1”==”a” format a:
    if

    GoogleMap推出静态地图引用服务

    曾经想过通过javascript调用Google Map的麻烦性,因为考虑到调用地图无非就是想显示相关地图而已,不需要太多的动态脚本功能,Google的动作还真快,静态地图的引用服务已经推出。

    http://maps.google.com/staticmap?center=23.137913,113.321185&zoom=9&size=200x200&/
    maptype=roadmap&markers=23.137913,113.321185,reda|23.167913,113.361185,greenb&/
    key=API-KEY
    staticmap.gif

    通过指定经纬度,放大尺度,图片大小,地图类型,锚点标识以及调用需要的API KEY,我们很容易轻松的调用你所需要的地图,不足的地方是地图不能显示卫星地图,并且有调用限制(每人每天限制1000张地图调用),另外就是中国的地图没什么内容哦。看看纽约的地图,真是不同哦:
    staticmap2.gif

    二维条形码(2D BarCodes)技术

    2dbarcodes_zd.png

    二维条形码(2D BarCodes)是一种类似于一维条形码的新一代信息存储技术。一维条形码采用一组不同粗细的线条来表示一串数字,我们很容易通过仪器读取条码来识别商品,从而使我们方便快捷的使用电脑来存储商品资料,不过一维条形码只能做到标识商品,而不能描述商品。二维条形码正是根据这种需求而产生的。

    二维条形码是在水平和垂直方向的都存储信息的一种条码,可以保存压缩的文本和图形数据,数据贮存量大(大约2000字节),可以加密,数据读取率高,不易丢失。日本是运用此项技术比较早期的国家,大量商铺已经使用该技术,用于向顾客提供各种优惠和联系信息。如今二维条形码技术已经相对成熟,网络无疑成为它广泛推广的重要途径,我们只要使用装有摄像头的手机,就可以轻易读取二维条码信息,做到人机信息的交互。

    这里有一个生成二维条码的地址,有兴趣的朋友可以玩玩。国内运用二维条码技术的网站也见过几个,不过网址不记得了,包括使用PHP生成二维条码的案例,不知道谁知道。

    Compare Date with PERL

    (This is one of my English Diary, just for exercise.)
    I haven’t touch PERL for a long time, feel so tired to debug script error on page with “Internal Server Error”, that’s the reason I don’t like it. But the reason I still use it is because CPAN, it’s a huge library for PERL Archive. You can easily find any function you can imagine. Here’s a example to Compare Date.
    [code lang=”per”]

    #!/usr/bin/perl
    print “Content-type: text/htmlnn”;

    you need three packages: Date::Parse, Time::Local, Time::Zone;

    http://search.cpan.org/perldoc?Date::Parse

    http://search.cpan.org/perldoc?Time::Local

    http://search.cpan.org/perldoc?Time::Zone

    use Date::Parse;
    my $secs = str2time(“2008-02-14”);
    my $now=time();

    check we got something useful back

    unless (defined $secs){
    die “Can’t parse ‘$time’ as a time or daten”;
    }
    print “End as:n”, “‘$secs’ (“.gmtime($secs).”)
    n”;
    print “Now as:n”, “‘$now’ (“.gmtime($now).”)
    n”;
    if($now >= $secs){
    print “It’s time to go now.”;
    }else{
    print “Don’t worry, still have time.”;
    }

    [/code]

    Google催生更多千万、亿万富翁

    (据CNET报道)如果你突然有了1000万美元或者1亿美元,你会做什么?不要误会,这不是笑话,只是这个问题也不是问你,而是问给那些在Google工作过或正在工作的手中拥有巨额股票期权的IT幸运儿。短短几年Google创造了互联网上的财富神话,股票从2004年当初的85美元涨到现在的600美元左右,造就的百万富翁也从04年的900多名一下扩充到现在的成千上万名。目前为止,Google员工手上拥有的股票价值44.8亿美元,Google的创始人之一Larry Page,持有价值188.5亿美元的股票,另一创始人Sergey Brin持有价值也达到188.1亿美元。在拥有如此惊人的财富的情况下,很多人都会很好奇他们究竟有什么打算啊?退休,环球旅行,追求自己的梦想还是继续呆在Google呢?

    根据银行资料,早期的500名Google员工已经有三分之一离开了公司。而到目前为止估计有2200多名拥有首次公开招股前的员工也正计划,当他们拿到股票就会退出Google。在这些离开的千万、亿万富翁之中,有人环球旅行和家人享受天伦之乐(这就是传说中的睡觉睡到自然醒,数钱数到手抽筋),也有的再次创业努力追寻自己的理想。其中大家比较熟悉就是Twitter的创始人之一也是来自Google。

    对这些富翁来说,很多普通人一辈子追求的目标都已经达到,而且他们还非常年轻,之后他们要走的将是一段非常惬意的自由自在的任意发挥的光明之路。然而这些对于我们这些普通人,还在对两斗米而折腰的打工者来说,这又是一些我们可以看见的,实实在在的未来版畅想曲。无论未来是否会变得富有,我想我都应该好好想想人这一辈到底想要做什么,想要追求什么?怎么样人才活得有价值?^_^

    SQL Server管理小技巧

    1. 批量修改table所有者为’dbo’

    EXEC sp_MSforeachtable ‘exec sp_changeobjectowner ‘’?’’,’’dbo’’ ‘
    2. 快速导入导出image类型字段的方法: TEXTCOPY.exe
    在企业管理启里面类似image等这样的Binary字段无法直接查看,TEXTCOPY.exe可以帮助我们轻松解决这个问题。SQL Server会将大于8k的二进制数据分段保存,所以用程序获取image字段的时候需要注意将分段的合并,所以在处理大量图片的时候,会出现效率上的问题。TEXTCOPY.exe是一个很好的快速高效工具,它可以帮助你快速存储和获取image字段,进行跨数据库的操作,而且免去了频繁使用用户名密码登录的麻烦和安全问题。你可以在SQL server的安装目录/MSSQL/Binn下找到它,其用法如下:
    TEXTCOPY [/S [sqlserver] ] [/U [login] ] [/P [password] ] [/D [database] ] [/T table] [/C column] [/W “where clause”] [/F file] [{/I /O}] [/K chunksize] [/Z] [/?]
    /S sqlserver : SQL Server 服务器,通常用(local)
    /U login : 用户名
    /P password
    /D database : 数据库名
    /T table : 数据表名
    /C column : 字段为text或image的列名
    /W “where clause” : 条件判断语句
    /F file : 要存储或是导入源的文件名
    /I : 表示插入数据
    /O : 表示输出数据
    /K : 分块数据段的大小,最小1024字节数,默认4096
    /Z : 现实调试信息
    /? : 帮助

    用PHP分析GIF动画图片

    walkingcoder.gif
    Phpclasses有一个生成GIF动态图片的Class当下来试试,很好用。

    gift89a.gif

    看了看源代码,只是实现了GIF图片的简单叠加,而如果要想做到分析GIF动态图片,做到将GIF动态图片拆分,甚至修改后重新生成新的GIF动态图片。看来还是要从分析GIF89a规范入手。在了解GIF89a的编码规则以后,还需要了解LZW,因为GIF采用的是这种LZW的无损压缩的算法。
    这是我总结的GIF89a规则,希望有时间好好研究一下:

    =========================
    The Definition of the GIF Format allows for a Data Stream to contain:

    • Header
      Signature: ‘GIF’ => 3 bytes: 0x47 0x49 0x46
      Version: ‘89a’ => 3 bytes: 0x38 0x39 0x61
    • the Logical Screen Descriptor
      Logical Screen Width: unsigned 2 bytes
      Logical Screen Height: unsigned 2 bytes
      Packed Fields:
      Global Color Table Flag 1 Bit
      Color Resolution 3 Bits
      Sort Flag 1 Bit
      Size of Global Color Table 3 Bits
      Background Color Index: 1 byte
      Pixel Aspect Ratio: 1 byte (Aspect Ratio = (Pixel Aspect Ratio + 15) / 64)
    • a Global Color Table
      size: 3 x 2^(Size of Global Color Table+1).
    • Image Descriptor
      Image Separator: 1 byte => 0x2C
      Image Left Position: unsigned 2 bytes
      Image Top Position: unsigned 2 bytes
      Image Width: unsigned 2 bytes
      Image Height: unsigned 2 bytes
      Packed Fields:
      Local Color Table Flag 1 Bit (if 1, follow immediately after this Image Descriptor.)
      Interlace Flag 1 Bit
      Sort Flag 1 Bit
      Reserved 2 Bits
      Size of Local Color Table 3 Bits
    • Table Based Image Data
      LZW Minimum Code Size: 1 byte
      Image Data (Data Sub-blocks)

    //////////Animated Control Start

    • Graphic Control Extension.
      Extension Introducer: 1 byte => 0x21
      Graphic Control Label: 1 byte => 0xF9
      Block Size: 1 byte
      Packed Fields:
      Reserved 3 Bits
      Disposal Method 3 Bits (Recommendations: 0)
      User Input Flag 1 Bit (Recommendations: 0)
      Transparent Color Flag 1 Bit
      Delay Time: unsigned 2 bytes
      Transparent Color Index: 1 byte
      Block Terminator: 1 byte
      //////////Animated Control End

    • Comment Extension.
      Extension Introducer: 1 byte => 0x21
      Comment Label: 1 byte => 0xFE
      Comment Data (Data Sub-blocks): using the 7-bit ASCII character set
      (each of size at most 255 bytes and at least 1 byte)
      do not interfere with Control or Data blocks
      Block Terminator: 1 byte => 0x00

    • Plain Text Extension (Skip)
    • Application Extension (Skip)
    • Trailer: 1 byte => 0x3B

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

    Google开始应用图像辨认文字的专利技术

    今天从informationweek看到Google已经开始将图像辨认文字的专利技术应用到Google Map中的街道预览(Street View)和图书搜索(Book Search)中。通过这项从图像中辨认出文字的专利技术,Google可以更方便的从图片、视频中提取相关文字信息,以求更快、更准确的搜索出相关内容的图像、视频或其他多媒体内容。可以说这标志着搜索读图时代的到来。该项专利申请是早在2007年6月就由Google向世界知识产权组织提出申请。

    看看自己做的东西,还在使用CAPTCHAS(因防垃圾信息而设置的图片验证功能,要求用户提交信息的时候,填写程序生成的图片中的文字符号)来防止SPAM垃圾内容的提交。这让我不得不担心,SPAMMer获得这项技术后的情景。随着电脑技术的不断发展,用程序来模拟internet用户的行为越来越难以判断和被检测。如何判断网络上的动作是由一个真实的人所发出的行为成为从事网站开发所要仔细考虑的一个问题。而与反垃圾信息(Anti-Spam)的斗争也将任重道远。

    极度郁闷:携程的酒店预定服务

    趁着元旦放假,我在携程上预订了厦门一间酒店的标间,兴致勃勃地赶到酒店,服务台却说没有我的订单记录,只有豪华套房问我要不要,真是莫名其妙,丫的!难道这就是酒店的服务?携程的服务?明明下了订单

    订单号: 32936323 订单日期: 2007-12-24 订单状态: 预订成功
    订单内容: 怡庭白兰酒店(原厦门白兰酒店)

    来到酒店却着遇如此的冷遇和对待,厦门的风景再好,也是觉得有点别扭,真是扫兴!

    好在厦门的酒店还不少,速8、如家、世家这些经济连锁酒店的服务也不错,免了睡大街的凄惨。看来以后要在携程订房,光看用户点评(综合评分:3.7),远远不够。要避免再次遇见这样的郁闷事件,我看在订房的时候还是要多个心眼,免得带来不必要的麻烦。

    各类国内长途电话费小记

    最近常打国内长途电话,帐户里的钱很快就被用光,查了查一些相关的国内长途电话资费。

    全球通:拨打市话和国内(不含港澳台)长途资费统一,调整为0.39元/分钟全包,实际上砍掉了国内长途费。
    Skype: 0.17元/分钟全包 (通话质量很差,经常断断续续,任何一方都有听不到对方说话的时候,而且国内长途很难打通,常常需要重播几次)
    中国移动神州大众卡: 0.69元/分钟全包(含漫游费0.60元/分钟和国内长途话费0.09元/分钟)。
    12593: 国内长途 - 闲时 (0:00-12:00):0.39元/分钟 全包; 忙时(12:00-24:00):0.59元/分钟 全包
    商旅卡:国内长途0.25元/分钟全包
    小灵通:长途市话0.2元/分钟。直接拨长途加拨17909: 0.2元/分钟。
    201思家月卡:亲情电话资费:(单位:0.10元/分钟)
    网通固定电话: 0点到7点是0.04元/秒,其他时间是0.07元/秒。加拨17909每分钟0.30元。
    中国电信: 每6秒为一个计费单元,不足6秒按6秒计。通话费标准为0.07元/6秒。国内长途IP电话资费为0.30元/分钟。
    普通国内长途电话资费为0.70元/分钟(超级贵-100分钟63元),市内电话大概0.40元/分钟。

    听说网上还有更便宜的电话卡买,费用只有平时电话的三分之一,有空再找找。不知道大家还有没有别的便宜打长途电话的方法。

    update: 广州电信的固话和小灵通用户在拨打国内、国际港澳台长途电话时,只要在号码前加拨96688拨打,就可享受最低三折的优惠,国内长话0.2元/分钟+加同长时段的市话费

    Drawter-很炫的(X)HTML在线编辑器

    mwsnap113.jpg

    Drawter是一款基于jQuery的(X)HTML在线编辑器。它把所有复杂的DIV和CSS样式表都做成可视的,做到编辑/设计简单化,对于烦透了HTMl源代码和对设计网页不熟悉的朋友来说是一个很好玩的工具。个人感觉比DreamWeaver好用多了,特别是设计DIV的网页布局,很酷!

    Drawter已经推出Beta 2版本,功能强大。主要包括设计(简单的鼠标拖拽)和编辑模式。强烈向大家推荐!

    编译php5.2.5遇到Mysql的奇怪错误

    Mysql版本是MySQL 4.1.0-alpha-log,出现如下错误:

    ext/mysql/php_mysql.o(.text+0x300): In function zm_startup_mysql': /root/new_soft/php-5.2.5/ext/mysql/php_mysql.c:405: undefined reference tomysql_server_init’
    ext/mysql/php_mysql.o(.text+0x31f): In function zm_shutdown_mysql': /root/new_soft/php-5.2.5/ext/mysql/php_mysql.c:426: undefined reference tomysql_server_end’
    collect2: ld returned 1 exit status
    make: * [sapi/cli/php] Error 1

    在网上搜索了一下,没有找到合理的解释,5.2.4中有这样一个BUG,不过应该已经修补好了吧。难道是mysql版本的问题?

    新的Adsense2000美元推荐奖励-你拿得到吗?

    Google AdSense以可靠的信誉和高效的广告效果获得了不少站长的青睐,最近推出新的2000美元推荐大奖,条件是180天内推荐25个广告发布商,并且这25个发布商在180天内都获得了超过100美元的收益,那么那两千美刀就稳落你的口袋啦。怎么样?心动了吧,不过要做到这点确实也不容易。:-) 刚入行的adsenser也不用泄气,Adsense广告的推荐奖励也还有其它的奖励:

    1. 如果通过你的网站推荐一个发布商,并且在180天内这个广告发布商获得了5美元的收入,你就可以得到5美元的汇报。
    2. 同样,如果推荐的发布商注册后在180天内赚取100美元的收入,并且拿到了支票,你将额外获得250美元的奖励。

    如果你觉得你的网站还可以,不妨去申请adsense试试,祝大家早日发财!圣诞快乐哦!

    2008年一月十号更新: 对于北美洲、拉丁美洲和日本以外的国家和地区,包括中国地区在内,将会停止 AdSense 推介