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解决方案中的应用。无论如何,我都会尽力把内容介绍完整,还是希望广大读者朋友一如既往地支持我。
CloudNotes:一个云端个人笔记系统的更多相关文章
- CloudNotes云端个人笔记系统系列文章汇总
[CloudNotes版本更新信息与下载地址:http://cloudnotes.cloudapp.net/webapi/Home/Release] [CloudNotes RESTful API帮助 ...
- 20135202闫佳歆--week3 构造一个简单的Linux系统MenuOs--学习笔记
此为个人学习笔记存档 week 3 构造一个简单的Linux系统MenuOs 复习: 计算机有三个法宝:存储程序计算机,函数调用堆栈,中断 操作系统有两把剑: 1.中断上下文的切换,保存现场和恢复现场 ...
- 《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS
构造一个简单的Linux系统MenuOS 一.linux内核源代码简介 三大法宝(存储程序计算机.函数调用堆栈.中断)和两把宝剑(中断上下文的切换:保存现场和恢复现场.进程上下文的切换) 1.在lin ...
- Linux内核分析 笔记三 构造一个简单的Linux系统MenuOS ——by王玥
一.知识点总结 (一)Linux源代码简介 arch/x86目录下的代码是我们重点关注的 内核启动相关代码都在init目录下 start_kernel函数相当于普通C程序的main函数 linux的核 ...
- 使用Onenote & Evernote & VSC+Markdown构建个人笔记系统
Onenote & Evernote & VSC+Markdown构建个人笔记系统 umeowbing(转载请注明出处) 1 Why 笔记本太多,全部带着太重,查找起来也很麻烦-- 笔 ...
- Neeto-Vue:我为了记笔记,手写了一个为知笔记客户端
构建自托管的笔记系统 这两年各种笔记系统快速井喷,好像谁都能来掺一脚,app store随便搜索一个关键字就会有一大堆的结果,从老牌的印象笔记,Bear,MWeb,有道云笔记再到新星专注笔记之类,从买 ...
- 未能加载文件或程序集“Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5”或它的某一个依赖项。系统找不到指定的文件。
在创建ASP.NET MVC项目过程中发生了这个异常 未能加载文件或程序集"Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0 ...
- 未能加载文件或程序集“System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件
ASP.NET 运行时错误:针对类型System.Web.Mvc.PreApplicationStartCode的应用程序邓启动初始化方法Start 引发了异常,显示下列错误消息: 未能加载文件或程序 ...
- [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)
[原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥) nohacks 发表于 2016-5-29 17:12:51 https:// ...
随机推荐
- Myeclipse中web project各种常见错误及解决方法(持续更新)
创建web project时的问题 error:Install Dynamic web Module Facet卡住 solution:把网络关掉再创建就可以 Servlet error:The se ...
- PowerDesigner连接SQL Server
以前听说过PowerDesigner可以和数据库连接,根据在PowerDesigner创建的数据模型创建表.触发器.存储过程到数据库中.也可以将已有的数据库导出到PowerDesigner中为数据模型 ...
- ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习
一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...
- MySQL实现嵌套集合模型
MySQL实现嵌套集合模型 译文主要是介绍如何用MySQL来存储嵌套集合数据.在其中会增加一些自己的理解,也会删除掉一些自认为无用的废话. 这篇文章主要讲的是嵌套集合模型,所以邻接表不是本文的重点,简 ...
- C/C++ makefile自动生成工具(comake2,autotools,linux),希望能为开源做点微薄的贡献!
序 在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现 ...
- 激活jws.mono的图像处理
不得不说,jws.mono真的给我们带来了很大的便利,它免除了我们编译Linux.NET所带来的烦恼,节省了我们的时间.但是金无足赤人无完人,虽然jws.mono已经大致能够提供与我们自行编译相同的效 ...
- Atitit 设计模式的本质思考】
Atitit 设计模式的本质思考] 1. 世界就是有模式构建的1 1.1. 多次模式与偶然模式1 1.2. 模式就是在一种场合下对某个问题的一个解决方案."1 1.3. 模式需要三样东西. ...
- VS2012 VS2015 的项目配置模板及其目录
建立的项目多了的时候 , 就希望能自己配置好一个项目模板,以后建立的项目自动使用这个模板就省事了,不用每次都要改, 每个项目都要改了! 经不懈努力, 终于 发现了 vs2015,vs2012 (我只用 ...
- webservice返回值为Map类型的处理方法
在写一个webservice的时候,方法的返回值是一个复杂类型,处理方法是写一个结果类(Javabean)作为返回值.想着webservice方法返回值为Map的没写过,然后就试着写了一个简单的Dem ...
- 无法在“EntityFramework”已存在的情况下创建影像复制该文件的解决方案
问题产生的原因:你项目正在生成中你就打开浏览器预览了,导致这个问题解决方案:右击重新生成项目,等生成后再打开 “/”应用程序中的服务器错误. 无法在“EntityFramework”已存在的情况下创建 ...