今天在DigitalOcean的机器上,安装blog
,打算作为自己的博客使用,不过在npm install
的时候,总是被系统kill
掉。
无奈因为买的最便宜的机器,内存只有500M,所以,只能使用虚拟内存使用。
这种被kill
的情况,也会发生在开虚拟机的时候。
命令如下:
因为一般我登录DO的服务器都是直接用root身份的,这样说起来是不安全的,一个不小心容易出事。
所以,以下命令,因为登录的身份不同,是可以把sudo去掉的。
沧浪之水清兮,可以濯我衣;沧浪之水浊兮,可以濯我足。
今天在DigitalOcean的机器上,安装blog
,打算作为自己的博客使用,不过在npm install
的时候,总是被系统kill
掉。
无奈因为买的最便宜的机器,内存只有500M,所以,只能使用虚拟内存使用。
这种被kill
的情况,也会发生在开虚拟机的时候。
命令如下:
因为一般我登录DO的服务器都是直接用root身份的,这样说起来是不安全的,一个不小心容易出事。
所以,以下命令,因为登录的身份不同,是可以把sudo去掉的。
最近看到有人来面试,当问道position:absolute
是如何定位时,总是答到
相对于`position:relative`来定位
好吧,我必须承认,绝大多数情况下,我们都是这样做的,所以看起来也就是这样了。
但,实际上,标准上写的是相对于第一个position
不等于static
的元素,如果没有这个元素,就相对于body
。
我觉得弄懂标准是一个前端必须的技能,就像在打字的时候就键盘的按键都处于什么位置,而不是按下去试一试才知道按下的是什么。
了解这个问题,可以在调试的时候少几次尝试和迷茫。
很久以前,“富数据web应用”(data-rich web)是一个矛盾的说法。但现在,这种web应用随处可见,并且你需要知道如何构建它们。
传统意义上来讲,web应用把繁重的数据放置在服务器端,服务器再把载入完成的HTML页面推向浏览器。因此,客户端那边的JavaScript被限制住无法提升用户体验。到了现在,这种情况被转变了——客户端应用可以在需要的地方,从服务器上拉去原始数据并在浏览器里面渲染这些数据。
想一下Ajax技术的购物车向里面添加物品的时候而不需要刷新整个页面。起初,jQuery成为处理这种需求的范例。它的原理就是发起Ajax请求然后更新页面里的文本以及其他东西。然而,这种jQuery所依赖的模式使得我们要把数据模型隐式的放在客户端。随着服务器不再是唯一知道我们物品数量的地方,这就暗示这种演变自然而然的会有一些波折。(不太会翻译,原文是:it was a hint that there was a natural tension and pull of this evolution.)
然而,随着与服务器交互的无规则的代码的增长,代码变得臃肿并且越来越复杂。好的架构在客户端上变得不可或缺 —— 你无法仅凭一些厉害的jQuery代码保持你的应用的健壮性。更有可能的是,你最终会在业务逻辑中陷入噩梦般的UI callbacks,最终也逃避不了被下一个继承你代码的人丢弃的命运。
谢天谢地的是,有很多并且还将有更多Javascript库可以帮助你提升代码的架构和可维护性,使得人们可以非常容易的构建健壮的界面而不需要付出太多的精力。Backbone.js 迅速成为解决这类问题的最流行开源框架之一,这本书将会带领你来进行一个深入的实践。
在刚开始学习基本知识的时候,通过一些练习,去学习如何在构建应用的时候,同时保持其组织性以及可维护性。如果你是希望自己写的代码拥有更好的可读性、架构、可扩展性,这份指南可以帮上你。
提升开发者的水平对我来说很重要,这也是为什么我给这本书使用 Creative Commons Atribution-NonCommercial-ShareAlike 3.0 Unported license.欢迎大家来修正存在的问题,并且我很希望我们可以保持社区一直都有最新的源码。
我还要感谢Jeremy Ashkenas 和 DocumentCloud 创建了 Backbone.js ,以及社区成员的贡献使得这个项目的发展完全超出了我的想象。
今天在写接受github的Webhooks服务时,使用了shelljs库,用来执行github发来的仓库更新信息。1
2
3
4
5
6
7
8
9
10
11
12
13
14var shell = require('shelljs')
var express = require('express')
var router = express.Router()
router.post('/',function(req,res){
// 打印出github发来的所有信息
console.log(req)
res.end('ok')
shell.cs('../') // 注意这行
shell.exec('git pull')
shell.exec('pm2 restart all')
})
结果怎么都提示Can't set headers after they are sent
,通常这个原因都是已经使用过res.send等方法之后,又去设置header或者status导致的,但是我已经结束了请求,然后执行脚本,按说不可能出现这种问题。
使用postMan
自己模拟请求,发现确实返回ok
,但是程序依然报错崩溃。
后来发现第11
行的一个代码写错了,应该是shell.cd('../')
,导致后面代码直接报错,不过我用pm2
看日志的时候没有发现undefiend is not a function
之类的信息,反而直接是express
报错。
当我修正这个之后,就没有问题了。通常看着Can't set headers after they are sent
这样的错误,都是直接去找处理请求方面的问题,没想到在之后代码报错也会产生这样的错误。
留下此篇,给看到的人提个醒。
webhook
是github
推出的一项免费服务,当仓库出现变动(push
、issue
变动等)的时候,会向仓库设置的指定地址,发送一个post请求,请求包括非常多的内容。
我自己开发的weichat.io
部署在DigitalOcean
上面,每次更新代码都要远程登录到服务器上手动更新代码。
我初中(2004-2007)的一个数学老师,曾经说过,聪明的人都是很懒的,当时用来举例如何用最简单的方式解决题目。近几年也有看到文章讲过类似的话。正因为懒,所以才会有这么多工具出现。
说了几句题外话,言归正传。一开始我找的方式是git hook
,指定某个行为之后执行某个脚本,脚本就是shell
。在网上搜了很多文章,觉得还是不够优雅。
无意中看到github
提供的webhook
服务,设置方便,还可以配置签名。
最近在做的项目中,需要用到往Redis中存入一些信息。之前都是用 JSON.stringify()
成字符串,再保存到Redis中,同时需要在Redis脚本中需要使用 cjson.decode()
命令,变成lua的table,再进行一些操作。
既然这样,那就不如用 MessagePack
官网。MessagePack
简称 msgpack
,按照官网上所说,它 like
Json,但是 fast
and small
,我一看,矮油,这个很好啊,正好我需要多次调用json对象的压缩和解析。
先安装它在node上的包 msgpack5
1
npm install msgpack5 --save
我在这里加上 --save
,这样在下载到本地时候,在当前目录下的 package.json
会自动添加依赖,带版本号滴呦,很省心有木有~
在用到 msgpack
的js文件中引入即可。1
var msgpack = require('msgpack5')();
注意,这里有个小坑,就是引入的时候,必须当做函数运行一下,也就是后面加上那对括号。不然使用的时候,是代码不是调用。
JavaScript有6种数据类型,分别是:
其中,是分为 基本类型
和 引用类型
。
Boolean、String、Number、Null、Undefined都是基本类型。基本类型是按值访问的,意思是说,操作的是保存在变量中的实际值。
前言:
因为电脑系统问题,整个盘格式化了,之前配置的hexo都忘记上传到网盘上。
现在放在百度云盘的目录下,会自动上传。
但是,部署hexo的时候,要关掉百度上传,不然会出现文件读取错误。
这里的所有坑都在windows平台下,linux下的同学可以先去外边玩耍了。
为了能够使用hexo,需要先安装 nodejs , npm , hexo , git 。
截止现在nodejs版本为0.12.1,其中中间版本12(偶数)代表是稳定版,1是小版本号。
安装nodejs只需要到官网上下载msi安装包即可,自动安装,自动写入PATH环境变量,很便利有木有~
这时,请按下 开始按钮 + r
,出现运行窗口,在里面输入 powershell
,然后回车出现蓝底的命令行界面。
在里面输入 node -v
,将会返回 v0.12.1
,这是我安装在电脑中nodejs目前的版本号。
如果你很快就到了这一步,那么恭喜你,你运气不错,因为到这里才开始有坑出现。
客官请看下面。