2009.07 08

谈应用托管与免费服务的弊端,云计算的风险

发表: keel 10:45:12 | 撰文 | Google AppEngine for java

目前国内的网络局势大家都很清楚了,google app engine在国内基本上用不起来,其实所有使用国外服务的应用都可能有同样的问题,所以把自己的应用建立在自己的平台和硬件设备上才是相对稳妥的办法,当然如果能够实现双保险更好。

另外,对于免费的服务,google的GAE平台还是相对比较好的,也经常出现这样那样的问题,真正商用的平台似乎不太敢上在上面。我也使用过DreamHost等服务商的免费服务,那个问题更是频繁得难以置信,动不动就数据库崩溃了。

而且,Google对于GAE的免费提供实际上也是招揽广大热情的“测试员”为其商用服务打基础,云计算服务并不是说“免费”那么简单的。在真正的商业模式下,业务数据是非常重要的,也是具有保密特性的,将数据存储在云端也有潜在的风险。

所以,计划年内将自己的平台上线。另外,开始将关注点集中到android平台,不再研究GAE了。


[继续阅读]

2009.06 01

进一步理解javascript对象、数组和哈希表

发表: keel 10:45:12 | 撰文 | javascript

在javascript中,对象实际上就是一个哈希表,比如下面这个user对象:
function user(n, a)
{
    this.name = n;
    this.age = a;
    this.toString = function() {
        return 'Name:' + this.name + ', Age:' + this.age;
    }
}
var u = new user('tom', 18);
for (var k in u) {
    alert('key: ' + k + ', value:' + u[k]);
}
稍作改动,使用Array对象来代替对象:
var user = new Array();
user['name']='tom';
user['age']=18;
user['toString']=function(){
	return 'Name:' + this.name + ', Age:' + this.age;
}
alert(user.toString());
更简单的写法:
var u = {
	'name':'tom',
	'age':18
}
u.toString = function(){return 'Name:' + this.name + ', Age:' + this.age;};
alert(u.toString());
由以上这些代码可以看出:
  • 所有的javascript对象,包括Array对象在内实际上就是一个哈希表,属性名称就是哈希表的key,而属性的值就是哈希表的值。
  • Array对象与通常意义的数组对象并不相关,通常的数组仅能通过下标来定位,而javascript中的Array却可以像哈希表一个通过key来定位集合中的对象。
  • 可以将一个function直接作为值赋给对象的“哈希表”。
前端时间看了阮一峰的 《数据类型与Json格式》 一文,提到在yaml描述数据时,将所有的数据分成三种类型:
  • 第一种类型是scalar(标量),一个单独的string或数字,比如“北京”这个单独的词。
  • 第二种类型是sequence(序列),若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。
  • 第三种类型是map(映射),一个键/值对(Key/value),又称作hash(散列)或dictionary(字典),比如“首都:北京”。
可能这三种类型我们都很熟悉,但文中提到的对json的四条规则却正好剖析了javascript描述数据的方式:
  • 并列的数据之间用逗号(“,”)分隔。
  • 映射用冒号(“:”)表示。
  • 并列数据的集合(数组)用方括号('[]')表示。
  • 映射的集合(对象)用大括号(“{}”)表示。
有了这四条规则(再加上对function的理解),对于很多看上去非常“诡异”的写法,都可以理解了。因此,一个javascript对象,实际上就是一个数组或是映射。
关于数组与映射的不同,可以看下面这个例子:
var m = {
	name:'keel',
	age:5
}
var a = [m,'sss',3];
//以下请求成功定位到name属性
alert(m['name']);
alert(a[0]['name']);//a[0]定位到m
alert(a[0].name);
//以下失败
alert(m[0]);//映射无法以数组下标的方式访问
  • 从定位到成员的方法来看,映射使用key来定位其中的成员,而数组使用下标,映射无法使用下标定位,同样数组也无法使用key(理所当然,根本就没有key);
  • 从表示方法来看,映射可以使用类似对象属性的方式来访问(如:m.name),也可以使用带key的[]方式(如:m['name'],这是javascript一个特例,看上去像数组,实际上仍是映射);但数组仅能使用下标的方式;
  • 从顺序来看:数组是有顺序的,映射是无序的;

[继续阅读]

2009.05 15

Google App Engine Java SDK 1.2.1 新版出现,JSP编码中文问题解决

发表: keel 20:45:12 | 撰文 | JAVA Google AppEngine for java

Google App Engine Java SDK1.2.1终于出来了!很荣幸地看到我提交的BUG(Issue1257)被作为重要的fix给补好了,从此jsp的中文问题彻底解决了!

这个1.2.1带来了这些新的变化:

  • 增加了对 appengine-web.xml, cron.xml, and datastore-indexes.xml文件的效验。
  • 新的<user-permissions>节点加入到appengine-web.xml中,支持定义第三方的权限系统。
  • 支持任意的无索引datastore properties。
  • 新增http proxy支持appcfg.sh
  • Response 限制从1MB扩大到了10MB!
  • 修复了Servlet version 2.5部分丢失的方法。
  • 修复了ServletInputStream 一些bytes读取时的符号错误。
  • Expect header,如100- continue现在会被忽略,不会引起500错误。
  • 内置的commons-logging-1.2.1.jar不再会覆盖用户自己的。
  • Groovy 权限支持了local runtime。
  • 解决了一些JRE上的Reflection错误。
  • <url-pattern>节点现在可以出现在<jsp-property-group>中
  • JSP使用UTF-8编码时无法正确编译的问题
  • 静态的welcome文件(首页,如index.html)现在优先于动态的welcome文件(如index.jsp).
  • 支持Thread.setContextClassLoader()
  • Content-Type not set in local implementation of URLFetch API .
  • AppCfg request_logs command is limited to 100 lines .
  • Timestamp added to datastore indexes file uses current locale .

此外还有一些对JDO/JPA的变化,都是一些很重要的fix和新的功能支持:

  • 修复了自定义@Order的问题
  • 支持字段限制
  • query literals支持doubles
  • 支持BigDecimal fields
  • 支持在持久化时使用类的父类
  • 等等其他变化……

[继续阅读]

2009.05 05

John Resig创建了新的processing.js和sizzle.js网站

发表: keel 09:55:12 | 撰文 | jQuery及其插件 javascript

John Resig创建了新的processing.jssizzle.js网站。
----注:John Resig就是大名鼎鼎的jQuery的作者。

processing.js:
其实早在一年前就已经released了,现在它终于有了官方站点,目前它主要由Alistair MacDonald 维护。在 Processing.js Google Group可以进行交流。

processing.js使用javascript实现类似FLASH动画的“神奇”效果,这让我想起了很多年前网上四处流行的“特效代码生成器”:满屏的雪花飘……钟表跟着鼠标跑……现在居然已成往事(那时候的好处就是不存在浏览器兼容问题),呵呵。看看processing.js,新一代的特效更酷更有魅力!这些DEMO让人不敢相信这居然是javascript而不是flash.

sizzle.js:
可能大家更熟悉了,jQuery新的高速选择器!我想大部分使用jQuery的人们首先都是被其优雅的选择器所吸引的,现在sizzle独立了,大家又多了一个选择,如果不喜欢jQuery日渐丰满的体型,可以单独使用sizzle,未压缩时只有24K大小,压缩后仅4K。

sizzle在使用时与jQuery是不同的,可以看一下它的文档,其实主要的方法就是三个'Public API',非常简单实用。


[继续阅读]

Pages:     1 | 2 | 3  >>