The perfect is the enemy of the good. The best is the enemy of the good. – Voltaire
Perfectionism kills me.
you are coming a long way…
The perfect is the enemy of the good. The best is the enemy of the good. – Voltaire
Perfectionism kills me.
回复一位敬佩的前端工程师kejun的一篇博文,更好的标注UI规格
我能理解作为前端工程师为什么希望这样标注,但是这些标注的实用价值很低,原因如下:
“Three Times a Lady” is a 1978 single from the funk/soul band the Commodores, from their 1978 album Natural High. It was produced by James Anthony Carmichael and the Commodores and it was the most popular track of the album.
In an appearance on The Early Show on June 12, 2009, Richie said he was inspired to write it by a comment his father made about his mother. Reportedly his father said to his mother “I love you. I want you. I need you. Forever” hence the three times. It became the Commodores’s first Billboard Hot 100 number-one hit, topping the chart for two weeks on August 12, 1978. [2]. It was also the only Motown song to reach the Top 10 that year. The song also spent three weeks at #1 on the adult contemporary chart. It was one of only a few Motown singles to reach the top spot in the UK. In the years since the Commodores had started in 1974 it has been one of their most emotional songs since “You Don’t Know That I Know” from the album Caught in the Act in 1975.
The original Commodores’ version of the song was included as the final track on Lionel Richie’s greatest hits compilation album Back To Front, released in 1992.
http://en.wikipedia.org/wiki/Three_Times_a_Lady
这两天要用我的MBP(Mid 2009 MC118)刻录一张DVD却总是失败,告诉我使用的DVD盘片不兼容,或者刻录速度太快(我试验了1, 2, 4, 8都不行),让我尝试其它品牌的盘片。但是之前我用的威宝的日产DVD-R一直没有这个问题,所以查看了一下system.log,发现报错的内容是这样的:
Disk Utility[378]: Disk Utility: Burn to DVD-R (TYG02) media in MATSHITA DVD-R UJ-868 (KB19) via ATAPI failed with error 0x8002006D and sense (3/73/03 Medium Error, Power calibration area error).
Google到了很多信息,讨论的很复杂,大意就是光驱坏掉了,或者锁了区码。看到了这篇比较有用Can’t burn DVD’s with a MacBook Pro?,说先试试清理尘土。
然后就打开了MBP后盖在光驱的几个角和缝的地方用皮老虎吹了一下(如果你的嘴很有力且不乱喷吐沫星子,那么也可以用嘴吹,但是这样很危险……),尘土还是挺多的。而后开机刻录就好了。
最近发现我访问一些站点的时候(如昨晚访问www.apple.com的时候)我发现页面弹出广告,但问题是apple.com的英文网站是不可能弹出中文广告的。
今天我又重现了这个问题,仔细看了下出问题的原因,页面的url没有变,dns也是正常的。应该只是http请求被劫持。可恨的是它不是注入式的劫持(也就是将广告的代码插入到</body>之前,而是使用了非常简单的iframe劫持,这种初级的劫持手段会造成很多网站访问不正常。可恨的是,在这样的劫持下你的个人隐私就完全没有保证了。代码是这样的:
<html>
<meta http-equiv='Pragma' content='no-cache'><head><title></title>
<script LangUage='JavaScript'>
try{var tmp=parent.window.location.href}catch(e){window.location.reload();}
</script>
</head>
<frameset framespacing=0 border=0 rows='*,0' frameborder=0 onload="window.lxmainframe.location='http://61.172.192.88/city/index.html?url='+window.location;"><frame name='lxmainframe' src='about:blank' scrolling='auto'><frame name='lxblankframe' src='about:blank' scrolling='no'></frameset>
</html>
作为一个mac user,我显然不是中病毒了。google一下也发现很多人都遇到了“京城时讯”的绑架。我刚才给10010打电话投诉,还好虽然停机保号但是可以拨10010。先是被转到网络部,让我自己到www.jcxinxi.com自己注销,让我挂电话。我马上试验,发现根本找不到她说的登录的地方,让她们告诉我详细注销步骤,她让我等了有3分钟左右才告诉我需要点那个“会员注销”。然后我又继续让她转接专门负责投诉的“上级”,那个上级向我解释了“给我看广告是为我好,这个服务是免费赠送以后”,我只能告诉他我办包年服务的时候的单子上面没有说网通可以免费赠送给我这个服务的时候才客气的让我留下联系方式说再联系。我知道这种事情“don’t blame the people, blame the game.”,所以我接受人家的电话服务。把这倒霉的该死的差劲ADSL服务Blame到底,投诉到底!
我投诉的时候提了几个理由:
Open Party App是我们在为OpenParty开发的新网站,上面集成了会员注册报名参加活动等功能。我们把他放在Google Code上面以开源crowd sourcing的方式开发。Django我是业余水平,在这个项目里面继续磨练。上周末正好有空开发,顺便重构了一下代码,我把其中发现的一些bad smell纪录下来,给和我们一样的Django业余团队参考。
这是错误的,本意是{% if event.is_upcoming %},因为它本身就是个Boolean
gray_link是一个为样式命名的css class,但是css class的名字应该是一个结构语义的东西。也就是说css class应该是What it is而不是How it looks like。可以命名为<a class=”who-participated”>看看谁参加了活动</a>
使用locals()我上次就发过邮件,这样做是不好的。因为locals会鼓励你创建很多没有意义的本地变量,将它们一股脑的传递到template。造成template里面由很多的判断逻辑,但是这些逻辑本身应该是在models层搞定的。当你从template重构这些晦涩复杂的判断逻辑的时候,你会发现问题可能就出在views.py里面那一个locals()。没错,我说的就是topics.html这个模版,看看判断是否可以投票的那部分逻辑,实在是太复杂了,我不得不给他写测试,花了不少的时间重构。在模版里面你总是会思考一些措辞和样式的问题,而忘记了分支逻辑的复杂,这种代码经常是有很多的bug的,而且它们非常难于维护和修复。一定要将这种复杂度封装在model层并进行测试才可以。
我看到很多if model.is_accepted == True: return True; else: return False这样的代码。我是在不理解为什么可能出现这样的代码……请注意这个和错误1差不多,都属于非常坏的重复代码。
请注意,我们没有赶时间。我们不太需要临时性的代码,要随时注意代码的可维护性,因为我们是一个团队。测试就是代码的文档,请注意尽量尝试测试先行,如果不行也注意让你的model得到充分的测试。当你发现Event和Topic这两个Model的创建需要费这么多的周折的时候,你是否发现你的Model抽象有问题?你是否有重构的冲动,将它们的创建行为变得更简单。
is_arranged这样的命名可能不太容易理解,注释上面写的是”’该话题是否已经加入到活动,并且活动尚未开始”’。那么如果keep stupid的话我觉得,is_arranged_in_coming_event是不是更容易理解呢?
is_shown,注释”’该话题所属活动是否正在进行或已经结束”’,这个就很难理解了。因为你看到“应该显示”这样一个名字的时候,知道后面的意思是活动正在进行或结束了么?is_arranged_event_started_or_closed也许更容易理解?
这都是一些重构建议,有一部分问题我已经重构过了。大家都在参加OpenParty的Coding Dojo,一起持续重构吧!
刚才写了一个识别网站charset的正则,因为目前写一个网页抓取的工具,里面对中文url做encoding的时候需要先识别页面的编码,可惜UrlEncoding没有强制使用UTF-8编码,真是烦人。下面是一个python下的正则表达是的字面文本。
r'<meta.*(?:(?:charset\s*=\s*["|\']?)|(?:charset.*content\s*=\s*["|\']\s*))([\d|\w|\-]+)[;|"|\'|\s]'
@o6z 老师上次#openparty推荐学习lisp,昨天看到 http://tryhaskell.org/ 这个网站很不错,晚上 @alex_hal9000 同学又推荐了 http://learnyouahaskell.com。
我的.profile里面的alias,之前使用kill $(ps auwx | grep qTfnNC | grep -v grep | awk ‘{ print $2 }’)的方法放在.profile里面就不好用了,所以最近就一直没有使用它。既然还是反复在用它(连接断开vpn以后经常需要重启ssh代理),所以还是修正它好了。
alias px="ssh -qTfnNC -D 7777 yourdomain.com"
alias kpx="(ps auwx | grep qTfnNC | grep -v grep | awk '{ print $2 }')|xargs kill;px"