程序员创业指南与企业应用构建 - 第 2 篇
这是我讲述如何创办 SplendidCRM Software, Inc. 的系列文章中的第二篇。
引言
这是我讲述如何创办 SplendidCRM Software, Inc. 的系列文章中的第二篇。我希望我的创业经验能激励您。在我看来,创建一家公司可以是一次美妙的冒险。
第二篇文章
创业需要什么?需要一个产品或服务的想法;需要一个程序员(就是您);需要一台电脑(您已经有了);还需要一些开发工具(您可以从微软免费获得)。但最重要的是,创业意味着您必须开始行动。
不要被创业过程中的法律事务所困扰。您不需要律师或会计师来创办一家公司。您甚至不需要公司名称。您只需要一个程序想法,以及它最终能够盈利的希望或愿望。
在我创办 SplendidCRM Software, Inc. 一年前,我就开始编写最终成为 SplendidCRM 的应用程序。在我认为自己拥有了一些独特且有市场价值的东西之前,我并没有注册公司。当我之前提到我的产品旨在视觉上与其他产品相同,这时使用“独特”一词可能显得有些奇怪。关键在于,我的版本是一个独立创作,它面向的是对平台偏好完全不同的开发者。
如果您还记得我的第一篇文章,我通过重新实现现有的开源应用程序 SugarCRM 来开始 SplendidCRM。我越深入这个项目,就越意识到我正在创建一个更好的 CRM。我的实现速度更快;更容易定制;并且开发所需的人工时更少。我最终达到了一个意识到“我可以卖掉它”的地步。这时,我成立了一家公司。
开源的美妙之处在于,整个运动都建立在激励他人贡献的基础上,这是一个故意宽泛而模糊的陈述。虽然有些人可能认为您必须只使用相同的语言工具来为同一个项目做出贡献,但这种说法是不正确的。从 SplendidCRM 的下载量来看,我相信我的贡献得到了认可。
用 .NET 重新实现一个 LAMP(代表 Linux+Apache+MySQL+PHP)的产品的有趣之处在于,生成的应用程序可以在 Linux 上运行。虽然有些人可能声称 .NET 应用程序被“锁定”在 Windows 上运行,但我没有任何问题地在 SUSE Linux 上运行了 SplendidCRM。
在我的系列第一篇文章中,我收到了一些礼貌的评论,说从商业转向编程的过程有些突然。因此,请允许我用这几句话为您准备学习如何在 Linux 上使用 Mono 运行 SplendidCRM。此外,为了稍微缓解这种准备,我将从引用经典文学作品开始下一部分。
两个操作系统的故事
那是一个漆黑的暴风雨之夜,我决定要在 Linux 上运行 SplendidCRM。如果您是 .NET 开发者,您已经了解 Mono。Mono 是一个跨平台的、开源的 .NET 开发框架,它允许您在 Linux 或 Mac 上运行您的 .NET 应用程序。我一直关注 Mono 的进展多年,并且对其开发人员的进步和成就一直印象深刻。SplendidCRM 的目标与 Mono 的目标类似。SplendidCRM 的目标是采用一个 Linux 应用程序并为微软用户重新实现它,而 Mono 的目标是重新实现整个 .NET Framework,使其能在非 Windows 操作系统上运行,主要是 Linux 或 MacOS。要了解更多关于 Mono 的信息,请访问此链接。
使用 Mono 在 Linux 上运行 ASP.NET 应用程序需要什么?答案是:不多。如果您的应用程序是 100% 的托管代码,那么您的应用程序很可能在 Linux 上 unmodified 运行。一些较新的 .NET 3.0 功能,如 Windows Workflow、Windows Communications 和 Windows Presentation,在 Mono 2.4 中不受支持;因此,请注意。
SplendidCRM 在 2006 年 7 月首次被调整以在 Mono 上运行;最初的努力花了 5 个小时。三年前,我不得不创建我自己的 VisualBasic 类来支持一些简单的东西,比如 ControlChars.CrLf,或者 Information.IsDate。虽然这只花了很少的精力,但今天已经不再需要了。
一个需要相当大努力的领域与两个操作系统文件系统的差异有关。Linux 使用与 Windows 不同的斜杠,所以我必须确保使用 Path.Combine()
来构建路径,而不是手工构建。此外,Linux 中的文件名区分大小写,所以我必须确保所有对文件的引用都与文件名匹配。例如,在 Linux 上,Default.aspx 和 default.aspx 是不同的。
还有一些其他小问题,例如我无法直接在 Mono 上设置 CurrentCulture.NumberFormat.CurrencySymbol
,因为它是一个只读属性。解决方案是简单地克隆文化并修改克隆。对于 CurrentCulture.NumberFormat.CurrencyDecimalSeparator
也是如此。当然,如果您不开发 CRM,那么您可能不会创建国际化应用程序,所以您不需要覆盖货币符号或分隔符。
熟悉 Mono 的一个有趣的附带好处是,我能够利用 Mono 源代码中的一些 Cryptography 代码来管理 Amazon Web Services 所使用的证书。AWS 要求使用 X509 证书。虽然人们可能会认为微软自己的框架会提供处理公钥和私钥的能力,但这是它们缺乏的一个领域。然而,通过利用 Mono 源代码,我能够轻松地将 Amazon 的 PEM 密钥直接转换为所需的 PKCS12 证书,而无需先将其保存为文件,也无需使用 OpenSSL 工具。PayPal Service API 在创建 PKCS12 证书方面也有类似的要求。
我希望您能从中得出的结论是,采用 .NET 并不会将您锁定在微软生态系统中。有其他选项可以在其他地方运行 .NET,而 Mono 是当今的最佳选择。事实上,我敢说,我能够实现曾经是 Java 的存在理由的“一次编写,随处运行”的承诺。而且,您运行的平台越多,潜在的销售额就越高。
希望您喜欢本系列的第二篇文章。请关注未来两周内的第三篇文章。
历史
- 2009年6月5日:初次发布