MurmurHash 算法

发现一个不错的hash算法,可以用于我们的实际工作中,如sharding。

Hash可分为加密hash算法和非加密hash算法,Hash应用于加密、校验、查找、横向扩展等。

加密一般用MD5,SHA-1,校验一般CRC32。而服务器端的负载均衡方面,hash算法需要快速、分布均匀。

MurmurHash是一种非加密hash算法,特点是高运算性能,低碰撞率,分布均匀,由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc++、nginx、libmemcached等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的CityHash算法。

参考:

配置文件格式比较

  1. java项目用的比较多的是 XML、properties,容错性很差,配置起来相当痛苦。

  2. 动态语言的项目往往用代码来配置,node用js配置,python用python配置,ruby用ruby配置。
    优点是简单
    缺点:
    a. 不能跨语言共享配置
    b. 配置文件里面可以写代码,本身是有风险的
    c. 运维人员必须了解相应的语言

  3. ini文件,是一个不错的选择,容错性较强。只是对于list类型的配置支持不好,比如一个cluster的所有host,port信息。

  4. YAML 比较简洁,是个不错的选择,但也有人不习惯这种极简的风格。
    http://www.yaml.org/spec/1.2/spec.html#Preview

  5. JSON现在非常流行,但JSON的缺点也很明显的,如下面的语句是非法的

1
{key: 'value',} //注释

key 必须是 “key”, value 必须是双引号,} 前多了个逗号,不支持注释。

前段时间node社区出现了一种新格式,叫做JSON5,免去了一些JSON的痛苦,https://github.com/aseemk/json5

如下面的配置是合法

1
{key: 'value',} //注释

可惜他出现于node社区,noder们可以使用JS代码来代替JSON5。所以JSON5可能无法在node社区有所发展,其他的语言实现它的可能性也就更低了。

《黑客与画家》读后感

《黑客与画家——硅谷创业之父Paul Graham文集》英文原名是 《Hackers and Painters —— Big ideas from the computer age》,中文版由阮一峰翻译。

许多人对“黑客与画家”这个标题感到不知所云,很难将黑客与画家放在一起进行对比。我初次见到这个标题,以为仅仅是描写编程与绘画之间的一些相通之处:思考方式或是创作过程。然而开卷之后,才发现有太多的惊喜,或是引人深思,或是感同身受。初看时觉得每章都是独立的,看完发现其实是环环相扣的。因为阅读多是在路上进行的,所以没有圈点,有必要再看一遍,找出那些绝妙的观点细细品味。

目录:

  1. 为什么书呆子不受欢迎
  2. 黑客与画家
  3. 不能说的话
  4. 良好的坏习惯
  5. 另一条路
  6. 如何创造财富
  7. 关注贫富分化
  8. 防止垃圾邮件的另一种方法
  9. 设计者的品味
  10. 编程语言解析
  11. 一百年后的编程语言
  12. 拒绝平庸
  13. 书呆子的复仇
  14. 梦寐以求的编程语言
  15. 设计与研究

第9章的几个小节标题:

  • 好设计是简单的设计
  • 好设计是永不过时的设计
  • 好设计是解决主要问题的设计
  • 好设计是启发性的设计
  • 好设计通常是有点趣味性的设计
  • 好设计是艰苦的设计
  • 好设计是看似容易的设计
  • 好设计是对称的设计
  • 好设计是模仿大自然的设计
  • 好设计是一种再设计
  • 好设计是能够复制的设计
  • 好设计常常是奇特的设计
  • 好设计是成批出现的
  • 好设计常常是大胆的设计

导读:

  • 1-4章 黑客、Nerd的内心与社会的偏见。
  • 5-7章 互联网时代的财富创造。
  • 8-9章 巧妙、简单的设计。
  • 10-15章 编程语言的设计与选择。

阅读此书时,连脚注都是不能放过的。

“画作永远没有完成的一天,你只是不再画下去了而已”。

github博客專業教程

準備知識

git, github, markdown

爲什麼要把博客host在github?

  • 彰顯碼農風采
  • 你的每篇文章擁有版本控制,每次修改都有版本記錄。
  • 文件,markdown,內容樣式分離。

Github

用過Github的人都知道,github會自動將markdown文件渲染爲html。所以許多項目直接用Readme.md 作爲文檔,簡單有效。有些高級點的github玩家則會爲項目創建一個github page,
你可以使用github page generator來生成頁面,如果你對自己的html/css非常有信心,
那麼我強烈建議你使用git-extras
gh-pages命令來創建一個乾淨的gh-pages分支,
在這個分支上你可以隨心所欲的編寫你的項目主頁。

github page generator

既然github可以host項目主頁,那麼他是否可以host用戶主頁呢?當然可以,否則,本文就無從談起了。方法很簡單,你只需要創建一個 USERNAME.github.com 的項目即可host你的個人主頁。文中所有USERNAME都表示你的github用戶名。

但是如果只是一堆的html/js/css堆砌而成的個人主頁,是完全無法與博客相提並論的。本文既然叫做《github博客專業教程》,自然不能只教大家host一堆靜態文件。

Step 1. 創建repository

假定你已經有了github帳號,我的github用户名是guileen,請將本文中的guileen一律替換爲你的github用戶名。

在github上創建一個新的Repository,命名爲 guileen.github.com,恭喜你,你已經有了一個屬於自己的博客空間,而且你可以隨心所欲的定製它。

接下來,把這個庫clone到本地。

git clone git@github.com:guileen/guileen.github.com.git

Step 2. index.html

在项目根目录下创建 index.html

<html>
    <head>
        <title>Hello</title>
    </head>
    <body>
        <h1>Hello world</h1>
    </body>
</html>

将这个文件添加到git中

git add index.html
git commit -m ‘first commit’
git push origin master

当你将这个文件push到github之后,访问 http://guileen.github.com ,就可以看到你的主页了。
就像你所看到的,github会自动host这个库下的静态文件,也包括 js/css/images。不过有部分文件不在次列,稍候介绍。

Step 3. 安装jekyll

大家可能会以为,github page只能host静态文件,无法完成类似,分类,分页,日期等功能。对于这些需求,github用一种很巧妙的方法来实现了。

Github初期是使用ruby开发的,现在ruby依然是github主要使用的编程语言。在ruby这样一个富有创造力的社区,诞生过很多神奇的开源项目。
而github就是使用了一个叫做jekyll的ruby项目。

Mac

gem update --system
gem install jekyll
jekyll --server --auto

Step 4. _config.yml

# Configure of jekyll

# github default configurations
safe: true
lsi: false
pygments: true

# override jekyll configurations

# use redcarpet more like github
markdown: redcarpet

# My configurations
title: 桂糊涂的流水账
ga: UA-00000000-0 

Step 4. _post

Step 5. layout

Step 6. google analytics

Step 7. comment

使用 Disqus 服务

Step 8. highlight

Step 9. share

Step 10. RSS

atom.xml

Step 11. github info

參考