分类目录归档:PVP心得

自己的研究发现

就是现在,用Promise取代callback吧!

Callback-Hell
什么是callback hell?
答:(如上图)过多的,过深的callbacks导致代码丑陋,难以阅读和维护。

window.Promise兼容不好吧?
答:这篇文章就是教你如何想Promise就Promise想callback就callback,还有去兼容浏览器的Promise的polyfill

ES6里的Promise让JS变得更加优雅。那么现在我们怎么把原有的代码转变成Promise Style呢?

原有代码(Callback Style):

    var waitCon = function(time,callback){
        //这里可以做很多工作的代码,先用延迟来代替
        var result=1+1;
        setTimeout(function(){
            if(callback){
                callback(result);
            }
        },time);
    };

原有代码(Callback Style)-调用方法:

    waitCon(2000,function(res){
        console.log(res); //两秒后得出2这个结果
    });

改写成Promise Style:

    var waitCon = function(time){
        return new Promise(function(resolve,reject){
            var result=1+1;
            setTimeout(function(){
                resolve(result);
                //成功完成,传出结果。如果用reject则是完成失败,传出错误内容
            },time);
        });
    };

Promise Style的调用方法:

    waitCon(2000).then(function(result){
       //原本callback里的内容
       console.log(result);
    });//可读性很高:先执行XXX,然后XXX

还可以Promise链、多重Promise具体查看 http://www.html5rocks.com/zh/tutorials/es6/promises/
这里只谈最简单的异步callback升级换代。

这里送出一个callback+Promise的整合版,想用什么用什么,妈妈再也不用担心其他小朋友不会用婆迷丝了。

    var waitCon=function(time,callback){
        return new Promise(function(resolve,reject){
            var result=1+1;
            setTimeout(function(){
                if(typeof callback === "function"){callback(result);}//执行callback
                resolve(result);//成功完成,传出结果
            },time);
        });
    };

AngularJS+ JqueryMobile+ PhoneGap 打造APP

转载必须附带本文地址http://blog.regou.me/?p=790,谢谢

最近在做一个项目,一个B2B的移动APP。
我是这样选择的
前端UI框架:jQueryMobile
前端MVC和页面导航:AngularJS
封包器:PhoneGap Build
AngularJS和jQueryMobile的桥接器:jQueryMobile-Angular-Adapter(以下简称Adapter)
AngularJS JqueryMobile PhoneGap worktogether

两个著名框架融合在一起,还要让他们被封包了后还要运行OK可不容易,期间遇到了各种各样的问题,国内文档较少,于是Github、GoogleGroup、StakOverflow这些网站四处奔波提问+查资料
下面说下我遇到的问题和解决方法 继续阅读

AngularJS兼容IE的处理(官方文档不全面)

AngularJS
最近在学些AngularJS,感觉挺强大的。
但是如果想投入到生产环境中,还需要考虑到IE6,7的兼容问题。

官方文档提到如何兼容IE了,但是即使全部按照文档里说的做,其实还是不能做到在IE6,7下运行。

经过各种实践,在这里给出一个补充:
需要在html标签上添加id=”ng-app”和class=”ng-app:APPNAME”,于是一个标准的ng-app的标签应该是:(app名为myapp为例)

##注意下面的“HTMLTAG”必须是合法的html标签,永远不要使用自定义标签(ng-view改成<div ng-view>),否则依然不兼容IE
<html xmlns:ng="http://angularjs.org">
......
<HTMLTAG ng-app="myapp" class="ng-app:myapp" id="ng-app">
   ....
</HTMLTAG>
.....
</html>

这样就行了,以上是唯一的和官网说明不同的地方.

另附官网文档所说的让IE兼容JSON2和HTML5标签的JS在这,直接引用进head标签里就行了里就行了(这两个JS也是必要的)

<script src="http://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.6.2pre/html5shiv.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/json2/20121008/json2.js"></script>

随便做了一个demo,兼容IE67:
http://tools.regou.me/angularJS.html

2013.6.22更新
目前我在正式的生产环境中,用AngularJS+jQueryMobile+PhoneGap在做一个B2B商城APP
分享了点AngularJS用户手机APP开发的心得:
blog.regou.me/?p=790

2013.12.16更新
我看了下,官方文档已经做好了补充,现在可以完全以官网文档为准了。
AngularJS 1.3.0开始,将不再支持IE8和IE8以下的浏览器,所以,别再挣扎了

JS/PHP添加Do Not Track(DNT),保护访客隐私

大多数的网络浏览器的设置中有一个“Do Not Track”(DNT 即“不追踪”)设定,让用户能够控制自己的隐私信息被追踪的情况。
但是网站到底是否真的不追踪,还要看网站本身是否响应它
那么,做一个善良的网站,如果用户设置了Do Not Track,那么就保护一下他的隐私吧!

下面这个为JavaScript的代码,如果 navigator.doNotTrack 等于1,那么用户就开启了DNT,不要去运行那些搜集用户信息的脚本了!

if(!navigator.doNotTrack){
  //这里面写搜集信息的脚本,如果开启DNT则不执行
}

这个为PHP的,通过判断HTTP Header “HTTP_DNT”的值是否为”1″来判定是否开启了DNT:

function get_dnt() {
  // returns TRUE if DNT is on and is equal to 1
  return (isset($_SERVER['HTTP_DNT']) && $_SERVER['HTTP_DNT'] == 1);
  $DoNotTrackHeader = "DNT";
  $DoNotTrackValue = "1";

  $phpHeader = "HTTP_" . strtoupper(str_replace("-", "_", $DoNotTrackHeader));
  return (array_key_exists($phpHeader, $_SERVER)) and ($_SERVER[$phpHeader] == $DoNotTrackValue)
}

同理,nodejs的:

var dnt=function(){
  return (headers['HTTP_DNT']==1)
}

How to share SSH tunnel for an non-jailbreak iPad

本文由regou.me原创转载请保留此行
这篇文章是写不越狱的iPad如何共享使用局域网中的SSH隧道的,顾及到有很多国外朋友的需求,先写个英文版,英文水平有限,有错误请指出

I bought an new iPad last week.The fonts on the screen are incredibly sharp!
You may want to hold it,lazy in bed watch the YouTube and Vimeo.But due some reason ,we can’t watch them cause they’re been blocked.


Some may suggest using VPN,that’s fine,and the easiest way,but SSH Tunneling is much cheaper.
if you don’t have your iPad jailbreaked,so local port forwarding will not going to work.We need share a established tunnel with a pc which on our home network .Let’s do it ,in this way:

  1. First,connect an SSH in your PC.
    1. I prefer “Bitvise Tunnelier” for client ,connect ssh for the tunnel as you used to,but change the Listen Interface to 0.0.0.0 (see the screenshot ) and port 37111(as you want)
      Listen Interface
    2. You may need to accept the incoming port (in this case is TCP 37111)on the firewall
  2. Open the text editor ,and make a PAC file
    1. Copy the code down here,and change 10.0.0.169 to your PC’s ip address,and 37111 as your set
      function FindProxyForURL(url, host) {
      return 'SOCKS 10.0.0.169:37111';
      }
    2. Upload the .pac file to your FTP server(highly recommended the tiny “Slyar FTPserver“,it’s the best way to build a local ftp server in just few seconds) or http server whatever where your iPad could access, and remember the address of your uploaded file
  3. Change the iPad http proxy->; Auto ->;URL to your .pac file’s location

ALL DONE!!

发布 WordPress手机版 WordPress Mobile Reader

这是一个WordPress的手机版阅读器,用Ajax去请求博客的RSS XML内容
纯粹前端,没用用到PHP
由于Ajax限制,它必须和博客同域名(跨域名解决方案看底部更新)

托管在Google,使用方法、Wiki页面、问题、BUG里面很全了,

大家也可以在此文章下面评论也可以在项目页里评论

Host by GoogleCode : http://code.google.com/p/wpmr/

Demo: https://blog.regou.me/m/

—————8月30日跟新跨域名解决方案————
可以配置 .htaccess 文件,来允许Cross-origin resource sharing,从而跨域名阅读博客,甚至无需空间直接在下到本地阅读博客

相关文章:http://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/#SettingResponseHeaders
只需要在博客域名下的.htaccess里添加这么一行就可以让任意域对其进行XHR请求

Header set Access-Control-Allow-Origin *

要注意,IE10以下浏览器或过低版本的Firefox Opera Safari不支持此功能

[PVP心得]启用DNS加密 或 DNSSEC(Unbound)并改用TCP DNS来阻止DNS污染

本文为 regou.me 原创,转载请保留此行

本文意在介绍 DNSCrypt pdnsd Unbound

各种链接被重置是很烦人的,比如谷歌上进行搜索时,可能会出现“连接被重置”啥的,这是ISP的DNS污染(什么是DNS污染DNS cache poisoning )造成的即使你修改了DNS服务器,仍然会被污染

OpenDNS公布了DNSCrypt ,即DNS加密,来阻止ISP或Hackers来污染你的DNS
继续阅读