自学 Python 第 3 期

从第 3 期开始进入实战,因为实战才能激发兴趣……

Python 编写 Web App 实战(1):搭建开发环境

实战目标为搭建一个博客网站,包含日志、用户和评论三大部分,教材为 廖雪峰实战教程

安装 Web App 开发所需要的第三方库

安装异步框架 aiohttp

如何理解异步框架 aiohttp?

框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法,是某种应用的半成品,或者说是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。

简单搜索并没发现解释同步、异步框架的含义,作为小白总是很苦恼,但我想或许要结合 IO(Input/Output)来理解。廖雪峰教程 IO 编程这节这样说:

由于程序和运行时数据是在内存中驻留,由 CPU 这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要 IO 接口。

比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络 IO 获取新浪的网页。浏览器首先会发送数据给新浪服务器,告诉它我想要首页的 HTML,这个动作是往外发数据,叫 Output,随后新浪服务器把网页发过来,这个动作是从外面接收数据,叫 Input。

所以,通常程序完成 IO 操作会有 Input 和 Output 两个数据流。当然也有只用一个的情况,比如,从磁盘读取文件到内存,就只有 Input 操作,反过来,把数据写到磁盘文件里,就只是一个 Output 操作。

IO 编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。Input Stream 就是数据从外面(磁盘、网络)流进内存,Output Stream 就是数据从内存流到外面去。对于浏览网页来说,浏览器和新浪服务器之间至少需要建立两根水管,才可以既能发数据,又能收数据。

由于 CPU 和内存的速度远远高于外设的速度,所以,在 IO 编程中,就存在速度严重不匹配的问题。举个例子来说,比如要把 100M 的数据写入磁盘,CPU 输出 100M 的数据只需要 0.01 秒,可是磁盘要接收这 100M 数据可能需要 10 秒,怎么办呢?有两种办法:

第一种是 CPU 等着,也就是程序暂停执行后续代码,等 100M 的数据在 10 秒后写入磁盘,再接着往下执行,这种模式称为同步 IO;

另一种方法是 CPU 不等待,只是告诉磁盘,「您老慢慢写,不着急,我接着干别的事去了」,于是,后续代码可以立刻接着执行,这种模式称为异步 IO。

同步和异步的区别就在于是否等待 IO 执行的结果。好比你去麦当劳点餐,你说来个汉堡,服务员告诉你,对不起,汉堡要现做,需要等 5 分钟,于是你站在收银台前面等了 5 分钟,拿到汉堡再去逛商场,这是同步 IO。

你说来个汉堡,服务员告诉你,汉堡需要等 5 分钟,你可以先去逛商场,等做好了,我们再通知你,这样你可以立刻去干别的事情(逛商场),这是异步 IO。

很明显,使用异步 IO 来编写程序性能会远远高于同步 IO,但是异步 IO 的缺点是编程模型复杂。想想看,你得知道什么时候通知你汉堡做好了,而通知你的方法也各不相同。如果是服务员跑过来找到你,这是回调模式,如果服务员发短信通知你,你就得不停地检查手机,这是轮询模式。总之,异步 IO 的复杂度远远高于同步 IO。

aiohttp(a-io-http)是基于 asyncio 实现的 HTTP 框架。asyncio 是并发(concurrency)的一种方式。对 Python 来说,并发还可以通过线程(threading)和多进程(multiprocessing)来实现。

asyncio(a-sync-io)是 asynchronous(异步)I/O,一个使用 async/ await 语法编写并发代码的库。

深入理解 Python 异步编程Python 并发编程之初识异步 IO 框架:asyncio 篇 的解释也比较有参考性。

安装异步框架 aiohttp:pip install aiohttp

安装前端模板引擎 jinja2

选择 Jinja 作为名字是因为 Jinja 是日本寺庙的名称,并且 temple 和 template 的发音类似。它并不是以乌干达的金贾市(Jinja)命名的。

安装前端模板引擎 jinja2:pip install jinja2

安装数据库

程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。而如何定义数据的存储格式就是一个大问题。

为了便于程序保存和读取数据,而且,能直接通过条件快速查询到指定的数据,就出现了数据库(Database)这种专门用于集中存储和查询的软件。数据库软件诞生的历史非常久远,早在 1950 年数据库就诞生了。经历了网状数据库,层次数据库,我们现在广泛使用的关系数据库是 20 世纪 70 年代基于关系模型的基础上诞生的。

访问数据库 - 廖雪峰教程 了解更多相关知识。

付费数据库:Oracle、MS SQL Server、IBM DB2、Sybase;免费开源数据库:MySQL、PostgreSQL、sqlite。MySQL(SQL,Structured Query Language,结构化查询语言),是最流行的免费数据库。

MySQL 是什么 了解更多相关知识。

由于教程是 5.x.x 版本 MySQL,所以我在 官网 下载安装了最新版本 5.7.24 for macOS,安装时需要记住提供的初始密码:
屏幕快照 2018-12-16 10.49.10

安装完毕,终端输入 mysql -u root -p,出现以下提示表示正常。

$ mysql -u root -p // 连接数据库
Enter password: 
Welcome to the MySQL monitor...

如果提示:mysql: command not found,则需要添加环境变量,在 .bash_profile 文件中增加以下指令:

export PATH=${PATH}:/usr/local/mysql/bin

最后,修改初始密码,必须修改初始密码才允许执行命令:

$ mysql -u root -p // 连接数据库
Enter password: 
Welcome to the MySQL monitor...

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的密码');

安装 MySQL 异步驱动程序 aiomysql

aiomysql 是基于 asyncio 框架以访问 MySQL 数据库的软件库。

安装 MySQL 异步驱动程序 aiomysql:

pip install aiomysql

本期小结

asyncio(a-sync-io)是 asynchronous(异步)I/O,一个使用 async/ await 语法编写并发代码的库。

aiohttp(a-io-http)是基于 asyncio 实现的 HTTP 框架。

aiomysql(a-io-mysql)是基于 asyncio 框架以访问 MySQL 数据库的软件库。

前端模板引擎 jinja2,数据库是 MySQL 5.7.24。

作为小白,我对这些概念感到陌生,但不要紧,我们是以实战的方式学习 Python,后续实际用到时会详细讲解。

2018/12/11 posted in  Python

每周分享第 5 期

疑问

电影资源的命名含义?

她不知道名字的那些鸟儿.2017.BD1080P.X264.AAC.Japanese.CHS.MF

[中文名称]:她不知道名字的那些鸟儿
[年份]:2018
[分辨率]:BD1080P
[视频压缩编码格式]:X264
[音频格式]:AAC
[国家]:Japanese
[字幕]:CHS(简体中文)
[MF]:指什么


扫一扫即可关注微信公众号

2018/12/8 posted in  每周分享

自学 Python 第 2 期

自学 Python 第 1 期 中以 pyenv 安装和管理 Python 版本,并且全局启用了 Python 3.6.5 版本,正式敲代码的时间到来,编辑器选择 Visual Studio Code,简称 VS Code,由微软出品,虽然我英语基础还凑合,但巨头出品且支持中文的编辑器无疑最便捷。

Read more   2018/11/22 posted in  Python

每周分享第 4 期

案例

Visual Studio Code Error

如何解决 Visual Studio Code Error: Linter pylint is not installed(数据库引擎 Python 代码分析插件没有安装)?

如果不需要可以关掉,在用户设置里输入 python.linting.pylintEnabled": false 即可。

或以此命令 sudo -H pip install pylint 安装……

⚠️ 点击 install 安装失败的根源在于 pip 安装似乎无法依靠 socks 代理,只要将终端代理改为 https 的方式,一切都正常了!这也是本问题解决的最佳方式。方法来源

无效方法
如果使用 python3,则在用户设置中覆盖 “python.pythonPath”: “python3”然后点击弹框的 install,VS Code 会安装好 pylint 等一系列东西:安装还是失败。方法来源


macOS sudo 参数
-b:在后台执行指令。
-h:显示帮助。
-H:将 HOME 环境变量设为新身份的 HOME 环境变量。
-k:结束密码的有效期限,也就是下次再执行 sudo 时便需要输入密码。
-l:列出目前用户可执行与无法执行的指令。
-p:改变询问密码的提示符号。
-s:执行指定的 shell。
-v:延长密码有效期限 5 分钟。
-V:显示版本信息。
-S:从标准输入流替代终端来获取密码
-u <用户>:以指定的用户作为新的身份。若不加上此参数,则预设以 root 作为新的身份。


扫一扫即可关注微信公众号

2018/6/29 posted in  每周分享

大版本更新,这次 MWeb 3.0 又带来了什么

少数派精选并推荐至首页:点此查看
责编文刀漢三对本文少数派版本做了大量修改,本文著作权归作者唐小筑所有,并授权少数派独家使用,未经少数派许可,不得转载使用。

MWeb 作为 macOS 上体验优秀的 Markdown 应用,在管理知识、写作、发布上持续发力,现在它更新了 3.0 大版本,本篇文章就带你领略其风采。

开发者说:MWeb 名称为 Markdown --> Web ,最初的想法是简单快捷地把 Markdown 写的文档发布到 Web 上。现在也一直在写作和发布到 Web 上优化。解决的是管理知识、写作、发布的问题。然后 MWeb 采用的是 Github Flavored Markdown 语法,一直是如此。

在 macOS 平台 Markdown 编辑器同质化严重的今天,MWeb 以其出色的功能和体验独树一帜。2014 年 1.0 版本发布至今,MWeb 付费用户始终可以免费更新,3.0 大版本是首次付费更新。因为开发者 Otis 认为软件没超过 3 年以上,都没有另起的理由。

  • 你是否需要一款体验优秀且跨 macOS 和 iOS 的双平台 Markdown 编辑器?
  • 是否需要数分钟内生成和发布静态博客,并用 GitHub 等平台托管图片资源?
  • 是否需要直接发布文 WordPress、Medium、新浪博客等平台?
  • 是否需要以标签和分类管理 Markdown 文档?
  • 是否需要搭建个人 Wiki 知识库和支持全局检索?

那么 MWeb 3.0 将是你的不二选择,作为一款专业的 Markdown 写作、记笔记、静态博客生成软件,此次更新表面来看仅增加了数个功能和细节改善,似乎不堪称为大版本更新,但看不见的背后是大量代码的重构,如 iOS 11 升级至 iOS 12 一般。

Read more   2018/6/28 posted in  少数派

当被 diss 之后

假设有人在我的文章下面出口成脏,我的心情丝毫不会波动……

但当这个人言语富有条理、文字结构合理,我就难免受到影响了。少数派,在我眼里是偏向于 App 及其使用技巧分享的平台,当少数派开始转型数字生活,最初还是不太适应,因为认识少数派是从优秀的 App 开始,所以我甚至大概评论过为什么这样的文章也能上首页。分享 App 这条路确实走不远,比如我写过关于 PDF 应用的文章,就基本再无可写了。少数派,需要更多的读者,需要多样化需求的读者出现,尤其是主推付费教程以后。

在被 diss 之后,额,倒是对自己没啥负面影响,但我在认真考虑数字转型。2011 年我刚大一,相当长的一段时期,我主要写自己的一些思考,比如男女平等方面,也得到了一些肯定,虽然稿子都丢失了。上一篇关于效率的思考也提到,我发觉自己并没有建立一套运行有效的效率方式,多年来尝试过各种 App 只是打开了视野。

再者,我的圈子比较小,基本只有我对 App 这个事物发自内心的喜爱,周边人大都也不知道我在少数派和博客写文章,唯有数个好友,但兴趣也不重叠。

App 这条路,对少数派而言是走不远的;对自己而言,也许也如此。之后,我会更加细致地观察生活,充分利用各类设备辅助生活,也认真审视应用和服务,尽力融合出自己的高效生态,稳步提升,也让生活更轻松和美好。


扫一扫即可关注微信公众号

2018/5/27 posted in  少数派

关于效率的思考

工作以后,我发觉自己并没有建立一套运行有效的效率方式,挺让我沮丧。在 2014 年完全完全进入 Apple 生态以后,学生时代富余的时间,让我尝试了无数 App,相信折腾是最大的乐趣。Apple 生态和无与伦比的视觉效果,促使我更愿意去折腾,但现在毕竟工作了,也要到了成家立业的时候……

这并不是说,迫于生存压力应该做点什么,我似乎并没有感受到太多生存威胁。我只是沮丧于,我偶尔沾沾自喜的闭环效率方式,却不能促使自己越过一个又一个高峰。为达审美,苛求于生活用品,苛求于 App 颜值,苛求于行文排版…… 可是,同时为什么不能自然地苛求于核心能力的提升?

折腾是快乐的,认识了不少朋友,但似乎有些沉溺于折腾,忘记了初心。不知不觉,我竟然又开始无意识地刷各类新闻,我感到,又到了人生迷茫的阶段。一直以来,我都胸无大志,所谓名校、研究生也没动摇我甘愿人生从来平凡的念头,但我好怕平凡沦为平庸,还不自知。

仔细审视初心,左右徘徊的念头还是希望能给世界多献上一点光芒。呵,多么空虚的念头。给世界多献上一点光芒,首先要自己慢慢成为光芒。可我不止一次沮丧地发现,我多么无能为力。四小时睡眠法、GTD 等等尝试过后,却更显疲惫和无力。

认真做事的男人最吸引人…… 相当长的时间里,我以为要先找到好方法,再高效地认真做事,然而找了无数好方法,却没有认真做完一件想想就很棒很好的事情。还发了微博感慨:

GTD 应该是为了解决事务繁多的需求,像我这样事务不多的人去研究 OmniFocus 等应用无异于偏离了中心,一般的提醒事项应用就足以应对了,主要精力应该聚焦于提升核心竞争力。 ​​​​

核心竞争力,核心能力,有人讲做好善良的人要比做坏人更得有智慧,我也想说,愿意献给世界更好事物的人也更得有能力。从前,为了所谓修炼、闭关,我主动远离微博、朋友圈等,也拒绝一些聚会。现在感到,如果在认真做事,哪还需要克制这些欲望,因为全部心思都扑在热爱的事业上啊。在我提升最多的时候,往往是我没想主动提升的时候,忘我做事不知不觉就达到了更好。

学生时代,探寻了太多效率方式,也匆匆践行过许多。该是缓慢践行的时候了,快 25 周岁了,到生日时再审视下内心……


扫一扫即可关注微信公众号

2018/5/27 posted in  少数派

每周分享第 3 期

新闻

Google 删除不作恶口号

2000 年以来,口号 Don’t be evil 一直是 Google 行为准则之一,2015 年 Google 重组成立 Alphabet 母公司时,该口号被修改为 Do the right thing,但前者依旧是行为准则之一。但在四月底或五月初 Google 已经悄悄删除该口号,不过仍然保留了这句话:

And remember... don’t be evil, and if you see something that you think isn’t right - speak up!

疑问

怎样确定作息时间

陆奇离职微软背后:伤势真的无法工作了 一文中表示:从雅虎到百度,陆奇一直保持凌晨 4 点起床,5-6 点赶到办公室工作的生活习惯,平均每天工作超过 15 个小时。在美国,与陆奇同样清晨早起工作,一天工作时间超过 12 个小时的企业高管不乏其人。苹果 CEO 库克每天 4:30 起床,Twitter CEO 杰克·多西每天 5 点起床,通用电气 CEO 伊梅尔特每天 5:30 起床,乔布斯每天 6 点起床,巴菲特每天 6:30 起床。

可是,并没有检索到文章表明这些人何时睡眠。我想,对自己来讲,22 点到 23 点之间睡觉,6:30 左右起床比较好。

中英文排版难点

Word 有自动调整中西文字体间隔的功能,但并不会调整符号(如 %)与中文字体的间隔。那么「50%后面接中文」时需要加空格么,似乎「50% 后面接中文」时加空格更好看一些。所以 Word 中这种位置手动添加空格么?

图片

  • 英文字母进化时间轴

Evolution of the English Alphabet

  • 改变世界的 17 个数学公式

了解自 阮一峰,转载自 Business Insider


扫一扫即可关注微信公众号

2018/5/27 posted in  每周分享

臻至更高的高峰:MarkEditor 2.0 再进化!

少数派精选并推荐至首页:点此查看
本文著作权归作者唐小筑所有,并授权少数派独家使用,未经少数派许可,不得转载使用。

纯粹式 Markdown 编辑器有很多,其中 Typora 是所见所得编辑器的优秀代表;令人耳目一新的多功能编辑器也不少,比如 Bear、MWeb 等,各有各的特色,而 MarkEditor 2.0 是一款很贴近 Markdown 文字编辑者且让人情不自禁喜爱的工具,它已经不仅仅是多功能 Markdown 编辑器,甚至可看作一切文字工作的处理中心。

Read more   2018/5/25 posted in  少数派

每周分享第 2 期

编程

初学者可以考虑选择 Python

我一直都想掌握一门编程语言,因为我感到如果未来不了解编程语言,会增加生存难度…… IEEE 发布 2017 年编程语言排行榜:Python 高居首位,PHP 第八 也说明了 Python 的流行和重要性。前 10 大编程语言你会几种 也认为初学者使用 Python 是不错的选择。廖雪峰教程也大力夸赞 Python,所以如果没有特别目的,完全可以考虑学习 Python 这门语言,它功能强大,且相较之下易掌握。

Read more   2018/5/20 posted in  每周分享