国内技术书盗版现状

来源:greyli   |   更新时间: 3天前   |   分类: 计算机与编程


我在 18 年出版了一本技术书,快两年过去了,和盗版打了很多交道。这篇文章从一个技术书作者的视角以 2018~2020 作为切片来记录一下国内技术书的盗版现状。

盗版的起源

我的书第一次上架到电子书平台是在 18 年 8 月 24 号,纸质书正式开始发售是在同年 9 月 13 号。仅仅不到一个月的时间,在 10 月初,淘宝上就开始出现了大量盗版影印书(大约有十几个,价格多在 ¥30 左右)。紧接着,在 11 月初,CSDN 上出现很多盗版电子书。同一时间,多个盗版电子书网站开始有了这本书,基本占领了百度和 Google 的前几页搜索结果。

查看原文

国内技术书盗版现状

来源:greyli   |   更新时间: 3天前   |   分类: 计算机与编程


我在 18 年出版了一本技术书,快两年过去了,和盗版打了很多交道。这篇文章从一个技术书作者的视角以 2018~2020 作为切片来记录一下国内技术书的盗版现状。

盗版的起源

我的书第一次上架到电子书平台是在 18 年 8 月 24 号,纸质书正式开始发售是在同年 9 月 13 号。仅仅不到一个月的时间,在 10 月初,淘宝上就开始出现了大量盗版影印书(大约有十几个,价格多在 ¥30 左右)。紧接着,在 11 月初,CSDN 上出现很多盗版电子书。同一时间,多个盗版电子书网站开始有了这本书,基本占领了百度和 Google 的前几页搜索结果。

查看原文

简单聊聊 Maglev ,来自 Google 的软负载均衡实践

来源:manjusaka   |   更新时间: 5天前   |   分类: 论文


好久没博客了,来写个简单的读论文笔记吧,这篇文章是来自 Google 2016 年发表的一篇论文Maglev: A Fast and Reliable Software Network Load Balancer分享了他们内部从08年开始大规模使用的软负载均衡系统的实现。里面很多很有趣的细节,我看我能写多少,算多少吧

负载均衡的概念大家肯定都比较熟悉了,再次不再赘述。现在我们需要考虑 Google 的场景。设计之初,Google 需要一种高性能的 LB 来承担 Google 一些重头服务的流量,比如 Google 搜索,Gmail 等等。由于流量非常庞大,那么 LB 需要非常强大的性能来处理大量的流量。

查看原文

欢迎参加 FlaskCon 2020!

来源:greyli   |   更新时间: 5天前   |   分类: 活动与游记


FlaskCon是一个社区举办的 Flask 大会,将会在 6 月 26 号举行。按照官方的介绍,它:

和 DjangoCon 类似,FlaskCon 会专注于 Flask 相关话题,包括 Flask 扩展介绍、开发经验、最佳实践、类似框架的对比等等。

如果你想分享 Flask 开发相关的经验,介绍你对 Flask 的有趣应用,或者是有任何和 Flask 相关而且你很想拿出来聊一聊的话题,欢迎报名演讲。演讲有 20 分钟和 40 分钟两种类型,需要使用英语。

查看原文

欢迎参加 FlaskCon 2020!

来源:greyli   |   更新时间: 5天前   |   分类: 活动与游记


FlaskCon是一个社区举办的 Flask 大会,将会在 6 月 26 号举行。按照官方的介绍,它:

和 DjangoCon 类似,FlaskCon 会专注于 Flask 相关话题,包括 Flask 扩展介绍、开发经验、最佳实践、类似框架的对比等等。

如果你想分享 Flask 开发相关的经验,介绍你对 Flask 的有趣应用,或者是有任何和 Flask 相关而且你很想拿出来聊一聊的话题,欢迎报名演讲。演讲有 20 分钟和 40 分钟两种类型,需要使用英语。

查看原文

Django 集成阿里云OSS

来源:foofish   |   更新时间: 7天前   |   分类: Python技术


在django项目中,如果希望静态资源存储到阿里云的OSS中,不需要写一行代码,因为别人已经造好了轮子,你就不要重复造了。记录下配置过程。

第一步: 安装依赖包

pipinstalloss2pipinstalldjango-oss-storage

pip install oss2
pip install django-oss-storage
查看原文

django charfield 字段在 admin 中使用 textarea

来源:foofish   |   更新时间: 7天前   |   分类: Python技术


如下图,Account 模型中有个CharField类型的字段,对应在Admin中的是input输入框。如果我们想在admin中希望它是textarea输入框,那么需要自定义一个form表单对象

classAccount(BaseModel):c_remark=models.CharField(max_length=200,null=True,blank=True,verbose_name="备注")

class  Account(BaseModel):
    c_remark = models.CharField(max_length=200, null=True, blank=True, verbose_name="备注")
查看原文

My Reaction to "Under Discussion: The Performance of Python"

来源:laike9m   |   更新时间: 14天前   |   分类: 


MAY 13TH, 2020

The mindset of "If you want it to improve, feel free to contribute" does not helpDocumentationSpecificationToolsdirectionSummary

Today I read an articleUnder Discussion: The Performance of Python, and discussed it with some friends. I got some ideas from the discussion, so I decided to write an article.

查看原文

Redis 的命令设计

来源:kawabangga   |   更新时间: 17天前   |   分类: 数据库


很多人都知道,Redis 对代码上简单有一种极致的追求,比如坚持命令处理单线程。我在很多用户层面的配置和命令中,也看到了这种简单而优雅。比如SAVE的参数,save 900 1表示 900 秒内有一次写,就执行备份,这样可以配置多条配置,就可以达到即可以根据时间配置备份频率,又可以根据写入次数配置频率。

又比如ACL的设计,虽然不能说设计的特别简单,但是功能非常丰富,即可以根据 key 来设置权限,又可以根据命令来设置权限,并且既可以设置白名单,又可以设置黑名单。单单来说白名单与黑名单,我见过很多系统,只要涉及这两个概念,就会让用户一头雾水了。如果我有一个A是在黑名单中,然后A里面的X在白名单中,那么X到底会不会生效呢?然后你就必须去看它的实现才知道是怎么样一个逻辑。(比如 poetry 对文件的include 和 exclude 配置,就是一个反例)但是 Redis 的 ACL 设计,用了类似 DSL 的方式,一点歧义都没有。

查看原文

反爬之ID 混淆 hashids 了解下

来源:foofish   |   更新时间: 21天前   |   分类: Python技术


爬虫与反爬是一对相生相克的死对头,道高一丈魔高一尺。作为爬虫的一方,如果知道了某个站点的数据自增ID,那么就能轻而易举把整个站点都爬下来。是不是有点耸人听闻,你去看很多大站例如油管、P站等,他们都不会轻易把业务的自增ID暴露出来,而是用一种可逆的hash字符串替代。

最常用的ID混淆就是Hashids。Hashids是一个小型的开放源代码库,可以将数字生成很短的、唯一的、非顺序的字符ID。

查看原文

Python自制PornHub风格的LOGO

来源:foofish   |   更新时间: 21天前   |   分类: Python技术


PornHub又名P站,网站的流量在全球也是TOP10级别,和淘宝、百度等站点同一个level,他们家网站的LOGO也显得个性鲜明。

如何用Python画一个呢?

画图需要用到一个库叫Pillow,它是专门用来出来图像的,功能非常强大,修图功能能做的事,都可以用Pillow来实现。

分析下这张图的结构

它有左右两部分组成,左边是黑底白字,右边是黄底黑字。这两部分包裹在一个黑色矩形框中。

查看原文

Python挑战题

来源:foofish   |   更新时间: 21天前   |   分类: Python技术


网址:http://www.pythonchallenge.com/

这个网站提供了33道智力题,需要用Python里面的一些知识去解决,当然你也可以使用其他语言,每道题都有解题线索,你要根据提示获取答案后才能进入下一题。截至目前,已经有3369095位用户试图发起挑战。

第一题

第一题是热身题,你要计算2的38次幂,计算结果就是第二题的入口链接

查看原文

Python项目整合PyOTP+Google Authenticator

来源:ansheng   |   更新时间: 1月前   |   分类: 


PyOTP主要是用來生成与验证一次性密码(OTP, One-Time Password)的Python库,下面是官方介绍

首先需要安装PyOTP

pip install pyotp
# 这里安装的版本是2.3.0
查看原文

重学前端:相对定位VS绝对定位VS固定定位

来源:foofish   |   更新时间: 1月前   |   分类: 前端


position 是CSS中非常重要的属性,顾名思义,他是用来指定一个元素在页面上的位置,搞懂了position的属性值对布局的理解会更加透彻。

一共有5个值,分别是:

static relative fixed absolute sticky

static
relative
fixed
absolute
sticky
查看原文

一个困扰我两年的 Flask bug

来源:greyli   |   更新时间: 1月前   |   分类: 计算机与编程


严格来说算不上 bug,而是一个很容易导致出错的行为:如果你安装了 python-dotenv,同时在 Flask 程序的上层目录创建了 .env 或 .flaskenv 文件,那么你将没法成功执行 flask run 等命令,因为这会导致 Flask 没法正确找到对应的 Flask 程序实例。

这个问题从 Flask 开始引入 CLI 机制开始就存在了,困扰了我两年。18 年偶然在用户根目录创建了一个 .env 文件,发现 Flask 程序没法运行了,当时遇到的各种 bug 太多,没仔细考虑这两者之间的关联。后来经过几次测试,才确定下来是上层目录的 .env 和 .flaskenv 文件导致,但是一时找不到原因,就暂时放下了。直到 19 年 11 月,花了几个小时排查,还是没找到原因。

查看原文

一个困扰我两年的 Flask「Bug」

来源:greyli   |   更新时间: 1月前   |   分类: 计算机与编程


TL;DR 版本:

如果你的程序存储在单脚本里,比如 app.py,那么 .flaskenv 和 .env 应该放在程序脚本的同级目录:

myproject/
    - app.py
    - templates
    - static
    - .flaskenv
    - .env
查看原文

安装 Python 依赖时出现 MarkupSafe ImportError: cannot import name Feature 报错的解决方法

来源:greyli   |   更新时间: 1月前   |   分类: 计算机与编程


这个报错在 3 月 8 号 setuptools 发布新版本之后出现,通常会在安装 Python 依赖时触发。

报错信息

使用 pip 安装依赖时的报错如下:

Collecting markupsafe==1.0
  Downloading https://.../MarkupSafe-1.0.tar.gz (14 kB)
    ERROR: Command errored out with exit status 1:
     command: '...\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'...\\pip-install-bsormril\\markupsafe\\setup.py'"'"'; __file__='"'"'...\\pip-install-bsormril\\markupsafe\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base '...\pip-install-bsormril\markupsafe\pip-egg-info'
         cwd: ...\pip-install-bsormril\markupsafe\
    Complete output (5 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "...\pip-install-bsormril\markupsafe\setup.py", line 6, in <module>
        from setuptools import setup, Extension, Feature
    ImportError: cannot import name 'Feature'
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
查看原文

安装 Python 依赖出现 MarkupSafe ImportError … Feature 报错的解决方法

来源:greyli   |   更新时间: 1月前   |   分类: 计算机与编程


这个报错在 3 月 8 号 setuptools 发布新版本之后出现,通常会在安装 Python 依赖时触发。

报错信息

使用 pip 安装依赖时的报错如下:

Collecting markupsafe==1.0
  Downloading https://.../MarkupSafe-1.0.tar.gz (14 kB)
    ERROR: Command errored out with exit status 1:
     command: '...\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'...\\pip-install-bsormril\\markupsafe\\setup.py'"'"'; __file__='"'"'...\\pip-install-bsormril\\markupsafe\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base '...\pip-install-bsormril\markupsafe\pip-egg-info'
         cwd: ...\pip-install-bsormril\markupsafe\
    Complete output (5 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "...\pip-install-bsormril\markupsafe\setup.py", line 6, in <module>
        from setuptools import setup, Extension, Feature
    ImportError: cannot import name 'Feature'
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
查看原文

Use the Index, Luke! 笔记6:增删改的索引

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


前面我们讨论的都是查询语言,但是 SQL 不仅仅是查询,还需要修改数据。索引是完全冗余的数据,是用空间换时间的一种形式。对于修改数据来说,这就意味着不仅要修改表中的数据,还要修改索引中的数据,索引对修改数据来说会带来负面的性能影响。

Insert 语句几乎是唯一无法从索引获益的语句,因为 insert 没有 where 条件。

索引越多,insert 执行的就越慢。

查看原文

《Flask Web 开发实战》虚拟环境/依赖/Pipenv 等问题解决方法

来源:greyli   |   更新时间: 1月前   |   分类: 计算机与编程


注:这篇文章的主要受众是《Flask Web 开发实战》的读者。

注2:文中的 $ 符号标识一条命令行命令的开始,$ 前面是当前工作目录,# 号后面是注释。你实际只需要输入 $ 符号和 # 号之间的内容,不包括开头和结尾的空格。

在群聊和论坛里总是看到和虚拟环境和依赖安装相关的各类问题,这篇文章希望能够提供一个统一的解决方案。下次如果遇到有人问虚拟环境/Pipenv/依赖安装相关的问题,请把这篇文章的链接丢过去。

查看原文

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