简单sinatra例子(来自官方README)
运行方式:首先安装sinatra gem install sinatra 在命令行 ruby myapp.rb -p 3000 访问 http://localhost:3000 和 http://localhost:3000/hello/my_world查看效果 ruby myapp.rb --help 可以看到命令行参数 require 'rubygems' require 'sinatra' ...
sequel,比ActiveRecord更好的ruby数据库工具
在单文件blog应用中,我已经展示了sequel的使用。sequel在介绍sinatra和rest-client的视频中,有过推荐,本篇文章简要介绍sequel和datamapper以及activerecord的区别。 sequel最先让人眼前一亮的就是sequel命令行工具。在 gem install sequel 以后。执行sequel --help,可以看到sequel用法。 比如在我的bl ...
gen_server tasting 之超简单名称服务
年假不能白休,时间不能浪费,看了 erlang 程序设计的 gen_server 章节,为了更好的理解、掌握于是上手写一个名称(键值)服务器。这个 lzy_name_svc 服务器是基于 otp gen_server 写成的,在底层键值被保存在了 erlang 的进程字典里,并且用于存储字典的进程是可以替换的,可以通过 lzy_name_svc:start/1 启动服务时指定,缺省情况保存在“当前 ...
gen_server tasting 之超简单名称服务(续)
前几天写了篇《gen_server tasting 之超简单名称服务 》东西,亲身体验了 erlang otp 的强悍威力。不过正所谓“超简单”,那个版本还是很初级的,所以这两天边继续研究边动手,开发迭代版本的名称服务。 在这个版本中,需要提供如下功能: 使用 otp 的 supervisor 监控树,保证服务可靠性。 添加日志功能,通过定制 sasl alarm_handler 来记录 ...
gen_server tasting 之超简单名称服务(再续)
前几天写了篇《gen_server tasting 之超简单名称服务(续) 》东西,亲身体验了 erlang otp 的强悍威力。这周正好有时间对 vsns/erlang 做个性能测试,验证传说中的 erlang 强大威力,其中包括了容错测试用例,关注在大并发压力下(13000tps)时,服务 oops 后通过 supervisor restart 时对整体性能的影响。在最后还包括了一些对服务容错 ...
使用 CherryPy 作为Django的Development Server
Django自带的Development Server作为调试开发时的临时服务器是一个非常方便的工具,因为避免了在还没有代码之前就需要配置一大堆环境的麻烦。 但是此服务器也有一个不足的地方就是它是单线程模式的,也就是同时只能处理一个请求,当需要调试ajax应用时,这就显得非常麻烦了,因为这经常需要同时处理多个请求。 经过搜索,查找,简单的解决方法有以下两种: 1、修改Django自带的Develop ...
Django Ajax 文件上传及进度显示
在Django 1.0 版本后,文件上传的处理做了很大的改变,其中很重要的一点就是引入了 Upload Handlers 的概念。 Upload Handlers 这是个和Django中的Middleware差不多的东西,可以通过在 settings.py 文件中设置 FILE_UPLOAD_HANDLERS 定义一系列Upload Handlers, 和Middleware相似的地方主要表现为以下 ...
混合使用django模板和jinja模板
Django一直广受争论的地方就是它的模板功能,其中印象最深的一次是在python-cn上最初由一个与模板不太相关的主题引起的大讨论。 见 《听一个turbogears的家伙讲django该向zope学什么》 http://groups.google.com/group/python-cn/browse_thread/thread/c32a8ba1b2e1f5f3 争论的焦点主要集中在djan ...
非profile方式扩展Django User Model
今天终于在javaeye开通了Django Cookbook的专栏(http://www.iteye.com/wiki/django),马上发一篇Django相关技巧的文章来热热身吧。 Django的用户模型: Django和其他很多Web框架不同的一点就是它自带了一个现成的User Model,因为Web开发中99%会涉及到用户这个概念,自带一个User Model,不但解决了每次开发一个新的 ...
Python的descriptor
如果你和我一样,曾经对method和function以及对它们的各种访问方式包括self参数的隐含传递迷惑不解,建议你耐心的看下去。这里还提到了Python属性查找策略,使你清楚的知道Python处理obj.attr和obj.attr=val时,到底做了哪些工作。 Python中,对象的方法也是也可以认为是属性,所以下面所说的属性包含方法在内。 先定义下面这个类,还定义了它的一个实例,留着后面用。 ...
Python的descriptor (2)
接上文 。 前面说了descriptor,这个东西其实和Java的setter,getter有点像。但这个descriptor和上文中我们开始提到的函数方法这些东西有什么关系呢? 所有的函数都可以是descriptor,因为它有__get__方法。 >>> def hello(): pass >>> dir(hello) ['__call__', '__ ...
python图形处理库PIL(Python Image Library)
关于PIL库的一些概念 pil能处理的图片类型pil可以处理光栅图片(像素数据组成的的块)。通道一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加模式 1 1位像素,黑和白,存成8位的像素 L 8位像素,黑白 P 8位像素,使用调色板映射到任何其他模式 RGB 3×8位像素,真彩 RGBA 4×8位像素,真彩+透明通道 ...
Python图形图像处理库的介绍之Image模块
Image模块的介绍创建一个新的图片 Image.new(mode, size) Image.new(mode, size, color) 层叠图片层叠两个图片,img2和img2,alpha是一个介于[0,1]的浮点数,如果为0,效果为img1,如果为1.0,效果为img2。当然img1和img2的尺寸和模式必须相同。这个函数可以做出很漂亮的效果来,而图形的算术加减后边会说到。 Image.b ...
CouchDB了解(-) 特性及实现
概述 CouchDB,大家或多或少都听说过。它到底有什么特性,适合哪些应用场景,和我们常用的关系型数据库有什么区别? 这些问题,可能我们心里都不是非常清楚。在以前的Blog中(PS,不是在javaeye哦),我提及了几次CouchDB,但是仅仅 限于编译,安装这些浮在水面上的工作。今天抽出时间把最近关于CouchDB的一些了解整理一下。 CouchDB是什么 CouchDB一种半结构化面向 ...
进入Erlang的世界
进入Erlang的世界 作为程序员,我们曾经闻听很多“业界动态”,“技术革新”,曾经接触很多“高手箴言”,“权威推荐”。这些正确与否,都已成过去! 现在,让我们迎接Erlang盛宴! 经历 2007年11月在koders.com搜索代码时,发现*.erl格式的源文件,感叹开发语言的花样百出,此时,我觉得erlang是一个丑陋的小家伙,看名字就没有对它提起多少兴趣。 2008年初的时候,公司的项 ...
Erlang中的half-sync/half-async和Leader/Followers 模式
http://www.iteye.com/article/60414 里面,谈到了半同步/半异步和领导者/追随者模式,在Erlang里面可以很简单得实现它 下面看看 half-sync/half-async 的例子 start() -> case gen_tcp:listen(80, [binary, {nodelay,true}, {packet, 0}, {reuseaddr, true ...
Erlang网络编程-Binary
在Erlang里面,Binary支持强大的模式匹配,这为编写网络通讯程序提供了便利。 比如一个协议串,格式如下 HEADER(2 Bytes) ID (1 Byte) MESSAGE(10 Bytes) 可以这样匹配 <<Header:16, Id:8, Message:10/binary-unit:8>> 有一些协议,头部是接下来数据的长度,这样就更简单了 <&l ...
Erlang网络编程-packet参数
gen_tcp:listen(Port, Options),Options 为一个参数列表 之前介绍过 {active, Boolean} 这个 opt,现在介绍一下 {packet, PacketType} 引用{packet, PacketType} (TCP/IP sockets) Defines the type of packets to use for a socket. The f ...
Erlang 的分布通讯安全策略
Erlang的分布式通讯安全策略,可以归结为 All or None。要不拥有全部的权限,要不就完全没有。 它的节点安全设置,是通过一个magic cookie来实现的。这个文件默认放到 $HOME/.erlang.cookie ,文件内容是字符串。 当启用分布通讯的时候,这个magic cookie就很重要了。如果在命令行里面带上 -setcookie ,则在当前节点使用这个cookie值,否 ...
使用Erlang Profile工具进行性能分析
Erlang tools lib中包含三个用于性能分析的工具:cprof,eporf和fprof。 cprof 提供函数调用计数,其对系统的性能影响最小 eprof 提供函数运行时间的百分比 fprof 通过将trace存储到文件,提供函数调用计数及运行时间统计信息 这里我们主要介绍fprof,首先其提供的信息最为详细,其次因为将trace存储到文件中,我们可以进行较长运行时间的性能分析 fpr ...
Erlang 中的Module级别热部署
Java里面要实现Code Replacement,也就是什么热部署,通常是使用ClassLoader机制。不久前看到了一篇Google的Paper,里面讲解的C++代码热部署更为复杂。 在Erlang里面,实现Code Replacement其实很简单,最方便的方法可以参考 《Erlang Reference Manual》的12.3: -module(m). -export([loop/0]) ...
erts运行期内存使用情况查看
翻erlang的代码发现erlang对memory的管理非常重视 内置了多种内存allocator: B: binary_alloc D: std_alloc E: ets_alloc F: fix_alloc H: eheap_alloc L: ll_alloc M: mseg_alloc S: sl_alloc T: temp_alloc Y: sys_a ...
erl_call erlang cnode 功能强大
otp_src_R11B-5\lib\erl_interface\src\prog\erl_call.c 是个不错的工具, 就是ei的前端能够通过cnode给erlang的后端发各种请求。 具体的见 主题: 如何把erlang应用在项目中? http://www.iteye.com/topic/100425 where: -a apply(Mod,Fun,Args) (e.g -a 'erla ...
erlang inet:setopts 未公开选项
inet:setopt有packet设置选项: {packet, PacketType} (TCP/IP sockets) Defines the type of packets to use for a socket. The following values are valid: raw | 0 No packaging is done. 1 | 2 | 4 Packets consi ...
方便调试erlang程序的脚本
经常的时候看大型工程的时候 碰到一二个地方实在不明白他是如何运作的 这时候最好的工具就是debugger 如gdb,的backtrace 可以得到完整的函数调用栈。在linux下推荐使用ddd, 俺的centos5 下标准版本没有安装ddd 顺手下载个安装就好了(标准版本却个motif-devel yum下就好)。ddd图形界面方便查看函数和变量,还有点击跳转功能。 附上几个调试erlang的脚本, ...
Erlang: 当你net_adm:ping(Node)的时候发生了什么?
当你net_adm:ping(Node)的时候发生了什么? 这个涉及到很复杂的流程。让我为你解刨: 这个流程很长而且在erlang代码和c代码里面窜来窜去,重要的点 我用红字标注 请各位耐心。 1. net_adm.erl: ping(Node) when is_atom(Node) -> case catch gen:call({net_kernel, Node}, '$gen_call' ...
erlang driver和热部署(重要)
erlang的热部署包括2个方便的 beam(.beam)级别的和driver(.dll .so)级别的. beam级别的就简单。但是driver级别的就相对复杂很多。 先看下erl_ddll的说明: Loading and reloading for code replacement This scenario occurs when the driver code might need re ...
erlsnoop erlang消息监听器 调试erlang网络程序利器
在erlang的邮件列表上看到: Have you tried putting a snoop to see whether the delay is on the sending/receiving side? This might be useful: http://www.erlang.org/contrib/erlsnoop-1.0.tgz 去http://www.erlang.org ...
file:read_file的注意细节
arbow发现的问题如下: 4> file:read_file("/proc/cpuinfo"). {ok,<<>>} 11> {ok, IoDevice} = file:open("/proc/cpuinfo", [binary]),file:read(IoDevice, 1024). {ok,<<&quo ...
gen_tcp 应对对端半关闭
当tcp对端调用shutdown(RD/WR) 时候, 宿主进程默认将收到{tcp_closed, Socket}消息, 如果这个行为不是你想要的,那么请看: shutdown(Socket, How) -> ok | {error, Reason} Types: Socket = socket() How = read | write | read_write Reason = pos ...