PS/AI切图的时候存储图片格式可以选择gif,jpg,png-8,png-24这几种格式.

这里有介绍JPG/PNG/GIF图片原理

jpg更适合照片,容易失真,不支持透明,所以色彩丰富的大的图片用jpg.

png-8无损格式,支持纯透明,不支持Alpha半透明,尺寸小的,色彩不多的可以用png-8

png-24和png-8类似,但存储方式不一样,png-24支持半透明.

gif是压缩比高,适合小图片和动图,支持透明.

git add 或者commit,push的时候发现某个文件夹不能被add,commit,提示当前文件夹 modified:xxx(modified content)

去git远程仓库查看,这个目录是空的.

打开本地仓库的目录,发现xxx目录下有个.git的目录,影响了其父目录的trace.

解决办法:删除.git目录,重新提交

Windows下的Fiddler是神器,具备抓包,代理,文件替换等各种功能。但因为Fiddler是由.netframework开发的,不能在mac下跑。

虽然官方也出过fiddler的mac版,但不好用。所以在寻求mac下的替换工具时找到了这个Mitmproxy。

安装

brew install mitmproxy

启动

绑定你电脑的IP和Port, 需要抓移动端数据包时,在移动端wifi连接时设置该ip和port的代理.

mitmproxy -b 192.168.1.41 -p 8888

效果

mitmproxylist

mitmproxydetail

抓https的包

要捕获https证书,就得解决证书认证的问题,因此需要在通信发生的客户端安装证书,并且设置为受信任的根证书颁布机构。

~/.mitmproxy文件夹,其中该文件下包含4个文件,这就是我们要的证书了。

  mitmproxy-ca.pem 私钥

  mitmproxy-ca-cert.pem 非windows平台使用

  mitmproxy-ca-cert.p12 windows上使用

  mitmproxy-ca-cert.cer 与mitmproxy-ca-cert.pem相同,android上使用

  1. Firefox上安装

  preferences-Advanced-Encryption-View Certificates-Import (mitmproxy-ca-cert.pem)-trust this CA to identify web sites

  2. chrome上安装

  设置-高级设置-HTTPS/SSL-管理证书-受信任的根证书颁发机构-导入mitmproxy-ca-cert.pem

  2. osx上安装

  双击mitmproxy-ca-cert.pem - always trust

  3.windows7上安装

  双击mitmproxy-ca-cert.p12-next-next-将所有的证书放入下列存储-受信任的根证书发布机构

  4.iOS上安装

  将mitmproxy-ca-cert.pem发送到iphone邮箱里,通过浏览器访问/邮件附件

  我将证书放在了vps上以供下载

  http://tanjiti.com/crt/mitmproxy-ca-cert.pem mitmproxy iOS

  http://tanjiti.com/crt/mitmproxy-ca-cert.cer mitmproxy android

  http://tanjiti.com/crt/mitmproxy-ca-cert.p12 windows

  http://tanjiti.com/crt/PortSwigger.cer BurpSuite (burpsuite的证书,随便附上)

  5.iOS模拟器上安装

  git clone https://github.com/ADVTOOLS/ADVTrustStore.gitcd ADVTrustStore/

  DANI-LEE-2:ADVTrustStore danqingdani$ python iosCertTrustManager.py -a ~/iostools/mitmproxy-ca-cert.pem

  subject= CN = mitmproxy, O = mitmproxyImport certificate to iPhone/iPad simulator v5.1 [y/N] yImporting to /Users/danqingdani/Library/Application Support/iPhone Simulator/5.1/Library/Keychains/TrustStore.sqlite3 Certificate added

  实际上上面的操作就是给 ~/Library/Application\ Support/iPhone\ Simulator/5.1/Library/Keychains/TrustStore.sqlite3 数据库中表tsettings表中插入证书数据

  6.Android上安装

  将mitmproxy-ca-cert.cer 放到sdcard根目录下

  选择设置-安全和隐私-从存储设备安装证书

参考资料:mitmproxy——中间人攻击的神器

今天将webstorm更新到了11,全新的icon,同样是要激活,发现一个超方便的方式,不过原理木有搞清楚。

webstorm菜单栏【Help】->【Register】,在弹出的对话框中选中【License server】

地址输入:http://idea.lanyus.com/

如下图

webstormregister

问题描述

前两天生产上发现某地区的部分用户手机扫码打开页面出现【自定义错误模块无法识别此错误】。

排查过程

1.前端代码中并没有过这样的处理,所以就先查服务接口是否有这样的报错。

2.但发现服务接口并没有异常,于是去看页面请求的日志,发现当前页面出现了大量的429错。

3.http 的 429 错误码是Too Many Request.因为请求太多服务器拒绝了该IP的访问。查了下被拒绝的IP,刚好地区与故障用户的地区一致。

4.问题基本就是这个了,服务器返回了429的错误码,不像404,502这些常见的,用户的手机浏览器一般都没有去处理这个错误码,于是返回的【自定义错误模块无法识别此错误】

5.和业务反映原因,可能是手机连的wifi,出口ip一致,请求过多导致服务器拒绝,建议用户扫码时用移动网络。

6.业务反馈说,用户确实用的是移动网络啊。

  1. = =!继续查,发现曾经那个地方有爬虫访问公司网络,那个移动基站的IP被封了20几个。

问题描述(Issue)

it throws “Cannot find module ‘./lib’” when I run “npm install -g xxx” command.

Mac升级到node 5.0之后,执行npm install命令出现Cannot find module ‘./lib’的错误。

问题原因(Cause)

The current theory is that a change made to the OS X installer for Node is causing two npm installations to be overlaid, which is understandably causing problems.

解决办法(Solution)

If you remove /usr/local/lib/node_modules/npm and rerun the Node 5.0 installer, you should be left with a working npm.

移除 /usr/local/lib/node_modules/npm目录,重装node 5.0.

参考(Refer)

Error with install of npm 3 via Node.js v5

今天设置环境变量设置错了,导致整个mac的终端命令(sudo,ls,open,vi等)都不能用了。

执行下面的命令,保证一些默认的可以用:

export PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/opt/local/sbin:/opt/local/sbin

之后再设置你要的环境变量

vim ~/.bash_profile

立即生效命令

source ~/.bash_profile

问题描述

用typeof来检查一个变量,不论是array还是object,都将返回‘object’。那么怎样判断一个JavaScript变量是array还是obiect?

方案

  1. 通过该变量的length属性。

    Array类型有length属性,得到是>=0的数值。Object的length是undefined。

    但当该对象自己有length属性时,这个方法失效。

  2. 通过instanceof 方法

    a instanceof Array 是一个语法糖,相当于 a.constructor == Array.

    这种方法在多个frame的环境下失效,因为每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链。

  3. Array.isArray()

    ECMAScript 5的写法,绝大多数的浏览器支持这种方式,早期的一些浏览器不支持。

  4. 用prototype的call方法来实现

    这也是Jquery的实现,推荐采用这种。

    因为js中每一个function中都会有call方法和prototype属性,并且js在Object.prototype中的tostring函数上做了一个封装,

    就是调用toString.call后,会返回[object constructorName]的字符串格式,这里的constructorName就是call参数的函数名

Object.prototype.toString.call(arr) == '[object Array]'

keytool的命令,可以获取keystore中的很多信息。

cmd 到用户根目录下的.android目录。

cd .android

将你的keystore(比如叫yourdebug.keystore)文件拷到.android目录,然后执行命令:

keytool -list -v -keystore yourdebug.keystore