新版gitbook导出pdf

最近想把自己写的一个gitbook转成pdf分享出去,突然发现最新的gitbook版本已经不支持导出PDF了。于是在网上找了好久终于被我发现了三个将gitbook转换成pdf的方式,现分享给大家。我使用的是mac系统,如果是其他系统大家可以查找相应的方案。 gitbook自带的npm模块gitbook npm gitbook的最新版本是3.2.3,最新更新时间是1年前,官方估计已经放弃这个模块了。…

Spring MVC 中的http Caching

Spring MVC 中的http Caching Cache 是HTTP协议中的一个非常重要的功能,使用Cache可以大大提高应用程序的性能,减少数据的网络传输。 通常来说我们会对静态资源比如:图片,CSS,JS文件等做缓存。同样的我们可以使用HTTP Cache配合Spring MVC来做动态资源的缓存。 那么什么时候使用动态资源的缓存呢? 只有当这个资源不经常更新或者你确切的知道该资源什么时…

scala教程之:可见性规则

和java很类似,scala也有自己的可见性规则,不同的是scala只有private和protected关键字,没有public关键字,同时scala还提供了更加细粒度的访问控制如protected[scope]和private[scope]。 public scala中默认的访问权限就是public,这意味着在scala中没有可见性关键字的声明体,他的访问权限就是public,是具有公有可见性…

Scala教程之:深入理解协变和逆变

在之前的文章中我们简单的介绍过scala中的协变和逆变,我们使用+ 来表示协变类型;使用-表示逆变类型;非转化类型不需要添加标记。 假如我们定义一个class C[+A] {} ,这里A的类型参数是协变的,这就意味着在方法需要参数是C[AnyRef]的时候,我们可以是用C[String]来代替。 同样的道理如果我们定义一个class C[-A] {}, 这里A的类型是逆变的,这就意味着在方法需要参…

Scala教程之:Either

在之前的文章中我们提到了Option,scala中Option表示存在0或者1个元素,如果在处理异常的时候Option就会有很大的限制,因为Option如果返回None,那么我并不知道具体的异常到底是什么,这样scala引入了Either。 顾名思意,Either表示或者是这一个元素或者是那个元素。这样在异常处理的时候就非常有用了。 我们先看一下Either的定义: sealed abstract…

Scala教程之:可变和不变集合

集合在程序中是非常有用的,只有用好集合才能真正感受到该语言的魅力。在scala中集合主要在三个包里面:scala.collection, scala.collection.immutable和scala.collection.mutable。 scala中引入不可变集合是为了方便程序的使用并减少在程序中的未知风险。如果一个集合被定义为不可变的,那么我们在使用的过程中就可以指定该集合是不会变化的,可…

Scala教程之:Future和Promise

在scala中可以方便的实现异步操作,这里是通过Future来实现的,和java中的Future很相似,但是功能更加强大。 定义返回Future的方法 下面我们看下如何定义一个返回Future的方法: println(“Step 1: Define a method which returns a Future”) import scala.concurrent.Future import sca…

Scala教程之:PartialFunction

Scala中有一个很有用的traits叫PartialFunction,我看了下别人的翻译叫做偏函数,但是我觉得部分函数更加确切。 那么PartialFunction是做什么用的呢?简单点说PartialFunction用在模式匹配中,是一个不完整的函数,它只实现了函数的部分功能,也就是列举了部分case的情况。 我们先看下PartialFunction的定义: trait PartialFunc…

Scala教程之:Enumeration

Enumeration应该算是程序语言里面比较通用的一个类型,在scala中也存在这样的类型, 我们看下Enumeration的定义: abstract class Enumeration (initial: Int) extends Serializable Enumeration是一个抽象类,它定义四个value方法,来设置内部的值, 四个value方法如下定义: /** Creates a …