甘草's profile心寄笔端PhotosBlogLists Tools Help

甘草 healer

Location
Interests

Feed

The owner hasn't specified a feed for this module yet.

by 
by 
by 
by 
by 
by 
by 

心寄笔端

春去春回,花落谁家? 心寄笔端,谁解我意?

改天我再写点HTML上来,等我学会的... ...

统计法修订草案规定统计数据不一致不得公布

      看到这则消息,我很开心,我国法制又健全了!
      我国法制朝着和谐的方向又迈进一步了,而且有精简机构的疗效,既然要公布的数字务必一致,那还要多个机构统计干嘛呢?到时候私下吃顿饭,彼此统一了口径,即可。
      好,非常好。
---- IBM非主流枪手 共青团中央非知名枪手

共同抵制乞讨、卖艺等行为

      “共同抵制乞讨、卖艺等行为,...”,不知道是什么时候开始的,北京的地铁内,一遍一遍地反复地广播着,教育着我们要唾弃他们,是的,或许,的确应该这样做吧,毕竟广播总是可以找出来许许多多的理由来说服我们。

      是的,理由有很多的,比如说,我们中国人有自己辨别真假乞丐的方法。

真假丐帮弟子
      不知从什么朝代开始,中原丐帮,就成为了一支不可小视的武林力量,以前在乔峰(契丹)和郭靖的领导下,谁敢共同抵制啊?我靠,现在可好,变成了人人喊打的小帮派了。就这么一个小帮派,名门正派们居然还有人以为好些人愿意混入并冒充为乞丐弟子,求的是什么呢?殊不知,丐帮本来就有污衣派和净衣派之分。当然了,今天这种分法不合时宜了,名门正派却有了重新划分丐帮弟子的法门,一般说来,缺胳膊断腿的,天生残疾生活不能自理的,烧伤程度在五成以上的,都是真丐帮,可能就是宋朝丐帮所谓的污衣派,这种丐帮自然是真丐帮。还有那些腿不瘸,眼不瞎的,这些人就都是假丐帮。

      嗯,反正我们中国人自然有办法来区分真假的。或许哪天你被逐出了名门正派,又恰好手脚完整,你来给我擦鞋好了,看看我是给你五毛,还是一块。都不是,如果手头有超市发找给我的零分的蹦,我就会给你,反正放在我身上,也会影响我出刀拔剑。

      这个世界,不是有手有脚,愿意努力,就会有饭吃的,就在这几天,美国的失业率也已经到了10%了,也就是说,10个人里面,就有一个人失业了,还不知道什么时候才能再拿到月薪呢,也不知道什么时候就断粮了。在中国,谁信媒体给出的数字,谁就是有毛病,经济危机之前下岗的就无数了,何况现在?

      媒体给不出一个准确的数字,但是却总是能找到一些特殊的例子,比如说发现某某乞丐非常有钱,白天要钱、要饭,晚上KTV。或许有,而且我也见过,在古龙的小说里,这种情况是有的,在今天,或许有,但是那一定是少数又少数的情况了。而媒体,不愿意发现太过于平凡的新闻,就像乞丐没饭吃,这种平凡又不能再平凡的事情,实在是没有报道的必要,这就像猫捉到了耗子,狗在电线杆子下撒尿一样,都是不需要报道的事情。但是不用怀疑的是,这就是最真实的情况。反而报道完一个乞丐晚上去了KTV,又去报道另一个乞丐去桑拿,这样的新闻不但引人注目,还特别耐人寻味的,就和地铁站里面的广播一样,都tmd让我们觉得乞丐讨厌。

      但是我以为,这真是一个笑话,一个地方有乞丐,只能说明这个地方穷,但是还不愿意承认,于是就千方百计地把乞丐弄走。弄走乞丐有两种方法,一个是强国、富国,另一个就是驱赶。而我们恰恰就选择了后者,驱赶走乞丐,中国就美丽了,就富强了。其实我窃以为,何不把所有的乞丐一并赶到沙漠里,任其自生自灭?这不是更是一劳永逸的办法?!

      今天的现实情况是,大本不好找工作,大专生基本没工作,很多研究生和博士,还在叹怀才不遇呢。哪有那么多的就业机会提供给丐帮弟子啊。江湖不好混啊。

 

GAE支持Java了

      算是一个好消息吧,Google App Engine支持Java了,现在可以下载SDK了,还有Eclipse的插件,Deploy App非常方便,但是你要先Sign up,毕竟现在只是一个Early Look。
      SDK Classes的White List上有File,但是没有Socket。似乎比Python的限制要少?

兴趣所在... ...

      瓦力(WALL.E),霹雳五号是它祖宗,应该是吧,这部片子很好看,很搞笑,也很感人。这才叫成功,我不得不说这是一部成功的环保片!就像《大清后宫》,是一部缉毒宣传片一样。
      大胆的创意,朴实的情感,细腻而又精良的制作,都使得它无愧于一部最好看的动画片之一。据说饼子堂里面还有人看哭了,囧,特别囧。
      当瓦力握住伊娃的手的时候,仿佛没有“执子之手,与子偕老”的承诺,有的只是下雨时,帮你撑伞的行动(并且不怕遭雷劈)。这是一种单纯的感情,却很感人。仿佛是每一个女孩都向往的那种真诚(是我写的? 写完了我也怀疑)。是的,瓦力太可爱了!不仅仅是他一举一动,透出来的“傻气”,更重要的是关键时,他的勇气。
      当然了,爱情是片子的主题之一,另外一个主题,就是环保,我以为这种宣传是成功的,没有触动心灵的震撼,就不能算是成功,像CCTV那样?拍个公益广告,根本达不到宣传的效果。沿着上地东路走,上地三街到七街,将近两站地,一共三个垃圾桶,一个破公益广告,对环保起到的唯一作用就是讽刺。
      迄今为止,国内的动画片都没有太大的突破,在创意构思方面,还停留在“葫芦娃”阶段。等不了了,再等两年,过30了。
     
 

请还给老百姓一个真假唱的春晚

      我以为,还是还给我们老百姓一个真假唱的春晚好。是的,我没有说错,带有真的假唱的春晚。我想,不止是我,每一个乐意看春晚的老百姓都不想在听歌的时候会笑得比看赵本山的小品还厉害。那最佳语言类节目,赵大叔就可能让位给黄晓明等人了。这很难让人接受。
      这只不过是其中一个理由,而另外一个理由是,春晚假唱,不是秘密,我们接受了20多年了,春晚不可能不唱,唱又不能都请周华健这样的实力派,那些不会真唱的歌手到时候怎么办呢?是真假唱,还是假真唱?恐怕那个时候谁都说不清了,所以,图个心里明朗,我求求CCTV,还给我们一台真假唱的春晚吧!!!

Last Samurai

    我喜欢那些带有激烈文化冲突的电影。时代的变迁,文化的更迭,总是给人无限感慨的。国产的电影,我推陈凯歌的《霸王别姬》,尽管它没有宏大的战争场面,没有精彩的武打设计,但是时代在变,城头变幻大王旗,一次又一次的摧残着人性。
    《霸王别姬》我看过好几遍,《最后的武士》我也看过好几遍,相比较起来,《霸王别姬》把历史当做一个背景,而《最后的武士》则是把历史拉到前台,演出了一场轰轰烈烈的冲突,这场冲突不是单纯的军事对抗,而是时代在变迁。
    影片
    《最后的武士》是一部“好莱坞大片”,然而,它也有太多的东西不同于传统的“好莱坞大片”。除了把以往美国式的个人英雄主义换成了武士道精神外,值得注意的是,里面所描绘的日本文化,有很准确,而不是美国导演,指挥着一群日本临时演员,演出美国故事。据说,为了突出历史的真实感,武士的盔甲采用了历史同时期同样的材质制作。
    并且,里面有几个配角角色的日本人,确实也很脸谱化,老实说,脸谱化在某些时候是文学和电影创造的失败,而放在这里又是恰到好处的。因为电影所要展现的是历史风貌,而不是讲述个人的经历,而且是要展现给日本以外的电影观众,于是这种脸谱化的安排就恰恰把典型日本式的东西展现出来了。
   
    大多数的战争没有正义和非正义的界限
    我们不能给出影片的剧情简介,因为每一份的介绍,都会在不同程度对某一方进行了袒护。显然,剧中是袒护武士一方的。然而历史的车轮是不理会任何偏袒的。谁又能从现代化和传统中舍弃一个?特别是对于真实的历史来说,这种抉择往往伴随着不公,甚至是杀戮。而当传统是明确定格在武士道的时候,似乎我们又不得不舍弃武士道。武士道,显然,武士道是落后的,它起源于日本的神道教,佛教,中国的儒教。不客气的说,以上所提到的这些文化都有些落后了。尽管很多人不愿意承认儒教是落后的,而更原意承认武士道是落后的,并且是邪恶的,但是实际上,它们所宣扬的又是那么相似,只不过儒教发展到后来,更多迂腐的东西,武士道发展到后来,更多残忍的东西。其实里面太多糟粕了,太多不够文明的东西了,尽管影片中日本村庄那么宁静,美丽。
    而,我们又怎么能准确地判断某种事物的正义性呢?至少大多数人都不能,大多数人不是为了正义而去斗争的,就像阿汤哥说的:“因为他们要摧毁我所爱的一切”。从今天的角度看,武士道当然是罪恶的,但若是真的处于那个时代,或许那真的很难以分别。
    就像今天在CSDN上,依然有很多人为了C++,或者是Java,.Net而大打出“口”。这就是人们总是为了自己所爱的而进行斗争。
    胜元武士的原形,据说是西乡隆胜,看过《菊花与刀》,书中说,他是那个时代最伟大的武士。实际上,西乡的武术可能很一般,但是他主要是作为一位政治家,与大久保利通和木户孝允并成为“维新三杰”,他在倒幕运动中建立了卓著的功勋。而今天的日本人,依然非常喜爱这个历史人物。就像我们,无论梁启超是不是成为了保皇派,但是我们更多在乎他在戊戌变法中所做出的历史功绩。

直角三角形,a**2 + b ** 2 = c ** 2

      直角三角形的两条直角边的平方和,等于斜边的平方。这条几何定理被称之为勾股定理,还是毕达哥拉斯定理,都是无所谓的事情,但是有许多书籍却在称述一个这样的事情,大致是这样说的:勾股定理,在欧洲又称是毕达哥拉斯定理,实际上在我国商代就已经发现,云云。
       然而我觉得,有些东西,还是说清楚的好。
      《周髀算经》
      《周髀》成书于公元前1世纪,也就是中国西汉末年,秦朝早亡。书中有一个周公和商高的开场白:周公问商高:“天不可阶而升,地不可将尽寸而度.”商高答曰:“故折矩以为勾广三、股修四、径隅五”。于是,往往我们认为中国公元前1000年的时候,中国人就发现了勾股定理。
      我们该如何看待这个发现呢?
      首先,这句话只是给出了勾股定理中的一个特例,而且是最简单的那一组。这一句离定理还有很远的差距,便很难称得上是定理。
      其实,“周公问商高”,老实说,这根本不能作为历史证据,仅凭《周髀算经》中的这些陈述,就去证明中国早在公元前1000年的时候,就发现了勾股定理,那历史太不严谨了。
      首先,要了解我们中国人的表达方式和风格:
      这里说周公问商高,不能认为就是周公旦本人问商高本人。
      周公旦何许人? 就是武王姬发的弟弟,周公解梦的周公,也就是周公负成王的周公,这人是个政治家,对数学未必感兴趣,很有可能不会问商高数学问题。当然了,很多文本称,周公听说商高数学好,就召见他,似乎能自圆其说,问答的内容毕竟是关系到测天的,于是商高就给出了这组勾股数。
      我认为书中行文,这段对白很有可能相当于今天我们说“A说,B说”,或者是“甲问,乙答”。
      此外,中国古人人心太古,总喜欢把一些事情往圣人身上靠,于是很有可能有了这样的开场白。
      注:
      1. 《周髀算经》中,商高还有台词说,勾股定理是大禹治水的时候总结出来的啊!于是,我国发现勾股定理的时间又提前了几千年,幸好大禹没有台词了,如果他说是轩辕黄帝告诉他的,那就又提前了,《西游记》里面,龙王还说孙悟空用的金箍棒是大禹王治水的时候留下的呢。
     
      当然了,我国发现毕达哥拉斯定理也确实很早了。随着历史的发展,到了公元前6世纪的时候,陈子给出了真正称得上是定理的股沟定理,他说:“勾、股各自乘,并而开方除之,得斜至日”。从考证的角度来说,这点可以证明我国至少在公元前6世纪的时候发现了勾股定理,但是这只是发现,缺乏证明。
      换句话说,如果我们把木头放到水里,发现它会浮在水中,我们只能称得上是发现浮力的存在,而不能算是发现浮力定律了。数学是严谨的,需要证明,在勾股定理的问题上,存在着这样的命题,是不是所有的直角三角形都满足勾股定理,这是一定需要证明的定理。然而,陈子测日,这是无法证明勾股定理的,而陈子测日的结果,也是相当不准确的。
      因为这个问题又牵扯到无理数的问题,而那个时代人们对无理数的认识太少了,于是没有证明的勾股定理就有着这样的问题,请问 a**2 + b ** 2是严格等于 c ** 2,还只是约等于?
     
      毕达哥拉斯的毕氏定理是有证明的,他不但发现了定理,也证明了定理本身。而他本人也生活在公元前6世纪,而且他本人也是无理数的发现者。
      毕达哥拉斯,古希腊数学家,哲学家。他很重视数学,试图用数来解释一切。宣称数是宇宙万物的本原,研究数学的目的并不在于使用而是为了探索自然的奥秘。就毕氏定理而言,毕达哥拉斯的证明失传了。但是可以确定的是,他确实给出了证明。【2】
      注:
      2. 毕达哥拉斯证明了如下内容:正多面体只有五种,正四面体、正六面体、正八面体、正十二面体和正二十面体。(服了,我现在都不知道。你知道?)
      在西方,尽管毕达哥拉斯的定理证明失传了,但是在西方,依然有非常早的证明,这可能是流传于世最早的毕氏定理证明了,那就是欧几里得的证明,记载于《几何原本》中。
      赵君卿,名爽,字君卿,东汉末年人(公元二世纪到三世纪,三国时代),他是中国最早给出勾股定理证明的人,注于《周髀算经·注》。据说,赵爽给出的证明是最精巧的一种方式。从这个时候起,中国的勾股定理才有了证明。
      中华文明,博大精深,源远流长,先人留下的不只是勾股定理,还有... ...
     
  

C/C++ & Python

我想,这就是未来的DEV黄金组合吧?

Pz_String

在词法分析的时候,以下面的代码为例。
class String
{
public:
    typedef unsigned 
char byte_t;
    typedef unsigned 
long size_t;
public:
    String()
    {
    }
};


这里面,每一个Token的长度往往不超过7,所以这个String在处理string length的长度小于7的字符串的时候,不需要在堆上分配内存。
而且整个类的sizeof(String)只有8,远远小于VC实现的std::string的sizeof(
std::string)==28。

缺点是,很多关于字符串的操作会判断一个标志位,影响了速度,但是从词法分析的角度考虑,String类的整体表现会很好。

 

聚合了这个结构。

    union string_t
    {
        
struct SP
        {
            byte_t
* ptr;
            unsigned 
short len;
            byte_t flag;
            byte_t unused;
        } s2;
        
struct SA
        {
            byte_t arr[
8];   
        } s1;
       
    } s;

整个代码是这样的。

#ifndef __STRING_HPP__
#define __STRING_HPP__



#include 
"Alloc.hpp"


#define CRITICAL    0x07


class String
{
public:
    typedef unsigned 
char byte_t;
    typedef unsigned 
long size_t;
   
public:

    String()
    {
    }

    String(
const char* str)
    {
        size_t len 
= strlen(str);
        
if (len < CRITICAL)
        {
            _construct1((
const byte_t*)str, len);
        }
        
else
        {
            _construct2((
const byte_t*)str, len);
        }
    }

    String(String 
const& _right)
    {
        size_t len 
= _right.length();
        
if (len < CRITICAL)
        {
            _construct1((
const byte_t*)_right.bytes(), len);
        }
        
else
        {
            _construct2((
const byte_t*)_right.bytes(), len);
        }
    }

    String(
const char* str, size_t offset, size_t len)
    {
        size_t leave 
= strlen(str + offset);
        
if (leave < CRITICAL)
        {
            _construct1((
const byte_t*)str + offset, (len < leave) ? len : leave);
        }
        
else
        {
            _construct2((
const byte_t*)str + offset, (len < leave) ? len : leave);
        }
    }


    size_t length() 
const
    {
        
return (s.SP::flag) ? (size_t)s.SP::len : (size_t)s.SA::arr[7];
    }


    
const byte_t* bytes() const
    {
        
return (s.SP::flag) ? (const byte_t*)s.SP::ptr : (const byte_t*)s.SA::arr;
    }

    String replace(String 
const& str1, String const& str2)
    {
        
return String();
    }

    String substring(size_t offset, size_t count)
    {
        
return String((const char*)bytes(), offset, count);
    }
   
private:
    
void _construct1(const byte_t* ptr, size_t len)
    {
        strcpy((
char*)s.SA::arr, (char*)ptr);
        s.SA::arr[
6= 0;
        s.SA::arr[
7= (byte_t)len;
    }

    
void _construct2(const byte_t* ptr, size_t len)
    {
        byte_t
* p = Alloc<byte_t>::alloc(len);
        strcpy((
char*)p, (const char*)ptr);
        s.SP::ptr 
= p;

        s.SP::len 
= (unsigned short)len;
        s.SP::flag 
= (byte_t)0xff;
        s.SP::unused 
= (byte_t)0x00;
    }


private:
    union string_t
    {
        
struct SP
        {
            byte_t
* ptr;
            unsigned 
short len;
            byte_t flag;
            byte_t unused;
        } s2;
        
struct SA
        {
            byte_t arr[
8];   
        } s1;
       
    } s;
};


#endif

 

测试一下:

    int s = sizeof(String);
    String s1(
"Hello");
    String s2(
"Hello world");

    String s3 
= s2;


    
char* p1 = (char*)s1.bytes();
    
char* p2 = (char*)s2.bytes();

    
int l1 = s1.length();
    
int l2 = s2.length();

    
int l3 = s3.length();


    String s4 
= s2.substring(65);
    
int l4 = s4.length();

    String s5 
= s2.substring(66);
    
int l5 = s4.length();

    String s6 
= s1.substring(03);
    
int l6 = s6.length();

 

Pz_memcpy

刚刚写了一个fast的memcpy,叫做Pz_memcpy;至于Pz,就是Proze的缩写,而Proze是什么,你们以后就知道了。

代码随便用,no copyright。

/*
 * healer
 * healer_kx@163.com
 * OR yuzhongm@cn.ibm.com
 
*/
void* Pz_memcpy(void* dest, void* src, size_t len)
{
    size_t l 
= len / 8;
    size_t m 
= len % 8;

    
int* si = (int*)src;
    
int* di = (int*)dest;
    
while (l--)
    {
        
*di++ = *si++;
        
*di++ = *si++;
    }

    unsigned 
char* sc = (unsigned char*)si;
    unsigned 
char* dc = (unsigned char*)di;

    
switch(m)
    {
    
case 8*dc++ = *sc++;
    
case 7*dc++ = *sc++;
    
case 6*dc++ = *sc++;
    
case 5*dc++ = *sc++;
    
case 4*dc++ = *sc++;
    
case 3*dc++ = *sc++;
    
case 2*dc++ = *sc++;
    
case 1*dc++ = *sc++;
    
case 0:
    
default:
        
break;
    }
    
return dest;
}


 
Photo 1 of 14