CloudNotes:一个云端个人笔记系统


很长时间没有更新博客了,一直在忙着工作和生活琐事,虽然偶尔也有闲暇之时,但短短的几个小时空闲又未必能够静下心来。最近一个多月突发奇想,将自己在近一年前做的一个自己用的云端个人笔记系统重构美化了一下,增强了一部分功能,现打算开源公布出来,分享给大家,也会慢慢地向大家介绍整个系统所使用的开发技术和部署环境等细节。

背景

近一年前,我一直希望能自己开发一套轻量的个人笔记系统,需要的功能不多,能够在Windows桌面环境中保存自己的一些信息,并能够在不同的计算机之间共享这些信息就行了。如今市面上云端笔记系统搞得是如火如荼,良莠参差不齐,我又觉得自己也没必要用个类似Evernote这样高大上的服务。仗着自己之前有一个领域驱动的开发框架(Apworks),以及一些DDD和.NET的开发经验,于是就下定决心自己开发一个,顺便享受一把微软MVP的权益,将服务端部署到Windows Azure的虚拟机中。

经过一番设计和开发,今年5月份的时候整出了第一个可用的版本,当然用户只有我自己一人,也确实为我个人的工作提供了不少便捷。当然各个方面还是很不完善:没有用户注册功能、没有回收站和恢复删除的功能、没有多语言支持,没有方便的HTML编辑器用来编辑富文本内容,在性能和稳定性方面也有不少问题。总而言之,我都没打算将它继续发展下去,反正自己用用也够了。

半年时间,工作日都上班,忙上班的事儿,下班和休息日都忙家事,有相当一段时间没有打开Visual Studio过单纯的编码生活了。手痒痒总想继续进行Coding的工作,但又不打算白纸一张从头干起摊上一个高大上的项目,于是想起了之前开发的那个轻量的个人笔记系统,打算对它进行重构和改进。

全新的CloudNotes桌面客户端

经过一个多月闲暇时间的努力,CloudNotes 1.0终于可以跟大家见面了。新的版本不仅在用户体验上改进了不少,在功能方面也有所增强。

全新的登录界面

旧版的登录界面尽显屌丝气质,新版的登录界面不仅迎合了目前流行的“云”的元素,而且平展化的图片和SegoeUI Light字体,与Microsoft的理念遥相呼应,尽显奢华的内涵。

在新版的登录界面中,增加了新用户注册的功能,单击界面左下角的Register(或注册新账户)按钮,即可完成注册。当然,你不必担心自己的洋文水平,也无需对我的洋文水准提出质疑。如果你是使用的中文版操作系统,那么新版的CloudNotes桌面客户端就会是中文的,包括整个安装过程也都是中文的。

全新的主窗体界面

在新版的CloudNotes桌面客户端中,我采用了一套完整的图标集。这要感谢我的同事包杰,另一位微软MVP,为我提供的这套图标集,可以涵盖所有的功能图标(即使在图标集中找不到,我也会发挥程序员的基本技能:Photoshop,来自己创建图标)。另一个非常重要的改进就是,在新版的主窗体界面中,你可以看到一个非常方便的所见即所得的HTML富文本编辑界面,从此,你的笔记将告别单调的纯文本和烦杂的Markdown标记。

同样,CloudNotes会根据你的操作系统语言来决定是显示中文还是英文。当然,如果你比较闷骚,而且希望能够装一下X的话,你可以在设置对话框中,将语言从中文改成英文。

全新的功能和改进

在新版本的CloudNotes客户端中,增加或改进了如下功能:

  • 新增所见即所得的HTML富文本编辑功能,感谢YARTE开源项目提供的源代码
  • 新增用户注册功能
  • 新增笔记的临时删除(删至回收站)和永久删除功能
  • 新增回收站笔记的恢复,以及清空回收站功能
  • 新增客户端自动更新功能
  • 新增多语言支持:目前支持英语(美国)和中文(中国)两种语言
  • 新增客户端设置对话框(目前仅提供界面语言的设置选项)
  • 改进了功能性事件触发机制和异常处理
  • 修改了N个Bug

今后我将逐步扩展服务端API接口,并通过桌面客户端推送和发布新安装包的方式,为CloudNotes开发更多的实用功能。

开始体验

是否已经等不及了呢?让我们一起来试试新版的CloudNotes吧!请【单击此处】下载当前最新的安装文件,解压后,执行安装程序,即可完成安装。注意:你的电脑必须是Windows 7及以上版本的Windows操作系统(也支持服务器版本的Windows系统,但不建议将桌面客户端安装到Windows服务器上),并且需要安装.NET Framework 4.5.1。如果没有安装.NET Framework 4.5.1,也别着急,安装程序会自动帮你安装好的。

在安装完成后,会在开始菜单列出CloudNotes Desktop Client的文件夹:

在Windows 8.1的系统中,你将在应用程序列表中找到CloudNotes Desktop Client:

单击图标打开CloudNotes桌面客户端,在登录界面的左下角单击【注册新账户】按钮,在弹出的注册界面中输入用户名、密码和电子邮件地址,即可完成注册:

登录服务器的地址是默认填写好的,因此用户无需填写或更改服务器地址。成功注册后,即可登录CloudNotes桌面客户端,体验新版本带来的功能了。

安全性考虑

CloudNotes采用分布式的部署方式,其服务端由ASP.NET Web API 2.0实现,并被部署在Windows Azure的虚拟机上。桌面客户端与服务器之间通过HTTP进行通信(目前暂未支持HTTPS),通信内容均已加密,即使是保存在服务端数据库中的数据,也都是以加密形式存放的,因此,在一定程度上保证了用户数据的安全性。然而,世界上没有绝对安全的事情,因此,将自己的隐私搬迁到时髦的云端时,需要三思而后行,即便是使用了一个优秀的云端服务(比如Evernote),个人隐私的保护观念也需要铭记于心。

开放的源代码

微软都开源了,你还在等什么?CloudNotes的源代码是完全开放的(除了客户端/API通信的加密部分),如果你打算下载源代码进行研究,那么你可以直接通过git clone命令来获取最新的源代码。

git clone https://github.com/daxnet/CloudNotes

CloudNotes采用Visual Studio 2013 旗舰版完成开发,在最新的Visual Studio 2015 Preview旗舰版中,也能直接打开并编译CloudNotes解决方案。需要注意的是,如果你使用的不是旗舰版的Visual Studio 2013,那么你将无法打开其中的Design项目(因为它需要旗舰版中Modeling Project项目模板的支持)。如果你使用的是Visual Studio的旗舰版,请确保在打开CloudNotes解决方案文件之前,已经为Visual Studio安装了ApworksEntityProfile扩展,否则你将无法正确打开Design项目中的类图模型。

  • 如果你是使用的Visual Studio 2013旗舰版,请单击此处下载ApworksEntityProfile扩展
  • 如果你是使用的Visual Studio 2015 Preview旗舰版,请单击此处下载ApworksEntityProfile扩展

下载完成后,双击.vsix文件,即可将该扩展安装到Visual Studio中。之后,你就可以正常打开CloudNotes解决方案了。

当然,如果你使用的不是Visual Studio旗舰版,你仍然可以正确编译CloudNotes解决方案,但是你不能正确装载Design项目,不过这并不影响整个解决方案的编译和执行。我将在后续的文章中介绍这部分内容。

由于Visual Studio 2015和C# 6.0目前都是预览版,为了兼顾更多的Visual Studio 2013用户,我没有在代码中使用最新的C#特性,还是保持原来的语法结构。

后续的版本更新

将来我会以持续部署的方式,更新服务端Web API应用,同时会通过桌面客户端的自动更新功能,向已安装CloudNotes桌面客户端的用户推送最新更新包;同时我还会向新用户提供各个版本的完整安装程序。我可能还会与微软MVP包杰同学合作,一起推出面向Windows 8.1、Windows Phone 8/8.1的客户端程序。

技术文章

我又一次地打算写一个系列文章,来介绍CloudNotes案例的实现技术细节。以前我介绍过一个简单的面向领域驱动的购物网站Byteart Retail,那个案例包含了所有的源代码实现。与Byteart Retail不同的是,CloudNotes直接使用了Apworks框架,因此如果你希望深入地了解某些组件的实现细节,你或许需要移步到Apworks的代码库进行检索查询。我也曾打算写一个系列文章来详细介绍Apworks框架的开发和使用,但因为内容太多,加上上面提到的工作和生活原因,感到全方位地介绍这么多内容也显得吃力,感到力不从心。所以在更新了三篇文章后,也长时间没有更新了,希望能够得到广大读者朋友的谅解。对于CloudNotes这个主题,我还是希望能够尽自己的能力对其进行完整的介绍,但我措辞和行文都会尽显随意,以便缓和技术文章撰写时的紧张气氛。大致想了想,CloudNotes系列文章会有以下几篇:

  • 领域建模篇
  • Web API篇
  • 数据存储篇
  • 桌面客户端篇

系列文章的组织结构我还没考虑清楚,或许会按照上面的顺序依次介绍,也可能自己想到哪里就介绍到哪里。在介绍的过程中,会穿插介绍Visual Studio 2013/2015的一些特殊功能,以及Apworks在CloudNotes解决方案中的应用。无论如何,我都会尽力把内容介绍完整,还是希望广大读者朋友一如既往地支持我。