古迹

BBC与中国合拍经典自然纪录片巅峰之作《美丽中国》

第1集:锦绣华南 http://t.cn/zWZF3Er第2集:云翔天边 http://t.cn/zWZF13x第3集:神奇高原 http://t.cn/zWZFB3A第4集:风雪塞外 http://t.cn/zWZFrmJ第5集:沃土中原 http://t.cn/zWZFdYW第6集:潮涌海岸[去旅行]

underscorejs 源码走读笔记

from: http://www.html-js.com/article/2134Underscore 简介Underscore 是一个JavaScript实用库,提供了类似Prototype.js的一些功能,但是没有继承任何JavaScript内置对象。它弥补了部分jQuery没有实现的功能,同时又是Backbone.js必不可少的部分。Underscore提供了80多个函数,包括常用的: map, select, invoke — 当然还有更多专业的辅助函数,如:函数绑定, JavaScript模板功能, 强类型相等测试, 等等. 在新的浏览器中, 有许多函数如果浏览器本身直接支持,将会采用原生的,如 forEach, map, reduce, filter, every, some 和 indexOf.个人感受Underscore 是一个我坚持看完的js源代码,他简单、易懂、实用,细心观察就会发现,每个函数都很简短,作为开源阅读源码,我相信Underscore是不错的选择笔记1:大量的这种方法,应该是 防止原始方法被篡改,同时加快运行速度,而且在严格模式,也不让通过arguments.callee 调用相关方法的原因吧var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;// Create quick reference variables for speed access to core prototypes.varpush = ArrayProto.push, slice = ArrayProto.slice, concat = ArrayProto.concat, toString = ObjProto.toString, hasOwnProperty = ObjProto.hasOwnProperty;2:void 0,开始还好奇为啥用void 0,是undefined 的缩写?后来一打听才知道,原来undefined在旧版本的浏览器中是不可以被赋值的,而新版本的浏览器是可以被赋值的,为了准确的判断,所以就有了void 0_.first = _.head = _.take = function(array, n, guard) { if (array == null) return void 0; if ((n == null) || guard) return array[0]; if (n < 0) return []; return slice.call(array, 0, n);};3:代码短小精干Underscore 代码短小精干没的说,真是精品除了 eq 这个方法长点外 其他方法都很短4:遗憾 这次走读 没记录笔记没调试本菜鸟第一次走读源码 同时欢迎大家把源码走读 放到这个专栏下 O(∩_∩)O~

离站提示JS工具:Ouibounce

离站提示JS工具:Ouibounce,当离开网站时给出一个提醒,从jobbole看到的.tip:和bootstrap的model 结合时要在参数的callback中 手动 用$('#share').modal();触发,官网没说,这个要注意.demo如下:[repo owner=”carlsednaoui” name=”ouibounce”]

Web安全之SQL注入攻击技巧与防范

from: http://www.plhwin.com/2014/06/13/web-security-sql/Web安全简史在Web1.0时代,人们更多是关注服务器端动态脚本语言的安全问题,比如将一个可执行脚本(俗称Webshell)通过脚本语言的漏洞上传到服务器上,从而获得服务器权限。在Web发展初期,随着动态脚本语言的发展和普及,以及早期工程师对安全问题认知不足导致很多”安全血案”的发生,至今仍然遗留下许多历史问题,比如PHP语言至今仍然无法从语言本身杜绝「文件包含漏洞」(参见这里),只能依靠工程师良好的代码规范和安全意识。伴随着Web2.0、社交网络、微博等一系列新型互联网产品的兴起,基于Web环境的互联网应用越来越广泛,Web攻击的手段也越来越多样,Web安全史上的一个重要里程碑是大约1999年发现的SQL注入攻击,之后的XSS,CSRF等攻击手段愈发强大,Web攻击的思路也从服务端转向了客户端,转向了浏览器和用户。在安全领域,一般用帽子的颜色来比喻黑客的善与恶,白帽子是指那些工作在反黑客领域的技术专家,这个群体是”善”的的象征;而黑帽子则是指那些利用黑客技术造成破坏甚至谋取私利造成犯罪的群体,他们是”恶”的代表。“白帽子”和”黑帽子”是两个完全对立的群体。对于黑帽子而言,他们只要找到系统的一个切入点就可以达到入侵破坏的目的,而白帽子必须将自己系统所有可能被突破的地方都设防,以保证系统的安全运行。这看起来好像是不公平的,但是安全世界里的规则就是这样,可能我们的网站1000处都布防的很好,考虑的很周到,但是只要有一个地方疏忽了,攻击者就会利用这个点进行突破,让我们另外的1000处努力白费。常见攻击方式一般说来,在Web安全领域,常见的攻击方式大概有以下几种:1、SQL注入攻击2、跨站脚本攻击 - XSS3、跨站伪造请求攻击 - CSRF4、文件上传漏洞攻击5、分布式拒绝服务攻击 - DDOS说个题外话,本来这篇文章一开始的标题叫做 「Web安全之常见攻击方法与防范」,我原本想把上面的这5种方法都全部写在一篇文章里,可是刚写完第一个SQL注入攻击的时候,就发现文章篇幅已经不短了,又很难再进行大幅度的精简,所以索性把Web安全分成一个系列,分多篇文章来呈现给大家,下面你看到的就是第一篇「Web安全之SQL注入攻击的技巧与防范」。SQL注入常见攻击技巧SQL注入攻击是Web安全史上的一个重要里程碑,它从1999年首次进入人们的视线,至今已经有十几年的历史了,虽然我们现在已经有了很全面的防范对策,但是它的威力仍然不容小觑,SQL注入攻击至今仍然是Web安全领域中的一个重要组成部分。以PHP+MySQL为例,让我们以一个Web网站中最基本的用户系统来做实例演示,看看SQL注入究竟是怎么发生的。1、创建一个名为demo的数据库:CREATE DATABASE `demo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;2、创建一个名为user的数据表,并插入1条演示数据:CREATE TABLE `demo`.`user` (`uid` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '用户uid',`username` VARCHAR( 20 ) NOT NULL COMMENT '用户名',`password` VARCHAR( 32 ) NOT NULL COMMENT '用户密码') ENGINE = INNODB;INSERT INTO `demo`.`user` (`uid`, `username`, `password`) VALUES ('1', 'plhwin', MD5('123456'));实例一通过传入username参数,在页面打印出这个会员的详细信息,编写 userinfo.php 程序代码:<?phpheader('Content-type:text/html; charset=UTF-8');$username = isset($_GET['username']) ? $_GET['username'] : '';$userinfo = array();if($username){ //使用mysqli驱动连接demo数据库 $mysqli = new mysqli("localhost", "root", "root", 'demo'); $sql = "SELECT uid,username FROM user WHERE username='{$username}'"; //mysqli multi_query 支持执行多条MySQL语句 $query = $mysqli->multi_query($sql); if($query){ do { $result = $mysqli->store_result(); while($row = $result->fetch_assoc()){ $userinfo[] = $row; } if(!$mysqli->more_results()){ break; } } while ($mysqli->next_result()); }}echo '<pre>',print_r($userinfo, 1),'</pre>';上面这个程序要实现的功能是根据浏览器传入的用户名参数,在页面上打印出这个用户的详细信息,程序写的这么复杂是因为我采用了mysqli的驱动,以便能使用到 `multi_query` 方法来支持同时执行多条SQL语句,这样能更好的说明SQL注入攻击的危害性。假设我们可以通过 http://localhost/test/userinfo.php?username=plhwin 这个URL来访问到具体某个会员的详情,正常情况下,如果浏览器里传入的username是合法的,那么SQL语句会执行:SELECT uid,username FROM user WHERE username='plhwin'但是,如果用户在浏览器里把传入的username参数变为 `plhwin';SHOW TABLES-- hack`,也就是当URL变为 `http://localhost/test/userinfo.php?username=plhwin';SHOW TABLES-- hack` 的时候,此时我们程序实际执行的SQL语句变成了:SELECT uid,username FROM user WHERE username='plhwin';SHOW TABLES-- hack'_注意:在MySQL中,最后连续的两个减号表示忽略此SQL减号后面的语句,我本机的MySQL版本号为5.6.12,目前几乎所有SQL注入实例都是直接采用两个减号结尾,但是实际测试,这个版本号的MySQL要求两个减号后面必须要有空格才能正常注入,而浏览器是会自动删除掉URL尾部空格的,所以我们的注入会在两个减号后面统一添加任意一个字符或单词,本篇文章的SQL注入实例统一以 `-- hack` 结尾。_经过上面的SQL注入后,原本想要执行查询会员详情的SQL语句,此时还额外执行了 SHOW TABLES; 语句,这显然不是开发者的本意,此时可以在浏览器里看到页面的输出:Array( [0] => Array ( [uid] => 1 [username] => plhwin )[1] =&gt; Array ( [Tables_in_demo] =&gt; user ))你能清晰的看到,除了会员的信息,数据库表的名字`user`也被打印在了页面上,如果作恶的黑客此时将参数换成 `plhwin';DROP TABLE user-- hack`,那将产生灾难性的严重结果,当你在浏览器中执行`http://localhost/test/userinfo.php?username=plhwin';DROP TABLE user-- hack` 这个URL后,你会发现整个 `user` 数据表都消失不见了。通过上面的例子,大家已经认识到SQL注入攻击的危害性,但是仍然会有人心存疑问,MySQL默认驱动的mysql_query方法现在已经不支持多条语句同时执行了,大部分开发者怎么可能像上面的演示程序那样又麻烦又不安全。是的,在PHP程序中,MySQL是不允许在一个mysql_query中使用分号执行多SQL语句的,这使得很多开发者都认为MySQL本身就不允许多语句执行了,但实际上MySQL早在4.1版本就允许多语句执行,通过PHP的源代码,我们发现其实只是PHP语言自身限制了这种用法,具体情况大家可以看看这篇文章「PHP+MySQL多语句执行」。实例二如果系统不允许同时执行多条SQL语句,那么SQL注入攻击是不是就不再这么可怕呢?答案是否定的,我们仍然以上面的user数据表,用Web网站中常用的会员登录系统来做另外一个场景实例,编写程序login.php,代码如下:<?phpif($_POST){…

最常用的100个ClassName集合

终于不用为给css取名而烦恼了,感谢Vivien Chen的整理. about 关于 account 账户 action 操作 ad,advertisment 广告 arrow 箭头图标 article 文章 aside 边栏 audio 音频 avatar 头像 background 背景 banner 条幅,广告 bar 条 branding 品牌化 breadcrumbs 面包屑 button 按钮 caption 标题,说明 category 分类 chart 图表 clearfix 清除浮动 close 关闭 column 列 comment 评论 community 社区 container 容器 content 内容 copyright 版权 current 当前态,选中态 default 默认 description 描述 details 细节 disabled 不可用 entry 文章,博文 error 错误 even 偶数,常用于多行列表或表格中 fail 失败(提示) feature 专题 fewer 收起 field 用于表单的输入区域 figure 图 filter 筛选 first 第一个,常用于列表中 footer 页脚 forum 论坛 gallery 画廊 group 模块,清除浮动 header 页头 help 帮助 hide 隐藏 hightlight 高亮 home 主页 icon 图标 information 信息 last 最后一个,常用于列表中 links 链接 login 登录 logout 退出 logo 标志 main 主体 menu 菜单 meta 作者、更新时间等信息栏,一般位于标题之下 module 模块 more 更多(展开) msg,message 消息 nav,navigation 导航 next 下一页 nub 小块 odd 奇数,常用于多行列表或表格中 off 鼠标离开 on 鼠标移过 output 输出 pagination 分页 popup 弹窗 preview 预览 previous 上一页…

听歌 Im Yours

I’m Yours 一首很轻松余悦的歌曲,在一个阳光照耀下的时候,听听,很舒服的。Jason Mraz,1977年出生于美国,是一名出色的歌手。而这个小伙子之所以在过去的几年内里成为美国乐坛的焦点人物,除了一副嗓子加弹一手漂亮的吉他外,他还坚持原创,美国人总是格外推崇那种会唱会弹又会创作的音乐人,即使有人说大概这还是美国的个人英雄主义意识在作怪,但一个毋庸置疑的事实是,这种全能的歌手在美国乐坛是越来越少了!落脚加州圣地牙哥并在当地的酒馆表演后,Jason Mraz遇到了对他影响最深远的鼓手Toca Rivera,他多样化的打击鼓乐让Jason Mraz对音乐充满惊奇,他俩在现场的精彩演出也在整个西岸和网络间流传,也因而使Jason Mraz和Elektra唱片公司签下一纸合约。 Jason Mraz“男巫”的绰号是Jason Mraz对自己的形容。没有多少人会对这个形容表示怀疑,毕竟对于一个习惯于在夜酒吧里弹吉他吟唱些充满着迷离忧伤调的男孩,“男巫”这样的形容恐怕是恰到好处。而一旦浮出水面被主流的 Elektra 唱片公司收编后,Jason Mraz仿佛就不太愿意再用“男巫”来形容自己了,他更愿意将自己打造成一个充满着阳光味道的大男孩,宛如自己的音乐风格:混杂着民谣、拉丁与电子。歌词:Well you done done me and you bet I felt itI tried to be chill but you’re so hot that I meltedI fell right through the cracks now I’m trying to get backBefore the cool done run out I’ll be giving it my bestestnothing’s going to stop me but divine interventionI reckon it’s again my turn to win some or learn someBut I won’t hesitate no more no moreIt cannot wait I’m yoursWell open up your mind and see like meOpen up your plans and damn you’re freeLook into your heart and you’ll find love love love loveListen to the music of the moment people, dance and singWe’re just one big family(A la peaceful melody)And it’s our God-forsaken right to be loved loved loved loved lovedSo I won’t hesitate no more no moreIt cannot wait I’m sureThere’s…

notepad++快捷键

notepad++现在是我最常用的文本编辑工具,其中使用的列模式编辑,也是很好使用的。Ctrl-C,Ctrl-X,Ctrl-V,Ctrl-Y,Ctrl-A,Ctrl-F,Ctrl-S,Ctrl-O,Ctrl-N,Ctrl-W,Ctrl-Tab,Ctrl-P,Alt-F4都是基本的快捷键。 整理其他几个快捷键的使用 Ctrl-H 打开Find / Replace 对话框 Ctrl-D 复制当前行 Ctrl-L 删除当前行 Ctrl-T 上下行交换 F3 找下一个 Shift-F3 找上一个 Ctrl-Shift-F 在文件中找 Ctrl-F2 触发书签 F2 到前一个书签 Shift-F2 到下一个书签 F5 打开run对话框 Ctrl-Space 打开CallTip列表框 Tab (selection of several lines) 加入Space Shift-Tab (selection of several lines) 移除Space F11 全屏 Alt-0 折叠全部 Alt-Shift-0 展开全部 Ctrl-U 变为小写 Ctrl-Shift-U 变为大写 Ctrl-Q 块注释/消除注释

猩球崛起

片 名 猩球崛起年 代 2011国 家 美国类 别 动作/剧情/科幻/惊悚语 言 英语字 幕 中字文件格式 BD-RMVB视频尺寸 1024 x 576文件大小 1CD片 长 105 Mins导 演 鲁伯特&middot;瓦耶特主 演 詹姆斯&middot;弗兰科 芙蕾达&middot;平托 安迪&middot;瑟金斯 约翰&middot;利特高 布莱恩&middot;考克斯 汤姆&middot;费尔顿简 介2011年,旧金山。为了研究如何治疗老年痴呆症,行内知名的科学家威尔&middot;罗曼(詹姆斯&middot;弗兰科饰)已经攻关研究了多年。试验一直没有取得太大的起色,虽然他和灵长类学家卡洛琳(芙蕾达&middot;平托饰)一起研制了一种名为“Cure”的新药物,这种药物能改变基因,但由于极其危险的副作用,使得他找不到合适的临床试验对象来验证Cure的药性。终于,在科研所的所长(布莱恩&middot;考克斯饰)的怂恿之下,他将药物放在了大猩猩身上。Cure具有自我修复大脑的作用,这在大猩猩身上得到了验证。有了Cure的疗效,大猩猩开始变得超级有智慧,常年被所长虐待的动物们开始报复人类,最先恢复智力的大猩猩凯撒(安迪&middot;瑟金斯饰)开始率领其他猩猩对人类进行反攻倒算,人类不再是地球唯一的统治者,猿族开始逐渐崛起。闯下大祸的威尔&middot;罗曼,决定用他自己的方式来化解这一场人类和猿族之间的战争……电影下载ftp://dygod1:[email protected]:3002/猩球崛起.[中字.1024分辨率]/[电影天堂-www.dy2018.net]猩球崛起BD中字.rmvb

闲谈一下

  闲谈一下  本来是打算睡了,最近一段时间,都是12点以后睡觉的,和一哥们聊天,勾起了我想乱侃一下的虫子,不说不痛快啊!  和哥们谈到了权利和感情,是权利的诱惑,还是感情的不舍。权利这玩意,是个诱人的东西,是谁都追求,我也追求,追求也需要看看这个权利的价值了,追求那些无用的东西,就是在浪费生命,真不如去做些自己能做到的事情。  派系的竞争啥地方都有,”与人斗,其乐无穷“是我听到很经典的一句,能玩你们玩,能斗你们斗。虽然自己一直安慰自己,自己是不想玩,也不原斗,可也明白,曾经自己也是牺牲品。再次面对这样的局面,态度依旧,不想趟这趟浑水,做好事情,心安理得。愿意一起做事情,就把事情做好,其他啥的别去沾惹,省的结果对谁都不好。这个道理,对想做事情的人,哪里都一样。  自己的经历没什么跌宕起伏,也没什么大风大浪,平平淡淡的事情也经历了一些,承认自己的悟性比较差,不够灵活,属于笨人的一类。自己也迷茫的,浑浑噩噩的也过过一段时间,现在也能明白一些,没有什么条件不能答应的,也没有什么结果不能接受的。  看过的朋友,认识也别硬套,不认识也别挑毛病,这个是自己乱侃而已,不对针对任何人,随意而说而已!

960CSS框架基本原理

本来是打算找一个模板直接使用的,没有找到到合适的,自己写好麻烦的啊!很早就知道960css的这个框架了,趁这个机会学学,找到一篇比较容易入门的基础,推荐阅读。&nbsp;CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了。有人说,CSS框架不够先进,还有人说这些框架大大的节省了他们的开发时间。在此,我们将不再讨论这个问题。&nbsp;前段时间,我了解到了CSS框架。经过对Malo、BluePrint和960做了实验对比后,我得出一个结论:我最喜欢960CSS框架。&nbsp;本教程将解释这个框架的基本原理,这样你就可以用960来快速进入开发。&nbsp;基本原理&nbsp;你必须知道一些基本原理来“学习这个框架是如何工作的”。你可以通过实验(或者是用firebug)来学习它,不过我也将会在这里为你介绍它。让我们开始吧。&nbsp;不要编辑960.css文件&nbsp;首先是一个小提示:不要编辑960.css文件,否则,将来你将不能更新这个框架。因为尽管我们需要布局我们的HTML,我们将创建一个独立的CSS文件。&nbsp;加载网格&nbsp;因为我们可以使用一个外部文件的CSS代码,我们必须在我们的HTML网站中加载它们,我们可以通过以下代码来实现:&nbsp;<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/reset.css” />&nbsp;<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/960.css” />&nbsp;<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/text.css” />&nbsp;这些做好了之后,我们必须添加我们自己的CSS文件。例如,你可以叫这个文件为style.css或site.css或者其它任何名字。用下面代码引用这个文件:&nbsp;<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/style.css” />&nbsp;容器&nbsp;在960框架中,你可以选择名为.container_12和.container_16的两个容器class。他们都是960px的宽度(这就是为什么叫960),它们的不同是分的列数不同。.container_12被分割为12列,.container_16被分割为16列。这些960px宽的容器是水平居中的。&nbsp;网格/列&nbsp;有很多列宽可供选择,而且在这两个容器里,这些宽度也不相同。你可以通过打开960.css文件来查看这些宽度。但是这对于设计一个网站来说是不必要的。有一个小技巧可以让这个框架更加易用。&nbsp;比如,你想要在你的容器里建两列(叫sidebar/content)。你可以这样做:&nbsp;<div class=”container_12″>&nbsp;<div class=”grid_4″>sidebar</div>&nbsp;<div class=”grid_8″>main content</div>&nbsp;</div>&nbsp;可以看到,你的第一列(grid_4)的数字加上第二列(grid_8)的数字正好是12。也就是说,你不必知道每一列的宽度,你可以选择列宽通过一些简单的数学计算。&nbsp;如果我们要建一个4列的布局,代码可以是这样的:&nbsp;<div class=”container_12″>&nbsp;<div class=”grid_2″>sidebar</div>&nbsp;<div class=”grid_6″>main content</div>&nbsp;<div class=”grid_2″>photo’s</div>&nbsp;<div class=”grid_2″>advertisement</div>&nbsp;</div>&nbsp;正如你所看到的那样,这个系统依然很完美。但是如果你想使用嵌套的列的话,你会发现它是有问题的。比如,如果后面三列都属于content列:&nbsp;<div class=”container_12″>&nbsp;<div class=”grid_2″>sidebar</div>&nbsp;<div class=”grid_10″>&nbsp;<div class=”grid_6″>main content</div>&nbsp;<div class=”grid_2″>photo’s</div>&nbsp;<div class=”grid_2″>advertisement</div>&nbsp;</div>&nbsp;</div>&nbsp;你会发现这错位了,不过不用着急,这正是我们下一节要说的。&nbsp;间距&nbsp;默认情况下,每列之间都有间距。每一个grid_(这里代表数字)class左右都有10个像素的间距。也就是说,两列之间,总共有20px的间距。&nbsp;20px间距对创建一个有足够宽的空白间距的布局来说是很棒的,它可以让一切看起来很自然。这也是我喜欢使用960的原因之一。&nbsp;在上面的例子中,我们遇到了个问题,现在我们就来解决它。&nbsp;问题是,每一列都有左右边距。而嵌套的三列中,第一列和最后一列是不需要边距的,解决方法是:&nbsp;<div class=”container_12″>&nbsp;<div class=”grid_2″>sidebar</div>&nbsp;<div class=”grid_10″>&nbsp;<div class=”grid_6 alpha”>main content</div>&nbsp;<div class=”grid_2″>photo’s</div>&nbsp;<div class=”grid_2 omega”>advertisement</div>&nbsp;</div>&nbsp;</div>&nbsp;我们可以简单的添加”alpha“样式来去掉左边的间距,添加“omega”样式来去除右边的间距。这样我们刚刚创建的这个例子在任何浏览器里面就很完美了(当然包括IE6)。&nbsp;样式&nbsp;好了,你现在已经完全了解如果用960框架来创建一个网格布局的基本原理了。当然,我们也可以添加一些样式到我们的布局中。&nbsp;<div class=”container_12″>&nbsp;<div id=”sidebar” class=”grid_2″>sidebar</div>&nbsp;<div id=”content” class=”grid_10″>&nbsp;<div id=”main_content” class=”grid_6 alpha”>main content</div>&nbsp;<div id=”photo” class=”grid_2″>photo’s</div>&nbsp;<div id=”advertise” class=”grid_2 omega”>advertisement</div>&nbsp;</div>&nbsp;</div>&nbsp;因为CSS使用特性来确定哪一个样式声明具有高于其它样式的优先级。”id“比class更重要。&nbsp;用这种方法,我们可以在自己的文件中重写那些被class设定的规则(比如宽度,padding,边框等)。&nbsp;我也添加一些样式,它们整整花费了我5分钟来整理整个例子。查看示例的源代码和样式声明。.&nbsp;搞定&nbsp;就这样。你已经学习了如果使用960框架来建立跨浏览器兼容性和整洁的布局了。当你完全掌握了960框架后,你将大大地减少编写CSS的时间。&nbsp;如果你还不理解,研究一下示例吧。&nbsp;我留给你的问题:&nbsp;你使用960CSS框架吗?或者你使用其它框架?你认为框架可以帮你提升你的代码吗?&nbsp;Translate From: divitodesign&nbsp;来源:http://www.qianduan.net/960css-the-framework-of-the-basic-principles-of.html

1 2 5