值得一看的 MSDN TV

MSDN Home感谢 kaneboy  提供的这个 Microsoft PDC 2003 的下载连接,Microsoft 网站上发布了 400 多个视频或音频片断,内容涉及 PDC 2003 上披露的一些新技术的相关信息、PDC 2003 实况以及一些采访,MSDN News 的两位主持人也同时出动了。

虽然只看了其中的几个,但觉得这个MSDN TV: Lap Around Longhorn 这个非常好,这个是由两位大名鼎鼎的重量级人物 Chris Anderson 和 Don Box “主演”的,在这个 TV 片断中,他们通过编写实际代码,提示了 Longhorn 中的一些新技术,如 Win FS、Indigo、Avalon 等,你可以在这个片断中看到他们对技术的激情、高超而快速的代码编写和演示技巧、同事间的合作无间等,注意到一个细节,Anderson 用的编辑器是 Emacs 吐舌笑脸

今年的 PDC 很不一样,大量相关信息通过 MSDNBlog 等渠道披露了出来,体现了 Microsoft 开放、共享、关注普通技术人员的作风,也足以弥补我们未能亲临现场的遗憾。

小气的神及博客堂杂志

小气的神的Blog上看到,他11月份的某天可能要来北京一趟,而且还提到要接见一下我与小马哥,呵呵,太棒了。小马哥,咱们是不是准备些红玫瑰呀?我感觉小气的神红玫瑰挺感兴趣的咧嘴笑脸

另外,这两天电脑坏了,上不了网,真正感觉到了无网的日子是如何的难过,还好,利用这段时间我学会了炒菜,现在会炒辣椒炒鸡蛋及小油菜了。虽然不一定好吃,但毕竟是自己做的。下次请小马哥还有小气的神尝尝,呵呵。看我义胆神厨的厨艺吧。

最棒的是,这两天发现博客堂的技术气氛越来越浓厚。可能是因为PDC的原因,大家都在探讨Longhorn以及Whidbey等细节。我是Whidbey的测试人员,可是到现在那八张光盘仍然未到,看来只能等MSDN里面的了。

刚才突发奇想,为什么我们不搞一个博客堂的电子杂志呢?挺好玩的,不是吗?这么多技术高手,这么多技术文章?

于是我策划了一个开发计划,不知道哪位同仁有兴趣参加。由于这是一个博客网站,所以肯定是基于RSS协议的,这样,大家可以通过RSS来阅读本站的所有内容,其实这也是一个Web Service,很利用编程。软件要求如下:

  1. 用户在界面上选择时间范围及一定数量的作者,然后软件自动通过Web Service下载这些博客的随笔文章。
  2. 下载的文章是XML格式,利用一个XSL模板将此内容转换为HTML格式。XSL模板以物理文件方式存储,供大家在高兴的时候进行美化。
  3. 自动生成Html Help Workshop的索引及编录文件,然后调用hhc应用程序将所有文章编译为CHM文件。
  4. 将生成的XML及HTML临时文件清空;
  5. 根据用户设定的时间,将此CHM文件发送给邮件订阅人员,所有邮件订阅人员存储在一个XML物理文件中,通过Web页面程序对其进行更新。主要包括两个字段,一个是邮件订阅人员的名称,另外一个是邮件订阅人员的邮件地址。
  6. 所有设置均支持命令行操作
  7. 支持功能复用,比如我可以利用此功能中的类库开发一个博客堂的客户端软件等等。

好了,先提以上五个要求,其中第三及第四可以参考NDoc这个开源项目中的源码(可以在http://sourceforge.net 上找到此源码)。

具体的情况我还没有想好,我希望就此开展一次编程大赛,我愿意提供奖品(如果Grace愿意提供更好了)。

现在大家可以先讨论一下此软件的架构设计,讲讲你有什么好的创意。

大家可以单独参加,也可以组队参加。

 

ORM是否降低了灵活性?

第一个疑问是,如果采用ORM,那么是否还需要存储过程?

存储过程的用处不仅仅是效率的提升,更重要的应该是提升了数据库对于系统中数据访问层的清晰度,数据库提供给数据访问层的,不再是一个通用的可以执行SQL语句的入口,而是更像接口函数一样的存储过程。

但是,ORM的出现,使得数据访问层在系统中的作用大大降低,由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。存储过程的作用也就变得模糊起来。

想想ORM诞生的一个原始动力,使我们可以在不需要了解低层数据库的基础上,就可以直接利用它,而不需要再去了解SQL这些数据库的东东。(Java环境中著名的Hiberate的意思就是冬眠,让数据库和SQL语句冬眠。)而再去写一个个的存储过程,反而违反了ORM的初衷。

OK,于是再引出第二个问题。如果我们在系统中全面采用ORM访问数据库(在.Net Framework 1.2中,这叫Accessing data with ObjectSpaces替代Accessing data with Ado.net),是不是降低了我们系统的灵活性了呢?

在实际的系统中,每个数据层决不仅仅就只是那统一的几个方法(返回所有数据、根据ID返回数据,根据Parent的ID返回Child数据,根据ID更新数据….等等…),为了让它工作得更好,我们总会根据具体的情况增加一些必要的方法(根据××返回记录行数…)或更特殊的方法。在这样的场合,ORM显得很笨拙,要实现同样的效果,需要费更多的周折。

不知大家怎么看待这个问题,有何看法和见解?哇,过十点半了,闪人,回家乐……

求职

希望能够在北京市CBD周围找一份开发或者开发管理类的工作。如果需要简历请发送件到[email protected]。如果大家知道类似的消息,请提供一下,十分感谢!

目前家里面揭不开锅了,真的想马上找一份工作。

Alpha 提供的Logo设计

Alpha兄弟提供的博客堂的Logo设计(从左至右候选号码分别为Alpha 1, Alpha 2, Alpha3)

十分感谢大家!!!!真诚的感谢大家!!!!!

不知道如何表达我的感动了尴尬的笑脸

希望大家能够帮着再多做几个首页设计,或者你在别的网站上看到非常不错的首页设计,也可以把URL告诉我们!还有Banner的设计。

Microsoft 发布了 XBOX Music Mixer

有 Xbox 的朋友有福了,微软近日发布了期待已久的 XBOX Music Mixer,可以让玩家把Xbox当成一个多媒体中心,可以在其上共享照片、音乐,同时还可以用幻灯片方式展现图片;体验CD回放、进行音乐DJ;并有增强的2D、3D视觉插件等等。更有意思的是,还可以让玩家使用Xbox唱卡拉OK,更华丽的操作介面、有效的音乐压缩模式、歌曲管理系统、音乐剪接…等,甚至还能透过“Xbox Live”进行付费音乐下载,更华丽的操作介面、有效的音乐压缩模式、歌曲管理系统、音乐剪接…等,甚至还能透过“Xbox Live”进行付费音乐下载。

Xbox Music Mixer 的特性列表:

  • PC to Xbox music and photo transfer: 可以将图片和媒体传达从 PC 传输到 Xbox 上
  • Karaoke: 卡拉OK
  • Xbox Media Player: 媒体播放器
  • Photo album viewer: 相册查看器
  • Rave mode: 音效模式
  • Xbox Live support: Xbox Live 支持,可以下载视觉插件、音乐,接收朋友联机游戏的邀请等

    在微软克服了Xbox平台的游戏来源不足之后,扩展其用途以吸引更多玩家,自然就成为微软的下一个目标。对于Xbox Music Mixer,微软有关人员声称:我们正在扩展交互式娱乐的定义,最大化地开发Xbox 的娱乐用途。另外,在 Xbox 的在线游戏服务功能 Xbox Live上,微软新推出的体育游戏新品牌XSN Sports可以组织玩家开展游戏比赛,比如组建虚拟球队、进行联赛等。这项功能对于视频游戏平台来说是全新的,而在一些PC游戏上,可以说是已经不新鲜了。另外,支持XSN Sports的游戏,现在可以通过网络与PC游戏对战,并支持无线局域网。

    因为微软的 Xbox 脱胎于 PC 架构,增加新功能十分方便,有很多玩家乐此不疲地将很多 PC 上的软件移植到 Xbox 上,大大扩展了Xbox 娱乐功能,虽然 Microsoft 本意并不想开放 Xbox 的一些技术,但其本质上的相对开放和较为封闭的 PS2 来比较,还是体现了相当大的优势。

    查看:Xbox Music Mixer 主页 (上面有很多 Screenshots)

     

  • 今天花时间把ObjectSpaces SDK看了一下

    SDK是EAP(Early Adopters’ Preview)版本的,这个版本可以跑在.Net Framework 1.1下面。整个并不复杂,用法也很简洁明了。

    /
        TableMappings.xml是一个描述表与实体对象的对应关系(表中的哪个字段对应实体对象的哪个Property)的xml文件。
        DataSource.xml是一个描述数据源信息(基本上就是给一个连接字符串)的xml文件。
        ObjectSpace类用来维护数据库与实体对象间的连接。
    /
    ObjectSpace os = new ObjectSpace(”TableMappings.xml”,”DataSource.xml” ) ;

    /
        ObjectContext是一个维护实体对象的类
    /
    CommonObjectContext context = new CommonObjectContext(os.ObjectMappings);

    /
        随手写的例子,一个Person类,假设已经定义好
    /
    Person kaixin = new Person();
    kaixin.FullName = “开心”;
    kaixin.Age = 27;

    /
        把这个实体对象加入到ObjectContext对象中
    /
    context.Add(kaixin);

    /
        通过ObjectSpace对象的Update()方法,把这个新增的实体对象写回数据库
    /
    os.Update(context, kaixin, UpdateOptions.Default);

    /
        通过ObjectReader对象把数据库中所有FullName为’开心’的数据读出来
    /
    ObjectReader reader = os.GetObjectReader(context, new ObjectQuery(typeof(Person), “FullName = ‘开心’” ) ) ;

    /
        遍历取出的数据,注意,从reader中取值不需要做Cast操作哦
    /
    foreach(Person p in reader) {
        Console.WriteLine(“Age of {0} is {1}.”, p.FullName, p.Age.ToString());
    }

    当然啦,如何在那个传进ObjectSpace构造函数的TableMappings.xml文件中定义好表与实体类,字段与属性的关系,是关键啦。这个文件中还可以定义Insert、Update、Delete用哪些StoredProcedure来处理等等,当然,也可以描述Parent-Child关系。

    直接在这里打的代码中的双引号会自动转成全角的,呵呵。