自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(281)
  • 资源 (3)
  • 收藏
  • 关注

原创 [Erlang 0075] Bad value on output port 'tcp_inet'

小超同学遇到一个问题:gen_tcp:send方法报错,Bad value on output port 'tcp_inet';按照字面意思是发往port的数据值是bad value; 打开erl5.9\lib\kernel-2.15\src\gen_tcp.erl看一下gen_tcp的源码: %%%% Send%%-spec send(Socket, Pack

2012-08-30 10:28:46 1215

原创 [Erlang 0073] Erlang Event Tracer 图形化展示

Event Tracer (ET) 是Erlang类库里面比较有趣的一个东西,可以使用它进行事件数据收集并进行图形化展示.它可以收集事件数据并进行图形化展示.我觉得在初学阶段用这种方式获得更为直观的印象.官方文档地址:http://www.erlang.org/doc/apps/et/et_intro.html 下面几行代码快速启动了ET,我们看一下:Eshell V5.9.1

2012-08-30 10:28:45 894

原创 电影中的计算机 过去与未来

这是在公交车上胡思乱想的东西:计算机发展的各个阶段都可以找一些电影串联起来,《听风者》,《刺客联盟》,《达芬奇密码》,《致命魔术》,《源代码》越想越多,干脆写下来;     '你的手机运算能力相当于阿波罗登月时NASA所有计算机运算能力的总和。但NASA把人类发射到了月球,你却发射小鸟去砸猪'     这个广为流传的段子在果壳上还有一个讨论:现在我们用的苹果手机的计算能力真

2012-08-30 10:28:45 2960

原创 [Erlang 0074] Erlang 杂记 IV

休假回来,调整一下状态,先把Evernote里面一些比较零散的东西整理出来;过去一个月对于Erlang开发者还是有些惊喜的,比如《Erlang/OTP并发编程实战》终于出版了;比如也可以看到英文版了.下面第一条消息就是关于Erlang的另外一本好书:《Learn You Some Erlang》 Learn You Some Erlang 两则  Erlang学习有一个非常棒的网站: 

2012-08-30 10:28:45 1388

原创 [Erlang 0070] Erlang Queue

Queue 是Erlang的队列,它的内部实现充分考虑到了效率,值得学习.估计"如何用链表高效实现Queue"这个也会在面试题目中频繁出现吧.queue模块中除了len/1, join/2, split/2, filter/2 and member/2复杂度是O(n)之外所有的操作的复杂度都在O(1).怎么做到的呢? 巧妙的实现   queue使用两个list来实现,这两个List

2012-08-30 10:28:44 853

原创 [Erlang 0071] Erlang STDLIB 中文注释版

学习Erlang第一个痛是IDE支持,第二个痛就是中文资料太少;初学Erlang受惠于余锋,立涛等人贡献的中文资料,回报Erlang中文社区,这里是Erlang STDLIB的中文注释版;       什么是中文注释版?     这个版本记录了我从开始学习Erlang在使用标准库过程中遇到的问题,以及测试代码;目前绝大多数的常用类库,都可以找到第一次使用时记录的笔记以及测试代码

2012-08-30 10:28:44 1000

原创 [Erlang 0072] Erlang XML处理解决方案

XML以及相关的XSLT,XPath,XSD工具在数据层面为我们提供了极大的灵活性和便利.我们游戏协议的代码自动生成就是首先使用XSD工具设计了协议的Schema,然后使用.net的xsd工具直接生成实体类,然后就直接在工具中操作对象就可以了,协议的XML文件也可以通过事先的Schema检查来校验数据规范性;Erlang类库提供了对于XML的支持,可能你在STDLIB中并没有找到,这是因为这部分被

2012-08-30 10:28:44 1181

原创 《黑客与画家》读书笔记

这几天一直沉浸在《黑客与画家》所营造的强大思维气场之中,该书是Paul Graham 的博客文集,涵盖了软件开发,思维方式,编程语言,创业,社会财富,社会价值,自由等话题的思考.在读过第二遍之后,我决定把书中对我触动较大的内容整理出来.笔记于此,注:文章内容版权归原作者和翻译者所有.喜欢本书请购买正版.   思维方式文艺复兴时期的代表人物阿尔伯蒂名言"任何一种艺术,

2012-08-30 10:28:44 3206 2

原创 [Erlang 0067] Erlang gb_trees

gb_trees (General Balanced Trees) 通用二叉查找树,通常被用作有序字典.与普通未平衡二叉树相比没有额外的储存开销,这里所说的额外的存储开销是指是否使用额外的metadata记录节点相关的信息,dict和array的实现就使用了这样的描述信息,换句话说gb_trees是自描述的.性能优于AVL trees. 相关论文: General Balanced Trees h

2012-08-30 10:28:43 2713

原创 [Erlang 0068] Erlang dict

dict是动态哈希表实现的字典.在接口上和orddict保持一致,在实现上和array动态扩展的思路类似.dict使用的是动态哈希技术实现,理论依据是论文: "The Design and Implementation of Dynamic Hashing for Sets and Tables in Icon" ,论文地址: http://www.2007.cccg.ca/~morin/teac

2012-08-30 10:28:43 859

原创 端午拼图记:我钟爱的香港电影

端午抽了点时间整理自己的资料库,其中有大量香港电影的剧照和截图,拼了几张,欣赏下

2012-08-30 10:28:43 1436

原创 《标签:标记系统设计实践》读书笔记

《Tagging: People-powered Metadata for the Social Web》出版于2008年,中文版译为《标签:标记系统设计实践》.Tag,RSS都是Web 2.0时代的标志性建筑.这本书就Tag的方方面面做了比较全面的分析,但是有些章节内容组织逻辑上有点问题,瑕不掩瑜.笔记如下: 分面分类   "缤纷色彩闪出的美丽,是因它没有分开每种色彩",黄家驹歌里唱

2012-08-30 10:28:43 2048

原创 [Erlang 0069] Erlang ordsets

ordsets 是lists实现的有序集合.由于数据元素的变动都会触发重新排序,所以ordsets效率不高,只适用于数据量比较小的场景.ordsets中包含了常见的集合操作:求交集,并集,是否为子集,是否存在交集6> ordsets:intersection([1,2,3,4],[3,4,5,6]).[3,4]7> ordsets:union([1,2,3,4],[3,4,5,

2012-08-30 10:28:43 972

原创 [Erlang 0064] Erlang Array

从开始学习编程的时候Array就是基础数据结构,也是被使用最频繁的,但是在Erlang中一等公民是List和tuple,在项目中到处都是List的各种处理,但是Array却少见踪迹.好奇心驱使,最近了翻看了一下Array的代码实现. array基础  [1] array可动态扩展大小;可固定大小,可按需自动增长.  [2] 如果没有明确赋值会使用默认值undefined,要区分

2012-08-30 10:28:42 976

原创 [Erlang 0065] Erlang proplists

proplists 模块适用数据量较少的场景,处理配置文件和函数选项时常用.proplists对内部数据结构是Key-Value键值对形式,第一个元素做key用来查询和删除,如果一个key有多个值就会使用第一次出现的值,其它被忽略.proplists对于Key和Value的约束极其宽松,可以是任意term().甚至可以把{Atom,true}缩写成为Atom.也正是由于这样宽松的数据约束,prop

2012-08-30 10:28:42 1177

原创 [Erlang 0066] Erlang orddict

orddict 是用List实现的有序Dictionary. orddict按照Key进行排序,Key值不重复.每一次增加新数据项都会进行重新排序.由于也是List和tuple实现,所以和proplists一样orddict也不适合大数据量的情况.注意orddict进行Key比较使用的是相等(==).     LYSE上提到orddict在复杂性和效率上达到折中,元素最好不要超过75个.

2012-08-30 10:28:42 970

原创 [Erlang 0061] Erlang Code Snippet Ⅱ

整理了最近一段时间记录的Erlang代码片段,还有大量简短的代码都已经整理在官方文档的PDF中.从开始学习Erlang,写的测试代码都会整理到PDF中,从这个习惯中得益匪浅.可以在PDF上做批注,图形的工具我用的是:PDF-XChange Viewer上一次代码片段整理:[Erlang 0043] Erlang Code Snippet   record 转 proplist 

2012-08-30 10:28:41 760

原创 The Matrix Revolutions

一个负责运行虚拟现实(VR)系统的主机(Main Frame),长期运行,抛出了6次异常,前5次异常触发自动更新程序AutoUpdater完成自身软件升级,触发需要使用密钥(Key Maker)通过验证。第六次异常处理执行没有按照之前的异常处理方式,一个影响就是VR中的垃圾清理程序不断的使用VR数据进行深拷贝(Deep Copy),结果VR中的天气虚拟系统、动力系统甚至包括自动更新程序的守护进程全

2012-08-30 10:28:41 879

原创 [Erlang 0062] Erlang Unicode 两三事

不少人和我一样在Erlang实践过程中都会遇到中文的问题,其中有中文显示的问题有正则表达式匹配的问题等等;今天请教立涛之后梳理了一下,整理于此.概念Unicode UTF-8    《深入理解计算机系统》里面提到过"信息=数据位+上下文",同样的数据在不同的上下文环境有不同的解读方式; 同样的二进制数据按照不同的编码规范去解析得出的结果也不尽相同,如果使用错误的编码方式去解读数据就会出现所

2012-08-30 10:28:41 1789

原创 [Erlang 0063] Joe Armstrong 《A Few Improvements to Erlang》EUC 2012

EUC(Erlang User Conference)2012上Joe Armstrong的演讲主题是: 《A Few Improvements to Erlang》,很惊喜!!!因为Joe Armstrong提到的问题,我一直保持关注,而且他提到的前面两种方法我都实践过, : ) Note:下面的截图来自Joe Armstrong的演讲稿,下载地址: http://www.erlang-

2012-08-30 10:28:41 760

原创 [Erlang 0056] 用fun在Erlang Shell中编写尾递归 Ⅱ

之前研究了一个问题"[Erlang 0050]用fun在Erlang Shell中编写尾递归",一直对这个问题保持着关注;最近在搜索引擎里找到同一个问题,题目足够清晰calling fun() from fun() 它提供了另外一种解决解决方案:Y-combinator!%%That's easy, you need the Y-combinator!y(M) ->

2012-08-30 10:28:40 639

原创 [Erlang 0057] Erlang 排错利器: Erlang Crash Dump Viewer

Erlang Crash Dump Viewer真的是排错的天兵神器,还记得我们之前曾经讨论过[Erlang 0013]抓取Erlang进程运行时信息 [Erlang 0012]Erlang Process input queue ,下面是我梳理的"How to interpret the Erlang crash dumps"的文档;官方地址是:http://www.erlang.org/d

2012-08-30 10:28:40 1511

原创 [Erlang 0058] Erlang Function调用效率

Erlang方法调用有m:f(a),M:F(a),fun,f(),apply/3几种方法,调用效率如何呢?《Erlang/OTP in Action》一书中有一个总结我们看下:    即模块内调用和模块间的方法调用速度差异不大;要关注一下元编程方式调用(apply调用)要慢的多,除此之外除非是在性能要求特别高的场景否则不必过于在意这点性能差异;这个在官方文档中有大致相同的结果: 

2012-08-30 10:28:40 700

原创 Linux/Unix设计思想 读书笔记

初识Erlang时感觉怪异的方法命名,写Shell脚本时的恍然大悟,原来一切源头都在《Linux/Unix 设计思想》 下面是我的读书笔记,按照我自己的理解重新梳理了一下:读书笔记 尽快建立原型,寻找90%的解决方案,先运行起来再说保持程序的小巧,一次做好一件事情站在巨人的肩膀上 在原有软件的基础上进行加强和扩展各部分之和大于整体高效率和可移植性之间往往存在

2012-08-30 10:28:40 794

原创 [Erlang 0059] Erlang日期与时间处理

在开发过程中,有两个概念是和地区区域相关的:字符编码和时间;编码和时间的规范演变过程中有文化的冲突有历史的遗留,是软件开发中充满人文气息的一角;关于字符编码我之前整理过一篇文章, [Erlang 0024]Erlang二进制数据处理 这部分知识很有意思,特别是格列佛游记所引出的大端小端概念,妙趣横生;平时笔记中也零零散散记录了一些和时间处理相关的内容,今天按图索骥把相关的资料整理汇集于此.  

2012-08-30 10:28:40 2329

原创 [Erlang 0060] Joe Armstrong 论文《面向软件错误构建可靠的分布式系统》笔记

周末读了两篇论文"On Designing and Deploying Internet-Scale Services"和Joe Armstrong的论文"面对软件错误构建可靠的分布式系统",这两篇论文实战内容相当多,整理笔记于此,备忘. On Designing and Deploying Internet-Scale Services [HTML]英文版"Making reliab

2012-08-30 10:28:40 958

原创 [Erlang 0055] Erlang Shared Data using mochiglobal

%% @doc Abuse module constant pools as a "read-only shared heap" (since erts 5.6)     Erlang 进程之间的消息发送都是通过数据拷贝实现的,只有一个例外就是同一个Erlang节点内的 refc binaries.关于Erlang二进制相关的内容可以参看[Erlang 0024]Erlang二进制数据处理

2012-08-30 10:28:39 672

原创 [Think] 解决问题 Ⅱ

2009年的时候写了一篇"解决问题:心态 原则 方法",那么快就3年了,今天继续这个话题,把我解决问题的心得记录分享一下;下面的内容来自我平时的笔记,我按照问题解决的过程,重新整理了一下.  从准确的描述问题开始你现在能不能用一句话描述清楚遇到的问题?  问题是什么?形式上/直观上的描述描述的过程中,发现逻辑上说不过去了,可以发现盲点排除干扰因素,明

2012-08-30 10:28:39 565

原创 Disk is Tape, Flash is Disk

今天遇到一副来自Google的图罗列了常见操作的时间损耗,见高清大图:   这张图让我想到之前在使用Redis时看到Jim Gray那句被坊间流传许久的话:"Tape is Dead, Disk is Tape, Flash is Disk, RAM Locality is King".(磁带已死,磁盘是新磁带,闪存是新磁盘,随机存储器局部性是为王道.) 这句话的原始出处在此: h

2012-08-30 10:28:39 792

原创 回头再说 .net framework从1.0说到4.0

做为技术人,这些年我们一直追技术,不仅技术需要反思总结,学习技术的过程本身也需要调整,优化;爱因斯坦说什么叫做愚蠢,就是用同样的方法做同一件事情还期望不同的结果,就是愚蠢;当我们尝试着用不同的视角看同一个东西的时候,会有不同的收获,当我们开始学习一门新技术的时候,之前的技术细节无法直接迁移过来使用,但是切入技术的视角可以复用;  下面是在团队分享的一个PPT,简单介绍了.net framewo

2012-08-30 10:28:38 693

原创 [Erlang 0054] Erlang Web 监控工具

Erlang已经提供了一系列工具查看运行时状态查看的工具,有没有web的监控工具可用呢?下面介绍一个很棒的工具:   BigWig 它提供了sasl日志查看,OTP进程树拓扑图,进程查看(可以按照指标排序),Application管理,节点性能采样,进程控制等功能;   这个项目建立在成功的开源项目之上:Web框架使用Cowboy ,Json解析使用JSX;使用./rebar

2012-08-30 10:28:38 737

原创 [Erlang 0051] Using ETS in Erlang Shell

在Erlang Shell中调试的时候经常会遇到的一个问题就是在Shell中遇到异常会导致ETS表丢失,需要反复去创建ETS表,调试比较麻烦.这是由于Erlang Shell在遇到异常之后会重建,ETS表依赖于创建它的进程,如果创建它的进程崩溃了ETS表也就销毁了(不是绝对的,后面可以看到);看下官方文档的描述:  Note that there is no automatic garba

2012-08-30 10:28:37 493

原创 [Erlang 0052] Erlang otp_src_R15B01 Released

Bug fix release : otp_src_R15B01Build date : 2012-04-02This is R15B01, the first maintenance release for the R15B major release.You can find the README file for the release at http

2012-08-30 10:28:37 741

原创 《Big Data Glossary》笔记

清明假期翻以前的笔记发现有一些NoSQL相关的内容,比较零散,是之前读《Big Data Glossary》的笔记.简单整理了一下,记录于此.Horizontal or Vertical Scaling数据库扩展的方向有两个:垂直扩展-换更牛的机器水平扩展-增加同样的机器选择水平扩展必然遇到的一个问题就是,如何决定数据分布在哪台机器上? 也就是分片策略 分片Sharding

2012-08-30 10:28:37 1055

原创 [Erlang 0053] fun & Code replacement

在 [Erlang 0037] Erlang Parameterized Module 中,我们曾经看到过Erlang Parameterized Module执行了new之后返回的结果其实是一个tuple结构,例如: P=p:new(zen,23). {p,zen,23}创建的模块实例是通过{p,zen,23}这样一个tuple结构来表达的;类似的对于普通的方法也是使用类似的结构表达(按

2012-08-30 10:28:37 913

原创 [Erlang 0046] Erlang Timer

我曾经用mochiweb暴露出来一个接口供测试的同事通过链接修改测试服务器的时间,但是发现Erlang并没有马上使用最新的系统时间,甚至频繁调整系统时间会导致Erlang节点内各种异常,遂放弃这种方案;测试的同事,修改完系统时间之后重启各Erlang节点.看看下面+c的说明就明白了:erl +c Disable compensation for sudden changes of s

2012-08-30 10:28:36 960

原创 [Erlang 0047] Erlang 进制转换

去年读过的好书之一就是这本《编码:隐匿在计算机软硬件背后的语言》(豆瓣链接 )里面对进制有一段非常有意思的描述:    如果人类像卡通人物那样,每只手上只有 4个手指会怎样呢?我们可能永远都不会想到要发明一种以10为基础的数字系统的问题, 取而代之的是我们可能会认为数字系统基于 8是正常、自然、合理、必然的,是毫无疑问的,是非常合适的。这时,就不能称之为十进制了,得将它称作为以8为基础的数

2012-08-30 10:28:36 1015

原创 [Erlang 0048] Erlang Guard

在 [Erlang 0009] Erlang 杂记 第30条,我提到了关于一个关于if语句的小陷阱: 30.if语句会对Guard子句做catch,所以 if 1/0 ->a; true ->b end.的返回值是b而不是抛出异常 不相信?打开Erlang Shell操练一下看看:Eshell V5.9 (abort with ^G)1> F = fun(X) ->

2012-08-30 10:28:36 812

原创 [Erlang 0049] 哈哈,一起来打印三角形

刚刚看到微博上有朋友说"哎~连个for循环都没有的erlang我真想不出该怎么去打印星号三角形了。。。",哈哈,一起来Happy一下吧,一起来打印三角形!!在Shell中打印出来的效果贴文本会有错位我就贴图了; 先来个简单的,首先想到的是使用string:right/2的格式化方法,本来是想省事的,实际上不用更简单,我的答案如下:1> [begin L=lists:duplicat

2012-08-30 10:28:36 537

原创 [Erlang 0050]用fun在Erlang Shell中编写尾递归

平时在Erlang Shell中写demo的时候,经常会用到fun , List Comprehensions 快速构造测试条件,能不创建代码文件就不创建.比如在[Erlang 0014]Erlang垃圾回收机制的时候,通过下面的方法来考察进程占用多少内存:1> Fun= fun()-> receive after infinity -> ok end end. %创建一个无限等待的F

2012-08-30 10:28:36 991

Becoming.Functional

Becoming.Functional 介绍函数式编程的基础概念,条理清楚 非常好,非常适合初学者

2014-08-12

高质量C#代码

在团队中推广的几个编写高质量代码的技巧 在团队中推广的几个编写高质量代码的技巧

2014-07-18

空空如也

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

TA关注的人

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