主页

Node项目之评分系统(一)- 基本介绍

最近半个月,一直在学习 Node 的 Web 开发,使用的 Web 的框架为 express,模版引擎最后还是选用了 ejs,相对于 jade 不需要学习新的语法规则,并且方便粘贴一些 HTML 代码片段,减轻了前端设计的好多工作,而更多的注重在后台业务逻辑的设计。

前端 CSS 框架直接选用的 bootstrap,简单配置并且能得到不错的页面外观。最后数据库选择的是Mysql,没别的原因,相对熟悉一点,不过也在学习 mongodb 相关的知识,这个小的评分系统就直接使用 MySQL 做了。

所以这里针对 Node Web 项目的开发,在技术选择上是非常中庸的,如下:

  • Web框架: Express,没有选择 Koa 是因为还不了解两者的本质区别;
  • 模版引擎:ejs,没有选择 jade 仅仅是因为懒,不想重新学习语法,最重要的是网上 HTML 片段可以直接贴到ejs中使用,而 jade 不行;
  • CSS框架:bootstrap,暂时不知道有其他的选择;
  • 数据库:Mysql,前期仅仅为了熟悉,不过正在学习 mongodb,后面项目开发应该会选用Mongodb;

第一次使用 Node 做 Web 的开发,学习 Node 的相关知识其实也有一段时间了,只是从来没有动手写过一个完整的项目,这个评分系统可以算是我的第一个 Node Web 项目了。

最初想法

最初的想法是给部门学习会的评分使用,以往都是通过聊天工具发消息给统计人员,然后通过 excel 来统计评分以及计算平均分,这种方式感觉实在是太 low 了,并且碍于面子,所得分数基本没有差异化,于是秉着公正,公平,公开的理念,有了最初的想法。

实现的功能

  • 统计平均分,实时显示
  • 每个IP只允许投一次票
  • 管理员才可以添加、修改、删除等功能
  • 前台可以查看投票详情,但是看不到投票者IP

界面设计

全部使用 bootstrap 的基本组件,没有写一句 CSS 代码,前台页面分为 indexshow,后台页面有 adminloginedit 以及 showshow 页面公用,如果是管理员,显示出投票者 IP 以及可以做删除操作。界面样式如下图所示:

前台:

首页index

查看页show

后台:

登陆页login

后台首页admin

后台查看页show

后台编辑页edit

不足

  • 没有做用户管理(注册,登陆等)。由于在内网,并且使用并不是很频繁,没有考虑做用户管理,管理员用户直接在数据表中插入数据进行的账户密码验证。
  • 没有使用布局模版。由于页面比较少并且简单,编写前台页面的时候没有做模版复用,views 文件夹每个 ejs 文件代表一个页面。
  • 没有使用 js 以及 ajax 等异步验证功能。登陆页面直接后台逻辑匹配并刷新页面。

当然还有代码质量上的一些问题就不一一列举了,由于本人编程水平实在一般,第一次写 Node Web 项目,业余两天内完成的,诸多纰漏在所难免,忘见谅。

这里主要记录了该评分系统的一些基本信息,后面接着介绍一下,一些功能的具体实现,希望能帮到正在学习 Node Web 开发的诸位。

阅读更多

使用Nginx部署Hexo站点

在公司内网环境中,搭建一个静态站点,用于保存一些相关知识文档,并通过页面的形式展现出来。静态站点生成器这里我选择的是Hexo(一个基于Node实现的静态博客框架),而Web服务器首选当然是Nginx,简单高效。

1. 安装Nginx

这里我以Windows Server为例,安装非常简单,从官方站点页面下载Nginx软件包。下载完成后,直接解压到本地目录就行了。

打开cmd,进入Nginx目录,执行命令start nginx,然后你就可以在任务管理器中看到nginx的进程了。直接访问浏览器http://127.0.0.1,正常情况下,就能看到Nginx的欢迎界面了。如果不对,90%的可能是因为80端口占用问题,打开配置Nginx配置文件,修改一下默认端口就行了。

2. 配置Nginx

Nginx目录下打开conf/nginx.conf文件,部分内容如下:

...
server {
        listen       8080;
        server_name  127.0.0.1;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html;
        }
...

如上,将默认80改成8080,然后在访问http://127.0.0.1:8080就OK了。下面location就是欢迎页面的访问路径,进入Nginx目录下html目录,可以看到有个index.html文件,这就是欢迎页面。

那么如何将Hexo静态站点部署在Nginx服务器下呢?

3. 部署静态站点

通过Hexo g命令生成的静态站点,默认就是Hexo站点目录中的public文件夹。

将生成好的静态站点(也就是public/目录),拷贝至Nginx目录下的html文件夹中。然后修改Nginx配置文件。

...
server {
        listen       8080;
        server_name  127.0.0.1;
        location / {
            root   html/public;
            index  index.html;
        }
...

只是修改了root字段为public目录,其他地方都不变,然后重新加载Nginx,打开cmd,在Nginx目录下执行nginx -s reload,重新访问http://127.0.0.1:8080,就可以看到Hexo静态站点了。这里要注意浏览器缓存的问题

问题

  1. Hexo其实是提供hexo s命令来实时查看访问页面,如果在服务器端启动hexo s,在浏览器中同样也可以通过服务器IP来访问站点,并且能实时显示当前状态。但是,通过我尝试后发现,hexo s效率非常低,只能适合在线调试,不适合作为站点访问。
  2. 更新的时候,需要使用hexo g重新生成站点,然后将public目录拷贝到Nginx目录中html文件夹下即可。

阅读更多

Sumatra PDF - 轻量免费的文档阅读器

虽然目前看电子书的方式已经非常丰富了,但是我相信应该还有很大一部分人仍然在阅读PDF电子书,阅读PDF电子书就需要一个好的PDF阅读器,设备还是在电脑上比较合适,PDF电子书确实不太适合在手持设备上阅读,即使是iPad mini的7.9寸屏在阅读PDF的时候体验仍是非常不佳,更别说是在手机上阅读PDF了。这里推荐一款非常轻量的PDF阅读器 - Sumatra PDF。

说到PDF阅读器,大部分人首先想到的是Adobe公司的那个PDF软件,或者是福昕PDF阅读器(国内比较好的一款),当然这两款都是比较优秀的专业PDF阅读器,对于仅仅只是为了在闲暇时间看会电子书来说,这两款软件有些过于庞大。其实搜索「轻量级PDF阅读器」也能找到很多,但是最终我还是选择了它 - Sumatra PDF

在我心里,一个真正轻量级的PDF阅读器首先肯定是运行快速,界面简洁,功能简单,当然无需安装的绿色版就更好了。而Sumatra PDF正好满足我对轻量PDF阅读器的所有需求。启动迅速,界面简洁,功能单一(没有太多影响因素),打开电子书,专注于阅读就可以了。

它不仅支持PDF,同时也支持ePub,mobi,CHM等电子书格式,所以感觉它就是为阅读而生的。同时它提供了便携版下载(免安装),单一执行文件,直接运行exe软件就可以了。最难能可贵的是它是一个开源项目的,有问题随时提交Bug哦。

最遗憾的是它只支持Windows平台。

阅读更多

Sublime text - 最性感的编辑器

Vim被誉为『编辑器之神』,而emacs则被誉为『神的编辑器』,在程序猿世界中,从来都不乏编辑器的战争,而Vim和emacs是其中的佼佼者,争论则更加凶猛。当然真正的高手都是不屑于争论这些的,因为他们知道,适合自己的才是最好的。每一款编辑器都有其优势和劣势,发挥它的最大功效,提高自己的效率才是最重要的。这里要说到一款同样比较流行的编辑器–Sublime text。

对于Web开发者来说,应该对这款编辑器比较熟悉,个人觉得这款编辑器非常适合Web开发。针对页面的编写有非常好的体验。我个人就是因为Web的开发而接触的这款编辑器。可能是由于其漂亮的外观吧,被人称作是『最性感』的编辑器。

刚使用,还是有诸多的不便的,怎么装插件,怎么使用自定义?不过我愿意为它稍微改变一下使用习惯。下面简要介绍一下我刚开始使用遇到的一些问题。

1、设置代理服务器

工作环境需要代理才能上网,联网第一步就要设置代理,打开Setting-User(用户设定),添加http_proxy以及https_proxy属性值。

"http_proxy": "http://10.20.1.1:8888"
"https_proxy": "https://10.20.1.1:8888"

2、设置主题

还是Setting-User,添加或者修改font_face属性值就可以了。

{
  "color_scheme": "Packages/Color Scheme - Default/Dawn.tmTheme",
  "font_size": 16,
  "font_face": "Comic Sans MS"
}

这是我个人比较喜欢的主题和字体,并不是默认的那种黑黑的编辑框。这里再推荐一款主题flatland,通过插件管理器很方便就能找到它。然后在Setting-User中添加下面两句就行了。

{  
  "theme": "Flatland Dark.sublime-theme",  
  "color_scheme": "Packages/Theme - Flatland/Flatland Dark.tmTheme"  
} 

3、安装插件管理器以及插件

每一款优秀的编辑器应该都会有插件管理器,为了管理诸多的插件实现更强大的扩展功能。之前一篇文章里介绍了Vim的相关插件,用的插件管理器是Vundle。而Sublime Text的插件管理器叫做『Package Control』,安装方法不多说,网上很多教程。

Sublime text 2/3 中 Package Control 的安装与使用方法
Sublime Text 3 支持的热门插件推荐
Sublime Text插件的升级和卸载?

4、目录树

不像Vim编辑器,目录树需要安装NerdTree插件,Sublime text编辑器是默认带有目录树功能的。打开一个目录就会自动在编辑器左侧显示该目录的结构,并且通过添加目录到项目的方式,可以将多个不同的目录在目录树中显示,同时可以保存项目,产生一个.sublime-project后缀的文件,保存现有项目的目录树结构。这样可以便于在不同的项目中切换目录树。

5、多行编辑技巧

  • 鼠标选中多行,按下 Ctrl Shift L (Command Shift L) 即可同时编辑这些行;
  • 鼠标选中文本,反复按 CTRL D (Command D) 即可继续向下同时选中下一个相同的文本进行同时编辑;
  • 鼠标选中文本,按下 Alt F3 (Win) 或 Ctrl Command G(Mac) 即可一次性选择全部的相同文本进行同时编辑;
  • Shift 鼠标右键 (Win) 或 Option 鼠标左键 (Mac) 或使用鼠标中键可以用鼠标进行竖向多行选择;
  • Ctrl 鼠标左键(Win) 或 Command 鼠标左键(Mac) 可以手动选择同时要编辑的多处文本

阅读更多

teamviewer - 好强大的一款远程协助工具

这是一个强大的远程协助软件,teamviewer官网这样介绍它:

通过Internet进行远程访问和远程支持的一体化解决方案,TeamViewer可在几秒钟内连接到世界各地的任何PC或服务器上。您可以身临现场般地远程控制您伙伴的PC。

发现它对于我这个系统控真是最大的福音,因为我的设备基本上覆盖了所有系统,家里客厅一台Mac mini外加显示器(主力),卧室放着Windows10笔记本,公司宿舍里的Linux系统笔记本,办公室使用的是Windows7系统PC;移动设备也是iOS和Andriod并用。面对这么多系统,同步是个很大的问题,往往刚在Mac上写了一篇文章,然后上班了在公司PC上完成它,之后又想把手机里的一张照片附上去,最后再回到Mac上通过Hexo发布。所以同步和远程的需求非常强烈。并且把我养成了“只使用跨平台软件”的习惯,使用一款软件之前先确认其他平台是否都有。

通常情况下,大部分的任务都可以通过ssh连接终端来解决,但是有些时候还是需要一下桌面的,如果远程的是windows,那桌面就必不可少了。使用teamviewer时,只需要连接互联网,打开teamviewer软件,根据它所提供的ID以及密码就可以远程连接了,当然也可以将远程的电脑类似通讯录似的保存起来,方便下次的连接。

同时它也提供了会议功能以及桌面共享功能,当你正在远程其他桌面的时候,你会发现每一个windows窗口都有下图所示的小按钮,点击它可以设置与远程终端共享该窗口并进行演示。

同时也支持手机终端控制电脑桌面,下载对应App,还是通过ID连接到电脑,支持Android、iOS以及BlackBerry。可谓是基本上包含了所有的系统终端(貌似不支持windows phone),在不同的终端来回控制桌面。

闲之无聊,也许你会想和我一样尝试一下,当A控制B的时候,然后操作B再来远程A,会出现什么样的结果呢?会不会陷入一个循环的桌面呢?没错你猜对了,如下图所示。

最后,对于个人用户,该软件是免费使用的,所以直接上官网下载就可以了。

阅读更多

bitvise - 一款强大的个人免费SSH客户端

推荐一款强大的个人免费的SSH客户端,很长一段时间我都是使用puttywinSCP这两者来进行远程,一个负责命令行,一个负责文件传输,两个配合得非常完美,当初看上他哥两是因为够轻量,够简洁。

后来发现哥两虽然好,毕竟是哥两,操作比较频繁的时候,还是比较麻烦,特别是需要打开多个终端的时候。然后就发现bitviseSSH这一款SSH客户端,它简直就是上面哥俩的结合,使用起来更加方便了。

login之后,通过左侧的快捷按钮,New terminal console以及New SFTP window可以快速的打开新的终端以及新的文件传输窗口。

bitviseSSH是一款商业软件,包含有SSH服务器以及SSH客户端,但是SSH客户端针对个人用户是免费的,这才是关键。

阅读更多

inoreader - 让你的kindle也能用上RSS

这同样是一款类似Google Reader的RSS阅读器,它的优点:轻便、快捷、快速、优雅,balabalabala……百度上搜索inoreader介绍它的文章不在少数,这里就不多说了,推荐的目的就是让大家知道,然后去使用它,感受生活的美好,懒得搜索的直接点击下面链接就可以了,我帮大家搜索好了。

RSS阅读器大家或多或少都接触过,选择自己喜欢文章类型以及订阅喜爱的个人博客,各类RSS服务的用法都大同小异,这里不多说了,下面介绍一个关于inoreader独有的服务,针对kindle用户单独设计的一个在线阅读页面,让kindle用户也能优雅的享受到在线阅读的快感。了解kindle的应该都知道它最大的特点就是那电子墨水屏,得益于电子墨水屏,使得它的续航能力惊人,但是其极低的屏幕刷新率使得它根本无法正常浏览网页,所以kindle自带的那个体验版浏览器其实基本上就是个摆设,然而reabble却根据电子墨水屏单独设计了一个适合kindle阅读的页面,在页面全部是通过点击来完成RSS的阅读,体验非常棒。访问reabble.com使用inoreader帐号就能体验这个特别的页面。

当然,这么优秀的设计并不是一个免费服务,免费用户每天只能阅读15篇文章,而你只需花15元/年就可以解除这个限制,看清楚哦,是每年15元。好了,不多说了。没有kindle的也可以在网页上体验一下这个独特的用户体验。

阅读更多

让你了解相对论的一本书-《时间的形状》

《时间的形状》可能是我历时最短的一本书了,从翻开它到看完不到一个月的时间。对于好多人来说可能算是相当慢了,毕竟作者仅仅才花了42天就把这本书写完了,然而我看完却花了二十来天。惭愧!

这本书主要讲解了相对论的相关知识,虽然在之前已经将《上帝掷骰子吗》看过两遍,不过看完这本书,收获还是比较大的。本书的侧重点跟《上帝掷骰子吗》有所不同,本书着重对爱因斯坦的狭义相对论以及广义相对论进行了详细的讲解,更多的篇幅放在了宏观尺度的相对论上了。而《上帝掷骰子吗》则是更全面、更完整的描述了量子理论的发展史。所以,如果你想了解整个量子物理史,看《上帝掷骰子吗》这本书,绝对是不二之选;然而如果你想了解一下相对论的知识,看下这本书会有很大的收获。

针对什么是绝对时空观,什么是相对时空观,为什么在运动中时间会变慢,为什么在运动方向上长度会变短等等问题的答案,本书都做了一些讲解,而且非常容易理解,正如作者所说,这是一本课外科普读物,适合那些并不想懂那些费脑的原理,并不想去看那些复杂的公式,但是却又对这个神奇的世界有那么一丝丝好奇的读者。对了,那么你就适合去了解去读一下这本书。

总体来说,我是比较推荐这本书的,因为在某一方面确实学习并了解了一些知识。并且作者采用了一种比较有趣的对话式的叙事方式,比较有意思的将一些理论叙述出来,读起来还比较轻松并且容易理解。但是,书中好些地方为了增加趣味性,加了很多非解释说明的”括号内用语“,显得有些多余,读起来就不甚流畅了。

书中有一段《红色革命》的内容比较新颖,大体讲述了在爱因斯坦的相对论理论风靡全世界的时候,国内文化大革命期间和相对论的一些故事,从这里也看出在追寻真理的道路上从来都不是一件容易的事情,对那些坚持真理的学者表示由衷的敬佩。

书的内容比较有限,毕竟是作者才花了42天并且无私奉献出来的作品,但是从书中能大致学习并了解到一些知识,证明这就是一本好书。

阅读更多

溺水失去意识那一刻我想到了什么?

这是一个令人想起就觉得后怕的故事。可是,我为什么还要放在这上面呢?因为我想时刻提醒自己,珍惜今后的每一天,过自己想要的生活。

上周日,也就是6月28号下午,我跟媳妇一起去了一个水上乐园玩,仅仅只是一个水上乐园,在我心中就是一个小孩玩水和学游泳的地方,然而却发生让我仍感到后怕的经历,在我看来就像在鬼门关走了一遭似的。

家乡有一个水库每年都要「收人」,所以从小家里就不让我玩水,长这么大也基本不下水,潜意识里自己不会游泳,断然不会下河里去玩耍,但是也不明白水到底有多可怕。

水上乐园,这里并不是河,也不是我们镇上常说的水库,更不是湖或者海,仅仅只是用橡皮圈吹起来的一个可以盛水的水池。因为这样我并没有去注意我不会游泳的这个事实,并且水深只能没到我的胸口,更觉得不会有什么意外。

然而意外通常就是这么发生了,虽然水只能没过我的胸口,光在水里走来走去也没意思,于是爬上了大概3米高的小滑梯,准备从上面滑下入水,旁边十几岁的小孩都玩的很high,我完全没有意识到这种情况会让我溺水。

一秒的失重感觉后,就从上滑下,扑通一声进水了,进水后我才意识到,我完全不知道在水里该怎么办,站不起来,浮不上去,呛了一口水后,我开始手舞足蹈的乱滑,脑袋里最开始想的却是,旁边人看我这样会不会笑话我,认为我是故意在水里这么乱滑。再接着,就是感觉难受,因为喝了好多水,不管我怎么滑,就是没有办法站稳,伸手急速的拍打发出求救信号,想着旁边的人能发现我,扶我一把,也许我就能站起来了。然而过了好一会,依旧没有感到有人来拉我,渐渐意识开始模糊,最后想到的是我就这样完了吗?我的媳妇,爸爸妈妈该怎么办?然后我就失去了意识。

过了一会耳边远远的传来嘈杂的声音『拍后背…打120…快点…』,第一意识就是庆幸终于被人发现救过来了,耳边的声音越来越清晰,后来睁开了双眼,才发现我是趴在别人的膝盖上,后背不停被人拍打着,又过了几分钟,吐了两口呕吐物,就像喝醉酒呕吐一样,顿时觉得胃里舒服多了,被扶着站起来后,就开始感到头晕,应该是脑袋缺氧的缘故,好在我的意识是清醒的,走了几步,大致是没有问题了,只是感到嗓子不舒服,头有点重。

最后,救护车过来了,虽然我已经醒了,但还是跟着救护车去了医院做进一步检查,好在检查结果还算比较乐观,只是肺部有点感染。

输了几天液,身体也康复了,就是可怜了我媳妇,对我这几天的照顾,更是给她心中留下了阴影。她说,陪伴我的这几天一闭眼就是我刚从水里救上来的那个样子,面部青紫…

生命如此脆弱,一不小心也许就失去了,所以定要珍惜生命。


阅读更多