Tengs

Design & Develop

  • 言论自由
  • 技术文档
  • 日常琐事
  • 其它东西

技术文档

内容可能涉及云计算、高性能计算机、纳米粒子检测、通信工程、电力等等方面,这些东西的共同特点是:都是我李凯腾接触过的。

google基于图片的搜索浅析

2011年6月23日 / Leave a Comment

今天在群上看到消息说google已经推出了图片搜索,赶紧登陆试了试:images.google.com.hk

搜索的步骤是:访问images.google.com.hk;点击搜索图标左边的摄像机小图标;弹出窗口中上传一张图片;点击搜索即可(说这话听起来怎么好像很傻?!哈哈……)

search

由于完全不知其性能如何,所以第一张用于测试的图片选的是亚运志愿者的logo(终究能说得上是广为人知对吧?!也算是低难度处理了)

上传的图片是:

so1

搜索结果如下:

s1

仔细看搜索栏,除了有那张图片的url外,多了一个“广州亚运会标志”的关键字,这个关键字并不是我自己加上去的,所以猜测google通过图像识别技术对我上传的图片做了处理(刚好之前做过一个项目就是用图像识别技术实现书画鉴别的,具体实现是通过算法对比数据库中的图像和用户上传的图像,假如达到一定的相似度或者有部分特征很相识就能返回数据库中关于该图片的信息,所以看到google的做法后感觉是分外没感觉);处理完成后假如有类似结果,则将这些结果作为关键字,再做一次搜索(这次搜索和我们通常使用的搜索就没什么两样了,都是通过关键字完成)。

为了印证这种想法,我又上传了一张图片,这次可不是什么闻名遐迩的图片了,而是我自己P的一张图,多年之前这张图片一度是我的桌面,看图:

so2

搜索结果如下:

s2

结果很令人愉快,首先请看搜索框,出现的文字是“在此次描述图片”,这应该是google的图片处理算法没能找到确切的关于我这张上传图片的描述,所以不敢贸然下定论,只好把工作推给了用户——“瞧,伙计,我搞不定,你自己描述一下你的这种神马图吧……”

然而google终究是google,用户搜索完不给返回点什么到底是用户体验很差的一件事,所以google对用户上传图片的色调进行了匹配,结果是返回了一堆和我的图片相类似的蓝色背景的图片,希望借此挽回一些搜索引擎真无能的指责。假如你认真看的话或许发现一堆蓝色图片里面有一张粉红色的很引人注目,这到底是怎么回事?!仔细分析一下,我觉得是google在分析用户上传图片色调的同时也分析了它的布局,所以才会返回那张粉红色的图片,难道您不觉得这张粉红色的图片的结构和我上传的那张图片的结构很相似吗?!

总得来说,这个搜索功能无疑是令人心驰神往的,或许这也是云计算带给我们的东西(原谅我,我最近看云计算比较多,不自觉就想到了,哈哈……)

Posted in: 技术文档 Tagged: Google图片搜索

html5 & CSS3.0

2011年5月8日 / Leave a Comment

这两天和大水一起玩html5 & CSS3.0,准备写一个网页版的小游戏,找demo的时候发现了html5一些很有趣的应用,发两个给大家爽爽。当然,请使用非IE浏览器(360安全卫士、世界之窗可以吗?oh,no.不要问这种问题,自己试一下很快就知道答案了。) 第一个据说是一个日本人写的测试代码,用哆啦A梦来测试浏览器对CSS3的支持程度。只有完美表现出多拉A梦的轮廓和阴影,才能叫完美支持HTML5特效。目前Chrome浏览器最完美,IE是最惨不忍睹的。如下图:

html5_1

点击这里测试你的浏览器

另一个更强大,你可以看到HTML5的视频不需要Flash的支持即可直接嵌入网页(说到这里突然想起了html5不再支持applet了,不知道以后java的小程序怎么办,所以这个世界还是很黑暗的,哈哈),并且最炫的是,能够将视频“炸开”,每一块碎片都还都能正常播放!(由于网速原因第一次载入可能会很卡)

点这里http://craftymind.com/factory/html5video/CanvasVideo.html看网页

Posted in: 技术文档 Tagged: CSS 3.0, HTML5

phpmyadmin配置全过程

2010年12月12日 / Leave a Comment

这几天着手做师大青年的新站点,原本定下是MySQL配Navicat Lite数据库管理软件——事实上Navicat Lite的确是个好东西,用户界面设计得很像SQL Server Management Studio Express,对于熟悉mssql的用户来说无疑很上手。更重要的是有免费版本,这对我们穷人来说是件大好事。

然而后来师兄又说navicat的免费版不靠谱,不能备份数据库——这就悲剧了,没人敢保证自己的数据库不会出错,不备份一出错就没救了,看来还是不得不用回phpmyadmin。

既然如此,也只好勉为其难配phpmyadmin了——记得大一的时候配过一次,过程相当痛苦,真可谓记忆犹新。

上官网找到了最新稳定版本phpMyAdmin3.3.8.1,毫不犹豫download了一个phpMyAdmin-3.3.8.1-all-languages.zip,虽然size比起其他压缩格式大了点,但.zip格式总让我更加放心,这只能说是一个癖好吧。

下完解压才想起,phpmyadmin必须在php环境下运行,由于到目前为止都没空去碰php,我的笔记本上也一直没有安装php的环境,这次看来不得不装了。于是乎上php官网windows下载区。发现最新版本是PHP 5.3 (5.3.4),仔细看了一下,有VC9、VC6、Non Thread Safe(非线性安全)、Thread Safe(线性安全)的区别,Google了一下,原来VC6版本是使用Visual Studio 6编译器编译的,如果PHP是用Apache来架设的,应该选择VC6版本;而VC9版本是使用Visual Studio 2008编译器编译的,如果PHP是用IIS来架设的,就选择VC9版本。而Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源;Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。官网不建议使用非线程安全版,于是下了一个线程安全的php-5.3.4-Win32-VC9-x86.msi。

由于我的系统是win7,win7的iis版本为iis 7,得师兄一篇博文(点这里看看)指导,知道有一个叫IIS Manager For IIS 7的图形化PHP管理软件,安装后可以在Internet 信息服务(IIS)管理器里找到一个PHP Manager的图标,方便对php进行各种设置。依照我热衷偷懒的本性,当然得装,于是屁颠屁颠得上 codeplex.com下载安装了一个。

接下来安装php:中间提示要选择Web Server Setup,才发现我IIS CGI还没安装,于是打开控制面板——安装或关闭windows功能——Internet信息服务——万维网服务——应用程序开发功能——勾选CGI,确定安装。安装完毕继续安装php,当然Web Server Setup就选IIS CGI。

phpmyadmin配置

搞定php,着手配置phpmyadmin,为了方便管理,特意在信息服务器上新建了一个本地站点,把phpmyadmin解压到了这个站点的根目录下,又Google了一番,得到大致配置如下:

打开 libraries 目录下的 config.default.php 文件,依次找到下面各项,按照说明配置即可。

1、访问网址


$cfg['PmaAbsoluteUri'] = ''; //这里填写phpMyAdmin的访问网址

2、MySQL 主机信息


$cfg['Servers'][$i]['host'] = 'localhost'; //MySQL hostname or IP address 填写localhost或MySQL所在服务器的ip地址,如果MySQL和该phpMyAdmin在同一服务器,则按默认localhost
$cfg['Servers'][$i]['port'] = ''; //MySQL port - leave blank for default port 这是MySQL端口,默认为3306,保留为空即可,如果您安装MySQL时使用了其它的端口,需要在这里填写。

3、MySQL 用户名和密码


$cfg['Servers'][$i]['user'] = 'root'; //填写MySQL访问phpMyAdmin使用的MySQL用户名,默认为root
fg['Servers'][$i]['password'] = ''; //填写对应上述MySQL用户名的密码

4、认证方法


$cfg['Servers'][$i]['auth_type'] = 'cookie'; //考虑到安全的因素,建议这里填写cookie

在此有四种模式可供选择,cookie,http,HTTP,config:

config方式即输入phpMyAdmin的访问网址即可直接进入,无需输入用户名和密码,是不安全的,不推荐使用。

当该项设置为cookie,http或HTTP时,登录phpMyAdmin需要数据用户名和密码进行验证,具体如下:

PHP安装模式为Apache,可以使用http和cookie;

PHP安装模式为CGI,可以使用cookie。

5、短语密码(blowfish_secret)的设置


$cfg['blowfish_secret'] = '';

如果认证方法设置为cookie,就需要设置短语密码,设置为什么密码,由您自己决定,这里不能留空,否则会在登录phpMyAdmin时提示错误。

整个过程历时3、4个多小时,为了使用phpmyadmin,先后安装了php、IIS Manager For IIS 7、IIS CGI,可见这个世界的确是普遍联系的,牵一发而动全身,用在这里也不为过了。

Posted in: 技术文档 Tagged: php, phpMyAdmin, 配置过程

“数据挖掘”思想指导下的“坐车网”功能实现分析

2010年10月13日 / Leave a Comment

这阵子跟着老师和一班兄弟搞数据挖掘,一心想找个实用的系统案例分析一下,以便对今后所期望开发出来的应用系统有个大概的把握。傍晚洗澡时突来灵感,想起了坐车网(www.zuoche.com),这的确是一个数据挖掘大显神通的好舞台,起码我这么认为。

就我菜鸟级的见解,数据挖掘这种技术主要针对的是海量数据——从海量数据中抽象出一个模型,根据输入的参数,模型经过分析得到一个期望的输出。而“坐车网”,显而易见,需要包涵全国各地的每条公交线路信息、每条公交线路上的每个站点信息,如此数据量,够得上海量了。“坐车网”的主要功能就是在B/S架构下,用户通过提交一份表单(用户必须输入的信息很简单:出发地、目的地,仅此而已,当然,如果你喜欢的话还可以进行一些高级设置,比如期望搜索到白天还是夜里的公交线路),服务器通过get方式获得用户输入参数(之所以如此肯定为get方式,请看下面解释),通过某种未知的手段(实话实说,迄今为止我还没有确切的证据证明是通过什么手段实现的,话说回来,假如我知道了,那还得了,哈哈),返回由出发地到达目的地的各种交通线路转乘方式。

打开 www.zuoche.com 随便输入一个出发地和一个目的地,可以看到浏览器的地址栏上出现了这么一个URL:
“http://www.zuoche.com/traffic/?si=00c4538e_2369515150&di=2708569b_3584974491&time=1&stgy=0&peop=0&c1=%E4%B8%8A%E6%B5%B7&c2=%E4%B8%9C%E8%8E%9E&x=40&y=9”,
再点击“返回首页”的超链接,发现URL为“http://www.zuoche.com/traffic/index.jspx”。由第二个URL后面的index.jspx可以得知这个网站用的是java web快速开发框架,本质上是java。对于第一个UTL,http://www.zuoche.com/traffic/ 部分是域名,“?”后面跟着的很长一串东西就是所谓的传递参数,这也是上面断定get方式的依据,其中“si”应该是出发地,“di”是目的地,“time”自然是时间,“time=1”表示的是白天,假如选择夜车的话“time=2”;“stgy=0&peop=0”应该分别对应“尽量少走路和尽量少乘车”“C1、C2”是出发地和目的地的城市,比如广州,对应“%E5%B9%BF%E5%B7%9E”。

上述是网站的功能实现,很简单,给用户一个傻瓜式的界面,让用户输入参数,当用户点击查询时,浏览器把参数传回给服务器,服务器经过一系列的功能实现后把线路信息返还回来,在浏览器上呈现给浏览者。

下面是重点了,我要对比一下在非“数据挖掘”思想指导下的功能实现和“数据挖掘”思想指导下的实现优劣。当然,由于本人初学数据挖掘,不免有很多认识误区,高手发现了,还望不吝赐教。

先说说完全不用数据挖掘思想实现线路的查询:

我想到的是首先应该把某个城市,比如广州的各个公众比较熟悉的地名还有标志性的建筑所在地点的经度纬度和地名对应起来存储在数据库中。

然后建一张名为station的表,key为station,就是每个公交或者地铁站点(未免混乱,地铁就权当公交算了,事实上实现起来应该是一致的),这个表还应有一个字段“place”,用来存放在每个站点下车后步行能够到达的地点,还必须有一个字段“path”用来存储每个站点上经过的公交线路。

再建一张“path”表,用来存放每条线路经过的站点。key为path,即线路,用一个字段station存储线路上的每个站点名。

当用户输入出发地和目的地时,首先要在一堆混乱的地名中查找到离出发地和目的地所在位置最近的车站名称,这个过程的时间复杂度是难以估量的,假如运气不好的话或许要遍历整个城市公交站点组成的数据表,发生这种情况只能说:悲剧。当然,采用地域分区和地点索引的方式能显著提高检索的效率,做法是存储地点的经纬信息时先依照一定的规则(人为划区或者是地域划区都可以)把地点信息存放到不同的数据单元中,当用户输入查询参数时要求用户同时输入出发地和目的地的大致所在分区(这种情况下选用下拉选单或单项按钮,用户体验会更好),这样做可以把需要检索的数据范围大大缩小。

找到离出发地和目的地最近的站点A和B后,以出发地站点A为参数,在station表中查找经过这个站点的所有公交路线,以这些路线为参数,在path表中查找B站点,同理,如果运气好的话,刚好A和B在同一条线路上,这时能很快的返回线路信息;假如所有线路都无法搜到站点B,则必须以每条线路上经过的站点为参数再在station表中搜索此站点对应的线路,再以这些线路为参数在path表中搜索这些线路是否经过B站点……如此循环往复,总有一个机会能查询到B站点,这时需要根据记录下来的线路信息依次排好,统计出中间需要经过的站点数和转乘的次数,再用一个函数算出出发地到A站点,目的地到B站点的大概距离(还记得我们存了所有地名的经纬度吗?这时派上用场了),当然,这个距离是相当大概的,因为用经纬度算出来的距离只能是直线的,假如出发地与A点间有建筑物挡住的话,那就不得不用曲线绕过了,这时算出来的距离就只能说是很大概的。

由上面的过程不难发现,站点B在第一、二步搜索中,搜索的复杂度是比较低的,假如在这前几步搜索中没能找到B,那后面的搜索量几乎是以指数级增大的。众所周知,查询数据库本身就是一件很耗费资源的事,当有大量数据需要查询时,困难程度无法想象。

所以非数据挖掘的这种线路查询系统虽说有实现的可能,但是在现实中估计不会有人那么无聊去开发,即使开发出来,最多也只能用在很小的局部地区,城市越大,平均需要的搜索时间将越长。这时很不实用的。

所以我们不得不采用数据挖掘的思想来解决这个问题。

我们要做的是训练出一个神经网络,这个网络的功能是可以根据输入的出发地和目的地智能地提供中间的线路换乘信息。

要训练这么一个神经网络我想到的解决方案是:把全市所有的公交线路以某种特定的方式(矩阵也好、指针也罢)存储起来,使所有公交线路形成一个网状的数据结构。建立一个模型,给其权赋一个任意初值,使用出发地、目的地、中间线路这样的参数对不断去改变测验模型,修改其权值……最后得到的一个模型将是最接近于我们需要的智能模型。

当然,真正实现起来或许没这么简单,但思路应该大抵如此。

注意到坐车网查询出来的坐车方式中一般还有一条出租车的方式,比如:乘坐出租车,共行驶19.2公里,费用约55元。这个用数据挖掘实现起来还是比较有保证的,方法是收集尽可能多的出租车发票作为模型的训练参数。假如不训练出一个模型的话,能做的估计也就是依据两个地点的经纬度用算法算出两点间的距离——可见这个距离是相当不具有参考性的,因为世界上的道路不总是直来直去的。

通过以上对比,不难看出采用数据挖掘的方式的确可以提高工作效率,在信息高度膨胀的今天,掌握效率无疑掌握了经济的咽喉,所以不难推测,这种技术在未来若干年内还是有发展前景的,诸君算是找对门路了。奋斗吧!!哈哈……

Posted in: 技术文档 Tagged: 坐车网, 数据挖掘

漏网之鱼——TT带来的痛苦挣扎

2010年9月11日 / 1 Comment

这几天和本部一个兄弟夏先生合作完成华师大的亚运志愿者网站。由于说好我负责ASP部分,所以拿到本部发来的页面后只是顺手用360安全浏览器看了一下,毫无疑问,页面设计得很漂亮,这充分说明我们的分工是正确的——起码对于美工来说,夏先生比我好。

没有过多考虑,匆匆忙忙开始拷代码,花了一天多的时间,期间与本部进行了n次的交流,基本完成了页面功能。并上传到了服务器。心里还一个劲地感慨:合作的力量还真是强大啊。因为之前总是一个人做整个网站,基本上都得拖几个星期,就页面的设计已经能累死人了。现在有个人帮忙写css,效果的确不错。这充分说明,独行侠的年代已经过时了。当然,剩下的事可以说不是我的事了,我可不想无聊到做上传文章之类的事。

没想到的是昨晚同是亚运网络小组的梁兄突然说网站有问题,看了一下,原来用的是腾讯的TT浏览器。这才突然想起做完整个页面后都没有在各个浏览器上做过相关测试。事实上我的电脑上并没安装TT,这是个很大的漏洞,因为腾讯的爪牙现在几乎是伸遍了中国任何一台能上网的PC,TT浏览器使用量还是相当可观的,而我之前测试页面居然一直没有留意到真是吓了一跳。忙回来下了一个安装。事实证明,页面在TT上确实是存在问题的。有这么几个div的嵌套:


<div>
<div style="float:left;">框一</div>
<div style="float:left;">框二</div>
</div>

在IE8上,呈现出来的页面是理想的:框一在框二的左边。但在TT上,框二却掉到了框一的下面。原本以为又是浏览器不兼容的问题,决定用css hack解决。Google了一番,却发现到此都说TT使用的是IE的核心,因而只要页面在IE上显示正常,在TT上也应该是正常的,所以TT没有特定的css hack可写。这真是见鬼了,因为在我的电脑上,整个页面在IE(win7的IE版本是IE8)上是很正常的,照上面的理论,TT上也应该正常才是。怀着不服气的心理检查了半天的css,发现没有任何问题,情绪无比低落。就在准备投降的时候,突然灵感光顾,顺手打开了IETester,先用IE6试验,发现整个页面几乎都是变形的,面红耳赤地赶紧关掉,幸好这些问题可以用css hack解决,算不上问题,又顺手用IE7试验了一下,瞬时气不打一处来。这个页面在ie7下的bug和TT上的错误是完全一致的。这么说来,TT使用的内核应该是ie7的内核,而不是我系统上的ie8的内核,这到底是什么原因,有待了解。但既然是ie7的内核,问题就好解决多了,起码我可以使用ie7的css hack来处理,这比起无从下手要简单N倍了。

记得韩寒有句很经典的话:灵感就像公共汽车,不来的时候一部都没有,一来的时候几部一起来。此时我突然又想起应该在TT上查看一下页面的源代码,起码能知道asp输出的html是不是有问题的。检查之后,发现了一个很重要的线索:如上所述的两个div,放的都是用asp生成的一个标题列表,这些列表是用table包围起来的,如下:


<div class="pack">
 <div style="float:left;" id="div1">
  <table><tr><td style="width:100%">XX的标题</td></tr></table>
 </div>
 <div style="float:left;" id="div2">
  <table><tr><td style="width:100%">XX的标题</td></tr></table>
 </div>
</div>

问题出在width:100%上,重复检查了一下css,发现夏兄没给div1和div2定义width,而我写asp的时候,却给td输出了一个wdith=100%的属性,所以div1就把整个pack的width占据了,div2自然只好放到了下面。明白了道理,解决起来就简单得不得了了,只要给div1和div2加一个width的属性,问题解决。

这件小事说明了发散性的思维是很重要的,如果我一味地去检查CSS或试图发现TT的css hack,可能这个问题是搞不定了。

但说来说去,到底TT为什么会用ie7的内核而不是系统上的ie8的内核,哈哈,鬼知道。

补记:写这篇日志之后的若干星期,无意中在IE的“开发人员工具”里发现了一个浏览器模式设置,骇然有IE7可选,可见WIN7不仅有IE8内核,还有IE7的。CS兄又指教说:如果系统用的是IE8的话,那么无论什么傲游360TT搜狗之类的外壳浏览器统统都是用IE7模式渲染的,所以一般来说为了省事我都在正式发布页面时給meta加上一句强制让IE8也用IE7模式来渲染……这个方法真是个好办法,学习学习!!

这几天和本部一个兄弟夏先生合作完成华师大的亚运志愿者网站。由于说好我负责ASP部分,所以拿到本部发来的页面后只是顺手用360安全浏览器看了一下,毫无疑问,页面设计得很漂亮,这充分说明我们的分工是正确的——起码对于美工来说,夏先生比我好。

没有过多考虑,匆匆忙忙开始拷代码,花了一天多的时间,期间与本部进行了n次的交流,基本完成了页面功能。并上传到了服务器。心里还一个劲地感慨:合作的力量还真是强大啊。因为之前总是一个人做整个网站,基本上都得拖几个星期,就页面的设计已经能累死人了。现在有个人帮忙写css,效果的确不错。这充分说明,独行侠的年代已经过时了。当然,剩下的事可以说不是我的事了,我可不想无聊到做上传文章之类的事。

没想到的是昨晚同是亚运网络小组的梁兄突然说网站有问题,看了一下,原来用的是腾讯的TT浏览器。这才突然想起做完整个页面后都没有在各个浏览器上做过相关测试。事实上我的电脑上并没安装TT,这是个很大的漏洞,因为腾讯的爪牙现在几乎是伸遍了中国任何一台能上网的PC,TT浏览器使用量还是相当可观的,而我之前测试页面居然一直没有留意到真是吓了一跳。忙回来下了一个安装。事实证明,页面在TT上确实是存在问题的。有这么几个div的嵌套:


<div>
<div style="float:left;">框一</div>
<div style="float:left;">框二</div>
</div>

在IE8上,呈现出来的页面是理想的:框一在框二的左边。但在TT上,框二却掉到了框一的下面。原本以为又是浏览器不兼容的问题,决定用css hack解决。Google了一番,却发现到此都说TT使用的是IE的核心,因而只要页面在IE上显示正常,在TT上也应该是正常的,所以TT没有特定的css hack可写。这真是见鬼了,因为在我的电脑上,整个页面在IE(win7的IE版本是IE8)上是很正常的,照上面的理论,TT上也应该正常才是。怀着不服气的心理检查了半天的css,发现没有任何问题,情绪无比低落。就在准备投降的时候,突然灵感光顾,顺手打开了IETester,先用IE6试验,发现整个页面几乎都是变形的,面红耳赤地赶紧关掉,幸好这些问题可以用css hack解决,算不上问题,又顺手用IE7试验了一下,瞬时气不打一处来。这个页面在ie7下的bug和TT上的错误是完全一致的。这么说来,TT使用的内核应该是ie7的内核,而不是我系统上的ie8的内核,这到底是什么原因,有待了解。但既然是ie7的内核,问题就好解决多了,起码我可以使用ie7的css hack来处理,这比起无从下手要简单N倍了。

记得韩寒有句很经典的话:灵感就像公共汽车,不来的时候一部都没有,一来的时候几部一起来。此时我突然又想起应该在TT上查看一下页面的源代码,起码能知道asp输出的html是不是有问题的。检查之后,发现了一个很重要的线索:如上所述的两个div,放的都是用asp生成的一个标题列表,这些列表是用table包围起来的,如下:


<div class="pack">
 <div style="float:left;" id="div1">
  <table><tr><td style="width:100%">XX的标题</td></tr></table>
 </div>
 <div style="float:left;" id="div2">
  <table><tr><td style=""width:100%"">XX的标题</td></tr></table>
 </div>
</div>

问题出在width:100%上,重复检查了一下css,发现夏兄没给div1和div2定义width,而我写asp的时候,却给td输出了一个wdith=100%的属性,所以div1就把整个pack的width占据了,div2自然只好放到了下面。明白了道理,解决起来就简单得不得了了,只要给div1和div2加一个width的属性,问题解决。

这件小事说明了发散性的思维是很重要的,如果我一味地去检查CSS或试图发现TT的css hack,可能这个问题是搞不定了。

但说来说去,到底TT为什么会用ie7的内核而不是系统上的ie8的内核,哈哈,鬼知道。

补记:写这篇日志之后的若干星期,无意中在IE的“开发人员工具”里发现了一个浏览器模式设置,骇然有IE7可选,可见WIN7不仅有IE8内核,还有IE7的。CS兄又指教说:如果系统用的是IE8的话,那么无论什么傲游360TT搜狗之类的外壳浏览器统统都是用IE7模式渲染的,所以一般来说为了省事我都在正式发布页面时給meta加上一句强制让IE8也用IE7模式来渲染……这个方法真是个好办法,学习学习!!

Posted in: 技术文档 Tagged: bug, CSS, 腾讯TT

360安全浏览器不支持js弹出窗口某些属性探究

2010年8月4日 / 3 Comments

这阵子写一个asp.net的系统,想在GridView中插入一列超链接,并用JavaScript弹出一个窗口,查看GridView给出条目信息的相关详细。本来以为用个HyperLinkField,再简单不过,搞了很久,老是出错,Google了一番,才知道原来是因为.NET 2.0中不再支持 DataNavigateUrlFormatString=”JAVASCRIPT:……” 的写法,所以也就不能直接写JS了。解决方案是在后台代码页中添加RowDataBound事件:


protected void *_RowDataBound(object sender, GridViewRowEventArgs e) { 
    if (e.Row.RowType == DataControlRowType.DataRow) { 
        e.Row.Cells[*].Text = "<a href=""javascript:"" onclick=""javascript:var List = 
        window.open('*.aspx','查看','top=150,left=50,toolbar=no, menubar=no,scrollbars=yes, resizable=no, location=no, status=no, width=850,height=400');"">查看</a>""; 
    } 
}

写完后习惯性地F5运行了一下,由于我的PC上默认的浏览器是360安全浏览器,所以直接用的是360打开,点了一下“查看”的链接,发现确实是有打开一个新的页面,然而却不是预想中的网页小窗口的形式(定义中width=850,height=400),这里打开的是类似于target=””black””的一个新的浏览器窗口;郁闷不已,原本准备重新Google一番的,突然记起之前写css时候曾受360的千番折磨,遂抱着试试的态度顺手打开了Firefox,不料仅能顺利的弹出一个小窗口,又用了chore试验,成功。一时火气,真想把360浏览器卸了。分析了一下,除了得出这是内核的问题外似乎没有其他什么可能,遂在开始菜单中翻找出IE8,打开,不料也能正常弹出一个小窗口。很不服气,再试了一下搜狗浏览器,发现和360一样的异常。这到底是怎么一回事,貌似JavaScript函数window.open中定义的诸多属性比如width、menubar等等对其并未产生应有的效果。特意下载了一个opera,试了试,正常弹出窗口。又用IE-tester在IE6下试验,有问题。

考虑到在asp.net中测试到底是不怎么客观的,毕竟涉及到太多动态方面的内容,问题很可能来自我并不很熟悉的控件方面,索性动手写了一个html页面,如下:


<html>
<head>
<title></title>
<script LANGUAGE="JavaScript">
function openwin() {
window.open ("test.html", "newwindow", "height=100, width=400, toolbar=no, menubar=no,
scrollbars=no, resizable=no, location=no, status=no");
}
</script>
</head>
<body onload="openwin()">
</body>
</html>

试验在360中还是发现一样的问题。用搜狗浏览器却很神奇得打开了一个IE的弹出窗口(此时我正好运行着IE8)。Google+百度了一阵子,据说360用的的确是IE的内核,而搜狗确是一半ie一半Webkit引擎。

真是无比混乱。无奈中仔细研究了一下360浏览器的工具栏,发现有个管理功能组件的菜单,下面有个广告拦截扩展,点选项进去,弹出一个广告过滤设置的对话框,默认情况下“拦截弹出窗口”是选中状态,一时欣喜莫名,以为找到问题所在了,忙取消掉勾,重启了浏览器,又试了试,还是一样的问题,js并没有弹出一个窗口,而是在浏览器上打开了一个新窗口。莫名奇妙。到底是什么问题使JavaScript在360这样的IE内核加壳浏览器无中法实现预定义功能呢?360又是如何做到限制js的呢?

不得要领,遂决定花时间把这件怪事记录下来,等有精力再深入钻研。

Posted in: 技术文档 Tagged: bug, js

ASP根据域名请求跳转到不同页面

2010年7月27日 / Leave a Comment

<%
if Request.ServerVariables("SERVER_NAME")="www.domain1.com" then
response.redirect "page1.asp"
else if Request.ServerVariables("SERVER_NAME")="www.domain2.com" then
response.redirect "page2.asp"
else
response.redirect "404.html"
end if
end if
%>

假设有两个域名“www.domain1.com”和“www.domain2.com”指向同一个空间,需要根据域名跳转到不同页面,可以像上面这么处理。

这种方法适用于多个域名共享一个服务器空间,或者说有独享域名的多个站点共享同一个空间。

Posted in: 技术文档 Tagged: ASP, 域名跳转

Firefox/Chrome…下的CSS Hack调试

2010年7月25日 / 1 Comment

这几天重写校会网站的html和CSS。发现Firefox和Safari貌似不支持margin-top和margin-bottom,奇怪的是margin-left、margin-right却都能正常显示页边空白。调试了很久,突然想起之前有位师兄貌似有对我提起过这件事,遂神至心灵,换用了padding,在Firefox和Safari上测试了一下,完美呈现。高兴之余,不忘又打开了IETester,用IE6测试了一下,发现边距神奇地变成了我所设定值的两倍有余,原因到底是什么,到现在还没弄清(如有高手知道内情,还请赐教)。思考良久,甚至觉得会不会是IETester的问题,如果换在真正的IE6上或许不会有这结果,可惜我装的是IE8,想在真正的IE6上测试,还是挺麻烦的,遂准备放弃。无意又打开了360安全浏览器,试了试,也发现了这问题。于是决定无论如何必须解决。

在网上盲目地搜索关键字“Firefox css标记”(因为这个问题最早是在Firefox上发现的,所以依照逐个消灭的战略,我决定先从Firefox上下手),看了几条,居然找到了CSS Hack,看来真是老天眷顾。认真看了看,发现我之前准备各个击破的战略很有先见之明,因为这显然是标准 CSS没办法兼容各浏览器显示效果的结果,这样子只能用CSS Hack(专属标记)来补救了。

因为使用margin-top标记的话,IE6和360安全浏览器都能正常显示,所以原有css标记还是采用margin-top,而针对Firefox和Safari,使用CSS Hack来解决问题,CSS代码是这么写的:


.right_pic {
margin-top:10px;
}
@-moz-document url-prefix() {
.right_pic {
padding-top:10px;
}
}
@media screen and (-webkit-min-device-pixel-ratio:0) {
.right_pic {
padding-top:10px;
}
}

其中right_pic是我需要使用的那个div的表示符。写完在Firefox和Safari上是测试了一下,完美呈现。(加记:写到这里发生了一件相当搞笑的事:突然想起我还没有安装Safari,那么前文怎么会有一个Safari呢?太诡异了!!忙查看了一下,搞笑的事发生了,原来我一直把我的谷歌浏览器(Google Chrome)当成了Safari,真是荒唐。然而这件荒唐的事却无意中给了我一个认识,原来Safari的CSS Hack(@media screen and (-webkit-min-device-pixel-ratio:0))同样适用于Google Chrome,这也就是我到现在才发现我把Safari和chore搞混了的原因。但这是不是表示Google Chrome和Safari有相似的内核呢?我不知道,哈哈……)

OK,加记完搞笑的那件事,继续正文,话说我发现CSS Hack确实能使边距呈现正常,内心激动莫名,打开360安全浏览器和IETester在IE6下测试也均正常,更加欣喜……突然又想起了我还有一个IE8,出于不知什么原因(或许IE8生来就让人讨厌)这个浏览器一直出于冷宫状态,平时我几乎是不会用的。当然,为了测试页面,还是要用的,于是打开,同样的问题出现在了这个浏览器呈现的页面上,仔细又搜了搜,知道其实IE8的CSS Hack还是比较好写的,比如:


html > body .right_pic {
padding-top:10px;
}

试了试,ok,搞定!带着胜利者的心情审视了一下我的劳动结果,从Firefox、Google Chrome、IE6、IE8(IE7在我的IETester上莫名其妙地不能用,郁闷,希望它呈现的和IE8相差无几才好)都正常,最后打开360安全浏览器,本来的问题又出现了,边距是设定值的两倍……

在郁闷中思考了一下,觉得应该是360安全浏览器即兼容了IE6的内核,又兼容IE8的内核,所以html > body .right_pic在360安全浏览器上也有效,margin 10px加上padding的10px,结果就是外观上看起来的20px,比预期大了一倍。又在网上搜索了一番,发现针对IE还可以这么写:


<!--[if IE 7]>
<style type=""text/css"">
</style>
<![endif]-->
<!--[if IE 6]>
<style type=""text/css""></style>
<![endif]-->

当然,IE8的话把7改成8就可以了。居然搞定了,真是太神奇了。

总结一下:搞这么多,其实都是浏览器内核混乱的结果,如果Firefox、IE……不各自为政,大家坐下来谈出一个协议来,那写css就不至于这么辛苦了,而且为了兼容各浏览器,不得不写出很多冗余的代码,这大大降低了信息的传递效率而且与现时节约能源的观念显然是不符的。然而,反过来想了想,又觉得如果真的出一个协议来,那岂不是大家都能写css了,网页设计师到了那个时候是不是吃饭都困难?!或许真到了那时候,靠的就真的全是个人的美感和设计能力而不是代码编写能力了。

世界就是这样,有些很显然不适合存在于世的东西,却又有一定的存在的道理,这个道理每每牵涉到的是部分人的利益,从而使得那部分人不去消灭它,这件不适合存在的东西也就依旧存在了……

这就是世界……真实的世界……

Posted in: 技术文档 Tagged: CSS HACK

黑道——黑客攻防初探

2009年8月20日 / Leave a Comment

在家看了一个多星期的《黑客攻防技术擂台-木马任务大作战》,自我感觉不良好。无意间瞄了一下页码,才发现已经啃了大半本。古语有云:半部论语治天下。我看了半部《黑客》,连黑客的门都还没摸着,估计再看下去也不会有什么前景,罢了罢了,就当自己生性驽钝,非可塑之材算了。

但鸡肋到底是鸡肋,虽说啃不下,能够义无反顾放弃者,又有多少人?这或许是人性的一大怪圈吧!我非圣人,自然跳不出这凡人的魔咒,思索再三,遂决定写下一点东西,就当是我李某人也曾“涉黑”的见证吧。于是乎,在翻找了很多资料的基础上,这篇不成日志的日志就此光荣诞生了。这是前话——也是废话。

记得父亲跟我提起《封神演义》时有一句经典的评语:漫天神鬼。今天引申一下,看完半部《黑客攻防技术擂台-木马任务大作战》之后的感觉就是:漫天木马。当然,感觉总是由外界环境或环境中的人事物强加给你的,具体情况如何——是否真如书上所说的满世界都是木马,就有待考证了……这或者是后话,或者根本无话,当然是取决于本人日后是否还有闲暇涉足黑客之道,就表过不提了。废话少说,转入正题。

却说要转入正题,想想还是先说明一下,我在这里无意于写读后感,也不想教你诈,只是希望自己的一点点认识能够对您的防黑大业有所裨益,若能如此,我也算功德无量了。当然,作为一个不折不扣的菜鸟,此文中纰漏误解自然是不可避免的,倘有高手路过发现,还望多多指教,先谢谢了。

在这里,首先要声明的是两个概念。第一个是木马与病毒的关系,也许在很多人的潜意识里,木马是一种病毒,其实这是错误的理解。所谓病毒,只不过是一种能够破坏你机器上的资料、软件、系统(大不了连硬件也搞瘫了)的计算机程序。而木马(特洛伊木马相信大家都听说过)是一段潜伏在你的电脑上的外表斯文(这个修饰貌似有问题),看来无公害(起码不会污染环境)事实上却又无恶不作的程序(典型的老奸巨猾)。当然,当年希腊人在木马里藏的并不仅仅是只会杀人放火搞破坏的士兵,更有专事偷窃信息搜集情报的间谍。从这个层面上来看,毫无疑问,病毒只是一种专门从事破坏的木马,讲白了,病毒是一种木马,而非木马是一种病毒。第二个是黑客与骇客的关系:或许你不会忘记某年某月的某一天,当你的机器因病毒发作而无法正常进入你的windows时的痛心疾首;也许你不会忘记当你正兴趣怏然得观看某部“艺术”影片时,接连跳出的一连串莫名其妙的窗口……于是乎,你开始诅咒那些吃饱了撑着的黑客……事实上很少有人知道,原来自己骂错人了。黑客的英文是“Hacker”,原意是“开辟、开创”,就是说黑客应该是开辟道路为人类的伟大事业做贡献的人(听来是有点虚)。黑客源于20世纪70年代的麻省理工学院实验室,当时由一群崇尚“共享主义”、热衷于“为人民服务”的计算机高手本着解决问题、建立事物、相信自由的态度聚在一起工作而得名。真正该骂的骇客(Cracker)是“解密、破译”的意思,指那些专门闯入电脑系统搞破坏的人。由此可见,黑客是建设性的,而骇客才是破坏性的。至于所谓的红客(honker),就纯属中国人自己说了算(99年中美黑客之间进行了一场技术较量,导致中国红客网诞生,红客也就出现了)。

接下来要树立的是一个理念:你的个人计算机其实并不比你家安全。说得明白点就是你pc上所谓的防火墙和杀毒软件并不比你家的防盗门和狗可靠。事实上防火墙的确的一道很好的屏障,只可惜很少有人肯花功夫去进行一些细微的设置,因而导致防火墙形同虚设。对于杀毒软件,更是无话可说:现在的杀毒软件之所以能够杀毒,基本上都是通过不断地升级病毒数据库,然后对照数据库查阅你电脑上的程序,发现与数据库里的文件类似的才予以查杀。这就是说,数据库里没有的,即使它摆明了就叫木马,杀毒软件们也会任其逍遥(当然,现在貌似有些杀毒软件可以依靠木马运行时的一些特征发现木马,不过估计效率也不怎么高)。而那些充当我们伟大救世主的所谓最新病毒数据库,事实上不过都是靠安全专家们(善良的大黑客)发现已经存在的并且正在大范围泛滥的木马后才能给出的。说白了,如果一个木马纯属某个黑客的专用工具(一般情况下由黑客自己写出,或者是用木马组装工具组装而来),而这个黑客又不是到处作恶,只捡你下手的话,你那号称无毒不杀的杀毒软件就未必能杀出来的,当然,前提是那个木马要伪装得足够好(很多木马靠压缩软件压一压、重组软件组一组就能轻易地改头换面)。真正智能的能自动判断病毒的杀毒软件至今还没开发出来,这不得不说是杀毒界的一大悲剧。入侵者们不断重写木马、被黑者们不断受害、杀毒软件不断更新数据库···周而复始,自从有木马这么一回事以来,杀毒软件就是这样一直疲于应付。由此也可见我们老祖先的高明:“道高一尺,魔高一丈”这句话在今天还是经得起考验的真理。

我无意于吓唬你,不过我承认以上内容的确有点耸人听闻。无论如何,要保证你的爱机的安全,除了自求多福之外,我们能做的,就是尽量切断木马的来源。事实上对于今天的木马,来源也就两个,一个是通过网络连接进入你的pc,另一个是通过移动设备(u盘啦、光盘啦)拷贝到你的电脑上的。对于网络连接,我的建议是不要轻易点击一些莫名其妙的链接,即使那是一个网页链接,而非很容易分辨的下载链接(事实上现在要做一个一点开网页就自动下载病毒的网页并不是很困难的事)。通常这些链接会在邮件啊、论坛啊、不知名的网站啊、QQ空间啊、聊天室啊、或者其他的实施通信软件上人家发给你的啊这些地方发现,所以当你下次要点开一个链接的时候,请千万记起我今天的话,然后花几秒钟认真想想你是不是必须点开这个链接(当然,入侵者们为了链接有足够的吸引力,通常会编一些很诱惑的链接说明,至于都是什么样的诱惑说明我就不明说了,若有太过纯洁的准小孩不明就里,请与本人单独联系~hihi~)。如果你能做到这一点的话,起码你安全系数就比别人高很多了。然后值得注意的是从网上下载的东西,下完东西后记得杀一下毒就像拉完屎后记得冲冲厕所一样是一种美德。也许很多人认为我下的不过是一张图片或者一部影片,不可能有毒,从而放轻了戒备心。事实上这是很笨的想法,很多.exe文件可以通过隐藏文件名(不知什么原因,很多系统默认都设置了不显示已知文件的扩展名),再换个图标,就能堂而皇之的变身成为.jpg文件。当然,这个还算是技术含量比较低的做法,现在用的较多的是通过拼合技术把木马程序隐藏在一部影片甚至一张图片中(不信的话试试BDVDataHider这款软件,它能很容易的把其他任何类型的文件编到一幅图片中,而这幅图片是可以正常显示的,本人试验过了)。

研究发现:QQ的确是一个传播木马的很好手段。只要成功盗取一个账号(有时根本不必盗取)然后以受害人的名义编出各种各样花俏的名堂把木马发送给受害人的好友,在不知不觉中就能随便捕获数十个“肉鸡”。比较懒的入侵者甚至连自己发木马也省了,直接交给QQ信息自动发送器去做了事。所以面对这种情况,我们能做的就是不要轻易接收来自好友的任何东西,因为你的好友账号随时可能被人盗取,或者事实上你的那个好友本身就是一个黑客。

通常一个入侵者在做完上述的工作之后还未能成功入侵的话,那他就不得不直接入侵了。比较常用的是通过各种漏洞或者139端口入侵。到了这种地步,我只能说,很不幸,你碰上高手了。当然,除了等死之外,还是有一点措施可以采取的。比如经常打补丁(怎么打补丁就不用我说了吧)、设置比较复杂的登陆系统密码(特别是管理员那个账号),所谓复杂密码必须要多于六位,而且是数字加字母加其他一些字符(比如:?^&$#@!{~……),不要用老掉牙的生日啊什么的作为密码,这个东西很容易通过社会工程学猜到。除此之外,采用重要文件加密也是一个可行的办法(网上有很多加密文件的软件),类似于又加了一把锁。

不要轻易让人接触你的电脑,使用别人的移动硬盘时要相当小心,值得提醒的是:千万不要轻易相信你的那个据说是电脑高手的男朋友,如果他别有用心,有意窥探你的隐私的话,在你的电脑上随便放上一点什么,你的麻烦就来了。(收集键盘信息,屏幕窥探?!)说到这里读者诸君可能就有疑惑了:那电脑要是坏了,怎么办?答案很简单:自己修,或者重新买一台……事实上还有一个选择,那就是给我修,相信我,不会错,哈哈……

网络世界就是这样的凶险,令人防不胜防。既然防不胜防,也就没必要防了,免得白费力,干脆交给杀毒软件和防火墙了事。虽然现在的杀毒软件的确很烂。

值得推荐(其实是黑客推荐的)的一款杀毒软件是“avast”(据说占用系统资源相当少),本人试用过了,确实可以。至于防火墙,推荐使用“COMODO”,这款防火墙的最大优点是可以查看活动连接——也就是查看应用程序正在连接的网络端口、地址、协议和传输流量级别。(2010年4月30日注:现在使用360安全卫士也是一个很好的选择,具体可看我的另一篇文字“体验360安全卫士7.0”)这对于防止信息被盗很有益,因为无论是什么木马,只要它想盗取你的个人信息资料,必须通过网络连接发送出去,而一旦和网络连接产生数据流,就能为COMODO所监控。不过前提是你要有足够的注意力时不时查看活动连接,而且必须知道正在连接的都是什么软件,有来历不明的当然十有八九就是木马了。

树大招风,世人都知道当前盖茨MS的产品用户群最广,所以入侵者们如果是为了找肉鸡的话,他们写的木马也大多是针对微软的东西的(起码成功率高一点)。出于安全考虑,解决的最好方法就是不用微软的产品。但到底说着容易,要我们放弃windows,确实不是一件易事;至于ie浏览器和office之类的微软产品,说来还是有替代品的,换掉也非难事。

经常查看系统启动项也能很好的防范木马,因为作为一个木马,最理想的状态是你一开机它就运行,这样的话入侵者就能最大限度地得到他想要的东西。所以很多木马会花很多心思设置开机自动运行。当然,能够阻止的话对我们来说,是再好不过的了。具体操作方法很多,比如查看注册表(必须有一定经验),比较简单的是用360或者其他的第三方软件查看,或者直接运行“msconfig”启动系统配置实用程序修改亦可。

当然,如果木马是以系统服务的形式隐藏在进程里的话(有时根本就没出现在进程里),就有点麻烦了。必须对进程有一定了解才能发现。

另外一个很重要的原则是软件尽量到官网上下载,毕竟官方网站还是比较安全的(注意,这里是比较级,因为不能排除有没别有用心的软件商会在自己的软件上嵌木马)。当然,如果你的软件已经在别的地方下载了,而又不方便再到官网上下(如果那东西有几百兆的话,这种事确实不是人干的),这种情况下或许你可以到官网上查看一下是否有提供MD5值,用专门的软件(如Windows MD5 Check等)做一次MD5校验。

暂时想不出其他的了,以后有空补充吧。

Posted in: 技术文档 Tagged: 网络安全, 黑客
« 上一页 1 2 3

标签

ASP bug CentOS CSS Google js 中庸 主流 交易 人生 人类劣根 刷票 哲学 大学 感想 文学 文言文 期末 歌手 死狗 毅力 比赛 水浒 江南style 滚动字幕 爱因斯坦 狂想 狗屁文化 现代诗 玻璃 琐事 电脑城 男篮 神曲 科学 笑话 箴言 经济 网易 网络安全 腾讯 腾讯TT 视频广告 诗歌 霸位

近期评论

  • 壮敏 发表在《讨贼檄文》
  • 黄祺 发表在《顿悟》
  • 西班牙超模 发表在《致加西亚》
  • 西班牙超模 发表在《致加西亚》
  • 糗事百科 发表在《IE6 去除 input border》

Copyright © 2026 Tengs.

Me WordPress Theme by themehall.com