自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ve12345的博客

迁移 cwqqq.com

  • 博客(147)
  • 收藏
  • 关注

Sublime Text3修复函数快速查找

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

2016-09-09 20:55:00 663

微博URL短地址lua生成算法

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

2016-08-26 11:03:00 656

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 603

浅谈Windows 7系统启动过程

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

2016-07-08 22:38:00 775

svn分支管理的使用与经验

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

2016-06-30 22:59:00 1746

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 696

erlang 中文编码显示乱码问题

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

2016-02-28 23:51:00 1002

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

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

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

解决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 2262

Git版本控制与github使用

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

2015-10-27 09:39:00 176

浅析lua异常捕获处理机制

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

2015-10-19 23:13:00 2010

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

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

2015-09-27 10:47:00 1163

erlang进程监控的实现原理

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

2015-07-20 20:10:00 466

erlang集群IP及端口管理

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

2015-06-25 02:23:00 825

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 321

erlang虚拟机代码执行原理

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

2015-06-03 20:02:00 970

讨论SQLite数据库损坏与修复

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

2015-05-06 22:23:00 1109

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

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

2015-04-29 00:34:00 329

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 346

使用IntelliJ IDEA开发erlang项目

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

2015-03-10 21:47:00 1098

erlang系列文章阅读指引

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

2015-03-07 18:57:00 157

erlang系列文章阅读指引

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

2015-03-07 18:57:00 157

erlang系列文章阅读指引

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

2015-03-07 18:57:00 102

探讨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 346

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 339

erlang开发经验谈:防坑指南

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

2015-02-12 23:25:00 699

分析erlang热更新实现机制

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

2015-02-10 01:08:00 878

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 1973

erlang的学习资料和文献

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

2015-01-25 19:15:00 187

erlang的学习资料和文献

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

2015-01-25 19:15:00 96

erlang的学习资料和文献

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

2015-01-25 19:15:00 120

erlang send剖析及参数意义

erlang send是一个很基础的消息发送函数,用于进程把一个消息发给另外一个进程。这个函数可以同时用于本地节点进程通信,或者和远程节点进程之间的通信。前言最近有同事遇到erlang:send导致消息堆积问题,这个引起了我的强烈关注。我也看了这块的代码,这里简单做个分享。函数原型:erlang:send(Dest, Msg, Options) -> ResOptions可以是...

2015-01-24 01:07:00 773

利用TortoiseSVN建立本地SVN库

Svn有很多常用功能,比如代码比较,回退,还原,归档等等,很多时候我们想使用到这些svn功能,但又不想大费周章建立服务端SVN库。其中,建立svn库主要有两种办法,一种就是装服务端版svn软件,另一种就是文章所讲的,利用TortoiseSVN建立本地SVN库。前提是你已安装了TortoiseSVN这个客户端版本的svn工具,下载地址猛击这里建立一个新的文件夹,这里命名为local_svn,然后,...

2015-01-16 23:32:00 1113

erlang binary数据转换的问题

erlang提供了binary_to_term,把一个二进制数据转为原始的erlang数据。但是,这个函数也有副作用。如果直接将对端传来的数据做一次 binary_to_term,就可能会导致VM crash掉。binary_to_term 副作用这是因为二进制数据带有原子时,binary_to_term会生成这些原子。但VM原子总数是有限制,而且原子不参与GC。假如数据带有原子数量超过erl...

2015-01-12 00:11:00 462

erlang语言实现binary_to_term

erlang提供了两个函数用于erlang数据与二进制的转换,term_to_binary 把erlang数据转成一个二进制数据,binary_to_term 则是把二进制数据转为原始的erlang数据。这两个函数都是c实现的,效率很高,可用于序列化和反序列化数据,可以被直接用来当作网络封包协议。文章主要探讨这种二进制协议数据的组织形式,以及用erlang语言实现binary_to_term...

2015-01-09 01:29:00 317

改进erlang版本的protobuf

protobuf是google开源的序列化工具,类似xml,json,基于二进制,比XML表示同样一段内容要短小得多,还可以定义一些可选字段,用于服务端与客户端通信。google没有提供对erlang语言的直接支持,所以这里使用到的第三方的protobuffs库,文章在这个库的基础上做一些改进。在开始阅读这篇文章前,先了解一下原来erlang版的protobuf使用例子。改进版的protobu...

2014-12-24 20:25:00 256

erlang mnesia 常用使用技巧

Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。文章收集一些常用 mnesia 使用技巧。mnesia判断表是否存在%% 确保已经 mnesia:start().lists:member(Tab, mnesia:system_info(tables))....

2014-12-23 23:12:00 272

Google Protobuf 协议分析

protobuf 是google开源的一个序列化框架,类似xml,json,最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。还可以定义一些可选字段,用于服务端与客户端通信。前面几篇文章说了protobuf的用法,看到网上也没有分析protobuf协议的文章,就利用一些时间写了protobuf 的协议分析,希望大家喜欢。protobuf协议核心思想基于128bits的数值存储...

2014-12-22 00:07:00 2337 1

再说说erlang的模块热更新

前面的文章有讲过erlang热更新,只是大概介绍,现在再深入一点讲erlang的模块热更新。erlang的热更新是模块级别的,就是一个模块一个模块更新的。热更新是什么,就是在不停止系统的情况下对运行的代码进行替换。如何进行热更新?c(Mod) -> compile:file(Mod), code:purge(Mod), code:load_file(Mod).以上就是shel...

2014-11-17 00:58:00 478

erlang进程trap_exit捕获异常退出

Erlang除了提供try catch,catch等语法,还支持link和monitor两种监控进程的机制,使得所有进程可以连接起来,组成一个整体。除了这样,erlang还提供trap_exit方法让进程主动捕获异常退出消息,避免发生异常时被系统关闭。trap_exit说明erlang设计上有速错(fast on fail)的原则,就是让问题快速暴露,迅速停止这个进程的运行,以避免这个进程错误...

2014-11-16 15:56:00 441

空空如也

空空如也

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

TA关注的人

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