0

My first MacBook Pro

Posted by ideal on May 15, 2010 in Uncategorized

昨天总算是入手了最新的MacBook Pro MC371ZP/A定制版(选配了雾面+高分屏)。之前关于镜面和雾面、13′和15′纠结了好一阵,矛盾的焦点是价格(穷人嘛,没办法)。

最终,价格在可接受范围内还是以自己的使用体验为主,昨天一咬牙冲到Machome交了订金,本以为要等上一段时间的,结果不料RP爆发(难以置信的),当天就到了一批货,我的就包括在内,于是下午又鸡冻的冲到Machome,倾家荡产的把Mac带回家~

定制的雾面屏,加上unibody的机身,按照大家对Mac习惯的称呼,这应该是北极熊和熊猫的杂交品种了~

其实在没有自己的Mac前,我早已是Mac用户,从最早的Hackint0sh(其实还有更早的)到目前公司用的第一款MBP2006。

两台MBP的合影,新版的稍大一些,但薄一些。
IMG_0204
IMG_0205

谨此告别陪伴我快5年的ThinPad T43(曾经也被我Hackint0sh过,现在依然很好的跑着Win7)以及我的第一台Mac~

 
0

日记:2009谷歌开发者日

Posted by ideal on Jun 5, 2009 in Uncategorized

一年一度的谷歌开发者日又来了,由于我参加过去年的活动,所以这次收到了邀请,注册和确认都非常顺利。虽然这次是在工作日(周五)举行,但是公司可以申请带薪培训,所以有出去走走的机会当然是不会错过的。今年的谷歌开发者日依然在北京国际会议中心举行。

继去年的活动迟到后,今年依然没有按时赶到。不过还是要比去年幸运一点,虽然迟到了,但是还可以签到,我火速拿出打印好的邀请函交给工作人员,顺利的拿到了参会嘉宾的手册和通行证。

到了主会场,比较幸运的是大会还没有开幕。会场布置的挺漂亮,开场也很隆重,还有击鼓的表演。首先是李开复的主题演讲,概括了很多谷歌的新技术还请了一些技术人员做演示。

接着听了第一个分会场的讲座。之后是午餐,我RP挺好好,拿到了一个巨大的香蕉。

饭后路过展区,本来想多看看的,结果发现人非常多,无奈只好直接去分会场等待讲座开始。路上经过很多免费的零食和饮料,还有塞满雪糕的冰柜,这个要赞一下。

不知道是不是因为很久都没有听讲座了,一点也听不进去,不是听瞌睡了就是在玩自己的手机或者笔记本。下午连续听了3场讲座后,我们坚持不下去了,放弃了自助晚餐,领了纪念品后跑路了。

领取的纪念品是一件T恤+一个背包,T恤是本来就知道能领的,但是背包是个很不错的电脑包,算是个惊喜吧。

据说晚上交流互动环节还不错,不过早早的被同事拉走了,本来也不善交际,所以也没什么关系。

流水帐记完了,说说感想吧:

  • 活动是免费的,总体上讲比去年的组织和安排好很多了,不会到处都是人的感觉了。
  • 虽然都是在做广告,但是谷歌的技术还是非常吸引人的,所以觉得还不错。
  • 各种技术讲座深的深、浅的浅,演讲不够吸引人(主要的针对我听的几个讲座,都是网络讲座系列的)。
  • 对这种大会不要抱太大希望,肯定是讲不了什么有技术含量的东西。
  • 如果你性格外向活泼的话,应该可以结交到不少IT界的朋友。
  • 这种活动去凑凑热闹还是不错的,免费吃吃喝喝还可以拿纪念品,也可以对谷歌的各种技术混个面熟。另外,说不定还可以碰见老朋友,这次我们就碰到了公司前同事还有大猫:)

Tags: ,

 
2

日记:天津一日自助游

Posted by ideal on May 4, 2009 in Uncategorized

五一假期,应同学邀请花一天时间去天津走走,不跟旅游团,叫做天津一日自助游应该没错吧。记个流水帐,仅供可能从北京去天津游玩的各位参考。

我之前没去过天津,同学只提供了几个想去的地方,要求我安排行程。只好到处找资料问天津的同学同事们,结果发现其实他们也不是很熟悉,因为他们很少在本地玩。之前去过天津的同学都说不想再去第二次了,但是没去过还是去看看吧。我们的行程非常的奇怪,一天时间既要去天津还要去塘沽,大概的行程是这样:
上午:从北京南站坐城际快车到天津,逛逛天津市区的古文化街和食品街。
午餐:在食品街解决。
下午:去塘沽的洋货市场逛逛然后看看塘沽的海河外滩公园。
晚餐:找家本地的餐馆吃些有地方特色的。
晚上:直接从塘沽坐火车回北京。

事实上的行程和计划的基本相同,但是期间遇到各种问题让我们很是郁闷。

上午8:55乘坐北京到天津的城际快车,这是我第二次坐动车,还是得赞一下,动车的环境真的非常不错的,毕竟还是要对得起它的票价的。很快,不到半个小时就到了天津,车厢内的OLED显示最高速度到330+。

动车内的OLED

从天津站去古文化街,因为之前已经查好它们的距离非常近,所以出站后直接打车前往。排了很长的队伍上了出租车,结果发现堵的不行。下车后才发现,原来古文化街离开天津站非常的近,其实没必要打车,因为等车加上堵车的时间我们早就走到了。

好不容易到了古文化街,还是比较有感觉的,值得逛一逛,还有一些天津特色的民间艺术,比如泥人张,买一个送人还是不错的。

古文化街

泥人张

泥人张店内

古文化街地图

古文化街不长,如果不逛里面的商店,一会儿就走完了。之后出发去南市食品街,因为距离也不是很远,鉴于之前打车的经验,我们决定步行前往。问好路一顿乱走了大概二十多分钟总算到了,比我想象的远了很多啊,而且我们一路走来看到马路上车辆都还是挺少的,于是我们又后悔应该坐公交或者打车的…

南市食品街的门口有一处很显眼的狗不理包子,到了天津,当然得尝尝狗不理包子,考虑到一会进食品街还得吃其他小吃,我们就买了一盒打包的三鲜包子一人尝了 一个,包子非常贵,接近5块钱一个,但是我并没有觉得好吃到像它的价钱那样。进入食品街,原来所谓的食品街,就是室内的一个个小食品摊子,分布着各种各样 的小吃,但是很奇怪里面最多的竟然是台湾的各种小吃,天津特色的小吃却不多,最后只是买了个炸糕吃,出门后在门口买了个煎饼果子填肚子,还特意挑了一个加 油条的,结果吃了一半就扔了,实在没有什么好吃的。

下午一点左右,我们离开了食品街,出发去塘沽的洋货市场,打车到中山门坐轻轨去塘沽。打车时又遇到堵车,真是郁闷,不过幸好很快就畅通了,堵的时间不长。 打车还得看人品的,我们一行9人,分3辆车走,结果最后的车费分别是26.x元,31.x元和36.x元,看来天津的出租车司机真是不够厚道啊。另外,我的人品还是不错的,我们那辆车的车费最少。

经过半个多小时的轻轨,我们终于到了传说中的塘沽,出轻轨站走大概十多分钟就到了洋货市场。不看不知道,一看吓一跳,原来所谓的洋货市场就是各种各样山寨的产品,我觉得叫塘沽山寨市场比较合适。我对山寨的东西不是很感冒,所以就随便逛了逛。当然,山寨的东西还是比较便宜的,这里的东西据说可以按出价的 1/4至1/3的砍。

逛完无语的山寨市场后,下一站是海河外滩公园。继续打车,继续堵车,幸好距离很近,一会就到了。发现这里也并没有什么特色,唯一值得提的就是走在河边的感觉还是不错的。但是比较可怕的是,河上的快艇开过后泛起的河水竟然是黄色的。我们逛到一半的时候还很不幸的下雨了,幸好看了天气预报有小雨,我们都带了伞,但是看着灰暗的天空就没有太大的兴趣继续逛了,于是大家决定找个地方吃饭。

到了塘沽,当然是希望吃一些本地的海鲜等一些有特点的小吃,所以路边随便找了一家看着像本地的餐馆,结果没想到可怕的晚餐开始了。首先是餐桌上的塑料餐布里有很多小虫子(应该是蚊子吧),然后是经过消毒并且重新包装的餐具(需要付费的那种一套的用塑料膜包装餐具)竟然基本没洗干净的。关键是饭菜做的基本的 吃不下,唯一一个能吃的青椒牛柳里的肉竟然还是用猪肉代替的…实在不想回忆这恶心的晚餐了。我们基本没吃什么就走了。建议大家以后在塘沽吃饭还是吃一些KFC之类的会比较放心一点。

经过了下午郁闷的塘沽之行,我们一致认为我们应该赶紧逃离这鬼地方(本来还打算如果这里的景点没玩完,在这待一晚上的,现在想想都后怕)。因为不赶时间, 所以我们坐公交车去塘沽火车站(天津的公交车票价是1.5元,而且基本是无人售票的,所以要先准备好零钱),最近一趟回北京的火车是19:00的普快,已经没有座了,我们就只买了塘沽到天津的票,决定如果有座的话就补票一直坐到北京,没有座的话就从天津下坐城际快车回北京(这里要解释一下,塘沽回北京也有城际快车,但是每天只有四趟,不像天津到北京是十五分钟一趟,所以从天津回北京是非常方便的)。不过我们还是比较幸运的,上车以后发现基本都有座。在车上玩牌时间过得很快,二个小时四十分钟的车程一会就过去了。

晚上九点左右,我们终于安全的回到了北京。

Tags: , ,

 
2

一些提高工作效率的好习惯

Posted by ideal on Apr 13, 2009 in Uncategorized

一直以来,只要是有项目的正在进行时,我就觉得每天都很忙,但是每次忙完后再回头仔细看看,其实自己完成了很少的工作,而且很多工作完成的并不好。

最近,好不容易到了项目间隙,相对有一些空闲,就上网找了一些提高工作效率的资料。在 GTDLife.cn 看到了一些不错的时间管理的资料,分析了一下自己的情况,感觉最关键的问题在于自己在工作时很少能集中精力,总是在做A事时突然想到B事,又或者突然被C事打断,导致很多工作完成的很慢,质量也不高。

那么如何来解决这些问题呢,比较好的办法就是在工作时养成好习惯。在 GTDLife.cn 的新书《小强升职记》第一章中提到一些,自己在这些天的工作中也总结出一些,打印出来贴在办公室里比较显眼的位置,可以不时的监督自己。

营造良好的办公环境

工作时需要一个安静的环境才能集中精力的工作,尽量排除一切可能的干扰。

  • 如果不是工作需要的话最好关闭各种 IM 软件和邮件提醒软件。
  • 在完成比较重要的工作时,可以提前告诉同事在一定时间内不要打扰自己,手机关机或者切换到飞行模式。
  • 办公环境尽量干净整洁,能轻易的找到自己需要的工具。
  • 舒适的办公桌椅。

培养良好的生活习惯

有规律的生活习惯可以提升工作状态,最大程度的减少生活问题对工作的影响。

  • 早睡早起,这样才能保证充足的精力同时也有利于身体健康。
  • 习惯的排泄时间,每天晚上睡觉前和早晨起床后是比较合适的时间,以免对你白天的工作造成影响。
  • 定期剪指甲,比如一个星期中周一和周四的早晨,这样不会影响你使用键盘时的心情(可能并不是每个人都存在这个问题)。
  • 定期检查邮件和阅读新闻(使用RSS订阅方式),可以早晚两次,在上午开始工作之前和下午结束工作之后。

学习良好的工作方式

良好的工作方式可以解放你的大脑,使你更容易专注于当前的工作。

  • 每天工作前都有一个任务列表,明确今天要进行的工作,完成一项划去一项,很有成就感。
  • 每个任务都有优先级和时间限制,督促自己更快更好的完成工作。
  • 工作状态最好时做最重要的事情。
  • 再小的工作也要尽量分解的做,避免一心二用。
  • 任务不能安排的太满,要留出适当的休息时间和可能处理紧急事务的时间。

其中我觉得最重要的是如何做到在状态最好的时候去做最重要的事情,我相信这一点是符合二八定律的,用工作状态最好的 20% 的时间可以把 80% 的工作完成好。至于如何做好这一点,还需要一段时间的摸索,以后再讨论。

Tags: ,

 
1

Hello world!

Posted by admin on Mar 18, 2009 in Uncategorized

我的 blog 又回归 WordPress 啦,感谢 林健同学 给我提供的免费试用的主机。终于可以稳定的使用 blog 了,先试用一段时间再决定是否安家吧。之前试用了一段时间的 Blogger,功能非常强大也非常好用,但是因为使用自定义域名的问题用的非常郁闷。

目前使用的这个主机还不错,就是速度慢了一些。

 
0

Mac OS X – Menu Extras Tips:添加、移动或者删除弹出光驱、音量等图标

Posted by ideal on Mar 2, 2009 in Mac OS

用过 Mac OS 的用户都会对它的菜单栏印象深刻,因为它很独特。如果你习惯了 Windows 的 UI,第一次用 Mac OS 时你总是找不到的程序的菜单,其实它就分布在顶部的菜单栏上。它会根据不同的程序显示不同的菜单,但是,也有一些不变的部分,最左边的一个苹果图标的菜单 (勉强的可以说类似于 Windows 的开始菜单)以及最右边的一些小图标。这篇文章主要是关于最右边这些小图标的,这些图标的作用与 Windows 下系统托盘(System tray)类似,在 Mac OS 下叫做 Menu Extras(菜单栏上的额外项目),比如我的 Menu Extras 如下图:


可以看到,除了显示时间以及一些正在运行程序的图标,还可以监视系统的状态以及一些常用操作的快捷菜单,比如第三个小图标是弹出光驱的快捷菜单以及之后的调节音量的菜单。可能你会觉得弹出光驱和调节音量都有快捷键,我们可以把它们从菜单栏上去掉,节省一定空间来显示其它有用的菜单,或者我想调整一些图标的位 置,又或者我想添加一些。那么如何删除、移动、添加菜单栏上的 Menu Extras 呢?其实很简单,方法如下:

  • 删除: 很多常用的 Menu Extras 都可以在系统设置(System Preferences)里找到,比如音量,在 System Preferences -> Sound 中有一个 Show volume in menu bar 的选项,把钩去掉就删除了。如果你没有在系统找到相关选项,其实有更简单的删除方法,直接按住 Command 键然后用鼠标将小图标拖出(Command – Drag)菜单栏即可。
  • 移动:与 Command – Drag 删除类似,只是拖到时把小图标拖到菜单栏中想要的位置即可。
  • 添加: 与删除类似,系统设置中找相关选项。如果没有相关选项,比如弹出光驱的图标,直接用 Finder 找到 /System/Library/CoreServices/Menu\ Extras,其中的 *.menu 是所有的 Menu Extras 了。Eject.menu 就是弹出光驱的菜单,双击这个文件或者用鼠标把它拖到菜单栏上即可。音量图标也可以在这里找到,就是 Volume.menu。但是要注意的是,有些菜单的添加可能需要系统注销或重启才能生效。另外,最好是通过系统设置的选项来添加或者删除 Menu Extras,因为直接使用某些 .menu 文件可能会导致 Menu Extras 的配置丢失。

其实操作 Menu Extras 与操作 Dock 中的图标类似,只是拖到的时候要按住 Command。

Tags: , ,

 
6

iPhone 应用开发:音频播放

Posted by ideal on Feb 26, 2009 in iPhone

在 iPhone 应用或者是游戏的开发过程中,对声音的支持是必不可少的。在我做过的几个应用中,每个都涉及到音效,所以在这里做个简单的归纳,很多都是引用自《iPhone Application Programming Guide》(需要有 Apple ID 才能打开链接),加了一些实际使用的经验。

iPhone OS 主要提供以下了几种播放音频的方法:

  • System Sound Services
  • AVAudioPlayer 类
  • Audio Queue Services
  • OpenAL


1. System Sound Services

System Sound Services 是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemSound 这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:

■ 声音长度要小于 30 秒
■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
■ 打包成 .caf, .aif, 或者 .wav 的文件
■ 不能控制播放的进度
■ 调用方法后立即播放声音
■ 没有循环播放和立体声控制

另外,它还可以调用系统的震动功能,方法也很简单。具体的代码可以参考官方的示例 SysSound
,但是官方的示例只有一些简单的用法,从文档中我们发现可以通过 AudioServicesAddSystemSoundCompletion 方法为音频播放添加 CallBack 函数,有了 CallBack 函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题。以下代码可以实现一个在程序中循环播放的背景音乐:

static void completionCallback (SystemSoundID  mySSID) {
    // Play again after sound play completion
    AudioServicesPlaySystemSound(mySSID);
}

- (void) playSound {
    // Get the main bundle for the app
    CFBundleRef mainBundle;
    SystemSoundID soundFileObject;
    mainBundle = CFBundleGetMainBundle ();
    
    // Get the URL to the sound file to play
    CFURLRef soundFileURLRef  = CFBundleCopyResourceURL (
                                                         mainBundle,
                                                         CFSTR ("background"),
                                                         CFSTR ("wav"),
                                                         NULL
                                                         );
    // Create a system sound object representing the sound file
    AudioServicesCreateSystemSoundID (
                                      soundFileURLRef,
                                      &soundFileObject
                                      );
    // Add sound completion callback
    AudioServicesAddSystemSoundCompletion (soundFileObject, NULL, NULL,
                                           completionCallback,
                                           (void*) self);
    // Play the audio
    AudioServicesPlaySystemSound(soundFileObject);
    
}

2. AVAudioPlayer 类

AVAudioPlayer 是 AVFoundation.framework 中定义的一个类,所以使用要先在工程中引入 AVFoundation.framework。我们可以把 AVAudioPlayer 看作是一个高级的播放器,它支持广泛的音频格式,主要是以下这些格式:

■ AAC
■ AMR(AdaptiveMulti-Rate, aformatforspeech)
■ ALAC(AppleLossless)
■ iLBC(internetLowBitrateCodec, anotherformatforspeech)
■ IMA4(IMA/ADPCM)
■ linearPCM(uncompressed)
■ µ-lawanda-law
■ MP3(MPEG-1audiolayer3

AVAudioPlayer 可以播放任意长度的音频文件、支持循环播放、可以同步播放多个音频文件、控制播放进度以及从音频文件的任意一点开始播放等,更高级的功能可以参考 AVAudioPlayer 的文档。要使用 AVAudioPlayer 的对象播放文件,你只需为其指定一个音频文件并设定一个实现了 AVAudioPlayerDelegate 协议的 delegate 对象。这里举一个简单的例子,和上一个例子一样,实现一直循环播放的背景音乐:

- (void) playBackgroundSoundEffect {
    NSString *soundFilePath =
    [[NSBundle mainBundle] pathForResource: @"background" 
                                    ofType: @"wav"];
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
    AVAudioPlayer *newPlayer =
    [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
                                           error: nil];
    [fileURL release];
    self.player = newPlayer;
    [newPlayer release];
    [self.player prepareToPlay];
    
    [self.player setDelegate: self];
    self.player.numberOfLoops = -1;    // Loop playback until invoke stop method
    [self.player play];
}

可以看到,只要将 AVAudioPlayer 的 numberOfLoops 属性设为负数,音频文件就会一直循环播放直到调用 stop 方法。

AVAudioPlayer 同样支持 Callback,这是 AVAudioPlayerDelegate 的一个可选 delegate 方法:

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (BOOL) flag {
    if (player == self.player && flag == YES) {
        NSLog(@"Playback finish.");
    }
}

另外,你可以随时控制 AVAudioPlayer 对象的播放、暂停以及停止,通过判断对象的状态,分别调用 play、pausestop 方法即可:

- (IBAction) playOrPause: (id) sender {
    // if playing, pause
    if (self.player.playing) {
        [self.player pause];
    // if stopped or paused, start playing
    } else {
        [self.player play];
    }

虽然 AVAudioPlayer 可以播放很多格式,但是我们在实际开发过程中还是最好使用一些没有压缩的格式,比如 WAVE 文件,这样可以减少系统处理单元的资源占用,以便更好的完成程序的其他功能。另外,在使用 AVAudioPlayer 连续播放 mp3 这类经过压缩的音频文件时,在连接处可能出现一定的间隔时间。

3. Audio Queue Services

如果以上两种音频播放的解决方案都无法满足你的需求,那么我想你肯定需要使用 Audio Queue Services。使用 Audio Queue Services 对音频进行播放,你可以完全实现对声音的控制。例如,你可以在声音数据从文件读到内存缓冲区后对声音进行一定处理再进行播放,从而实现对音频的快速/慢速播放的功能。

因为 Audio Queue Services 相对复杂很多,Apple 官方已经把它整理为一本书了,具体可以参考 Audio Queue Services Programming GuideSpeakHere 的程序示例。

4. OpenAL

OpenAL 是一套跨平台的开源的音频处理接口,与图形处理的 OpenGL 类似,它为音频播放提供了一套更加优化的方案。它最适合开发游戏的音效,用法也与其他平台下相同。

iPhone 支持 OpenAL 1.1,我没有在实际开发中使用过,具体的文档可以参考 OpenAL 的网站 http://openal.orgoalTouch 的程序示例。

Tags: , ,

 
0

Xcode iPhone project ignore list

Posted by ideal on Feb 25, 2009 in iPhone
我们在使用 svn 或者 git 管理 iPhone 项目的源代码时,某些文件是需要忽略的,如果不小心加入版本控制中很容易导致代码混乱和无尽的冲突。
注:其中 <project_name> 为实际的项目名称。
对于 svn ,我们可以使用 svn:ignore 这个属性将忽略列表提交到服务器上。
svn pe svn:ignore .
svn pe svn:ignore <project_name>.xcodeproj
之后把上面的列表加入到相应文件中保存。
对于 git,只要更改项目文件中的 .gitignore 文件,加入以下内容:

build
<project_name>.xcodeproj/*.pbxuser
<project_name>.xcodeproj/*.mode1v3
<project_name>.xcodeproj/*.mode2v3
<project_name>.xcodeproj/*.tm_build_errors
<project_name>.xcodeproj/*.perspectivev3

然后把 .gitignore 本身加入版本控制中即可。

Tags: , , , ,

 
2

HP520(fh592aa) 安装 Leopard(iPC OSx86 10.5.6 Intel AMD SSE2 SSE3)

Posted by ideal on Feb 24, 2009 in Mac OS

使用光盘安装,下载 iPC 刻盘后用光盘启动,一路 Continue/Agree 直到 Install Summary 这一步,选择 Customize,也就是自定义安装组件,勾选以下内容(没有提到的内容默认不选):

  • iPC OSx86 10.5.6 Base System
  • Language Translations -> Simplified Chinese
  • Video Drivers -> Intel -> Intel GMA950
  • Chipset Drivers -> Intel ICHx SATA Drivers
  • Audio Drivers -> Conexant HiDef Audio
  • Ethernet Drivers -> Intel PRO 100/VE
  • Wireless Drivers -> Intel PROSet/Wireless 3945
  • PS/2 Device Support
  • CPUS=1 One Core Fix

然后 Install,跳过 Check install DVD,等待10分钟左右,重启后填完所有资料后可以正常启动。发现只有显卡没有正常工作,网上找了一个Intel GMA945的驱动,用 Kext Helper 安装以后重启可以正常工作了。

Kext Helper 的使用方法很简单:解压下载后的文件,双击运行 Kext Helper,将压缩包中的三个 .kext 文件拖到 Kext Helper,输入密码,点击 Easy Install 开始安装,等到出现安装完毕的提示即可。

目前就是这样,无线网卡只能使用没有加密的网络(在 Terminal 下执行 /Applications/networkSelector 可以扫描/连接网络),声卡只有扬声器工作,其它一切正常。

最后附上一张截图:

Tags: , ,

ideal’s blog powered by Wordpress. Theme by Laptop Geek.
This blog is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.5 China Mainland License.