<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>lemonzc</title>
    <description></description>
    <link>http://lemonzc.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Ruby 在 Notepad++ 上飞翔</title>
        <author>lemonzc</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lemonzc.javaeye.com">lemonzc</a>&nbsp;
          链接：<a href="http://lemonzc.javaeye.com/blog/150919" style="color:red;">http://lemonzc.javaeye.com/blog/150919</a>&nbsp;
          发表时间: 2007年12月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>1.notepad++ 简单介绍</strong><br />
&nbsp; notepad++可能大家都不陌生吧，它是一个很强大的编辑器，它的特性是，开放源代码， 支持多语言的，但是它目前只能运行在Windows平台下（缺点，都4.6的版本，还没看到能在其他os上的版本）。大家用过ruby下自带的SciTE吧，它使用的是 Scintilla edit component ，其实官方网站上说 SciTE本来只是作为Scintilla edit component 推广用的一个Demo。呵呵，notepad++也使用Scintilla edit component,所以感觉像是2兄弟。<br />
&nbsp; <br />
&nbsp; notepad++的具体特征我就不详细说了，大家可以去网站看看：<br />
&nbsp; http://notepad-plus.sourceforge.net/uk/site.htm<br />
&nbsp; <br />
&nbsp; <br />
<strong>2.ruby 在 notepad++ 上飞翔</strong><br />
&nbsp; 在这之前，我建议大家下载 最新版本4.6, 压缩的包只有1M多。我是下载zip，解压就可以用的（够绿色）。<br />
&nbsp; <br />
&nbsp; 启动notepad++:<br />
&nbsp; <br />
<img src="http://lh6.google.com/lemonzc777/R3Hh6dGXqKI/AAAAAAAAABU/zfxzXhP-8ho/p1.JPG?imgmax=512" alt="" /><br />
&nbsp; <br />
&nbsp; <br />
&nbsp; 创建一个新rb文件<br />
&nbsp; <br />
<img src="http://lh6.google.com/lemonzc777/R3Hh6dGXqLI/AAAAAAAAABc/qdmWfMU5nGc/p2.JPG?imgmax=512" alt="" /><br />
&nbsp; <br />
&nbsp; 点击菜单上的Run?&nbsp;&nbsp; no, no, no 在这里是不行的，不像SciTE, 我们得需要来配置下一个非常棒的插件。<br />
&nbsp; <br />
<strong>3.军刀 NppExec 插件</strong><br />
&nbsp; 瑞士的军刀大家都晓得，比着是方便，好用的工具吧。 我们notepad++下面的NppExec也算是一把军刀呢。它的功能就是执行代码，不过如何执行，请听我下面慢慢讲解.<br />
&nbsp; <br />
&nbsp; 小心按坏F6, :), 按下快键 F6 ，将出现下面窗口（NppExec),在窗口中输入:<br />
&nbsp; ruby $(FULL_CURRENT_PATH)<br />
<br />
<img src="http://lh6.google.com/lemonzc777/R3Hh6dGXqMI/AAAAAAAAABk/qbEQZL1yeAk/p3.JPG?imgmax=512" alt="" /><br />
<br />
&nbsp; 点击ok,&nbsp; 啊哦，ruby: No such file or directory -- new (LoadError) <br />
&nbsp; 呵呵 老兄你忘了保存(注：不要保存在有空格的目录下），save and ok again, 结果出来了。<br />
<br />
<img src="http://lh6.google.com/lemonzc777/R3Hh6dGXqNI/AAAAAAAAABs/b4lue1IcjHo/p4.JPG?imgmax=512" alt="" /><br />
&nbsp; <br />
&nbsp; 随后，我们可以保存这个Command 为Ruby Run, 这样以后就直接按F6点ok（如果一建就能执行默认的command就好了）。<br />
&nbsp; <br />
&nbsp; <br />
<strong>4. Rails 在 notepad++ 上奔跑</strong><br />
&nbsp; 除了NppExec插件，我们还有Light Explorer 插件（这些插件都是默认安装在npp 4.6上的）. ok, 找到你的project directory path, 按F6, 我们创建一个GO TO PROJECT(我暂时只想到这个name， Save Command的时候输入这个name), 创建一个Command, 脚本为：CD X:\xxxx\xxxxx (你的rails的project根目录)。&nbsp; ok 执行一下。<br />
<br />
<img src="http://lh3.google.com/lemonzc777/R3Hh6tGXqOI/AAAAAAAAAB0/qfzecFGAlKQ/p5.JPG?imgmax=576" alt="" /><br />
<br />
<br />
<img src="http://lh3.google.com/lemonzc777/R3HiKtGXqPI/AAAAAAAAACA/wXv3FVcviKc/p6.JPG" alt="" /><br />
<br />
&nbsp; <br />
&nbsp; 下面，我们创建一个Run Server 的Command,&nbsp; 按F6, 脚本: ruby script/server<br />
<br />
<img src="http://lh4.google.com/lemonzc777/R3HiK9GXqQI/AAAAAAAAACI/g4WuEWA9ObM/p7.JPG" alt="" /><br />
<img src="http://lh5.google.com/lemonzc777/R3HoENGXqSI/AAAAAAAAACY/y3S9uNqZFok/p9.JPG" alt="" /><br />
<img src="http://lh5.google.com/lemonzc777/R3HoENGXqSI/AAAAAAAAACY/y3S9uNqZFok/p9.JPG" alt="" /><br />
<br />
&nbsp; <br />
&nbsp;如何快捷，批量的创建和删除Command(界面上没有delete按钮)：<br />
&nbsp;你也可以在npp的 plugins\Config 目录下找到 npes_saved.txt 和npes_temp.txt 文件，打开它们，自己看了哈。下面是我的 npes_save.txt：<br />
<br />
::Ruby Run<br />
ruby $(FULL_CURRENT_PATH)<br />
<br />
::GO to Project Directory<br />
CD D:\temp\My Documents\NetBeansProjects\RailsDemo<br />
<br />
::Run Server<br />
ruby script/server<br />
<br />
::Rails Destroy Template<br />
ruby script/destroy --help<br />
<br />
::Rails Generate Template<br />
ruby script/generate --help<br />
<br />
补充： plugins\doc\NppExec.txt 有详细的关于NppExec的说明。<br />
&nbsp;<br />
<strong>5. *.erb&nbsp; 在notepad++ 漫步</strong><br />
&nbsp; 当用npp打开erb的时候，npp把它当作一般的normal text格式文件，所以没有语法高亮，不过你可以点击menu－&gt;language-&gt;html，马上*.erb就可以漫步了。<br />
&nbsp; <br />
&nbsp; <img src="http://lh4.google.com/lemonzc777/R3HiK9GXqRI/AAAAAAAAACQ/zgX_318JSA4/p8.JPG?imgmax=400" alt="" /><br />
&nbsp; <br />
&nbsp; 总结，notepad++上还有好一些插件，感觉还不错， 如果不喜欢java ide的同学，喜欢速度快的ide的同学们，不妨考虑使用一下这种方式来develop （应该不光是ruby,其他语言也一样可以配置）<br />
&nbsp; <br />
&nbsp; 共同学习：Functions List这个插件应该是类是自动完成，不过我在plugins\APIs目录下 创建了一个erb.api,添加了一些常用的字串， 但打开erb文件还是无法在Functions list中看到。我已经给这个插件作者发送了一份email，等待他的答复<br />
&nbsp; <br />
&nbsp; lemonzc<br />
&nbsp; Symbio Chengdu
          <br/>
          <span style="color:red;">
            <a href="http://lemonzc.javaeye.com/blog/150919#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Dec 2007 13:22:47 +0800</pubDate>
        <link>http://lemonzc.javaeye.com/blog/150919</link>
        <guid>http://lemonzc.javaeye.com/blog/150919</guid>
      </item>
      <item>
        <title>类中的成员变量可以这样声明， 但访问不能用@</title>
        <author>lemonzc</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lemonzc.javaeye.com">lemonzc</a>&nbsp;
          链接：<a href="http://lemonzc.javaeye.com/blog/150035" style="color:red;">http://lemonzc.javaeye.com/blog/150035</a>&nbsp;
          发表时间: 2007年12月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          大家先看下面代码：<br /><pre name="code" class="java">
class Person &lt; Struct.new(:age)
	def say_age
		puts "say age: #{age}" if age != nil
	end
	
	def hello_age
		puts "hello age: #{age}" if age!=nil
	end
end

p = Person.new(30)

p.say_age
p.hello_age

p.age = 20
p.say_age
p.hello_age
</pre><br /><br />输出是：<br />say age: 30<br />hello age: 30<br />say age: 20<br />hello age: 20<br /><br />如果使用:<br /><br /><pre name="code" class="java">
	def say_age
		puts "say age: #{@age}" if @age != nil
	end
	
	def hello_age
		puts "hello age: #{@age}" if @age!=nil
	end
</pre><br />那么什么都不输出，应为@age 为nil<br /><br />如果使用:<br /><pre name="code" class="java">
	def say_age
		puts "say age: #{:age}" if :age != nil
	end
	
	def hello_age
		puts "hello age: #{:age}" if :age!=nil
	end
</pre><br />那么输出是：<br />say age: age<br />hello age: age<br />say age: age<br />hello age: age<br /><br />:age 符号而已<br /><br />ActiveRecord的低层有使用这种方式申明class<br /><br /><pre name="code" class="java">
class ColumnDefinition &lt; Struct.new(:base, :name, :type, :limit, :precision, :scale, :default, :null) #:nodoc:
..
..
..
end
</pre><br /><br />文件：schema_definitions.rb<br />路径:%RUBY_HOME%\\lib\ruby\gems\1.8\gems\activerecord-2.0.1\lib\active_record\connection_adapters\abstract
          <br/>
          <span style="color:red;">
            <a href="http://lemonzc.javaeye.com/blog/150035#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 21 Dec 2007 17:33:03 +0800</pubDate>
        <link>http://lemonzc.javaeye.com/blog/150035</link>
        <guid>http://lemonzc.javaeye.com/blog/150035</guid>
      </item>
      <item>
        <title>migrate 中 create_table 的初步探索</title>
        <author>lemonzc</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lemonzc.javaeye.com">lemonzc</a>&nbsp;
          链接：<a href="http://lemonzc.javaeye.com/blog/149894" style="color:red;">http://lemonzc.javaeye.com/blog/149894</a>&nbsp;
          发表时间: 2007年12月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          搞了几天rails了，太magic了。所以搞不清楚，只知道调用。<br />
今天深入去了解了下 create_table 大家给指点指点<br />
<br />
先请看流程：<br />
<br />
<br />
再看 SchemaStatement 类的create_table()代码
<div class="code_title">ruby 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-rb" start="1">
    <li class="alt"><span><span class="comment">#&nbsp;======&nbsp;Do&nbsp;not&nbsp;add&nbsp;a&nbsp;primary&nbsp;key&nbsp;column</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">#&nbsp;&nbsp;create_table(:categories_suppliers,&nbsp;:id&nbsp;=&gt;&nbsp;false)&nbsp;do&nbsp;|t|</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">#&nbsp;&nbsp;&nbsp;&nbsp;t.column&nbsp;:category_id,&nbsp;:integer</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">#&nbsp;&nbsp;&nbsp;&nbsp;t.column&nbsp;:supplier_id,&nbsp;:integer</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">#&nbsp;&nbsp;end</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">#&nbsp;generates:</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">#&nbsp;&nbsp;CREATE&nbsp;TABLE&nbsp;categories_suppliers&nbsp;(</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">#&nbsp;&nbsp;&nbsp;&nbsp;category_id&nbsp;int,</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">#&nbsp;&nbsp;&nbsp;&nbsp;supplier_id&nbsp;int</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">#&nbsp;&nbsp;)</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">#</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">#&nbsp;See&nbsp;also&nbsp;TableDefinition#column&nbsp;for&nbsp;details&nbsp;on&nbsp;how&nbsp;to&nbsp;create&nbsp;columns.</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">def</span><span>&nbsp;create_table(table_name,&nbsp;options&nbsp;=&nbsp;{})&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;table_definition&nbsp;=&nbsp;TableDefinition.<span class="keyword">new</span><span>(</span><span class="keyword">self</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;table_definition.primary_key(options[<span class="symbol">:primary_key</span><span>]&nbsp;||&nbsp;</span><span class="string">&quot;id&quot;</span><span>)&nbsp;</span><span class="keyword">unless</span><span>&nbsp;options[</span><span class="symbol">:id</span><span>]&nbsp;==&nbsp;</span><span class="keyword">false</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="keyword">yield</span><span>&nbsp;table_definition&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;options[</span><span class="symbol">:force</span><span>]&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;drop_table(table_name,&nbsp;options)&nbsp;<span class="keyword">rescue</span><span>&nbsp;</span><span class="keyword">nil</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="keyword">end</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;create_sql&nbsp;=&nbsp;<span class="string">&quot;CREATE#{'&nbsp;TEMPORARY'&nbsp;if&nbsp;options[:temporary]}&nbsp;TABLE&nbsp;&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;create_sql&nbsp;&lt;&lt;&nbsp;<span class="string">&quot;#{quote_table_name(table_name)}&nbsp;(&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;create_sql&nbsp;&lt;&lt;&nbsp;table_definition.to_sql&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;create_sql&nbsp;&lt;&lt;&nbsp;<span class="string">&quot;)&nbsp;#{options[:options]}&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;execute&nbsp;create_sql&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">end</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
大家明白了吧。<br />
根据传递的参数，一步一步来创建 create_sql, 然后execute来执行。<br />
<br />
<br />
字段的组合是用 <span><span class="keyword">yield</span><span>&nbsp;table_definition&nbsp; <br />
具体可以去跟踪 </span></span><span>TableDefinition 类(schema_definitions.rb 文件里面, path: gems\1.8\gems\activerecord-2.0.1\lib\active_record\connection_adapters\abstract )<br />
<br />
通过这个跟踪，知道了很多东西，不错。<br />
<br />
现在也了解选项:force是什么意思。<br />
<br />
也了解了 some_method *args do |something|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
<br />
这种书写方法的意思。 do ....&nbsp; end就是 some_method 里面的</span><span><span class="keyword">yield</span><span></span></span><br />
<span><span class="keyword"></span><span></span><span class="keyword"></span><span><br />
</span></span>
          <br/>
          <span style="color:red;">
            <a href="http://lemonzc.javaeye.com/blog/149894#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 21 Dec 2007 11:17:44 +0800</pubDate>
        <link>http://lemonzc.javaeye.com/blog/149894</link>
        <guid>http://lemonzc.javaeye.com/blog/149894</guid>
      </item>
  </channel>
</rss>