Code

编码是门艺术
Code

如何保持SSH客户端的连接不被关闭

SSH客户端连接服务器的时候,会有因客户端不活跃而被服务器主动关闭链接的情况。这种情况我们一般可以修改服务器端SSHD的配置文来解决。 1.修改服务器端SSHD的配置文件 sudo vim /etc/ssh/sshd_config 2.修改ClientAlive相关配置 ClientAliveInterval 60 ClientAliveCountMax 3 一般默认ClientAlive的两行配置是被关闭(默认会被#注释掉的) * ClientAliveInterval 多久(秒)检测一次客户端是否存活,默认是0不检测,一般修改为60(s)即可 * ClientAliveCountMax 最多检测多少次,默认3次即可,如上设置,如果3x60s=180秒内如果客户端无存活应答,服务器端会主动关闭连接 按如上设置,可以防止客户端在不活跃的时候被服务器主动关闭连接 3.修改完配置后,需要重新加载SSHD配置生效 sudo service sshd reload
1 min read
Code

你的创业公司可能不会让你变得富有

最近在看《奔跑吧,程序员:从零开始打造产品、技术和团队》挺有感触的,推荐给所有的程序员,都应该看看的一本书。如需购买此书: http://www.ituring.com.cn/book/1776 > 你也不要设想因为自己是早期员工,就可以获得晋升而进入高层(例如 CTO、副总裁), 从而弥补之前的损失。 这是因为在早期,你面对的是长时间的工作、快速变化的需求和紧张的最后期限,这一切使得你几乎不可能做出非常高质量的软件。随着公司不断发展,这个赶工拼凑出来的遗留系统已经开始无法胜任工作,所以公司需要招聘更多“经验丰富”的员工去“收拾乱摊子” 。如果这个系统是靠你个人英雄式的努力才做出来的,那这正会成为招聘新员工的理由,对于你获得高层职位并没有强大的说服力。 简而言之,想通过加入创业公司而致富并不是明智之举。这不仅是不可能的事情,而且 也是一种不好的导向。对金钱的渴望并不足以让人忍受在建立公司的过程中所经受的那 种残酷的艰难工作。实际上,它甚至还可能会降低你的积极性。 是的,早期的工作尤其是编码开发的投入,这些经历对你成为高管没有任何帮助。 一个投资人这样说过:我们都是在投资这家公司
4 min read
Ghost

Ghost上安装Disqus插件

以下内容以 Ghost-3.21.0, Casper-3.0.12 为例,其他版本可能会略有差异,请自行调整。 1. 从disqus上找到你自己站点的代码 可以从这里找到你自己主站的代码: Home => Settings => Installation => Universal Code 或者访问下面的链接:disqus.com/admin/universalcode/ [https://disqus.com/admin/universalcode/] 2. 添加评论框 2.1 打开post.hbs模版文件,找到相关代码段 post.hbs 模版文件的路径:content/themes/casper/post.hbs 然后找到如下代码段落 {{!--
If you want to embed
2 min read
Code

REST接口设计规范

URI格式规范 * URI(Uniform Resource Identifiers) 统一资源标示符 * URL(Uniform Resource Locator) 统一资源定位符 URI的格式定义如下: URI = scheme "://" authority "/" path [ "?" query ] [ "#" fragment ] URL是URI的一个子集(一种具体实现),对于REST API来说一个资源一般对应一个唯一的URI(URL)。在URI的设计中,我们会遵循一些规则,使接口看起透明易读,方便使用者调用。 * 关于分隔符“/”的使用 "/"分隔符一般用来对资源层级的划分,例如 http://api.canvas.restapi.org/shapes/polygons/quadrilaterals/squares 对于REST API来说,"/"只是一个分隔符,并无其他含义。为了避免混淆,"/"不应该出现在URL的末尾。例如以下两个地址实际表示的都是同一个资源: http://api.canvas.
17 min read
Ghost

Ghost中让Markdown通过PrismJS实现语法高亮

最近把WordPress换成了GHost,感觉GHost更加简洁专一,虽然本人文章没写多少,但没少倒腾系统,呵呵。之前WordPress是有一个语法高亮插件的,转到Ghost后是默认没有语法高亮的,后来在网上搜索了一下,认识了PrismJS,感觉还不错。 下载PrismJS PrismJS的官网上http://prismjs.com/ [http://prismjs.com/%22target=%22_blank] 提供了定制化下载的功能,可以根据自己实际的需求,可以定制化选择主题、语言支持、扩展插件。然后系统会根据你的选择,提供个性化的JS/CSS文件下载链接。一共需要下载两个文件:prism.js & prism.css 配置PrismJS prism.js和prism.css一般会放到如下的路径中: /ghost/content/themes/casper/assets/js /ghost/content/themes/casper/assets/css 我用的主题是ghost默认的casper,
1 min read
PostgreSQL

CentOS下升级PostgreSQL

之前系统是PostgreSQL9.3,看到最近发布的9.4功能还不错,据说对JSONB的支持要强过MongoDB,于是想升级尝一下鲜。 1. 升级前的准备 备份数据这个就不多说了,任何版本升级还是有风险的,所以建议先备份一下数据。 另外对于大型数据库的升级还需要额外的谨慎,对于一个百G级别以上数据库升级的话,可能会耗费较长的时间以及需要足够多的额外存储空间(升级过程中可能会触及数据的copying操作)。本人测试的数据库目前也就700MB的级别。 2.  安装新的PG版本 我们需要下载安装系统对应版本的Repository,具体可以参见官网:http://yum.postgresql.org/ [http://yum.postgresql.org/%22target=%22_blank],目前最新的版本是 9.4.1 wget http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm rpm
4 min read
NodeJS

NodeJS异步调用的顺序化处理

NodeJS本身一个重要的特性就是异步处理,但异步处理多了,会把一个完整的“业务”逻辑拆分的支离破碎,让人看到头大,或许这就是所谓的异步陷阱?!最近看NodeJS项目代码时,发现了一个Step的模块,就是专门将一系列执行有先后关系的异步调用做序列化调用处理的,使之在代码层面上尽量看起来更清晰。Step详情可参见 https://github.com/creationix/step [https://github.com/creationix/step%22target=%22_blank] 1. 简单的将异步处理顺序化 step本身定义了一个 Step 的方法, Step可以接收任意多的方法,并按顺序执行这些方法,其中this代表下一个方法的回调。 var fs = require('fs'); var Step = require('step'); Step( function readSelf() { fs.readFile(__filename, 'utf-8', this); }, function
3 min read
OSMGIS

使用osm2pgsql导入OSM数据

osm2pgsql 是openstreetmap提供的一个数据导入工具,之前我们也用过imposm导入过地理数据,但在某些未知情况下,imposm会出现进程挂死的状态,所以有时候可能我们还是使用传统的方式导入数据比较安全! 首先安装必要的依赖 yum install gcc-c++ libxml2-devel postgresql-devel bzip2-devel proj-devel protobuf-compiler postgresql-devel automake libtool geos-devel boost-devel 为了能读取PBF格式的文件,我们还需要安装以下两个扩展 yum install protobuf-devel protobuf-c-devel 下载源代码 git clone https://github.com/openstreetmap/osm2pgsql.git cd osm2pgsql mkdir build && cd build cmake .. make make install 如果你的pg数据库用户有密码的话,需要设
1 min read
Code

CentOS7下Mapnik编译安装笔记

下载mapnik,我选用的是Master的版本,Master版本需要glibc2.14+的支持,这个需要注意一下。 git clone https://github.com/mapnik/mapnik.git 安装必要的依赖 yum install boost-devel postgresql-devel proj-devel proj-epsg 扩展需要的依赖 yum install sqlite-devel libpng-devel libtiff-devel libjpeg-devel libicu-devel 编译的时候,官方需求最少要有5GB(for g++)的内存,对于小内存的用户(我当时只有2G)可能会出现内存不够而异常退出的情况,如果出现以下状况而退出的话: g++: internal compiler error: Killed (program cc1plus) 我们可以临时增加磁盘交换空间来临时解决该问题 sudo dd if=/dev/
1 min read
OSMGIS

搭建开源地图服务(三)-使用OpenLayers呈现地图

按之前的设想,现在应该用MapProxy [http://mapproxy.org/]或TileStache [https://github.com/TileStache/TileStache] 来搭建WMS服务了,但TileMill本身就提供了一个看起来还不错的地图瓦片服务(XYZ模式的),而且OpenLayers本身也支持这种模式,于是打算直接用OpenLayers访问TileMill的瓦片服务接口,先看看效果再说。 OpenLayers是一个开源的为WEB GIS客户端提供的JS库,可以方便的对地图做各种处理。目前已发布3.0版本了,官网: http://openlayers.org/, 上面的文档也算丰富,其中还包含了各种Example [http://openlayers.org/en/v3.0.0/examples/], 对初学者帮助很大!另外再推荐一下 Leaflet [http://leafletjs.com/] 相对来说算是轻量级的,但也非常的好用! 1. 简单的地图呈现 本次,我们只是简单的展现一下地图,通过官方的Example稍作修改,代码很简单,
5 min read
OSMGIS

搭建开源地图服务(二) -TileMill的安装配置

TileMill是MapBox推出的一款地图样式编辑器,同时自身还提供地图瓦片服务,上一章我们已经成功的导入了OSM的地图数据,接下来我们尝试用TileMill对地图数据进行预览和编辑。 1. 安装NodeJS 因为TileMile是NodeJS的项目,所以我们要先安装NodeJS以及NPM包管理工具 yum install nodejs npm 2. 安装TileMill 从githup上下载TileMill项目,然后执行安装 git clone https://github.com/mapbox/tilemill.git cd tilemill npm install TileMill默认情况下,只能本机访问服务(127.0.0.1),如果作为服务器端应用,需要指定一些启动参数才可正常访问。默认情况下端口20008提供瓦片服务,20009为前端应用服务。这个也可以自行修改决定。 cd tilemill ./index.js --server=true --listenHost=0.0.0.0
5 min read
OSMGIS

搭建开源地图服务(一) - OSMGIS数据导入

最近在研究开源地图服务的组建,故将一些点滴记录下来。本次构建所涉及到的方案可能具有个人喜好色彩(例如本人有一点点抵触Java,呵呵),因某些环节还需进一步认证,所以且行且记录。 本次服务搭建,初步方案为(根据实际组建过程,可能会调整): * 服务器操作系统:CentOS7 (请注意此处的版本,否则之后会遇到问题) * GIS数据库支持:PostgreSQL9.x + PostGIS * 地图数据:OSM [http://www.openstreetmap.org/] * 地图瓦片渲染:Mapnik + CartoCSS * WMS服务:MapProxy [http://mapproxy.org/]TileStache [https://github.com/TileStache/TileStache] * WEB前端:OpenLayers [http://www.openlayers.org/] * 地图底图样式编辑:TilleMill [https://www.mapbox.
5 min read
Code

PhpStorm 语法检查失效的问题

一直在用PhpStorm,但突然有一天(可能是某个版本升级后?),发现语法错误检查和自动补全提示等功能都消失不见了!一开始在设置里琢磨了半天,各种尝试也没见效,后来还以为是因为我的License过期了(确实过期了,当初赶上感恩节活动买了一年),License过期了就没有语法提示了??!!虽然心里很诧异,但也就这么凑活的用到现在。。。。。直到今天才发现了如下解决方案。 1. 可以先尝试 Invalid Caches,重建项目索引 File -> Invalid Caches / Restart 2. 如果方案1无法解决,则可以考虑重置配置文件的方法 2.1 File -> Export Settings , 首先先备份当前的配置 2.2 退出PhpStorm, 删除应用配置数据 mac下:rm -r ~/Library/Preferences/WebIde70/ (我用的是PhpStorm7) 其他系统配置文件的路径可参见官方文档描述: http://www.jetbrains.com/phpstorm/
1 min read
PostgreSQL

CentOS6.x下安装PostgreSQL9.3笔记

1. 安装 1.1 首先确认我们的操作系统版本: cat /etc/redhat-release 1.2 然后安装与系统版本匹配的PG源: yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm 当然我们也可以根据需要在 http://yum.postgresql.org/repopackages.php下寻找与系统匹配的源。 1.3 成功安装PG源以后,我们就可以通过yum直接安装PG相关的服务了 yum install postgresql93-server yum install postgresql93-contrib #PG的一些扩展支持 /usr/pgsql-9.3/bin/postgresql93-setup initdb
4 min read
Code

GoogleFonts造成天朝内访问WP小站慢的问题

通常WordPress的后台,以及一些默认主题,或者是老外制作的主题,都会涉及到对GoogleFonts (fonts.googleapis.com) 的访问,墙内用户一般都是很难打开的,以至于造成了WP小站打开缓慢。 解决方法如下: 1. 使用相关插件禁止GoogleFonts的使用: 可以安装Disable Google Fonts 或者 Remove Open Sans font Link from WP core 等插件。 2. 使用相关镜像替换 fonts.googleapis.com 推荐使用fonts.useso.com 替换掉 fonts.googleapis.com 具体替换方法,可以在WP代码根目录下搜索 fonts.googleapi.com,然后逐一替换为 fonts.useso.com > 例如 wp-includes/script-loader.
1 min read
Go

GO语言中的StructTag类型

StructTag是什么?在Go语言里,StructTag是一个标记字符串,此字符串可跟随在Struct中字段定义的后面。StructTag就是一系列的 key:”value” 形式的组合,其中key是一个不可为空的字符串,key-value组合可以有多个,空格分隔。 StructTag有什么用?!StructTag主要解决了不同类型数据集合间(Struct,Json,Table等)转换中键值Key定义不一样的问题。StructTag可以理解为一个不用数据类型键值Key的映射表Map, 在StructTag中可以定义不用数据集合键值和Struct中Key值的映射关系,这样方便了Struct数据转为其他类型数据的过程。例如我们可以把Struct数据映射成为一个Json格式的数据,或者把Struct数据映射成为一个数据表Table。当然我们也可以依据StructTag的定义,把一个Json数据转为一个Struct结构数据。 下面,我们可以看一下,Struct和Json数据间的互相转换的例子: package main import ( "fmt" "encoding/jso
2 min read
Mysql

MySQL 常用命令集合

1. 用户相关 创建一个本地用户,密码为 pwd CREATE USER username@localhost IDENTIFIED BY ‘pwd'; 给用户是授权, 可以授权具体的操作、或者所有权限,以及对应的密码 GRANT SELECT,INSERT,UPDATE,DELETE ON .to user@”%” IDENTIFIED BY “pwd”; GRANT ALL PRIVILEGES ON u_database.* TO user@localhost; 删除一个用户 DELTE FROM  user WHERE user=’username’ AND host=’localhost'; 2. 表相关 增加列 ALTER
1 min read
Jquery

JQuery学习笔记: preventDefault

最近在学习一些WEB前端的东西,例如JS/CSS神马的,我会把学习后的一些要点记录下来,对于JS/CSS的兼容问题,我只关注现代浏览器所支持的,对于IE6/7/8的问题会直接忽视,毕竟当下的浏览器基本上都支持HTML5了,对于那些古董丑陋的浏览器就让他成为历史吧。另外说一下当下我看的是 Callum Macrae 写的《Learming from jQuery》 。 关于preventDefault方法 单从字面含义上可以看,是组织默认行为的发生,我们可以用一个例子加以说明: 将一个id=foo的A链接,点击后,将文字颜色改为红色: $('a#foo').click(function (e) { $(this).css('color', 'red'); e.preventDefault(); }); preventDefault() 会阻止控件的默认响应行为,例如阻止链接的跳转。这样就不会和我们定义的事件响应处理产生冲突。这里我们用 return false 替换 preventDefault 也可以达同样的目的,但这样会阻止事件的冒泡传播(他的父级控件将无法收到该
2 min read
Code

mongoDB字段类型的转换

最近在使用mongoDB, 发现mongo对字段类型的定义并不是很严格,完全依赖传入数据的类型,在加上PHP是弱类型的语言,所以难免会出现一些错误。如果预想的类型是Int型,但数据存储的是String,那数据在根据Int型检索的时候,就完全失效了。如果发现某个字段在存储的时候出现了分歧怎么办?当然首先要修正程序在数据传入时候的错误,对于Int型一定要保证其类型的正确性。 example: $user_arr = array ( 'uid' => intval ($_SESSION["user"]["id"]),  //对于Int类型的数据,一定要保证其类型的正确性! ); 那如何修正当前已存在数据类型的不同呢?! 查询所有字段类型是String的数据,然后将String转为Int: db.you_collection_name.find('uid' : { $type : 2 }).forEach( function(x) { x.uid = parseInt(x.uid) ;//将String转为Int db.you_collection_nam
1 min read
Go

nginx下Go如何配置成fastCGI工作模式

最初是因为笔者的服务器上已经有了nginx + php(fastcgi)的项目,所以在引入Go的项目时,自然的就想到了通过nginx的虚拟主机+fastCGI的方式支持Go的项目。其实很简单,以下就是简单的示例,照此方法就可以让Go以FastCGI的方式Hello word了 ! 1. Nginx 需要做的配置 server { listen 80; server_name  www.xxxxxxx.xxx; #这里可以配置域名,如果需要支持多个网站的话 #如果需要可以配置访问日志 #access_log  /var/log/nginx/log/host.access.log  main; #以下是对静态资源访问的配置, 例如 css img 神马的 location ~ ^/css|img|js|tpl/ { root   /data/www/xxxxx/; #expires
1 min read
译文

如何成为一名远程软件开发者【译文】

在家工作会给你自由的空间做更多的事情,远离来自办公室环境的干扰。另一方面,他也会给予整天偷懒的自由! 我和8个同事通过Wave [https://www.waveapps.com/]和Nathan Bertram [http://trueperspective.net/]在ArrangeMySeat [https://arrangemyseat.com] 上远程工作超过了1年,甚至会更久。下面是我从这次远程工作中收集到的一些经验。 Workspace (工作空间) 远程工作可以让你自由的挑选自己的办公室。这是有多好呢?关键是要选择一个适当的空间。这里有几件事情是会有帮助的: * 找一个可以不被他人打扰的地方,而不是让你抓狂的地方 * 安静或适度的噪声水平 * 一个指定的工作地点 (不是你的床) 有一个工作空间并且不会被人打扰,这是完成工作的关键。经常被和你居住在一起或者其他的人打断,这会扼杀你的生产力。 在咖啡馆工作是一个不错的选择,可以加入到我们的免打扰指引手册里。人们不会理你,你会和咖啡因一起渡过,而且你周边也不会太吵。 如果你在家工作,你要找一个工作专用的房间或
9 min read