2013

64位Win8下安装TL-WN322G+ V1.0驱动

TLWN322G+V1

驱动文件:http://www.k-res.net/dl/TLWN322GPV1.rar(已失效,有需要的朋友请留言吧)

压缩包中包含的是网上找到的64位win7驱动TP-Link官方早已放弃对此款无线网卡的支持,只有最新版本的3.0等才有官方支持win8的驱动,另外包中还包含使用同样芯片的ATHEROS AR5007UG 32/64位驱动,标称支持Win8,有兴趣的朋友也可以试试(Win8插上TL-WN322G+V1后自动搜索驱动就会被识别为这款!)

下面说下安装原版WN322G+时的一个小问题:直接从设备管理器中更新无法识别的黄叹号USB 2.0 WLAN设备的驱动时会提示“哈希值不在指定的目录文件中”,开始以为是64bit Win7的驱动已经无法在Win8使用,折腾了很久后发现其实是Win8的一个驱动验证机制导致的,好在通过特殊启动方式可以关闭,方法如参考文章中所示:

Continue reading…

使用distcc分布式编译加速Android NDK原生项目编译生成

随着项目规模的增大,源代码文件增多,结构越来越复杂,导致项目编译链接速度变慢是一件让人非常头痛的事!

在Windows上我们用Visual Studio可以使用IncrediBuild (http://www.incredibuild.com/) 这个非常好用的分布式编译工具,配合其自带的VS Add-In可以很方便的将大型项目的编译工作负担分布到网络上的其它机器完成,极大的缩短了项目编译时间,提高工作效率!

不过遗憾的是IncrediBuild目前只支持Windows系统和VS等一些编译环境,对于Android, iOS等交叉编译的移动平台开发环境就无能为力了。

其实对于linux系OS上还是有可用的分布式编译解决方案的,就是接下来我要说的这个distcc,项目介绍请猛击这里:https://code.google.com/p/distcc/

Continue reading…

对于Android NDK编译器ARM和Thumb模式的理解及Toolchain的切换clang编译器

以前在做Symbian的时候,曾经研究过ARM CPU的指令集问题,ARM处理器支持两套指令集,即ARM和Thumb。ARM为32位指令集而Thumb为16位指令集,理论上32位可以提供更快的执行速度但会生成更大的二进制执行文件,而16位的Thumb则恰恰相反,省地儿但慢,这也正是体现出了ARM对于嵌入式设备的专业性。对于我这种牺牲一切换速度的理念来说,当时就留下了ARM就比Thumb快的印象,以致于现在在做Android NDK原生开发时,也是优先用ARM指令集。(这个可以通过在Android.mk中加入LOCAL_ARM_MODE := arm控制,默认情况下NDK使用Thumb指令集)

但是最近在Xcode编译iOS项目时,注意到同为ARM处理器的苹果设备,使用的是Thumb指令集,而且好像还是某种新版本的Thumb指令集,小搜索了一下看到有人说这种armv7引入的叫做Thumb-2的指令集要比arm指令集更好!于是又重新搜索更新了一下大脑知识库…

Continue reading…

iOS6下慎用MPMoviePlayerViewController!

这个MPMoviePlayerViewController的事要从何说起呢,嗯……其实主要还是由于在播放视频时按Home键切出引发的问题:

先是测试发现游戏在播放开场视频时按Home键切换到后台后会触发libGPUSupportMercury.dylib: gpus_ReturnNotPermittedKillClient导致crash,关于这个异常大苹果的Technical Q&A QA1766(http://developer.apple.com/library/ios/#qa/qa1766/_index.html)已经交待得很清楚了,简单来说就是应用在处于后台状态时是不允许执行任何OpenGL命令的,包括前台时提交但尚未实际执行的缓冲指令!不过文档中提到的几个关键点我也都按规矩做了处理,稍作跟踪后发现,导致这个异常的原因是在应用播放视频时切到后台之后,MPMoviePlayerPlaybackDidFinishNotification通知被莫名其妙的触发了,导致后续逻辑按照开场视频播放结束开始执行,进而去加载OpenGL贴图,初始化状态等,于是自然被OS认为是违规调用了OpenGL命令,因此被kill掉了!

Continue reading…

Project Ne10在iPhone 4S上的试验结果

Project Ne10: https://github.com/projectNe10/Ne10
是由ARM官方人员创建并维护的一套基于neon SIMD指令集的优化函数库,可以用于提高多媒体,信号处理等计算的速度(类似于Intel的MMX和AMD的3D NOW!)。其实这个也是由于ARM意识到了现在很少会有iOS或Android等这些热门平台开发人员会去使用汇编优化的问题,才建立了这个开源项目。想想当初上学时学数字图像处理做算法,发现用MMX可以提高算法速度,然后吭哧了半天MMX的各种寄存器,指令集,然后很欢喜的看到提高了几十ms的速度后,那个欢乐啊,现在的程序猿真是幸福!
git clone了项目在Mac上用Xcode Version 5.0 (5A1413)试验一下,记录一下在我的iPhone 4S上的试验结果:
Continue reading…

2013年最后一天了

马上就2014了,这月过得有点忙,有点累,有点衰,也没时间丰富小博的内容,姑且躺在被窝里留个纪念吧,也算是这月有了一条。
祝各位访问到小博的朋友们,也祝自己新年快乐!

记录最近折腾eSATA外置硬盘的经历

之前由于实在受不了用USB2.0的小优盘从HTPC下载机上来回搬东西的又慢又要分批的痛苦之处,购入了ORICO 6518SUS3 这款eSATA+USB3.0的硬盘座:http://www.orico.com.cn/product/16_1874.html

IMG_0341a

之所以选择了这款eSATAUSB3.0双接口的硬盘座,是因为要在没有USB3.0有eSATA的老P45电脑和有USB3.0有eSATAB75M HTPC之间共同使用。

到货之后先试了一下USB3.0,顺利识别出并且速度也比较满意,配合ST31000528AS硬盘复制文件能达到硬盘80MB/S左右。接着试eSATA时却遇到各种问题: Continue reading…

关于Office 2013安装后每次打开Word Excel等都提示正在配置的问题

今天把一台PC的系统从Win 8升级到了Win 8.1,由于第一次升级安装的时候选择了保留设置和应用后重启几次快完成时报了个错又回滚了回去,看到有同学说可能是升级保留应用存在的兼容问题,建议只保留设置,于是又来了一边只保留设置的升级,这回虽然成功升级了,但是桌面的那堆软件图标和硬盘上装好的软件文件基本上就都报废了,于是又开始重装!

到Office的时候遇到点小问题,本来之前Win 8的时候装的是2013的普通版,后来升级后换了个VOL版,发现安装好后,每次启动Word Excel等都会有个一段时间的正在配置的提示,即耽误时间,又烦人,于是开始想办法解决。
Continue reading…

github克隆项目中的子模块submodule时遇到的问题

GitHub真是个开源大宝库,不只能学习代码,还能学习git的使用!

最近在研究Off-the-Record-iOS项目(https://github.com/chrisballinger/Off-the-Record-iOS)时,学习实践了git submodule的用法!

这个项目中有一个Submodules文件夹,包含了该项目所引用到的其他GitHub上的开源项目,最开始没注意到,直接Download ZIP拿下来的,发现XCode项目中一堆红色文件名,才发现原来还有很多依赖项目,仔细看了一下还挺不少,于是果断放弃手动挨个下载…

搜索了一下,发现项目的issue #87有人问到了类似的问题:https://github.com/chrisballinger/Off-the-Record-iOS/issues/87,按照下面的回答,重新git clone了项目,并使用git submodule init && git submodule update(1.6以后版本也可以直接用git clone –recursive代替)来更新项目中的依赖子模块,更了前几个之后又出现了新的错误:

Submodule path ‘Submodules/DAKeyboardControl’: checked out ‘5352d1ff2d1131d974d94406ed8fcf8eb068aa72’
Cloning into ‘Submodules/LibOrange’…
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Clone of ‘git@github.com:ChatSecure/LibOrange.git’ into submodule path ‘Submodules/LibOrange’ failed
Continue reading…