玫瑰天空じ☆ve's profile┢┦aPpY☆→ 小新的窝窝PhotosBlogListsMore Tools Help

Blog


    4/7/2009

    java.util.date java.sql.date java.sql.timestamp

    整理一:

    这里的一片文章,我个人认为讲解的很详细,有对 java.sql.Date的使用还有困惑的请看。

    java.sql.Date 只存储日期数据不存储时间数据

    // 会丢失时间数据
    preparedStatement.setDate(1, new java.sql.Date(date.getTime()));

    //可以这样来处理

    preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime()));


    //想要得到完整的数据,包括日期和时间,可以这样

    java.util.Date d = resultSet.getTimestamp(1);

    //这样处理更合适一些,可以避免一些潜在Timestamp 问题

    java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime());

    自己补的话

    这样的话:

            往数据库存储的时候可以接收 java.util.Date类型 再用getTime()方法得到代表那个Date对象的long值,再以这个long值 构造一个Timestamp对象 存进数据库中。

           从存数据库里取的时候,可以先得到Timestamp用他的getTime()方法得到long值,再以这个long值构造一个 java.util.Date对象,这样就可以对这个Date对象操作了。不如说 new SimpleTimeFormat("yyyyy-MM-dd HH:mm:ss").format()等等

     

    整理二:

    用Timestamp来记录日期时间还是很方便的,但有时候显示的时候是不需要小数位后面的毫秒的,这样就需要在转换为String时重新定义格式。        Timestamp转化为String: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒 Timestamp now = new Timestamp(System.currentTimeMillis());//获取系统当前时间 String str = df.format(now);         String转化为Timestamp: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String time = df.format(new Date());
    Timestamp ts = Timestamp.valueOf(time);     整理三:   在ResultSet 中我们经常使用的setDate或getDate的数据类型是java.sql.Date,而在平时java程序中我们一般习惯使用 java.util.Date。因此在DAO层我们经常会碰到这俩种数据类型的相互转换,经过了一个下午的折腾,鄙人对两者的转换方法做出了小小总结,希望大家不吝指教。
    两者的关系
    java.lang.Object
        |
        +---java.util.Date
                |
                +----java.sql.Date

    从这个图中我们可以知道java.sql.Date是从java.util.Date继承过来的。

    相互转换
    1. 使用getTime()函数
    这两个类都提供了getTime()函数,用于返回对应的毫秒数(long类型)。利用这个函数可以实现转换:
        java.util.Date utilDate = new java.util.Date(sqlDate.getTime());   // sql -> util
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());   // util -> sql

    2. 使用SimpleDateFormat类实现转换
    SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。
    SimpleDateFormat dateFormat = new SimpleDateFormate("yyyy-MM-dd HH:mm:ss");
    java.util.Date utilDate = dateFormat.parse(sqlDate.toString());

    3. 直接转换
    由于java.sql.Date是从java.util.Date中继承过来的,所以可以直接用:
    utilDate = sqlDate;

    4. 另类获得日期的方法:
    SimpleDateFormat sy=new SimpleDateFormat("yyyy");
    SimpleDateFormat sm=new SimpleDateFormat("MM");
    SimpleDateFormat sd=new SimpleDateFormat("dd");
    String syear=sy.format(date);
    String smon=sm.format(date);
    String sday=sd.format(date);

    ps: java.util.Date类中的getYear()要加上1900才可得到实际值,getMonth()则要加上1
         

     
    5/12/2008

    2012 世界末日

    2012
    开放分类: 数字列车世界末日2012
    2012,是2011与2013之间的自然数。

    小写
    二零一二

    大写
    贰零壹贰

    因数分解 2012=2*2*503

    年份属相:龙年

    关于2012年世界末日有以下几种说法。
    1.水晶头骨之迷中讲到2012年12月21日太阳下山之后,世界变化,只有非洲和中国西部地区部分人存活
    2.科学预测2012年地球磁极颠倒,前几次分别导致了冰川时代和大洪水等事件
    3.俄罗斯人预测2009年世界大战爆发,核危机
    4.台湾一个学龄前班的孩子突然说起古maya语,大概意思是说要净化地球,时间是2012年
    5.藏僧预言:2012年全球爆发核战神将显现干预
    6.2012年,太阳磁极也会颠倒
    7.星相上,2012年将出现大十字,土木相冲,日月相冲,这代表流血和死亡,上次十字发生在伊拉克战争
    8.黄櫱禅师预测2012年台湾回归
    9.中国的推背图指2012年有难
    10.星相上,2012年5月5日从双鱼时代正式过度为水瓶时代,双鱼时代的特征是工业和科学技术发展,水瓶时代的特征是精神领域的提升
    11.协波汇聚是说:在某个时间,成千上万的新时代人在世界各地的灵性地点(中心)聚会,引导和平降临地球、祈愿所有生命合一、冥想新时代来临。协波汇聚的重要日期是1987年12月31日,以及2012年的一个顶峰.
    12.Amorah Quan Yin通灵预测洪水、地震、大陆板块移动、火山喷发、以及最终的两极变换,将会在2013年之前发生
    13.:《圣经密码》指出,彗星将在那一年撞击地球;玛雅年历的注解显示宇宙末日将发生在2012年的12月21日.2012年让我们一起 迎接新的世界.新的人种.新的历史.
    同时世界是一个多次元的空间,也许2012将不是以上这么进行着,一秒的时间存在着多个事实,是实是虚,我们拭目以待吧!
    2012年是世界末日?
       陆续出现了一些关于2012年的预言,难道这仅仅是一种巧合吗?
      
      1.地球与太阳的磁极将于2012年发生颠倒
      
      天体和物理学家与电脑科学家共同研究发现,上次发生同等现象的时间是在恐龙消失时。在现代人类历史中,还没有此类现象发生时的场景记载。
      北极与南极磁场发生颠倒的过程即为磁极颠倒。这一现象导致的最坏结果,将让地球磁场的磁力为零高斯(高斯为磁感应单位),如果此时再遇上周期为11年的太阳两极磁场颠倒,地球上所有动物(包括人类)的免疫系统将大为降低;地球的外壳会发生更多的火山喷发,地震,泥石流等现象;地球磁气圈将被减弱,来自太阳的宇宙辐射就会增大,最终可能对人类造成辐射灾难;一些小行星将朝地球方向飞来;地球的重力也会发生变化。
      研究结果最后认为,如果所有的零磁力推测都同时发生,那么,只有居住在地球外壳深部地带的有机体能够不受影响。届时,人类躲避灾难的方法就是躲到地壳以下,或者搬去其它星球上居住。也许火星会是一个合适的选择。
      但美国宇航局发表声明说,磁力为零只是最坏的可能而已,并不一定会发生。
      
      2.厄尔尼诺
      
      2011年是很特殊的一年,共发生4次日食。其中1月4日、6月1日和11月25日的日食发生在极区,7月1日的日食发生在高纬地区,有利于诱发厄尔尼诺。2012年发生2次日食,5月20日发生在高纬地区,11月13日发生在中纬地区。
      根据日食-厄尔尼诺系数理论,计算出2011年日食-厄尔尼诺系数为10.5,2012年日食-厄尔尼诺系数为13。
      可以对比的是,1997年日食-厄尔尼诺系数为12,但在那一年,却发生了20世纪最强的厄尔尼诺事件。
      南京大学教授林振山等人预测,2011年会发生厄尔尼诺事件。
      自然界的巧合,使厄尔尼诺事件与磁力危机,在2012年共同威胁地球上的生命。
      
      3.古文明预言
      
      2012年12月31日是玛雅人长历法(Long Count Calendar)中本次人类文明结束的日子。此后,人类将进入与本次文明毫无关系的一个全新的文明。
      究竟2012年会发生什么事呢?
      不过我非常相信,自然灾难永远不会是毁灭人类的元凶。
      玛雅古文明密码
      斐声国际的作家、工程师兼业余科学家“摩利斯.科特罗(Maurice Cotterell)”精于玛雅古文明研究,他从许多古庙与碑石中发现了一组一再重覆出现的密码:1,366,560。若将这个密码的单位视为“天”,则 换算为年的话,为3,740年。玛雅族诞生于公元前3113年,到750年突然消失,其中间生存的年代接近3740这个年数。根据玛雅文献的记载,地球每 隔3,740年就会被毁灭一次,而地球生命在过去已曾被毁灭四次;换言之,现代人类应已是地球第五代子孙了。
      
      “摩利斯”将玛雅文化中的圣数1,366,560与太阳磁场变化周期,这二个表面上毫不相干的事连接在一起。科学的计算显示太阳磁极每隔3,740年就会对调一次,而3,740年就会对调一次,而3,740年刚好是1,366,560天换算的年数。
      由于地球的磁场受到太阳磁场很大的牵制,当太阳磁极逆转时,“摩利斯”推论地球磁极也跟着对调,令地球磁南北两球互换。生物无法适应突然发生的 重大气候变化,而集体死亡。长毛象咸信是热带地区的生物,但由于磁极的对调,使它们生存的地方变成天寒地冻的不毛之地,于是发生长毛像在西伯利亚、阿拉斯 加集体死亡的事情。而考古学上的证据显示这二个地方原本属于热带气候的。
      
      如果地球磁极逆转而造成生物大量灭绝,那就不难解释为何每隔一段时间,使地球文明周期性的毁灭。
      古玛雅人早就已经将那个日子准确地算出来。在不少预言中,年代记载最完整的,算是《克奥第特兰年代记》。说我们得知第五太阳纪于公元前3113年。在经历玛雅大周期的5125年后,第五大阳纪迎向最终。与现在西历相对照的话,便可知“太阳纪”将于“某纪的某日”结束。
      这个终结日,就在公元2012年12月22日的前后。
      2012 年曾被多次引用,其中北美的玛雅人历法讲我们人类正在经历着一个历时五千多年的星系更新,时间是从公元前3113年起到公元2012年止。其中每二十年又是一个小周期,从1992年到2012年这二十年是本次太阳纪的最后一个周期,又被叫做“地球更新期”,其间一切都将面临净化和更新,然后人类就将进入新纪元。不谋而合的是,中国唐代的《推背图》第五十二象里的“乾坤再造在角亢”(“角亢”是借传统上的东方青龙七宿寓指龙年),2012年也恰恰是龙年。
      
      4.天王星异常接近地球引关注
      
      据德通社2005年3月31日报导,德国最畅销报章《图片报》周三在头版以“异常的天王星”为题,指神秘的“灾难行星”天王星正异常的接近地球,恐将给地球带来海啸地震等异常现象。
      《图片报》报导说,有逾500万读者的《图片报》周三引述美国太空总署科学家以及占星家等专家,指太阳系的第7枚行星天王星拥有“四极”磁场,功能有如“一个巨大的宇宙真空吸尘机,”把地球的地壳板块吸离地层。
      报导指出,这种磁场拉力在地球的赤道地带较强,因为热带地区较南、北极更接近天王星。这种磁场力量“强度足以在赤道上吸起带电的尘粒子,”可能干扰到地球的地壳,引发海底地震及夺命的海啸。
      报导说,最近发生地震的密度增加,天王星的轨道令该遥远行星反常的接近地球,由原本距地球31.4亿公里,拉近至目前只有25.9亿公里,并将一直保持此距离至2012年。报导警告,未来10年将会发生更多由天王星引发的地震,直至天王星慢慢退回原有的太阳系位置。
      报导引述负责美国行星探测器“航海家号”计划的科学家斯通指出,“航海家号”亦发现强大、异常的天王星磁场。
      报导引述占星学家指出,天王星一向古怪奇特,它在18世纪被发现后纳入用于占星的天宫图,被视为剧变、灾难性转变及狡诈多变的象征。
      报导称,这与德国一名占星家的预言不谋而合,他说“天王星入了双鱼宫,正是灾难之兆。”
      另据印度日报(India daily)3月1日报导,海德拉巴德(Hyderabad)的一家公司的研究人员预言2012年地球和太阳的磁极将发生逆转。地球磁极逆转是指地球磁场的北极和南极发生对调,在这个过程中地球将经历在某个时间点上没有磁场的状态。
      据称上一次发生这样的事件是在数千万年前恐龙灭亡的年代。
      通过电脑模拟发现,除了造成电力失效和候鸟失去辨别方向的能力外,还有其它的严重后果,包括:
      ——所有动物,包括人类的免疫系统将明显削弱。
      ——地壳变动会有更频繁的火山、更剧烈的地质构造运动、地震和山体滑坡。
      ——磁场减弱造成宇宙射线成倍增加,导致的放射污染会造成更多的癌症。
      ——小行星可能会更容易接近地球。
      ——地球重力场发生变化。
      
      5.藏僧遥视2012年 外力拯救,地球不灭
      
      据《印度日报》(India Daily)12月26日报道,遥视功能在西藏寺院里不是甚么新鲜事,几千年来,它一直是主导西藏文化的精神活动之一,而最近一些从几个西藏寺院归来的印度游客了解到的信息,着实极其使人震惊又引人入胜。
      这些游客说,据遥视功能的藏僧看到,目前世界正在自我毁灭的过程中,但他们同时也看到,世界不会被毁坏。
      西藏僧人说,从现在到2012年间,世界超级大国将继续参与地方战争,恐怖主义和隐蔽的战争将是主要问题。2010年左右,世界政治将发生某种变化,世界大国将威胁互相毁坏。2010年到2012年间, 全世界将变得极端化,并为末日做准备,繁多的政治回旋与交涉将不会有一点进展。2012年, 世界将开始进入一次全面破坏性的核战争,那时一件卓越的事件将会发生。超自然的神力量将干预,世界将不会自我毁灭于此时。
      
      如果以科学解释僧人的声明,显然有地球以外的力量在观察着我们走的每一步,在2012年他们将出面并拯救世界于自毁。
      当被问到最近在印度和中国发生的不明飞行物(UFO)出没事件时,僧人们微笑着说,神正在观察着我们所有的人,人类不能也不会被准许大幅度地改变未来。虽然每个人目前生活中的“业”可能在某种程度上改变其未来的生活,但那样大幅度地改变未来是不会被允许的。
      僧人们还提到了,2012年以后,人类文明将会明白,科学和技术最前沿是在精神灵性区域,而并非物质的物理和化学。此后,技术将转到另外一个方向。人们将学会精神的精华、身体与灵魂的关系、轮回、我们相互之间事实上存在联系并都是“上帝”的一部份。
      在印度和中国,UFO出没事件增加了几倍,许多人认为外星人与中国和印度政府都有过接触,近来UFO频繁活动在那些致力发展核武器的国家。当问到那些地球外的力量是否会在2012年显示时,僧人们说: 他们将会必不使我们惊吓的形式显露自己,他们只会在必需的情况下才会显露自己。随我们的科学技术进步,我们注定会看到并与他们接触的。
      据遥视僧人们说,我们的地球是被保佑的,并一直被从各种各样不断的危险中拯救出来,我们只是不知道而已。我们将意识到外力是如何拯救我们的。

      寅卯年间忧加忧,
      奇事一定在中秋。
      眼前似是太平巷,
      三灾过后世界勾。
                                 秘密道家分支—
                                                                圣仙道

       寅—2011
       卯—2012

      巧合?
      
    我们的太阳系,每两万六千年就会进入一个精神高能量的光子带,地球曾于一九八七
      年三月十六日通过此一光子带,七天后离去;此后,每年以增加十四天的时间通过光子带
      ,一九八八年则为廿一天,一九九六为一百三十三天,一九九七年为一百四十七天,二0
      00年为一百八十九天。到了二0一二年十二月廿一日,整个太阳系将完全地进入此一光
      子带。
      
        在无限的宇宙中有无限的光子带,而我们的太阳系,即将进入的则为昴宿星系的光子
      带,这个光子带是以昴宿星系里的爱克尼星为主轴,而其它的昴宿星球是以螺旋状的方式
      循渐地进入,目前共有六个星系进入昴宿星系,最靠近爱克尼星的是莫洛培星、依次是玛
      亚、依雷叉、太吉塔、扣尔、阿特里斯星、及即将进入的太阳星系。
      
        爱克尼星的存在体是活在第五度空间里,离它愈远的空间度愈小,然而只要进入这个
      星系里,至少是第四度空间,也就是说,太阳星系即将进入第四度空间,换句话说就是:
      地球即将转性形进入第四度空间。
      
        当然爱克尼星也不是一直固定地停留在第五度空间,它也将转入第六度空间,当爱克
      尼星转入第六度空间时,其它的星系也将转入第七度空间。这就是星系的大进化。
      
        将地球推入第四度空间的能量,是来自于地球人类的精神进化,这种说法是违反达埃
      文的演化论的,因为不是环境造成人去演化,而是人的精神进化决定了一切外在环境的演
      化。所谓「适者生存」的假说,并不适合人类的精神进化,同时它也不适合星系的进化,
      它只适合达埃文本身的演化。
      
        至于地球是否真的能安全地进入第四度空间?这任谁也无法预测的,因为决定权在全
      体人类的身上,是我们选择是否要进入第四度空间的?所以我们应该问谁呢?
      
        如果人类的精神能量在二0一二年尚未提高地话,地球将无法进入第四度空间,而冲
      出它应循的轨道,引起爆炸,而人类将全部消失在宇宙中。这就是有些人所说的「世界末
      日」的来临。但是因为克里昂改变这网格,所以不会死很多,会没太阳没光,变的快速冷冻,
      几天后会正常,天气环境会变的更好
      
        为了人类能转形到第四度空间,整个银河系已开始清除过去业的型态,在二O一二年将
      全部清除完毕,「业」的学习课程到时将全面停止。
      
        即将来临的世界,是一个崭新的世界,这个世界没有竞争、没有恐惧、没有疾病、没
      有暴力、没有权力斗争、没有肉体的死亡。
    5/3/2008

    MSN Messenger无法登陆的另类解决办法

    MSN Messenger无法登陆的另类解决办法

          经常看到用户反映说MSN Messenger无法登陆,碰到类似0x81000370,88048820的错误码。现搜集到下述另类方法,大家可以根据自己的情况加以设置从而解决不能登陆的问题。
      你的电脑上"日期/时间属性"是否设置正确:双击时间,检查日期和时间是否正确设置。很多时候是因为时间没有同步,双击日期,选择Internet时间,同步即可。
          如果你的帐号和密码没有在MSN中保存,你需要确认你输入的帐号和密码是正确的(请注意大小写字母及帐号的后缀)。

          禁用您浏览器中的“自动检测”设置。对于 Internet Explorer 用户,请单击 IE“工具”菜单、单击“Internet 选项”、单击“连接”选项卡、单击“局域网设置”按钮、然后清除“自动检测设置”框。

          清除IE cache和Cookies:打开Internet Explorer浏览器,按工具菜单,然后选择“Internet 选项”,点击“删除文件”按钮和“删除 Cookies”按钮。

          检查 IE 安全设定:打开Internet Explorer浏览器,按工具菜单,选择“Internet 选项”,选择“高级”,拖动滚动条到安全选区,证实“检查服务器证书吊销”没有被选中,同时证实“使用 SSL 2.0”和“使用 SSL 3.0”被选中。然后按“确定”。

          点击“开始”--“运行”,依次键入:regsvr32 softpub.dll,regsvr32 mssip32.dll,regsvr32 initpki.dll(这一次时间比较长)。

          检查错误的代理服务器设置。在 MSN Messenger“工具”菜单上,单击“选项”。在“连接”选项卡上,确保您清除了“我使用代理服务器”复选框。

           防火墙和第三方应用程序可能会影响连接到 MSN Messenger。您可以禁用应用程序、防火墙或打开防火墙相应端口,然后尝试连接到 .Net MessengerService。

           如果您为局域网使用 ICS 或路由器,则可能需要调整一些设置或更新硬件/固件驱动程序。

           如果您的 Passport 未被识别,请登录 Passport 站点www.passport.com ,并确认在该处可被识别。如果在该处可被识别,但仍不能登录到 .NET Messenger Service,则可能是消息服务器暂时关闭正在维护或达到了 Internet 的最大通流量(使用率高峰期间)。请稍后再试。也可以检查服务器状态页以查看服务器的最新信息。

           如果在Passport 站点仍然不可识别,请到这里:memberservicesnet.passport.com/memberservice.srf ,然后选择:“我忘记了密码”。

           C:\Documents and Settings\[用户名]\Application Data\Microsoft\MSN Messenger 下会为每个登录过MSN Messenger的用户创建一个文件夹,把该文件夹删除,然后重新登陆成功。(其中的用户名是指你登陆操作系统的用户名)

    4/23/2008

    ANT Build.xml例子

    <?xml version="1.0"  encoding="GB2312" ?>
    <!--
        =======================================================================
          hello-ant 项目 ,学习ant工具的build file.

          参照ant的jakarta-ant-1.6alpha的build.xml

          Copyright (c) 2002 The Neusoft Software Foundation.  All rights
          reserved.

        =======================================================================
    -->

    <!--
        文档结构为:
        <project>
            <property/>               全局变量的定义
            <property/>...

            <target name="1">         任务组(tasks)
                <javac></javac>       一项javac任务
                ...
                <oneTask></ontTask>   一项其它任务
            </target>

            <target name="2">
                <javac></javac>
                ...
                <oneTask></ontTask>
            </target>
        </project>

        project代表一个项目,
        default:运行到名称为"dist"的target(任务组)
        basedir:基准路径。
    -->
    <project default="dist" basedir=".">

    <!--
        ===================================================================
          定义属性(property tasks)
          最好把用到的路径呀,名称呀都在这里定义成全局变量
          例:定义
              <property name="a" value="hello"/>
          以后就可以这样用它:
              <property name="b" value="${a}/b"/>
          现在:b=="hello/b"
        ===================================================================
    -->

        <!--主要的系统环境属性-->
        <property environment="env"/><!--取window,unix...的环境变量-->
        <property name="java.home" value="${env.JAVA_HOME}"/>
        <property name="ant.home"  value="${env.ANT_HOME}"/>

        <!--主要的app环境属性-->
        <property name="app.name"      value="hello-ant"/>
        <property name="app.jar"       value="${app.name}.jar"/>
        <property name="app.copyright" value=" Copyright (c) 2002 The Neusoft Software Foundation.  All rights reserved."/>


        <!--app中src的属性-->
        <property name="src.dir"    value="src" />
        <property name="src.main"   value="${src.dir}/main"/>
        <property name="src.script" value="${src.dir}/script"/>

        <!--app用到的lib-->
        <property name="lib.dir" value="lib"/>

        <!--app的build目录中-->
        <property name="build.dir"      value="build" />
        <property name="build.classes"  value="${build.dir}/classes"/>
        <property name="build.docs"     value="${build.dir}/docs"/>
        <property name="build.docs.api" value="${build.docs}/api"/>
        <property name="build.lib"      value="${build.dir}/lib"/>

        <!--app的dist (distribution) 目录中-->
        <property name="dist.dir"      value="dist"/>
        <property name="dist.bin"      value="${dist.dir}/bin"/>
        <property name="dist.docs"     value="${dist.dir}/docs"/>
        <property name="dist.lib"      value="${dist.dir}/lib"/>

        <!--app的docs目录中-->
        <property name="docs.dir"      value="docs"/>

        <!--
        定义一组路径以后可以通过id重用这组路径 ,例:
        <javac srcdir="src/main" destdir="build/classes">
                <classpath refid="classpath"/>
        </javac>
        -->
        <path id="classpath">
            <!--本项目只有一个java,用不上classpath,这里只是做个例子-->
            <pathelement location="${build.classes}"/>
            <pathelement path="${java.home}/lib/tools.jar"/>
        </path>

    <!--
        ===================================================================
          init 准备目录(File Tasks)
          主要的目录结构通常是不会变的,一起生成他们
        ===================================================================
    -->
        <target name="init">DSC08168
            <!--清除以前目录-->
            <delete dir="${build.dir}" failonerror="false" />
            <delete dir="${dist.dir}"  failonerror="false"/>

            <!--准备目录-->
            <mkdir dir="${build.dir}"/>
            <mkdir dir="${build.classes}"/>
            <mkdir dir="${build.docs}"/>
            <mkdir dir="${build.docs.api}"/>
            <mkdir dir="${build.lib}"/>

            <mkdir dir="${dist.dir}"/>
            <mkdir dir="${dist.bin}"/>
            <mkdir dir="${dist.lib}"/>

        </target>

    <!--
        ===================================================================
          Build the code (Compile Tasks,File Tasks)
        ===================================================================
    -->
        <target name="build" depends="init">
            <!--编译-->
            <javac srcdir="${src.main}" destdir="${build.classes}">
                <classpath refid="classpath"/>
            </javac>
        </target>

    <!--
        ===================================================================
          打包文档(Archive Tasks)
          Create the project jars: xxx1.jar and xxx2.jar
        ===================================================================
    -->
       <target name="jars" depends="build">
            <jar basedir="${build.classes}" jarfile="${build.lib}/${app.jar}"/>
        </target>

    <!--
         ===================================================================
           Creates the API documentation
         ===================================================================
    -->
        <target name="javadocs"
                depends="jars"
                description="--> creates the API documentation">
            <!--copy docs 手册... -->
            <copy todir="${build.docs}">
                <fileset dir="${docs.dir}"/>
            </copy>

            <javadoc packagenames="hello.ant.*"
                     sourcepath="${src.main}"
                     defaultexcludes="yes"
                     destdir="${build.docs.api}"
                     author="true"
                     version="true"
                     use="true"
                     windowtitle="Docs API">
                 <doctitle><![CDATA[<h1>hello ant Docs API</h1>]]></doctitle>
                 <bottom><![CDATA[<i>${app.copyright}</i>]]></bottom>
                 <tag name="todo" scope="all" description="To do:" />
             </javadoc>
        </target>

    <!--
         ===================================================================
           Create the distribution that can run (Archive Tasks)
           主要是从各目录中把该copy的copy上
         ===================================================================
    -->
       <target name="dist" depends="javadocs">
            <!--copy bin 执行文件 -->
            <copy todir="${dist.bin}">
                <fileset dir="${src.script}/"/>
            </copy>
            <copy todir="${dist.docs}">
                <fileset dir="${build.docs}/"/>
            </copy>
            <!-- copy lib 文件 -->
            <copy todir="${dist.lib}">
                <fileset dir="${build.lib}/"/>
            </copy>

        </target>
    <!--
         ===================================================================
          Cleans everything(File Tasks)
          例如可以删除build中的文件,留给你发挥吧
         ===================================================================
    -->

    </project>

    3/24/2008

    关于Html解析器(转载)

    关于Html解析器

    一段时间makefire一直在和我讨论关于html解析的话题,但是一直没有怎么用心去看看有没有三方的开源项目可以实现.窃以为就和xml解析的过程差不多,但是可能会灵活一些,毕竟html的语法不如xml那么强制规范,所以遇到不规范的书写就不知道该怎么解析了.

    今天在google和sourceforge.net上面找了找,发现有人确实有心,做了一个html parser的开源项目,jericho-html而且已经到了1.5版本了,看样子也应该比较成熟了,于是下载看看能否适应我的需求.发现一共只有50个类左右(大部分都是数据bean,比如emlment,tag之类的),不依赖于其他三方的lib,所以可以直接就使用了.看了一下使用的sample:

    import au.id.jericho.lib.html.*;
    import java.util.*;
    import java.io.*;
    import java.net.*;
     
    public class DisplayAllElements {
    public static void main(String[] args) throws Exception {
    String sourceUrlString="data/test.html";
    if (args.length==0)
      System.err.println("Using default argument of \""+sourceUrlString+'"');
    else
    sourceUrlString=args[0];
    if (sourceUrlString.indexOf(':')==-1) sourceUrlString="file:"+sourceUrlString;
    URL sourceUrl=new URL(sourceUrlString);
    String htmlText=Util.getString(new InputStreamReader(sourceUrl.openStream()));
    Source source=new Source(htmlText);
    source.setLogWriter(new OutputStreamWriter(System.err));
                      // send log messages to stderr
    for (Iterator i=source.findAllElements().iterator(); i.hasNext(); )
     
    {
    Element element=(Element)i.next();
     
    System.out.println("---------------------------------"
                                     +"----------------------------------------------");
    System.out.println(element.getDebugInfo());
    System.out.println(element);
    }
      }
    }

    有一个Util类从给如的uri中得出所有的htmlstr,然后再对这个str转换成为一个html的source,source可以设置logwriter,这样子一来就可以注入log4j的工具和其结合起来,如果放到一个aop的框架里面也会和其他的lib造成依赖和耦合关系.Tag类中静态定义了一大批的字符串变量,代表各种html的标签,而source中有方法遍历(iterate)和查找(findAllStartTags),找到则可以显示其内容和属性.

    同时这个项目还提供了对jsp,asp,php等脚本语言的支持,可以对jsp或者php的源码进行分析.项目的实际意义可以在于网页搜索工具,比如做一个baidu或者google类似的搜索工具,只需要对我库中已经注册过的网站(url)定点的进行页面分析,分析关键字并且存在数据库中,则搜索的速度可以大大提高.

    不知道google的实现方式是文本搜索,全文索引还是其他方式?

    HttpClient+Jericho HTML Parser 实现网页的抓取 (转载)

    Jericho HTML Parser是一个简单而功能强大的Java HTML解析器库,可以分析和处理HTML文档的一部分,包括一些通用的服务器端标签,同时也可以重新生成无法识别的或无效的HTML。它也提供了一个有用的HTML表单分析器。
    下载地址:http://sourceforge.net/project/showfiles.php?group_id=101067

    HttpClient作为HTTP客户端组件与服务器进行通讯,同时使用了jdom进行XML数据的解析。

    * HttpClient 可以在http://jakarta.apache.org/commons/httpclient/downloads.html下载
    * HttpClient 用到了 Apache Jakarta common 下的子项目 logging,你可以从这个地址http://jakarta.apache.org/site/downloads/downloads_commons-logging.cgi下载到 common logging,从下载后的压缩包中取出 commons-logging.jar 加到 CLASSPATH 中
    * HttpClient 用到了 Apache Jakarta common 下的子项目 codec,你可以从这个地址http://jakarta.apache.org/site/downloads/downloads_commons-codec.cgi 下载到最新的 common codec,从下载后的压缩包中取出 commons-codec-1.x.jar 加到 CLASSPATH 中


    在对网页信息进行抓取时,主要会用到GET 方法

    使用 HttpClient 需要以下 6 个步骤:

    1. 创建 HttpClient 的实例

    2. 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址

    3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例

    4. 读 response

    5. 释放连接。无论执行方法是否成功,都必须释放连接

    6. 对得到后的内容进行处理
    在eclipse下建立工程 -->snatch
    将上面下载的四个jar文件导入到项目路径中.
    环境搭建完成

    现在,首先介绍一下HttpClient的使用
    在工程目录下创建test包,在包中创建Httpclient Test类

    Java代码 复制代码
    1. package test;   
    2. import java.io.IOException;   
    3. import org.apache.commons.httpclient.*;   
    4. import org.apache.commons.httpclient.methods.GetMethod;   
    5. import org.apache.commons.httpclient.params.HttpMethodParams;   
    6. public class HttpClientTest...{   
    7.   public static vo<SPAN class=hilite2>id</SPAN> main(String[] args) {   
    8.   //构造HttpClient的实例   
    9.   HttpClient httpClient = new HttpClient();   
    10.   //创建GET方法的实例   
    11.   GetMethod getMethod = new GetMethod("http://www.google.com.cn");   
    12.   //使用系统提供的默认的恢复策略   
    13.   getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,   
    14.     new Def<SPAN class=hilite1>au</SPAN>ltHttpMethodRetryHandler());   
    15.   try {   
    16.    //执行getMethod   
    17.    int statusCode = httpClient.executeMethod(getMethod);   
    18.    if (statusCode != HttpStatus.SC_OK) {   
    19.     System.err.println("Method failed: "  
    20.       + getMethod.getStatusLine());   
    21.    }   
    22.    //读取内容    
    23.    byte[] responseBody = getMethod.getResponseBoy();   
    24.    //处理内容   
    25.    System.out.println(new String(responseBody));   
    26.   } catch (HttpException e) {   
    27.    //发生致命的异常,可能是协议不对或者返回的内容有问题   
    28.    System.out.println("Please check your prov<SPAN class=hilite2>id</SPAN>ed http address!");   
    29.    e.printStackTrace();   
    30.   } catch (IOException e) {   
    31.    //发生网络异常   
    32.    e.printStackTrace();   
    33.   } finally {   
    34.    //释放连接   
    35.    getMethod.releaseConnection();   
    36.   }   
    37.  }   
    38. }  
    package test;
    import java.io.IOException;
    import org.apache.commons.httpclient.*;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.params.HttpMethodParams;
    public class HttpClientTest...{
      public static void main(String[] args) {
      //构造HttpClient的实例
      HttpClient httpClient = new HttpClient();
      //创建GET方法的实例
      GetMethod getMethod = new GetMethod("http://www.google.com.cn");
      //使用系统提供的默认的恢复策略
      getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
        new DefaultHttpMethodRetryHandler());
      try {
       //执行getMethod
       int statusCode = httpClient.executeMethod(getMethod);
       if (statusCode != HttpStatus.SC_OK) {
        System.err.println("Method failed: "
          + getMethod.getStatusLine());
       }
       //读取内容 
       byte[] responseBody = getMethod.getResponseBoy();
       //处理内容
       System.out.println(new String(responseBody));
      } catch (HttpException e) {
       //发生致命的异常,可能是协议不对或者返回的内容有问题
       System.out.println("Please check your provided http address!");
       e.printStackTrace();
      } catch (IOException e) {
       //发生网络异常
       e.printStackTrace();
      } finally {
       //释放连接
       getMethod.releaseConnection();
      }
     }
    }


    这样得到的是页面的源代码.
    这里 byte[] responseBody = getMethod.getResponseBoy();是读取内容
    除此之外,我们还可以这样读取:
    InputStream inputStream= getMethod.getResponseBodyAsStream();
    String responseBody = getMethod.getResponseBodyAsString();


    下面结合两者给个事例
    取出http://www.ahcourt.gov.cn/gb/ahgy_2004/fyxw/index.html
    中"信息快递"栏的前几条信息.
    新建类CourtNews
    Java代码 复制代码
    1. package test;   
    2.   
    3. import java.io.IOException;   
    4. import java.util.ArrayList;   
    5. import java.util.Iterator;   
    6. import java.util.List;   
    7.   
    8. import org.apache.commons.httpclient.Def<SPAN class=hilite1>au</SPAN>ltHttpMethodRetryHandler;   
    9. import org.apache.commons.httpclient.HttpClient;   
    10. import org.apache.commons.httpclient.HttpException;   
    11. import org.apache.commons.httpclient.HttpStatus;   
    12. import org.apache.commons.httpclient.methods.GetMethod;   
    13. import org.apache.commons.httpclient.params.HttpMethodParams;   
    14.   
    15. import <SPAN class=hilite1>au</SPAN>.<SPAN class=hilite2>id</SPAN>.<SPAN class=hilite3>jericho</SPAN>.<SPAN class=hilite4>lib</SPAN>.<SPAN class=hilite5>html</SPAN>.Element;   
    16. import <SPAN class=hilite1>au</SPAN>.<SPAN class=hilite2>id</SPAN>.<SPAN class=hilite3>jericho</SPAN>.<SPAN class=hilite4>lib</SPAN>.<SPAN class=hilite5>html</SPAN>.<SPAN class=hilite5>HTML</SPAN>ElementName;   
    17. import <SPAN class=hilite1>au</SPAN>.<SPAN class=hilite2>id</SPAN>.<SPAN class=hilite3>jericho</SPAN>.<SPAN class=hilite4>lib</SPAN>.<SPAN class=hilite5>html</SPAN>.Segment;   
    18. import <SPAN class=hilite1>au</SPAN>.<SPAN class=hilite2>id</SPAN>.<SPAN class=hilite3>jericho</SPAN>.<SPAN class=hilite4>lib</SPAN>.<SPAN class=hilite5>html</SPAN>.Source;   
    19.   
    20. /** *//**  
    21.  * @<SPAN class=hilite1>au</SPAN>thor oscar 07-5-17  
    22.  *   
    23.  */  
    24. public class CourtNews {   
    25.     private int newsCount = 3;   
    26.   
    27.     private List newsList = new ArrayList();   
    28.   
    29.     public int getNewsCount() {   
    30.         return newsCount;   
    31.     }   
    32.   
    33.     public vo<SPAN class=hilite2>id</SPAN> setNewsCount(int newsCount) {   
    34.         this.newsCount = newsCount;   
    35.     }   
    36.   
    37.     public List getNewsList() {   
    38.         HttpClient httpClient = new HttpClient();   
    39.         GetMethod getMethod = new GetMethod(   
    40.                 "http://www.ahcourt.gov.cn/gb/ahgy_2004/fyxw/index.<SPAN class=hilite5>html</SPAN>");   
    41.         getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,   
    42.                 new Def<SPAN class=hilite1>au</SPAN>ltHttpMethodRetryHandler());   
    43.   
    44.         try {   
    45.             int statusCode = httpClient.executeMethod(getMethod);   
    46.             if (statusCode != HttpStatus.SC_OK) {   
    47.                 System.err   
    48.                         .println("Method failed:" + getMethod.getStatusLine());   
    49.             }   
    50.   
    51.             String responseBody = getMethod.getResponseBodyAsString();   
    52.             responseBody = new String(responseBody.getBytes("ISO-8859-1"),   
    53.                     "GB2312");   
    54.             Source source = new Source(responseBody);   
    55.   
    56.             int tableCount = 0;   
    57.   
    58.             for (Iterator i = source.findAllElements(<SPAN class=hilite5>HTML</SPAN>ElementName.TABLE)   
    59.                     .iterator(); i.hasNext(); tableCount++) {   
    60.   
    61.                 Segment segment = (Segment) i.next();   
    62.   
    63.                 if (tableCount == 13) {   
    64.   
    65.                     int hrefCount = 0;   
    66.                     for (Iterator j = segment   
    67.                             .findAllElements(<SPAN class=hilite5>HTML</SPAN>ElementName.A).iterator(); j   
    68.                             .hasNext();) {   
    69.                         Segment childsegment = (Segment) j.next();   
    70.                         String title = childsegment.extractText();   
    71.                         title.replace(" "" ");   
    72.                         title = trimTitle(title);   
    73.                         Element childelement = (Element) childsegment;   
    74.                         if (hrefCount < newsCount) {   
    75.   
    76.                             String[] news = new String[] {   
    77.                                     title,   
    78.                                     "http://www.ahcourt.gov.cn"  
    79.                                             + childelement   
    80.                                                     .getAttributeValue("href") };   
    81.                             newsList.add(news);   
    82.                             hrefCount++;   
    83.                         }   
    84.                     }   
    85.   
    86.                 }   
    87.             }   
    88.         } catch (HttpException e) {   
    89.             System.out.println("please check your prov<SPAN class=hilite2>id</SPAN>ed http address!");   
    90.             e.printStackTrace();   
    91.         } catch (IOException e) {   
    92.             e.printStackTrace();   
    93.         } finally {   
    94.             getMethod.releaseConnection();   
    95.         }   
    96.         return newsList;   
    97.     }   
    98.   
    99.     private String trimTitle(String title) {   
    100.         String titlenew = "";   
    101.   
    102.         for (int i = 0; i < title.length(); i++) {   
    103.   
    104.             if (Character.isSpaceChar(title.charAt(i)))   
    105.                 titlenew += " ";   
    106.             else {   
    107.                 titlenew += title.charAt(i);   
    108.             }   
    109.   
    110.         }   
    111.         return titlenew;   
    112.     }   
    113.     public static vo<SPAN class=hilite2>id</SPAN> main(String[] args) {   
    114.         // TODO <SPAN class=hilite1>Au</SPAN>to-generated method stub   
    115.         CourtNews justice = new CourtNews();   
    116.         justice.setNewsCount(4);   
    117.         List list = justice.getNewsList();   
    118.         Iterator it = list.iterator();   
    119.         while (it.hasNext()) {   
    120.             String[] news = (String[]) it.next();   
    121.             System.out.println(news[0]);   
    122.             System.out.println(news[1]);   
    123.     }   
    124.     }   
    125.   
    126. }  
    3/14/2008

    CMNET和CMWAP

    对于很多的手机用户,恐怕很难分清楚到底CMWAP无限上网和CMNET无线上网有什么区别、各自的应用范围是什么、什么情况下可以用哪一类型的方式上网?

    (1)为什么会有两个接入点?

      在国际上,通常只有一种GPRS接入方式,为什么在中国会有CMWAP和CMNET两兄弟呢?(彩信之所以单独配置接入点是因为彩信服务需要连接专用的服务器,在这里不作探讨。)

      其实,CMWAP和CMNET只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。它们在实现方式上并没有任何差别,但因为定位不同,所以和CMNET相比,CMWAP便有了部分限制,资费上也存在差别。

    (2)什么是WAP?

      WAP只是一种GPRS应用模式,它与GRPS的接入方式是无关的。WAP应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式,不同于一般Internet的“终端+服务器”的工作模式。主要的目的是通过WAP网关完成WAP-WEB的协议转换以达到节省网络流量和兼容现有WEB应用的目的。

      WAP网关从技术的角度讲,只是一个提供代理服务的主机,它不一定由网络运营商提供。但据我所知,中国移动GPRS网络目前只有唯一的一个WAP网关:10.0.0.172,有中国移动提供,用于WAP浏览(HTTP)服务。有一点需要注意,WAP网关和一般意义上的局域网网关是有差别的,标准的WAP网关仅仅实现了HTTP代理的功能,并未完成路由、NAT等局域网网关的功能。这就决定了它在应用上所受到的限制。


    (3)中国移动对CMWAP的限制

      为了从应用中区别两者的定位,中国移动对CMWAP作了一定的限制,主要表现在CMWAP接入时只能访问GPRS网络内的IP(10.*.*.*),而无法通过路由访问Internet。(少数地区的移动网络可能不存在这一限制)我们用CMWAP浏览Internet上的网页就是通过WAP网关协议或它提供的HTTP代理服务实现的。

    (4)适用范围

      可能这两者的适用范围才是大家最关心的问题,CMNET拥有完全的Internet访问权,这里就不多说了,主要让我们来看看CMWAP。因为有了上面提到的限制,CMWAP的适用范围就要看WAP网关所提供的支持了。目前,中国移动的WAP网关对外只提供HTTP代理协议(80和8080端口)和WAP网关协议(9201端口)。(据有的网友提到1080端口也是开放的,但无法连接。这也许是移动内部使用的一个Socks后门吧)。

      因此,只有满足以下两个条件的应用才能在中国移动的CMWAP接入方式下正常工作:

      1.应用程序的网络请求基于HTTP协议。

      2.应用程序支持HTTP代理协议或WAP网关协议。

      但是如何辨别一个应用程序的网络请求是否基于HTTP协议?这个问题还真不好回答,要完全做到这一点需要通过拦截应用程序的通信数据包进行分析。这里提供几个简单的方法给广大菜鸟级机友:从表现上看,如果它的网络请求是网址(URL)的形式,那么通常是基于HTTP协议的,如Web浏览器;如果它连接的服务器端口是80,那么它可能是基于HTTP协议的。

      如何区别一个应用程序支持HTTP代理协议还是WAP网关协议呢?首先看它的设置中有没有代理服务器的选项(通常在S60智能手机上未特别说明的代理都是特指HTTP代理),如果有则表示它支持HTTP代理协议。如果没有,则需要按照以下步骤测试:  

      在GPRS接入点设置的高级设置里去掉代理服务器的设置项:ServerAddress和ServerPort(如果应用程序可以正常工作,那么它是基于WAP网关协议,如Java程序、S60内置的浏览器)。如果在此状态下不能正常工作,而恢复GPRS接入点高级设置中的代理服务器设置后能够正常工作,则应用程序支持HTTP代理协议。如果仍不能正常工作,那么这个应用程序一般来说是不支持HTTP代理协议或WAP网关协议的。

      这里需要特别说明的是Java QQ,它有Socket和HTTP两种版本。现在网上流传的可用于CMWAP的JavaQQ就是基于HTTP协议的。就拿Java QQ 2004来说,启动画面中就明确的写着“KJavaQQHTTP”,而sis版的QQ和Agile Messenger因为是采用的普通的Socket连接方式,因此无法用于CMWAP。

      下面再来总结一下CMWAP下可以使用的常见软件的工作方式:

      (1)手机内置的浏览器:WAP网关协议

      (2)Opera浏览器:HTTP代理协议(有代理设置)

      (3)Java程序:WAP网关协议

      (4)AvantGo:HTTP代理协议(有代理设置)

    NIO

    用异步输入输出流编写Socket进程通信程序
    在Merlin中加入了用于实现异步输入输出机制的应用程序接口包:java.nio(新的输入输出包,定义了很多基本类型缓冲(Buffer)),java.nio.channels(通道及选择器等,用于异步输入输出),java.nio.charset(字符的编码解码)。通道(Channel)首先在选择器(Selector)中注册自己感兴趣的事件,当相应的事件发生时,选择器便通过选择键(SelectionKey)通知已注册的通道。然后通道将需要处理的信息,通过缓冲(Buffer)打包,编码/解码,完成输入输出控制。

    通道介绍:
    这里主要介绍ServerSocketChannel和 SocketChannel.它们都是可选择的(selectable)通道,分别可以工作在同步和异步两种方式下(注意,这里的可选择不是指可以选择两种工作方式,而是指可以有选择的注册自己感兴趣的事件)。可以用channel.configureBlocking(Boolean )来设置其工作方式。与以前版本的API相比较,ServerSocketChannel就相当于ServerSocket(ServerSocketChannel封装了ServerSocket),而SocketChannel就相当于Socket(SocketChannel封装了Socket)。当通道工作在同步方式时,编程方法与以前的基本相似,这里主要介绍异步工作方式。

    所谓异步输入输出机制,是指在进行输入输出处理时,不必等到输入输出处理完毕才返回。所以异步的同义语是非阻塞(None Blocking)。在服务器端,ServerSocketChannel通过静态函数open()返回一个实例serverChl。然后该通道调用serverChl.socket().bind()绑定到服务器某端口,并调用register(Selector sel, SelectionKey.OP_ACCEPT)注册OP_ACCEPT事件到一个选择器中(ServerSocketChannel只可以注册OP_ACCEPT事件)。当有客户请求连接时,选择器就会通知该通道有客户连接请求,就可以进行相应的输入输出控制了;在客户端,clientChl实例注册自己感兴趣的事件后(可以是OP_CONNECT,OP_READ,OP_WRITE的组合),调用clientChl.connect(InetSocketAddress )连接服务器然后进行相应处理。注意,这里的连接是异步的,即会立即返回而继续执行后面的代码。

    选择器和选择键介绍:
    选择器(Selector)的作用是:将通道感兴趣的事件放入队列中,而不是马上提交给应用程序,等已注册的通道自己来请求处理这些事件。换句话说,就是选择器将会随时报告已经准备好了的通道,而且是按照先进先出的顺序。那么,选择器是通过什么来报告的呢?选择键(SelectionKey)。选择键的作用就是表明哪个通道已经做好了准备,准备干什么。你也许马上会想到,那一定是已注册的通道感兴趣的事件。不错,例如对于服务器端serverChl来说,可以调用key.isAcceptable()来通知serverChl有客户端连接请求。相应的函数还有:SelectionKey.isReadable(),SelectionKey.isWritable()。一般的,在一个循环中轮询感兴趣的事件(具体可参照下面的代码)。如果选择器中尚无通道已注册事件发生,调用Selector.select()将阻塞,直到有事件发生为止。另外,可以调用selectNow()或者select(long timeout)。前者立即返回,没有事件时返回0值;后者等待timeout时间后返回。一个选择器最多可以同时被63个通道一起注册使用。
    应用实例:
    下面是用异步输入输出机制实现的客户/服务器实例程序――程序清单1(限于篇幅,只给出了服务器端实现,读者可以参照着实现客户端代码):
    12/1/2005

    置顶日志

     

     

     

     

     
     

    你爷爷 DE

    ∑⌒∑⌒你爷爷DE
       今天又被教官骂了,真TMD不爽!
             这个驾照真的这么难考吗?我在问自己?
    怎么学了这么久还是这么差呢?
    离合? 油门?  手闸? 我的天呢。我不想再听了
    什么离合到半连动状态再持续加油门,而且要均匀。
    我的天,我练得那么少,怎么可能那么熟练啊?
    怪我?有用吗?过几天就要考试了````郁闷啊
           有那位好心人能给个解决的办法啊?
     

    终究是害了自己

     
     
     
     
    2005.12.1

        今天收到很多莫名其妙的短信,打开了一看,TMD居然没什么内容,再往下看时,出现一堆乱码,是那个家伙在玩我呀?心中很是奇怪,猛的 想起自己几个星期前玩过个什么手机炸弹的软件,难道是作用了不成,为了证明实验是否成功,我有自己的手机做了实验,当时还破口大骂,什么鬼东西啊 一点用都没有,现在终于发现那真是个鬼东西,太差劲了吧 现在才起作用?
     
     
     
     
    11/29/2005

    好事一件 I DO

     

    ★  迟  到  ★

     

     

     

    早上睡过头了足足迟到了两个小时
    狂飑教室结果老师已经讲课了哎``

    不想破坏老师的心情结果思考了2分钟
    还是回寝室上网吧哎,又做了件令人感动的事
    因为呀 我没令老师生气啊!

    明天的明天?

    明天的明天的是什么天呢?

    。◕‿◕。小小掉坠

     

                   

                                                                                     


                                                                           

     

                                        

     

                                

                            

     

     

                       

     

                             

    ﹌透明边框滚动条

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的

    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊

    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的
    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊
    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的
    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊
    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°



     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的
    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊
    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°


     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的
    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊
    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的
    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊
    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°







     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的
    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊
    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的
    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊
    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°


     

     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的
    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊
    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的

    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊

    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°


     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的

    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊

    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

       

       

     

     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的

    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊

    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

     

     

     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的

    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊

    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

     

     

      

     

     

      

     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的

    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊

    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

     

     

      

     

     

      

      

     按此在新窗口浏览图片按此在新窗口浏览图片按此在新窗口浏览图片按此在新窗口浏览图片按此在新窗口浏览图片按此在新窗口浏览图片按此在新窗口浏览图片  按此在新窗口浏览图片按此在新窗口浏览图片按此在新窗口浏览图片 

     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的

    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊

    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

     

     

           
     

    ☜♥☞如果的小房子。◕‿◕。
    如果——能无忧无虑;能展翅高飞,能随心所欲,能大展拳脚;那么——我便是幸福的

    ❥·۰•●果果素材大集合☃
    ๑•ิ.•ั๑小如果的素材库๑给你带来给多美好的事物☊

    *.:。✿*゚如果゚・✿.。.:*
    ☃..。.:*以文字的方式纪录心情✎ 怀念过去✿₪°

     

     

      

     

     

      

     

     

     

    ◕‿-。漂亮的文字图

     

     

                                                             

        

        

     

     

     

    按此在新窗口浏览图片

    按此在新窗口浏览图片

     

     

     

     

     

     

     

     

     

     

     

     

        

     

     

     




    ◕‿-。 闪闪字体(三)

     

     

     

     


    按此在新窗口浏览图片

           

     

     

     

     

            

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    按此在新窗口浏览图片
    按此在新窗口浏览图片
     
          
     
    按此在新窗口浏览图片