??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产成人一区二区精品区,亚洲熟妇色自偷自拍另类,国产亚洲婷婷香蕉久久精品 http://www.tkk7.com/huanzhugege/category/20507.htmlhttp://www.cownew.com 邮g误p?about521 at 163.comzh-cnTue, 20 Oct 2009 04:07:34 GMTTue, 20 Oct 2009 04:07:34 GMT60不要再拍脑袋Q要U学的计?/title><link>http://www.tkk7.com/huanzhugege/archive/2009/10/20/299002.html</link><dc:creator>CowNew开源团?/dc:creator><author>CowNew开源团?/author><pubDate>Tue, 20 Oct 2009 04:06:00 GMT</pubDate><guid>http://www.tkk7.com/huanzhugege/archive/2009/10/20/299002.html</guid><wfw:comment>http://www.tkk7.com/huanzhugege/comments/299002.html</wfw:comment><comments>http://www.tkk7.com/huanzhugege/archive/2009/10/20/299002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huanzhugege/comments/commentRss/299002.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huanzhugege/services/trackbacks/299002.html</trackback:ping><description><![CDATA[<div>昨天|站虚拟L提供商发送提醒邮件说我的|站“如鹏|?#8221;量标了,很奇怪,上个月流量用了一半多一点儿Q这个月|站讉K量ƈ没有明显的上升,怎么会这个月才过20天就量标了呢Q到|站后台查看量报表才发现agent.php消耗了31%的流量,近1/3呀?br /> <br /> agent.php是?a target="_blank"><font color="#0000ff">“如鹏助手”</font></a> 提供数据的api面Q默认如鹏助手每10U钟׃向这个页面请求最q?0条新帖和50条新回复。当时开发的时候也考虑q这个功能会不会对网站流量有非常大的消耗,但是当时没有q行U学的计,惛_然的认ؓ不会。但是现在仔l一,50条新帖?0条新回复的信息估计有100KQ那么每分钟h6ơ,假设每天监控15时Q每个月30天,那么一个月的流量就?00K*6*60*15*30=16200000k=16200M=<font color="#ff0000">16.2G</font>Q恐怖呀Q!Q网站每月限定流量是45GQ正好是16.2/45=36%Q估和报表中的31%差不多?br /> <br /> 因ؓ|站量已经标Q因此必M额外的流量才能保证网站正常运行,10G的流量一个月20元,买流量就要买_?0个月的,10个月是200元,本来q部分花Ҏ(gu)可以避免的。当初花几分钟算一下就不至于犯q种错误Q?br /> <br /> <font color="#ff0000">不要再拍脑袋Q要U学的计!Q!Q!Q!Q!</font><br /> <font color="#ff0000"></font><br /> Z减少如鹏助手量消耗,我做了如下的优化Q?br /> 1、agent.php不再传输全部的帖子内容,帖子正文只传输前50个字?br /> 2、去掉agent.php传输帖子中的I格{无意义字符?br /> 3、因为如鹏网现在发帖量不大,没必要每ơ显C?0条最新脓(chung)Q因此改为只传输10条最新脓(chung)?br /> 4、在agent.php头部加入“Ob_Start('ob_gzhandler');”Q也是启用GZip压羃|页Q减网늚量传输?br /> 5、降低如鹏助手的h频率Q由10U刷Cơ改?0U刷C?/div> <div>l过本次优化Q?0条新帖?0条新回复的信息估计有6KQ?K*1*60*15*30=162000K=162M=0.162G。这h量消耗基本可以忽略不计了?br /> <br /> <font color="#ff0000">不要再拍脑袋Q要U学的计!Q!Q!Q!Q!</font><br /> </div> <img src ="http://www.tkk7.com/huanzhugege/aggbug/299002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huanzhugege/" target="_blank">CowNew开源团?/a> 2009-10-20 12:06 <a href="http://www.tkk7.com/huanzhugege/archive/2009/10/20/299002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q离新版本YӞ拒当白?/title><link>http://www.tkk7.com/huanzhugege/archive/2009/06/11/281386.html</link><dc:creator>CowNew开源团?/dc:creator><author>CowNew开源团?/author><pubDate>Thu, 11 Jun 2009 02:31:00 GMT</pubDate><guid>http://www.tkk7.com/huanzhugege/archive/2009/06/11/281386.html</guid><wfw:comment>http://www.tkk7.com/huanzhugege/comments/281386.html</wfw:comment><comments>http://www.tkk7.com/huanzhugege/archive/2009/06/11/281386.html#Feedback</comments><slash:comments>24</slash:comments><wfw:commentRss>http://www.tkk7.com/huanzhugege/comments/commentRss/281386.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huanzhugege/services/trackbacks/281386.html</trackback:ping><description><![CDATA[<h2>q离新版本YӞ拒当白?/h2> <div id="emqacuy" class="t_msgfont" id="postmessage_16778"><font color="#ff0000"><font size="4">本文是专门ؓ在校生写的,是看C很多同学把很多精力放到折腾这U各L(fng)新Y件而忽略了正\的学?fn)有感而发Q不是针寚w些有太多旉研究Cѝ有志于改善世界上所有Y件、要解放全hcȝ牛h?/font></font><br /> =================================================================================================</div> <br /> 刚才帮一个同学解决一个在IE8下在如鹏论坛无法发帖的问题。由于如鹏论坛用的Discuzpȝ的验证问{功能对IE8支持有BugQ所以新用户无法发帖。验证问{功能是防止垃圾q告的一个有效手D,但是对IE8、Opera、chrome{非L览器支持有Bug。刚才ؓ了能让这个同学发帖,我就暂时关闭了验证问{功能,但是刚关闭了Q就来了一大堆垃圾q告贴。所以我p紧又把验证问{功能打开了。所以以?font style="color: #000000" color="red">使用IE8、Opera、chrome{非L览器访问如鹏论坛的时候会有这样那L(fng)问题Q现在也没有_֊解决q些问题</font>Q只能满_多数同学的需求了?br />     我以及很多同事都有一个新?fn)惯Q?font color="red">l对不拿新Y件尝?/font>。因为新软g千好万好Q但是经验证明新软g会给我带来麻烦而不是方ѝ当qXP刚推出的时候,我还在上学,很多同学抢着装,我就q是Win2000坚持不动摇,当时大部分Y仉能在Win2000下跑的很好,而很多Y件对XP兼容性不是很好,所以他们一直在跟XP做斗争,我则用着Win2000做着该做的事Q编着该编的代码。碰到问题当时网上介l的Ҏ(gu)都是在Win2000下的解决Ҏ(gu)。这节省了很多时间。毕竟操作系l、电(sh)脑只是工P是要工具Z服务Q不是给你添乱?br />     q有当初IE7推出的时候,很多人尝鲜用IE7Q可是很多网站都对IE7支持有问题,到最后干什么都q不了。而那些用IE6的h则干着该干的事情,一Ҏ(gu)间、精力都没浪贏V?br />     IE8推出来了Q我怿它很好,我相信它比IE6、IE7都好Q比别的览器都好,可是有一点,很多|站用IE8看都有问题,那我用IE8q什么,l自己找那个ȝq什么。有同学?#8220;IE8用v来快”Q由于网站对IE8支持有问题导致你你一个帖子半个小旉发不出去Q节省的那点旉早就费没了?font color="darkred">览器的目的是上|,不是l别人当白鼠?/font>我估计早晚有用IE8的那一天,但是那一天是所有网站都对IE8支持没问题我再用IE8。我不当白鼠?br />     Vista推出来了Q同学们争着用,可是各个软g在Vista上装的都有问题,那不是给自己N事儿吗?竟然q有同学用Windows7QW(xu)in7和IE8现在都是试版,各个软g的兼容程度可惌知Q给自己N个麻烦干什么?{主Y仉支持他们在说吧。有同学说Windows7兼容性可好了Q可是再好有XP好吗Q只要没有的话你有可能q行一个别跑你不能跑的软gQ给自己添那个麻烦干什么。别人在拿着书在q行着代码Q你却在为着开发工具和操作pȝ的兼Ҏ(gu)艰苦奋斗着Q何必活的那么篏呢?br />     我现在从事的银行pȝ软g开发中Q一个新技术推Z后必ȝq其他客戯三q的验证和升U以后才会考虑使用Q就是基于这L(fng)考虑Q毕竟工hlh用的Q不是给人添ȝ的?br /> <br /> <p align="center"><font size="6"><font color="red">q离新版本YӞ拒绝当小白鼠Q?br /> ==================================================<br /> <font color="#ff0000"><font size="4">本文是专门ؓ在校生写的,是看C很多同学把很多精力放到折腾这U各L(fng)新Y件而忽略了正\的学?fn)有感而发Q不是针寚w些有太多旉研究Cѝ有志于改善世界上所有Y件、要解放全hcȝ牛h?/font></font><br /> </font></font></p> <img src ="http://www.tkk7.com/huanzhugege/aggbug/281386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huanzhugege/" target="_blank">CowNew开源团?/a> 2009-06-11 10:31 <a href="http://www.tkk7.com/huanzhugege/archive/2009/06/11/281386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>lighthttp中设|disucz转发的方法最详细?/title><link>http://www.tkk7.com/huanzhugege/archive/2009/05/16/271040.html</link><dc:creator>CowNew开源团?/dc:creator><author>CowNew开源团?/author><pubDate>Sat, 16 May 2009 13:41:00 GMT</pubDate><guid>http://www.tkk7.com/huanzhugege/archive/2009/05/16/271040.html</guid><wfw:comment>http://www.tkk7.com/huanzhugege/comments/271040.html</wfw:comment><comments>http://www.tkk7.com/huanzhugege/archive/2009/05/16/271040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huanzhugege/comments/commentRss/271040.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huanzhugege/services/trackbacks/271040.html</trackback:ping><description><![CDATA[<p>1、编写rewrite脚本Q编?etc/lighttpd/local.lighttpd.conf内容如下Q?br /> url.rewrite-once = (<br />         "^/forum/archiver/((fid|tid)-[\w\-]+\.html)$" => "forum/archiver/index.php?$1",<br />         "^/forum/forum-([0-9]+)-([0-9]+)\.html$" => "forum/forumdisplay.php?fid=$1&page=$2",<br />         "^/forum/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$" => "forum/viewthread.php?tid=$1&extra=page%%53D$3&page=$2",<br />         "^/forum/space-(username|uid)-(.+)\.html$" => "forum/space.php?$1=$2",<br />         "^/forum/tag-(.+)\.html$" => "forum/tag.php?name=$1"<br /> )<br /> q里假设论坛装在forum目录下,如果是装在根目录下则是:<br /> url.rewrite-once = (<br />         "^/archiver/((fid|tid)-[\w\-]+\.html)$" => "archiver/index.php?$1",<br />         "^/forum-([0-9]+)-([0-9]+)\.html$" => "forumdisplay.php?fid=$1&page=$2",<br />         "^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$" => "viewthread.php?tid=$1&extra=page%%53D$3&page=$2",<br />         "^/space-(username|uid)-(.+)\.html$" => "space.php?$1=$2",<br />         "^/tag-(.+)\.html$" => "tag.php?name=$1"<br /> )</p> <p>2、重启lighttpdQ重启方法:/etc/init.d/lighttpd restart</p> <img src ="http://www.tkk7.com/huanzhugege/aggbug/271040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huanzhugege/" target="_blank">CowNew开源团?/a> 2009-05-16 21:41 <a href="http://www.tkk7.com/huanzhugege/archive/2009/05/16/271040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>防盗铄讄http://www.tkk7.com/huanzhugege/archive/2009/05/04/268799.htmlCowNew开源团?/dc:creator>CowNew开源团?/author>Mon, 04 May 2009 05:37:00 GMThttp://www.tkk7.com/huanzhugege/archive/2009/05/04/268799.htmlhttp://www.tkk7.com/huanzhugege/comments/268799.htmlhttp://www.tkk7.com/huanzhugege/archive/2009/05/04/268799.html#Feedback0http://www.tkk7.com/huanzhugege/comments/commentRss/268799.htmlhttp://www.tkk7.com/huanzhugege/services/trackbacks/268799.htmlRewriteEngine on

RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^http://rupeng.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://rupeng.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.rupeng.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.rupeng.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tinyosstudy.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tinyosstudy.com$ [NC]
RewriteRule .*.(jpg|jpeg|gif|png|bmp|rar|zip|exe|pdf|attach|chm)$      http://www.rupeng.com


一定要注意保存为Unix格式。有的版本的IE“另存?#8221;发送的referer为空Q所以加上第一?#8220;RewriteCond %{HTTP_REFERER} !^$ [NC]”

]]>
杨中U的最新力作《程序员的SQL金典?/title><link>http://www.tkk7.com/huanzhugege/archive/2008/10/23/236095.html</link><dc:creator>CowNew开源团?/dc:creator><author>CowNew开源团?/author><pubDate>Thu, 23 Oct 2008 01:58:00 GMT</pubDate><guid>http://www.tkk7.com/huanzhugege/archive/2008/10/23/236095.html</guid><wfw:comment>http://www.tkk7.com/huanzhugege/comments/236095.html</wfw:comment><comments>http://www.tkk7.com/huanzhugege/archive/2008/10/23/236095.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/huanzhugege/comments/commentRss/236095.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huanzhugege/services/trackbacks/236095.html</trackback:ping><description><![CDATA[<p> </p> <p><a href="http://www.tkk7.com/images/blogjava_net/huanzhugege/WindowsLiveWriter/SQL_8BC7/shupi_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="440" alt="shupi" src="http://www.tkk7.com/images/blogjava_net/huanzhugege/WindowsLiveWriter/SQL_8BC7/shupi_thumb.jpg" width="352" border="0" /></a>  </p> <p>Chinapub在线购买地址Q?a >http://www.china-pub.com/301651</a></p> <p>当当|在U购买地址Q?a >http://product.dangdang.com/product.aspx?product_id=20368319</a></p> <p>试读?sh)子版下载?br /> 下蝲地址1Q?a href="http://www.tkk7.com/Files/huanzhugege/cxydSQLjd.zip">http://www.tkk7.com/Files/huanzhugege/cxydSQLjd.zip<br /> </a>下蝲地址2Q?<a >http://www.namipan.com/d/2ec1eacc92d2678a38095bef1d19ed938f78831d6f791500</a> <br /> W一本专门ؓE序员编写的数据库图?/p> <h1>《程序员的SQL金典?/h1> <ul> <li><strong>子查询、表q接、数据库语法差异{用通俗易懂、诙谐幽默的语言讲解出来</strong> <li><strong>配合大量真实案例Q学了就能用Q在短时间内成ؓ数据库开发高?/strong> <li><strong>高度提取不同数据库的共同点,仔细分析不同点,q给x案,同时学会MSSQLServer、MYSQL、Oracle、DB2数据库不再是?/strong> <li><strong>国内W一本讲解开H函数实际应用的图书</strong> </li> </ul> <p>MD技术之“U?#8221;Q张合用?#8220;?#8221;Q锻造SQL高可用性数据库应用指南从理论到实践Q凝聚SQLL数据库最前沿的技术要领?/p> <p>本书特色Q主要介lSQL的语法规则及在实际开发中的应用,q且对SQL在MySQL、MS SQL Server、Oracle和DB2中的差异q行了分析;详细讲解数据库对增、删、改、查{SQL的支持ƈl出了相应的SQL应用案例Q透彻分析函数、子查询、表q接、不同DBMS中的SQL语法差异、SQL调优、NULL值处理、事务、开H函数等高技术;通过对实际案例开发过E的详细分析Q读者掌握SQL的综合应用技巧?/p> <p>内容提要</p> <p>本书主要介绍SQL以及在实际开发中的应用,q且对SQL在MYSQL、MSSQLServer、Oracle和DB2中的差异性进行了分析。本书分Z部分Q第一部分为基,主要讲解数据库对增删Ҏ(gu){SQL的支持,l出了这些SQL的应用案例;W二部分阶篇Q讲解了函数、子查询、表联接、不同DBMS中SQL语法差异、SQL调优、NULL值处理、事务、开H函数等高技术;W三部分为案例篇Q讲解了前两部分的知识的l合q用。此书适用于学?fn)数据库~程的读者,对于有一定数据库开发经验的读者也有非常大的参考h(hun)倹{?/p> <p>前言</p> <p>市面上讲解数现在据库的书都花了很多篇q讲解数据库的备份、授权、调优、修复、监控等内容Q这些内Ҏ(gu)数据库管理员QDBAQ应该掌握的Q而对于程序员来说更需要去掌握的则是SQL语句的用。但是市面上专门讲解SQL语句的书非常,初学者学?fn)数据库开发过E中常常被那些写lDBA的书弄的晕头转向Q无法真正快速的掌握SQL技术;而且q些书中讲解的SQL也常常是针对特定数据库系l的专有实现Q无法很Ҏ(gu)的在其他数据库系l中q行Q读者需要阅d量的书和查阅大量的文档才能掌握不同数据库pȝ的用?/p> <p>本书是专门写l程序员的,因此没有讲解备䆾、授权、调优、修复、监控等开发h员不兛_的内容,直接从SQL语句入手让读者快速的掌握数据库开发的技能?#8220;面向开发h员,讲解对开发h员最有用的知?#8221;是本书的~写宗旨?/p> <p>MYSQL、MSSQLServer、Oracle和DB2{都是非常流行的数据库管理系l(DBMSQ,虽然在大部分SQL语法上这些DBMS实现都是一致的Q不q在实现l节以及高语法斚wq些DBMS的实现差异还是非常大的。如果编写能够兼容这些DBMS的SQL语句是开发h员经帔R要面对的问题。本书将帮助读者从Ҏ(gu)上解册个问题?/p> <p>很多开发h员对于SQL语句的掌握只限于单的SELECT、UPDATE语句Q对于稍微复杂的逻辑l常需要编写程序代码来完成Q这不仅无法发挥数据库的优势Q而且开发出的系l性能非常低,而如果能够用数据库函数、子查询、表联接、开H函数等高的SQLҎ(gu)则可以大大化系l开发的隑ֺQƈ且提高系l的性能。本书将对这些高U特性进行详l的讲解?/p> <p>本书W??章介l数据库pȝ的基本知识以及基本操作;W?章介lInsert、Delete和Update语句的基本应用;W?章对Select语句q行全面的介l,Ҏ(gu)p匹配、分l、限制数据条数、计字Dc组合查询等高内容q行了重点的讲解Q第5章介l常用的数据库函C及它们在LDBMS中的实现差异Q第6章介l烦引与U束{知识点Q第7?章分别介l表q接、子查询{高U查询技术;W?章对LDBMS的语法差异进行分析,q且l出了解x案;W?0章介l注入漏z攻凅RSQL调优、事务、自动增长字DcNULL值处理、开H函数等高话题Q第11章以一个案例讲解书中知识点在实际开发中的应用?/p> <p>在此Q我要感谢ؓq本书的诞生l于我帮助的所有h。首先我要感谢CowNew开源团队的朋友们一直以来的无私奉献Q感谢KingChou在开发CowNewSQLq程中的卓越工作Q没有CowNewSQL也就不会有这本书的问世;q要感谢EasyJF的蔡世友Q他一直以来对开源事业的奉献是值得我学?fn)的Q最后我要感谢电(sh)子工业出版社的田康l理Q他的高效工作得本书能够顺利的完成和出版?/p> <p>如果(zhn)对我的书有M意见和徏议,(zhn)可以给我发送邮Ӟabout521@163.comQ本书相关的后箋资料会发布到CowNew开源团队网站(http://www.cownew.comQ中?/p> <p>W??数据库入?1</p> <p>1.1 数据库概q?1</p> <p>1.1.1 数据库与数据库管理系l?1</p> <p>1.1.2 数据库能做什?2</p> <p>1.1.3 L数据库管理系l介l?2</p> <p>1.2 数据库基概念 5</p> <p>1.2.1 Catalog 5</p> <p>1.2.2 表(TableQ?6</p> <p>1.2.3 列(ColumnQ?7</p> <p>1.2.4 数据cdQDataTypeQ?8</p> <p>1.2.5 记录QRecordQ?9</p> <p>1.2.6 主键QPrimaryKeyQ?9</p> <p>1.2.7 索引QIndexQ?10</p> <p>1.2.8 表关?12</p> <p>1.2.9 数据库的语言——SQL 13</p> <p>1.2.10 DBA与程序员 14</p> <p>W??数据表的创徏和管?17</p> <p>2.1 数据cd 17</p> <p>2.1.1 整数cd 17</p> <p>2.1.2 数值类?19</p> <p>2.1.3 字符相关cd 21</p> <p>2.1.4 日期旉cd 23</p> <p>2.1.5 二进制类?24</p> <p>2.2 通过SQL语句理数据?25</p> <p>2.2.1 创徏数据?25</p> <p>2.2.2 定义非空U束 26</p> <p>2.2.3 定义默认?27</p> <p>2.2.4 定义主键 27</p> <p>2.2.5 定义外键 29</p> <p>2.2.6 修改已有数据?30</p> <p>2.2.7 删除数据?31</p> <p>2.2.8 受限操作的变通解x?31</p> <p>W??数据的增、删、改 33</p> <p>3.1 数据的插?34</p> <p>3.1.1 单的INSERT语句 34</p> <p>3.1.2 化的INSERT语句 36</p> <p>3.1.3 非空U束Ҏ(gu)据插入的影响 36</p> <p>3.1.4 主键Ҏ(gu)据插入的影响 37</p> <p>3.1.5 外键Ҏ(gu)据插入的影响 38</p> <p>3.2 数据的更?38</p> <p>3.2.1 单的数据更新 39</p> <p>3.2.2 带WHERE子句的UPDATE语句 40</p> <p>3.2.3 非空U束Ҏ(gu)据更新的影响 41</p> <p>3.2.4 主键Ҏ(gu)据更新的影响 42</p> <p>3.2.5 外键Ҏ(gu)据更新的影响 42</p> <p>3.3 数据的删?43</p> <p>3.3.1 单的数据删除 43</p> <p>3.3.2 带WHERE子句的DELETE语句 44</p> <p>W??数据的检?47</p> <p>4.1 SELECT基本用法 48</p> <p>4.1.1 单的数据?48</p> <p>4.1.2 索出需要的?49</p> <p>4.1.3 列别?51</p> <p>4.1.4 按条件过?52</p> <p>4.1.5 数据汇?53</p> <p>4.1.6 排序 56</p> <p>4.2 高数据qo 59</p> <p>4.2.1 通配W过?59</p> <p>4.2.2 I值检?63</p> <p>4.2.3 反义q算W?64</p> <p>4.2.4 多值检?65</p> <p>4.2.5 范围值检?66</p> <p>4.2.6 低效?#8220;WHERE 1=1” 68</p> <p>4.3 数据分组 72</p> <p>4.3.1 数据分组入门 74</p> <p>4.3.2 数据分组与聚合函?76</p> <p>4.3.3 HAVING语句 79</p> <p>4.4 限制l果集行?81</p> <p>4.4.1 MySQL 81</p> <p>4.4.2 MS SQL Server 2000 82</p> <p>4.4.3 MS SQL Server 2005 83</p> <p>4.4.4 Oracle 84</p> <p>4.4.5 DB2 86</p> <p>4.4.6 数据库分?88</p> <p>4.5 抑制数据重复 90</p> <p>4.6 计算字段 91</p> <p>4.6.1 帔R字段 92</p> <p>4.6.2 字段间的计算 93</p> <p>4.6.3 数据处理函数 95</p> <p>4.6.4 字符串的拼接 97</p> <p>4.6.5 计算字段的其他用?103</p> <p>4.7 不从实体表中取的数据 105</p> <p>4.8 联合l果?107</p> <p>4.8.1 单的l果集联?108</p> <p>4.8.2 联合l果集的原则 110</p> <p>4.8.3 UNION ALL 112</p> <p>4.8.4 联合l果集应用D?114</p> <p>W??函数 119</p> <p>5.1 数学函数 122</p> <p>5.1.1 求绝对?122</p> <p>5.1.2 求指?122</p> <p>5.1.3 求^Ҏ(gu) 123</p> <p>5.1.4 求随机数 123</p> <p>5.1.5 舍入到最大整?125</p> <p>5.1.6 舍入到最整?126</p> <p>5.1.7 四舍五入 127</p> <p>5.1.8 求正弦?128</p> <p>5.1.9 求余弦?129</p> <p>5.1.10 求反正u?129</p> <p>5.1.11 求反余u?130</p> <p>5.1.12 求正切?130</p> <p>5.1.13 求反正切?131</p> <p>5.1.14 求两个变量的反正?131</p> <p>5.1.15 求余?132</p> <p>5.1.16 求圆周率π?132</p> <p>5.1.17 弧度制{换ؓ角度?133</p> <p>5.1.18 角度制{换ؓ弧度?134</p> <p>5.1.19 求符?134</p> <p>5.1.20 求整除余?135</p> <p>5.1.21 求自然对?136</p> <p>5.1.22 求以10为底的对?136</p> <p>5.1.23 求幂 137</p> <p>5.2 字符串函?137</p> <p>5.2.1 计算字符串长?138</p> <p>5.2.2 字符串{换ؓ写 138</p> <p>5.2.3 字符串{换ؓ大写 139</p> <p>5.2.4 截去字符串左侧空?139</p> <p>5.2.5 截去字符串右侧空?140</p> <p>5.2.6 截去字符串两侧的I格 141</p> <p>5.2.7 取子字符?143</p> <p>5.2.8 计算子字W串的位|?144</p> <p>5.2.9 从左侧开始取子字W串 145</p> <p>5.2.10 从右侧开始取子字W串 146</p> <p>5.2.11 字符串替?147</p> <p>5.2.12 得到字符的ASCII?148</p> <p>5.2.13 得到一个ASCII码数字对应的字符 149</p> <p>5.2.14 发音匚w?151</p> <p>5.3 日期旉函数 153</p> <p>5.3.1 日期、时间、日期时间与旉?153</p> <p>5.3.2 L数据库系l中日期旉cd的表C方?154</p> <p>5.3.3 取得当前日期旉 154</p> <p>5.3.4 日期增减 157</p> <p>5.3.5 计算日期差额 166</p> <p>5.3.6 计算一个日期是星期?172</p> <p>5.3.7 取得日期的指定部?177</p> <p>5.4 其他函数 183</p> <p>5.4.1 cd转换 183</p> <p>5.4.2 I值处?188</p> <p>5.4.3 CASE函数 191</p> <p>5.5 各数据库pȝ独有函数 194</p> <p>5.5.1 MySQL中的独有函数 195</p> <p>5.5.2 MS SQL Server中的独有函数 202</p> <p>5.5.3 Oracle中的独有函数 206</p> <p>W??索引与约?209</p> <p>6.1 索引 209</p> <p>6.2 U束 211</p> <p>6.2.1 非空U束 211</p> <p>6.2.2 唯一U束 212</p> <p>6.2.3 CHECKU束 217</p> <p>6.2.4 主键U束 221</p> <p>6.2.5 外键U束 224</p> <p>W??表连?233</p> <p>7.1 表连接简?236</p> <p>7.2 内连接(INNER JOINQ?236</p> <p>7.3 不等D?240</p> <p>7.4 交叉q接 241</p> <p>7.5 自连?245</p> <p>7.6 外部q接 248</p> <p>7.6.1 左外部连?250</p> <p>7.6.2 叛_部连?251</p> <p>7.6.3 全外部连?252</p> <p>W??子查?255</p> <p>8.1 子查询入?261</p> <p>8.1.1 单值子查询 261</p> <p>8.1.2 列值子查询 263</p> <p>8.2 SELECT列表中的标量子查?265</p> <p>8.3 WHERE子句中的标量子查?267</p> <p>8.4 集合q算W与子查?270</p> <p>8.4.1 INq算W?270</p> <p>8.4.2 ANY和SOMEq算W?272</p> <p>8.4.3 ALLq算W?274</p> <p>8.4.4 EXISTSq算W?275</p> <p>8.5 在其他类型SQL语句中的子查询应?277</p> <p>8.5.1 子查询在INSERT语句中的应用 277</p> <p>8.5.2 子查询在UPDATE语句中的应用 283</p> <p>8.5.3 子查询在DELETE语句中的应用 285</p> <p>W??L数据库的SQL语法差异解决Ҏ(gu) 287</p> <p>9.1 SQL语法差异分析 287</p> <p>9.1.1 数据cd的差?287</p> <p>9.1.2 q算W的差异 288</p> <p>9.1.3 函数的差?289</p> <p>9.1.4 常用SQL的差?289</p> <p>9.1.5 取元数据信息的差?290</p> <p>9.2 消除差异性的Ҏ(gu) 293</p> <p>9.2.1 为每U数据库~写不同的SQL语句 293</p> <p>9.2.2 使用语法交集 294</p> <p>9.2.3 使用SQL实体对象 294</p> <p>9.2.4 使用ORM工具 295</p> <p>9.2.5 使用SQL译?296</p> <p>9.3 CowNewSQL译?299</p> <p>9.3.1 CowNewSQL支持的数据类?299</p> <p>9.3.2 CowNewSQL支持的SQL语法 300</p> <p>9.3.3 CowNewSQL支持的函?305</p> <p>9.3.4 CowNewSQL的用方?309</p> <p>W?0?高话题 313</p> <p>10.1 SQL注入漏洞攻防 313</p> <p>10.1.1 SQL注入漏洞原理 313</p> <p>10.1.2 qo敏感字符 314</p> <p>10.1.3 使用参数化SQL 315</p> <p>10.2 SQL调优 316</p> <p>10.2.1 SQL调优的基本原?317</p> <p>10.2.2 索引 317</p> <p>10.2.3 全表扫描和烦引查?318</p> <p>10.2.4 优化手法 318</p> <p>10.3 事务 324</p> <p>10.3.1 事务?324</p> <p>10.3.2 事务的隔?325</p> <p>10.3.3 事务的隔ȝ?326</p> <p>10.3.4 事务的?327</p> <p>10.4 自动增长字段 327</p> <p>10.4.1 MySQL中的自动增长字段 327</p> <p>10.4.2 MS SQL Server中的自动增长字段 328</p> <p>10.4.3 Oracle中的自动增长字段 329</p> <p>10.4.4 DB2中的自动增长字段 332</p> <p>10.5 业务主键与逻辑主键 333</p> <p>10.6 NULL的学?334</p> <p>10.6.1 NULL与比较运符 336</p> <p>10.6.2 NULL和计字D?337</p> <p>10.6.3 NULL和字W串 338</p> <p>10.6.4 NULL和函?339</p> <p>10.6.5 NULL和聚合函?339</p> <p>10.7 开H函?340</p> <p>10.7.1 开H函数简?342</p> <p>10.7.2 PARTITION BY子句 344</p> <p>10.7.3 ORDER BY子句 346</p> <p>10.7.4 高开H函?353</p> <p>10.8 WITH子句与子查询 360</p> <p>W?1?案例讲解 363</p> <p>11.1 报表制作 371</p> <p>11.1.1 昄制单l信?371</p> <p>11.1.2 昄销售单的详l信?373</p> <p>11.1.3 计算收益 374</p> <p>11.1.4 产品销售额l计 378</p> <p>11.1.5 l计销售记录的份额 379</p> <p>11.1.6 为采购单分 380</p> <p>11.1.7 索所有重叠日期销售单 383</p> <p>11.1.8 为查询编?385</p> <p>11.1.9 标记所有单内最大销售量 386</p> <p>11.2 排序 389</p> <p>11.2.1 非字D|序规?389</p> <p>11.2.2 随机排序 390</p> <p>11.3 表间比较 391</p> <p>11.3.1 索制作过采购单的人制作的销售单 391</p> <p>11.3.2 索没有制作过采购单的人制作的销售单 392</p> <p>11.4 表复?394</p> <p>11.4.1 复制源表的结构ƈ复制表中的数?394</p> <p>11.4.2 只复制源表的l构 395</p> <p>11.5 计算字符在字W串中出现的ơ数 396</p> <p>11.6 去除最高分、最低分 396</p> <p>11.6.1 去除所有最低、最高?397</p> <p>11.6.2 只去除一个最低、最高?397</p> <p>11.7 与日期相关的应用 398</p> <p>11.7.1 计算销售确认日和制单日之间相差的天?398</p> <p>11.7.2 计算两张销售单之间的时间间?399</p> <p>11.7.3 计算销售单制单日期所在年份的天数 401</p> <p>11.7.4 计算销售单制单日期所在月份的W一天和最后一?402</p> <p>11.8 l果集{|?403</p> <p>11.8.1 结果集转置Z?404</p> <p>11.8.2 把结果集转置为多?406</p> <p>11.9 递归查询 410</p> <p>11.9.1 Oracle中的CONNECT BY子句 410</p> <p>11.9.2 Oracle中的SYS_CONNECT_BY_PATH()函数 414</p> <p>11.9.3 My SQL Server和DB2中递归查询 415</p> <p>附录A 常用数据库系l的安装和?417</p> <p>A.1 DB2的安装和使用 417</p> <p>A.2 MySQL的安装和使用 429</p> <p>A.3 Oracle的安装和使用 441</p> <p>A.4 Microsoft SQL Server的安装和使用 452</p> <p><a href="http://www.tkk7.com/images/blogjava_net/huanzhugege/WindowsLiveWriter/SQL_8BC7/20081021_2.jpg"><img height="282" alt="20081021" src="http://www.tkk7.com/images/blogjava_net/huanzhugege/WindowsLiveWriter/SQL_8BC7/20081021_thumb.jpg" width="374" border="0" /></a></p> <img src ="http://www.tkk7.com/huanzhugege/aggbug/236095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huanzhugege/" target="_blank">CowNew开源团?/a> 2008-10-23 09:58 <a href="http://www.tkk7.com/huanzhugege/archive/2008/10/23/236095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>被拿来主义给惯坏?/title><link>http://www.tkk7.com/huanzhugege/archive/2008/07/03/212319.html</link><dc:creator>CowNew开源团?/dc:creator><author>CowNew开源团?/author><pubDate>Thu, 03 Jul 2008 06:22:00 GMT</pubDate><guid>http://www.tkk7.com/huanzhugege/archive/2008/07/03/212319.html</guid><wfw:comment>http://www.tkk7.com/huanzhugege/comments/212319.html</wfw:comment><comments>http://www.tkk7.com/huanzhugege/archive/2008/07/03/212319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huanzhugege/comments/commentRss/212319.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huanzhugege/services/trackbacks/212319.html</trackback:ping><description><![CDATA[<p>有同事竟然找LOWORD、HIWORD在C#中的替代函数搞了一个上?。看来真是被拿来Ml惯坏了Q自己写一分钟p写出?img src="/CuteSoft_Client/CuteEditor/images/emcrook.gif" align="absMiddle" border="0" alt="" /><br />         /// <summary><br />         /// 取低?br />         /// </summary><br />         /// <param name="i"></param><br />         /// <returns></returns><br />         public static int LOWORD(int i)<br />         {<br />             return i & 0xFFFF;<br />         }</p> <p>        /// <summary><br />         /// 取高?br />         /// </summary><br />         /// <param name="i"></param><br />         /// <returns></returns><br />         public static int HIWORD(int i)<br />         {<br />             return i >> 16;<br />         } </p> <img src ="http://www.tkk7.com/huanzhugege/aggbug/212319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huanzhugege/" target="_blank">CowNew开源团?/a> 2008-07-03 14:22 <a href="http://www.tkk7.com/huanzhugege/archive/2008/07/03/212319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT中调用Automation的方?/title><link>http://www.tkk7.com/huanzhugege/archive/2008/06/23/210099.html</link><dc:creator>CowNew开源团?/dc:creator><author>CowNew开源团?/author><pubDate>Mon, 23 Jun 2008 09:04:00 GMT</pubDate><guid>http://www.tkk7.com/huanzhugege/archive/2008/06/23/210099.html</guid><wfw:comment>http://www.tkk7.com/huanzhugege/comments/210099.html</wfw:comment><comments>http://www.tkk7.com/huanzhugege/archive/2008/06/23/210099.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/huanzhugege/comments/commentRss/210099.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huanzhugege/services/trackbacks/210099.html</trackback:ping><description><![CDATA[     摘要: 在SWT中提供了讉KOLE的方式,不过相关的例子都是进E内OLE的例子,比如嵌入览器、引用ActiveX控g什么的。由于客L(fng)需求,我们需要在E序中通过q程外Automation服务的方式访问IE览器。经q网上搜寻,扑ֈ一个朋友写的CComObjectcd以访问Automation服务。不q经q用发C些错误,因此对其q行了修改,Z方便讉KIEQ我又封装了一个IEAutomationc,q?..  <a href='http://www.tkk7.com/huanzhugege/archive/2008/06/23/210099.html'>阅读全文</a><img src ="http://www.tkk7.com/huanzhugege/aggbug/210099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huanzhugege/" target="_blank">CowNew开源团?/a> 2008-06-23 17:04 <a href="http://www.tkk7.com/huanzhugege/archive/2008/06/23/210099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我眼中的.net的缺点(和Java比较Q?/title><link>http://www.tkk7.com/huanzhugege/archive/2008/02/19/180619.html</link><dc:creator>CowNew开源团?/dc:creator><author>CowNew开源团?/author><pubDate>Tue, 19 Feb 2008 03:29:00 GMT</pubDate><guid>http://www.tkk7.com/huanzhugege/archive/2008/02/19/180619.html</guid><wfw:comment>http://www.tkk7.com/huanzhugege/comments/180619.html</wfw:comment><comments>http://www.tkk7.com/huanzhugege/archive/2008/02/19/180619.html#Feedback</comments><slash:comments>52</slash:comments><wfw:commentRss>http://www.tkk7.com/huanzhugege/comments/commentRss/180619.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huanzhugege/services/trackbacks/180619.html</trackback:ping><description><![CDATA[<p>         最q公司要开发Windowsq_上的产品Q由于涉及到商业机密Q所以目前无法对q个产品做详l介l)Q采?Net技术进行开发,我负责的是基于Visual Studio插g机制的行业开发工L(fng)开发。从开始接?Net到现在已l有q三个月了,而且也开发出了第一个版本,?Net已经有了一些认识,׃以前主要用Java、Python{语aq行开发,因此有意无意的就对这些语aq行了比较。和Java比v来,.Net的优势还是很多的Q比如快速开发能力、基于WindowsҎ(gu)进行开发的能力、内|的丰富cd、一些高U语法、组件的多版本管理等。优Ҏ(gu)不用q多夸耀的,~点我则要好好的“批评”一番的Q因?#8220;谦虚使hq步Q骄傲?#8221;嘛,呵呵。开发场景ؓQ用Visual Studio2005q行C#的开发、用Eclipseq行Java开发?nbsp;<br />  <br /> 1、HotSwapQ在Java中HotSwap技术给E序的调试带来非常大的方便,比如可以让程序一边调试一边修改代码,代码修改以后在程序中立即可以看C改后的效果,不用每次修改以后都要重新启动E序Q在.Net中几乎不允许q样做,只有在非常苛ȝ几个情况下才可以实现在调试状态下修改代码Q而且一旦代码段被执行过了就肯定不允许再修改了,q就D每次修改代码都要频繁启动E序Q非常繁琐?br />  2、基?Net的东西和W(xu)indowsl合q于紧密Q而且和W(xu)indowsq_下一些旧有技术有太多千丝万缕的联p,D用v来非帔R烦。比如每个对外部pȝ暴露的接口传来传L后看到的cd是_ComObjectQ要惛_知其真正的接口类型就必须通过COM技术来取得Q非帔R烦;开发的很多lg都需要到注册表中注册Q增加了部v的难度?/p> <p>3、Visual Studio中代码的x查错能力非常弱,很多的要到编译时才能知道代码是否有错Q而在Eclipse中在~写代码的时候对于有错误的代码和有警告的代码Q比如一些Private成员没有被引用)可以立即清晰的提C出来,开发h员可以立即修Ҏ(gu)错误的代码?/p> <p>4、Java中默认的Ҏ(gu)都是可以override的除非标注ؓfinalQ而在C#中必L明确声明virtual的才可以override。在Delphi中也是类似的问题Q这应该是Delphi和C#共同的老爹Anders Hejlsberg对于OO的一U理念吧Q也思h家大师的x是正的Q一个方法是否是虚方法必要明确指定。不q对于习(fn)惯了Java中这U实现方式的人来_C#的这U实现方式还是让人感觉一旉以适应的?/p> <p>5、Visual Studio的编译速度太慢Q点凅R调试?【运行】按钮以后要~译好长一D|间才能启动(不过和Visual Studio6比v来现在的Visual Studio~译速度已经快多了了Q已l接q于Delphi的编译速度了)Q由于Eclipse使用的自q高性能~译器Eclipse CompilerQ而且代码的编译是在编写代码的时候即时进行的Q所以在Eclipse中根本感觉不到编译的旉Q点凅R调试?【运行】按钮以后程序就q行h的?/p> <p>6?Netcd中一些类设计的不灉|Q比如TreeView的节点的昄的值是通过Text属性赋gȝQ而在Java中的Swing、SWT{图形库中,可以在一个树(wi)节点中挂Mcd的|然后通过个节点定义个性化的RenderQ渲染器Q来军_q些?wi)节?gu)CZ么?/p> <p>7、Visual Studio的插件体p过于死板,开发v来不像开发Eclipse插g那样灉|便,q可能和Visual Studio插g体系的历史渊源有关系。D例如下:<br /> Q?Q比如要在代码编辑器上增加新Ҏ(gu),在Eclipse中可以通过代码~辑器中提供的大量扩展点来实玎ͼ而在Visual Studio中的代码~辑器中则只提供了很可怜的几个可扩展性。这一Ҏ(gu)Visual Studio插g体系最大的伤Q大大限制了ZVisual Stuio的插件的功能Q相信随着MS对Visual Studio插g体系的逐渐重视Q这一点会慢慢跟上来的?br /> Q?QVisual Studio的插件体pd.Netl合q于紧密Q在Eclipse中可以ؓPython、Ruby、C#、C、ASM{很多语a开发IDEQ提供代码编辑、代码辅助、调试、编译等功能Q,q些语言不必与Java有Q何关p,而在Visual Studio中虽然也可以ZU语a~写IDEQ比如IronPython、J#Q但是这些语a是和.Net集合紧密的,比如要ؓq种语言提供调试功能Q则必须代码编译成MSIL代码Q这对于很多语言来讲是不可能的;<br /> Q?QEclipse中的插g只要在自qplugin.xml文g中配|好可以了Q把那个插g的jar包放到Eclipse中就可以q行Q而Visual Studio中的插g则必首先注册到注册表,调试和部|v来非帔R烦;<br /> Q?QEclipseq行时的配置是保存在Workspace中的.metedata目录下的Q因此在开发插件的时候会把插件的配置信息自动写到Hosth的那个Eclipse的Workspace中,被调试模式启动的Eclipse所做的一些修改不会媄响主EclipseQ而在Visual Studio中虽然可以用Experimental Hive方式q行插g开发,但是׃q些配置是保存在注册表中的,所以被Host启动的Visual Studio实例会污染到主Visual StudioQ每ơ重启IDE都需要运?#8220;Reset the Microsoft Visual Studio 2008 Experimental hive”来进行环境的重置Q且重置耗时非常长,费了大量时_<br /> Q?QVS2008中,如果插g中抛出异常,而又没有捕获的话Q轻则VS2008会显CZ个错误消息框Q重则VS2008会宕掉;而在Eclipse中会插件中未捕获异常显C出来ƈ且输出到日志文g中,方便插g开发者排查插件的Bug?br /> Q?QEclipse中工E相关的Ҏ(gu)是以Nature的方式提供的Q一个Nature通常可以挂接到几乎所有的工程cd中去Q包括用戯定义cdQ而在Visual Studio中工E相关的Ҏ(gu)则是以SubProject的Ş式提供的Q往往只能挂到Visual Studio内置的少数几个工E类型中去(比如CSharpProject、VBProjectQ,q样可扩展性大大降低了?br /> Q?QEclipse中可以用JET来开发非常复杂的代码生成器,而Visual Studio中的代码生成则只能用非常单的代码模板机制Q复杂的逻辑必通过字符串拼接来完成Q?/p> <p>        毕竟接触.Net旉q是非常短,所以有的地方说的可能有错误Q还请园子里的兄弟多指教。最后祝.Net和Java能在怺竞争中快速成长,从而让我们开发h员能够轻松、快乐、快速的开发出产品来,Q)</p> <img src ="http://www.tkk7.com/huanzhugege/aggbug/180619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huanzhugege/" target="_blank">CowNew开源团?/a> 2008-02-19 11:29 <a href="http://www.tkk7.com/huanzhugege/archive/2008/02/19/180619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Antlr中文文初稿8Q《ANTLR记号》) http://www.tkk7.com/huanzhugege/archive/2007/11/24/162876.htmlCowNew开源团?/dc:creator>CowNew开源团?/author>Sat, 24 Nov 2007 09:40:00 GMThttp://www.tkk7.com/huanzhugege/archive/2007/11/24/162876.htmlhttp://www.tkk7.com/huanzhugege/comments/162876.htmlhttp://www.tkk7.com/huanzhugege/archive/2007/11/24/162876.html#Feedback0http://www.tkk7.com/huanzhugege/comments/commentRss/162876.htmlhttp://www.tkk7.com/huanzhugege/services/trackbacks/162876.html本章译?CowNew开源团?周晓

记号词表

每一个文法都指定了带有规?子结?和词表语al构。这些符号在q行时被转换成整型的"记号cd"从而可以有效的比较。定义从W号到记L(fng)型的映射的文件对ANTLR和ANTLR生成的分析器来说是基?q䆾文档描述了ANTLR使用和生成的q类文gQ还介绍了用于控制词表的选项?

D

在分析时Q一个语法分析器文法通过W号在它的词表里引用记号要符合由词法分析器或其他几号生成的Token对象。记L(fng)型储存在记号对象中,每种W号的值是唯一的,分析器比较这些整数来判断记号cd。如果分析器期望下一个记L(fng)型是23Q但发现W一个超前扫描记L(fng)型,LT(1).getType()Q不?3Q这时分析器抛出MismatchedTokenException异常?

一个文法可能有一个导入词表,l常也会有一个导表,用于被其他文法引用。导入的词表从未被修改,通过它可以知道词表的"初始条g"。不要和导入词汇h了?

下面列出了最常见的问?

ANTLR如何军_哪一个词法符h什么记L(fng)?

每个文法有一个记L(fng)理器来管理文法的导出词表。从文法的importVocab选项Q记L(fng)理器?W号/记号cd 的Ş式被预蝲。这个选项强制ANTLRL有如下映关pȝ文gQ?

PLUS=44

没有importVocab选项Q文法的记号理器是I的(E后会看见一个警??

你的文法中的L记号没有预设|它们被按照遇到的序赋倹{例如,在下面的文法中,记号A和B分别??:

class P extends Parser;
a : A B ;

词法文g以如下Ş式命名: NameTokenTypes.txt.

Z么记L(fng)型从4开始?

因ؓANTLR在分析过E中需要一些特D的记号cdQ用户定义的记号cd必须?后开始?

ANTLR生成什么样的词表文Ӟ

ANTLR?em>V生成VTokenTypes.txt?em>VTokenTypes.javaQ?em>V是文法的名字或者是exportVocab选项指定的名字。文本文件有点像一个简化的记号理器,保存着ANTLR需要的一些信息,供定义在其他文g中的文法查看其词表信息等{。Java文g是是一个包含了记号cd帔R定义的接口。ANTLR生成的分析器实现了其中的一个接口,获得所需要的记号cd定义?

ANTLR怎样同步W号cd在相同文件和不同文g间文法的映射?

一个文法的导出词表必须是另一个文法的导入词表或?个文法必d享一个公q导入词表?

设想p.g中有一个语法分析器P:

// yields PTokenTypes.txt
class P extends Parser;
// options {exportVocab=P;} ---> default!
decl : "int" ID ;

l.g中有一个词法分析器L

class L extends Lexer;
options {
importVocab=P; // reads PTokenTypes.txt
}
ID : ('a'..'z')+ ;

即L主要是P的词表中的|但ANTLR生成的是LTokenTypes.txt和LTokenTypes?

不同文g中的文法必须׃n同样的记L(fng)型空_使用importVocab选项去预载同L(fng)词表?

如果q些文法在同一个文件中QANTLR会用同样的方法处理它。然而,你可以通过讄它们的导表到同一个文件来使这2个文法共享同一个词表。例如,如果P和L在一个文件中Q你可以q样做:

// yields PTokenTypes.txt
class P extends Parser;
// options {exportVocab=P;} ---> default!
decl : "int" ID ;
class L extends Lexer;
options {
exportVocab=P; // shares vocab P
}
ID : ('a'..'z')+ ;

如果你没有ؓL指定词表Q它?yu)会选择׃n文g中导出的W一个词表;在这里,它将׃nP的词表?

// yields PTokenTypes.txt
class P extends Parser;
decl : "int" ID ;
// shares P's vocab
class L extends Lexer;
ID : ('a'..'z')+ ;

记号cd映射文g像这P

P    // exported token vocab name
LITERAL_int="int"=4
ID=5

文法l承和词?/a>

文法l承父文法的规则Q动作和选项Q但是子文法使用什么词表和记号词表呢?ANTLR对子文法的处理就好像你复制粘贴父文法的所有非重蝲规则到子文法。因此,子文法记L(fng)集合是父文法和子文法的交集。所有的文法都导表所以子文法导出q用一个和父文法不同的词表文g。除非你使用importVocab选项重蝲Q否则子文法导入父文法的词表?

文法Ql承PQ会预先讄好P的词表,好像Q使用?font face="Courier New">importVocab=P选项。例如,下面的文法有2个记L(fng)受?

class P extends Parser;
a : A Z ;

子文法Q,最初和父文法有相同的词表,但随后会增加一些符受?

class Q extends P;
f : B ;

在上面的情况QQ定义了几个符?B使得Q的词表ؓ{A,B,C}.

一个子文法的词表一般是父文法词表的爉。注意重载规则不影响最初的词表?

如果你的子文法需要父文法未用过的新词法l构Q你或许需要子语法分析器用一个子词法分析器。用importVocab选项指定子词法分析器的词表来重蝲它初始的词表。例如,假设语法分析器P使用词法分析器PL。不用importVocab重蝲QQ的词表将使用P的词表,即PL的词表。如果你惌Q使用另一个词法分析器的记L(fng)型,比如说用QLQ那么做下面的事情:

class Q extends P;
options {
importVocab=QL;
}
f : B ;

Q的词表现在和QL的词表相同或者是QL词表的父集?

识别器生成次?/a>

如果你所有的文法在一个文件中Q你׃用担心ANTLR会最先处理哪一个文法文Ӟ不过你仍要担心ANTLR处理文g中文法的ơ序。如果你试d入一个会被另一个文法导出的词表QANTLR提C它不能dq个文g。下面的文法文g会造成ANTLR出错Q?

class P extends Parser;
options {
importVocab=L;
}
a : "int" ID;
class L extends Lexer;
ID : 'a';

ANTLR在文法文件中q没有发现文法LQ所以它?yu)提CZ能发现LTokenTypes.txt。另一斚wQ如果LTokenTypes.txt存在(比如说在文法文g中还没有P文法的时候ANTLRq行生成?QANTLRؓPdq个文gQ然后在处理L文法的时候覆盖掉它。ANTLR不知道它要处理的文法恰好在一个文件中Q所以它假设是要d从另一个文件生成的词表?

一般的Q如果你惌文法B使用文法A的记L(fng)?无论什么文法类?Q你必须首先对Aq行ANTLR。例如,一个树(wi)文法用到了分析器文法的词表,应该在ANTLR生成了分析器之后再去处理?wi)文法?

例如Q当你想让一个词法分析器和一个语法分析器׃n同一个词表空间的时候,你要做的是L它们攑ֈ同一个文件中Q设|它们的导出词表到同一个空间。如果它们在分开的文件中Q把语法分析器的导入词表选项讄法分析器的导表,除非记号都定义在语法分析器中Q这Ӟ换一下导?导出的关p让词法分析器用语法分析器的导表?

词表的一些用技?/a>

如果你的文法在不同的文g中,你仍惌它们׃n全部或部分记L(fng)_该怎么办。有2U解x案:(1) 让文法导入同L(fng)词表 (2) 让文法承同一个父文法Q该父文法含有记L(fng)间?

W一个方案在下面情况使用Q你?个词法分析器?个语法分析器Q语法分析器必须要处理从Ҏ(gu)上就不同的输入部分。ANTLR 2.6.0发行版examples/java/multiLexer中的例子属于这U情cjavadoc注释和Java代码部分的词法分析和语法分析q程都不一栗javadoc词法分析器有必要识别"*/"中止注释的词法结构,但它一般让Java语法分析器用打开/关闭的记号引用来嵌套q行javadoc语法分析器:

javadoc
: JAVADOC_OPEN
{
DemoJavaDocParser jdocparser =
new DemoJavaDocParser(getInputState());
jdocparser.content();
}
JAVADOC_CLOSE
;

问题在于Qjavadoc词法分析器定义了JAVADOC_CLOSEQ即也定义了它的记号cd。不q的是Java语法分析器的词表ZJava词法分析器而不是javadoc词法分析器?要让javadoc词法分析器和java词法分析器都可以看到JAVADOC_CLOSE (q且有同L(fng)记号cd)Q?个词法分析器都要导入含有q种记号cd定义的词表。这里有DemoJavaLexer和DemoJavaDocLexer的头部:

class DemoJavaLexer extends Lexer;
options {
importVocab = Common;
}
...
class DemoJavaDocLexer extends Lexer;
options {
importVocab = Common;
}
...

CommonTokenTypes.txt?

Common // name of the vocab
JAVADOC_CLOSE=4

׃n词表的第二种Ҏ(gu)在下面情况用,你有1个语法分析器?个不同的词法分析?比如说ؓ不同cd的C)。如果你只想语法分析器空间利用率高,语法分析器必d以访?个词法分析器的词表,L文法不用的结?大概可以用语义断a)。给出CLexerQGCCLexer和MSCLexerQCLexer作ؓ父文法定义出所有记L(fng)集合。例如,如果MSCLexer需?_int32"Q那么在CLexer中定义一个所有词法分析器可见的记L(fng)型:

tokens {
INT32;
}

在MSCLexer中,你可以给它实际意义的字符?

tokens {
INT32="_int32"
}

用这U方法,3个词法分析器׃n同一个记L(fng)_允许你用一个语法分析器识别多种C的输入?

Version: $Id: //depot/code/org.antlr/release/antlr-2.7.6/doc/vocab.html#1 $


]]>
最单的JBPM例子http://www.tkk7.com/huanzhugege/archive/2007/11/16/160997.htmlCowNew开源团?/dc:creator>CowNew开源团?/author>Fri, 16 Nov 2007 05:51:00 GMThttp://www.tkk7.com/huanzhugege/archive/2007/11/16/160997.htmlhttp://www.tkk7.com/huanzhugege/comments/160997.htmlhttp://www.tkk7.com/huanzhugege/archive/2007/11/16/160997.html#Feedback0http://www.tkk7.com/huanzhugege/comments/commentRss/160997.htmlhttp://www.tkk7.com/huanzhugege/services/trackbacks/160997.html

package com.test;

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

public class MyAction implements ActionHandler
{

 private static final long serialVersionUID = 1L;

 private String message;

 public String getMessage()
 {
  return message;
 }

 public void setMessage(String message)
 {
  this.message = message;
 }

 public void execute(ExecutionContext executionContext) throws Exception
 {
  System.out.println(message);
 }

}


定义一个流E文Ӟ

<?xml version="1.0" encoding="UTF-8"?>

<process-definition
  xmlns="urn:jbpm.org:jpdl-3.1"
  name="simple">
   <start-state name="start">
      <transition name="to_state" to="first">
         <action name="action" class="com.test.MyAction">
            <message>Going to the first state!</message>
         </action>
      </transition>
   </start-state>
   <state name="first">
      <transition name="to_end" to="end">
         <action name="action" class="com.test.MyAction">
            <message>About to finish!</message>
         </action>
      </transition>
   </state>
   <end-state name="end"></end-state>
</process-definition>

定义程驱动c:

package com.test;

import java.io.IOException;
import java.io.InputStream;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;

public class Main
{
 public static void main(String[] args) throws IOException
 {
  InputStream stream = Main.class.getResourceAsStream("processdefinition.xml");
  ProcessDefinition processDefinition = ProcessDefinition
    .parseXmlInputStream(stream);
  stream.close();
  ProcessInstance instance = new ProcessInstance(processDefinition);
  while (!instance.hasEnded())
  {
   instance.signal();
  }
 }
}


jbpm***.jar、commons-logging**.jar和dom4j.jar三个包加入classpath可以了?br /> 执行l果Q?br /> Going to the first state!
About to finish!

]]>
《自己动手写开发工兗试ȝ?sh)子书及光?http://www.tkk7.com/huanzhugege/archive/2007/11/04/158052.htmlCowNew开源团?/dc:creator>CowNew开源团?/author>Sun, 04 Nov 2007 04:34:00 GMThttp://www.tkk7.com/huanzhugege/archive/2007/11/04/158052.htmlhttp://www.tkk7.com/huanzhugege/comments/158052.htmlhttp://www.tkk7.com/huanzhugege/archive/2007/11/04/158052.html#Feedback0http://www.tkk7.com/huanzhugege/comments/commentRss/158052.htmlhttp://www.tkk7.com/huanzhugege/services/trackbacks/158052.html 本书以一个简单而实用的枚D生成器作为入门案例,通过该案例读者能学习(fn)到扩展点、SWT、JET{Eclipse插g开发的基本技能;接着对Eclipse插g开发中的基知识q行了介l,q且对属性视囄使用做了重点介绍Q最后以两个h一定复杂程度的插g(Hibernate建模工具和界面设计器)为案例介l了SWT、Draw2D、GEF、JET{技术的l合q用?

?sh)驴下蝲地址Qhttp://www.verycd.com/groups/@u2105483/204642.topic

HTTP下蝲地址Q?
http://www.cownew.com/Soft/ShowSoft.asp?SoftID=16

http://www.cownew.com/Soft/ShowSoft.asp?SoftID=10

]]>
我的Linux学习(fn)W记http://www.tkk7.com/huanzhugege/archive/2007/08/23/linux.htmlCowNew开源团?/dc:creator>CowNew开源团?/author>Thu, 23 Aug 2007 12:06:00 GMThttp://www.tkk7.com/huanzhugege/archive/2007/08/23/linux.htmlhttp://www.tkk7.com/huanzhugege/comments/138921.htmlhttp://www.tkk7.com/huanzhugege/archive/2007/08/23/linux.html#Feedback0http://www.tkk7.com/huanzhugege/comments/commentRss/138921.htmlhttp://www.tkk7.com/huanzhugege/services/trackbacks/138921.html1
top 看当前运行的q程
kill -9 pid l止某进E(?wi)?br>cd q回根目?br>pwd 昄当前目录
3 less more查看文本文g指o 在less中打入v键就会启动vi~辑当前文g
4 mkdir、rm mv 改变文g名和目录名的命o
cp 复制文g和目录命?
man 命o使用Ҏ(gu)参考工P很有?br>nano是一个小巧自由,q且友好的编辑器
5
vi有两U模式,一U是命o模式Q一U是~辑模式。进入vi以后Q默认处于命令模式?

现在我们执行vi LoveLetter。进入以后,按一下键盘上的Insert功能键或者i键可以进入编辑状态,可以插入字符Q再按一下Insert变成复盖模式Q这两种模式的区别很Ҏ(gu)体现Q大家尝试一下就可以了。上下左叛_个方向键可以Ud光标。基本的~辑命o和W(xu)indows里面没有区别。是不是很容易呢Q当你把需要的内容输入完成以后Q我们要保存Q这时候按一下ESC键从~辑模式回到命o模式Q首先输入一个冒?#8220;:”Q也是按住SHIFT键不攑ֆ按分?#8220;;”q样首先输入一?#8220;:”Q然后,输入wQ回车,可以保存我们编辑的内容到LoveLetter文g。现在我们按一下Insert可以l编辑。再按ESCQ输?#8220;:”Q再按w又可以保存。可是现在我们不需要保存,我们惌不保存就退出,怎么做呢Q当我们输入w的时候是write的意思,保存Q那么我们输入q是quit退出的意思。好Q输入qQ回车,vi提示我们刚才q行的修改还没有保存Q所以记住!一旦需要放弃我们的修改Q不能直接用q命o退出,而需要用“q!”命o。输入q!Q好了,退Z?
我们想看看我们刚才编辑的LoveLetter是不是真的保存好了,再vi LoveLetterQokQ看C吧?现在我们惌直接退出,可以只输入“:q”可以了Q不用输入那?#8220;!”因ؓ我们没有修改文g内容。如果我们修改一下这文章,我们在退出的时候可以输?#8220;ESC : wq”可以了。不需要把w和q分成两次输入?
6 linux中可以用amount命oiso文g挂接为目录:mount -t iso9660 -o loop /home/kris/somewhat.iso /mnt/cdrom
7 file 查文件的cd
8 wall write mesg
9 reset 重置l端Q当屏幕发生问题的时候用此方?br>10 env 昄环境变量
11 改变pȝ语言的方式:q行 export   LC_ALL="en_US"   LANG=en_US 可以改成英文。要想一直输出E?可以?/etc/sysconfig/i18n里修改LANG="en_US. Utf-8"
12 查看本机ipQifconfig -a
13 mount光盘QmountQdevQcdrom QmntQcdromQ然后就可以在/mntQcdrom中看到光盘内容了 。用umount /mnt/cdromo 可以卸蝲光盘。只有卸载光盘以后才能将光盘弹出?br>14 在linux的提C符下输入文件名{的时候,可以输入部分文g名然后按Tab键即可智能补全?br>15 redhat中安装rpm包的Ҏ(gu)Qrpm -i "包\?Q要升包可以rpm -U packagename。包的删除比较容易,使用Q? rpm -e packagenamep够删除自己想要删除的包,不需要知道版本和路径
16 启动卌行vsftpҎ(gu)Q运行ntsysvQ选中列表中的vsftpd卛_?br>17 查看文g内容Qcat 文g?br>18 find / -name "*network*" -print 查找根目录下所有包含network的文?br>find / -iname "*network*" -print 查找根目录下所有包含network的文Ӟ忽略大小?br>19 useradd user1 建立一个用P不过在ؓ用户讑֮密码之前q个用户是不能用的Q设定密码的命o为passwd user1
20 ls的时候文件名旁边如果?#8220;*”P表示它是可执行文Ӟ只要q行“*/文g?#8221;卛_q行?br>21 重启|络service network restart
22 字符界面q入囑Ş界面QstartxQ图形界面返回字W界面:注销卛_?br>23 安装VMWareQ然后虚拟机|络cd选NAT卛_实现L和虚拟机之间的通信Q要q程dlinuxq需要安装telnet服务Qroot默认不能通过telnetd
24 删除非空目录Qrm -rf 目录?
25 解压cpio的方法:cpio -idmv < ***.cpio
26 UE中编辑的shell脚本到unix中运行提C?#8220;h^M: is not an identifier”Q解x法:dtox a.txt >b.txt 转换为unix格式Q或者用UE中的“文g”“转换”“DOS转Unix”功能。第二种更方?br>27 find /usr -name httpd
28 解压some.tgz的方法:首先gunzip some.tgzQ生成some.tarQ然后tar -xvf some.tar解压
29 gcc加入路径的方法:
PATH=$PATH:/usr/gnu/bin/
export PATH
30 sh脚本的变量的赋值等号两边不能有I格
31 sh脚本中命令行之间不能有空行,if语句后的条g前后要有I格
32 判断当前l端cdecho $TERM
33 重新获取ip的方式:/etc/init.d/network   restart  
34 Linux中录入ESC转义W的Ҏ(gu):首先按下Ctrl+VQ然后按下ESC?br>35 以后台方式运行一个程序,也就是脚本退出、shell退出都不会DE序退?命o后加“&”
36 d自启动的脚本攑֜“/etc/profile”文g中,比如配置Java的环境变量就必须在这个文件中加入Q?br>pathmunge /usr/java/j2re1.4.2_14/bin/ after
JAVA_HOME="/usr/java/j2re1.4.2_14/"

注意JAVA_HOME中的{号两边不能有空|否则JAVA_HOME会被当成命o处理!!!!!!!!!!!!!!!!!!!1
37 如果pȝ出现q修改LANG环境变量卛_。以前批量系l就出现q此问题
39 windows下的trace对应Linux?traceroute ip地址"
40 Linux下用U盘的Ҏ(gu)Q插入U盘,在mnt下创建目录usbQ然后运?#8220;fdisk -l”Q这样会昄所有的讑֤Q因Z般的U盘都是Fat格式的,所以找到格式ؓFAT的硬盘的标识W,比如sdb1Q然后运行mount -t vfat /dev/sdb1 /mnt/usbQ这样就U盘就挂接?mnt/usb下了Q卸载的时候umount /mnt/usb

 



]]>
开源在中国的现实意?/title><link>http://www.tkk7.com/huanzhugege/archive/2007/05/20/118713.html</link><dc:creator>CowNew开源团?/dc:creator><author>CowNew开源团?/author><pubDate>Sun, 20 May 2007 10:08:00 GMT</pubDate><guid>http://www.tkk7.com/huanzhugege/archive/2007/05/20/118713.html</guid><wfw:comment>http://www.tkk7.com/huanzhugege/comments/118713.html</wfw:comment><comments>http://www.tkk7.com/huanzhugege/archive/2007/05/20/118713.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.tkk7.com/huanzhugege/comments/commentRss/118713.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huanzhugege/services/trackbacks/118713.html</trackback:ping><description><![CDATA[    王开源的事情已经q去一D|间了Q看q太多对qg事情的评论,q些评论或者是口出污言U语的谩骂或者是狂热的非理性的力挺Q在qg事的初期属于后者)。很多h对开源的评论也得我q个投n于开源一q多的新人感到过q。这件事q去好久Q我一直在思烦一个问题:开源在目前中国的意义究竟是什么,开源在中国q种大环境下I竟应该如何发展?br>    开源在国外现在是火的一塌糊涂,Linux、Eclipse、Hibernate、Spring、Python、Ruby、MySQL{等或大或小的开源品的发展大大推动了Y件开发这个行业的高速发展,apache、sourceforge{开源社Z也是百花齐放Q开源品的开发者、推动者、推q者也得到了各自想得到的回报,更不用说使用q些开源品进行开发的用户得到的开发效率的提升。反观国内开源的发展则相Ҏ(gu)后很多:q背Linux开源协议进行商业化Linux开发的厂家被开源社区骂的狗血喷头Q屈指可数的几个开源爱好者组l的开源团队在个h的意志与信念的坚守下苦苦支撑着Q很多因为种U原因中途夭折;商业公司对开源社区的几次推广行动也胎死腹中,比如CSDN的开源社区、Apusic的OperamasksQ更有甚者打着开源的旗号却从事着Ҏ(gu)与开源不搭边的事情。国内大部分人对开源更是有着很深的误解:“你凭什么叫人家开源,不就是想看看Windows的代码吗Q?#8221;?#8220;人家商业公司做出来的产品是你们几个技术疯子做出来的东西能比的吗?”?#8220;把别人写好的东西拿来抄一抄改一Ҏ(gu)的Q务就完成了,钱就到手了,开源真?#8221;?#8220;我做的项目用了很多开源的东西Q很牛吧Q?#8221;?br>    我认为开源对于整个Y件行业有如下几个作用Q用开源品搭建出的品有更好的安全性和可控性;开源的产品能得到开发社区的q泛支持Q从而得品能够成熟的更快Q用开源品搭建出的品有更好的安全性和可控性;开发、学?fn)开源品能够提升开发h员的技术水q?br>    对于W一个作用这里不做过多解释,怿大部分h都能理解?br>    开源品是在全世界所有技术牛人的手下开发出来的Qƈ且有千万双眼睛盯着它,众多的用者可以完善它Q这使得开源品的成熟速度也十分惊人,Linux、Eclipse的成熟就是最典型的证明。各U开源品层ZIP怼功能的品就有几十种甚至上百U,一个开源品如果想要在q些产品中脱颖而出Q不仅需要强大的技术做支撑Q更需要非常强的商业化推广Q否则做出来的品只能成为少数技术h员把玩的玩物。如果没有IBM对Eclipse的巨额投入,Eclipse会发展成现在的规模吗Q这些开源项目的后面通常都是有一个非常强大的开源基金会在做支撑。遗憄是,目前国内q没有一家公司能够进行对开源社区如此大的投入,因此国内大部分的开源团队都是在自己开发着自己的开源品,攑ֈ|站上供他h下蝲Q然后梦想着自己的开源品能够有一天会像Hibernate、Struts一h为风靡全球的产品Q但是如果没有强大的商业推广的话q肯定是一场白日梦?br>    鉴于此,我认为目前国内的开源品商业化的可能性是非常的Q因此开源的对于q大开发h员的意义更多的在于用和学习(fn)Q而且我们使用开源品快速的搭徏出满需求的产品Q这本n也是对开源的学习(fn)q程。这里提到的“学习(fn)”包含下面几个含义Q学?fn)开源品的使用Q学?fn)开源品的实现原理Q学?fn)模仿开源品;学习(fn)开源社区的q营?br>    Q?Q学?fn)开源品的使用Q成熟的开源品是非常优秀的,如果能够学会它们的用,q对于开源h员来说就是一U很大的收获Q因为通过使用q些产品p认识到这些品的功能、特性以及优~点?br>    Q?Q学?fn)开源品的实现原理Q开源品的代码都是开攄Q我们可以深入品的内部学习(fn)其实现原理,从而提高自w的开发水q뀂不得不承认的是国内开发h员的技术水q是非怽的,通过学习(fn)开源品的代码Q就可以提高整体的技术水qI从这个层面来讲哪怕是非开源的源代码开放品(比如Borland的VCLQ对我们也是同样有帮助的。值得高兴的是Q国内很多开发h员已l开始尝试着深入开源品的内部L寻这些品的实现原理Qƈ把它们的学习(fn)成果与更多h分n。开源对开发h员的提升也是显而易见的Q最明显的就是微软开发社Z开发h员的普遍技术水qx低于Java{开源社Z开发h员的普遍技术水q的Q注意,q里说的?#8220;普遍技术水q?#8221;Q请微YC֌中的高h不要动怒)。中国计机业的发展必须依靠核心技术,而提高技术水qx拥有核心技术的大前提!<br>    Q?Q学?fn)模仿开源品:弄懂了开源品的实现原理以后可以尝试模仿它们开发自q产品Q这?#8220;重复造轮?#8221;是没有关pȝQ模仿是学习(fn)他h技术的最佳途径。因此大家应该多多的“造轮?#8221;Q越多越好,哪怕造完扔掉也是可以的?br>    Q?Q学?fn)开源社区的q营Q国外很多开源h员都有在开源社Z开发的l验Q因此他们对于开源这U协同开发方式就有更多的l验Q因此我们可以加入他们的开发团队,可以帮他们做文、界面的本地化,更可以参与品功能的完善Q从而学?fn)他们的协作方式Q更可以和他们做朋友Q了解更?#8220;外面的世?#8221;。国内很多朋友都参与了开源品的文档中文化、品的推广{工作,q都是有p意义的。我们CowNew开源团队参与JodeEclipse、DWPL{国外项目就是基于这一点考虑的?br>     怿l过一D|间学?fn)之后,我们的开发h员将有能力开发出世界U的产品Q如果我们的民族企业能够得到长远的发展,q且在商业上帮助国开源真正走向强大,从而得中国的开源社Z能跻w?#8220;世界开源之?#8221;Q?br>    上边是我一Ҏ(gu)蠢的看法Q仅供各位看参考。希望开源能够在中国发展、壮大,希望中国早日成ؓ软g强国Q?br>    <img src ="http://www.tkk7.com/huanzhugege/aggbug/118713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huanzhugege/" target="_blank">CowNew开源团?/a> 2007-05-20 18:08 <a href="http://www.tkk7.com/huanzhugege/archive/2007/05/20/118713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysqlq问题l极解决http://www.tkk7.com/huanzhugege/archive/2007/05/19/118529.htmlCowNew开源团?/dc:creator>CowNew开源团?/author>Sat, 19 May 2007 03:59:00 GMThttp://www.tkk7.com/huanzhugege/archive/2007/05/19/118529.htmlhttp://www.tkk7.com/huanzhugege/comments/118529.htmlhttp://www.tkk7.com/huanzhugege/archive/2007/05/19/118529.html#Feedback0http://www.tkk7.com/huanzhugege/comments/commentRss/118529.htmlhttp://www.tkk7.com/huanzhugege/services/trackbacks/118529.html用gbk、gb2312 之类的时候都可能会出现问题,而utf-8作ؓ一个标准的多语a字符集则解决q的终极方案。所以推荐大家在其他遇到中文的情况下也用utf-8?

]]>
Eclipse的扩展点机制应该恪守吗?http://www.tkk7.com/huanzhugege/archive/2007/05/19/118480.htmlCowNew开源团?/dc:creator>CowNew开源团?/author>Fri, 18 May 2007 16:32:00 GMThttp://www.tkk7.com/huanzhugege/archive/2007/05/19/118480.htmlhttp://www.tkk7.com/huanzhugege/comments/118480.htmlhttp://www.tkk7.com/huanzhugege/archive/2007/05/19/118480.html#Feedback0http://www.tkk7.com/huanzhugege/comments/commentRss/118480.htmlhttp://www.tkk7.com/huanzhugege/services/trackbacks/118480.html

]]>
StringConfigure模式http://www.tkk7.com/huanzhugege/archive/2007/05/19/118478.htmlCowNew开源团?/dc:creator>CowNew开源团?/author>Fri, 18 May 2007 16:22:00 GMThttp://www.tkk7.com/huanzhugege/archive/2007/05/19/118478.htmlhttp://www.tkk7.com/huanzhugege/comments/118478.htmlhttp://www.tkk7.com/huanzhugege/archive/2007/05/19/118478.html#Feedback2http://www.tkk7.com/huanzhugege/comments/commentRss/118478.htmlhttp://www.tkk7.com/huanzhugege/services/trackbacks/118478.html   做系l设计的时候有时会到一些无法在父类Q或者接口)中抽取通用行ؓ的特性,遇到q种情况可以采用StringConfigure模式Q这个模式我取的名字Q不知道是否已经有先人做了ȝQ如果哪位朋友知道这U模式的正确名称Q希望不吝赐教?br>   以JDBC中取得数据库q接ZQ我们可以抽象出数据库的一些公p为,比如q接数据库都要求提供用户名和密码Q因此在JDBC中提供设定连接的用户名和密码的方法。但是另外的一些行为则不一定是所有数据库都具备的Q比如对于网l型数据库才需要指定网l地址Q而文件型数据库则不需要,再比如在MySQL中需要指定字W集Q而其他数据库则不一定需要。如果ؓ了照这些特性,为JDBC提供setHostIP、setDBFilePath、setCharSet{方法的话无疑会使得接口变得复杂Q会出现很多用不到的Ҏ(gu)Qƈ且这些方法也无法覆盖所有未来可能出现的情况Q比如某个数据库又增加了允许用户定制q接时的方法,那么JDBC也要Z提供相应的setTimeOutҎ(gu)。ؓ了解册个问题,JDBC提出了连接字W串的概念,q样各个数据库的JDBC驱动只要规定好连接字W串的格式即可,用户把所有的配置信息写到q接字符串中Q如果用户修改ؓ其他数据库的话只需修改q接字符串即可,不用修改其他的调用?br>   使用StringConfigure模式的好处是使得pȝ中的个性化配置在一个参C完成Q这样保证系l的不同模块的行为的一致性,~点是配|字W串的格式要由各个实现模块来规定Q各个不同实现模块的格式不一_造成了一定的学习(fn)成本Q而且无法在开发期发现配置字符串的问题?br>   q里再来讲一个StringConfigure模式的应用的例子。现在我们要开发一套对IC卡读写器的类库,应用开发h员只要调用不同的IC卡读写子cd可实现操作不同的IC卡读写器。各U不同的IC卡读写器有两个共同的抽象行ؓQ读卡和写卡Q即readCard和writeCardQ但是各个不同的d器还有自qҎ(gu),比如有的d器需要指定采用ISO格式q是IBM格式来读写磁卡,有的d器需要指定读写操作的分隔W,q些Ҏ(gu)不是各个读写器共有的,因此我们采用StringConfigure模式q行设计Q开发如下的接口Q?br>interface IICCarder
{
  public void writeCard(String data);
  public String readCard();
  public void configure(String configStr);
}

   比如需要指定读写格式的d器就可以如下实现Q?br>class SomeCarder implements IICarder
{
    private FormatEnum format;
    public void writeCard(String data)
    {
       if(format==FormatEnum.IBM)
       {
             .........
       }
       else...........
    }
    public String readCard()
    {.............
    }
    public void configure(String configStr)
    {
        if(configStr.equls("IBM"))
        {
           format=FormatEnum.IBM
        }
        else if(configStr.equls("ISO"))
        {
           format=FormatEnum.ISO
        }
    }
}

开发h员用的时候只要如下调?br>IICarder c = new SomeCarder();
c.configure("IBM");
print c.readCard();
如果采用配置文g的话更可以把配置参数写到配置文g中,q样可以避免修改代码?/p>

]]>
վ֩ģ壺 ͼƬĻ| ձĻ| ޹߶| ߹ۿ| һƵ| һëƬƵվ| ޾Ʒþþþ| avɫӰ| ޳˾þ| ׾Ʒר| ձ| һպƵ| һһһëƬëƬ| ŷպĶ| ӰԺ߲| ޼Ƶ߹ۿ| Ļۺ| ޹ƷƵ| ֻˬִַ̼| Ʒ69׽߹ۿ| һѲ| aëƬȫѲ| jizzձ| ձƵѹۿ| 99Ů߹ۿ| ޹ŮƷþþ| ձVAĻþõ| ձþһva| һëƬ߹| ˳վ߹ۿ| ɫͼŵ| ޾ƷŮƵ| ɫַ| ޸Ůһ| ij4438| 337pձŷ޴󵨾Ʒ555588| ߵӰ㶮| ޹av߲| þþƷAVþþ| ޾ƷAAƬ| ޹Ʒþ98|