批量 Ping 和多点 Ping 工具

如果你是网站管理员,我想你一定知道ping命令,而且使用过。使用这个命令能测试出从本地到目标主机之间的数据传输质量。

今天要介绍几款工具,分别是批量ping,和多点ping。

1、PingInfoView

PingInfoView是一款小巧的批量Ping工具,允许Ping多个主机名和IP 地址,并且可同时观看结果。可视化操作,可以算是ping命令的扩展应用。

继续阅读

Archiver 文章列表 1.4 for Z-Blog 1.8

Discuz! 、Supesite/Xspace 等一些程序都有Archiver,很简单的无图版或者文章列表,更方便阅读和搜索引擎收录,也可以说就是为了搜索引擎服务的。

这个插件可以根据文章点击量、时间以及分类排序,可以采用分页生成,也可以不用,还可以自定义模板,甚至使用系统模板。

其实就是以前那个列表插件改过来的,我叫习惯叫这种东西 Archiver,当然你也可以叫他 sitemap,跟 sitemap 还是不一样的。

功能介绍

生成静态的文章列表,可以自定义模板,使博客更容易被搜索引擎抓取和收录。
* 静态化列表页面,html结构简单
* 是博客的简洁版、无图版
* 是博客的站点地图,也是文章存档
* 优化view模版,防止重复收录 new

看过效果再说,非常舒服的排版。

插件下载

http://bbs.zblogcn.com/thread-23506-1-1.html

http://download.rainbowsoft.org/plugins/Archiver/

中国电信的笔试题

在网上投了份简历,中国电信**分公司的,职位是网站程序员。没想到上午竟然通知我去面试,也没有多少准备下午就去了。

由于是应届毕业生,面试这种事情对我来说还是很新鲜的,没有任何所谓的紧张,因为这样的机会完全是一个巧合。

面试的过程很顺利,先交了简历,然后人事部的两个工作人员根据简历简单的问了一些问题。

最后,还有一张试卷需要做,算是笔试。一共5个题目,一个莫名其妙的算术题,一个简单的逻辑思维题,两个网站运营开发方面的,其中有一道题感觉非常有意思:

篮球架比一层楼高,比两层楼矮,篮球架的高度让你想到什么?

因为当时时间仓促,我的回答很简单:篮球架的高度由人体的身高决定,楼层的高度也是由人体的身高决定的。

回答这样的问题,100个人回答就可能有100个不同的答案,不知道你能想到什么?

ASP 自动识别链接函数

找了很多地方,发现一个还不错的,不过多少有点问题,经过zx的指点,参照Z-Blog处理UBB的函数修改了一下,基本还算好用。

Function autoLink(str)
str=" "&str
Set re=new regExp     '建立正则表达式对象regular expression
re.IgnoreCase=true     '忽略大小写
re.Global=true            '搜索匹配字串针对全部文本
'查找带协议前缀的链接
re.Pattern="(http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?)"
str=re.replace(str,"<a href='$1' target='_blank'>$1</a>")
'查找不带协议前缀的链接
re.Pattern="([^(http:\/\/)])(www\.([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
str=re.replace(str,"$1<a href='http://$2' target='_blank'>$2</a>")
'查找邮件链接
re.Pattern="(mailto:)?([\w]+@([\w-]+\.)+[\w]+)"
str=re.replace(str,"<a href='mailto:$2'>$1$2</a>")
Set re=nothing
autolink=trim(str)
End Function

主要是正则表达式的应用啊。

“苏打绿”就是这种颜色

很早以前就听“苏打绿”了,小民谣,偶尔来点摇滚,在豆瓣上被归为 indie pop 风格,喜欢到了极点。

昨天整理资料的时候,发现了苏打绿这张同名专辑的CD和封面,才突然明白了“苏打绿”是怎样一种颜色。

苏打绿同名专辑CD封面

整张专辑,听一个下午都不会倦。最喜欢那首《是我的海》,甚至带有哭腔的高潮。

“ActivePlugin_插件ID名称”函数是必须的

Z-Blog 在1.8版中加入了类似WordPress的插件机制,可谓强大。抱着学习的态度,我也试着写了一些插件,小试牛刀。

不过在开发插件的过程中有个问题很让人不解,如果插件有include文件,这个文件可能导致排序在该插件后面插件的include.asp无效。所以,常常有人在论坛中发帖询问 htmldefault 、sitemaps 等插件无效的问题。其实很早以前就有发现这个问题,但是仔细检查过出错插件的include.asp,很可惜没有发现问题所在。

今天终于发现了一点端倪,如果include.asp中没有挂入接口的函数,便会导致以上问题。

ASP/Visual Basic代码
  1. Function ActivePlugin_插件ID名称()  
  2.   Call Add_Action_Plugin("目标接口","具体执行代码")  
  3. End Function  

Z-Wiki里有相关文档:http://wiki.rainbowsoft.org/doku.php?id=plugin:doc#%%8C

也就是说,“ActivePlugin_插件ID名称”函数是必须的,即使这个函数什么也不做,空在那里。

BBSXP的 AspJpeg 水印函数

今天装了一个asp的bbs,很经典的BBSXP程序,最后一次玩还是高三的时候,如今大学都毕业了….

看了附件上传部分的代码,比我的WindsPhoto处理图片水印强很多,精华代码在这个函数,很有参考价值,贴出来学习一下。

Function JpegPersits
if SiteConfig("WatermarkType")=0 then
Jpeg.Canvas.Font.Color = Replace(SiteConfig("WatermarkFontColor"),"#","&h") '颜色
Jpeg.Canvas.Font.Family = SiteConfig("WatermarkFontFamily")         '字体
Jpeg.Canvas.Font.size = SiteConfig("WatermarkFontSize")         '大小
Jpeg.Canvas.Font.Bold = CBool(SiteConfig("WatermarkFontIsBold"))    '是否加粗
'Jpeg.Canvas.Font.ShadowXoffset = 10        '水印文字阴影向右偏移的像素值,输入负值则向左偏移
'Jpeg.Canvas.Font.ShadowYoffset = 10        '水印文字阴影向下偏移的像素值,输入负值则向右偏移
Title = SiteConfig("WatermarkText")
TitleWidth = Jpeg.Canvas.GetTextExtent(Title)
if Jpeg.Width<TitleWidth then exit function '图片比水印文字小,则不加水印
select case SiteConfig("WatermarkWidthPosition")
case "left"
PositionWidth=10
case "center"
PositionWidth=(Jpeg.Width - TitleWidth) / 2
case "right"
PositionWidth= Jpeg.Width - TitleWidth - 10
end select
Jpeg.Canvas.Print PositionWidth, 10, Title
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
elseif SiteConfig("WatermarkType")=1 then
Set Jpeg2 = Server.CreateObject("Persits.Jpeg")
Jpeg2.Open Server.MapPath(SiteConfig("WatermarkImage"))
Jpeg2Width=Jpeg2.OriginalWidth
Jpeg2Height=Jpeg2.OriginalHeight
if Jpeg.Width<Jpeg2Width or Jpeg.Height<Jpeg2Height*2 then exit function    '图片比水印图片小,则不加水印
select case SiteConfig("WatermarkWidthPosition")
case "left"
PositionWidth=10
case "center"
PositionWidth=(Jpeg.Width - Jpeg2Width) / 2
case "right"
PositionWidth= Jpeg.Width - Jpeg2Width - 10
end select
select case SiteConfig("WatermarkHeightPosition")
case "top"
PositionHeight=10
case "center"
PositionHeight=(Jpeg.Height - Jpeg2Height) / 2
case "bottom"
PositionHeight= Jpeg.Height - Jpeg2Height - 10
end select
Jpeg.Canvas.DrawImage PositionWidth, PositionHeight, Jpeg2, 1, &HFFFFFF '透明度, 透明颜色
end if
End Function
%>

久游网和《劲舞团》沦为众矢之的

上月写了篇《不讨人喜欢的劲舞团》,被大旗社会转载过去,短短的一天时间内就给我带来了近1500个IP。最近久游网关于劲舞团又和大众媒体吵的够凶,至少已经是第二轮争吵。

今天新浪有标题为《劲舞团:暴露网游隐性色情营销》的文章,被cnBeta转载过去,下面100多个评论没有一个支持劲舞团的,原来劲舞团真的那么讨人厌,网友要求关闭劲舞团已经不是第一次了。我截了图一张,很搞笑:

还是在今天,久游网又发表关于《劲舞团》相关媒体报道的声明。如今久游网和《劲舞团》已经成为众矢之的,再说什么也是白费力气了,还是好好寻求整治《劲舞团》的良方吧。

PS:九城代理的《劲舞团2》就要来了,大概就是去年的这段时间吵的很火热的话题。期待着《劲舞团2》上演的好戏!

Google 图片文字识别技术在 Picasa Web 中的应用

这是一张刚刚上传到Picasa的图片(图片已失效),firefox的壁纸 ,虽然我用了缩略图,不过还是可以清楚的看到图片上“Always use protection”的字样。

而在图片的查看页面右侧的标记处,分别有“cool always use protection wallpapers firefox”6个已有标记,其中3个是图片上的文字,另外竟然还有”wallpaper和firefox“,难道他还可以认出图片上那只小狐狸,如果真的是这样,Mozilla又该笑了。其实,Mozilla和Goolge关系好像一直不错的样子。

这样的话就不单纯只是图片文字识别了,或者加入了图片识别。不过,也有可能是根据其他用户上传的同样图片进行判断的,我只是随便猜测。

文字识别技术用在这里,因为标记是自动添加的,可以很大程度上增加了Picasa相册的黏性。又翻看了其他图片,很纳闷的是拥有标记的并不多,并不是所有含有文字的图片都有标记。

关于Google图片文字识别技术可以参看 http://my-hou.cn/archives/256

Z-Blog 自带数据库插件升级解决方案

首先,这篇文章是写给Z-Blog插件开发人员作为参考的,仅仅提供一种思路。

新版Z-Blog中的PluginS插件已经支持检测插件版本了,给插件的安装和升级带来了很多方便。但是插件升级的同时可能造成插件数据库已经配置文件的覆盖,也就是说,升级后你可能只拥有一个初始化的插件。

这里提供一个方案,由插件自己解决这个问题,下面是相册插件windsphoto的include.asp部分代码,发出来说明一下,供参考。

include.asp部分代码

'定义数据库路径
Const WP_DATA_PATH="data/12345.mdb"
'注册插件
Call RegisterPlugin("WindsPhoto","ActivePlugin_WindsPhoto")
'安装插件
Function InstallPlugin_WindsPhoto()
On Error Resume Next
Call SetBlogHint_Custom("? 提示:[WindsPhoto]已启用,现在进入初始化系统设置.")
Call WindsPhoto_Rebackup_Include()
Call WindsPhoto_Database_Rename()
Err.Clear
End Function
'首次安装数据库改名....
Function WindsPhoto_Database_Rename()
Dim fso, f, s, pathnew, ranNum
randomize
ranNum=int((99-10+1)*rnd+99)
pathnew=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum& ".mdb"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.fileexists(BlogPath & "/plugin/windsphoto/data/winds.mdb") Then
Set f = fso.GetFile(BlogPath & "plugin/windsphoto/"& WP_DATA_PATH)
f.name=pathnew
Set f = Nothing
Dim strContent,strWP_DATA_PATH
strContent=LoadFromFile(BlogPath & "/PLUGIN/WindsPhoto/include.asp","utf-8")
strWP_DATA_PATH="data/" & pathnew
Call SaveValueForSetting(strContent,True,"String","WP_DATA_PATH",strWP_DATA_PATH)
Call SaveToFile(BlogPath & "/PLUGIN/WindsPhoto/include.asp",strContent,"utf-8",False)
End If
Set fso=nothing
End Function
'还原备份设置
Function WindsPhoto_Rebackup_Include()
Dim strContent,fso
Set fso=server.createobject("Scripting.Filesystemobject")
If fso.fileexists(BlogPath & "/plugin/windsphoto/include.asp.bak") Then
strContent=LoadFromFile(BlogPath & "/plugin/windsphoto/include.asp.bak","utf-8")
Call SaveToFile(BlogPath & "/plugin/windsphoto/include.asp",strContent,"utf-8",True)
'删除初始数据库
Call DelSiteFile("/plugin/windsphoto/data/winds.mdb")
'跳转到插件设置
Response.Redirect "../plugin/windsphoto/admin_setting.asp"
End If
Set fso=nothing
End Function

继续阅读