September 15, 2017

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

异步非阻塞的tornado能够让同一台服务器接受更多的连接,服务更多用户,但对于每个用户来说,原本要等10秒才出现的浏览结果,现在至少还需要10秒,甚至可能还会慢一点,因为同样的硬件,现在有更多请求被接入进来。 Read more

June 20, 2017

install debian 9 on virtualbox

why virtualbox UPDATE: The list of VMWare OS version only help you set basic resource (CPU, Memory, etc), so you can choose anyone and modify them on your need I don’t know which OS version should be chosen from VMWare OS version list. There are some Debian series, latest is Debian 8.x, but I need 9, also there is no Kernel 4.x item on the list, so I install virtualbox, I find a Debian (64bit). Read more

June 6, 2017

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,网卡问题暂时没发现,等后续长时间测试。

June 3, 2017

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,重启后就能触发了!

May 22, 2017

从addEventListener说起js事件传递

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

April 23, 2017

飞线修复M950鼠标

我的M950鼠标左键又坏了,不是不能用,而是连击,在某些情况下很讨厌,有时候连续几次都是连击。上次因为这个买了电烙铁一套和微动开关若干,更换过一次,因为没有吸焊装置,上次花了很长时间焊下微动开关,其中不乏一些暴力方法,总之是取下来了,对电路板也造成了一定损伤,这次买了吸焊带和桌边工作台,解放双手,事半功倍。 虽然用上吸焊带,但吸焊效果仍不够明显,后来听说M950板子铺了很多铜导热,一般功率的电烙铁不容易融化焊锡,一部分热首先被导走了。即便这样,这次花了十几分钟就完成了上次一两个小时的工作。 不过,这次更换了一个微动开关后,左键竟然完全不能使用了。又试了一次仍然这样,第二天搜索时看到有人说铜座焊盘掉了就很难弄了,不过可以飞线修复。 飞线不是一个好的实践,但是一个修复方法。正常情况下,电路板通过化学侵蚀,把线路印刷到板子中,有的还有很多层印刷,不过仍然会在背侧留下焊点,用线把需要的两个点从电路板外侧连接起来,调试或修复。淘宝上有人维修,也有人收费告诉你焊点在哪,好在用Google搜索找到了一张收费的图: 可以看到左侧(实际是右键微动)和右侧(实际是左侧微动)的焊点图,根据需要把点连起来就可以了。 在没找到图之前我都买好新鼠标了(ROG P301),新鼠标可以不用电烙铁换微动,早就应该有这种设计啊,以后应该不会再坏鼠标了。

April 13, 2017

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就是允许有,如果有的话,返回基本类型的值,比如Number或者String相当于没返回,但如果返回了一个object,那就会用返回值,而不是创建一个空的object再把相应属性设置上返回这个。 要分析这个题目,又不得不说起来js中的this,这是一个神一般的变量,这里不打算详细描述,如果涉及到会说明一下,如果不了解可以搜索看看,有不少相关信息。 js中可以给一些对象添加额外的属性,比如题目中给Foo添加了getName,值是一个function,当访问Foo.getName()的时候就是访问Foo上的getName方法,类似class的静态方法,属于class,第一问是alert(2)。 那么直接调用getName()是怎样呢?会从js全局空间中寻找getName函数,因为这段代码外面并没有一层作用域了,所是是最外层,在全局空间中寻找,也就是之前定义的getName方法。竟然有两种定义getName的方法:把匿名函数赋值给变量、直接定义函数。也就是面试题会这样考,实际代码中为了可读性怎么也不会这样写来考验开发者智慧。js中每个作用域中的用function关键字定义的函数,都会在代码执行前被提到作用域最前面,所以即便是写在了最后的function xx(){},如果在最前面有调用,也是正常的;但如果是把匿名函数赋值给变量则是在运行到这一行代码时才被执行,所以这里的getName实际是alert(4)而不是alert(5)。 下一问Foo().getName(),首先需要得到Foo()的返回值,是神一般的this,在全局空间中,this指向window(如果是浏览器的话,非static mode,不明白可以自己查询),不出意外的话是上一问的alert(4),但执行了Foo后全局空间中的getName被Foo中的语句修改了,所以这一问是alert(1)。 此时getName刚刚被Foo调用修改调,所以是alert(1)。 下一问的new也变成了神一般的变量,题目在考察操作符的优先级。。。这个东西一般是大致扫一眼,根本不太会细看,况且即便细看都不一定能作对这里的题:new Foo.getName()的执行顺序是:(new Foo.getName)(),在js中new有两个优先级,一个是带参数的,一个是不带的,比如new Foo()是带参数的,而new Foo是不带的,带参数的优先级更高一点。你以为这里的括号是getName的么,根本不是,而是new的。 后面几问含义都差不多了。 对我来说题目已经相当难了,但原文作者又丧心病狂增加了两处难度(具体看原文最后),假使真用这种题目面试前端,恐怕通过率非常低,真正明白其中道理的更少。所以面试主要考察的是应试者的分析思路,至于答案,对了当然好,但思路说不上来的话,恐怕是做题背的吧? 说到这里,我想到面试中,不应该总考察学术性很强的题目,而更应该偏重实践,比如让你来为某个功能设计解决方案,设计好后可以交流一下是怎么做的,一步一步由外到内,可以问得很细,同时可以看到应试者实际解决问题的能力而不是背题的能力,毕竟招人来是解决业务问题的而不是做题的。与应试者的交流过程中,可以了解到他是如何思考问题的、对业务是否熟悉、对技术掌握的深度到底有多少、非理想环境中如何trade-off以及理由是什么,其实能得到的信息很多,远比做题得到的信息多得多。 那么难道完全不需要考虑编码能力吗?当然需要,但需要精心设计方法来考察而不单是用数学题筛选,我猜如果是算法工程师职位,更不会用数学题来面试了,应当是对某些算法的深入理解、原理性、拓展性的考察吧。 又扯远了!

March 12, 2017

enlarge ubuntu root partition in vmware

I have a ubuntu vmware guest with 30Gb root partition, but it’s not enough after restore data from production environment, so I have to enlarge it. shutdown ubuntu enlarge partition on vmware guest setting start ubuntu, it’s better use text mode sudo fdisk /dev/sda (I have only one device in ubuntu, sda) delete swap partition and root partition with d command (yes, delete all partitions) create root partition (primary partition) with n command, be careful the start selector must be as same as old root partition (default is good), end selector is the size what you want the partition be, e. Read more

March 11, 2017

自建NAS选购指南 硬件篇

UPDATE on 2017-03-19: 小机箱很可爱,但理线不容易,便宜的电源大多数不是模块化的,也就是会固定带一大股线:主板的、硬盘的,cpu的等等,模块化的电源会留出接口,你需要哪些接哪些,不会搞得机箱里乱糟糟的,特别在小机箱中尤为明显。 如果硬盘位置比较奇怪的话,最好单买一根sata电源线,比如我的酷冷至尊mini机箱,侧面安装一块硬盘,主板正上方并排安装两块硬盘,低功率电影一般也就3条sata电源线,原本我以为正好对应三块盘,没想到其中两条sata电源线是串联的,勉强给两块并排的硬盘供电,但线被拉的很紧,不好,于是单买了一根sata电源线解决。stat数据线都是单根的,一般不会有这种问题,要是想好看,可以根觉硬盘位置买带拐角的线,我的主板送了几条,但硬盘位置实在是,都无法用上。。。 机箱风扇的噪音其实并不大,我购买的这款机箱附赠一个12cm机箱风扇,但不支持温控,也就是三线的风扇,温控风扇可根据温度对转速作出调整,也就是四线风扇,后来我买了个便宜的温控风扇(竟然是海盗船的)。即便这样,和电源的散热风扇比起来,声音已经小很多了,如果对噪音敏感,最好选择长城0分贝电源,或其他不带风扇的电源,我没购买,如果日后感觉是个问题,更换电源就可以解决。电源多说两句,虽然用不上大功率,但并不会因为购买一个大功率电源多花很多电费,实际电费是根据你的用电情况来计算,大功率电源有些好处是: 一般是模块化设计,需要什么接口插什么接口,理线方便,特别是在小机箱中。 一般都达到80Plus银、金等标准,转换率高,节约电费。 低功耗时电源风扇不转,真正静音。估计大部分NAS功耗都在低功耗范畴。 当前配置:https://docs.google.com/spreadsheets/d/1QgZ-qcdTECIjkXJdWrHFYIF8wfd56AB2nwLRvW9NQNc/edit#gid=302878420 这份NAS配置是第三版,第一版是最便宜的,第二版用了HP GEN8,因为可能的噪音问题和稍高的价格转而构造第三版配置。 RAID卡 关于硬件RAID和软件RAID的选择,一般来说硬件RAID卡有两种,一种是扩展卡,一种是阵列卡。扩展卡主要功能是增加接入设备,有些扩展卡也能带阵列功能,可以设置RAID0、1、5等模式;阵列卡主要功能是做RAID0、1、5。为了数据安全,这些RAID卡都配置电池、超级电容等,在某些紧急情况发生时(比如断电),可以让未写入磁盘的数据不丢失,等来电后再写入磁盘,有些电池、超级电容可以让未写入数据保存72小时以上,当然这些配置是很贵的! 一开始我还选购了LSI的硬件RAID卡,主要考虑是硬件做RAID比软件RAID可靠,但看过Freenas博客后有了改变:http://www.freenas.org/blog/freenas-worst-practices/ ,硬件RAID也是一个软件系统:有CPU、内存等结构,功能是安全读写磁盘,所以也是软件完成RAID功能。这样我便有了抛弃“硬件RAID卡”的理由。 因为想用Freenas和ZFS,而用ZFS最好不要底层加“硬件RAID卡”,具体可以看Freenas博客的文章。如果选择其他磁盘方案,比如LVM,可以考虑底层用RAID,再由LVM管理磁盘。LVM和ZFS各有利弊,ZFS比较耗费磁盘,扩展不容易,但能够安全读写磁盘,应该根据需要选择。 硬盘 NAS中价格最高的硬件设备应该算是硬盘,占到总体费用的一半甚至更多。一个NAS至少需要2块硬盘(一块硬盘也不能说不算,但那和自己的移动硬盘没什么差别),只要存储稍微重要的数据就需要RAID,两块以上硬盘至少需要RAID1,当然如果你存储的数据无关紧要甚至做RAID0都可以,但那太不安全,坏一块硬盘就会丢失全部数据。 一旦有了NAS,我想不出往里存的数据哪些是不重要的。比如你放了一些照片,那是过去的回忆;放了一些电影、歌曲、电视剧,虽然丢了可以再下载,但有些很难找,有些容易找也不一定能想的起来,总归是些花费时间的事情。更加重要的数据就不必说了,所以往NAS中放的数据,没有什么是可以随便丢失的。基于这个前提,NAS最好有硬件或软件RAID来防止因为硬盘本身的损坏导致数据丢失。 最好选用NAS专用硬盘,除了贵也没什么不好,当然还有一个附加好处是NAS硬盘一般都转速较低,噪音问题可以得到改善,因为我打算把NAS放到卧室,需要尽一切力量缓解噪音问题。 淘宝上有很便宜的红盘,便宜的让人不敢买,天猫上价格还算合理,并不便宜,但合理。购买方法是多个平台或者多个店铺分别采购,不会增加太多支出,大多店铺都能一块包邮。为何要多来源采购?目的是为了防止单从一个店采购到同一批次的硬盘,同一批次硬盘寿命也差不多,一块坏了可能其他都坏。 硬盘容量大小是跟使用情况和预算强相关的,不能一概而论,可以为未来打算。 这里以红盘为例,1TB的很不划算,因为2TB的比1TB的贵不到100块,但容量翻倍;3TB的比2TB的贵300多,4TB的比3TB贵100多。所以,如果预算充足或者从2TB升级,最好直接是4TB。另外,从性价比上来计算(就是每GB的平均价格),3TB确实是最低的,所以性价比高,但也听说3TB的损坏率高于2TB的和4TB的。就是这么纠结,谁让想用最低的钱来打造NAS呢。 硬盘另一个需要注意的地方是售后,一般天猫上的商家都提供3年保修(1年厂家换新,2年厂家更换良品),便宜的店铺提供店铺保修,应该是换良品吧。 我原先想用3TB,但那家店铺卖的实在太便宜,于是稍微加了一些钱,降级换了天猫上2TB的盘。 机箱、主板、CPU、内存、电源 这几个放在一起说,因为关联密切。 机箱 机箱方面需要考虑的是盘位数,小巧机箱一般不会让你装太多硬盘,我考虑至少3块(要组建RAID5),3到5盘位的都能找到,其中4盘位比较常见,也有一些NAS专用机箱可以装更多盘,但挺贵的,而且不够好看,我没考虑。我选了酷冷至尊mini机箱,可以装3块3.5硬盘,原本看到Tt有一款小巧机箱(CoreV1),无奈硬盘只能2块3.5加2块2.5无法满足要求。机箱选定后可以确定电源,也差不多可以确定主板,差不多确定主板?因为还有别的因素需要考虑。 主板 机箱看好了主板尺寸也就定了,我那款机箱M-ITX或小一些的M-ATX都可以,后者不好找合适尺寸,而ITX又很漂亮,于是主要在前者中寻找。 我选的华擎E3C224D2I,差不多1300块,为了使用ECC内存。主板上的SATA口需要看仔细具体有几个,是SATA2还是SATA3,这款服务器主板在SATA口数量上倒是很慷慨,一共有6个。 有些主板已经搭载好了CPU,这样不必再挑选CPU,华擎有一款主板板载了低功耗的CPU,无奈太贵,远超过我自己搭配,于是放弃。选择板载CPU主要是看中了那些CPU功耗低,用散热片即可。 CPU CPU不难选,你看Gen8原装CPU性能怎样,不算高吧,即便是那样,也够NAS用了。很多NAS解决方案用的是J1900这样的CPU,也够用,毕竟这不是用来做计算的场景。 CPU性能上去了就需要解决电源、散热问题,因为一般NAS机箱较小,热量大了不容易散去,所以CPU选择的原则是:性能够用,能耗越低越好。我选了G1840T,支持ECC,功耗35W,被动散热应该可以。 电源 机箱一般都会告诉你选购什么尺寸的电源,ATX、SFX、FLEX、DC,可能还有别的,但我在选购中了解到了这几种,ATX是标准的电源,最常见;FLEX是长条形的,我在服务器中见得比较多,用这个的话NAS机箱可以放更多硬盘?DC和DC-ATX像笔记本那样有变压器,输出直流到主板,这种供电需要主板支持或添加配件。 DC的好处很明显:静音、低能耗、转化率高。转换率我没太关心,即便用了80plus金牌电源,转化率是很高,但电源转化率是条随着负载变化的曲线,80plus标准简单说就是电源在一定范围负载百分比上转化率能在80%以上,金牌的在90%以上,但NAS能用到电源额定负载的百分之几呢?所以我没太在乎。DC-ATX看着像是用DC的形式,有个ATX模块,可以插到主板对应的电源槽中。 FLEX电源,据说噪音大一些,想想机房中的声音,一大部分是电源的风扇造成的。有店铺定制了FLEX静音电源,也许会好,但不是随便就能用,需要机箱配合,比如有的机箱只能用这种。 SFX尺寸稍小,需要机箱配合,类似ATX。 我选了一个额定功率较低的电源,因为NAS的配置,什么电源都可以供得起,主要是想静音。后来看了几款贵的电源,风扇在40%负载以下都不转,这么看的话,应该买个功率大的? 机械硬盘启动时瞬时功率不低,大约每个有36W,工作起来后消耗功率就低了,据说有的NAS可以依次启动磁盘,目的是为了防止瞬时多硬盘启动带来的波动,所以硬盘多的话,应该选个额定功率稍大的电源。 内存 因为要安装Freenas,8G是跑不了了,推荐16G,也不知道用不用得上。 要不要ECC?小心这里有坑,如果你要,预算大增,主板可能都得换;如果不要,基本就选完了。 ECC主要是防止数据在写入磁盘之前损坏,这种错误连ZFS也无能为力,考虑到这是一个长期运行的系统,又加上里面的数据我觉得都重要,所以得用ECC。这也是为何我考虑Gen8的原因(只支持ECC),Gen8在搭载了16G内存后,价格2800+,自己搭建会便宜一些,不过也接近这个数字。内存类型看仔细,比如UDIMM和DIMM不一样。 硬件篇大致如此,等硬件到齐后安装看看是否还有新发现。

February 15, 2017

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.com/free/t_TCPConnectionTermination-4.htm

February 9, 2017

speed up your pyres worker

We have a queue system for async works, it is build by Pyres with Redis. It works fine if your application is small, pyres worker forks a new process before doing job, and then terminate working process, worker just waits for new job. With out application is more and more complex, every new working process spends much time on loading, the package must be loaded, the package’s dependencies must be loaded, e. Read more

Powered by Hugo & Kiss.