Browse all articles in history

一个十分好用的铃声制作软件:Ringtones

| 14 comments 2010-01-24 21:28:55

我是无意中发现这个软件的,试用了以后让我彻底改观了对铃声制作软件的看法-原来此类软件可以做得这么好用的!

软件启动后会直接读取iTunes的曲库,这样用户就不用再傻乎乎的去一首首打开mp3了。很棒的设计。

软件主界面

选取一首歌曲后,界面下方会直接显示歌曲的信息和波形图。

歌曲的信息和波形图

要截取声音片段,根本不用像我原来用过的此类软件那样、在播放的过程中设定片段开始和结束,而只要用鼠标拖动那个蓝色的区块、并调整区块的大小就行了,非常方便!

修改声音片段

更赞的是它的预览设计之妙完全出乎我的意料!按下右下角的Preview按钮后,软件进入预览模式,此时它会自动重复播放声音片段,无论是你移动了声音片段的位置、还是调整了声音片段的长短,预览都会在操作完毕后自动开始。

做铃声时最麻烦的一点无外乎调整铃声的开头和结尾,常常要反复的修改和预览。很贴心的是,当你修改完结尾后,软件会自动地从后面几秒开始播放,这样马上就能听到调整完的效果,非常方便!

制作完毕后点一下Send to iTunes,铃声就被传进iTunes的曲库了。不瞒你们说,因为担心麻烦,我买了iPhone几个月来从没改过铃声,这还是第一次,呵呵。

添加到iTunes

在Snow Leopard下编译PHP的pecl_http扩展库

| 4 comments 2010-01-14 10:31:50

由于Snow Leopard为64位系统,Apache无法加载直接编译pecl_http出来的http.so,查日志文件可以看到如下提示:

PHP Warning: PHP Startup: Unable to load dynamic library '/Applications/XAMPP/xamppfiles/lib/php/php-5.3.0/extensions/no-debug-non-zts-20090626/http.so' - dlopen(/Applications/XAMPP/xamppfiles/lib/php/php-5.3.0/extensions/no-debug-non-zts-20090626/http.so, 9): no suitable image found. Did find:\n\t/Applications/XAMPP/xamppfiles/lib/php/php-5.3.0/extensions/no-debug-non-zts-20090626/http.so: mach-o, but wrong architecture in Unknown on line 0

Google一圈后,发现要设置一下环境变量:

MACOSX_DEPLOYMENT_TARGET=10.6

CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp"

CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"

CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"

LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"

export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

然后在终端下照常编译即可:

phpize

./configure

make

成功加载这个扩展后,phpinfo()中会看到:

phpinfo()中显示的模块信息

代人寻iPhone开发者

| 2 comments 2010-01-08 11:56:30

今天收到一封邮件,要我帮忙寻找iPhone开发者,说是有个项目,具体情况我不熟悉,有兴趣的朋友可以直接和邮件作者联系。经同意,邮件转载如下:

我们现在想要寻找一个iPhone上软件开发的熟手,part time或者full time协助我们开发这款软件,我们支付费用。不需要用到太复杂的算法或者达到很绚的效果,我们只想完成一个在iPhone上运行的iPhone style的应用程序,但紧迫的项目时间以及规划适合iPhone的软件架构这两方面,需要我们寻找资深的开发人员给与我们帮助。

联系人: 李兴华 (我们的技术负责人);张峰 (产品经理)

公司名称: 上海庞米电子信息技术有限公司

邮件: xinghua.li@permian.com.cn; cc: jeff.zhang@permian.com.cn

手机: 13764568757(李); 13818945272(张)

从“产品需求文档”(PRD)到“产品设计文档”(PDD)

| 28 comments 2009-12-21 23:02:34

传统上写产品需求文档(PRD)的做法,就是把用例、流程图和网页原型图一股脑的放到一个Word文档里。一般一个产品都包含乃几十个乃至上百用例,每个用例都有自己的流程图,每个流程图又包含了少则几个多则几十的网页原型图,结果就是产品需求文档变得庞大无比,写的人费事儿,读的人更惨。

自从我受到了这样文档的折磨,我就一直都在琢磨怎么才能把文档写得更简单一点,让阅读的人-通常是设计师和程序员-能够在最短的时间内领会产品的设计。

原来做UI设计师的时候,我创造了一种用流程图来表示产品交互的办法,这个方法受到了很多人的欢迎,这篇文章也引起了一定的反响。其实当时在实际使用的时候,我不仅产出这样一份流程图,还利用网页热区,把流程图中的界面元素(蓝色的元素)和原型网页(HTML文件)给结合起来了,这样设计师和程序员在看流程图的时候,只要用鼠标点一下界面元素,就可以连接到原型网页,非常方便!这个办法我一直都在用,只是当时没有写在文章里罢了。

后来随着工作性质的变化,我需要越来越多地考虑产品的整体和功能、而不是像原来一样只在特定需求内围绕界面做文章,我就开始寻找把用例整合进前述方法的可能。在经过了一段时间的摸索和实践后,我逐渐形成了自己特有的一套产品需求文档的写法,为了表示区别,我称之为“产品设计文档”,简称PDD。

本文就是对PDD的介绍。

PDD的组成部分

PDD有三个组成部分,它们分别是用例、流程图和原型图。

用例

用例从整体脉络上定义了产品所具有的功能。比如对于一个邮件系统来说,“写邮件”、“发邮件”和“删除邮件”等功能都是用例。

用例比较流行的写法,是在每一个用例中标明它的前后置条件和异常情况等属性。不过在PDD中,我完全放弃了上述属性,只保留用例的名称和简要描述。因为“用例”的出发点就是“用户”,如果你站在一个用户的角度来思考产品的功能,你会发现那些属性你根本就不会考虑。并且,各种前后置条件和异常情况,完全可以放在流程图中,这样更清楚。

用例

流程图

流程图是对用例的细化,它可以清晰地表现一个用例所有相关的前置、后置和分支条件。流程图的画法我在“画Web流程图的一点心得”一文中已经说得非常清楚了,在此不再赘述。唯一值得注意的是,我以前并没有意识到流程图本身也是有ISO标准的,因此“画”中使用的流程图元素并不符合ISO标准,也和一些已经成型的系统(比如这篇“描述信息结构和交互设计的图示词汇表”)有出入,因此元素在使用上还存在一些问题。在日常工作当中我已经对元素使用做了修改,以后有时间我会更新“画”一文的内容,也有可能直接把模板放出来。

流程图

原型图

原型图是对流程图中“界面元素”的展现。这个东西没什么可说的。

PDD的表现方式

用例、流程图和原型图一般都是产片需求文档(PRD)中已有的东西,PDD在这点上和PRD没什么区别。而下面要说的表现方式,则是PDD的精髓。我比较孤陋寡闻,还没看到过有人像我这样组织这三块内容,所以姑且认为这是我的首创吧。

用例和流程图

首先把用例和流程图整合起来。方法很简单,利用网页的frame标签,新建几个帧:

  1. index.html-另外两个帧的容器,不用解释吧
  2. navigation.html-导航帧,用于存放用例列表
  3. main.html-默认情况下的主帧,用于存放文档简介、作者、版本和更新日志一类的东西

然后新建一大堆网页,把所有的流程图都放在这些网页里,每个流程图(即每个用例)放在一个网页里,最后修改navigation.html,把用例名称和其对应的网页链接起来。完工以后,页面应该是下面这个样子:

PDD文档首页

左侧为用例,右侧为流程图左侧为用例,右侧为流程图

好了,左侧为用例,右侧为流程图,这样就把用例和流程图整合了起来,并且结构清晰,查看方便。

流程图和原型图

整合流程图和原型图的重点在于,提供一种方便的方式,以让读者能够在看流程图时方便的看到其中包含的原型图。为了达到这个目的,我的做法是:

  1. 在用OmniGraffle画流程图时,选择界面元素(蓝色的那个),然后在“检查器”-“属性:动作”中选择“打开文件”,然后按“选择文件”,找到你的原型图文件并按“确定”,这样你这个元素就和原型图链接起来了。如下图所示:

    在OmniGraffle中链接元素

  2. 在OmniGraffle中输出这个流程图文档时,不是选择图片,而是选择“HTML图像映射”,这样在生成出来的网页上,蓝色的界面元素都是可以点击的,点了以后就链接到原型图。很方便对吧?但这还不够;

    用OmniGraffle输出HTML图像映射

  3. Lightbox,把所有图片链接都改成弹出图层,这次再点刚才那些链接看看,效果是不是更棒?

    用Lightbox做弹出效果

好了,通过这样的方法,产品设计文档(PDD)就将用例、流程图和原型图这三块内容有效的整合了起来。

真的geek,能在MacBook Pro上安装OSX86

| 4 comments 2009-12-18 23:03:44

我一直非常喜欢Mac OS Panther/Tiger中的拉斯金属(brushed metal)效果,可惜Apple从Leopard开始就放弃了这个漂亮的界面。Mac下的换肤软件Shapeshifter已经多年不更新了,根本没法用。而其它几个新出的换肤软件(MagnifiqueFacade)还都不成熟。想来想去,貌似只能安装一个Tiger来解解馋。

第一轮:从macosx_10.4.4_dvd.dmg镜像安装

说干就干,Google了一圈儿以后发现这篇名为“10.5: Virtualize machine-specific 10.4 in Fusion 2 ”的文章,于是翻箱倒柜找出一张保存着macosx_10.4.4_dvd.dmg的光盘,加载这个dmg,然后按照文章中的说法运行OSInstall.pkg后,安装程序启动,紧接着弹出一个框,告诉我这个盘不能装,点“确定”后就退出了。

这点小事儿难不倒我,用Finder的“显示包内容”进入这个pkg,一般来说按照经验找到InstallCheck.sh,将其删除即可。可是进了包却没发现有这个文件,倒是有个OSInstall.dist,估计就是它了。用TextMate打开一看,果然所有的安装检测都在这儿呢。懒得改了,直接将此文件删除,反正检测是越少越好。

OSInstall.dist

再次启动安装程序,非常顺利,一路安装设置完毕,在虚拟机里启动时却总是kernel panic,说是“CPU被客户机禁用”,试了几次,都是如此。

第二轮:祭出JaS Patcher

呵呵,这错误咱再熟悉不过了。想当年咱也是创办“PearPC中文站”和“OSX86 China”的人,什么千奇百怪的错误没见过。

于是再次翻箱倒柜,顺利找到给Mac OS X光盘打破解补丁的JaS.Updated.Intel.Auto-Patcher,按照说明开始给这个dmg打补丁。在经过了漫长的等待后,全新的打过补丁的OSX86光盘镜像新鲜出炉了(BurnThisImage.iso)!

OSX86光盘镜像

为了以防万一,我先把刚才用的那个VMware虚拟硬盘挂上(mount),然后用磁盘工具把这个虚拟硬盘格式化一下,再次启动安装程序,安装仍旧没问题,可是启动后问题照旧-“CPU被客户机禁用。咦?

第三轮:先安装Mac OS X再破解

这次先用第一轮的方法安装了系统,接着打开第二轮中得到的光盘镜像,手动安装几个负责破解的pkg包,我琢磨着这样应该能完全破解掉OS X对BIOS/EFI和CPU的检测,并顺利启动系统吧。

结果事与愿违,在经过了数次尝试后,第三轮仍旧可耻地失败袅……

第四轮:乾坤大挪移

在经过了2天3轮10小时的折腾后,我不得不放弃直接在我的MacBook Pro上用虚拟机安装Mac OS X。就在我精疲力尽之际,突然发现墙角还有一个大大的箱子-没错,能完美运行OSX86的PC正安静的躺在里面。于是把它搬过来接上电源显示器鼠标键盘,开机一看是Windows,“我的电脑”里倒是有个名为Macintosh的分区,不过格式为fat32,显然原来的OSX86被我给格式化掉了,翻了翻文档记录,发现这台PC上次的开机时间为2008年1月6日,ft……

这次我决定做个大胆的尝试。我在这台PC上启动了VMware,新建了Freebsd虚拟机,然后用OSX86光盘安装了一个系统出来。谢天谢地,OSX86在虚拟机中安装非常顺利,这还是这两天的第一次。安装结束后在系统启动前,我关掉VMware,然后用U盘把虚拟机文件拷贝到MacBook Pro上,接着双击FreeBSD.vmx,VMware启动,我默念“老天保佑”……

虚拟机类型仍为Freebsd

系统启动界面出现,再等1分多钟,桌面出现了!是第一次启动Mac OS X的配置向导。我成功了!

第一次启动

系统启动后我试了试,没发现任何异常,速度可以接受,网络可以用。更让我惊讶的是,虚拟机里的系统声音系统完全正常,不仅能播放音乐,甚至内建麦克风也可用!

麦克风

Finder还是Tiger中的最好用:

Tiger中的Finder

看到漂亮的brushed metal,这2天的折腾算是值了。

About

我在厦门拍的照片

丁宇(Felix Ding),电脑Geek,狂热的爱书和爱乐分子,99年迷上网页设计,并从此一发不可收。现在在上海做用户体验/产品设计咨询。Email: felixding[AT]gmail.com。

订阅到RSS

Latest Comments

  • 学习笔记 2010-03-12 19:29:02

    这文章是我很久以前回复的,刚看邮箱才知道有人在讨论,呵呵!

    我不用cake有一年多了,cake有点大,也不够轻快,现使用的是kohana,如果你感兴趣可以看下!

    最近发现个doophp,开发团队有华人,但还处于开发阶段,文档以及功能都不是很强大,不过我很喜欢doophp的开发思想以及设置方式。

  • 迪菲 2010-03-12 07:11:42

    报名

  • Hao Wu 2010-03-11 21:37:26

    知道了,谢谢

  • 望飞 2010-03-11 21:29:53

    mdr.gif

  • AquarHEAD 2010-03-11 15:30:28

    @Zhou 嗯,是个好主意~当初我在Django和Cake之间犹豫了一下,然后我寻思Django还可以写桌面程序,就Cake了。。。

    @Ding 刚看CakePHP的命名规范时觉得很死板,不过要是就做Cake有的那些功能还是挺方便的。先把手头这个网站弄完吧~以后肯定会转型。:D

  • Zhou Rui 2010-03-11 13:53:36

    @AquarHEAD 个人看法django的优势在ORM,可以把对数据库的操作封装起来,让你只关心摆弄数据的逻辑,不过template就有点弱,但是文档很全面(甚至还有一本中文书),个人没接触过RoR,但是既然是学生那就没必要怕折腾,都拿来用一下,找个最合自己开发习惯和理念的工具,相比PHP,Python的用途也会更广一些

  • 丁宇 2010-03-11 13:39:11

    @AquarHEAD 对,对中文系是我从小到大的理想。

  • 丁宇 2010-03-11 13:36:50

    @AquarHEAD 统一风格给你带来的好处,远不及一个不是很好的框架给你带来的坏处多。如果你一定要严谨的话,Java的Hiberate/Spring/Struts等东西应该适合你。

    我对Python不熟悉,我找个同事来回答你。

  • 丁宇 2010-03-11 13:34:09

    @Hao Wu 报名方式以官方站点的通知为准,下周应该会上线。

  • taine 2010-03-11 13:17:02

    我这水平,发言就算了。去参加看看各路高人是正事。

Douban