jianwu's profile乱舞的弦~~~张牙舞爪的warningPhotosBlogLists Tools Help

Blog


    15 June

    程序员创业失败主要原因

    阿。。。从某条开始基本上全中。警醒下。
     
    1)没有明确的生活目标。没有奋斗的中心目标或明确的努力主向,就没有成功的希望。 

    2)没有非同寻常的雄心抱负。 
      如果对凡事漠不关心,不想在人生中求发展,不愿付出代价,那么这样的人也将成功无望。   
     
    3)缺乏自律。 
      纪律来自自我控制,这意味着人必须控制所有的消极思想,只能先控制自己,才能控制环境。自制是人类面对的最艰巨任务,如果无法战胜自我,就会被自我征服。 

    4)拖拉。 
      这是失败最普遍的原因之一,拖拉“老人”存在于每个人心中的阴暗角落,正是因为一直都在等待“适当时机”,才开始做那些值得做的事情,其实时机永远不会“适当”。   
     
    5)缺乏毅力。 
      不管做什么,大部份人开始时都满怀信心,但却不能善始善终。大部份人一遇到失败就容易放弃。毅力是不可取代的。把毅力当座右铭奉行到底的人,发现失败会自行退下,失败是无法对抗毅力的。   
     
    6)消极的个性。 
      因为消极的个性,而将别人拒于千里之外者,不会有成功的希望。成功来自力量的运用,而力量又来自与他人的合作,消极的个性无法促成合作。   

    7)无法克制“不劳而获”的欲望。这种机体本能使很多人走向失败。   

    8)缺乏果断的决策力。 
      成功的人士会果断决策,然后如果有必要,再慢慢改进。失败者往往花很长时间才能作出决策,但很快就需要修改,而且要频繁修改。犹豫和拖拉是一对双包胎,只要找到其中一个就一定能找到另一个,所以必须趁它们没有将你完全束缚在失败的车轮上,果断地把它们消灭。   
     
    9)过度谨慎。 
      不主动抓住机会的人往往只能捡别人挑剩的机会,过度谨慎和不够谨慎都不可取,人生本来就充满偶然成分。   
     
     
     
     

    10)迷信与偏见。 
      迷信是恐惧的一种形式,也是无知的表现,成功人士心胸宽广,无所畏惧。 
     
    11)目标不专。“万事通,万事松”,要全心全意专注于一个主要目标。   
     
    12)缺乏热情。 
      没有热情,一个人就没有说服力,而且热情有一种感染力,一个人如果拥有热情,并能适当控制热情,往往会受到人们的欢迎。   

    13)偏执。心胸狭窄很难取得任何进步,偏执说明一个人不积极获取知识。   
     
    14)蓄意不忠。 
      诚实是一种不可替代的品质,受无法控制的环境所迫,一个人可能一时不忠诚,也不会带来永久的破坏。但是,如果一个人蓄意不忠,则无药可救。他的得行为迟早会被发现,他负出的代价可能是失去信誉,甚至失去自由。   
     
    15)自私和虚荣。这些品质问题好比亮起红灯,让人不敢靠近,是妨碍成功的致命因素。   
     
    16)猜测而不思考。 
      多数人往往漫不经心或者过于懒惰,不愿费心获取用于准确思考的事实。他们喜欢根据猜测或仓促得出的“结论”了事。观念改变人生!选择决定未来!行动决定成败!
     
     
    来吧,老规矩,加上一张无关图片结束文章。前天北京vs天津的一场比赛,球迷打出的横幅:
    [没插件,饮恨吧mina] 

     

    躲进小楼成一统之技术贴---release要比debug快么

     

    读熊力先生的windows用户态程序高效排错的时候遇到这样一个问题:

     

    ------------------------------------------------------------------------------------------------------------

    分别在debug/release模式下运行下面的代码比较效率,会发现debugrelease更快。你能找到原因吗?

     long nSize = 200;
    char* pSource = (char *)malloc(nSize+1);
    char* pDest = (char *)malloc(nSize+1);
    memset(pSource, 'a', nSize);
    pSource[nSize] = '\0';
    DWORD dwStart = GetTickCount();
    for(int i=0; i<5000000; i++)
    {
    strcpy(pDest, pSource);
    }
    DWORD dwEnd = GetTickCount();
    printf("%d", dwEnd-dwStart);

     

    ------------------------------------------------------------------------------------------------------------

    vc6调了一下果然如此,根据cpu性能的不同相同的代码debugrelease的性能差距竟然有34倍之多。决定把此问题搞清楚。

     

    先拿出代码来吧:

    ----------------------------------------release部分代码-----------------------------------------------------

    00401044 8B FB                mov         edi,ebx

    00401046 83 C9 FF             or          ecx,0FFh        ;循环次数

    00401049 33 C0                xor         eax,eax             ;搜索内容

    0040104B F2 AE                repne scas  byte ptr [edi]            ;一直重复搜索到EDI字符串末尾的0

    0040104D F7 D1                not         ecx  ;得到搜索次数,也就是字符串的完整长度

    0040104F 2B F9                sub         edi,ecx             ;EDI后退到源字串头

    00401051 8B C1                mov         eax,ecx

    00401053 8B F7                mov         esi,edi                   ;ESI指向源字串地址

    00401055 8B FD                mov         edi,ebp                   ;EBP指向目的字串地址(之前malloc结果)

    00401057 C1 E9 02             shr         ecx,2                     ;双字mov 次数为长度除以2

    0040105A F3 A5                rep movs    dword ptr [edi],dword ptr [esi] ;内存拷贝

    0040105C 8B C8                mov         ecx,eax                   

    0040105E 83 E1 03             and         ecx,3

    00401061 4A                   dec         edx

    00401062 F3 A4                rep movs    byte ptr [edi],byte ptr [esi] ;完成剩余内容的拷贝

    00401064 75 DE                jne         main+44h (00401044)

    ----------------------------------------------------------------------------------------------

     

     

     

    debug版本调用的从strcat.asm就能够直接看到了,但是注释中实现的strcpy太过简单,不能显示汇编代码的全貌阿,以下是代码:

    -----------------------------------------------------------------------------------------------

    mov     edi,[esp+8]         ; edi points to dest string



    copy_start::
           mov     ecx,[esp+0ch]       ; ecx -> sorc string
           test    ecx,3               ; test if string is aligned on 32 bits
           je      short main_loop_entrance

    src_misaligned:                     ; simple byte loop until string is aligned
           mov     dl,byte ptr [ecx]
           add     ecx,1
           test    dl,dl
           je      short byte_0
           mov     [edi],dl
           add     edi,1
           test    ecx,3
           jne     short src_misaligned
           jmp     short main_loop_entrance

    main_loop:                          ; edx contains first dword of sorc string
           mov     [edi],edx           ; store one more dword
           add     edi,4               ; kick dest pointer
    main_loop_entrance:
           mov     edx,7efefeffh
           mov     eax,dword ptr [ecx] ; read 4 bytes

           add     edx,eax                                  7e fe fe ff
           xor     eax,-1

           xor     eax,edx
           mov     edx,[ecx]           ; it's in cache now

           add     ecx,4               ; kick dest pointer
           test    eax,81010100h

           je      short main_loop
           ; found zero byte in the loop
    ; main_loop_end:
           test    dl,dl               ; is it byte 0
           je      short byte_0
           test    dh,dh               ; is it byte 1
           je      short byte_1
           test    edx,00ff0000h       ; is it byte 2
           je      short byte_2
           test    edx,0ff000000h      ; is it byte 3
           je      short byte_3
           jmp     short main_loop     ; taken if bits 24-30 are clear and bit
                                       ; 31 is set
    byte_3:
           mov     [edi],edx
           mov     eax,[esp+8]         ; return in eax pointer to dest string
           pop     edi
           ret
    byte_2:
           mov     [edi],dx
           mov     eax,[esp+8]         ; return in eax pointer to dest string
           mov     byte ptr [edi+2],0
           pop     edi
           ret
    byte_1:
           mov     [edi],dx
           mov     eax,[esp+8]         ; return in eax pointer to dest string
           pop     edi
           ret
    byte_0:
           mov     [edi],dl
           mov     eax,[esp+8]         ; return in eax pointer to dest string
           pop     edi
           ret

    -----------------------------------------------------------------------------------------------

     

     

     

    1.最直接(或许也是最正确的)反应,编译器做多余的事情了,就检查debugrelease模式下编译参数的区别。最终目标集中在了 /O2/Ot上,使用/O2效率低,使用/Ot效率高。查阅资料之后发现 /O2 /Ot的超集,在我单独添加/O2的优化选项时,效率仍然是比较高的,开始怀疑资料的准确性。此路暂时不通放弃。

     

    2。接下来就开始怀疑release版本内存对齐造成效率低下,检查后win32平台malloc()内存地址必然对齐。pass

    副产品对齐版的malloc/free函数如下:

    /* align_size需要为2的倍数*/

    void *aligned_malloc(size_t size, size_t align_size) {

     

    char *ptr,*ptr2,*aligned_ptr;

    int align_mask = align_size - 1;

     

    ptr=(char *)malloc(size + align_size + sizeof(int));

    if(ptr==NULL) return(NULL);

     

    ptr2 = ptr + sizeof(int);

    aligned_ptr = ptr2 + (align_size - ((size_t)ptr2 & align_mask));

     

     

    ptr2 = aligned_ptr - sizeof(int);

    *((int *)ptr2)=(int)(aligned_ptr - ptr);

     

    return(aligned_ptr);

    }

     

    void aligned_free(void *ptr) {

     

    int *ptr2=(int *)ptr - 1;

    ptr -= *ptr2;

    free(ptr);

    }

    3。怀疑编译器release版本经常进行的内联优化上。检查代码以及常识告诉我这样的优化只能让release版本效率更高而已。

     

    4.开始修改代码,使用动态从msvcrtload strcpy,使用strncpy,自己实现注释版的strcpy

    并强制inline,最终的结果都是相同,开始不得不关注进strcpy代码里了,debug版本的strcpy在效率上一定比release的效率高(一直不愿相信这个问题)。我们就只能再回过头来看上面的代码了。Release版本的代码算是比较常规的拷贝操作了,遍历获取字串长度,然后一个DWORD一个DWORD拷贝(很显然比单字节拷贝效率高),最后如果还有内容的话,就按照byte拷贝。下面是debug的,

    a)       首先检查是否内存对齐,未能对齐的话先诸字节拷贝直至对齐。对win32平台我们直接pass因为内存分配好就是对齐的。

    b)      进入main_loop_entrance就比较神奇了,看下面这段神奇的代码,判断字符串是否到了结尾的,如果对一个DWORD拆分成4byte分别判断,那4bytes一起拷贝节省下拉性能立刻浪费掉了,ms采取了一个非常聪明的办法

     

    -----------------------------------------------------------------------------------------------------------------

    mov     eax,dword ptr [ecx]     ; read 4 bytes
    mov     edx,7efefeffh ;
    就是
    -0x81010101H
    add     edx,eax ; eax - 1000 0001 0000 0001 0000 0001 0000 0001B
    ;
    使用减法取反,如果为0000 0000就是NULL,那么取反的时候会向前一字节借位

    xor     eax,-1 ;
    直接取反,不借位

    xor     eax,edx
    add     ecx,4
    test    eax,81010100h ; 1000 0001 0000 0001 0000 0001 0000 0000B
    ;
    看看直接取反和减法取反,可能存在借位的那些位是否相同。相同则不存在借位,继续循环

    ;
    否则就扫描到NULL了,字符串结束

     

    简单的解释一下前三个字节我们可以这样判断,如果某字符减去0x1还要向前字节借位的话,那么该字符必然是’\0’,这样的话前一字节的最后一个bit必然会被借位。如此以是否向前一字节借位这一标准来判断该字节是否为’\0’.这样的方法适用于前三个字节,但是第四个字节怎么办?ms使用的方法是这样的以第四个字节的最高bit来判断,如果该字节为0,则在进行减法操作的时候,字节的最高位由于借位产生了1(不是纯0就不会借位到这个倒霉的最高bit身上),以此标准来判断该字节是否为0

    效率的节约也就在于此,dword进行拷贝以及直接对dword进行判断以查找字符串末尾,这是debug版的strcpy超越release版的地方。计算机的世界,算法为王。

     

     

     

    不知道诸位有注意到的这个地方没,如果这个倒霉的bit1其它bit0呢?他也可能会误把这种情况的跟’\0’混淆的,因为代码无法判断这个1使本来就有的还是被借位出现的(本质就是0xor0 = 1    1 xor!1 = 1两种情况无法判断),在进行进一步确认的时候就出了问题,不得已重新循环反而就损失了效率。当然这是一种极端的情况。可以填充数据为80xxxxxx来验证一下我们的怀疑。

     

    针对这种方法如果我们想有所改进,单独的DWORD看来是希望不大了。可以结合cf寄存器来做下一步的工作。留一个note吧,以后思考。

    整理下最近搞的wow外挂,release些经验来吧。。。。

     

     

    30 May

    时代周刊的一篇文章

     日前公布的联想2008—2009财年报告,披露了联想巨亏2.26亿美元。这是联想10年来的首次亏损。

      联想的亏损主要包括两大部分,一是营业性亏损,二是高达1.16亿美元的重组费用。如果说前者可以用全球经济不景气导致业绩下滑作遁词的话,那么后者可以说是联想高层一系列战略失误的累积效应。

      “三无”企业

      联想的巨亏是意料之中的事。

      2002年,杨元庆提出联想搞“三化”,即科技化、服务化和国际化。杨元庆的“三化”,核心是转型,把联想从制造企业转型成服务企业,也就是占据微笑曲线的两端—研发与服务,把利润越来越低的制造业务外包出去。这其实是IT乃至家电业顶级企业的宿命。

      IBM出售个人计算机业务,彻底完成了从制造业向服务业转型。而今天的惠普,实际上也不是门外汉理解的纯粹制造业企业,它早已不是简单卖PC和服务器,而是在卖解决方案了。今年早些时候,我了解到,广州供电局在用惠普的“容灾/业务连续系统”,这个方案是个包括硬件和软件的一揽子供电管理方案。据称,惠普的这个解决方案,已经在全球供电系统中占据了相当高的市场份额。表象是惠普在PC行业继续缠斗,一个后台事实是,惠普早就在发展它的新兴业务,走着当年IBM走过的路—高智能、高附加值的服务业正在成长,一旦服务收入占到总营收的50%以上,惠普可能就要考虑出售PC业务了。

      IT企业的宿命就是如此,做顶级品牌,最后必然是把业务延伸到微笑曲线的两端,把中间的制造业务外包给代工企业。

      从战略上说,杨元庆是对的,看到了这个IT宿命。但是,要完成这个转型,让大象起舞,需要文化支持,需要技术积累,需要战略统御。而联想恰恰是一个无文化、无战略、无技术的“三无”企业。

      国际市场受挫

      最要命的是,杨元庆的IT服务与郭为的神州数码业务全面冲突。

      柳传志解决这种业务冲突的手法简洁、雷厉风行:杨元庆旗下的研究院、IT服务业全部剥离,收购IBM的PC业务,回归硬件供应商、PC制造商身份。

      如果仅仅从国际市场开发角度说,收购IBM的PC业务是非常对路的。联想收购IBM的PC业务,并不是有什么值钱的实物资产,联想收购的实际上最重要的是一个国际化的经营平台,是一个全球市场渠道,还有一个享誉全球的thinkpad子品牌。问题仅仅在于,在IBM平台上销售联想产品,国际市场上的消费者是否认同,联想能不能用好这个平台?

      联想今天的困境在于,它不得不用国内市场攫取的利润去供养昂贵的原IBM平台。而国际市场的开发,倒过来威胁国内市场。国内消费者发现,原来民族企业在价格上是歧视自己的国民、自己的同胞的。

      近年来,联想电脑在技术、质量、价格和售后服务等等方面也经常受到国内消费者指责。

      国际市场受挫,需要国内市场提供更多的利润;而要国内市场产生更多利润,则可能引发更多的反弹。联想的供血机制似乎越来越脆弱。

      联想正在为自己打造新的造血机制,包括:参与家电下乡计划,贷款收购巴西PC企业,国内A股上市等等,可以预见,联想的每一个举措,都会成为舆论关注的热点话题。

      个人烙印严重

      毫无疑问,联想这家企业深深地打上了柳传志的个人印记,联想的企业性格与柳传志的个人性格非常一致。柳传志与牛根生类似的地方是,过分自信,把个人与企业的成功归因于自己的天赋与能力。柳传志、牛根生当然都是非常优秀的企业家,他们的优秀之处在于,他们成功地找到了在中国这个特色市场做大做强的真谛。但过犹不及,中国的成功之道不能复制到国门之外。

      比如,联想的重组费用与其他一次性支出,翻译成普通读者能看懂的语言,实质主要就是指裁员成本。4年前联想的“结构性裁员”也就是数千万元人民币打发了事。而此次国际性裁员,却产生一亿多美元裁员成本。

      任何产业都逃不出这一产业规律:一个产业越是成熟,它的利润率就越低。PC产业更是如此。当攒机简单到接插件加螺丝刀之后,一个已经没有技术门槛、资本门槛、渠道门槛的行业,凭什么保持高额利润?

      联想的未来是什么,有什么好的解决之道,我不想多说。但可以预测一下它的股价。现在,它在香港股市的价格是每股3.09港元,我预测,2009年内,它将进入“仙股”行列。

     

     

    -----------------end----------------------

    联想买到的原来ibm的pc销售平台,本身就是一个巨大的无底洞,再加上这些年thinkpad在世界很多地方都是每况愈下,维持这个平台的消耗只能来自中国大陆地区的销售。而大陆区推出的产品价格越来越高 质量却越来越烂。
    说白了联想除了拿到ibm的pc平台,还是那个无文化,无技术,无战略的三无公司。pc产业的利润只能越来越低,因为产业越来越成熟,而联想希望抓住研发和服务两个大头的梦想,遥不可及。 pc业还没有完全触底,联想必然继续亏损。

    07 February

    新年快乐 之一:工作学习篇--待价而沽

    告别了传说中的本命年,本着不信邪的宗旨未着一丝红色磕磕碰碰的度过了这一年。回顾过去的一年是从没头没脑到牢骚满天工作的一年,是从得过且过回到得过且过生活的一年,是从纯情大学生到准投机者的一年,是结束一种生活方式到开始一种新生活方式的一年,总结为各种的一年。
     
    若是做下流水帐记录倒不如将年终总结鼓捣上来,没甚价值,记录下所得吧。从之前积极工作优秀青年到如今见活就闪的老油条,此间leimin老师功不可没,没有他整日催促isc服务器的维护,倒不会使小生转型这么快,再加上徐core的整日财务处事宜,建设银行项目包揽作者到搬运工工作,科委项目的大小巨细,lenovo不放假的恐吓等等~~这些线索都指向了真相:哥累了,哥们不干了。话说哥们干好了也就那可怜的几百块钱,干坏了也是那几百块;干好了老板收益跟lenovo关系++,干坏了我挨批。跟同宿舍诸君比较,小菜薪金是某2.x倍,昕是某1.5倍每周4天工作制~~好吧其实就是我最低最累。仔细想想真不够聪明,于是,顿悟了---我走后管他洪水滔天。
    至于所得,无非是所谓的增强了专业技能,但是在这种项目驱动环境下,真正学到的是其他技术工人一两个月乃至半年也能学会的东西,核心竞争力没有半点提升。嗯,厚着脸皮忽悠人的实力有很大提高。实验室的诸君也都非CS出身,这一年除了身体状况有所下降,恐怕,项目所得是少之又少了。唯一欣慰的是趁工作不忙的时候拿下了DB2的某证,以及SCJP的机会。来年干掉它。
    主动有目的学习自己需要的东西才是有意义的,术业要有专攻,学的太多太杂决然不是一个好的趋势,老子曰:以有涯随无涯,殆矣。
    list下今年开发涉及的领域,看明年会忘记多少:j2se,j2ee,XML,c under linux,c under windows,c++ under wince.由衷称赞一下自己竟然被这么多玩意玩弄过。
    ASM,OS kernel,Security~~再见。理想粉碎,当年的半吊子Hacker转眼被泡制成了蹩脚程序员等待为害某些不开眼的企业,感谢professor XU & Doctor ZHANG & 北京科委&LENOVO。不过国内业界实在没有什么开眼的企业,大都因人成事的龙套角色,创造和制造之间的差别不是一星半点。
     
    到了展望明天的时候了:一个理想做爱做的事,也许会混上个doctor的头衔,但是实在不希望是在ISC-BUPT。
    冷,起驾御舒床,装模作样读明史,俺还是个文人捏。
     
    预告下明天的节目
    生活家庭篇--动心忍性,曾益所不能
    08 October

    泪流满面

    写下这个题目,估计是会被鄙视矫情的。豁出去无视之,本来是在熬夜写那恶心人的设计,没有感觉,在没动手写代码之前,实在不敢说自己写的这些东西的合理性和可行性。
    这个十一,应该说是过的相当开心的。因为小兔前来骚扰,带她满北京城乱转,感觉是相当温馨的。期间没怎么说正事,我们之间这点事情可能大都在回避吧,因为都对未来不是很确定,就业~的确是件折磨人的事情。跟她商量了一下她考博的事情,确实,如果真的可以到北京读的话一切倒容易解决了,但是,事实可能这么顺利么?的确是我即将要做的最没把握的事情了,对她来讲也是在同时进行两场赌博,她本可以毕业就找一工作,安安稳稳的生活下去的,我这样可能会害了她吧。她离开之后的那天下午,一直在想这个问题。
    现在的心境还是跟ls这些已经工作的心境不一样的,称之为未经社会磨练的幼稚吧。自我膨胀依然,听了ls的“选一个好媳妇少奋斗十年”颇有些不服气,的确,那样的选择会给自己带来很大好处,但是本人本质上还是想体现一下大男子主义,给人保护的,想找一个可供保护的对象满足一下自己可耻的虚荣心,所以准备投身于“选一个好老公少奋斗n年”理论的验证中,这也许是新的奋斗动力了吧。
     
    I JUST CAN'T WAIT TO BE KING
     
    25 July

    0!=null

    建设银行的事情在死灰复燃之后终于又要被某些物事浇灭了。10w总收入落在手里的大约有500吧,刘楠跟笋师兄说的好,我们是来锻炼的。也真是好一个锻炼的~~ 又想发牢骚却发现之前的牢骚已经不少了,还好还好,让上来写space已经说明是比较解脱了,再长舌反而显得没度量,工作的事情就此打住。
    其实勾搭我写点东西的是今天跟我的某著名粉丝zyu同学的对话,一段缠绵悱恻匪夷所思的对话,导致我又要重新审视下自己的所作所为,失落了~现在还玩之前的老游戏似乎有些过时,游戏的对象也少了当时的肆无忌惮,不可否认的已经过了那般年龄,下一步,等待一枝花的年龄吧
    -----------------经过一系列的扯淡聊天,想说的已经不知道是什么了,来口酸橙汁,祭奠我曾经的光辉岁月
    好好的在某人爪牙庇护下可耻的度过豆腐渣时期等待焕发第二春吧
    29 May

    痴念

    都什么时候了 还会梦到她,内容已然不记得了,失落还在~
    梦里不知身是客,一晌贪欢
     
    是为记
    25 March

    被催生的想法

    皇宫中的人所想的,和茅屋中的人所想的是不同的———费尔巴哈
    不是故作高深的炫耀,的确是一些想法,是境遇变化之后所见所闻催生的想法
    无聊的生活中却有声音激起曾经的热情,现在不可否认的是开始了自己的放眼看世界。之前满足于在boss那干点活权当是提升自己的coding能力,现在看来的确也起到了作用,但是不同的声音也出现,读研的目的什么,以后打工的需要?即使去了MS,IBM本质上跟别人有区别么?Boss可以靠卖我们make money,为什么我们不能也这样卖别人(事实如此,就是”卖“)?开公司,接项目,很少的正式职工负责正常运营,大都是靠实习生进行开发,学生是个极其廉价的脑力工作者群体,年轻,有激情,有数不清的好想法,实在是极好的”压榨“对象。
    创业,其本质就是有切合实际地好点子,并将其付诸实施,现在是得好好考虑下这个问题了,专业,别人未做过的,有市场潜力,80后的创业者们还不足以给我们震撼么?确定目标,衡量了市场价值,呵,这个研---其实 不读也罢!最关键的,是要有魄力去做这些事。
     
    to  QQ: 不是不想写,这个时间实在~~  其实就是编译原理中词法&语法分析的Java表达而已。呵呵~ 感兴趣的话看看ANTLR就OK  ^_^  现在在语言翻译中   据说是有专利的 可惜没我名字  说句脏话~~~~~
    08 February

    交工&一些单句

    该写了该写了,今天算是正式交了差,虽然仅仅是变相了的ASPA,希腊人的玩意还是很讨厌的,原以为简单生成语法文件就OK了,谁知道根本就不是那回事,工程中的语法文件要改,调用的java源也需要改,六七个那几千行的语法文件暂且不提,跟进去错综复杂的结构就让人恶心,之前淼淼说不要用URL类事实上是不正确的,String类不足以完成如此浩大的工程。改天详细把项目写下。 嗯,其实很早就可以交工的,只是最近几天忙着ly车票的事,-_-!,有种事情叫不自觉,这么热心当时都想自己是不是热情过度了,但还是不由自主,看来N次的心理暗示还是作用甚微,现在比之前好点的也就是克服了所谓羞怯(其实这种克服大约也是来了北京后心理位置的变化吧),还好还好,嗯,开始当是新结识的人接触吧。 大约可以叫做我童年的阴影了,她,哈哈~ 不回忆,不回忆,再回忆晚上又睡不着了,明天还得刷卡上班呢^_^ 回家再追忆童年吧 没办法,还是 This kind of ~~ ps:bs小熊,给我打电话扯了30分钟消磨自己的话费~~我的接听可不是免费的fk~
    25 November

    untitiled

    困扰自己的一问题:Graphics和Graphics2D所提供的绘图功能最终是借助哪些类来实现的?尤其绝中大部分的是抽象方法哪里实现的?翻遍他们的API文档未果~人家对象clone是Object类提供的机制,由虚拟机直接支持;字符串相加及与对象相加是语言规定编译器提供支持的;java.awt.ToolKit的实现是系统属性awt.toolkit指定的类:这些呢?Java的真正核心技术(JVM的实现,编译器实现,jre\bin目录下的所有dll的源代码,rt.jar运行环境中一半的源码)Sun并没有公开,J2SE的源代码是公开了,但其中的基本机制的实现的源代码却没有公(rt.jar中sun打头的类的源代码没有提供);md,SUN极其不厚道
    getClass().getName();   
       
    定位到 sun.java2D.SunGraphics2D 果然是SUN的私活,Decompile之
    // Source File Name:   SunGraphics2D.java
    /*太长了,把最初勾引我的copyArea拉出来晾晾
      public void copyArea(int i, int j, int k, int l, int i1, int j1)
        {
            try
            {
                doCopyArea(i, j, k, l, i1, j1);
            }
            catch(InvalidPipeException invalidpipeexception)
            {
                revalidateAll();
                try
                {
                    doCopyArea(i, j, k, l, i1, j1);
                }
                catch(InvalidPipeException invalidpipeexception1) { }
            }
        }
        private void doCopyArea(int i, int j, int k, int l, int i1, int j1)
        {
            if(k <= 0 || l <= 0)
                return;
            SurfaceData surfacedata = surfaceData;
            if(surfacedata.copyArea(this, i, j, k, l, i1, j1))
                return;
            if(transformState >= 3)
                throw new InternalError("transformed copyArea not implemented yet");
            if(clipState == 2)
                throw new InternalError("clipped copyArea not implemented yet");
            Composite composite1 = composite;
            if(lastCAcomp != composite1)
            {
                sun.java2d.loops.SurfaceType surfacetype = surfacedata.getSurfaceType();
                CompositeType compositetype = imageComp;
                if(CompositeType.SrcOverNoEa.equals(compositetype) && surfacedata.getTransparency() == 1)
                    compositetype = CompositeType.SrcNoEa;
                lastCAblit = Blit.locate(surfacetype, compositetype, surfacetype);
                lastCAcomp = composite1;
            }
            i += transX;
            j += transY;
            Blit blit = lastCAblit;
            if(j1 == 0 && i1 > 0 && i1 < k)
            {
                while(k > 0)
                {
                    int k1 = Math.min(k, i1);
                    k -= k1;
                    int i2 = i + k;
                    blit.Blit(surfacedata, surfacedata, composite1, null, i2, j, i2 + i1, j + j1, k1, l);
                }
                return;
            }
            if(j1 > 0 && j1 < l && i1 > -k && i1 < k)
            {
                while(l > 0)
                {
                    int l1 = Math.min(l, j1);
                    l -= l1;
                    int j2 = j + l;
                    blit.Blit(surfacedata, surfacedata, composite1, null, i, j2, i + i1, j2 + j1, k, l1);
                }
                return;
            } else
            {
                blit.Blit(surfacedata, surfacedata, composite1, null, i, j, i + i1, j + j1, k, l);
                return;
            }
        }*/
    其中要多谢陈师兄的指点,使我能debug定位类名。
    csdn有类似讨论:http://topic.csdn.net/t/20050801/23/4182371.html#   落后好多阿 sigh~
    21 November

    coding time

    项目开始,在折磨路由同时已经开始了初步的编码,虽然仅仅是用ARP探测子网存活主机。记录下,顺便放上周末的笔记
     
    第一次发现C++与JAVA的不同之处,算是一细节问题。
    C++在调用虚函数时,总是先根据对象的实际类型来寻找。
    而对Java来说,它会先把可用的函数都列出来,然后再选择。
    下面的例子
    C++:
    class A
    {
    public:
    virtual string f(D* obj){return string("A and D");}
    virtual string f(A* obj){return string("A and A");}
    };
    class B : public A
    {
    public:
    virtual string f(B* obj){return string("B and B");}
    virtual string f(A* obj){return string("B and A");}
    };
    class C : public B
    {};
    class D : public B
    {};
    int main(int argc, char* argv[])
    {
    A* a1 = new A;
    A* a2 = new B;
    B* b = new B;
    C* c = new C;
    D* d = new D;
    cout << a1->f(b) << endl;    //A and A
    cout << a1->f(c) << endl;    //A and A
    cout << a1->f(d) << endl;    //A and D
    cout << a2->f(b) << endl;    //B and A
    cout << a2->f(c) << endl;    //B and A
    cout << a2->f(d) << endl;    //A and D
    cout << b->f(b) << endl;    //B and B
    cout << b->f(c) << endl;    //B and B
    cout << b->f(d) << endl;    //B and B,此处与java的结果不同
    return 0;
    }
    JAVA:
    class A{
     public String f(D obj){return ("A and D");}
     public String f(A obj){return ("A and A");}
    }
    class B extends A{
     public String f(B obj){return ("B and B");}
     public String f(A obj){return ("B and A");}
    }
    class C extends B{}
    class D extends B{}
    class test{
     A a1 = new A();
     A a2 = new B();
     B b = new B();
     C c = new C();
     D d = new D();
     System.out.println(a1.f(b));   //A and A
     System.out.println(a1.f(c));   //A and A
     System.out.println(a1.f(d));   //A and D
     System.out.println(a2.f(b));   //B and A
     System.out.println(a2.f(c));   //B and A
     System.out.println(a2.f(d));   //A and D
     System.out.println(b.f(b));    //B and B
     System.out.println(b.f(c));    //B and B
     System.out.println(b.f(d));   //A and D
    }
    这是当时摆弄这代码的笔记,很主观的 放在这里纪念一下:
    overloading 发生在 方法选对象时 ,而polymorphism是对象选方法。a2是被声明为A  重载时把它看做A 而动态绑定的时候才把它看做B
    同时还存在一个方法调用(重载时)的优先问题
    this.f(o)
    super.f(o)
    this.f((super)o)
    super.f((super)o);
    前三个结果很容易理解,A类对象的引用a1指向了A类的对象,所以,它可以引用的方法也就只有两个,即
     public String f(D obj){return ("A and D");}
     public String f(A obj){return ("A and A");}
    就是A类中的方法,所以在调用时只要传进来的对象不是D类的对象就一律返回"A and A"(因为A类是这里的根类),要不就返回"A and D"。
     
      接下类的三个就比较有意思,a2是一个指向子类对象的引用,被声明为A类,编译时查找方法是从A开始(而不是B,虽然它是B对象)也就是说用它调用方法时只能调用
     public String f(D obj){return ("A and D");}
     public String f(A obj){return ("A and A");}
    又因为子类中的一个方法把它的一个方法给覆盖掉了(A类的第二个方法和B类的第二个方法同名且同参),所以,当父类引用调用public String f(A obj)时,实际执行的却是子
    类中的相同的方法,即相当于他能调用的方法变成了
    public String f(D obj){return ("A and D");}
    public String f(A obj){return ("B and A");}
      所以在传进去的参数不是D类的对象时都会返回"B and A"。是D类的对象则返回“A and D”
     
      最后的是B类引用b指向的是B类对象,所以他就可以调用按理说是A类和B类的共计4个方法,但是因为用两个是同名又同参的所以就只有三个,即:
     public String f(B obj){return ("B and B");}
     public String f(A obj){return ("B and A");}
     public String f(D obj){return ("A and D");}
    10 November

    my own world~ untitled

    今天最重要事件当属逃掉徐总的课去听张斌的 世界杯的台前幕后 算是一讲演吧,虽然但看似没准备的样子,很随意很坦诚的跟学生打成一片,黄健翔事件,中国足球黑哨,i亚洲杯惜败日本,前几日惨败约旦,等等比较关心的事件都谈到了吧。不愧是主持人,的确懂得抓住观众的心理,学新闻的,口才自然在我们这等民工之上~中途很少有人退场。他的一句话倒也引起不少人共鸣:明确的人生目标,呵呵,我呢 目标是有了,就看努力和机遇了~
    完了之后回来开始打we的意甲联赛,A.C milan 争取周末前拿到联赛冠军。呵呵。
    接着就是点郁闷的事情了做的bupt拓扑模拟一直有问题调不通,折腾了一下午还是不行,郁闷之下,不慎关掉,没存盘~一天工作完全over~
    我认为cisco的CDP协议完全有必要标准化,这样那鬼项目就容易了,实际编码阶段快来吧,忍不住要练手了~ 
     
    今天忘记打电话了,兔子手机停机 可恶~~~
     
    以下是前几天的东西,越来越懒了,两篇作一篇了。
    觉得又有写点东西的必要了,于是裸体蹲在凳子上开始写点废话:小看了北京的天气,一直以为会像是在郑州时候一样一条秋裤过冬,现实给了我惨痛的教训,现如今已经几乎是在郑州过冬的装备了,手套也已经提前投入战场,怎一个冷子了得,话说事物都有两面性,天气冷也不例外,于是乎,我就籍此提前从实验室跑回宿舍玩pes6 wow之类,气定神闲心安理得不亦乐乎~项目快要有实际性的步骤了,11月中旬拿出一个demo,展示一下我们现在能做到什么程度,窃以为,折腾snmp实在没啥搞头,为达到我们目的欺骗路由吧~在做项目学语言之余 ad的小说成为了在学校继上课之后的第二娱乐项目,如果以恶毒的语言揣之,简直满篇充斥的装x的自恋主义气息,除了mm就是他自己,以本人为原型的同学仅仅在小说前1/4部分偶有文学青年表现之外,后来由于我本人没请他吃饭的缘故就被秘密枪决了,直至本书结束,也没见我有啥归宿,所以,这小说本人评价极差,估计小肥小熊以及大海君看了也会做上述评价的,不过ad的宗教学,历史学,中医学,据他自己讲的确是很牛的,我白脖,聊起这个属于胡搅蛮缠级,籍着苏菲的世界的粗浅功底,可以偶尔花哨他一下,偶尔~ 最近也以局外人的身份经历了不少男女的分分合合,人,有时候真tmd自私 不知道咋讲,假戏真做的暧昧,粉饰的借口,有时候真的仅仅是欲望在说话~无他,唯生理需要耳~ 即使所谓真情,也多见坎坷,难觅正果,随便找个单纯的姑娘娶回家做老婆算了~  冷~ 穿点衣服继续写。~~~~~~~~~~ 完了 想不起来了,啃口苹果,想不起来要说什么了。琢磨兔子生日时送什么好,呵呵,提上日程,直接祝元旦圣诞生日快乐~春节,好像赶不上 很令人郁闷。工资还不发~~快要卖身的地步了,昨天捡到的银行卡还没失主来找,为什么丢的时候不带上密码?也好借我一时之需~~火~前几天跟人pk实况时被人装了google earth,其实挺好的东西,竟然能很模糊的看到zzu当年我深恶痛绝的窗外那个广播喇叭,发指~不过看我可爱的家乡时仅仅是个城区的轮廓了,河床卫星照片下倒是很清晰,想家了,当年放风筝以及背沙跑步的地方~  不做废话拼盘了 打住~睡觉  明天上班,开始上路由协议~
    每当在大运村写space,当天必然放不上去,今天也一样。我想虐那只小衰猫了~~~~~咋样了现在?
    过客啊,去告诉拉西第梦人,我们遵从着他们的命令,长眠在这里的!
    26 October

    weekly note

    今天的经历见qq签名:写类就重启,开word就死机~。Textpad总在我写到某类名时挂掉,屡试不爽,最终无奈开了eclipse;看文档也出现当年写培养计划的情况,文档一下拉就~~reboot~damn。
    前几日做了梦,矛盾大迸发~若梦境成真,但现实的我还是无作为,并将事情进一步弄糟,这叫什么 a custom of me?幸好现在有托辞了,忙于项目吧。不想不想~~不堪设想。晚上极其受刺激的发现从实验室到大运村楼下,极少见单身男女了,本人依然极其郁闷~
    回来后竟然想起搜djn的名字,毕竟~~ 只是得到了她的6级成绩以及身份证号,看来离校后疏远了网络了,希望她能~~ 算了,自己还没啥希望呢,还想祝人家,可笑。最近类似的事件还有一个,由于回复mm同学短信不及时,被mm说是不把她当朋友来看,呵呵,自嘲下,没啥辩解了,我只把她当mm的,呵呵,我的事情还是我自己担着吧,没什么好说的。
    思绪整理完毕,推荐一下death note,漫画&卡通,画风应该会引起dd兴趣,而我,则是喜欢高智商主角间的PK~
    24 October

    Exercises for ELEM039 Java Programming Course

    还是note,刚学就开始帮别人做了。呵呵  明天去实验室写出来。行家莫笑
    整日也就是项目调研写点文档,学着语言,看点电影等等 这样忙碌着挺好挺好~~ 最好别闲下来想些乌七八糟的事情,除去coding 实在不想多动脑子了。各自保重~
     
    下午近世代数盯着前面女生的颈子看了俩小时  知足了。
    • Define a class, StudentMarks, which has an array attribute which can hold five
    double values representing individual marks on five assignments. Define an
    accessor for the array and methods to retrieve and set the marks for individual
    assignments. (These will be similar to those defined for monthly rainfall values in
    the last exercise.) In addition, define a method to return the mean value of the five
    marks. Write a class with a main method to set some sample mark values via the
    class’s methods, and check that your class works properly.
    • Add a further method to the StudentMarks class to return the index of the highest
    of the five assignment marks held in the array. This method should use a for loop
    to find the correct index.
    • In the class just written, which index is returned if there are two equal highest
    marks for a student; that of the first or the second occurrence?
    Rewrite the method so that the other occurrence is returned instead.
    Notes:
    • No starter code is supplied for this exercise.
    • Change: Create a new program. Example solution will be provided in
    StudentMarks.java & StudentMarksMain.java
    • This is a key exercise. Students should zip their source files and electronically
    submit the zip file for assessment. Note 2 classes are expected – StudentMarks
    and a class which uses StudentMarks and can be executed from the command
    line.
     
    StudentMArksMain.java
     
    import java.util.*;
    public class StudentMArksMain {

      public static void main(String[] args)
      {
              StudentsMark [  ] aStudents = new StudentsMark[10];
              Scanner in = new Scanner(System.in);
         //can also set values of the array mark use this
        /* double[] mark = new double[5];
           System.out.println("Input the value of the mark");
          for(int i=0;i<=4;i++)
            {
              double value = in.nextDouble();
              mark[i] = value;
            }*/
            //initial object,change it anyway
             double[]   mark =  {3.0, 1.0,5.0,2.9,3.0};
              aStudents[0]  = new StudentsMark(mark);
              //test the method getMark & getMeanMark
            System.out.println("Input the Number of the Mark which u want to know between 0 and 4");
            int newn = in.nextInt();
            double testgetMark = aStudents[0].getMark(newn);
            double testgetmean = aStudents[0].getMeanMark();
            System.out.println("Mark NO.  " +newn +" is " + testgetMark + "\n"+ "The meanMark is "+testgetmean);
            //test the method setMark
            System.out.println("Input the number of the mark to be changed");
            int newsetn = in.nextInt();
            System.out.println("Input the value of the mark to be changed");
            double newsetmark = in.nextDouble();
            aStudents[0].setMark(newsetn,newsetmark);
            System.out.println("New Mark is " + aStudents[0].getMark(0));
            //test the method printAllMarks
            System.out.println("List of the marks");
            aStudents[0].printAllMarks();
            //test the method showHighestMark1 & showHighestMark2 & showHighestMarks
            aStudents[0].showHighestMark1();
            aStudents[0].showHighestMark2();
            aStudents[0].showHighestMarks();

     }
      }
     
    StudentsMark.java
     
    public class StudentsMark{
     //field
     private double [  ] moduleMarks;
        //constructor
     StudentsMark(double [] marks)
     { moduleMarks = marks;
     }
     //methods below
        //get the value of a mark
     public double getMark(int n)
     {
      return moduleMarks[n];
     }
     //set the value of a mark
     public void  setMark(int n,double change)
     {
      moduleMarks[n] = change;
     }
        //get mean value of the marks
        public double getMeanMark()
        {
         double total = 0;
         for(double element:moduleMarks)
          total+=element;
           return total/5;
        }
        //print all the 5 marks
        public  void printAllMarks()
        {
            for(int i =0;i <=4;i++ )
             System.out.println(this.getMark(i));
        }
        //get the first highest mark
        public void showHighestMark1()
        {   int h = 0;
         for(int i=0;i<=4;i++)
          {  if(this.getMark(h)<this.getMark(i))
                h=i;
          }
         System.out.println("The first highest is NO. "+ h+" It's value is "+this.getMark(h));
        }
        //get the last highest mark
        public void showHighestMark2()
        {   int h = 0;
         for(int i=0;i<=4;i++)
          {  if(this.getMark(h)<=this.getMark(i))
                h=i;
          }
         System.out.println("The last highest is NO. "+ h+" It's value is "+this.getMark(h));
        }
        //shows all the highest mark with two "for" loops
        public void showHighestMarks()
        {   int h = 0;
         for(int i=0;i<=4;i++)
          {  if(this.getMark(h)<this.getMark(i))
                h=i;
          }
         System.out.println("The highest Mark/Marks is/are:");
         for(int i=h;i<=4;i++)
         {
          if(this.getMark(h)==this.getMark(i))
           System.out.println("NO. "+ i);
         }
         System.out.println("The value is "+this.getMark(h));
        }
    }

     
    20 October

    Note~Patch of Traceroute

    --- traceroute.c.orig    Fri Aug 21 15:15:23 1998
    +++ traceroute.c        Thu Apr 13 22:40:08 2000
    @@ -289,6 +289,7 @@
    int nprobes = 3;
    int max_ttl = 30;
    int first_ttl = 1;
    +int static_port = 0;
    u_short ident;
    u_short port = 32768 + 666;    /* start udp dest port # for probe packets */
    @@ -352,7 +353,7 @@
                    prog = argv[0];
            opterr = 0;
    -       while ((op = getopt(argc, argv, "dFInrvxf:g:i:m:p:q:s:t:w:")) != EOF)
    +       while ((op = getopt(argc, argv, "dFInrvxf:g:i:m:p:q:Ss:t:w:")) != EOF)
                    switch (op) {
                    case 'd':
    @@ -406,6 +407,13 @@
                            options |= SO_DONTROUTE;
                            break;
    +               case 'S':
    +                       /*
    +                        * Tell traceroute to not increment the destination
    +                        * port, useful for bypassing some packet filters.
    +                        * Useless without the -p option.
    +                       static_port = 1;
    +                       break;
                    case 's':
                            /*
                             * set the ip source address of the outbound
    @@ -744,7 +752,7 @@
                            register struct ip *ip;
                            (void)gettimeofday(&t1, &tz);
    -                       send_probe(++seq, ttl, &t1);
    +                       send_probe(static_port ? seq : ++seq, ttl, &t1);
                            while ((cc = wait_for_reply(s, from, &t1)) != 0) {
                                    (void)gettimeofday(&t2, &tz);
                                    i = packet_ok(packet, cc, from, seq);
    @@ -1300,9 +1308,9 @@
            extern char version[];
            Fprintf(stderr, "Version %s\n", version);
    -       Fprintf(stderr, "Usage: %s [-dFInrvx] [-g gateway] [-i iface] \
    -[-f first_ttl] [-m max_ttl]\n\t[ -p port] [-q nqueries] [-s src_addr] [-t tos]
    \
    -[-w waittime]\n\thost [packetlen]\n",
    +       Fprintf(stderr, "Usage: %s [-dFInrSvx] [-g gateway] [-i iface] \
    +[-f first_ttl]\n\t[-m max_ttl] [ -p port] [-q nqueries] [-s src_addr] \
    +[-t tos]\n\t[-w waittime] host [packetlen]\n",
                prog);
            exit(1);
    }
    12 October

    U Make me wanna

    昨晚写的,谁知道断网~

    没想到fannie回来这么早,促不提防~
    中午正盯着恶心的屏幕翻文档,接到她电话,竟然听成是李冉,后来才明白是~~呵呵  意外意外
    晚上逃掉状态不佳的苏总的课去ruc找的她们,以前从来都认为ruc很小,谁知道比bupt要大太多了,打击~ 很喜欢里面漂亮mm的密度。呵呵,这次见面分别是相隔5年和2年了吧。倒没想像中的拘束,还好还好~终于克服掉什么什么恐惧症,感觉是比上次见她清瘦了点,找工作加上出国的事情很忙了吧,说话的语气也有些改变,跟fannie讲话甚至有些在管教的感觉,呵呵cute~自然还有没变的东西~眼睛,下巴的曲线,某些小动作~~今晚上怀旧下,呵呵~fannie倒是变了不少,是回国有些拘束了?不似我想像中大大咧咧的样子,听说在德国很能喝酒的么下次牛刀小试一把。  fannie明天就回家了,离家多少年了阿,估计会过一段幸福的日子的,先不用考虑其它好好生活吧~,朋友圈第一个boss就很可能是你咯~   赶明儿我去移民 呵呵
    24 September

    When I say nothing at all~

    还是不相信~ 没做到之前一直会怀疑~
    删去了前几天写好的东西,大致意思是近况还好~  
    被迫java中~ 懒得说了 睡觉  明天有课
    30 August

    BUPT~Here we go

    都准备好了,处理的事情全部完毕。最终还是没见了那谁,造物弄人阿 sigh~祝她顺风。肥肥回来送他可爱的妹妹去长沙读书,希望不要步了三儿的后尘,哈哈,不会的不会的。明天找小兔,肥肥一起Fb,哦,是今天。明天就要出发了,今天跟老屈聊了许久竟然才知道他也是BUPT的人儿了,呵呵,这次北邮热闹了~~认识的人加起来应有20个了。So Glad~ 现在在疯狂的向ooftp传文档,做机器备份,今天父亲练习开关机以及打麻将程序,折磨了机器不下十次,崩溃~ mcafee也在欢快的跳着,md,备份的n多代码被x掉,郁闷关了实时监控~历数下去北京能见到的人:郭师兄,石帅,媛媛,老屈,陈正,ls,冯x,三儿,李志聪,丹萍,mm,同鑫的同学任mm,瑞mm,lb,通信的那些人,之前一直有联系的杨飞等人,当然还有 ~~   呵呵,见识了python的高效率,开始对它起非分之想了。

    配下think of me的歌词

      Think of me, think of me fondly
       想想我,深情地想想我
       when we've said goodbye.
       当我们已互道再会
       Remember me once in a while
       偶尔记得我
       please promise me you'll try.
       请答应我你会去尝试
       When you find that, once again, you long to take your heart back and be free
       当你再次发觉,你期望将心收回,重获自由
       If you ever find a moment, spare a thought for me...
       若你有片刻闲暇,请分一些思念给我

      We never said our love was evergreen, or as unchanging as the sea
       未曾说过我们的爱情如松柏常青,或如沧海般恒久不变
       but if you can still remember, stop and think of me...
       但若你依稀记得,请驻足片刻,想一想我
       Think of all the things we've shared and seen
       想想所有那些,我们彼此分享目睹的事
       don't think about the things which might have been...
       莫去想事情可能的变化
       Think of me, think of me waking, silent and resigned.
       想想我,想想醒着的我,沉默且温顺
       Imagine me, trying too hard to put you from my mind.
       想象我极力想将你从心中抹除
       Recall those days, look back on all those times,
       回想那些日子,回顾那些时光
       think of the things we'll never do
       想想那些我们未曾做过的事
       there will never be a day, when I won't think of you...
       我没有一天不想你,

       We never said our love was evergreen, or as unchanging as the sea
       未曾说过我们的爱情如松柏常青,或如沧海般恒久不变
       but please promise me, that sometimes, you will think of me!
       但请你答应我,将来,你会想想我

     

    26 August

    OK~Stupid instincts

    绝念绝念~ 人最他妈虚伪。你去跳崖自杀,看见了一个人你看他就来气,上去就扁了一顿,然后心情就爽了,不想死了,抱住人家大叫“恩人!”,结果他跳下去了。对动物也一样∶把人类折磨的对象叫恩人。什么救命恩狗的。比如小蜜蜂。人家一年辛辛苦苦酿蜜。是给你酿的?!你上去抢过来咕咚咚喝完,一抹嘴,说∶“啊,小蜜蜂,你真是辛勤的小精灵啊!”靠,你欺负也就欺负了,还要恶心它。 没事无病呻吟,想起就来气,揪起来来俩大嘴巴让你丫装。 少来这套,不玩了,再玩我孙子~
    25 August

    Depressed ~~How can I keep from thinking

    事情能放弃的早就会放弃了吧~我的性子,是最讨厌麻烦的。这么累的生活如果也能放弃的话,也许早就放弃了。早不会随性而为,作茧自缚的搬了块责任的石碑在自己背上开始了自虐,石碑也是假想的吧,真的如赑屃(这是龙,可不是乌龟~)了,出于十分隐秘的心理主动“自虐”。怎么想也是放弃了一身轻松,但是属于自己的东西,放弃了还是对不住自己,都是对不住的话,懒得变动了~~

     其实是想了很久,最近的矛盾激化才会表露出来的,“自虐”没前途,而且前路突现曙光~丢下碑子去追求是再好不过的选择了。趋利避祸简单的道理或者说本能像是不会错的。~dm 不管怎样继续自虐中~也许跟当年一样也只是差那一张纸的厚度吧~ 运动是绝对的,事情都会变吧,什么时候变呢? 不知道了。说实话,都想,若能分心二用左右互搏就行了,可惜自己没有哪般冰雪聪明或者说精神分裂。

     如chuitum预言的虚拟世界大一统,我认为即使会,也会是很久之后吧~而且,所谓一统仍是个很需要品玩的词~一统江东,一统关外,一统天下~ 语言是博大精深的或者说人的思维是博大精深的,多少个世纪伟大的哲学家思想家探究精髓所在,我自不量力的总结为~扯淡~ 善哉

     I am robinhood

    I am houyi

     I am sorry

     呵呵 该我说这句的,不能让人抢先

    不知所言~warnings say:等我们等醒了再继续吧,你们都歇歇,也都醒醒

    对父亲说对不起~