寂静的田野

湖上的芦苇已经枯萎,也没有鸟儿歌唱。

–济慈

我对人类感到悲观,因为它对于自己的利益太过精明。我们对待自然的办法是打击并使之屈服。如果我们不是这样的多疑和专横,如果我们能调整好与这颗行星的关系,并深怀感激之心对待它,我们本可有更好的存活机会。

–E.B.怀特

我每次回故乡都会去看看熟悉的田野,但是每次大抵失望大于希望。满目的田野还是以前的田野,除了偶尔附近的鸡叫声,空气中静的只能听到自己的心跳,于是我想到了那本著名的《寂静的春天》大概写的就是眼前。记得以前跟身边人说起过世界上什么东西最干净,我认为是泥土,因为对我来说最自然的最干净,跟何况泥土对我来说很亲切,但是现在的泥土却让我陌生。

播种和收割大都实现了自动化,田野到处是杂乱的稻草,以前用手收割后堆砌整齐的稻草堆消失了。田梗上是机器轮胎留下的深深痕迹和到处乱扔的装禾苗的塑料袋,以前歪歪斜斜的脚印消失了。现在土地对于我们来说已经沦为一种工具,失去了老一辈人对土地的感情。

 

 

 

 

一路上随处可见的农药袋子,以前常听父母说他们那会儿直接从稻田旁的水渠中就能捞到鱼,现在想来那一定十分美好。在《寂静的春天》中卡森写道她那个时代观察到的农药惊人的危害,但最可怕的是不加保护的滥用,我随便找了张农药背面后的文字,不知道有多少人认真看过。

 

 

 

MVC学习

引言:

A Wise old computer scienist once said: Make your data structure smart and your code dump.

We need SMART Models, THIN Controllers, and DUMB Views.

最早用MVC还是在MFC中的文档视图框架,不过给人感觉比较繁琐,没怎么好印象。前几天无聊看了一下Python的Django框架,发现它采用了一种MTV(Model Template View)的框架,和MVC差不多。看来MVC使用很广泛,我顺便学习了一下好用在的项目中。

一般来说MVC中Controller控制数据流、Model存数据、View显示数据对应于数据的输入、处理和输出。Controller设计时要thin尽量简洁,Model则必须smart处理各种数据,View则尽可能dumb按部就班的显示Model的数据就可以了。

在C++中MVC可以用Observer观察者模式实现,只是Observer少了一个控制器Controller。在实际程序中Controller对应于鼠标键盘之类的处理,所以一个窗口类就可以搞定了。View的话在windows中就是Canvas之类的画布,每一个Canvas对应一个View。实际实现中,我用多个Canvas访问同一个Model,操作起来好像windows的远程控制界面一样:)。最后也是最重要的就是Model了,简单点的应用一个数据结构就够了,如果复杂的话就要考虑数据库了。

我自己写的程序中Model试着采用Sqlite3数据库,但是每次操作Model都要频繁的访问硬盘,把我的硬盘弄的咔咔响。一般数据库出现这种情况,就要考虑用事务处理插入或修改记录,但现在操作Model却是随机的,所以事务用不着。最后只好用Sqlite3的内存数据库,程序启动时把硬盘中的数据库文件导入内存,程序退出时再保存到硬盘中。

最后补充一点:Sqlite3导入内存数据库时要注意Page size要设置成跟硬盘中的一样,关于Sqlite3用起来还真不错,看来数据库也要好好学一下。

参考:

wiki

阮一峰:谈谈MVC模式

Model-View-Controller

Model View Controller

博客换主机了

之前用的NBVPS各种不爽,抽时间换成了burst。话说burst有点小贵,不过速度很惊艳啊,终于告别之前蜗牛般的vps了。
闲话少说,这段时间要写的事情很多,但刚买了Kindle4还在折腾中,有时间一一补齐吧。
Show一下我的Kindle4:

今天看到和想到的

最近有点心神不宁,看了些博客,自己也想了些问题:

关于责任:

男人和女人的区别是:女人可以犯错误而推卸责任;男人则不允许犯错误,即使犯了必须负起责任。

关于思考方法:

看老赵的博客,在老赵书托(4):浪潮之巅(内含牢骚,不喜勿入)中看到老赵的思考方法,本人十分赞同摘抄如下:

搞技术,死脑筋,凡事都要想很多遍,想个明白,不明白就不表态。我不喜欢猜测,不喜欢无法验证的事物,因此我成不了那些常见的、著名的、经常指点江山的分析师。每次有人问我对某某事物未来的看法,十有八九我只会婉言谢绝。有一分事实,说一会道理;有七分依据,不做八分肯定,即使无法避免,也尽量从多个角度给出各种推测,而不只是推测出自己喜欢的结果。

也就是说提倡怀疑精神,不盲从。

经济危机的脉络

经济危机对我们来说不算陌生,从美国的次贷危机到现在欧盟的危机。至于经济危机的根源,用学校里老掉牙的论调是万恶资本主义早晚要灭亡,我们姑且抛开这些价值观误导或偏见,为什么资本主义有无法根除的缺陷但却持续繁荣?为什么每过十几年会有一次经济危机?

这几天我恰好看到这方面解释最详细的文章 百年老狼——经济危机的脉络。这篇文章生动有趣,逻辑严密,大部分观点我是第一次听说,我觉得文中也太夸大金矿的作用了吧,有时间可以慢慢琢磨:)。

图片里隐藏文件技术

今天同事孙工传给我一张特殊的图片,用压缩文件打开这张图片发现里面还隐藏着一个txt文档。其实图片隐藏文件有很多方法,可以参考这篇文章,同事用到的就是上面提到的第一种方法–尾部追加法:把压缩文件加到图片末尾,解压直接用解压软件打开图片。

在Windows下敲命令: copy /b A.JPG + B.zip C.JPG,结果如下:

我大致看了一下zip的文件头,头两个字节Ascii为”PK”(估计是pkzip的缩写吧),估计zip通过”PK”定位文件开始,丢掉之前的所有数据,不过貌似这样做有点风险。

快餐店小票中的算术

上次在小米便当快餐店吃饭时,我发现小票上3个套餐的饭菜价格好像一道算术题,上面写的如下套餐:

1大荤 + 1小荤 + 1素 + 饭 = 10

1大荤 + 2小荤 + 饭 = 12

1大荤 + 2小荤 + 1素 + 饭 = 15

设 1大荤+饭 为变量x,则式子变为:

1小荤 + 1素 + x = 10

2小荤 + x = 12

2小荤 + 1素 + x = 15

上式可以求出:

小荤 = 5

素菜 = 3

x = 大荤 + 饭 = 2

看来这个套餐的大荤好像白送的-_-!!!。

teppoman2刺客游戏技巧

我以前一直玩teppoman2刺客游戏,一个日本人写的游戏,但最多只能玩到第5关。这个游戏难玩的原因之一是复杂的键盘操作:

  • 短跑(dash) – 快速按两次左/右方向键
  • 空中滑行(glide) – 短跑之后跳跃
  • 刹住(skid) – 滑行之后,按下相反的方向键
  • 反跳(reverse jump) – 刹住之后跳跃
  • 身体冲浪(body surf)- 在高处使出空中滑行,然后按住 Shift

我觉得最有用的就是反跳,但恰恰按键最复杂。如向前反跳为:快速按两次右方向键,马上再按一次左方向键,再按Shift。这一连串按键需一气呵成,我等懒人实在没办法只能借助Python的威力搞定这些按键了。

基本思路是Hook键盘keyup事件,然后用Win32 API SendInput或keybd_event函数模拟键盘输入,需要的Python第三方库有:pywin32、pyHook。

具体实现是用’z’键作向前反跳,用’x’键作向后反跳。

Python语言: Codee#23900
#-*- coding:UTF-8 -*-
import time
import win32gui
import win32api
import win32con
import pyHook  

# global
g_hwndWind = None

def SimulateKey(vk, t = 0.05):
    scan = win32api.MapVirtualKey(vk, 0)
    # down
    win32api.keybd_event(vk, scan, 0, 0)
    time.sleep(t)
    # up
    win32api.keybd_event(vk, scan, win32con.KEYEVENTF_KEYUP, 0)
    # simulate time delay
    time.sleep(0.05)

def OnKeyboardEvent(event):
    global g_hwndWind
    print event.MessageName
    if event.Window == g_hwndWind:
        if event.Ascii == ord(‘z’):
            # ‘z’ simulate jump back (right+right+left+shift)
            SimulateKey(win32con.VK_RIGHT)
            SimulateKey(win32con.VK_RIGHT)
            SimulateKey(win32con.VK_LEFT)
            SimulateKey(win32con.VK_SHIFT, 0.5)
        elif event.Ascii == ord(‘x’):
            # ‘x’ simulate jump front
            SimulateKey(win32con.VK_LEFT)
            SimulateKey(win32con.VK_LEFT)
            SimulateKey(win32con.VK_RIGHT)
            SimulateKey(win32con.VK_SHIFT, 0.5)
    return True

def main():
    try:
        # find teppoman2 window handle
        global g_hwndWind
        g_hwndWind = win32gui.FindWindow(“Mf2MainClassTh”, “偰偭傐儅儞俀”)

        # create the hook mananger
        hm = pyHook.HookManager()
        hm.KeyUp = OnKeyboardEvent

        # hook into the and keyboard events
        hm.HookKeyboard()

        # message poll
        win32gui.PumpMessages()
    except:
        print “can’t find window”

if __name__ == “__main__”:
    main()

读《曾国藩》by唐浩明

我们被历史书灌输太平天国运动的伟大,抹黑曾国藩为刽子手、曾剃头,这其实是众多冤案中的一件罢了。

我从小留恋于姑父的书房,常常赞叹书之繁多,每每看姑父卧室床头放的几本书中必有一本讲曾国藩的书,而且都是当时罕见的锦布包装。我一向很崇拜姑父,爱屋及乌,对曾国藩也仍眼相看。

正所谓乱世出英雄,英雄造时势。从一个遵从孔孟之道的读书人,转变为人人敬畏的的全军统帅曾剃头,屡战屡败,内外交困,步步紧逼,其中的酸甜苦辣何人可解。

我尤其佩服其冷静自省,除督办军务无空闲外每日坚持写日记并记录做错的事以此为戒,这个不是一般人能做到的。每次做重大决定,必然到独自一人静下心来默想,等考虑全部细节后才实施。