摘要: 转移到 www.easynew.com.cn/blog, 这里不再更新
阅读全文
posted @ 2010-10-09 08:50 jjx 阅读(56) 评论(0)
编辑
首先,且不讨论这个事件的本身,最近以来,我一直对ms感到失望,这是因为ms在开发技术的延续性上越来越随心所欲,当然,早期的开发者可能也经历过dao,dao direct,rdo,ado的时代,但那时的api 相对很小,学习坡度很小。而现在,自从.net 推出后 windows forms不更新了,wf 更新换代了,linq to sql 也死了,dlr也不管了。问题是这些替代者完全能胜任了吗?没有!!!!
好吧,现在就讨论silverlight ,或许这个人说的本身就没有错误,silverlight 本身就不能完全的跨所有的平台,虽然它现在能在部分osx和windows 运行,但远远不是真正的跨平台。只有html5 才能真正的跨平台。但是,无论如何,silverlight现在是作为wp7的主要开发技术之一,而wp7 却是你们目前要主推的东西。你完全可以这样说,silverlight 对我们还是很重要,作为wp7的主要开发技术,我们将继续发展silverlight 。但是没有, 从这些言论来看,个人觉得ms 目前派系斗争真的是厉害。就怕遇见猪一样的队友,肯定是没错的。我对ms的前景现在完全不抱乐观的态度,不在于ms有没有能力,而是现在他们这个内耗,实在是太匪夷所思了。 资源的争取不是靠打垮内部的另一个团队来得到的。
好了,现在这个言论,肯定会影响一批人使用silverlight了,包括我,因为silverlight 虽然有很好的开发模式,但是,它现在存在的大量的问题,无论是性能或是bug上,没有一个好的将来保证,真的不敢用。 这样的结果,估计ms很满意了,问题是,如果使用html5 ,你能把用户绑定到你的平台吗?使用websocket,json,服务器端无论是java/python/ruby ,哪个都不比你的弱!你有这个信心吗?
附带一下我的一段评论,可能更容易表达我的观点:
个人以为,这个ms的发言者犯了一个不必要的错误,没有必要讨论silverlight的跨平台,因为无论.net或是silverlight的clr,都没有真正的跨平台。其次是作为wp7的主要开发技术,他有可能不发展吗?这样的话你们推广wp7的后劲在哪里呢?
他的言论,造成不必要的恐慌。
其次,silverlight我认为对ms很重要,因为这是有效的平台的绑定工具,而html5 ,我觉的开发这里完全可以选择更强有力的服务器技术,如java/ruby/python之类的。而且html5浏览器技术竞争激励,其他厂商比ms有更快的应变和发布手段,更好的口碑。ms不会讨好。
所以,其实两者都很重要,但是如果ms内部真的要扬html,遏制silverlight话,真是个吃屎的决定
posted @ 2010-10-31 09:18 jjx 阅读(958) 评论(1)
编辑
昨天下午看俺的神的视频,同声中文说的是一团雾水,前面讲的是async以及避免ui冻结的问题。后来下载的async ctp,大致看了一下,多了两个关键字async/await ,看样子又是语法糖,但这个语法糖非常的有用,代码一下子清晰许多了。举个例子,将一个需要长时间执行任务的结果显示在一个文本框中,如下
有一个任务需要10秒才能完成
private int getTotalBytes()
{
Thread.Sleep(10000);
return 1000;
}
传统的同步方法
textBox1.Text=getTotalBytes();
在这10秒间,ui会被冻结,ui不会有响应,通常这是我们要避免的
有多种方法解决这个问题,线程,异步(异步实际上也是利用了线程池)或者是.net 4中的Task(其实也是线程包装),并且要考虑其他线程调用主线程ui上的问题(win forms 依赖ISynchronizeInvoke机制)
1. 用线程

代码
Thread t = new Thread(() => {
int result = getTotalBytes();
Invoke(new Action(()=>{
textBox1.Text = result.ToString();
}));
});
t.Start();
2. 异步回调
异步方法主要借助于deletage 的BeginInvoke和EndInvoke,看起来代码更加复杂些

代码
Func<int> t = getTotalBytes;
t.BeginInvoke(new AsyncCallback((arg)=>{
AsyncResult _result = (AsyncResult)arg;
Func<int> _t =(Func<int>) _result.AsyncDelegate;
string _s=_t.EndInvoke(arg).ToString();
this.Invoke(new Action(() => { textBox1.Text = _s; }));
}), null);
3. windows forms 中提供了一个backgroundWorker,从某种程度上简化异步方法的调用,他提供DoWork和RunWorkerCompleted两个事件,一个用来执行任务,一个用来做执行结果的处理,他能自动处理不同线程上调用主线程中ui组件的问题

代码
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (sender1, e1) =>
{
e1.Result = getTotalBytes();
};
worker.RunWorkerCompleted += (sender2, e2) =>
{
textBox1.Text = e2.Result.ToString();
};
worker.RunWorkerAsync();
在silverlight 中处理的手法也是类似的,同windows forms 不同,silverlight 更多的依赖异步处理,这同它host在浏览器环境中有关,因此,有些框架的api都有异步版本,如ExecuteSync,然后通过回调处理返回结果,如
db.Categories.ExecuteSync(arg=>{
Dispatcher.BeginInvoke(()=>{gridView.ItemsSource=arg.Results;});
});
在.net 4中,引入了Task这个概念,新的async ctp 建立在Task这个基础之上
简单的说await 这个新的关键字能等待Task<T>的执行完成并取得结果,在新的async,await 模式中,代码变得很简单

代码
private async void button3_Click(object sender, EventArgs e)
{
Task<int> t = new Task<int>(() =>
{
return getTotalBytes();
});
t.Start();
textBox3.Text = (await t).ToString();
}
async/await其实需要框架做一些调整,从早先的ExecuteSync 接受一个回调 ,到现在要返回一个或多个已经开始的Task<T>实例,所以,早期的框架要修改才能适应这个关键字,不过自己的代码,就可以使用这种模式来简化编程了。
posted @ 2010-10-30 10:42 jjx 阅读(335) 评论(1)
编辑
读了青春咖啡馆。那些地名和人物实在令人头晕。最让人迷惑的是当时处于一种怎样的社会背景,为什么这么多人想要逃离。露姬迷人之处在哪里呢? 我觉的她很自私啊。据说译后记有解释,但我下载的电子书没有.
或许有些事情是我们这些只顾埋头工作,或是在网上虚耗光阴,从不去酒吧,仅仅在某些场景(比方说吃饭或谈事情)才会去咖啡馆的人所无法理解的,不断的逃离,那是一种怎样的体验,对背负了太多责任的我们而言,那是连想都不敢想的事情吧
posted @ 2010-08-31 08:50 jjx 阅读(43) 评论(0)
编辑
1. 将工作平台从windows 转到ubuntu
2. 将工作重点转到web 开发
3. 做3`4个产品,平均 3个月作一个产品
posted @ 2010-06-13 10:59 jjx 阅读(41) 评论(0)
编辑
posted @ 2009-08-24 08:50 jjx 阅读(81) 评论(0)
编辑
摘要: django 1.1 的每个新特色都非常的喜欢管理界面1. action ,list_editable, 这两个特性都是针对changelist,action允许选择一些记录进行操作,而list_editable,则允许你直接在changelist中进行更新orm1. 聚集函数和F表达式(允许你引用其它字段)2. proxy ,允许你扩展已经存在的model3.managed=False 让你的m...
阅读全文
posted @ 2009-07-30 11:38 jjx 阅读(157) 评论(0)
编辑
摘要: migration 这种东西一般适用在数据库已经初步定型,可能已经在试运行,有业务数据的情况下。否则,用migration可能会花费额外的时间早先通常的流程是修改model定义,然后manage.py syncdb . 在使用south后,流程就改为①修改model②创建migration 脚本,自动或手动创建③用manage.py migrate app [x...
阅读全文
posted @ 2009-07-24 16:51 jjx 阅读(81) 评论(0)
编辑
摘要: zope 3有三种类型的组件,内容组件,适配器和实用组件1. 内容组件内容组件相当于我们平时常说的entity,model,比方说User,Category,Department,Order 都可以理解为内容组件, 例子classIUser(Interface):name=Attribute('name')password=Attribute('password')email=Attribute(...
阅读全文
posted @ 2009-07-22 10:04 jjx 阅读(94) 评论(0)
编辑
摘要: 花了半年多时间在django,当然,主要是做项目,研究的不算深入。但总体感觉而言,django现在的状态很适合刚进入python web开发的新手(全堆栈,良好的社区,良好的文档,较多的使用者,没有使用较多的魔术),它得确也能满足大部分需求,只是后期,大家可能要引入一些第三方的东西。 当你为了明确和优化查询,引入sqlalchemy后,你的项目就同时并存了django orm和sqlalchemy...
阅读全文
posted @ 2009-07-08 11:30 jjx 阅读(780) 评论(7)
编辑