随笔 - 68  文章 - 1 评论 - 111 trackbacks - 0
<2012年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

昵称:jjx
园龄:4年6个月
粉丝:4
关注:0

搜索

 
 

常用链接

随笔分类

随笔档案

常去的地方

最新评论

阅读排行榜

评论排行榜

推荐排行榜

摘要: 转移到 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) 编辑
转移到 www.easynew.com.cn/blog, 这里不再更新
posted @ 2010-10-09 08:50 jjx 阅读(56) 评论(0) 编辑

读了青春咖啡馆。那些地名和人物实在令人头晕。最让人迷惑的是当时处于一种怎样的社会背景,为什么这么多人想要逃离。露姬迷人之处在哪里呢? 我觉的她很自私啊。据说译后记有解释,但我下载的电子书没有.

 

或许有些事情是我们这些只顾埋头工作,或是在网上虚耗光阴,从不去酒吧,仅仅在某些场景(比方说吃饭或谈事情)才会去咖啡馆的人所无法理解的,不断的逃离,那是一种怎样的体验,对背负了太多责任的我们而言,那是连想都不敢想的事情吧

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) 编辑