ADSL被联通(北京网通)的“京城时讯”劫持!

最近发现我访问一些站点的时候(如昨晚访问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到底,投诉到底!

我投诉的时候提了几个理由:

  1. 联通在没有最终用户许可的情况下私自给我绑服务。
  2. 你们嵌入网站的iframe的方式直接造成很多网站访问不了。
  3. 给我看商业广告,jcxinxi可以从后向商户收费。侵犯了我这个最终用户的利益。尤其是我是有偿使用ADSL服务且我从来没有同意接收广告。
  4. 你们窃取我的HTTP Request是严重的侵犯我的隐私。
  5. 你们影响了我访问网站的显示效果,也是对第三方利益的侵犯。

周六日重构OpenParty App中发现的一些问题

Open Party App是我们在为OpenParty开发的新网站,上面集成了会员注册报名参加活动等功能。我们把他放在Google Code上面以开源crowd sourcing的方式开发。Django我是业余水平,在这个项目里面继续磨练。上周末正好有空开发,顺便重构了一下代码,我把其中发现的一些bad smell纪录下来,给和我们一样的Django业余团队参考。

  1. {% ifequal event.is_upcoming 1%}

    这是错误的,本意是{% if event.is_upcoming %},因为它本身就是个Boolean

  2. <a class=”gray_link”>看看谁参加了活动</a>

    gray_link是一个为样式命名的css class,但是css class的名字应该是一个结构语义的东西。也就是说css class应该是What it is而不是How it looks like。可以命名为<a class=”who-participated”>看看谁参加了活动</a>

  3. views.py里面return render_to_response(‘core/topic.html’, locals(), context_instance=RequestContext(request))

    使用locals()我上次就发过邮件,这样做是不好的。因为locals会鼓励你创建很多没有意义的本地变量,将它们一股脑的传递到template。造成template里面由很多的判断逻辑,但是这些逻辑本身应该是在models层搞定的。当你从template重构这些晦涩复杂的判断逻辑的时候,你会发现问题可能就出在views.py里面那一个locals()。没错,我说的就是topics.html这个模版,看看判断是否可以投票的那部分逻辑,实在是太复杂了,我不得不给他写测试,花了不少的时间重构。在模版里面你总是会思考一些措辞和样式的问题,而忘记了分支逻辑的复杂,这种代码经常是有很多的bug的,而且它们非常难于维护和修复。一定要将这种复杂度封装在model层并进行测试才可以。

  4. 没有意义的判断

    我看到很多if model.is_accepted == True: return True; else: return False这样的代码。我是在不理解为什么可能出现这样的代码……请注意这个和错误1差不多,都属于非常坏的重复代码。

  5. 测试

    请注意,我们没有赶时间。我们不太需要临时性的代码,要随时注意代码的可维护性,因为我们是一个团队。测试就是代码的文档,请注意尽量尝试测试先行,如果不行也注意让你的model得到充分的测试。当你发现Event和Topic这两个Model的创建需要费这么多的周折的时候,你是否发现你的Model抽象有问题?你是否有重构的冲动,将它们的创建行为变得更简单。

  6. 命名

    is_arranged这样的命名可能不太容易理解,注释上面写的是”’该话题是否已经加入到活动,并且活动尚未开始”’。那么如果keep stupid的话我觉得,is_arranged_in_coming_event是不是更容易理解呢?

    is_shown,注释”’该话题所属活动是否正在进行或已经结束”’,这个就很难理解了。因为你看到“应该显示”这样一个名字的时候,知道后面的意思是活动正在进行或结束了么?is_arranged_event_started_or_closed也许更容易理解?

这都是一些重构建议,有一部分问题我已经重构过了。大家都在参加OpenParty的Coding Dojo,一起持续重构吧!

快乐的一天

题目让我想起了小时候的作文,当我想不到一个好的名字的时候,那么就明明为快乐的一天吧。

昨天早起陪老婆去朝阳公园外拍。背着我帮助挑选的相机,器材已经远远的超过了我俩的摄影技术。朝阳公园和北京的很多公园一样,花了很多的钱做景观改造。而且朝阳区很国际化,朝阳公园也因此有了很多国际化景观。公园里面很多的雕塑,我很受用。我非常喜欢仔细的揣摩一个艺术作品给我的感受,我知道我没法知道艺术家在制造它的时候想传递给观众什么感觉,但是我自己可以好好体味它传递的感觉。艺术品的最大价值就是传递感觉。这样的体会过程就是欣赏艺术。

一开始的时候我找不到什么感觉。用一个全程2.8的大光圈镜头可以得到你想要的大部分效果。给美女照相基本上就是拉到最长焦,开到最大光圈照她最有神的眼睛。如果仅仅是这样,在一个美丽的公园又有什么意思呢?此时我真的感觉很懊恼,当很好的设备在你的手里的时候你却发现缺乏灵感。多么可悲呀。

能想到的打破僵局的事情就是玩一些不一样的摄影。这里面最简单的让镜头和机身产生不一样的照片的办法就是用闪光灯。闪光灯有很多好玩的玩法。然我我就开始在给老婆拍照片的时候尝试SB900这个一直想好好体验的神灯。加上柔光罩和反光板能够让照片不那么板,似乎也只能这样玩了。但是看过Speed of light的人都知道离机的遥控闪光非常有意思,这里面可以有很多很多的创意。因为没有看过说明书,自己摸索如何离机闪还是费了不少时间。但是一旦掌握了基本用法,摄影一下子又变得有魅力了,想法一个接一个。尝试太阳光和机外闪光成不同的角度,看到它们在老婆的照片上不同的效果,真是非常好玩。但是白天加上机身最低的ISO是200,让开闪光灯变得很难,一般都要F11以下的小光圈才可以。在河边玩了半小时的闪光灯,最后发热太高无法开机了。

我们继续走,我突然觉得灵感又来了。初春的北京颜色很匮乏,但是那些雕塑和奥运场馆确实五颜六色,用它们作为对比可以调整出各种不同的颜色风格。然后我开始尝试“导演”老婆的眼神。有了这些组合拍照片变得越来越有趣。老婆也越来越进入状态,我们一直拍到手软才收工。老婆最后赞赏了我专业的拍照服务 😀

从朝阳公园出来去了旁边的蓝色索拉纳看了UGG和单向街。单向街书店里面的楼梯上交错的作者一些爱书者和他们挑选出来的书谈心。我和老婆在这些装帧精美的书里面浏览。我看到了一本《港台流行音乐专辑200张》的书,看着高中时候很喜欢的一些音乐专辑在这本书里面上榜,看看这本装帧精美的书对他们的评价。那些漂亮的CD封面我有很多都没见过,尤其是台湾音乐人的唱片封皮尤其设计的非常有意思。看到我曾经以为是小众的陈绮贞也有很多唱片上榜,发现原来我喜欢的这个歌手也是实实在在的大众音乐人里面。看着这些漂亮的唱片封皮我真的很想买下这本书。可是自私的考虑到成本,我还是决定在网上购买。灰溜溜的走出单向街,我发现这样精品的推荐服务里面的大量受益者(比如我)却不愿意为这样的服务付款。实在是可怜。我发现我有的时候更容易冲动的决定“捐款”而不是为那些精品的服务“付款”,这也许就是转型中的中国的大量富有的贫穷的人所遇到的精神障碍。反观那些富有的富有的人却很少有人有品味去品味这些服务。我们两种人都可悲。

这两天在看的田中光一的《设计的觉醒》也在单向街的书架中的明显位置,我真的喜欢这一本设计简单但是却精美的书。它缓慢的告诉我设计是那么美好的事情,你永远不能离开这种精神的动力。书里面使用了2.5倍行距,字体很小,看起来有一种日本式的细致与简洁,同时你在阅读的时候不容易感觉疲惫。我很喜欢日本的设计,那是一种中西方融合的感觉,但是绝对是西方文化融化到东方文化的结果。所以,我想中国的设计人应该努力,也产生这样影响深远的设计。现代艺术是内心矛盾与感悟的外观体现,而波普艺术是科学给人的一种感官体验。里面好像是有这么一句,我喜欢体味现代艺术,但是我能掌握的也就是一点称不上波普艺术的东西了。现代的设计有功能性的倾向,强调简单。但是家中太多的IKEA这种功能性为取向的家具的时候我们丢弃了一些传统的繁复。我们要平衡它。

中午和老婆去了东四民芳餐厅,吃了菠菜粉丝炒鸡蛋和宫保鸡丁,还有酸辣汤。很有北京以前的国营餐馆的感觉。虽然厨师没有那么出色,但是菜谱让我感觉留在北京很不错。

下午去厂桥的家看爸爸妈妈。爸爸的手恢复的还是很不好,因为北京今年的春天太寒冷了。爸爸的左手还明显还是肿胀,我揉起来的时候心里很不好受。妈妈还是那个脾气,很多事情都着急,可是却从来不想马上就去解决。妈妈急性子,但是行动比较慢。爸爸从来不说那些没用的东西,事情都放在心里面想好,然后默默的就动手了。看着他们现在还保持我小的时候的样子,心里感觉很温暖,我不希望他们变,我希望他们能像养育我的时候一样对生活充满了希望,保持他们的生活态度。和爸爸妈妈在我小小的家里面聊天好像回到了10年前,屋子里面还是那样乱七八糟,有很多的灰尘。就好像我还生活在这里一样,床上还有我看的漫画书。

晚上和爸爸妈妈还有老婆一起去护国寺小吃店吃晚饭,发现护国寺这的街道已经发生了很大的变化,没有以前脏乱的样子,开了很多小吃店,街道干净了很多。春天大树还没有发芽,街道就更显得敞亮。老婆觉得以后我们要经常回厂桥吃小吃。护国寺小吃店的菜单比我记忆中长了很多很多,琳琅满目点不过来了。但是店里依然非常拥挤,一些外地来的旅游者在这里吃炒疙瘩或者酸辣粉套餐,我觉得很好笑,因为这些东西要么不是护国寺小吃店的特长要么就不是北京的菜品。我们只能打包回家吃,餐桌上我和老婆给爸妈计划了一个杭州自由行的旅程。希望他们下个月能成行。

晚上开车回家的时候我在品味这快乐的一天,就世界在我看来就像在大光圈下很多五彩的光斑,闪动但是看不清它们是什么,就好像波普艺术一样给你一个在蹦跳的感受。我觉得去年决定留在北京是正确的决定,我应该陪伴我的家人。至少几年还应该是这样。

做次乖用户,在点评写了个评论

为了实现人肉推荐引擎,好的我不写评论罢了,差的我还不写个评论?所以我只得给昨天吃饭坏了胃口的望京“喜多方”写个评论了。

昨天和老婆去星美看完电影下来看到这家日式,门口写着4种特价的乌冬面,都是二十多,天冷,想吃个乌冬面就进去了。
进去以后发现这里还有自助,自助的种类挺丰富的,价格是138每人,看似应该还不错。可是我俩当时只是想吃顿简餐,所以就去单点了。

喜多方这里的装修还是不错的,很干净,日式的感觉也到位。这里有不少韩国人在吃饭。

然后开始了比较不愉快的就餐经历:

  1. 点餐的时候我们发现菜单上的拉面、乌冬面都是四十多起,没有见到外面所说的二十多的面。问服务员,服务员解释是临时的特价菜,所以菜单上没有,还提醒我们那些面不是骨汤的,份非常小,面和这里的也不一样,我们问配菜如何,服务员说他们没见过这些面,所以也不知道。到这里我们基本上知道外面的特价是个“假广告”或者说“商业欺诈”,服务员压根就不希望你点那些面。所以我们知趣的点了骨汤拉面(这是我们来日式餐馆的必点),还有鸡肉串和亲子井(肌肉鸡蛋盖饭)。
  2. 上菜很慢。而且不像其它日式店,这里的服务员上茶必须要你按钮才来(桌上没有茶壶,一般日式都这样)。而我们去的其它一些日式都是服务员巡视,发现茶少了就会给续。所以这段体验很差。
  3. 亲子井先上来。这个饭应该有很浓的鸡蛋香味,但是这里的没有特别的鸡蛋香味。吃起来感觉有点油油的,米饭的口感也是有些粘。我和老婆不是非常满意。附赠味增汤还不错。
  4. 然后等了很久,骨汤拉面和鸡肉串上来了。先说骨汤拉面,这个让人比较失望。原因是骨汤味道不好,一是骨汤的酱油太多了,已经严重了盖过了骨汤的醇厚味道,二是骨汤味道很肥腻,感觉是骨汤里面加的肥肉太多了。面条本身还凑合,配料也够,只是这个汤头不好就妄称“骨汤拉面”了。
  5. 最差的是鸡肉串,上来的时候就已经有些凉了。而且浇汁比鸡肉串还热一点,说明汁是后浇上去的。之所以说鸡肉串非常差,原因是鸡肉串外面已经干了,但是里面的肌肉居然还是生的!老婆看着里面还发红的生鸡肉很不爽,基本上是我吃掉了两串鸡肉串。肌肉中间的大葱居然没有烤熟,虽然外面已经糊了。我严重怀疑这里的鸡肉串是微波炉叮出来的,因为微波炉烤肉串才会“外干里生”。其中几块鸡肉我直接吐掉了
  6. 我们只能非常不愉快的结账,结束这顿饭。这三样东西的价格是93。我觉得很不划算,我和服务员抱怨了肉串的质量(她说要给我重做,我拒绝了)。我只能说这样的质量下次不来了
  7. 这里的骨汤拉面和鸡肉串要明显比“松子”差。我看点评的其它评论说这里的寿司还不错。所以我看想吃飞寿司的朋友还是不要来这个店了。这里的骨汤拉面甚至比元绿的还要差,因为元绿的骨汤比这里味道好。

我想要的其实是一杯水

口渴,想要点喝的。身边有软饮料,有酒,他们口味太重了。
我想,喝杯茶吧。有陈年的绿茶,有大包的铁观音,奶茶粉,还有普尔和印度的红茶,一时犹豫我到底要喝什么茶呢?嘴里似乎不想要甜味也不想要酸味,不想要黏黏的口感也不想要苦涩的刺激。
其实,我想要的是一杯白水,它就已经足够解渴了。
真是奇怪,为什么我总是在渴了的时候迷茫于那些无聊的选择中呢?

SSH tunnel + pac穿越

就是穿越我们的墙。以前写过一个我的pac的post,不过那个pac在很多环境不work,那就老实写那个笨的,可是太麻烦了。所以写了个rb脚本生成那个pac。

如下:

#!/usr/bin/env ruby
proxy = 'SOCKS 127.0.0.1:7777'
gfucked_sites = [
  'youtube.com',
  'ytimg.com',
  'googlevideo.com',
  'tinyurl.com',
  'bit.ly',
  'blogspot.com',
  'twitter.com',
  'plurk.com',
  'torproject.org',
  'wikipedia.org',
  'tumblr.com',
  'soup.io',
  'pandora.com',
  'adobe.com',
  'last.fm',
  'photoshop.com',
  'google.com',
  'googlecode.com',
  'appspot.com',
  'acer.com',
  'demonoid.com',
  'alexa.com',
  'wikimedia.org',
  'yahoo.com',
  'zend.com',
  'aptana.com',
  'uncyclopedia.tw',
  'uncyc.org',
  'webarchive.org',
  'pornhub.com',
  'yourporn.com',
  'facebook.com',
  'mail-archive.com',
  'versionapp.com',
  'friendfeed.com',
  'ff.im',
  'chinagfw.org',
  'bullogger.com',
  'mulhollanddrive.com',
  'iphone-dev.org',
  'plurk.com',
  'imageshack.us',
  'zendesk.com',
  'pbwiki.com',
  'chromium.org',
  'typepad.com',
  'ff.im',
  'friendfeed.com',
  'tornadoweb.org',
  'bullogger.com',
  'blogspot.com',
  'zendesk.com'
]
puts "function FindProxyForURL(url, host) {"
gfucked_sites.each do |site|
  puts "  if (shExpMatch(url, \"*://*.#{site}/*\")) { return \"#{proxy}\"; }"
  puts "  if (shExpMatch(url, \"*://#{site}/*\")) { return \"#{proxy}\"; }"
end
puts "  return \"DIRECT\""
puts "}"

运行一下./gen_pac.rb > tin.pac就会生成tin.pac,我在.profile里面加入这一行并在开机默认启动Terminal就可以每次都更新pac文件了。但是还缺一个apple script告诉网络连接刷新一下pac文件,下次有空研究一下怎么做。

打开ssh tunnel我没有使用自动的方式,我设置了这个alias:

alias px='ssh -qTfnNC -D 7777 user@yourdomain.com'

然后每次用ssh-tunnel的时候只需要去Terminal执行一下px就好了。

在Mac里面我可以给每一块网卡指定系统级别的自动代理脚本pac文件:Air port图标-> Open Network preference->解锁->选择你的网络连接-> Advance …->Proxies->Automatice Proxy Configuration,让它指向你的pac文件。然后整个系统都回使用它作为代理了,如此Tweetie就可以非常爽的工作了。此法对于使用Tor的用户一样有效,修改一下pac生成脚本里面的proxy = 'SOCKS 127.0.0.1:7777'proxy = 'HTTP 127.0.0.1:tor_port'就可以了。

OpenParty“溪窗听雨”现场照片

八月底的Open Party如期举行。这次组织的比较困难,因为一般能够帮忙的几位组织者都没来(默默、钱钱、璎珞、小刀),只有我和Cleverpig维持现场秩序了。

这次我们的老朋友Chris(Open Party活动食品服装赞助人)安排了中移动来讲Ophone。因为这个涉及到下面1年的赞助问题,所以我们也没有什么办法。可是我知道活动安排是一天前,安排不到位。现场中移动对“不是转场活动”有很大意见,我只能硬着头皮装好人了。活动开始后还是有了不愉快,我们本来只给他们安排了5分钟的专门介绍Ophone的时间,可是他们的讲师绑架一样的讲了20分钟,让我一时没有办法。为此我向大家表示歉意。我和猪商量过了,以后绝对不会搞任何所谓的“专场”,我们只会做开放活动,坚持unconference。希望参加的朋友能够理解我们的难处,我们活动没有向任何参加者收费,但是提供免费的食物和饮料,已经快要2年了,这后面肯定有厂家赞助。但是由于我们几个组织者都是Geek,商务搞得不好,基本上只有Cleverpig一个牛人帮我们拉各种形式的赞助。我们到目前为止都没结余,基本上就是联系到多少赞助就花掉多少。幸好我所在的ThoughtWorks能够慷慨赞助场地,我们的活动目前还没有生存压力。说了这么多只是让大家原谅这次的组织失误,浪费了大家宝贵的20分钟。

这里分享一下当天扫到的一些照片:D

李默的婚礼

周五晚上和nemo同学一起去给默默吹气球。李默就是icecloud,BJUG(Beijing Java User Group)和AgileChina的创始人,是我的同事。认识已经几年了,看到他和相恋12年的女友结婚,还是很高兴的。虽然这厮周五晚上都不给我们这些帮忙的人饭吃……

婚礼在周六进行,很顺利。见到了不少老朋友。照片照的不好,碰巧外置闪光灯的电池没有充好,所以只能无闪+内闪了。场面还是捕捉到了。我还认识到原来那些我一直以为的无烟份子都是老烟枪了:D

一周

一周不推(Twitter)了,从上周四开始。原因是心神不宁。这一周发生了很多预料外的事情,完全打乱了我的心智。所以在这一周后我才有勇气在这里记录下它们。

  1. 爸爸的身体最近不好,本来一直以为是比较严重的颈椎病,今年在中医院做了牵引和电火花治疗,但是病情反而加重了。上周四去北大医院做了核磁共振后医生说这个是脊髓内海绵状血管瘤,有生命危险。爸爸告诉我以后我感觉浑身没劲,一下子就暮了。这个是我完全没法接收的现时,可是我能做的就是尽量联系好一些的资源给他会诊一下。而后又看过301医院和天坛的脊柱外科,基本上都认定是这种病,需要手术治疗,治疗后一般都有后遗症(会影响四肢活动),我也恶补了一下这个病的一些资料,有空再整理成博文吧。这件事给了我很大的打击,它是让我心神不宁的主因。
  2. 老婆的单位给她调换了工作,原先她负责的这一摊事被分配给了一个新领导,从自己管自己一下子又变成了被人管,她压力很大,而我就需要开解她。国企里面的勾心斗角让人生厌,这件事让我很烦。
  3. 我所在的Studio发生了一些变化,为了解决分布式团队的痛苦,管理层决定让我们移动一下。Mingle团队去三藩,Cruise团队去班加罗尔,北京剩下的团队会组成Platform,这个细节还是让人激动的,可是让我们的团队面临了是否移动的抉择。上面的两个烦心事让我对这个选择没什么犹豫,那就是不移动。可是老婆说她也想去三藩看看,可是爸爸的身体又让我非常担心,和默默同学讨论职业规划他也推荐我去三藩试试,可是我自己知道没有什么可以和家比,最终的决定还是留在北京,也许,以后还有机会吧。
  4. 以前的很多靠谱的朋友都去了老黄那里,真的很有吸引力。我上班最看重的就是身边的人,能够和朋友们一起工作,我想对朋友们说,我很想投奔你们,可是,现在的心神不宁让我放弃了这个选择。也许,以后还有机会吧。

与这些大局上的不稳定相比,小的事情也说明最近很衰,上周和老婆开车估计又有100公里,转了石景山万达、三里屯星美、望京星美都没能卖到1小时以内可以开场的变形金刚2,让老婆非常失望,所以我也非常失望。还有,还有很多不爽的事情。

所以,我就开始戒掉使用Twitter一周,希望避免已经乱得不得了的心被暴力语言的狂欢打扰。现在我的心静下来了很多,这一周都在专心的享受Coding的乐趣,IT民工还能奢求什么呢?闹闹姐姐的星座运势我是从来不看的,昨天却打开搜索了一下,说我的星座这一周运势会很好,希望如此吧。

不在使用feedsky的rss输出,如果您订阅了我的blog,请修改订阅地址

因为今天我在使用Google Reader的时候实在是被feedsky的广告输出激怒了,所以我决定放弃使用这个服务。尤其在使用Byline这样的手持设备移动阅读器的时候,每次缓存那么多的广告图片实在是让人心烦!(今天我愤怒的推了一条:我靠!Feedsky的广告输出简直让我出离愤怒了!赶快赶快,换服务!十万分讨厌服务强奸!你收我1年10元我可以接受,你用广告插我眼睛我很愤怒!)

订阅我的Tin’s blog请使用:feed://tin.zztin.com/feed/

有空我会考察feed托管的服务,然后重新选择一个服务商,大家如果有什么推荐请给我留言,谢谢!

UPDATE:feedsky的广告输出是可以关闭的。不过考虑到他们这次没有经过用户同意就打开feed广告的做法,我决定还是换服务商。我看到了很多因为不知道自己的feed已经包含了广告而造成rss输出里面带图片广告的feed,希望博主们更新设置。