yuewen's profileYuewenPhotosBlogListsMore Tools Help
    December 06

    半年没有更新了

    没有长性,自责一下。
    June 05

    中计矣!

    先说结果吧,两百多人的Live Messenger联系人一下子全没了。
    事情的起因还要从我的Nokia 6170坏掉开始,因为6170坏了,又不想花钱买新手机,所以就把以前坏掉的Jasjar又翻腾了出来。联系了一家中关村卖智能手机的,送去维修,当时修不了,就放到那里再查一下故障原因看能否修理,过两天打过电话来说确实是排线问题,可以修好,750元。又过了几天,打电话说修好了,过来取吧。于是屁颠屁颠的跑去取回来,刷了个全新的Windows Mobile 6中文版(倒霉就倒霉在这个WM6上了),可是一试麦克风又不行了,打不了电话啊,还得去修。又是当时修不了,放到那里了,过了两天打电话来说麦克风坏了,可以修好,80元,而且为了确定真是麦克风坏了,还把机器刷成WM5.0了。又过了两天,打电话说修好了,过来取吧。于是又兴冲冲的跑去取回来,又刷成了Windows Mobile 6.0(事后证明,这纯属是倒霉催的)。
    昨天晚上,闲来无事运行了一下WM6里的Live Messenger,提示我会把Messenger联系人加到Outlook联系人里,当时没有多想,而且不选择“是”根本就不让登录。登录后好像是出来个同步选项,一个是联系人,一个是邮件,默认都是选中的,点确定继续,然后就进入Live Messenger了。退出后,进入联系人程序,发现Live Messenger把我的200多号人都加进来了,再加上我原有的100多号人,联系人的记录太多了,打电话找人太费劲了,所以决定删掉Live Messenger的联系人。因为联系人程序里,只能是一个一个的删除,所以当时就躺在床上一个一个的删,删了大约有50多个吧,感觉太无聊就睡觉了。
    今天到公司,想到可以把联系人同步到Outlook里,在Outlook里一次性的删除,再同步一下不就都得了嘛。可同步了一下发现,Live Messenger的联系人居然不能同步到Outlook里,看来是做特殊标记了,还得在Jasjar上一个一个删了。吃完午饭后,开始动手删,大约用了半个小时吧,终于全删完了,感觉轻松了好多。
    晚上回家后,又想试一下Live Messenger,心想我把人都删除了不会再给我加上吧。登录后,首先检查了一下联系人,发现没有再自动添加上,感觉大喜。可是接下来发现,Live Messenger联系人里也显示0个联系人在线,0个人脱机。原来把Live Messenger联系人都删掉是不行的,结果就是看不到任何人了,看来要想用Live Messenger,就得承受在联系人中把Live messenger的联系人都添加进来。现在可怎么办呢,我已经一个一个都删除了,怎么恢复呢?摸索了一会,发现了一个同步功能,点了一下,等了一会没有反映,GPRS太慢了,切换到wifi登录后,又点了一下同步,这下快了很多,一会报告同步完成。可是联系人里什么都没有,我突然头皮炸了一下,我可能犯错误了。赶紧打开电脑,登录Live Messenger,一看联系人都还在,正高兴着呢,这时发现联系人在一个一个的自动消失,几秒钟工夫就全没了。
    这么多天一来,又折腾着修手机,又折腾这刷机,中间几次遇到挫折仍不放弃,敢情最后就为了这个结果啊,真是不服不行啊。
    April 03

    Google Reader

    因为做过Reader类的软件,所以对Reader这个词比较敏感,但是Google Reader今天第一次听说,确实被吓了一跳:
    主要是用来阅读RSS资源的,可以直接把RSS的地址添加进来阅读,例如Live Spaces的个人空间,blogspot的个人空间等。
     
    另外,今天发现blogspot又被解封了。
    March 21

    需要这样封锁嘛?

    难道能把所有国外的博客站点都封了嘛?还是不管那么多先把头埋到沙子里做一阵鸵鸟再说?

    blogspot.com被封锁了,上网查了一下,原来这个站点是屡次被封。Google为什么不向微软多学学,看人家Live Spaces就没事。

    不过更有意思的是,blogspot被封了后,我查到一个网站叫pkblogs.com,这个网站的内容非常简单,说如果你在印度、巴基斯坦、伊朗或中国,blogspot被封之后,可以通过pkblogs.com继续访问。例如,你的blogspot叫houyuewen.blogspot.com,那么用www.pkblgos.com/houyuewen 就能直接访问。看到此网站后大喜,原来还真有绿林好汉。可是仅仅一个下午时间,到今天晚上,我发现pkblogs.com也不能访问了,莫非这么快又被agent发现了?

    印度、巴基斯坦、伊朗居然跟我们一样,真是没有想到。

    补充:最后一句话可能会带来误解,我的意思是我们居然跟伊朗一样,真是没有想到。

    再补充:这么说还是欠妥,伊朗怎么了,人家也是民选总统呢。应该是我们居然跟阿三、小巴、邪恶轴心混在一起,真是没有想到。

    后记:pkblogs又可以用了,看来是临时性的故障。

    March 07

    XX一样的Live Spaces

    标题里含狗屎居然不让发。
    写了半天,点了一下添加照片全他娘的没了。
    在Google新开通了两个服务:
    可以直接用Picasa上传到网络相册里,免费空间250M,每年500美元可以买250G。
    Blog:http://houyuewen.blogspot.com/,简洁易用,速度快,可以直接从Google的docs服务发文章到blog里,也可以直接从picasa里向blog发照片。文章里添加照片比spaces好很多,不过似乎不能通过发送邮件发表照片,live spaces可以通过邮件发表照片,不过要限定发送者的邮件地址。用手机向live spaces直接发照片一直不成功,目前都是通过gmail中转一次。
    February 22

    《大明王朝》还不错

    花10块钱买了两张DVD,46集,从大年三十开始看,初四看完。
    编剧刘和平,就是当初《雍正王朝》的编剧,此人写权术斗争确实有一套。海瑞这样的人物太罕见了,嘉靖这样的皇帝也是比较另类的,陈宝国继大宅门之后又一次成功的出演。
    January 30

    机器人产业或许会出现爆发式增长

    假如8000元钱可以购买一台能够洗衣,做饭,打扫卫生的机器人你买不买?我会。
    乐高有3000多块钱的玩具机器人卖,这个机器人具备声,光等各种传感器,可以组合成各种形状,可以通过软件编程控制它的行为。
    假如在未来的几年里,有公司推出功能更加强大的机器人操作系统,有公司协调工业界制定出类似与目前PC机的硬件标准规范,那么家用机器人将会出现一个爆发式的增长。
    有可能一开始的操作系统只象90年代处的Dos一样,有可能一开始的机器人硬件简单的就像286,但是如果可以去中关村买一堆硬件,再下载一个盗版的操作系统就能攒出一台机器人出来,这将会是什么样的一个场景啊。应该有许多人为之疯狂吧,至少我会弄回家开发一个机器人煎鸡蛋程序试试,然后再从网上下载个洗袜子2.0用用看。
     
    November 01

    中非论坛倡议不开车,政府应该拿出诚意

    对于政府管辖单位的车辆,据说是要封存一部分;可是对于咱平民百姓的车,政府也只能是倡议大家不开车。似乎是政府也没有很好的办法解决这个问题,只能依靠广大人民群众识大体重大局,自觉自愿的减少开车出行。
    可问题是,这样一来群众就吃亏了。因为交给政府的养路费、车船使用税,以及被政府强制缴纳的交强险都是包年的,不管你开不开车,费用都已经分摊到每天了;而且群众在单位交停车费的,也多是按月缴纳。这样算下来,各种费用分摊到每天也不是可以忽略不计的;钱多少还是其次,关键是道理就不对了,这不成了让群众自己吃亏响应政府号召了嘛,啥时候政府也能吃把亏让咱老百姓赚点小便宜啊。
    所以,咱这回还就得觉悟低一次,坚决开车。不过一个中非论坛就这样,那08年奥运会可咋弄啊?看来政府管理应该是一个系统工程,平时不多听听群众的呼声,到时候又装可怜也怪没劲的,这事办多了岂不有害政府的英明?
    September 22

    又是一年秋来到,微软庙会挺热闹

    06年的TechEd又开始了,还没有哪个公司的技术会议象微软这么搞,三天的会议,N场的讲座,路远的要住宿,路近的有班车,一天管三顿饭,最壮观的是2000多人在一个超大的大厅里同时就餐的场景,这样的IT庙会还是不多的。
    1 大方向
        微软认为06、07两年是他们推出新产品最多的两年,据称耗资几百亿美元研发的新产品将在这两年密集发布。这其中包括万众期待的Vista,Office 2007,包括一系列以2007标示的产品。
    2 大理念
       大公司如果只卖产品的的话有点说不过去,所以他们会提出新的理念,这方面做的最讲究的是IBM。微软当然也要提,今年的理念是People Ready,4项承诺。为此,微软仿照24小时的套路,推出4集短片,向外部介绍他们的4项承诺。演员都是微软的员工,鲍尔默还出演了一个小角色。不过,说实在的,这4项承诺还不是太酷,诸如减少复杂性、提高安全性之类的东西虽然比较务实,但不如软件就是服务之类的话更拽一些。
    3 Vista
       Vista已经比较成熟,RC1已经发布。从现场的演示情况来看,Vista确实在易用性、安全性方面有相当的改善。在功能上也集成了比以前任何版本的Windows都多得多的软件,比如说高级防火墙软件,备份恢复软件,安全监控软件等等,说不定又会有不少的公司告微软垄断了。
    4 Ribbon
       Office 2007采用了称为ribbon的菜单和工具条机制,在UI方面是一个比较重大的突破。ribbon颠覆了传统的菜单和工具条,给程序带来了更好的易用性,这会成为接下来无数软件的效仿样式。
    5 Share Point 2007
       Share Point的价值正在被微软和更多的人认识到,这确实是个非常好的东西,2007版本似乎增加的实质性的东西不是太多,但是在界面方面有了比较大的优化,非常值得期待的产品。
    6 Live Communication Server
       内部即时消息的服务器,终端程序称为Office Communication,PC版和WM版都有,也是一个好东西,但是估计接触的人不会太多,小公司不会用到,大公司也不见得会采用即时消息。
     
    September 01

    黑道业务广告

    今天收到一条短信,内容如下:
    本市低价转让九成新少量黑车。出售防身武器,另办理高额贷款,帮人了仇等业务。电话:XXXXXXX。
    看来他们是属于典型的产品、服务一把抓的思路,还是处于资本积累阶段的经营模式,对自己的市场定位模糊不清。建议专注于产品销售,黑车、防身武器都是属于市场短缺产品。相比于高额贷款来说,他们属于一次交易,不涉及售后服务。帮人了仇的业务肯定做不大,这样的业务开展几回估计员工都得跑路了。
    August 30

    包月的Wap没有了

    北京移动已经取消了神州行15元的wap包月申请服务,全球通20元的wap包月申请服务也已经取消。原先已经开通的并没有被强行取消,仍然可以继续使用。有人在神州行取消申请之前囤积了一批开通包月wap的神州行卡,现在正以高价出售。
    估计是北京移动觉得有的亏了,因为现在全球通可以申请的GPRS套餐都是限流量的,比如说20元限50M流量。
    作为一个企业,因为之前的业务决策错误,现在亡羊补牢挽回过错并没有错误,而且对已经既成事实的用户,移动也允许用户继续使用服务。但是,移动在这件事情的做法上做的并不是太光彩,当初开通这个新业务时,在各种媒体上的宣传铺天盖地,但是在取消这个业务时,却是偷偷摸摸的仅在网站和客户服务电话中取消了对这个业务的申请,除此之外并没有在媒体上做任何说明和解释(至少Google搜不到,移动自己的网站上也看不到)。
    作为全世界最赚钱的公司之一,移动你这么做有意思吗?
     
    与之关联的一个有意思的细节:神州行的包月wap以前可以通过138000138000这个电话自助开通,移动取消申请后,当选择了开通服务之后会有“该业务目前暂时无法开通”之类的提示,但是有细心的用户发现,当提示无法开通时,如果继续按以前的“1”键仍然会开通。热心的用户就把这个好消息放到了某个网站上,但是仅仅三天之后,移动就发现并彻底屏蔽了该功能。由此可见,移动也并不是想象中的那么效率低下。
    July 17

    ECC算法实践

    关于椭圆曲线加密算法(ECC),前几天因为想算序列号,所以研究了一下,把知道的东西写一下,怕以后忘记。

    关于ECC算法本身,请Google一篇文件《ECC加密算法入门介绍》。在此,只介绍几个概念。

    所谓椭圆曲线,是指类似于 y^2+a1xy+a3y = x^3+a2x^2+a4x+a6 这个表达式的曲线。

    为了简便起见,有的算法采用y^2 = x^3+ax^2+b的形式,而有的采用 y^2 + xy = x^3 + ax^2 + b 的形式。

    椭圆曲线为了用于密码学,需要把以前的连续曲线变为有限域上的点。所谓有限域,就是由有限个元素组成的域,比如说有限域Fp,就是由P个元素组成的域。

    在引入有限域后,原来的加减乘除法则都发生了变化,例如:

    加法是a+b≡c (mod p),即(a+b)÷p的余数 c÷p的余数相同。

    乘法是a×b≡c (mod p),即(a×b)÷p的余数 c÷p的余数相同。

    b的倒数b^-1的算法是用b×b^-1≡1 (mod p)来算的。

    举例来说假定有限域是20,那么11+13≡43的倒数是7

    有限域的算法对ECC来说非常关键,由此可以类推的是b的平方根c应该是c×c≡b (mod p),所以相当难算,到现在我也想不出算法是什么。

    还有一个很重要的概念就是阶,对于椭圆曲线上的某个点G,存在一个最小的数n,使得nG=O∞,那么n就是G点的阶。

    ECC可以用户数据加密,签名等,也可以用户生成软件序列号,微软的软件序列号就是用的ECC

    ECC生成软件序列号的方式是:

       1、选择一条椭圆曲线Ep(a,b),和基点G
       2
    、选择私有密钥kk<nnG的阶),利用基点G计算公开密钥K=kG
       3
    、产生一个随机整数rr<n),计算点R=rG
       4
    、将用户名和点R的坐标值x,y作为参数,计算SHASecure Hash Algorithm)值,即Hash=SHA(username,x,y)
       5
    、计算sn≡r - Hash * k (mod n)
       6
    、将snHash作为 用户名username的序列号

    验证的算法为:

    1、从用户输入的序列号中,提取sn以及Hash
    2
    、计算点R≡sn*G+Hash*K ( mod p ),如果snHash正确,其值等于软件作者签名过程中点R(x,y)的坐标,因为
          sn≡r-Hash*k
    mod n
         
    所以
           sn*G + Hash*K
          =(r-Hash*k)*G+Hash*K
          =rG-Hash*kG+Hash*K
          =rG- Hash*K+ Hash*K
          =rG=R

     3
    、将用户名和点R的坐标值x,y作为参数,计算H=SHA(username,x,y)
     4
    、如果H=Hash 则注册成功。如果H≠Hash ,则注册失败。

     

    实现该算法时,可以采用一些Open SourceECC库,例如borZoi

    borZoi选定有限域用的是这样的方法:

    // Field polynomial: p(t) = t^163 + t^7 + t^6 + t^3 + 1

    inline void use_NIST_B_163 () { F2X pt=Pentanomial (163, 7, 6, 3, 0); setModulus (pt); };

    可想而知,这个有限域的值是很大的,但是这还只是borZoi中最小的有限域,可以选择强度更大的有限域。其中的F2X是封装了大数加减乘除等运算的类。

     

    接下来定义曲线:

    // Degree 163 Binary Field from fips186-2

    // Pseudorandom curve E: y^2 + xy = x^3 + x^2 + b,

    // b = 2 0a601907 b8c953ca 1481eb10 512f7874 4a3205fd

    // Base point order:

    // r = 5846006549323611672814742442876390689256843201587

    // Base point G:

    // Gx = 3 f0eba162 86a2d57e a0991168 d4994637 e8343e36

    // Gy = 0 d51fbc6c 71a0094f a2cdd545 b11c5c0c 797324f1

    // Cofactor f = 2

    #define NIST_B_163 EC_Domain_Parameters (163, 3, 7, 6, 3, Curve ("1", "20a601907b8c953ca1481eb10512f78744a3205fd"), decto_BigInt ("5846006549323611672814742442876390689256843201587"), Point ("3f0eba16286a2d57ea0991168d4994637e8343e36", "0d51fbc6c71a0094fa2cdd545b11c5c0c797324f1"), decto_BigInt ("2"));

     

    可以看到,borZoi用的曲线方程是y^2 + xy = x^3 + x^2 + ba1,但是b选择了一个大数:

    b = 2 0a601907 b8c953ca 1481eb10 512f7874 4a3205fd

    基点G的座标也是很大的数,rG点阶,可以验证rG=0

     

    如果试图自己找到另外一个G点,是非常困难的一件事,我曾经试图自己找到一个,但是最终还是放弃了。虽然从道理上来说很简单,只要满足方程式就可以了。

     

    我们先找到一对私钥和公钥。

    use_NIST_B_163 ();

    EC_Domain_Parameters dp = NIST_B_163;

    ECPrivKey sk (dp);

    ECPubKey pk (sk);

     

    构造私钥的代码其实就是:

    ECPrivKey::ECPrivKey (const EC_Domain_Parameters& ecdp) {

             dp = ecdp;

             s = GenRandom (dp.m);

             s %= dp.r;

    }

    实际上就是选择了一个小于阶r的一个整数。

    根据私钥生成公钥的过程是:

    ECPubKey::ECPubKey (const ECPrivKey& sk) {

             dp = sk.dp;

             Curve E (dp.a, dp.b);

             W = E.mul (sk.s, dp.G);

    }

    实际上就是按照算法要求的计算K=sGborZoi提供了曲线计算的很多方法,例如,此处计算sG,用的是Curve类的mul方法。

     

    然后,我们根据算法要求,生成一个随机数rr<n,并且计算R=rG

    BigInt r = GenRandom (pk.dp.m);

    r %= pk.dp.r;

     

    Curve C(pk.dp.a, pk.dp.b);

    Point R=C.mul (r, pk.dp.G);

     

    然后我们定义一个字符串作为用户名

    OCTETSTR data(3);

    data[0] = 'a'; data[1] = 'b'; data[2] = 'c';

    将用户名和R点的座标计算SHA

    OCTETSTR x_buf = FE2OSP (R.x);

    OCTETSTR y_buf = FE2OSP (R.y);

    BigInt Hash = OS2IP (SHA1 (data || x_buf || y_buf));

    OCTETSTR的定义实际就是:

    typedef unsigned char OCTET;

    typedef std::vector<OCTET> OCTETSTR;

    然后计算sn≡r - Hash * k (mod n)

    BigInt sn = sk.s * Hash;

    sn %= pk.dp.r;  // pk.dp.r就是G点的阶

    sn = r - sn;

    if(sn < BigInt(0))

             sn += pk.dp.r;

     

    snHash就是data的序列号了。

     

    下面验证,根据算法要求,计算点R≡sn*G+Hash*K ( mod p )

    Point R2 = C.mul(sn,pk.dp.G);

    R2 = C.add(R2, C.mul(Hash,pk.W));

    OCTETSTR x2_buf = FE2OSP (R2.x);

    OCTETSTR y2_buf = FE2OSP (R2.y);

    然后,H=SHA(username,x,y)

    BigInt Hash2 = OS2IP (SHA1 (data || x2_buf || y2_buf));

    判断两次的Hash值是否是相等的就可以了。

     

    以上就是生成和验证序列号的方法,遗憾的是,borZoi的曲线和G点选择都太大了,生成的序列号太长了。

    微软的序列号只有25位,这25位是根据114位的数据用base24编码生成的,这24个字符一般是不容易混淆的字符:BCDFGHJKMPQRTVWXY2346789

    根据文章《Microsoft25CDKey里有什么》记载,这114位的序列号包括:

    31位的Data部分,对应于我们例子中的data部分;28位的Hash55位的签名。

    根据算法的原理可知,Hash数据取多少位无所谓,如果需要28位,直接从前往后取28位就可以,不影响算法的准确性。

    但是签名数据如果取55位的话,就比较麻烦,因为根据算法,我们知道如果签名是55位的话,就要求G点的阶r不能多于56位,否则不能保证签名一定会少于55位。因为我们需要找到一个G点,使他的阶r小于56位。我曾经试图找过,但是因为算法较笨,电脑跑了半天也没有找到,所以最后还是放弃了。

    June 27

    醒世恒言【转】

    站的更高,尿的更远。   

    穿别人的鞋,走自己的路,让他们找去吧.   
     
    女人无所谓正派,正派是因为受到的引诱不够;男人无所谓忠诚,忠诚是因为背叛的筹码太低……   
    再过几十年,我们来相会,送到火葬场,全部烧成灰,你一堆,我一堆,谁也不认识谁,全部送到农村做化肥. 
     
    自从我变成了狗屎,就再也没有人踩在我头上了.
    June 21

    历史另一面

    中国历史:

    1.历史上唯一向全世界宣战的是中国的慈禧太后;

    2.中英鸦片战争中,清兵和英兵的伤亡比例是600:1;

    3.北京人民一口一口生吃了民族英雄袁崇焕的肉;

    4.明末张献忠屠杀和兵灾致灭川人上千万,其后150年间,清朝不得不持续移湖南、湖北人和两广的民众填充四川;

    5.明末代皇帝崇祯要皇室大臣捐100万银子打李自成,大家都哭穷,李自成进京后向他们追银子,严刑拷打后竟然捐出来7千万两;不少人甚至连老婆女人都赔出去了,这才引得吴三桂冲一怒为红颜,江山顿时变色,华人从此拖起了猪尾巴。

    6.和绅在位10多年,家产有2亿两白银,相当于甲午战争后中国给日本的赔款;

    7.三国后的南北朝时代有个皇帝的书童领8000兵,从现在的南京出发,一路打下长安、洛阳70座城市,击败当时北魏的50多万大军,他叫陈庆之;

    8.秦始皇并没有真正统一中国,因为当时还有一个中山国;

    9。伟大的解放战争中,长春围困战饿死平民大约20万,大多数是在国/民党防线以外共/产/党防线以内的环形圈子里。城里往外放,城外决不肯让一人溜出包围圈,以迅速消耗包围圈内的食粮。造成的死亡人数略少于南京大屠杀,稍多于广岛长崎原子弹爆炸,关键是没有付出太多攻坚的牺牲、浪费什么弹药。

    10.李自成之所以反叛是因为government(政府)让他下岗(他原来是驿卒,类似送军事情报的信息员);

    11.历史上唯一被灭十族的人是明朝的方孝儒;

    12.明朝万历时,云南土司思任叛乱,在平叛中明全国70%的军队死在云南;

    13.中国历史上第一个女皇帝是隋末文佳皇帝陈硕贞而非武则天;

    14.逼死楚霸王的韩信死时被关在笼子里,笼子外面蒙上布,然后一群女人用竹枪捅死了他;威名赫赫的英雄,往往有时死得很窝囊,如本朝的彭大将军、刘主席。

    15.秋瑾被处决前提出的三个要求是不脱衣服、不砍头和写信与家人决别,前二个要求都得到了满足;

    16.中国历史上唯一掉进粪坑呛死的国君是春秋的晋景公姬獳;

    17.安禄山在杨贵妃面前最常见的扮相就是襁褓里的婴儿;

    18.李自成曾被明总督陈奇渝困在车厢峡谷,但后者竟然接受他们的投降请求,结果李自成一被放出峡谷马上就反叛了;

    19.秦灭亡后,项羽与刘邦争夺天下,对峙于广武涧时,项羽用箭射刘邦,一箭正中胸口,刘忍痛拨箭,反唇讥笑项羽只射中他脚后跟,结果项羽羞而退兵,继鸿门宴后再次错过除掉刘邦的难得时机;

    20.金熙宗完颜亮曾引兵50万攻打南宋,宋军望风而逃,然而金兵却在采石矶被一个书生虞允文打败,金国陷入内乱,完颜亮被杀,南宋至少再维系了100年;

    21.大风改变历史:元军10万在日本九州登陆后与日军激战于海滩,突然刮起的大风过后,元海军一大半舰船沉没,整个舰队基本覆灭;日本从此认为他们是天佑之国,也开了神风护国的说法,可惜二战中神风攻击也再没那样的好运了。
    当吴三桂与李自成大战于山海关外时,突然刮起的黄沙大风(沙尘暴)过后,清军突然出现在吴一方,李自成大顺军大败。

    22.秦朝人口有2000万,西汉武帝时升到5000万,东汉末年,由于军阀混战和瘟疫流行,全国人口竟然减少了3/4,中华大地只剩1100万人口;

    23.北宋清明上河图有人物1600多人,比四大名著中任何一部出现的人物都多(三国也才1 200人);

    24.蒙古军在征服世界时,屠杀了1个亿的人口,与之相比,纳粹屠杀的犹太人不过才600万; “黄祸”之烈可见!

    25.在第二次鸦片战争中,首先抢劫圆明园的不是英法联军而是中国人;

    26.雍正实行的“摊丁入亩”直接导致的结果是全国人口在10年内净增一倍,人口从康熙末年的7千万增加到乾隆初年的1亿5千万;
    毛太祖与马寅初论战,提出人口越多越好,人多力量大,并接见生了多胎的英雄妈妈,给予其中部分人吃国家粮的政策,结果中国人口从论战时的4亿多,猛增到他老人家辞世时的8亿多。不得不从那时起开始强行计划生育。

    27.道光皇帝首创“四菜一汤”,他为人十分节俭,勤政爱民,但就是由于签了一份中英南京条约被历史学家唾弃;

    28.陈璧君原先与汪精卫并不认识,当汪精卫决定去刺杀满清摄政王时,她作为革命党人鼓励汪说:”你去干吧,你明天就要去死,我没有旁的送给你,就跟你睡一晚吧。“俩人从此成为夫妻,后来一同成为汉奸。


    外国历史:

    1.纳粹德国兵员最高达1300万,等于现在上海90%的人口;

    2.希特勒之所以没来得及打下莫斯科是因为之前在罗马尼亚发生了2个月的叛乱,否则在9 月份即可发起莫斯科战役,以当时德军攻势之盛来看,苏联必败;

    3.日本下决心侵华的直接原因是1931年阪神大地震,因为他们害怕再来一次地震国家会沉入海底;陆沉是日本民族一直挥之不去的噩梦,30年代中曾经准备把首都从东京迁到中国东北的长春。

    4.美国曾经有个诺顿皇帝,深受人民爱戴;

    5.南美的乌拉圭曾在上世纪30年代与巴拉圭、巴西、玻利维亚同时开战,全国男人死掉一半;

    6.日俄海战中俄波罗的海舰队之所以覆灭是因为它从欧洲到亚洲万里奔波,船身上附着了太多贝壳,船速减慢了;

    7.德国的非特列大帝在统一德国之前竟然穿着盔甲溺死在小溪里,希特勒进攻苏联的计划即以他命名,叫“巴巴罗萨计划”;

    8.柬埔寨红色高棉夺取政权后把城市人口全部撤到农村,2年中以革命的名义杀害了100多万人,被法国学者称为“一个民族的自我灭绝”;

    9.非洲的乌干达(卢旺达?)在1994年发生胡图族和图西族的种族仇杀,3个月内死亡100万人,大多数被切香蕉的大砍刀砍死;

    10.日本战国时代有位诸侯叫今川义元(实力相当于三国时的袁绍),在率4万精兵向京都进军,夺取天下的途中,他和5000亲兵在在一个峡谷内遭到一个小混混800多人的突袭,他被当场砍死,这个混混就叫做织田信长(相当于三国时的曹操);

    11.拿破仑败亡的原因不是因为侵略俄国,而是在西班牙投入了50万大军与农民军作战8年无法获胜;

    12.西班牙殖民者皮萨罗诱捉了印加(今南美秘鲁)国王,把他关在一间100平米的房间里,允诺只要房间填满了金子就释放国王,当房间真被印加人堆满金子后,国王立即被杀;

    13.一战时一百万德法军僵持于凡尔登,一天法军一个弱智试炮,一炮命中德军隐藏在森林中的火药库,造成60万发炮弹和几十吨火药大爆炸,法军由此扭转一战战局;

    14.德军在二战前发现一本书《未来的陆军》,讲述如何以机械化部队进行机动作战,德军据此建立了庞大的装甲军团,仅仅用了6个星期就打败了法国,这本书的作者就是后来的法国总统—戴高乐;

    15.苏联史上最大的连环杀手自1978—1990年间共奸杀了52名男女,最后由一名老妪在一个乡村火车站抓住了他;

    16.同样是一战战场,一天德军发现一个山头每到中午就有只波斯猫出现,经分析后认为起码是一个高级军官的指挥所,于是集中炮火猛轰该山头,战后得知这一轰把法军一个师指挥所连同师长家的猫咪一起炸上了天;

    17.罗马城曾被自己的皇帝下令烧毁,原因是他想看着焰火吟诗,这个皇帝叫尼禄;

    18.最不可思议的发明家当属达芬奇,虽然他的发明仅限于图纸,但包括了自行车、坦克、潜水服、直升机、欧洲地图、蒸汽轮船等几十种近现代机器,极大超越了人类思维极限,以致于有人认为他是一名现代人,只是不知为何被禁锢在了15世纪。最近拍的《达芬奇密码》又被国内禁演,想来是怕中国人学习到了他超人的智慧,过于聪明而不好管理。
    June 19

    动物拍广告【转】

    1.猴子进了玉米地,右手掰下一个,夹在左腋下,又发现了个更好的,于是左手再掰一个夹在右腋下,如此往复,猴子忙了半天,仍然没有停下的迹象。这时在一旁放哨的同伴急了:“行了行了,找到好的了吗?”掰玉米的猴子回过头来,认真地:“没有最好,只有更好!”  

      2.一群猴子首尾相连,探着身子在河里捞月亮,一而再,再而三,始终不能成功。一个不懂事的小猴急了:“我们什么时候才能捞到月亮啊?”“你没看见吗?”猴王正色道:“我们一直在努力。”  

      3.狐狸老远就看到了满架熟透的葡萄,它远远地便开始助跑、起跳。一次,两次,三次……最终只能悻悻地放弃。站在高处的乌鸦道:“狐狸先生,敢情这葡萄还是酸的吧。”狐狸咽了咽口水,叹了口气:“好吃,看得见。唉!”  

      4.乌鸦找到半瓶果奶,它的嘴显然无法喝到这些甜美的液体。它想了想,决定用嘴衔起小石块,一块一块地往瓶子里扔,经过不懈的努力,水面上升了,乌鸦美美地喝上一口。这时又有几只小鸟飞了过来,乌鸦舔了舔嘴,看着大家:“今天你喝了没有?”  

      5.猴子对主人朝三暮四的喂食计划显然很不满意,不免闹出情绪来,主人为了安抚它们,决定改为朝四暮三,猴子们很是高兴了一阵子,但很快发现又上当了,因为总量并没有增加,猴子们觉得被人耍了,它们集体与主人谈判。猴子们满怀希望地看着主人:“怎么样啊,这回给我们多少?”主人愤怒地拿着食物,在手里掂了掂:“早一粒,晚一粒。”  

      6.一只老鼠爬到了油瓶口,将尾巴伸进瓶里,油顺着尾巴一滴一滴往下滴,另一只老鼠在下面贪婪地吃着,舍不得离开。放哨的老鼠急了:“喝够了没?味道怎么样啊?”喝油的老鼠咂咂嘴:“滴滴香浓,意犹未尽!”  

      7.老虎将信将疑地跟着狐狸走了一遭,果然,森林里的小动物见了狐狸个个噤若寒蝉。老虎见此,不禁羡慕起来:“可以啊你!”狐狸得意地笑道:“我的光彩来自你的风采。”  

      8.老虎请狼吃饭,少不了要征求狼的意见:“你喜欢吃什么?”狼一听激动得手舞足蹈:“羊羊羊!”  

      9.鳄鱼毫不费力地咬断了野牛的脖子,大快朵颐起来。鳄鸟飞了过来:“老兄好胃口啊。”鳄鱼头也不回:“牙好胃口就好,吃吗吗香。”  

      10.鳄鸟道:“让我来为你剔牙吧。”“为什么?”鳄鸟神秘地:“我们的目标是——没有蛀牙。”  

      11.蛤蟆好不容易从井里跳了出来,看到外面广阔的世界,不免感慨起来:“原来生活可以更美的!”  

      12.这时一群天鹅从天空飞过,蛤蟆目不转睛地盯着天鹅,嘴里流出了口水。一旁的青蛙不解:“大哥,你在想什么啊?”蛤蟆的目光一直没有离开天鹅的身影,道:“我心飞翔。”  

      13.青蛙摇摇头:“别瞎寻思了,这是不可能的。”“不!”蛤蟆严肃起来:“一切皆有可能。”  

      14.“可是,从来就没有哪只蛤蟆能吃到天鹅肉。”青蛙不屑。“我能!”蛤蟆鼓起自己的脖子,意志非常坚定。
    June 13

    24小时第六季会怎么开场?

    每天的24个小时你会怎么渡过?象我的话,基本上是睡觉8个小时,然后再吃三顿饭,上下班驾车1个小时,看一份报纸,再看一场球,高兴的话再多看1个小时电视。上班期间看2-3次新闻,写7-8个邮件,写300-400行代码,还有不少时间可以遐想一会,与人争论一会。这样的一天已经是非常充实了。

    可人家杰克-鲍尔那24小时干的事可真是厉害,象第五季,先抢了架直升飞机,降落后杀3-4人,然后混入前总统被杀现场寻找线索,再解决机场恐怖分子,又杀3-4人,之后闯入总统驻地,暴练总统幕僚长,导致幕僚长最后被杀。然后又卧底接触恐怖分子,解决超市神经毒气袭击,杀1人,后来又赶回CTU总部,目睹众同事大批别毒死,在神经毒气中长时间憋气,后又炸掉燃气公司阻止神经毒气经天然气管道进入千家万户,一举拯救了数十万人,期间又杀数人。后来为了拿到一个证据,又先后杀数人,还劫持了一架飞机,最终使飞机在公路上迫降。后来又进入俄罗斯潜艇,在几十枚潜艇导弹发射前击毙恐怖分子。最后是劫持了总统,给总统安装了窃听器,致使总统罪行曝光,总统宝座不保。

    但是,英雄最后还是没有逃脱中国人的追捕,被暴打后装入集装箱运往中国。

    所以,由此带来一个问题,第六季怎么开场?不会是英雄越狱吧?可是越狱后怎么办?总不能在中国打击恐怖分子吧。乘坐最快的交通工具回国也得N多小时,24小时光做飞机有什么看头?

    May 16

    JASJAR使用心得

    JASJAR因何种原因被称之为JASJARGoogle大师也没有考证出来,因此我们也只能把他作为一个产品的代号了。

    JASJAR的主要硬件指标:640*480TFT16位色可旋转触摸屏,全字符键盘,两个摄像头(130万像素和30万像素)Intel PXA270 520MHZCPU128M ROM64M RAM,支持GSM/GPRS/WCDMA/蓝牙/Wi-Fi/红外通讯,无论是从手机角度来说,还是PDA角度来说,这样的配置,基本上可以算顶级的了。当然了,顶级的配置也有顶级的尺寸和重量,三围:81*127.7*25(mm),重量:带电池285g(半斤多,关键时刻仍出去当半拉砖头使)。

    JASJAR的主要软件指标。操作系统是最新的Windows Mobile 5.0,另外,随即预装的软件还有几个比较有用的:语音拨号,zipPDF阅读器,无线管理器,支持MIP2.0java虚拟机,skype等。

    拿到新机器使用之前,不要着急往里面装软件。因为i-mate有个www.clubimate.com网站,如果你注册了新用户,并用JASJARIMEI号码通过了验证,就可以从这个网站下载到最新的系统升级软件。升级包通常有60多兆,下载完了展开就是一个exe文件,执行并严格按照提示做就是了。对升级有几个小说明:

    1.         升级包目前有阿拉伯文版本,意大利文版本,MTN南非版(?),还有英文版。没有中文版,所以对界面上出现英文过敏者不适合用此升级包。当然也有人刷成了Dopod 900的繁体版ROM,还有人刷成了简体中文版,我主要是考虑日后还指望着能经常性地升个级,所以就一直使用英文版,而且还鼓动一个朋友把他中文也刷成了英文。

    2.         升级时会导致ROM中文件全部丢失,所以升级前一定要备份。

    3.         升级不会太频繁,clubimate对升级包的更新没那么快的,几个月能升一次就不错了。

    4.         目前最新的升级后版本是这样的:

    如果用英文操作系统的话,需要借助于外挂中文系统搞定中文。我用的是著名的CE-STARCE-STAR针对Windows Mobile 5.0推出了针对性的版本(参考网址),并可以支持键盘的直接输入,已经是相当的完美了。

    我用JASJAR最多的几个功能是:上网,发彩信,看电子书和打游戏。

    为了便于上网,我新买了一块神州行的SIM卡,并开通了每月15元的wap包月服务。在设置wap网络连接时,除了要输入cmwap的接入点,还有输入10.0.0.172的代理服务器地址。设置完成后,用浏览器就可以上普通的网站和wap网站了。

    我经常去的站点有:

    wap.sohu.com

    wap.3g.net.cn

    wap.iask.com

    等等。

    收发彩信最大的障碍在于彩信服务器的设置问题,JASJAR内置的是ArcSoftMMS软件。下图是我的彩信服务器设置,其中的连接方式就是刚才网络连接设置中的wap连接方式。我一般是把在上网过程中发现的图片和声音都保存下来,发彩信时,这就是我的素材库了。

    看电子书就更不用说了,书生阅读器当然是首选了。为啥是首选呢?因为是俺们公司自己开发的了。书生阅读器可以阅读书生公司书生网的图书,也可以阅读合作网站的图书(手机阅读网)。而且,因为在开发时手头有JASJAR的设备,所以可以很好的支持基于Windows Mobile 5.0的设备以及大分辨率的设备。

    耗时间最多的游戏当数下面这个了,不用说名字大家也知道是什么了。通过对这个游戏的重温,我对麻将算番的思路和方法有了一点小小的心得,搓麻这事,不是运气好就行的,也需要相当的运筹帷幄,持之以恒,敏锐果断,总之麻场如战场。

    December 23

    Image loading with Imaging API

     

    Introduction

    There is a number of different ways for image loading exists on Windows Mobile. The oldest one is to use not officially documented in SDK imgdecmp.dll. This library now considered is deprecated and it will disappear in one of upcoming Windows Mobile versions. Moreover Microsoft claims that using of this library may get caught in an infinite loop in some conditions. Starting from Windows Mobile 2003 new set of functions appeared (SHLoadImageFile, SHLoadImageResource) but these functions are more limited comparing to DecompressImageIndirect from imgdecmp.dll. Particularly I face some problems with PNG files loading as with imgdecmp.dll as SHLoadImageFile on Windows Mobile 5.0.

    Fortunately Windows Mobile 5.0 devices contain new set of API known as Imaging API. This API has quite rich functionality, and in future when Pocket PC with operating system version less then WM05 will be in small minority it will not any questions which API to use, but still we need support users with old devices. So I have tried to create image loading code that behaves differently according to operating system version. When it is loaded on older devices (starting from Pocket PC 2002) it uses imgdecmp.dll but when it is run on newer devices it uses Imaging API.

    What You Need


    Solution

    In older devices LoadImageWithImgdecmp function is used:
    Code:

    static DWORD CALLBACK GetImageData(LPSTR szBuffer, DWORD dwBufferMax, LPARAM lParam)
    {
       FILE* f = (FILE*)lParam;
       size_t c = fread(szBuffer, 1, dwBufferMax, f);
       return c;
    }

    #ifndef DecompressImageInfo

    class IImageRender;
    typedef void (CALLBACK *PROGRESSFUNC)(IImageRender *pRender, BOOL bComplete, LPARAM lParam);
    typedef DWORD (CALLBACK *GETDATAFUNC)(LPSTR szBuffer, DWORD dwBufferMax, LPARAM lParam);

    typedef struct tagDecompressImageInfo {
       DWORD dwSize;                                 
       LPBYTE pbBuffer;
       DWORD dwBufferMax;
       DWORD dwBufferCurrent;
       HBITMAP* phBM;                                   
       IImageRender **ppImageRender;                 
       int iBitDepth;     
       LPARAM lParam;                 
       HDC hdc;           
       int iScale;         
       int iMaxWidth;     
       int iMaxHeight;     
       GETDATAFUNC pfnGetData;       
       PROGRESSFUNC pfnImageProgress;         
       COLORREF crTransparentOverride;
    } DecompressImageInfo;

    #endif

    HBITMAP LoadImageWithImgdecmp(const CString &strFileName)
    {
       FILE* f = _tfopen(strFileName, TEXT("rb"));
       if (! f) {
          return 0;
       }

       CWindowDC dc(0);

       DecompressImageInfo dii;
       
       HBITMAP hBitmap = 0;
       
       const int nBuffSize = 4096;
       BYTE buff[nBuffSize];
       
       dii.dwSize = sizeof(DecompressImageInfo);
       dii.pbBuffer = buff;               
       dii.dwBufferMax = nBuffSize;            
       dii.dwBufferCurrent = 0;               
       dii.phBM = &hBitmap;                  
       dii.ppImageRender = NULL;               
       dii.iBitDepth = GetDeviceCaps(dc.m_hDC, BITSPIXEL);
       dii.lParam = LPARAM(f);
       dii.hdc = 0;                              
       dii.iScale = 100;                              
       dii.iMaxWidth = 10000;                        
       dii.iMaxHeight = 10000;                        
       dii.pfnGetData = GetImageData;            
       dii.pfnImageProgress = 0;            
       dii.crTransparentOverride = (UINT) -1;   
       
       HINSTANCE hDll = LoadLibrary(TEXT("imgdecmp.dll"));
       if (!hDll) {
          fclose(f);
          return 0;
       }
       typedef HRESULT (*DecompressImageIndirect_t)(DecompressImageInfo *pParams);
       DecompressImageIndirect_t proc = (DecompressImageIndirect_t)GetProcAddress(hDll, TEXT("DecompressImageIndirect"));
       if (! proc) {
          FreeLibrary(hDll);
          fclose(f);
          return 0;
       }
       HRESULT hr = proc(&dii);

       fclose(f);
       FreeLibrary(hDll);

       if (FAILED(hr)) {
          return 0;
       } else {
          return hBitmap;
       }
    }

    As Microsoft warn us about that in some upcoming versions of Windows Mobile imgdecmp.dll disappear we should invoke DecompressImageIndirect dynamically but not linking with imgdecmp.lib.

    This code works on modern platforms:
    Code:

    HBITMAP LoadImageWithImagingApi(const CString &strFileName)
    {
        IImagingFactory *pImgFactory = NULL;
        IImage *pImage = NULL;
        CoInitializeEx(NULL, COINIT_MULTITHREADED);
       HBITMAP hResult = 0;
        if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory,
                                        NULL,
                                        CLSCTX_INPROC_SERVER,
                                        IID_IImagingFactory,
                                        (void **)&pImgFactory)))
        {
          ImageInfo imageInfo;
            if (SUCCEEDED(pImgFactory->CreateImageFromFile(strFileName, &pImage))
             && SUCCEEDED(pImage->GetImageInfo(&imageInfo)))
            {
             CWindowDC dc(0);
             CDC dcBitmap;
             dcBitmap.CreateCompatibleDC(&dc);
             hResult = CreateCompatibleBitmap(dc.GetSafeHdc(), imageInfo.Width, imageInfo.Height);
             if (hResult) {
                HGDIOBJ hOldBitmap = dcBitmap.SelectObject(hResult);
                  pImage->Draw(dcBitmap.GetSafeHdc(), CRect(0, 0, imageInfo.Width, imageInfo.Height), NULL);
                dcBitmap.SelectObject(hOldBitmap);
             }
             pImage->Release();
            }
            pImgFactory->Release();
        }
        CoUninitialize();

       return hResult;
    }


    And finally we should invoke right function according to operating system version our program run on:
    Code:

    HBITMAP LoadImageFromFile(const CString &strFileName)
    {
       OSVERSIONINFO vi;
       memset(&vi, 0, sizeof(vi));
       vi.dwOSVersionInfoSize = sizeof(vi);
       VERIFY(GetVersionEx(&vi));
       if (vi.dwMajorVersion>=5) {
          return LoadImageWithImagingApi(strFileName);
       } else {
          return LoadImageWithImgdecmp(strFileName);
       }
    }

    In order we could use Imaging API in eMbedded Visual C++ we should add Windows Mobile 5.0 SDK includes folder to standard include folders for eVC (Tools->Options…->Directories), but ensure that this folder added after include folder for Pocket PC 2002 or 2003 SDK.

    Conclusion

    This sample doesn’t show full power of these SDKs it just loads image from file into HBITMAP without scaling.
    You can download a sample evc project there.
    December 13

    并不是所有的手机号都能获得

    10月21号的文章:获取Windows Mobile手机的手机号码一文中获取手机号码的方法并不是总是可以用的,经过测试,中国移动全球通的SIM卡,手机号是可以获取的,而动感地带神州行的手机号根本就获取不到,这不是程序的问题,而是中国移动的问题。同样的SIM卡,放到其他的手机上(测试过Nokia 6170)也不能查看本机号码。