迷上了 Chris Botti

chris-botti最早知道 Botti 是在 iTunes Store 里。那时他刚推出了 Impressions 这张专辑,我听了一下样例就收了。开始听的时候还有些不习惯,因为它是纯音乐,里面带有人声的只有一、两首,这样对刚开始听的人来说不容易留下印象。因此,我听了一晚上后就没有继续多听,直到最近。

我对于爵士乐的了解,起源于我在国内上大学的时候,在学校里的音像店买了一章合集 CD,里面收录了经典的爵士乐,并有一本小册子介绍了爵士乐并对 CD 中的每一首歌的背景、演唱者做了介绍,对歌曲本身做了点评。我听了这张 CD 后才开始迷上了爵士乐。

在这之前我对爵士乐没有想法,我想当然的认为爵士乐是激烈的,这不是我喜欢的曲风。造成这么大的差异的原因是我学的《新概念英语》里有一篇课文,里面提到有一天他家里来了位客人,如果我没记错的话是位胖女人,她用他的钢琴弹爵士乐。那架钢琴好像挺老,似乎挺特殊,看课文里的语气挺心疼的,因此我觉得爵士乐大概会对钢琴造成不好的影响。什么样的音乐会损坏乐器?当然是激烈的音乐了。所以我直到在大学的时候才真正接触爵士乐。

我特别的喜欢爵士乐中的音乐,那种平和、悠扬的曲调让我觉得非常放松,所以我特别喜欢 B.B. King 的吉他。再加上沉稳的歌声,让我非常享受。流行的爵士乐多是外语的,我要听好几遍才能明白意思,因此我对于音乐本身接受的更快。

Chris Botti 是一位小号的演奏者。我主要听过的爵士小号的奏者有三位:分别是 Chet Baker、Louis Armstrong 和 Botti。Baker 是我从那张合集 CD 中直到的,里面的第一首歌好像就是他的 My Funny Valentine。那时我刚刚接触爵士,对于这种音乐还没有习惯,听了好几遍才渐渐有了感觉。在这首歌中,Baker 的歌声占了很大的一部分因素。他的嗓音给这首歌带来了很大的加成,所以我的印象特别深。

Armstrong 是我后来了解的一位。他人长得特别可爱,性格也非常好,而且据说他的风评非常的优秀。他的嗓音特别的低沉,但他的歌曲却常常都是比较高昂的。他的小号也是如此,非常的高亢、明亮。在他的歌曲里,我特别喜欢的是 When The Saints Go Marching In,他还跟 Danny Kaye 经常合作,其中的这个视频我看了好几遍,非常的好听、有趣。

Botti 的风格又有不同。他不唱,只吹。他的小号非常饱满,给人一种优雅、自在的感觉。从来不会非常高亢,即使高音也是非常的圆润;也不会过于低沉,总之给人一种游刃有余的感觉。除此之外,Botti 的台风也非常的厉害。我看过一些他的现场演奏的录像,第一个让我看的就是非常的自然的感觉,就好像没有太过于正式,他还有机会悠闲的左顾右盼。当他吹奏的时候,站在原地或俯身、或抬头,俯仰之间掌控力十足,配上他笔挺的深色西装,那个范儿实在是太赞了。

我看到他在专辑封面上的照片时,觉得他的年龄应该在 30 岁吧。后来看了他的现场录像,我觉得他应该更年轻一点。但当我搜索他的资料时,他今年 50 岁的年龄实在是让我惊到了,这真是典型的娃娃脸啊,加上他保养得体的身材,实在是非常有蛊惑力。

没有什么是永恒不变的

今年三月末,我从 Google Drive 换回了 Dropbox。除了是因为两者之间的功能差异的原因,另一个原因是当时因为 Google 要关闭 Reader,我对 Google 的信心下降。

说起我对 Google 的信心,最早是从它好用的搜索功能开始建立起来的。在用 Google 搜索前我用的什么搜索,我现在都有些记不起来了。我刚接触互联网的时候用的搜索引擎是新浪,到好来好像用的是 Yahoo 或 MSN 吧。当搜索引擎还是门户网站的一部分的时候,Google 的专注于搜索的简单界面一下子就把我吸引住了。那时候我整天在学校的机房里搞计算机奥赛,觉得 Google 这个单词很诡异难记(确实它比 Yahoo、雅虎难记多了),还专门收藏了它。

后来从 Gmail 开始,Google 的魄力让我成为了它的坚定拥护者。我对很多事情都有一种“天才情结”,有句话说第一个做了 XXX 的人是天才,第二个是庸才,第三个是蠢材。在免费邮箱容量平均在 10M 的日子里,Gmail 的 1G 容量的邮箱就像黑夜里的太阳,让人无法不沦落。日后出来了一大片上 G 空间的邮箱,它们再也无法吸引我的注意力了。在 Gmail 之后,Google 推出了一系列的服务,它们的质量自然不用说,而且领先的使用了一些新技术,还有它们的思路,直接让人的头脑极大的开拓。在今天的计算机领域里各种新技术都非常火爆,这比早些年活跃多了,我觉得 Google 在其中有很大的推动作用。

今年 Google 关闭了一个 Reader 就让我的信心下降,原因是我想不通。关闭 Notes,同类的笔记服务有很多,还有 Evernote 这座大山让人无法超越;关闭 Wave,因为它太超前、不实用,而且它的一些成果也被吸收进了其它的产品中。而 Google Reader,在在线 RSS 阅读器中,有什么产品可以超越它吗?这个领域并不是过于小众,而且 Reader 可以说已经到了垄断的地步了,我们得知的原因实在是说服力不大。

经过了互联网大发展的浪潮,很多网站都被关闭了,一些个人的 blog 更是如此,这上面的信息说没就没有了。这让我觉得伤心,因为它们中有很多都相当的有价值。Web Archive 挽救了一些,但也只是很少量的。我希望互联网可以有个版本控制,或像 wiki 一样,可以把所有的改动都保存下来,让信息永远也不会丢失。可惜这只能是一个美好的愿望。

正因为如此,我对一些互联网服务行业的大公司都抱有很大的希望。Google 的一系列服务都有这种趋势,而且 Google 给人的印象是它的生命力非常强悍。如果它数年不倒,那我们保存在 Google Docs 里的文件应该永远有效;当然也不能忘了 Gmail,除了电子邮件之外,它还永久的保存了我们的聊天记录;还有搜索记录,等等等等。因此过去我在对 Google 和其它同类产品进行比较的时候,Google 的印象分就有很大的加成,毕竟我们都希望信息永远也不丢失。不过现在我不这么想了。

当然从公司的规模上看,Dropbox 跟 Google 没法比,但云存储就是 Dropbox 的核心业务,我们可以确保 Dropbox 对它更用心,投入的更大,而且根本不会随随便便的就把这个服务给关闭。所以从文件云存储方面,我觉得 Dropbox 永远对 Google 有优势。其它的服务也是如此。

前几天我看到了一篇文章,《Google的社会化梦想与Reader》,文章的最后对今日的 Google 的评论我觉得非常好,Google 变得更加封闭。或许从现在起我要把它从我的期望名单里暂时划掉了。

没有什么是永恒不变的,我期望的是一个相对稳定的环境。哪怕它一点也不输出,但如果可以丝毫不间断的吸收各种各样的互联网的信息,让它们延续的更加长一点也好。

找回旧日的记忆

用 Rails 实现了我的 tweets-page 程序后,解决了部署问题加上了分页后,在我的服务器上运行的很正常了。由于从 Twitter 中导出了我所有的 tweets,所以我有了从一开始重新回顾我发布的 tweets 的机会。

在我使用 Twitter 大约一年之后,我发现在 Twitter 中没法通过不断点击“前一页”来一直显示所有的 tweet。那时我特别失望,因为我用 Twitter 不是为了制造一些对别人没用的垃圾来污染对方的 timeline 的。换句话说,这些 tweets 并不是仅仅在当时有用,在将来再回顾这些内容会有更深刻的意义,但 Twitter 不许我们找回过去的 tweets,这让它的意义一下子小了很多。从那之后,我有了及时定期把 tweets 自己保留下来的想法,最终演变成 tweets-page 项目。

所以,当从看到 Twitter 允许把所有的 tweets 记录导出来的消息后,非常的高兴,第一时间就把这些记录给下载下来了。所有内容都包含再一个 .csv 文件中,我写了个简单的 Ruby 脚本把它们导入到我的 tweets-page 程序的数据库中,让我可以通过浏览器浏览。不过当时我没有给程序加分页功能,因此弄得非常麻烦,所以那些旧的信息我一直没有看。

直到昨天下午我成功的部署了这个新的 Rails 程序,于是晚上我从头开始看我当时发布的消息,没想到又捡回了很多我遗忘的东西。比如我过去一直以为我删除一开始注册的 Twitter 帐号只是因为我不懂 Twitter 有什么用,现在发现当时还有一个原因是我没有注册一个好的用户名。我当时应该是按照我的传统注册了 @songqing 这个帐号,后来我觉得这些帐号如果 Twitter 不倒闭,应该是会跟我一辈子的,既然我的本名没有被注册,干嘛要用代号呢?当时我还不知道 Twitter 的用户名是可以更改的,所以就删除了旧的帐号,重新用新的用户名注册。

还有就是我发现了几篇我过去写过的博客文章,居然没有被收录到现在的 blog 中去。我的 blog 在过去的几年中更换过程序,当中导入导出做的不完美,我写脚本解决了一部分问题,但也流失了许多数据。开始的时候我也只能如此了,后来我觉得不甘心,于是就手动的导入了过去没有导入的文章。我现在忘了当时是怎么弄的了,一些在 2007 年出国前那段时间,也是我刚刚在自己的域名下写的博客文章,居然没有被导入。

倒不是说我舍不得这些文章,关键是这些文章中记录了我的人生历程。Twitter 简单的记录了我的日常行动,blog 则更加详细的记录了我的动作和思想。Twitter 更加的及时,不过实在是太过简略了。比如我昨天看我旧的记录的时候,就看到了好几条,没头没尾的,现在根本不知道当时是在说什么了,结果那段历史就没了,而 blog 就详细多了。所以,昨晚我从 Web Archive 找到了一些被我弄丢的文章,我马上的把它们复制到我现在的 blog 当中。因为它们就是我自己的历史。

过去我因为一直没有碰过这些文章,因此我对它们的印象很浅。它们当中记录了我出国前的假期中发生的各种事情,比如学开车,比如跟朋友聚会,看电影……要不是这几篇文章,我完全想不起来我过去竟然做过这些事情。这种情况真是诡异至极,我一直以为等我老到得了老年痴呆症的时候我才会忘记过去发生的事情,结果昨天复制一篇文章的时候,看到里面提到了我在国内大学时的物理老师。于是我苦思右想,无论如何都想不起我那时的物理老师是谁了

这种感觉就像失忆一样,太糟糕了!虽然我不是真的失忆,这些记忆一定藏在我大脑的某个地方,只是因为我没有把它们找到罢了,但从结果上来说,这跟失忆的结果一样。而且,谁知道这些记忆在将来会不会真的被想起来呢?所以,我坚持写博客,尽管现在基本上没人会看了,但它是我无比宝贵的财富。我不希望过去的回忆在将来只能靠灵机一动才被动的回想起来。

或许应该开启 WordPress 版本控制了

我在上周末看到了这篇《图解 WordPress 3.6 六大重要更新》后有了这个感想,不过这一周突发了一个事件,我一下子变得很忙,于是到今天才有空把它写下来。

WordPress 挺早就有了版本控制这个功能,在后台写文章的时候,WordPress 会定时的把当前的草稿保存下来,以防突发事件导致已经写好的文章丢失。开始时很多人讨厌这个功能,我也是,因为它会无端的保留一个文章的很多不完整的副本,让数据库大了很多,也多了很多无用的内容。因此我在一段事件之后就找方法把这个功能给关闭了,而且还安装了一个名为 better delete revision 的插件,可以在后台找出文章副本并一键删除。

我很注重保持数据库的原始是自从我使用了一个名字大概叫 twitter-tools 的插件开始的。我在注册了 Twitter 后,一度不知道该用这个网站做什么,因此我曾经把注册的 Twitter 帐号给注销了。到几个月后我渐渐想通了 Twitter 的意义,于是重新注册了这个帐号。当时我想的是我每天都能发表十来条 tweet,把它们集中起来不就是一篇 blog 文章吗?这样配合手机上的客户端,我可以随时随地的写博客了。于是我找到了这么个插件,来完成这个功能。它并不是每天固定的事件获取当天发布的 tweets,把它们合并在一起,再自动发表一篇文章,而是把 tweet 一条一条的保存在 WordPress 数据库里。

这样就相当于把 WordPress 的数据库给污染了。或许 WordPress 是一款给穷人用的、运行于低级服务器上的博客程序,因此插件要保存什么数据,当然就存在 WordPress 自己的数据库中去,而不是新建一个数据库来用。因此到后来我不想再用这个插件而把它删除掉后,它留在 WordPress 数据库中的东西依然还在那里。而且 twitter-tools 的数据库弄得复杂交错,要想手动清楚这些信息,除非对 WordPress 的代码有非常深刻的了解才行,我那时根本没这个能力。于是我那一阵子特别郁闷,这也是我在更换服务器的时候安装了 Movable Type 作为我新的 blog 程序的原因之一。

也是因为这个原因,我在后来安装 WordPress 插件的时候都是小心又小心,生怕在数据库中加入什么垃圾。所以当 WordPress 有了版本控制功能,会在数据库中添加很多不完整的文章副本的时候,我立马关闭了这个功能,并经常性的用插件扫描数据库,有了多余的东西就清除掉。

当然版本控制是好东西。我在写程序的时候,哪怕不需要和别人合作,我自己也用 git 做版本控制。在 wiki 当中更是必不可少了,正因为版本控制保存每一次改动,所以我可以放心的把各种信息扔进我的 wiki 中,因为不怕丢失什么东西,这是我热衷于维护自己的 wiki 的原因。

所以,当我看到新版本的 WordPress 会改进版本更新时,我突然有了重新开启版本控制功能的想法。现在我用了 VPS,资源比起刚开始买的 Dreamhost 共享空间来说不可同日而语,在数据库里多一些什么东西也不怕跑不动。更重要的是,我自我感觉现在我对数据库的了解与操作也大大的提升了,除了问题自己也可以解决了。而且版本控制是 WordPress 官方的功能,我想经过这么长时间的开发,质量应该有保证了吧。

用 Rails 重写 Tweets Page

今天我用 Rails 重写了 Tweets Page 程序。这算是我的第一个正式的 Rails 程序。

写这个程序的目的就是为了真正的用 Rails 来写一个小网站。这个程序的作用仅仅是保存 Twitter 上我的内容到自己的数据库里,然后可以在自己的网站上访问,这样在国内不需要翻墙也可以访问我的 Twitter 页面。它比一个博客程序可简单多了,所以我挺早之前就计划用它来练手了。

最近因为看了一些 RubyConf 上的视频,也更加的激发了我使用 Ruby 和 Rails 的兴趣。一个这么活跃的社区被展现在了我的面前,而我却不得而入,是一件非常讨厌的事情。面对这么活跃的社区,不说可以切身参与进去,至少看别人的演讲可以激发起共鸣才行。

其中有一个视频我特别喜欢,我把它下载下来看了很多次。题目是 The Ruby Code Review, a play in three acts。其中 Jim Weirich 和 Chris Nelson 模拟了一个咨询的过程,Chris 代表咨询人,Jim 作为服务人员帮助 Chris 给他们的程序解决问题。其中 Chris 展示了一些让人忍俊不禁的错误,把 Jim 给逗的没脾气。不过视频中确实展示了 Rails 的很多方便的地方,尤其是对于数据库操作的封装,简直不需要程序员去构思那些 SQL 语句,用 Ruby 的语法自然而然的就操纵了。

我用 Rails 写这个 Tweets Page 程序其中的一个问题就是数据库的操作。我首先需要把数据给导入到数据库中去,怎样完成,我需要考察,如何能从外部导入到数据库中,而让 Rails 也识别出来,是我要解决的。

下午我打算去超市买西瓜,但我都穿好衣服了,但头发因为刚睡起来而一直翘着,怎么弄都弄不平,我怎么好意思就这么出门呢?于是我只好弄条毛巾压在头上一会,好把头发压平。因为没事做我干脆坐下来研究程序,听着 John Mayer 的 Friends, Lovers, or Nothing,不知不觉间就把程序给写成了。

我找到了在 Rails 环境下执行程序的方法,在 Rails 3 中,运行 rails r my_script.rb 就可以了。我很快把我旧的导入程序改了一下,就可以运行了。从这里我很深刻的感受到 Rails 的方便。我的旧程序中使用了 Sequel 来操作数据库,在这里完全不需要,通过 ActiveRecord 可以非常方便的用 Ruby 来操纵数据库,一点 SQL 都不需要,程序简短清晰了许多。

导入数据之后是更新。Ruby 的 Twitter 库升级后给我带来了一些麻烦。我的旧程序中用的是 2.3.0,需要后去 tweets 直接拿就可以了,反正我只要公开的数据;而现在的 Twitter 库版本为 4.7.0,要获取数据必须要认证,明明这些数据都是公开的麻。结果没办法,只好在 Twitter 注册了一个 app,获取了 OAuth 数据,才让我正常获取数据。讽刺的是旧版本的程序运行的好好的,如果用旧版本的 Twitter 库什么问题都没有。不过新版本的程序多了 6 行代码,也就罢了。

到这里程序在本地运行没问题了。我依旧没有实现分页功能,等之后找资料再看吧。我目前导入的 tweet 条目有 11000 多行,因此一下子全部显示出来非常的慢。

之后就是在服务器上部署了。我用的是 Apache+Passenger 来做,不过在根域名下运行正常,而我想把程序部署到子目录下就出问题了,浏览器显示 403 错误,查看 Apache 的错误记录说是没有访问链接的权限。这方面我还没有照到资料,只好日后再试验了。

后来我发现 Rails 的 ID 字段的长度不够,在这里找到了解决方案。

这个程序一点都不复杂,不过作为我的第一个比较正式的 Rails 程序,让我一下子有了种豁然开朗的感觉,我突然对 Rails 有信心了,默认的程序我也敢于自己动手改改了,不错。