2012.4.18
Dropbox可以算是文件云同步领域的鼻祖了,即使不是最早出现的,也是第一个推动云同步向普通互联网用户普及的。Dropbox的成功并非偶然,其强大而且独一无二的功能和技术是支撑其用户忠诚度的基石。作为一个Dropbox的早期用户,使用至今,有些小经验小技巧,在这里与大家分享一下,希望能帮助大家把Dropbox的作用发挥到最大。
值得信赖的差量同步
『差量同步』是Dropbox相比其它同类云同步工具的核心技术优势。其效果可以简单理解为,文件的变更只需同步变化的部分,为用户节省流量和时间。差量同步所带来的好处其实还不仅仅是文件的变化同步更快,你还可以随心所欲的将文件或整个文件夹从Dropbox下的一个位置移至另一个位置、更名,甚至拿掉一段时间之后再放回来,它们都不必重新被上传到服务器。而其它云同步工具就未必能这么省心了。
Dropbox的其它一些特性,也是建立在这个机制之上的。就拿『文件历史』功能来说,别担心Dropbox会消耗数倍的空间来保存文件的历史版本,其实它只是保存了多个版本的差异,这样消耗的空间通常是非常少的。
得益于强大的差量同步,你甚至可以在Dropbox之上构建其它存储技术,并保持高效率的同步。比如在Dropbox中使用TrueCrypt,由于后者对加密数据的变更作用到卷文件上体现为局部的变化,所以可被Dropbox高效的同步,而完全不必担心一点变化而导致整个庞大的卷文件需要重新上传,这是其它一些云同步工具所无法比拟的。不过,在这类场景下需要非常小心『变更冲突』可能带来的不良后果(产生两份不和谐的副本),尽可能不要同时在多处对数据进行修改。
善用选择性同步(Selective Sync)
选择性同步是Dropbox早期呼声最高的期望特性,没有之一。不过这个特性足足让大家等了一年多,才最终被开发团队满足。背后故事的曲折就不赘述了,好在现在的这套实现方式应该还算是比较让人满意的。选择性同步的使用场景非常广泛,下面简单列举几个,大家也可以根据自己的需要自由发挥:
避免在非主用电脑上同步包含备用资料、音乐、视频的大文件夹。
避免在笔记本电脑上同步敏感私人数据。
避免同步.svn文件夹,最好配合支持归一svn文件夹的新版SVN客户端。
避免同步系统或应用程序频繁自动生成的文件,比如某些临时文件夹、Java开发工程的target/bin/gen文件夹。
避免同步与本地电脑环境(如绝对路径)相关的数据,比如引用了绝对路径的Java工程中的.project文件、某些应用程序的配置文件。
……
更简单实用的分享功能
Dropbox发展到今天,共享功能几经优化,已渐趋完善。现在你不仅可以在网络上开放的分享Dropbox中的某个文件或文件夹,而且还能有选择的在几个朋友或同事之间私密的共享一个文件夹,并保持它在多人之间的实时同步。多人共享功能需要其它人也有Dropbox账号,但不必一定使用客户端。现在我就经常利用多人共享功能和朋友共享一些技术书籍电子版、合作收集一些素材、交换最近出行的照片,甚至替代SCM工具直接作为简单开发工程的多人同步方式。因为简单,所以方便!
Git over Dropbox
这里特地把Git拿出来单独讲,是因为我在这个使用场景下摸索了一段时间才找到最佳的使用方式,与大家交流一下。通过Git分布式的管理代码是现在主流的SCM解决方案,但在多人之间协作时,往往还是绕不开一个中心服务器。Git Hub或者Bit Bucket是不错的选择,但繁琐的配置和网络的等待让这个方案变得有点难受。其实Git over Dropbox就是一个简单易行的入门级解决方案,不仅适合小团队,还可以用作个人的代码管理。
如果是个人使用,我倾向于直接将整个工程,连同.git子文件夹一并放在Dropbox上。表面上看起来是有些冗余,不过好处是,不仅git中的数据在云端自动备份,尚未commit的代码也保证了同步,方便有时即使有尚未写完的代码,也不必为了保持同步而commit进去污染仓库,回到家里还可以继续调试完善。
倘若需要多人协作,则建议将工程与git分离,只在Dropbox上创建bare repo (git init –bare),大家将各自Dropbox中同步的bare repo作为remote进行push/pull或clone。不过,这种方案其实是以让渡一致性换取异步同步的便捷性,所以不适合大量开发人员的频繁git操作,那样容易引入让人头疼的同步冲突。
正确使用『内网优先同步』
这是Dropbox从很早版本就支持的一个特性,但却鲜有人知晓和使用。这个按照简单原则所设计的产品功能,在现实情况下,往往并不如其所设想的那么奏效。『内网优先同步』要求同步的多点在同一个子网(广播域)下,所以如果电脑之间的连接跨越了路由器,则在物理上阻断了这个特性的正常工作。
另外,防火墙也必须允许Dropbox的端口侦听。需要注意的一点是,当Dropbox检测到防火墙阻断其端口侦听时,会自动关闭这个功能,所以在正确设置了防火墙之后,还应检查Dropbox的配置中是否激活了『Lan sync』。
值得一提的是,『内网优先同步』除了可在同一账号的多台电脑间快速同步文件外,还支持多人的共享文件夹同步。所以小团队在局域网内使用这个功能是一个非常简单而高效的文件共享解决方案。
奖励空间的最大化
Dropbox依仗其技术优势和行业地位,在空间的给予上明显有些吝啬了。普通注册用户只有2G空间,通过邀请注册 勉强能得到2.5G的初始容量,不过只是杯水车薪了。其实,Dropbox提供的一些空间奖励计划能帮你快速增加不小的空间,而且操作难度并不大,比如邀请一个好友可以得到500G空间(本来还想写如何认证学生账号获得双倍奖励,可惜最近也给扯平了)。
其实,有一个隐藏颇深的奖励任务入口 ,可能大部分Dropbox用户都未必发现并完成了其中的任务。完成诸如链接Twitter/Facebook账号、follow @Dropbox、发表感言等小任务,就可以得到640M的额外空间,虽然不算多,倒也不拿白不拿。
如果你还不是Dropbox的用户,觉得我写的这篇内容还算有用,让你有了一试Dropbox的冲动,那么不妨用我的推荐链接注册 ,咱俩各获得500M的奖励空间,何乐而不为呢? (:
1 Comment
2012.1.6
把刀用力刺进另一个人的身体里,观众会为此向你喝采、崇拜你。
而你,也会开始为了喝采声,而爱上他们……
最终,我们都会化为一堆枯骨。
可悲的是我们无权选择命运,但有权决定如何面对死亡。
唯有如此,才能像个人一般的。被人们追忆。
——电影《角斗士》
对角斗士而言,荣耀之外,就只剩下深深的悲怆。他们无法为命运抗争,因为在那个时代,他们仍旧是奴隶,只是比其它的奴隶活的更体面一些。
奴隶社会脱胎于那个崇尚『各尽所能、按需分配』的原始共产主义,看似是一种倒退,但却有其内秉的必然性。生产力的大幅提升,尤其是手工业的出现,推动了财产公有制向私有制的转变。人性中的私欲第一次在部落内部被显著的激发,催生了背叛、对立、压迫和剥削。战俘和刑律只是蓄奴开始的幌子,对财产的占有和对资源的控制成为了奴隶社会的阶级基础。而正是这种不平等的阶级基础,为奴隶主阶层集中了强大的势力,在那个弱肉强食的时代,历史发展的车轮本能的选择了强者。强者愈强,弱者愈弱,阶级社会从此诞生。
可是,在我们感叹于教科书上对那个久远年代略带嘲弄的描绘时,有多少人真正意识到,我们正在又一遍重演这个无法阻挡的历史进程?或许看起来并非那么的雷同和明显,但背后左右社会演进的冰冷规律却是惊人的一致。互联网正在你、我、及每个人眼前,迅速的从那个曾经自由、无私的原始共产主义社会大步踏上走向奴隶社会的不归路……
这并不是危言耸听,请试着回答以下两个问题,然后再回头审视上面的结论:
互联网的『自由』和『免费』精神,是否正在被Facebook、Apple,甚至曾经高举这面大旗的Google所边缘化?
Web所倡导的『开放』与『互联』的精神,是否正在被社会化网络所筑起的一道道高墙所摒弃和切断?
或许这些问题你早已察觉,也有所思考,但也丝毫不觉得这妨碍你拥抱Facebook和微博。这种心理状态是完全可以理解的,因为几千年的奴隶们也是这样想的。他们明知自己是被压迫和奴役的,但却极少主动抗争,甚至安于现状。
毕竟做牛做马总归有了归属、有口饭吃,好过虽然自由但却食不果腹的流浪生活,就像SNS的藩篱虽然限制了诸多自由,却能让你走出一个人的孤单,融入朋友圈子的氛围。
而如果能替一个显赫的贵族干活,可能还会在卑微的内心中有那么一点小小的优越感,就像是在微博上看到自己突然被一个名人关注而小小的激动一下。
进而,如果你比别人更强健敏捷,甚至还有机会被训练为专业的角斗士,叱咤于古罗马雄伟的斗兽场,让数不清的贵族为你呐喊喝彩。这就好比当你成为微博上的意见领袖,弹指之间就能『通电全国』,引来众粉丝的摇旗呐喊、疯狂转发。
其实,当我们深深沉醉在这种被奴隶的快感之中时,那些高高在上的奴隶主已经在微笑的数着自己手中的钞票和股权了。Facebook 500亿美元的估值是谁创造出来的?新浪微博新近获得DST 2亿美元投资的背后是谁的汗马功劳?他们会把这万亿用户共同创造的商业价值拿出来分给他们的用户么?
不会,因为他们是奴隶主。你可曾见过奴隶主把自己的财产分给手下的奴隶?他只会以恩赐的姿态把吃剩的饭菜分给众奴仆,还会刻意控制这种赏赐,让下人感到弥足珍贵,从而知足感恩。
无论是《Facebook效应》,还是华尔街的商业杂志,都会将Facebook的巨大成功渲染为扎克伯格传奇的创业经历,让更多的美国草根民众憧憬和向往一个虚无缥缈的创业梦。就像在那个年代里人们都会用崇敬的目光仰视骑在马背上那些光鲜的贵族,而鲜有人会去质疑他们的剥削和压迫,因为一个社会的价值观总是其中的成功者所塑造的。在我们嘲笑那些没有尊严、甘为牛马的奴隶时,可曾想过我们或许也一样会被后世以同样的方式所嘲笑?即便是微博里数万粉丝的意见领袖,在后人看来,可能也不过像是我们眼中的角斗士……
只是,不知道他们可曾有发出过似本文开篇那样悲怆的自嘲?
3 Comments
2012.1.1
『这是最好的时代,也是最坏的时代』,周围的人常常这么感叹,但对这个时代的理解,却是仁者见仁智者见智。既然谁也说不清楚这到底是一个怎样的时代,反正离世界末日说不定也剩不到一年了,那我也就不惮来发表一下自己对这个互联网时代的拙见,算是为这个博客扫扫门前积雪吧。
2011年,读了两本有意思的书,一本是上半年老陆赠予的《Facebook效应》,另一本是年底前在亚马逊上购买的《认知盈余》。两本书我都是抱着批判的心态来读的,对前者的批判是启发我思考的线索,每当我的思路陷入停滞的时候,我只要翻开《Facebook效应》来读一读,并顺着书中理论的反方向走下去,就豁然开朗了;对后者的批判并不是我的目的,但每当我的模型遇到挑战时,就翻开《认知盈余》相关的章节,试图从中发掘破绽,这些破绽往往能指引我化解模型中的矛盾和冲突,让它重归优雅。所以,我非常感激这两本书,它们让我在2011年末经历了一次有生以来最为激烈的头脑激荡,并为我的2012年指明了方向。
Read the rest of this entry »
Share your thoughts
2011.2.26
趁这次为女友升级电脑,顺便给自己的PC作了一次廉价的升级:将E8400 CPU超频了40%,再添置了一块硬盘组建Matrix-RAID(其中少量空间部署RAID-1,用于保存照片、文档等重要文件;其余空间全部部署RAID-0,以提升电脑性能。),总共只花费了不到¥300。
当初在购置这台主机时,曾经深入考察了Intel Matrix RAID技术(现改名为Rapid Storage Technology),其“无损迁移RAID”机制成了吸引我购买ICH10R主板的关键动力之一。两年半后,终于有机会开始利用这个技术升级现有的电脑时,我却发现这其中所深藏的玄关,远没有当初想象的那么简单……
Read the rest of this entry »
2 Comments
2010.11.27
Windows 7 强大的 Jump List (跳转清单)特性大大提升了我们日常应用的便捷性,随着越来越多的应用程序对它的支持,Jump List 已经成为了大家 Windows 操作习惯中的重要部分。
可惜一些旧时的应用软件,或者软件开发者没有引入对 Jump List 的支持,就难以从中获益了。不过,Windows 7 本身还是给我们预留了一定的定制空间,只要稍加利用,也可以为这些旧软件整合 Jump List 的新体验。根据软件控制方式的不同,一般有两种整合方式:
Read the rest of this entry »
1 Comment
2010.11.15
作为一款内置收费服务的商业软件,目前已经掌握的充分证据显示“方正字酷” 大量使用了FontRouter开源项目 的源码,却未履行“Apache License 2.0”的要求在软件本身的发布包及网站中附带任何对源码使用的声明和协议文本,已经构成了对开源协议的恣意践踏。
在此提出严正声明,要求“北京北大方正电子有限公司”立即停止上述侵权行为,并就已经造成的不良影响在媒体上公开道歉!如果对方拒不承担上述违反协议的责任,我将把这一事件永久性的写入FontRouter开源项目的“侵权榜(Shame List)”,作为对恣意践踏开源协议的抗议。
(本文将以电子邮件形式递交“北京北大方正电子有限公司”)
注:FontRouter是Symbian OS上广受欢迎的一款免费的字体替换工具软件,并在 2009.2 以 Apache License 2.0 协议开源 。
6 Comments
2010.8.23
在大淘宝这个生态圈中,卖家的成长是非常重要的一环。淘宝让众多有着商业敏锐和发展思维的卖家从白手起家到日进斗金,这条致富和成长的道路已经被无数卖家走过,也经过了淘宝的大肆渲染。但是,淘宝只解决了让卖家成长壮大的问题,却一直没有很好的解决如何留住羽翼渐丰的大卖家。
1. 从卖家出逃说起……
众所周知,在过去的一两年中,淘宝经历了一个大卖家集体出逃的时期。当时,淘宝长期以来所表现出的善变和趋利,让众多大卖家心里始终是十五个吊桶打水——七上八下,不知道哪天自己就成了某个政策调整的牺牲品。在大卖家看来,必须得要多筑几个窟,才能避免随时可能发生的倾覆之灾。于是,以“柠檬绿茶”为首的一批大卖家,都开始自建B2C门户之路。后话就不在这里说了,且回到正题上来。
这些问题的起因,是卖家对淘宝信任感的丧失。在这一点上,淘宝过去的善变无常和诸多潜规则,确实有失一个大平台的风度。因此,为了挽回卖家的信任,淘宝开始效仿华为,制定企业自己的宪法,这就是后来的“刘庄项目”。从制度上给卖家一个清晰可期的保障和承诺,无疑对重塑卖家信任有着非常重要的意义。
然而,博得了卖家的信任,就能长久的留住大卖家了么?不然!
2. 谁主沉浮?
卖家成长到了一定阶段后,必然希望能自己掌控更多的因素。淘宝作为一个平台,必须兼顾各方的利益,尤其是确保中小卖家的成长通道,这就势必会对大卖家产生一个不可避免和制约。虽然平台有着这样一些无法摆脱的根本原则,但同时也有着一些独立B2C网站难以具备的价值。商家通常都是以利益为最高原则的,所以,只要我们合理的控制前者,充分的强化后者,那么在去与留的岔路口,相信大卖家自己也会作出明智的选择。
在很多人看来,商户平台的建设是淘宝留住大卖家的核心手段。但事实上,商户平台所做的东西,却并非前面所说的平台价值所在。当然,这并非否定商户平台在大淘宝中的价值,恰恰相反,他们所做的东西,都是淘宝服务卖家的根基,是吸引卖家,尤其是大卖家加入淘宝所不可或缺的必要工作。这些工作,从卖家的角度来看,其实都并非“无法取代”的。独立网店的页面设计可以远超“店铺装修”的所能达到的效果;大商家长期使用的进销存系统,也远比淘宝提供的后台更易用;企业自己的数据分析团队,远比淘宝现阶段的数据报表更专业……
3. 平台之“网”
真正无法被取代的,必然是一个平台所独有的,无法被复制的核心价值。就像腾讯之所以能独霸中国互联网的半壁江山,正是依靠QQ无法被复制的核心价值——用户的好友圈子。对大淘宝而言,这个核心价值就体现在“买家关系” 上。说的具体一点,包括信用、口碑、回头率等一系列衔接买卖家关系的要素。可以想象,离开了淘宝,卖家所积累的信用将从零开始;离开了淘宝,卖家所打造的口碑只能在常客眼中得到一点点保留;离开了淘宝,买家回头率只能重新依靠促销和服务一步步培养……
但今天的淘宝,其实还远无法达到上面所希望的效果。因为我们的信用体系,正在渐渐丧失他的公信力和价值;我们还没有一个可以帮助卖家打造百年老店的口碑机制;我们也缺乏一个为卖家体现类似线下店铺回头率的游戏规则。只有我们下大力气去强化和运营这些维系买卖家关系的核心要素,才能真正引导卖家群体参与其中,一起编织这个比蛛丝更坚固和更富韧性的买家关系之网,最终实现像Apple那样,让用户(卖家)甘愿在这个平台上“作茧自缚”。
后续,我将陆续撰文详解“买家关系”中各个要素的强化与运营之路……
1 Comment
2010.8.8
和不少人聊过关于网购的评价机制,尤其是C2C模式下的评价,大部分人都会抱怨淘宝或是拍拍现有的评价体系中存在着这样那样的问题。但实际上,评价机制也是随着C2C市场环境本身的变化,而在发生着相应的改变。只不过有时候市场的变化很快,走在了前头,而评价却有些跟不上脚步……
第一阶段:网购市场的圈地时期
在网购诞生的初期,C2C市场可以说是一个冒险者的乐园。大部分在这个时期接触并开始网购的人,都能回想起那种“提心吊胆”的网购感受。那个时候,市场其实还很单纯,并没有多少投机的商家,尤其是在淘宝推出“担保交易”的背景下。
初期的C2C市场,需要的是高速的、爆发性的增长,网购相关的机制设计都围绕着这个中心展开,评价也不例外。“好中差评”机制虽然从现在的眼光来看,有着种种内在的缺陷,但在当时的历史条件下,它所强调的“量”的积累价值和对“好评率”的追求,承载了拉动和助推网购高速发展的关键作用。
第二阶段:爆发式增长后的巩固时期
当C2C网购经历了初期的爆发式增长后,市场规模已变得日渐庞大。这个时候,必然会出现各种各样的市场秩序搅局者。“好中差评”的方式,也开始逐渐暴露出其负面的问题:
Read the rest of this entry »
4 Comments
2010.7.14
Guice是一个Java下非常强大的依赖注入框架,相比其它同类框架,我更喜欢Guice这种“配置亦代码”的风格。除了开发友好性之外,Guice的过人之处还体现在它灵活的JIT(Just-in-time)注入上。利用@ProvidedBy()注解可以方便的为接口绑定定制的Provider,从而实现结合了动态逻辑的Lazy注入。
当Guice和OSGi框架碰撞到一起时,就会遇到一些观念上的矛盾:OSGi的动态生命周期在Guice本身的静态绑定下无法发挥其应有的作用,而Dynamic Service也无法方便的与Guice对接。好在开源社区已经有人意识到这些问题,并为两者搭起了一座鹊桥,这个项目就是“Peaberry ”。
这两天在捣腾Peaberry时,发现它的设计主要是针对静态绑定,在与Guice的JIT注入一起用时,却还差那么一两块砖,于是自己把它给砌上了,顺便分享出来与大家交流一下。
按照Peaberry的用户手册,静态绑定一个DS服务的写法是在Module.configure()中使用:(以LogService接口为例)
bind( LogService.class ) .toProvider ( Peaberry.service ( LogService.class ) .single ( ) ) ;
如果转为JIT注入,则必须提供一个相应的Provider类。虽然Peaberry.service(…).single()返回的正是一个Provider,但鉴于Java注解只能用字面类(Literal Class),所以这里需要包装一下。我的办法是定义一个抽象的公共Provider,用反射去识别派生类的具体泛型类型:
public abstract class JitProvider< T> implements Provider< T> {
protected JitProvider( ) {
@SuppressWarnings ( "unchecked" )
final Class< T> clazz = ( Class< T> ) ( ( ParameterizedType ) getClass( ) .getGenericSuperclass ( ) ) .getActualTypeArguments ( ) [ 0 ] ;
provider = Peaberry.service ( clazz) .single ( ) .direct ( ) ;
}
@Override
public T get( ) {
return provider.get ( ) ;
}
@Inject
protected void setInjector( final Injector injector) {
injector.injectMembers ( provider) ;
}
private final Provider< T> provider;
}
具体使用JitProvider的接口以如下形式声明:
@ProvidedBy( Foo.Provider .class )
public interface Foo {
…
static class Provider extends JitProvider< Foo> { }
}
这样,所有使用Foo服务的Bundle都完全实现了即需即用,不必再像过去那样在每一个用到该服务的Bundle的Activator中事先进行一遍Peaberry繁琐的bind配置。经此精简优化,Peaberry的易用性得到了明显的提升,使用起来也更加直觉化了。
Share your thoughts
2010.5.25
Cisco AnyConnect VPN的客户端是一个工作于并行隧道(Split Tunnel)模式下的VPN软件,它可以方便的同时使用内外网两不误。它通过连接VPN后动态激活平时禁用的VPN虚拟网络适配器,并根据远端网关的配置应用相应的DNS和路由配置,实现了与默认网络环境无缝并行。但正是在其上述设计中的一个理想假设,为“中国特色”的互联网环境下使用它埋下了一个隐藏很深的问题。
如果你所连接的VPN网络本身是与Internet连通的,而且DNS也可解析外网的网址,由于AnyConnect会将VPN网络适配器的优先级提升到最高,因此远端的DNS配置会取代本地网络(例如家里的宽带网络)。如果你的本地网络和远程网络是同一接入线路,倒还感觉不到这之中的差别。但如果其中一个是电信线路,另一个是联通(网通)线路,你就会遇到一个很悲惨的状况:本地网络访问国内主要网站的速度会显著降低,因为DNS对大型网站CDN的解析结果是和你现有路由完全不同的线路,想象一下在你的联通(网通)宽带下访问电信线路的网站,那种感觉……
Read the rest of this entry »
1 Comment