2016

博客服务器IP更换,忘记修改CDN源站地址,失误了!

最近发现PV急速下滑,虽然原来也不高吧,但至少还有点搜索引擎排名靠前的关键字,这两天却没啥访问了,仔细想想原来是前几天主机提供商更换服务器IP,只改了DNS上的,看来下百度站长上的一堆抓取异常才意识到原来忘记修改专门给搜索引擎用的CDN的源地址了,真是失误!

Unity3D中LoadLevelAsync异步加载场景的延迟切换问题

Unity中,对于异步加载场景的方式,脚本文档中有一定的解释和示例代码:http://docs.unity3d.com/ScriptReference/Application.LoadLevelAsync.html
其默认情况下,会在异步加载完成后立即切换到目标场景,但有些时候,需要在切换完成时先做一些操作,比如更新UI显示,释放资源等,也就是延迟切换场景的时间,这时就需要用到LoadLevelAsync返回值AsyncOperation的allowSceneActivation属性,将其置为false后,就不会立即切换场景了,但是有一个小问题就是,引擎底层对于这个逻辑的处理会变为,场景加载完成后,AsyncOperation的isDone以及progress都不会是正常的完成标记,也就是true和1.0,而是false和0.9,所以在需要手动置allowSceneActivation为true切换场景的位置的加载完成逻辑判断方式也需要调整为progress的0.9了。

居然被Adsense警告了

发布商不得诱导用户在无意中点击 Google 广告,也不得设法让用户过分关注广告单元

加了这么长时间的文字小箭头就被警告了,我这乡下小博这点PV居然也会被警告,无语。

Unity3D使用MonoDevelop进行开发时的项目编译问题

自从VS2015出现以后,Unity3D的新版本也直接内置了对其支持,写代码和调试都非常方便,但是在没有VS2015的开发环境下,比如没装或者是装不了(Mac OSX)下,用Unity自带的MonoDevelop也还算方便。
这次记录的是一个之前太注意的小问题,C#脚本中写了个带默认参数的函数,结果发现Unity编辑器可以编译运行,但在MonoDevelop调试时却提示编译错误,检查了下,发现原来是默认用MonoDevelop调试时,这个IDE也会对打开的项目进行编译,但其编译的方式和Unity本身不太一样,对这些后加入支持的代码写法并不支持,解决方法也很简单:Tools->Options->Unity->Debugger->Build project in MonoDevelop,这个选项勾掉就可以了。

关于PS4手柄(DS4)通过蓝牙连接的小问题(Win7,Win10 1703)

前几天修理了一个左模拟摇杆癫痫了的PS4手柄,换掉3D摇杆后问题解决,然后测试手柄时发现了这个神器:DS4Windows http://ds4windows.com/,用usb线连接手柄后可以检测手柄的大部分功能,比如光条(能改颜色哦)、重力感应、加速度等,还可以将PS4手柄模拟成Xbox 360的手柄,完美支持所有可用360手柄的PC游戏。另外,本人非常喜欢这次的DS4手柄改进,第一次拿在手里时就有一种说不出的舒适感(之后就再用PS2、PS3的就感觉有些不爽了,哈哈),再加上这个神器软件的存在,比当年PS3手柄的那个ScpServer要方便的多了!
后来发现神器作者的主页上还提到了可以支持蓝牙,正好手里有个N年前买的一个Broadcom 2046芯片的usb小蓝牙适配器,拿出来试试看无线效果如何,结果,问题来了:用PS+Share键开启DS4的强制配对后,蓝牙设备中可以看到Wireless Controller,连接后就是让确认了一下设备,也没让输什么0000的默认配对码,然后一瞬间手柄的光条从配对状态的短促快闪变成了已连接状态的常亮,然后Win端开始给设备安装驱动,再之后手柄光条灭掉,驱动装好后也没有连接上的无线手柄设备了,单按PS键后,Win端提示有设备请求连接,确认后就又断开了。
Continue reading…

OpenWRT下libv4l的编译问题(uClibc++、stdc++相关)

最近研究路由器上的摄像头监控,要用到libv4l2的库,结果用OpenWRT SDK编译时却遇到了问题,路由器cpu是MT7620A,用的SDK是OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2,用./scripts/feeds安装了libv4l后,直接make报错:

In file included from v4l2-compliance.cpp:37:0:
v4l2-compliance.h:25:18: fatal error: cerrno: No such file or directory
 #include <cerrno>

看了下,是c++写法下的errno头文件找不到,V=s看了详细日志,-I的头文件搜索路径里确实没有cerrno,但是这个文件确实存在于这里:staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/include/uClibc++/,也就是说-I少了个带uClibc++的路径,看了半天sdk里的各种.mk,也没找到什么配置参数方面的玄机,可又不想傻加上个-I,或者都改成errno.h,于是开始搜索…
Continue reading…

Android应用图标修改后真机显示不更新的问题及mipmap图标

问题大致就如标题描述的那样,应用图标修改后重新打包安装到设备上时并没有变化,当然,前提是已经排除了人为因素导致的res内图标文件替错等原因。许久以前,在Android的原始时期,1.6、2.2时代时,就曾经在HTC的Sense UI上遇到过类似问题,当时也没太在意,现在在OnePlus One上(CM12s系统)又遇到了同样的问题,决定彻查一下原因。
百度下发现MIUI等也有类似的问题,基本确定是Launcher对应用图标建立了缓存,最直接的破除缓存的方法就是修改应用的Package Name,换包名后重装图标就会显示正确,明显就是没有缓存的特征!然而,应用发布过后一般是不会更换包名的,所以这个方法实际应用意义不大,仅仅是确认了这个图标缓存的机制。
这之后又查到了一些解决方法,如删除 /data/system/customized_icons 路径下的响应图标(这个需要root,且在5.0上没有这个路径,估计是Pre Lollipop用的),再如杀掉Launcher的进程,强制其重启刷新缓存(这个貌似不科学,因为重启Launcher的话应该和重启系统性质是一样的,但是我试过重启机器后图标依然没有刷新,再有就是CM上也没找到明显的Launcher进程,只有个systemui看起来比较像,不过也不敢强制结束,怕玩坏啊,哈哈!),这之后又自己尝试了下别的可能作为缓存key的要素,如改VersionCode,改VersionName,同时改VersionCode和VersionName,改res下的图标文件名等,均无效!
Continue reading…

iOS Android平台下的wchar_t默认size问题

很久以前曾经被wchar的问题在iOS和Android上被坑过,这次是在参研一份有年头的代码时又遇到了宽字符的问题,当然,也是和wchar有关系的,就是这个wchar在各个系统平台下的sizeof问题,关键的是一段UTF-8转UTF-16的代码:

size_t Utf8ToUtf16(const char* src_, wchar_t* dest_, size_t destlen_, size_t srclen_ /*= 0*/) 
{
	if (srclen_ == 0)
		srclen_ = _utf_length(src_);
	size_t destcapacity = destlen_;
	for (size_t idx = 0; ((idx < srclen_) && (destcapacity > 0));)
	{
		wchar_t	cp;
		unsigned char	cu = src_[idx++];
		if (cu < 0x80)
			cp = (wchar_t)(cu);
		else if (cu < 0xE0)
		{
			cp = ((cu & 0x1F) << 6);
			cp |= (src_[idx++] & 0x3F);
		}
		else if (cu < 0xF0)
		{
			cp = ((cu & 0x0F) << 12);
			cp |= ((src_[idx++] & 0x3F) << 6);
			cp |= (src_[idx++] & 0x3F);
		}
		else
		{
			cp = L'?';
		}
		*dest_++ = cp;
		--destcapacity;
	}
	return destlen_ - destcapacity;
}

这段代码在win下可以正常将utf-8的char*转换为utf-16的char*,但在Android, iOS下却不能得到和win下一样的转换结果,刚发现这个问题时,以为又是当年遇到的wchar坑,宽字符函数不支持之类的,但是仔细看了下并没有用到什么字符串函数,转换部分也是自己实现的,最后在各平台调试器的帮助下找到了问题:
Continue reading…