- 浏览: 86736 次
最新评论
文章列表
Git是一个开源的分布式版本控制系统,用于敏捷高效地管理项目。相较svn,git最大的特点就是分布式,每个人都拥有一个克隆的版本库,所以提交代码、查看日志、创建分支、合并分支、回退等等操作都直接在本地完成而不需要网络。当然,本地版本库需要和远程共享版本库同步,这就需要网络了。
github,作为一家git服务提供商,可以托管你的git版本库,而且对于开源项目是可以免费托管,这对于开源项目是一大利好。
github使用
注册github账号
首先你要有一个github账号,注册地址 https://github.com/join,记住你的用户名和邮箱,这里例如mycwq和mycwq@exampl ...
- 2015-10-27 09:39
- 浏览 280
- 评论(0)
异常捕获是高级语言的一大特性,通过对异常的捕获和处理,可以有效提高系统的稳定性和健壮性。因为无论再怎样改进代码,都不可避免出现一些异常,例如文件io错误、网络错误、内存错误等等,就要求编码对错误进行捕获,同时打印日志以便开发人员跟进问题的处理。当然,lua也提供了接口用于捕获运行时异常。
lua异常捕获函数
lua有两个函数可用于捕获异常:pcall 和 xpcall,这两个函数很类似,都会在保护模式下执行函数,效果类似try-catch,可捕获并处理异常。
两个函数的原型如下:
pcall (func [, arg1, ···])
xpcall (func, errfunc [, arg ...
- 2015-10-19 23:13
- 浏览 714
- 评论(0)
Lua可以被C/C++ 代码调用,反过来也可以调用C/C++的函数,这使得Lua被广泛应用。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。Lua在目前解释型脚本引擎中,速度是最快的,这决定了Lua嵌入式脚本的最佳选择。文章列举lua使用中遇到的小问题,做个汇总。
if判断
lua把 nil 和false 视为“假”,其他都为“真”
local变量声明
local var1=1,var2
以上 ,var1和var2的作用域不同,var1是所在作用域的变量,var2可能是全局变量。实际上述命令解释后为 var1 取 "1,var2" 组 ...
- 2015-09-27 10:47
- 浏览 898
- 评论(0)
skynet是为在线游戏服务器打造的轻量级框架,使用c+lua实现,支持linux 。使用这套框架能获得很大收益,其中一个就是,基本只需要用lua开发,很少用到c,提高了开发效率。但是,skynet本身对系统有很大依赖性,安装说明过于简单,没有提及到。所以文章这里总结linux安装skynet问题,希望有所帮助。
skynet的安装过程
git clone https://github.com/cloudwu/skynet.gitcd skynet
makelinux
简单3步,对于很多高版本的系统来说,可能就这3步。但是,低版本系统可能无法安装,如下:
1. gcc版本问题
2. 缺少 ...
- 2015-09-23 23:48
- 浏览 658
- 评论(0)
有时候在VMware虚拟机中的安装了一些服务端程序,然后需要在局域网或公网中访问它。此时,VMware为我们提供了很好的解决方案,目前有两种可行的方案:桥接模式,和NAT模式。
桥接模式
在桥接模式下,VMware虚拟出来的系统就像是局域网中的一台独立的主机,拥有网内的IP地址,可以和网内任何机器互相访问。一般情况下,桥接模式下需要手动为虚拟机配置IP地址、子网掩码等。在VMware后来的一些版本可以复制当前主机的信息。
解释下这个步骤:
右键虚拟机,选择“配置”,弹出面板如下:
然后修改虚拟机的网络配置。这里以centos为例。
涉及到三个配置文件,分别是:
- 2015-09-09 13:03
- 浏览 783
- 评论(0)
最近在看skynet的代码,总体感觉跟 erlang很像,理念都是基于Actor模型,即万物皆Actor,Actor之间通过发送消息进行通信。(这里说的“万物”倾向于表示有能动作用,有独立行为的个体。)
不同的是,skynet使用 c 和 lua实现,这两个语言相较erlang比较流行。skynet的Actor是指skynet服务,skynet服务类似erlang进程,调度方式也有点接近,skynet启动时会初始化多个调度线程,用于同时处理多个服务,每个服务都有一定的调度次数约束(处理消息条数),挂起或达到约束就失去调度权。不过skynet服务的调度不是轮转,而是消息驱动方式(先来消息先调度 ...
- 2015-08-13 01:19
- 浏览 636
- 评论(0)
Erlang支持Monitor和Link两种监控进程的方式,使得所有进程可以连成一个整体。当某个进程出错退出时,监控进程会收到该进程退出的消息通知。有了这些特点,使用Erlang建立一个简单,并且健壮的系统就不是什么难事。前面有文章分析了两种方式的用法,这里分析下monitor和link的实现。
源码分析
monitor 和link实现有点类似,下面以monitor为例做说明(erlang版本R16B02)
erlang:monitor/2的实现
// bif.c 实现 erlang:monitor/2
BIF_RETTYPE monitor_2(BIF_ALIST_2)
{
Ete ...
- 2015-07-20 20:10
- 浏览 546
- 评论(0)
erlang集群是依靠epmd维护的,epmd是erlang集群节点间端口映射的守护进程,负责维护集群内的节点连接,提供节点名称到IP地址及端口的解析服务。
epmd 自定义端口号
epmd端口配置
默认情况下,epmd绑定在4369端口。但是,端口固定的话,容易遭受攻击,可能导致新节点的认证失败而无法启动,或无法加入集群。或者要在一台机器上部署不同的erlang集群,希望不会互相干扰。
epmd -daemon -port 5000
如果想用调试模式启动 epmd,使用epmd -d -port 5000
- 2015-06-25 02:23
- 浏览 849
- 评论(0)
通常,stderr和stdout被用来输出内容显示到屏幕,但是,有时候我们需要把这些信息写到指定的文件,方便随时查阅。最简单的实现方式就是,把 stderr/stdout 的输出重定向到文件。
stderr/stdout 重定向到文件
这里以stderr代码说明。
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
FILE *stream = freopen( "freopen.out", "w", stderr );
if( stream == NULL ...
- 2015-06-21 03:05
- 浏览 1585
- 评论(0)
Apache是时下最流行的Web服务器软件之一,支持多平台,可快速搭建web服务,而且稳定可靠,并可通过简单的API扩充,就可以集成PHP/Python等语言解释器。文章这里讲解如何在linux下编译 Apache,以及如何编译Apache模块。
linux下编译Apache
下载Apache源代码,编译过程如下:
$wgethttp://apache.fayea.com//httpd/httpd-2.4.12.tar.gz
$ tar -zxfhttpd-2.4.12.tar.gz
$ cd httpd-2.4.12
$ ./configure --prefix=/usr/local/ap ...
- 2015-06-09 19:24
- 浏览 267
- 评论(0)
erlang是开源的,很多人都研究过源代码。但是,从erlang代码到c代码,这是个不小的跨度,而且代码也比较复杂。所以这里,我利用一些时间,整理下erlang代码的执行过程,从erlang代码编译过程,到代码执行过程做讲解,然后重点讲下虚拟机执行代码的原理。将本篇文章,献给所有喜欢erlang的人。
erlang代码编译过程
erlang对开发者是友好的,从erlang程序文件编译成能被erlang虚拟机识别的beam文件,在这个编译过程还对开发者暴露中间代码。借助这个中间代码,我们就可以逐步探究erlang代码的执行过程。
- 2015-06-03 20:02
- 浏览 463
- 评论(0)
昨晚,朋友和我反馈SQLite数据库发生损坏有没有办法恢复。大致的情况是这样的,当数据库在使用时不小心用了新的文件覆盖数据库,导致了SQLite数据库出现了损坏,打开的时候出现要输入密码,而且不能把SQL语句dump下来。所以 ...
- 2015-05-06 22:23
- 浏览 629
- 评论(0)
很多人会注意到这个问题,erlang提供了2个时间函数,erlang:now() 和os:timestamp()。用法一样,都是返回当前的时间。具体时间是从1970年1月1日零时算起,到现在经过的时间,结果为{MegaSecs, Secs, MicroSecs}。
这两个函数有什么区别?
os:timestamp() 获取到的时间为操作系统的时间,不做任何修正;而erlang:now(),每次获取都会确保生成了唯一的时间,就是说,erlang:now()在实现上对时间做了一个校正,每次都生成一个单调向前的唯一值。
- 2015-04-29 00:34
- 浏览 504
- 评论(0)
最近项目组有同事做了erlang内部数据(Eterm)的分享。Eterm 是Erlang Term的简写,用来表示erlang中任意类型的数据,也就是说,erlang可以用到的任意数据,都能 Eterm表示。比如常见的atom、数字、列表、元组,甚至pid,port,fun,ets表等等都用Eterm可以表示。
Eterm
Eterm 在VM中主要分为三大类:列表,boxed对象,立即数。(这么分法主要是复杂的数据无法单靠1个机器字表示,在32位机器上,一个字长4字节,在64位机器上是8字节。)
其中,boxed对象表示了复杂数据类型,如元组,大整数,二进制等。而立即数表示的 ...
- 2015-03-31 01:16
- 浏览 436
- 评论(0)
最近erlang版本换到了R17,为了很好支持中文,项目所有模块文件第一行加了文件格式声明:%% coding: latin-1 。但是,erlide会识别这个语句,导致中文显示乱码,这个暂时没有选项可以解决这个问题。所以,我换了新的IDE,就是本文将要介绍的IntelliJ IDEA,这个IDE很好支持erlang,而且能支持eclipse的快捷键。
这里以最新的IDEA 14为例,讲解如何使用IntelliJ IDEA做erlang项目开发?
下载并安装IDEA
先下载IntelliJ IDEA,猛击这里,安装过程比较简单明了,这里暂时跳过。
安装erlang插件
可以IDEA插件列表 ...
- 2015-03-10 21:47
- 浏览 959
- 评论(0)