無標題文檔

对于 ThinkPad 的那点情怀

说起来,情怀是件很奇怪的东西。在这个情怀泛滥的年代,如果你对一件东西说有情怀,那么可能收到的反应往往都是极端的。

而对于 ThinkPad,我是很愿意冒着这个危险的。世间上是少有的几样东西你说你对它有「情怀」而不会被大多数人喷的,ThinkPad 算的上是一个。

TrackPoint

ThinkPad 跟随了联想了以后口碑不如从前,而我也从多年的 PC 用户变成了多年的 Mac 用户。还是那所谓的「情怀」作怪,在偶然的机会,入手了台 x220 ,打算当作开发以及备用机。

至于为什么只是要买 x220 ,其实很简单。现实的价格因素意外,x220 这种类型的键盘对于 ThinkPad 系列来说有可能是绝唱了。

ThinkPad 曾经有很多业界颇为称道的硬件设计,小红点、屏勾、镁合金的防滚架、高度可替换的配件,甚至可以自己 DIY 的电池。

所以有人说过,如果你用过 ThinkPad 那么就不会使用其他的 PC 笔记本了。有人开玩笑的说,如果旅行带上了 ThinkPad ,至少它有个用处就是用来防身。

说了那么多,作为多年的 Mac 用户自然而然会拿 MacBook 和 ThinkPad 作对比。

我个人平心而言,简单的一句话,就是 MacBook 是最好的终端笔记本,而 ThinkPad 是最好的生产力工具。

ThinkPad 低廉的价格以及可以替换的配件让它在任何恶劣的环境使用都倍感信赖。而 MacBook 拿 Unibody 的机身怎么看都觉得会是完美的艺术品。

所以,是情怀也好,是矫情也罢。

当然,如果联想继续作死的话,恐怕 ThinkPad 的未来就将会很不明朗了。但是至少,ThinkPad 对于我等靠这些设备吃饭的人而言,自然已有着它无可替代的地位,哪怕这只是一段回忆而已。

--

后记

针对那 x220 的机子,我还是做了些升级好让它使用起来更加的舒服。

机子的硬件自然没得说,我要求将硬盘的差价补贴到内存里,所以卖家就直接给我发了一台没有硬盘的带 8g 内存的主机。

刚好我有一块当时升级 MacBook 留下来的 SSD(铺科特 M5S),所以就装在了 x220 上(有点搞笑的是那台机子的价格竟然和我的 SSD 差不多价格)。

这里要顺便吐槽下浦科特的 M5S,竟然采用的是 9mm 高度的外壳,而 x220 需要的是 7mm 的硬盘。无奈之下这能拆了硬盘的外壳,同时这也意味着放弃了浦科特的保修。

然后使用了几天,发现经过多年 Retina Display 洗礼过的眼睛已经无法忍受 TN 屏幕的效果了。

x220 的自然是无法跟上 Retina Display 的效果了,好在它有最后的一根救命稻草就是它还能升级到 IPS 屏幕了。所以还是淘宝找了个卖家,就地以旧换新将旧的 TN 换成了 IPS 屏幕。

合计了下,总的硬件方面的投入我总共花费了 1600 上下。这对于苹果的硬件设备而言,可能就只能买一台 Time Capsule 了。

系统自然根据我的实际使用安装了 Ubuntu,好在这个相对比较新的系统在硬件方面没有让我太多的费心。

我曾经有过不小心将咖啡打散到 MacBook Air的不好经历,这件事情耗费了不少的时间和精力去折腾机子和恢复数据。对比 ThinkPad 你要知道它对于键盘防水这块它是做足了功夫的

所以,如果有可能会在比较恶劣的环境下使用笔记本的情况,带台 ThinkPad 前往是再合适不过的了。

-- EOF --

Android 开发的昨天、今天和明天

收到过位将要毕业的同学的来信,问 Android 开发是否有「前途」。我个人从前端转到移动相关的工作也有些时日,虽然期间有点心得但回复类似的问题不免会有「误人子弟」的担忧。

刚好在 Android Weekly 上见到了这篇文章,阐述的部分观点竟然和我不谋而合,因此草译下权当有相关问题的同学作为参考。同时,国内的 Android 环境可以用「奇葩」来形容,因此文章后面我会加入些自己的个人观点。

混沌之初

很难相信,如此的一个系统竟然会有 80% 的市场占有量!在我个人看来,Android 能够做到如此成功在早期并不是它足够的优秀,而是同期的竞争对手做得比它更好。

为什么?我亲爱的读者,在那个时候到处都是问题好吗:

糟糕的开发工具(甚至包括 IDE)

你尝试过用铁锹修车吗?或者,开着你爷爷曾经使用过的有着 40 年历史的 Yugo 载着姑娘去兜风?在那个时代 Android 开发有且只有一个「相对」官方的开发工具:Eclipse 。

请您相信我,Eclipse 有各种的问题甚至能让你在十分钟之内发疯!Eclipse 的 ADT 插件简直就是「Bug 与 Crash 齐飞,重启和关闭共一色」。尤其在相对复杂的项目开发上,那酸爽简直不敢相信!

很大的程度上,光就是 Eclipse 这个开发工具就吓到了很多入门开发者,让他们投入其他开发阵营的怀抱(对,例如 XCode)。

碎片化

Android 的碎片化严重得可以用张麻子脸上的痘痘来形容,我们先来说说软件方面的。Gingerbread (2.3.7) 是相对比较老的系统版本了,对比同期的 iOS 4.x 系列,目前还有百分之 15-20 个点(可能具体地区的占有率稍有不同)。

您或许已经知道,Android 4.0(Ice Cream Sandwich) 是一个巨大革新的版本,新的 UI、新的 API、新的屏幕分辨率,这一切看起来非常的美好。但,缓慢的用户迁移过程让我们不得不面对这些优秀新系统特性的同时,同时还需要兼容那老旧的系统。于是为了兼容新老的两套系统,项目开发中多了非常多的兼容代码,这会使得应用到处是 Bug 和奔溃。

(这段译者自己添加,吐槽我最擅长了。)除了软件方面,硬件的碎片化的问题更加的严重。你甚至不了解你的应用会在什么样的硬件上运行,你需要获取用户的位置信息,对不起设备可能没有 GPS 甚至没有基站定位;你需要打开摄像头扫描二维码,对不起设备可能没有摄像头、即便有摄像头但运行内存不够,崩溃!这个时候用户是嫌弃自己的硬件呢,还是说您的应用有问题…

硬件方面最头疼的还是屏幕分辨率的问题,Android 开发过程中在资源(resource)目录下有各种的目录(drawable-xxhdpi、drawable-xhdpi、drawable-mhdpi、etc…),你需要针对不同的分辨率调整自己的资源文件,对相信我这块有时候会比编码的时间还长!

缓慢的模拟器

当你完成一个应用以后,首先要测试在各个不同 Android 版本以及屏幕分辨率下的运行情况,所以我们购置了不下二十台 Android 设备用于测试。

听起来似乎有点夸张?好吧,感谢上帝我们还有 Android 模拟器!

然后,你兴冲冲的跑去建立 Android 模拟器并尝试让它跑起来,你会发现半小时后你会哭!先不说它那缓慢的运行速度,就连调试过程中你甚至会开始思考你的人生。

从此以后你再也没有勇气打开运行过它,它只是成为你机子文件系统中一块占用地方的文件而已。

UI

「设计 Android 应用是多么得无趣!」如果你对比过同期的 iOS 应用,那么 Android 的应用竟然会如此得暗淡无色。对比 iOS 那流畅的动画、交互以及细节,你会觉得 Android 应用一切都是「静止」的!

当你打算给 Android 添加点生气的时候,你会发现还是那些老旧的系统(例如 Gingerbread)囚禁了你的创意和思想、乃至期望。

全新

我们将时间推倒 2013 年,这些糟糕的事情总算有了一些改变。

那个时候问题已经足够糟糕到连 Google 自己都看不下去的程度,即便 Android 4.0 发布至今对于上面的问题稍微有些缓解,但还不足够达到能够彻底解决问题的程度。

直到 Android 5.0(Lollipop) 的发布。

所有人都在思考 - Google、设备提供商、开发者。所有人都会自问这样的问题,就是「当我们有了个相对稳定的系统、上千万的应用以及对应的用户。那么我们应当如何让 Android 这个巨无霸化繁为简?如何将开发的过程变得优雅、吸引更多的人加入这个行列?」

Android 5.0(Lollipop) 有着巨大得改变,那些非常多的特性出于篇幅的考虑我只能列出我个人认为重要的几个点:

Android Studio

Android Studio 在 1.0 版本以后就变得非常的稳定。我无法从只言片语来描述这个应用能够给我们带来的巨大的变革。如果您愿意了解详细信息,可以参看原先我写的两篇文章(这里这里)。

The new Android Studio logo

这个 IDE 是如此的优秀,以至于 Eclipse ADT 插件已经停止了官方的维护,因此严重推荐原先如果开发 Android 的同学迁移到这个 IDE 上。

人生苦短、及时行乐。

Gradle

Gradle 是个全自动化的构建工具,在 Android Studio 已经全面替代了 Apache Ant 作为主要的构建系统。

这个全新的系统将会给构建 Android 应用带来全新的体验(听着耳熟?)。当您设置好构建配置脚本以后,所有剩下的事情都将不用你操心。

译者注:Gradle 在大陆使用建议还是需要挂代理,Sigh…

Lollipop

Google 说过 Lollipop 是有史以来变革最大的系统版本(每次它都这样说),我希望他们是对的。

同时,也希望目前的主流机型能够升级到这个版本(译者:个人觉得原文作者有些乐观)。

Lollipop 之外 - Material Design

理所当然,作为 Lollipop 提出的重点之一,自然会有很多的笔墨来阐述 Material Design 这个新的设计理念。我个人非常同意 Material Design 的其中之一的理念,那就是「所有的东西都是重要的(everything is important)」。

One animation, please

例如动画,长期以来我们的观点是动画只是 效果 的一部分,而 Material Design 主张动画也是有 含义 的,就好比文章分段的间隔符。

我们重新设计、重新开发符合 Material Design 的应用,最终的目的在于应用并不仅仅是生活的一部分,而是能像水和空气一样够让它融入到生活中的每处,让它无处不在。

这就为了以后即便在不同的平台下不同的应用看起来风格和体验也是统一的。

Lollipop 之内 - ART

对于 Material Design 提供的外在设计元素,我们开发人员最关注的还是其内在的改变。一个新的运行时(runtime system)称之为 ART 的就内在其中。

其实 ART 并不是新鲜事物,首次出现应该在 Android 4.4(Kitkat)中。我们之所以重新介绍它是因为在 Lollipop 中 ART 已经全面替代了 Dalvik 成为系统默认的运行时(runtime system)。

ART 有很多优秀的特性,处于篇幅考虑我只说明其中两点:

  • 使用前置编译 AOT (ahead-of-time) 。这意味着 ART 模式下,代码被直接编译为机器指令,程序运行时直接执行机器指令。这能带来更快的执行速度以及更小的 CPU 损耗以及更长的电池时间,当然另一面就是安装时间可能会变长。
  • 支持更多的方法数量(multidex support)。Dalvik 的每个 dex 字节文件只支持 65,356 个方法。这使得我们单个应用无法支持超过这个数量的方法数量。虽然这个数量看起来非常的庞大,但如果我们将例如 Google Play、以及其他的库加入到项目中,那么剩余我们能够使用的方法数量将会大大的减少,甚至不够用。ART 中将重新整理字节码文件分割到不同的 dex 文件中,同时再整合到单个 APK 安装文件中,从而避免了这个问题。

译注,针对这块下面有评论,可以参考

Note that ART still has the same 65k method limit. Multidex support applies to Dalvik as well.
As an addition to the improvements you mentioned, I would add the unit testing support they just released with version 1.1.0 of AS. Hopefully it's a fresh start for better testing of Android apps out of the box. It also works great with Robolectric.

到处都是 Android

现在我们已经可以开始针对智能手表、电视、甚至汽车编写应用。想象下我们坐下来煮上一杯热咖啡,环顾四周将来可能至少有四五个设备运行着 Android 系统:电视、笔记本、平板、相机、乃至厨房电器。

Android 开始逐渐占领所有具有微处理器的设备,犹如水和空气一般得存在。

逐渐高品质的智能手机

Android 的核心平台还是其智能手机这块,但长期以来一直所受的困扰就是运行其系统的智能手机品质差次不齐。老的 Anroid 设备运行起来对比其同时代的 iPhone 设备显得非常的卡顿 - iOS 却依然流畅得多。这「得益于」那些国产厂商提供的众多低端机型。(译者注:原文 This was especially true for cheaper devices produced by a multitude of Chinese manufacturers. 华强北再次被黑)。

值得庆幸的是随着硬件设备的摩尔定律,目前的 Android 智能手机设备提供商正在逐渐的改变这一现状。很可能在不远的将来,我们能够得到一台性能足够强大但同时性能不差的 Android 智能手机。

例如我个人非常喜欢 Motorola 提供的智能手机(虽然它目前已经是 Lenovo 的子公司),他们出品的 Moto X、Moto G、Moto E 等型号的手机都有着不俗的性价比。

Project Ara parts

同时有个叫 Ara 的项目能够提供类似 PC 的模块化硬件解决和组装方案,在未来相信 Android 智能手机硬件平台这块能够得到非常乐观的发展。

下一步?

远离 Java

当解决完系统和开发工具层面的问题以后,我们继续将 Android 相关的问题聚集到其他地方。

恕我直言,我认为针对 Android 最核心的问题将会是 Java,尤其是 Java6 或者 Java7。Java 是门非常的好的语言,但有时候我们可以考虑跳出这个圈子去思考 - 我们或许针对 Android 开发需要门更新的语言。

作为对比的 Apple ,他们的 Swift 提供了更新以及更现代的特性。这使得它能够支持 iOS 开发人员更便捷的开发应用。明显,Java 在这方面比现代的语言臃肿些。

是时候我们需要更新鲜点的内容了,目前其实已经有了针对 Java 的替代方案,例如我原先关注的 Groovy。它从语法方面和 Java 很接近(实际上它基于 Java),同时我们针对此开发已经有了些原型。 当然,还有别忘记了它是 Gradle 的主要实现语言 - 所以为什么不直接用于 Android 开发呢?

同时,Scala (使用数增长迅速)以及 Kotlin (这里有篇文章或许能让你热血澎湃)也是非常好的考虑对象。

更好的数据管理

还有个必须指出的问题,就是数据管理 API(database management API)。如果你有对比,例如 iOS(严格上说应该是 Core Data),他们提供了众多非常好的抽象方法(method)、图形化的数据管理、对象、数据观察者(database change listeners)等。对比 Android 提供的 API,这简直就像是只土鳖 - 我们仍然在写 SQL 语句并同时期望得到正确的结果。

调试 SQL 语句是件非常不容易的事情,首先需要面对的问题就是我们没有个直观的图形化界面去跟踪这些事务。虽然目前已经有些很优秀的 ORM 类库供我们使用(例如 GreenDAOActiveAndroid、或者 SugarORM),但实际上他们仍然各自有各自的问题。

我还是期待能够像 iOS 一样操作数据库,例如有个数据观察者(database change listeners)等类似工具帮忙。目前能够找到的就类似 DBFlow 等第三方的类库,至少目前而言他们能减少和减轻我很多工作量。

中国的情况(译者加)

很明显,国内的 Android 开发环境比国外的冷酷很多。除了上文提到的问题外,还有因为些政策以及特色的原因造成各种本地化的问题。

缺少 Google 组件包

或者说完全无法使用 Google 提供的服务。我们单说推送服务,Google 官方是提供了推送服务的,但是由于各种方面的原因国内的开发者基本上不会使用。这使得各家自己实现推送方案,从而恶性循环造成应用的品质下降。

无厘头的优化

国内的 Android 用户有「清理内存、杀进程」的习惯,因此很多正常运行的 Service 会被莫名得 kill 掉,而开发人员为了避免被 kill 又频繁的启动后台 Service ,恶性循环。

同时各固件厂商所做得优化有时候不得法,胡乱更改系统底层。例如某固件更改了 TextView 等导致应用显示「怪异」的情况时有出现。

设计方面 iOS 化

这点不用多言,Material Design 即便出来有些时日,但几乎没有跟进的迹象。甚至部分厂商提供的 Android 版本的应用无论从交互还是视觉上和 iOS 版本相差无几。

我个人很悲观的认为这种情况将会持续很久。

低端机型肆虐

正如原文作者所言,国产尤其是华强北出品的大批低端山寨机进一步打碎了 Android 系统的体验。想象下 Android 开发者开发的应用还需要面对的几年前的机型、这在 iOS 平台是无法想象的;同时这造成的巨大的资源浪费以及应用品质的下降。

总结

那么 Android 开发的出路在哪里?这个问题直到本文结束可能都没有个标准答案。我相信能够提供良好的 Android 体验的往往是些小型的开发团队,相比大公司的团队而言他们的创新思维、试错能力、反应能力会比巨无霸们更强更快。

而 Android 系统本身经过几个大版本的进化以后路线也逐渐的清晰,相信除去目前的智能手机领域外,在其他的平台上也会逐渐得发力。

这点,能看得到。

— EOF —

迁移到了 Digital Ocean 的新加坡节点

不知道现在还有没有人写博客,只知道很多曾经的链接都已经失效了,甚至域名都已经被废弃。

时间过得很快转眼本站点都快十年了,而我还仍然想偶尔写点东西,因为这已经是我的一种生活方式了。

用了一年多的美团云主机,谈不上优秀也谈不上失败。

只是,有点讨厌的就是他们的销售时不时的会打电话来,提醒我不是带宽被沾满了就是服务器的 CPU 过载了,其实在我看来就是铁了心的让我缴费升级 VPS 的配置,而我的那台机子上放置的也仅仅是几个 Blog 程序而已。

所以为了避免麻烦和骚扰,加之 美团云 的主机三月份就到期,于是更换 VPS 的念头就起来了。

选择来选择去,其实符合我要求的 VPS 其实没几家,剩下的无非就是 Linode、MediaTemplate 还有就是 Digital Ocean

最后选择 Digital Ocean 的原因其实很简单,因为性价比。五刀一个月的最基础版本的主机折合人民币也才一顿饭钱,加上现在原本已经冷却下来的中文博客圈流量已经不高,因此性能方面已经足够使用。

听网友的推荐,说 Digital Ocean 在国内综合来看就是 旧金山 的节点速度是最均衡的

网络速度

这个消息偏偏是我选择 新加坡 节点以后获得的,就目前测试的情况来看,Digital Ocean 的新加坡节点喜忧参半:喜的是联通和教育网访问 新加坡 节点似乎是通过日本访问,所以比较快速,而惨的就是国内的电信新路就哀鸿遍野了。

考虑先这个样子吧,因为工作的关系目前实在没时间去再投入这方面大量的精力,只能等到有时间再去处理这些事宜。

— EOF —

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章