源码编译Vim 8

Vim 8.0 在2016.09.12发布了, 在各 Linux 发行版还没更新包的时候就源码编译来使用吧! 以 Debian 编译 Vim 为例. 下载Vim 源码 可以在Vim 官网下载打包好的源代码. 或者使用 Git: git clone https://github.com/vim/vim.git 编译 cd vim/src ./configure --with-compiledby="TaoBeier" --with-features=huge --enable-pythoninterp=yes --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu --enable-cscope --enable-perlinterp=yes --enable-rubyinterp=yes --with-luajit --enable-luainterp=yes --with-lua-prefix=/usr/include/lua5.1 --enable-multibyte --with-x --enable-fail-if-missing 上面的参数使用 ./configure --help 都可以看到对应用途. 上面使用的参数是增加了对 Python, Ruby, Perl, 以及X window的支持. 建议加上 --enable-fail-if-missing 参数, 以方便定位到哪里依赖缺失. 依赖 这里检查可能通不过, 首先是 lua 和 luajit. 需要执行 sudo apt-get install lua5.1 liblua5.1-0 luajit libluajit-5.1-dev

利器系列-更高效的Vim

这是利器系列第0篇, 当然要以每天我使用率最高的Vim来开始啦! 截图 安装 (你需要一个有Python支持的Vim版本. 请使用 vim --version | grep +python 来检查) 依赖(Debian/Ubuntu 平台) sudo apt-get install python vim exuberant-ctags git sudo pip install dbgp vim-debug pep8 flake8 pyflakes isort 依赖(RedHat/CentOS 平台) CentOS 6.7的yum源自带的Python版本较旧,推荐自行安装Python2.7. sudo yum install python vim ctags git sudo pip install dbgp vim-debug pep8 flake8 pyflakes isort 依赖(Mac OS 平台) brew install python vim git wget http://tenet.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz && tar -zxvf ctags-5.8.tar.gz && cd ctags-5.

Python性能优化之工具篇

之前对公司的一个后端项目做了些性能优化, 学到一些值得记录的东西, 这篇主要是介绍在做性能分析时所用到的工具, 至于如何优化基本就是智者见智吧, 如果有时间可能会写的. Python web应用程序的常见性能指标 此处忽略外部DNS解析等方面的性能 响应时间 错误率 吞吐率 执行时间 内存占用 Python 性能分析工具 ##TODO

想从二次元群体手里赚钱?你真的懂二次元吗!

“节操”,“鬼畜”,“萌”, “二次元”这些词是不是逐渐的融入了你的日常? 这些词其实都是二次元产物。越来越多的人将关注点放到了“二次元群体”上,但是这里的价值和它真正的含义你懂了吗? 什么是原本的二次元 很多人认为二次元就是指“二维平面”,“平面世界”,也有人认为是ACGN,但这个观点其实是带有误区的。 为什么这样说呢?我们一起来追溯一下“二次元”这个词是什么时候出现的,有部和我年龄相仿的动画片《机动战舰》(暴露年龄系列,我下一篇就写这个),其中的反派们超级崇拜一部叫《激钢人3》的动画片,甚至这部动画片已经成为反派军中的圣典(除了很热血很好看外,其实是因为他们逃亡的时候就只带了这一部动画片吧,充分说明做资源党是有好处的!),当然剧中的主角也是很喜欢这部动画片的。动画(机动战舰)中的反派非常喜欢激钢人3中的女主菜菜子,但是毕竟现实和动画是不可逾越的(明明都是在动画里面!),处于伤感中的反派们相互安慰:“菜菜子再好,但她毕竟只是二次元的女子啊!”,这句话引起了很多ACG爱好者的共鸣,所以逐步的借用了其中的“二次元”来描述自己所喜爱的由ACG创造出来的世界了。 什么是现在的二次元 很多人说现在的二次元是“泛二次元”,可这个”泛“到底是泛到了什么程度呢?这就好像从15年开始,”IP“在圈子里吵得火热,但到底什么是IP?很多人只是知道一个名词或者一个模糊的概念罢了。 有多少真正爆款的IP产生呢? 现在一般指的二次元确实是”泛二次元“,不仅包含着ACGN,还包含着其相关的衍生产物(这不是废话吗?)。也就是这种模棱两可的概念让绝大多数人身处次元壁外,不得其门而入。 为了避免概念混淆,本篇不具体解释“核心二次元文化”和“泛二次元文化”(放到下篇来写),谈谈现在的二次元群体即“泛二次元”群体。 “宅” 大多数情况下,ACG爱好者被冠上了“宅”的标签,外界一般这样看我们“不爱出门”,“就知道看动漫”,“沉迷于虚拟世界”等等。实际上“宅”也分了很多种,“御宅族”应该是相对较早的称呼了,现在大多使用“宅男/宅女”来形容这部分人和长期待在家里不出去的人。并且基于当前环境和舆论等,“宅”一度被加上了变异的色彩。 但是当二次元群体以“宅”自称或称呼别人的时候,一般是指对于某种兴趣爱好的痴迷,有时候也指大触(某方面很厉害的人)。这种倾注了情感的痴迷,不仅支撑着我们可以长时间宅在家,还可以不断的利用现有资源,发展自己的圈子和技能,结识同好,分享兴趣,一起做很多好玩的事情。一般会被称为“动漫宅”,“偶像宅”,“技术宅”等,也会称为“游戏狗”,“单身汪”之类的。(但是我们都有着做现充的觉悟的!) “腐” 这个群体中女性相比男性更多一些(目前表现出来的是这样),这个群体多表现为对“BL”(boy’s love),“GL”(girl’s love)等的喜爱。“腐”和“宅”并不能完全隔离开,会有重合,不过“宅”群体一般更多的关注点在于虚拟世界中,而很可能一个并不宅的妹子有天你突然发现她其实是腐的,并且长期YY你和其他男同事(orz)。 “Coser”,“lo娘”,“舞见” 作为一枚野生后期,对这部分群体和我接下来要谈的“唱见”等了解也相对多了一些。Coser(玩Cosplay 的人),lo娘(喜欢Lolita穿衣风格的人),舞见(一般指宅舞的舞者)都逐渐变多,这也和大众对这个群体的接受度逐渐变高了有关。这个群体相对的要辛苦一些,喜欢某些东西,喜欢到了不满足于看,而想自己亲自去尝试。 Coser需要经过服装,道具,化妆等工序打磨,而一般在网上直接买的衣服可能不合适还需要自行修改。这三类人都很容易被外界的人投以另类的目光,但是也比较容易通过活动或者交流找到同好。毕竟这些都是既看脸又走心的形式,既传达自己对原作的感情又能将自己美好的一面示人。 “唱见” “唱见”(投稿翻唱歌曲的业余歌手)也越来越多,而且很多也唱的非常棒!以动漫的OP,ED投稿较多,目前有很多的应用或网站都提供了方便的音频发布,电台之类的功能,比较容易获得粉丝。 “网配” “网配”(网络配音)大多是基于网配文或某些小说进行PIA戏,也有一部分人会选择制作广播剧之类的。 其他 其他就是一部分我不常接触或者人数相对较少的群体了。 为什么是二次元群体 在大致了解了当前二次元群体之后,我们来谈谈为什么从二次元群体入手 群体基数大,覆盖面广。在上面我已经大致说过了,看看自己的周围,随便上微博、贴吧之类的看看,大抵就知道了; 增长迅速。看看当前A、B站,腾讯动漫等的用户增长量也可窥一斑; 付费能力强。只要戳中了二次元群体的G点,付费能力非常强,以Coser和lo娘为例,一般都会花上万块在服装上; 自我传播能力较强。二次元群体大多活跃在手Q,微博,贴吧等平台上,且有自己的圈子,自我传播能力相对更强; 用户相对忠实。由于二次元文化作为一个独特的亚文化发展起来,当前占据主体的还是90后,00后,碎片化时间相对较多,且更容易在应用/网站中形成关系链; 二次元作品相对可扩展的面更广,更容易找到增长点。 可能发展的方向 资源平台 二次元群体本就对资源有非常高的渴望和期待,当然也很挑剔,有着很完整的选择要求,用资源吸引到用户,才是解决了用户的需求。 周边产业 二次元群体对于正版周边产物是有着强烈需求的,但是目前无论是市场还是价格上都不是很好。 同人 同人资源对二次元文化的发展是有着相当大影响的,若能吸引到用户,将可能迎来爆发式的增长。 以上都是我一本正经的胡说八道,小心误入歧途 2333

2015小回顾

时间过得很快2015年最后一天。 还是继续给自己做个总结吧。 去年也有做总结,不过没有发布到Blog罢了。 2015年初在公司定了两个主要目标: 对工具的打磨 计算机图形学 第一个目标算是基本完成,现在在用的工具都很顺手,效率能提升很多,而且用起来也很爽!现在也还会再尝试一些其他的工具,或者提升现在使用的工具的便利性。有时间的话可以写篇文章介绍一下。第二个目标目前没有什么进展,可以考虑是不是要留到今年了XD,当然还有一些其他自己定的目标基本完成,大致写写自己的收获好了。 收获 (大致按照时间来写吧) 读了一部分 Nginx 的源码,算是对Nginx有了比以前更深入的认识,但是现在回过头来再重新审视的话,发现对它的理解还远远不够,还需要继续深入。 学习了 Haskell, Haskell我觉得是一门非常棒的语言,非常值得学习,通过对这门语言的学习,改变了我的一些思维方式。除了用它写过一些小程序以外,还没能在工程中大量使用,今后继续加油,尽量引入到工程中~ 学习了 Node.js, 同样的还缺乏工程中的实践 学习了 Backbone.js,AngularJS 和 ReactJS. Backbone记忆中应该是5月份左右学习的,ReactJS要晚很多。写Backbone的时候想起来了之前用过的Riot, 轻量,随意,但是要写完整的应用相比AngularJS之类的要写很多代码。 开源了qyweixin和一个HTTPmultipart的库,下载量各自也都已经几千了,上次在评论中也看到确实有人在使用~ 还是蛮开心的啦! 学会了使用 Docker,也准备学习一些内部机制之类的东西。 还在翻译中的Tornado 4.3文档也会尽快抽时间翻译完成的. 此外还有学习了Lua和正在深入学习的Shell,还有一系列的框架和库, 正在用来写一些自己的小东西。 1383 Contributions. 运营了公众号 TheMoeLove 还有一些目前还无法放入*收获*这一项中的东西,在2016年尽量都再多积累一些。 另外,下面这部分也非常的重要! 认识了很多好玩的小伙伴,从他们那里也学到了很多东西 工作中同事们都很好,感谢给予的帮助~ 总结 学会拒绝。一些事情是可以容忍的,但是要遵守原则,也要考虑时间成本和效率问题。 学习和思考。这一年之间其实学到的东西也蛮多的,只不过有些东西没能在工程实践中应用,效果不是很明显。多思考,做个靠谱的人,尽量不在相同的地方摔倒两次。 多读书 尝试新东西 多深入一些。浅尝辄止不是应该有的状态。 合理安排追番时间 2333

JSLint,JSHint,ESLint对比和Vim配置

最近在用React写项目,但是我的Vim配置之前并没有配置对JSX和ES6的支持,然后看着那堆报错各种不爽了,于是还是要继续折腾,顺便也增加了点知识,记录一下。 主流的JS Lint工具及介绍 JavaScript已经发展蛮长时间了,对应的Lint工具也是层出不穷,下面介绍一下比较主流的几个Lint工具(其实是我用过的几个XD) JSLint JSLint是由Douglas Crockford开发的,可能是最早的JavaScript Lint工具了吧,它的名字来源于著名的C语言工具Lint。老道把他认为的非Good Parts的部分都报了warning,而且在它的文档中也提到了你应该欣然接受所有的JSLint的建议。最近看了下,老道还在持续更新着这个项目,而且官网上也有着一个在线的体验工具,可以尝试一下。对了,如果想要使用这个工具,建议看看老道在YouTube上关于JavaScript编程风格的视频,讲的还是很幽默的。 JSHint JSHint是由Anton Kovalyov基于JSLint的代码实现的开源项目,由于JSLint时期大多数人都在受JSLint压迫,JSHint相比较之下,更友好,也更容易配置,所以很快就发展了起来,也得到了众多IDE和编辑器的支持。但是,由于它是基于JSLint开发的,自然原有的一些问题它也继承下来了,比如不易扩展,不容易直接根据报错定位到具体的规则配置等,虽然之前好像是有过相关的讨论,但是现在仍然没有什么好的解决办法。好在它发展的不错,很多时候遇到的问题都可以在网上找到相关的解决方案,而且文档也是非常不错的。 ESLint ESLint是由Nicholas C. Zakas在2013年开始开发的,它的初衷就是为了能让开发者能自定义自己的linting rules,而且它提供了一套相当完善的插件机制,可以自由的扩展,动态加载配置规则,同时可以方便的根据报错定位到具体的规则配置。而且我比较喜欢它的一点是文档非常详细,可能这也是灵活所必须的吧。在这里还要提一点,ESLint最初并不是为了造一个重复的轮子,而是作者在实际使用中的需求没有能得到JSHint团队的回应,所以他就结合当时的JSHint和另一个代码风格的检查工具JSCS写出来了现在具备代码风格检查,自定义插件扩展功能的ESLint了。 JSLint,JSHint和ESLint的对比 这三个工具各有特色,我只是做一下对比,选择的话,看个人需求就好了。 JSLint 优点 配置是老道已经定好的,开箱即用。 不足 有限的配置选项,很多规则不能禁用 规范严格,凡是不符合老道所认为的好的风格的,都会有警告(这一项就看你是否完全认同老道了) 扩展性差 无法根据错误定位到对应的规则 JSHint 优点 有了很多参数可以配置 支持配置文件,方便使用 支持了一些常用类库 支持了基本的ES6 不足 不支持自定义规则 无法根据错误定位到对应的规则 ESLint 优点 默认规则里面包含了JSLint和JSHint的规则,易于迁移(这肯定是故意的XD) 可配置为警告和错误两个等级,或者直接禁用掉 支持插件扩展 可以自定义规则 可以根据错误定位到对应的规则 支持ES6 唯一一个支持JSX的工具 不足 需要进行一些自定义配置(因为太灵活了嘛,不过文档是很详细的) 慢 (它比其他两个都要慢) Vim支持 我们都使用Syntastic来配置 JSLint的Vim配置 有一个jslint.vim当然版本太老了。。我们不用这种方式做。 安装jslint sudo npm install jslint -g 在vimrc中添加如下配置 let g:syntastic_javascript_checkers = ['jslint'] JSHint的Vim配置 安装jshint

用正确的姿势开源Python项目

做个备忘,也希望可以帮到别人。 目录结构(初始化) 一般我们都会选择在项目的顶层包含较基础的文件,比如setup.py,requirements,README等文件。 一般情况下,一个预发布的Python项目中应该包含以下几类文件: projects (项目的主体文件) setup.py requirements Readme (项目说明) docs (项目文档) test 其中,projects文件夹要以项目命名,存放实际的Python Package. 这里放一个我的项目的目录作为例子。 ➜ httpmultipart git:(master) tree -L 2 . ├── build │ ├── bdist.linux-x86_64 │ └── lib.linux-x86_64-2.7 ├── dist │ ├── httpmultipart-0.1.0-py2.py3-none-any.whl │ └── httpmultipart-0.1.0.tar.gz ├── docs │ ├── _build │ ├── conf.py │ ├── index.rst │ ├── Makefile │ ├── userguide │ └── userguide.rst ├── env │ ├── bin │ ├── include │ ├── lib │ └── local ├── httpmultipart │ ├── __init__.

对监控系统的思考

近期在做运维监控方面的事情,也研究了一下其他人是如何做的。把自己的想法做个总结记录一下吧。 监控期望的目标 及时发现 需要的是即时监控并报警 及时定位 定位问题要分开讲 运维层面 > 是机器硬件问题还是上面运行的基础服务的问题,或者是新上线代码的问题,需要回滚。 代码层面 > 在发生问题的时候,优先解决问题。定位代码问题提交hotfix 可以在解决问题之后做。 及时处理 提前预测(尽量减少问题的发生) 提前预测可以做的事情有很多,数据挖掘/分析之类的。当然有个更简单的方法,就是先小范围上线,进行监控。如果发现出问题了,就停止上线,进行回滚。(我们现在就是这样做的,虽然原因并不是这个 2333 监控遇到的主要问题 监控指标多 服务器CPU,内存,网络等的指标,基础服务Redis, MongoDB等的运行指标,对外服务的API是否正常工作,还有数据是否正确等。 监控报警多 监控指标多的时候,自然报警也会相应增加,但是报警的分组与轻重缓急也是一个很麻烦的问题。还有就是部署着不同服务的机器,触发报警时候的指标也不好确定。 报警多而且有关联,如何查找原因 可能同时会有多个指标触发了报警,但是要定位问题的时候,如何可以快速的定位问题。 多维度数据监控 这个话题太大(要感谢Baidu的颜大大的指点) 数据监控符合二八原则,重要数据需要多角度进行观察,需要有meta管理,需要动态简单配置。选择 好的,合理的数据模型可以有效的进行处理。 数据采集部分,在单机器做聚合;命名上使用正则格式化;完善的配置功能,支持数据流自定义维度。 对开源系统的使用,需要按照自己的实际情况进行适配。保证高可用性 先写这些吧,之后有时间再写,还有QCon上对运维监控上的一些分享也非常值得思考

Open-Falcon监控系统部署

本文并不分析Open-Falcon的架构或者选用它的原因,官方的文档在这里,虽然还不够完善。不过这也是我写这篇的原因,官方文档并没能把整个部署过程连在一起,而且个别地方有点问题。我在这篇文章中就不介绍各个组件的作用和功能了,只是单纯的介绍如何从零部署。 安装 下载 wget https://github.com/XiaoMi/open-falcon/releases/download/0.0.5/open-falcon-0.0.5.tar.gz -O open-falcon.tar.gz 解压 mkdir tmp tar -zxvf open-falcon.tar.gz -C ./tmp 基础环境 sudo apt-get install redis-server sudo apt-get install mysql-server pip install virtualenv # 数据库初始化的代码来源于官方文档 git clone https://github.com/open-falcon/scripts.git cd scripts mysql -h localhost -u root -p < db_schema/graph-db-schema.sql mysql -h localhost -u root -p < db_schema/dashboard-db-schema.sql mysql -h localhost -u root -p < db_schema/portal-db-schema.

源码编译MongoDB

上周放假正好有时间,编译安装了MongoDB,虽然MongoDB用了挺长时间的,但还是第一次用源码编译。在此做个备忘。因为已经完整编译安装过了,所以写起来的时候,就按照先知视角来写了~ 2333 下载MongoDB源码 MongoDB的官网上是有已经编译好的二进制包的,这里选择clone MongoDB在github上的仓库 git clone https://github.com/mongodb/mongo && cd mongo 在docs/building.md中是编译所需的依赖。 * A modern C++ compiler. One of the following is required. * GCC 4.8.2 or newer * Clang 3.4 (or Apple XCode 5.1.1 Clang) or newer * Visual Studio 2013 Update 2 or newer * Python 2.7 * SCons 2.3 我这台服务器是CentOS 6.5, 上面的gcc版本比较低,这里就先更新gcc咯. gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16) Copyright © 2010 Free Software Foundation, Inc.