无题

每天都是同样的线路,家和公司连成的一条地铁线路。

某日请假,因一些私事,换了一条路走。即使不是上班时间,城铁上还是好多人,于是站在窗口,困顿无表情的朝外望。城铁开出不远可以看见一个小火车站,红皮火车呼呼前行,几步一鸣笛。绿皮的车厢停靠在站里,前面的铁轨延伸到远方。不知这铁轨延伸到哪里,是否能够一直走,向北,到达那个东北小镇,那里是我的家乡。

恰逢连雨天结束,晴空万里。城铁边总能看到茂密的树林,错落有致的点缀这城市。小时候,总会见到这样的树林。离镇子不远的某个小乡村附近,有条大河,我和伙伴们总会去那里,那附近有好多树林。我们会经常跑到那河边玩耍,等到玩累了,在河边聊天或是去树林里采一些野生的果子吃,那边的野果味道很不错。那时候我们也没有什么环保意识,会把整支树杈弄下来拿回去,慢慢品尝上面的野果。

那时的铁路连接的是一个个看起来很远的村落或是城市。我在小小的地方长大,等我长大了,小小的地方就显得更加小。那些伙伴褪去稚气走进学校,有人变成同学,有人变成陌生人。很自然的,我又继续认识新朋友,一起玩耍或是学习,小镇那不宽大的街头曾经是我们的巨大广场。那时我总想起那条长长的通往外面的铁路,自信的打开地图,指着两座城镇的自以为是的说,这点距离,不远。

不久,那熟悉的铁路上的火车载着自己离开那看似渺小的地点,时间催生出的巨大空间分隔开每个人。有人留在家乡,有人再也没有音信,只能从偶尔碰到的朋友或同学几句寒暄中感受到隐约的行踪。如果信手打开地图看到那些看似很近的小点时,我再也无法衡量中那之间的距离。

到最后,一直陪伴自己的,也就仅仅只有时间而已。

(写于2012.6.27,2013.8.27续个尾)

sinatra “incompatible character encodings: ASCII-8BIT and UTF-8”问题

使用sinatra的时候出现了“incompatible character encodings: ASCII-8BIT and UTF-8”报错。这个应用是使用haml并且在haml里使用markdown方法去读markdown文件来作为模板解决方案的,如果Tilt读取haml是一种编码格式而rdiscount读取markdown是另一种编码,应该会产生这问题,于是google了一下,找到如下一个解答:

Incompatible character encoding in simple Sinatra app

其原因大概是Tilt使用了IO.binread读取后编码为ASCII-8BIT,而RDiscount则读取文件后转换为需要的编码格式,但如果需要的格式是ASCII-8BIT时就会失败,它直接把utf-8编码的字符串传给了Tilt。此类问题出现在ruby1.9+的版本上。可以通过使用File.read代替Tilt默认的IO.binread,或者读取完后强制转换成你需要的编码格式:

示例代码:

示例中使用的是erb模板,haml也是一样的,我使用force_encoding的解决方案,运行通过。

我遇到问题时各个包版本如下:

  • ruby:2.0.0
  • Tilt:1.3.6
  • rdiscount:2.0.7.1

我的某个服务器就没出现这问题,应该是和某些版本有关的。

今天在微博上喷了一个大牛,其实我并不是针对他本人或是想怎么样。

我见过不少大牛,他们平时看起来很忙,并没有太多的时间营销自己或者做什么,他们只是默默做自己的事情,然后分享出去。

我去过不少论坛,那里会有不少老资格会员,整个版面上除了少数人的技术问题和分享外,大都是晒晒我的设备或者技术移民之类的话题。

我从前在微博上关注不少所谓的技术牛人,他们每天的俏皮话很多,总有各路消息。

我去过不少博客,很多博客都有不准确或者误导人的文章,有些甚至是直接用谷歌翻译直译过来贴上去。

我去过不少技术社区,那里充斥的最多的是科技产品的新闻和技术公司的开怀笑话。

我并不想谈论任何人,我只是对这浮躁的气氛感到失望。

秋天的风

秋风在一夜之间降临,夏天金黄的阳光开始摇晃,褪下鲜艳的色彩。

所有植物都垂下了头,绿色表面下透出苍黄的衰老气息。饱满种子和坚硬外壳下的无力老迈根茎,等待阵阵秋风带走身上的青绿和甜蜜,等待躯体埋入脚下的土地,在低吟的时间之歌中腐化消失,不留下一点色彩和记忆。

最后,人们欢笑着,迎来一个美丽的丰收季节。

cocos2d纹理像素格式

译自:Understanding pixel format in cocos2d v0.7.3

纹理的像素格式是图像存储在GPU内存的方式。

你可能会见到以下像素格式:

  • RGBA8888(32位)(kTexture2DPixelFormat_RGBA8888)
  • RGBA4444(16位)(kTexture2DPixelFormat_RGBA4444)
  • RGB5_A1(16位)(kTexture2DPixelFormat_RGB5A1)
  • RGB565(16位)(kTexture2DPixelFormat_RGB565)

RGBA8888:

红色通道、绿色通道、蓝色通道和alpha 通道各8位。
如果想获得最好的图片质量,使用这种格式是很靠谱的。
但它会占用的内存会比16位的纹理多一倍,在IPhone上内存是很宝贵的资源,这个你懂的。
自然的,它的运算速度也是相对较慢的。
常用的地方:整个场景的背景图片、大量渐变色的图片。

RGBA4444:

红色通道、绿色通道、蓝色通道、alpha通道各4位
它对每个通道都有不错的支持,还能保证相对良好的速度和内存占用率。
常用的地方:需要有不同的透明度精灵。

RGB5A1:

红、绿、蓝三色通道各5位,Alpha通道仅有1位。
RGB通道表现良好,但是Alpha通道可就惨了。它在内存占用和速度上表现不错。
常用的地方:精灵需要透明度上的表现,但是透明度的表现上只有两种:开或者关。

RGB565:

红色通道5位,绿色通道6位,蓝色通道5位,这可怜的孩子没有Alpha通道。
它能尽最大努力的给你一个高品质的16位纹理,前提是你不需要透明度的支持。
常用的地方:游戏中的背景图像。

继续阅读

cocos2d制作触摸反馈按钮

使用cocos2d制作按钮的时候,需要触控反馈,比如有两个素材:button.png、button_hint.png。正常情况下显示button.png,而点击时选择button_hint.png。如果不想做一个精灵动画的话,可以考虑用如下方法:

首先声明支持单点触控委托:

初始化的时候使用button.png

然后在ccTouchBegan里面进行触摸检查,被触摸的时候使用setDisplayFrame来替换:

最后在ccTouchEnded里面把内容换回来:

最后不要忘记移除触摸委托就OK了。

不过如果想要更集中的管理代码或者需要动画的话,可以考虑使用如下方法:

具体实现方案可以参考平时制作精灵动画的方法。

如有错误,还请指正,谢谢。

cocos2d的坐标转换问题

cocos2d为转换坐标提供了以下几个方法:

如果对具体的坐标系不了解,可以参考下面两个文章:

以上四个方法主要涉及两种情况:

  1. 从当前坐标转换为世界坐标

    这里一定要注意的是,调用者(消息发出者)必须为需要转换坐标对象的父节点(parent node),参数是需要转换对象的坐标(相对于父类的坐标)。返回值是世界坐标;
  2. 从当前坐标点转换为相对某个CCNode的坐标

    node2并不是node1的父节点,node1获得的是相对于node2坐标系的坐标。

以上的调用并没有考虑anchorPoint(锚点)信息,如果需要获取相对于锚点作为参考点的坐标,则调用以下方法:

不使用AR相关方法则获取相对于坐标(0,0)的坐标,如果使用AR相关方法,则获取相对于锚点的坐标。

如果有错误,还请指教。

So young and old

从午后窗外的刺眼阳光和洁净白云

到北方海边的人工沙滩和浑浊浪花

都成为印在脑海里残缺和扭曲影像

远去的背影后面是一个深长的句点

绽放或老去

都变成时间中渺小的点

那些回忆

伤感或快乐的

也将随风而去

终点

 

awk将多个值赋给shell变量

平时我们使用awk的时候,很多变量赋值是直接使用类似下面的方法:

或者很多时候我们有很多值,但是只是为了整理出一个csv或者其他什么文件给我们看而已。

但是如果我们需要拿到awk返回的值并进行进步一shell处理的时候(比如拿回地址进行下载并保存)就麻烦一些了,当然你可以在awk中使用shell脚本,双引号和system函数都支持这样调用,但如果你不怎么喜欢混写的话,可以这样赋值:

这样便拿到你想要的值了。