月度归档:2015年01月

Mac支付宝插件风波

1、前言

首先我喜欢看一些创业的书,很多书里都会有马云的身影,马云也算是对我有一定的影响,从而我对淘宝也产生了一定的好感。但是关于这次插件事情,我对阿里产生了一些排斥的心里作用。我并不想吐槽淘宝,也不是吐槽马云,阿里不是万达,整个阿里并不是马云想干啥就干啥,所以这些事情也不可能说是马云的一句之作,我看见网上很多人因为这个事情在吐槽马云,我都为马云兄背黑锅这件事情感到蛋疼。仁者见仁智者见智吧!

2、可疑进程

无意中看到一篇文章在说Mac上支付宝插件有点异常,我查看了自己的进程,发现确实存在一个可疑的“AlipayDispatcherService”进程,同时这个进程会监控浏览器的配置文件,通过kill结束这个进程后发现“AlipayDispatcherService”进程会再次启动,我找出了以下两个相关的阿里服务:

 

  • com.alipay.refresher.plist
  • com.alipay.DispatcherService.plist

发现“com.alipay.DispatcherService.plist”服务调用“com.alipay.refresher.plist”服务不断重启“AlipayDispatcherService”,理清楚调用顺序过后,关闭这个进程相对简单了,首先禁用两个服务:

sudo launchctl unload /Library/LaunchDaemons/com.alipay.DispatcherService.plist

sudo launchctl unload ~/Library/LaunchAgents/com.alipay.refresher.plist

然后执行命令结束掉“AlipayDispatcherService”进程:

kill -9 AlipayDispatcherService

3、找出藏身之地

我查看了支付宝插件包里面的“preinstall”文件,列出了一些目录安装文件的目录,可以通过查看是否存在相关文件进一步确认并删除:

  • ~/Library/Alipay
  • /Library/Application Support/Alipay
  • /Library/LaunchDaemons/com.alipay.DispatcherService.plist
  • ~/Library/LaunchAgents/com.alipay.refresher.plist
  • ~/Library/Internet Plug-Ins/ali*(npali*).plugin

4、正确姿势安装

  1. 首先到官方下载名为wkaliedit.dmg的插件包
  2. 然后载入过后提取installer.pkg文件,解压installer.pkg包提取output.pkg包
  3. 右键显示包内容打开output.pkg包,解压Payload包(此包为gzip格式,如果不能直接解压,请在终端下解压(tar zxvf Payload)),得到alipay包
  4. 右键显示包内容打开alipay包,依次进入Contents-Resources,找到其中两个zip包,aliedit.zip和npalicdo.zip
  5. 解压两个包,并把解压的两个文件“aliedit.plugin”、“npalicdo.plugin”放到”~/Library/Internet Plug-Ins文件下
  6. 重启浏览器

Javascript自定义事件

自定义事件在很多地方都会用到,然后跟着书实例了几次,然后详细注释,也算给自己做了一个笔记。

 1 //定义一个自定义事件类
 2 //定义一个实例属性用以单独为每一个实例创建独立的事件集
 3 function EventTarget() {  
 4 
 5     this.handles = {};  
 6 
 7 };
 8 
 9  EventTarget.prototype = {
10 
11      //构造函数的指针指向事件本身
12      constructor: EventTarget, 
13 
14 
15      //添加事件代码的函数,接受两个参数,一个为事件的类型一个为事件的处理程序
16      addHandle: function(type, handle) { 
17 
18 
19         //检测添加的事件类型是否存在
20          if(typeof this.handles[type] == 'undefined'){ 
21 
22 
23          //如果不存在则新创建一个,类型为数组,如果存在则push进数组
24              this.handles[type] = []; 
25          }; 
26 
27 
28          this.handles[type].push(handle); 
29 
30      }, 
31 
32      //事件触发函数,接受一个对象,对象至少包括一个type属性
33      fire: function(event) {  
34 
35 
36          //检测传入进来的对象target属性是否存在,如果没有则设置一个指向当前实例的指针
37          if(!event.target) { 
38              event.target = this; 
39          }; 
40 
41          //检测传入的对象里面事件类型是否存在
42          if(this.handles[event.type] instanceof Array) { 
43 
44 
45              //如果存在则把此事件集赋值给handles变量
46              var handles = this.handles[event.type];  
47 
48 
49              //循环检测事件集中的事件处理程序,并且执行每一个事件处理程序
50              var i;
51              for(i= 0, len = handles.length; i<len; i++) {  
52 
53 
54                  //执行事件处理程序,并且传入event对象
55                  handles[i](event);  
56 
57              }; 
58 
59          } 
60 
61      }, 
62 
63 
64      //删除事件程序,接受两个参数,一个为事件类型,一个为事件处理程序
65      removeHandles: function(type,handle) {  
66 
67 
68          //检测事件类型是否存在
69          if(this.handles[type] instanceof Array) { 
70 
71 
72              //把此事件的引用赋值给handles变量
73              var handles = this.handles[type];  
74 
75 
76              //循环此事件类型集
77              var i;
78              for(i= 0, len = handles.length; i < len; i++) { 
79 
80 
81                  //检查此事件集中每一个事件处理程序是否和传入进来的handle绝对等于。
82                  if(handles[i] === handle) {  
83 
84 
85                  //如果等于跳出当前循环,不等于继续循环
86                      break;  
87 
88                  }; 
89 
90              }; 
91 
92 
93              //通过数组的splice方法,把获取到的事件位置i值,已经数值1传入进splice方法删除事件处理程序。
94              handles.splice(i,1);  
95          }; 
96      }; 
97  };
98     

 

JSON数据格式

JSON全称为:JavaScript Object Notation,中文为:Javascript对象表示法。是Douglas Crockford在2006年作为IETF RFC 4627提交给IETF,它是利用了Javascript中的一些结构模式来表示结构化数据。

JSON优点

  1. Javascript的表示结构
  2. 支持Javascript原生的类型的访问方式
  3. Javascript对象数组和JSON数据格式转换很方便,也就是说可以以javascript对象形式去访问JSON数据格式

JSON容易产生的误解

  1. JSON不是一门编程语言,是它只是一种用来表达数据结构的格式
  2. JSON不是专门针对Javascript语言使用的数据格式,任何语言、程序都可以使用这种格式。
  3. JSON和XML它们是两种不同的数据格式,都用于表达和序列数据。

目前浏览器都支持JSON数据格式,并提供了原生的JSON对象,JSON对象的语法可以表示以下三种类型的值,但是不支持Javascript中的函数、变量、对象实例:

继续阅读

Nodejs微信公众号接口

代码重要部分都已详细注释,test.js为实例,如果启动url请求,那么程序默认对json格式数据友好,如果有特殊需要,请自行修改返回数据的处理格式 大概功能简介为下:

  • this._token 提供token接口
  • this._getURL 提供get请求的url接口
  • this._getPort 提供get请求url的端口接口
  • this._message 提供静态响应消息的接口
  • this._user = []; 提供允许用户接入接口
  • app.listen 提供端口监听方法,此方法提供一个参数即端口号

地址:Click Me

Kail安装Parallels tools

今天在安装虚拟机里面安装kail,在安装虚拟机提供的tools时候提示没有权限,如图: 

后面经过自己证实首先tools是挂载的cdrom,在这样挂载下是没有写权限的(类似于windows下面读取光盘光盘同样不能写入),也就是说只有权限r-x r-x r-x权限,只有有读和执行权限,如图:

但是我通过查看install文件内容,发现里面在执行的过程中会下载文件,也就是说会写文件,所以在这里没有权限,才会出现”permission denied”提示。 解决方法: 把挂载目录里面的所有东西全部拷贝到一个有rwx的目录进行执行

1 cp -r ./* /tmp/tools/ ./install