谢乾坤 | Kingname

给时光以生命。

在Python中,你可能会发现这样一个奇怪的现象:

1
2
3
4
5
6
>>> 2 == 2 > 1
True
>>> (2 == 2) > 1
False
>>> 2 == (2 > 1)
False

为什么会出现2 == 2 > 1的结果为True?如果说这是运算符的优先级问题,那么后两个式子为什么又都是False

实际上这涉及到了Python的链式对比(Chained Comparisons)。在其他语言中,有一个变量x,如果要判断x是否大于1,小于5,可能需要这样写代码:

1
if (1 < x and x < 5)

但是在Python中,可以这样写代码:

1
if 1 < x < 5

Python能够正确处理这个链式对比的逻辑。

回到最开始的问题上,==等于符号和<小于符号,本质没有什么区别。所以实际上2==2>1也是一个链式对比的式子,它相当于2==2 and 2>1。此时,这个式子就等价于True and True。所以返回的结果为True。

关于链式对比,可以看官方文档:https://docs.python.org/3/reference/expressions.html#comparisons

2018年,我的第一本书出版了。

离开北京,来到到杭州,加入了网易游戏伏羲人工智能实验室。

在这一年里面,一共看完了21本书:

  • 罗贯中——《三国演义》
  • 王小波——《黄金时代》
  • 当年明月——《明朝那些事儿1-7》
  • 瑞·达利欧《原则》
  • 毛姆《月亮与六便士》
  • Robert C. Martin——《代码整洁之道》
  • John Sonmez——《软技能——代码之外的生成之道》
  • 尤瓦尔·赫拉利——《今日简史》
  • 汪曾祺——《生活是很好玩的》
  • 孙武——《孙子兵法》
  • ???——《战国策》
  • 李鑫——《数据产品经理——从零经验到令人经验》
  • Norman Lewis——《Word Power Made Easy》
  • 刘飞——《从点子到产品 : 产品经理的价值观与方法论》
  • 李诞——《笑场》

在LeetCode刷了九十多题:https://github.com/kingname/LeetCode

写了13篇博客。

2019年1月,我的第二本书即将出版。

2019年新年目标:

  • 在2019-12-31之前,读完12本书,并为每一本书作出思维导图。
  • 在2019-12-31之前,微信公众号的关注量超过5000人。
  • 在2019-06-30之前,在Medium上发布3篇技术文章。
  • 在2019-10-31之前,练习英语听力和复述能力,做到150词内的句子,听一次就能复述成功。
  • 在2019-03-31之前,学会布鲁斯口琴吹气压音,8月31日之前脱稿演奏卡农。12月31日脱稿演奏未闻花名。
  • 在2019-07-31之前,使用golang完成一个记单词的网站。
  • 在2019-09-30之前,认识至少5个新朋友,并通过与他们聊天练习聊天技巧,努力成为一个会聊天的人。
  • 在2019-10-01之前,累计跑步108公里。

《跳出任务管理的泥沼,拥抱甘特图的怀抱》一文中,我谈到了使用甘特图来规划任务。甘特图更多的关注每一个任务的进度上。那么如果我希望了解项目整体的进度,应该如何选择呢?此时就需要引入另一个简单又强大的工具:燃尽图(Burn down chart)。

阅读全文 »

在上一篇文章中介绍了下载器中间件的一些简单应用,现在再来通过案例说说如何使用下载器中间件集成Selenium、重试和处理请求异常。

阅读全文 »

中间件(Middleware)

中间件是Scrapy里面的一个核心概念。使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫。

“中间件”这个中文名字和前面章节讲到的“中间人”只有一字之差。它们做的事情确实也非常相似。中间件和中间人都能在中途劫持数据,做一些修改再把数据传递出去。不同点在于,中间件是开发者主动加进去的组件,而中间人是被动的,一般是恶意地加进去的环节。中间件主要用来辅助开发,而中间人却多被用来进行数据的窃取、伪造甚至攻击。

在Scrapy中有两种中间件:下载器中间件(Downloader Middleware)和爬虫中间件(Spider Middleware)。

这一篇主要讲解下载器中间件的第一部分。

阅读全文 »

写这篇文章,我不是要黑任何一个任务管理类的App或者方法论。相反,我是一个工具控,在试用各种任务管理类App上总是不遗余力。常见的Things 3,Todoist,Teambition,Trello,Any.do,Doit.im我都试用过。最后,我选择了Todoist,在Todoist上,我已经完成了1292个任务。如下图所示。

我的Todoist任务记录

阅读全文 »

以CSDN为首,知乎其次,cnblog带路的一大批博客上充斥着大量低质量的编程入门教程,代码粗制滥造,毫无缩进,没有高亮,东抄西抄。初学者如果长期参照这种垃圾博客来解决问题,将会适得其反,走入歧途。

其实,初学者最应该看的,是编程软件的官方文档,是软件工具的官方文档,是开源项目的官方文档……

但是鉴于有一些文档没有中文翻译,让不少不会英文的同学望而却步。

为此,我将会启动英文文档代查、翻译计划。

如果你想学习一门编程语言,但是它没有官方中文文档;如果你想实现一个功能,但是官方教程对API的描述是英文;如果你想用一个软件,但是这个软件没有中文说明书;如果你想参与一个开源项目,但是看不懂上面的英文讨论……那么你可以在这个公众号上获得帮助。

如何寻求帮助​

扫描本文末尾的微信公众号二维码添加未闻Code,公众号私聊中,把你的诉求发送给我。我帮你寻找官方文档,帮你翻译,然后用公众号文章的形式发布出来,让更多人看到。

例如:

1
#文档翻译#我想知道Scrapy的下载器中间件中,process_response可以返回哪些数据。 

如下图所示。

我接收哪些请求

  • StackOverflow上面具体某一个问题的回答。您可以把网址发送给我
  • 编程语言具体功能
  • 开源项目具体某个API的使用
  • Medium中具体某一篇文章的某一段落

总之,你的需求越具体,我就越能找到你需要的内容并为你翻译。

当然,你也可以尝试给我发送一些非技术性的内容,例如《经济学人》《华盛顿邮报》中的具体某个段落,如果我有时间的话,也会帮你翻译。

我拒接哪些请求

  • 请帮我翻译Python官方文档
  • 请帮我翻译这一篇Quora下面的所有回答
  • 请帮我翻译这个开源项目的官方文档

我怎么给你结果

我会汇总每一周的请求,并在周六更新的公众号文章中,为你呈现你需要的结果。

这个项目收费吗

本计划完全免费。不会以任何形式收取任何费用。不收费不代表没有成本,因此请勿滥用。

我为什么要启动这个项目

  1. 我看不惯那些装逼货粗制滥造的博客。
  2. 我深深体会到阅读官方文档的重要性,因此我希望我能让更多的人能在遇到问题时首先想到官方文档而不是用百度搜索中文博客。
  3. 你们问的东西可能也是我不知道的,通过这个项目我可以学到更多好用的工具
  4. 把我的英语单词量扩展到10000词以上。

如何找到我

请扫描下面的二维码,添加我的微信公众号未闻Code

在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况。此时你是怎么操作的呢?逐一SSH登录每个服务器,使用git拉下代码,然后运行?代码修改了,于是又要一个服务器一个服务器登录上去依次更新?

有时候爬虫只需要在一个服务器上面运行,有时候需要在200个服务器上面运行。你是怎么快速切换的呢?一个服务器一个服务器登录上去开关?或者聪明一点,在Redis里面设置一个可以修改的标记,只有标记对应的服务器上面的爬虫运行?

A爬虫已经在所有服务器上面部署了,现在又做了一个B爬虫,你是不是又得依次登录每个服务器再一次部署?

如果你确实是这么做的,那么你应该后悔没有早一点看到这篇文章。看完本文以后,你能够做到:

  • 2分钟内把一个新爬虫部署到50台服务器上:
1
2
3
docker build -t localhost:8003/spider:0.01 .
docker push localhost:8002/spider:0.01
docker service create --name spider --replicas 50 --network host 45.77.138.242:8003/spider:0.01
  • 30秒内把爬虫从50台服务器扩展到500台服务器:
1
docker service scale spider=500
  • 30秒内批量关闭所有服务器上的爬虫:
1
docker service scale spider=0
  • 1分钟内批量更新所有机器上的爬虫:
1
2
3
docker build -t localhost:8003/spider:0.02 .
docker push localhost:8003/spider:0.02
docker service update --image 45.77.138.242:8003/spider:0.02 spider
阅读全文 »

序言

这篇文章没有代码,请放心阅读。

多年以后,面对人工智能研究员那混乱不堪的代码,我会想起第一次和S君相见的那个遥远的下午。那时的B公司,还是一个仅有6个人的小团队,Mac和显示器在桌上依次排开,大家坐在一起,不需要称呼姓名,转过脸去,对方就知道你在和他说话。一切看起来都那么美好,我们所有人,都希望自己和这个公司能够一起成长。

彼时S君刚从加拿大回来,老板把他介绍给我们,于是S君作为数据产品经理跟我有了项目上的接触。

创业公司里面,每一个人都需要会很多的技艺,于是S君开始自学Python。

有一天,S君问我:“你玩MineCraft吗?“

“玩,但我更喜欢在B站上看别人的世界。”我答道。

“我觉得我现在写程序,像是在玩我的世界。”S君笑着说道。

“是不是觉得你已经掌握了Python的基本语法,看着别人把Python用的溜溜转,而你自己却不知道用它来做什么?”

“是这样的,你懂我。”

“那你学一门杂学吧。”

于是S君被我诱拐过来跟我一起写爬虫。

后来,S君离开了B公司。

三个月后,我也离开了。

从此,我们再也没有见过。

阅读全文 »
0%