利用WallProxy翻墙

  • 第一步申请空间并创建APP_ID
  1.  打开浏览器,登录http://appengine.google.com/ ,输入gmail用户密码登入Google登录
  2. 点击“Create an Application”。                                                                                                                                        创建APP
  3. 创建新APP_ID,比如这里使用了own96345 。                                                                                                  注册APP信息
  4. 填好以后进入下个页面,如下: 则表示成功。           完成
  •  第二步:下载wallproxy,上传至Google App Engine应用
  1. Github下载:https://github.com/wallproxy/wallproxyGithub下载WallProxy软件包
  2. 运行local文件夹下WallProxy.exe或者Run.bat(非Windows用户运行startup.py,Windows若提示是否允许安装证书,请允许);                                                 WallProxy目录结构
  3. 上传:运行server文件夹下uploader.bat(非Windows用户运行uploader.py),输入appid上传(一次只能上传同一个帐号下的appid,多appid用|分隔,提示Set Proxy时可输入1来提高上传成功率);APP上传CMD命令行操作

    上图界面时,选择1提高上传成功率。选择后会要求你输入google的邮件账户以及密码,然后上传会自动完成。

    1)  如果出现如下提示,删除旧appid,重申请新appid;

     Error400

    2)  如果在操作过程中出现以下错误,则到https://www.google.com/settings/security 停用“两步验证”;

     图片验证

    3)  如果出现如下提示,说明在提示“Set proxy?”时选择了使用代理上传,若当时选择了1,请确保已经运行可以正常使用的wallproxy,若没有可用代理,请在提示“Set proxy?”时输入0或直接回车。

     无法连接错误

  4. 访问http://127.0.0.1:8086/#proxy_ini,找到如下部分(56行左右)并修改appid = 后面为自己的appid,点右上角的“保存”之后即可使用了;                      APP_ID 设置                             [gae]
    ;是否启用GAE服务端
    enable = 1
    ;服务端appid(多个用|分隔,个数不限)
    appid = appid1|appid2
  5. 代理地址127.0.0.1:8087;如需使用PAC,设置http://127.0.0.1:8087/proxy.pac;如需使用SwitchySharp/AutoProxy等浏览器扩展(SwitchySharp用户可导入配置local\misc\SwitchyOptions.bak),与goagent设置方法相同;如需使用智能代理(使无法使用PAC或扩展的程序也做到该走代理走代理,不该走就不走),设置127.0.0.1:8086为代理即可。
  6. 导入http://127.0.0.1:8086/CA.crt为浏览器根证书可消除浏览器证书警告(cmd窗口提示时间与导入后查看到的时间相同基本就是导入成功了,升级版本时请保留cert目录,以免需要再次导入)证书安装 证书安装2
  7. 可通过http://127.0.0.1:8086http://wallproxy访问Web配置界面
  • 第三步:运行客户端。
  1. 运行local文件夹下WallProxy.exe,可显示下图WallProxy托盘双击托盘图标,可出现控制台窗口,注意不要直接关闭该窗口,正确的方法是再次双击托盘图标来隐藏。控制台                                                        FWD说明没有走代理,GAE说明走了GAE,PAAS说明走了PAAS(PHP)。
  2. 托盘左键菜单用于配置代理,右键菜单配置程序。WallProxy功能菜单1) 直接连接:强制浏览器不使用代理;2) GAE代理:强制浏览器使用127.0.0.1:8087作为代理(除部分google网站外,大部分网站都走GAE);3) 智能代理:强制浏览器使用127.0.0.1:8086作为代理,由wallproxy智能判断是否需要走GAE,如果直连失败,可自动改走GAE;4) 自动代理:由浏览器通过PAC判断是否需要走GAE,与智能代理相比性能损失小,但无法做到在直连失败时改走GAE;5) 禁用切换:强制IE不使用代理;以上4个选择在每次运行WallProxy.exe时都会去修改IE代理为所选择项,而选择“禁用切换”后下次运行不会对IE代理做任何修改。使用SwitchySharp/AutoProxy等浏览器扩展管理代理的用户,请选择此项。
  3. 如果需要自定义这些菜单,可以选择“设置代理”菜单项:代理设置勾选“退出时恢复无代理”可在退出WallProxy.exe时将IE代理修改为无代理,以免影响正常使用;勾选“禁用代理切换”效果类似于“禁用切换”菜单。如果使用如图所示的拨号上网方式,将连接名称填入上图“连接名称”,例如下图“连接 宽带连接”,将“宽带连接”填入即可。宽带连接
  4. 打开浏览器输入:http://www.facebook.com,并成功访问。facebook登录
  5. 自定义代理规则,访问http://wallproxy/或者http://127.0.0.1:8086/,再点击“自定义规则”,输入要走GAE的规则后保存即可:配置文件                    附录一:建议关注的参数:APP_ID 设置1) https_mode: 智能代理在直连失败时可自动改走GAE,但对于部分https在https_mode = 2时无法做到这点,在https_mode = 1时则能做到;2) profile以及[hosts]定义了一些直连和强制https策略,如果出现想走GAE却没走GAE,或者重定向异常,请检查对应[google_xx]/[hosts]的配置;3) max_threads: 如果网速足够好,可以把这个值改得更大或者改为0,以加快视频等大文件下载(需配合多appid);4) find_handler: 出现了“走GAE代理还是转到google.com.hk之类的疑问”,可将该值设为0,让走“GAE代理”的请求真正全走GAE。5) fetch_mode: 出现“看视频时一会没速度,一会速度很大”的疑问,可将该值设为0,来获得更加平滑的缓冲。
Advertisements

模块加载器获取URL的原理

岁月如歌

浏览器端的模块管理

JavaScript 构建的应用越来越复杂,为了提高代码的可维护性,第一步是拆分为多个文件:

a.js
b.js
c.js
...

 
文件拆开是第一步,为了彼此能互相调用,但又不污染全局造成潜在冲突,于是聪明的程序员们想出了用对象来模拟命名空间:

// a.js:
X = {};
X.a = {...};

// b.js:
X.b = {...};

// c.js:
X.c = {...};
...

 
这种命名空间得自己维护,当层级达到三层及其以上时,维护起来并不轻松,比如 YAHOO.widget.TreeView。于是出现了类似 YUI3 的扁平方式:

// 定义模块
YUI.add('a', factory);

// 加载模块
YUI().use('a', function(Y) {
  // 调用模块
  Y.a.doSomething();
});

 
这种方式解决了不少问题,比如依赖加载、模块沙箱、命名空间。但使用时,用户的记忆负担还是比较重,比如:

YUI().use('dd-drop', function(Y) {
  Y.DD...
});

 
得记住 dd-drop 和 Y.DD 的对应关系。当模块很多时,经常要查文档。

View original post 513 more words

发布 SeaJS v1.1.0 与 SPM v0.4.0

岁月如歌

SeaJS

2011.12.02, Version 1.1.0 (stable)

  • 完善 API 文档:Sea.js 手册与文档
  • 优化模块 id 的设计,提高打包后的可靠性:#112, #127
  • 增加开发状态判断:seajs.debug#117
  • 开放插件方法:seajs.pluginSDK
  • 让 seajs 的模块可直接运行在 node 环境:#105
  • 其他优化,详见:issues

SPM

2011.12.02, Version 0.4.0 (stable)

大量优化和 bug fix,详见:issues
使用方法:README.md

安装使用

强烈推荐升级到 node 0.6.4, 安装非常简单:

Windows 安装包:node-v0.6.4.msi
Mac 安装包:node-v0.6.4.pkg

安装好后,使用以下命名安装 spm:

$ npm install spm -g

反馈

请发送邮件到:seajs+subscribe(at)googlegroups.com

View original post

JS 和 CSS 的位置对其他资源加载顺序的影响

岁月如歌

克军做了一系列测试:js和css的顺序关系,给出了现象和结论,但未给出原因。

JS 和 CSS 在页面中的位置,会影响其他资源(指 img 等非 js 和 css 资源)的加载顺序,究其原因,有三个值得注意的点:

  1. JS 有可能会修改 DOM. 典型的,可能会有 document.write. 这意味着,在当前 JS 加载和执行完成前,后续所有资源的下载有可能是没必要的。这是 JS 阻塞后续资源下载的根本原因。
  2. JS 的执行有可能依赖最新样式。比如,可能会有 var width = $('#id').width(). 这意味着,JS 代码在执行前,浏览器必须保证在此 JS 之前的所有 css(无论外链还是内嵌)都已下载和解析完成。这是 CSS 阻塞后续 JS 执行的根本原因。
  3. 现代浏览器很聪明,会进行 prefetch 优化。性能是如此重要,现代浏览器在竞争中,在 UI update 线程之外,还会开启另一个线程,对后续 JS 和 CSS 提前下载(注意,仅提前下载,并不执行)。有了 prefetch 优化,这意味着,在不存在任何阻塞的情况下,理论上 JS 和 CSS 的下载时机都非常优先,和位置无关。

以上三点可简述为三条基本定律:

  • 定律一:资源是否下载依赖 JS 执行结果。
  • 定律二:JS 执行依赖 CSS 最新渲染。
  • 定律三:现代浏览器存在 prefetch 优化。

有了这三条定律,再来看克军的测试,就很清晰了:

a,b – head里出现外联js,无论如何放,css文件都不能和body里的请求并行

根据定律一和定律三,可以知道上面的结论不够正确。比如:

在 Chrome 下的瀑布图是:

黄色条是 js 的,可以看出 img 的延时下载是由定律一决定的。

定律三则决定了所有 js/css 都是并行开始下载的。在 Firefox 10 下,prefetch 非常强悍,对 img 也会预加载,瀑布图如下:

调整一下 sleep 时间,还可以观察到定律二的威力:

瀑布图立刻发生了变化:

因为定律一,决定 img 的下载在 js 执行后。又因为定律二,决定 js 的执行在第一个 css 后。于是最后在瀑布图上体现出来,就是 img 的下载在第一个 css 后。

再来看克军的第二个结论:

c – head里的内联js只要在所有外联css前面,css文件可以和body里的请求并行(图2)
d – head里的内联js只要在任一外联css后面,css文件就不能和body里的请求并行(图1)

这个是定律二的威力。结论 c 是正确的,因为没有 css 会影响 js 的执行。结论 d 则不够正确。img 等其他资源,会在 js 前面的 css 下载完成后,以及 js 执行后,立刻开始下载。与头部中,js 位置之后的 css 没关系。

克军的其他结论都是对的,不多说。

注意1:Firefox 10 的 prefetch 有点奇怪,有时会对 img 进行 prefetch,有时则不会。有兴趣的可以进一步寻找规律。
注意2:上面的三个定律,是黑盒猜测,有兴趣的可以去阅读浏览器的源码,应该能找到更深层次的原因。
注意3:本文没有考虑 defer, async 属性的影响,这是另一个故事。

浏览器在迅速发展,很多总结,特别是书籍上的,很难与时俱进。大家应该像克军学习,多测试,多发现,这样得来的知识,才不会过时。这篇博客的总结,也肯定在未来甚至就在现在,已经存在错误。这些都无所谓,关键是要懂得测试的方法和分析的思路,有了“渔”,才能更好地探求和拥有“鱼”

View original post 1 more word

幸福是什么

岁月如歌

请先阅读上一篇博文:活着的意义

马斯洛总结的五个需求层次,是理性的分析与归纳。应用到个体时,需加上感性的浪漫与发散。对我来说,马斯洛的五层需求简化为三层:

  1. 生存
  2. 自我完善、财富自由
  3. 体验并创造美

幸福是对美的体验,这是第三层次的需求。要获取幸福,就是要让第三层次的需求得到尽可能多的满足。这离不开第一层次的生存需求,以及第二层次的自我完善和财富自由。

这三个层次不是通关制,不是达到了第一个层次,才能进入第二个或第三个层次,而是三个层次同时存在,并且含义会随着时间发生变化。

对我来说,读大学时,生存需求是不为学费和生活费发愁,这个需求通过家庭支助和课余打工得到了满足。第二层需求里的自我完善,是完善自己的知识体系,是锻炼个人品德和社会生存能力。财富自由在大学时期很简单,对我来说就是能賺点闲钱,买自己喜欢的书。第三层次在大学时期有很多,比如与红友们品味红楼,与诗友们点评诗歌,以及同学之间对科学的畅想和讨论。大学时期,现在回想起来,是简单而幸福的。简单是因为欲求不多,需求简单。幸福是因为体验甚至创造了部分美好。

当然,大学时的我,也有不少不幸福。比如第二层次的财富自由,其实除了买书,我还很想能有闲钱出去旅游。但靠家教賺钱很有限,有时为了买书,我还得饿饿肚子一天只吃三个馒头。还有第三层次的需求里,我很想拥有一份爱情,但在大二时追求过一个女孩,尚未开始就已结束,倍受打击。直到大四开始的另一段恋情才让我在爱情方面拥有了美的体验。

生存需求是基本需求,对于大部分人来说,如果生存需求都得不到满足,是不可能长期拥有幸福的。第二层次的自我完善和财富自由,很大程度上是为了让自己能有资本去体验未曾体验过的美,从而在第三层次上得到更多满足。

生存、自我完善和获取财富自由,本身也可以充满美的体验。一个常见的例子是,追随我心,让兴趣与工作保持一致。但对于大部分人来说,兴趣和工作很难完全重合。重合度超过一半就已经不错,这是现实的生活。

幸福和需求密切相关,需求来自内心的欲求。想拥有幸福,就需要好好地去管理欲求。心如止水,无欲无求,那是佛陀的幸福境界,我们常人不可及。我们可做的是让需求真真切切地贴近自己的内心,要大胆地剔除掉一切虚妄的欲求,比如活得比他人好的攀比欲求,比如拯救人类的狂妄欲求,以及抢劫、淫邪等有悖普世道德的欲求等等。

除了来自个人内心的欲求,需求还不得不受外在环境的影响。比如中国社会中的有很多三明治,面对现实,不得不考虑:

  • 房子。是的,我在谈论房子。虽然你可以租房,但中国当下这个大环境下,父母的唠叨、孩子的户口和教育、生活的心态等等,所有这一切都会迫使你或迟或早在这或在那去拥有一套房子。没办法,这里是中国,我们是三明治,活着的部分意义就是去适应当下。
  • 车子。最近网上流行一个段子:

    梁朝伟有时闲着闷了,会临时中午去机场,随便赶上哪班就搭上哪班机,比如飞到伦敦,独自蹲在广场上喂一下午鸽子,不发一语,当晚再飞回香港,当没事发生过,突然觉得这 TM 才叫生活。

    这个段子可能是事实,也可能是夸张。但从其疯狂转发和衍生出的各种版本来看,大家内心都希望自己也能拥有这份“随时去喂外国鸽子的自由”。车子能让我们拥有一定程度上的“交通自由”。城市的车子会越来越多,这是对自由的追求。

  • 孩子。这个肯定会有争议,现实生活中的确有不少人选择了不要孩子。但对大多数人来说,活在中国,孩子是给自己以及父母辈最好的礼物。不孝有三,无后为大,看似我们早就不受这种传统观念的束缚了,但实际情况远非如此,很多传统观念依旧无处不在地影响着我们。

房子、车子、孩子,这些可能并非你的初始需求,但在社会环境下,拥有这些往往能让你活得更舒适、更恬然。特别是孩子,会让父母在自我完善和美的体验中收获很多。大隐隐于市,“隐”可以理解为生活的智者,“隐于市”可理解为与大众的生活保持一样。淘宝的一位高管曾说,可以保有自己的特色,但没必要去搞特别。总之,面对外在环境,保持顺流而活的心态,可以让幸福来得更容易。

每个人的生存需求、自我完善、财富自由以及对美的定义都不尽相同。需求定义和欲求管理是“知”的层面,在“行”的层面,我们如何才能做到呢?这和“活法”密切相关。有很多“活法”值得思考和实践,比如诚实、谦虚、正直等等。这些“活法”,会影响做人做事,并最终决定我们能否活得幸福。

下一篇博客将从我自身出发,总结下我的“活法”。

View original post