创作者滞后的快乐

来源:the5fire   |   更新时间: 4月前   |   分类: 随笔


一、

前几天@Manjusaka 给我发来一个截图,如下:

自己创作/分享的内容能够帮到别人确实值得开心,尤其是别人给你直接的反馈。

这种快乐我称之为滞后的快乐,这种快乐可以持续很久,知道你的内容被从互联网抹除,或者你被从星球上抹除。

从我的写博客、分享内容的经验来说,分享本身就是让人兴奋的一件事。脑袋中空想的东西,如果不寄托到电子呈现出来的文字上,你很难把它具象化。偶尔会看过去几年十几年写的内容时会好奇自己那时的脑袋中是在想什么,处于什么样的境地,能把想法化为这样的文字。

查看原文

Redis RESP3 的一些想法

来源:kawabangga   |   更新时间: 4月前   |   分类: 程序开发笔记


在 Python 中使用 Redis,基本上都会选择 redis-py 这个库。本质上,它是封装了 Redis 命令,将它们变成 Python 的函数。比如 SET 这个命令,它的使用方式,在redis 文档中是这么定义的:

SET key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]
查看原文

[MQ]beanstalkd消息队列笔记

来源:vimiix   |   更新时间: 4月前   |   分类: 


beanstalkd 是一个简单快速的分布式工作队列系统,协议基于 ASCII 编码运行在 tcp 上。其最初设计目的是通过后台异步执行耗时任务方式降低高容量Web应用的页面延时。而其简单、轻量、易用等特点,和对任务优先级、延时/超时重发等控制,以及众多语言版本的客户端的良好支持,使其可以很好的在各种需要队列系统的场景中应用。

Beanstalk的应用场景主要有:

消息异步处理(消息队列的基本需求)

查看原文

2020年,PEP8指定一行最大长度79的标准是否值得坚持?

来源:dongwm   |   更新时间: 5月前   |   分类: 


PEP8是 Python 官方编码风格指南,是每个 Python 工程师都要遵守的规范。我认为养成良好的编码习惯是非常重要的,因为代码是写给人读的,一手漂亮的代码看起来就是赏心悦目。我从学习 Python 开始没多久就开始刻意的遵守 PEP8,对其中绝大部分的规范都没有异议,以我的工程经验,PEP8 基本覆盖了日常开发涉及到的各个地方。

这篇文章主要讨论「Maximum Line Length」部分规定的「最大行长度为 79 个字符」这项。首先明确一点,这个 79 的长度一直以来都不是 PEP8 的刻板限制,从 2013 年开始,PEP8 就用各种细节描述提到可以扩展到 99 个字符,现在的版本是这样描述的:

查看原文

请不要再使用 __file__ 啦!

来源:kawabangga   |   更新时间: 5月前   |   分类: Python


一般来说,Python 的 module 会有一个 __file__ 属性,定义了 module 的 path。在 Python 中,使用这个属性非常常见,比如获取 module 所在的目录地址,以便于读取这个 module 同级的,非 Python 脚本的其他文件,比如库需要依赖的数据等:module_dir = os.path.abspath(os.path.dirname(__file__));或者用来获取脚本的位置,来进行魔法import操作。

查看原文

限流后,你可以通过指数退避来重试

来源:prodesire   |   更新时间: 5月前   |   分类: 


最近做云服务 API 测试项目的过程中,发现某些时候会大批量调用 API,从而导致限流的报错。在遇到这种报错时,传统的重试策略是每隔一段时间重试一次。但由于是固定的时间重试一次,重试时又会有大量的请求在同一时刻涌入,会不断地造成限流。

这让我回想起两年前在查阅Celery Task 文档的时候发现可以为任务设置retry_backoff的经历,它让任务在失败时以指数退避的方式进行重试。那么指数退避究竟是什么样的呢?

查看原文

每行80个字符在今天(2020年)依然合理!

来源:kawabangga   |   更新时间: 5月前   |   分类: 程序开发笔记


很多代码库每行长度最多为 80,这是因为古老的打孔纸的最大长度是 80,一开始的显示器每一行显示的字符也并不是特别多。这一Max Length = 80的传统被一直延续下来了。

现在宽屏显示器非常流行,有一种声音说在代码中将每行的字符限制为 80 是没有必要的,因为这会浪费显示器的空间。

但是我认为行长度设置为 80 依然有道理:

“浪费宽屏显示器的空间” 是不实的。基本上所有的编辑器都有“分屏”的功能,80个字符更有利于分屏展示代码。相反,如果行长度太长,反而会给分屏带来麻烦,比如10行代码中有1行是100多个字符,那么分屏的时候会将这一行“折行”(wrap),显示的很糟糕;如果行长80,可以自由的分屏。

查看原文

简单聊聊 MySQL 全文索引

来源:manjusaka   |   更新时间: 5月前   |   分类: MySQL


最近踩 MYSQL 中文本搜索的坑踩了挺多,来写个具体的文章总结下 MYSQL 中文本搜索的一些知识点吧

在我们是使用 MYSQL 的过程中,总会有一些模糊搜索的需求,比如我们现在有这样一张表

create table if not exists `user`
(
`id` bigint(20) not null auto_increment,
`name` varchar(255) not null,
`age` int not null,
`update_time` timestamp not null,
`create_time` timestamp not null,
index (`name`),
primary key (`id`)
) engine = InnoDB
charset = 'utf8mb4';
查看原文

4步爬取微博评论数据,会写 helloworld 就能学会

来源:foofish   |   更新时间: 5月前   |   分类: PYTHON技术


想去微博爬下微博评论拿来做数据分析,拿以前写的代码用发现跑不起来了

然后用浏览器登录微博看了下请求过程,发现规则确实变了。以前可以直接看到数据接口,现在变复杂了。

咋办呢?

吭呲吭呲从0开始分析? 那样太低效了。你遇到的坑肯定很多人都遇到过,这个时候我们就没必要自己重新去踩了。直接从他们填好的坑上走过去就好了,过蜀道如平川。

这里教你一个方法,叫做5步法爬取微博评论。

查看原文

Use the Index, Luke! 笔记2 性能、Join操作

来源:kawabangga   |   更新时间: 5月前   |   分类: 数据库


这是读use-the-index-luke的第二篇笔记,是Testing and Scalability和The Join Operation两章的内容。

在开发环境工作很好的 SQL 到了生产环境可能执行的很慢,主要会受两个方面的影响:

分析 Execution Plan 的结果会比简单的 Benchmark 更有自信(要格外注意 Predicate Information 中的 filter,filter 随时可能爆炸)。完全的压测也是有必要的,但是通常成本很高。

查看原文

PEP 584:字典合并操作符来了

来源:prodesire   |   更新时间: 5月前   |   分类: Python


就在本周,字典合并特性(PEP 584)的提交被合入了 CPython 的主干分支,并在 2020-02-26 发布了Python 3.9.0a4预览版本。

那什么是字典合并操作符呢?在回答这个问题前,我们不妨回忆下集合的合并操作。当我们想要对两个结合做合并操作时,会怎么做呢?

>>> s1 = {1, 2}
>>> s2 = {2, 3}
>>> s1 | s2 # s1 和 s2 取并集,生成新的集合;与 s1.union(s2) 等价
{1, 2, 3}
>>> s1 |= s2 # s1 和 s2 取并集,并更新到 s1 上;与 s1.update(s2) 等价
>>> s1
{1, 2, 3}
查看原文

PDM - 一款新的 Python 包管理器

来源:frostming   |   更新时间: 5月前   |   分类: 编程


去年临近跨年的某一天,一个包管理器突然在脑海中形成了蓝图。粗略地估计了一下我的编码能力,我认为这在我的能力范围之内,于是尽管年底非常忙,还要忙着晋升答辩的事情,我还是腾出空(摸鱼)写下了我的第一行代码。

查看原文

集合里的元素怎么“不见了”?

来源:kawabangga   |   更新时间: 5月前   |   分类: 程序开发笔记


昨天花时间在 debug 一个非常诡异的问题,Java 代码里面的一个HashSet集合里面命令包含我这个元素,equalshashCode都一样,甚至对象的id都是一样的,但是contains方法返回的结果总是 false 的!最后花了很多时间,百思不得其解,一度怀疑我生活在 Matrix 里面。最后发现问题的一刻也恍然大悟,发现这是一个我早就知道的问题。这必定成为我职业生涯的一个污点,所以我打算记录一下这个问题。

查看原文

Leetcode Weekly Contest 176 题解

来源:manjusaka   |   更新时间: 5月前   |   分类: 刷题


emmmm,我的拖延症没救了,顺便加上这周沉迷 Kotlin ,这篇本应该周一就写完的题解拖到现在,= =然而这周双周赛,,我又得写两篇题解了。。。

题面:

Given a m * n matrix grid which is sorted in non-increasing order both row-wise and column-wise.Return the number of negative numbers in grid.

查看原文

游戏《蔚蓝山》教我的编程道理

来源:piglei   |   更新时间: 5月前   |   分类: 


如果有这么一款游戏,你操作的角色平均每 20 秒就会死亡一次,正常通关一次,总共需要死掉超过 2000 次。你猜这是一款神作还是垃圾?

《Celeste》(译名:“蔚蓝山”)就是这么一款游戏。在游戏里,你扮演一个名为 Madeline 的女孩,通过跳跃、抓墙、冲刺等动作,去努力登顶一座名为 “Celeste” 的高山。

正如我在开头说的,这款游戏的难度高到令人发指,玩家平均得死上千次才能通关。但奇怪的是,这款游戏获得的成就似乎和它的难度一样高。在 2018 发售那年,它获得了 TGA “年度游戏”提名并成功拿下了“最佳独立游戏”奖项。截止到 2018 年底,它总共卖出了超过 50 万份。

查看原文

IRedis 1.0 发布

来源:kawabangga   |   更新时间: 5月前   |   分类: Python


这算是 IRedis 开发系列的第4篇笔记吧。这篇文章来聊一下 IRedis 最近发布 1.0 带来的新 Feature,一些开发过程中的思考,以及最后贴一下发布之后的一些“成就” (炫耀)。上次提到的介绍一些开发中使用的 tricks,就让我再拖到下一篇博客吧!

PS: 如果您还不知道 IRedis 的话,可以理解成是 redis-cli 的一个替代品。类似于 IPython 相比于 python 官方的 REPL,专注于用户体验,支持语法高亮,命令提示,自动补全等。全部的 Feature 可以参考项目 Readme,以及官网。

查看原文

[译]Richardson成熟度模型

来源:vimiix   |   更新时间: 5月前   |   分类: 


原文链接:https://martinfowler.com/articles/richardsonMaturityModel.html

Leonard Richardson提出的一个模型,将实现REST方法的主要元素分解为三个步骤,分别包括:资源(Resources)、HTTP动词(HTTP Verbs,如GET、POST等)和超媒体控制(Hypermedia Controls)。

查看原文

图表即代码:使用 Diagrams 制作云系统架构原型图

来源:prodesire   |   更新时间: 5月前   |   分类: Python


昨天发现了一款非常不错的云系统架构原型图制作库Diagrams,通过它,我们便可以使用代码的方式绘制诸如阿里云、AWS、Azure、K8S 等系统架构原型图。

相比于在 UI 上对各种图标进行拖拽和调整,这种方式更符合我们程序员的使用习惯。

本文不仅要介绍下这个库,也想说说我是如何参与到这个库中以支持阿里云资源。

Diagrams使用Graphviz来渲染图表,在安装diagrams之前需要先安装 Graphviz。

查看原文

Python 工匠:写好面向对象代码的原则(下)

来源:piglei   |   更新时间: 5月前   |   分类: 


这是 “Python 工匠”系列的第 14 篇文章。[查看系列所有文章]

在这篇文章中,我将继续介绍 SOLID 原则剩下的两位成员:I(接口隔离原则)和D(依赖倒置原则)。为了方便,这篇文章将会使用先 D 后 I 的顺序。

软件是由一个个模块组合而成的。当你跟别人说:“我在写一个很复杂的软件”,其实你并不是直接在写那个软件,你只是在编写它的一个个模块,最后把它们放在一起组合成你的软件。

查看原文

百度低质回答是如何坑了你

来源:frostming   |   更新时间: 5月前   |   分类: 编程


昨天某个新手又抛出来个问题:为什么找不到django-admin可执行程序?我一看这不是Python高频问题之一吗1,就问他PATH是怎么设置的,结果他把django-admin复制到了site-packages/django/bin下面。这就相当荒谬了,lib/site-packages下面放的是库文件,这里是不可能会有bin存在也不会有可执行程序在这里面的,当然,你随便放在哪,只要加到PATH里面了就肯定能工作。那么试问为何不把django-admin原本所在位置加到PATH里而要用这么蹩脚的方法呢?

查看原文

本页内容使用均遵循相关开源协议,部分内容获得作者本人授权