07 / 06 / 2012 buling

      终于把博客升级了一次,本来想升级到3.3.2,但需要花费很多时间,最后还是算了,把博客换个皮肤,换个域名,再把博客从空间迁移到vps上。

   1、因为博客的皮肤是用的网上的一套,后来自己做了一些小改动,前天想换个背景,昨天想把整个颜色换换,然后心一横就长现在这样子了,我还挺喜欢,不知道是不是那个长相看烦了。
   2、那个quou.cn(竟然开始称那个)是读大学期间竞拍来的一个域,好像几十¥,当时挺喜欢的,四字符还是拼音,但后来鸟政策一出,导致域名价值骤降,一直不想换域也是因为这个域名是备案通过,而且一直没被取消,悲剧的是我所有域名中就剩这个的备案没被取消了。被过案可以使用国内双线空间,速度非常快。4月份我上空间一看,呀,哪家B孩把我源码+数据库打个包下跑了,肯定是空间服务商被黑了,算了,反正博客没艳照,更没机密。之前收集了好几个com域名,至于为啥选择了这个mjix,我也没太搞明白,估计是因为有个x吧。
   3、前段时间终于还是下决心买个vps玩一下,30一个月很便宜,米国的;星哥前几天也买了一个90+吧,hongkong的,速度当然大大的好,我这空间也还行,ping在170左右。放了好几个月,有点浪费,还是把博客迁移过来吧,前端时间也折腾了好久lamp,现在搞来也算是得心应手了,不过还是装了一下模块,做了页面压缩,改天再优化下页面过期缓存的问题吧。代码放自己空间,随时tar一下,方便很多,且可以根据需要做一些优化调整,不依赖于空间提供商,比如给php、mysql升个级啥的不是轻而易举的事情么。


      到此升级博客的三个点完毕了。租房到期,今天本来去看一个新装修的房,结果楼主临时变卦涨价,算了。回去时候看了另一家,是因为原租客要回乡,转租,10月份到期,大好,8月份公司要搬家,再好不过了。可惜苦了迅雷的B孩了…

无标签信息 0 条

      今天上班的时候没有太多的事就画了一会图,把博客的效果改了一下,博客还是需要定期换换风格才好,千篇一律肯定不是什么好东西,咋样,蓝色的格调我还是很喜欢,虽然是忧郁的颜色。不是问题,开心就好。
      接上一篇文章中跨域通信问题的其它一些解决方案,我第一直觉是用jsonp做轮询,然后迅速写了一段代码,结果问题出现了,代码本身没问题,就是用户体验不好,页面会一直处于加载中的效果,代码如下:

function test_function(data){
    //返回格式:test_function({"ss":"sdf"});
    var url = 'http://192.168.0.235:8010/xxx/talk/test.php?o=12&_t='+Math.random();
    if(data){
        do data;
        alert(data);
    }
    $.ajax({dataType: 'jsonp',
            data: 'id=10',
            jsonp: 'test_function',
            url: url,
            success:function(){alert(123);}
    });
}
$(document).ready(function(){
    test_function();
});

      后来想了一下是不是把这个东东扔进iframe中就不会出现这种情况了呢,还没来得及实验就看到了此哥们的这篇文章 http://www.woiweb.net/iframe-loading-techniques-performance.html ,说的很明确,iframe的加载是会阻塞主页面的,这篇文章写的很好,后面那几句代码很好,所以厚着脸皮考过来,避免哥们博客搬家找不到了。

(function(d) {
    var iframe = d.body.appendChild(d.createElement('iframe')),
    doc = iframe.contentWindow.document;
    // style the iframe with some CSS
    iframe.style.cssText = "position:absolute;width:200px;height:100px;left:0px;";
    doc.open().write('');
    doc.close(); //iframe onload event happens
})(document);

      博主对上面方法描述到“使用iframe来加载一些插件,并且真正做到了无阻塞加载。对于有的开发者来说,他们的做法还比较新鲜。很赞,超级赞。”我也把它推荐给了身边的前端牛人们。
      博主还有一篇跨域资源的10种方法,看的我叹为观止,佩服:http://www.woiweb.net/10-cross-domain-methods.html ,对之前我不太熟悉的几种方法做一下记录吧,也算是学习了。
1、jsonp就不说了,太常见;
2、flash urlloader,使用flash的策略文件做跨域,再通过flash api通知js;
3、Access Control这个还真是第一次听说,浏览器支持有限,需要请求的响应必须包含一个Access-Control-Allow-Origin的HTTP响应头,该响应头声明了请求域的可访问权限。
4、window.name,也是第一次,描述我就直接copy了,没有比这更好的解释了,window对象的name属性是一个很特别的属性,当该window的location变化,然后重新加载,它的name属性可以依然保持不变。那么我们可以在页面A中用iframe加载其他域的页面B,而页面B中用JavaScript把需要传递的数据赋值给window.name,iframe加载完成之后,页面A修改iframe的地址,将其变成同域的一个地址,然后就可以读出window.name的值了。
5、server proxy,这个是在服务端做个方向代理,可以参考前文中描述的nginx做反向代理。
6、document.domain,跨子域的通信,参考前文
7、FIM – Fragment Identitier Messaging,即通过url中的hash值,这个方法一般人几乎都不会用,要求数据小。
8、Flash LocalConnection,这个我了解过,即不同的两个页面间可以通过flash的这个api来通信,两个页面当然可以表示两个域。
9、window.postMessage,html5中的新潮方法,不解释。
10、cross frame,第7种方法的一个变种,不喜欢,不解释。

无标签信息 0 条
06 / 06 / 2012 buling

      这两天根据之前写的erlang长轮询优化做了一个群聊服务,服务就没什么说的了,消息放内存。erlang的http服务开的是8010端口,这样请求的时候就要在域后带端口号,例如:http://test.mjix.com:8010/x237/query.php这样,本以端口不同不算跨域,结果是,ie认为不跨域,但firefox认为跨域,且考虑到后期erlang的http服务与处理请求的apache服务应该要独立,所以用了子域来解决这个问题,请求页面为http://test.mjix.com/x237/talk/test_cross.html 轮询的地址为:http://proxy.boss.com/x237/talk/query.php,因为我机器的80端口被占用了,所以为了域后不带端口,我在nginx做了一个代理:

#vi /usr/local/nginx-0.7.66/conf/nginx.conf
server{
    listen     80;
    server_name proxy.mjix.com;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        if (!-e $request_filename) {
            proxy_pass http://192.168.0.235:8010;
        }
    }
}

      抓了webqq的包,也搜了一些信息,发现跨子域可以用 iframe+document.domain来解决,说干就干。在域proxy.mjix.com下建了一个iframe页面,源码如下:



主页面的代码如下






      刚做出来效果挺不错的,昨天打算给部门分享一下,一打开ie页面,IE9,怎么js报错:SCRIPT5: 拒绝访问。test_cross.html, 行22(window.frames[‘tast_frame’].ajax) 字符9,肯定是同源策略问题,ps:前两天为啥没有发现这个问题呢,这很纳闷。firefox没有错,一下子慌了神,因为5点的场,快5点半了还没解决,用ie8没问题,然后临时开启ie8的兼容模式来解决。
      6:20左右才分享完,效果不咋地啊,主要是说到了很多前端的东西,这就让很多人没了兴趣。下来搜了一下,找到一篇文章:http://www.woiweb.net/communicate-with-iframe-in-ie.html 这哥们的文章真是没的说,都总结的非常好。然后改了一下js代码,如下:

    document.domain="mjix.com";
    var init_ajax_func = function(){
        var iframe = $('#tast_frame')[0];
        var ajax_func = null;
        ajax_func = window.frames['tast_frame'].ajax
        if($.browser.msie){
            try{
                ajax_func = window.frames['tast_frame'].ajax
            }catch(e){
                iframe.src = "javascript:void((function(){document.open();document.domain='"+ document.domain + "';document.close()})())";
            }
        }else{
            ajax_func = iframe.contentWindow.ajax;
        }
        if(!ajax_func) setTimeout(init_ajax_func, 1000);
        else {
            imsn(ajax_func).init().run();
        }
    };
    $(document).ready(function(){
        init_ajax_func();
    });

      测试了一下,效果很好,虽然是用了一些旁门左道的办法。

无标签信息 0 条

      装了一个nginx,弄了一下postgreSQL,搜索的时候发现google结果页的时候,被墙了,相当痛苦,一开始某同学也问了这个问题,所以顺便写段js代码,解决一下。
      很多时候在google的时候,结果已经搜索出来,但点击相关网站链接查看详情时候却死掉了,再怎么点都没反应,主要原因是在你点击鼠标后,google在网页链接前加了跳转链接,google被墙,所以不能跳转到相应页面。
      把下面的链接点击右键添加到【收藏夹】,下次再出现链接点不动的情况,可以点击一下【收藏夹】中的这个连接恢复页面链接。

【GOOGLE死链破解】点击右键添加到【收藏夹】

      把下面的链接点击右键添加到【收藏夹】,再需要另存不了图片的页面,可以点击一下【收藏夹】中的这个连接,鼠标移动到对应图片上可以查看相应的图片地址。

【突破右键查看图片方法】-点击右键添加到【收藏夹】

无标签信息 3 条
04 / 06 / 2012 buling

      上午来了打算写一个nginx模块试试,想了半天还是在自己虚拟机上安装一个nginx吧,因为配置的时候指定了zlib和prec路径问题,折腾了很久,安装成功才发现原来已经安装过了,博客已经记录过,好吧,就当加深记忆。
1、先下载nginx,去官网,我下载的版本是nginx-0.7.65,在下载prec,这是正则库。

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.11.tar.gz
tar -zxf pcre-8.11.tar.gz

2、再下载zlib,

wget http://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.6/zlib-1.2.6.tar.gz
tar -zxf zlib-1.2.6.tar.gz
cd zlib-1.2.6
./configure #这一步骤很有必要,否则会报类似gmake[1]: *** [../zlib-1.2.6/libz.a] Error 2这样的错误

3、配置nginx,并安装。

./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_dav_module --with-http_flv_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-pcre=./pcre-8.30 --with-zlib=./zlib-1.2.6 --with-debug --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
make
make install

      如果事先安装了apache等可能80端口被占用,先更改端口为8080

vi /etc/httpd/conf/httpd.conf
Listen 8080
ServerName localhost:8080
#这句话为了解决:正在启动 httpd:httpd: apr_sockaddr_info_get() failed for sl6x
#httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

      更改nginx配置,反向代理到apache,不确定配置文件可以通过ps -x|grep nginx看看nginx -c跟的启动配置文件,没有就默认

vi /usr/local/nginx/conf/nginx.conf
#在sever中的location中更改
location / {
    root   /home/www/html/default_site;
    index  index.html index.htm;
    if (!-e $request_filename) { #如果文件不存在定向到apache
        proxy_pass http://127.0.0.1:8080;
    }
}

      到此为止,应该算是完成了,接下来就该到了模块了…

无标签信息 0 条