联通定制优酷路由宝刷LEDE/OpenWRT

无意中发现抽屉中的优酷路由宝,打算玩一下刷个LEDE或OpenWRT在公司做透明代理。 已知问题:软重启会导致设备死机,需断电重启。刷完固件如果设备无反应,断电重启试试 因为之前用来赚金币,加上联通活动,早已回本,主要因为从某天开始已经很难得到金币,就放弃了,现在看似乎这个项目已经被关闭。 由于这是联通定制版路由宝,和公版路由宝不太一样,主要体现在升级用的固件。 我的路由宝在赚金币时自动升级到最新版2.1.0613.8617,坏处是高版本修复了很多bug,如果有1.5的版本,可以很容易开telnet,但如果和我版本一样,需要用一个联通定制版固件开启telnet。 从论坛上找了几个固件,名字不同,但看md5都是一个文件:6278736caf4cd677676c91fce7d3b86d,这个固件是不行的,上传后提示固件验证失败,只有联通固件可以刷成,

host with multiple nic in same network

主机上多个网卡分配了同一个网络的不同IP地址,流量可能会从某一个网卡流入。 前段时间要给一台服务器增加一个新IP用作新业务使用,服务器有4个网卡,其中内网外网各使用一个,剩下两个网卡也接入了交换机外网VLAN中,以备后续使用,这不用上了。但当我使用第三个网卡并分配IP后发现流量还是从原来外网网卡进入而不是从新加的这个进入,调试了一会交换机后以为是交换机问题,但又不敢重启交换机。 后来看到有个内核参数arp_filter,默认值是0,表示系统会处理ARP请求,但并不会按照事实回应,比如交换机在学习新网卡MAC地址时,ARP请求发送到主机,主机本应该把那个网卡的MAC地址回应给交换机,但因为这个配置,主机把其他网卡MAC地址回应给了交换机,例如第一个网卡、最后一个网卡、或者第一个连通的网卡,于是交换机学习到了新IP对应的MAC地址和之前学习的一样,以后新IP的流量还是会从之前的网卡进入,达不到预想的效果。 如果希望让系统正确回应ARP请求,只需将该值设置为1,具体可参考:http://linuxinsight.com/

coreboot

Neutralize Intel ME on X220

去掉Intel ME的过程很有意思,会涉及到芯片烧录和编译BIOS,但需要注意的是操作时不要带电操作,先释放身体静电,选择一款性能不错的电脑用于编译,最后买一个稍微合适的烧录夹。 所需工具: 树莓派,有GPIO接口的就可以,因为只需用来读写芯片 SOP8芯片烧录夹,最好买连上线的夹子,省去一些麻烦 能连接到树莓派GPIO口的线,如果夹子带的线可以直接用最好了 性能尚可的笔记本或台式机用于编译BIOS,不要尝试用任何版本的树莓派编译coreboot!太慢! 改造烧录夹(可选) 如果你买到了和我一样的烧录夹,需要改造一下,但不一定改成我这样的。我是硬掰开插上线的,你可以优雅一点! 暴露芯片 去掉X220背后螺丝,将键盘和触摸板抬起,芯片在黑色胶带纸下 芯片和树莓派连接 不同树莓派的GPIO定义不一样,只需按照GPIO图找到对应位置即可。

居住证

居住证

已经来北京5年了,正式工作4年。原先试图办过一次工作居住证,失败,后来居住证制度改革,异常容易办理,但办理排队的人实在太多,据说当时有的办理点半夜就有人排队。后来逐步改革,现在办理又很容易了。 居住时间可以用暂住证或居住卡或社保、纳税证明,租住房屋只需有合同或协议即可,再带上身份证就齐了。 我从网上填了信息,复印了租房合同,带了房本复印件就去预约派出所办理了,他们竟然只需要将房本复印件和租房合同拍照就好了,根本不会收走。材料收集完毕后给了一个回执单,10天后本人带身份证来取,整个过程不到5分钟。 其实在准备材料的时候遇到一个问题,原本打算打印完税证明,无奈周末找不到一个开门的地税所,网上标称的24小时地税所在周末也不开门,我只是想用自助机打印完税证明而已。后来想到还可以用社保缴存证明,也不确定周末是否可以打印,但搜索到可以网上下载自己打印,社保系统真是好!

tornado

一个请求到达tornado后如何被处理

异步非阻塞的tornado能够让同一台服务器接受更多的连接,服务更多用户,但对于每个用户来说,原本要等10秒才出现的浏览结果,现在至少还需要10秒,甚至可能还会慢一点,因为同样的硬件,现在有更多请求被接入进来。 很早打算阅读tornado源码,因为从来没有读过一个web框架的源码,作为后端实在不应该也不利于自己能力提升。最近遇到tornado相关问题,需要阅读源码证实猜想——tornado是否能检测到连接断开,不再处理相关request? import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello,

tornado

tornado未处理已关闭的连接

应用架构 nginx作为反向代理工作在客户端和后端服务之间: 客户端的请求来到nginx nginx再把请求转发到后端 最终把后端的结果送回给客户端完成一次交互 问题 最近总是遇到棘手的问题,上周主要解决Queue和Redis,这周又遇到老问题——一个接口服务偶尔响应变慢,导致使用方积压大量请求,严重影响业务正常运行。但每次遇到这个问题,重启一遍接口服务就正常。 猜测是接口连接的数据库变慢导致接口运行变慢,这很直接,但在接口变慢的时候,单独测试数据库,非常快。 接口连接的数据库是Oracle,驱动是oracle instant client,接口用的Python库是cx_Oracle,测试发现我们调用了cx_Oracle库提供的ping方法来检测连接是否正常,如果此时网络断掉,ping会一直阻塞住直到网络恢复才返回。测试方法是: 正常建立连接,调用ping,未出现异常;

redis

Job queue rollback

背景 我们的异步队列是Tasktiger,一个背后有商业公司支持的开源项目。 之前是Pyres,一个Resque的Python实现,因为Github在使用Resque,Instagram在使用Pyres,我们应该可以用一段时间。 后来Pyres长久不再维护,积累了一些bug以及性能问题让我们不得不选择更换一个异步队列系统,期初考虑过Celery,那是一个很成熟很强大的队列系统,以至于我很难一下子搞清它。 问题 在使用Tasktiger后有时会遇到已经处理完毕的task又重新被enqueue的情况,如果所有task都是幂等的(Idempotent),那这也不是问题,第二次执行task会因为之前处理过而不至于再做一次。然而并不是所有task都完成了幂等改造,所以这对于我们来说是个严重问题,但当时并不能稳定重现。 探索 怀疑过许多地方,后来发现在queue redis上执行BGREWRITEAOF就能避免这个问题,于是把原先一个月执行一次的AOF重写操作变成了每天执行一次,大概在备份数据之前,因为备份需要停机,如果不在这之前做,可能备份导致重启服务就会让很多已经处理过的task重复处理,例如可能会给会员发多条短信和微信提醒。 就在昨天,

postgresql

worst day

21:40 - 服务不可用 监控宝提示Homepage无法访问,以为有人在部署,后来其他服务也不可用,登录到服务器上看发现top都不能执行了,报过Bus error和Segment fault等,看/var/log/syslog发现是RAID卡出错,从iDRAC上看没有错误,RAID卡和电池状态正常。 目前已经无法提供服务了,重启试一下。 RAID卡无法被识别到,系统进不去。 强制刷一下RAID卡固件,失败,都无法识别,也没法刷固件了。 关机,等第二天去机房把磁盘换到另一台机器上,另一台机器有型号一样的RAID卡。 7:00 - 能进系统了 第二天早晨开机后发现可以进系统,

HG8347R

unlock HG8347R

联通宽带移机一定要带着旧光猫,不管旧光猫是好是坏是死是活。* 3 新家完成宽带移机,不收费,但如果你没有旧光猫的话,得自己解决,比如淘宝一个大约50块。 新光猫是HG8347R,据说硬件配置不错,但我关心的是能否继续使用自己的路由器,默认情况下不能,因为这款光猫集成了无线路由功能。对于大多数用户来讲是个好事儿,但对于其他用户,他们就不过多考虑了,好在光猫没锁死,可以自己解锁。 需要有几款软件:华为ONT组播维护工具、配置文件解密工具、tftp server,可从这里下载到。维护工具作用是开启光猫维护模式,这样才可以telnet进去,拿到配置文件、恢复出厂设置等。 开启维护模式 电脑网线连接光猫LAN1口 拔掉光猫光纤,此时光猫PON位置亮红灯 打开ONT组播工具,

vmware

VMware Tools 启动脚本未能在虚拟机中成功运行

在Ubuntu16.04中未安装vmware tools,似乎当初安装时看到提示vmware推荐用open-vm-tools代替,于是安装了open-vm-tools,功能一切正常,除了有时从挂起状态恢复时网卡未激活,今天打算装vmware tools看是否能解决这个问题,不过安装后一切不正常(主要是全屏无法自适应),再卸载后就开始提示“VMware Tools 启动脚本未能在虚拟机中成功运行...”,几经周折,发现使用apt purge open-vm-tools后,再安装vmware tools提示推荐使用open-vm-tools了,之前安装vmware tools都不提示。再次安装open-vm-tools-desktop(这个依赖open-vm-tools),后一切正常。 升级了内核到4.4.0-78,网卡问题暂时没发现,等后续长时间测试。

fcitx

fcitx on archlinux

用了archlinux后安装了fcitx输入法,一直无法激活输入法不管在什么位置,后来无奈换了ibus,因为一直想用搜狗,搜狗是基于fcitx做的,所以起码fcitx输入法得能用才有可能用搜狗。 今天重新安装fcitx还是原来一样的问题,在官方troubleshot中看到在英文locale时会不正常,后来又看到有人说需要安装fcitx-gtk2, fcitx-gtk3等保证fcitx可以在gtk2或者gtk3环境中被触发。于是安装了fcitx-gtk2, fcitx-gtk3, fcitx-qt4, fcitx-qt5,重启后就能触发了!

js

从addEventListener说起js事件传递

addEventListener的第三个参数可以被当作是否使用capture模式的开关,默认不使用,即事件传递方法为冒泡传递。 冒泡的方法是从下到上,或者说从内到外,总是从event target开始向上一级一级传递。例如点击一个链接,冒泡传递是从a的DOM开始传递的,最终到了document(假如中间没有被禁止传递的话)。 在某些老浏览器上(例如IE9以下),这是唯一的事件传递方式。现代浏览器还支持capture方式传递事件。 capture是从最外层开始向内传递事件。 和事件相关的两个操作:preventDefault和stopPropagation,前者阻止事件默认行为发生,例如点击链接,默认行为是跳转到某页面,但如果调用preventDefault,则不会再跳转页面。不管是从内向外还是从外向内传递事件,事件的默认行为总是在事件传递结束后再执行的,如果不是这样,整个传递链条上的handler就不能有效处理事件了,例如从内向外传递,如果一开始默认行为就执行了,那上层的DOM根本无法阻止该事件发生与否了。 在传递过程中,每一层的事件处理方法(event

M950

飞线修复M950鼠标

我的M950鼠标左键又坏了,不是不能用,而是连击,在某些情况下很讨厌,有时候连续几次都是连击。上次因为这个买了电烙铁一套和微动开关若干,更换过一次,因为没有吸焊装置,上次花了很长时间焊下微动开关,其中不乏一些暴力方法,总之是取下来了,对电路板也造成了一定损伤,这次买了吸焊带和桌边工作台,解放双手,事半功倍。 虽然用上吸焊带,但吸焊效果仍不够明显,后来听说M950板子铺了很多铜导热,一般功率的电烙铁不容易融化焊锡,一部分热首先被导走了。即便这样,这次花了十几分钟就完成了上次一两个小时的工作。 不过,这次更换了一个微动开关后,左键竟然完全不能使用了。又试了一次仍然这样,第二天搜索时看到有人说铜座焊盘掉了就很难弄了,不过可以飞线修复。 飞线不是一个好的实践,但是一个修复方法。正常情况下,电路板通过化学侵蚀,把线路印刷到板子中,

js

js中new、prototype、function提升问题

在一个前端面试题中发现几个概念,虽说面试题考的一般都不太容易在工作中遇到,但掌握这些对于debug、阅读代码、有时理解原理有帮助,原文在这里,直接去原文看也不错。 执行结果都是弹出alert。虽然也写了不少js,但和oo相关的概念并没有弄清楚,借着这个题能掌握一些。 在js中一个function可以被直接调用,也可能被new,而后者显然是oo中的东西,好像在java中常见。一个function被new,这个function就被看作是oo中class的构造函数,会返回一个object,如果function中有this.field_name=name之类的语句,产生的object中就会有field_name这个属性,同时有一点需要注意的是,即便是new,也相当于执行了这个function一次,所以里面其他的操作也都是执行过了的,并不只是生成了object和设置了各种属性。另外,如果作为构造函数,不应该有返回值,但js就是允许有,

NAS

自建NAS选购指南 硬件篇

UPDATE on 2017-03-19: 小机箱很可爱,但理线不容易,便宜的电源大多数不是模块化的,也就是会固定带一大股线:主板的、硬盘的,cpu的等等,模块化的电源会留出接口,你需要哪些接哪些,不会搞得机箱里乱糟糟的,特别在小机箱中尤为明显。 如果硬盘位置比较奇怪的话,最好单买一根sata电源线,比如我的酷冷至尊mini机箱,侧面安装一块硬盘,主板正上方并排安装两块硬盘,低功率电影一般也就3条sata电源线,原本我以为正好对应三块盘,没想到其中两条sata电源线是串联的,勉强给两块并排的硬盘供电,但线被拉的很紧,不好,于是单买了一根sata电源线解决。stat数据线都是单根的,一般不会有这种问题,要是想好看,可以根觉硬盘位置买带拐角的线,我的主板送了几条,但硬盘位置实在是,都无法用上。

TCP FIN_WAIT_2, TIME_WAIT and CLOSE_WAIT

Server和Client都可以关闭已建立的连接,有可能Server先关闭,有可能Client先关闭,有可能同时关闭。同时关闭不太常见,Server关闭也不太常见(Server觉得有些Client一直保持着连接占用资源,关闭了某些Client的连接,一般来说Server是做服务的,不会主动断开,除非是某些特别的需要),Client先关闭比较常见。 Client先关闭的情况:https://benohead.com/tcp-about-fin_wait_2-time_wait-and-close_wait/ Server先关闭的情况:https://benohead.com/c-understanding-close_wait-and-fin_wait_2/ 同时关闭连接的情况:http://www.tcpipguide.

webpack

code splitting with webpack2 and react-router

当你用React全家桶(React, React-DOM, Webpack)做一个网站时,会发现最后打包后的文件相当大,这当然取决于你网站的规模,因为一个小网站可能应用代码都不会超过引用的库的大小。 由于最新版Webpack2已经支持了ES6的import,让开发者感觉爽了许多,无需混用require和import ... from ...,当从gulp转换到webpack后感觉就是开发时间极大缩短,主要是修改应用代码后调试效果时间缩短,原先gulp编译一遍需要20秒,webpack只需要1~2秒,虽是这样,但最终打包结果大小都差不多。 于是有了code splitting,配合react-router就是当你访问某个location时,只下载需要的那部分代码,这显然比下载所有代码快得多,做到这,基本上优化也到头了。 配合react-router做code splitting需要在<Route>中做些修改,例如原先代码可能是这样: