24 Jan 2015

Nexus 4 上装 CyanogenMod 12 Lollipop 5.0

之所以安装 CyanogenMod,是因为想用 cm 的权限控制,尤其是对联系人的访问限制。因工作原因必须装一些国内杂七杂八的应用,而国内应用在权限要求上又很泛滥,所以权限控制几乎成了必备。

1. 参考《在Nexus 4 上安装 CM》 完成,解锁、安装 recovery 恢复系统、安装 CM ROM 等一些列动作。一些资源链接如下:

* CM12 Nightly Build for Nexus 4,目前是 5.0.2: http://download.cyanogenmod.org/?type=nightly&device=mako
* Google Play Service 和 Google 应用套件 gapps-lp-20141220-signed:http://fitsnugly.euroskank.com/?rom=cm12&device=gapps

2. 安装完成后,在 Settings -> Privacy -> Privacy Guard 中改为默认开启。

3. Android 的后台服务运行也被滥用了,装绿色守护矫正下。

4. 既然已经装了 cm12,不妨把 Google Now、Google Fit 也激活下。
- 在 About 中按 Kernel 版本号 7 次激活 Developer 选项。
- 在 Developer 选项中打开 root
- 用 LocationReportEnaber 模拟美帝 SIM 卡,打开 Google Settings 中的位置报告。

5. 关于 Android 智能手表再次连接的问题。在升级到 5.0 后,手机连手表会发现不了。原因是 Android Wear 的一个设定:手表重新连新设备时,必须把手表先恢复出厂设置。

6. 安装 CM12 后,可能会出现在 Google Play 网站上安装应用时,看不到这个设备的问题。解决办法是在 Apps -> All 中清除 Google Play Services 和 Google Play Store 的 DATA,然后再打开 Google Play 即可。

20 Jan 2015

旧金山穷游总结帖

补记:因为只写了两天,所以这总结其实也只是这两天的感悟而已。后来来了小伙伴,就玩疯了...

经过两天的体验,对旧金山有如下认知:

  • 空气很好。虽然是夏季,但气温是春秋的,靠海,有湾,早晚需要外套,中午阳光强烈。
  • 道路横平竖直,以市场街分南北。背面是各种独特的街名,而南边则是从Main St一直排到2xth St。
  • 街道都是一竿子到底型的,比如南北的Tayer St,北起湾区的渔人码头,南到最南边的內湾。而市场街则是东西走向的主干道,也是横穿型的。
  • 建筑基本都是石头,很多是1906年大地震后建成的,各式各样。看惯国内千篇一律的水泥城后,感觉每座建筑都很有特色,也有自己的历史。
  • 旧金山的经济形态一直在更迭,但这些建筑一直屹立不动。以前AT&T的大楼,现在很多互联网公司,如Airbnb占据着。互联网的办公地点已经渗透到市中心了,而不止是在南湾的硅谷。
  • 交通方面:从机场过来又是BART、公交、SuperShuttle、出租和Caltrain等的,感觉选择比较多,一开始很难摸到头脑。其实多接触几次就搞清楚了。
  • BART,湾区快速交通,其实就是类似国内的轨道交通,地上地下都有。链接旧金山各区域,还在扩建,已经规划的未来会扩展到 Palo Alto。票价主要是按站数。从机场到市区的 Powell St 需要 8.65 刀,换算一下还是比较贵的。支持自助式买票,可用借记卡、信用卡。车票带磁条,可自助加值。
  • 公交系统muni。统一票价2元。市内道路中很多有轨电车,道路高低不平。有些线路甚至和 BART 公用地下通道,只是因运行公司不一样,不能相互换乘。上车买票。同一张公交票可以4小时(不确定)内换乘其他公交,司机基本也不看,有当天票就能上。
  • 火车 Caltrian,现在也统一叫 Amtrian。主要链接较远的 Palo Alto、Mountain View等南湾小镇。比较古老,速度也一般,不过长途火车比较,站距短,可以作为轨道交通用。支持自动买票,可用信用卡、借记卡。
  • 停车位。旧金山所有的停车位都是自动缴费系统,可用信用卡、借记卡。每个车位有个独立的无限缴费系统,看介绍NFC、手机支付也是OK的。
  • Bike Share 自行车项目。旧金山从2010年起就开始了 Bike Share 计划,系统也是全自动的。在任何一个借车点,可以用信用卡购买1日票9刀、3日票和年票。不过每次借出只有半小时时间有点鸡肋,超时后收费还非常贵。相比之下,我更新欢苏州公共自行车的计费方式 :)
  • Clipper Card,是旧金山的公交一卡通,支持 BART、BUS、停车位直接刷卡,Caltrain 刷卡购票。不过线下购买方式较少。
  • 吃的方面没怎么探索,就吃汉堡喝可乐了。麦当劳、汉堡王、Subway 轮流来。
  • 咖啡,很便宜。只要2-5美金,也就是坐趟公交的代价。所以很普遍,经常出现排队情况。
  • 住宿。有便宜的,但要提前订,不像国内,当天基本都是可以定得到的最便宜的那一批。

旧金山穷游 Day 2



按昨天的计划,今天主要是逛渔人码头和金门大桥,然后坐 Caltrian 火车去 Palo Alto,感受下硅谷的孕育地斯坦福大学。(补记:后来因为发生了当天到的北京活动在黑人区被抢手机的事,Caltrain 计划未能成行;临时改计划的后果是没找到住宿的地方,做了一夜三藩市街头流浪汉。)

早上8点出门后,第一站计划购买1天的muni公交票,走到 Visitor Information Center 发现人家9点上班,只好作罢。

边寻找其他的买票地点,边走向加拿大总领事馆,因为还想着为西雅图之旅准备下。一路走下来发现:
  • 一天通票要14刀,3天通票21刀,7天通票27刀。但仔细想想,其实一天也很难做到7次车,不划算。
  • 然后是加拿大的旧金山总领事馆。一开始的地址是错的,5年前就搬迁了。用 Google 翻译找到英文,重新找地址。结果他们说这里不能办签证,美国西海岸只有洛杉矶可以办。旧金山可以邮寄,考虑到呆的时间,来不及,只好作罢。

接下来就是更长的步行旧金山湾区了,从码头大楼开始,由 PIER 0 一直到 PIER 39 的渔人码头,一路步行,一次经过:
  • 海关大楼的市场,偶遇阿明推荐的 Blue Bottle Cafe,果然非常火爆,排队不断。
  • 中间有个栈桥,是昨天去过的。
  • 接下来是个博物馆,幼儿园小朋友参观学习的地方,当然也有不少游客。
  • 然后是重头戏 PIER 39 的渔人码头,著名的大螃蟹形象就是出自这里。形成一片旅游去,餐饮、礼品、杂耍、海狮展都有,占地也挺大。
  • PIER 39 之后就到了 North Beach 北沙滩了,很干净,小孩子戏水玩的挺多。由于温度并不高,因此下水的人只是偶尔。
  • 从北沙滩开始就可以远眺金门大桥了。一路向北会有一片坡地,上去后可以一览金门大桥全貌。

上到山顶正好1点半左右,想着也差不多要启程去斯坦福大学了。于是Google Maps 差了路线,来到之后第一次坐上了公交,一开始人不过。随着进入Chinatown和市区,人越来越多。

在公交车收到同伴在 Civil Center 附近被黑人流浪者抢手机的警告邮件,震惊之余也必须有所行动。因为到目前为止,只有我在旧金山,其他人都在途中游玩,或还在准备启程。紧急通了邮件之后,决定今天还是要住在旧金山,以便现在自我镇定的同伴随时需要。

由于同伴今天还在震惊中,并没有见面的打算。于是我又从 Civil Center 找了1个小时厕所,解决后决定去四街东头看看 Caltrain 是怎么运作的。

这次I/O大会的会场 Moscone West 就在4街旁边,刚好路过。又去 City 超市找了个公共厕所...

到了Caltrain车站才发现其实不大,只有4、5个火车道,比国内的火车站规模差多了。当然这也从侧面说明美国铁路并不发达,旧金山的 Caltrian 也只是经营到南湾的火车而已,有点像延长的地铁。计费也是和地铁类似,分4个区,跨区才升级票价。计算了下,从旧金山到 Palt Alto大概要2个区,票价7刀,时间48分钟。

探索完Caltrain后,就想着去传说中很有名的灰狗巴士看看。不过走到南沙滩附近时,同伴发了条信息说不太敢一个人去吃饭,那我就赶过去吧。这次还是坐轨道交通,路面时有轨电车形式,到市区则公用了地铁线,很神奇。10分钟从南沙滩到Civil Center,快的超乎想像。

不过到了之后又联系不到同伴了,只好在附近逛逛,实在等不来,上个厕所找我自己的住处吧。

说到今天的住处,昨晚大概查了下感觉还挺充裕,就没有太着急。谁知道实际要定的时候才发现,要么太贵,要么太偏。经过同伴的提醒后,越来越不敢去偏僻的地方了。

然后,当然,最后就到了第一天吃第一顿的24小时营业店麦当劳。继续买点东西,吃吃吧。期望是能捱过上个一晚上。

不过后来发现吃喝完总是要上厕所,大概是这些天一直吃汉堡、喝冷饮,有点不适应。因为厕所,我又回到了前面千辛万苦找到的 Parc 55 蹲坑了。

这是一个酒店,环境还不错,还开放自己的酒店,简直是我在经过几次找厕所难之后遇到的大福音。

处理完毕后,我就坐在酒店一楼的大厅,开记今天早上开始的流水账,顺便大大瞌睡,看深夜来来回回的男男女女。当然,更重要的是充电,移动电源早已耗干,早就用上了MBA这块大电源。

补记:后来天快亮的时候被保安赶走了,好像犯了私闯民宅之类的罪过,美国真实公域私域分的清。


然后,看也差不多到了时间,算是起个大早走过去吧。但在还没有出太阳的三藩市街头穿过路口流浪汉频出的黑人区还是有点小恐怖。还好找了个有人的路边,蹭到天亮,和伙伴会合不表。

旧金山穷游 Day 1

从 Notes 中翻出了纪录,还是补贴一下6月份去参加 IO’14 的即时总结,写了两天和部分总结,后来就没有后来了...

# PEK 北京出境

12点的飞机,鹏哥10点就把我送到首都机场T3了,后来发现时间刚刚好,在不逛免税店的情况下 :)

## Checkin 值机

UA 的航班没有开放自动值机,都是要排队的,可以办理行李托运。由于这次决定做个背包客,所以也就不用办理托运了,拿到登机牌就OK。

这里会问到在美国的地址,要准备好。

## Boarding 登机

国际航班要按照指示牌,到楼下坐机场内部轨道交通。国际航班到终点下即可。

然后就是排队办理登机,排队安检。和国内差距不大,有一管100g的牙膏虽然单独检出,但也通过了。

安检之后,直奔登机口即可。依然是排队,不表。

机上时间比较久,要12个小时。所以最好一开始找个靠过道的座位,方便坐久了活动活动。

另外机上会有个美国海关的入境表格,都是有没有带食物之类的,诚实回答,最好机上填好,免得后续入关麻烦。

# SFO 旧金山入境

下飞机后,就是跟随大部队到入境口。我们是走 VISITORS 通道,排队,出示飞机上填的表,然后排队,等安检员检阅。

安检是比较重要的一步,据说会有警犬用来随机发现行李中的食物。安检大叔会问一些问题,什么时候回去,都去哪里什么的。

安检过了就算入境完成。

## 到达旧金山市区

从SFO国际机场到市区方式挺多的,有公交车(半小时一班)、BART轨道地铁(15分钟)、SupperShutter 机场巴士,TAXI 出租等。

本着了解的需要,我基本都转了一圈 :) 最后选了 BART,用 Google Maps 查好,到 Monegteory St 花费 $8.65,直接有自动售票刷信用卡就OK!

在BART稍微也了解了下线路,运行时间,票价等,下BART后差不多1点了,直接在出口找了个麦当劳填饱肚子(门口有个丐帮大爷把门 :-)

吃过午饭后,就去街上随便溜达,Chinatown 华埠方向。从新奇的各式各样的石头建筑到适应,辗转旧金山码头和市区主要街道,中国城几条街。全程步行,一直到了晚上住宿的8街,9街之间的 Eruopean Hostel。

## 第一晚入住家庭旅馆

由于之前在 Booking.com 上做了预定,因此入住很简单。刷卡 29.9,押金现金10美元。安排到了四楼,本来应该是一个床位的,但没有室友,因此算是自己独占了一个房间。

晚上在 Hostel 附近的 Burger King 点了个套餐,途中路过一个房子,挂着 Brightcove 和 Mapbox 的牌子,看来是办公地点。

由于白天没有睡,晚上还是比较困的,简单网上看了下后,衣服没脱就睡着了。到了2点半醒来,又打了几个电话折腾了下,结果没啥睡意了。


然后了解一天新的信息,推测旧金山的运行方式,大概计划下明天的行程,倒腾到早上7点,简单冲了个澡,洗漱一番,算是一天的开始了。

1 Jan 2010

Re: 2009年终告白:相信未来

祝愿我们快乐,

http://ebd.3322.org

2009/12/31 Jick Nan <jick.nan@gmail.com>:
> 相信未来
> 食指
> 当蜘蛛网无情地查封了我的炉台,
> 当灰烬的余烟叹息着贫穷的悲哀,
> 我依然固执地铺平失望的灰烬,
> 用美丽的雪花写下:相信未来。
> 当我的紫葡萄化为深秋的泪水,
> 当我的鲜花依偎在别人的情怀,
> 我依然固执地用凝霜的枯藤,
> 在凄凉的大地上写下:相信未来。
> 我要用手指那涌向天边的排浪,
> 我要用手掌那托住太阳的大海,
> 摇曳着曙光那枝温暖漂亮的笔杆,
> 用孩子的笔体写下:相信未来。
> 我之所以坚定地相信未来,
> 是我相信未来人们的眼睛——
> 她有拨开历史风尘的睫毛,
> 她有看透岁月篇章的瞳孔。
> 不管人们对于我们腐烂的皮肉,
> 那些迷途的惆怅,失败的苦痛,
> 是寄予感动的热泪,深切的同情,
> 还是给以轻蔑的微笑,辛辣的嘲讽。
> 我坚信人们对于我们的脊骨,
> 那无数次的探索、迷途,失败和成功,
> 一定会给予热情客观、公正的评定,
> 是的,我焦急地等待着他们的评定。
> 朋友,坚定地相信未来吧,
> 相信不屈不挠的努力,
> 相信战胜死亡的年轻,
> 相信未来,热爱生命。
> 1968年 北京

31 Dec 2009

2009年终告白:相信未来

相信未来

食指

当蜘蛛网无情地查封了我的炉台,
当灰烬的余烟叹息着贫穷的悲哀,
我依然固执地铺平失望的灰烬,
用美丽的雪花写下:相信未来。

当我的紫葡萄化为深秋的泪水,
当我的鲜花依偎在别人的情怀,
我依然固执地用凝霜的枯藤,
在凄凉的大地上写下:相信未来。

我要用手指那涌向天边的排浪,
我要用手掌那托住太阳的大海,
摇曳着曙光那枝温暖漂亮的笔杆,
用孩子的笔体写下:相信未来。

我之所以坚定地相信未来,
是我相信未来人们的眼睛——
她有拨开历史风尘的睫毛,
她有看透岁月篇章的瞳孔。

不管人们对于我们腐烂的皮肉,
那些迷途的惆怅,失败的苦痛,
是寄予感动的热泪,深切的同情,
还是给以轻蔑的微笑,辛辣的嘲讽。

我坚信人们对于我们的脊骨,
那无数次的探索、迷途,失败和成功,
一定会给予热情客观、公正的评定,
是的,我焦急地等待着他们的评定。

朋友,坚定地相信未来吧,
相信不屈不挠的努力,
相信战胜死亡的年轻,
相信未来,热爱生命。

1968年 北京

2 Jul 2009

四年

新同事是今年的应届毕业生。

新同事: 你来几年了?
我: 我 2005 年过来的。
新同事:wow,我 2005 年才上的大学。

我忽然想起来前几天看到一个学弟写的毕业纪念文,他的四年完全是在新校区渡过的。

是的,四年一个轮回。我的大学后四年也要过完了,就这么静悄悄地。

25 Jun 2009

最黑暗的一天

Google.com 被 GFW 干掉了!

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