- 浏览: 205024 次
- 性别:
- 来自: Wgt
最新评论
-
pxiaozei:
楼主,你这样用,需要在SVN服务器上建Git服务器端么?
SVN+GIT=鱼与熊掌兼得 -
southwolf:
这个项目还在维护吗……
OpenCV+Ruby构建图像处理研究平台 -
w87848608:
请问,比如我利用git,开了一个branch A,做了功能A, ...
SVN+GIT=鱼与熊掌兼得 -
sxlkk:
callmechen 写道本质上还是没有解决合并的繁琐。换汤不 ...
SVN+GIT=鱼与熊掌兼得 -
清气上升:
本地提交,本地错误恢复,eclipse有local histo ...
SVN+GIT=鱼与熊掌兼得
上一篇文章(http://www.iteye.com/topic/219826)发出之后,很多人表示对这个案例很感兴趣,要求我再深入地谈谈。应大家之邀, 我对上一篇内容进行一些补充,谈谈如何在一个传统的嵌入式领域项目中为了拥抱变化而引入web技术,以及用定制的rails框架解决非web应用问题,最后简要地谈谈一般性应用的思考。
在上一篇中,我轻描淡写地描述了由于客户对W设备赋予更多角色而导致W设备功能需求暴涨,最终选择web技术来解决问题,其实这里并非一蹴而就。
首先我们来分析一下要迎接的挑战:
(1) 增加很多复杂的操作界面(超出了W设备的现有资源能力)
(2) 功能变化快
(3) 需要日后可定制功能(二次开发)
(4) 维持低成本(意味着维持现有硬件架构不变)
和大多数人一样,我们首先想到的是客户的要求是不是不太合理呢?又要马儿跑又要马儿不吃草?但是很快发现这里有一个契机,那就是W设备是保持在线的(通过ZigBee网络),那么我们就有机会透过网络转移计算,于是一个方案马上跃上来: unix终端。
是的,古老的终端。
在许多年前,我刚迈出大学校门时参加第一项开发工作就是字符终端设备的开发,所以对终端还算熟悉。不幸的是,我也开发过服务端的程序,知道在ncurses库下开发应用并不轻松,拥抱变化?难!客户的第(2)和第(3)项需求也无法很好地得到满足。
我突然想起DHH在RailsConf 2007上的那个keynote(就是他大谈Cargo Cult的那次), 他把浏览器和IBM 3270做了有趣的对比。是的,那是个绝妙的对比,它给我留下的印象远大于Cargo Cult调侃。浏览器和终端本质上要解决的是同一个问题。由于web技术的发展取得长足的进步,服务器端进行应用开发资源也异常丰富。rails正是其中一颗冉冉升起的新星,更重要的是,服务器已经在跑rails了,就理所当然继续用rails。
在rails下开发应用那是太轻松了, 那么对付"功能快速变化"和"二次开发"就好办了。
那么,焦点又回到了W设备: 浏览器?
显然,在现有的硬件平台上上web浏览器是不可能的,如果升级硬件平台上WinCE或Embedded Linux,那么W设备的成本势必上升。况且,还有另外一些问题: 耗电问题,传输问题(ZigBee网络带宽极其有限,肥大的HTTP/HTML并不适合); 而且W设备显示屏很小,所有功能操作都是只需要字符即可,无需fancy界面。因此,定义一套适合在ZigBee网络传输的协议和适合W设备的简易标记语言(MML)显然更为合理。
客户端问题解决了,现在焦点回到服务器端,rails可以作为非web应用么?
我对rails的内部细节不太了解,但是从外部来看,rails提供了以下主要服务:
1) MVC编程框架
2) 透过ActiveRecord与数据库打交道
3) 为HTML渲染提供服务
4) 其他如测试,数据迁移,插件,与web server的接口等等
其中份量最重的ActiveRecord部分,与web完全无关。很多便利工具例如测试,数据迁移,插件机制等等,其实与web也无多大关系。
既然rails的MVC中,M与web无关,C部分主要留给业务逻辑,而V部分对于非web领域价值不大,倘若要基于rails再建一个领域特定的MVC,工作量也就是集中在V部分了。而这个V部分,既然是领域相关,则无论采用什么方案都是一个不可避免的工作。当我们把rails的思想与习惯用法再应用到这个新的MVC上时,我们就得到了一个基于rails并且与rails神似的框架。我也来创一个buzzworld: DSF(Domain Specific Framework),或者谦虚一点:RBDSF(Rails Based Domain Specific Framework)。
就我的案例来看,这个DSF采用的通讯不是HTTP/TCP/IP而是基于ZigBee无线网络的自定义协议,展现数据的不是HTML而是自定义的MML,然而编程模式却和rails的web应用类似。举个简单的"Hello world"程序作为例子:
contollers/main.rb:
views/main/main_index.erb:
在MainController中的controller_map_to起的作用是把自己(main)映射到一个较短的名字"m",而action_maps则对action取短的别名,这样做主要是为了减少请求串的长度。剩下的,就和rails差不多了。
再看看view,其中<P3.20CrS2E3.5>表示在第3行20列处(P3.20),以红色(Cr)2号字(S2)显示@text,经过3.5妙后清楚屏幕(E3.5)。当然,如果想以更好的方式描述这个MML属性,则可以定义一系列helper函数,或者来点重的,弄个DSL。
这个例子没有演示Models,因为它是直接使用rails的Models,因此使用起来没有丝毫差别。
[补充:在我的上一篇文章中,有一个功能我没有介绍,那就是模拟器。由于W设备需要在ZigBee网络中工作,对应用开发人员来说,为了开发应用而去安装整套设备比较麻烦;另外,客户想把整个系统作为产品推广,而不仅仅是自家用。这样一来,就需要有一个可以模拟W设备的环境,怎么实现?
由于W Server是用ruby写的并基于rails,因此产生了一个绝妙的解决方案:在rails应用程序的一个控制器中直接调用W Server,把W Server的输出(MML)转换成HTML;同样的,把浏览器传来的@params内容转换成W Server需要的格式,然后我们就可以用浏览器模拟W设备了。当我们把用浏览器模拟W设备这个解决方案告诉客户时,客户诺以重金,而其实我们才用了数百行Ruby代码而已:-)]
总结:
遇到需求变化时,运用恰当的技术手段有时候可以柳暗花明,特别是跨领域交叉应用,能收到意想不到的效果。web技术的长足发展,也能给其他领域带来福音。当我们把MVC的概念推广到web之外,那么这个V就可以是任意的领域特定的数据展示格式。它既可以是基于文本的,也可以是基于二进制的;既可以自定义,也可以去兼容已有的格式;如果我们仔细去分析,其实很多基于主机计算模型的应用都可以用定制的MVC框架来实现,好处是MVC能够使应用程序结构更加清晰。而基于rails来实现DSF的优势是:rails已经提供了很好的基础,加上Ruby语言的强大语法,可以以很小的代价来实现适合你的应用的DSF。
没有,人家生意还是很好。
倒是因为遭雷击电死了十几头牛...现在搞了避雷针。
由于在这个案例中客户端有固定地址(ZigBee MAC Address),而且W Server有这个地址表,所以实现“推”还是比较容易的,主要是暂时没有这个需求所以就没有做进去。而工作于Internet的Web环境,服务器端不能发起到客户端的连接,因此两种场景就无法比较了。
是的,C比较简单,重写成本底。M分量重,意义最大。另外rails的一些辅助设施也是捡现成的。
ZigBee没有“长连接”的问题。有兴趣的话可以从这里http://www.zigbee.org/en/spec_download/zigbee_downloads.asp下一个spec来看看,免费的。
这里的“controller_map_to :m”正是为了告诉routes.rb转发针对"m"的请求到"main"上,而action_maps :index => "i"也是为了转发对"i"的调用到"index"上。由于这个映射关系是应用程序要提供的,无法放在WSController。
在上一篇中,我轻描淡写地描述了由于客户对W设备赋予更多角色而导致W设备功能需求暴涨,最终选择web技术来解决问题,其实这里并非一蹴而就。
首先我们来分析一下要迎接的挑战:
(1) 增加很多复杂的操作界面(超出了W设备的现有资源能力)
(2) 功能变化快
(3) 需要日后可定制功能(二次开发)
(4) 维持低成本(意味着维持现有硬件架构不变)
和大多数人一样,我们首先想到的是客户的要求是不是不太合理呢?又要马儿跑又要马儿不吃草?但是很快发现这里有一个契机,那就是W设备是保持在线的(通过ZigBee网络),那么我们就有机会透过网络转移计算,于是一个方案马上跃上来: unix终端。
是的,古老的终端。
在许多年前,我刚迈出大学校门时参加第一项开发工作就是字符终端设备的开发,所以对终端还算熟悉。不幸的是,我也开发过服务端的程序,知道在ncurses库下开发应用并不轻松,拥抱变化?难!客户的第(2)和第(3)项需求也无法很好地得到满足。
我突然想起DHH在RailsConf 2007上的那个keynote(就是他大谈Cargo Cult的那次), 他把浏览器和IBM 3270做了有趣的对比。是的,那是个绝妙的对比,它给我留下的印象远大于Cargo Cult调侃。浏览器和终端本质上要解决的是同一个问题。由于web技术的发展取得长足的进步,服务器端进行应用开发资源也异常丰富。rails正是其中一颗冉冉升起的新星,更重要的是,服务器已经在跑rails了,就理所当然继续用rails。
在rails下开发应用那是太轻松了, 那么对付"功能快速变化"和"二次开发"就好办了。
那么,焦点又回到了W设备: 浏览器?
显然,在现有的硬件平台上上web浏览器是不可能的,如果升级硬件平台上WinCE或Embedded Linux,那么W设备的成本势必上升。况且,还有另外一些问题: 耗电问题,传输问题(ZigBee网络带宽极其有限,肥大的HTTP/HTML并不适合); 而且W设备显示屏很小,所有功能操作都是只需要字符即可,无需fancy界面。因此,定义一套适合在ZigBee网络传输的协议和适合W设备的简易标记语言(MML)显然更为合理。
客户端问题解决了,现在焦点回到服务器端,rails可以作为非web应用么?
我对rails的内部细节不太了解,但是从外部来看,rails提供了以下主要服务:
1) MVC编程框架
2) 透过ActiveRecord与数据库打交道
3) 为HTML渲染提供服务
4) 其他如测试,数据迁移,插件,与web server的接口等等
其中份量最重的ActiveRecord部分,与web完全无关。很多便利工具例如测试,数据迁移,插件机制等等,其实与web也无多大关系。
既然rails的MVC中,M与web无关,C部分主要留给业务逻辑,而V部分对于非web领域价值不大,倘若要基于rails再建一个领域特定的MVC,工作量也就是集中在V部分了。而这个V部分,既然是领域相关,则无论采用什么方案都是一个不可避免的工作。当我们把rails的思想与习惯用法再应用到这个新的MVC上时,我们就得到了一个基于rails并且与rails神似的框架。我也来创一个buzzworld: DSF(Domain Specific Framework),或者谦虚一点:RBDSF(Rails Based Domain Specific Framework)。
就我的案例来看,这个DSF采用的通讯不是HTTP/TCP/IP而是基于ZigBee无线网络的自定义协议,展现数据的不是HTML而是自定义的MML,然而编程模式却和rails的web应用类似。举个简单的"Hello world"程序作为例子:
contollers/main.rb:
class MainController < WSController controller_map_to :m action_maps :index => "i" def index @text = "Hello world" end end
views/main/main_index.erb:
<%= "<P3.20CrS2E3.5>#{@text}" %>
在MainController中的controller_map_to起的作用是把自己(main)映射到一个较短的名字"m",而action_maps则对action取短的别名,这样做主要是为了减少请求串的长度。剩下的,就和rails差不多了。
再看看view,其中<P3.20CrS2E3.5>表示在第3行20列处(P3.20),以红色(Cr)2号字(S2)显示@text,经过3.5妙后清楚屏幕(E3.5)。当然,如果想以更好的方式描述这个MML属性,则可以定义一系列helper函数,或者来点重的,弄个DSL。
这个例子没有演示Models,因为它是直接使用rails的Models,因此使用起来没有丝毫差别。
[补充:在我的上一篇文章中,有一个功能我没有介绍,那就是模拟器。由于W设备需要在ZigBee网络中工作,对应用开发人员来说,为了开发应用而去安装整套设备比较麻烦;另外,客户想把整个系统作为产品推广,而不仅仅是自家用。这样一来,就需要有一个可以模拟W设备的环境,怎么实现?
由于W Server是用ruby写的并基于rails,因此产生了一个绝妙的解决方案:在rails应用程序的一个控制器中直接调用W Server,把W Server的输出(MML)转换成HTML;同样的,把浏览器传来的@params内容转换成W Server需要的格式,然后我们就可以用浏览器模拟W设备了。当我们把用浏览器模拟W设备这个解决方案告诉客户时,客户诺以重金,而其实我们才用了数百行Ruby代码而已:-)]
总结:
遇到需求变化时,运用恰当的技术手段有时候可以柳暗花明,特别是跨领域交叉应用,能收到意想不到的效果。web技术的长足发展,也能给其他领域带来福音。当我们把MVC的概念推广到web之外,那么这个V就可以是任意的领域特定的数据展示格式。它既可以是基于文本的,也可以是基于二进制的;既可以自定义,也可以去兼容已有的格式;如果我们仔细去分析,其实很多基于主机计算模型的应用都可以用定制的MVC框架来实现,好处是MVC能够使应用程序结构更加清晰。而基于rails来实现DSF的优势是:rails已经提供了很好的基础,加上Ruby语言的强大语法,可以以很小的代价来实现适合你的应用的DSF。
评论
17 楼
rubynroll
2009-04-28
lordhong 写道
很不错, 受益非浅...
题外话: 那个奶牛场倒闭了没?
题外话: 那个奶牛场倒闭了没?
没有,人家生意还是很好。
倒是因为遭雷击电死了十几头牛...现在搞了避雷针。
16 楼
lordhong
2009-04-28
很不错, 受益非浅...
题外话: 那个奶牛场倒闭了没?
题外话: 那个奶牛场倒闭了没?
15 楼
rubynroll
2008-08-21
kadvin 写道
我想问下,在你这个方案中,并未涉及到从W Server发起的对你的终端进行控制的问题,我们都知道WEB应用最大的一个问题就是服务器端推的问题,你这个方案中,是没有这个需求,还是楼主并未详细展开?如果有这个需求,你打算如何解决呢?
由于在这个案例中客户端有固定地址(ZigBee MAC Address),而且W Server有这个地址表,所以实现“推”还是比较容易的,主要是暂时没有这个需求所以就没有做进去。而工作于Internet的Web环境,服务器端不能发起到客户端的连接,因此两种场景就无法比较了。
14 楼
zbm2001
2008-08-21
楼上做游戏哪?
再者,web服务器端推的问题普遍存在,又不特定于这个场所。
如果这里解决了,世界上的web应用差不多都能解决了。
再者,web服务器端推的问题普遍存在,又不特定于这个场所。
如果这里解决了,世界上的web应用差不多都能解决了。
13 楼
kadvin
2008-08-21
我想问下,在你这个方案中,并未涉及到从W Server发起的对你的终端进行控制的问题,我们都知道WEB应用最大的一个问题就是服务器端推的问题,你这个方案中,是没有这个需求,还是楼主并未详细展开?如果有这个需求,你打算如何解决呢?
12 楼
onion_dragon
2008-08-15
不错的rails应用探索。
“浏览器和终端本质上要解决的是同一个问题”这句不错。
楼主多发好文啊!
“浏览器和终端本质上要解决的是同一个问题”这句不错。
楼主多发好文啊!
11 楼
pig345
2008-07-31
古老的MVC再次发出神奇的光芒...
10 楼
cayson
2008-07-31
透过网络转移计算-----其核心所在,很好的思路,值得借鉴!
9 楼
rubynroll
2008-07-29
universac 写道
貌似只是使用rails mvc中的m和一半v而已,c都是自己重写的啊。
是的,C比较简单,重写成本底。M分量重,意义最大。另外rails的一些辅助设施也是捡现成的。
8 楼
rubynroll
2008-07-29
刑天战士 写道
lz,我有个问题,我听说无线通讯(手机),需要保持一个长链接,不知道你的应用是否需要,如果需要,如何做到的?
ZigBee没有“长连接”的问题。有兴趣的话可以从这里http://www.zigbee.org/en/spec_download/zigbee_downloads.asp下一个spec来看看,免费的。
7 楼
universac
2008-07-29
貌似只是使用rails mvc中的m和一半v而已,c都是自己重写的啊。
6 楼
刑天战士
2008-07-29
lz,我有个问题,我听说无线通讯(手机),需要保持一个长链接,不知道你的应用是否需要,如果需要,如何做到的?
5 楼
rubynroll
2008-07-29
<div class='quote_title'>hozaka 写道</div>
<div class='quote_div'>
<p>其实在第一篇就已经把思路阐述的很清楚了,直接使用 rails 的框架,所做的修改只有</p>
<ol>
<li>对W设备以及ZigBee的数据传输进行一定的封装(可能需要网络硬件的改动,不过我猜测是不需要改动)</li>
<li>定义一种新的 Markup Language (MML)</li>
<li>对W设备于Rails之间的通信进行再次封装(W Server,可能包括部分对W设备返回数据的解析)</li>
<li>定义基于 ERB 的新模板系统,生成 MML</li>
<li>辅助函数(比如 controller_map, action_map, render )</li>
</ol>
<p>除了这些意外,其余的开发和普通的 Rails 应用无异</p>
<p> </p>
<p>P.S. 只是我个人对这个问题的分析,不代表楼主的想法和具体实现</p>
<p> </p>
</div>
<p> </p>
<p>你的分析基本到位:),只不过这里的W Server其实和rails并不进行直接通讯(也就是不经过rails的routes),仅仅是简单地使用了rails的设施而已。</p>
<p> </p>
<p>第一篇中提供细节较多,这一篇主要试图从更加通用的角度去分析,因为我认为这个解决方案/解决问题的方法是可以适用于很多场合的,如果大家觉得有借鉴的地方,或者能从中获得某些启发,那么我的目的就达到了,呵呵~。</p>
<div class='quote_div'>
<p>其实在第一篇就已经把思路阐述的很清楚了,直接使用 rails 的框架,所做的修改只有</p>
<ol>
<li>对W设备以及ZigBee的数据传输进行一定的封装(可能需要网络硬件的改动,不过我猜测是不需要改动)</li>
<li>定义一种新的 Markup Language (MML)</li>
<li>对W设备于Rails之间的通信进行再次封装(W Server,可能包括部分对W设备返回数据的解析)</li>
<li>定义基于 ERB 的新模板系统,生成 MML</li>
<li>辅助函数(比如 controller_map, action_map, render )</li>
</ol>
<p>除了这些意外,其余的开发和普通的 Rails 应用无异</p>
<p> </p>
<p>P.S. 只是我个人对这个问题的分析,不代表楼主的想法和具体实现</p>
<p> </p>
</div>
<p> </p>
<p>你的分析基本到位:),只不过这里的W Server其实和rails并不进行直接通讯(也就是不经过rails的routes),仅仅是简单地使用了rails的设施而已。</p>
<p> </p>
<p>第一篇中提供细节较多,这一篇主要试图从更加通用的角度去分析,因为我认为这个解决方案/解决问题的方法是可以适用于很多场合的,如果大家觉得有借鉴的地方,或者能从中获得某些启发,那么我的目的就达到了,呵呵~。</p>
4 楼
rubynroll
2008-07-29
baryon 写道
很棒!
你没有介绍自定义协议的细节。猜测客户端(W端)发过来的路由信息也需要一个routes.rb转发到controler和action上, 不需要分散做 controller_map_to :m 和 action_maps :index => "i" 这部分也许应该放到WSController 里
你没有介绍自定义协议的细节。猜测客户端(W端)发过来的路由信息也需要一个routes.rb转发到controler和action上, 不需要分散做 controller_map_to :m 和 action_maps :index => "i" 这部分也许应该放到WSController 里
这里的“controller_map_to :m”正是为了告诉routes.rb转发针对"m"的请求到"main"上,而action_maps :index => "i"也是为了转发对"i"的调用到"index"上。由于这个映射关系是应用程序要提供的,无法放在WSController。
3 楼
hozaka
2008-07-29
<p>其实在第一篇就已经把思路阐述的很清楚了,直接使用 rails 的框架,所做的修改只有</p>
<ol>
<li>对W设备以及ZigBee的数据传输进行一定的封装(可能需要网络硬件的改动,不过我猜测是不需要改动)</li>
<li>定义一种新的 Markup Language (MML)</li>
<li>对W设备于Rails之间的通信进行再次封装(W Server,可能包括部分对W设备返回数据的解析)</li>
<li>定义基于 ERB 的新模板系统,生成 MML</li>
<li>辅助函数(比如 controller_map, action_map, render )</li>
</ol>
<p>除了这些意外,其余的开发和普通的 Rails 应用无异</p>
<p> </p>
<p>P.S. 只是我个人对这个问题的分析,不代表楼主的想法和具体实现</p>
<p> </p>
<ol>
<li>对W设备以及ZigBee的数据传输进行一定的封装(可能需要网络硬件的改动,不过我猜测是不需要改动)</li>
<li>定义一种新的 Markup Language (MML)</li>
<li>对W设备于Rails之间的通信进行再次封装(W Server,可能包括部分对W设备返回数据的解析)</li>
<li>定义基于 ERB 的新模板系统,生成 MML</li>
<li>辅助函数(比如 controller_map, action_map, render )</li>
</ol>
<p>除了这些意外,其余的开发和普通的 Rails 应用无异</p>
<p> </p>
<p>P.S. 只是我个人对这个问题的分析,不代表楼主的想法和具体实现</p>
<p> </p>
2 楼
myaniu
2008-07-28
楼主已经不错了。估计设计到商业秘密,不能再详细了。个人觉得给出这个思路就已经很不错了。以后遇到类似问题也可以做类似处理。
1 楼
baryon
2008-07-28
很棒!
你没有介绍自定义协议的细节。猜测客户端(W端)发过来的路由信息也需要一个routes.rb转发到controler和action上, 不需要分散做 controller_map_to :m 和 action_maps :index => "i" 这部分也许应该放到WSController 里
你没有介绍自定义协议的细节。猜测客户端(W端)发过来的路由信息也需要一个routes.rb转发到controler和action上, 不需要分散做 controller_map_to :m 和 action_maps :index => "i" 这部分也许应该放到WSController 里
发表评论
-
vi tips
2010-07-20 11:37 0These tips are just memo for my ... -
Setup PPTP VPN on ubuntu 9.10
2009-12-20 19:27 1864Something should be done to set ... -
交叉编译完全解决方案
2009-09-18 09:55 3692[注:本文仅适用于嵌 ... -
OpenCV+Ruby构建图像处理研究平台
2009-09-12 15:31 3043OpenCV OpenCV是一个很流行 ... -
Maemo下跑RubyGnome2
2009-09-09 20:07 2288稍微捣鼓了一下,RubyGnome2顺利在Maemo模拟器上运 ... -
GtkSimpleLayout Inspector
2009-09-06 20:01 1653Inspector介绍 Inspector是GtkSimple ... -
300行代码你能做什么
2009-09-02 14:12 4269我也标题党一回:300行 ... -
FAT over NAND Flash
2009-04-27 21:03 10703引子 最近有一个项目需要在NAND FLASH裸片上建立文件 ... -
UFFS嵌入式NAND FLASH文件系统 FAQ(1)
2009-04-15 19:03 0自从UFFS项目放到SF上, 陆陆续续收到不少邮件询问有关的问 ... -
Tips: 为源代码树打一个干净的包
2009-04-02 13:19 1918为源代码树打一个干净的包 ------------- ... -
Linux tips: allow more than 4 serial ports
2009-02-12 12:58 3823搞嵌入式的经常要和串口通讯打交道,在开发的时候有可能同时使用十 ... -
交叉编译Ruby傻瓜指南
2009-02-05 11:35 2790最近看到有人在交叉编译ruby的时候似乎碰到了许多问题(htt ... -
优化Debian/Ubuntu下的ruby
2008-12-30 19:27 2095我们都知道Debian/Ubuntu通过apt-get安装的r ... -
Debian/Ubuntu Tips: find the right package
2008-12-12 17:35 1110Debian/ubuntu下经常碰到需要安装某个程序,却一时想 ... -
Ruby/GTK应用笔记(3):垃圾回收
2008-09-14 08:39 2612虽然垃圾回收应该属于RubyVM自动处理的事,但是一旦涉及到C ... -
Ruby/GTK应用笔记(2): Gdk::Pixbuf
2008-09-01 17:08 3747Gdk::Pixbuf是GTK库极为重 ... -
Ruby/GTK应用笔记(1): Gtk::Toolbar
2008-08-21 13:04 1974由于Gtk的Toolbar内部接口发生了一些变化,在使用Gtk ... -
Ruby/Rails: 不一样的'Web'应用
2008-07-26 15:45 1468我不是Web程序员,也从 ... -
一个有趣的问题: 如何获取引用名?
2008-07-24 17:26 1364我们知道, 对于 a = 100 这样的一条语句, a是一 ... -
Ruby'陷阱'之: '||=' 的真正展开式
2008-06-27 20:14 8992前一段时间,我在这里htt ...
相关推荐
引用自Nathan Torkington的话:“使用Ruby on Rails就像观看功夫电影一样,看似弱小的新手框架却能够用各种创造性的方式打败众多强大的对手。”这句话生动地描述了Ruby on Rails的独特之处以及它在Web开发领域的影响...
Ruby on Rails(简称Rails)是一种基于Ruby编程语言的开源Web应用程序框架,专为敏捷开发而设计,强调简洁的代码和“约定优于配置”的原则。它主要用于构建数据驱动的Web应用,借助于MVC(Model-View-Controller)...
《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》:Ruby on Rails是一个全套的MVC web框架,它能帮你开发高质量又美观的web应用,而且开发速度快得出乎你想象。你只须集中精力于应用程序本身,Rails就会帮你...
自2004年David Heinemeier Hansson从其项目Basecamp中提取并发布了Ruby on Rails框架以来,这一框架已经成为Web开发领域的重要组成部分。经过多年的迭代和发展,Ruby on Rails 2.0于2007年12月发布,带来了许多重要...
- **历史背景**:虽然Active Record的概念并不是Rails所独创,但Rails是第一个将其广泛推广并使其成为Web开发标准的框架之一。 - **优点**:简化了数据库查询操作,提高了代码的可读性和可维护性;同时,它还支持...
Ruby on Rails(简称Rails)是一个深受开发者喜爱的Web应用程序框架,它以其“约定优于配置”、“DRY(Don't Repeat Yourself)”和“模型-视图-控制器(MVC)”的设计模式而闻名。然而,对于那些习惯于PHP语言的...
曲目:使用Ruby on Rails构建的GTD:trade_mark:兼容Web应用程序 关于 项目主页: : 手册: : 来源GitHub: : 托管服务: : 错误报告和功能请求: : 邮件列表: : IRC频道:Freenode上的#tracks,也可在 ...
Ruby是一种功能丰富的面向对象脚本语言,因Ruby on Rails(RoR)Web应用框架而广受欢迎。Ruby是解释型而非编译型语言,由Matz(Yukihiro Matsumoto)于1994年创建,用C语言编写,可以在任何拥有C编译器的平台上运行...
Ruby on Rails(简称Rails)是基于Ruby编程语言的开源Web应用框架,专注于简洁、高效的代码,使得开发快速、迭代简单。在"语言后端:Lin-guage应用程序的Ruby on Rails数据库"这一主题中,我们将深入探讨如何使用...
在Ruby开发中,高效地管理应用程序流程是至关重要的,特别是在生产环境中。`Procfile` 和 `Systemd` 是两种常用工具,它们可以帮助开发者模仿Heroku CLI的管理模式,确保服务的稳定性和可扩展性。让我们深入了解一下...
Rails,作为Ruby on Rails框架的核心部分,是开发Web应用的利器。当InfluxDB遇到Rails,便催生了`influxdb-rails`这一优秀的库,它旨在简化在Rails应用中使用InfluxDB的过程。本文将通过对`influxdb-rails`源码的...
Ruby on Rails 是一个非常流行的全栈Web开发框架,以其约定优于配置的哲学和强大的社区支持而闻名。然而,随着前端技术的发展,许多开发者希望在Rails应用中引入更现代的前端架构。Inertia.js Rails适配器就是为此...
Action Cache是ActionPack的一部分,主要用于提高Web应用的性能,通过缓存Action的输出来避免重复执行相同的数据库查询和计算。然而,在Rails 4.0版本中,Action Cache被从ActionPack的核心中移除,这一变动对开发者...
Ruby on Rails是一种流行的开源Web应用框架,用Ruby语言编写,遵循MVC架构模式。Rails的目的是让开发过程尽可能简洁和高效,因此它内置了许多自动化功能,使得开发者能够迅速地从零开始构建应用程序。Rails Recipes...
1. **轻量级**:Crêpe不依赖于大型框架如Rails,而是选择了一个更加精简的基础,只包含构建API所需的基本组件。这使得Crêpe可以在较小的应用场景中运行得更快,占用更少的资源。 2. **基于块的路由**:Crêpe使用...
增强的Ruby on Rails体系结构Ruby on Rails是许多人钟爱的出色框架。 但是随着您的应用程序的增长,您很快就会遇到一个问题,将这段代码或那段代码放在哪里。 从某种意义上说,它是Ruby on Rails增强体系结构Ruby on...
Ruby语言的不断发展和优化,加上强大的社区支持和丰富的插件库,让Ruby和Rails成为现代Web开发不可或缺的工具。随着学习和实践的深入,开发者可以更有效地利用Ruby语言的特性来创建高效、可靠的Web应用程序。
- **丰富的生态系统**:Ruby拥有强大的框架(如Ruby on Rails),这些框架极大地简化了Web开发过程。 - **跨平台能力**:Ruby可以在多种操作系统上运行,包括Windows、Linux和Mac OS X。 综上所述,《Programming ...
“Raillinstaller”是RailsInstaller的简写,它是Ruby on Rails开发环境的快捷安装方案,尤其适合不熟悉命令行操作或者希望快速启动开发的新手。 “windows”标签表明这个压缩包是为Windows操作系统设计的。在...
Python 和 Ruby 都是流行的高级编程语言,广泛应用于Web开发、数据分析、自动化脚本等多个领域。以下是对这两个语言的一些核心知识点的详细说明: **Python** 1. **基础语法**:Python 以其简洁易读的语法著称,如...