作者归档:贺 利华

关于贺 利华

正在学习编程,享受编程 热爱文学,闲来读读《读库》 有思想,没理想 正在学会专注

关于JTree的一些碎碎念

本博号称关注Web2.0, Ruby/Rails,Java。但是据本人所知,到目前为止还没有任何一篇关于Java方面的文章和只言片语。作为本博的博主,确实有点大言不惭的感觉,一想到这个心中就颇不宁静啊。

其实作为一名博客,写东西的欲望一定要强烈,很多的时候我们并没有很多的素材可以写,因为生活几乎每天都是Just so so,我们谁都不想书写平淡,总想语不惊人死不休。作为博客的人们可能这种感觉更为强烈,我是一名独立博客耶,我不能人云亦云啊,我得从我的文章里抒发我的思想啊。艹,你娘的思想也就大街上小摊上的胡萝卜包子一般廉价,还装。所以呢,我们还是需要不时的刺激一下自己的神经,同时呢,也给我们伟大的祖国发育不良的国联网添加一些有趣或无趣的素材资料吧,也算是为我国早日实现四个现代化添砖加瓦了。

===========我是分割线=========

public class JTree
extends JComponent
implements Scrollable, Accessible
How to Use Trees 一节。

树中特定的节点可以由 TreePath(封装节点及其所有祖先的对象)标识,或由其显示行(其中显示区域中的每一行都显示一个节点)标识。展开 节点是一个非叶节点(由返回 false 的 TreeModel.isLeaf(node) 标识),当展开 其所有祖先时,该节点将显示其子节点。折叠 节点是隐藏它们的节点。隐藏 节点是位于折叠祖先下面的节点。所有可查看 节点的父节点都是可以展开的,但是可以显示它们,也可以不显示它们。显示 节点是可查看的并且位于可以看到它的显示区域。

这是JDK 5.0非官方中文文档中的描述,我想这个描述给我们的第一个直观印象就是这个控件应该和Windows资源管理器中的树状结构的表现是一致的。确实如此,JTree确实是用来作为树形展示使用的,因为我们在很多的数据管理和业务处理上,秉承了我们自古就袭承的分类方式,所以我们有很多的业务可能用到或者说可以用到JTree。

那么JTree怎么用的呢?这个问题我曾经问过自己很多次,还做过很多相关的工作来学习JTree的使用,记得来到北京实习做的第一个学习阶段作业就是使用公司已有的组件产品做一个叠加分析的Demo。作为一个比较友好的叠加分析工具,就肯定需要一些GIS数据处理的功能,比如打开工作空间,数据源,数据集,地图,同时还应该能简单地做一些图层删除或者地图关闭之类的基础功能。这样一来,主体的工作就是基础功能模块的实现了,只是在基础功能模块的基础上,添加一个叠加分析功能模块,而在基础功能模块中的可视化显示JTree必然是首选控件。

在实现树状加载和显示工作空间,参考公司已有的桌面产品UI设计,需要再JTree的每个节点之前添加一些图标,用于标识当前节点的数据类型,例如线数据集和面数据集的图标是有明显差异的,这样对用户的友好度会提高很多。默认的JTree使用Java默认的meta风格显示文件夹(根节点)和文件(叶节点)的图标样式,那么如何添加自定义的图标显示呢?当时我就在JTree的文档中苦苦找寻,希望自己能找到一个setIcon()的方法,最终无耻的失败鸟。后来才知道之需要自己实现一个类,实现TreeCellRenderer就可以了,重写下面这个方法(Sun就是这么排版的,我觉得这样挺好的,不要怪我占太多行了)

Component getTreeCellRendererComponent(JTree tree,

                                       Object value,
                                       boolean selected,
                                       boolean expanded,
                                       boolean leaf,
                                       int row,
                                       boolean hasFocus)

在这个方法中,它的返回值为一个Component,那么我们完全可以自由发挥了,比如返回一个JLabel。当时欣喜若狂,赶紧将代码巴拉巴拉地敲好,一看效果显著啊,根据类型不同生成不同的Icon设置给将要返回的JLabel对象就OK了。

实习的工作相对简单,当时对JTree的理解也就点到为止了。那么此次项目组需要退出Objects Java的控件,其中就有一些控件需要使用到JTree来实现,功能要求相对就复杂了不少。

需要在一个节点文本前,显示多个图标,除了用于区别节点数据类型的图标外,还需要添加几个操作图标,用于可视化节点数据的操作,那么返回一个什么呢?JPanel无疑是最好的选择,轻量化容器中的万金油。在JPanel中添加几个可视化的Icon并不是难事,只是JLabel多少的问题了,通过对节点数据类型的判断分别设置便好了。问题是,如何判断用户当前点击的位置落在JPanel中的那个操作图标上呢?又如何将这些操作直接反映到实际的数据上来呢?通过JTree.getUI()方法获取当前的JTree的UI,然后调用TreeUI.getPathBounds(JTree tree, TreePath path)方法获取当前节点的绘制区域,之后通过鼠标事件MouseEvent的getX()和getY()方法获取当前鼠标的位置信息,由于控件的编写图标的大小由自己定义,所以可以确定图标的大小和JPanel的布局(我使用的是FlowLayout,并且使用setHgap()方法将水平控件间距设置为0),通过像素坐标的计算便可以得出当前用户鼠标单击事件应该响应哪个对应索引处的动作。

在实现的过程中,还需要使用到编辑节点的功能,那么如何来做呢?首选实现TreeCellEditor接口,完全自己定制,可以避免像继承自DefaultTreeCellEditor的烦恼(因为它能满足一般需求,但是会限制你拳脚)。TreeCellEditor也有一个很嚣张的方法,号称自己要接管TreeCellRenderer的方法,就是这个啦

Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row)

重写这个方法,用来自定义编辑时的节点渲染,例如我的树形控件在编辑的时候只能编辑节点名称,那么前面的图标还是要保持与未编辑时一致的,编辑时只需要将后面的文本置换为一个JTextField就可以了。然后为该JTextField注册一个键盘事件监听器,当输入Enter的时候,调用TreeCellEditor的stopEditing()方法,触发停止编辑事件。如果我们需要将编辑保存至数据模型中的话,就在stopEditing()方法中编写业务代码即可。

综上JTree这个控件实际上是一个完全遵循MVC架构的设计,甚至比MVC还抽象一些。JTree中只处理数据和显示的一些控制,例如判断当前节点是否能够被编辑的方法isPathEditable(TreePath path)等。数据模型完全可以委托为TreeModel来管理,之需要使用setModel便可以轻松地将JTree和TreeModel关联起来。而在其显示渲染上便是完全由TreeCellRenderer来接管的,只需实现一个类,该类实现TreeCellRenderer接口,重写getTreeCellRendererComponent(…)方法,便可实现完全自定义面板显示节点。抽象最高层的是,当节点为可编辑状态时,其渲染又交由TreeCellEditor接管了,在编辑节点时,TreeCellEditor的getTreeCellRendererComponent(…)方法便将完全接管节点的渲染工作,并且控制编辑时的动作,例如取消编辑和停止编辑之类的种种。这么看来,其实JTree只是提供一个壳子,通过其内部的TreeMod存储数据,外部的TreeCellRenderer和TreeCellEditor来控制其显示渲染和编辑渲染,给开发人员提供了一个可高度定制化的控件接口。

==========我还是分割线=========

本文的形成是如行云流水账一般啊,我也有点不知所云了,众位看官,能看则看,不能看则拉倒吧。JDK API文档在你家里叫你回家翻翻呢。

敢吗?

这是飞猪老师的一本设计的日记书,形式和《读库》老六倒腾的NoteBook有异曲同工的味道。是自己很喜欢的味道和风格,我们敢于向自己发问吗?我们总是在生活中跟某某人说道“我敢**,你敢吗?”,其实我们一直都很胆怯,胆怯到不敢向自己发问,如果有一天你每天向自己问一个这样的问题,你的回答不会迟疑,肯定的说“敢”。那么你确实已经很超脱了,为什么我们总是不敢这个不敢那个呢?是因为我们从小被教育成为乖乖男/女了吗?我们不敢打破别人给我们带上的紧箍咒吗?是的。

我们确实不敢,我们不敢让自己的身体受罪,不敢让自己活得有风险

  • 第52周—不忘革命本色,忆苦思甜七天,敢吗?不开空调,不开暖气,不洗热水澡,不使用电灯,不开车、不打车、不乘坐公共交通,你敢吗?我们已经习惯了目前生活中拥有的一切,我们每天上下班,乘坐公交或者出租,甚至开车,公司里头有空调和暖气,下班回家一个热水澡,再来点音乐和电影,如果有男/女朋友或者老婆/老公的童鞋们还可能有些XXOO的课外活动。生活不一定惬意,但是我们会觉得很自然,自然到我们都不曾想过要尝试去打破一些常规。一旦打破常规,我们将承受很多肉体上的不适,我们都不曾想。
  • 第49周,篡改你公司的LOGO,并将其作为邮箱的签名,你敢吗?KFC=>FCK,JUST DO IT=>JUST DID IT,CISCO=>DISCO等等,你是否曾经有过这样的想法。我想有过这样想法的人不在少数,我就曾经有过,SuperMap=>SuckerMap,记得公司入口处的LOGO牌有一次有个字母掉了下来,大家可以随意将掉下来的p随意放置在任何一个其他字母的上方,我发现每次我经过LOGO牌时,P的位置都是不同的,摆放的方式更是千奇百怪。我想大家的YY也就到此结束了,谁又曾敢将其作为自己邮箱的签名呢?
  • 第27周,给本.拉登写封信,发送到[email protected].当然这存在一定的搞怪成分在里头,可是关键的是,我们有过这样的想法吗?我没有,不过我觉得挺有意思的。

里头还有很多很多你不敢做的事情,更有你想都不敢想的事情。那么@flypig老师是想告诉我们什么呢?还是仅限于个人设计理念的体现和传播呢?我想作为一个个人色彩非常浓重的日记本确实能说明一些问题,@flypig老师肯定有想说的,博客上,twitter上,诸多活动上。我想飞猪老师可能就是想通过这个日记本告诉大家,我们其实可以更放肆一些,可以从不同的角度来看待头顶上的这片天空,我们可以看到晴雨变幻,也能看到彩虹,关键是你在什么角度去看。适时地作出改变,并且追随你作出的改变,持续52周,也许明年近日,你的想法,你的履历,你的生活,你的世界和去年可能有了一个很大的改变,不仅仅是年岁大了一轮,更多的是经历了诸多的不同。一年365天,我是活了不同的365天,抑或是活了1天+364天的copy的呢?这是一个很好的问题。

从现在开始,记录每天发生的不同,臆想中的不同,直至敢于去作出改变,突破小巷,来到十字路口,看着周遭飞快的车流,我们不能只是做一个交通指挥员,机械地摆动双臂,看人来人往演绎不同的故事。也许我们也可以投入车流,拐上一条无名小道……

又一次旅行

This is  a journey across the 2009 and 2010.

31日下午,跟公司领导聊了挺长时间,主要是关于自己的一个同学兼同事离职的事情。领导可能觉得同事的离职将会对我的情绪造成一定的不良影响,当然领导是对的,影响确实存在,而且也确实有不良的,当然也存在正面积极的作用。谈了好一会,看似达成了一致,“我暂时不会离开公司,对公司的前途看好,对自己的前途未卜,一切走着瞧”。

公司有一个不成文的规定,节假日前的工作日提前两小时下班,待我跟领导从会议室出来之时,那位待离职的同事已经等了我好一会了(目前正在办理离职手续,该童鞋与我同租一套房子,大学室友,挚友级别)。收拾完毕,与童鞋一起出公司,买了点食物和饮料,上公交,挤地铁,进站,候车。

来到北京西站之时,还只是18:00,从包中拿出最近正在读的《长尾2.0》开始这无聊但安静闲适的候车。时间到了上车,人不算多,找到地儿坐下,再次把书掏出来,继续…书读完了,没得看了。睡觉吧,遂迷迷糊糊地开始睡觉,期间醒过很多次,又重新睡着了很多次,斜对面坐着几个人,很是能侃。参与讨论的主要有,一对情侣,两个陌生女生,两名陌生男子,先是从地域聊起,因为现在是节假日,车上同行的人多是回家省亲之类的。故而绝大部分的乘客均是南昌人(Z67),这六个人之中就仅情侣中的女方是山东人。地域最大的差异一是天气,二是饮食,三是人。就这样天南海北地胡侃了很一会儿,大概侃到了凌晨1点半的样子(九点多开始侃的),而当时我手上也没有什么可以阅读的东西,移动设备就一个能接发信息和接打电话的古董手机,实在无聊之际,听听别人的闲侃也是很不错的,偶尔还能跟着乐一下呢。听着听着慢慢就犯困了,摇摇晃晃地睡了一路,快到南昌了。

窗外开始有点蒙蒙亮的感觉了,快7点了。天气阴霾,不见太阳,但是能清晰地看见铁道两旁的稻田中萌萌泛绿的油菜苗和红花苗,有些地就是这么荒着,但也多少有点水草,长势良好。顿时,感觉嘴里全是冬日田野中泥土的味道,想起小时候的这个时候正是下地里挖泥鳅的时候呢,掂个小桶,抗把锄头就出去了,弄得浑身是泥,回来的时候桶里也就一巴掌能数得清的那么几条小泥鳅,这时母亲又会开始唠叨“让你们出去闹,我都懒得给你们洗衣服”,然后一边还在数落一边已经把衣服放到水桶里头,拿出去洗了。

我喜欢南方的泥土,喜欢南方的水,更喜欢南方的雨,我的爱人在南方,我的哥们在南方,我的家在南方。我喜欢能扎根南方的感觉,喜欢能在夏日深夜,听见窗外蛙叫虫鸣,喜欢能在夏日雨天,听见老房子上雨水敲打瓦片的声音。

来到北京,实为不愿,更是无奈,如今北漂已有半年有余,不觉太累,也不觉有甚幸福,收获不小。我爱我的家乡,更爱我的家人,能跟家人生活在同一个节气中,感受同样湿度的空气和阳光,总是让我觉得很是幸福。我想我总是会离开的,北京,我不爱你。

硬件才是限制自由软件的No.1

昨天舍友看到我在Ubuntu 9.10下Coding,觉得界面比较炫,然后突然想起自己的机器上曾在07年装了一个Redhat 9.2 Desktop中文版。重启一下,怀念了一下往日疯狂装系统的时光。然后发现上不了网,为什么呢?

由于之前在学校使用的有线连接,目前屋子里头使用的是无线,他电脑上插着一个从京东买来的TP-Link WN322G+ 2.0的无线网卡,之前一直在Windows下装着驱动,自然跑得飞快,时常在网上“草蛋”。可惜的是在Redhat中,他也不知道如何设置无线,更别说安装驱动了。突发奇想的他,突然问我要Ubuntu的安装盘,那我倒是有,8.04和9.04的都有CD。

Ubuntu的安装非常方便,在安装的过程中,他让我给他讲一讲我认为的Ubuntu的易用性和值得推荐的地方。我说其实我用的也很少,也就偶尔写写代码的时候会跑到Ubuntu中去,为了学习一些命令和常用的编译知识和Linux平台中的特性才会去使用,娱乐的时候还是选择Windows。那么为什么当时会选择Ubuntu而不是别的Linux发行版呢?其实最早知道有Ubuntu操作系统是在07年冬天,那个时候开始泡JavaEye,在社区中看到很多前辈们都在赞Ubuntu。后来开始想学习一下Linux的时候就完全从零开始了,自己刻了一张光盘(很高兴当时自己的台式机的光驱是个刻录机),开始慢慢的学习安装。第一次使用的还不是光盘安装,刻好了之后一直放在抽屉里头,安装时使用的wubi安装,真是简单方便快捷无副作用啊,和装迅雷、QQ一类的Windows应用程序一模一样,一阵next就OK了。回到话题中来,其实自己觉得选择Ubuntu后,觉得很庆幸的一点是,自己选择了一个社区强大的免费软件。正式因为有社区中的人们无私的奉献和共享。我才能从一个连swap分区时什么都不知道的人,成为了一个可以指导别人使用Ubuntu系统的人。当然这也从另一个角度说明了一个问题——那就是Ubuntu的易用性还不是很好,因为它至少还是需要别人指导的——不过从零开始学Windows同样也是需要人来教的。社区的强大,相对的易用,绚丽的UI,免费开放,这是我给出的四点。其中我个人的排序时这样的,社区强大,绚丽的UI,免费开放,相对的易用。因为我认为社区的强大,完全可以解决易用性的问题,只要你敢问就肯定有人帮你解答。绚丽的UI是我一直追随最新版本Ubuntu的原因,因为每一个版本中都会有一些很明显的改进,不过最近发现其实内核的高低并不是问题,时尚其实可以掌握在自己的手中,保持一个比较稳定版本的内核和显卡驱动,之后你就可以在gnome-look.org中畅快的遨游了,想把自己的桌面整成啥样就整成啥样。就在闲扯之中,舍友的机器已经跑起来了,他的第一感觉是很不错,至少默认的挂载Windows分区的功能是让他狠狠地赞了一个(当年在Redhat中折腾的时候想必是很痛苦滴啊)。

之后就是准备安装软件了,提到Ubuntu安装软件,我们首选的自然是apt-get命令了,只可惜该命令只在你保证自己的机器能连接到一个有效地软件源上才能生效,要么有挂载的DVD映像文件,要么就得上Internet。又回到了最开始的问题了,Ubuntu中配置无线是很方便简单,但是驱动呢?我的机器是笔记本,自带的无线网卡在系统安装的时候已经装上了相应的驱动,而他就只能自己再次放狗搜索了。找了段网线,先连上有线网,把常用的几个软件搞定之后。开始尝试着去搜寻如何安装无线网卡驱动的文章,找到一箩筐还有得多啊。看来大家均碰到过这样恶心的问题啊。有很多的兄弟都在文中号称自己解决了,但是我们按着他的步骤来就是无耻的失败鸟。这是为什么呢?

我们可以来分析一下,主要应该有两个原因:

  • 内核的版本不一致。大部分宣称自己解决了问题的兄弟肯定是解决了自己特定的问题,比如针对WN322G+ 2.0这个无线网卡的文章就有好几篇(看来这款无线网卡的销量还不错哦!),但是撰文时间大都是2008年的,甚至更早。而我的舍友装的系统是Ubuntu 9.04版本,内核极有可能高于别人。
  • 编译环境不一致。有一些文章直接都是给出源码,从源码开始编译,最后进行设置,将问题搞定。但是源码编译这个事情很多时候是受限于系统开发环境的,那么也有可能导致安装不正确问题。

回到标题。为什么说硬件阻碍或限制了自由软件的发展呢?

  1. 硬件厂商仅提供Windows下的驱动程序。当然这个问题其实很奇特,因为Windows市场最大,而且Windows本来就是要在所有兼容机上运行,导致出现驱动程序开发这么一个环节,兼容机的硬件标准非常迥异,导致各家生产厂商要自行开发或者外包开发驱动程序。那么为什么不提供Linux和Mac OS X的呢?谁傻谁才提供呢。Linux市场太小,不赚钱,而Mac OS X是和硬件绑定销售的,不需要自行安装驱动,而且也不可能和别的硬件去兼容。
  2. 提供的驱动并不靠谱。ATI的显卡也有Linux下的驱动程序,开源的闭源的都有,但是就是没有官方的,官网上挂的也是社区驱动的项目开发的驱动。Nvidia虽然提供官方的驱动,但是问题也是一堆堆。这明显成为了诸多Linux潜在用户最怕碰到的棘手问题,我想我的舍友的激情也就在昨夜凌晨4点半的时候被耗尽了(昨天跟舍友一起整这个问题,足足整了3个小时)。
  3. OEM的程度还是很不够,其实如果能提供非常好的OEM套件也是很不错的。机器出厂时,已经保证其驱动和系统均是OK的,那么到了用户那里,他就不需要再去为这些原本不属于他关心的问题去费神费时了。现在的Windows也开始默认安装绝大多数通用驱动了,从XP开始(Vista不算)到Win7,系统自带的驱动越来越多,标准也越来越完善——作为兼容机首选操作系统生产商的微软完全有能力也很有责任把这个事情做好,让Windows的用户远离驱动程序,让用户知道他们之需要一键安装Windows便是了。解决了标准的问题之后,生产厂商开心了,微软其实也赚了好彩头——用户的体验提升。

就这样,我的舍友又回到了他盗版的Windows下面,继续“DOTA”和“草蛋”。你那该死的硬件,让我又失去了一个可能成为学习伙伴的Ubuntu发烧友。

音符的流线

世界真的好小啊,今天回家开机,虾米上的小喇叭一直在闪。点进去一看,小守给我留言了,说是来这里逛了一下,发现原来就是我。呵呵,世界真的这么小吗?跟小守成为好友完全是一次偶然,因为小守推荐的音乐很好,电台非常好听,所以就给小守发了一个好友申请,没想到真的就熟悉了。开始每天晚上都会听小守的电台,一般都是挺好虾小米提示换台才会换成男爵的电台,小守很男爵的电台总能带来一个有美好音乐相伴的夜晚。

作为程序员的自己,夜晚一般是待在桌前,盯着IDE写代码,调程序,偶尔会看看Google Reader上的更新,写写博客,发发牢骚。音乐总是并不可少的。从农村走出来的我,对音乐并不是非常敏感,真正接触流行音乐还是从初二开始的,那时候大家轮流借别人的单放机来听歌,就那么一盘谢霆锋的磁带,能把磁带听坏咯。上课的时候将耳机藏在袖子口听,晚上睡觉放在枕头下面听。那会的音乐资源非常非常的少,投入成本还非常高,那个时候一盘磁带是3块到5块钱,那可是当时整一周的零花钱啊,所以那个时候要想听新磁带真的要非常狠心,忍住一周不花零花钱,还得跟几个同学商量着买一盘大家都比较中意的磁带。就这样到了高中,高中的大部分时间泡在了电子游戏厅里了。当时有很多同学都学会上网了,会聊QQ了,还会玩私服呢。不过那个时候的我还跟一帮小学生经常一起闯“三国战纪”呢,至今依然很怀念啊。

高三的时候听了整整一个学期的电台,不管是什么音乐都听,记得那个时候听得最多的电台是“江西音乐广播”,有一个DJ叫卓越,非常喜欢他的“音乐三明治”和“流行音乐排行榜”。每天中午和晚上都会听他的节目,音乐很好,记得就是那个时候认识了许巍和汪峰,还有朴树,听了陈琳。补习那一年的日子不是很好过,音乐听得不多,偶尔会听听胡彦斌,朴树是听得最多的,白桦林在那个夏天给了我不只是丝丝的荫凉。对了,记得就是那个时候认识的周杰伦,还挺喜欢他的风格呢,很多首歌都还会唱呢,曾经还在县城街边的歌棚里头唱过很多次呢。

大学了,琢磨给自己买了一个MP3播放器,还没到半年就丢了,那个时候的音乐都是找百度,第一次下载还是宿舍同学手把手的教我搜索,然后右键=》目标另存为下载的音乐。听得比较多的是阿桑、游鸿明、陶喆。MP3丢了之后,自己添置了一台电脑,之后听音乐就更多了,几乎只要电脑开着,音乐是不会断的,那个时候用酷狗,音乐酷狗下歌很快,不需要再像之前一样百度加右键了。听了差不多一年,乱七八糟的各种音乐。之后发现了一个非主流音乐论坛,论坛的站长对音乐的了解是我目前所认识或者所听闻的人中最为夸张的,每天会发布五到十张专辑,都是参与VeryCD共享的音乐CD,对每一张专辑的制作以及相应的音乐人故事都会娓娓道来,真的是一个欧美流行音乐学习指南啊。听了很长一段时间,也学习了一些知识,还给两个同学推荐了,但是后来沉迷去电影之中,也不再常去了,后来某天想再次登录,才发现伊人已经离我远去了,心中戚戚然了许久。之后开始听轻音乐,而VeryCD上的Gibson系列几乎让我一网打尽了。那个时候听轻音乐,看纪录片,仿佛将尘世的凡俗都抛在了脑后。只可惜最终我们还是要归于红尘啊,开始为毕业后的工作发愁。拼命学习编程,接触了Java,开始天天上网查资料,完全靠着Google度日,最终来到了北京。

接触web 2.0这个概念是个莫大的幸运,看到了互联网的自由和开放,邂逅了盗盗分享网络2.0,当我听到虾米开始公测之后,尝试着注册了,然后还将自己硬盘上所有Gibson系列的符合要求的全部都上传了。之后上虾米渐渐就少了,因为听音乐更多的还是在千千静听上听,音乐那个时候的带宽并不是很理想,在线听音乐总是一卡一顿的。来到北京实习之后,工作之后天天会上虾米,之后就养成了上虾米听音乐的习惯,而且渐渐发现,其实online的音乐同样能给我们带来offline的感受,Google.cn也适时地推出了Google Music,还都是版权没有问题的正版音乐,确实让人感觉甚爽啊。记得那一阵,还拼命地下载了一阵呢。不过由于Google Music主打并不是音乐下载站,而是在线广告分成式的试听站,所以下载有颇多不便,后来觉得时间宝贵,而带宽充足也就没再下了。

虾歌,集音乐媒体管理,播放,在线试听,下载,上传,分享功能于一身,确实省了很多事。我也开始用虾歌下载了,不过虾歌目前只有Windows版本,在Ubuntu下只能望歌兴叹了。虾米给了我一个更为广阔的音乐世界,虾米们给我带来了更多的新鲜元素,小守和男爵就是其中的翘楚。