November 22, 2010
延迟加载图片的 jQuery 插件:Lazy Load
"\u003cp\u003e网站的速度非常重要,现在有很多网站优化的工具,如 Google 的 \u003ca href=\"http://fairyfish.net/2009/06/08/google-page-speed/\"\u003ePage Speed\u003c/a\u003e,Yahoo 的 YSlow,对于网页图片,Yahoo 还提供 \u003ca href=\"http://fairyfish.net/2009/12/14/smush-it/\"\u003eSmush.it\u003c/a\u003e 这个工具对图片进行批量压缩,但是对于图片非常多的网站,载入网页还是需要比较长的时间,这个时候我们可以使用 Lazy Load 这个 jQuery 插件来延迟加载图片。\u003c/p\u003e\n\u003cp\u003eLazy loader 是一个延迟加载图片的 jQuery 插件,在一些图片非常多的网站中非常有用,在在浏览器可视区域外的图片不会被载入,直到用户将页面滚动到它们所在的位置才加载,这样对于含有很多图片的比 较长的网页来说,可以加载的更快,并且还能节省服务器带宽。\u003c/p\u003e\n\u003cp\u003eLazy Loader 使用也非常简单,首先确保你的页面已经加载 jQuery Javascript 库,然后在加载 Lazy Load 的 Javascript 文件:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;script src=\u0026#34;jquery.js\u0026#34; type=\u0026#34;text/javascript\u0026#34;\u0026gt;\u0026lt;/script\u0026gt;\n\u0026lt;script …\u003c/code\u003e\u003c/pre\u003e"
November 22, 2010
lighttpd启动,停止,重启命令
"\u003cblockquote\u003e\n\u003cp\u003e“/etc/init.d/lighttpd start”\n“/etc/init.d/lighttpd stop”\n“/etc/init.d/lighttpd restart”\u003c/p\u003e\u003c/blockquote\u003e"
November 21, 2010
用javascript 怎么判断图片是否加载完成呢
"\u003cp\u003e用javascript 怎么判断图片是否加载完成呢?\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003efunction loadImage(url){\u003c/p\u003e\n\u003cp\u003evar o= new Image();\u003c/p\u003e\n\u003cp\u003eo.src = url;\u003c/p\u003e\n\u003cp\u003eif(o.complete){\u003c/p\u003e\n\u003cp\u003ewindow.alert(‘图片加载完成:’+url);\u003c/p\u003e\n\u003cp\u003e}else{\u003c/p\u003e\n\u003cp\u003eo.onload = function(){\u003c/p\u003e\n\u003cp\u003ewindow.alert(‘图片加载完成:’+url);\u003c/p\u003e\n\u003cp\u003e};\u003c/p\u003e\n\u003cp\u003eo.onerror = function(){\u003c/p\u003e\n\u003cp\u003ewindow.alert(‘图片加载失败:’+url);\u003c/p\u003e\n\u003cp\u003e};\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e如果我要先把这一个图片加载完,之后才显示怎么处理呢.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\n function showImage(url){\n\n var o = document.createElement(\u0026#39;img\u0026#39;);\n\n o.src = url;\n\n document.body.appendChild(o);\n\n }\n\n function loadImage(url){\n var o= new Image();\n o.src = url;\n if(o.complete){ …\u003c/code\u003e\u003c/pre\u003e"
November 19, 2010
shell中的test表达式
"\u003cp\u003e摘自:UNIX Shell编程24学时编程\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e10.1.2 使用test\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e更常见的情况是,提供给if语句的清单是一个或更多个test命令,它们通过调用test命令而被激活,语法如下:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003etest expression\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e这里,expression为test命令构造的表达式,该表达式的构造使用了特殊选项之一.在计算完表达式的值后,test命令或者返回0(真)或者返回1(假).\u003c/p\u003e\n\u003cp\u003e可用”[“命令对test命令进行缩写:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[ expression ]\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e这里expression是test命令可以理解的任何有效表达式,该简化格式将是读者可能会踫见的最常用格式.\u003c/p\u003e\n\u003cp\u003etest可理解的表达式类型分为三类:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e文件测试.\n字符串比较.\n数字比较.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e读者将逐步学业习这三类,另外,还会学习到复合表达式.\u003c/p\u003e\n\u003cp\u003e注意:在使用”[“简写test时,左中括号后面的空格和右括号前面的空格是必需的,如果没有空格,Shell不可能辨别表达式何时开始何时结束.\u003c/p\u003e\n\u003cp\u003e选项\u003c/p\u003e\n\u003cp\u003e描述\u003c/p\u003e\n\u003cp\u003e-b file\u003c/p\u003e\n\u003cp\u003e若文件存在且是一个块特殊文件,则为真\u003c/p\u003e\n\u003cp\u003e-c file\u003c/p\u003e\n\u003cp\u003e若文件存在且是一个字符特殊文件,则为真\u003c/p\u003e\n\u003cp\u003e-d file\u003c/p\u003e\n\u003cp\u003e若文件存在且是一个目录,则为真\u003c/p\u003e\n\u003cp\u003e-e …\u003c/p\u003e"
November 19, 2010
Shell中变量基础
"\u003cp\u003eshell中的只读变量:使用readonly关键字,后面加上变量名即可,如\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#name=’sxf’\u003c/p\u003e\n\u003cp\u003e#readonly name\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e即可.如果后面修改name的值,如\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#name=’tom’\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e会提示\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e"-bash: name: readonly variable"\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e错误信息.\u003c/p\u003e\n\u003cp\u003e在shell中删除变量只要用\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eunset variable\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e即可.但不能删除只读变量.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eshell中环境变量分三种:局部变量,环境变量,Shell变量\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e局部变量(local variable)是只在当前shell实例中存在的变量,而由其他Shel启动的程序不能使用该变量.\u003c/p\u003e\n\u003cp\u003e环境变量(environment variable)是Shell的任何子进程都能使用的变量,许多程序要正确运行都需要使用环境变量.通常Shell脚本只定义程序运行时所需要的环境变量.\u003c/p\u003e\n\u003cp\u003eShell变量(Shell variable)是Shell变量的特殊变量,也是Shell正确运行所必需的,这些变量有些是环境变量而有些是局部变量.\u003c/p\u003e\n\u003cp\u003e通常,为清楚地表示该变量是环境变量,一般将赋值语句和导出语句写在同一行,这可以帮助下一个维护该脚本的程序员快速 …\u003c/p\u003e"
November 19, 2010
centos 使用rz指令
"\u003cp\u003e在linux下安装rz很方便,使用\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eyum install lrzsz就可以安装,正常使用rz和sz命令。**下面对sz和rz命令的一点介绍:**一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地;**与ssh有关的两个命令可以提供很方便的操作:**sz:将选定的文件发送(send)到本地机器,即下载rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive),即上传\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e发送文件到客户端:sz filename 第一次使用sz,会提示你放置的目录。\u003c/p\u003e\n\u003cp\u003ezmodem接收可以自行启动.\u003c/p\u003e\n\u003cp\u003e从客户端上传文件到linux服务端:\u003c/p\u003e\n\u003cp\u003e只要服务端执行 : rz\u003c/p\u003e\n\u003cp\u003e然后在 SecureCRT 里选文件发送,协议 zmodem\u003c/p\u003e\n\u003cp\u003e简单吧,如果你以前一直使用ssh,而又没有对外开放ftp服务,你就直接使用这种方式来传输你的文件 。\u003c/p\u003e"
November 18, 2010
DDOS攻击分析与预防专题
"\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/11/ddos2.jpg\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2010/11/ddos2.jpg\" alt=\"\"\u003e\u003c/a\u003eDDOS是英文Distributed Denial of Service的缩写,意即”分布式拒绝服务”,DDOS的中文名叫分布式拒绝服务攻击,俗称洪水攻击。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDDoS攻击概念\u003c/strong\u003e\nDDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了 – 目标对恶意攻击包的”消化能力”加强了不少,例如你的攻击软件每秒钟可以发送3,000个攻击包,但我的主机与网络带宽每秒钟可以处理10,000个攻击包,这样一来攻击就不会产生什么效果。\u003c/p\u003e\n\u003cp\u003e这时候分布式的拒绝服务攻击手段(DDoS)就应运而生了。你理解了DoS攻击的话,它的原理就很简单。\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/11/ddos.gif\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2010/11/ddos.gif\" alt=\"\"\u003e\u003c/a\u003e如果说计算机与网络的处理能力加大了10倍,用一台攻击机来攻击不再能起作用的话,攻击者使用10台攻击机同时攻击呢?用100台呢?DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。\n高速广泛连接的网络给大家 …\u003c/p\u003e"
November 18, 2010
FreeBSD系统下普通用户切换root用户,提示su:sorry的解决办法
"\u003cp\u003eFreeBSD系统下su:sorry的解决办法\n在FreeBSD上要使用su命令成为root用户,不但要知道root的口令,还需要经过特别设置,否则就不能成功使用这个命令。这是因为 FreeBSD对执行su命令的用户进行了更严格的限制,能使用su命令的用户必须属于wheel组(root的基本属组,组ID为0),否则就不能通过 这个命令成为root用户。因此需要编辑组设置文件/etc/group,将需要超级用户权力的管理成员加入到wheel组中。\n可以使用如下命令给普通用户su – root的权力:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003epw groupmod wheel -m\npw user mod -g wheel\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e或者直接修改/etc/group文件,把相应的用户加到wheell组就可以\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ewheel:*:0:root,\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eFreeBSD系统下默认是不允许root用户直接通过ssh连接到服务器的,在安装FreeBSD系统时要创建一个额外的用户,切忌一定要把这个用户加入到wheel组中(如果不加入到这个组中的话就无法ssh),也可以安装完系统后创建用户,并把这个用户加入wheel组。\u003c/p\u003e"
November 18, 2010
杨卫华:新浪微博的架构发展历程
"\u003cp\u003e新浪科技讯 11月16日下午消息,由 \u003ca href=\"http://t.sina.com.cn/\"\u003e新浪微博\u003c/a\u003e( \u003ca href=\"http://t.sina.com.cn/\"\u003ehttp://t.sina.com.cn\u003c/a\u003e)(\u003ca href=\"http://t.sina.com.cn/\"\u003ehttp://t.sina.com.cn\u003c/a\u003e)主办的中国首届微博开发者大会在北京举行,这是国内微博行业的首场技术盛宴。作为国内微博市场的绝对领军者,新浪微博将在此次大会上公布一系列针对开发者的扶持政策,以期与第三方开发者联手推动微博行业的整体发展。图为微博平台首席架构师杨卫华演讲。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e以下为演讲实录:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e大家下午好,在座的大部分都是技术开发者,技术开发者往往对微博这个产品非常关心。最晚的一次,是12点多收到一个邮件说想了解一下微博底层是 怎么构架的。很多技术人员对微博的构架非常感兴趣,就是一个明星他有300万粉丝,这个技术怎么来实现?今天在这里跟大家分享一下微博的底层机构,让大家 对微博的底层技术有更好的了解。另外不管是做客户端、1.0、2.0、论坛、博客都要考虑架构的问题,架构实际上是有一些共性的。今天我通过讲解微博里面 的一些架构,分析一下架构里面哪些共性大家可以参考。\u003c/p\u003e\n\u003cp\u003e首先给大家介绍一下微博架构发展的历程。新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了几个版本。第一版就是是 …\u003c/p\u003e"
November 18, 2010
PHP autoload 机制
"\u003cp\u003e\u003cstrong\u003e1\u003c/strong\u003e**、简介******\u003c/p\u003e\n\u003cp\u003ePHP5中引入了类的自动装载(autoload)机制。autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e例子:\u003c/strong\u003e****\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e/* autoload.php */\nfunction __autoload($classname) {\nrequire_once ($classname . “class.php”);\n}\n$person = new Person(”Altair”, 6);\nvar_dump ($person);\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e通常PHP5在使用一个类时,如果发现这个类没有加载,就会自动运行__autoload()函数,在这个函数中我们可以加载需要使用的类。\u003c/p\u003e\n\u003cp\u003eautoload至少要做三件事情,\u003cstrong\u003e第一件事是根据类名确定类文件名\u003c/strong\u003e,\u003cstrong\u003e第二件事是确定类文件所在的磁盘路径\u003c/strong\u003e(在我们的例子是最简单的情况,类与调用它们的 PHP程序文件在同一个文件夹下),\u003cstrong\u003e第三件事是将类从磁盘文件中加载到系统中\u003c/strong\u003e。第三步最简单,只需要使用include/require即可。要实现第一 步,第二步的 …\u003c/p\u003e"
November 18, 2010
linux的head命令及tail命令介绍
"\u003cp\u003e当需要查看一个文本文件的头部或尾部时,head 命令及tail 命令可以非常方便的完成该操作。head 命令用于查看一个文本文件的开头部分;而tail 命令则用于显示文本文件的末尾几行。这两个命令举例如下:\nhead example.txt 显示文件 example.txt 的前十行内容;\nhead -n 20 example.txt 显示文件 example.txt 的前二十行内容;\ntail example.txt 显示文件 example.txt 的后十行内容;\ntail -n 20 example.txt 显示文件 example.txt 的后二十行内容;\ntail -f example.txt 显示文件 example.txt 的后十行内容并在文件内容增加后,自动显示新增的文件内容。\n注意:\n最后一条命令非常有用,尤其在监控日志文件时,可以在屏幕上一直显示新增的日志信息。\u003c/p\u003e"
November 17, 2010
牛人写的. 高级PHP应用程序漏洞审核技术
"\u003cp\u003e一个安全界的牛人写的. 很不错..\n\u003cstrong\u003e[目录]\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e前言\u003c/li\u003e\n\u003cli\u003e传统的代码审计技术\u003c/li\u003e\n\u003cli\u003ePHP版本与应用代码审计\u003c/li\u003e\n\u003cli\u003e其他的因素与应用代码审计\u003c/li\u003e\n\u003cli\u003e扩展我们的字典\n5.1 变量本身的key\n5.2 变量覆盖\n5.2.1 遍历初始化变量\n5.2.2 parse_str()变量覆盖漏洞\n5.2.3 import_request_variables()变量覆盖漏洞\n5.2.4 PHP5 Globals\n5.3 magic_quotes_gpc与代码安全\n5.3.1 什么是magic_quotes_gpc\n5.3.2 哪些地方没有魔术引号的保护\n5.3.3 变量的编码与解码\n5.3.4 二次攻击\n5.3.5 魔术引号带来的新的安全问题\n5.3.6 变量key与魔术引号\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e5.4 代码注射\n5.4.1 PHP中可能导致代码注射的函数\n5.4.2 变量函数与双引号\n5.5 PHP自身函数漏洞及缺陷\n5.5.1 PHP函数的溢出漏洞\n5.5.2 PHP函数的其他漏洞\n5.5.3 session_destroy()删除文件漏洞\n5.5.4 随机函数\n5.6 特殊字符\n5.6.1 截断\n5.6.1.1 include …\u003c/p\u003e"
November 17, 2010
数据库主键全局唯一方案
"\u003cp\u003e现在通过数据的水平切分(sharding)来实现数据库 Scale Out 的解决方案受到了越来越多人的青睐,但是在切分过程中可能遇到的问题也肯定不在少数,如切分规则的设计,切分后的访问路由,切分后的主键的全局唯一等等。\u003c/p\u003e\n\u003cp\u003e这里我主要列举几个可以使用在 MySQL 数据库主键全局唯一方案及其优劣,供大家参考:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e通过应用程序生成一个GUID,然后和数据一起插入切分后的集群。优点是维护简单,实现也容易。缺点是应用的计算成本较大,且GUID比较常,占用数据库存储空间较大,涉及到应用的开发。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e说明:主要优势是简单,缺点是浪费存储空间,GUID:32字节,100W记录,多32兆,如果是int,4字节,会少28M。如果有外键关联,会浪费更多。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e通过独立的应用程序事先在数据库中生成一系列唯一的 ID,各应用程序通过接口或者自己去读取再和数据一起插入到切分后的集群中。优点是全局唯一主键简单,维护相对容易。缺点是实现复杂,需要应用开发。\n说明:ID表要频繁查和频繁更新,插入数据时,影响性能。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e通过中心数据库服务器利用数据库自身的自增类型(如 MySQL的 auto_increment 字段), …\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e"
November 16, 2010
shell test操作运算符
"\u003cp\u003e\u003cstrong\u003e4.4 控制结构\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在shell脚本中,使用控制结构就可以控制Linux命令的执行。使用控制结构,可以重复执行命令,或者选择特定的命令。控制结构包含两个主要的组件:测试操作(test)和命令。如果测试操作成功,则命令就会执行。这样的话,就可以使用控制结构来决定是否执行选定的命令。\u003c/p\u003e\n\u003cp\u003e存在两种不同类型的控制结构:循环和条件。循环结构会重复执行命令,而条件结构会在特定条件满足时执行命令。\u003c/p\u003e\n\u003cp\u003eBASH Shell有三种循环控制结构:while、for和for-in,两种条件控制结构:if和case。控制结构把Linux命令执行结果作为测试。\u003c/p\u003e\n\u003cp\u003e所有的Linux命令在执行结束后都会返回一个退出状态。如果某命令成功执行,退出状态将是0。如果因为某种原因该命令执行失败,则退出状态是表示失败类型的一个正值。控制结构会检查Linux命令的退出状态是0,还是其他值。对于if和while控制结构,如果退出状态是0,则说明该命令被成功执行,控制结构会继续。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e4.4.1 test操作\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e借助于test命令,可以比较\u003cstrong\u003e整数\u003c/strong\u003e、\u003cstrong\u003e字符串\u003c/strong\u003e,甚至执行\u003cstrong\u003e逻辑操作\u003c/strong\u003e。命令由关键字test,以及被比较值组成;被比较数值之间使用一个选项分隔开, …\u003c/p\u003e"
November 16, 2010
grep用法详解:grep与正则表达式
"\u003cp\u003e**首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!**正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1基础正则表达式\u003c/strong\u003egrep 工具,以前介绍过。\u003c/p\u003e\n\u003cp\u003egrep -[acinv] ‘搜索内容串‘ filename\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e-a 以文本文件方式搜索\n-c 计算找到的符合行的次数\n-i 忽略大小写\n-n 顺便输出行号\n-v 反向选择,即显示不包含匹配文本的所有行\n-h 查询多文件时不显示文件名。\n-l 查询多文件时只输出包含匹配字符的文件名。\n-s 不显示不存在或无匹配文本的错误信息。\ngrep命令加- E参数,这一扩展允许使用扩展模式匹配。\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e**其中搜索串可以是正则表达式!**grep: 要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e$ ls -l | grep ‘^a’\u003c/strong\u003e 通过管道过滤ls -l输出的内容,只显示以a开头的行。\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e$ …\u003c/strong\u003e\u003c/p\u003e"