Archive for 六月, 2010

【转】New MooTools Methods: .from()


22 6月
Full David Walsh Blog Post: New MooTools Methods: .from() MooTools 1.3 beta 2 was recently released and you may see a few new methods implemented to String, Array, Number, and Function: from. The from method of each of those Types returns an object of that type. Simply put: you’ll always receive back an object of that type based on what you give it.

The New Method Code

Function.from = function(item){
	return (typeOf(item) == 'function') ? item : function(){
		return item;
	};
};

Array.from = function(item){
	if (item == null) return [];
	return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : Array.prototype.slice.call(item) : [item];
};

Number.from = function(item){
	var number = parseFloat(item);
	return isFinite(number) ? number : null;
};

String.from = function(item){
	return item + '';
};
The from method is added to String, Array, Number, and Function natives. Enough with the underlying code though — examples are easier to understand.

Function.from, Array.from, Number.from, String.from Examples

Array.from('Item');
//returns ['Item'] (array type)

Function.from('Item, Whoa, Hey');
//returns function() { return 'Item, Whoa', Hey'; } (function type)

String.from(function() { alert('MooTools FTW!'); });
//returns function () { alert("MooTools FTW!"); } (string type)

Number.from('8765309');
//returns 8765309 (number type)
Each example above shows you what’s returned by each method. Being able to generate a given object type from any argument using from can save you a lot of time — especially when a given MooTools class or method requires an argument of a specific type. from is just another example of how MooTools can make your JavaScript life easier!

【转】HTML 5 令人期待的 5 项功能


21 6月
HTML 5 是超文本置标语言下一个重要版本,HTML 自1999年发布 HTML 4.01 以来,其开发一直处于停顿状态,而1999年至今正好是 Web 飞速发展的时间,现在的 HTML 版本已经无法适应现在的 Web 内容与应用。HTML 5 旨在提高 HTML 的交互行,支持当前多样的,复杂的 Web 内容。同时,它也会解决 HTML 4 Web 应用功能上的欠缺。

一点历史背景

HTML 5 的讨论开始于2003年,当时,W3C 对由 Web Hypertext Application Technology Working Group(WHATWG) 开发的 HTML 5 草案表示出兴趣,WHATWG 创始于2004年,由苹果,Mozilla 基金会,以及 Opera 公司的 代表组成。此后,W3C HTML Working Group 于2007年成立并着手开发 HTML 5。目前,开发工作仍在进行中,并将于2012年向 W3C 提交初步意见,不过现在已经有不少浏览器部分支持 HTML 5。本文介绍 HTML 5 的5大令人激动的新功能。

1. 一些帮助我们描述内容的新标签

Web 内容的多样性让 HTML4 力不从心,在描述一个网页时,HTML4 如下 表现: HTML 5 将如下表现: 这样,浏览器就知道一个网页的各个部分各代表什么,比如 <nav> 部分是导航,而 <article> 部分是主要内容 。除了更漂亮的 代码与语义标签,这种改变还带来更多好处,比如,搜索引擎可以更准确地知道一个网页的哪部分内容更重要。关于 HTML 5 新标签,IBM有详细的论述

2. 改进的 Web 表单处理

HTML 5 推出 Web Forms 2.0,为开发提供许多新选项和新功能,以更简单更有效地处理表单的输入与发布。Web Form 2.0 最令人兴奋的功能是输入验证。目前,我们需要通过 JavaScript 或服务器端的逻辑,实现同样的功能。 比如有下面这样一个表单: 在 HTML4 我们需要这样写代码,然后使用 JavaScript 或服务器端的脚本进行验证: 而 HTML5 中的  required 与 email 属性可以直接实现验证,如下:

3. 为 Web 开发提供 API

HTML 5 将提供多个 API,如音频和 视频标签可以让开发者不借助第三方工具直接播放 Web 视频和音频: Opera 在者方面有不少研究并有视频播放 demo 推出

4. <canvas>标签将允许直接在上面用脚本绘图

人更容易从图片获得信息,如,下面的信息通过表格和圆饼图两种方式显示,效果明显不一样: 然而以往要实现这种效果,只能使用静态图片,无法对图片进行调整。使用 <canvas> 标签,你可以实时修改参数对图形进行修改,比如,根据用户的投票,实时生成圆饼图。

5. 用户可以编辑网页的部分内容并实现同网页的交互

HTML 5 将支持用户的交互contenteditable属性允许你设定网页的哪一部分可以编辑,在基于 Wiki 的 站点,这非常实用。 转自:http://www.comsharp.com/GetKnowledge/zh-CN/It_News_K667.aspx

ipconfig出现很多”tunnel adapter Local Area connection”的解决方法


20 6月
嗯,用上win7后,不知道什么时候开始,cmd ipconfig的时候出现了超多"tunnel adapter Local Area connection"项,貌似最近都破百了,想看的ipconfig都被刷出cmd窗口了,很不方便,今天决定动手搞掉。。。 嗯,查了下Google,原来是IPv6惹的祸,本来还以为是vmware模拟出来的其他网段呢,奥特曼了 - - 嗯,微软官方貌似也承认这是个bug了,好像是因为什么情况下,重启的时候会自动增加这些tunnel adapter,怪怪的。 本来是想找找看是不是有补丁之类的,未果。 想想反正现在基本还用不到IPv6的东东,所以决定废掉它。 方法还蛮简单的,分两布。 第一步到网络链接管理里面,把每个链接的属性中的ipv6那一项的勾勾去掉。 第二步要改注册表,添加一个HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents的DWORD (32-bit)项,把value设置成0xffffffff (hexadecimal value)。 ok,重启,好了,进cmd,ipconfig下,哈哈,这个世界清净了,喵~

Some links about squid and nginx


12 6月
Squid 官网 doc :http://www.squid-cache.org/Doc/ 反向代理概念及Squid简单实现方法: http://linux.ccidnet.com/art/737/20070417/1063859_1.html 使用反向代理后可能碰到的客户端真实IP地址获取问题: http://wangpan80.javaeye.com/blog/286702 (代码是java的大概意思看看就好) nginx异步反向代理: http://www.net527.cn/a/caozuoxitong/Linux/1514.html nginx反向代理做cache配置:http://blog.sina.com.cn/s/blog_5dc960cd0100gvk2.html(额,这篇有点乱,没仔细看) Round Robin DNS Load Balancing: http://content.websitegear.com/article/load_balance_dns.htm(with BIND name server) nginx常识扫盲:http://edu.codepub.com/2010/0516/22746.php nginx url hash模块:http://www.wurmbai.info/2010/02/nginx_url-hash/ 另外一篇同上: http://wiki.nginx.org/NginxHttpUpstreamRequestHashModule (url hash就是类似所谓的7层负载均衡,可以通过url来分配不同的业务逻辑到不同的服务器上面去,很好很强大) nginx request process:http://nginx.org/en/docs/http/request_processing.html nginx server names:http://nginx.org/en/docs/http/server_names.html nginx mogileFS module: http://grid.net.ru/nginx/mogilefs.en.html nginx和squid结合的概念:http://edu.codepub.com/2010/0202/20282.php 这些文章主要是我学习nginx做url hash负载+squid反向代理缓存查阅的一些资料,可能有所遗漏,暂时整理至此。

各种VPN方法——美国VPN,Packetix,PopTop PPTP VPN Server,Windows7 or Windows Vista or Windows XP VPN Server Setup


11 6月
最近洋葱不好使了,杯具啊,天朝真是强大。搜了下VPN的东东,记录一下。 最简单的自然是网上收费的那些美国vpn提供商了,品种繁多,我同事用的一个貌似还不错,地址 http://www.vpn98.com。 另外我自己看到的一个:http://www.macrovpn.com/ 第二种就是通过第三方的VPN平台,我看到的不错的是:http://www.packetix.net/en/vpn/,当然是免费的,可以自己建自己的vpn,而且这个东东主要是提供真正的VPN功能,而不是单纯的翻墙功能,如果要通过VPN中的某台机器链接外网,还需要另外到http://www.packetix.net/en/vpn/admin/vpnbridge.aspx 下载bridge的工具安装后才可以。具体的见官网教程吧。因为要连到他的服务器作为类似网关一样的存在,所以速度不快。 第三种自然是自己建VPN了,看了下,PPTP的VPN SERVER开源的,http://www.poptop.org/,如果外国有关系的同学可以让那边的帮忙,这样就无成本啦,哈哈。 最近天朝越来越瓜三了,貌似很多美国主机都丢包很厉害,唉。。。什么世道啊。。。逼我出国吗。。。 ———————————————win7 vpn server————————————————— 刚才网上看了下,windows似乎设置成vpn超方便的: Following are the steps for configuring Incoming VPN Connection in Windows 7 1. First go to Control Panel and open Network and Sharing Center. 2. Click on Change adapter settings. 3. Press Alt+F and select New Incoming connection 4. Put a check on who you’d like to give access to this computer or you can configure a new account by clicking on Add someone,after that click on Next. 5. Put a check mark on Through the Internet. Click on Next. 6. Select the protocols you want to enable for this connection. Click on Allow access. 7. Make a note of the Computer name as this will be used by the client to connect to this computer and after that Click on Close. 不知道好不好用,回头试试。。。如果可以连到美国的话。。。无敌来。。。 P.S. XP 和 VISTA的参考这里: http://www.onecomputerguy.com/networking/xp_vpn_server.htm http://www.onecomputerguy.com/networking/vista_vpn_server.htm ————————————poptop 设置指南—————————————— 安装不说了,网上很多,自己查吧,说下配置,有点搞的,老是619,809的错误 网上查了下找到了答案(From http://www.webhostingtalk.com/showthread.php?t=944722): in /etc/pptpd.conf
  1. local ip :   [my VPS ip]
  2. remote ip :  192.168.0.100-120
you can use any private ip range for remote ip. in /etc/ppp/pptpd-options
  1. refuse-pap
  2. refuse-chap
  3. refuse-mschap
  4. require-mschap-v2
  5. require-mppe-128
  6. ms-dns 208.67.222.222
  7. ms-dns 208.67.220.220
you can use any dns server you like,i used opendns. in /etc/ppp/chap-secrets
  1. user1 * password1 *
  2. user2 * password2 *
Also be careful : between fields in chap-secrets file use TAB. one of my problems was using Space instead of TAB. in /etc/sysctl.conf
  1. net.ipv4.ip_forward=1
Uncomment that line. enables ip forwarding. i also create a simple script for testing my iptables rules. you can add these rules to the /etc/rc.local
  1. iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
  2. iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
  3. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  4. iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
  5. iptables -A INPUT -i eth0 -p gre -j ACCEPT
and a Reboot! 基本上这样就搞定了,619错误好像还有可能是路由器设置的问题,可以上vpn98的常见问题看哦。 安装什么的可以参考这里:http://www.5dlinux.com/article/4/2007/linux_5328.html 配置还是以上面的为主。 Good Luck!

【转】javascript call apply区别


08 6月
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别。 先来看看JS手册中对call的解释:
call 方法 调用一个对象的一个方法,以另一个对象替换当前对象。 call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 参数 thisObj 可选项。将被用作当前对象的对象。 arg1, arg2,  , argN 可选项。将被传递方法参数序列。 说明 call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。 引用网上一个代码段,运行后自然就明白其道理。
<input type="text" id="myText"   value="input text"> <script>     function Obj(){this.value="对象!";}     var value="global 变量";     function Fun1(){alert(this.value);}     window.Fun1();   //global 变量     Fun1.call(window);  //global 变量     Fun1.call(document.getElementById('myText'));  //input text     Fun1.call(new Obj());   //对象! </script>
call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。 运行如下代码:
<script>    var func=new function(){this.a="func"}     var myfunc=function(x){         var a="myfunc";         alert(this.a);         alert(x);     }     myfunc.call(func,"var"); </script>
可见分别弹出了func和var。到这里就对call的每个参数的意义有所了解了。 对于apply和call两者在作用上是相同的,但两者在参数上有区别的。 对于第一个参数意义都一样,但对第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。 如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3]) 同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入

【转】mysql sql 百万级数据库优化方案


08 6月
via IT技术博客大学习 by achao on 6/2/10
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20 5.in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3 6.下面的查询也将导致全表扫描: select id from t where name like ‘%abc%’ 若要提高效率,可以考虑全文检索。 7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描: select id from t where num=@num <mailto:num=@num> 可以改为强制查询使用索引: select id from t with(index(索引名)) where num=@num <mailto:num=@num> 8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where num/2=100 应改为: select id from t where num=100*2 9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where substring(name,1,3)=’abc’-name以abc开头的id select id from t where datediff(day,createdate,’2005-11-30′)=0-‘2005-11-30’生成的id 应改为: select id from t where name like ‘abc%’ select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′ 10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。 12.不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: create table #t(…) 13.很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 用下面的语句替换: select num from a where exists(select 1 from b where num=a.num) 14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效 率起不了作用。 15.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。 16.应尽可能的避免更新 clustered 索引数据列,因为 clustered 索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建为 clustered 索引。 17.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。 18.尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。 19.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。 20.尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。 21.避免频繁创建和删除临时表,以减少系统表资源的消耗。 22.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。 23.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。 24.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。 25.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。 26.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。 27.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。 28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 29.尽量避免大事务操作,提高系统并发能力。 30.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

【转】Google SSL Search


03 6月
张宴那边剽窃过来的:http://blog.s135.com/google_ssl/   Google 最近提供了 SSL(HTTPS) 搜索功能(https://www.google.com),可以保护用户的搜索关键字和搜索结果不被ISP等第三方机构拦截、窃取,不被墙连接重置。   国内用户访问 https://www.google.com 默认情况下会跳转到谷歌香港 http://www.google.com.hk,解决方法为先点击“Google.com in English“访问 http://www.google.com/ncr (仅需要点击一次),该网址会种一个Cookie,防止跳转,再设置搜索语言为中文,再输入 https://www.google.com 即可,比较麻烦。   本人将这一复杂的流程简化为一个域名:ggssl.com,只需要访问:http://ggssl.com,即可利用脚本快速跳转到 Google SSL 加密搜索中文版。第一次访问自动设置并跳转,以后访问立即自动跳转。   Google SSL 搜索快速跳转域名:http://ggssl.com

Vmware7.1 Fedora13


03 6月
前两天看到fedora13发布了,下了后,今天终于有时间玩一下了,另外vmware也升级到7.1了呢。 在前面的文章中说到过,vmware认不出fedora12,嗯,7.1貌似认得出了,于是也让我碰到了传说中的vmware eazy install的问题,就是它会很世博的自动帮你乱装你的系统,也不问你愿不愿意。。。 好吧,其实它是问了,只不过。。。它是在最前面,让你选择安装文件路径的时候,下面有个checkbox: I will install the operating system later. 真是完全。。。比开司米还绕啊。。。 ok,选好这个勾勾之后,在最后的hardware customize的地方,把cd/dvd那地方选到你的iso文件就可以了。 嗯,其他貌似没啥了,刚装完,去玩喽~ —————————————————————————————————— 不知道怎么的,新装的是英文的,突然变中文的系统了。。。莫名。。。 于是又学到一招,只需要将/etc/sysconfig/i18n文件中的LANG="zh_CN.UTF-8" 改成LANG="en_US.UTF-8",然后重启即可。

貓熊寶寶幼齒園

姜經緯的博客