你会对自己编写的 Puppet 代码感到羞愧吗?其他人看你的代码时会有恐惧感吗? 为了使你的 Puppet 配置清单更清晰且易于维护,一件最重要的事情就是将这些配置清单组织成 模块(modules)。 模块是对相关事物进行分组的一种简单方式;例如,一个 webserver 模块可能包含作为一个 Web 服务器所需的一切,包括 Apache 配置文件,虚拟主机配置模板以及部署这些所需的 Puppet
直播源添加与管理 登录CCLive客户端后,会进入到客户端主界面。 说明: 客户端主界面主要包括 直播场景区、直播内容区、互动功能区 三个部分: 1)直播场景区:可添加多种直播源,包括摄像头、桌面共享,本地图片、插播视频等; 2)直播内容区:可自由调整每个直播源画面的大小、位置和层级,根据自身的需求将各个直播源合成为1路视频画面进行直播; 3)互动功能区:可使用聊天、问答、连麦、问卷、打卡等多种互
文档管理与演示 登录CCLive客户端后,会进入到客户端主界面。 说明: 客户端主界面主要分为视频区、聊天问答区、互动功能区、文档区几个部分: 1)视频区:展示讲师视频画面,支持麦克风、扬声器,可将视频区设置为桌面共享、插播视频等; 2)聊天问答区 :展示聊天及问答消息,支持查看管理用户、音视频连麦功能; 3)互动功能区:可开始/停止直播、手动分段录制直播内容,可使用聊天、问答、连麦、问卷、签到等
创造模式处理一个对象的创建。创造模式的目的是为了在不按照约定而直接地创建的地方提供可选择的情况。 在工厂模式中,客户端查询一个对象而不知道这个对象来自哪里(即,哪一个类被用来生成它)。在一个工厂背后的思想是简化一个对象的创建。如果这个结果是通过一个中心函数来完成,相比之下要让一个客户端直接地使用类实例化来创建对象,跟踪哪一个对象被创建则会更容易些。通过分离要使用的代码,工厂减少了一个应用维护的复杂
这一章将会演示教你如何写一个属于自己的Fuzz测试脚本,当我们进行exploit研究和开发的时候就可以使用脚本语言发送大量的测试数据给受害者机器,但是这个错误数据很容易引发应用程序崩溃掉。而Python却不同,当程序崩溃之后,此时你的程序会暂时断开连接,随后会立即创建一个新的连接继续执行。 下面我们首先要解决的问题是应用程序如何处理用户输入的内容,因为在进行模糊测试的时候,我们会不定时的想到一些新
状态模式 状态模式是协议交互中使用得比较多的模式。比如说,在不同的协议中,都会存在启动、保持、中止等基本状态。那么怎么灵活地转变这些状态就是我们需要考虑的事情。假设现在有一个state, typedef struct _State { void (*process)(); struct _State* (*change_state)(); }State; 说明一
命令模式 命令模式的目的主要是为了把命令者和执行者分开。老规矩,举个范例吧。假设李老板是一家公司的头儿,他现在让他的秘书王小姐去送一封信。王小姐当然不会自己亲自把信送到目的地,她会把信交给邮局来完成整个投递的全过程。现在,我们就对投递者、命令、发令者分别作出定义。 首先定义post的相关数据。 typedef struct _Post { void (*do)(struct _Po
桥接模式 在以往的软件开发过程中,我们总是强调模块之间要低耦合,模块本身要高内聚。那么,可以通过哪些设计模式来实现呢?桥接模式就是不错的一个选择。我们知道,在现实的软件开发过程当中,用户的要求是多种多样的。比如说,有这么一个饺子店吧。假设饺子店原来只卖肉馅的饺子,可是后来一些吃素的顾客说能不能做一些素的饺子。听到这些要求的老板自然不敢怠慢,所以也开始卖素饺子。之后,又有顾客提出,现在的肉馅饺子只有
策略模式 策略模式就是用统一的方法接口分别对不同类型的数据进行访问。比如说,现在我们想用pc看一部电影,此时应该怎么做呢?看电影嘛,当然需要各种播放电影的方法。rmvb要rmvb格式的方法,avi要avi的方法,mpeg要mpeg的方法。可是事实上,我们完全可以不去管是什么文件格式。因为播放器对所有的操作进行了抽象,不同的文件会自动调用相应的访问方法。 typedef struct _MovieP
装饰模式 装饰模式是比较好玩,也比较有意义。其实就我个人看来,它和责任链还是蛮像的。只不过一个是比较判断,一个是迭代处理。装饰模式就是那种迭代处理的模式,关键在哪呢?我们可以看看数据结构。 typedef struct _Object { struct _Object* prev; void (*decorate)(struct _Object* pObject);
享元模式 享元模式看上去有点玄乎,但是其实也没有那么复杂。我们还是用示例说话。比如说,大家在使用电脑的使用应该少不了使用WORD软件。使用WORD呢, 那就少不了设置模板。什么模板呢,比如说标题的模板,正文的模板等等。这些模板呢,又包括很多的内容。哪些方面呢,比如说字体、标号、字距、行距、大小等等。 typedef struct _Font { int type; in
代理模式 代理模式是一种比较有意思的设计模式。它的基本思路也不复杂。举个例子来说,以前在学校上网的时候,并不是每一台pc都有上网的权限的。比如说,现在有pc1、pc2、pc3,但是只有pc1有上网权限,但是pc2、pc3也想上网,此时应该怎么办呢? 此时,我们需要做的就是在pc1上开启代理软件,同时把pc2、pc3的IE代理指向pc1即可。这个时候,如果pc2或者pc3想上网,那么报文会先指向pc
外观模式 外观模式是比较简单的模式。它的目的也是为了简单。什么意思呢?举个例子吧。以前,我们逛街的时候吃要到小吃一条街,购物要到购物一条街,看书、看电影要到文化一条街。那么有没有这样的地方,既可以吃喝玩乐,同时相互又靠得比较近呢。其实,这就是悠闲广场,遍布全国的万达广场就是干了这么一件事。 首先,我们原来是怎么做的。 typedef struct _FoodSteet { void
工厂模式 工厂模式是比较简单,也是比较好用的一种方式。根本上说,工厂模式的目的就根据不同的要求输出不同的产品。比如说吧,有一个生产鞋子的工厂,它能生产皮鞋,也能生产胶鞋。如果用代码设计,应该怎么做呢? typedef struct _Shoe { int type; void (*print_shoe)(struct _Shoe*); }Shoe; 就像上面说的,
组合模式 组合模式听说去很玄乎,其实也并不复杂。为什么?大家可以先想一下数据结构里面的二叉树是怎么回事。为什么就是这么一个简单的二叉树节点既可能是叶节点,也可能是父节点? typedef struct _NODE { void* pData; struct _NODE* left; struct _NODE* right; }NODE; 那什么时候是叶