作者文章归档:seraphln

逃离『低质量推荐』


最近看综艺时发现有小度的广告,这才意识到家里的『小度』已经吃灰好久了。还记得最早去度秘工作时,对『小度』产品无限看好,感觉它是一个非常cool的产品,就像『钢铁侠』里的Jarvis一样,通过简单的语音交互,就能清楚的理解用户的诉求,进而满足用户诉求。 但是当用的时间越来越久就会发现,这些所谓的『智能助手』在大部分的场景下都是不能满足诉求的。究其原因可能是我本意需要的是一个能真的懂我的管家,而不是一个装作很懂我的机器人。

这就跟当前市面上大部分的APP一样。

说到APP,我好像已经记不得自己上一次打开新闻客户端是什么时候了。并不是我不关注新闻时事了(恰恰相反,我现在对于新闻的诉求变得更强了...

Read more

Python requests库的一些实用经验


Python的requests库应该是Python里最常用也是最好用的HTTP库。相较于之前的urllib、httplib等库,requests的封装更友好,上手更加容易。

show me the code

使用requests库完成一次http请求非常简单,代码如下:

import requests

url = "https://www.baidu.com"
resp = requests.get(url)

requests库在拥有高级封装的同时,也提供了一些有用的request hooks。它们可以帮助我们更好的处理请求中出现的问题。

request hooks

当我们在调用一个第...

Read more

Python的AsyncIO


AsyncIO(Asynchronous IO)

AsyncIO是Python从3.4开始支持的一种并发编程实现。随着AsyncIO一起还有2个新增的关键字:

1. async
2. await

其中async关键词可以用来定义函数。比如:

async def foo():
    pass

这样就可以定义一个异步的Python函数了。而await则可以用来等待异步的返回结果:

def bar():
    await foo()

并发 vs 并行

在详细的了解AsyncIO之前,我们先来复习几个概念:

并行 (Parallelism)

并行是指同一时间有多个操作在同时执行。在Pytho...

Read more

Python的异常使用经验总结


在Python中,BaseException是所有异常的基类。但是通常我们不应该直接使用它来捕获异常(虽然它都可以捕获),取而代之的是我们需要针对于具体的业务场景,自定义适合的异常类型。

BaseException的实现在CPython源码中的Objects/exceptions.c这个文件中。如下文:

/*
 *    Exception extends BaseException
 */
SimpleExtendsException(PyExc_BaseException, Exception,
                       "Common base class fo...

Read more

Python的垃圾回收


在介绍垃圾回收之前,我们先来看看什么是内存管理。

内存管理

在任意一种编程语言中,都是通过声明对象、操作对象来完成某项任务。这里的对象可以是简单类型,比如:字符串、整数等等。也可以是像数字、哈希、类等复杂的数据结构。这些对象的值保存在内存中,可以方便程序快速读取数据进行操作。 编程语言的内存管理是编程语言设计的一个重要方面。它是决定编程语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为编程语言最重要的特征。

手工年代

在使用早年的编程语言(C、C++等)开发时,开发人员需要自己在代码中对内存进行管理。也就是说,在声明一个对象之前需要先进行内存分配,分配完毕之后才能...

Read more

Kubernetes基础


Kubernetes

Kubernetes是由Google开源的,用于自动部署、扩展和管理容器化应用程序的开源系统。 它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。 通常我们会叫它:k8s,这是因为它用8代替8个字符“ubernete”而组成的缩写。Kubernetes的目标是让部署容器化的应用简单并且高效(powerful) 下文将以k8s来代替kubernetes。

背景知识

要了解k8s,首先需要弄清楚几个概念:

  1. 虚拟机
  2. 容器
  3. Docker、rkt

虚拟机

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完...

Read more

对稳定性工作的一些思考 - 什么是SRE


什么是SRE

最早接触SRE这个名词还是在跟CloudFlare进行一些业务合作的时候,当时他们有一个专门的SRE团队来负责整个CDN系统的稳定性。 本着好奇的心态去了解,发现SRE的全称是(Site Reliability Engineering,aka:站点可靠性/稳定性工程师)成为一名合格的SRE需要同时具备研发(Dev)和运维(OP)的能力。同时它又不仅仅是2个职能的叠加,而是一种对系统稳定性、可用性、团队持续迭代喝持续建设的体系化解决方案。

如何做一名SRE

研发和SRE的区别

那些跟我一样从研发开始接触稳定性工作的选手在刚开始时可能会有类似的问题那就是对于稳定性相关的工作不知...

Read more

也来谈谈『苟且红利』


看完变量之后,对于『苟且红利』这个词印象确实蛮深刻的。『苟且红利』是指虽然看起来所有人都在做事,但是其中有大量的苟且者。你只要稍微比他们往前一点点,就能享受到的红利,也就是在别人觉得没必要的地方,自己坚决不苟且,并且在别人不那么认真的地方,自己多较劲一点,自己深想一步,多认真一点,你就能享受到别人的苟且,给自己带来的红利。

在当下社会里,如果细心观察,总能发现『苟且红利』的存在。这里面有一个很重要的原因是当从业者习惯了按部就班,忽视了持续创新的动力。此时就会出现创新乏力,与此同时,当下社会的竞争激烈是空前的,一旦这些『鲨鱼』们闻到了机会的味道,就会蜂拥而至。通过提供更加优质的服务逐渐占领...

Read more

变量的读后感


趁着最近没有太多事情,把《变量 1》和《变量 2》这两本书拿出来读完了。这个系列丛书的行文是如此流畅,让我这个现在已经没有太多耐心去读书的人能耐下心来把它们读完了。

在这2本书里,让我感触最深的是关于教育的部分,尤其是『先锋学院』和『百年职校』这两部分。还记得当我还在上初高中的时候,社会对于网络的态度还是普遍排斥的,舆论里充斥的都是『电子海洛因』之类耸人听闻的报道。如果一个孩子喜欢上了电子游戏,那通常会被家长认为是不务正业,不思进取。严重一点的,还会被送到『羊教授』的戒网中心里感受一下元素萨那满满的『爱意』。

我一直认为这样是不对的。对于孩子而言,他们的认知还没有那么健全,因此形式更贴近...

Read more

Django将数据从Sqlite迁移到MySQL


背景

最近在做一个内部项目时,为了开发效率,所以选择了Sqlite作为数据库,在项目上线时需要将数据库切换到MySQL。

操作步骤

  1. 使用dumpdata将数据导出到文件
python manage.py dumpdata -> data.json
  1. 修改django的settings配置,改为MySQL

  2. 使用loaddata将数据导入到新数据库

python manage.py loaddata data.json

等待命令执行完毕之后,可以自行检查数据是否正确导入。

常见问题

由于字段过长导致的导入失败

这种问题是因为Sqlite对于字段长度并不做校验,比如我们定义一个...

Read more