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:// ...
随机推荐
- 学习笔记:Hashtable和HashMap
学了这么些天的基础知识发现自己还是个门外汗,难怪自己一直混的不怎么样.但这样的恶补不知道有没有用,是不是过段时间这些知识又忘了呢?这些知识平时的工作好像都是随拿随用的,也并不是平时一点没有关注过这些基 ...
- .NET Framework 4.5.2 静默安装参数
Microsoft .NET Framework 4.5.2 是针对 Microsoft .NET Framework 4.Microsoft .NET Framework 4.5 和 Microso ...
- Python黑帽编程2.3 字符串、列表、元组、字典和集合
Python黑帽编程2.3 字符串.列表.元组.字典和集合 本节要介绍的是Python里面常用的几种数据结构.通常情况下,声明一个变量只保存一个值是远远不够的,我们需要将一组或多组数据进行存储.查询 ...
- R in Action 读书笔记(6)基本图形
MindMapper原文件
- AMD规范与CMD规范的区别
AMD规范与CMD规范的区别是什么? 在比较之前,我们得先来了解下什么是AMD规范?什么是CMD规范?当然先申明一下,我个人也是总结下而已,也是网上看到的资料,自己总结下或者可以说整理下而已,供 ...
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 按照存储结构划分btree,hash,bitmap,fulltext1 1.2. 索引的类型 按查找 ...
- PHP 知识点
__tostring() 注:能够直接输出对象 class Ren { public $name; function Run() { echo "跑"; } functio ...
- java.io中的System.in、 System.out和System.err
System.in, System.out, System.err这3个流同样是常见的数据来源和数据流目的地.使用最多的可能是在控制台程序里利用System.out将输出打印到控制台上. JVM启动的 ...
- JS原生第六篇 (帅哥)
复习 按钮不可用 disabled = "disabled" || true setTimeout 只执行一次 setInterval 执行很多次 递归调用 ...
- 08. Web大前端时代之:HTML5+CSS3入门系列 ~ QQ空间时间轴
Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 大前端系列,主要就是使用CSS3.0来实现,注释我已经打 ...