Tornado本身的设计目标是单线程异步非阻塞,要想很好的发挥它的性能最好使用异步IO,并且Tornado本身也提供了异步的AsyncHttpClient的实现,配合gen.coroutine和yield,可以让请求异步执行从而不阻塞当前线程,对于单线程服务器来说,阻塞(blocking)和同步的sleep这种会挂起线程的动作都是服务器的噩梦,因为只有一个线程,所以任何等待都会影响服务器对于其他请求的处理。
异步非阻塞对于第三方IO是http请求的情况还好,毕竟可以使用Tornado提供的异步实现,但是对于有些数据库的IO,则需要异步库的支持,比如针对MongoDB的Motor等。但是第三方异步库的质量也是参差不齐,在实际的工程中
继续阅读 »
本文是基于Mac环境的配置, OSX自带的vim版本较低, 因此首先安装MacVim
brew install macvim
安装好之后, 将以下配置添加到 ~/.bashrc 中
alias vim='/Application/MacVim.app/Content/MacOS/Vim'
继续阅读 »
我真正接触 WebRTC 的 ADM 是在做 iOS 混音的时候,iOS 的音频采集、播放之前没有做过,所以想着从 WebRTC 的音频采集播放代码里借鉴一下 AudioUnit 的使用,结果折腾了半天愣是没搞定,后来索性直接使用了 ADM,为混音项目草草地画上了句号。
继续阅读 »
nginx 中, sites-available 是放所有vhosts的配置文件, 而sites-enable 则是放你想要开启能够被访问的 vhost 文件, 一般是建立一个sites-available 对应的文件的symlink(软链接).
这样子做的好处是, 想关闭此 vhost 的访问时, 可以删除软连接即可, 恢复时重新创建, 可以避免把文件移来移去或者作备份等.
继续阅读 »
在本系列第一篇中,我们分析了 WebRTC-Android 相机采集的实现,本文中我们将分析预览的实现。
有过一定相机开发经验的朋友可能会疑惑,预览还有什么好分析的,不是直接 camera.setPreviewDisplay 或者 camera.setPreviewTexture 就能在 SurfaceView/TextureView 上预览了吗?实际上预览还有更高级的玩法,尤其是需要加上图像处理功能(美颜、特效)时。WebRTC 使用了 OpenGL 进行渲染(预览),涉及下面三个问题:
继续阅读 »
在写本文之前,我还以为自己对android的bitmap很熟悉,直到自己亲手写代码实践,才发现自己错了很多年。真是汗颜啊!
more
Bitmap Config
首先,根据Android API 25的文档简要说明一下Android的Bitmap.Config以下4个选项
继续阅读 »
关于最长上升子序列的O(N*logN)算法已经有不少文章表述,可惜大都不够“好”(甚至语焉不详):我认为“好”的算法描述不但应该清晰地说明计算步骤,更应该讲清思路——即,这个算法是怎样思考得出的。这种思考的过程和方式才是精华之处。我试图用我的理解对这个算法给出一个尽量“好”的推导和表述,使你我一样的普通人都可以理解它的思路。
继续阅读 »
content
{:toc}
宣讲会&初试
现在想想也真是无心插柳的一次找实习。感觉不知不觉中自己真的进步了不少。
首先在我们机房的楼下看到了宣传海报,5.28 有一个联想服务的宣讲会,我看到有前端工程师的岗位,想试试自己的水平如何,就去听了宣讲会。
到了宣讲会现场,人不少,我坐在最后一排。开始就是一些介绍。包括 Future Leader 的介绍等。
继续阅读 »
软件工程是个面包机
excerpt
我们平时印象中的面包机是这个样子的:
烤面包机属于加热电器。其功能是在面包片附近生成足够的热量,以便对面包进行烘烤
继续阅读 »
C#和Java相似:它们都把程序编译成某种“字节码”,然后在某种“虚拟机”上执行该字节码。此外,它们的语法形式都深受C++影响。另外,它们还是相互竞争的关系。因此,把它们放在一起比较是有意义的。
继续阅读 »