米连是个什么东东
Posted by john in Uncategorized on April 16, 2013
米连是个什么东东? 小米盒子的一个卖点,就是所谓‘米连’技术,也就是可以把移动设备的内容“投射”到电视机上。其实这也不是什么新鲜货,而是混合了airplay,DLNP和miracast的一个半成品。
AirPlay是苹果的技术,也授权给一些音响厂商,现在比较新的一些功放都有所支持。小米盒子部分实现了airplay协议,ios设备可以把音乐图片视频等发到小米盒子,但是实现还不完整,不支持mirror功能。一点疑问是不知道小米是否取得了苹果的授权,网站没看到明确说法。
至于DLNA,是sony,intel等厂商搞出来的一个协议,很多日本的电视机都支持。小米盒子实现了client和‘target’两部分,作为client,可以播放dlna server的内容,不过也许是协议的限制,播放DLNA server的视频内容时无法加载外挂字幕文件。作为target,可以接受小米手机等发来的图片和视频,很奇怪不支持音乐。而miracast,则还在开发中, 就这么个杂合体居然起个新名字就包装成新技术了。
upgrade debian to 6.0 (Squeeze)
Posted by john in Uncategorized on April 15, 2013
linode上的debian一直跑的是5.0 lenny,想做一次apt-get update居然失败,连续换了几个repo都不行,仔细检查,原来2009年发布的lenny已经处于unsupport状态了,一般的repo里面都已经不再有lenny,而需要要archive.debian.org的repo。
改好source.list,想着干脆升级到debian 6(squeeze)算了,于是按照通常思路,apt-get update; apt-get upgrade; apt-get dist-upgrade 期间遇到一个package依赖不对,干脆删除,升级完成后,修改source.list指向 squeeze,重新更新,悲剧了,网络不通,仔细调查,发现是ipv6好好的,ipv4不行,需要手工配置,折腾几下没弄好,干脆恢复升级前的snapshot(备份备份,对系统做重大改变之前一定要备份啊!) , 按照linode文档里面的方法,基本上就是:
先把source.list改成下面的
# main repo deb http://ftp.debian.org/debian/ squeeze main deb-src http://ftp.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main
在做apt-get update; apt-get dist-upgrade就搞定了。
奇怪的是升级完成后,没有装mysql,wordpress自然也无法启动,手动装一下就好。
FA-66 again
FA-66是roland的6in/6out的火线外接声卡, 自从换了macbook air之后,一直处于休息状态,air没有firewire接口啊
偶然得知apple有thunderbolt to firewire800的转接线,心中一动,也许可以让FA-66重获新生呢?
于是去苹果网站订购了thunderbolt到firewire800的转接线,因为FA-66是firewire400的,所以又去某宝买了个moshi的firewire800到400的转接线,收到货后,迫不及待的开始了试验:结果令人失望,无论直接接在mac book air上,还是通过硬盘盒串联,都不能识别,根本连电源灯都不亮。
roland日本网站上有这么一句:
※Apple Thunderbolt – FireWire アダプタで変換してのご使用は、動作を保証いたしかねます。正常に動作しないケースが確認されております。
顿时心里凉了半截。
FUSE for OS X
sublime text 2 有个很方便的plugin,可以用sftp直接编辑remote的文件,可是这个plugin是收费的,而且界面也不够友好。想到可以用FUSE把remote的文件系统mount到本地,于是查找macfuse,才发现这个项目已经停止了,后继者是FUSE for OS X
直接下载两个package,安装。然后用
sshfs john@remote_host:/mydir ~/sshfs/ -ocache=no -onolocalcaches -ovolname=ssh
命令mount remote的文件系统,卸载就直接用umount ~/sshfs就可以了
趣味数学题
Posted by john in Uncategorized on June 14, 2012
幸运的饭桶发布了一道小学2年级女儿的数学题:有4个算盘珠子,能够在算盘上组成几个3位数?一帮人热烈讨论。我晚上一边游泳一边不停的心算,得出来49。出来后在iphone上整理思路发现漏了一个400,答案应该是50。
可是这个50到底对不对,作为程序员自然想法是编程验算一下,于是晚上看球的时候,拿出ipad,装了个python,很快写出了下面的程序:
def spn(n):
h = n / 100
t = (n - h * 100)/10
s = n - h *100 - t*10
return [h,t,s]
def sum(list):
s=0
for i in list:
s+=i
return s
def ck(n):
return sum([d[x] for x in spn(n)])
d ={1:1,2:2,3:3,4:4,5:1,6:2,7:3,8:4,9:5,0:0}
r=[x for x in range(100,801) if ck(x)==4]
print r
print "resulr ",len(r)
运行结果,证明我的答案50是正确的,可是这段代码不够漂亮,google一下,发现我写的sum函数系统已经有了,把一个数字拆开的函数spn也有更好的方法:用str变成字符串,再当作list处理。
def ck(n):
return sum( [d[int(x)] for x in str(n)] )
d=[0,1,2,3,4,1,2,3,4,5]
r=[i for i in range(100,801) if ck(i)==4]
print r
print "result ",len(r)
运行结果如下
Johns-Air:Helper(master) john$ python /tmp/p.py [103, 107, 112, 116, 121, 125, 130, 152, 156, 161, 165, 170, 202, 206, 211, 215, 220, 251, 255, 260, 301, 305, 310, 350, 400, 503, 507, 512, 516, 521, 525, 530, 552, 556, 561, 565, 570, 602, 606, 611, 615, 620, 651, 655, 660, 701, 705, 710, 750, 800] result 50
思路很简单,就是算100到801每个数字需要几个珠子,等于四就记下来。
linode512 openssl performance
OpenSSL 0.9.8o 01 Jun 2010 built on: Thu Feb 10 20:02:37 UTC 2011 options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) aes(partial) blowfish(idx) compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -march=i686 -Wa,–noexecstack -g -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DSHA1_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM available timing options: TIMES TIMEB HZ=100 [sysconf value] timing function used: times The ‘numbers’ are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md2 1111.16k 2358.19k 3020.20k 3482.97k 3465.22k
mdc2 0.00 0.00 0.00 0.00 0.00
md4 22889.25k 91362.07k 240970.75k 445882.71k 596669.78k
md5 21355.02k 68243.58k 190466.99k 295882.07k 367184.55k
hmac(md5) 19581.87k 64380.24k 174561.45k 314281.30k 386588.67k
sha1 20708.70k 60001.73k 142597.63k 214354.26k 259287.72k
rmd160 12445.10k 34347.48k 61032.45k 87747.24k 95297.54k
rc4 241504.99k 266422.87k 241990.91k 242539.86k 244763.31k
des cbc 45638.82k 51675.80k 51744.68k 50136.41k 50090.95k
des ede3 17488.60k 18787.01k 17345.71k 17180.60k 15564.80k
idea cbc 0.00 0.00 0.00 0.00 0.00
seed cbc 0.00 0.00 0.00 0.00 0.00
rc2 cbc 21084.94k 22638.19k 22209.11k 21743.96k 22044.67k
rc5-32/12 cbc 0.00 0.00 0.00 0.00 0.00
blowfish cbc 76885.90k 81148.00k 81156.10k 77797.72k 82643.63k
cast cbc 48770.16k 51143.34k 48810.92k 50297.17k 50189.65k
aes-128 cbc 52170.21k 89064.66k 108961.88k 113282.73k 112762.88k
aes-192 cbc 54572.73k 73673.75k 86437.08k 93029.38k 97577.64k
aes-256 cbc 47864.41k 67428.03k 79630.59k 79793.83k 79140.18k
camellia-128 cbc 0.00 0.00 0.00 0.00 0.00
camellia-192 cbc 0.00 0.00 0.00 0.00 0.00
camellia-256 cbc 0.00 0.00 0.00 0.00 0.00
sha256 11873.65k 27703.10k 45966.76k 56730.97k 61287.08k
sha512 9399.14k 39709.72k 67339.95k 104067.75k 123805.70k
aes-128 ige 90179.69k 97617.13k 99146.41k 102565.21k 103833.60k
aes-192 ige 76513.25k 85180.93k 83190.44k 85140.14k 86106.11k
aes-256 ige 70858.75k 77512.58k 77123.41k 77456.04k 77914.11k
sign verify sign/s verify/s
rsa 512 bits 0.000505s 0.000038s 1980.4 26552.3
rsa 1024 bits 0.002218s 0.000096s 451.0 10417.3
rsa 2048 bits 0.011587s 0.000288s 86.3 3466.8
rsa 4096 bits 0.070915s 0.000912s 14.1 1096.2
sign verify sign/s verify/s
dsa 512 bits 0.000385s 0.000442s 2595.2 2264.6
dsa 1024 bits 0.000966s 0.001193s 1035.1 838.3
dsa 2048 bits 0.002945s 0.003605s 339.5 277.4
Cocos2D基本概念
Posted by john in Uncategorized on December 21, 2011
基本概念
Cocos2D由下面这些基本概念:
- Scenes
- Director
- Layers
- Sprites
Scense 场景
场景是一个相对独立的流程,对于游戏来说,可能会有这些场景:开场动画,主菜单,第一关,过场动画,第二关。。。。最终过关动画,最高分等等。场景也常常叫做screen或者stage。
每个场景包含多个Layer
Director 导演
CCDirector 负责场景间的调度,也就是怎样,何时从一个场景切换到另一个场景。
CCDirector是一个共享的对象(singleton),它知道当前活动场景,并且维持一个场景堆栈,用来实现(scene calls,也就是暂停一个场景,切换到另一个,并且可以回到暂停的场景继续执行)。
同时,CCDirector还负责初始化OpenGL ES。
Layers 层
CCLayer 对象的size是整个drawable区域,并且可以自己绘制自己。每个层可以是透明,半透明或者部分透明的(例如,不透明的层上有一些透明的洞,可以看到下面的层)。层定义了表现和行为,所以大部分的程序量是编写CCLayer的子类。
CCLayer也是定义事件驱动的地方。事件在各个层中从上到下传递,直到有一层处理它为止。
Cocos2D也提供了很多现成的CCLayer子类可供直接使用。
Sprites 精灵
cocos2d’ sprite是2D的image,可以移动,旋转,缩放以及动画。
精灵可以有父子关系,父精灵移动,旋转等变换时,子精灵也跟随变换。
game engine again
Posted by john in iphone, Uncategorized on December 6, 2011
下面介绍几个重量级的game engine
- Unity3D是一个完整的跨平台的game engine,同样的source可以在PC,mac,网页,ios,android和游戏机等多个平台运行(当然对于不同平台的license费用不同)。
- UDK – Epic公司的Unreal Development Kit,鼎鼎大名的Unreal engine, 听说过这些游戏么?他们有一个共同点,都使用了Unreal Engine。Gears of War, Mass Effect, BioShock, Unreal Tournament, Deus Ex, GRAW, Red Steel, Borderlands, Brothers in Arms, Homefront, Mirror’s Edge, Singularity, Rainbow Six: Vegas. UDK支持各个平台,包括IOS和android的游戏开发,对于教育和非商业应用免费,商业应用需要商业license,具体为99美金的 license费用。另外收入超过5万美金的部分要分给Epic 25%的分成
- Panda3D 是一个免费开源的3D渲染和game engine,采用修改过的BSD license,可以用于商业开发。Panda3D的核心使用C++写成,提供pythyon bindding所以游戏开发的大部分工作都可以用python进行。Panda3D是由迪士尼为他们的大型多人在线游戏“Toontown”(卡通城) 而开发的。2002年它作为免费软件发布。Panda3D 现在由迪士尼和卡耐基梅隆大学娱乐技术中心联合开发。
free ios game engine
ios的游戏开发,离不开game engine, 从零开始做一个game engine是不可想像的。
maniacdev 介绍了几个开源的game engine,其中有几个比较引人注目。
Burtons Media Group 也有一篇介绍。
3D engine
- Galaxy Game Engine 是个完整的game开发环境,包含3Dengine,世界编辑器等等,BSD license
- iSGL3D 似乎只是个3D graph engine,虽然有利用iSGL3D的游戏,但是如果缺乏完整的游戏开发支持,基于iSGL3D的游戏开发还是比较困难的。
2D engine
- Cocos2D 是一个成熟的2D game engine,包含游戏需要的所有功能:Physics,Sound,Level Map parser等等,有很多成功实例。MIT license
- Sparrow Framework 是一个轻量级的2D game engine,容易理解,特别是有flash开发经验的人容易上手,简化版BSD license
