Azul发布开源工具jHiccup,为Java提供运行时响应时间分析

Azul System 公司于 12 月 13 日宣称发布了开源工具 jHiccup,设计该工具的目的是对与应用程序底层运行平台相关的暂停和延迟(或“hiccups”)做出度量。新工具的功能与 Azul 的 JitterMeter 有部分重叠,但它为创建图形化的输出增加了基于 Excel 的工具。另外它还计划增加基于 Java 用于生成图表的工具。此外,想要针对应用程序使用 jHiccup 也相当简单。你只需要在用来启动应用程序的 java -c命令之前增加 jHiccup 即可。

继续阅读

2011年最佳免费 PSD 用户界面素材揭晓

这是国外著名网页设计博客 WDL 发布的2011年最佳系列的第三篇,之前已经与大家分享了 2011年度最佳 jQuery 插件 以及 2011年度最佳免费英文字体。今天这篇文章,我们与大家一起分享这一年来优秀设计师们分享的及精美免费 PSD 用户界面素材,包含滑块、表单、按钮、菜单、进度条、播放器等等。这些免费的 PSD 素材资源对于网页设计师来说都非常有用,既能节省时间又能有很好的效果。记得分享和推荐一下哦 :)

Moonify UI

继续阅读

Windows8 开发者预览版官方正式版下载! (完全免费,无需激活使用)

微软在 BUILD 大会正式对外展示了最新的 Windows8! Win 部门主管 Steven Sinofsky 在会上向大家介绍了 Windows8 的一些让人兴奋的新特性、触屏界面、采用 Windows8 的平板电脑以及其它一些重要的功能。

这次的 Windows8 开发者预览版 (Developer Preview) 对公众提供免费下载,无需注册,无需激活即可使用!目前只有英文版一种语言,其中包括64位含开发工具的版本,和64、32位不含开发工具的版本,你可以根据自己的喜好选择版本。现在,你可以率先体验跨时代的最新 Win8 操作系统了!

最低系统要求:

Windows8 开发者预览版可以很好地在流畅运行 Windows7 的电脑上运行。
1 Ghz 以上主频的 CPU
1 GB 以上内存(32位) 或者 2 GB 以上的内存(64位)
16 GB 的可用硬盘空间 (32-bit) 或者 20 GB (64-bit)
支持 DirectX 9 和 WDDM 1.0 或者更高规格的显卡
支持多点触摸的屏幕可以让你体验到更多Win8的新特性

下载地址:thunder://QUFodHRwOi8vd2RwLmRsd3MubWljcm9zb2Z0LmNvbS9XRFBETC85QjhERkRGRjczNkM1QjFEQkY5NTZCODlEOEE5RDRGRDkyNURBQ0QyL1dpbmRvd3NEZXZlbG9wZXJQcmV2aWV3LTY0Yml0LUVuZ2xpc2gtRGV2ZWxvcGVyLmlzb1pa

简明 Vim 练级攻略

vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。

——————————正文开始——————————

你想以最快的速度学习人类史上最好的文本编辑器VIM吗?你先得懂得如何在VIM幸存下来,然后一点一点地学习各种戏法。

Vim the Six Billion Dollar editor

Better, Stronger, Faster.

学习 vim 并且其会成为你最后一个使用的文本编辑器。没有比这个更好的文本编辑器了,非常地难学,但是却不可思议地好用。

我建议下面这四个步骤:

  1. 存活
  2. 感觉良好
  3. 觉得更好,更强,更快
  4. 使用VIM的超能力

当你走完这篇文章,你会成为一个vim的 superstar。

在开始学习以前,我需要给你一些警告:

  • 学习vim在开始时是痛苦的。
  • 需要时间
  • 需要不断地练习,就像你学习一个乐器一样。
  • 不要期望你能在3天内把vim练得比别的编辑器更有效率。
  • 事实上,你需要2周时间的苦练,而不是3天。

第一级 – 存活

  1. 安装 vim
  2. 启动 vim
  3. 什么也别干!请先阅读

当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子。但vim不是这样的,请按照下面的命令操作:

  • 启 动Vim后,vim在 Normal 模式下。
  • 让我们进入 Insert 模式,请按下键 i 。(陈皓注:你会看到vim左下角有一个–insert–字样,表示,你可以以插入的方式输入了)
  • 此时,你可以输入文本了,就像你用“记事本”一样。
  • 如果你想返回 Normal 模式,请按 ESC 键。

现在,你知道如何在 Insert 和 Normal 模式下切换了。下面是一些命令,可以让你在 Normal 模式下幸存下来:

  • i → Insert 模式,按 ESC 回到 Normal 模式.
  • x → 删当前光标所在的一个字符。
  • :wq → 存盘 + 退出 (:w 存盘, :q 退出)   (陈皓注::w 后可以跟文件名)
  • dd → 删除当前行,并把删除的行存到剪贴板里
  • p → 粘贴剪贴板

推荐:

  • hjkl (强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头。
  • :help <command> → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(陈皓注:退出帮助需要输入:q)

继续阅读

CentOS 6正式发布,免费的企业级Linux

CentOS 6 正式版已于7月9日发布。

CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同在于,CentOS并不包含封闭源代码软件。

CentOS 6.0 基于上游的 Red Hat Enterprise Linux 6.0 制作,同时基本包含了所有的上游软件包。CentOS 完全遵守上游供应商的再发行政策,并且以百分之百的软件兼容性为目标,但相对于 RHEL ,CentOS 最主要的改变是去除了上游供应商的商标及美工图。

CentOS 6上游版本发行注记和文档:Red Hat Enterprise Linux 6

CentOS 6相对于上游版本 RHEL 6,修改、删除和新增了部分组件,详细情况参阅:发行注记

官方网站:http://www.centos.org/

下载页面:http://www.centos.org/modules/tinycontent/index.php?id=15

转自:http://www.iteye.com/news/21995

电影《里约大冒险》下载

这部电影躺在硬盘已经两三个月了,昨晚热的睡不觉,无聊中打开看了一下,影片开始就深深地把我吸引住了,热情洋溢的配乐,缤纷细腻的画面,很是值得一看。
影片由《冰川时代》系列的导演卡洛斯·沙尔丹哈执导,曾以“冰川时代”系列创下全球8.8亿美元票房佳绩的蓝天工作室创作。影片讲述一只明尼苏达州小镇上的金刚鹦鹉,一直认为自己是世界上仅存的一只金刚鹦鹉。一天他得知里约热内卢还有另外一只金刚鹦鹉,并且还是一只雌性金刚鹦鹉,他便决定离开家乡,前往巴西的里约热内卢开始它的冒险。

影片高清下载:

thunder://QUFmdHA6Ly8wNzA4OjA3MDhAdzMuZmZkeS5jYzo1MTMvwO/UvLTzw7DP1UJE1tDX1jEyODB4NzIwuN/H5bDmLnJtdmJaWg==

我认为影片中最棒的是它的音乐,super good.

原声大碟下载:

ed2k://%7Cfile%7C%E5%8E%9F%E5%A3%B0%E5%A4%A7%E7%A2%9F.-.%5B%E9%87%8C%E7%BA%A6%E5%A4%A7%E5%86%92%E9%99%A9.-.Rio%5D.%E4%B8%93%E8%BE%91.%28mp3%29.rar%7C58198813%7C85614a1d6b6ebf5796653428626513f4%7Ch=hidoprfaw6fywhfglc7lx4ij4gfbtt7c%7C/

开源跨浏览器 js复制剪切板组件:Zero Clipboard js+swf

开发中经常会用到复制的功能,在 IE 下实现比较简单。但要想做到跨浏览器比较困难了。本文将介绍一个跨浏览器的库类 Zero Clipboard 。它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的 document.execCommand(“Copy”) 更加灵活。

Zero Clipboard 的实现原理
Zero Clipboard 利用 Flash 进行复制,之前有 Clipboard Copy 解决方案,其利用的是一个隐藏的 Flash。但最新的 Flash Player 10 只允许在 Flash 上进行操作才能启动剪贴板。所以 Zero Clipboard 对此进行了改进,用了一个透明的 Flash ,让其漂浮在按钮之上,这样其实点击的不是按钮而是 Flash ,也就可以使用 Flash 的复制功能了。

如何使用 Zero Clipboard
首先下载 Zero Clipboard (http://code.google.com/p/zeroclipboard/),并解压缩。其中需要两个文件:ZeroClipboard.js 和 ZeroClipboard.swf ,将这两个文件放入到你的项目中。
在页面引用JS文件:

<script type="text/javascript"src="ZeroClipboard.js"></script>

然后:

var clip =newZeroClipboard.Client();     //创建对象
clip.setHandCursor(true);                          // 设置鼠标手势为手型
clip.setText(“要复制的文本”);                    // 设置要复制的文本。
clip.glue(“button”);                                     // 注册复制按钮,参数为 id

演示地址:
http://demo.jb51.net/js/ZeroClipboard/index.html


memcached的分布式算法

memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能,memcached的分布式,则是完全由客户端程序库实现的。这种分布式是memcached的最大特点。

下面假设memcached服务器有node1~node3三台,应用程序要保存键名为“tokyo”“kanagawa”“chiba”“saitama”“gunma” 的数据。

memcached-0004-01.png

图1 分布式简介:准备

首先向memcached中添加“tokyo”。将“tokyo”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“tokyo”及其值。

memcached-0004-02.png

图2 分布式简介:添加时

同样,“kanagawa”“chiba”“saitama”“gunma”都是先选择服务器再保存。

接下来获取保存的数据。获取时也要将要获取的键“tokyo”传递给函数库。函数库通过与数据保存时相同的算法,根据“键”选择服务器。使用的算法相同,就能选中与保存时相同的服务器,然后发送get命令。只要数据没有因为某些原因被删除,就能获得保存的值。

memcached-0004-03.png

图3 分布式简介:获取时

这样,将不同的键保存到不同的服务器上,就实现了memcached的分布式。 memcached服务器增多后,键就会分散,即使一台memcached服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。

接下来介绍第1次 中提到的Perl客户端函数库Cache::Memcached实现的分布式方法。

Cache::Memcached的分布式方法

Perl的memcached客户端函数库Cache::Memcached是 memcached的作者Brad Fitzpatrick的作品,可以说是原装的函数库了。

  • Cache::Memcached – search.cpan.org

该函数库实现了分布式功能,是memcached标准的分布式方法。

根据余数计算分散

Cache::Memcached的分布式方法简单来说,就是“根据服务器台数的余数进行分散”。求得键的整数哈希值,再除以服务器台数,根据其余数来选择服务器。

下面将Cache::Memcached简化成以下的Perl脚本来进行说明。

use strict;
use warnings;
use String::CRC32;

my @nodes = ('node1','node2','node3');
my @keys = ('tokyo', 'kanagawa', 'chiba', 'saitama', 'gunma');

foreach my $key (@keys) {
    my $crc = crc32($key);             # CRC値
    my $mod = $crc % ( $#nodes + 1 );
    my $server = $nodes[ $mod ];       # 根据余数选择服务器
    printf "%s => %s\n", $key, $server;
}

Cache::Memcached在求哈希值时使用了CRC。

  • String::CRC32 – search.cpan.org

首先求得字符串的CRC值,根据该值除以服务器节点数目得到的余数决定服务器。上面的代码执行后输入以下结果:

tokyo       => node2
kanagawa => node3
chiba       => node2
saitama   => node1
gunma     => node1

根据该结果,“tokyo”分散到node2,“kanagawa”分散到node3等。多说一句,当选择的服务器无法连接时,Cache::Memcached会将连接次数添加到键之后,再次计算哈希值并尝试连接。这个动作称为rehash。不希望rehash时可以在生成Cache::Memcached对象时指定“rehash => 0”选项。

根据余数计算分散的缺点

余数计算的方法简单,数据的分散性也相当优秀,但也有其缺点。那就是当添加或移除服务器时,缓存重组的代价相当巨大。添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器,从而影响缓存的命中率。用Perl写段代码来验证其代价。

use strict;
use warnings;
use String::CRC32;

my @nodes = @ARGV;
my @keys = ('a'..'z');
my %nodes;

foreach my $key ( @keys ) {
    my $hash = crc32($key);
    my $mod = $hash % ( $#nodes + 1 );
    my $server = $nodes[ $mod ];
    push @{ $nodes{ $server } }, $key;
}

foreach my $node ( sort keys %nodes ) {
    printf "%s: %s\n", $node,  join ",", @{ $nodes{$node} };
}

这段Perl脚本演示了将“a”到“z”的键保存到memcached并访问的情况。将其保存为mod.pl并执行。

首先,当服务器只有三台时:

$ mod.pl node1 node2 nod3
node1: a,c,d,e,h,j,n,u,w,x
node2: g,i,k,l,p,r,s,y
node3: b,f,m,o,q,t,v,z

结果如上,node1保存a、c、d、e……,node2保存g、i、k……,每台服务器都保存了8个到10个数据。

接下来增加一台memcached服务器。

$ mod.pl node1 node2 node3 node4
node1: d,f,m,o,t,v
node2: b,i,k,p,r,y
node3: e,g,l,n,u,w
node4: a,c,h,j,q,s,x,z

添加了node4。可见,只有d、i、k、p、r、y命中了。像这样,添加节点后键分散到的服务器会发生巨大变化。26个键中只有六个在访问原来的服务器,其他的全都移到了其他服务器。命中率降低到23%。在Web应用程序中使用memcached时,在添加memcached服务器的瞬间缓存效率会大幅度下降,负载会集中到数据库服务器上,有可能会发生无法提供正常服务的情况。

mixi的Web应用程序运用中也有这个问题,导致无法添加memcached服务器。但由于使用了新的分布式方法,现在可以轻而易举地添加memcached服务器了。这种分布式方法称为 Consistent Hashing。

Consistent Hashing

Consistent Hashing的简单说明

Consistent Hashing如下所示:首先求出memcached服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。

memcached-0004-04.png

图4 Consistent Hashing:基本原理

从上图的状态中添加一台memcached服务器。余数分布式算法由于保存键的服务器会发生巨大变化而影响缓存的命中率,但Consistent Hashing中,只有在continuum上增加服务器的地点逆时针方向的第一台服务器上的键会受到影响。

memcached-0004-05.png

图5 Consistent Hashing:添加服务器

因此,Consistent Hashing最大限度地抑制了键的重新分布。而且,有的Consistent Hashing的实现方法还采用了虚拟节点的思想。使用一般的hash函数的话,服务器的映射地点的分布非常不均匀。因此,使用虚拟节点的思想,为每个物理节点(服务器)在continuum上分配100~200个点。这样就能抑制分布不均匀,最大限度地减小服务器增减时的缓存重新分布。

通过下文中介绍的使用Consistent Hashing算法的memcached客户端函数库进行测试的结果是,由服务器台数(n)和增加的服务器台数(m)计算增加服务器后的命中率计算公式如下:

(1 – n/(n+m)) * 100

支持Consistent Hashing的函数库

本连载中多次介绍的Cache::Memcached虽然不支持Consistent Hashing,但已有几个客户端函数库支持了这种新的分布式算法。第一个支持Consistent Hashing和虚拟节点的memcached客户端函数库是名为libketama的PHP库,由last.fm开发。

至于Perl客户端,连载的第1次 中介绍过的Cache::Memcached::Fast和Cache::Memcached::libmemcached支持 Consistent Hashing。

两者的接口都与Cache::Memcached几乎相同,如果正在使用Cache::Memcached,那么就可以方便地替换过来。Cache::Memcached::Fast重新实现了libketama,使用Consistent Hashing创建对象时可以指定ketama_points选项。

my $memcached = Cache::Memcached::Fast->new({
    servers => ["192.168.0.1:11211","192.168.0.2:11211"],
    ketama_points => 150
});

另外,Cache::Memcached::libmemcached 是一个使用了Brain Aker开发的C函数库libmemcached的Perl模块。 libmemcached本身支持几种分布式算法,也支持Consistent Hashing,其Perl绑定也支持Consistent Hashing。

总结

本次介绍了memcached的分布式算法,主要有memcached的分布式是由客户端函数库实现,以及高效率地分散数据的Consistent Hashing算法。下次将介绍mixi在memcached应用方面的一些经验,和相关的兼容应用程序。

 

sun virtualbox:配置双网卡实现本机对虚拟机的访问

Sun VirtualBox默认的网络连接方式为NAT,但是和VMware的NAT模式不同的是Sun VirtualBox创建的虚拟机不能被本机所访问,受网上一篇文章的启发,我找到了一种比较方便的办法来实现本机对虚拟机的访问,具体步骤如下: 
1、打开Sun VirtualBox控制台; 
2、点击“设置”按钮; 
3、在设置界面选择网络设置; 
4、点击“网络连接2”这个标签,并勾选下面的“启用网络接连”; 
5、控制芯片选择“PCnet-FastIII”; 
6、连接方式选择“Host-Only Adpter”; 
7、名称选择默认的; 
8、确定退出; 
9、在Sun VirtualBox控制台通过“管理”菜单打开“全局设置”; 
10、点击“网络”; 
11、在弹出的界面里,点击螺丝刀图标,查看“网络明细”的网段设置; 
12、启动虚拟机,将新网卡的IP地址设置在上一步查看到的网段内; 
13、在本机ping虚拟机第二张网卡的ip地址进行测试; 
14、完成