缓动曲线

缓动曲线在UI动画中的应用十分广泛。缓动曲线可以用来控制动画的运动速率,使其按照我们的意愿模拟真实物体的运动规律。举个例子,当我们往上抛出一个石块时,在不考虑空气阻力的情况下,石块会在重力的作用下,先匀减速上升,直至速度为零。而后,石块的速度又会从零开始匀加速下降。那么,如何模拟这样的运动过程呢?在高中物理课上,我们已经知道,石块的位移和时间之间满足平方关系:
$$
h(t) = v_0t – \frac{1}{2}gt^2 + h_0
$$

其中,$h(t)$ 是石块在 $t$ 时刻的高度,$v_0$ 是石块的初速度,$g$ 是重力加速度,$h_0$ 是石块的初始高度。从这个式子可以看出,我们需要一条二次方的运动曲线(抛物线)来模拟这样的运动过程。而类似这样的一条曲线,就是本文要讨论的缓动曲线。

总的来说,缓动曲线包含四大类,分别是线性(linear)、缓入(ease in)、缓出(ease out)和缓入缓出(ease in and out)。除了线性类,其余三大类又可以细分出各种子类,比如二次方缓动曲线(Quadratic)就是其中的一个子类。以上文提到的石块为例,石块的运动曲线满足二次方缓动曲线,而上升过程满足缓出的过程(速度先快后慢),下降过程则满足缓入过程(速度先慢后快)。本文将对线性类和缓动类的 10 种子类共 11 种类别 31 种组合情况进行公式化整理,并绘制相应的缓动曲线图,供大家查阅。这 11 种类别分别为:

  • Linear
  • Sinusoidal
  • Quadratic
  • Cubic
  • Quartic
  • Quintic
  • Exponential
  • Circular
  • Back
  • Elastic
  • Bounce

阅读余文缓动曲线

C/C++ 函数指针

函数指针是一个指向函数地址的指针,未来可以通过函数指针来调用函数。可以把函数指针的定义理解为一种协议代理机制。函数指针定义了函数应该长什么样,需要什么参数,会得到何种返回值。这就相当于定义了一个协议。不同的代理人根据这一层协议,去实现自己的函数体,也即实现自己的代理行为。不同的代理人可以把自己的函数体传递给函数指针的调用者,调用者并不关心是谁代理了这个协议,只要传递给他的是一个合法的非空指针的协议,就可以在合适的时机去执行这个函数体。从这个意义上来说,函数指针的一大好处就是封装了行为。

那么,函数指针具体是如何定义的,调用者是如何调用函数指针传进来的函数体的?这篇文章就通过几个例子来说明函数指针的用法。

阅读余文C/C++ 函数指针

函数式编程:柯里化

柯里化(Currying)是函数式编程一个不可或缺的技术。柯里化就像手机电脑一样,当你没有的时候,你也许觉得它无足轻重;可一旦你拥有了,就会发现再也离不开它了。那么,什么是柯里化?它会用来解决什么问题?为什么说它是一个不可或缺的技术?

阅读余文函数式编程:柯里化

函数式编程:纯函数

纯函数(Pure Function)是函数式编程中一个非常重要的概念,是函数式编程关于“避免使用状态(State)或可变数据(Mutable Data)”这一定义的最直接推论。那么,什么是纯函数?为什么函数式编程追求纯函数的使用?

阅读余文函数式编程:纯函数

Fork 炸弹

在 Linux 的 shell 脚本中,流传着一个很有意思,当然也是相当危险的脚本段,俗称 Fork 炸弹(Fork Bomb)。如下:

:(){ :|:& };:

Fork 炸弹会以极快的速度创建大量的进程(进程数以指数式增长),以此消耗系统分配给予的进程可用空间,使进程表饱和。进程表饱和后,就无法运行新程序,除非终止进程表中的某一个进程;但被终止的进程,又会立刻被 Fork 炸弹探测到并被占用,导致仍然无法运行新的程序。Fork 炸弹生成的子程序在消耗进程表空间的同时,也会占用 CPU 和内存,从而导致系统与现有进程运行速度放缓,响应时间也随之大幅增加,以致于无法完成正常的任务,从而使系统的正常运作受到严重影响。那么,这个由 13 个字符(包括两个空格字符)组成的所谓 Fork 炸弹,为何会有如此大的威力呢?

阅读余文Fork 炸弹

Centos 7 搭建 socks5 代理服务器

我们可以通过 shadowsocks 来实现 socks5 的代理。当然了,前提你得有一台拥有固定 ip 的服务器。

阅读余文Centos 7 搭建 socks5 代理服务器

邮件系统中各组件与相关协议的概念梳理

关于邮件传输,我们大体上可以分为三个过程:

1、用户在本地邮件客户端编写完邮件,把邮件投送到本地端的邮件主机

2、本地端邮件主机把邮件投递到远端邮件主机

3、远端用户的邮件客户端拉取远端邮件主机的邮件

为了实现这三个过程,就需要得到邮件系统中多个组件的帮助。下面就梳理整个邮件系统中包含的若干组件,以及相关的协议。

阅读余文邮件系统中各组件与相关协议的概念梳理