自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 收藏
  • 关注

Sublime Text3修复函数快速查找

Sublime Text 是一个很优秀的代码编辑器,支持多达70种开发语言。不管是主流的开发语言如C, C++, Java等,还是稍冷门的Erlang, Go, Lisp等,都支持语法高亮,还可以手动扩充。优点是轻巧,体积小,运行速度快。不足是缺乏项目编译和调试,虽然可以外挂插件,但效果有限。默认情况下,Sublime Text支持函数快速查找,按Ctrl+Shift+R打开查找面板,就可以快...

2016-09-09 20:55:00 586

详解Linux命令行自动补全

在Linux命令行下,输入字符后,按两次Tab键,shell就会列出以这些字符打头的所有可用命令。如果只有一个命令匹配到,按一次Tab键就自动将这个命令补全。比如,想更改密码,但只记得这个命令前几个字母是pass。这时候,按Tab键,shell就自动输出 passwd 命令,非常方便。当然,除了命令补全,还有路径、文件名补全。这个在我们 cd 到特定目录时特别好用。命令补全效果,如下:...

2016-09-03 16:26:00 6120

微博URL短地址lua生成算法

短地址(Short URL),或叫短网址、短链接等等,就是比较短的URL地址。借助短地址,可以将原来冗长的网址替换成简短的网址,让使用者可以更容易分享链接。在Web 2.0的今天,不得不说,这是一个潮流(我喜欢这句话,就原封不动从别人文章复制过来了)。例如:http://t.cn/pQ8LLW短地址,主要应用场景是微博。微博消息限制字数为140字,如果要发一些链接,这个网址可能占用一半字数了,...

2016-08-26 11:03:00 555

windows下编译lua5.3源代码

最近在windows下搞lua测试,发现lua自带的库有点少,缺少md5等等很常用的库。网上确实有这些第三方库,但这个md5库找不到windows的版本,就想着自己手动编译。不料,这个md5库需要lua5.3的静态链接库。最后,就参考国外一篇文章,尝试windows下编译lua源代码。lua源代码编译1、确保安装了 Visual Studio编译器,这里以 VS 2010为例。2、下载l...

2016-08-25 23:16:00 493

浅谈Windows 7系统启动过程

前些天,抽空研究了系统封装工具的打包安装机制,也借这个机会把Windows系统启动过程给看了。现在简单做个分享,谈谈对win7启动过程的理解,然后再分析下进程自启动原理,说明系统封装工具是怎么引导的。如果想了解windows原理,Windows Internals 可能是最好的读物了。这本书在注1提到,有链接可以下载阅读。好了,回到今天的主题:Win7系统启动过程及进程自启原理。这里,先贴...

2016-07-08 22:38:00 615

打造自己的windows一键安装系统

现在网上,windows一键安装系统一搜就是一大堆,但几乎所有的系统都会绑定IE主页和预装软件,就算打着纯净版的旗号。而手动安装系统又是非常繁琐,一步一步确定,最后还要自己下载装驱动,更新系统补丁,非常麻烦。正因为如此,我们才想打造自己的windows一键安装系统镜像,以后安装就非常方便了,还可以定制自己的默认程序。打造个性化的windows一键安装系统镜像,有两种方法,分两篇讲:1、修改别...

2016-07-05 12:49:00 1496

svn分支管理的使用与经验

最近项目用上了svn分支管理,因为项目太过庞杂,版本迭代也过于频繁,致使多个版本的代码交杂在一起,难以维护,无法保证其中某个版本的稳定性。当然,我们也用过很土的办法,代码复制一份出来,但是,这个副本也需要加上新开发的功能。所以,我们决定使用svn分支管理。当然,这有代价,svn版本管理对二进制文件不友好,可能文件分支合并时二进制文件会难以处理。(这里说的二进制文件,泛指所有非文本文件,比如说美术...

2016-06-30 22:59:00 1663

lua匹配UTF-8中文汉字

lua5.3虽然支持utf-8,但是自带的string库不支持汉字的处理,而且lua的正则实现也比较鸡肋,很难匹配中文。所以文章讨论UTF-8字符集,中文汉字的表示方法,然后说明lua如何匹配UTF-8中文汉字。初识UTF-8UTF-8是Unicode的一种实现,是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开...

2016-05-03 12:04:00 4427

linux下编译和使用lua及cjson

前面的文章记录了lua的编译和使用,这里再整理一下,侧重说明下lua json库的编译及使用,文章最后再谈下cjson使用中有可能遇到的excessively sparse array 问题及解决方法。lua编译lua的源代码安装过程挺简单的,以lua5.3为例# wget http://www.lua.org/ftp/lua-5.3.2.tar.gz# tar -zxf lua-5....

2016-04-05 23:51:00 589

Erlang 游戏开发经验总结

早早就想写这篇文章,但这段时间忙于工作的事情,就不自觉地给了自己各种懒惰的理由。现在回头看下这个问题,总结下erlang 游戏开发经验。就当是,为我过去一段时间的erlang开发经历,画上一个小句号。在写这篇文章前,我看过孔庆泉同学写过的Erlang 性能优化总结[2],字里行间有一点自己的体会,使得我心血来潮,好像重新做回了erlang开发的感觉。所以,现在回过头,整理下游戏开发对erlang...

2016-03-20 22:43:00 1430

erlang 中文编码显示乱码问题

许久没做erlang开发了,最近有网友问到erlang的问题,就抽时间看下。问题是这样的,模块有中文,将中文直接打印出来,shell下显示会出现乱码,但如果先将中文转成binary,就可以正常显示出来。shell中文乱码问题这里以一个简单的例子,说明下:-module(m).-compile(export_all).test() -> io:format("~ts~n",...

2016-02-28 23:51:00 901

linux获取后台进程的控制台数据

linux提供了一个daemon函数,使得进程可以脱离控制台运行,实现了后台运行的效果。但是进程后台运行后,原本在终端控制台输出的数据就看不到了。那么,怎样才能找回这些数据?这里,文章主题就围绕着 如何获得后台进程的控制台数据,其中的原理要从daemon说起。daemon主要做两件事:1、创建子进程,退出当前进程,并且以子进程创建新会话。这样,就算父进程退出,子进程也不会被关闭2、...

2016-01-08 12:18:00 1085 1

skynet 控制台管理使用技巧

skynet 自带了一个控制台服务,可以很方便获取和调试 skynet 运行数据,而且可以热更新代码,所以,弄明白skynet控制台管理可以让你更好地使用skynet,甚至改进这个控制台服务,以满足不同业务需求。这个服务默认不会启动,需要你手动启动它,如下:skynet.newservice("debug_console", 8000)设计原因,调试控制台只监听本地地址 127.0.0...

2016-01-07 01:14:00 686

解决Centos yum 更新出错

今天在VM10下装 centos 7,遇到的问题不少,其中一个是yum更新失败问题。这个问题是我本地网络受限导致的,无法连接 centos 的镜像地址。显示错误如下:Loaded plugins: fastestmirror, langpacksCould not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&a...

2015-12-22 09:03:00 2177

skynet服务的本质与缺陷

skynet是为多人在线游戏打造的轻量级服务端框架,使用c+lua实现。使用这套框架的一个好处就是,基本只需要lua,很少用到c做开发,一定程度上提高了开发效率。但skynet文档也相对较少,所以这里利用一点时间学习和总结skynet相关内容,文章这里就讲解下skynet服务的本质与缺陷,希望能有所帮助。skynet服务的本质或许我们对skynet服务有着太多的疑问:skynet服务究竟是什...

2015-11-03 22:45:00 800

Git版本控制与github使用

Git是一个开源的分布式版本控制系统,用于敏捷高效地管理项目。相较svn,git最大的特点就是分布式,每个人都拥有一个克隆的版本库,所以提交代码、查看日志、创建分支、合并分支、回退等等操作都直接在本地完成而不需要网络。当然,本地版本库需要和远程共享版本库同步,这就需要网络了。github,作为一家git服务提供商,可以托管你的git版本库,而且对于开源项目是可以免费托管,这对于开源项目是一大利...

2015-10-27 09:39:00 147

浅析lua异常捕获处理机制

异常捕获是高级语言的一大特性,通过对异常的捕获和处理,可以有效提高系统的稳定性和健壮性。因为无论再怎样改进代码,都不可避免出现一些异常,例如文件io错误、网络错误、内存错误等等,就要求编码对错误进行捕获,同时打印日志以便开发人员跟进问题的处理。当然,lua也提供了接口用于捕获运行时异常。lua异常捕获函数lua有两个函数可用于捕获异常:pcall 和 xpcall,这两个函数很类似,都会在保...

2015-10-19 23:13:00 1612

用lua这么久,你真的了解吗

Lua可以被C/C++ 代码调用,反过来也可以调用C/C++的函数,这使得Lua被广泛应用。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。Lua在目前解释型脚本引擎中,速度是最快的,这决定了Lua嵌入式脚本的最佳选择。文章列举lua使用中遇到的小问题,做个汇总。if判断lua把 nil 和false 视为“假”,其他都为“真”local变量声明l...

2015-09-27 10:47:00 1047

linux安装skynet问题总结

skynet是为在线游戏服务器打造的轻量级框架,使用c+lua实现,支持linux 。使用这套框架能获得很大收益,其中一个就是,基本只需要用lua开发,很少用到c,提高了开发效率。但是,skynet本身对系统有很大依赖性,安装说明过于简单,没有提及到。所以文章这里总结linux安装skynet问题,希望有所帮助。skynet的安装过程git clone https://github.com/...

2015-09-23 23:48:00 1023

skynet项目lua代码简单加密

最近在看skynet的代码,总体感觉跟 erlang很像,理念都是基于Actor模型,即万物皆Actor,Actor之间通过发送消息进行通信。(这里说的“万物”倾向于表示有能动作用,有独立行为的个体。)不同的是,skynet使用 c 和 lua实现,这两个语言相较erlang比较流行。skynet的Actor是指skynet服务,skynet服务类似erlang进程,调度方式也有点接近,sk...

2015-08-13 01:19:00 613

erlang进程监控的实现原理

Erlang支持Monitor和Link两种监控进程的方式,使得所有进程可以连成一个整体。当某个进程出错退出时,监控进程会收到该进程退出的消息通知。有了这些特点,使用Erlang建立一个简单,并且健壮的系统就不是什么难事。前面有文章分析了两种方式的用法,这里分析下monitor和link的实现。源码分析monitor 和link实现有点类似,下面以monitor为例做说明(erlang版本R...

2015-07-20 20:10:00 360

erlang集群IP及端口管理

erlang集群是依靠epmd维护的,epmd是erlang集群节点间端口映射的守护进程,负责维护集群内的节点连接,提供节点名称到IP地址及端口的解析服务。epmd 自定义端口号epmd端口配置默认情况下,epmd绑定在4369端口。但是,端口固定的话,容易遭受攻击,可能导致新节点的认证失败而无法启动,或无法加入集群。或者要在一台机器上部署不同的erlang集群,希望不会互相干扰。epmd...

2015-06-25 02:23:00 606

C++ stderr/stdout 重定向到文件

通常,stderr和stdout被用来输出内容显示到屏幕,但是,有时候我们需要把这些信息写到指定的文件,方便随时查阅。最简单的实现方式就是,把 stderr/stdout 的输出重定向到文件。stderr/stdout 重定向到文件这里以stderr代码说明。#include <stdio.h>#include <stdlib.h>int main( void...

2015-06-21 03:05:00 2561

Linux下编译安装Apache及模块

Apache是时下最流行的Web服务器软件之一,支持多平台,可快速搭建web服务,而且稳定可靠,并可通过简单的API扩充,就可以集成PHP/Python等语言解释器。文章这里讲解如何在linux下编译 Apache,以及如何编译Apache模块。linux下编译Apache下载Apache源代码,编译过程如下:$wgethttp://apache.fayea.com//httpd/htt...

2015-06-09 19:24:00 268

erlang虚拟机代码执行原理

erlang是开源的,很多人都研究过源代码。但是,从erlang代码到c代码,这是个不小的跨度,而且代码也比较复杂。所以这里,我利用一些时间,整理下erlang代码的执行过程,从erlang代码编译过程,到代码执行过程做讲解,然后重点讲下虚拟机执行代码的原理。将本篇文章,献给所有喜欢erlang的人。erlang代码编译过程erlang对开发者是友好的,从erlang程序文件编译成能被...

2015-06-03 20:02:00 602

讨论SQLite数据库损坏与修复

昨晚,朋友和我反馈SQLite数据库发生损坏有没有办法恢复。大致的情况是这样的,当数据库在使用时不小心用了新的文件覆盖数据库,导致了SQLite数据库出现了损坏,打开的时候出现要输入密码,而且不能把SQL语句dump下来。所以,文章这里整理SQLite数据库出现损坏的所有情况,以及如何修复损坏的SQLite数据库文件。SQLite算是非常稳定的数据库,不容易出现损坏,就算应用程序崩溃,或者操作...

2015-05-06 22:23:00 1016

从erlang时间函数说到时间校正机制

很多人会注意到这个问题,erlang提供了2个时间函数,erlang:now() 和os:timestamp()。用法一样,都是返回当前的时间。具体时间是从1970年1月1日零时算起,到现在经过的时间,结果为{MegaSecs, Secs, MicroSecs}。这两个函数有什么区别?os:timestamp() 获取到的时间为操作系统的时间,不做任何修正;而erlang:now(),每次...

2015-04-29 00:34:00 243

erlang catch的内部实现(初稿)

最近项目组有同事做了erlang内部数据(Eterm)的分享。Eterm 是Erlang Term的简写,用来表示erlang中任意类型的数据,也就是说,erlang可以用到的任意数据,都能 Eterm表示。比如常见的atom、数字、列表、元组,甚至pid,port,fun,ets表等等都用Eterm可以表示。EtermEterm 在VM中主要分为三大类:列表,boxed对象,立即数。...

2015-03-31 01:16:00 280

使用IntelliJ IDEA开发erlang项目

最近erlang版本换到了R17,为了很好支持中文,项目所有模块文件第一行加了文件格式声明:%% coding: latin-1 。但是,erlide会识别这个语句,导致中文显示乱码,这个暂时没有选项可以解决这个问题。所以,我换了新的IDE,就是本文将要介绍的IntelliJ IDEA,这个IDE很好支持erlang,而且能支持eclipse的快捷键。这里以最新的IDEA 14为例,讲解如何使...

2015-03-10 21:47:00 922

erlang系列文章阅读指引

这篇文章相当于本博客 erlang 专栏的目录页,目的是引导读者,可以很快定位到想看的文章。这里笼统的概括为erlang基础知识、常见问题、节点通信、mnesia常见问题,以及内部实现。基础知识Erlang/OTP 构建 ApplicationErlang/OTP 监督者(Supervisor)Erlang热部署 - 心跳机制(heart)Erlang热部署 - 模块热更新(code)...

2015-03-07 18:57:00 115

erlang系列文章阅读指引

这篇文章相当于本博客 erlang 专栏的目录页,目的是引导读者,可以很快定位到想看的文章。这里笼统的概括为erlang基础知识、常见问题、节点通信、mnesia常见问题,以及内部实现。基础知识Erlang/OTP 构建 ApplicationErlang/OTP 监督者(Supervisor)Erlang热部署 - 心跳机制(heart)Erlang热部署 - 模块热更新(code)...

2015-03-07 18:57:00 119

erlang系列文章阅读指引

这篇文章相当于本博客 erlang 专栏的目录页,目的是引导读者,可以很快定位到想看的文章。这里笼统的概括为erlang基础知识、常见问题、节点通信、mnesia常见问题,以及内部实现。基础知识Erlang/OTP 构建 ApplicationErlang/OTP 监督者(Supervisor)Erlang热部署 - 心跳机制(heart)Erlang热部署 - 模块热更新(code)...

2015-03-07 18:57:00 77

探讨erlang消息选择性接收特性

从 rabbitMQ 代码中找到 gen_server2 , 对gen_server进行了一些优化。看到前辈写的博文也提到这个,引发了我的思考。见gen_server2 - OTP gen_server优化版。gen_server2 引发的思考正如 litaocheng 所说的:gen_server 和 gen_server2 最大的不同是:gen_server2 收到任何一条消息放到外部...

2015-03-06 01:44:00 280

erlang 接入远程shell控制台

erlang shell是用户与 erlang 运行时系统交互的界面程序。事实上,erlang VM的运行不依赖任何shell,只要在启动的时候添加参数detached就可以脱离终端。-detachedStarts the Erlang runtime system detached from the system console. Useful for running daemons a...

2015-02-16 11:02:00 290

erlang开发经验谈:防坑指南

任何语言在使用中都会遇到这样那样的问题,erlang也是。这里整理下我遇到的一些问题,避免继续踩坑。说实话,“防坑指南”这个标题有点过于标新立异,不过还是希望能引起重视,避免在实际开发中重复犯这些问题。'--' 运算与 '++'运算1> [1,2,3,4] -- [1] -- [2].[2,3,4]算是erlang经典的问题了。这是从后面算起的,先算 [1] -- [2] ,得...

2015-02-12 23:25:00 629

分析erlang热更新实现机制

Joe Armstrong在描述Erlang的设计要求时,就提到了软件维护应该能在不停止系统的情况下进行。在实践中,我们也因为这种不停止服务的热更新获益良多。那么Erlang是如何做到热更新的呢?这就是本文要讨论的问题。在前面的文章也说到了。erlang VM为每个模块最多保存2份代码,当前版本'current'和旧版本'old',当模块第一次被加载时,代码就是'current'版本。如果有新的...

2015-02-10 01:08:00 448

C/C++ 数组下标可以是负值

我们知道,数组的第一个元素下标是 0。数组的范围也就是从 array[0] 到 array[size – 1]。 但实际上C/C++支持正负下标。 负下标必须在数组边界内;否则结果不可预知。 以下代码显示了正数组和负数组下标:#include <iostream>using namespace std;int main() { int intArray[1024];...

2015-02-01 20:02:00 1854

erlang的学习资料和文献

最近有朋友想学习erlang,问我有什么好入门的学习资料。我也借此机会整理一下下载地址:http://download.csdn.net/detail/cwqcwk1/8395531入门资料:erlang文档手册(最适合入门)erlang编程介绍erlang位运算与二进制解析erlang二进制高效编程erlang异常处理详解开发经验:面对软件错误构建可靠的分布式系统编写分布...

2015-01-25 19:15:00 152

erlang的学习资料和文献

最近有朋友想学习erlang,问我有什么好入门的学习资料。我也借此机会整理一下下载地址:http://download.csdn.net/detail/cwqcwk1/8395531入门资料:erlang文档手册(最适合入门)erlang编程介绍erlang位运算与二进制解析erlang二进制高效编程erlang异常处理详解开发经验:面对软件错误构建可靠的分布式系统编写分布...

2015-01-25 19:15:00 77

erlang的学习资料和文献

最近有朋友想学习erlang,问我有什么好入门的学习资料。我也借此机会整理一下下载地址:http://download.csdn.net/detail/cwqcwk1/8395531入门资料:erlang文档手册(最适合入门)erlang编程介绍erlang位运算与二进制解析erlang二进制高效编程erlang异常处理详解开发经验:面对软件错误构建可靠的分布式系统编写分布...

2015-01-25 19:15:00 92

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除