[Tip]iOS上的OpenGLES无显示问题

最近的项目用到了OpenGLES。 两个很容易出问题的地方,容易造成很难找到的Bug。 一个是EAGLLayer的大小,必须是32的倍数。否则用OpenGL画出来的东西,统统不会被显示。 Apple的文档:In iOS 4.2 and later, the performance of Core Animation rotations of renderbuffers have been significantly improved, and are now the preferred way to rotate content between landscape and portrait mode. For best performance, ensure the renderbuffer’s height and width are each a multiple of 32 pixels. Apple Document 另一个是纹理的大小,必须是2的次方。 也就是说,如果使用一张图片来生成纹理,那么图片的长和宽的长度都必须是2的次方,否则加载纹理失败。

[Ruby]debian上更新gem

用Rails的时候需要配环境,配环境的大头是安装gem,安装gem的时候就会遇到各种令人崩溃的问题…Orz… 环境是Debian,需要安装refinerycms,出现了gem版本过低的错误。 比较通用的做法是 $gem update –system 但是可能会遇到这个错误 ERROR: While executing gem … (RuntimeError) gem update –system is disabled on Debian. RubyGems can be updated using the official Debian repositories by aptitude or apt-get. 这种情况下就需要自己动手。 这里需要安装的是gem 1.3.6的版本。 先得到rubygems-update-1.3.6.gem,可以直接下载得到 $wget http://gems.rubyforge.org/gems/rubygems-update-1.3.6.gem 然后安装这个叫作rubygems-update的gem $sudo gem install rubygems-update-1.3.6.gem 也可以 $sudo gem install rubygems-update -v=1.3.6 然后执行update_rubygems这个脚本 这个文件的位置由之前gem的设定而定。 $which update_rubygems /home/XXX/.gem/bin/update_rubygems […]

PlistBuddy

最近由于工作需要,发现了这么一个小工具。 PlistBuddy是一个Mac里的命令行下读写plist文件的工具。 位于/usr/libexec/下,由于这个路径不在默认的PATH里,需要通过绝对路径/usr/libexec/PlistBuddy引用。 使用起来很简单,功能也很丰富。 举几个例子: A.plist内容如下 B.plist内容如下 通过命令打印出plist的内容 /usr/libexec/PlistBuddy -c “print” A.plist 得到结果 Dict { KeyA = ValueA KeyC = ValueC KeyB = ValueB } 通过命令得到一个entry的值 $ /usr/libexec/PlistBuddy -c “print KeyA” A.plist 输出 ValueA 这些都是简单的功能。PlistBuddy最好用的一个功能应该算是merge了。 merge命令可以合并两个plist文件,一个认为是源文件,一个作为目标文件。 比如命令 /usr/libexec/PlistBuddy -c “merge A.plist” B.plist PlistBuddy把A.plist中的条目逐个插入到B.plist中,如果B.plist中已经有相同Key的条目就跳过此条目。 如上面的命令,得到结果 $ /usr/libexec/PlistBuddy -c “merge A.plist” B.plist Duplicate Entry Was Skipped: KeyA […]

贝塞尔曲线拟合

接上一篇Blog,这里用贝塞尔曲线来平滑多个点。 和样条插值不同,在多个点上作贝塞尔曲线的时候,曲线只穿过首尾两个点,中间的点都是作为控制点。 移动控制点,曲线也随之形变,可以造成一种拉扯的效果。在各种作图工具中,经常使用贝塞尔曲线来画曲线。一般的操作都是先画一条线段,然后可以通过拖动一个控制点来调整线段的弯曲程度。 作多点贝塞尔曲线只需要一个公式。所有的点的X值,被归一化到[0,1]区间内。 具体理论,可以参考这个页面Bézier curves。89年创建的,可有年头了。 这里还是贴代码吧。 首先需要得到X区间的总长度。 CGPoint startPt = [[_points objectAtIndex:0] CGPointValue]; CGPoint endPt = [[_points objectAtIndex:(self.pointCount – 1)] CGPointValue]; float amount = endPt.x – startPt.x; 然后就是曲线方程了,这个比样条插值要简单不少。 rank是指总的阶数,也就是实际的点数。这个函数表示n个点的贝塞尔曲线在x处的值。 这里的ux属于区间[0,1] float (^bezierSpline)(int rank, float ux) = ^(int rank, float ux) { float p = 0.0f; for (int i = 0; i < rank; i++) […]

Jon Morrow: How to Quit Your Job…

看到这类文章,总是感到很震撼,或许是因为看到了一种不同的,理想中的生活吧。 HN上的一篇文章就是这么一个励志故事。 Jon Morrow本来和我们一样,住在租来小房间里,对自己的生活不满意,总是期盼自己能有更多的时候做自己的喜欢的事情,有更多的时间陪陪家人。然后,像我们大多数人一样,他没有做什么,只是想想。直到一次车祸发生。 由于腿部14处骨折,在接下来的几个月里,Jon能做的只是忍受痛苦,还有思考自己的人生、理想和事业。他无法放弃这些,于是他辞职了。很爽快的卖掉了自己几乎所有的东西,开始写Blog。改变的过程听起来简单,但却是需要坚持的意志力。一段全身心投入事业的时间之后,Jon的事情有了起色。自己的网站每天有2000多个访问者,也应邀做了一家知名网站的编辑。 然后呢?Jon开始环视四周,考虑是不是要离开自己住的这个该死的地方。“你有没有在某一天醒来之后,发现自己其实很厌恶你住的这个地方?天气很差,邻居唠叨,你不愿意请朋友到家里来,因为它看起来一团糟”。于是,在换了工作之后,Jon离开了自己的城市。 Jon的新办公室在墨西哥的马萨特兰,度假胜地。“我在写这些的时候,我就坐在我的阳台上,看着海豚从海里跃起⋯⋯“ 是不是觉得,太爽了吧!我也是这么想的 :] 但是到此为止,Jon的故事其实还不完整。 Jon患有一种严重的疾病,从颈部一下都不能行动。疾病的疗养费用是很高的,美国的医疗制度会给予Jon资助,但是做为获得资助的条件,要求Jon每月收入自己只能保留一定数量,其余上交。这当时不是很舒服的事情了,于是Jon开始自己筹钱。一开始就放弃资助是有很大风险的。当然,这个故事有个好的结局,Jon通过帮助别人,比如教人写Blog,给一些公司提供咨询等等,有了不菲的,足以应付医疗费的收入。 很酷!不是吗? 是不是该做点什么了?嗯,我想,我们还是先冷静冷静吧,励志故事总是容易让人冲动的,但是改变却不应该是一时之勇。 毕竟我们能看到的故事都是有一个好结局的,那些随便辞掉的工作而毫无建树的家伙们是不会出来给我们讲故事的。 冷静一下,如果自己内心真的渴望改变,这些改变的动力是可以积攒的。直到有一天开始行动,凭借多年以来积蓄的力量,我们才能走的更远。