??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV无码乱码国产麻豆 ,国产亚洲精品精华液,99亚洲乱人伦aⅴ精品http://blogjava.net/sean/category/18648.htmlRead me, read Sean.zh-cnFri, 20 May 2016 10:16:48 GMTFri, 20 May 2016 10:16:48 GMT60《快学Scala》勘?/title><link>http://m.tkk7.com/sean/archive/2012/11/15/391386.html</link><dc:creator>laogao</dc:creator><author>laogao</author><pubDate>Thu, 15 Nov 2012 07:56:00 GMT</pubDate><guid>http://m.tkk7.com/sean/archive/2012/11/15/391386.html</guid><description><![CDATA[W?1(l习(fn)Q:(x)<br /> 在Scala REPL中键?Q然后按Tab?<strong>应ؓ(f)</strong> 在Scala REPL中键?.Q然后按Tab?<br /> <br /> W?9(正文Q:(x)<br /> utilҎ(gu)q回一个ƈ不包含上限的区间 <strong>应ؓ(f)</strong> untilҎ(gu)q回一个ƈ不包含上限的区间<br /> <br /> W?9(代码Q:(x)<br /> 0 util s.length <strong>应ؓ(f)</strong> 0 until s.length<br /> <br /> W?1(正文Q:(x)<br /> util是RichIntcȝҎ(gu) <strong>应ؓ(f)</strong> until是RichIntcȝҎ(gu)<br /> <br /> W?4(代码Q:(x) <div>ArraryBuffer <strong>应ؓ(f)</strong> ArrayBuffer</div> <div>b.sorted(_ < _) <strong>应ؓ(f)</strong> b.sorted</div> <div>b.sorted(_ > _) <strong>应ؓ(f)</strong> b.sortWith(_ > _) </div> <div></div> <div><br /> W?4(代码Q:(x) <div>scala.collections.immutable.SortedMap <strong>应ؓ(f)</strong> scala.collection.immutable.SortedMap</div> <div><br />W?3(正文Q:(x)<br />ScalaҎ(gu)个字端都提供getter和setterҎ(gu) <strong>应ؓ(f)</strong> ScalaҎ(gu)个字D都提供getter和setterҎ(gu)<br /><br />W?07(代码Q:(x)</div> <div>val tokens = source.mkString.split("\\S+") <strong>应ؓ(f)</strong> val tokens = source.mkString.split("\\s+")</div> <div><br /> W?41(代码Q:(x)</div> <div>var count: (Int => Double) => null <strong>应ؓ(f)</strong> var count: (Int => Double) = null</div> <div><br /> // 本文仅作Z息发布窗口,如需讨论交流Q请通过邮g <a href="mailto:gaoyuxiang.scala@gmail.com">gaoyuxiang.scala@gmail.com</a> ?QQ?132569382 ?/div> </div><img src ="http://m.tkk7.com/sean/aggbug/391386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sean/" target="_blank">laogao</a> 2012-11-15 15:56 <a href="http://m.tkk7.com/sean/archive/2012/11/15/391386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Scala解Hanoi?/title><link>http://m.tkk7.com/sean/archive/2009/11/23/303374.html</link><dc:creator>laogao</dc:creator><author>laogao</author><pubDate>Mon, 23 Nov 2009 11:20:00 GMT</pubDate><guid>http://m.tkk7.com/sean/archive/2009/11/23/303374.html</guid><wfw:comment>http://m.tkk7.com/sean/comments/303374.html</wfw:comment><comments>http://m.tkk7.com/sean/archive/2009/11/23/303374.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.tkk7.com/sean/comments/commentRss/303374.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sean/services/trackbacks/303374.html</trackback:ping><description><![CDATA[<p>到处吹嘘Scala很长旉?jin),却一直没有在自己的blog上增加过M相关内容Q今天就来补一补。当?dng)Scala的基本特性就不多废话?jin),|上已经有相当多的资料,如果懒得googleQ只想看完本文,那么你只需要知道它是一门以JVM为目标运行环境的?rn)态编E语a(当然QScala官方也有.NET版,但已不是光?Q同时具备面向对象和函数式编E语a的特炏V本文将通过一个简单的CZQ展CScala的FP能力Q其中十分heavy的用C(jin)implicit隐式转换和模式匹配?/p> <p>代码是从guithub的gist上抄的,单改?jin)改Q原始代码见: <a target="_blank">http://gist.github.com/66925</a></p> <p> </p> <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">import</span><span style="color: #000000; "> scala.reflect.Manifest<br />   <br /> def simpleName(m:Manifest[_]):String </span><span style="color: #000000; ">=</span><span style="color: #000000; "> {<br />   val name </span><span style="color: #000000; ">=</span><span style="color: #000000; "> m.toString<br />   name.substring(name.lastIndexOf(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">$</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br /> }<br />   <br /> trait Num<br /> </span><span style="color: #0000FF; ">final</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Succ[Pre</span><span style="color: #000000; "><</span><span style="color: #000000; ">:Num] </span><span style="color: #0000FF; ">extends</span><span style="color: #000000; "> Num<br /> </span><span style="color: #0000FF; ">final</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> _1 </span><span style="color: #0000FF; ">extends</span><span style="color: #000000; "> Num<br /> type _2 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Succ[_1]<br /> type _3 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Succ[_2]<br /> type _4 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Succ[_3]<br />  <br /> </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Move[N</span><span style="color: #000000; "><</span><span style="color: #000000; ">:Num,A,B,C]()<br /> <br /> implicit def move1[A,B,C](implicit a:Manifest[A], b:Manifest[B]) : Move[_1,A,B,C] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> {<br />   System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Move from </span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> simpleName(a) </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; "> to </span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> simpleName(b))<br />   </span><span style="color: #0000FF; ">null</span><span style="color: #000000; "><br /> }<br />  <br /> implicit def moveN[P</span><span style="color: #000000; "><</span><span style="color: #000000; ">:Num,A,B,C](implicit m1:Move[P,A,C,B], m2:Move[_1,A,B,C], m3:Move[P,C,B,A]) : Move[Succ[P],A,B,C] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; "><br />   <br /> def run[N</span><span style="color: #000000; "><</span><span style="color: #000000; ">:Num,A,B,C](implicit m:Move[N,A,B,C]) </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; "><br />   <br /> </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Left()<br /> </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Center()<br /> </span><span style="color: #0000FF; ">case</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Right()<br />   <br /> run[_3,Left,Right,Center]<br /> </span></div> <p> </p> <p>q段代码解决的是l典的汉诺塔问题Q通过一根中柱,左׃64个大依ơ叠加的圆盘全部Ud到右柱,要求整个q程中每ơ只能移动一个圆盘,且每个圆盘只能独立占据一Ҏ(gu)子或是叠加在比自w更大的圆盘上?/p> <p>单分析一下就知道Q这是一个递归问题(FP的英雄特?Q?/p> <ul> <li>当只?个圆盘时Q不用通过中柱Q直接可以从左柱Ud到右柱;</li> <li>当有2个圆盘时Q将盘UdC柱,剩下的大盘移动到xQ再从中柱把盘Ud到右柱;</li> <li>当有3个圆盘时Q先Ud2个圆盘到中柱Q再Ud大盘到右柱,再移?个圆盘到xQ?/li> <li>...</li> </ul> <p>很容易发C个patternQ那是UdN(N>1)个圆盘,可以通过以下三个步骤Q?/p> <ol> <li>UdN-1个圆盘,从左柱到中柱Q?/li> <li>Ud剩下?个圆盘,从左柱到xQ?/li> <li>UdN-1个圆盘,从中柱到x?/li> </ol> <p>在解释代码之前,先说说Scala的implicit隐式转换Q这是一个非常powerful的ideaQ当Scala~译器发现类型不匚wQ它不会(x)直接failQ而是试从代码中指定的,在scope内的implicit转换定义Q来替换问题对象或表辑ּ以满类型要求,当然Qؓ(f)?jin)避免歧义,同一时刻Scala需要找到唯一的一个满x件的implicit定义?/p> <p>我们的代码首先定义了(jin)一个取得友好类名的Ҏ(gu)Q不LI它Q然后定义了(jin)一个正整数的序列,也不LI它?jin),你只需要当作他们是正整数就好,接触qFP的同学应该对此类定义不陌生,接下来定义了(jin)如下3个支持implicit传入参数的方法:(x)</p> <ol> <li>implicit def move1[A,B,C](implicit a:Manifest[A], b:Manifest[B]) : Move[_1,A,B,C]</li> <li>implicit def moveN[P<:Num,A,B,C]( implicit <br /> m1:Move[P,A,C,B], <br /> m2:Move[_1,A,B,C], <br /> m3:Move[P,C,B,A]<br /> ) : Move[Succ[P],A,B,C]</li> <li>def run[N<:Num,A,B,C](implicit m:Move[N,A,B,C])</li> </ol> <p>含义分别是:(x)</p> <ol> <li>当需要Move[_1,A,B,C]值时Q可以找我帮?我有个side-effectQ那是输出Ud指o(h))Q?/li> <li>当需要Move[Succ[P],A,B,C]Ӟ可以找我帮忙Q?/li> <li>q行我,我接受Move[N,A,B,C]cd的参数?/li> </ol> <p>单说明:(x)Scala用[]表示cd参数Q区别于Java?lt;>Q另外,Scala的类型声明在变量/函数定义之后。Move[_,A,B,C]的含义是通过CQ从AUd圆盘到B?/p> <p>我们来模拟运行一下,Z(jin)演示效果Q用一个中{复杂的数目Q?个圆盘,从LeftUd到Right?/p> <p>run[_3,Left,Right,Center]Q对应Move[Succ[_2],Left,Right,Center]Q于是展开成三个MoveQ?/p> <p>Move[_2,Left,Center,Right]即Move[Succ[_1],Left,Center,Right]<br /> Move[_1,Left,Right,Center]<br /> Move[_2,Center,Right,Left]即Move[Succ[_1],Center,Right,Left]<br /> </p> <p>然后l箋展开Move[_2,Left,Center,Right]和Move[_2,Center,Right,Left]Q得刎ͼ(x)</p> <p>Move[_1,Left,Right,Center]<br /> Move[_1,Left,Center,Right]<br /> Move[_1,Right,Center,Left]<br /> --------------------------<br /> Move[_1,Left,Right,Center]<br /> --------------------------<br /> Move[_1,Center,Left,Right]<br /> Move[_1,Center,Right,Left]<br /> Move[_1,Left,Right,Center]<br /> </p> <p>q个时候已l全部都匚wMove[_1,A,B,C]Q于是我们很Ҏ(gu)得到以下输出Q?/p> <p>Move from Left to Right<br /> Move from Left to Center<br /> Move from Right to Center<br /> Move from Left to Right<br /> Move from Center to Left<br /> Move from Center to Right<br /> Move from Left to Right<br /> </p> <p>希望本文能带lScala初学者一些感性认识和启发?/p> <p><br /> </p> <img src ="http://m.tkk7.com/sean/aggbug/303374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sean/" target="_blank">laogao</a> 2009-11-23 19:20 <a href="http://m.tkk7.com/sean/archive/2009/11/23/303374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[备忘] ?bat中sleep和killhttp://m.tkk7.com/sean/archive/2009/01/23/252480.htmllaogaolaogaoFri, 23 Jan 2009 11:36:00 GMThttp://m.tkk7.com/sean/archive/2009/01/23/252480.htmlhttp://m.tkk7.com/sean/comments/252480.htmlhttp://m.tkk7.com/sean/archive/2009/01/23/252480.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/252480.htmlhttp://m.tkk7.com/sean/services/trackbacks/252480.html在Unix环境下,命o(h)行或者shell中sleep和kill是常见的动作Q在Windows?bat文g中处理类似的d׃那么直接?jin),备忘如下Q?br />
[sleep]
ping 127.0.0.1 -n 需要的U数+1 -w 1000 > nul

[kill]
taskkill /f /im "q程?如notepad.exe)"
taskkill /f /fi "WINDOWTITLE eq notepad*"

其中/f表示强制Q?im表示image镜像?可执行文件名)Q?fi表示filterQ后面跟表达式,比如q里?H体标题{于notepad*"Q支持wildcast通配W?br />



laogao 2009-01-23 19:36 发表评论
]]>
easyb - Getting Startedhttp://m.tkk7.com/sean/archive/2009/01/04/249798.htmllaogaolaogaoSun, 04 Jan 2009 14:28:00 GMThttp://m.tkk7.com/sean/archive/2009/01/04/249798.htmlhttp://m.tkk7.com/sean/comments/249798.htmlhttp://m.tkk7.com/sean/archive/2009/01/04/249798.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/249798.htmlhttp://m.tkk7.com/sean/services/trackbacks/249798.html从某U意义上Ԍeasyb是Groovy版的RSpecQ是一个基?BDD: Behavior-Driven Development"思维方式的测试框架。其作者Andrew Glover是《Groovy in Action》一书的合著者之一。项目的主页在:(x)

http://easyb.org/

不多废话?jin),上代码,一个story大概长成q个样子Qؓ(f)?jin)方便大家理解,举一个无比弱智的例子Q:(x)
scenario '1+1应该{于2', {
    given 
'a和b分别{于1', {
      a 
= 1
      b 
= 1
    }
    when 
'c是a+b的和', {
      c 
= a + b
    }
    then 
'c应该{于2', {
      c.shouldBe 
2
    }
}

如何在Eclipse环境下跑q段story脚本Q请参考官Ҏ(gu)档:(x)
http://code.google.com/p/easyb/wiki/ConfiguringEclipseToRunEasyb

最后你的输出应该类|(x)
Running first easyb story (FirstEasybStory.groovy)
Scenarios run: 
1, Failures: 0, Pending: 0, Time Elapsed: 0.629 sec

1 behavior run with no failures




laogao 2009-01-04 22:28 发表评论
]]>
Python 3.0 Releasedhttp://m.tkk7.com/sean/archive/2008/12/04/244431.htmllaogaolaogaoThu, 04 Dec 2008 11:30:00 GMThttp://m.tkk7.com/sean/archive/2008/12/04/244431.htmlhttp://m.tkk7.com/sean/comments/244431.htmlhttp://m.tkk7.com/sean/archive/2008/12/04/244431.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/244431.htmlhttp://m.tkk7.com/sean/services/trackbacks/244431.html?a target="_blank" title="http://m.tkk7.com/sean/archive/2008/10/04/232389.html" href="/sean/archive/2008/10/04/232389.html">Python 2.6发布两个月后QPython 3.0正式release?jin)?br />
Download: http://www.python.org/download/releases/3.0/
What's New:http://docs.python.org/whatsnew/2.6.html#python-3-0




laogao 2008-12-04 19:30 发表评论
]]>
Python 2.6 Releasedhttp://m.tkk7.com/sean/archive/2008/10/04/232389.htmllaogaolaogaoSat, 04 Oct 2008 13:29:00 GMThttp://m.tkk7.com/sean/archive/2008/10/04/232389.htmlhttp://m.tkk7.com/sean/comments/232389.htmlhttp://m.tkk7.com/sean/archive/2008/10/04/232389.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/232389.htmlhttp://m.tkk7.com/sean/services/trackbacks/232389.html在国庆(jin)大假q几天,Python 2.6 (final)(zhn)然发布?jin),作?f)为Python 3000 (3.0)\?.x更新版,2.6的发布颇h里程式的意义?br />
Download: http://www.python.org/download/releases/2.6/
What's New: http://docs.python.org/whatsnew/2.6.html




laogao 2008-10-04 21:29 发表评论
]]>
[Tips] 使用Groovy处理邮g通知http://m.tkk7.com/sean/archive/2008/08/27/225118.htmllaogaolaogaoWed, 27 Aug 2008 10:55:00 GMThttp://m.tkk7.com/sean/archive/2008/08/27/225118.htmlhttp://m.tkk7.com/sean/comments/225118.htmlhttp://m.tkk7.com/sean/archive/2008/08/27/225118.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/225118.htmlhttp://m.tkk7.com/sean/services/trackbacks/225118.html通过Groovy实现邮g通知Q其实是转发到ANTQ十分容易,先上代码Q?br />
 1 ant = new AntBuilder()
 2 
 3 def mail(subject, body, attachment = [dir:".",files:[]]) {
 4     ant.mail(mailhost:"mail.com", mailport:"1025", user:"mailer", password:"123", subject:"${subject}") {
 5         from(address:"nobody@mail.com")
 6         to(address:"nobody@mail.com")
 7         message("${body}")
 8         attachments() {
 9             if (attachment.files) {
10                 fileset(dir:"${attachment.dir}") {
11                     attachment.files.each {
12                         include(name:it)
13                     }
14                 }
15             }
16         }
17     }
18 }
19 
20 attachment = [dir:"/tmp", files:["some.properties","some.sql"]]
21 mail("Test mail message at ${new Date()}""This is a test message.", attachment)
22 

q个单的例子很好的展CZ(jin)如下GroovyҎ(gu):(x)
1- Groovy脚本可以不需要定义Q何classQ方法定义和实际调用也可以؜在一P十分手?br />2- 定义变量不需要指定类型,只要赋值即可,不过q行期依然是强类型?br />3- Ҏ(gu)参数可以有默认倹{?br />4- List和Map的构建直接在语义层面提供支持Q如[a:1,b:2]和[1,2]?br />5- GString使得我们可以方便的在String中引用变量甚x表达式,?${a.b.c}"?${new Date()}"?br />6- 逻辑判断在true/false基础上有所扩展Q[]Q?个元素的ListQ和null均做false处理?br />7- Closure支持Q方便我们在外围代码处“当场”指定处理逻辑Q省M(jin)大多数在Java中需要匿名内部类来处理的ȝ(ch)Q如attachment.files.each { .... }Q只有一个传入参数时Q可直接用it指代?br />8- 与ANT的无~集成,以及(qing)对Builder模式的良好支持,使得我们可以写出上述初看上去有些不可思议的代码?br />
P.S. 虽然Groovy自己已经bundle?jin)ANTQ可以直接用其中的l大多数功能Q不qؓ(f)?jin)调用ANT的mail taskQ还需要将ANT发行版中带有的ant-javamail.jar以及(qing)JavaMail API对应的jar包(可以从Sun|站下蝲Q加到classpath。如果你的JDK版本低于6.0Q还需要activation.jar?br />



laogao 2008-08-27 18:55 发表评论
]]>
[Tips] "When ANT is not enough"升?- Groovy to the rescue!http://m.tkk7.com/sean/archive/2008/08/25/224246.htmllaogaolaogaoMon, 25 Aug 2008 11:38:00 GMThttp://m.tkk7.com/sean/archive/2008/08/25/224246.htmlhttp://m.tkk7.com/sean/comments/224246.htmlhttp://m.tkk7.com/sean/archive/2008/08/25/224246.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/224246.htmlhttp://m.tkk7.com/sean/services/trackbacks/224246.html 前一随W?/a>提到目前计划pȝ学习(fn)Python和GroovyQ有什么比实际使用更好的学?fn)途径呢?1q多以前Q我曄?a target="_blank" title="http://m.tkk7.com/sean/archive/2007/06/18/124859.html" href="/sean/archive/2007/06/18/124859.html">另一随W?/a>提到Q当ANT不够用时Q可以用JRuby+AntwrapQ这是一个可行的Ҏ(gu)Qƈ且经q了(jin)长期实战的考验。不qGroovy可以做的更好Q感兴趣的朋友可以和Antwrap版对照一下)(j)Q?br />
 1 #!/usr/bin/env groovy
 2 
 3 ant = new AntBuilder()
 4 root = ":pserver:cvsuser:password@10.10.10.1/cvsrepo/SampleProduct"
 5 
 6 def checkout() {
 7     ant.cvs(cvsroot:root,command:"checkout -A","package":".",dest:"cvsoriginal",compressionlevel:"9")
 8 }
 9 
10 def update() {
11     ant.cvs(cvsroot:root,command:"update -A -d","package":".",dest:"cvsoriginal",compressionlevel:"9")
12 }
13 
14 def compile(project) {
15     ant.javac(srcdir:"cvsoriginal/$project/src",destdir:"cvsoriginal/$project",target:"1.5",encoding:"GBK")
16     ant.copy(todir:"cvsoriginal/$project") {
17         fileset(dir:"cvsoriginal/$project/src") {
18             exclude(name:"**/*.java")
19         }
20     }
21     ant.jar(destfile:"build/$project.jar",basedir:"cvsoriginal/$project",manifest:"MANIFEST.MF") {
22         exclude(name:"src/**")
23     }
24 }
25 
26 // to actually call your target
27 checkout root
28 

代码更紧凑,与Java的集成更无缝。只需要简单的培训Q有Java基础的朋友就能上手,不必再额外学?fn)和习(fn)惯Ruby的语法,不用gem installQ也不用去monkey-patch个别文g来集成和打包Ant、Antwrap和JRubyQ只需要一个groovy-all-x.x.x.jar加上自己的脚本即可轻松搞定?br />
[2008-08-26 19:25:00 更新] l过实际环境试Q原来JRuby(1.1)+Antwrap需?4分钟完成的构建,改用Groovy(1.5.6)后,仅需?6分钟Q对于需要经常处理构建的目和品来_(d)q?分钟q是相当可观的?br />



laogao 2008-08-25 19:38 发表评论
]]>
08q秋季学?fn)计?/title><link>http://m.tkk7.com/sean/archive/2008/08/20/223139.html</link><dc:creator>laogao</dc:creator><author>laogao</author><pubDate>Tue, 19 Aug 2008 16:33:00 GMT</pubDate><guid>http://m.tkk7.com/sean/archive/2008/08/20/223139.html</guid><wfw:comment>http://m.tkk7.com/sean/comments/223139.html</wfw:comment><comments>http://m.tkk7.com/sean/archive/2008/08/20/223139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/sean/comments/commentRss/223139.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sean/services/trackbacks/223139.html</trackback:ping><description><![CDATA[ <br />从开始专?j)学习(fn)Java到现在,已经7q了(jin)Q非常幸q的Q在q?q中Q除?q的“半工半诠Z和1q的.NET目Q篏U有5q都是从事的JavaZ的应用开发,应该_(d)Java伴随我走q了(jin)从入行到站稳脚跟最关键的几q。从某种意义上讲Q我应该感谢Java?br /><br />然而,随着旉的推U,接触到的不同的东西越来越多,自己对不同问题的看法和解决问题的思\来成熟,Java虽然是全能型的语aQ也变得来无法满x常工作和׃的需要,在一些特定的场合Q也发别扭Q有时我甚至?x)怀念学生时代的Pascal/Delphi和后来的C/C++。回q头ȝ自己Q从刚入行时的Java fanboiQ到现在q样一个pragmatist和purist的结合体Q是多么有趣的{变?br /><br />在过ȝ2q多Q除?jin)Java?NETQ陆陆箋l接触到q有q简单用经历的~程语言Q有bash、PL/SQL、JavaScript、PHP、Perl、Ruby/JRuby、Scala、Python/Jython、Groovy{等Q不q都没有pȝ的学?fn)过Q基本就是拿来主义,什么好用用什么,解决手里的问题ؓ(f)丅R?br /><br />也许是工作性质的原因,日常要处理的非技术性Q务越来越多,留给具体~程的时间现在一天比一天少Q编E带来的乐趣和解x术问题带来的快感Q就昑־十分珍贵。所以我下定军_(j)一定要pȝ的学?~2U和Java/.NET不同的编E语a。一开始这个选择q不Ҏ(gu)Q我曄q?a target="_blank" title="http://twitter.com/laogao/statuses/853718837" >半调侃式的和一个朋友讲Q“Python, Ruby, Scala, Groovy, 一个都不能?/a>Q经q一D|间的权衡之后Q还是比较自然的作出?jin)最后的选择QPython和Groovy?br /><br />Pythonq个选择其实q不难,留意Pythonq门语言Q其实说h也有差不?q了(jin)Q它完全W合“和Java/.NET不同的编E语a”这个条Ӟ而且应用面很q,也十分成熟,功能也非常强大,加上大量现成的类库,能够胜Q很多不同cd的编EQ务。基本上q是一个不用Q何思想斗争的选择?br /><br />Groovyq个选择相对没有那么直接Q至在我真正用Groovy上手做一些东西之前,对它q没有特别的感觉Q甚臌疑它存在的h(hun)|因ؓ(f)有Jython和JRuby的选择Qؓ(f)什么一定要Groovy呢?到最q开始接触GroovyQ才逐渐?jin)解到它的出w(Groovy的作者受到Python的启发,不过后来Groovy发展的越来越接近RubyQ,和它在“兼容”Java代码的前提下为Java语言带来的巨大的表达力提升。对于有Java基础的h而言QGroovy十分Ҏ(gu)上手Q而且可以帮助我们化很多繁杂的dQ比如自动构建和自动化测试,而这正是我目前需要处理的?br /><br />最后简单说说其他几个落选的原因Q除?jin)时间有限之外?j)Q?br />bash - 目前掌握的基本够用,发现不够Ӟ完全可以用Python代替?br />PL/SQL - 基本很少使用?jin),偶尔需要维护,今后深入用的Z(x)也不多?br />JavaScript - 对“网”版的编E语a可能有天生的偏见Q尤其是作ؓ(f)Java fanboiQ当然对它“盗用”Javaq个名字是有意见的?br />PHP - 用的Z(x)很少Q而且q于quick&dirtyQ不是我喜欢的风根{?br />Perl - 虽然功能强大Q但是感觉语法有些terseQ不是很适应Q能处理的Q务,基本上Python也可以?br />Ruby - 语法和设计理念还是有一些认同,但是对Unicode的支持和部v环境的支持都q不是很让h信服Q另外,拿孟岩的话说QRuby是一门魔q语aQ我不喜Ƣ过于魔qȝ东西Q而更?fn)惯具体直接的代码?br />Scala - 也是一门和Javaq_关系密切的语aQ不q有些“学院派”,函数式编E固然是亮点Q但短期内看不到太多的学?fn)h(hun)倹{?br /><br />所以,lg所qͼ最后再点一下题Q?8q秋季的学习(fn)计划是:(x)pȝ学习(fn)Python和Groovy?br /><br /><br /><img src ="http://m.tkk7.com/sean/aggbug/223139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sean/" target="_blank">laogao</a> 2008-08-20 00:33 <a href="http://m.tkk7.com/sean/archive/2008/08/20/223139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Djangol于?.0?/title><link>http://m.tkk7.com/sean/archive/2008/06/17/208682.html</link><dc:creator>laogao</dc:creator><author>laogao</author><pubDate>Tue, 17 Jun 2008 10:14:00 GMT</pubDate><guid>http://m.tkk7.com/sean/archive/2008/06/17/208682.html</guid><wfw:comment>http://m.tkk7.com/sean/comments/208682.html</wfw:comment><comments>http://m.tkk7.com/sean/archive/2008/06/17/208682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/sean/comments/commentRss/208682.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sean/services/trackbacks/208682.html</trackback:ping><description><![CDATA[ <br />或许多少和Python/Djangoq个C֌的h们比较内敛、慢条斯理、喜Ƣ埋头做事有养IDjango一直以来版本号更新都很保守Q到现在q是0.96。什么时候才?.0q个问题被h提v无数ơ,q让很多对它有兴的朋友处于长期的观望之中。眼睁睁看着隔壁Rails如火如荼的都出到?.1.0QDjangol于要有动作?jin)?x)<br /><br /><a target="_blank" title="http://code.djangoproject.com/wiki/VersionOneRoadmap" >http://code.djangoproject.com/wiki/VersionOneRoadmap</a><br /><br />Ҏ(gu)q䆾U\图,今年7月,Django?x)推?.0的第一个alpha版本Q接下来?月会(x)有两ơbeta和一ơrcQ如果一切顺利的话,让许多h望眼Ʋ穿的Django 1.0有望于今年9月正式同大家见面?br /><br /><br /><img src ="http://m.tkk7.com/sean/aggbug/208682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sean/" target="_blank">laogao</a> 2008-06-17 18:14 <a href="http://m.tkk7.com/sean/archive/2008/06/17/208682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[新闻] JRuby 1.1.2 发布http://m.tkk7.com/sean/archive/2008/05/28/203452.htmllaogaolaogaoWed, 28 May 2008 04:08:00 GMThttp://m.tkk7.com/sean/archive/2008/05/28/203452.htmlhttp://m.tkk7.com/sean/comments/203452.htmlhttp://m.tkk7.com/sean/archive/2008/05/28/203452.html#Feedback1http://m.tkk7.com/sean/comments/commentRss/203452.htmlhttp://m.tkk7.com/sean/services/trackbacks/203452.htmlJVM下的Ruby语言实现JRuby发布1.1版的W二个升U版1.1.2Q这个版本最主要x的仍然是性能Q值得一提的包括Q?br /> 1- 启动旉大大~短?br /> 2- YAML标记解析速度提高100x以上?br /> 3- Ҏ(gu)调用在性能、线E和栈深度等斚w的增强?br />4- 其他bug?br />
主页: http://jruby.codehaus.org/
下蝲: http://dist.codehaus.org/jruby/




laogao 2008-05-28 12:08 发表评论
]]>
[新闻] JRuby 1.1发布http://m.tkk7.com/sean/archive/2008/04/05/190985.htmllaogaolaogaoSat, 05 Apr 2008 15:01:00 GMThttp://m.tkk7.com/sean/archive/2008/04/05/190985.htmlhttp://m.tkk7.com/sean/comments/190985.htmlhttp://m.tkk7.com/sean/archive/2008/04/05/190985.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/190985.htmlhttp://m.tkk7.com/sean/services/trackbacks/190985.htmlJVM下的Ruby语言实现JRuby正式发布1.1版,q个版本最主要x的是性能Q除此之外,值得一提的包括Q?br />1- 支持Ruby代码~译成Java Bytecode?br />2- Onigurumaq个Ruby 1.9标配的正则库UL到Java?br />3- 重构q的IO实现?br />4- 更低的内存消耗?br />5- 修复大量其他兼容性问题?br />
主页: http://jruby.codehaus.org/
下蝲: http://dist.codehaus.org/jruby/




laogao 2008-04-05 23:01 发表评论
]]>
[Tips] ULOracle数据库到PostgreSQL的要?/title><link>http://m.tkk7.com/sean/archive/2008/03/11/185510.html</link><dc:creator>laogao</dc:creator><author>laogao</author><pubDate>Tue, 11 Mar 2008 15:04:00 GMT</pubDate><guid>http://m.tkk7.com/sean/archive/2008/03/11/185510.html</guid><wfw:comment>http://m.tkk7.com/sean/comments/185510.html</wfw:comment><comments>http://m.tkk7.com/sean/archive/2008/03/11/185510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/sean/comments/commentRss/185510.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sean/services/trackbacks/185510.html</trackback:ping><description><![CDATA[ <br />最q尝试把一个Oracle数据库,q同构徏在这个数据库上的Java应用UL到PostgreSQL环境。在ULq程中,ȝ?jin)一些要点,一斚w作ؓ(f)W记备忘Q一斚w也给有类gQ务需要处理而又无从下手的朋友作为参考?br /><br />1- 首先是准备PostgreSQL环境。有条g的话Q最好是找一台空闲的PCZ为测试服务器Q安装Linux或BSDQ然后从源码~译最新的PostgreSQL 8.3.0。编译时Q通过configure指定--with-perl?-with-python以支持PL/Perl和PL/Python。因为绝大多数Linux发行版都已自带Perl和PythonQ不必额外安装?br /><br />2- 如果是Windows环境Q又需要Perl和PythonQ则必须额外安装QPython的话Q可以方便的扑ֈ2.5 for Windows的安装包QPerl的话Q推荐ActivePerlQ相寚w?ch)一点,Z(jin)后面用到的一些便利的功能利加蝲QPerl版本量?.8.8?br /><br />3- 创徏数据库和用户。通过initdb初始化数据目录,配置postgresql.conf指定LIP、端口等{信息,配置pg_hba.conf指定讉K权限Q通过pg_ctl -D <数据目录> -l <日志文g> start启动postmasterQ然后createdb、createuser创徏数据库和用户。数据库建好之后Q就可以createlang -d <数据库名> [plperl|plperlu|plpython|plpythonu]开启PL/Perl和PL/Python。具体命令行参数可通过各命令加--help查看?br /><br />4- 安装PostgreSQL客户端pgAdminIIIQ最新版?.8.2Q有条g的话Q也可以下蝲源码自己~译?br /><br />5- 安装Oracle客户端,需要在PostgreSQL同一台机器,以便Perl用于q接数据库的DBI和Oracle驱动DBD::Oracle模块利安装。如果是Windows上的ActivePerlQ则可以通过ppm install DBD-OracleQ如果是Linux/BSDQ则可以通过CPAN来安装,如perl -MCPAN -e shellq入CPAN ShellQ通过install <模块?gt;或force install <模块?gt;安装DBI和DBD::Oracle?br /><br />6- 数据库的ULQ可以选择ora2pg来帮忙,目前的版本是4.7。ora2pg是一个用于读取Oracle数据库schema、数据,q生成PostgreSQL脚本或直接导入PostgreSQL数据库的Perl工具。用法很单,是通过.conf文g指定数据库连接信息包括NLS_LANG、需要导出导入的schema、table、view、data{等Q然后执行一个pl脚本。这是目前相Ҏ(gu)较成熟的一个方案,但是遇到schema复杂、约束较强的数据库,需要手工处理的地方q是不少。徏议不要直接写入PostgreSQLQ而是生成SQL脚本Q验证无误后再执行。ora2pg默认?x)把Oracle中名U的大写转换成小写,因ؓ(f)PostgreSQL在解析SQLӞ除非""括v来,默认都是转成写。schema、table、view、sequence、data{等Q基本用ora2pgQ加上一些手工调整即可搞定。至于function、stored procedure{,q是手工UdQ偷不得懒。除?jin)ora2pgQ其实也可以配置DBI-LinkQ将Oracle数据库挂到PostgreSQL数据库作Zl独立的"schema"Q然后用create table xxx as select ... from ...q样的语法来倒表和数据。PostgreSQL的contrib包也附带有一个dblinkQ不q是q接其他PostgreSQL数据库的Q如果需要连接非PostgreSQLQ? q是考虑DBI-LinkQQ何可以通过Perl的DBI接口讉K的数据库Q都能linkqPostgreSQL?br /><br />7- 接下来就是Java应用本n?jin),我这ơ移的这个应用是Spring+iBatis架构的,很多SQL语句都是明文Q好在DAO层的基础部分(CRUD)的SQLMap是工兯动生成,且都是符合ANSI SQL92标准的,不需要修改即可用。其余的高查询SQLQ需要调整的地方不少Q一些常见的修改列D如下Q?br /><br />i. SELECT出来的columnQ包括子查询Q,如果有别名,必须加ASQ比?select null as some_column from some_table;<br />ii. PostgreSQL没有dual表,cMselect 0 from dual的语句,写成select 0卛_;<br />iii. DECODE函数需要重构成(case when some_column = 'some_value' then 'some_other_value' when ... then ... else 'some_default_value' end ) as some_column;<br />iv. NVL()函数QPostgreSQL中相对应的是coalesce()Q其实几乎所有主DBMS都支持coalesceQ包括OracleQ这才是标准写法;<br />v. 比较日期Q在PostgreSQL中,使用date_trunc('day', SOME_DATE) = date_trunc('day', #enteredDate#)q样的写法,其中'day'位置可选字D包括有year、month、week、hour、minute、second{等;<br />vi. SYSDATEQ对应到PostgreSQL是current_timestampQ可以根据需要用current_date;<br />vii. ROWNUMQ通常我们用ROWNUM都是Z(jin)限制查询出来的记录数QPostgreSQL没有q个关键字,需要改成在SELECT语句最后添?LIMIT语句Q如LIMIT 100;<br />viii. (+)q样的外q接写法需要调整ؓ(f)SQL标准?table1 [LEFT|RIGHT|FULL] OUTER JOIN table2 ON (...);<br />ix. CONNECT BY ... START WITH ... 递归查询可以参?http: //www.postgresql.org/docs/8.3/static/tablefunc.html 的connectby()函数.<br /><br />最后再多提一点,PostgreSQL自带的过E语a是PL/pgSQLQ在PostgreSQL上写functionQ除?jin)用plpqsqlQ还支持sql、plperl(u)、plpython(u){等。如果你对SQL天生q敏Q看cMPL/pgSQL的代码都很吃力,别说是写?jin),你完全可以用你喜Ƣ的语言来表辑և数和存储q程的逻辑。有?jin)PL/PythonQ你q怕什么呢Q你几乎能做M事?br /><br />[更新 20080313] 把JDBC驱动的部分漏掉了(jin)Q移植Java应用Ӟ除了(jin)改SQLQ还需要拿PostgreSQL的JDBC驱动攑ֈclasspath下面Q如WEB-INF/libQ然后修Ҏ(gu)据库q接URLQ改成jdbc:postgresql://<ip>:<port>/<dbname>卛_?br /><br />[更新 20080323] ULschema和数据时Q比ora2pg更方便的一U方式是利用EnterpriseDB的Migration ToolQ将Oracle的JDBC驱动ojdbc14.jar拯到EnterpriseDB安装路径下的jre/lib/ext下后Q启动Developer Studio卛_建立Oracleq接Q选中schema后,可以通过右键Online Migrationschema、数据、函数包{等一ơ性通通导入EnterpriseDB。如果要l箋往"U?PostgreSQLU,从EDB做backupQ然后到PostgreSQL下做restoreQ这样会(x)丢掉函数包,因ؓ(f)毕竟EDB在PostgreSQL基础上做?jin)相当改造以和Oracle兼容Q不q函数包之类q是手工UL较稳妥?br /><br /><br /><img src ="http://m.tkk7.com/sean/aggbug/185510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sean/" target="_blank">laogao</a> 2008-03-11 23:04 <a href="http://m.tkk7.com/sean/archive/2008/03/11/185510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[新闻] Sun Hires Python Expertshttp://m.tkk7.com/sean/archive/2008/03/05/183819.htmllaogaolaogaoTue, 04 Mar 2008 16:07:00 GMThttp://m.tkk7.com/sean/archive/2008/03/05/183819.htmlhttp://m.tkk7.com/sean/comments/183819.htmlhttp://m.tkk7.com/sean/archive/2008/03/05/183819.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/183819.htmlhttp://m.tkk7.com/sean/services/trackbacks/183819.html在JRuby得到Sun的认可ƈ成功发布1.0Q已l向1.1q进之时Q比Ruby应用更广、更早出现JVMq行版本的Python也终于得C(jin)Sun的重视:(x)

http://www.eweek.com/c/a/Application-Development/Sun-Hires-Python-Experts/

管Sun官方的说法是他们?x)更多的应用和扶持native版的PythonQ相信一直饱受冷落的JythonQ也多少?x)从中受益吧?br />



laogao 2008-03-05 00:07 发表评论
]]>
[新闻] Grails正式发布1.0?/title><link>http://m.tkk7.com/sean/archive/2008/02/07/179425.html</link><dc:creator>laogao</dc:creator><author>laogao</author><pubDate>Thu, 07 Feb 2008 02:47:00 GMT</pubDate><guid>http://m.tkk7.com/sean/archive/2008/02/07/179425.html</guid><wfw:comment>http://m.tkk7.com/sean/comments/179425.html</wfw:comment><comments>http://m.tkk7.com/sean/archive/2008/02/07/179425.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.tkk7.com/sean/comments/commentRss/179425.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/sean/services/trackbacks/179425.html</trackback:ping><description><![CDATA[ <br />春节期间真是好事不断啊,l?a target="_blank" title="http://m.tkk7.com/sean/archive/2008/02/07/179424.html" href="/sean/archive/2008/02/07/179424.html">PostgreSQL 8.3正式release</a>后,Grails也如U发?.0版。作为受到Ruby on Rails启发开动的"Groovy版Rails"目Q它在设计哲学上和RailsQ包括JRuby版的RailsQ有着很大的不同,Rails是从头开始用Ruby完整实现从表现层到ORM所有功能,而Grails则是利用JavaC֌现有的成熟开源框Ӟ如Spring、Hibernate{,在此基础上整合出一套完整的Web应用框架Q有点类似Pylons和Django的区别?br /><br />?a target="_blank" title="http://m.tkk7.com/sean/archive/2008/01/27/178036.html" href="/sean/archive/2008/01/27/178036.html">之前一随W?/a>也提到过Q和其它在JVM中运行的动态语a如Jython、JRuby不同的是QGroovy对于有Java基础的h们来_(d)学习(fn)曲线几乎是^的,上手很快Q如果你同时也熟(zhn)Spring和Hibernate{,那么Grails更是不二之选?br /><br />官网: <a target="_blank" title="http://grails.codehaus.org/" >http://grails.codehaus.org/</a><br />Release Notes: <a target="_blank" title="http://grails.org/1.0+Release+Notes" >http://grails.org/1.0+Release+Notes</a><br />下蝲: <a target="_blank" title="http://grails.codehaus.org/Download" >http://grails.codehaus.org/Download</a><br /><br /><br /><img src ="http://m.tkk7.com/sean/aggbug/179425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/sean/" target="_blank">laogao</a> 2008-02-07 10:47 <a href="http://m.tkk7.com/sean/archive/2008/02/07/179425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[链接] ?x)JavaQ学GroovyQ这里有很好的介绍/演示 http://m.tkk7.com/sean/archive/2008/01/27/178036.htmllaogaolaogaoSun, 27 Jan 2008 09:14:00 GMThttp://m.tkk7.com/sean/archive/2008/01/27/178036.htmlhttp://m.tkk7.com/sean/comments/178036.htmlhttp://m.tkk7.com/sean/archive/2008/01/27/178036.html#Feedback2http://m.tkk7.com/sean/comments/commentRss/178036.htmlhttp://m.tkk7.com/sean/services/trackbacks/178036.html如果你有一定的Java基础Q想快速的尝动态语a的味道,Groovy是个自然的过渡选择。今天无意中看到一介lGroovy的文章,很短Q也很有,从一个典型的JavaE序开始,一步一?Groovy?Q最l改造成一个完整的GroovyE序Q?br />
http://java.dzone.com/news/java-groovy-few-easy-steps


如果你对当下动态语a的现状有所?jin)解Q那你多半已l知道能在JVM中运行的动态语aQ远不止Groovy一U,那么什么理׃(x)让你选择Groovy而非Jython、JRuby或者其他类似的语言呢?W者认Z要还是编码习(fn)惯和风格QGroovy是这些语a中最接近Java的。Jython和JRuby都是从其他成功的动态语a"UL"q来Q带有明昄Python、Ruby语法特征和习(fn)惯。选择Jython或者JRuby的朋友,我想大都是原本就有Python或者Ruby的基Q舍不得Python和Ruby的一些很方便的语法和~码风格/?fn)?哲学Q或者干脆就是ؓ(f)?jin)将Python和Ruby世界的一些框架引入到Java中,或者说是让Python/Ruby应用能够更好的利用Javaq_已有的资源。如果你在动态语a上没有这斚w的需求,只是Z(jin)让你的Java应用更动态,选择Jython或者JRuby只能是凭I增加学?fn)难度。要知道QPython和Ruby都是很有特点、很有个性的语言Q其实Java又何不是)(j)Q要从Java的思维和哲学,转向Python/Ruby的思维和哲学,q不是那么容易做到和做好的?br />



laogao 2008-01-27 17:14 发表评论
]]>
Django: Up and Runninghttp://m.tkk7.com/sean/archive/2007/11/28/163589.htmllaogaolaogaoTue, 27 Nov 2007 16:57:00 GMThttp://m.tkk7.com/sean/archive/2007/11/28/163589.htmlhttp://m.tkk7.com/sean/comments/163589.htmlhttp://m.tkk7.com/sean/archive/2007/11/28/163589.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/163589.htmlhttp://m.tkk7.com/sean/services/trackbacks/163589.html到现在Q已l有近半年没有写过技术文章了(jin)Q手痒痒Q于是拿Django来说事,希望最l的产出能够做成一个简短易懂的Django快速v步,让初ơ接触Django的朋友能够在最短的旉内了(jin)解Django的基本概念和l构?br />
Django是用Python实现的一个基于MVC的web应用框架Q类似Ruby世界的Ruby on Rails。如果你是通过Google搜到q篇文章Q那么说明你已经对Django有所耳闻Qƈ且愿意了(jin)解更多Django相关的信息。我在这里就不多? 话Ruby vs Python或者Rails vs DjangoQ直奔主题?br />
在写q篇文章Ӟ最新的CPython版本?.5.1QDjango版本?.96Q如无特别说明,本文所有介l和CZ均以此环境ؓ(f)准?br />
0- 在开始之前,首先当然是安装一个基本能用的开发环境?br />
如果你的操作pȝ是Linux或者其他类UnixpȝQ很可能已经预装?jin)PythonQ可以在命o(h)行执行python -V查看Python版本。如果你是Windows操作pȝQ或者想试不同版本的PythonQ那么可以到http://www.python.org/下蝲相应的安装包q行安装?br />
有了(jin)Python以后Q到http://www.djangoproject.com/下蝲DjangoQ解压以后,cd到解压出来的目录Q执行python setup.py install?br />
Z(jin)能够做出一个基本的多层web应用Q还需要安装一个数据库Q如果没有特别喜好和偏向Q推荐PostgreSQLQ可以在http://www.postgresql.org/扑ֈ合适的版本下蝲和安装?br />
我们q缺一个数据库驱动Q在http://www.initd.org/pub/software/psycopg/可以扑ֈ用于q接PostgreSQL的psycopg2Q安装方法类似Django?br />
1- django-admin.py startproject

所有环境OK以后Q我们开始动手把玩DjangoQ首先找一个干净的目录,执行
$ python django-admin.py startproject hello

上面q行命o(h)?x)新Z个hello子目录,包含以下文gQ?br /> __init.py__: 表示该目录存放PythonE序
manage.py: 提供Django目相关的管理操?br /> settings.py: 相当于该Django目的全局讄
urls.py: 用于配置URL映射Q基本上是通过正则表达式指定不同URLq应的viewҎ(gu)相应

2- manage.py runserver

x我们已经搭v?jin)一个基本的Django目框架Q执?br /> $ python manage.py runserver
命o(h)行会(x)提示?000端口q行一个开发用的web serverQ{到浏览器?a href="http://localhost:8000/" target="_blank">http://localhost:8000/卛_看到It worked!的提CZ息。你也可以指定端口号Q方法是python manage.py runserver XXXX?br />
3- settings.py

接下来我们做一个完整的从model/数据库到view/template的例子。修改settings.py:
DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_NAME 
= 'hello' # Your db name
DATABASE_USER = 'postgres' # Your db user
DATABASE_PASSWORD = '********' # Your db password
DATABASE_HOST = ''
DATABASE_PORT 
= ''

INSTALLED_APPS 
= (
    
'django.contrib.auth',
    
'django.contrib.contenttypes',
    
'django.contrib.sessions',
    
'django.contrib.sites',
    
'hello'# Our new project

4- models.py

新徏models.py:
from datetime import datetime
from django.db import models

class Book(models.Model):
    isbn        
= models.SlugField(maxlength=20)
    title       
= models.CharField(maxlength=200)
    author      
= models.CharField(maxlength=200)
    description 
= models.TextField(blank=True,null=True)
    published   
= models.DateTimeField(default=datetime.now)
q里我们从django.db.models.Modell承我们的modelcBookQ同时还用到?jin)models中现成的字段c,? SlugField、CharField、TextField、DateTimeField{。大家比较陌生的恐怕是SlugFieldQ这个基本上cM CharFieldQ不q增加了(jin)其内定w要符合URL要求的限制条件?br />
执行下面的命令测试数据库脚本的生?
$ python manage.py sql hello
应该看到如下输出l果:
BEGIN;
CREATE TABLE "hello_book" (
"id" serial NOT NULL PRIMARY KEY,
"isbn" varchar(20) NOT NULL,
"title" varchar(200) NOT NULL,
"author" varchar(200) NOT NULL,
"description" text NULL,
"published" timestamp with time zone NOT NULL
);
COMMIT;

认无误后可以通过下面的命令提交到数据?
$ python manage.py syncdb
光?x)要求我们创Z个管理员账号Q如果暂时不打算做admin面Q可以蟩q?br />
5- views.py

model有了(jin)之后Q接下来我们可以开始画视图?jin)。由于篇q和旉有限Q我仅简单介l一下Django的templateQ然后实C个最基本的图书清单页面?br />
首先定义图书清单的URLQ在urls.py?
from django.conf.urls.defaults import *

urlpatterns 
= patterns('hello.views',
    (r
'^hello/books/$''book_list'),
)
含义为hello/books/q个URI资源对应的相应viewҎ(gu)为hello.views.book_list?br />
新徏templates目录Q然后新建books.html:
<html  xmlns="http://www.w3.org/1999/xhtml" lang="zh-cn" xml:lang="zh-cn">
<head>
<title>{{ title|escape }}</title>
</head>
<body>
<h2>{{ title }}</h2>
<table border="1">
  
<tr><th>ISBN</th><th>书名</th><th>作?/span></th><th>出版日期</th></tr>
  {% for book in books %}
  
<tr>
    
<td>{{ book.isbn }}</td>
    
<td>{{ book.title }}</td>
    
<td>{{ book.author }}</td>
    
<td>{{ book.published }}</td>
  
</tr>
  {% endfor %}
</table>
</body>
</html>
Django模板的语法是{{}}表示引用Q{%%}表示代码Q用v来也很直观,甚至支持UNIX风格的filterQ如q里的{{ title|escape }}?br />
新徏views.py:
from hello.models import *
from django.shortcuts import render_to_response

def book_list(request):
    title 
= 'Book List'
    books 
= Book.objects.all()
    
return render_to_response('books.html', {'title' : title, 'books' : books})
最l页面上的内容,通过title和books两个参数传递给tempate(books.html)处理?br />
修改settings.py:
TEMPLATE_DIRS = (
    
'/opt/PROJECTS/Django/hello/templates/',
)
指定templates目录位置Q注意需要用绝对\径和'/'Q无论是Unixq是Windowspȝ?br />
我们手工造一些数据之后,可以通过http://localhost:8000/hello/books/讉K我们用Django实现的这个简单页面了(jin)?br />
6- What's next

通过上面的简单介l,怿哪怕是初次接触Django的朋友,也能够对Django有一个初步的认识。其实Djangoq不隑֭Qƈ且随着学习(fn)的深入,你一定能发现更多的惊喜,不论是来自Django本nQ还是Python?qing)其庞大的第三方cd?br />
如果有时_(d)试一下Django的admin pagesQ即为我们的model提供自动化、网化的增删改查操作。启用方法如下:(x)

修改models.py (增加class Admin):
from datetime import datetime
from django.db import models

class Book(models.Model):
    isbn        
= models.SlugField(maxlength=20)
    title       
= models.CharField(maxlength=200)
    author      
= models.CharField(maxlength=200)
    description 
= models.TextField(blank=True,null=True)
    published   
= models.DateTimeField(default=datetime.now)
    
class Admin:
        
pass

修改settings.py和urls.pyQ加入admin支持:
[settings.py]
INSTALLED_APPS = (
    
'django.contrib.auth',
    
'django.contrib.contenttypes',
    
'django.contrib.sessions',
    
'django.contrib.sites',
    
'django.contrib.admin',
    
'hello',
)
[urls.py]
urlpatterns = patterns('hello.views',
    (r
'^hello/books/$''book_list'),
    (r
'^hello/admin/', include('django.contrib.admin.urls')),
)

Note:
# Z(jin)成功q行admin pagesQ需要首先执行python manage.py syncdb admin以创建django_admin_log表?br /> # 如果前面跌?jin)创建管理员步骤Q简单的Ҏ(gu)可以删掉auth_user表,然后python manage.py syncdb重徏?br />
按照我们urls.py的配|,admin pages可以通过http://localhost:8000/hello/admin/讉K。Enjoy!




laogao 2007-11-28 00:57 发表评论
]]>
[Tips] When ANT is not enough, JRuby to the rescue!http://m.tkk7.com/sean/archive/2007/06/18/124859.htmllaogaolaogaoSun, 17 Jun 2007 16:39:00 GMThttp://m.tkk7.com/sean/archive/2007/06/18/124859.htmlhttp://m.tkk7.com/sean/comments/124859.htmlhttp://m.tkk7.com/sean/archive/2007/06/18/124859.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/124859.htmlhttp://m.tkk7.com/sean/services/trackbacks/124859.html 随着目来大Q你的ANT脚本变得来臃肿,来依赖antcontrib来实现构建逻辑Q不x弃对构徏q程和出做_的控Ӟ恨不得自己写ANT TaskQ?br />
{一{,在你考虑转向Maven或者真正卷赯子开始研IANT Task的API之前Q先听我向你推荐Ruby/JRuby。相信我Q也许这才是你真正需要的?br />
在我看来构徏脚本最主要的要求是表达能力和控制能力,表达能力是我们应该能够很方便的告诉它我们要它做什么,而控制能力是我们告诉它如何去做,除了(jin)必要? 构徏命o(h)的参数、依赖关pM外,它应该能够理解我们其他一些特D要求。在目相对单时QANT的XML格式?脚本语言"能够比较好的表达构徏者的? 求,臛_比纯Java的方式更加简单清晎ͼ于是几乎从它诞生之日成为Java领域当仁不让的头h建工兗但是ANT也有它不够用的时候,其在控制能 力上Qؓ(f)?jin)实现实际用中来复杂越来越_的对构徏q程和出的要求QANT的用者们开始对ANTq行扩展Q最具媄(jing)响力?非官?扩展可能是 antcontrib?jin),很多实际Java目的构建文件中我们都能够找到它的媄(jing)子。但是一堆taskdef?variable>之类的夹杂在ANT脚本里,怎么看怎么觉得别扭Q也严重影响构徏脚本的可L?br />
我发现我需要的是一个具有完整功能脚本语a来写我的构徏逻辑Q一斚w它要_单,我需要清晰的表达我的意图Q另一斚w当我需要的时候它要够强大来帮我实现_的控制。我自然而然惛_Ruby?br />
׃Ruby是一个功能完整的工具Q完全自己写Ruby脚本来调用Java自己的构建工具如javac、jar{等q不可能,但是既然已经有h做了(jin)? 子,我们拿来用就是了(jin)Q大不了(jin)自己再改装一下,也少C弯\。时下比较流行的解决Ҏ(gu)有Buildr、Raven、Rant和AntwrapQ它们各有特 点,大家可以Ҏ(gu)需要进行选择?br />
我最l选了(jin)其中最"轻量"的AntwrapQ原因嘛Q我不想学新的APIQ我已经熟?zhn)ANT常用的TaskQ而且我希望尽可能多的自己控制构徏的过E和? 出。Antwrap最能够满我的需要。而前不久JRuby刚刚发布?.0版,q样一来Ruby和Java的跨界引用变得更加容易,Ruby的实现自? 选择?jin)JRuby?br />
安装JRuby和Antwrap相当Ҏ(gu)Q只要把下蝲的jruby-bin-1.0.tar.gz/.zip解压到本圎ͼ保JAVA_HOME? CLASSPATH的配|,然后gem install Antwrap (选择Java? 卛_。ؓ(f)?jin)顺利加载AntwrapQ需要在CLASSPATH中包含ANT的ant.jar和ant-launcher.jar?当然Q如果想更加方便 的share你的成果Q可以把ant的文件拷贝到jruby目录下,在jruby的启动脚本加入必要的export/set命o(h)Q然后打包,q样别h只要 从你提供的zip包解压出来即可用?

Z(jin)l大家一个直观的感觉QD个简单的例子(貌似BlogJava没有提供对Ruby代码的默认支持,大家就看吧)Q?br />
 1 require 'rubygems'
 2 gem 'Antwrap'
 3 require 'antwrap'
 4 
 5 @ant=AntProject.new(:name=>"SampleAntwrapBuild", :basedir=>".")
 6 @cvsroot=":pserver:cvsuser:password@10.10.10.1/cvsrepo/SampleProduct"
 7 
 8 def cvscheckout
 9     @ant.cvs(
10         :cvsroot=>"#{@cvsroot}"
11         :command=>"checkout -A"
12         :package=>"."
13         :dest=>"cvsoriginal"
14         :compressionlevel=>"9")
15 end
16 
17 def cvsupdate
18     @ant.cvs(
19         :cvsroot=>"#{@cvsroot}"
20         :command=>"update -A -d"
21         :package=>"."
22         :dest=>"cvsoriginal"
23         :compressionlevel=>"9")
24 end
25 
26 def compile(project_name)
27     @ant.javac(
28         :srcdir=>"cvsoriginal/#{project_name}/src"
29         :destdir=>"cvsoriginal/#{project_name}"
30         :target=>"1.5"
31         :encoding=>"GBK")
32     @ant.copy(    :todir=>"cvsoriginal/#{project_name}"do
33         fileset(:dir=>"cvsoriginal/#{project_name}/src"do
34             exclude(:name=>"**/*.java")
35         end
36     end
37     @ant.jar(
38         :destfile=>"build/#{project_name}.jar"
39         :basedir=>"cvsoriginal/#{project_name}"
40         :manifest=>"MANIFEST.MF"do
41         exclude(:name=>"src/**")
42     end
43 end
44 
45 # to actually call your target
46 if ARGV.empty?
47     puts "Usage: jruby #{$0} [target]"
48 else
49     eval ARGV[0]
50 end
51 

可以看到几乎都是我们熟?zhn)的ANT TaskQ只是更加紧凑更加灵z,一旦掌握了(jin)最最基本的Ruby语法Q用它写出功能强大的构徏脚本可以说是分分钟搞定?br />



laogao 2007-06-18 00:39 发表评论
]]>
[阅读] JRuby, Groovy, and Swinghttp://m.tkk7.com/sean/archive/2007/02/21/100322.htmllaogaolaogaoWed, 21 Feb 2007 12:03:00 GMThttp://m.tkk7.com/sean/archive/2007/02/21/100322.htmlhttp://m.tkk7.com/sean/comments/100322.htmlhttp://m.tkk7.com/sean/archive/2007/02/21/100322.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/100322.htmlhttp://m.tkk7.com/sean/services/trackbacks/100322.html 以下是一l相互关联、按旉先后排列?blog文章Q主要探讨是Swing存在的问题以?qing)动态语a如JRuby/Groovy能否帮我们解决Swing的问题:(x)

JRuby can save Swing
JRuby cannot save Swing
Groovy can save Swing

挺有的Q推荐大家有I一诅R?br />



laogao 2007-02-21 20:03 发表评论
]]>
[链接] 不同版本的Ruby实现的非官方性能试http://m.tkk7.com/sean/archive/2007/02/19/100208.htmllaogaolaogaoMon, 19 Feb 2007 09:57:00 GMThttp://m.tkk7.com/sean/archive/2007/02/19/100208.htmlhttp://m.tkk7.com/sean/comments/100208.htmlhttp://m.tkk7.com/sean/archive/2007/02/19/100208.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/100208.htmlhttp://m.tkk7.com/sean/services/trackbacks/100208.html 原文链接: [URL]

Antonio Cangiano刚刚在他的blog发布?jin)他在AMD Athlon 64 3500+, 1GB RAM的机器上做的目前常见的Ruby实现的非官方评测Q包?br />
  • Ruby 1.8.5-p12 stable on Linux
  • Ruby 1.8.5-p12 stable on Windows Vista
  • Ruby 1.9 (Yarv) on Linux
  • JRuby on Linux
  • Rubinius on Linux
  • Cardinal on Linux
  • Gardens Point Ruby .NET on Windows Vista
几张有趣的报表:(x)

http://www.antoniocangiano.com/files/rubyvms_in_seconds.png
http://www.antoniocangiano.com/files/average_and_median.png
http://www.antoniocangiano.com/files/rubyvms_times.png




laogao 2007-02-19 17:57 发表评论
]]>
[链接] Top 10 Ruby on Rails performance tipshttp://m.tkk7.com/sean/archive/2007/02/11/99236.htmllaogaolaogaoSun, 11 Feb 2007 04:55:00 GMThttp://m.tkk7.com/sean/archive/2007/02/11/99236.htmlhttp://m.tkk7.com/sean/comments/99236.htmlhttp://m.tkk7.com/sean/archive/2007/02/11/99236.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/99236.htmlhttp://m.tkk7.com/sean/services/trackbacks/99236.html http://www.antoniocangiano.com/articles/2007/02/10/top-10-ruby-on-rails-performance-tips

q是一关于提高RoR应用性能的文章,提高RoR性能有两个途径Q一个是服务器端配置Q一个是在Railsq一块的调整Q此文侧重于后者。主要的内容包括Q?br />
1- 在Ruby代码U别采用更优的方案;
2- 充分利用~存Q?br /> 3- 充分挖掘数据库潜力;
4- 合理使用finder查找函数Q?br /> 5- 合ƈ数据库事务;
6- 控制好你的控制器Q不要滥用filters和实例变量;
7- 不要q度使用helpersQ考虑HTMLQ?br /> 8- 合理配置日志Q?br /> 9- l你的Ruby GC打补丁;
10- 不鼓?quot;premature optimization"Q但是尽可能带有性能考虑来进行编码?br />
大家觉得对于RoR的应用,上述q些说到点子上了(jin)吗?感觉RoR在性能调优上我们积累的l验q不是很多,我有Ҏ(gu)?j),虽然上面有很多好的点子可以借鉴Q文中提到的某些"强心(j)?quot;是否真的值得推广Q尤其是针对数据库的那些"quick-and-dirty"的做法?



laogao 2007-02-11 12:55 发表评论
]]>
[Tips] 使用Ruby计算MD5 checksumhttp://m.tkk7.com/sean/archive/2007/02/10/99115.htmllaogaolaogaoSat, 10 Feb 2007 04:53:00 GMThttp://m.tkk7.com/sean/archive/2007/02/10/99115.htmlhttp://m.tkk7.com/sean/comments/99115.htmlhttp://m.tkk7.com/sean/archive/2007/02/10/99115.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/99115.htmlhttp://m.tkk7.com/sean/services/trackbacks/99115.html 很多开源框架的官方下蝲都会(x)提供MD5的验证码Q用于验证下载的完整性,保用户下蝲的版本和发布者期望的版本是一致的Q防止有人恶意篡改,其是存在很多镜像站点的时候。用Unixpȝ的朋友可以通过命o(h)行直接md5 + 文g名,或者md5sum + 文g名取得本地文件的md5验证码。用Windows的朋友也能在|上扑ֈ不止一个提供MD5的工兗?br />
不过既然Ruby在Unix/Windows/Mac上都能跑Q那Ruby有没有提供MD5的功能让我们可以以一致的方式取得MD5 checksum呢?{案是有?br />
  1. #!/usr/bin/env ruby  
  2. require 'digest/md5'  
  3. ARGV.each do |f|  
  4.     checksum = Digest::MD5.hexdigest(File.read(f))  
  5.     puts "#{f}:\t#{checksum}"  
  6. end  

比如我们?a target="_blank">http://struts.apahce.org/下蝲1.2.9版本Struts的源码,下蝲到本地后Q可以用上面的脚本获取相应的MD5码,输出为:(x)

struts-1.2.9-src.tar.gz   63ff6e570410876412f8fd97749b2415

拿后面这?3ff6e570410876412f8fd97749b2415和官方网站上相应的MD5 checksum作比对看是否一_(d)卛_认定下蝲到本地的版本是否完整?br/>



laogao 2007-02-10 12:53 发表评论
]]>
[Tips] Ruby调用WebServices(SOAP)http://m.tkk7.com/sean/archive/2007/02/08/98633.htmllaogaolaogaoThu, 08 Feb 2007 00:29:00 GMThttp://m.tkk7.com/sean/archive/2007/02/08/98633.htmlhttp://m.tkk7.com/sean/comments/98633.htmlhttp://m.tkk7.com/sean/archive/2007/02/08/98633.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/98633.htmlhttp://m.tkk7.com/sean/services/trackbacks/98633.html 昨天试用一个WebServiceQ需要确定是否正安装配|,用Ruby来做真的很方便,一个本来在Java中颇为麻?ch)的事,C(jin)Ruby(irb)里面Q变得很单。你要做的,是打开irbQ依ơ敲入以下代码:(x)
  1. require 'soap/wsdlDriver'    
  2. URL = 'http://somedomain/someapp/somewsdl'    
  3. soap_client = SOAP::WSDLDriverFactory.new(URL).create_rpc_driver  

接下来就可以直接通过soap_client讉Kq个WebService的方法了(jin)Q如Q?
  1. soap_client.version  
  2. soap_client.get_user_roles('user')  

如果你指?
  1. soap_client.wiredump_file_base = 'log_file'  

pȝq能帮你记录在用WebService接口时所有发出和收到的xml消息?


laogao 2007-02-08 08:29 发表评论
]]>
[Tips] &lt;abbr&gt;: 一个有的HTML标签http://m.tkk7.com/sean/archive/2007/01/25/96069.htmllaogaolaogaoThu, 25 Jan 2007 15:23:00 GMThttp://m.tkk7.com/sean/archive/2007/01/25/96069.htmlhttp://m.tkk7.com/sean/comments/96069.htmlhttp://m.tkk7.com/sean/archive/2007/01/25/96069.html#Feedback2http://m.tkk7.com/sean/comments/commentRss/96069.htmlhttp://m.tkk7.com/sean/services/trackbacks/96069.html

如果你用Firefox或Operaq且看到?a href="http://m.tkk7.com/sean/archive/2007/01/25/96060.html" target="_blank">上一随W?/a>?abbr title="What You See Is What You Get">WYSIWYGq一个词Q你可以看到它下面是用一串点标注出来的,如果你鼠标?zhn)停在上面Q会(x)有工hC?What You See Is What You Get"。HTML源代码是:

<abbr title="What You See Is What You Get">WYSIWYG</abbr>

可惜微Y的IEq不能正renderq个tagQ尽它是标?X)HTML的一部分?/p>


laogao 2007-01-25 23:23 发表评论
]]>
[链接] ASP.NET?六大|状"http://m.tkk7.com/sean/archive/2007/01/25/96060.htmllaogaolaogaoThu, 25 Jan 2007 15:01:00 GMThttp://m.tkk7.com/sean/archive/2007/01/25/96060.htmlhttp://m.tkk7.com/sean/comments/96060.htmlhttp://m.tkk7.com/sean/archive/2007/01/25/96060.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/96060.htmlhttp://m.tkk7.com/sean/services/trackbacks/96060.html

http://www.garrettdimon.com/archives/aspnet-vs-front-end-architecture

该文作者细C(jin)他在使用ASP.NETq行开发的q程中遇到的6点不爽的地方Q主要都集中在前台架构上Q包括大量内联的风格标签、不同浏览器生成不同面代码、失败的标记设计、缺乏语意一致性、服务器端label和客L(fng)label的脱节、服务器端ID和客L(fng)IDp{等。尤其当你想使用标准的CSSQ构建数据结构和表现分离的清晰页面时QASP.NET的一些默认的内部处理可以让你对ASP.NETZq样做完全无语。比较有的是本文后面的回复Q其中有不少与楼d病相怜的|友Q还有来自微软员工的为ASP.NET辩护的声韟?/p>

我一直对MS在很多设计思\和决定上?j)存疑虑Q不明白Z么MS是要自成风格搞自己那一套蹩脚的所?规范"?标准"Q似乎在鼓励大家follow一个ƈ不清晰、多有些؜杂无章的设计架构Q其实ؓ(f)?jin)方便它实现更cool?abbr title="What You See Is What You Get">WYSIWYG开发工兗就拿今天来_(d)本来我们目定义好所有模块都按BO和UI分开QBO里面的类和UI里面的类各施其责Q原则上UI依赖BOQ而不是反q来Q按照我的理解和期望QW(xu)indows.Forms命名I间应该是由UI层来依赖Q而非BO层。很昄Q因为我们的form都放在UI层,肯定是依赖Windows.Forms?jin),而我们尽可能把所有业务逻辑代码攑ֈBO层。但是ؓ(f)?jin)?f)时实C个文本文件Ş式的logQ因为我们的业务逻辑代码都在BO层,所以ؓ(f)?jin)记录有意义的logQ我们的log逻辑自然而然只能攑֜BO层。但是一个基本的获取E序q行路径的方法属于System.Windows.Forms.Applicationc,让我们不得不using System.Windows.Froms。这其实q好Q我们也怸应该强求Windows.Forms一定就是只针对UI上的应用。问题是你每天都在面对类似的情况Q每天都或多或少在和.NET API和框架其他部分在打架Q当你?NET的API旉久了(jin)Q自然而然你就被它带到它的那一套思\中,你的设计也就自然而然跟着它走?jin),业务逻辑和UI逻辑交织在一P当你回过头来x层次理清理顺已经成ؓ(f)Mission:Impossible。因为抛开MS推荐的方式,自己实现一套自认更清晰的架构,相较"官方"的blueprint设计Q代价实在有些高?/p>

所以虽然我没有真正开发过ASP.NETQ尤其是2.0版,但我很能理解他们遇到的尴?/p>


laogao 2007-01-25 23:01 发表评论
]]>
[新闻] Ruby On Rails 1.2.1 已发?http://m.tkk7.com/sean/archive/2007/01/19/94849.htmllaogaolaogaoFri, 19 Jan 2007 01:20:00 GMThttp://m.tkk7.com/sean/archive/2007/01/19/94849.htmlhttp://m.tkk7.com/sean/comments/94849.htmlhttp://m.tkk7.com/sean/archive/2007/01/19/94849.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/94849.htmlhttp://m.tkk7.com/sean/services/trackbacks/94849.html 虽然官方|站昄最新版Railsq是1.1.6Q?a target="_blank">RubyForge上已l可以下?.2.1版?br/>
[UPDATE] 官方已正式宣? http://weblog.rubyonrails.org/2007/1/19/rails-1-2-rest-admiration-http-lovefest-and-utf-8-celebrations




laogao 2007-01-19 09:20 发表评论
]]>
[Tips] |络不是很流畅的情况下安装rails 1.1.6 (Ubuntu Dapper Drake)http://m.tkk7.com/sean/archive/2007/01/08/92487.htmllaogaolaogaoMon, 08 Jan 2007 15:32:00 GMThttp://m.tkk7.com/sean/archive/2007/01/08/92487.htmlhttp://m.tkk7.com/sean/comments/92487.htmlhttp://m.tkk7.com/sean/archive/2007/01/08/92487.html#Feedback0http://m.tkk7.com/sean/comments/commentRss/92487.htmlhttp://m.tkk7.com/sean/services/trackbacks/92487.html ׃最q国际互联网速率不是很稳定,而gem install自动默认到rubyforge下蝲gem安装包,׃rails依赖好几个其他的gemQ而gem install需要遍历所有这些gemQ所以gem installl常出出现超时的情况Q怎么办呢Q答案就是把相关的每个gem单独下蝲到本圎ͼ然后?-local选项安装。但是怎么定你的需要哪些gem呢?

单说明一下rubyforge的目录结构,?jin)解之后找vgem来就?x)方便很多?x)
    http://rubyforge.org/projects/[project_name]/
# 把[project_name]替换Z要找的gem名称Q不要加版本P(j)p讉K到该gem的主,然后中间靠右x跌{C载页面的链接("Download")Q排在最上面的就是最新版Q注意文件扩展名Q我们要扄?gem?br/>
本文假定你已lapt-get install ruby1.8 ri rdoc irbQƈ且也已经?a target="_blank">http://rubyforge.org/projects/rubygems/下蝲q安装好RubyGems?br/>
1- 首先下蝲rails gemQ按照刚才提的方法,rails的gem主页?a target="_blank">http://rubyforge.org/projects/rails/Q目前的最新版本是1.1.6?br/> 2- cdC载到本地的目录,然后
    $ sudo gem specification --local --version 1.1.6 rails | grep "^   name:\|^        version:" # (^后分别是2个空格和8个空?
    可以看到如下l果Q?br/> ----------------------------------------
  name: rake
        version: 0.7.1
  name: activesupport
        version: 1.3.1
  name: activerecord
        version: 1.14.4
  name: actionpack
        version: 1.12.5
  name: actionmailer
        version: 1.2.5
  name: actionwebservice
        version: 1.1.6
----------------------------------------
3- OKQ接下来我们依次去rubyforge下蝲q些gemQ注意actionwebservice的project name?aws"Q其余的project name和gem名称一栗?br/> 4- 依次sudo gem install --local [gem_name]Qrails攑֜最后,卛_完成安装Q可以通过which rails或者rails [目名]验证?br/>



laogao 2007-01-08 23:32 发表评论
]]>
[新闻] Groovy 1.0发布http://m.tkk7.com/sean/archive/2007/01/03/91659.htmllaogaolaogaoWed, 03 Jan 2007 15:53:00 GMThttp://m.tkk7.com/sean/archive/2007/01/03/91659.htmlhttp://m.tkk7.com/sean/comments/91659.htmlhttp://m.tkk7.com/sean/archive/2007/01/03/91659.html#Feedback1http://m.tkk7.com/sean/comments/commentRss/91659.htmlhttp://m.tkk7.com/sean/services/trackbacks/91659.html http://docs.codehaus.org/display/GROOVY/2007/01/02/Groovy+1.0+is+there

Groovy是与Javaq_无缝l合的动态语aQ如今终于发布了(jin)1.0版?



laogao 2007-01-03 23:53 发表评论
]]>
վ֩ģ壺 ޾ƷƬþò| ҹƬ | þþƷAV| 3dѶ߹ۿ| ޹Ʒ۲ӰԺ| ͵͵Ʒ| hƵ߹ۿ| ѹ߾Ʒһ| þѾƷav| պƵ| ĻѸ | 99ƷƵ| ޳վ߹ۿ| ɫAVɫһ| ޶߹ۿ| 99þþƷëƬѲ| ɫƷһ| ۺպ| ҹƵ| Ʒһ| ѿһһƬ| AVۺɫ͵| ӾƷӹۿƬ| һëƬѲԿ60| ޽Сxxxxɫ| ޹a777| һ| ҹ߹ۿ| ƷѦvƵ| ղƷһ| 91޾ƷƵ| ۺС˵ɫ| һaƵ| Aѹۿ| AëƬƵл| ƷžƷƵ| ޹ƷAV| һ| ձĻ| AVרAv| һƷ|