Dec 27 2008

需要一段声音?

这个soundsnap是一个声音的素材库,就是可以提供很多各种各样的声音供你使用,比如动物、大自然,人声、多媒体等等、目前呢,免费用户每个月可以下载5段,而且使用上没有任何限制。

想起以前为了给一个字幕配上键盘的声音,还自己在敲键盘时录制了一段,反复录了几遍才满意,这里search一下,就大把了。


Dec 27 2008

休假

休假了一段时间,不过没有太多空闲时间,还是挺忙。 抽空画了一张照片,不是很满意,有会画画的朋友给我提了一些中肯的意见,很感谢他们。想起以前两个人一起去学画的时候,还挺有意思的,一个人就很难坚持,有时知道自己问题在哪里,也不能立即去改正,人总是有惰性的。

08年都要过去了,感觉好快,希望09年能过的慢一些,也许多写blog是一个方法。。。  : )


Dec 25 2008

mac软件列表

每次用一个新系统,都要整理出自己的一堆favorite software,这个mac osx也不例外,下面送上:

  • 浏览器,还是喜欢firefox多一点,safari也偶尔用用。
  • 即时通讯,Adium是个好用的全协议的即时通讯客户端。
  • 办公软件方面,苹果的Keynote可是名气非常的大,我还在瞻仰中。
  • 图像处理,还没有哪个软件能超越Photoshop。
  • 音频方面,我唯一的一个需求就是希望能打开我长期收集的GuitarPro文件,令人惊喜的是,GuitarPro有Mac版本,非常好用。
  • 多媒体播放,两个跨平台的软件Mplayer和vlc也在mac上相当好用,播放DVD的话,系统自带的iDVD就很好用了。
  • 虚拟机,不愿意用Bootcamp的话,VirtualBox还不错。
  • 工具方面,QuikSilver不可错过,用于程序或文档的快速启动。也许Windows下的utorrent给我太好的印象了,尽管Mac下的utorrent还比较简陋,我还是在用。Paragon可以让你在Mac下读写NTFS分区,让Mac和Windows共享数据文件不再有问题。The Unarchiver可以补充Mac系统很多不支持的压缩文件格式。

还有什么,想到了再加


Dec 22 2008

Hold Me, Use Me, Free Me

在被ObjectiveC的retain、release折磨了一阵子之后,这篇文章终于解释了我的疑问,很精确的名字,用来概括半自动内存回收。
http://www.stepwise.com/Articles/Technical/HoldMe.html

记住这几点:

  • 匹配原则:alloc或者copy得到的对象已经有计数器为1了,retain会使得计数器加1,这三种使用都要匹配对应的release或者autorelease。
  • 何时retain:得到一个返回的对象后,如果你想长期使用它,需要做retain。
  • 何时autorelease:当需要返回对象给上层,而自己又不想使用这个对象时,需要做autorelease,这样才能让调用者有机会去做retain,当然autorelease的开销比较大。
  • retain循环:仔细设计对象的owner关系,避免retain循环。
  • 特殊情况:在需要 release和retain的情况下(比如改变一个对象的owner),可能需要先额外做一个retain,否则可能release会造成对象失效,当然也要补一个release。

Dec 12 2008

《Once》

前几天看的一部电影,这个名字不知道怎么翻译,曾经?情难独奏? 因为与吉他和音乐有关,我才找来看,对于喜欢音乐的人可以推荐。 看完后完全被里面的吉他和歌声给迷住了,男女主角的和声很美,从头到尾我都象是在看一部超长的MV,情节已经忘了差不多了,有时间准备再“听”一遍。

发现自己还蛮喜欢一些和音乐有关的电影,准备再去搜一些。。。


Dec 11 2008

2D物理引擎

2D物理引擎,我在前面一个帖子已经给出了一个Javascript的实现了,下面是c/c++的两个通用实现(作为库来使用):

  • box2d: 比较早,功能很全。
  • chipmunk: 衍生自box2d,c语言实现,在xmoto(我喜欢的一个摩托游戏)的新版本中就用了这个。

这里有一篇比较二者的文章,据说是box2d功能丰富一些,chipmunk性能高一些,我只有过chipmunk,遗憾不能发表自己的比较意见。

chipmunk中的基本概念

Space:这是Chipmunk中对“空间”的表述,在这个space中所有的刚体(下面介绍)发生相互作用,Space有两个重要的属性,一个是重力(gravity),一个是阻尼(damping),重力显然是有方向的,所以重力是用一个矢量来表达的,当然也可以为0,那就类似于太空了,阻尼显示是没有方向的,用一个浮点数表达就好。

刚体(rigid body):这是这类物理引擎最核心的概念了,他们和粒子(Particle)的区别是,除了质量、位置、速度外,刚体还是可以旋转的。刚体们都活跃在chipmunk的space中。很重要的是:它们本身并没有形状(shape),形状是通过一个Collision shape(简称shape)的概念加到刚体上去的。刚体具有几个非常重要的属性,比如m(质量),i(转动惯量),p(位置),v(速度)以及和转动相关的一些属性等。

Shape是表达一个刚体的形状的概念,它附加在刚体上,从而才能让刚体间发生碰撞,Chipmunk只支持三种形状:圆、线、多边形。所以像是弧这样的形状只能通过多线来拟合了。注意Chipmunk中的shape和一般意义的Spirit独立的,Spirit(精灵)表达的是一个物体是如何显示的,尽管大部分情况下Spirit和Collision shape都是一致的(这样看起来才合理),但在内部实现上,Spirit和Collision shape是完全不相干的。

Chipmunk的基本使用:

待续


Dec 8 2008

看到鸟巢了


Nov 29 2008

Apple上的PgUp,PgDn

电脑城逛悠,没有想到,Macbook上居然没有PgUp/PgDn/Home/End几个键,原因不祥,也许是出于设计的原因(iMac键盘上有),也许是因为微软拥有PgUp/PgDn的专利(那为什么iMac上有,还是设计原因比较靠谱)。
上网搜索发现,可以用Fn+上下左右,就分别代替了PgUp/PgDn/Home/End几个键,还比较好记。

换了一个模板,可不是我自己做的,我做的出不了炉了。


Nov 25 2008

PHP性能测试

这是我的php代码的性能测试方法,记录之。

第一步是在客户端(浏览器一端)测试整个HTTP请求过程的耗时,使用我前面提过的瑞士军刀charles,这可以测出一个HTTP页面请求的几个关键数据 Latency + Data Transfer time,Data Transfer Time很好理解,取决于服务器端响应数据的大小,比如如果使用了过复杂的HTML,或者很多CSS/Javascript都会导致传输时间变长。

而Latency可以分为三部分,一部分是网络时延,一部分是Web Server响应的时延,最后一部分就是服务器端的代码执行时间了,这三部分的和构成了客户端感觉到的Latency。

第二步自然就是优化了,所有优化的前提都是找瓶颈,上面的三个部分中代码执行时间相对比较容易控制,可以在PHP代码中加时标来精确测量,直到发现引发性能瓶颈的代码,比如可能是数据库的相关操作,或是一些不恰当的循环等,可以针对对应的代码相应的做改善,当然如果是数据库的话,可能需要调整数据库,比如加索引等。

如果瓶颈是Web Server的响应时延,我就没有多少经验了,还没有做过,希望能有机会可以做这方面的优化,比如做服务器的负载均衡什么的,感觉应该蛮酷。


Nov 23 2008

我要换模板

已经好久好久没有更换我的皮肤了,本来准备这个周末换一下的,顺便重拾一下Wordpress Theme的制作方法,不过呢,因为种种原因居然没有完成 (嗯,想了想,自己懒是最主要的)

好吧,下个礼拜,一定换。