- 浏览: 95866 次
- 性别:
- 来自: 北京
最新评论
-
rstevens:
呵,这是我以前写的,重新整理了贴在这里的有什么问题,可以一起交 ...
Linux内核文件系统学习:虚拟文件系统(多图) -
liuxuejin:
好文章啊!不知道小弟有问题可以请教吗?
Linux内核文件系统学习:虚拟文件系统(多图)
文章列表
端口是Erlang与外部程序通信的一种方式。
下图展现了端口与外部程序交互的方式。
OTP 常用的接口函数:
1、 打开端口
open_port/2
2、 通过端口,向外部程序发送数据
port_command
3、 通过端口,从外部程序接收数据
recieve
end.
4、 关闭端口
port_close/0
"Write an Erlang Port using OTP Principles" 这篇文章,详细讲解了如何通过OTP来编写一个端口应用,并通过这个应用来与外部的程序通信。
http://www. ...
通过源码安装一个python包的时候,可通过 --home 或 --prefix 指定安装目录
python setup.py install --prefix=~/local
参看 http://docs.python.org/install/index.html alternate installation
About This Guide
This guide explains the AMQP 0-9-1 model used by RabbitMQ. The original version was written and kindly contributed by Michael Klishin and edited by Chris Duncan.
High-level Overview of AMQP 0-9-1 and the AMQP Model
What is AMQP?
AMQP (Advanced Message Queuin ...
mnesia 是一个分布式的数据存储系统。
一个mnesia集群,有多个mnesia节点组成
mnesia节点之间互相联通 (如何联通?)
1、创建schema
在一个节点上,通过 mnesia:create_schema(NodeList), 在整个集群中,创建空的schema。NodeList指定了集群中所有的节点。
注意:
1)、schema只能创建一次
2)、实际上,每个节点都保存一份schema拷贝
2、 创建表
在一个节点上,通过 mnesia:create_table(),则创建一个分布式的表。
mnesia会自动将该表同步到节点中其它节点上。
每个节点,实际上还是维护的 ...
相对于其它语言,erlang的根本性的优势在于:
1、 面向并发的支持
它提供的创建大量进程能力,彻底改变了传统的多线程的编程模式。
在传统的编程语言中,为了做到高性能,提供并发处理能力,通常是通过多线程模型来解决。多线程必然会导致加锁的诸多问题,此外多线程程序对程序员自身的能力提出了更好的要求。
而erlang的多进程模型,使得并发任务处理变得很自然。
2、 面向分布式的支持
erlang的每个虚拟机都是一个节点
每个节点中可以跑很多进程
节点之间可以互相联通
可以控制任意一个节点中的进程
可以方便的与其它节点中的进程通信。
进程之间可以互相链接,互相监控
这个特性,也是其它所 ...
用erlang开发工业级产品的过程中,会碰到相似的问题域,例如监控、程序打包等等。
OTP 就是针对这些问题域的解决方案。
OTP包括如下部分:
1、 监控树
强大的监控能力,是erlang强于其它语言的核心所在;
所以基于erlang的应用,都应该具有监控功能,因此,OTP首先提供了supervisor模块,来解决这个共性问题。
在监控树种,包括监控进程和工作进程,所有进程链接成一个监控树。
2、 进程的行为
工作进程,通常具有相同的行为;OTP提炼出这些共同的行为,提供了三类主要的行为包,分别是 gen_server, gen_event, gen_fsm。 一个工作进程,通常采用 ...
第一版基础上,将echoserver融入OTP:gen_server框架
同时引入OPT:supervisor行为包,实现对 echoserver的监控模块
当 echoserver退出后,监控模块master可以重启之。
erlang的监控树绝对是精华所在,解决了分布式开发的一个重要的问题域
-module(es2).
-behavior(gen_server).
-export([start_link/0, stop/0]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/ ...
erlang实现的简单的echo server
采用每连接对应一个进程的模式
用到了 gen_tcp 模块、erlang的消息接收模型
-module(echoserver).
-export([start/0, stop/0, server/0, handle_connect/3]).
start() ->
% 创建一个进程,运行 server()
register(echoserver, spawn(?MODULE, server, [])).
stop() ->
echoserver ! {quit}.
server( ...
通过“动画”菜单,可为页面配置展现的动画效果。
通过“自定义动画”,可进一步为页面内的元素配置动画效果。
例如页面内有两个元素,可从上而下展现第一个元素,鼠标单击后,再出现第二个元素。
无论 python, ruby, 还是 erlang, lua, 这几个比较新锐的语言,都支持函数式编程。
函数式编程到底具有哪些特点? 相对于传统的命令式语言,其优势在什么地方?
函数式编程,有如下几个特点:
1、 函数是第一类型。
函数像其它数据类型一样,可以被赋值,可以当做参数,也可以当做函数的返回值。
其实, C语言的函数,实质就是一种指针类型,因此我们可以说,C语言也是支持函数式编程的。
2、 函数的执行结果,只与传入的参数相关。
也就是说,只要传入的参数不变,那么函数的执行结果就是一定的,而不受其它条件影响。
这就要求我们,在函数内部,不要访问全局变量。
这点实质上是函数 ...
如果把Lua当做一门纯粹的脚本语言来使用,那它肯定比不上 python 强大高效;很多事情它也干不了。
使用Lua的唯一理由,是可以方便的潜入到其它语言中,特别是 C/C++,在提高复杂逻辑的开发效率的同时,性能上也不会损失太多。 因为Lua的解释器性能上非常好,Lua本身依赖的库也比较小。
Lua目前最适合的应用领域是游戏开发中的脚本
学习Lua,重点应该是研究如何配合C/C++提高开发效率。
调用 Lua的函数,跟其它语言没啥大的区别,都是类似
print("hello") 的形式,需要将参数放到一对圆括号中。
但是有一种例外情况,即: 一个函数若只有一个参数,且这个参数是一个字面字符串,或者是一个table 类型,那么圆括号可有可无。例如
print "hello" 是可以的。
但是
s = "hello"
print s 是不可以的。
mytable = { 10, 11, 12}
print mytable 是可以的。
或者是
print { 10, 11, 12} 也是可以的。
table 的 ...
1、 table 是 lua 中最重要的数据类型。
2、 table 类似于 python 中的字典。
3、 table 只能通过构造式来创建
例1:
mytable = { a = 10, b = 11, c = 20, ddd = 30 }
print(mytable["a"])
注释:
1)、 table 中的每项要求是 key = value 的形式
2)、 key 只能是字符串, 这里的 a, b, c, ddd 都是字符串,但是不能加上引号
3)、 通过 key 来访问 table 的值,这时候, a 必须加上引号
例2:
mytabl ...
descriptor 用与类的属性
descriptor 是一个类,需要提供 __set__, __get__, __del__ 三个方法的实现。
如果一个类的属性是 descriptor,那么:
该属性不会出现在该类实例化后的对象的__dict__中。也就是说,它部作为字典的一部分出现。
访问该属性时,调用descriptor的__get__()方法
设置该属性时,调用descriptor的__set__()方法
删除该属性时,调用descriptor的__del__()方法
也就是说,如果属性是descriptor,则劫持了对字典的访问。
descriptor 的好处是什么?
增 ...
首先保证我们拿到的是最新代码,运行svn update,假设是28版本。
然后找出要撤销的确切版本:
svn log contacts.java
根据log怀疑是27版本改坏的,比较一下:
svn diff -r 26:27 contacts.java
发现果真是27版本坏事。
撤销27版本的改动:
svn merge -r 27:26 contacts.java
为了保险起见,再次确认合并的结果:
svn diff contacts.java
发现已正确撤销了改动,提交。
提交改动
svn commit -m "Revert wrong change from r27 ...