作者归档:allenm

python中函数参数的默认值和List, dict

Python 的函数定义中,有种带有默认值的参数的语法,例如: def foo( p = [] ): print p 如果我们调用此函数的时候,没有传入参数 p ,那 p 就用默认值。 接下来,我们看看下面这段代码会得到什么结果: def foo( p = [] ): p.append(‘a’) print p foo() foo() 最开始,直觉告诉我,会得到结果: ['a'] ['a'] 但是实际结果是: ['a'] ['a','a'] 原来对于这种形式定义的带默认值的参数,参数的默认值是在函数定义的时候初始化的,当我们使用了 mutable 的对象的时候,我们中途改变了这个对象,在后面的函数调用中,它就不再是写在代码里的那个默认值。显然这样是很混乱的,我们不应该这样做。 python 官方文档也解释了这个事情,并且给出了解决方案,当我们需要一个 mutable 的对象作为默认值的时候,我们可以这样做: … 继续阅读

发表在 python | 8 条评论

解放你的 ALT(CMD)+TAB 键吧

做前端开发的童鞋们,最常敲的一组键就是 alt(cmd)+tab 然后紧接着是 F5 或者 ctrl(cmd) + r 了吧。这是在干什么?写好一段样式看看效果啊。 那我们能不能边写样式,边让浏览器自动加载最新的 css 呢?当然是可以的了,业界已经有很多这样的工具了。比如国内前段时间曾经成功推广过的 F5 ,还有国外的 live.js xrefresh 等工具。 但是这些工具都没有适合我的。F5 需要用它提供的 HTTP 服务,但是对于一个大型站点来说,静态资源都是单独管理的,页面上一般都写的绝对 URL 使用 cookie free 的域名或者 CDN 的域名。为了开发方便,我们一般会用 apache 在本地搭一个 style 环境,像我们现在,因为经常需要跨应用访问 css, js 这些,本地环境不一定有这些文件,还需要用 url rewrite 把这些文件 rewrite 到一个公共环境去。这些复杂功能都是 … 继续阅读

发表在 javascript | 14 条评论

jQuery deferred 对象的 promise 方法

jQuery 从 1.5 版本引入了 deferred 对象,这是一个基于 CommonJS Promises/A 的设计,为了方便异步操作,大家都知道,在 js 中,异步代码是非常的多。 这篇博客不是来详细讲解 $.Dererred 的,阮一峰 的博客里有一篇博客详细介绍了这个。但是在这篇博客中,关于 promise() 这个方法的讲解却是错误的,我发现这个是因为我徒弟去学习这个的时候,看了这篇文章,然后我让他给我讲述的时候,发现了这个错误。所以我想写篇 blog 来说明下。 update(2012.1.2):  我针对此问题给一峰发了 email, 他已经针对下面的问题进行了更新,下面的引用来自他最初的版本。现在他博客中对 promise() 的讲解是正确的,如果想了解整个  Deferred 对象,建议直接移步他的博客中学习。同时感谢阮一峰发现的我这篇博客中的一个小错误,最后面的那段代码,现在已经修复。 下面是引用自阮一峰的博客: 这里有两个地方需要注意。 首先,最后一行不能直接返回dtd,必须返回dtd.promise()。原因是jQuery规定,任意一个deferred对象有三种执行状态—-未完成,已完成和已失败。如果直接返回dtd,$.when()的默认执行状态为”已完成”,立即触发后面的done()方法,这就失去回调函数的作用了。dtd.promise()的目的,就是保证目前的执行状态—-也就是”未完成”—-不变,从而确保只有操作完成后,才会触发回调函数。 下面是 jQuery 的官方文档: The deferred.promise() method allows an asynchronous function to prevent other code from … 继续阅读

发表在 javascript, Jquery | 留下评论

2011个人总结

在开始写这篇博客的时候,还有20分钟就要到2012了。我觉得我还是需要来总结一下的,仔细回顾一下这一年我做了什么,什么做好了,什么没做好。 首先,打开了一年前这个时间写下的日志, 先看了下希望能做到的事情。第一条,购入一台Mac,这个完成了,在3月份买入的,这个投资现在看来是值得的。第二条,做了,但是做的不够好,开始有意识的节流,但是积蓄还是很少,这个来年继续做吧。第三条,尝试读了心理学的,还尝试读了小说,第一次读完一个长篇小说《1Q84》。第四条,几乎没做,不过在这个夏天,还是通过游泳、瑜伽、普拉提成功减肥10斤左右。第五条,这一年我总共写了8篇博客,太少了。第六条,我还是单身。 这一年,我做了什么呢?现在想起来,好像还真是充满坎坷呢。是本命年的缘故吗?不,我从来不信这个,连红内裤都没穿。这也许就是成长路上必须经历的吧。先是信心满满的开始做一个大项目,和团队合作的很愉快,但是在项目一期快完成的时候,项目却被停了,所有的努力都白费了,和失去了自己心爱的东西是一样的感觉。不过不管怎么样,也是有收获的,比如在技术上的积累,以及认识了一些朋友。 这个半途而废的项目结束之后,就开始做了很长一段时间小需求,还遇到了几个非常不靠谱的人,然后发了几次脾气,被投诉了几次。那段时间还被老大拉去谈话,说我这个要改。哎,我也不想为了这些事情去和别人吵架,但是每次遇到这些不靠谱的人的时候,我就很难忍住,总觉得和他们合作太浪费我的生命了。 不过还好,这样的日子不算太长,接下来由于架构调整,就去做我的阿里这个产品线了。下半年的大部分日子都在做这个,状态不错,主要是这个产品线的其他同事都比较靠谱,和靠谱的人合作,心情和效率都会很不错。接下来还要继续在这个产品线,我也有一些关于这个产品线的前端方面的规划,手头项目忙完,会好好整理一下。 下半年,还有一个项目对我的锻炼也蛮大,是 web IM 项目,这个项目前期,我就想了很多,然后我想根据需求想了一整套设计方案,来适应当前的应用场景和未来的应用场景,然后去给项目组其他成员讲这些,得到了一致认同。不过悲剧的是,项目中途遇到了一些技术难题(主要不是我负责的这块),然后当时很难搞定,就暂停了,这个我也有一部分这人,在项目前期,没有认真考察这些技术的可靠性,就想当然的开始编码了。还好现在这些已经有了进展,不过是其他同事在跟进,我实在是抽不出时间了。 好了,工作上的事情就到此为止,再回顾下生活上有什么进展吧。 首先,到现在我还是单身,好像也从来没怎么去努力摆脱这个现状,这个要批评自己了,2012要好好努力,哪怕世界毁灭,也希望能有一个心爱的人和我一起欣赏最后的风景。 一个人在外,每次有朋友来杭州都特别高兴,今年在杭州还是见了不少朋友,也是你们,让我在杭州的生活增添了不少色彩。 今年去了上海,去了南京,去找老朋友们玩,每次都玩的很开心,和这些老朋友们相聚,总是会回忆起学校的美好时光。遗憾的是,一直说的要去苏州的,甚至有次酒店都定好了,结果由于一些原因没有去,就再也没去过了,现在苗苗都走了,更不会去了。 另外今年还和同事们一起去了徽杭古道,一起去了舟山溗泗,一起去了西塘,每次都玩的很开心,感谢有这么一群可爱的同事们。去徽杭古道让我体验了一下睡帐篷的感觉。去溗泗我第一次下海水游泳,第一次尝到了海水的味道。西塘是我去的第一个江南古镇,虽然我觉得最好玩的是晚上大家在酒店玩狼人。 2012, 我要见更多的老朋友,去更多的地方看看,也要带爸妈来杭州看看。 2012,我要继续减肥,为了自己的健康,希望不再有脂肪肝。 2012,我要阅读更多种类的书籍,来完善自己。 2012,我要学会更合理的消费,开源节流。 2012,我要继续写博客,继续分享我认为值得分享的东西。 2012,我要在技术上精益求精,大胆尝试新技术,让新技术能和产品完美结合起来。 2012,我要学会控制自己的情绪,但是对待事情要同样的认真。 2012,我不要再一直一个人过。

发表在 未分类 | 8 条评论

Mac 在无法启动的情况下备份数据

上周,我的 MBP 悲剧的突然出现了无法启动的情况,启动的时候,出现一个进度条,然后这个进度条走不完,就会被关机。阅读说明书上的方法,先进从 recovery 盘启动,用磁盘工具检查硬盘,可以发现磁盘错误,但是尝试紧急恢复总是失败,然后又尝试用系统盘进入磁盘工具检查硬盘,结果一样,可以看到错误,但是无法修复。这个时候,我决定格式化硬盘重装系统了,但是数据还没备份出来呢,这个时候也没办法进入系统,没办法挂载这块有问题的硬盘。后来经过其他人的提示,想到了 single-user mode ,试了下,还真成功备份出数据来了。不过有一些技巧,下面记录下在 single-user mode 环境下,如果挂载移动硬盘用来转移数据。 1,连接好移动硬盘,然后启动 Mac 到 single-user mode (启动的时候按住 command + s ),记住,一定要在启动前连接好移动硬盘,中途插上,我试了好几次都没成功。 2,按照提示,输入 /sbin/mount -uw / 和 /sbin/fsck -fy 两个命令用来用读写模式挂载硬盘和检查磁盘。这个时候,如果你的情况和我一样,这个时候 /sbin/fsck -fy 应该会报出错误,但是没关系,接着往下操作。 3,执行 ls /Volumes 这个命令将显示所有被挂载的磁盘,你的移动硬盘或者U盘很可能还没在这里显示,那就说明还没有被挂载。没关系,如果没被挂载,我们先在这里创建一个挂载点。例如: mkdir /Volumes/usb 4,我们需要确定挂载的移动存储设备的磁盘编号: ls … 继续阅读

发表在 未分类 | 10 条评论

WebSocket Protocol 介绍与实现

今天在方凳会上分享了 websocket protocol以及简单实现,PPT 和代码都放出来,有兴趣的可以围观 Websocket protocol overview View more presentations from allenmeng 然后用 python 简单的实现了 websocket server,代码如下。在网上找的很多代码,都不再兼容 websocket draft 10, 因为 websocket 的草案进化太快,下面的代码是按照 draft10 写的。 chrome 14+ , firefox 7/8 都没有问题。 关于 websocket 草案,请阅读 http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10   另外推荐一个 Python 的 websocket … 继续阅读

发表在 javascript, python, WEB | 标签为 , | 留下评论

修复 MOTO milestone 电源键失灵(教程)

教程在后面,请先让我吐会槽 :) 去年9月份买的MOTO Milestone,8月份的时候,突然出现了电源键失灵的情况,按下去没有回馈,机器也没反应,好在Milestone 是有滑盖的,滑开键盘也可以点亮屏幕,完成解锁动作。至于开机,平时很少有这样的需求,万一不小心关机,可以用数据线连接电脑,会激活手机,完成开机。 结果中秋节的时候,去南京找两个朋友完,早上出门后,突然不知道怎么回事关机了,然后由于没有背电脑,就开不了机了,还约了一个高中同学下午见面的,这下才觉得非常不能忍受这个按键坏掉了。想到淘宝上的卖家承诺的一年保修,打算尝试下。 联系了店铺的客服,客服直接让我把手机给他们寄过去维修,态度还蛮好,我就放心的把手机按照规定写好字条给他们寄了过去,大约一周后,收到了寄回来的手机,确实修复了这个按键。但是用了会儿后发现,手机振动失效了,拿下电池观察了下,发现里程碑的振动器是可以从电池仓看到的,发现被一小块海绵堵住了,估计是维修人员技术太次,没注意留在机器里的,我自己用个回形针把它勾出来了,就好了。 修好后第二天,按键又坏掉鸟。。。两天大概按了20次左右吧,因为已经养成解说推开键盘的习惯了。晚上亲眼看见一个金属碗状的原件从手机里掉出来,当时就先把这个原件保存下来,第二天联系售后,售后说肯定是我排线坏了什么的,我说这个按键明显按下去没有回馈了,和好的时候是不一样的,售后说要想修可以再寄回来,费用还是 AA。随后此售后还说我怀疑他们的修理能力,笑话,这种维修质量,智商没问题的人都会怀疑你们吧。我哪儿再敢寄回去呢,于是决定自己动手,丰衣足食。 首先,在网上搜索了下 milestone 拆机图,找到了这个链接 http://moto.zol.com.cn/167/295_1663342.html 当然,要拆掉机器,你肯定需要工具才行,手机的螺丝钉和常见的不一样,需要专业的工具,所以你还需要这样的工具(我这个是很早前买的,就是为了拆各种电子设备的) 有了此工具,你就可以方便的按照上面帖子,开始拆机了,不要被那个拆机教程吓到了,我们只是拆开外壳就可以完成按键的维修了,不需要大卸八块。 拆掉后盖,就可以拿掉所有实体按键了,其实按键的远离很简单,下面板子上有两个未接触起来的触头,实体按键和这个板子中间隔了一个碗状的金属片,按下按键的时候,这个碗状的金属片会把下面两个触头链接起来。 下面是我的维修的时候的图片。 那个黄色的东西就是我说的碗状的金属片了,最后一张图,是正常的音量键上的。找到原因,就好维修了,立马下楼去超市买了双面胶,回来把那个金属片固定在它应该在的位置上,接上电池,测试OK,然后装上后盖,就可以用了。 需要特别注意的地方:电池仓下面的那个喇叭外面的黄色金属条,很软很软哦,小心点拆,我的就被我撕裂了。。。 如果你的那个金属碗状物都找不到了,试试求助淘宝,看看能不能买到这个玩意儿吧。 下次再也不相信淘宝上的 JS了。爆下这个JS的店铺名:南京大学生手机网,下次再也不在这个店铺买了。        

发表在 生活 | 标签为 , , , | 7 条评论

localStorage in HTML5(2)

上一篇博客简单的介绍了下 localStorage,并且对各个浏览器的存储空间大小做了简单的测试。在上篇博客到这篇博客期间,世界也发生了很多变化,IE9 和 firefox4 正式版都发布了。于是我也对这两个新的浏览器进行了测试,关于 localStorage 的, IE9 和 IE8 表现一致,FF4 和 FF3.6 表现一致,和上篇博客中介绍的一样,FF4 在 Mac 下和 WIN 下表现仍然不一致,参考上篇博客。同时,给出我写的测试存储空间大小的页面,你可以自己来试试:http://lab.allenm.me/html5/storage/maxtest.html 除了最基本的和使用 cookie 一样使用 localStorage,我们还能用它来做什么呢? 如果你看过 localStorage 的文档,你应该注意到了我们在改变 localStorage 中存储的数据的时候,会触发一个 storage 事件: interface StorageEvent : Event { readonly attribute DOMString key; readonly … 继续阅读

发表在 javascript, 未分类 | 标签为 , | 一条评论

localStorage in HTML5(1)

HTML5 中的 localStorage 我相信 web developer 们,都听说过了吧。目前 chrome,firefox,opera,safari, IE8 都支持此属性,注意 IE8 也支持,那就是说,如果你的网站用户不是太低端,起码有一半以上的用户的浏览器是支持 localStorage 特性的。各个浏览器分配给每个“源(region)”的 localStorage 空间至少为 5M(具体数值请看稍后讨论),对于想开始使用 HTML5 的人们来说,这个是个不错的开始。 localStorage 使用方式也非常简单,有 setItem, getItem, removeItem,key, clear 5个方法,和 length 一个属性。定义如下: interface Storage { readonly attribute unsigned long length; DOMString key(in unsigned long … 继续阅读

发表在 javascript, WEB | 标签为 , | 6 条评论

2011春运,该怎么买火车票?

又到了年关了,在外辛辛苦苦一年的游子们终于可以回家看看爹娘,看看家乡。可是春运啊,一票难求,那个什么部说的什么时候解决一票难求的新闻,实在是没法让心信,早就不相信此类新闻了。 可是家要回,票要买。那要怎么买呢?我在买火车票前一个星期的时候,写了一个自动抓取 58 同城和百姓网上的转让信息的脚本,然后放在 VPS 上。用 cron 定时每10分钟执行一次,在买票的那两天,我甚至提高到3分钟一次。具体脚本怎么写,我就不说了,没什么技术含量。抓回 HTML 用正则匹配有用的信息,和上次抓回来的比较,有更新,就发个 email 通知就可以了。可是效果怎么样呢?信息获取的到是蛮及时,可是,打过去绝大部分都是黄牛,而且都是低等黄牛,开口就加300 ,票面钱才 300 呢。一到这个时候,58 同城,赶集网,百姓网上的这些转让信息基本全部是黄牛,所以我没有靠这个买到票。不排除有真正是行程原因走不了的,但是一个个的试,太累了。 那怎么办?尝试电话订票吧,现在基本全国各地都开通了电话订票,电话订票也是有技巧的,要在发售时间前10分钟左右打进去才有可能定到票,比如杭州12点发售,那就11.50的时候就打进去,打不进就一直重拨,加上海的区号重播,打进去后,先不要选择,随便按按无关紧要的听听,看准时间,到了12点,马上开始操作订票,我看到有几个老乡这样订到了票。如果你回家的线路不是太紧张,就更容易了,同事有下午4点半打进去定到了卧铺的。我因为各种原因错过了订票的最佳时机,基本20分钟后就订不到武汉方向的了,没有通过此方式定到票。 其实最容易买到票的方法,是找黄牛。。没办法,虽然大家都恨黄牛,但是这个时候,还是黄牛管用啊,要找靠谱的黄牛,每个公司都会流传一些口碑很好的黄牛吧,就找他们就对了,加的钱也不多,票也靠谱,这次我的大多数同事都是这样定到的。 对于上班族来说,去排队买票是最不划算的事情了,大半夜就要去排队,还不知道要排多少个小时,耗时耗体力,不划算,可能还要请假,有请假损失的钱还不如花钱买黄牛票了。 我这次的票,是一个人买的黄牛票,后来买到了时间更合适的黄牛票,然后转手的。 综上所述,买火车票,要多方面行动,电话订票,黄牛票,转让票都要兼顾,有票了不妨先拿下,有更好的可以转手,这个时间的票很好转。另外要多和老乡们交流,一般大公司会有老乡群什么的,大家在一起交流车票信息,有利于找到更靠谱的车票。 什么时候才能解决春运问题,不敢想,还是自己努力挣钱,直接飞机回去吧,不用这么痛苦。 买票搞的身心疲惫,白天的工作时间都用来买票了,现在要开始加班把这些补回来,要不然项目完不成了。真杯具。

发表在 生活 | 3 条评论