Luyan

追求,探索,研究,创新...
随笔 - 58, 评论 - 663, 引用 - 54

导航

关于


标签

每月存档

最新留言

广告

FreeDotNet邀请.Net技术爱好者共同建设网站

FreeDotNet有计划重新构建本网站,希望能在设计中尽量的使用到各种开源世界中的架构和工具,比如NHibernate,Log4Net,NUnit,AOP.Net, Spring.Net等等,同时综合.Net世界中的Duwamish,Petshop,DotText,Asp.net Forum,IBuySpy Portal等软件结构的设计,设计出一个门户型网站的框架。该框架将使用纯.Net语言(主要是C#)编写,能跨平台的运行在Windows,Linux,Unix之上,同时该项目本身也是开源的,便于大家的学习和交流。

想法很宏大,但是由于我本身时间和能力的关系,估计在短期内难以实现该计划,因此在此诚征.NET技术爱好者来共同努力和互相学习。

对该项目感兴趣的朋友请到FreeDotNet留言并留下联系方式。

posted on 2004-07-23 14:19:00 by 5drush  评论(28) 阅读(4625)

为什么要开源?

今天在CSDN上看到一个很热闹的帖子,是关于开源的话题的:

http://blog.csdn.net/chensheng913/archive/2004/07/19/45344.aspx

其实我个人对于开源的看法很简单,唯一的作用就是增加了思想的交流,促进了人类编程水平的发展,从这个角度上来说对我们开发人员来说还是有好处的。在文中所提及的关于“过度”开源会导致损害整个软件产业这个疑虑,个人认为不必太过担心。开不开源,都是作者说了算的,今天开源了,发现用的人很多,明天可以不开,做成收费软件赚钱,比如那个以前在CodeProject上的C# ListView控件;今天是商业软件的,市场占有率实在是难看,明天就开始考虑开源“做奉献”,比如SUN的中间件服务器。

到底开还是不开,每个人都有自己心里的小算盘,不过有的人更注重利益,有的人更注重成就感罢了,我不太相信IBM公司的董事会的成员都是雷锋同志。当然在国外也有不少开着私人飞机写着开源代码的“活雷锋”,站在自己的饭碗的立场来考虑,我其实不希望他们写出完整的商业应用软件放在网上让人免费下载,这个道理很明显,假如有现成免费的而且还比你做的好的软件,谁会给你埋单?在传统行业,如果价格竞争得太厉害了,出现了亏本拼血多的场面,物价局就会出面干涉,不许再降价了,因为你违反了市场规则,这叫恶性竞争,会损害市场。在国际贸易中还有相关的反倾销法来保证市场的良性循环。但是在软件行业似乎没有任何的相关的法律进行约束。其实我希望最好能有个法律要求所有的开源软件都不能作为商业用途;-)

大家一直都指责MS的不自由不开放,其实在我看来,幸亏MS没开放源码,那些盲目叫嚣开源的家伙们,其实根本不知道开源究竟对自己有没有好处,举个最简单的例子,假如WINDOWS,OFFCIE,SQL SERVER开源了,是什么结果?首先,号称国产软件旗舰的WPS项目第一个被金山CANCEL掉,专心干网游去了;红旗LINUX桌面系统也没什么开放自由的噱头了;就算不说ORACLE会倒闭,但至少ORACLE的客户要流失一半以上。。。一怒之下,大家都开源免费了,呵呵,结果自己想吧。

当然,这种情况只是假想,变成现实的可能性几乎为零,同时,由于有善于喊口号煽动情绪谋私利的和喜欢受感动为理想被利用的人们的同时存在,所谓的开源社区也会继续向共产主义奋斗,当然也会在相当长一段时间内保持在社会主义初级阶段。

开源,其实很简单,大家互相交流学习一下代码而已,如果你认为这就是裴多斐宁愿牺牲生命和爱情去追求的自由的话,那我就叫他自由吧,我虽然不能免俗但是我其实希望的是,不要想得太复杂,也不要给他戴上太多的伟大光环。

补充一下:在国外可能并没有把开源赋于“自由”的含义,因为Free这个词可以表示是自由也可以是指免费。

posted on 2004-07-20 14:56:00 by 5drush  评论(19) 阅读(3661)

论Mono的意义

下面这一段话是一个朋友在我的BLOG上给我的留言:

“目前的Asp.net 2.0已经将WEB与Mobile统一起来,想必Mono必定又得重新跟随,一堆的Adapter就够烦的了。 而微软、IBM的终极目标,如果我没有猜错的话,是将GUI、WEB、Mobile的开发统一起来,这个难度很大,没有M$的直接支持,估计Mono很难一直撑下去。
Asp.net 2.0号称支持230种设备,就目前这样的情况,Mono有这种实力去搞这种累死人的事情?
而且微软每次变化都很大,主版跳跃很快,1.1了直接就2.0,Mono要做Linux中的.Net必定要跟随着,这种“跟风”,用得人都很累,更不要说照着模仿做了。
而且我不看好的原因在于,以后的大一统,GUI与WEB,Mobile的大一统,这是一个耗人力物力的事情,没有像M$与IBM这样大集团不惜成本的支持,很难办到,支持Mono的Novell还是小了点。”

在这段话里,他认为Mono是一个没有意义和前途的项目,最主要的原因是Mono跟不上Microsoft的对.Net的更新速度(这里其实要补充一下,在Mono的开发计划中对.Net 2.0的完整支持是2005年第2季度,而.Net 2.0正式版也要到2005年才会发售也就是说Mono并不会比.Net慢多少。其实现在在Mono的安装目录中已经可以看到支持泛型的2.0版C#编译器)。

他可能想到了当年C++开发工具大战的时候,Borland C++因为操作系统上的原因,在技术上一直比Microsoft慢半拍,导致被淘汰的历史。其实,他犯的一个最大的错误是没有认识清楚Mono的定位,Mono开发出来并不是要和.Net竞争,要取代.Net,而是作为.Net的补充而存在。理解这一点非常重要。Linux的桌面环境远远比不过Windows,而且要赶上Windows是非常难的,是不是可以说开发Linux的桌面没有任何意义?可能大部分人都不会这么认为,Linux至少可以给用户带来另外一种选择,有时候用户并不希望选择最好最先进的,他可能希望能选择最便宜的,正如Mono,他并不是像Borland C++一样是收费的,他可以为你提供完全免费和开源的.Net运行环境,也许这个环境不如Microsoft的先进,方便,但是却便宜,还开源。假如你的预算比较少,而且喜欢开源,又喜欢使用先进的技术,那么Mono为你提供了这样一个选择。

这是对客户的意义。

如果说是竞争者,Mono的对手应该是Java,因为假如用户决定要使用Linux平台来构建企业级的应用的话,除了JAVA一般是没有选择。但是现在好了,作为一个比JAVA更先进,更开放,更自由的技术,Mono的出现打破了Java的垄断,Mono的出现将.Net的技术优势带到了Linux /Unix/MacOS平台,Java同时也失去了最后的一个胜过.Net的优势:跨平台。(也许有人认为还有一个比较成熟的优点,但是其实同时也失去了活力,看看对Web Service和泛型等的勉强支持吧,成熟的潜台词是快死了)

想想这样的情景,当竞标时,JAVA解决方案提供商在台上猛吹一通,哪怕在他们所列举的产品的十个优点中,有八个是Linux的,而你也不用像往常那样为Windows做辩护,你可以先告诉他们,你的产品也可以跨平台在Linux上运行,然后再来告诉他们盲目的追求开源其实对企业来说没有任何意义这个事实,这样会更加有说服力。

即使是当我们的客户拼命叫嚷着Windows病毒多,漏洞多,不安全,不开源的时候,我们的.Net开发人员照样可以使用平时很熟悉的,强大的Visual Studio .Net开发工具高效率的完成开发工作后,直接将应用部署到Linux或者Unix平台,而不是跟以前一样无可奈何的放弃。

这些是对开发者的意义。

所以,Mono的出现对于我们这些.Net开发人员来说绝对具有非常重要的正面意义,而对Java开发人员来说绝对具有非常重要的负面意义,所以这篇文章不可避免的会出现一大堆FUDers的口水,大家要拍砖的话,可以介绍大家到http://nluyan.vicp.net,这里是我用Linux + Asp.Net架的一个站点,大家在那里大喷特灌也不会打扰到博客堂的清静,同时还可以借大家的板砖来检测一下Mono的稳定性,两全其美,不亦快哉!谢谢了先!

posted on 2004-07-09 02:11:00 by 5drush  评论(28) 阅读(5983)

Linux下的Asp.Net配置指南

介绍了如何在Linux下配置Mono的XSP服务器和Apache Mono module来支持Asp.Net服务。

文章内容请点击这里

posted on 2004-07-07 20:41:00 by 5drush  评论(23) 阅读(7130)

FreeDotNet网站的Web服务器由Xsp换成了Apache2.0

采用mod_mono-1.0将Asp.Net的支持作为Apache挂的一个mod模块。

服务器地址:http://nluyan.vicp.net

posted on 2004-07-06 10:59:00 by 5drush  评论(12) 阅读(2768)

Mono的发展蓝图

《Mono的发展蓝图》(Mono Project Roadmap)是我以前翻译的一篇文章,原文是在200310月的PDC会议上被发表,描述了Mono项目的近期发行日程和远景计划,作者是Mono项目的发起人Miguel de Icaza。

查看文章内容请点击这里

posted on 2004-07-05 10:33:00 by 5drush  评论(5) 阅读(2468)

Mono安装指南

这篇文章是专门为以前从来没有安装过MONO的朋友准备的,写得很详细,特别是对Linux不太熟悉的朋友,看过这篇文章后应该能顺利安装上Mono。

文章详细请访问这里

posted on 2004-07-04 18:38:00 by 5drush  评论(18) 阅读(7881)

Mono安装指南

获取 Mono

目前可以通过以下四种途径获取 Mono 软件包 。

•? Mono 的官方网站下载发行版安装包:

这里提供了各种不同种类的正式发行版或阶段性发行版,人们可以自由选择所需要的类型。这里所提供的安装包一般都经过了测试,能正确的编译和运行。
下载地址在: http://www.go-mono.com/download.html

•? 日发行包:

假如你希望能密切的跟踪 Mono 的开发进展,或者你想看到 Mono 的开发历史脚步,你可以在 http://go-mono.com/daily/ 这个地址获取 Mono 的日发行包。日发行包包括了每一天 Mono 项目的开发进展。共分为以下 3 种不同的类型:

  • Mono: 这是一个可以进行编译的运行时和类库的源代码包(包含了 C# 的所有二进制控件)。 只要你有一个 C 编译器就可以编译和安装使用了。最新的版本可以直接通过 http://go-mono.com/daily/mono-latest.tar.gz 来下载。
  • MonoCharge: 包含了所有进行编译过的 Mono 的 C# 组件和可执行程序。可以使用它来全面更新你已安装的 Mono 类库和工具。
    最新版本可以直接通过 http://go-mono.com/daily/monocharge-latest.tar.gz 来下载。
  • MonoLite: MonoLite 包和 MonoCharge 包一样,也提供了让你更新 Mono 的能力,不过它只包含了最基本的核心类库 corlib, System, System.Xml 和 C# 编译器。
    最新版本可以直接通过 http://go-mono.com/daily/monolite-latest.tar.gz 来下载。

•? 通过 CVS 服务器获取 Mono 源码 .

CVS 是一个功能强大的源代码管理服务器。假如你认为每天更新一次的日发行包还是不能满足你狂热的追求最新代码的需求的话,那么还可以通过访问 Mono 的 CVS 服务器直接获取 Mono 正在开发中的源代码库,因为有可能你得到的代码是一分钟前由 Mono 的开发人员刚刚提交上去的。

在 Linux 下访问:

首先要确认你的系统上已经安装了 CVS 客户端软件,如果没有的话,可以到 http://www.cvshome.org/ 去下载。

在控制台下输入如下命令:

export CVSROOT=吐舌笑脸server:anonymous@anoncvs.go-mono.com:/mono cvs login (系统提示要输入密码,可以直接回车) cvs -z3 co mono

其中的 mono 为项目名称,也可以换成别的项目,例如 mcs 和 gtk-sharp 。然后就可以看到正在从服务器上下载文件, CVS 会自动在当前目录下建立一个和服务器上的目录结构保持一致的项目文件目录。

•? CVS 快照

Available for curious developers which do not necessarily want to install the CVS source. Baked daily.

Linux上安装

Mono 的分发包有两种形式,一种是源码包,需要手工进行编译,另一种是二进制包,可以直接安装。 源码包的适用范围比较广,能够适合几乎所有的 Linux ,但是步骤比较麻烦,所需时间较长。相反,二进制包的安装比较简单,但是适用范围比较窄,只能在某些特定的 Linux 系统下安装,典型的有 RedHat Linux 的 RPM 安装包。

核心的 Mono 分成了两部分:

•? C 组成部分(包含在 Mono 软件包中)

包含了运行 Mono 的所有必要成分,是 Mono 的运行环境。

•? C# 组成部分(包含在 MCS 软件包中)

包含了类库,编译器等使用 C# 编写的内容部分。

源代码安装:

源代码安装是指下载 Mono 的源代码,然后在本地进行编译,

假如你是下载的 Mono 的压缩安装包,可以输入以下命令进行解压缩:

tar zxfv mono-X.XX.tar.gz

其中 X.XX 是 Mono 的版本号。

解压缩完成后,将会看到在当前目录下的一个子目录,名称一般会是: mono-X.XX 。

进入该子目录,输入: ./configure

你将看到类似如下的状态信息:

[root@localhost mono-1.0]# ./configure

checking build system type... i686-pc-linux-gnu

checking host system type... i686-pc-linux-gnu

checking target system type... i686-pc-linux-gnu

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for gawk... gawk

checking whether make sets $(MAKE)... yes

checking whether to enable maintainer-specific portions of Makefiles... no

checking host platform characteristics... ok

checking for gcc... gcc

checking for gcc... (cached) gcc

checking for C compiler default output... a.out

checking whether the C compiler works... yes

checking whether we are cross compiling... no

checking for suffix of executables...

checking for suffix of object files... o

中间略过 …

config.status: creating Makefile

config.status: creating include/Makefile

config.status: creating include/private/Makefile

config.status: creating doc/Makefile

config.status: executing depfiles commands

config.status: executing default commands

GC: included

ICU: no, if you want full i18n support download it from: http://oss.software.ibm.com/icu/index.html

NPTL: yes

SIGALTSTACK: yes

Engine: Building and using the JIT

这表示 configure 程序正在配置 Mono 的 Makefile 文件,为下一步编译 Mono 做好准备。假如在此过程中出现了异常中断,并且目录中也没有生成 Makefile 文件,则需要根据系统提示找出出现错误的原因,一般可能是因为缺少某些编译 Mono 所必须的软件,例如假设你没有安装 Gnome X-Window 的话,则需要手动安装 pkg-config 和 glib-2.0 ,这两个软件可以分别在 http://www.freedesktop.org/Software/pkgconfig ftp://ftp.gtk.org 处下载。

接下来就可以开始编译 Mono 了,直接在命令行输入 make ,你可以看到类似如下的输出信息:

[root@localhost mono-1.0]# make

make all-recursive

make[1]: Entering directory `/mono/mono-1.0'

Making all in libgc

make[2]: Entering directory `/mono/mono-1.0/libgc'

Making all in include

make[3]: Entering directory `/mono/mono-1.0/libgc/include'

gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../.. -I../../libgc/include -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -DGC_LINUX_THREADS -DMONO_USE_EXC_TABLES -D_GNU_SOURCE -D_REENTRANT -fexceptions -D_FILE_OFFSET_BITS=64 -g -O2 -fno-strict-aliasing -g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wcast-align -Wwrite-strings -c -o genmdesc-helpers.o `test -f 'helpers.c' || echo './'`helpers.c

/bin/sh ../../libtool --mode=link gcc -g -O2 -fno-strict-aliasing -g -Wall -Wunused

./genmdesc ./cpu-sparc.md cpu-sparc.h sparc_desc

make all-am

其中的由配置脚本生成的编译信息可能看起来会非常杂乱,不过不用担心,这些都是很正常的现象。另外在编译过程中,依赖不同性能的机器,可能需要的的时间会比较长,请耐心等待。

在编译完成之后,可以输入 make install 来进行安装,这个步骤会将 mono 的一些脚本和可执行程序复制到操作系统可以找得到的地方,默认情况是: /usr/local/bin 。

现在,你可以在命令行输入: mono ,假如出现了以下帮助信息(其具体含义在后面章节有详细介绍):

Usage is: mono [options] assembly

Runtime and JIT debugging:

--compile METHOD Just compile METHOD in assembly

--ncompile N Number of times to compile METHOD (default: 1)

--regression Runs the regression test contained in the assembly

--print-vtable Print the vtable of all used classes

--trace[=EXPR] Enable tracing, use --help-trace for details

--compile-all Compiles all the methods in the assembly

--breakonex Inserts a breakpoint on exceptions

--break METHOD Inserts a breakpoint at METHOD entry

--debug Enable debugging support

--stats Print statistics about the JIT operations

Development:

--statfile FILE Sets the stat file to FILE

--aot Compiles the assembly to native code

--profile[=profiler] Runs in profiling mode with the specified profiler module

--graph[=TYPE] METHOD Draws a graph of the specified method:

cfg Control Flow Graph (CFG)

dtree Dominator Tree

code CFG showing code

ssa CFG showing code after SSA translation

optcode CFG showing code after IR optimizations

Runtime:

--config FILE Loads FILE as the Mono config

--verbose, -v Increases the verbosity level

--help, -h Show usage information

--version, -V Show version information

--optimize=OPT Turns on a specific optimization:

peephole Peephole postpass

branch Branch optimizations

inline Inline method calls

cfold Constant folding

consprop Constant propagation

copyprop Copy propagation

deadce Dead code elimination

linears Linear scan global reg allocation

cmov Conditional moves

shared Emit per-domain code

sched Instruction scheduling

intrins Intrinsic method implementations

tailc Tail recursion and tail calls

loop Loop related optimizations

fcmov Fast x86 FP compares

leaf Leaf procedures optimizations

aot Usage of Ahead Of Time compiled code

precomp Precompile all methods before executing Main

那么恭喜,你已经正确的安装完成了 Mono 运行环境,可以在 Linux 下运行和编译 .Net 应用程序了。

卸载 Mono 也很简单,只要输入 make uninstall ,就会自动的删除所有安装的可执行程序和脚本。如果你希望重新编译安装 Mono ,则可以先输入: make distclean ,然后按照刚才的顺序输入: ./configure , make , make install 。

Windows上安装

Mono 本身是一个跨平台的环境,因此它完全可以在 Windows 平台下运行,也许你会发出这样的疑问:既然 Windows 平台上已经有了 Microsoft .Net Framework ,那么为什么我还要在 Windows 下安装 Mono 呢?

这是因为:

1 .虽然 Mono 和 Microsfot .Net 能在大部分的情况下保持兼容,但是 Mono 还有它自己的扩展部分,例如数量远远超过 Microsoft .Net 的数据库提供程序。

2 .方便调试。大部分的程序员还是习惯在 Windows 上进行软件开发,毕竟 Windows 的开发环境比 Linux 要好得多。比如可以在 Windows 下使用 Visual Studio 进行开发,然后直接调试对 Mono 的兼容性问题,而不用再切换到 Linux 下。

3 .可以查看 .Net 的类库源代码。 Mono 是开源项目,意味着你可以查看到类库的 C# 源代码,而 Microsoft .Net 就不能够看到。对于开发人员理解 .Net 类库的设计和实现是非常有帮助的。

首先需要到 Mono 的下载页面去下载 Windows 安装软件包,它其实是一个自解压的压缩包,因此不会在开始菜单程序栏中生成任何的快捷方式,实际上, Mono 自身还没有任何的图形界面,目前你只能在控制台中才能正确使用 Mono 。

目前这个 版本的 Mono 还不是很完善,在安装完成后,如果你直接进入目录下输入 mono 会产生一些找不到动态连接库的错误,所以还需要手动添加动态连接库的路径到 path 环境变量中,使用如下命令:

Path=%path%;c:\programe files\mono-1.0\bin;c:\programe files\mono-1.0\icu\bin

然后再到 bin 目录下执行 mono ,便可以看见正确的帮助提示信息。

posted on 2004-07-04 18:31:00 by 5drush  评论(3) 阅读(7159)

FreeDotNet初步建成,欢迎访问和提意见

FreeDotNet站采用的是Linux平台和Asp.Net技术(Mono),目的是为了创造一个.Net跨平台的试验环境,同时也证实了.Net跨平台的可行性,主要的研究方向是关于.Net项目的跨平台移植和.Net源代码探索,研究目标主要是Mono项目。

由于做这个网站时间比较短(两天),某些功能还不是很完善,而且暂时服务器配置和带宽都很差,希望大家在遇到问题时能够体谅,假如是Mono出了问题还可以给出修改方案,呵呵。

网站地址:http://nluyan.vicp.net

服务器地址:我家的阳台上咧嘴笑脸

posted on 2004-07-04 13:51:00 by 5drush  评论(21) 阅读(2387)

Powered by: Joycode.MVC引擎 0.5.2.0