Monday, November 24, 2014

支持 Markdown 的网页 slides 工具总结

支持 Markdown 的网页 slides 工具总结

在注重效率的今天,很多人都不喜欢制作 PPT,特别是技术人员。流行的 PPT 制作工具往往需要用户关注太多内容无关的细节。而像 TeX 这样强大的系统又似乎太过于重量级了。
现在越来越流行制作网页格式的 slides,并通过浏览器来播放和发布。 这样做有很多优点:包括跨平台(特别在移动端)、无需特殊软件支持、分享方便、轻量级等。
可惜并不是所有人都精通网页编程技术,即便是最常见的 html 和 css,也常常造成 slides 编写人员的困扰。
一款最理想的 slides 制作工具,应该做到让用户只需要关心内容,其它的包括布局、风格等都交由软件来完成。
随着 HTML5 的流行,现在已经出现了不少这方面的工具,允许用户用 Markdown 等文本标记语言来编写好内容。它们能自动转化为网页形式,添加合适的主题,获得不亚于 PPT 软件的播放效果,甚至更为强大。
在这里介绍几种支持 Markdown 来编写内容的网页 slides 生成工具。
对于 Markdown 不熟悉的读者,推荐先花个五分钟,简单看下 Markdown 的简单语法:http://daringfireball.net/projects/Markdown。顺便说下,本文就是使用 Markdown 编写的。

slidedown

比较早期的一个利用 Markdown 生成网页 slides 的工具。
它功能比较单一,特色是支持语法高亮。后面出现的不少工具都参考了它,功能要更加丰富。
  • 官方网站:https://github.com/nakajima/slidedown
  • 推荐指数:3.5

Remarkjs

remarkjs 是一个简单的基于 Markdown 的网页 slides 生成工具。
remarkjs 生成的网页 slides 支持语法高亮、响应式设计。

Reveal.js

Reveal.js 是基于 Node.js 实现的一个网页 slides 编写框架。
它支持自定义快捷键、嵌套 slides、在网页中直接嵌入 Markdown 语法、导出 pdf、备注和 JavaScript 等强大功能。
它需要用户对 HTML 和 CSS 相关技术比较熟悉一些。支持的很多参数可以直接在模板中进行配置,比如自动翻页、快捷键等。

slidify

slidify 支持 RMarkdown 语言,可以利用 RMarkdown 文件生成效果惊艳的 HTML5 页面,并且支持发布到 GitHub、RPub、DropBox 等,当然这就需要用户熟悉 Markdown,R、LaTex 等多种语言的语法。
R Markdown 语言是 RStudio 支持的一种专门为编写 HTML 5 的 slides 而提出的混合型语言,它可以很好的混合利用 Markdown,R、LaTex 等多种语言来生成十分复杂的页面。

KeyDown

KeyDown 与 Showoff, Slidedown, HTML5 Rocks 等类似,也是专注生成单页的网页 slides。 它基于 Ruby 语言编写,利用 deck.js 转化 Markdown 为网页 slides。支持语法高亮、背景图片、快捷键等。用户要自定义一些风格可以修改 css 文件。
其使用过程十分简单,需要 Ruby、Rubygems 环境。
$ gem install keydown
$ keydown generate my_presentation
然后编写 Markdown 文件,并可以调整 css,之后进行转换。
$ keydown slides

Showoff

Showoff 是一个成熟的网页 slides 生成工具,基于 Ruby 语言编写。它借鉴了 S5 (http://meyerweb.com/eric/tools/s5/)。设计了基于 Markdown 的 DSL,因此,用户只需要懂 Markdown 语法即可。
举一个例子。
!SLIDE

# My Presentation #!

SLIDE bullets incremental transition=fade

# Bullet Points #

* first point
* second point
* third point
所生成的网页 slides 功能十分全面,可以说,能想到的功能都实现了,包括语法高亮、菜单、JavaScript、效果、备注等等。
安装和使用。
$ gem install showoff
$ git clone (showoff-repo)
$ cd (showoff-repo)
$ showoff serve
showoff 唯一的问题可能是它已经有数年没有更新了,不然完全可以打 5 分。

cleaver

cleaver 可以将 Markdown 文档转化为网页格式,基于 Ruby 语言编写,同样支持基于 Markdown 的 DSL。它的整体设计风格也是十分简约,作者还有其它几个很 cute 的小工具。
下面给出一个 clever 支持的文件的例子。
title: Basic Example
author:
  name: Jordan Scales
  twitter: jdan
  url: http://jordanscales.com
output: basic.html
controls: true

--

# Cleaver 101
## A first look at quick HTML presentations

--

### A textual example

Content can be written in **Markdown!** New lines no longer need two angle brackets.

This will be in a separate paragraph

--

### A list of things

* Item 1
* Item B
* Item gamma

No need for multiple templates!
安装和使用:
npm install -g cleaver
cleaver path/to/something.md
它支持多种主题和语法高亮等功能,
  • 官方网站:http://jdan.github.io/cleaver/
  • 项目维护:https://github.com/jdan/cleaver
  • 推荐指数:4.5

Landslide

Landslide 可以利用 markdown、ReST 或 textile 格式文件生成 HTML5 的网页 slides,参考了 Google 的 html5slides。
Landslide 基于 Python 开发,最大的优点就是简洁,从安装到编写,到生成的 slides 风格都十分简洁。整个过程,用户只需要懂 Markdown 语法就可以。
此外,它的配置文件(.cfg)使用了类似 ini 文件的语法,也很容易理解。
安装:
pip install landslide
运行
landslide slides.md
默认会生成 html 格式的 slides。
是不是很简单?
此外,它还支持生成 pdf、快捷键、备注、自定义主题、CSS、JavaScript、注册新的语法宏等高级功能。

其它

HTML5 Rocks 是一个基于 HTML5 的强大的网页 slides 展示系统。它生成的网页可以支持多种风格,但需要用户掌握一定的网页编程技术。
另外,可能有人会推荐 Prezi(http://prezi.com),我也为 Prezi 的动态效果所惊讶。但对于关注内容的人员(特别是工程师)来说,并不十分推荐 Prezi,Prezi 往往更适合于设计或市场营销人员。

Sunday, October 26, 2014

云计算时代应用设计十二要素

云计算时代应用设计十二要素

  • 什么样的软件才是可用性和可维护性好的软件?
  • 什么样的代码才能避免后续开发的上手障碍?
  • 什么样的实行才能稳定的运行在分布式的环境中?
Heroku (一家 PaaS 服务提供者,2010 年被 Salesforce 收购)平台创始人 Adam Winggins 提出了推荐的应用十二风格,对我们设计和实现云时代(特别是 PaaS 和 SaaS 上)高效的应用都有很好的参考意义。

代码

每个子系统都用一个代码库管理,使用版本管理,实现独立的部署。

依赖

显式声明依赖,通过环境来严格隔离不同依赖。

配置

在环境变量中保存配置信息,而避免放在源码或配置文件中。

后端服务

后端服务作为可挂载资源来使用,这样系统跟外部依赖尽量松耦合。

生命周期

区分不同声明周期的运行环境,包括创建、发布、部署,各个步骤要相互隔离。

进程

以一个或多个无状态的进程来运行应用,即尽量实现无状态,不要在进程中保存数据。

端口

通过端口绑定来对外提供服务。

并发

通过进程控制来扩展,即以多进程模型进行扩展。

可丢弃性

快速启动,优雅关闭,并尽量鲁棒(随时 kill,随时 crash)。

开发与生产环境的差异性

尽量保持从开发到生产部署环境的相似性。

日志

将日志当作事件流来进行统一的管理和维护(使用 Logstash 等工具)。

管理

将管理作为一次性的系统服务来使用。

Thursday, October 16, 2014

Docker 1.3 发布


Docker 1.3 已经正式发布,新的特性包括镜像签名、进程注入、新的创建和运行容器命令、安全选项和 Mac OS 上进行目录共享。特别是针对安全方面的改进,成为本地发布的亮点。
镜像签名
支持对镜像的发布者和镜像文件进行验证。
进程注入
除了通过 nsinit 和 nsenter 的方式查看容器内应用之外,可以使用更方便的 docker exec 命令。这将给容器 debug 带来便利。
例如 
$ docker exec ubuntu_bash -it bash 
会在 ubuntu_bash 容器中运行 bash 命令。
新的创建和运行容器命令 create 和 start
传统的 docker run 会创建容器并运行它,现在可以通过 create 和 start 进行细粒度的控制。 
例如,先创建一个容器(并不处于运行态): 
$ docker create -t -i fedora bash 6d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752 
然后,让它运行: 
$ docker start -a -i 6d8af538ec5 
bash-4.2#

安全选项
在运行容器的时候通过 --security-opt 选项来指定系统的安全选项,包括 SELinux 和 AppArmor 的标签等。 例如 
$ docker run --security-opt label:type:svirt_apache -i -t centos \ bash 
这个功能将大量减少使用 --privileged,从而提高使用容器的安全性。
Mac OS X 上的共享目录 
基于 boot2docker,支持在本地 Mac 系统和容器之间直接共享目录 例如, 
$ docker run -v /Users/bob/myapp/src:/src [...] 
将直接挂在本地的/Users/bob/myapp/src 目录到容器内。
更多改进,参考 https://github.com/docker/docker/issues?q=milestone%3A1.3.0。

Thursday, October 09, 2014

也谈并发和并行

并发(concurrency)和并行(parallelism)都是常见的概念,并且很多时候并不容易进行区分,甚至被用作表达同样的概念。
网上最流行的解释,并发是一个人吃三个馒头;并行是三个人吃三个馒头。
这样理解简单概况了主要区别,但其实并不是太完整。

从对象的角度,并发是一种任务分配模式,指的是同一个处理器被调度处理不同的任务,这些任务往往都是同一性质的任务。例如浏览器打开多个页面,浏览器自身虽然是单进程的,但是它可以(一般都使用多线程方式)轮流打开页面,也可以打开一个页面一半后跑去打开另外一个页面,然后再回来。

而并行是一种运行的方式,指的是多个处理器同时处理若干个任务,这些任务往往是不同的任务。例如多核系统,一个核上正在处理视频渲染,另外一个核同时处理了网络收发包。强调同时性和多处理者。

从架构设计上看,使用并发主要是因为处理资源有限,而多个任务往往存在block情况(例如io block),可以通过适合的调度来隐藏任务的block,即降低响应延迟。
而并行则往往是因为处理资源比较多(多核),通过同时运行多个任务来充分利用资源,提高整体的吞吐量。现在的大数据运算平台如hadoop等就是典型的并行的概念。

因此,某些场合下,两者可以结合使用,以提高系统整体的性能。这是很考验架构师的地方。