手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2013年09月14日的文章

鼠标左键突然失效

今天鼠标的左键突然失效,这是用mac系统以来第一次发生这种事情。让我非常震精,因为刚刚升级到了10.8.5,我以为是升级导致的,所以我google了一下,居然发现很多人有这样的问题。

看这里:http://bbs.weiphone.com/read-htm-tid-5168399.html

有人的解决方法是:关上盖子,等一段时间就好了

有人的解决方法是:关闭蓝牙,再重启

当然也有人选择了重启蓝牙鼠标,这TMD居然也正常了?(因为原来连触摸版的左键也不正常,所以才纳闷)

所以我比上文中那位关闭蓝牙鼠标的人幸运多了。不知道以后还会不会发生类似情况。做个记录。。

这是上文链接中的页面所讨论的内容
  1. 《[讨论]MAC下左键失灵问题的追踪和探讨》 http://bbs.weiphone.com/read-htm-tid-2709680.html  
  2. 本人自用的MBP374,Mac版本雪豹10.6.8  
  3. 现象:mac下突然出现蓝牙鼠标左键和触摸板单指击同时失灵的情况:移动鼠标有指针的相应移动,有鼠标右键和双指点击鼠标右键的正确相应。但是把鼠标指针放到Dock上时,没有相应的图标放大的效果。也无法实现用鼠标左键关闭窗口等操作。但是可以用键盘上的按键:可以Command+W关闭窗口等。  
  4.   
  5. 问题出现前,曾在Bootcamp下进入Windows 7系统,并在win7下进行了Flash的更新。然后在Mac下尝试使用safari 5.1,为了装支付宝插件,结果发现又不支持safari5.1,遂作罢。然后在safari下安装了Ad block和expose两个插件,然后就不记得什么了。。。后来就出现了上面的情况。随后尝试在启动时按shift进入安全模式;尝试启动时按command+option+P+R复位什么PRAM吧,都不能解决问题。  
  6.   
  7. 在我认为没有办法的时候,合上了笔记本休眠,在过了几个小时后再唤醒后,发现问题消失了。这个时候蓝牙鼠标没有开,但触摸板单击是可用的。然后我又做了磁盘权限的修复。删除了safari下刚刚安装的插件(属于乱投医)。不知道是否可以避免问题的在此出现。  
  8.   
  9. 先把问题出现的情况记录下来,万一以后再次出现,也好有个进一步和大家分享的机会。  
  10. 今天晚上在使用中再次出现了问题,并发现:用鼠标右键选择关闭bluetooth后,触摸板就工作正常了。  
  11.   
  12. 但是直接重新启用蓝牙后,蓝牙鼠标和触摸板的左键又都不能用了。  
  13. 后来我又发现,把蓝牙关闭后,关闭鼠标上的电源开关,重新打开蓝牙后再打开开关,发现设备重新连接后,问题解决了。  
  14.   
  15. 我的鼠标是罗技的V470,并且已经安装了罗技的相对动应用程序。不知道是罗技的硬件问题,软件问题还是苹果的雪豹问题?  
  16.   
  17. 独家奉献,供大家参考切磋。  
  18. 还有这位同学也遇到了同样的问题:http://bbs.weiphone.com/read-htm-tid-1341319.html 2010年的帖子,话说这个异象是一年投胎一次么?  
  19.   
  20. 我的情况:rMBP,Mountain Lion,罗技M555b鼠标,同样复现了这个问题两次。  
  21.   
  22. 第一次重启机器没有解决问题,一怒之下重启了第二次,问题没有了。  
  23.   
  24. 第二次不想重启,试图从蓝牙角度解决此问题。直接关掉自己的蓝牙鼠标,没有效果。想关机器的蓝牙,但坑爹的mac系统居然无法用tab键选择复选框,研究了十多分钟无果。气得发了5分钟愣……然后居然自动好了。   
  25.   
  26. (蓝牙覆盖范围中另有一Magic Mouse,这个时间里关掉了,不知是否与此有关)  

 

thinkingo收获

我不知道别人是否和我一样喜欢记录点东西,但是我知道我必须要记,因为年纪大了,如果不记录下来,很可能什么都忘了。

(伤心,我大约写了将近3000字的内容。没了,说实话,让我再写,可能写的没有刚才全了,希望我还能写点什么吧)

这次thinkingo的聚会对我来说真的是记忆犹新了。不谈路上堵车2小时吧,在高架上完全不能动,导航里写的只要半小时的路径走了2个小时。且谈好不容易写的心得吧。因为蓝牙鼠标左键失灵导致我以为是程序死了。让我重启了两次电脑 ,而明明sablog上面写的自动保存成功,却其实只保存了上文括号上面的那一句话。果然是老了。电脑也不帮我了

OK,让我再来一次吧,今天三个议题和一个话题

1、astaxie 的 go在cdn项目中的应用。

开始看到这个话题的时候,我还在想,今天是不是会话题重复了,毕竟七牛也是做云存储和CDN的,但后来发现asta讲的内容其实是内容分发这一块的,他们用go重新实现了内容分发模块,而原来则是用BT协议实现的。基于BT协议,有两个小问题:1.有1%的情况下,服务器节点只能从中心服务器取到99%的数据就卡死了。2.BT的搜索是无序的,不会优先从本地局域网进行下载,而是随机从任意节点下载,带来的问题就是机房的带宽反而被BT协议占用了不少,浪费了不少的流量费(现在的修改过的各种类BT协议,都调整过了,比如迅雷就宣称,会优先在局域网中下载从而避免流量占用过多)

asta他们则用go写了个分发协议,即中心服务器向节点发起通知,他们会先根据节点的机器数来进行数据块下载的分配 ,比如一个20个数据块,分散到节点的4台机器上则可能是1~5在第一台,6~10在第二台下载,以此类推,每个节点的机器下载完毕后通知中心服务器。这样中心服务器就知道哪些机器下载了哪些数据块。然后再通知第一台服务器从第二台上下载6~10,从第三台上下载11~15,以此类推。也就是说该节点的互联网流量其实就只消耗了整体数据的一次下载流量。而以前四台服务器,就下载完整的包四次,现在只有一次,其他的都是内网流量了。

这让他们不但节约了流量,还加快了速度

2、邵天宇 介绍了工作中对go的应用

邵天宇 他们公司是做微博方面的应用,这玩意大家都懂,其实能够从微博里挖掘数据都往往都是那些4A公司,现在也有越来越多的工司也开始慢慢在做这方面的工作,只有做的越多,才能越了解数据。gopher介绍他用go实现以前用python的功能后,CPU和内存的占用率都明显下降,性能更高。

邵天宇 介绍了几个他们公司用的一些用户分群的算法,细化到后面就是图的应用。

邵天宇 还介绍了他们使用的全文索引,说有个国内版的,整合了:Elasticsearch + IK,然后再加上leveldb来做处理,性能还算不错,原来是用wukong + sego,可是wukong的索引是存在内存里的,一旦机器重启就啥也没了。最后不得已才改用Elasticsearch + IK 。。(下次我也可以尝试一下)

3、七牛的韩拓介绍了下七牛中的GO使用情况 

用韩拓的话来说,go的程序占据了他们的核心代码 的99%左右,但并不代表他们只用go来做所有的事,这可是一件蠢事,所以他们还是用了很多解决方案,比如lvs+nginx来解决高可用性的问题。用memcached来解决数据缓冲的问题等等

当然他介绍的最多的是他们日志系统,除了程序日志外,还有他们的事务日志。程序日志是他们的底层,事务日志是在程序日志的再一层包装。他们用日志系统包围了他们几乎所有的程序。即在程序的处理外层是被日志系统包围住的,日志系统就是一个蛋壳。它几乎充当了其他语言的try/catch,避免程序崩溃(这是我的理解,希望没有理解错)。虽然性能上有一点损失,但得到了更完整的日志,既可以分析系统,也能够用来当作收费依据。因此这些性能损失完全能够接受

----

话题中,韩拓提起了GC,引得大家一番热列的讨论。认为GC实在不可控。为了避免GC消耗大量的时间,每个人都有一些自己的看法,其实这个话题之前在知乎上已经有人讨论过:

http://www.zhihu.com/question/21615032
  1. 先介绍下我的情况,我们团队的项目《仙侠道》在7月15号第一次接受玩家测试,这个项目的服务端完全用Go语言开发的,游戏数据都放在内存中由go 管理。    
  2.     
  3. 在上线测试后我对程序做了很多调优工作,最初是稳定性优先,所以先解决的是内存泄漏问题,主要靠memprof来定位问题,接着是进一步提高性能,主要靠cpuprof和自己做的一些统计信息来定位问题。    
  4.     
  5. 调优性能的过程中我从cpuprof的结果发现发现gc的scanblock调用占用的cpu竟然有40%多,于是我开始搞各种对象重用和尽量避免不必要的对象创建,效果显著,CPU占用降到了10%多。    
  6.     
  7. 但我还是挺不甘心的,想继续优化看看。网上找资料时看到GOGCTRACE这个环境变量可以开启gc调试信息的打印,于是我就在内网测试服开启了,每当go执行gc时就会打印一行信息,内容是gc执行时间和回收前后的对象数量变化。    
  8.     
  9. 我惊奇的发现一次gc要20多毫秒,我们服务器请求处理时间平均才33微秒,差了一个量级别呢。    
  10.     
  11. 于是我开始关心起gc执行时间这个数值,它到底是一个恒定值呢?还是更数据多少有关呢?    
  12.     
  13. 我带着疑问在外网玩家测试的服务器也开启了gc追踪,结果更让我冒冷汗了,gc执行时间竟然达到300多毫秒。go的gc是固定每两分钟执行一次,每次执行都是暂停整个程序的,300多毫秒应该足以导致可感受到的响应延迟。  

300多毫秒,韩拓说他们遇到过是5秒左右,在线上运行的时候,gc停止了5秒左右。5秒对于我们来说没有什么,但对于一个做高可用的企业来说,已经是有点夸张了。

----
实在不想写了,很痛苦。之前写的全没了,就记录这么一点吧。(这次写的时候,居然又超时了,所幸我ctrl+s,保存了下来。天啊。。。我快崩溃了)

Tags: thinkinlamp, thinkingo

思路的变迁:go memcachep

前言

最近在项目中写了一个小型 的socket服务器,于是就需要PHPclient来向他发送和接收数据,但是这时带来的问题,如果php每次创建socket连接1是开销比较大,2是连接远程性能可能也不佳,于是进行了曲线过国的过程,在本地用go写了一个server,php只向本地发送数据,由本地的server长连接到socket服务器,这样开销就会小很多(之所以这样,是因为socket服务器需要登录验证,PHP如果为了发个包,每次都登录验证消耗太大)
 
过程
在用go写server的过程中,遇到了这种问题,原来用C写的server,我们担心C server接受数据慢或者担心并发不够,于是php在发送数据的时候,用的是shm_系列函数,但发现shm系列函数不太稳定,正常使用使用就会溢出。于是转成了msg_xxx系列函数,并调整了系统参数,使得发送和接收的最大队列提高了很多
但是go lang对msg_xxx支持的不好,首先他没有自带,其次在调用RawSyscall的时候(参考了hover给的c函数中的参数,结果是go可以msg_send,但不能msg_receive,总说参数长度不对),最后,其实我是不想用cgo啦。
最后我参考了“囧囧孙”的网站(www.jiongsun.com/2012/12/38.html),实现了一个udp server。当然在这之前,我已经实现了一个http server的方案,不过我觉得本地udp server的话应该会更快。
其实,我觉得本地如果操作同一个管道文件,应该会更方便更快,毕竟,只是php写go读(但因为对系统的底层了解不多,也没有找到相应过多的资料,就暂时放弃了。比如,我看到了php://fd/1之类的,但没有实际例子也没有过多的在那里看。怕浪费太多的时间 )
 
转变
其实转变就在昨天,asta的群里,有个名为“囧”的朋友发布了一个网站(https://github.com/xiaojiong/memcachep),并说明他的go server是按照memcache的协议标准来实现的,也就是说,PHP只需要使用new memcache('server','port'),连接上server,然后get/set就OK了。这让我突然之间豁然开朗。
是啊,我在远程服务器实现了socket server,那个socket server是为其他平台服务,我PHP连接是比较麻烦,但如果我专门现实了一个GET/SET的接口,PHP发送过去不就OK了?也不用PHP写socket_create之类的函数,也不需要php来担心一些其他可能发生的问题。甚至如果以后socket server有多台了,我这里也可以利用memcache的addServer来实现多台发送?(当然也要socket server实现)。性能?可能是会略有降低,但难道,本地一个go server/php udp连接就一定高吗?开的服务越多,环节越长,出错的概率就会越高,如果我只是单点直接向socket server发送数据,这样出错还是有据可查的
 
准备
昨天就开始准备重写原来的socket server了。
socket server上面要做的事情比较多:
1、转发PHP发来的各种消息
2、转发失败后需要发送apns通知
3、在发通知前,需要查询数据库中每个用户ID的token,并更新多少未读信息
之前的server只做了纯转发功能。准备再花上一段时间把它搞定。
 
 

Tags: memcahep