为什么我们这么容易被“点燃”?

网络发展到现在,成为了大部分人日常生活的必需品,有微信、抖音、微博等一众全民软件,还有小红书、懂车帝、汽车之家等垂直细分领域的各类平台。我们似乎有了足够多的渠道尽情去“发声”,但并不会有多少人“听见”。能被大众关注到的,是那些各类大V。

大V们是怎么一步一步走到流量顶端的,我不知道,要不然我也就成了大V。但我知道,他们为了保持住自己的流量,需要且必须有足够频繁的更新。所以,你会看到他们不仅发布一些自己专业领域的内容,还会对社会上发生的各种事情“评头论足”,以致于很容易引来一些不一样的声音。网友嘛,一个巨大的群里,又是一个不知道谁是谁的群体,有时候说话难听点,好像都正常,要不然“网络暴力”从何而来。然后那些大V们不干了,对于树大招风引来的质疑甚至是谩骂,大V们也丢掉了作为意见领袖的风度,开始“爆粗口”。接着会引来更多的指责。也许,这也不失为保持流量的很好的方法。

对于自己的意见和看法,我们都是本能地会偏袒,不希望自己会犯错,甚至有时候在理亏时亦无理坚持,不为别的,就为争一口气。在心理学上好像叫一个什么效应,我已经记不起名称,但大概意思我还知道。就是说,从感性角度出发,人都是为己的,没有人愿意承认自己是差的,是不好的,是错误的。比如你买了一件商品,买之前你觉得它这不好那不好,一旦你买下来,你会不自觉地去发现它更多的优点,然后对缺点视而不见,如果有人说它不好,你还会立马进行辩解。当你开车行驶在马路上,有辆车飞快地从你身边经过,你马上就觉得对方是在挑衅你,你一脚油门追了上去,于是一场精彩的公路追逐赛开始了。也许,人家只是上班快要迟到了,或者人家里有急事要去处理,而你却急着要去证明自己,我也可以很快,我可以比你更快。

我们都还是太以自我为中心了,就好像整个世界都要围着我们转。其实地球是绕着太阳在转,就算地球自转也是有一个自己的中心轴,绝无可能围着我们转。你是大V也好,是P民也罢,把时间线拉长了看,其实你什么都不是。能在历史上留下名声的,是那些默默做着研究,没时间关心窗外事的“书呆子”。

什么是TTFB?怎样缩短TTFB?

我相信,没有人喜欢访问一个打开很慢的网站,对吧?有很多原因会导致网站打开缓慢,我们需要进行分析,找到衡量快慢的指标,TTFB就是很常见的一种。
TTFB是英文Time To First Byte的缩写,中文意思就是首字节响应时间。通俗一点来说,就是用户在发起HTTP请求之后得到最初响应之前的等待时间。所以,TTFB越高,代表网站打开越慢,用户需要等待的时间越长。

client-server-model.png

TTFB太长的话,除了用户体验不佳,还会有别的什么影响吗?
一些研究发现,一般来说,TTFB越长的话,SEO排名就会越差。静态网站的话,100ms以内的响应时间被认为是很棒的,但如果是动态页面(比如PHP),那么200ms到600ms也可以认为是不错的,但超过600ms的网站,就需要认真对待,看看是什么原因导致的。

以下原因会影响TTFB:

  1. 要加载的文件数量和大小;
  2. 数据库查询;
  3. 硬件资源,比如CPU、内存、I/O、带宽;
  4. 软件配置,包括数据库和web服务器等。

微信支付APIv3 在PHP开发(H5支付、APP支付)中容易犯错的地方记录

PHP 7.2.X

微信支付API已经更新到v3版本,同时文档也做了更新,相比之前的版本,条理更清晰,但难免还是有一些地方没讲的太清楚,刚接触的人很容易犯错。

一个很大的改动是SDK。之前是官网可以直接下载一个SDK包,然后照着里面的Demo,加上自己的配置,调试一番就基本可以走通。

但现在不是了,官方提供了一个 wechatpay-guzzle-middleware 库,按照GitHub上的说明,通过composer安装即可。由于这个库是依赖于guzzle的,所以,如果你还没有安装guzzle(6.0+),那么同样需要使用composer进行安装。假如你不想用composer安装,也可以,那就按照各自文档的详细说明,去下载库文件,然后引入自己的代码中。不得不说,composer安装还是十分的方便。

安装好库(其实也可以理解成SDK)之后,按照GitHub上的示例代码(分别演示了POST和GET两种请求如何发送),填写相应的参数,即可发起支付请求了。有三个需要注意的参数(见下图):
微信截图_20210208153952.png

  1. 上图1 微信支付平台证书,通过 证书下载工具 下载,放置到网站中,PemUtil::loadCertificate根据路径参数就可以读取到证书内容;注意:这里的证书要和下面的商户证书区分。
  2. 上图2 商户密钥3 商户API证书序列号接入前准备 这里都可以获取到。不要捉急,一步一步按照文档来操作。很幸运,这两个参数我都一次性拿到了。

- 阅读剩余部分 -

使用Python库Pillow等比例修改图片尺寸并压缩

PIL:Python Imaging Library,是一个非常强大的图像处理标准库,但只支持到Python2.7。于是Pillow诞生了,它Fork至PIL,可兼容至最新的Python3.X,还加入了不少新特性。使用pip install Pillow即可安装。

本文使用的基础环境:Python 2.7.18
pip自动安装的是Pillow 6.2.2

现在有一堆尺寸较大的图片,从5千多px到2千多px不等,体积也是,小到3M,大到12M,而且还分布在不同的文件夹里。用ps处理比较慢,要一个一个打开,然后等比例调整尺寸,费时费力。决定用Python来处理,找到了Pillow这个优秀的图像处理库,很快就找到了解决方案。

先看代码:

# -*- coding:utf-8 -*-
from PIL import Image
import os

linesep = os.linesep
sep = os.sep
rootpath = "D:\\image"
maxsize = (1024, 1024)

def resizeImage(start_dir):
    start_dir = start_dir.strip()
    extend_name = ['.jpg','.png','.gif','.PNG','.jpeg','.JPG','.JPEG'] # 查找的文件类型
    os.chdir(start_dir)
 
    for each_file in os.listdir(os.curdir):
        curfile = os.getcwd() + sep + each_file
        img_prop = os.path.splitext(each_file)
        if img_prop[1] in extend_name:
            try:
                im = Image.open(curfile)
            except:
                im.close()
                with open(rootpath + "/process.err.log", "a") as f:
                    f.write(curfile + " open error" + linesep)
            else:
                try:
                    im.thumbnail(maxsize, Image.ANTIALIAS)
                    im.save(img_prop[0] + "_new" + img_prop[1], quality=95, optimize=True)
                except:
                    im.close()
                    with open(rootpath + "/process.err.log", "a") as f:
                        f.write(curfile + " save error" + linesep)
 
        if os.path.isdir(curfile):
            resizeImage(curfile)
            os.chdir(os.pardir)

    print("processing " + start_dir)

if __name__ == '__main__':
    sdir = rootpath
    resizeImage(sdir)

resizeImage函数从指定的文件夹开始,迭代查找指定类型的图片,对其进行Image.thumbnail处理,然后通过Image.save进行压缩保存。中间用到了try..except,是因为有些图片格式可能有问题,导致打开或者保存出错,为避免丢失原图片而做的处理。
可以看到,逻辑其实很简单,但对于有大量图片需要进行处理的情况,这样的小脚本确实能帮上不少忙。

PS:2020年最后一天,挥别过去,迎接全新的一年,全新的自己。

CentOS7.5 安装supervisor 4.2.1

环境:CentOS 7.5,Python2.7.16
建议使用pip安装

安装

pip install supervisor

安装之后,执行echo_supervisord_conf,如果能看到配置文件内容,说明安装成功。

生成配置文件

新建/etc/supervisor目录,然后执行命令:

echo_supervisord_conf > /etc/supervisor/supervisord.conf

配置文件名称建议使用supervisord.conf,如果你取了别的名称,后面执行supervisorctl命令时,就需要指定配置文件,否则会报错。

- 阅读剩余部分 -