PHPStrom 写Go程序
写在前面
当习惯了PHPStrom之后,写啥程序都会首先想到使用这个IDE;或许你会说,写Go不需要IDE,但是俺就喜欢使用IDE;于是,在PHPStrom的插件管理中搜到了一个叫做golang的插件;创建一个新的Go工程时,就可以选择创建一个Go工程了(当然,Go环境需要提前配置哦),而且会自动创建bin pkg src目录,好生专业。
问题
当我想把自己的Go代码使用github来管理时,我遇到了问题:
- 我想基于github上拉下来的目录创建一个Go工程
- golang插件不允许在一个已存在的目录上创建Go工程
- PHPStrom如果不用golang插件创建Go工程,则没有一个地方可以设置加载Go类库
- 如果先使用golang插件创建Go工程,再从github上拉取代码,则git会因为目录非空而不进行clone
解决办法
办法1:
- 创建Go工程(如果不喜欢自动创建的目录,可以直接删掉,我就是这样做的)
- 使用git clone github上的代码到一个非工程的目录
- 手动copy github代码目录(含 .git 目录,方便在IDE中提交代码)到Go工程中某个你喜欢的目录(甚至是根目录)
办法2:
- git clone github上的代码到你喜欢的目录(一般是$GOPATH/src下的某个目录)
- 使用PHPStrom打开该目录,则该目录下回生成 .idea 目录
- 对 idea/misc.xml 做如下修改后,重新打开该工程,就会发现Go类库已经加载了
<component name=”ProjectRootManager” version=”2″ />
为
<component name=”ProjectRootManager” version=”2″ project-jdk-name=”Go SDK go1.3 windows/amd64″ project-jdk-type=”Google Go SDK” />
学习一下sqlite
- sqlite中的锁: http://www.cnblogs.com/stephen-liu74/archive/2012/03/02/2328753.html
- sqlite中的临时文件: http://www.cnblogs.com/stephen-liu74/archive/2012/03/01/2328483.html
- http://www.cnblogs.com/stephen-liu74/category/348367.html
问题:
- sqlite查询时能否明确指定不加锁?
PHP中信号的处理
缘起
刚刚了解PHP中如何处理信号的时候,我认识了declare(ticks=1),就这样,我便给自己挖了个坑;终于有一天,我发现自己的程序总是有大量的如下系统调用:
rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
虽然没觉得这个东西开销有多大,但至少是不应该的。
分析
当声明 了declare(ticks=1); PHP会在每执行1条可计时的低级语句后就执行上面的信号处理的系统调用。
解决办法
不使用declare,代之以在合适的地方调用 pcntl_signal_dispatch(); (该函数在PHP5.3才开始有的),该函数触发的就是上面提到的系统调用,这样就可以使得该系统调用不会太频繁
为什么修改密码时需要重新输入旧密码?
如题:
回答:
- 加入小张登录账号A后,临时离开一下,这是小王看见小张没关电脑,想把小张的A账号据为己有,将密码修改为自己的,如果需要输入原密码,则,这坏事儿就干不成了
- 对于已登录用户,如果修改密码不需要输入原密码,则很容易被跨站请求攻击的
结论:
不仅仅是修改密码,其它一些重要操作都应该是这样的,就比如,浏览器记录了你大量密码,而且,浏览器提供了查询明文密码的功能,前提是,你必须验证操作系统账号的密码;(其实,只要做一次登录并且抓包就能看到了)
关于Cookie的思考
问题
如何能使得一些信息可以存储更小?
分析
常见的存储方式:
key_len + key + value_len + value + …
优化方法
- 如果key是定长的,则: key_len 可以省略
- 如果对key编号,则,key可以更短
- 如果按顺序存储,则key_len 、key都可以省略
- 如果value是定长的,则value_len 可以省略; 延伸: 对于定长的value,省略value_len,非定常的value,不省略
- 如果顺序存储,对于空字段也要保留1个字节的value_len (value_len = 0),这里可以设计1个元字段,标识哪些字段为空(或非空),这样就不再需要1个字节的value_len 了
- 设置默认值; 对于出现次数频繁的value,设置为默认值,不做存储,而且,如果出现频繁的value为多个,则可以通过2bit的信息标明默认值为1、2、3; 不宜设置太多的默认值,那样就不会节省空间了
优化原理
- 信息没有丢失,而是藏在了逻辑(或代码)当中
Javascript中的for-in循环和hasOwnProperty
转自: http://www.csser.com/board/4f3f516e38a5ebc9780004f8
avascript中的for-in循环和hasOwnProperty
使用hasOwnProperty进行过滤
与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in 不会读取不可枚举属性,如数组的length属性。
1 2 3 4 5 6 7 |
// 扩展 Object.prototype Object.prototype.bar = 1; var foo = {moo: 2}; for(var i in foo) { console.log(i); // 输出 bar 和 moo } |
我们不可能改变 for in 循环的行为,当需要对循环体内某些属性进行过滤时,可以利用Object.prototype的hasOwnProperty方法来完成。
提示:因为 for in 循环总是遍历整个原型链,所以当遍历多继承的对象时效率较低。
使用 hasOwnProperty 进行过滤
1 2 3 4 5 6 |
// 仍旧针对上例的foo对象 for (var i in foo) { if (foo.hasOwnProperty(i)) { console.log(i); } } |
例子中因为使用了hasOwnProperty,最终输出moo;如果忽略 hasOwnProperty ,代码将会输出非预期结果,因为本地原型(如Object.prototype)已经被扩展了。
Prototype框架就是扩展Javascript原始对象的一个类库,并被广泛使用,其缺点也很明显,当框架引入后,如果不使用 hasOwnProperty 进行过滤判断,输出结果保证不是你想要的。
最佳实践
推荐在 for in 时,总是使用 hasOwnProperty 进行判断,没人可以保证运行的代码环境是否被污染过。
hasOwnProperty
为了检查某个对象是否拥有不在原型链上的自定义属性,就有必要用到 hasOwnProperty 方法,任何一个对象都具有该方法,它继承自 Object.prototype。
提示:我们无法完全检测某个属性是否是undefined,因为属性有可能存在,但其值为undefined。hasOwnProperty 是Javascript中唯一一个可以处理对象属性而不遍历原型链的方法。
1 2 3 4 5 6 7 8 9 |
// 扩展 Object.prototype Object.prototype.bar = 1; var foo = {goo: undefined}; foo.bar; // 1 'bar' in foo; // true foo.hasOwnProperty('bar'); // false foo.hasOwnProperty('goo'); // true |
只有 hasOwnProperty 给出了正确的预期结果,当遍历对象的属性时这是很有必要的,没有其它办法来排除定义在对象原型链上的属性。
hasOwnProperty 作为属性
Javascript 并没有保护 hasOwnProperty 为关键字或保留字,因此,如果某个对象拥有同名的属性,就有必要利用扩展的 hasOwnProperty 来获取正确结果。
1 2 3 4 5 6 7 8 9 10 11 |
var foo = { hasOwnProperty: function() { return false; }, bar: 'Here be dragons' }; foo.hasOwnProperty('bar'); // 总是返回 false // 使用另一个 hasOwnProperty 并将 this 设置为 foo 来调用它 {}.hasOwnProperty.call(foo, 'bar'); // true |
小结
当检测某个对象是否拥有某个属性时,hasOwnProperty 是唯一可以完成这一任务的方法,在 for in 循环时,建议增加 hasOwnProperty 进行判断,可以有效避免扩展本地原型而引起的错误。
自动代理设置之pac
相关文章:http://bbs.51cto.com/thread-1063691-1-1.html
如果自己有一个代理服务器,可以有选择地对某些utl走代理
http://paperjs.org/
emberjs
官方地址: http://emberjs.com/
简介: A FRAMEWORK FOR CREATING AMBITIOUS WEB APPLICATIONS.
你见过这样的script吗?
感想:
有想法并且去实现了,就是好的