神终于休息了

Jobs终于休息了,他以一己之力一挽狂澜,并创造了apple的辉煌,用自己的一生,实现了“改变世界”的誓言,出的每一款作品都是秉着这一宗旨之为,感谢Jobs为世人带来的款款神作,他已成为永久的传奇,我们心中的神。

让我们再重温一下Jobs为我们带来的变革:

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/

电脑上的数据究竟是怎样被压缩和还原的?

压缩软件大家想必都不不陌生。甚至是太熟悉而忽略了它的神奇。你有想过为什么压缩软件能把一组数据的体积缩小,并且还能再完整地展开还原吗?多余的体积究竟被藏在了哪里?看完本文,你就知道了……

回答问题之前先来看看什么是压缩。当你有天走在路上,碰见熟人对你说:“吃了?”你一定知道他是在打招呼,既不是要请客也不是让你“没吃赶紧回家吃去”。这一句简单的“吃了”是礼貌和问好的体现,也是一种信息的压缩。笼统地说,把一系列已有信息通过一定 方法处理,使得其长度缩短,并且信息含量基本或者完全不变,就称之为压缩。

计算机上的压缩过程

我们都知道,计算机采用的是2进制系统。一个连续的n位二进制数集,就可以用来表示 2 n 个字符。目前的国际标准是ASCII码:用一个字节即8位数的2进制码,来表示各种字符和字母。

现在我们只使用2位二进制码,来简单地演示由4个符号组成的字符串的压缩过程。

假设我们有这么一串20个字母的数据:

clip_image001

默认情况下,用2位2进制码来表示这四个字母:

压缩

继续阅读

开源跨浏览器 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


Firefox 5.0正式版发布

Mozilla于北京时间6月21日晚间正式面向PC和Android手机发布了新版浏览器Firefox 5。

Mozilla Firefox是一个快速,全功能的Windows浏览器,使浏览比以往更加高效。 Firefox包括弹出窗口拦截,一个标签浏览模式,让您在一个窗口打开多个页面,集成谷歌搜索,简体隐私控制,让您更有效地覆盖你的轨道,一个精简的浏览器窗口,你更多的页面显示比任何其他浏览器,和一个与您合作,帮助您充分利用您的时间上网最出额外的功能。Firefox 5.0 兼容Mac、Windows和Linux系统。

作为Firefox 5.0 正式版,Firefox 5.0拥有全新的界面、更易用的功能、更快的速度、更强的安全防护、更多的开发者工具,汇聚各种全新特性,给你更好的上网体验!包括:

  • 增加对 CSS 动画(CSS animations)的支持
  • 转移 Do-Not-Track(禁止追踪)工具以提高可发现性;
  • 完善了 canvas、JavaScript、存储和网络性能
  • 完善了对 HTML5、XHR、MathML、SMIL 和 canvas 标准的支持
  • 完善了部分语言的拼写检查
  • 完善了 Linux 版本的桌面整合 WebGL 内容不再加载跨域WebGL纹理

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应用方面的一些经验,和相关的兼容应用程序。

 

微电影《玩大的》——《征途2》出品


如果你是75-85出生人,你是否还得红白机?街机?魂斗罗、马里奥、双截龙?三国志、快打、寺魂?

那曾经的一幕幕,现在想来还是那么的津津有味,百忆不厌,我们再也回不去了,不过,现在,《征途2》给出了我们这一代人的影像记忆—《玩大的》,重温那属于我们的年代,寻找曾经自己的影子,片子拍的技术水准不高,演员都是《征途2》的员工,但对我来说,它就是一部经典。

地址:http://video.sina.com.cn/p/games/v/n/2011-05-18/040361344541.html

 

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、完成