在Parallels Desktop4上玩红警2
Parallels desktop升级到4.0, 已经很好支持DirectX, 装了个红警2消遣.
2个要点:
1. 虚拟机要启用3D加速
2. 需要安装到虚拟机的硬盘上,使用Shared Folder无法运行
比较爽的是,可以用窗口模式运行,呵呵,所以玩的同时还可以作别的事情.
Mono备忘
Mono最新版本是2.0, .net 2.0的跨平台实现(Windows,Linux,Osx).
Mono已经完全支持C# 3.0,包括LINQ, VB8(包括泛型).
Gui Toolkits
包括GTK#, Windows.Forms 2个主要的实现.(对于OSX,目前还有Cocoa#在开发中,对应于KDE则是Qyoto)
选择何种widget实现取决于mono程序的主要用户.
Linux/GNOME => Gtk#
Linux/KDE => Qyoto
Windows => windows.forms
OsX => Cocoa# (还不成熟且要对Cocoa很熟悉)
关于移植性
纯C#的第三方组件库,如果不使用P/Invoke,应该可以直接使用,.
这个页面跟踪了常见的商业控件的兼容情况
像Dundas,Infragistics这些明星控件的支持虽不是太完美,基本上也能用了, 还不错了.
解决兼容性的方式:
1. 使用条件编译
通过定义条件编译变量, 编译不同的target, 这样,可以在windows上直接用vs编译,使用.net
而其他平台用mono
2. 运行期检查
运行时检查运行平台,根据是否是mono或者.net 来执行不同的代码段,包括载入不同的assembly.
3.良好的设计
设计好接口和实现, 通过应用一些设计模式, 配合2
总之, mono对应跨平台的桌面应用,应该是超越java的选择, 从开发效率上说尤其如此.
从使用语言选择上看,C#,VB,IronPython都是不错的选择.
p.s.
前段看了下realbasic, 对比mono, 还是mono靠谱.
后面准备测试一下移植,把前几天作的几个工具移植过来玩玩,
毕竟,在mac上跑虚拟机还是有些不方便啊.
我最期待是Cocoa#, 从mono的调查来看,以后还有可能在iphone上跑,用C#开发iPhone应用,那就爽了.
其实几年前实现的SmartClient+PHP/Perl backend 模式现在看,一点都不过时啊.
鸡肋的.NET Framework Client Profile
做.NET开发,部署不是一件轻松的活,虽然有貌似轻松的ClickOnce, 但前提是客户机上已经有.NET FX安装。
对于企业应用来说,这不是问题,但是对于基于WEB分发的桌面程序,如何安装.NET FX就有点麻烦了。
一个FX动辄30M,最新的3.5SP1需要上百M,普通用户肯定会皱眉。
据说为了解决这个问题,在VS2008SP1和FX3.5 SP1,增加了一个.NET Framework Client Profile的选项,
Client Profile是3.5的一个子集,只包括CLR,ClickOnce,Window Forms,WPF,WCF,并且可以自动下载和更新需要的组件,
全部下载是~26M左右。
听起来似乎不错, 但是仔细看了说明,不免有些失望,Client Profile只是针对XP SP2以上,且没有安装任何FX的客户机。 如果安装了任何一个FX的XP或者是Vista,那么将会要求用户安装完整版的FX 3.5SP1…
如果你的应用没有使用3.5的特性,那么现在有2个target framework,可以选择:
for 2.0/3.0 和for client profile.
综合考虑,似乎选择2.0/3.0作为目标FX是最合算的,
对于VISTA用户,由于默认安装了3.0,所以可以直接部署。
对于没有安装FX的XP用户,2.0的大小比client profile还小些(~22M)。
看起来,client profile的优势是对于必须依赖3.5的应用了,在没有任何FX的XP上来说,
部署相对简单。
但是, 这不就是鸡肋么?
重新体验visual studio 2008
有1年多没有碰dotnet的东西了,上一次使用还是用的WPF,silverlight,dotnet 3.0做的一个3D特效演示,好像是vista刚出来没多久。这2天把t41的风扇处理了一下,还能用,于是就装了一个vs2008的试用版。MSDN的安装太慢了,尤其是最后合并索引的时候。
没有用过2005,原因是不支持.net framework 2.01.1/1.0, 2003使用的时间很长,有近3年的时间在用它做商业项目。vs2008之所以有兴趣是因为能够支持多个target framework了,可以用它来开发2.0/3.0/3.5的项目,毕竟3.5还是太新潮了,呵呵,遗憾的是仍然无法支持1.0/1.1的开发,仔细想了一下,部署1.1和直接部署3.5似乎没有区别,虽然vista自带的是3.0。(updated:太久没有关注dotnet,其实2.0,3.0,3.5基本上是一体,和1.0,1.1,2.0之间的关系不一样)
2008给我不少惊喜的,以前一直用vb.net, 看了看,有不少新鲜东西。 也许是很久不用vb了,不太习惯
它的语法,于是又体验C#,顺手用C#写了一个多tab的浏览器,很舒服,毕竟C#语法风格和我现在用的php,java,perl之类较为接近。
C#的设计器真是改进很多,2003的时候就是觉得窗体设计器不顺手,最后还是用vb.net做项目。
说起来,C#和VB.net切换起来是蛮快的,毕竟多数用的是.net framework的类库,至于语言风格和语法,也很难说一边倒,比如,C#中就没有实现My空间, vb.net的这个my非常方便好用. 真要快速开发,vb.net还是可以占上风的。
至于我自己,现在也没啥偏好了,抓住哪个用哪个吧,虽然C#语法亲切,不过vb.net用的时间毕竟那么长,拿起来也能用,写几下也就习惯了。
其实做惯了web应用,换下脑筋,写个桌面程序,还是挺惬意的。说真的,比作web应用舒服多了,一个人就能搞定一切,呵呵。
放弃Model对联合主键的支持…
本以为ActiveRecord支持联合主键并不是什么难事,不过,当实现了70%后,发现,不是技术上的问题,而是动机上出现了难易取舍的情况. 考虑到支持关联表, 联合主键并不是如此简单. 虽然多数也已实现,但目前看,造成部分代码的复杂度增加, 而我目前修改的初衷是裁剪和简化,我不想实现一个太重太全的ORM,这是PHP不是Java,我们需要快速和简单.
即便实现了,那么在今后的应用中造成学习曲线的上升, 目前的使用者势必会放弃这些所谓精心实现的”特性”.
所以,放弃了目前的实现, 重新回归到单一逻辑主键的支持上.
毕竟,在web应用场合,多数是逻辑主键的
毕竟, RoR本身也不支持联合主键(虽然可以通过第三方的extension获得支持)
所以, 安慰一下自己
就是可惜了那几千行的新增代码,呵呵, 砍吧.
