libuv是node js 支持windows平台的产物,在unix用使用libev,而在windows下,则使用iocp. 最近基于libuv开发的c++版本和lua版本也出现了,分别是 node.native和luvit
从这里的评测看起来 ,node.native/luvit 都高出nodejs一点点,看起来还是语言的差异化造成的.当然,目前的node.native/luvit的状态还不能完全下这个结论
libuv是node js 支持windows平台的产物,在unix用使用libev,而在windows下,则使用iocp. 最近基于libuv开发的c++版本和lua版本也出现了,分别是 node.native和luvit
从这里的评测看起来 ,node.native/luvit 都高出nodejs一点点,看起来还是语言的差异化造成的.当然,目前的node.native/luvit的状态还不能完全下这个结论
两段代码,均输出同样的结果,大家比较以下吧
require 'rubygems'
require "builder/xmlmarkup"
xm=Builder::XmlMarkup.new(:indent=>2)
puts xm.html{
xm.head{
xm.title("History")
}
xm.body{
xm.h1{"Header"}
xm.p{
xm.text!("paragraph with ")
xm.a("a Link","href"=>"http://onestepback.org")
}
}
}
import groovy.xml.MarkupBuilder
def writer=new StringWriter()
def xml=new MarkupBuilder()
xml.html{
head{
title("History")
}
body{
h1("Header")
p("paragraph with"){
a("a Link",href:"http://onestepback.org")
}
}
}
println writer.toString()
<html><head><title>History</title></head><body><h1>Header</h1><p>paragraph with<a href='http://onestepback.org'>a Link</a></p></body></html>
不错的介绍
http://lucifr.com/139225/sublime-text-2-tricks-and-tips/
windows 常用的几个快捷
ctrl+r 快速定位方法或类
ctrl+shift+p 调用sublime 命令
ctrl+p 切换文件
ctrl+~ 显示控制台
f7 或ctrl+b运行 来自javaeye的讨论 http://www.iteye.com/topic/1119388?page=3
http://istyles.blog.163.com/blog/static/1811003892011828111418654/ 快捷键
增加groovy/nodejs build system
tools-build system -new build system…
创建Groovy.sublime-build
{ “cmd”: ["%GROOVY_HOME%\\bin\\groovy.bat","$file"], “selector”:”source.groovy”}
创建JavaScript.sublime-build
{
“cmd”: ["c:\\Program Files\\nodejs\\node.exe","$file"],
“selector”:”source.js”
}
注意,该代码运行在客户端!
{curl 8.0 applet}{curl-file-attributes character-encoding = “utf8″}{import * from CURL.GRAPHICS.ACTIVEX}
{let names:StringArray = {StringArray “code”, “channel”, “channel_count”, “name”,”voltage_standard”,”voltage_upper_limit”}}
{let domains:StringArray = {StringArray “String”,”int”, “int”, “String”,”int”,”int”}}{let labels:StringArray={StringArray “代码”,”路”,”总路数”,”名称”,”标准”,”上限”}}
{let fields : {Array-of RecordField} = {{Array-of RecordField}}}{for i:int=0 below names.size do let domain: Domain = {Domain.from-type {evaluate domains[i]}} {fields.append {RecordField names[i],domain = domain,caption=labels[i],nullable? = true}}}
{let cn:ActiveXObject = {ActiveXObject ClsId = |”{00000514-0000-0010-8000-00AA006D2EA4}”|}}
{let cnstr:String = ” Driver=\{SQL Server\};Server=(local);Database=earrow;Uid=sa;Pwd=;” } || SQLServerの場合{cn.Open cnstr}
{let sql:String = “SELECT code,channel,channel_count,name,voltage_standard,voltage_upper_limit from devices;”}{let rs:ActiveXObject = {cn.Execute sql}}
{let rds : {Array-of RecordData} = {{Array-of RecordData}}}{while {rs.EOF} == false do let rd : RecordData = {RecordData} {for i:int=0 below fields.size do|| {output {rs.Fields names[i]}.Value} let val:any = {rs.Fields names[i]}.Value {switch fields[i].domain.type case String do set rd[ fields[i].name] = val case int do set rd[ fields[i].name] = val } } {rds.append rd} {rs.MoveNext}}{rs.Close}{cn.Close}{rs.destroy-object}{cn.destroy-object}
{let rsg : RecordSet = {RecordSet {RecordFields {splice fields}}, {splice rds} } }
{let rg:RecordGrid = {RecordGrid width=16cm, height = 10cm, record-source = rsg,font-family = “宋体” } }
{value rg }
是ria 的那个curl (www.curl.com) 了,我关注这个东西很多回了,在这个网站上看不到报价,昨天转到日本网站上,才发现日本的网站才能算是主站. 才发现它的报价
http://www.curlap.com/products/price.html
saas或企业许可是1,500,000 日元 ,折合人民币是12.3万,有点贵,小项目肯定是不行,开发工具pro版本是59800日元,折合人民币是4903.6,一般可以承受.开发版是2.46万,不过限制20个客户端,而且不能商用.非pro的分布是免费的,但需要在线申请
不过curl 还是我见过的最轻量级的ria,无论是语言,还是运行时(虽然有8~9M),开发工具(30M). 运行速度非常快,如果仅仅是本地资源,也不需要许可,但昨天试了一下,一访问网络资源,就需要许可,除非你用localhost.虽然可以申请免费许可,但正规的途径还是要申请商业的许可,这个价格实在太贵了.
在abobe /ms都在拥抱html5的时代,curl还能走多远不得而知,但curl 得确是个不错的东西.符合我对ria 的最起码的认可条件(性能),有空我还是会在localhost玩玩这个东西的
即直接使用groovy.sql.Sql ,方法很多,总结一下比较有意思焦点在于,怎么创建Sql实例,Sql.newInstance 需要连接参数,所以最笨的方法就是从配置中获取import org.codehaus.groovy.grails.commons.*class SomeService { boolean transactional = true def config = ConfigurationHolder.config // set up the Sql object def sql = groovy.sql.Sql.newInstance( config.dataSource.url, config.dataSource.username, config.dataSource.password, config.dataSource.driverClassName)第二个方法是使用已有的bean dataSource,利用service或controller 自动注入的特性,同样的方式也可以得到sessionFactory等对象class SomeService{def dataSourcedef sql=new groovy.sql.Sql(dataSource)如果你需要在domain class中,也可以手动获取dataSourceimport groovy.sql.Sql
import org.codehaus.groovy.grails.commons.ApplicationHolder
import org.springframework.context.ApplicationContextApplicationContext ctx = (ApplicationContext) ApplicationHolder.getApplication().getMainContext();
def dataSource = ctx.getBean('dataSource')
def sql = new Sql(dataSource)
第三种,使用sessionFactory.currentSession.connection
class MyControllerOrMyService { def sessionFactory def methodname() { proc = "sql to call a stored proc" def conn = new Sql(sessionFactory.currentSession.connection()) def result1 = conn.rows(proc) def result2 = MyClass.Find("from MyClass where foo='bar'") return [result1, result2] } }当然,第四种方法也可以修改为手动获取模式,参考第二种大凡成功的web framework,如django/rails ,会拥有一个简单的(通常是activerecord模式)和sql支持很好的orm,而grails 则可能需要借助hibernate+sql的结合才能做到,下面同样列出如何使用hibernate的createSQLQuerydef sessionFactory
sessionFactory = ctx.sessionFactory // this only necessary if your are working with the Grails console/shell def session = sessionFactory.currentSession def query = session.createSQLQuery("select f.* from Foo where f.id = :filter)) order by f.name"); query.addEntity(com.acme.domain.Foo.class); // this defines the result type of the query query.setInteger("filter", 88); query.list()*.name;以上代码参考stackoverflow等多个网址,不再一一列出出处!
java comm api 2版本不支持我的usb串口, 3没有for windows 版本,后来使用rxtx,使用的是java comm api的例子代码. 使用的是事件模式.怎么也不通.
java的byte 是有符号的,180就变成-76,一开始觉的这个会不会有问题,google 一下后说write(int)其实就是写无符号byte,但结果还是不行.
到rxtx的网站上一查原来是漏了一句, serialPort.notifyOnDataAvailable(true),还以为给java comm api的例子代码给坑了. 不过回头再看例子代码,原来是自己不小心给删掉了. 乌龙,整整浪费了3小时时间.
事实上有符号byte对通讯发送过程是完全没有影响的,读的时候倒是要注意,不过可以使用DataInputStream包装InputStream,DataInputStream提供了readUnsignedByte(),readUnsignedShort()方法,可以让你避免转换
groovy/grails 资源
http://www.groovy.org.cn/blog/
http://groovy.codehaus.org/Grape 处理依赖的
精通grails系列
http://www.ibm.com/developerworks/cn/java/j-grails/
实战groovy 系列
http://www.ibm.com/developerworks/cn/java/j-pg/
精通Groovy 教程
http://www.ibm.com/developerworks/cn/education/java/j-groovy/index.html
《Groovy and Grails Recipes》翻译之旅
http://www.iteye.com/blogs/subjects/Groovy_Grails
实战 groovy
http://www.iteye.com/blogs/subjects/justjavac
Groovy系列目录
http://blog.csdn.net/hivon/article/details/4256296
朝花夕拾——Groovy & Grails
http://www.blogjava.net/BlueSUN/archive/2007/04/23/112978.html
groovy in action 中文翻译1-7章
http://www.groovy.org.cn/blog/wp-content/uploads/2011/08/groovy+in+action_%E4%B8%AD%E6%96%87.pdf
infoq grails 入门指南
http://www.infoq.com/cn/minibooks/grails
http://groovyquan.iteye.com/blog/264209
Beginning Groovy and Grails From Novice to Professional.pdf
Grails Persistence with GORM and GSQL.pdf
Groovy for Domain-Specific Languages.pdf
Groovy Recipes Greasing the Wheels of Java.pdf
Programming Groovy Dynamic Productivity for the Java Developer.pdf
The Definitive Guide to Grails, Second Edition.pdf
自行google 皮皮书屋 英文版的都有
Groovy 版本更新说明
http://www.infoq.com/cn/articles/groovy-1.5-new
html/js 是未来,在写了一些原型代码后,我决定正式启动marsx 纯web版本 ,代号是我早期参与过的一个项目 c3.
该版本将基于extjs 3.4/nodejs/mongdb等技术构建 ,详细信息参见 http://code.google.com/p/easynew-c3/
原型截图

ejs的block 使用<%- block_name %>的格式,其中body是默认的,即layout.ejs中定义了<%- body %>,则模板的所有内容均输出在这里. 例子
layout.ejs
<html>
<head>
<%- extrahead %>
</head>
<body>
<%- body %>
</body>
</html>
index.ejs
<% extrahead=”extrahead内容” >
这些都是body
如果extrahead内容很多,建议写在_extrahead.ejs中,然后
<% extrahead=partial(‘_extrahead.ejs’) %>
如果你不想新建一个文件,所以可以利用\n来换行,就是可读性差了些,也可以达到目的