在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类型的占位符,通知编译器去根据初始化代码推断所声明变量的真实类型,这样可以让我们的代码更加简洁。 auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。
Continue reading
Category Archives: Dev
C++自动类型推断和基于范围的for循环
Flask-RESTful构建小型REST服务
REST是web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了。诸如docker daemon等服务都是提供了RESTful API,docker的CLI可以通过该API的URL地址与之通信。
Flask是一个超级流行的Python 编写的轻量级 Web 应用框架。而Flask有一个REST插件——Flask-RESTful是为了快速构建REST API的Flask插件,它能和现有的ORM配合实现轻量级数据抽象。Flask-RESTful鼓励小型化实践,非常简单易学。本文将会使用python的Flask框架轻松实现一个RESTful的服务。
REST的六个特性:
- Client-Server:服务器端与客户端分离。
- Stateless:每次客户端请求必需包含完整的信息,换句话说,每一次请求都是独立的。
- Cacheable(可缓存):服务器端必需指定哪些请求是可以缓存的。
- Layered System(分层结构):服务器端与客户端通讯必需标准化,服务器的变更并不会影响客户端。
- Uniform Interface(统一接口):客户端与服务器端的通讯方法必需是统一的。
- Code on demand(按需执行代码):服务器端可以在上下文中执行代码
Continue reading
Python任务调度模块 – APScheduler
APScheduler是一个Python定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务、并以daemon方式运行应用。目前最新版本为3.0.x。 Continue reading
Redis Sentinel配置小记
Sentinel是一个管理多个redis实例的工具,它可以实现对redis的监控、通知、自动故障转移。sentinel不断的检测redis实例是否可以正常工作,通过API向其他程序报告redis的状态,如果redis master不能工作,则会自动启动故障转移进程,将其中的一个slave提升为master,其他的slave重新设置新的master实例。也就是说,它提供了:
监控(Monitoring): Sentinel 会不断地检查你的主实例和从实例是否正常。
通知(Notification): 当被监控的某个 Redis 实例出现问题时, Sentinel 进程可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主redis实例失效时, Sentinel 会开始记性一次failover, 它会将失效主实例的其中一个从实例升级为新的主实例, 并让失效主实例的其他从实例改为复制新的主实例; 而当客户端试图连接失效的主实例时, 集群也会向客户端返回新主实例的地址, 使得集群可以使用新主实例代替失效实例。
Redis Sentinel自身也是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程, 这些进程使用流言协议(gossip protocols)来接收关于主Redis实例是否失效的信息, 然后使用投票协议来决定是否执行自动failover,以及评选出从Redis实例作为新的主Redis实例。 Continue reading
Python Reading List (2)
最近工作又要用到Python了,无奈有段时日没用Python写过东西了,有些生疏。所以借五一把收藏的Python博文翻出来看一下,温故而知新。 Continue reading
使用Express模版引擎
需要使用下面的express应用设置,Express才能正确的处理模版文件。
views — 指定模版文件的目录,例如app.set(‘views’, ‘./views’)
view engine — 指定模版引擎,例如app.set(‘view engine’, ‘jade’)
首先要使用npm安装模版引擎jade。关于Jade,官网Jade Template Engine ,一个不错的教程Jade — 源于 Node.js 的 HTML 模板引擎
1 |
npm install jade |
例如Jade这种Express兼容的模版引擎,会导出名为 __express(filePath, options, callback)
的function,并可以通过res.render()来渲染模版代码。
一旦设定了视图模版引擎,你不需要显式地指定引擎或在应用程序加载模板引擎模块。Express会在内部自动加载它。例如:
1 |
app.set('view engine', 'jade'); |
在views目录下创建一个jade模版文件”index.jade”, 内容如下:
1 2 3 4 5 |
html head title!= title body h1!= message |
然后创建一个route来渲染”index.jade”文件。如果没有指定模版引擎,则需要指定view文件的扩展名。
1 2 3 4 5 6 7 8 9 10 11 |
var express = require('express'); var app = express(); app.set('views', './views') app.set('view engine', 'jade') app.get('/', function (req, res) { res.render('index', { title: 'Hey', message: 'Hello there!'}); }) app.listen(3000); |
使用node app.js
来启动应用,一旦有到’/’的请求时,”index.jade”会作为HTML来渲染。
参考:
Using Template Engines
使用Mongoose
Mongoose提供了一个直观的、基于模式(schema)的解决方案,可以为你的应用数据使用内置的类型转换、验证、查询和业务逻辑来建模。本文简述在Node.js中使用Mongoose连接MongoDB的方法。 Continue reading
JSON in JavaScript
JavaScript中,JSON对象解析JavaScript Object Notation (JSON) 以及将值转换成JSON的方法。JSON对象不能被构建和直接调用,它仅提供了两个工具的方法——Parse和stringtify。 Continue reading
JVM进程性能监控工具
1. jps — Java process state, 针对JVM进程的PS命令
相关参数:
-v
显示启动时给定的JVM参数
-q
jps默认只带着类的短名称,如果指定-q则只显示pid
-l
显示完整类名
-m
显示传递给main主函数的参数,例如:
1 2 3 |
# jps -ml 12812 com.cloudera.cmon.firehose.Main --pipeline-type HOST_MONITORING --mgmt-home /usr/share/cmf 12705 com.cloudera.cmon.firehose.Main --pipeline-type SERVICE_MONITORING --mgmt-home /usr/share/cmf |