`
DiaoCow
  • 浏览: 241781 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
文章列表
今天看了下erlang file章节,内容感觉比较散,现在做个笔记: 文件操作主要有4个module file : 这个模块主要提供对文件基本操作的方法(譬如,打开关闭文件,读写文件内容等等) filename : 这个模块提供跨平台处理文件名的方法(即,你不用关心你的代码是运行在linux平台还是windows平台) filelib : 这个模块其实是file module的扩展,它提供了一些更常用的方法(即,对file模块中一些方法进行封装,从而提供更简便方法) io : 这个模块用来读取和写入数据 读文件 1. file:consult(Filename) -> {ok, Ter ...
今天细致的看了下supervisor,现在做个总结: 其中,方块代表supervisor process,它的功能很简单,就负责看管它下面的“小弟”(child processes) 并且在必要的时候对某个child process执行restart或者terminate操作;而圆形就代表worker process,它才是真正负责干活的process;特别注意,supervisor process 监控的不一定都是worker process 可以是别的supervisor(如上图)。通过以上方式,我们就可以按照一定层次结构将process管理起来,构建一个强健的容错系统 。 现在我们就看 ...
这一章有三个关键的概念:link,exit signal, system process,现在就对这些做个总结: 通常一个process是由另一个process创建,若我们不做任何处理,那么新创建的process(我们称:子process)和创建它的process(我们称:父process),在创 ...
receive代码块是如何执行的呢? process会尝试从它的mail-box中循环取出消息进行pattern match: 1.若某一条消息pattern match成功,该条消息将从mail-box中移除并且执行相应的Expression,然后退出receive代码块(先前未匹配的消息,会重新放入mailbox) 2.若没有一条消息能够pattern match成功(或者mail-box中根本没有消息),则process阻塞在receive代码块(等待新消息),若在Time的时间范围内,依然没有消息能够pattern match,就执行超时处理TimeOutExpr,最后退出re ...
说完了gen_server,今天我们来看看gen_event。 通常我们会有这么一种需求场景:采集客户端发送的事件,并做相应的处理,如下图: EventServer负责接收客户端发送的事件消息,当它接受到一个事件消息后,它回调所有的EventHandler处理这条信息(不同的EventHandler对同一条消息会才采取不同的响应),所以EventServer实际上是充当着代理的角色,实际的事件消息是由EventHandler处理(我们称EventHandler是EventServer的callback模块) 现在我们按照上图,实现一下EventServer: 我们可以通过add_hand ...
在《Programming Erlang》的OTP introduction章节中,作者通过循序渐进的方式,向我们展示了gen_server设计思路,现在做下总结: 在具体看gen_server之前,我们先看一个server通用框架: 在这个server里,你几乎看不到任何和具体功能相关的东西,它只提供了一个server所具备的基本框架,那它是如何运行的呢? 当我们调用start函数时,就启动了一个服务,如果服务器接收到一条消息,那么它将会把这条消息转交给Mod:handle_call或者Mod:handle_cast处理 ,然后把执行结果返回给客户端(可选),接着继续等待新消息。 从这 ...
今天学习了下Erlang单元测试,发现非常有用,现在做个总结: 我们先看一个例子(吐槽下Iteye的erlang代码高亮): 这个module负责计算1到N的和,现在我们如何确认这个module功能的正确性呢? 方法1:你可以再shell终端下,不断输入测试参数,然后验证程序输出结果,这种方法比较简单,而且可能也是每个人的首选方式,但是当我们日后不断对module进行修改,为了能够保证功能的正确性,我们又必须把以前的测试数据再输入一遍,所以这种方式不可持续发展; 方法2:编写单元测试,“一劳永逸”(下次改完module代码,我们只要跑下单元测试即可) 单元测试代码: 需要注意的几点: ...
话说linux中我最常用的几个命令就是awk, grep, vim, find,今天我们就来详细看下find命令的使用 先来一个简单例子: find . -name "*.java" # 递归查找当前目录下所有java文件 其中: . 表示查找路径为当前目录(你也可以指定为其他 ...
BufferedInputStream是一个带有缓冲区的输入流,通常使用它可以提高我们的读取效率,现在我们看下BufferedInputStream的实现原理: BufferedInputStream内部有一个缓冲区,默认大小为8M,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源(譬如文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容部分或全部返回给用户.由于从缓冲区里读取数据远比直接从物理数据源(譬如文件)读取速度快,所以BufferedInputStream的效率很高! 在具体看源码之前,我 ...

Vim 复制 删除 替换

    博客分类:
  • Vim
文本编辑过程中,我们常常需要对一段文本进行编辑(删除,复制或者替换),我们通常是使用鼠标拖动选中需要操作的文本,然后再进行编辑。在使用vim前,你可能还不觉得这种方式有什么不好,但是当你懂得用vim来处理这些需求时,你会发现以前真是弱爆了! 1.vim替换 vim替换指令和sed命令基本相同(多了一些特殊字符) :s/abc/def/g         把当前光标所在行中的abc全部替换成def(标记g表示全局替换):n,m s/abc/def/g      把文件n-m行中的abc全部替换成def 通常我们需要替换到文件的最后一行,所以获取这个m值有些麻烦(难不成每次执行替换前,还需要执 ...

Vim大小写转换

    博客分类:
  • Vim
在文本编辑过程中,我们尝尝需要把文件中某些内容进行大写切换,若是普通的文本编辑器,似乎很只能部分满足或者就压根不能满足我们的需求,这时候就轮到vim上场了... vim 大小写转换命令是: gu 和 gU (u小写,U大写) 1.选择方式: 按下v或 ctrl+v 切换到选择模式,然后选择你要转换的字符,按下 u 或 U 2.指令方式(普通模式下): gu$从当前光标所在字符开始,到结尾所有字符都转换成小写(包含当前字符)gu0从当前光标所在字符开始,到开头所有字符都转换成小写(不包含当前字符)0gu$把当前光标所在行的所有字符都转换成小写    (等价于: V gu  或者 g~~)gu ...

Vim漂移

    博客分类:
  • Vim
不知道从什么时候开始,渐渐放弃了gedit,nodepad,而选择使用vim来编辑文件,不敢说自己vim有多熟练,但是确实被vim散发出的魅力所吸引.现在记录自己Vim学习的点点滴滴并且不断的更新,总结,期望有一天,能够练成vim大法! vim看上去土不拉几的,几乎没有什么界面可言,但是当我了解它的“漂移”后,我深深感受它的威力所在(光这一点就是普通文本编辑器无可比拟的). 首先什么是“漂移”? 其实只不过是把光标在文件中快速移动,但由于这移动实在是令你想不到的方便与酷,所以我们不得不用“漂移”这个词来形容它 现在列一下自己总结的漂移指令(漂移都是在vim普通模式下使用): 行漂移 h  ...
最经看了一些关于https的东西,比较乱,现在做个总结(不一定正确,而且很多细节没挖掘,只是目前的一个粗浅认识) Https流程图 从这个图我们可以看出: 由于浏览器和服务器之间对数据传输进行了对称加密,从而保证了 ...
上一节(http://diaocow.iteye.com/blog/1734253)我们对TinyMQ进行了概述,这一节我们将着重看一下作者是如何实现消息的发布/订阅 在看源代码之前我们需要了解一些module以及函数的作用: dict:new() 创建一个 Key-Value Dictionary(可以理解为就是一个map) dict:find(Key, Dict) -> {ok, Value} | error 从Dict1查询Key对应的Value,若存在返回 {ok, Value} 否则返回error dict:store(Key, Value, Dict1) ...
最近在学习erlang,了解了下它的基本语法以及相关特性,但是一直没有比较大的进展.前天在微博上无意中发现一个用erlang写的迷你的消息队列TinyMQ(源代码文件不足50K),这激发了我极大的兴趣,抱着学习的态度,下载了作者的源代码(https://github.com/evanmiller/tinymq)进行了研究学习,收获还是蛮大的,至少了解到: 1.如何用erlang实现一个简单的消息队列(我想这也是大家最感兴趣的地方); 2.如何使用erlang otp; 3.对之前学习过的erlang语法有了更深入的理解; 下面我就和大家一起来学习TinyMQ,在开始之前,先做好以下准备: 1 ...
Global site tag (gtag.js) - Google Analytics