- 浏览: 202139 次
- 性别:
- 来自: 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=鱼与熊掌兼得
我不是Web程序员,也从来未开发过用户超过10个人的'web'项目:-),但这并不意味着web技术对我无用,正相反,我开发过许多和web技术有关的程序和库,web架构和思想对我的设计和开发有着很大的帮助。
例如我经常碰到要设计通讯协议以适应不可靠的传输,web的无状态特性正是克服不可靠传输的法宝,屡试不爽:-)
最近一段时间用ruby作了不少东西,也有用rails,但是从来没有对rails内部进行深究.直到最近碰到一个项目,促使我不得不到rails里面去挖掘,以借鉴rails一些优秀的东西。
这个项目非常有趣,是一套用于农场的自动化系统(所以使用者大多是奶牛,哈哈~),包含用于工人们佩戴的移动W设备,到处安装的RFID数据收集设备,闸门控制设备,电子称,显示屏....还有许多名目繁多的设备,这些设备的数据有的通过电缆,有的通过ZigBee无线网络汇集到一台服务器上,这台服务器跑Linux,运行Rails。服务器负责收集所有设备的数据,和发送指令给相关设备,例如控制闸门。
给我不断带来麻烦的是这个W设备。
W设备是这个系统里面除服务器外唯一和人打交道的设备,配有RFID数据收集器,一个小液晶显示屏,数个按钮,通过ZigBee无线网络和服务器通讯---典型的嵌入式移动设备。
客户起初对W设备的操作功能要求不高而对成本敏感,因此W设备配置了很低的硬件资源,基本上就是靠一个集成了无线功能的MCU操作,仅数十k的内存,但对于简单的数据收集和传输,绰绰有余。
然而好景不长,随着项目进行,客户对W设备赋予了更多更重要的角色,功能需求暴涨,且快速变化,更重要的是,要求日后能够定制功能(二次开发)。
Mission Impossible ? 不,这正是一个典型B/S架构的系统最适合做的事情了。当然普通web浏览器无法在W的数十k内存上跑,HTTP/HTML也无法有效的在ZigBee网络上传输,因此我们就新设计了一套通讯协议和标记语言,姑且称之为MML(Mini Markup Language)。
那么服务器端呢?已经有rails在跑用于收集/展示数据,输出报表之类的任务,可以利用rails来作为W的服务端么?
通讯问题,改改Webric,从串口(连接到ZigBee网络控制器)上获取数据并伪装成web请求,或许还可以...路由问题,由于ZigBee带宽极其有限,需要高度精简传输内容,因此传回来的请求串中包含的是非常简短的内容,需要转换到对应的Controller/Action,这个通过添加router映射似乎也可行。MML Render问题就比较头痛了,需要修改的地方不少。
考虑到修改rails可能工作量和分险比较高,于是采用另外一个方案:设计新的W Server,在W Server里面直接利用rails的资源。实际上,最终这个W Server直接放在rails应用程序的scripte目录下(也许vendor目录更合适),在W server里面只要加入:
然后就可以使用rails提供的任何资源了,当然对于W Server来说,最有用的是Models。这样W Server就和rails应用程序浑然一体了。
W Server有了rails这样强大的后盾之后,还需要有:Parser, Router,Server,Controller,和MML render.
Parser: 负责解析自定义的通讯协议,获取从W设备传来的请求,并解析参数等。
Router: 扫描并装载Controllers,缓存Controller对象,根据Parser的结果取得相应Controller的对象。Router还负责监控Controller是否已被修改和重新装载Controller.
Server: 总控制,从串口中读取数据,调用Parser解析,把结果传给Router,从Router中获取Controler对象并根据Parser结果调用Controller.Action,以及缓存Controller的输出等等。
Controller: 业务逻辑都在这里实现,调用rails的Models访问数据库。
MML Render: 使用erb作为模板文件,再加上一些辅助的功能,例如render link,menu之类的,和自定义的MML特性密切相关。MML Render作为module最终mixin到Controller里面。
可以看出,W Server模型几乎和rails的一样,在设计W Server碰到问题时经常探究在rails中是怎么解决的,因此倒是对rails的了解增进了不少。当然由于W Server的工作方式,目标和rails不同,因此复杂度就不可同日而语.
这个项目做完之后,我有几个感受:
* Ruby的开发效率真的很高
除去注释,full stack的W Server的全部代码少于千行,what a surprise!当然,这里沾了rails的光,省却了Models,还有erb拿来就用.然而相比之下,在W上光MML解析和Render部分C代码就超过2000行.
* 复用Rails真的很容易
在这个案例中,就是增加一行代码而已.
* Web技术,可以无处不在
Ruby/Rails = Make it real!
~文以共勉~
你也不认真看帖。
Parser: 负责解析自定义的通讯协议,获取从W设备传来的请求,并解析参数等。
Router: 扫描并装载Controllers,缓存Controller对象,根据Parser的结果取得相应Controller的对象。Router还负责监控Controller是否已被修改和重新装载Controller.
Server: 总控制,从串口中读取数据,调用Parser解析,把结果传给Router,从Router中获取Controler对象并根据Parser结果调用Controller.Action,以及缓存Controller的输出等等。
------------------------------------------------------------------------------------
Controller: 业务逻辑都在这里实现,调用rails的Models访问数据库。
-------------------------------------------------------------------------------------
MML Render: 使用erb作为模板文件,再加上一些辅助的功能,例如render link,menu之类的,和自定义的MML特性密切相关。MML Render作为module最终mixin到Controller里面。
俺就是觉得,这里rails的作用完全是辅助性的,而不是特别必要的的东西,我在这里把rails换成sms可以么?我看也成。
已改正,谢谢指正!
例如我经常碰到要设计通讯协议以适应不可靠的传输,web的无状态特性正是克服不可靠传输的法宝,屡试不爽:-)
最近一段时间用ruby作了不少东西,也有用rails,但是从来没有对rails内部进行深究.直到最近碰到一个项目,促使我不得不到rails里面去挖掘,以借鉴rails一些优秀的东西。
这个项目非常有趣,是一套用于农场的自动化系统(所以使用者大多是奶牛,哈哈~),包含用于工人们佩戴的移动W设备,到处安装的RFID数据收集设备,闸门控制设备,电子称,显示屏....还有许多名目繁多的设备,这些设备的数据有的通过电缆,有的通过ZigBee无线网络汇集到一台服务器上,这台服务器跑Linux,运行Rails。服务器负责收集所有设备的数据,和发送指令给相关设备,例如控制闸门。
给我不断带来麻烦的是这个W设备。
W设备是这个系统里面除服务器外唯一和人打交道的设备,配有RFID数据收集器,一个小液晶显示屏,数个按钮,通过ZigBee无线网络和服务器通讯---典型的嵌入式移动设备。
客户起初对W设备的操作功能要求不高而对成本敏感,因此W设备配置了很低的硬件资源,基本上就是靠一个集成了无线功能的MCU操作,仅数十k的内存,但对于简单的数据收集和传输,绰绰有余。
然而好景不长,随着项目进行,客户对W设备赋予了更多更重要的角色,功能需求暴涨,且快速变化,更重要的是,要求日后能够定制功能(二次开发)。
Mission Impossible ? 不,这正是一个典型B/S架构的系统最适合做的事情了。当然普通web浏览器无法在W的数十k内存上跑,HTTP/HTML也无法有效的在ZigBee网络上传输,因此我们就新设计了一套通讯协议和标记语言,姑且称之为MML(Mini Markup Language)。
那么服务器端呢?已经有rails在跑用于收集/展示数据,输出报表之类的任务,可以利用rails来作为W的服务端么?
通讯问题,改改Webric,从串口(连接到ZigBee网络控制器)上获取数据并伪装成web请求,或许还可以...路由问题,由于ZigBee带宽极其有限,需要高度精简传输内容,因此传回来的请求串中包含的是非常简短的内容,需要转换到对应的Controller/Action,这个通过添加router映射似乎也可行。MML Render问题就比较头痛了,需要修改的地方不少。
考虑到修改rails可能工作量和分险比较高,于是采用另外一个方案:设计新的W Server,在W Server里面直接利用rails的资源。实际上,最终这个W Server直接放在rails应用程序的scripte目录下(也许vendor目录更合适),在W server里面只要加入:
require File.dirname(__FILE__) + '/../config/boot'
然后就可以使用rails提供的任何资源了,当然对于W Server来说,最有用的是Models。这样W Server就和rails应用程序浑然一体了。
W Server有了rails这样强大的后盾之后,还需要有:Parser, Router,Server,Controller,和MML render.
Parser: 负责解析自定义的通讯协议,获取从W设备传来的请求,并解析参数等。
Router: 扫描并装载Controllers,缓存Controller对象,根据Parser的结果取得相应Controller的对象。Router还负责监控Controller是否已被修改和重新装载Controller.
Server: 总控制,从串口中读取数据,调用Parser解析,把结果传给Router,从Router中获取Controler对象并根据Parser结果调用Controller.Action,以及缓存Controller的输出等等。
Controller: 业务逻辑都在这里实现,调用rails的Models访问数据库。
MML Render: 使用erb作为模板文件,再加上一些辅助的功能,例如render link,menu之类的,和自定义的MML特性密切相关。MML Render作为module最终mixin到Controller里面。
可以看出,W Server模型几乎和rails的一样,在设计W Server碰到问题时经常探究在rails中是怎么解决的,因此倒是对rails的了解增进了不少。当然由于W Server的工作方式,目标和rails不同,因此复杂度就不可同日而语.
这个项目做完之后,我有几个感受:
* Ruby的开发效率真的很高
除去注释,full stack的W Server的全部代码少于千行,what a surprise!当然,这里沾了rails的光,省却了Models,还有erb拿来就用.然而相比之下,在W上光MML解析和Render部分C代码就超过2000行.
* 复用Rails真的很容易
在这个案例中,就是增加一行代码而已.
* Web技术,可以无处不在
Ruby/Rails = Make it real!
~文以共勉~
评论
13 楼
Readonly
2008-09-04
文章中提到的Router, Server, Controller, MML Render都和rails有密切关系
其实你就是在这些所有地方把rails换成ASM可以么?全国人民看也成。
其实你就是在这些所有地方把rails换成ASM可以么?全国人民看也成。
12 楼
ray_linn
2008-09-04
Readonly 写道
ray大叔又来掺和技术贴了?而且还回帖不认真看帖
文中提到的W Client和你的RIFI控制台有任何共同点么?它上面如果能运行Ruby GUI,rubynroll也不需要文章中的这种做法了。
文中提到的W Client和你的RIFI控制台有任何共同点么?它上面如果能运行Ruby GUI,rubynroll也不需要文章中的这种做法了。
你也不认真看帖。
Parser: 负责解析自定义的通讯协议,获取从W设备传来的请求,并解析参数等。
Router: 扫描并装载Controllers,缓存Controller对象,根据Parser的结果取得相应Controller的对象。Router还负责监控Controller是否已被修改和重新装载Controller.
Server: 总控制,从串口中读取数据,调用Parser解析,把结果传给Router,从Router中获取Controler对象并根据Parser结果调用Controller.Action,以及缓存Controller的输出等等。
------------------------------------------------------------------------------------
Controller: 业务逻辑都在这里实现,调用rails的Models访问数据库。
-------------------------------------------------------------------------------------
MML Render: 使用erb作为模板文件,再加上一些辅助的功能,例如render link,menu之类的,和自定义的MML特性密切相关。MML Render作为module最终mixin到Controller里面。
俺就是觉得,这里rails的作用完全是辅助性的,而不是特别必要的的东西,我在这里把rails换成sms可以么?我看也成。
11 楼
Readonly
2008-09-04
ray大叔又来掺和技术贴了?而且还回帖不认真看帖
文中提到的W Client和你的RIFI控制台有任何共同点么?它上面如果能运行Ruby GUI,rubynroll也不需要文章中的这种做法了。
文中提到的W Client和你的RIFI控制台有任何共同点么?它上面如果能运行Ruby GUI,rubynroll也不需要文章中的这种做法了。
10 楼
ray_linn
2008-09-04
我们公司也用RIFI,每一个托盘上都有,用的是MFC。
看不出这个项目有什么必要用Web,rails不过是画蛇添出足的那只脚。真需要用ruby,直接用ruby GUI来控制不是更方便快捷么?
我们公司的RIFI 控制台上,可以看到公司的布局以及 所有继电器的安装位置和状态,千万上万个托盘(托盘上的产品),在生产车间的流动--都是realtime.。这种需求对web来说太勉为其难了。
看不出这个项目有什么必要用Web,rails不过是画蛇添出足的那只脚。真需要用ruby,直接用ruby GUI来控制不是更方便快捷么?
我们公司的RIFI 控制台上,可以看到公司的布局以及 所有继电器的安装位置和状态,千万上万个托盘(托盘上的产品),在生产车间的流动--都是realtime.。这种需求对web来说太勉为其难了。
9 楼
rubynroll
2008-09-04
klesh 写道
应该是"屡试不爽",这里的"爽"是"爽约"的爽,是贬义
已改正,谢谢指正!
8 楼
klesh
2008-09-03
应该是"屡试不爽",这里的"爽"是"爽约"的爽,是贬义
7 楼
lyl0035
2008-08-15
强~顶了!
6 楼
My_Choice
2008-08-13
dazuiba 写道
这种方式利用web mvc framework的确很少见。
看来rails的用武之地也不仅仅在B/S结构中呀!
期待楼主有更多相关的文章!
看来rails的用武之地也不仅仅在B/S结构中呀!
期待楼主有更多相关的文章!
5 楼
rubynroll
2008-08-12
<div class='quote_title'>universac 写道</div><div class='quote_div'>楼主
你上面说的parser和server部分,主要读串口获取请求那部分也都是ruby写的吧?</div><br/>是的. 用的是ruby-serialport扩展:
http://ruby-serialport.rubyforge.org/
你上面说的parser和server部分,主要读串口获取请求那部分也都是ruby写的吧?</div><br/>是的. 用的是ruby-serialport扩展:
http://ruby-serialport.rubyforge.org/
4 楼
universac
2008-08-05
楼主
你上面说的parser和server部分,主要读串口获取请求那部分也都是ruby写的吧?
你上面说的parser和server部分,主要读串口获取请求那部分也都是ruby写的吧?
3 楼
hozaka
2008-07-28
其实我个人觉得 B/S 架构理解成为 User Agent - Server 比较合适一点。
可惜由于一直没有接触过其他的嵌入式设备,所以也没有如同楼主这样的开发经验了,不得不说是一种遗憾
可惜由于一直没有接触过其他的嵌入式设备,所以也没有如同楼主这样的开发经验了,不得不说是一种遗憾
2 楼
dazuiba
2008-07-27
这种方式利用web mvc framework的确很少见。
看来rails的用武之地也不仅仅在B/S结构中呀!
期待楼主有更多相关的文章!
看来rails的用武之地也不仅仅在B/S结构中呀!
期待楼主有更多相关的文章!
1 楼
liuming
2008-07-27
不错啊。楼主是不是在国外的
发表评论
-
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 1785Something should be done to set ... -
交叉编译完全解决方案
2009-09-18 09:55 3640[注:本文仅适用于嵌 ... -
OpenCV+Ruby构建图像处理研究平台
2009-09-12 15:31 2990OpenCV OpenCV是一个很流行 ... -
Maemo下跑RubyGnome2
2009-09-09 20:07 2228稍微捣鼓了一下,RubyGnome2顺利在Maemo模拟器上运 ... -
GtkSimpleLayout Inspector
2009-09-06 20:01 1601Inspector介绍 Inspector是GtkSimple ... -
300行代码你能做什么
2009-09-02 14:12 4143我也标题党一回:300行 ... -
FAT over NAND Flash
2009-04-27 21:03 10638引子 最近有一个项目需要在NAND FLASH裸片上建立文件 ... -
UFFS嵌入式NAND FLASH文件系统 FAQ(1)
2009-04-15 19:03 0自从UFFS项目放到SF上, 陆陆续续收到不少邮件询问有关的问 ... -
Tips: 为源代码树打一个干净的包
2009-04-02 13:19 1888为源代码树打一个干净的包 ------------- ... -
Linux tips: allow more than 4 serial ports
2009-02-12 12:58 3764搞嵌入式的经常要和串口通讯打交道,在开发的时候有可能同时使用十 ... -
交叉编译Ruby傻瓜指南
2009-02-05 11:35 2744最近看到有人在交叉编译ruby的时候似乎碰到了许多问题(htt ... -
优化Debian/Ubuntu下的ruby
2008-12-30 19:27 2045我们都知道Debian/Ubuntu通过apt-get安装的r ... -
Debian/Ubuntu Tips: find the right package
2008-12-12 17:35 1076Debian/ubuntu下经常碰到需要安装某个程序,却一时想 ... -
Ruby/GTK应用笔记(3):垃圾回收
2008-09-14 08:39 2571虽然垃圾回收应该属于RubyVM自动处理的事,但是一旦涉及到C ... -
Ruby/GTK应用笔记(2): Gdk::Pixbuf
2008-09-01 17:08 3684Gdk::Pixbuf是GTK库极为重 ... -
Ruby/GTK应用笔记(1): Gtk::Toolbar
2008-08-21 13:04 1922由于Gtk的Toolbar内部接口发生了一些变化,在使用Gtk ... -
Ruby/Rails: 不一样的'Web'应用(续)
2008-07-28 21:23 1241上一篇文章(http://www.itey ... -
一个有趣的问题: 如何获取引用名?
2008-07-24 17:26 1314我们知道, 对于 a = 100 这样的一条语句, a是一 ... -
Ruby'陷阱'之: '||=' 的真正展开式
2008-06-27 20:14 8845前一段时间,我在这里htt ...
相关推荐
《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》:Ruby on Rails是一个全套的MVC web框架,它能帮你开发高质量又美观的web应用,而且开发速度快得出乎你想象。你只须集中精力于应用程序本身,Rails就会帮你...
曲目:使用Ruby on Rails构建的GTD:trade_mark:兼容Web应用程序 关于 项目主页: : 手册: : 来源GitHub: : 托管服务: : 错误报告和功能请求: : 邮件列表: : IRC频道:Freenode上的#tracks,也可在 ...
增强的Ruby on Rails体系结构Ruby on Rails是许多人钟爱的出色框架。 但是随着您的应用程序的增长,您很快就会遇到一个问题,将这段代码或那段代码放在哪里。 从某种意义上说,它是Ruby on Rails增强体系结构Ruby on...
我不知道和那个要10分的版本是不是一样,白扣了我10分还没有下载成功,再次下载分不够了。 这个版本文字清晰,有需要就看看吧
自述 这是一个使用 Ruby on Rails 构建的简单保龄球模拟。 它是作为 Fullstack Academy 申请流程的一部分构建的,具有以下规格: 您的任务是构建一个模拟保龄球游戏的 Web ...像任何其他 Rails 应用程序一样启动它
显示关联Rails 目标 学完本课后,您应该能够... 创建has_many和belongs_to关联。 通过控制台和db/seeds.rb构建关联的数据。 使用关联提供的方法查询关联数据。 将关联数据嵌入视图中。 遍历显示单个实例的视图...
提到框架时,就不能不提到著名的框架:Ruby on Rails。 Rails 做得相当成功,因为它籍由最少量的编码,提供简便快速的网站开发。本质上,它是一个结构和一组工具,专为使用 Ruby 语言的用户开发,允许你快速建立 ...
在完成两个实验之后,您应该拥有一个像一样的成品(右键单击并Save Link As...以下载)。目标探索单页应用程序的目录结构。 设置路由和操作以通过Rails API提供JSON服务。 使用ActiveModelSerializers(AMS)gem将...
您已经知道了如何创建静态请求,在这里您将创建一个不带任何参数而仅呈现视图的页面。 例如: localhost:3000/about 。 为了使Rails处理此请求, routes.rb文件包含一条路由,例如: get 'about' , to : "static#...
调试,直到您的应用程序像目标一样工作! 随心所欲地运行rails grade ,以查看您的工作状况。 眼镜 单击此处查看每个测试的名称/ courses列出每个课程的标题 / courses列出了每门课程提供的术语 / courses列出每个...
RubyonRails框架(简称Rails或者Rails框架)是一个基于Ruby语言的越来越流行的网络应用软件开发框架。它提供了关于REST最好的支持,也是当今应用REST最成功的一个软件开发框架。Rails框架(从版本1.2.x起)成为了第一...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...