Zoom 直播分享 Awesome Commandline 录像和资料下载

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


之前一直想说分享一下 iredis 开发的一些想法和经验来,这篇博客拖了很久没有写。上个周末我们直接搞了一场在线的分享形式,效果还不错。有幸请到了 iredis 这个项目的两位开发者 rhchen 和 wooden-robot,下午一起和大家通过 Zoom 的形式分享了一下。

这一期辛姐有帮我们录像,现在已经上传到了 Youtube 上,有兴趣的朋友可以在 Youtube 观看。

查看原文

Python 的 block stack

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


MAR 30TH, 2020

网上关于 Python block stack 的文章少得可怜,中文文章更是基本搜不着。block stack 是 CPython 中的重要概念,但其实现又比较繁琐,因此我会先跳过细节,讲一讲为什么需要 block stack。之后会贴一些链接,里面有更细致的讲解。本文假定读者对 Python 的字节码有基本了解,且针对的是 Python 3.7 版本。

查看原文

MacOSX 中 hostname 的设置

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


使用命令行工具 hostname 可以查看系统 hostname 设置:

➜ vimiix  ~  ⇝ hostname
vmxmbp

它的值会按优先级依次取决于下列值:

hostname 命令设置的值

HostName 属性值

LocalHostName 属性值(通常系统都会设置此属性)

查看原文

Use the Index, Luke! 笔记4:sorting 和 grouping

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


排序和分组是非常耗费 CPU 和内存的一项操作。因为需要内存来放排序的中间结果,排序算法一般也都是 O(n*log(n)) 的复杂度。好在使用索引我们也可以优化这一项操作。原理非常简单:假如结果已经是排好序的,那么我们查出来结果之后就不需要额外的排序操作了。

要避免排序操作,我们需要索引 cover ORDER BY 的部分。原理很简单,如果 order by 中有一部分没有在索引里面,那么我们就无法保证查出来的内容是按照索引排好序的,所以还要再对这个结果排序一遍。

查看原文

天堂的另一面

来源:kawabangga   |   更新时间: 4月前   |   分类: 听歌有感


英国“迷幻”摇滚 Glass Animals 发布了 Zaba 之后,开始了非常激进的巡回演唱会,一共办了将近 140 多场。在演唱会的旅行中,他们从不同的人那里听到了一些故事,有些甚至是亲身经历的。GA 将这些故事写成了新的专辑,叫做《如何做人》(How to Be a Human Being) 。

这张专辑一共 11 首歌,专辑的封面上有 11 个人,每一首歌的背后都是一个故事,虽然不是每一个故事都对剧情讲的很清晰,但是表达的感情却很强烈,悲伤,后悔,愤怒……

查看原文

一日一技:实现有过期时间的LRU缓存

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


在一日一技:实现函数调用结果的 LRU 缓存一文中,我们提到Python自带的LRU缓存lru_cache。通过这个装饰器可以非常轻松地实现缓存。

现在我们考虑下面这个应用场景:MongoDB中有100对id-用户名的对应关系,我从Redis中持续不断读取id,如果id能在MongoDB中找到对应关系,那么就把对应的用户名打印出来。如果找不到对应关系,那么就把这个id丢弃。

查看原文

拒绝想当然,不看文档导致GNE 的隐秘 bug

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


GNE上线4天,已经有很多朋友通过它来编写自己的新闻类网页通用爬虫。

今天有一个用户来跟我反馈,GNE 0.1.4版本在提取澎湃新闻时,只能提取一小部分的内容。

一开始我以为是提取算法有问题,Debug 了半天,最后才发现,是新闻正文在预处理的时候,就被提前删除了!

为了解释这个问题,我们用一小段 HTML 代码来还原当时的场景:

h = '''
<html>
<body>
<div class="txt">
第一行
<p class="con" />
第二行
<p class="con" />
第三行
</div>
</body>
</html>
'''
查看原文

一日一技:应该传入对象还是在用的时候再初始化?

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


在写 Python 代码的时候,大家可能会在不知不觉中使用一些设计范式。我们来看两个例子。

假设有一个类People:

class People:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def dance(self):
print('我在跳舞')
def study(self):
print('我在学习')
def eat(self):
print('我在吃东西')
查看原文

一日一技:使用二分法排查正则表达式的异常

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


现在我有10亿条微博正文,并从同事手上拿到了15000条需要过滤的垃圾信息正则表达式,只要微博正文符合任何一条正则表达式,就删除这条微博。

正则表达式的格式为:

^你成功领取
|^感谢您的积
|^在第\d+次抽奖.
|^只有帮主才
|^目标有相应
|^宝宝#G.
|^提交失败,
|^您已领取过
|^破军争夺战
|^首席大弟子
|数第\d+个丫鬟
|你的店铺
|恭喜.*?投中了
|<web
|你将该物品拆解成
|^你身上没有
|欢迎参加微博抽奖
|蔡徐坤
|王一博
|朱一龙
...
查看原文

你经常看到却经常忽视的__init__.py有什么用?

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


Python 初学者在阅读一些 Python 开源项目时,常常会看到一个叫做__init__.py的文件。下图为著名的第三方库requests的源代码:

那么__init__.py有什么用呢?本文介绍它的两个用途。

假设我们有两个文件main.py与writer.py,他们所在的文件结构如下图所示:

main.py在DocParser文件夹下面;writer.py在DocParser/microsoft/docx/文件夹下面。writer.py文件中有一个函数write。其内容如下:

查看原文

彻底搞懂Python 中的 import 与 from import

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


对不少 Python 初学者来说,Python 导入其他模块的方式让他们很难理解。什么时候用import xxx?什么时候用from xxx import yyy?什么时候用from xxx.yyy import zzz?什么时候用from xxx import *?

这篇文章,我们来彻底搞懂这个问题。

以正则表达式模块为例,我们经常这样写代码:

import re
target = 'abc1234xyz'
re.search('(\d+)', target)
查看原文

一日一技:推特时间的格式化方案

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


在使用推特开放API获取推文的时候,会发现推文的发布时间是下面这样的:

{
...
"created_at": "Tue Dec 24 10:51:15 +0000 2019",
...
}
查看原文

逆向操作,把被压平的字典还原成嵌套字典

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


在使用 yield 压平嵌套字典有多简单?这篇文章中,我们讲到,要把一个多层嵌套的字典压平,可以使用yield关键字来实现。

今天,我们倒过来,把一个已经被压平的字典还原成嵌套字典。

目标字典为:

{
'a_b_h':1,
'a_b_i':2,
'a_c_j':3,
'a_d':4,
'a_c_k':5,
'a_e':6
}
查看原文

剖析灵魂,为什么aiohttp默认的写法那么慢?

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


在上一篇文章中,我们提到了aiohttp官方文档中的默认写法速度与requests单线程请求没有什么区别,需要通过使用asyncio.wait来加速aiohttp的请求。今天我们来探讨一下这背后的原因。

我们使用一个可以通过URL设定返回延迟的网站来进行测试,网址为:http://httpbin.org/delay/5。当delay后面的数字为5时,表示请求这个网址以后,要等5秒才会收到返回;当delay后面的数字为3时,表示请求这个网址以后,要等3秒才会收到返回。大家可以在浏览器上面输入这个网址测试看看。

查看原文

为 aiohttp 爬虫注入灵魂

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


听说过异步爬虫的同学,应该或多或少听说过aiohttp这个库。它通过 Python 自带的async/await实现了异步爬虫。

使用 aiohttp,我们可以通过 requests 的api写出并发量匹敌 Scrapy 的爬虫。

我们在 aiohttp 的官方文档上面,可以看到它给出了一个代码示例,如下图所示:

我们现在稍稍修改一下,来看看这样写爬虫,运行效率如何。

查看原文

如何使用Python读写Kafka?

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


关于Kafka的第三篇文章,我们来讲讲如何使用Python读写Kafka。这一篇文章里面,我们要使用的一个第三方库叫做kafka-python。大家可以使用pip或者pipenv安装它。下面两种安装方案,任选其一即可。

python3 -m pip install kafka-python
pipenv install kafka-python
查看原文

Kafka 里面的信息是如何被消费的?

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


作为一个爬虫工程师,Kafka 对你而言就是一个消息队列,你只需要掌握如何向里面写入数据,以及如何读取数据就可以m’ys’q作为一个爬虫工程师,Kafka 对你而言就是一个消息队列,你只需要掌握如何向里面写入数据,以及如何读取数据就何读取就可以可了。

请谨记:使用 Kafka 很容易,但对 Kafka 集群进行搭建、维护与调优很麻烦。Kafka 集群需要有专人来维护,不要以为你能轻易胜任这个工作。

查看原文

Use the Index, Luke! 笔记3:避免回表

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


你一定听说过一种加速查询的技术,使得只使用索引就可以得到查询的内容,而“避免回表”,至少应该在别人的面试经验中看过,或者自己面试中被问到过吧。这篇文章是 use the index luke! 中clusting data这一章节的笔记,解释了这样做的原理,实践。

Data Cluster 的意思是将连续的,相关的数据尽量存储在一起,这样查找的时候 IO 的成本更低,因为顺序读比随机读速度快,磁头移动少。我们的索引也有这样的功能,帮我们安排数据的顺序,让读的速度更快。

查看原文

为什么 Python 的 Type Hint 没有流行起来

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


在知乎上看到一个很有意思的问题,为什么TypeScript如此流行,却少见有人写带类型标注的Python?

虽然我没忍住在知乎上输出了答案,但是为了以防万一,我在博客上扩展,与更新一下

BTW 最近上线真的心力憔悴,写个文章放松下

其实这个答案很简单,历史包袱与 ROI,在了解为什么有这样的现象之前,首先我们要去了解 Type Hint 能给我们带来什么,然后我们需要去了解 Type Hint 的前世今生

查看原文

Java 泛型初涉

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


这是一篇初学者对 Java 泛型的理解,如果不对欢迎指出。

Java 中的泛型,在编译时期提供类型检查。在运行时期,为了让泛型零开销,泛型都被擦除。擦除的方式:

这种类型擦除的方式保证了没有新的 class 生成,使用泛型不会增加程序的开销。

在读了很多资料之后,我发现自己对泛型的误解主要是基于从 Python 来的印象。比如在Animals的一个 list 中,里面即可以有Dog又可以有Cat,所以就以为在 Java 中ArrayList即可以有Dog又可以有Cat,认为这样声明即表示这个ArrayList可以放任何Animal的子类。其实不是的,是一个类型声明,最终只会表示一种类型。即这个ArrayList即可以是一个Dog的ArrayList,也可以是一个Cat的ArrayList,但不能有Cat又有Dog。

查看原文

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