24 Nov 2008

[git_02]Git 的基本对象模型

  1 diff --git a/text/02_Git_Object_Db_Basics/0_ Git_Object_Db_Basics.markdown b/text/02_Git_Object_Db_Basics/0_ Git_Object_Db_Basics.markdown
  2 index a73e0fe..013d849 100644
  3 --- a/text/02_Git_Object_Db_Basics/0_ Git_Object_Db_Basics.markdown    
  4 +++ b/text/02_Git_Object_Db_Basics/0_ Git_Object_Db_Basics.markdown    
  5 @@ -1,55 +1,51 @@
  6 -## The Git Object Model ##
  7 +## Git 对象模型 ##
  8  
  9 -### The SHA ###
 10 +### SHA 值 ###
 11  
 12 -All the information needed to represent the history of a
 13 -project is stored in files referenced by a 40-digit "object name" that
 14 -looks something like this:
 15 +表示一个项目历史的所有需要的信息都被储存在文件中,这些文件以一个 40 位
 16 +的"对象名称"引用,就像下面这个:
 17     
 18      6ff87c4664981e4397625791c8ea3bbb5f2279a3
 19     
 20 -You will see these 40-character strings all over the place in Git.
 21 -In each case the name is calculated by taking the SHA1 hash of the
 22 -contents of the object.  The SHA1 hash is a cryptographic hash function.
 23 -What that means to us is that it is virtually impossible to find two different
 24 -objects with the same name.  This has a number of advantages; among
 25 -others:
 26 -
 27 -- Git can quickly determine whether two objects are identical or not,
 28 -  just by comparing names.
 29 -- Since object names are computed the same way in every repository, the
 30 -  same content stored in two repositories will always be stored under
 31 -  the same name.
 32 -- Git can detect errors when it reads an object, by checking that the
 33 -  object's name is still the SHA1 hash of its contents.
 34 -
 35 -### The Objects ###
 36 -
 37 -Every object consists of three things - a **type**, a **size** and **content**.
 38 -The _size_ is simply the size of the contents, the contents depend on what
 39 -type of object it is, and there are four different types of objects:
 40 -"blob", "tree", "commit", and "tag".
 41 -
 42 -- A **"blob"** is used to store file data - it is generally a file.
 43 -- A **"tree"** is basically like a directory - it references a bunch of
 44 -    other trees and/or blobs (i.e. files and sub-directories)
 45 -- A **"commit"** points to a single tree, marking it as what the project
 46 -    looked like at a certain point in time.  It contains meta-information
 47 -    about that point in time, such as a timestamp, the author of the changes
 48 -    since the last commit, a pointer to the previous commit(s), etc.
 49 -- A **"tag"** is a way to mark a specific commit as special in some way.  It
 50 -    is normally used to tag certain commits as specific releases or something
 51 -    along those lines.
 52 -
 53 -Almost all of Git is built around manipulating this simple structure of four
 54 -different object types.  It is sort of its own little filesystem that sits
 55 -on top of your machine's filesystem.
 56 -
 57 -### Different from SVN ###
 58 -
 59 -It is important to note that this is very different from most SCM systems
 60 -that you may be familiar with.  Subversion, CVS, Perforce, Mercurial and the
 61 -like all use _Delta Storage_ systems - they store the differences between one
 62 -commit and the next.  Git does not do this - it stores a snapshot of what all
 63 -the files in your project look like in this tree structure each time you
 64 -commit. This is a very important concept to understand when using Git.
 65 +你会在 Git 的各个地方看到这些 40 个字符组成的字符串。在每一种情况下,这个名字通过
 66 +计算对象内容的 SHA1 哈希值取得。 SHA1 哈希值是一个密码学哈希函数。对我们来说,
 67 +这意味着事实上不可能根据同一个名字找到两个不同的对象。这具有很多优势,其中:
 68 +
 69 +- Git 可以很快地区分两个对象是不是相同的,只要比较名字。
 70 +- 因为在每个仓库中都以相同的方式计算对象名称,因此储存在两个仓库中的相同
 71 +  内容总是以相同的名字存储。
 72 +- Git 可以在读取一个对象的时候侦测错误,只要检查这个对象的名字是否仍然是它
 73 +  内容的 SHA1 哈希值。
 74 +
 75 +### 对象 ###
 76 +
 77 +每个对象包含三件事 ──**类型**,**大小**和**内容**。_大小_很简单,就是内容的
 78 +大小;内容则取决于对象的类型。对象有四种不同的类别: "blob", "tree", "commit"
 79 +和 "tag"。
 80 +
 81 +- 一个 **"blob"** 用来储存文件数据 ──它通常是一个文件。
 82 +- 一个 **"tree"** 基本上很像一个目录 ──它索引一组其他的 tree 或者/和
 83 +  blob (比如:文件和子目录)。
 84 +- 一个 **"commit"** 指向一个单独的 tree,作为项目在某个特定的时间点上的标记。
 85 +  它包含那个时间点的元信息,比如时间戳,最后 commit 为止的改变的作者,指向之前
 86 +  commit 的指针,等等。
 87 +- 一个 **"tag"** 是用来标记特定 commit 在某些方面特别的一种方法。它通常用来
 88 +  标记指定的 commit 作为特定的发行,或者累死的东西。
 89 +
 90 +Git 几乎所有的建设都是围绕这种四个不同的对象类型组成的简单结构。它是一种构建
 91 +在你机器的文件系统之上的自由小文件系统。
 92 +
 93 +### 和 SVN 的区别 ###
 94 +
 95 +需要重点指出的是,这和你以前所熟悉的大多数 SCM 系统都非常不同。Subversion, CVS,
 96 +Perforce, Mercurial 以及所有类似使用 _Delta 存储_ 的系统储存一个 commit 和下一个
 97 +commit 之间的差别。Git 不这么做 ──你每次 commit 时,它储存你项目里每次 commit
 98 +的 tree 结构的所有文件的快照。这是使用 Git 时需要理解的重要观念。
 99 +
100 +### 术语对照 ##
101 +
102 +- object: 对象
103 +- model: 模型
104 +- hash:哈希
105 +- repository: 仓库
106 +- project:项目

23 Nov 2008

[git_0]介绍

  1 diff --git a/text/01_Introduction/0_ Introduction.markdown b/text/01_Introduction/0_ Introduction.markdown
  2 deleted file mode 100644
  3 index 9c60fb9..0000000
  4 --- a/text/01_Introduction/0_ Introduction.markdown    
  5 +++ /dev/null
  6 @@ -1,54 +0,0 @@
  7 -## Welcome to Git ##
  8 -
  9 -Welcome to Git - the fast, distributed version control system.
 10 -
 11 -This book is meant to be a starting point for people new to Git to learn it
 12 -as quickly and easily as possible.
 13 -
 14 -
 15 -This book will start out by introducing you to the way Git stores data, to
 16 -give you the context for why it is different than other VCS tools.
 17 -This is meant to take you about 20 minutes.
 18 -
 19 -Next we will cover **Basic Git Usage** - the commands you will be using 90% of
 20 -the time.  These should give you a good basis to use Git comfortably for most
 21 -of what you're going to use it for.  This section should take you about 30
 22 -minutes to read through.
 23 -
 24 -Next we will go over **Intermediate Git Usage** - things that are slightly more
 25 -complex, but may replace some of the basic commands you learned in the first
 26 -section.  This will mostly be tricks and commands that will feel more
 27 -comfortable after you know the basic commands.
 28 -
 29 -After you have all of that mastered, we will cover **Advanced Git** - commands
 30 -that most people probably don't use very often, but can be very helpful in
 31 -certain situations.  Learning these commands should round out your day-to-day
 32 -git knowledge; you will be a master of the Git!
 33 -
 34 -Now that you know Git, we will then cover **Working with Git**.  Here we will go
 35 -over how to use Git in scripts, with deployment tools, with editors and more.
 36 -These sections are meant to help you integrate Git into your environment.
 37 -
 38 -Lastly, we will have a series of articles on **low-level documentation** that may
 39 -help the Git hackers who want to learn how the actual internals and protocols
 40 -work in Git.
 41 -
 42 -### Feedback and Contributing ###
 43 -
 44 -At any point, if you see a mistake or want to contribute to the book, you can
 45 -send me an email at [schacon@gmail.com](mailto://schacon@gmail.com), or you
 46 -can clone the source of this book at
 47 -[http://github.com/schacon/gitscm](http://github.com/schacon/gitscm)
 48 -and send me a patch or a pull-request.
 49 -
 50 -### References ###
 51 -
 52 -Much of this book is pulled together from different sources and then added to.  
 53 -If you would like to read some of the original articles or resources, please
 54 -visit them and thank the authors:
 55 -
 56 -* [Git User Manual](http://www.kernel.org/pub/software/scm/git/docs/user-manual.html)
 57 -* [The Git Tutorial](http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html)
 58 -* [The Git Tutorial pt 2](http://www.kernel.org/pub/software/scm/git/docs/gittutorial-2.html)
 59 -* ["My Git Workflow" blog post](http://osteele.com/archives/2008/05/my-git-workflow)
 60 -
 61 diff --git "a/text/01_Introduction/0_ \344\273\213\347\273\215.markdown" "b/text/01_Introduction/0_ \344\273\213\347\273\215.markdown"
 62 new file mode 100644
 63 index 0000000..46154f3
 64 --- /dev/null
 65 +++ "b/text/01_Introduction/0_ \344\273\213\347\273\215.markdown"      
 66 @@ -0,0 +1,49 @@
 67 +## 欢迎使用 Git ##
 68 +
 69 +欢迎使用 Git ──快速的、分布式的版本控制系统(VCS)。
 70 +
 71 +这本书旨在为 Git 新人尽可能地提供一个快速的、容易的起点。
 72 +
 73 +这本书的开始将为你介绍 Git 储存数据的方式,并给你上下文,以标明为什么它有别于
 74 +其他 VCS 工具。这将花费你大约 20 分钟的时间。
 75 +
 76 +接下来我们将讲解 **Git 的基本用法** ── 这些命令是你 90% 的时间会用到的。这些
 77 +将给你一个良好的基础,使你舒服地用 Git 做绝大多数你想用它做的事情。你需要大概
 78 +30 分钟的时间来通读这一节。
 79 +
 80 +再接下来,我们将到达 **Git 中级用法**,事情稍微复杂一些,但也许可以替代一些你在
 81 +第一节学到的基本命令。这大多数是一些技巧,并且在知道基本命令后,你在学习这些命令,
 82 +将感觉更为轻松。
 83 +
 84 +在你掌握了以上知识后,我们将介绍 **高级 Git**,这些命令多数人都不会经常使用,但
 85 +在特定情形下却也非常有用。学习这些命令将助你跳出日常 Git 的知识;你将成为一个
 86 +Git 大师!
 87 +
 88 +现在你知道 Git 了,我们将接着介绍 **和 Git 协同工作**。这里我梦将覆盖如何在脚本中
 89 +使用 Git,结合实施工具,结合编辑器,以及更多。这些章节旨在协助你将 Git 整合到你的
 90 +(开发)环境中。
 91 +
 92 +最后,我们有一些列 **底层文档**,用来帮助 Git 黑客们学习 Git 的内在和协议。
 93 +
 94 +### 反馈和参与 ###
 95 +
 96 +任何时候,如果你看到了一个错误或者想要参与贡献这本书,你可以发邮件给我,地址是
 97 +[schacon@gmail.com](mailto://schacon@gmail.com),或者你可以从
 98 +[http://github.com/schacon/gitscm](http://github.com/schacon/gitscm)
 99 +克隆(clone)这本书的源代码,并给我发一个 patch 或者 pull-request。
100 +
101 +中文译本的邮件地址: [jick.nan@gmail.com](mailto://jick.nan@gmail.com)
102 +Git 克隆地址:<http://github.com/jicknan/gitscm>
103 +
104 +(P.S: 翻译这篇的时候,感谢某人在这寒冷的早晨帮我买鸡蛋饼 :P)
105 +
106 +### 参考资料 ###
107 +
108 +这本书的大部分都是从不同的来源整合并扩充而成的。如果你希望读一些原始的文章或者资源,
109 +请访问他们并感谢这些作者:
110 +
111 +* [Git User Manual](http://www.kernel.org/pub/software/scm/git/docs/user-manual.html)
112 +* [The Git Tutorial](http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html)
113 +* [The Git Tutorial pt 2](http://www.kernel.org/pub/software/scm/git/docs/gittutorial-2.html)
114 +* ["My Git Workflow" blog post](http://osteele.com/archives/2008/05/my-git-workflow)

115 +

小更新:

Git 克隆地址:

  * 英文版分枝: book
  * 中文版分枝: book-zh

3 Aug 2008

菏泽欢迎你

据说 7 月 28 日的新闻联播报道了,想必上网的不上网的都知道了。没错,就是那个菏泽老年版 MTV:



Blogger 插入视频好像有问题? 直接给出 优酷上的链接

一些链接:


PS: 小柯的 blog 在新浪,我给的链接不是新浪的。新浪版也好找,却又出入。对比一下:

...直到今天早上,一醒过来就接到一个一直特别了解我心思的朋友打来电话,让我上网搜索“老年版北京欢迎你”,于是我几乎是被电起来一样弹到电脑旁,降落后赶紧谷歌新浪一通搜索...

...直到今天早上,一醒过来就接到一个一直特别了解我心思的朋友打来电话,让我上新浪“2008我最红-《北京欢迎你》唱”看“老年版北京欢迎你”,于是我几乎是被电起来一样弹到电脑旁,降落后赶紧谷歌新浪一通搜索...

不知道是小柯觉悟高,还是新浪无耻?

27 Jul 2008

Blogger 式微

很久没有写 Blog 了,最近写了一篇流水帐,第一选择竟然是豆瓣日记,这让我感到 Blogger 在我这里有点式微了。

- 走出水泥盒子,走到阳光下的时候,我喜欢用 twitter 记录看到的,想到的。我可以一天推十余次,也可以十余天推一次,关键是:因为手机终端形影不离,我可以随时推一把。twitter 这种简单的形式让人欲罢不能,严格按时间排序也很适合做活动直播。相比之下,发篇 blog 就复杂多了。

- 我也不喜欢在 Blogger 写评论类文字了,我喜欢在 friendfeed 讨论。在 Blogger,发布的是我对某件事的看法;而在 friendfeed,则是:这里有件事、物,我是这么看得,其他人是那么看的,集合在一起,就是讨论了;相比于一个人的诉说,我更喜欢讨论。

- 写一篇 Blog 的时候,我并不知道我希望让哪些人看。我不希望自己的生活全部公开在网络,有时只要朋友看到就行了;我也不希望自己的阴暗心理被别人看到,这些就留给自己吧。豆瓣日记足够简单,又可以控制单篇日志的访问权限:是写给自己的,还是写给朋友的,或者谁都可以看?这是我比较喜欢的一点。没错,Blogger 也可以有权限控制,但那是关于整站的;并且,似乎豆瓣更生活一些。因此,一些生活的记录,可能就留在豆瓣了;而如果是技术性的总结,那还是在 blogger 比较合适,还可以有点个人信息发布。

- 更要命的是,纯技术性总结,我更喜欢在本地的 wiki 里展现。和 Blogger 的篇目相比,wiki 更适合知识性文字的组织。

如上,我的 Blogger 发贴越来越少了,直到我发现它的下一个价值。

P.S. 恭贺陈老师 Blog 改版,久未更新的本 blog 也有幸忝列友情链接之中。陈老师以稳定、持续、高频率的更新,一直活跃在 Blogger 的一线,成为我 Google Reader 里最为活跃的 Blogger 之一  :P

4 Jun 2008

左小诅咒—尊敬

"
  当嘲笑你的人开始为你念诗
  "一个人要抬多少次头才看到蓝天?"
  你即刻学会说套用的蹩脚诗:
  一个人要哭多少次才能感到不委屈!
  
  所有的灯有灯罩是为更照亮人
  所有的人去点灯不是把它放在兜里
  那么所有的灯它为什么都有光环?
  掌权的人哟,知道的比我们多

  掌权者不哭泣怎么赢得人民
  掌权者不哭泣怎么赢得人民
"

http://www.songtaste.com/song/11438/

19 May 2008

一个 PHP setcookie() 的小问题

碰到一个奇怪的问题:

同一个 Apache/PHP Server,同一段 PHP 代码,在 Firefox 里可以成功设置 cookie,而 Opera/IE7 里却无法设置。

怎么也想不明白,请教 Google, 在 php 的官方 setcookie() 手册页发现了问题的所在:
If you are having issues with IE7 and setcookie(), be sure to verify that the cookie is set via http for http sites, and https for https site.

Also, if the time is incorrect on your server, IE7 will also disallow those cookies from being set.

(From: http://www.php.net/manual/en/function.setcookie.php#72313

我的问题出在时间上,我的 Server 时间现在还停留在 1999 年 XD。修改时间后,Opera/IE 都可以设置 cookie 了。

由于对 php 所知不多,真正的原因我也说不上来,期待 php 高手答疑解惑。

22 Apr 2008

主流 3G 标准线索

目前主流的 3G 标准主要有三个:
* UMTS,于 GSM 兼容,固定速率 2Mbps,低速 384 kbps,快速移动 144kbps
* CDMA2000 已经有比较成熟的商用了。
* TD-SCMA 384kbps

三个标准的发展线索:
* UMTS WCDMA -> HSDPA -> HSUPA -> HSPA+ -> LTE
* CDMA2000 -> EV-DO Rev.0 -> Rev.A -> Rev.B -> UMB
* TD-SCDMA

其中 LTE/UMB 是未来的 4G 标准。GSM 是 2G,GPRS 2.5G,EGDE 2.75G

3G/4G 的竞争者:
* WiFi: 802.11a/b/g/n 已经有了广泛应用
* WiMax: 802.16 发展了移动版,可以在不同的热点间切换,似乎已经有内置 WiMax 的笔记本了
* 802.20:还是纸上谈兵,如果在谈的话
* 移动电视网络/IPTV: 独立的芯片,独立的网络,将移动电视从传统移动网络中剥离

WiFi/WiMax/802.20 可以提供快速的移动网络,并借助 VoIP 和 3G/4G 竞争。

--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com

无线 ISM 2.4GHz 里的玩家

ISM 2.4GHz 是免许可频段,因此有很多玩家都想进来。

++ Bluetooth (FHSS,调频扩展)
* 手机无线耳麦事实上的标准
* 缺点: BT 的同步时钟是电池杀手。

++ ZigBee (DSSS, 直接序列扩展)
* 适合占空比低的传感器:工业应用和楼宇自动化
* 电池使用寿命长,健壮
*  缺点: 1) 在稍高速率、低延迟应用中(鼠标,键盘,遥控器等计算机周边设备)表现不好;2)协议复杂,成本过高。

++ IrDA: 超短巨鹿(<5m) 点对点应用

++ WirelessUSB(DSSS)
* 致力于解决简单的点对点,点对多应用,如计算机周边设备,遥控玩具,家庭自动化
* 主要设计考量低功耗和抗干扰
* 期望特点:低功耗,低延迟,低成本,高可靠

++ Nordic WDP
* 跳出 FHSS/DSSS 之外,更简单、更低耗,目标是计算机周边

++ WiFi - 无线局域网

问题:PS3/Xbox360/WII 遥控器都是无线的,它们都用的什么技术呢?

--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com

7 Apr 2008

苏州 SUN 开发者日小感

第一次参加厂商组织的活动,其实源于自己的一个转变:多参加一些针对开发者的聚会。

我本身不用 Java,也不用 Solaris,更没听说过 NetBeans。我比较感兴趣的议题是 MySQL 和 AJAX & web 2.0;我还想看一下 Open 的 Solaris 是什么样子的,一直在透过 Google Reader 看 Yong Sun 的 blog

苏州 SUN 开发者日同时还是苏州软件评测中心-SUN中国战略合作的签约仪式,这也解释了 SUN 来苏州的原因。

会场没有网络,也没有提供电源,主要讲了四个题目: Java SE 6, Open Solaris, GlassFish, NetBeans。只有 OpenSolaris 有点兴趣,其他时间我透过 Moto E2/Opera Mini/GPRS 在 wikipedia 了解 Java,OpenSolaris, ZFS,还看了获赠的 《Solaris 内核结构》的序言 :-) 当然还通过 Moto E2 玩 twitter,听 MP3——移动网络太重要了,Moto E2 太重要了,可是 1) 电池不够用 2)E2 的中文输入法太难用。

晚餐后,继续参加了自由讨论,主要是想认识苏州的开发者。期间谈到了 MySQL。感觉他们都没有搞明白为什么 SUN 收购 MySQL(当然我也不知道真的原因 :-) 他们言必称 SUN 是服务世界 500 强,他们说 SUN 正在想办法提高 MySQL 的性能;他们也提到了 startups,但也仅仅是提到而已。当然,更多的是 Java 之类,我没有什么兴趣,也就没有跟进讨论。许多朋友都是来自做软件外包的,经常切换工具,感觉很不利于开发者个人成长。

引用 Fenng 的 tweet 做结:
厂家组织的活动都很没劲的。似乎他们从来就不调查参加者的需求 to @jicknan
--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com

20 Feb 2008

FriendFeed: 我的新欢

FriendFeed 是 2008 年才开始用的,现在已经深深吸引了我。那么,FriendFeed 是什么呢?
  • "View the web through your friends' eyes." - Bret Taylor
  • FriendFeed... you know, for your friends. - Ana
  • All right, two more: 1) "FriendFeed, it's about your friends." and 2) "FriendFeed, share the web." - Chris White
  • Talking is what makes sharing interesting. - Bay Chang
  • "FriendFeed is a communication medium for sharing and discussing interesting stuff, such as news and photos" - Paul Buchheit
  • FriendFeed - Share and discuss interesting things with your friends. - You
  • Right... sharing without talking is monochromatic. - Bay Chang
  • FriendFeed is for sharing and discussing interesting news, photos, and other things on the web. - Chris White
via:
 1) http://friendfeed.com/e/96c0298e-0442-83e3-2cc8-80da5c9f0604
 2) http://friendfeed.com/e/034615de-def1-11dc-9cf9-003048343a40

虽然已经很久没有在 blog 发帖了,但是我的 web 生活在继续,活动记录都在 http://friendfeed.com/jicknan 呢 :P

FriendFeed 已经在影响我的上网习惯了,有些新闻性质的网页,我以后将通过 FF Share 出来,而不是先前的 digest of jicknan 或者 del.icio.us

分享有趣的东西,并和朋友们一起讨论,是件令人激动的事情,而 FriendFeed 正在做这些。

--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com

25 Jan 2008

Linux-based NAS 扩展到 4 bays

写在前面:给 2008 的一个承诺就是多写写 Simple NAS 和嵌入式 Linux,就让这个帖子作为 NAS 的开端吧。

LinuxDevices 的消息,Qnap System 推出了 4-bay 的 NAS —— TS-409 Pro Turbo,这里是其规格:
  • Processor — Marvell 5281 500MHz
  • Memory — 256MB DDR2 RAM; 8MB flash
  • Hard drive capacity — 4 x 3.5-inch SATA I/II drives (not included), up to 4TB internal, RAID 0/ 1/ 5/ 6/ 5+ support
  • LAN port — 1 x gigabit Ethernet (RJ-45)
  • USB — 3 x USB 2.0 (support printer, disk, digital camera, pen drive, card reader, and USB hub)
  • LEDs — USB, status, eSATA, HDD, LAN, power
  • Dimensions — 8.9 x 6.9 x 7.4 inches (225 x 176 x 188 mm)
  • Operating system — Linux (unspecified version)
这款产品是 TS-109/TS-209 的升级版,支持的硬盘数量从一颗到两颗,再到 TS-409 的四颗,最多支持到 4TB,这就是这个产品最大的卖点,NAS 的一个至关重要的参数还是最根本的看容量,其次应该是稳定性、性能和功能融合能力。

我感兴趣的一些地方:
  • 我目前在玩的 Processor 是 Marvell 5181,TS-409 使用的 5281 应该是其升级了。
  • 8MB Flash 能放下多少东西?我比较感兴趣这台 NAS 支持哪些扩展功能,这些没有在 LinuxDevices 新闻里出现。BT/HTTP/FTP downloader? UPnP AV media server? Web Station?... 我会继续跟进这款产品,应该会有一些更新。
  • 256MB DDR2 RAM - 我很羡慕这个数字。我玩过的最高记录是 64MB,但主要的还是 32MB,汗。RAM 搞大一点,性能会提高不少,这可能是 NAS 发展的一个趋势。
  • 现在的 NAS 都是 SATA HDD 和 Gigabit Ethernet 了,IDE 被淘汰,毫无悬念。一个还没有出现的潜在趋势:随着 SSD 的提高与普及,Simple NAS 迟早也要支持的。Fenng 就提到 EMC 已经在其产品上应用 SSD 了,虽然那是在高端 NAS SAN 上面。
  • 没有 Wireless。一般来讲,Wireless 是 router 的功能。NAS 连到带有 Wireless 的 router 上,也有可以无线访问了,要 NAS 本身带有 Wireless,似乎不太必要,况且现在 Wireless 几乎成了 router 的标配。我曾经做过一段 Wireless for NAS,虽然该型号终於夭折。

--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com

Python 写的输入法: scim-python

Linux 下输入法,我一开始使用的是 fcitx,后来切换到 scim 这个平台,但在 scim 里还是用得 fcitx,比较喜欢 fcitx 的输入习惯。也想过自己修改一下,或者 porting 新版的 fcitx 到 scim,但却一直没有行动。

关注 jserv's blog,经常看他提到新酷音这个注音输入法,想来使用自己亲手打造的输入法也是很爽的事情,于是参与一个输入法项目的想法越来越强烈。当再次看到 Jserv 提到《 SunPinYin 引擎改以 CDDL / LGPL 2.1 雙重授權 》,我终于决定花点时间了解一下 Linux 下的输入法,然后选择一个加入开发。

通过 SunPinyin 和新酷音这两个线索,我大体了解到比较现代的输入法都是基于统计语言模型(statistical language model, SLM)的智能引擎。而英文键盘到中文的转换方式主要有全拼、双拼、注音、五笔几种。新酷音是注音,在对岸使用。

上述这些输入法,大都使用 C++ 编写,而我对 C++ 不是不在行。又因为精力问题,也不想花太多在 C++ 上。于是,当我看到 python 写的 scim-python 输入法时,很是兴奋。Python 一直对我比较有吸引力,只是还没有等到好的切入机会。

scim-python 最开始是由 Shawn.P.Huang 在 2007 年 9 月开始开发的,他用 C++ 写了 scim 的 Python wrapper,而后在这个基础上又写了 EnglishWriter 和 Pinyin 输入法,后来 yufanyufan, 参与进来,写了整句输入。目前 scim-python 使用的是搜狗拼音输入法开放的词库,从输入效果来看,还算不错,已经达到可以使用的级别。但目前功能上还比较薄弱,设计上的变数依然很大。

--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com

Fwd: 对Jserv的访问两篇

(Orz,还要发一篇,爆发了 :P)
Jserv 仅比我大一岁,可是已经参与众多 FOSS 社区项目,名满两岸了,很是崇拜。还是加点*我*看了两篇访问后的记录吧:

涉及:
* Kernel
* Embedded: RTOS, i18n, Ajax
* System emulation
* X11: QT/Embedded, 新酷音输入法 chewing


* 2005 年初,成立 Jserv's lab
* 2007 年初,成立 Orzlab

近来看了些输入法方面的,SunPinYin 是一个线索,Yong Sun 写了一系列的代码导读,很深入,对我理解输入法现状很有帮助,很感谢。

Sent to you by jicknan via Google Reader:

via 素心如何天上月 (Yong Sun's Blog) by yongsun on 11/18/07
Jserv(黃敬群)是名满两岸的自由软件开发者,是我崇拜的青年才俊、技术偶像之一。我虽然痴长了几岁,但是在Linux和自由软件开发方面却是后学晚辈。下面是台湾的同业者对Jserv的访问,读后直觉得自己光阴虚度了 :$。

自由軟體開發者 Jserv 訪問 (上)
自由軟體開發者 Jserv 訪問 (下)

记得我最初了解到Jserv,是2002或03年,读到他的一篇关于Qt/Embedded本地化的文章。后来逐步看到他在浏览器、嵌入式系统、图形库、Java虚拟机、输入法、Linux内核、实时系统等各个方面的成绩,对他的技术能力真是钦佩不已。而且Jserv还是一位兼具诗人气质、十分感性的青年,从他许多的blog中,可以看到他对人生许多富有哲理性的思考。

后来虽然在网络上有一些联络,但对他个人却了解不多。这两篇访问,正好满足了我的好奇... ...

希望他将Lab的事业拓展到大陆来。

Things you can do from here:

17 Jan 2008

也说嵌入式移植的裁减

因为需要重启 web station 的开发,因此翻了翻 bob 的旧文──这个 function 最开始就是他在做。看到 《作嵌入式,一定要学会裁减》一文,有些感慨。

在该文中,bob 提到嵌入式裁减的四条路:
  1. strip - 去掉 binary 中在运行时用不到一些符号。这些符号在 debug 的时候要用到,但到板子上就不需要了。
  2. strace - 这可以说是 bob 的独门秘笈,他最先使用,也用的最多。核心细想就是:"需要的一个不少, 不需要的一个不多"。
  3. 去掉不需要的功能 - bob 认为这是代码级别,比较高级一些。
  4. 扩充 Flash - 无法再减,无须再减。
这些当然是我应该遵守的,但我还有个习惯:在做上面 4 步之前,我会充分利用 configure 的选项,尽量将不需要的功能通过 options 的调整关掉,在此称为 Setup 0。这和 Setup 3 是一样的目的,不过不是 code 级别,而是 compile 级别。

这就是我的小感触。bob 是个善于总结的,我要向他学习,并跟着他顺道反思 :P

--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com

15 Jan 2008

EGLIBC: Embedded GLIBC 体验

EGLIBC 是一个小型化的 Glibc,由 CodeSourcery 联合 freescale, montavista 和 windriver 等厂商合作开发。今天参照 jserv 的脚本 ,花了几个小时终于编出了。在此过程中,我深刻体会到一个强劲的 PC 对开发编译的重要性,目前用的单核 1.4GHz X31 明显不够用。

编译时,我稍稍修改了一下 jserv 的脚本。修改后的版本放在了这里:
http://jicknan.googlecode.com/svn/trunk/code/toolchain-eglibc.sh

在我的 slackware-current 上还有个问题:EGLIBC-HEADES 那一步 configure 的时候,会提示没有找到支持 long lines and -e 的 grep。看了一下 grep 的 man page,-e 是支持的,估计问题出在 long lines 上。我找到相应的(eglibc/libc{posix/glob, sysdeps/unix/sysv/linux}) configure,将检查出错跳过的地方注释掉(做 cross compiling 的时候,我经常这么干),向下编译没有再出现问题。

其实工具生成之后,还需要编译个系统出来试试,我还没有合适的系统,仅仅测试了一个小程序。接下来打算做一个自己可以完全掌控的系统,编译器就用这个了。

工作中所有的都是 prebuilt 的编译器,考虑的和其他组员一致,我也不好使用自己的工具了 :P 不过,现在工具好像也是出自 CodeSourcery。

参考:

--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com

11 Jan 2008

还是需要 wiki 做个人知识管理(PKM)

其实很早就尝试试用 wiki 做个人知识管理,2005 年尝试的是 pmwiki (php 写的,文本保存,不需要数据库)。后来空间没了,算是断了。在 2006 和 2007 年尝试过在本地架设 Moinmoin(Python, 免数据库) 和 Trac(Python, sqlite/mysql)。在线的尝试过 woodpecker 的Moinmoin,但这是中文 Python 开发者乐园,放杂七杂八的东西总感觉不好意思,虽然是在自己的页面。

我对 wiki 系统的需求是:
* 便携。日常工作生活中,我要在 2 个网络环境,3 台 PC/NB,5 种系统中切换,必须保证每个系统都能方便的访问,架在 Internet 上似乎是惟一的选择。
* 稳定。个人知识管理么,要的就是积累,一要不出问题,二要活得长远。
* 速度。使用起来要流畅,不能在一个页面卡半天,但这也要好于 timeout 需要重来。
* 便于控制,操作简单,最好有权限控制。有些可以共享,有些则适合自己参考。

比较一下 online/local 版本的不同: * online: 便携,其他都要看具体的服务方。
* local: 稳定好,速度没有瓶颈,便于控制,但就是 TMD 不便携。

我在 web 上努力寻找合适的 PKM 系统:
* Google Docs 不够简单,编辑界面复杂,操作起来也不直接,速度也是个限制,不流畅。便携和稳定都还不错。目前主要用于查看/存放 Docs, Excel,虽然自己不生产这些东西,但别人生产的还是要兼容。
* Google Notebook 最近一两个月才开始用的多一些,改版后好用多了。可以用来保存看到的网页,配合 Firefox 插件效果更好,也可以存放一些简单的想法。但没有格式控制,也不能很好的组织知识的体系结构。
* MindMeister mind map 在线工具,但不是所有的知识都适合这种结构。
* ...

努力之后,我还是发现需要一个 wiki 系统。现在开始从两方面解决这个问题:
* 寻找 online 的服务,重点考察稳定、速度与控制。
* 可以架在 web 上的系统,现在买的空间好像也很不稳定,因此这个系统需要满足:
* 兼容性。有尽可能多的候选空间可以跳,目前 php 的实现比较多。
* 备份、同步与恢复。随时做好换空间(不稳定,被阻尼,……)的准备,便于备份,便于同步,便于恢复。数据库倾向于 sqlite,不过声称支持的好像不多;其次可以考虑文件方式存储数据,像 pmwiki,但不便于同步;mysql 支持的挺多,也可以考虑,但比 sqlite 要复杂。

你有更好的建议么?

[update @Fri Jan 11 21:41:44 CST 2008] 在 Wiki Matrix 比较了一番后,选了一个在线的 wiki 服务: wikidot。这类方案有个很大的弊端是可能被阻尼。

--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com

5 Jan 2008

软件与在线应用使用年结之2007

一年了,总结一下,以记录使用习惯上的变化轨迹。

Firefox 去年我的第一浏览器还是 Opera,今年已经变成了 Firefox。是 Firefox 的扩展将我绑在了其上: Adblock Plus 屏蔽广告;Gladder 使用在线代理去墙外兜风;Access Flickr! 显示墙外的图片;Google Gears 离线使用在线服务,在线的还是限于带宽,不够流畅;Google Notebook 记录零散的笔记;以及 Fenng 提到的 Twitter 扩展 TwitterFox 和 Hung 提到的 Picnik 截屏与在线图形编辑扩展。

Gmail 估计是 Firefox 里停留最多的页面了,配合 Gmail Talk 效果更佳 :P

Greader 也是每天必玩的节目,很好,好强大。就是和 Google Gears 配合的还不太好。试用过抓虾,没用过鲜果。我是 RSS reader 使用者,而不再是试用者 :P

Blogger.com 虽然 07 年发贴并不多,虽然即使发贴也用 Gmail email 过去,虽然发了贴在墙内也看不到,但是 Blogger 还是很重要的一环。07年,我仍然在写给自己。

Twitter 虽然三月份就注册了,但是并没有太玩,不敢太用,怕被口水淹没。开始用的是安静许多的 Saying@weazone,后来还是经不住 ocde 的诱惑,跑了去。但还是相当节制。直到前些天看到 Fenng 推荐了 TwitterFox,才算放开了一些。但目前 Twitter 还只是 tweet,像 Hung 那样 TwitterFeed 定向的,还是不敢 follow :-)

LinkedIn 比较喜欢的一个服务,虽然年中才用。注册过若邻,但太热闹(感觉这类网站也不是那样的热闹发),不喜欢。Facebook 也是 SNS 之一,而且很热,但给我的感觉也很乱。这里应该有不少猎头,已经有两家大公司通过这里找到我了。

Google Docs & WPS Office 主要是打开 M$ 的 office 文件,WPS Office 基本可以搞定,而且更小更快;Google Docs 则做一些编辑和共享。这一使用和车东很像。

豆瓣:去的不是太多,但每次要看书/音乐/电影的评价,都会想到这里。

Picasa Web 这里有 1GB 空间,不必在乎每月的流量会否超过,我喜欢一次上传很多,picasa 桌面版配合的不错。

财帮子  三月份一发布就开始用了,越用月舒服,基本上开基不用找别的网站了。

其他的:原则上试用开源/免费的。中文输入法 Linux 用的是 scim+fcim,Win 下是谷歌拼音,编辑器用 Vim,Win 下的压缩/解压缩用 7-zip,抓包用 wireshark。

注意:都没有给链接,下面这个页面可以找到大部分: http://jicknan.bplaced.net/link.html

参考:
 * HUNG: 过去一年,天天使用的软件和在线应用
 * 车东: 年终总结: 2007 chedong.com 小结
 * David Yin: 2007年常用的Web 2.0服务
 * Feng:年度回顾:2007 年最常用的 Web 2.0 服务

--
每一个不曾起舞的日子都是对生命的辜负。|| Gmail/Gtalk: jick.nan@gmail.com

移动开发,第三次浪潮

- 农业时代
- 工业时代
- 信息时代
 * 大型机/小型机
 *  PC 第一推动: IC 芯片
 * Mobile Intenet/Mobile net
  * Symbian
  * Windows Mobile
   * BlackBerry
   * iPhone
   * Linux
    * Android: Linux + Java
    * OpenMoko
    * ...

源于《程序员》(2008.1)的专题。

--
每一个不曾起舞的日子都是对生命的辜负。
Gmail/Gtalk: jick.nan@gmail.com