我所依赖的 PIM 系统

我写这篇文章是源于一个私人邮件组的内部讨论。PIM 的意思是 Personal Information Management, 个人信息管理。这并不是什么新鲜的东东,但是,在 iOS 大行其道的今天,信息产业其实在发生着 革命性的 剧变,我们(至少是我)所依赖的服务,也在悄悄地发生改变。

一个完整的 PIM 系统可能包含很多东西,但是一般比较典型的服务包括:

  • 通讯录(地址簿)
  • 电子邮件
  • 备忘录(便签)
  • 日历(日程表)
  • 待办事项(工作表)

有哪些公司提供了完整成熟的 PIM 系统?

老牌的 PIM 系统有 IBM Lotus Notes,但是我不熟也没用过;然后是大家广为熟知的 Microsoft Outlook;另外当然少不了互联网巨头 Google;最后是后起之秀,如今如日中天的 Apple (iCloud)

Microsoft Outlook

我一直认为 MS 最成功最强大的产品是 Office 系列,没有之一!

当然了,一般人其实仅用得到 Office 中 20% 的功能——我一点儿也没夸张。Outlook 也不例外, 虽然它有 n 多个选项卡(功能区域),但是一般只会用它收发邮件,定个会议什么的。

由于 Outlook 功能太强大甚至于臃肿,并且一般用于企业内部(配合 Exchange 服务), 所以我也只是使用它的小部分功能,在这就不细讲了……

Google

Google 的服务都在云端,这意味着我们不用担心数据的安全、存储、同步等问题,并且这些云端的服务 都比较轻量级,用起来更方便

Google 并没有直接提供一个 PIM 系统,而是提供了很多单个的应用,比如 gmail 之类—— 这些应用彼此间也有整合和联系,它们综合起来就形成了一个 PIM 系统

  • 通讯录:Google Contacts

    Google contacts 最早是在 gmail 中的,后来被单独地拿了出来。在 gmail 的一次界面大改版后, contacts 和 gmail 整合得更好了。

    Google contacts 很给力的一点是它可以和很多设备同步,比如 iphone、android 还有苟延残喘的 塞班 系统的手机,比如我的诺基亚!哇哈哈!本质上其实是 Google 提供了一个 Exchange 服务, 供外部同步数据

    另外,它支持的信息字段很丰富,比如头像和生日

  • 电子邮件:Gmail

    这个东东大家肯定都很熟悉了,gmail 同时也是 Google 最成功体验最好的产品之一。虽然改版后 舆论褒贬不一,但是现在看来,不管是 gmail 的易用性还是它和其他 google 产品之间的整合, 都提高了不少

  • 备忘录:N/A

    很遗憾,Google 并没有提供备忘录这样一个服务。的确备忘录(notes)目前来看是一个比较 边缘化 的东西,它的业务逻辑毫不复杂,仅仅需要提供一个地方用来临时记录点什么。估计是 Google 认为没必要单独为这种简单需求开一个服务

    (P.S. 以前 Google 有个产品叫做 Google Note,但是是个很独立的服务,用于做笔记,类似于 evernote,而现在这个产品已经停止维护了)

  • 日历:Google Calendar

    Google Calendar 也是一个很不错的产品,操作起来非常自如,功能也不弱:可以邀请他人参加活动, 设定提醒(支持短信提醒),共享日历等等

    另外,在 Google Contacts 上的联系人如果填写了生日的话,那将自动生成名为“联系人的生日” 这样一个日历

  • 待办事项:Google Tasks

    相比日历、电子邮件这些较为复杂、重量级的服务,待办事项其实也算轻巧简单。Google Tasks 主要是嵌在 Google Calendar 和 Gmail 中的。但是其实待办事项这种服务,还是在移动设备上 更有意义 一些,在 iphone 上有一些第三方的 app 就提供了 Google Tasks 的同步服务

Apple

自从 Apple 推出了 iCloud 后,要不是我还放不下 gmail,恐怕我早已转投了阵营!

在 iCloud 之前,Apple 的 PIM 系统都是在 iOS 设备本地服务的,所以不同的设备(比如 iphone 和 ipad)之间同步很麻烦,必须要分别同 itunes 进行同步,才能得到最新数据;并且,在其他地方, 比如网吧,就没有办法得到通讯录、日历等信息—— iCloud 改变了这一切

iCloud 推出后,不同的 iOS 设备间可以无缝同步,并且 iCloud 也有一个 在线的版本 (就和 gmail 一样)

  • 通讯录 / contacts

    即 iOS 自带的,功能上和 Google Contacts 差不多

  • Mail

    基于 icloud 账户的邮箱是以 @me.com 结尾的,web 版本的邮箱功能相比 gmail 较弱,但是在 体验上,它和 iOS 上的 Mail 体验高度一致

  • 备忘录 / Notes

    iOS 上的这个 app 功能可以说非常简单,在没得到 iCloud 支持之前我从来就没用过。在 icloud web 版的 mail 里面,有一个文件夹叫做 notes,里面存放着 iOS 设备上记录的备忘录信息

  • 日历 / calendar

    功能上和 Google Calendar 差不多,如果工作站是 Mac 的话,使用 apple 的日历是一个不错的选择

  • 提醒事项 / reminders

    iOS 5 以后才推出的产品,带提醒和周期重复的功能,强烈推荐。web 版的话,是集成在 web 版本的 日历 中,这一点和 Google Tasks 一样

我目前所使用的服务

总体说来,我是 Google 和 Apple 的几个服务混搭着用,其中:

  • 通讯录使用 Google Contacts,在 iOS 上使用 Google Sync 的 Exchange 导入,可以双向同步, 并且联系人的信息字段基本都兼容

  • 邮件还是使用 gmail,在 iOS 上导入 Gmail 的邮箱,完全没问题;不过我也注册了 icloud 的邮箱

  • 备忘录使用 iOS 原生备忘录,主要是几个 iOS 设备上面同步

  • 日历使用 Google Calendar,同样在 iOS 上导入,不过有一点要注意,不能导入创建的其他日历, 只能导入“个人日历”

  • 待办事项用 iOS 的提醒事项,主要是几个 iOS 设备上面同步,完全弃用 Google 的工作表 T.T

嘛,基本上就是这样了,其实 Apple 的 iCloud 刚推出时还是很让人摸不着头脑的,至于 iTunes 这货就更是如此了——用惯了微软的东西,一时半会很难理解 Apple 的设计理念,不过,一旦搞明白了, 就各种豁然开朗啦~~!

最后的最后,如果嫌麻烦的话,也可以直接用微软的一套,配合 windows phone 来用,啊哈哈

程序员是什么

说在前面的废话

啊,已经到了龙年了,虽然这个地方可能没什么读者光顾,但是还是说声新年好吧! 说起来,这个博客产量之低真是令人发指啊!……也罢,趁着春节刚过,补上一篇。

在很久很久以前,看到 一篇译文,解释了“程序员是什么”,观点非常精辟。 于是我想摘其要点,概括地谈一谈。

人们眼中的程序员

在形形色色的行业中,程序员绝对是非主流:除了 IT 从业者之外,我的同学、亲友们 几乎都不能一下子就明白我做的工作是什么。

这自然是一个悲剧,在外人眼里,随便挑一个程序员出来都会认为他是一个 geek…… 更悲剧的是,很多程序员自身都难以清晰地解释程序员的意义。

于是那篇文章指出一个核心观点:程序员是将人类想法翻译成计算机语言的人。

两个物种,两个世界

我们可以把“计算机”看成一个新物种,这种“生物”的特点是,能够保证全理性地执行工作。 就是说,你告诉他要做什么,他就做什么。

另一方面,人类本身是复杂的生物,记忆力有限、注意力容易分散……所以相比而言,计算机 拥有超过人类成千上万倍的工作效率。因此,计算机能做的事情,我们都给它做,这样生活就会更好。

这当中存在的一个问题是,计算机不可能直接领会人类的意图而执行任务。于是我们需要程序员 来告诉计算机我们要做什么。 容易忽略的一点是,程序员不仅仅要和计算机打交道,更重要的,他必须“明白人类的需求”, 所以“需求分析”是那么的重要。

程序员需要具备的能力

这是最后最重要的结论。正因为程序员是和两个世界打交道的人,因此他必须具备两方面的能力。

理解人类的需求并提出解决方案

  1. 沟通——与人建立联系的能力,能够同他人亲密的交谈,并有勇气去尝试分享自己的观点。
  2. 意图——从谈话中提取有用的信息,理解并使之有意义。
  3. 逻辑——为不懂让步的计算机整理、剔除那些人类思想中含糊而有争议的内容。
  4. 创造力——挖掘、转变人类的想法,从而创建优秀的解决方案。
  5. 构思——利用人类友好的接口和便捷的互动性来包装编程思想。
  6. 大局观——清楚解决方案是如何适应全世界的用户、企业以及其他,从而使你的程序更有用。

告诉计算机该做什么,并建立解决方案

  1. 逻辑(再次强调)——把程序员的想法组织整理成有凝聚力的软件思想和计算机指令
  2. 技术——发现并理解科技黑箱(对于 99% 的人来说是黑箱)。
  3. 编程语言——学习美观的、富有逻辑的、清晰明了的语言,从而把程序员的想法提供给电脑。
  4. 算法——精通让计算机完成任务最高效的方法。
  5. 建模——在软件代码中建立抽象和模型,从而掌握并操控想法。
  6. 实践(比如代码重构、单元测试、持续集成)——周期性活动,以保持系统可靠、健康与可改变。

最后,不与人沟通的程序员不是好程序员。 一个优秀的解决方案需要计算机世界与人类世界的双重技能。 只有连接起两个世界,才能成为一个真正的优秀程序员。

在 Javascript 中使用函数式的编程风格

发现了一篇去年写到一半的残文,有关 JS 函数式编程的相关吐槽。以前自己写的东西,真是艰涩…… 也罢,现在我来将它补完吧

前言

一直以来,人们都在享受 jQuery 链式运算风格的快感;而对于我,以前上学时虽然多数要用 java,但是自从 接触到 JS 的一些美妙特性以及 jq 后,我就再也没碰过 java

大家都知道 Javascript is not Java,但是实际使用时,很多同学尽量把它用得像 Java——我一直听到 有人将 JS 中的 object 比为“静态类”……

说到静态类这个东西,其实挺扯的,静态成员不是完全的可面向对象,因为他们不能实现接口,以及像 普通成员那样的多态和重写,Java 的这个问题可以追溯到它所效仿的 C++ 上,C++ 虽然也面向对象, 但是它也要兼容过程式的编程……

扯远了……还是回到主题:函数

Continue reading