2010-5-29

On May 29, 2010, in 杂谈, by bruceleey

我小时候的理想是成为一名歌手,身披金甲圣衣,万众瞩目,万千抱着绒娃娃睡觉的姑娘的墙上都贴有我的海报,时常可以在颁奖会上表达自己的个性,并且可以驾驶着保时捷四处撒钱。

这个理想在我进专业的艺校学习音乐一年多后夭折了,死无葬身之地。我从那时候起就变得很现实,不由得你不说,我们那一代的小孩心里大多都有一些稀奇古怪的想法,但很多都不太现实。

我们那一代生长在农村的孩子出社会的年龄都比较早,教育程度平均在高中左右,也有少许进入比较好的大学,不过据我所知大多数都去了职业学校,所谓的职业学校性质上是交2-3万块钱可以得到一张中专文凭并安排到一些大型的工厂工作,所做的工作基本上和学校所学专业无关,而这类学校所教的课程体系非常庞大,多而不精。这些选择也许大都不是孩子做的决定,说实话,真正有理想,有自己的想法的人很少,至少我们那一代是的。以前的信息没有现在那么发达,父母和孩子所知道的谁家的狗生了哪家的猫和谁家的姑娘嫁了哪家的儿子之类的事情除外的其他事情大多都是从亲戚朋友和电视新闻和广告上得知,甚至我们那一代的家庭都没有看报纸的习惯。现在的后一代我相信会比我们那一代多知,如果都足够清醒。

我在农村有一个医生朋友的同学,在农村做水泥工,实实在在靠劳动力生存的人,以前的工价大概是50块钱一天,全是按天计算,如果下雨的话就意味着少工作一天,后来努力了几年结了婚生了小孩,房子装修结婚彩礼生小孩的费用加起来我估计他应该借了不少钱。他的同学朋友比较多,都是处于一个年龄段的人,结婚生小孩的时间相差没有多少,同学朋友结婚最少要送200块钱,生小孩,小孩怎样怎样,这些都要送钱,加上自己不能挣很多钱,压力越来越大,后来有一天他就跳楼死了。像这样劳劳碌碌一辈子的人很多,卖劳动力,挣得钱只能养家糊口,没有假期。只是压力的大小和人心理承受能力不同就导致不同的结局。

我表弟今年四月份来的上海,之前在一所中专上学,毕业后被安排到上海的一家笔记本加工的工厂,流水线操作,平均每天上班15个小时,一个月多加点班能挣 1800块左右,我表弟很年轻,是典型90年代农村的人,喜欢上网吧,不能去上网也喜欢开着手机上QQ,喜欢买一些精品店的装饰物。他们这些学生住的是工厂分的宿舍,8人间的员工宿舍,大部分平常用的东西都是公用的,想在上海租房子几乎不可能,我上次去他的宿舍看望他,全是刚从学校出来的孩子,最大的19 岁,都是从学校的推荐机会进来的,为此我舅舅还送了一个红包给就业的教师。

类似于富士康这样类型的工厂有很多,到处都是像我表弟这样的人,他们付出的多,得到的回报少,但他们很多都是没有选择,很多人看了富士康的报道都说为什么不离开一定要呆在那里,为什么要以寻死的方式解决问题,我也不明白,但是我知道他们都有苦衷,他们没有选择,即使做出了抉择也改变不了本质,他们的这种勇气令我毛骨悚然。

也许他们曾经都是热血青年,都有心爱的姑娘,本应自由的青春却化成了一堆脑浆和死血。我愿望人人自由平等,把酒言欢, 无论你们在哪里,无论发生什么事情,我们是否相识,我都与你们同在。

A:兄弟姐妹们,快跑,桥要断了。

B:哥们别急,我带上我的CD。

A:快看,树林里有条小溪,我们一起度过去吧。

C:快点吧,快看,彩虹出来了。你闻到气味了吗?

 

Windows下模拟Linux环境的软件

On May 26, 2010, in Linux, by bruceleey

很火星的推荐一款软件,功能在于在Windows上模拟Linux环境,项目主页:http://www.cygwin.com/

Tagged with:  

洋葱头与胡萝卜

On May 24, 2010, in 杂谈, by bruceleey

想上Google搜几根胡萝卜都不行了,没办法,只能依靠洋葱头来找它朋友胡萝卜。

1、用你的gmail邮箱写封邮件到: gettor@torproject.org,主题为help。(注意格式必须设为:纯文本)

2、收到邮件后,立即回复,将收件人地址改为:gettor+zh@torproject.org,回复的内容为:tor-browser-bundle (注意格式必须设为:纯文本)

3、大概3-5分钟,你会收到约为16M大小的tor压缩文件,zip格式。

4、下载到本地电脑,解压缩。在tor browser文件夹中找到 “start tor browser”的程序。

5、双击“start tor browser”,如果无法建立链接,先点停止,然后点:下方的“设定”—网络—勾选“我的ISP阻挡了对Tor网络的链接—添加一个网桥—框内依次输入:

80.68.94.202:8080

92.206.112.137:9001

89.228.47.36:443

每输入一个点击左边的绿色+ 号添加,最后确定,重新连接,即可成功。

6、如果以上网桥被封无法连接,用你的gmail邮箱,写邮件到:bridges@torproject.org 主题:get bridges,内容: bridges (注意邮件格式须为纯文本)。很快你的gmail邮箱会收到几个可用的网桥地址。重复第5项的操作即可。

7、tor成功链接后,会打开内置的一个firefox火狐浏览器,便意味着你已进入菜市场,可以寻找胡萝卜。

Tagged with:  

Google 永久提供在线吃豆人游戏

On May 24, 2010, in 杂谈, by bruceleey

根据Google官方博客的报道,Google将从即刻起永久提供吃豆人的在线游戏,以满足广大G粉和游戏迷的怀旧需求。本月22日,Google将首页logo换为NAMCO的经典游戏吃豆人(PACMAN),以纪念该游戏问世 30周年。这个logo可以实实在在地进行游 戏,并且据传拥有完整的255关。

随后,此游戏在各类社区引发游戏热潮。一天之后该logo下线。 在线游戏地址在这里:http://www.google.com/pacman/

有没有谁去试下打到爆机的?

Tagged with:  

Dojo 的订阅/发布模式

On May 24, 2010, in javascript, by bruceleey

dojo.connect 函数用来处理某一个实体上发生的事件,不管处理的是 DOM 事件还是用户自定义事件,事件源和事件处理函数是通过 dojo.connect 直接绑定在一起的,Dojo 提供的另一种事件处理模式使得事件源和事件处理函数并不直接关联,这就是“订阅/发布”。“订阅/发布”模式可以说是一个预订系统,用户先预定自己感兴趣 的主题,当此类主题发布时,将在第一时间得到通知。这跟我们熟知的网上购物系统不一样,网上购物是先有物,用户再去买,而在订阅/发布模式下,预订的时候 并不确定此类主题是否已存在,以后是否会发布。只是在主题发布之后,会立即得到通知。订阅/发布模式是靠主题把事件和事件处理函数联系起来的。在 Dojo 中,跟主题订阅 / 发布有关的函数有三个:

  • dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Function*/ method)subscribe 函数用来订阅某一主题;参数 topic 表示主题名字,是一个字符串; context 是接收到主题后调用的事件处理函数所在的对象,function 是事件处理函数名。
  • dojo.unsubscribe = function(/*Handle*/ handle)取消对于某一主题的订阅;参数 handle 是 dojo.subscribe 返回的句柄,跟 dojo.connect 与 dojo.disconnect 的工作方式一样。
  • dojo.publish = function(/*String*/ topic, /*Array*/ args)发布某一主题;参数 topic 是主题的名字,args 表示要传递给主题处理函数的参数,它是一个数组,可以通过它传递多个参数给事件处理函数。

订阅 / 发布模式看上去很神秘,但实现是比较简单的。 dojo 维护了一个主题列表,用户订阅某一主题时,即把此主题及其处理函数添加到主题列表中。当有此类主题发布时,跟这一主题相关的处理函数会被顺序调用。注意: 如果用户使用了相同的处理函数重复订阅某一主题两次,在主题列表中这是不同的两项,只是他们都对同一主题感兴趣。当此类主题发布时,这两个处理函数都会被 调用,而不会出现第二个处理函数覆盖第一个处理函数的状况。下面的例子展示了订阅 / 发布模式是如何工作的。

  <html>
 <head>
 <script type="text/javascript"
 djConfig="parseOnLoad: true, isDebug: true"
 src="../dojo/dojo/dojo.js"></script>
 </head>
 <body>
 <script>
 var NewsReporter = {
 sports : function(message) {
 for (var i = 0; i < message.length; i++)
 console.info("sports:" + message[i]);
 },
 entertainment: function(message) {
 for (var i = 0; i < message.length; i++)
 console.info("entertainment:" + message[i]);
 } ,
 mixed: function (sportsNews, entermaintainNews) {
 console.info("mixed");
 this.sports(sportsNews);
 this.entertainment(entermaintainNews);
 }
 }
 /*first subscribe*/
 handle1 = dojo.subscribe("sports news", NewsReporter, "sports");
 dojo.publish("sports news",
   [["China will rank first in the 29th Olympic"]]);

handle2 = dojo.subscribe("sports news", NewsReporter, "sports");

dojo.subscribe("entertainment news", NewsReporter, "entertainment");
dojo.subscribe("mixed news", NewsReporter, "mixed");
/*then publish*/
dojo.publish("sports news",
[["America will rank second in the 29th Olympic",
"Russia will third forth in the 29th Olympic"]]);
dojo.publish("entertainment news",
[["Red Cliff earns over 200 million in its first week"]]);
dojo.publish("mixed news",
[["Yao Ming gives Red Cliff high comments"],
["Jay and S.H.E wish Beijing Olympic success"]]);

//unsubscribe two sports news reporter
dojo.unsubscribe(handle1);
dojo.unsubscribe(handle2);
dojo.publish("sports news",
[["this news has no consumer!"]]);
</script>
</body>
</html>

在上面的例子中,模拟了一个“新闻记者”(NewsReporter 对象),专门跑体育和娱乐新闻,任何此类新闻他都不会放过。 Dojo 就像一个新闻中心,发布各类新闻。

记者先在新闻中心注册,说自己对体育新闻感兴趣,接着新闻中心发布了一条新闻 “ China will rank first in the 29th Olympic ”,这时新闻记者将立即收到这条消息,并报道出来(在本例中就是在浏览器的模拟控制台输出这条新闻)。然后记者又再次向新闻中心注册对体育和娱乐新闻以及 跨这两个领域的新闻都感兴趣,然后新闻中心分别发布了这三个主题的新闻。记者当然不敢懈怠又马上输出了这些新闻,最后新闻记者不打算再跑体育新闻了,就在 新闻中心取消了对体育新闻的注册。这个例子最终将在浏览器的模拟控制台输出:

 sports:China will rank first in the 29th Olympic
 sports:America will rank second in the 29th Olympic
 sports:Russia will third forth in the 29th Olympic
 sports:America will rank second in the 29th Olympic
 sports:Russia will third forth in the 29th Olympic
 entertainment:Red Cliff earns over 200 million in its first week
 mixed
 sports: Yao Ming gives Red Cliff high comments
 entertainment: Jay and S.H.E wish Beijing Olympic success

从这个例子中我们可以得到几个使用订阅/发布模式时的注意事项。

  1. 先订阅,再发布。主题发布的时候,订阅了这一主题的事件处理函数会被立即调 用。
  2. 发布函数的参数为数组,发布第一条新闻时使用的是[["China will rank first in the 29th Olympic"]],这是一个二维数组,因为事件处理函数 NewsReporter.sports,NewsReporter.entertainment,以及 NewsReporter.mixed 的参数已经是一个数组,所以在发布时必须把新闻事件这个数组再放在另一个数组中才能传递给这些事件处理函数。而“ mixed ”新闻的处理函数有两个参数,所以发布“ mixed ”的新闻时,参数为:[["Yao Ming gives Red Cliff high comments"], ["Jay and S.H.E wish Beijing Olympic success"]]二维数组中的第一个数组表示体育新闻,第二个数组表示娱乐新闻。
  3. 取消订阅时,必须把所有的订阅都取消。重复的订阅行为返回的句柄是不一样的, 在本例中 handle1 和 handle2 是不同的,必须都注销。只有在 handle1 和 handle2 都被注销后,新闻中心发布的体育新闻才不会被这个记者接收到。
Tagged with: