<?xml version="1.0" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Bluemask Blog</title>
<link>http://bluemask.net/</link>
<description>来自bluemask.net的最新blog发布</description>
<pubDate>2012-03-02 00:14:46</pubDate>
<language>zh-CN</language>
<copyright>Copyright 2011 bluemask.net.</copyright>
<item>
<title><![CDATA[我就是很羡慕你]]></title>
<dc:creator>Small</dc:creator>
<description><![CDATA[<p>全世界我只羡慕你，年轻，健康漂亮，积极向上。</p>
<p>我要是脸皮稍稍厚那么一点点，我也敢说，我曾经也是这样！可是如今，只剩下积极向上，不对，积极也带选择性，向上那也要看参照系了，年轻嘛，天朝的建筑物拆的快，都不敢说younger than some buildings（这句是某剧台词）了，健康，虽然从不生病，但是这小肚皮... 一言难尽。</p>
<p>我从不羡慕其他人，在你之前，我甚至从未羡慕任何人。看到你，就像是看到一棵优质的灵魂，被武装在一尊超越凡尘的肉体里，经过之处一尘不染，你就像三月的风。</p>
<p>我自认为富有，不觉得自己少什么，我时常会给天桥下的乞讨者零钱，我偶尔会给那些路边假装问路的骗子钱，我觉得他们比我需要钱；我有自己的快乐，虽然听力很差但我会坚持听电台的笑话，如果我听明白，我会很开心很开心，有时候在SNS上骂一些脑残我也能开怀。我自认为富有不是指物质，我有自己的世界，那里有无数的快乐和满足。</p>
<p>可是我仍然会羡慕你。</p>
<p>有时候我会忍不住评论你的签名，我会想起很多电影的台词来关联上我的主题，我想说let troy burn，世上没有“内心的平静”，只有闪电一样的烈火，凶猛，熄灭意味着死亡。但我也想，你不需要这些，你就像是我的反物质，我们没有一样相同，你有的我一样都没，而且，我也认为，我世界里的你也没有见过。</p>
<p>爱情总是伴生着对竞争者的嫉妒，我没有嫉妒，我只有纯净的愿望。我只是希望成为你的朋友，成为某个观察者，成为一个见证人。</p>
<p>感谢我的生命，让我遇到你，就像遇到我的来生。</p>]]></description>
<link><![CDATA[http://bluemask.net/p/1224/]]></link>
<pubDate>2012-03-02 00:14:46</pubDate>
</item>
<item>
<title><![CDATA[成就系统]]></title>
<dc:creator>Small</dc:creator>
<description><![CDATA[<p>似乎是从blz的wow开始，一下子大小游戏都有了成就系统。</p>
<p>其实一个挺严肃的报表性质的系统，加上成就系统，应该挺好玩的，可以让枯燥的数据更加有生命力。</p>
<p>例如，</p>
<p>“全时区关注”，需要累计在全天的每个小时内均有过访问记录；</p>
<p>“上班第一件事”，需要连续一个工作周的每天8:30至9:30保持访问；</p>
<p>“上班路上”，需要连续一个工作周的每天7:00至8:30之间保持访问；</p>
<p>“报表王”，访问了全部的报表；</p>
<p>“全神贯注”，一个月内对某份报表的平均日访问次数超过3次；</p>
<p>“平台大侠”，使用市面上主流的所有PC操作系统和浏览器以及所有手持设备操作系统访问过系统；</p>
<p>“永不犯错”，一年以上的时间内没有任何一次输错登录密码的记录；</p>
<p>“游遍全城”，使用手机版登录系统并累计在全城所有城区内签到一次；</p>
<p>“我刷我刷我刷刷刷”，一周内平均每天报表页流量量超过100次（专为开发测试人员打造的成就）；</p>
<p>......等等</p>]]></description>
<link><![CDATA[http://bluemask.net/p/1223/]]></link>
<pubDate>2012-02-16 21:52:48</pubDate>
</item>
<item>
<title><![CDATA[200和304]]></title>
<dc:creator>Small</dc:creator>
<description><![CDATA[<p>我总是以为304才是最好的，像心有灵犀一样，彼此有相同的时间约定，或者匹配的etag，就像相视一笑的默契。</p>
<p>可是，在这之前，按照协议，必须要有一次完整的正式请求，并成功获得200才行。</p>
<p>&nbsp;</p>]]></description>
<link><![CDATA[http://bluemask.net/p/1222/]]></link>
<pubDate>2012-02-10 01:45:32</pubDate>
</item>
<item>
<title><![CDATA[广州秋天，上半夜大雨]]></title>
<dc:creator>Small</dc:creator>
<description><![CDATA[<p><img src="http://bluemask.net/static/media/a2a7de742edb8304.jpg" alt="" border="0" /></p>
<p>在办公室加班兼躲雨，熬到午夜终于敢冒雨过街买雨伞，淋湿透，买好伞出来，下了好几个小时的大雨居然奇迹一样停了。</p>]]></description>
<link><![CDATA[http://bluemask.net/p/1218/]]></link>
<pubDate>2011-10-14 01:21:52</pubDate>
</item>
<item>
<title><![CDATA[久闻node.js终于体验了下]]></title>
<dc:creator>Small</dc:creator>
<description><![CDATA[<p><span style="font-size:32px;">{}</span></p>
<h1><span class="Apple-style-span" style="font-size:12px;font-weight:normal;line-height:18px;">说是体验了下其实根本没体验，还没动手写一句javascript代码，只是扫了一遍官方的文档，顺便看了下v8的一些性能介绍。</span></h1>
<p>不过基本可以确定这东西将是未来运行bluemaskGB的利器了，这是我一直期待的东西，简单，快速。</p>
<p>尚待了解的除了部署，各种各样的modules，像router，template类的模块。不得不说，Javascript有股魔力，带着浓浓怀旧风格的语法，神奇而又好用的闭包，复古的外形配合动态的内在，性感阿！</p>]]></description>
<link><![CDATA[http://bluemask.net/p/1217/]]></link>
<pubDate>2011-08-16 22:15:03</pubDate>
</item>
<item>
<title><![CDATA[感恩晚餐]]></title>
<dc:creator>Small</dc:creator>
<description><![CDATA[<p>把冰块放进空杯子里，然后倒满水，冰块居然不会马上浮上来。很奇怪对不对？活着就像是居住在一个小小的气泡里，每天只是看到幻变的光彩，偶然的不经意间，一个小小的角度的偏差，才得以见识世界的奇妙。</p>
<p>近日兴起，多年后，终于吃腻了外面的食物，决心排除万难，从无到有，从生到熟，开始自己开火做晚饭。工作日的时候每天都像日历一样整齐规矩，各种炊具器皿分多日快递抵达，从22日终于成功奔三完成开始，至七月，才算万事俱备之欠点火。</p>
<p>然而最难的部分是洗刷前房客留下的油腻的厨房，周末几乎泡了一整天的WOW也没有勇气去清洗它，最后肚子饿了，才终于熬不住。之后居然一切都顺利得异乎寻常。我给自己煎了一大块牛肉，然后随便炒了点青椒，什么都没放，除了油和盐。</p>
<p>我端着盘子坐到电脑前，点开一个随意的老电影，开始享用我的简单青翠的晚餐。突然觉得好幸福。哈哈，是的，真的是这样。我想起那些电影里的基督徒们在餐前的祷告，感谢上帝赐予食物。</p>
<p>感谢我的父母给我生命，我们全家似乎都不擅长于表达感情，但是亲情是如此神圣，甚至曾是我人生的唯一依赖；我知道你们会时常挂念我，我也是。然后感谢我自己，我仍然活着，活得很好，我依然健康，有理想；我头脑仍然清醒，我知道我接下来要做什么。</p>
<p>感谢朋友们。<span class="Apple-style-span">感谢我寂寞的生日那天</span>陪伴晚餐的王妹妹。感谢这一切的一切。</p>]]></description>
<link><![CDATA[http://bluemask.net/p/1216/]]></link>
<pubDate>2011-07-03 19:54:58</pubDate>
</item>
<item>
<title><![CDATA[Qt的事件和与Widget跨线程交互]]></title>
<dc:creator>Small</dc:creator>
<description><![CDATA[<p>一般gui的程序的模型总有至少两个主要线程，一个是界面的主事件循环所在的线程，另一个是处理工作任务的线程，工作线程看不见，在后台处理事务产生数据，然后显示在界面上。例如一个即时通讯客户端，主界面显示好友列表，工作线程接受来自网络的消息，收到消息后，要通知界面，将对应的好友的头像闪烁显示。这就要跨线程。</p>
<p>记得C#中有委托delegate，有InvokeRequired属性判断是否同线程操作，有Invoke来调用跨线程的委托。初学PySide，遇到同样的问题，看了半天文档，发现没有和C#类似的手段。但是，反倒可以用更有条理的方式来处理这样的跨线程调用请求，那就是事件。</p>
<p>QEvent是所有Qt事件的基类，构造函数只接受一个参数，那就是QEvent.Type类型的事件类型参数，如果是内置的事件类型，可以直接使用已定义的类型，例如QEvent.Close，它本质是一个int整数。如果要定义一个自己的事件，就需要一个这样的数字，而且和已有的所有事件类型不重复。</p>
<p>首先，使用QEvent.registerEventType这个静态方法来注册一个自己的类型，自定义的类型的值的返回是(QEvent.User, QEvent.UserMax)之间的一个数字，调用registerEventType时可以指定这样一个自己的数字，也可以不指定，由其自动分配一个数字。例如：</p>
<pre>EVENT_INCOMING_MESSAGE = QEvent.registerEventType(QEvent.User + 0x01)</pre> <p>有了这个自己的类型，然后就是构建一个自己的事件类：</p>
<p></p>
<pre>class IncomingMessageEvent(QEvent):
    def __init__(self, msg):
        super(IncomingMessageEvent, self).__init__(
            QEvent.Type(EVENT_INCOMING_MESSAGE)
        )
        self.msg = msg</pre> <p>那么如何在工作线程中将该事件“投递”至窗口？可以使用QCoreApplication的postEvent方法，注意不是sendEvent，是postEvent，他们的区别就在于postEvent能跨线程“投递”，因为sendEvent是直接将事件送至目标Widget来处理，并返回处理结果，而postEvent是将事件插入处理队列之后返回，并不等待至事件获得实际处理。</p>
<p>假如app是主界面的一个QApplication对象，dlg是主界面的一个QDialog对象，msg是要投递的消息内容，那么将这个自己的事件投递至dlg的方法就是：</p>
<pre>app.postEvent(dlg, IncomingMessageEvent(msg))</pre> <p>事件是投递完成，那么在QDialog中还得处理这个事件，不然dlg就要当SPAM来处理了...&nbsp;</p>
<p>所有Qt的Widget处理事件，都是由它的event方法来进行，所以只需要在自己的Widget中实现一个自己的event方法，该方法接受单个QEvent类型的参数。</p>
<pre>class MainFrame(QDialog):
    # ......
    def event(self, evt):
        if evt.type() == EVENT_INCOMING_MESSAGE:
            if hasattr(evt, 'msg'):
                msg = evt.msg
                self.show_incoming_message(msg) # 在界面显示该消息
        return super(MainFrame, self).event(evt)</pre> <p>这时就可以安全的处理要显示的内容了。</p>]]></description>
<link><![CDATA[http://bluemask.net/p/1215/]]></link>
<pubDate>2011-06-06 12:57:18</pubDate>
</item>
</channel>
</rss>
