<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>读书与写作 &#8211; 李辉 / Grey Li</title>
	<atom:link href="https://greyli.com/category/reading/feed/" rel="self" type="application/rss+xml" />
	<link>https://greyli.com</link>
	<description>一个编程和写作爱好者的在线记事本</description>
	<lastBuildDate>Sat, 03 Jan 2026 12:59:26 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.26</generator>

<image>
	<url>https://greyli.com/wp-content/uploads/2025/03/avatar-500-compressed-144x144.jpg</url>
	<title>读书与写作 &#8211; 李辉 / Grey Li</title>
	<link>https://greyli.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>《Flask 从入门到进阶》正式发售</title>
		<link>https://greyli.com/new-flask-book/</link>
		<comments>https://greyli.com/new-flask-book/#comments</comments>
		<pubDate>Sun, 23 Nov 2025 14:25:36 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[Flask]]></category>
		<category><![CDATA[Flask Web开发实战]]></category>
		<category><![CDATA[Flask 从入门到进阶]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web 开发]]></category>

		<guid isPermaLink="false">https://greyli.com/?p=5830</guid>
		<description><![CDATA[经过五年的写（拖）作（延），我的新书《Flask 从入门到进阶》终于出版了！作为《Flask Web 开发实战 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>经过五年的写（拖）作（延），我的新书《<a href="https://helloflask.com/book/4/">Flask 从入门到进阶</a>》终于出版了！作为《<a href="https://helloflask.com/book/1/">Flask Web 开发实战</a>》的全新升级版，新版本在原书的基础上进行了大量更新和调整，以便适应当下的技术栈。目前已经有现货可以购买：</p>
<ul>
<li><a href="https://item.jd.com/10197448824391.html">京东</a></li>
<li><a href="https://product.dangdang.com/12441003237.html">当当</a></li>
<li><a href="https://helloflask.com/book/4/signed/">作者签名版</a></li>
</ul>
<p>至此我在 Flask 这条人生支线的探索也算圆满了。我从大二自学 Python 和 Flask，毕业前开始写作《Flask Web 开发实战》，这本书出版的同时也成为了 Flask 的维护者，并且为大量相关项目贡献代码。从</span> 2018 年出版到现在，一共重印了 14 次，累计售出 2 万本（包括电子书）。收获了很多好评，在<a href="https://book.douban.com/subject/30310340/">豆瓣</a>上评分也保持在 9 分左右：</p>
<p><a href="https://greyli.com/wp-content/uploads/2025/11/flask-book-douban-page.png"><img class="aligncenter size-large wp-image-5834" src="https://greyli.com/wp-content/uploads/2025/11/flask-book-douban-page-1024x392.png" alt="" width="625" height="239" srcset="https://greyli.com/wp-content/uploads/2025/11/flask-book-douban-page-1024x392.png 1024w, https://greyli.com/wp-content/uploads/2025/11/flask-book-douban-page-150x57.png 150w, https://greyli.com/wp-content/uploads/2025/11/flask-book-douban-page-300x115.png 300w, https://greyli.com/wp-content/uploads/2025/11/flask-book-douban-page-624x239.png 624w, https://greyli.com/wp-content/uploads/2025/11/flask-book-douban-page.png 1364w" sizes="(max-width: 625px) 100vw, 625px" /></a></p>
<p>到现在终于完成了新版本，而且还拿到了 Armin Ronacher（Flask 作者）的推荐语：</p>
<blockquote>
<p>Great resources make great developers, and it’s wonderful to see Flask supported by such high-quality education materials.</p>
</blockquote>
<p>感谢一直关注这本书并持续催更的朋友！这本书的完成是我们共同努力的结果 :D</p>
<p><a href="https://greyli.com/wp-content/uploads/2025/11/new-flaskbook.jpg"><img class="aligncenter wp-image-5843 " src="https://greyli.com/wp-content/uploads/2025/11/new-flaskbook-768x1024.jpg" alt="" width="409" height="545" srcset="https://greyli.com/wp-content/uploads/2025/11/new-flaskbook-768x1024.jpg 768w, https://greyli.com/wp-content/uploads/2025/11/new-flaskbook-113x150.jpg 113w, https://greyli.com/wp-content/uploads/2025/11/new-flaskbook-225x300.jpg 225w, https://greyli.com/wp-content/uploads/2025/11/new-flaskbook-624x832.jpg 624w" sizes="(max-width: 409px) 100vw, 409px" /></a></p>
<h2>本书主要特色</h2>
<p>这本书换了一个新书名，出于<a href="https://greyli.com/flask-book-2025-signed/#new-name">一个有点滑稽的原因</a>。书名从《Flask Web 开发实战：入门、进阶与原理解析》变成了《Flask 从入门到进阶：Python Web 开发工程化实践》。不过新的副书名也能更好的概括这本书的特点：以学习 Flask Web 开发作为脉络，你能通过这本书掌握相对完整的 Python Web 工程化实践。从 HTTP 原理到数据库 ORM，从单元测试到代码风格再到性能优化，从 Web 程序开发到 Web API 开发，最后再到不同的部署方式。如果想要深入了解框架，最后还有一章源码解析。同时用两个示例程序串起来各种不同的知识点，比如 Flask 项目的组织方式和技巧，以及 Flask 开发中各类功能的实现。</p>
<p>访问这本书的主页查看详细介绍和章节目录：<a href="https://helloflask.com/book/4/">https://helloflask.com/book/4/</a></p>
<h2>新版本主要变化</h2>
<p>下面是一些具体内容上的变化：</p>
<h3>版本升级</h3>
<table>
<thead>
<tr>
<th>旧版本</th>
<th>新版本</th>
</tr>
</thead>
<tbody>
<tr>
<td>Flask 1.x</td>
<td>Flask 3.x</td>
</tr>
<tr>
<td>Python 2.7, 3.6+</td>
<td>Python 3.9+</td>
</tr>
<tr>
<td>Bootstrap 4.x</td>
<td>Bootstrap 5.x</td>
</tr>
<tr>
<td>SQLAlchemy 1.x</td>
<td>SQLAlchemy 2.x</td>
</tr>
</tbody>
</table>
<h3>技术栈更新</h3>
<table>
<thead>
<tr>
<th>旧版本</th>
<th>新版本</th>
</tr>
</thead>
<tbody>
<tr>
<td>Pipenv</td>
<td>PDM</td>
</tr>
<tr>
<td>Flask-Mail</td>
<td>Flask-Mailman</td>
</tr>
<tr>
<td>Flake8</td>
<td>Ruff</td>
</tr>
<tr>
<td>Open Iconic</td>
<td>Bootstrap Icon</td>
</tr>
<tr>
<td>Flask-Moment + Moment.js</td>
<td>Day.js</td>
</tr>
<tr>
<td>jQuery</td>
<td>Vanilla JS</td>
</tr>
<tr>
<td>AJAX with jQuery</td>
<td>Fetch API</td>
</tr>
<tr>
<td>Flask for Web API</td>
<td>APIFlask</td>
</tr>
<tr>
<td>云平台部署</td>
<td>Docker 部署</td>
</tr>
</tbody>
</table>
<p>示例程序上做了比较大的调整，删掉了旧版本的 <a href="https://github.com/greyli/sayhello">SayHello</a>、<a href="https://github.com/greyli/todoism">Todoism</a>、<a href="https://github.com/greyli/catchat">CatChat</a>，保留两个程序并做了比较大的重构：</p>
<table>
<thead>
<tr>
<th>旧版本</th>
<th>新版本</th>
</tr>
</thead>
<tbody>
<tr>
<td>Bluelog</td>
<td><a href="https://github.com/greyli/greybook" target="_blank" rel="noopener">Greybook</a></td>
</tr>
<tr>
<td>Albumy</td>
<td><a href="https://github.com/greyli/moments" target="_blank" rel="noopener">Moments</a></td>
</tr>
<tr>
<td>helloflask/demos</td>
<td><a href="https://github.com/greyli/helloflask/tree/main/examples" target="_blank" rel="noopener">helloflask/examples</a></td>
</tr>
</tbody>
</table>
<p>新版本计划是想做一些删减，比如从 700 页减到 500 页，毕竟一本厚书还是让人蛮有压力的。虽然删掉了两个章节，但是写到最后又快到了 700 页，实际的厚度比旧版本还要厚一点点。大概不知不觉又加了很多内容进来。</p>
<h2>面向的读者群</h2>
<p>本书面向的读者群如下：</p>
<ul>
<li>了解 Python 基本语法，想要自己动手开发网站的编程爱好者</li>
<li>熟悉 Python，想要从事 Python Web 开发的后端工程师、运维工程师和爬虫工程师</li>
<li>想要从 Django 等其他 Python Web 框架转向 Flask 的 Python 工程师</li>
</ul>
<p>本书不包含对 Python 的基础知识介绍，所以读者需要事先对 Python 基本语法有一定的了解。另外，Web 开发不可避免的会涉及到一些 HTML、CSS 和 JavaScript 知识，如果你不熟悉这些，可以通过 MDN 提供的 <a href="https://developer.mozilla.org/zh-CN/docs/learn" target="_blank" rel="noopener">Web 开发入门教程</a>学习，简单了解即可。</p>
<h2>推荐语</h2>
<blockquote>
<p>Great resources make great developers, and it’s wonderful to see Flask supported by such high-quality education materials.</p>
<p>—— <a href="https://lucumr.pocoo.org/about/">Armin Ronacher</a>（Flask 作者，Sentry Platform 副总裁）</p>
<p>作为一名对 Python 充满热忱的软件工程师，一名乐于帮助他人、回馈社区的布道者，Grey 对技术准确性、阅读体验感的无限追求都体现在这本新作中，我相信每一名读者都能在字里行间感受到他的诚意。</p>
<p>—— 管俊（《DevOps 实践指南（第 2 版）》译者，戴尔中国卓越研发集团 DevOps 架构师）</p>
<p>这本书内容翔实，推荐给想要系统学习 Flask 的人。不要漏掉书中的小知识点哦。</p>
<p>—— <a href="http://lepture.com/">Hsiaoming Yang</a>（Typlog 创始人，Authlib 作者）</p>
</blockquote>
<h2>关于作者</h2>
<p class="">我是李辉（Grey Li），Flask &amp; APIFlask 的维护者，Flask 开发团队（<a href="https://palletsprojects.com/people" target="_blank" rel="noopener">Pallets Team</a>）成员， HelloFlask 社区和代码厨房社区创建者，微软 Python 方向最有价值专家（MVP）。目前就职于戴尔中国卓越研发集团，担任首席软件工程师。</p>
<p>我热衷于开源软件的应用和推广，为 Flask 等开源项目贡献过大量代码。也曾在 PyCon China、PyCon US、COSCUP、COSCon、CommunityOverCode 等技术大会担任演讲嘉宾。你可以在 <a href="https://github.com/greyli" target="_blank" rel="noopener">GitHub</a> 上看到我的开源项目。</p>
<p>如果你想了解我的新作品或其他动态，可以关注我的 <a href="https://twitter.com/greylihui" target="_blank" rel="noopener">Twitter</a> 和<a href="https://greyli.com/files/qrcode_gh.jpg" target="_blank" rel="noopener">微信公众号</a>，或是加入我的<a href="https://greyli.com/newsletter" target="_blank" rel="noopener">邮件通讯列表</a>。</p>
<h2>勘误、分享和评价</h2>
<p>在阅读过程中如果发现了排版或内容上的错误，欢迎通过下面的方式提交勘误。我会在后续重印时进行修正。感谢反馈！</p>
<ul>
<li>提交 <a href="https://github.com/greyli/helloflask/issues/new/choose">GitHub issue</a></li>
<li>在<a href="https://codekitchen.community/t/topic/837">勘误收集帖</a>留言</li>
</ul>
<p>如果你觉得这本书还不错，欢迎分享到社交网络，或是告诉你的同事和朋友。也欢迎在<a href="https://book.douban.com/subject/37668215/">本书的豆瓣页面</a>标记和评价。</p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/new-flask-book/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>《Flask 入门教程》第三版发布</title>
		<link>https://greyli.com/flask-tutorial-v3/</link>
		<comments>https://greyli.com/flask-tutorial-v3/#respond</comments>
		<pubDate>Sat, 16 Jul 2022 14:29:41 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[Flask]]></category>
		<category><![CDATA[Flask 入门教程]]></category>

		<guid isPermaLink="false">https://greyli.com/?p=4416</guid>
		<description><![CDATA[最近手里堆积的事情越来越多，两本书的进度被日常工作挤压，于是非常想有一些小小的进展来缓解焦虑。刚好有读者来反馈 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>最近手里堆积的事情越来越多，两本书的进度被日常工作挤压，于是非常想有一些小小的进展来缓解焦虑。刚好有读者来反馈《<a href="https://helloflask.com/book/3/">Flask 入门教程</a>》不兼容最新版本 Flask 的问题，所以就花了一天时间来更新这个教程。</p>
<p><a href="https://greyli.com/flask-tutorial-v2-0-released/">发布上个版本</a>已经是 2019 年的事情了，这次针对 Flask 最新的 2.1.3 版本做了改写，同时不再兼容 Python 2.7 版本。优化了前面几章的一些内容，后面的章节需要改动的地方不多，就没有认真去更新。另外还顺便用 MkDocs 和 Netlify 把教程重新部署到了 <a href="https://tutorial.helloflask.com/">tutorial.helloflask.com</a> 上，后续会废弃掉 GitBook。</p>
<p>过去三年里，这本电子书大概给我带来了五百块的收入（主页上有一个自愿点击的「付费支持￥10」的按钮）。虽然不多，但是时不时收到到账提醒和鼓励的话还是很开心的。感谢每一位付款的读者！</p>
<p><a href="https://greyli.com/wp-content/uploads/2022/07/pay.jpg"><img class="aligncenter wp-image-4420 size-large" src="https://greyli.com/wp-content/uploads/2022/07/pay-534x1024.jpg" alt="" width="534" height="1024" srcset="https://greyli.com/wp-content/uploads/2022/07/pay-534x1024.jpg 534w, https://greyli.com/wp-content/uploads/2022/07/pay-78x150.jpg 78w, https://greyli.com/wp-content/uploads/2022/07/pay-157x300.jpg 157w, https://greyli.com/wp-content/uploads/2022/07/pay-624x1196.jpg 624w, https://greyli.com/wp-content/uploads/2022/07/pay.jpg 1170w" sizes="(max-width: 534px) 100vw, 534px" /></a></p>
<p>当然，给我带来更大成就感的是看到读者分享他/她<a href="https://discuss.helloflask.com/t/topic/64">通过阅读这个教程写的程序</a>，这是一种给别人带来成就感的成就感——元成就感。</p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/flask-tutorial-v3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开始写作《Flask Web 开发实战》第二版</title>
		<link>https://greyli.com/new-flask-book-plan/</link>
		<comments>https://greyli.com/new-flask-book-plan/#comments</comments>
		<pubDate>Sat, 30 Oct 2021 11:57:38 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[Flask]]></category>
		<category><![CDATA[Flask Web开发实战]]></category>
		<category><![CDATA[写作计划]]></category>

		<guid isPermaLink="false">https://greyli.com/?p=4076</guid>
		<description><![CDATA[《Flask Web 开发实战》第二版已经开始写作，计划在今年完成这本书。那本《Python Web API  [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>《<a href="https://helloflask.com/book/4/">Flask Web 开发实战</a>》第二版已经开始写作，计划在今年完成这本书。那本《<a href="https://helloflask.com/book/2/">Python Web API 设计与开发</a>》一直拖着没写完，让我感觉很焦虑。因为拖得太久，HelloFlask 群聊里已经开始<a href="https://greyli.com/wp-content/uploads/2021/10/qq-chat.png" target="_blank" rel="noopener">谣传我转行送快递了</a> :D。</p>
<p>所以我想先把《Flask Web 开发实战》新版完成，这样这一年我至少完成了三个年度目标中的一个。「优化」是我擅长和喜欢做的事情，除了要用 Word 写之外，我很乐意给这本书写新版。</p>
<ul>
<li>主页：<a href="https://helloflask.com/book/4">https://helloflask.com/book/4</a></li>
<li>建议收集（或在文末留言）：<a href="https://discuss.helloflask.com/t/topic/838">https://discuss.helloflask.com/t/topic/838</a></li>
<li>写作进度和动态：<a href="https://discuss.helloflask.com/t/topic/837">https://discuss.helloflask.com/t/topic/837</a></li>
<li>合同截稿日期：<del>2021 年 12 月 31 日</del> 2022 年 1 月 31 日</li>
<li>预计出版日期：2022 年 <del>2～3 月</del> 6~7 月</li>
</ul>
<h2>内容变动</h2>
<p>在各处收集了很多读者反馈和建议，综合我自己的规划，第二版主要有这些大的变动：</p>
<ul>
<li>不再兼容 Python 2.7，基于 Python 3.x、Flask 2.x。</li>
<li>把大部分知识点集中到第一部分，让第二部分的示例程序内容更精简。</li>
<li>第 1 章使用 pip+venv（+pip-tools） 或 PDM 替代 Pipenv，增加更多对 PyCharm 的介绍。</li>
<li>第 6 章使用 Flask-Mailman 替代 Flask-Mail（同时引入介绍一些新的扩展，比如 Flask-Admin）。</li>
<li>删除第 9、10、11 章（删除后 3 个实战项目），仅保留 Sayhello 和 Bluelog，删减项目的部分功能会合并到这两个项目。</li>
<li>第 10 章删除实战项目，只保留 Web API 开发部分，会新引入 marshmallow 和 APIFlask。</li>
<li>第 12 章添加异步任务相关内容。</li>
<li>第 14 章添加 Docker 相关内容。</li>
<li>删除第 15 章（Flask 扩展开发）。</li>
<li>删掉一些在国内访问有问题的服务介绍，比如 SendGrid（第 6 章）、Heroku（第 14 章）、Twitter 第三方登录（第 11 章）。</li>
</ul>
<p>大部分内容变动是在做删减，第一版 704 页，第二版内容会删减到 450 页左右。</p>
<h2>代码片段</h2>
<p>第一部分每一章都有一个示例程序，读者需要切换到每一个子文件夹运行，如果同时自己编写练习代码的话，很容易产生混乱。所以新版的考虑是，第一部分的示例程序不再给出可运行的示例文件（至少不在书里介绍），而是把所有的代码片段放到 <a href="https://docs.helloflask.com/">HelloFlask 文档</a>，以代码片段的形式组织。读者需要的话可以自己复制代码到本地运行。作为示例，第一章的代码片段可以在这里看到：<a href="https://docs.helloflask.com/book/4/snippets/c1/">https://docs.helloflask.com/book/4/snippets/c1/</a>。因为前六章的代码片段变化不大，所以第一版的读者也可以使用这些文档。</p>
<p>P.S. HelloFlask 文档（<a href="https://docs.helloflask.com">https://docs.helloflask.com</a>）是我最近刚创建的一个文档集合。所有和书相关的内容都会放到这里，比如勘误、代码片段、衍生文章等。后续也会在这里写一些扩展快速入门介绍、Flask 基础知识等 Flask 相关的东西。</p>
<h2>书名</h2>
<p>第二版因为有独立的书号，所以可以改书名。责编老师认为原书名就很好，换书名会浪费掉第一本书建立的品牌。我也基本同意这个观点。目前的考虑是主书名不变，出于营销的考虑，副书名或许可以加一个「Python」关键字，比如改成「Python Web 开发入门、进阶与原理解析」。</p>
<h2>封面</h2>
<p>目前这本书<a href="https://helloflask.com/book/4/">主页</a>上的封面不是正式封面（我用画图软件在初版封面上随手涂了两笔 &gt;_&lt;）。目前的想法是把封面标题颜色换成深红色，然后换一个封面图案，不过暂时还没想好换成什么。</p>
<h2>措辞</h2>
<p>第一版是用 Word 写的，排版很痛苦，毕竟要在 Word 里面排版代码。第二版也要继续用 Word 写，而且更加痛苦，因为第二版的书稿是编辑老师用工具从 PDF 文件转制成 Word 的，大部分格式都变得很混乱。希望这是我最后一次用 Word 来写技术书。</p>
<p>对于第一版，我交的终稿和最终成书有一些内容的变化，编辑老师会修正错别字和一些病句。但是后面也发现有一些句子修改得并不合理，导致句子原意产生了变化。这次我会在出版前过一遍校正后的书稿，确保不会再出现这样的情况。</p>
<p>另外，编辑老师还会替换一些词汇用法，比如把「我」替换为「笔者」，这个笔者勉强能接受，但是笔者最不能接受的就是要把所有的「点击」改成「单击」。单击一个链接？这太奇怪了。今年和编辑老师再次沟通了这件事，事情终于有了变化，书中的「点击」在这一版不用再死板的按照出版社的规定修改为「单击」。新的读者不会被指导在网页上单击一个链接了。</p>
<h2>周边开源项目</h2>
<p>我的很多开源项目的开发都是写作驱动的，上一本书驱动我开发了那几个 Flask 示例程序和扩展，这一次同样会有一些开发计划：</p>
<ul>
<li>APIFlask：补齐所有文档，发布 1.0 版本。</li>
<li>Bootstrap-Flask：添加 Bootstrap 5 支持。</li>
<li>Flask-CKEditor：添加 CKEditor 5 支持，同时集成新版本内置的 Markdown 支持。</li>
<li>Flask-WTF：添加多文件上传验证支持。</li>
<li>Sayhello：添加分页、多语言、Markdown 支持等功能（总之就是尽可能把删减的示例程序里比较有意思的功能合并到这里）。</li>
<li>Bluelog：把 Albumy 的除了图片相关的功能合并过来，会换一个名字（暂定 WeBlog），作为一个社交博客。</li>
</ul>
<p>如果你对这本书的新版有其他建议和想法，欢迎提出。这两本新书相关的动态会发到 <a href="https://twitter.com/helloflask">Twitter @helloflask</a> 和我的<a href="https://greyli.com/files/qrcode_gh.jpg">公众号</a>，欢迎关注。</p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/new-flask-book-plan/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>国内技术书盗版现状</title>
		<link>https://greyli.com/pirated-tech-books/</link>
		<comments>https://greyli.com/pirated-tech-books/#comments</comments>
		<pubDate>Sun, 24 May 2020 05:55:08 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[写作]]></category>
		<category><![CDATA[出版]]></category>
		<category><![CDATA[技术书]]></category>
		<category><![CDATA[盗版]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=3005</guid>
		<description><![CDATA[我在 18 年出版了一本技术书，快两年过去了，和盗版打了很多交道。这篇文章从一个技术书作者的视角以 2018~ [&#8230;]]]></description>
				<content:encoded><![CDATA[
<p class="md-end-block md-p md-focus"><span class="md-plain">我在 18 年出版了一本技术书，快两年过去了，和盗版打了很多交道。这篇文章从一个技术书作者的视角以 2018~2020 作为切片来记录一下国内技术书的盗版现状。</span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">盗版的起源</span></h2>
<p class="md-end-block md-p"><span class="md-plain">我的书第一次上架到电子书平台是在 18 年 8 月 24 号，纸质书正式开始发售是在同年 9 月 13 号。仅仅不到一个月的时间，在 10 月初，淘宝上就开始出现了大量盗版影印书（大约有十几个，价格多在 ￥30 左右）。紧接着，在 11 月初，CSDN 上出现很多盗版电子书。同一时间，多个盗版电子书网站开始有了这本书，基本占领了百度和 Google 的前几页搜索结果。</span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">SEO 赢家</span></h2>
<p class="md-end-block md-p"><span class="md-plain">从纸书发售的两个月后开始，一直到现在，不管在哪个搜索引擎上，盗版文件的链接都是 SEO 赢家。以 Google 为例，直接搜索书名「Flask Web开发实战：入门、进阶与原理解析」，前几页的盗版链接比例如下（四月末数据）：</span></p>
<ul>
<li class="md-end-block md-p"><span class="md-plain">第一页：4/10</span></li>
<li class="md-end-block md-p"><span class="md-plain">第二页：7/10</span></li>
<li class="md-end-block md-p"><span class="md-plain">第三页：5/10</span></li>
</ul>
<p class="md-end-block md-p"><span class="md-plain">单是直接搜索书名就已经得到这么高的盗版比例，更别说加上 PDF 之类的盗版关联词。</span></p>
<p class="md-end-block md-p"><span class="md-plain">下面是在 Google 上的<a href="https://www.google.com/search?q=Flask+Web%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98%EF%BC%9A%E5%85%A5%E9%97%A8%E3%80%81%E8%BF%9B%E9%98%B6%E4%B8%8E%E5%8E%9F%E7%90%86%E8%A7%A3%E6%9E%90&amp;oq=Flask+Web%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98%EF%BC%9A%E5%85%A5%E9%97%A8%E3%80%81%E8%BF%9B%E9%98%B6%E4%B8%8E%E5%8E%9F%E7%90%86%E8%A7%A3%E6%9E%90">第一页搜索结果</a>截图：</span></p>
<p class="md-end-block md-p"><span class="md-image md-img-loaded" data-src="google-result.png"><img class="aligncenter wp-image-3012 size-large" src="https://greyli.com/wp-content/uploads/2020/05/google-result-516x1024.png" alt="Google 搜索结果" width="516" height="1024" srcset="https://greyli.com/wp-content/uploads/2020/05/google-result-516x1024.png 516w, https://greyli.com/wp-content/uploads/2020/05/google-result-76x150.png 76w, https://greyli.com/wp-content/uploads/2020/05/google-result-151x300.png 151w, https://greyli.com/wp-content/uploads/2020/05/google-result-624x1237.png 624w, https://greyli.com/wp-content/uploads/2020/05/google-result.png 1160w" sizes="(max-width: 516px) 100vw, 516px" /></span></p>
<p class="md-end-block md-p"><span class="md-plain">书刚出版那段时间，盗版泛滥，但我能做的事情并不多。算是作为恶作剧，我在自己的博客上也放了一个<a href="http://greyli.com/%e3%80%8aflask-web%e5%bc%80%e5%8f%91%e5%ae%9e%e6%88%98%ef%bc%9a%e5%85%a5%e9%97%a8%e3%80%81%e8%bf%9b%e9%98%b6%e4%b8%8e%e5%8e%9f%e7%90%86%e8%a7%a3%e6%9e%90%e3%80%8bpdf-epub-txt-mobi-%e4%b8%8b%e8%bd%bd/">盗版电子书下载页面</a>（上面搜索结果里的第五位），复制了某个盗版电子书网站的标题和内容，特意用了中文 URL 和盗版关键词。本来是打算在页面结尾放下载链接的地方讽刺几句，嘲弄一下点进来想下载盗版电子书的笨蛋。但是又担心激怒了某个家伙，然后被到处写差评。而且这样也太没有气度，所以只是把下载链接指向了这本书的主页。</span></p>
<p class="md-end-block md-p"><span class="md-plain">我的博客上的文章点击基本都是来自搜索引擎的自然流量，18 年 12 月 19 日发布的一篇无聊的技术文章到现在有 262 个点击，而第二天发布的这个盗版电子书下载文章有 2673 个点击：</span></p>
<p><img class="aligncenter wp-image-3020 size-full" src="https://greyli.com/wp-content/uploads/2020/05/pirate-post-click.png" alt="盗版文章点击量" width="1023" height="191" srcset="https://greyli.com/wp-content/uploads/2020/05/pirate-post-click.png 1023w, https://greyli.com/wp-content/uploads/2020/05/pirate-post-click-150x28.png 150w, https://greyli.com/wp-content/uploads/2020/05/pirate-post-click-300x56.png 300w, https://greyli.com/wp-content/uploads/2020/05/pirate-post-click-624x117.png 624w" sizes="(max-width: 1023px) 100vw, 1023px" /></p>
<p class="md-end-block md-p"> </p>
<h2 class="md-end-block md-heading"><span class="md-plain">淘宝和闲鱼</span></h2>
<p class="md-end-block md-p"><span class="md-plain">淘宝是最早出现盗版影印书的地方，闲鱼其次。18 年集中处理了一批淘宝影印书，中间又零散处理一些，最近试着再次用关键词搜索，发现盗版影印书又开始卷土重来了。这是在淘宝使用关键词「Flask Web开发实战：入门、进阶与原理解析」得到的<a href="https://s.taobao.com/search?q=Flask+Web%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98%EF%BC%9A%E5%85%A5%E9%97%A8%E3%80%81%E8%BF%9B%E9%98%B6%E4%B8%8E%E5%8E%9F%E7%90%86%E8%A7%A3%E6%9E%90">第一页结果</a>（2020/5/23 数据），48 个商品里有 16 个是盗版影印书，刚好占据三分之一：</span></p>
<p class="md-end-block md-p"><span class="md-image md-img-loaded" data-src="taobao-result.png"><a href="http://greyli.com/wp-content/uploads/2020/05/taobao-result.png" target="_blank" rel="noopener"><img class="aligncenter wp-image-3024 size-large" src="https://greyli.com/wp-content/uploads/2020/05/taobao-result-236x1024.png" alt="淘宝搜索结果" width="236" height="1024" srcset="https://greyli.com/wp-content/uploads/2020/05/taobao-result-236x1024.png 236w, https://greyli.com/wp-content/uploads/2020/05/taobao-result-69x300.png 69w, https://greyli.com/wp-content/uploads/2020/05/taobao-result-624x2708.png 624w, https://greyli.com/wp-content/uploads/2020/05/taobao-result.png 1559w" sizes="(max-width: 236px) 100vw, 236px" /></a></span><span class="md-plain">大多盗版影印书都会打着二手的旗号卖盗版。以第一页里看起来最像是真二手的这家店为例（它甚至在商品介绍图片里清晰的注明「拒绝盗版」、「8 新正版二手」）：</span></p>
<p><img class="aligncenter wp-image-3019 size-large" src="https://greyli.com/wp-content/uploads/2020/05/pirate-good-1024x630.png" alt="淘宝影印书" width="625" height="385" srcset="https://greyli.com/wp-content/uploads/2020/05/pirate-good-1024x630.png 1024w, https://greyli.com/wp-content/uploads/2020/05/pirate-good-150x92.png 150w, https://greyli.com/wp-content/uploads/2020/05/pirate-good-300x184.png 300w, https://greyli.com/wp-content/uploads/2020/05/pirate-good-624x384.png 624w, https://greyli.com/wp-content/uploads/2020/05/pirate-good.png 1436w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<p class="md-end-block md-p"><span class="md-plain">当你进一步询问，几乎总会得到这样的回答：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3016 size-full" src="https://greyli.com/wp-content/uploads/2020/05/pirate-chat.png" alt="盗版影印书聊天对话" width="675" height="674" srcset="https://greyli.com/wp-content/uploads/2020/05/pirate-chat.png 675w, https://greyli.com/wp-content/uploads/2020/05/pirate-chat-150x150.png 150w, https://greyli.com/wp-content/uploads/2020/05/pirate-chat-300x300.png 300w, https://greyli.com/wp-content/uploads/2020/05/pirate-chat-144x144.png 144w, https://greyli.com/wp-content/uploads/2020/05/pirate-chat-624x623.png 624w" sizes="(max-width: 675px) 100vw, 675px" /></p>
<p class="md-end-block md-p"><span class="md-plain">淘宝网站和闲鱼上自带的举报功能是没用的，即使商家有极其明显的售假描述，比如「PDF」、「影印」：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3018 size-full" src="https://greyli.com/wp-content/uploads/2020/05/pirate-description.png" alt="盗版商品描述" width="937" height="742" srcset="https://greyli.com/wp-content/uploads/2020/05/pirate-description.png 937w, https://greyli.com/wp-content/uploads/2020/05/pirate-description-150x119.png 150w, https://greyli.com/wp-content/uploads/2020/05/pirate-description-300x238.png 300w, https://greyli.com/wp-content/uploads/2020/05/pirate-description-624x494.png 624w" sizes="(max-width: 937px) 100vw, 937px" /></p>
<p class="md-end-block md-p"><span class="md-plain">但是举报之后得到的举报结果总是固定不变的「从信息层面暂未能核实到售假信息」：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3023 size-large" src="https://greyli.com/wp-content/uploads/2020/05/taobao-report-1024x977.png" alt="淘宝举报处理结果" width="625" height="596" srcset="https://greyli.com/wp-content/uploads/2020/05/taobao-report-1024x977.png 1024w, https://greyli.com/wp-content/uploads/2020/05/taobao-report-150x143.png 150w, https://greyli.com/wp-content/uploads/2020/05/taobao-report-300x286.png 300w, https://greyli.com/wp-content/uploads/2020/05/taobao-report-624x595.png 624w, https://greyli.com/wp-content/uploads/2020/05/taobao-report.png 1274w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<p class="md-end-block md-p"><span class="md-plain">对于淘宝和闲鱼的盗版书，更有效的方式是在阿里巴巴集团知识版权保护平台（</span><span class="md-link" spellcheck="false"><a href="https://ipp.alibabagroup.com/">https://ipp.alibabagroup.com/</a></span><span class="md-plain">）提交投诉，不过每一件商品的投诉都要经历与客服/商家对话确认、生成阿里旺旺举证号、填写投诉单这样一个漫长的过程。慢慢地，我开始直接在对方承认售假后要求对方下架。大多数商家都是愿意合作的（偶尔有些商家在下架一段时间后会偷偷再次上架，这时再花时间在淘宝 IPP 平台提交投诉），所以那段时间用这种方式处理了一大批盗版影印书：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3022 size-large" src="https://greyli.com/wp-content/uploads/2020/05/taobao-books-1024x592.png" alt="盗版影印书合影" width="625" height="361" srcset="https://greyli.com/wp-content/uploads/2020/05/taobao-books-1024x592.png 1024w, https://greyli.com/wp-content/uploads/2020/05/taobao-books-150x87.png 150w, https://greyli.com/wp-content/uploads/2020/05/taobao-books-300x173.png 300w, https://greyli.com/wp-content/uploads/2020/05/taobao-books-624x361.png 624w, https://greyli.com/wp-content/uploads/2020/05/taobao-books.png 1233w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<p class="md-end-block md-p"><span class="md-plain">虽然淘宝上的盗版影印书现在又大批量复活了，但我已经没有新书发售时那样的动力和愤慨心情去处理它们。</span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">百度网盘</span></h2>
<p class="md-end-block md-p"><span class="md-plain">大部分独立站点售卖的盗版电子书都是放到百度网盘上的，这些独立站点的站长有些联系不上，有些拒绝删除，所以更直接的处理方式是在百度网盘上举报。</span></p>
<p class="md-end-block md-p"><span class="md-plain">和淘宝类似，无论你提交多少次，百度网盘文件页面的举报功能是没用的。你需要在百度版权中心（</span><span class="md-link" spellcheck="false"><a href="http://copyright.baidu.com/">http://copyright.baidu.com/</a></span><span class="md-plain">）进行投诉，前前后后一共处理了 19 个盗版文件：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3007 size-large" src="https://greyli.com/wp-content/uploads/2020/05/baidu-report-1024x1004.png" alt="百度网盘投诉记录" width="625" height="613" srcset="https://greyli.com/wp-content/uploads/2020/05/baidu-report-1024x1004.png 1024w, https://greyli.com/wp-content/uploads/2020/05/baidu-report-150x147.png 150w, https://greyli.com/wp-content/uploads/2020/05/baidu-report-300x294.png 300w, https://greyli.com/wp-content/uploads/2020/05/baidu-report-624x612.png 624w, https://greyli.com/wp-content/uploads/2020/05/baidu-report.png 1042w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<p class="md-end-block md-p"><span class="md-plain">但是这样做只对那些比较懒的盗版商人有用，因为勤劳的盗版商人总是会不停地更换掉失效的网盘链接，甚至每次都换一个相关性弱一点的名字，试图绕过百度网盘盗版审核的判断标准。我曾经连续四次跟踪举报某篇文章里的盗版网盘链接，对方把网盘的文件名从「《Flask Web开发实战入门进阶与原理解析》PDF+配套源代码+资料+参考」一直缩减到「Python Web 开发」。</span></p>
<p class="md-end-block md-p"><span class="md-plain">这些电子书文件有很多版本，有一些是资源售卖者制作的不完整文件，最后一页会放一个购买方式，比如微信公众号或 QQ 号，还有一些会在最后放一个资源售卖网站的链接，你需要付费获取用来提取文件的密钥。他们还会像模像样的放一个这样的「版权声明」：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3017 size-full" src="https://greyli.com/wp-content/uploads/2020/05/pirate-copyright-statement.png" alt="盗版电子书的版权声明" width="800" height="389" srcset="https://greyli.com/wp-content/uploads/2020/05/pirate-copyright-statement.png 800w, https://greyli.com/wp-content/uploads/2020/05/pirate-copyright-statement-150x73.png 150w, https://greyli.com/wp-content/uploads/2020/05/pirate-copyright-statement-300x146.png 300w, https://greyli.com/wp-content/uploads/2020/05/pirate-copyright-statement-624x303.png 624w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p class="md-end-block md-p"><span class="md-plain">还有一些就是热心读者或者说乐于分享的读者自发分享出来的完整电子书文件，其中最完整的是一份 312M 的压缩包文件，其中包含了：</span></p>
<ul>
<li class="md-end-block md-p"><span class="md-plain">一份从亚马逊 Kindle 客户端破解的 PDF 文件</span></li>
<li class="md-end-block md-p"><span class="md-plain">一份纸质书扫描版的 PDF 文件</span></li>
<li class="md-end-block md-p"><span class="md-plain">从 GitHub 下载的前六章源码</span></li>
<li class="md-end-block md-p"><span class="md-plain">一份包含对方盗版电子书资源网站信息的 TXT 文件</span></li>
</ul>
<h2 class="md-end-block md-heading"><span class="md-plain">阿里云对象存储服务器</span></h2>
<p class="md-end-block md-p"><span class="md-plain">影响最大，最难处理的是阿里云服务器上的一个盗版文件。有人在阿里云的对象存储服务器上放了一个完整的 PDF 文件，而且这个文件在 Google 的搜索结果中排名非常靠前，这也就意味着任何人只要用 Google 搜索关键词，都可以直接点击链接在浏览器打开这个文件并下载。</span></p>
<p class="md-end-block md-p"><span class="md-plain">在我没处理掉这个文件之前，它长期占据搜索引擎结果第一名的位置（使用次要关键词也会排在第三名）：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3011 size-large" src="https://greyli.com/wp-content/uploads/2020/05/google-aliyun-oss-pdf-1024x662.png" alt="盗版 PDF 的 Google 搜索排名" width="625" height="404" srcset="https://greyli.com/wp-content/uploads/2020/05/google-aliyun-oss-pdf-1024x662.png 1024w, https://greyli.com/wp-content/uploads/2020/05/google-aliyun-oss-pdf-150x97.png 150w, https://greyli.com/wp-content/uploads/2020/05/google-aliyun-oss-pdf-300x194.png 300w, https://greyli.com/wp-content/uploads/2020/05/google-aliyun-oss-pdf-624x404.png 624w, https://greyli.com/wp-content/uploads/2020/05/google-aliyun-oss-pdf.png 1073w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<p class="md-end-block md-p"><span class="md-plain">阿里云对象存储（OSS）是阿里云提供的存储服务，这个 PDF 文件存储在深圳区的阿里云服务器上，域名也是阿里云的域名（oss-cn-shenzhen.aliyuncs.com）。2020 年 3 月 2 号我在阿里云举报中心提交了一个举报，流程很麻烦，除了要提供身份证扫描件和著作权证明外，还要填一个列举各类证据和信息的承诺书，但是处理结果却很简单：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3006 size-full" src="https://greyli.com/wp-content/uploads/2020/05/aliyun-report.png" alt="阿里云举报结果" width="831" height="476" srcset="https://greyli.com/wp-content/uploads/2020/05/aliyun-report.png 831w, https://greyli.com/wp-content/uploads/2020/05/aliyun-report-150x86.png 150w, https://greyli.com/wp-content/uploads/2020/05/aliyun-report-300x172.png 300w, https://greyli.com/wp-content/uploads/2020/05/aliyun-report-624x357.png 624w" sizes="(max-width: 831px) 100vw, 831px" /></p>
<p class="md-end-block md-p"><span class="md-plain">先让我提供版权证明和列举侵权证据，最后却告诉我「除非接到法院判决或行政裁决，阿里云无权对侵权文件进行处理」。更好笑的是，建议我「直接通知该网站经营者或相关域名持有人并与之协商」，而这个盗版文件的「网站经营者和相关域名持有人」正是阿里云本身。</span></p>
<p class="md-end-block md-p"><span class="md-plain">虽然声称「我方无权作出任何处置动作」，但是其 </span><span class=" md-link"><a spellcheck="false" href="https://help.aliyun.com/document_detail/31821.html"><span class="md-plain">OSS 的服务条款</span></a></span><span class="md-plain">里却清楚的注明了「阿里云有权采取相应的处理措施」：</span></p>
<blockquote>
<p class="md-end-block md-p"><span style="font-size: 1rem;">「3.1.3.5.不利用阿里云提供的资源和服务上传（Upload）、下载（download）、储存、发布如下信息或者内容，不为他人发布该等信息提供任何便利（包括但不限于设置URL、BANNER链接等）:</span></p>
<p class="md-end-block md-p"><span style="font-size: 1rem;">……</span></p>
<p class="md-end-block md-p"><span style="font-size: 1rem;">3.1.3.5.7.侵害他人合法权益的信息和/或其他有损于社会秩序、社会治安、公共道德的信息或内容；</span></p>
<p>&#8230;&#8230;</p>
<p class="md-end-block md-p"><span class="md-plain" style="font-size: 1rem;">3.1.3.11．如阿里云发现您违反上述条款的约定，</span><span class="" style="font-size: 1rem;"><strong><span class="md-plain">有权根据情况采取相应的处理措施，包括但不限于立即终止服务、中止服务或删除相应信息等</span></strong></span><span class="md-plain" style="font-size: 1rem;">。如果第三方机构或个人对您提出质疑或投诉，阿里云将通知您，您有责任在规定时间内进行说明并出具证明材料，</span><span class="" style="font-size: 1rem;"><strong><span class="md-plain">如您未能提供相反证据或您逾期未能反馈的，阿里云将采取包括但不限于立即终止服务、中止服务或删除相应信息等处理措施。</span></strong></span><span class="md-plain" style="font-size: 1rem;">因您未及时更新联系方式或联系方式不正确而致使未能联系到您的，亦视为您逾期未能反馈。」</span></p>
</blockquote>
<p class="md-end-block md-p"><span class="md-plain">我没法接受让一个盗版 PDF 文件直接出现在书名搜索结果的第一名。4 月 24 号，我在新闻出版广电总局的盗版举报平台（</span><span class="md-link" spellcheck="false"><a href="http://www.sapprft.gov.cn/sapprft/channels/6979.shtml">http://www.sapprft.gov.cn/sapprft/channels/6979.shtml</a></span><span class="md-plain">）提交了对阿里云的举报。我想要是这也没用，那就只能起诉了。</span></p>
<p class="md-end-block md-p"><span class="md-plain">结果某天正在写这篇文章的时候（这篇文章一直断断续续写了很久），多番尝试之后，搜索到了这个 OSS 仓库（Bucket）的拥有者放到 GitHub 上的相关代码，翻了下 commit 历史，竟然发现了被意外提交到 Git 仓库的 Access key ID 和密钥（用来登录阿里云 OSS 的认证信息）：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3010 size-full" src="https://greyli.com/wp-content/uploads/2020/05/github-commit-history.png" alt="GitHub 代码历史" width="731" height="414" srcset="https://greyli.com/wp-content/uploads/2020/05/github-commit-history.png 731w, https://greyli.com/wp-content/uploads/2020/05/github-commit-history-150x85.png 150w, https://greyli.com/wp-content/uploads/2020/05/github-commit-history-300x170.png 300w, https://greyli.com/wp-content/uploads/2020/05/github-commit-history-624x353.png 624w" sizes="(max-width: 731px) 100vw, 731px" /></p>
<p class="md-end-block md-p"><span class="md-plain">所以，我就自己用这些认证信息登录阿里云 OSS 删掉了对方存储的盗版文件：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3014 size-large" src="https://greyli.com/wp-content/uploads/2020/05/oss-deleted-727x1024.png" alt="删除阿里云 OSS 文件" width="625" height="880" srcset="https://greyli.com/wp-content/uploads/2020/05/oss-deleted-727x1024.png 727w, https://greyli.com/wp-content/uploads/2020/05/oss-deleted-106x150.png 106w, https://greyli.com/wp-content/uploads/2020/05/oss-deleted-213x300.png 213w, https://greyli.com/wp-content/uploads/2020/05/oss-deleted-624x879.png 624w, https://greyli.com/wp-content/uploads/2020/05/oss-deleted.png 766w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<p class="md-end-block md-p"><span class="md-plain">加上一个网络教程的 MP3 和 HTML 文件，这位同学一共存储了 400 多个盗版文件。我不是狂热的正版卫士，所以没有做出更大的破坏，只是删除了我的书。</span></p>
<p class="md-end-block md-p"><span class="md-plain">也许更合理的方式是发电子邮件（他的 GitHub 资料上放了 Email 地址）请求他删除，但是既然他收到阿里云（如果阿里云的确通知了）的删除请求，但依然无所作为，而且这个文件困扰了我很长时间，自己删掉会让我觉得有报复的平衡……事后我发了邮件跟他说了这件事，结果对方很诚恳的道歉，倒让我因为「自己动手」有点不好意思。</span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">技术博客和电子书网站</span></h2>
<p class="md-end-block md-p"><span class="md-plain">CSDN 的下载板块是盗版电子书的聚集地，还好我的书刚开始在 CSDN 传播的时候，出版社和 CSDN 协商删除了大部分文件，所以我不用跟 CSDN 有太多纠缠。</span></p>
<p><img class="aligncenter wp-image-3009 size-large" src="https://greyli.com/wp-content/uploads/2020/05/csdn-pirate-1024x790.png" alt="CSDN 下载页面" width="625" height="482" srcset="https://greyli.com/wp-content/uploads/2020/05/csdn-pirate-1024x790.png 1024w, https://greyli.com/wp-content/uploads/2020/05/csdn-pirate-150x116.png 150w, https://greyli.com/wp-content/uploads/2020/05/csdn-pirate-300x231.png 300w, https://greyli.com/wp-content/uploads/2020/05/csdn-pirate-624x481.png 624w, https://greyli.com/wp-content/uploads/2020/05/csdn-pirate.png 1573w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<p class="md-end-block md-p"><span class="md-plain">售卖电子书文件的人大都会在CSDN、博客园和 51CTO 上面发文章分享网盘链接，因为这三个站点的链接在搜索引擎上的排名都很靠前。51 CTO 和博客园上的文章都没有举报按钮，网站底部也没有投诉通道，所以你需要发邮件给网站方请求删除相关文章。</span></p>
<p class="md-end-block md-p"><span class="md-plain">而对于各类专业的电子书资源网站，如果网站上有联系方式的话，那你可以直接联系站长，要求他们删除。如果站长什么也没留，那就没办法了。</span></p>
<p class="md-end-block md-p"><span class="md-plain">有一个盗版网站的站长，我假装买电子书加上他的 QQ 后，他发给我一个包含大量技术书列表的 Excel 文件，意思是任我挑选。我问他你这样随便卖盗版电子书，假如大多数人都来买盗版，那作者拿不到钱不就没有人愿意写书了？</span></p>
<p class="md-end-block md-p"><span class="md-plain">他告诉我说，他其实是从亚马逊买了正版电子书，破解以后便宜卖给别人，其实就相当于大家一起凑钱买了书（众筹？），这样大家都可以看到书。那一刻，我感觉对方心里有火也有光，仿佛面前是一个向无数编程学习者打开技术世界大门的武林前辈，一个带领大家走向共产新世界的先进同志。</span></p>
<p class="md-end-block md-p"><span class="md-plain">多搜索几页，你会发现，这样热心伟大、一心只为人类进步，一本书只卖一块五的人，有很多：</span></p>
<p><img class="aligncenter wp-image-3015 size-large" src="https://greyli.com/wp-content/uploads/2020/05/pirate-book-site-1024x694.png" alt="盗版电子书网站" width="625" height="424" srcset="https://greyli.com/wp-content/uploads/2020/05/pirate-book-site-1024x694.png 1024w, https://greyli.com/wp-content/uploads/2020/05/pirate-book-site-150x102.png 150w, https://greyli.com/wp-content/uploads/2020/05/pirate-book-site-300x203.png 300w, https://greyli.com/wp-content/uploads/2020/05/pirate-book-site-624x423.png 624w, https://greyli.com/wp-content/uploads/2020/05/pirate-book-site.png 1437w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<h2 class="md-end-block md-heading"><span class="md-plain">IM 群组和微信公众号</span></h2>
<p class="md-end-block md-p"><span class="md-plain">IM 群组尤其是 QQ 群也是盗版电子书的重灾区，技术相关的 QQ 群非常多，几乎每一个群里都有大量盗版电子书文件，有些还按照语言和框架整理的非常整齐：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3021 size-large" src="https://greyli.com/wp-content/uploads/2020/05/qq-group-files-485x1024.jpg" alt="QQ 群的盗版文件" width="485" height="1024" srcset="https://greyli.com/wp-content/uploads/2020/05/qq-group-files-485x1024.jpg 485w, https://greyli.com/wp-content/uploads/2020/05/qq-group-files-71x150.jpg 71w, https://greyli.com/wp-content/uploads/2020/05/qq-group-files-142x300.jpg 142w, https://greyli.com/wp-content/uploads/2020/05/qq-group-files-624x1317.jpg 624w, https://greyli.com/wp-content/uploads/2020/05/qq-group-files.jpg 1070w" sizes="(max-width: 485px) 100vw, 485px" /></p>
<p class="md-end-block md-p"><span class="md-plain">这里的处理难题是，你没有时间和精力去申请加入每一个群，然后定期挨个检查有没有你的盗版书被上传。</span></p>
<p class="md-end-block md-p"><span class="md-plain">去年年初，我也创建了一个 Flask 技术讨论 QQ 群，有趣的是，竟然会有人在群里分享我的书的电子书文件：</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3013 size-large" src="https://greyli.com/wp-content/uploads/2020/05/helloflask-qq-group-586x1024.png" alt="HelloFlask 群聊盗版电子书" width="586" height="1024" srcset="https://greyli.com/wp-content/uploads/2020/05/helloflask-qq-group-586x1024.png 586w, https://greyli.com/wp-content/uploads/2020/05/helloflask-qq-group-86x150.png 86w, https://greyli.com/wp-content/uploads/2020/05/helloflask-qq-group-172x300.png 172w, https://greyli.com/wp-content/uploads/2020/05/helloflask-qq-group-624x1090.png 624w, https://greyli.com/wp-content/uploads/2020/05/helloflask-qq-group.png 683w" sizes="(max-width: 586px) 100vw, 586px" /></p>
<p class="md-end-block md-p"><span class="md-plain">微信群因为没有群文件功能，分享出来的盗版书影响相对要小一点。但还有很多技术相关的微信公众号靠分享盗版电子书来引流，每一个这类公众号都有不少关注者。</span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">这种现状还会持续多久？</span></h2>
<p class="md-end-block md-p"><span class="md-plain">体面的生活里不应该存在盗版，何况是技术书这种存在大量正版购买渠道、基本没有封禁和删减的东西。但你很难让大多数人在匿名的网络空间里也保持现实中的道德感，而且还有很多人并不认为盗版有什么不对。</span></p>
<p class="md-end-block md-p"><span class="md-plain">盗版读者越多，网络上的盗版资源商、淘宝影印书就会越来越多。搜索盗版关键词的人越多，盗版网站就会越来越多，排名也就越来越靠前。你关注分享盗版电子书的微信公众号，那靠分享盗版电子书吸引关注者的微信公众号就会越来越多。</span></p>
<p class="md-end-block md-p"><span class="md-plain">与此同时，出版社和作者的收入就会越来越少，用心写书和出书的作者和出版社也会越来越少，有能力写出好书的人也就会更加犹豫要不要写书。无论盗版用户怎么辩驳， 盗版都是一件损害创作者和出版方利益的事情，最终也会影响整个技术写作环境和每一个人的阅读体验和选择。</span></p>
<p class="md-end-block md-p"><img class="aligncenter wp-image-3008 size-large" src="https://greyli.com/wp-content/uploads/2020/05/baidu-zhidao-pirate-740x1024.png" alt="百度知道盗版分享" width="625" height="865" srcset="https://greyli.com/wp-content/uploads/2020/05/baidu-zhidao-pirate-740x1024.png 740w, https://greyli.com/wp-content/uploads/2020/05/baidu-zhidao-pirate-108x150.png 108w, https://greyli.com/wp-content/uploads/2020/05/baidu-zhidao-pirate-217x300.png 217w, https://greyli.com/wp-content/uploads/2020/05/baidu-zhidao-pirate-624x864.png 624w, https://greyli.com/wp-content/uploads/2020/05/baidu-zhidao-pirate.png 935w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<p class="md-end-block md-p"><span class="md-plain">看着这些礼貌的、充满对知识真诚的渴望和期盼的留言，我在想这种盗版现状还会持续多久？</span></p>
<p class="md-end-block md-p"><span class="md-plain">我想不出答案。</span></p>
<p class="md-end-block md-p"><span class="md-plain">P.S. 没有动物在本文写作过程中受到伤害，但是有 3 本淘宝影印盗版书、5 个百度网盘盗版电子书文件、一份阿里云 OSS 深圳服务器里的盗版文件，一篇博客园分享盗版的文章永远的离开了这个世界。</span></p>
<p class="md-end-block md-p"><span class="md-plain">P.P.S 如果你没法访问 Google，请检查网线有没有正确连接，或打电话询问运营商，确认接入的是互联网而不是光明网。</span></p>
<p>相关链接：</p>
<ul>
<li><a href="https://www.v2ex.com/t/675228">本文在 V2EX 上的讨论</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/143185355">本文在知乎上的讨论</a></li>
</ul>
<hr />
<p>Update 2020/7/30</p>
<p>QQ 上有一个群成员跟我私聊，说他在网上找到我的 Flask 教程，但是不知道解压密码，想问我密码是多少。我很疑惑，不知道他到底在说什么，所以让他发链接给我看看，结果他发过来一个盗版资源售卖网站的链接，链接解析信息写着：「本资料为最新整理的《Flask Web 开发实战》PDF+源代码，用于学习，内容丰富！」……</p>
<p>Update 2020/8/17</p>
<p>有读者在知乎上发现了别人新分享的盗版 PDF 分享文章，在 QQ 群里提醒我。我还没开始处理，已经有几个群友在文章下发评论要求删除，第二天作者自己删除了文章。</p>
<p>Update 2020/11/5</p>
<p>又在淘宝上发现大概二十多本影印书，价格大都在 25 左右。好奇下载了拼多多，搜索结果里 90% 都是盗版影印书。</p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/pirated-tech-books/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Flask 新书完成时间推迟</title>
		<link>https://greyli.com/new-flask-book-delay/</link>
		<comments>https://greyli.com/new-flask-book-delay/#comments</comments>
		<pubDate>Tue, 31 Mar 2020 14:20:36 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[Flask]]></category>
		<category><![CDATA[书]]></category>
		<category><![CDATA[写作]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=2878</guid>
		<description><![CDATA[很抱歉没能按照预期时间完成 Flask 新书。本来这个消息要到四月一号（预估的完成时间）发布的，但是怕被当做愚 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p class="md-end-block md-p md-focus"><span class="md-plain">很抱歉没能按照预期时间完成 <a href="http://greyli.com/writing-another-flask-book/">Flask 新书</a>。本来这个消息要到四月一号（预估的完成时间）发布的，但是怕被当做愚人节玩笑，所以还是提前一点比较好。</span></p>
<p class="md-end-block md-p"><span class="md-plain">去年大部分时间花在了组织活动和准备演讲上，而今年前几个月又大都用来玩游戏和做外包了，所以一直没有全身心投入到新书写作上，目前大约只完成了一半……</span></p>
<p class="md-end-block md-p"><span class="md-plain">为新书写了一个简单的主页，地址在 <a href="http://helloflask.com/book/2">http://helloflask.com/book/2</a>。我在页面上放了一个写作进度条，方便感兴趣的人了解进度。同时也加了一个订阅功能，你可以用 Email 来订阅新书的发布消息。</span></p>
<p class="md-end-block md-p"><span class="md-plain">感谢大家的关注和支持，祝大家一切顺利。</span></p>
<p class="md-end-block md-p"><span class="md-plain">明天开始专心写作。</span></p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/new-flask-book-delay/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>程序员的基本常识——学习篇</title>
		<link>https://greyli.com/programmer-common-sense-learn/</link>
		<comments>https://greyli.com/programmer-common-sense-learn/#respond</comments>
		<pubDate>Tue, 19 Mar 2019 12:42:53 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[学习]]></category>
		<category><![CDATA[学习方法]]></category>
		<category><![CDATA[自学]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=2417</guid>
		<description><![CDATA[这个系列是《软技能》一书的摘抄整理，详细介绍见该系列首篇文章《程序员的基本常识&#8212;&#8212;职业 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
	这个系列是《软技能》一书的摘抄整理，详细介绍见该系列首篇文章<a _href="http://mp.weixin.qq.com/s?__biz=MzI5NTU0OTA5NA==&amp;mid=2247483659&amp;idx=1&amp;sn=6abbf5f142b4b127f60dae8e9fa4d9de&amp;chksm=ec50a0c2db2729d46a93f56a185cd47ede7df0ec2b7add581552e918ad1b4cc67b9c408172a1&amp;scene=21#wechat_redirect" data-itemshowtype="0" data-linktype="2" href="http://greyli.com/programmer-common-sense-career/" target="_blank">《程序员的基本常识&mdash;&mdash;职业篇》</a>。我会提取书中的有用信息，重新组织，并补充一些想法。欢迎评论补充相关信息，或是纠正错误观点。
</p>
<p>
	对于心智成长，大部分情况下学校和家庭都在帮倒忙，你通常只能靠阅读来完成自我教育。在编程世界里情况类似。你也许会在学校里学习计算机基础知识，但对于大量的编程语言、框架和工具，你通常都需要自学。自学、解决问题和正确提问是程序员必须掌握的几个「元能力」。
</p>
<p>
	<strong>1. 学习怎样学习</strong>
</p>
<ul>
<li>
		我们几乎都是下意识地倾向于学习自己感兴趣的东西。主动学习是效率更高的方式。
	</li>
<li>
		学习知识最好的方式就是立即将其用于实践。如果关于某个主题你能获得足够的知识，你就可以发挥自己心灵深处强大的创造力和好奇心。当我们能够在一件事情上尽情发挥的时候，我们的内心就倾向于吸收更多的信息，思考更有意义的问题。这种自然的探索和好奇心能够帮助我们轻而易举的记住更多的信息。
	</li>
<li>
		一旦你已经实践过，并积累了各式各样的问题，立刻回到书本当中，你会有强烈的冲动去消化吸收其中的内容。
	</li>
<li>
		然后，你可以把自己学到的新知识重新应用于实践。已解决实践过程中发现的问题为目标，在向着只是前进的道路上重复这个循环。
	</li>
<li>
		最后，你可以通过写作文章或是教给其他人来加深理解。
	</li>
<li>
		这个过程可以归纳为「学习&mdash;&mdash;实践&mdash;&mdash;掌握&mdash;&mdash;教授」。
	</li>
</ul>
<p>
	以学习某个 Web 框架来说，从头到尾读完一本相关的技术书，并不会让你掌握这个框架。只有在了解基础知识后，自己动手借助书中的知识编写一个 Web 程序，并尝试尽可能多的解决实际问题，才会让你学会这个框架。
</p>
<p>
	<strong>2. 十步学习法</strong>
</p>
<p>
	十步学习法的基本思想是先对自己要学的东西有个基本的了解。至少了解以下三个要点：
</p>
<ul>
<li>
		如何开始：明确你要掌握哪些前导知识，从哪些资料开始最为合适。
	</li>
<li>
		学科范围：确定你的学习方向和大致的学习范围。在开始阶段，你不需要了解每一个细节，只需大致了解学科的轮廓。
	</li>
<li>
		基础知识：了解最基本的知识点是哪些，知道自己学的哪 20% 就能满足 80% 的日常应用。
	</li>
</ul>
<p>
	<strong>1~6 步：前期调研，收集资料，制定学习计划（这些步骤只做一次）</strong>
</p>
<ul>
<li>
<p>
			第 1 步：了解全局
		</p>
</li>
</ul>
<p>
	了解自己将要学习的主题的全局，建立一个基本的概念。
</p>
<ul>
<li>
<p>
			第 2 步：确定范围
		</p>
</li>
</ul>
<p>
	明确自己到底要学什么，有一个可控的学习范围，而不是试图解决太大的问题。让自己的关注点落脚到更小也更可控的范围，根据你的时间预算，尝试把一个大的主题分解为多个可控的子主题。比如，「学习 HTML」可以进一步细化为「学习 HTML 的基本语法，了解页面基本结构和常用的元素」。
</p>
<ul>
<li>
<p>
			第 3 步：定义目标
		</p>
</li>
</ul>
<p>
	明确对你来说，学到何种地步，达成何种目标后算是完成学习。好的成功标准应该是具体的、无二义性的。以学习 HTML 为例，「学会用 HTML 编写网页」就是坏的成功标准，而「可以使用 HTML 创建一个内容丰富、语法标准、样式美观并且支持响应式的个人主页」就是一个好的成功标准。
</p>
<ul>
<li>
<p>
			第 4 步：寻找资源
		</p>
</li>
</ul>
<p>
	对于学习编程来说，你可以在网上找到大量的资源（这里的资源包括书、教程、视频、代码等）。试着在 Google、YouTube、亚马逊、豆瓣读书或其他网站搜索相关关键字，然后根据描述或评论选择资源。尽量选择系统性的教程或书。对于编程语言、框架和工具来说，官方入门教程一般都不会太差。
</p>
<ul>
<li>
<p>
			第 5 步：创建学习计划
		</p>
</li>
</ul>
<p>
	学习计划就是你的学习路径，通常你可以根据相关主题的技术书的目录来制定学习路径。好的技术书都遵循这样的规律：打好基础，做好铺垫，然后逐个展开每一章的论述。通过对比几本同类型的书籍目录，制定专属于你的学习路径。
</p>
<ul>
<li>
<p>
			第 6 步：筛选资源
		</p>
</li>
</ul>
<p>
	根据你的学习计划，去掉重复、无用、过时、难度不适宜的资源。只留下 1~2 个品质最高的资源即可。
</p>
<p>
	<strong>7~10 步：学习&mdash;&mdash;实践&mdash;&mdash;掌握&mdash;&mdash;教授（循环往复）</strong>
</p>
<ul>
<li>
<p>
			第 7 步：开始学习，浅尝辄止
		</p>
</li>
</ul>
<p>
	获取刚好足够开始动手实践的基础知识。大多数人在学习过程中通常会犯两类错误：第一类错误是在知之不多的情况下就盲目开始，即行动太早；第二类错误是在行动之前准备过多，即行动太晚。
</p>
<ul>
<li>
<p>
			第 8 步：动手操作，边玩边学
		</p>
</li>
</ul>
<p>
	通过动手实践验证你在前一步骤学习的知识，并记录下新的疑问。比如，做一个简单的小项目。
</p>
<ul>
<li>
<p>
			第 9 步：全面掌握，学以致用
		</p>
</li>
</ul>
<p>
	根据你掌握的资源，解决你在实践中记录下的大量问题。同时深入了解各个主题。比如，阅读你要学习的语言、框架的源码。
</p>
<ul>
<li>
<p>
			第 10 步：乐为人师，融会贯通
		</p>
</li>
</ul>
<p>
	要想确定你确实掌握了某些知识，最好的方式就是把自己学到的知识教给别人。你可以在 Stack Overflow、论坛、IM 群组里回答问题，也可以写文章或录视频。把自己所学教给别人是查漏补缺的好办法，这同时也会增强你的表达能力和理解能力。
</p>
<p>
	<strong>3. 寻找导师</strong>
</p>
<ul>
<li>
		在你的软件开发生涯中，拥有一位导师可以说是一笔巨大的财富，因为一位优秀的导师能够让你无需亲身经历现实的重重考验就拥有丰富的经验，从而更高效的掌握某种技术。
	</li>
<li>
		我们通常会犯这样的错误&mdash;&mdash;根据他人的生活来判读其是否具有帮助我们的能力。然而，最好的老师往往深藏不露。你不应该因为某人在自己的生活中成就平平，或者看起来不过如此就对他的印象大打折扣。
	</li>
<li>
		你可以找一位已经成功实现你想要做的事情的人，也可以找一位曾经帮别人实现了你现在想要做到的事情的人。
	</li>
<li>
		导师未必一定得是非常厉害的专家，只比你领先一步的人也值得学习。
	</li>
<li>
		你可以在本地的开发小组或是网上的论坛等地方寻找你的导师，也可以在你的公司或交际圈里寻找，或者通过付费向行家请教。
	</li>
<li>
		优秀的书籍也可以做你的导师。
	</li>
<li>
		在寻找导师之前，你必须要明确两件事，第一是你需要导师帮你解决什么问题；第二是为了能够换取导师的帮助，你能给他提供什么？
	</li>
</ul>
<p>
	<strong>4. 乐为人师</strong>
</p>
<ul>
<li>
		成为导师可以让你受益无穷。
	</li>
<li>
		每个人都有教的能力：只要在某些地方快人一步，就能帮助别人。
	</li>
<li>
		有时候你给比人做导师真正要做的就是给予关注。我们在生活中都需要别人的帮助以看到自己看不到的东西，因为当遇到涉及自身的问题和麻烦的时候，我们都会有些目光短浅。
	</li>
<li>
		教授是学习的最佳途径之一。当你担任导师的时候，你会以全新的视角观察和思考，并面对更多有挑战的问题。在探究答案的过程中，你会愈加深入思考，发现自己的漏洞，甚至完全改变最初的想法。
	</li>
<li>
		一旦我们试着向别人解释某件事情的运作原理或背后的原因的时候，我们在认知上的漏洞就会暴露出来。
	</li>
<li>
		最好的教学方式就是以谦虚的视角来观察问题，以权威的口吻去诠释问题。你要明白，你教的目的是为了帮助别人，而不是为了证明自己的优越性或者寻求认可。
	</li>
<li>
		除了写博客，录视频和演讲也是很好的教学方式。演讲时要心态谦卑，信心满满（而不是傲慢自大）。
	</li>
</ul>
<p>
	<strong>5. 学历</strong>
</p>
<ul>
<li>
		拥有（好的）学历并不是成功所必须的，但它限制了可以提供给你的职位数量，并且某种程度上也限制了你的晋升。
	</li>
<li>
		学历教育可以提供一个相对完善的计算机基础教育。当然，这些知识你也可以通过自学获得，不过这需要花费大量的时间。
	</li>
<li>
		如果你没有（好的）学历，那么就通过作品来证明你的能力。比如，你可以写博客，独立开发一个程序，在 GitHub 上创建或参与开源项目，或是在 Stack Overflow 回答问题。
	</li>
<li>
		弥补措施是，你可以通过自考获得一个学位，大概需要花费两年的业余时间外加两千块的投入。
	</li>
</ul>
<p>
	<strong>6. 知识短板</strong>
</p>
<ul>
<li>
		专注于自身强项，这没什么不妥，但有时候，如果弱点得不到解决，通常会成为你的职业或生活的桎梏。
	</li>
<li>
		准确识别短板的最佳方式之一就是看看自己在哪些工作上花费了大量的时间，或者一直进行重复性劳动。比如，学习操作系统或各类软件的快捷键就可以节省大量时间；编写宏或自动化脚本来简化各种软件或系统中的重复操作。
	</li>
<li>
		维护一份清单，列出自己需要去研究或者不清楚的事物。
	</li>
</ul>
<p>
	本文首发于公众号「<a href="http://daimachufang.com/">李辉的代码厨房</a>」。</p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/programmer-common-sense-learn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>程序员的基本常识——职业篇</title>
		<link>https://greyli.com/programmer-common-sense-career/</link>
		<comments>https://greyli.com/programmer-common-sense-career/#respond</comments>
		<pubDate>Thu, 07 Mar 2019 13:17:50 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[程序员常识]]></category>
		<category><![CDATA[职业]]></category>
		<category><![CDATA[软技能]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=2385</guid>
		<description><![CDATA[这个系列是《软技能》一书的摘抄整理。这本书名声在外，读过后发现并没有那么好。一来是内容比较水，废话太多；二来掺 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
	这个系列是<a href="https://book.douban.com/subject/26835090/">《软技能》</a>一书的摘抄整理。这本书名声在外，读过后发现并没有那么好。一来是内容比较水，废话太多；二来掺杂着大量的俗套励志段落，还包含一些不靠谱的建议（理财）。
</p>
<p>
	尽管如此，经过提纯后，书里还是有一些有价值的信息，可以算是程序员基本常识。对刚刚入行，或是打算做程序员的人来说会比较有帮助。
</p>
<p>
	这个系列会有 4 篇文章，分别对应职业、自我营销、学习和生产力 4 个主题。我会抽取书中有价值的部分，适当进行改写和扩充。欢迎评论补充相关信息，或是纠正错误观点。
</p>
<p>
	<strong>1. 绝不要做他人都在做的事</strong>
</p>
<ul>
<li>
		对待职业的首要原则：程序员要主动管理自己的职业生涯，「工作是属于公司的，而职业生涯却是属于你自己的」。
	</li>
<li>
		当你为了谋生一头扎进写代码的世界时，其实你和中世纪小镇上开铁匠铺的铁匠没什么差别。
	</li>
<li>
		把自己当做是一个公司，而不是打工者。把雇主当做是你的软件开发企业的一个客户。你的工作就是出售你提供的服务。
	</li>
<li>
		集中精力成为一位专家，专门为某一特定类型的客户提供专业的整体服务。你只有真正专注于一类客户，才能找到非常好的工作。
	</li>
</ul>
<p>
	<strong>2. 必须要设立自己的人生目标</strong>
</p>
<ul>
<li>
		为了安逸，我们倾向于遵循已经设计好的路线。缺乏对人生目标的具体认知。「死都不怕，就怕不安逸。」
	</li>
<li>
		大目标必须足够清晰，比如你希望自己 5 或 10 年后在哪里，获得怎样的成绩。最好把大目标写在纸上，放在每天能看见的地方。
	</li>
<li>
		逆向反推，将大目标分解为每年、每月、每周、每日的小目标。
	</li>
<li>
		定期检查和调整目标。
	</li>
</ul>
<p>
	<strong>3. 选择职业类别</strong>
</p>
<p>
	可选项通常有三种：
</p>
<table border="1" cellpadding="1" cellspacing="1" style="width:500px;">
<tbody>
<tr>
<td>
				类别
			</td>
<td>
				好处
			</td>
<td>
				坏处
			</td>
</tr>
<tr>
<td>
				雇员
			</td>
<td>
				稳定的收入；相对轻松的工作
			</td>
<td>
				固定的收入；不自由
			</td>
</tr>
<tr>
<td>
				自由职业（比如做外包、培训、咨询）
			</td>
<td>
				自由；有赚钱的潜力
			</td>
<td>
				考验自制力；应付更多的事情；可能会找不到项目
			</td>
</tr>
<tr>
<td>
				创业
			</td>
<td>
				巨大的赚钱潜力；完全自由
			</td>
<td>
				风险巨大；需要学习大量的技能，包括市场营销、管理、财务等；可能需要长时间高强度工作
			</td>
</tr>
</tbody>
</table>
<p>
	通常情况下，你会先做一份全职工作，积累了实力和各类资源后，再考虑尝试自由职业或创业。确保你做好了准备，比如积攒了能够维持数年开支的积蓄，以便应对没有稳定收入的情况。
</p>
<p>
	你可以在业余时间启动你想创建的业务，等能从这项业务中产生足以维持生计的稳定收入时，再考虑辞职。采用这种方式时，确保你和公司签订的劳动合同里没有规定你的所有工作成果（包括业余时间，或是使用公司资源的情况下）都归公司所有，如果有相关条款，可以考虑咨询律师。
</p>
<p>
	<strong>4. 选择技术方向</strong>
</p>
<ul>
<li>
		对于自由职业 / 创业者来说，通常会选择有潜力的小众市场。这对选择技术栈同样适用，尝试在一个专业方向上拥有专长（专业化），比如 Python 开发、Python Web 开发、Python 特定 Web 框架开发三者的专业化程度逐渐递增。
	</li>
<li>
		专业化的规则是：专业化程度越深，潜在的机会就越少，但获得这些机会的可能性越大，竞争者也更少。
	</li>
<li>
		可以尝试发展两个方向，选择这两个方向的交叉点作为职业方向。比如会 Excel 的老师，会英语的导游，会编程的律师，都要比普通的老师、导游和律师更有竞争力。
	</li>
<li>
		但同时注意不要只会某种语言和专业方向，否则会因为行业变化而被淘汰。先从专业化开始，再拓展分支。
	</li>
<li>
		避免陷入对某一技术的狂热之中，这会让你在职业生涯之路上走得更远。不要试图寻找最好的语言、框架、操作系统和文本编辑器，更没必要为此浪费大量时间进行争论。
	</li>
<li>
		对技术保持开放的心态，而不是固守自己已经了解的技术，声称它是最好的，你会发现更多的机会为你敞开大门。
	</li>
</ul>
<p>
	<strong>5. 选择公司</strong>
</p>
<table border="1" cellpadding="1" cellspacing="1" style="width:500px;">
<tbody>
<tr>
<td>
				类别
			</td>
<td>
				好处
			</td>
<td>
				坏处
			</td>
</tr>
<tr>
<td>
				小公司（创业公司）
			</td>
<td>
				面临更多的挑战；容易建立影响力；回报潜力大
			</td>
<td>
				可能会身兼多职；工作强度大；稳定性差
			</td>
</tr>
<tr>
<td>
				中型公司
			</td>
<td>
				工作稳定；加班较少
			</td>
<td>
				变化很慢；没有机会使用前沿技术
			</td>
</tr>
<tr>
<td>
				大公司
			</td>
<td>
				完备的流程和规范；培训机会多；大型有影响力的项目
			</td>
<td>
				官僚主义；只负责代码库的一小部分；很难获得关注
			</td>
</tr>
</tbody>
</table>
<p>
	考虑自己适合哪一种公司，可以在工作前和目标公司的雇员聊一聊。
</p>
<p>
	<strong>6. 破解面试之道</strong>
</p>
<ul>
<li>
		让面试官对你怀有好感会有助于通过面试。方式有很多，包括：</p>
<ul>
<li>
				提前建立个人品牌
			</li>
<li>
				提前熟悉目标公司的员工
			</li>
</ul>
</li>
<li>
		内推有推荐人的声望背书，会更容易获得面试机会。
	</li>
<li>
		想办法与公司内部人员建立联系，比如参加本地开发小组和行业会议，在论坛、IM 群聊、社交网站、GitHub 上建立联系。
	</li>
<li>
		面试的时候，你要集中精力证明自己就是无需监督也能自动自发做好事情的员工；同时还必须要证明：在技术上你确实胜任工作；最好还能说服面试官相信你非常能干，不会被困难阻挡。
	</li>
</ul>
<p>
	<strong>7. 获得晋升机会</strong>
</p>
<ul>
<li>
		在任何公司里能让你脱颖而出的最重要法宝就是承担更多的责任。</p>
<ul>
<li>
				没有人愿意涉足的领域是搜寻机会最好的地方。
			</li>
<li>
				成为团队中其他人的导师，建立声誉。
			</li>
<li>
				增加自己的曝光度：做内部分享，发表意见，解决技术难题。
			</li>
</ul>
</li>
<li>
		关于办公室政治：尽管不能完全避开，但至少应该知道会发生什么，哪种人需要避开，那种人永远不要有交集。
	</li>
<li>
		如果脚踏实地努力后仍然无法晋升，可以考虑换工作。
	</li>
</ul>
<p>
	<strong>8. 成为专业人士</strong>
</p>
<p>
	成为专业人士能帮你获得更好的工作和更多的客户：
</p>
<ul>
<li>
		遵守自己的原则。
	</li>
<li>
		专注于正确完成工作。
	</li>
<li>
		不惧怕承认自己错了，不会文过饰非。
	</li>
<li>
		持续稳定。
	</li>
<li>
		勇于承担责任。
	</li>
<li>
		完善自己，迎接挑战，而不是降低标准。一旦你越多了底线，选择妥协，就很难回头。
	</li>
</ul>
<p>
	<strong>9. 成为自由职业者</strong>
</p>
<p>
	你为自己工作的时候通常会比为别人工作时更加努力，但热情通常不会持续很久，你每天真正工作的时间也没有你想象的那么多。缺乏监督可能会让你长久的陷入拖延和偷懒的境地，为此你需要：
</p>
<ul>
<li>
		学习时间管理，并建立一系列日常原则。
	</li>
<li>
		自我激励，培养自制力。尽量排除干扰和诱惑，让它们远离你的工作环境。
	</li>
<li>
		适应孤独感，并适时的走出去，参见开发者聚合或行业会议，和其他从业者交流。
	</li>
</ul>
<p>
	获得客户的最佳途径：吸引式营销（inbound marketing）。简单来说，就是免费提供有价值的东西。通过写博客、录视频和播客、演讲等方式提供与自己的服务相关的有价值的内容（大多是免费的）。
</p>
<p>
	你的收费标准应该按照全职工作的两倍时薪收取，因为你通常需要自己缴税，购买商业软件。如果你的工作能够为客户带来更大的价值（提高他们的业务或是节省大量开支），你可以根据你能带来的价值来定价。记得向客户说明为什么你的服务值这个价格。
</p>
<p>
	如何创建你的第一个产品：
</p>
<ul>
<li>
		不要在没有找到客户之前就构建产品。
	</li>
<li>
		一个产品要解决何种问题，以及目标受众是哪些人，这些问题必须在创建产品之前就弄明白。多和目标客户沟通交流，不断检验自己的想法。
	</li>
<li>
		捷径是提前在对应的领域建立影响力，通过创建博客，演讲等方式发展受众。
	</li>
<li>
		通过测试市场来验证你的产品，看看你的潜在客户是否真的愿意为它买单。比如进行一场预售，为提前付费的客户打折，看看有多少人愿意买单。
	</li>
<li>
		如果是创业产品，那么就从小处着手，关注核心功能实现，快速建立产品原型并上线，及时获得反馈并不断改进，想法行不通就及时脱身。你可能需要重复多次这个过程才能创建一个成功的产品。
	</li>
</ul>
<p>
	<strong>10. 成为创业者</strong>
</p>
<ul>
<li>
		创业拥有巨大的潜在回报，但也极其危险。
	</li>
<li>
		大多数创业公司的创始人都有所谓的退出策略，比如：</p>
<ul>
<li>
				当公司成长到一定规模的时候被收购
			</li>
<li>
				上市
			</li>
</ul>
</li>
<li>
		当你有了一个好点子，有技术或是有技术合伙人，你最好还要拥有独一无二的知识产权或行业资源，这可以确保你的产品不会被大公司快速复制。而且你的项目要有规模扩张的潜力。
	</li>
<li>
		除了持谨慎策略的自力更生型创业公司外，大多数初创公司都希望获得外部投资以快速成长。在开始的时候可以尝试申请加入创业孵化器计划。
	</li>
<li>
		对创业公司来说，第一个重要里程碑就是获得第一笔资金（种子资金），一般天使投资人会投给早期创业者，即种子轮 / 天使轮。拿到天使投资后你可以雇佣员工，开始扩张。
	</li>
<li>
		种子基金烧光后，如果你的点子仍然可行，将会获得第一轮投资（A 轮），风险资本通常会在这一轮介入（风险投资人 / 风投）。这之后，大多数创业公司还会经过几轮融资，最后成功实现盈利，或者被收购。&nbsp;
	</li>
</ul>
<p>
	本文首发于公众号「<a href="http://daimachufang.com">李辉的代码厨房</a>」。</p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/programmer-common-sense-career/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>文如其人</title>
		<link>https://greyli.com/the-style-is-the-man/</link>
		<comments>https://greyli.com/the-style-is-the-man/#respond</comments>
		<pubDate>Sat, 18 Aug 2018 07:42:32 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[思考与随感]]></category>
		<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[写作]]></category>
		<category><![CDATA[读库]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=1880</guid>
		<description><![CDATA[偶然看到读库网站上的投稿要求——《我们需要什么样的稿件》，觉得非常有意思。与其说是筛选稿件，倒不如说是在筛选作 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>偶然看到读库网站上的投稿要求——<a href="http://www.duku.cn/article-help-191.html">《我们需要什么样的稿件》</a>，觉得非常有意思。与其说是筛选稿件，倒不如说是在筛选作者，因此标题也可以看做《我们需要什么样的作者》。进一步说，这种筛选也会反向作用到读者身上。在大多数媒体和网站都在努力扩大受众群体时，这种主动筛选难能可贵。</p>
<blockquote>
<p>……</p>
<p>如果您的文章中，经常出现“我感到……”“我想……”“我觉得……”这样的句式，则基本不符合我们的选稿标准。说得再严苛一些，一篇文章中如果三分之一以上的句子主语都是“我”，就不会出现在《读库》里。</p>
<p>如果您的文章中定语太多，或是结论评价类的形容词太多，则不符合我们的选稿标准。我们只希望你把你看到的记录下来，至于它在你心中泛起的涟漪，希望能通过你的记录和传递，荡漾到读者心中，而描述涟漪本身，是我们不需要的。</p>
<p>如果你的文章试图以小见大，或直接以大见大，以探讨人生终极问题和家国大计为己任，我们也要对您敬而远之。我们要的不是高度的概括性，而是极度的细部展示。具体地说，如果一篇三万字的稿子，其第一段提到的某件事、某个人，有可能被写出三万字，那么这篇稿子就显得大而无当了。</p>
<p>如果你试图充分展示自己的写作才华，我们也要对您敬而远之。《读库》中受人好评的文章，基本没有读者会说“这个作者太有才了”。我们想展示的，是才华的另一面：老老实实把自己想写的东西交代清楚，认认真真把自己感兴趣的东西琢磨个底儿掉，切切实实尊重读者的习惯和判断。</p>
<p>“用写一本书的力气来写一篇文章”，我们最需要这样的稿件。希望您将投稿的目光投向《读库》时，想的不是“我要写一篇好文章”，而是“我要把一件事情搞清楚，并记下来”。当动笔的时候，你心里有着一定的谦卑和热忱。庶几可矣。</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/the-style-is-the-man/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《Flask Web开发实战》最新动态</title>
		<link>https://greyli.com/flask-web-development-newest-status/</link>
		<comments>https://greyli.com/flask-web-development-newest-status/#respond</comments>
		<pubDate>Fri, 22 Jun 2018 02:23:10 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[Flask]]></category>
		<category><![CDATA[Flask Web开发实战]]></category>
		<category><![CDATA[写作]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=1492</guid>
		<description><![CDATA[《Flask Web开发实战：入门、进阶与原理解析》是我刚刚完成写作的一本技术书，涵盖了Flask Web开发 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>《Flask Web开发实战：入门、进阶与原理解析》是我刚刚完成写作的一本技术书，涵盖了Flask Web开发学习的完整路径，而且包含大量的程序实例。你可以通过下面的文章了解这本书的更多信息：</p>
<ul>
<li><span data-offset-key="2plas-0-0"><a href="http://helloflask.com/book">本书主页</a></span></li>
<li><a href="https://zhuanlan.zhihu.com/p/29907260" target="_blank" rel="noopener">一本更好的Flask书——《Flask Web开发实战》</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/38342129" target="_blank" rel="noopener">《Flask Web开发实战》中的示例程序们</a></li>
</ul>
<p>本书动态：</p>
<ul class="public-DraftStyleDefault-ul" data-offset-key="dhgjp-0-0">
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-reset public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="dhgjp-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="dhgjp-0-0"><span data-offset-key="dhgjp-0-0"><span data-text="true">2017/3/1 开始写作</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="25kg4-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="25kg4-0-0"><span data-offset-key="25kg4-0-0"><span data-text="true">2017/12/7 初稿完成</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="3eb48-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="3eb48-0-0"><span data-offset-key="3eb48-0-0"><span data-text="true">2018/1/18 二稿完成</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="92vp4-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="92vp4-0-0"><span data-offset-key="92vp4-0-0"><span data-text="true">2018/3/26 三稿完成</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="7lau-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="7lau-0-0"><span data-offset-key="7lau-0-0"><span data-text="true">2018/4/29 四稿完成</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="f31co-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="f31co-0-0"><span data-offset-key="f31co-0-0"><span data-text="true">2018/5/16 五稿完成</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="dpdeb-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="dpdeb-0-0"><span data-offset-key="dpdeb-0-0"><span data-text="true">2018/5/22 定稿（六稿）</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="ndml-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="ndml-0-0"><span data-offset-key="ndml-0-0"><span data-text="true">2018/6/5 确定最终修改，写作正式完结</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="20rp3-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="20rp3-0-0"><span data-offset-key="20rp3-0-0"><span data-text="true">2018/6/20 完成封面设计初稿</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="20rp3-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="20rp3-0-0">2018/6/22 完成封面文案初稿</div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="20rp3-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="20rp3-0-0">2018/6/22 确定英文书名为《Python Web Development with Flask》</div>
</li>
<li data-block="true" data-editor="uvka" data-offset-key="20rp3-0-0">2018/8/20 下厂印刷</li>
<li data-block="true" data-editor="uvka" data-offset-key="20rp3-0-0">2018/8/24 Kindle电子书上架（<a href="https://www.amazon.cn/dp/B07GST8Z8M">https://www.amazon.cn/dp/B07GST8Z8M</a>）</li>
<li>2018/8/26 本书的<a href="https://book.douban.com/subject/30310340/">豆瓣条目页面</a>创建成功</li>
<li>2018/8/28 电子书上架豆瓣阅读（<a href="https://read.douban.com/ebook/56778159/"><span class="invisible">https://</span><span class="visible">read.douban.com/ebook/5</span><span class="invisible">6335667/</span></a>）</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="2plas-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="2plas-0-0"><span data-offset-key="2plas-0-0"><span data-text="true">2018/9/10 电商平台已经可以购买，亚马逊和京东自营预计9/15有货，访问<a href="http://helloflask.com/book">本书主页</a>查看购买链接<br />
</span></span></div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/flask-web-development-newest-status/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一本更好的Flask书——《Flask Web开发实战》</title>
		<link>https://greyli.com/flask-web-development/</link>
		<comments>https://greyli.com/flask-web-development/#comments</comments>
		<pubDate>Thu, 14 Jun 2018 05:54:38 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[Flask]]></category>
		<category><![CDATA[Flask Web开发实战]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=1471</guid>
		<description><![CDATA[如果你想了解这本书的最新动态，可以关注我的公众号、Twitter 或豆瓣，也可以访问本书主页 http://h [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>如果你想了解这本书的最新动态，可以关注我的<a href="http://greyli.com/wechat#gh" target="_blank" rel="noopener" data-editable="true" data-offset-key="94biv-1-0">公众号</a>、<a href="https://twitter.com/greylihui" target="_blank" rel="noopener" data-editable="true" data-offset-key="94biv-3-0">Twitter</a> 或<a href="https://www.douban.com/people/greyli/" target="_blank" rel="noopener" data-editable="true" data-offset-key="94biv-5-0">豆瓣</a>，也可以访问本书主页 <a href="http://helloflask.com/book" target="_blank" rel="noopener" data-editable="true" data-offset-key="94biv-7-0">http://helloflask.com/book</a>。</p>
<p>欢迎加入 <a href="https://codekitchen.community/c/helloflask" target="_blank" rel="noopener" data-editable="true" data-offset-key="eam6t-1-0">HelloFlask 论坛</a>、<a href="http://shang.qq.com/wpa/qunwpa?idkey=3cbf3e3ede8252eb3ae584a356131123ed68a9f3bd5bcee0652b401914eb01bb" target="_blank" rel="noopener" data-editable="true" data-offset-key="eam6t-3-0">QQ群</a>（419980814）讨论相关话题。</p>
<div class="Editable-unstyled" data-block="true" data-editor="8ar8u" data-offset-key="4cdcd-0-0">
<h2><b>购买方式</b></h2>
<ul>
<li>实体书：<a href="http://union.dangdang.com/transfer.php?sys_id=1&amp;ad_type=10&amp;from=P-340012&amp;backurl=http%3A%2F%2Fproduct.dangdang.com%2Fproduct.aspx%3Fproduct_id%3D25340690" target="_blank" rel="noopener">当当</a> | <a href="https://union-click.jd.com/jdc?e=&amp;p=AyIGZRtYFAcXBFIZWR0yEgRQGVoTBBc3EUQDS10iXhBeGlcJDBkNXg9JHUlSSkkFSRwSBFAZWhMEFxgMXgdIMnd9UlkzdlFZZxxfG35yTUQNWxlNdWILWStbFgoWBFQrWxQDEQdQE10VCiI3VRhrR2zKsePD%2FqQexq3aztOCMhIPUx1THAoSAFErWxEEFAZcGF8XBBcCVCtcFQsiAVMcUxQKFA9JHFoSChsAZStrFjIiN1UrWyVdVloIK1kUAxYO" target="_blank" rel="noopener">京东</a> | <a href="http://product.china-pub.com/8051416" target="_blank" rel="noopener">互动出版网</a></li>
<li>电子书：<a href="https://www.amazon.cn/dp/B07GST8Z8M" target="_blank" rel="noopener">亚马逊</a> | <a href="https://read.douban.com/ebook/110053633/" target="_blank" rel="noopener">豆瓣</a> | <a href="http://www.duokan.com/book/179407" target="_blank" rel="noopener">多看</a> | <a href="http://www.ireader.com/index.php?ca=bookdetail.index&amp;bid=11704211" target="_blank" rel="noopener">掌阅</a> | <a href="http://union.dangdang.com/transfer.php?sys_id=1&amp;ad_type=10&amp;from=P-340012&amp;backurl=http%3A%2F%2Fproduct.dangdang.com%2Fproduct.aspx%3Fproduct_id%3D1901082612" target="_blank" rel="noopener">当当</a> | <a href="https://e.jd.com/30428868.html" target="_blank" rel="noopener">京东</a></li>
</ul>
<p>欢迎访问本书的<a href="https://book.douban.com/subject/30310340/" target="_blank" rel="noopener">豆瓣图书页面</a>撰写书评或短评。</p>
<p>电子书各平台的排版效果不一，购买前请先进行试读。</p>
<h2 class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="7481m-0-0"><span data-offset-key="7481m-0-0"><span data-text="true">为什么说这是一本更好的Flask书</span></span></h2>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="7pbai-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="7pbai-0-0"><span data-offset-key="7pbai-0-0"><span data-text="true">现有的几本Flask书包含下面这些问题：</span></span></div>
<div data-offset-key="7pbai-0-0"> </div>
</div>
<ul class="public-DraftStyleDefault-ul" data-offset-key="dssgg-0-0">
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-reset public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="dssgg-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="dssgg-0-0"><span data-offset-key="dssgg-0-0"><span data-text="true">内容较旧，不论是Flask本身，还是其他扩展和Python库。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="72iua-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="72iua-0-0"><span data-offset-key="72iua-0-0"><span data-text="true">包含误区或不完善的代码实现，比如在使用SQLAlchemy建立数据库关系时，出于性能的考虑，一般不会把加载关系记录的方式设为dynamic。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="2gkkl-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="2gkkl-0-0"><span data-offset-key="2gkkl-0-0"><span data-text="true">示例程序过于简单，比如甚至没有删除帖子的功能。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="aqtft-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="aqtft-0-0"><span data-offset-key="aqtft-0-0"><span data-text="true">内容比较单一，仅包含入门知识。</span></span></div>
</li>
</ul>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="371r1-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="371r1-0-0"><span data-offset-key="371r1-0-0"><span data-text="true">相对的，这本《Flask Web开发实战：入门、进阶与原理解析》当然避免了以上问题：</span></span></div>
<div data-offset-key="371r1-0-0"> </div>
</div>
<ul class="public-DraftStyleDefault-ul" data-offset-key="9i1q1-0-0">
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-reset public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="9i1q1-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="9i1q1-0-0"><span data-offset-key="9i1q1-0-0"><span data-text="true">Flask使用最新的1.0.2版本，使用Pipenv管理示例程序依赖，所有扩展和其他Python库均使用最新版本。不仅如此，项目中使用的前端框架Bootstrap（4.1）、Materialize（1.0）和Semantic-UI(2.3)也均使用最新版本。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="fgn76-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="fgn76-0-0"><span data-offset-key="fgn76-0-0"><span data-text="true">纠正了常见误区，并在相应位置给出提示。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="4ie7k-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="4ie7k-0-0"><span data-offset-key="4ie7k-0-0"><span data-text="true">包含多个不同复杂程度的示例程序，尽可能的让程序贴近真实使用情况。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="8linh-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="8linh-0-0"><span data-offset-key="8linh-0-0"><span data-text="true">如副书名所示，这本书除了基本的入门知识，还包含进阶内容和原理解析。</span></span></div>
</li>
</ul>
<blockquote class="Editable-styled" data-block="true" data-editor="uvka" data-offset-key="dq54f-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="dq54f-0-0"><span data-offset-key="dq54f-0-0"><span data-text="true">看到书名，你的第一想法也许是：为什么书名和Miguel Grinberg的书那么像？起书名并非由我一人决定，而且技术书的起名没有多大自由度，你不仅要考虑加入合适的关键词，还要考虑到如何凸显书的主要特点。“Flask Web开发”的确是简洁又突出重点的好名字，我们在后面添加了“实战”，用来着重体现这本书的最大特点。</span></span></div>
</blockquote>
<h2 class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="1eeii-0-0"><span data-offset-key="1eeii-0-0"><span data-text="true">3个推荐语</span></span></h2>
<blockquote class="Editable-styled" data-block="true" data-editor="uvka" data-offset-key="fl3bg-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="fl3bg-0-0"><span data-offset-key="fl3bg-0-0"><span data-text="true">这本书内容翔实，推荐给想要系统学习Flask的人。不要漏掉书中的小知识点哦。</span></span></div>
</blockquote>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="6cm09-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" style="text-align: right;" data-offset-key="6cm09-0-0"><span data-offset-key="6cm09-0-0"><span data-text="true">             —— Flask开发团队（Pallets）核心维护者 </span></span><a class="Link ztext-link" href="https://lepture.com/" target="_blank" rel="noopener" data-editable="true" data-offset-key="6cm09-1-0"><span data-offset-key="6cm09-1-0"><span data-text="true">Hsiaoming Yang（lepture）</span></span></a></div>
</div>
<blockquote class="Editable-styled" data-block="true" data-editor="uvka" data-offset-key="fan20-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="fan20-0-0"><span data-offset-key="fan20-0-0"><span data-text="true">这本《Flask Web开发实战》非常有趣，是一本能够给读者带来帮助的书，作为一个Flask框架的爱好者，我也很期待这本书的出版。 </span></span></div>
</blockquote>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="96hjh-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" style="text-align: right;" data-offset-key="96hjh-0-0"><span data-offset-key="96hjh-0-0"><span data-text="true">—— 《Redis设计与实现》作者 </span></span><a href="https://huangz.works/"><span data-offset-key="96hjh-1-0"><span data-text="true">黄健宏（huangz）</span></span></a></div>
</div>
<blockquote class="Editable-styled" data-block="true" data-editor="uvka" data-offset-key="72qc0-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="72qc0-0-0"><span data-offset-key="72qc0-0-0"><span data-text="true">Grey Li is a really helpful contributor to Flask and the Python community. He is making it easier for more people to learn and use Flask.</span></span></div>
</blockquote>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="1qc73-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" style="text-align: right;" data-offset-key="1qc73-0-0"><span data-offset-key="1qc73-0-0"><span data-text="true">—— Flask开发团队（Pallets）核心维护者 </span></span><a class="Link ztext-link" href="http://davidism.com/" target="_blank" rel="noopener" data-editable="true" data-offset-key="1qc73-1-0"><span data-offset-key="1qc73-1-0"><span data-text="true">David Lord（davidism）</span></span></a></div>
</div>
<h2 class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="e76h2-0-0"><span data-offset-key="e76h2-0-0"><span data-text="true">8个示例程序、5个项目实例、1个扩展</span></span></h2>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="53ep0-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="53ep0-0-0"><span data-offset-key="53ep0-0-0"><span data-text="true">包含丰富的实例是这本书的最大特点，这也是为什么要把“实战”放到书名里。</span></span></div>
<div data-offset-key="53ep0-0-0"> </div>
</div>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="6d1jn-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="6d1jn-0-0"><span data-offset-key="6d1jn-0-0"><span data-text="true">书的第一部分（基础篇）共6章，每一章都包含一个示例程序，示例程序包含每章涉及的大部分代码，你可以实际运行程序来查看效果。以第5章《数据库》为例，除了一个简单的演示“增删查改”的笔记程序外，示例程序中还包含“一对多”、“多对一”、“一对一”、“多对多”、“一对多+双向关系”、“一对多+双向关系+使用backref简化关系定义”、“级联设置”“数据库时间监听函数”等15（2 * 7 + 1）个模型类定义和2个事件监听函数（两种实现方式）。</span></span></div>
</div>
<blockquote class="Editable-styled" data-block="true" data-editor="uvka" data-offset-key="kvor-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="kvor-0-0"><span data-offset-key="kvor-0-0"><span data-text="true">第1~6章以及第13章的示例程序统一包含在</span></span><a class="Link ztext-link" href="https://github.com/greyli/helloflask" target="_blank" rel="noopener" data-editable="true" data-offset-key="kvor-1-0"><span data-offset-key="kvor-1-0"><span data-text="true">helloflask仓库</span></span></a><span data-offset-key="kvor-2-0"><span data-text="true">中的demos目录下。</span></span></div>
</blockquote>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="5j3vk-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="5j3vk-0-0"><span data-offset-key="5j3vk-0-0"><span data-text="true">第二部分（实战篇）共5章，每一章都通过一个程序来组织起所有的知识点。这5个程序分别为：留言板SayHello、个人博客Bluelog、图片社交网站Albumy、待办事项程序Todoism和聊天室CatChat。你可以在下面的《章节概括》部分查看每一个示例程序所涉及的知识点。</span></span></div>
</div>
<blockquote class="Editable-styled" data-block="true" data-editor="uvka" data-offset-key="cb2a4-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="cb2a4-0-0"><span data-offset-key="cb2a4-0-0"><span data-text="true">和《Flask Web开发》中的做法类似，这部分的示例程序均使用Git标签来组织不同阶段的代码，方便你签出相应的版本或是进行对比。</span></span></div>
</blockquote>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="19n8v-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="19n8v-0-0"><span data-offset-key="19n8v-0-0"><span data-text="true">第三部分（进阶篇）第13章《性能优化》通过两个实例程序来介绍使用Flask-Caching和Flask-Assets对Flask程序添加缓存和进行静态资源优化的前后变化对比。第15章《Flask扩展开发》则通过一个简单的为页面中添加社交分享组件的</span></span><a class="Link ztext-link" href="https://github.com/greyli/flask-share" target="_blank" rel="noopener" data-editable="true" data-offset-key="19n8v-1-0"><span data-offset-key="19n8v-1-0"><span data-text="true">Flask-Share扩展</span></span></a><span data-offset-key="19n8v-2-0"><span data-text="true">来完整介绍从创建Git仓库到使用twine将包上传到PyPI的完整扩展开发流程。</span></span></div>
</div>
<blockquote class="Editable-styled" data-block="true" data-editor="uvka" data-offset-key="7ev0e-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="7ev0e-0-0"><span data-offset-key="7ev0e-0-0"><span data-text="true">你可以在文章</span></span><a class="Link ztext-link" href="https://zhuanlan.zhihu.com/p/38342129" target="_blank" rel="noopener" data-editable="true" data-offset-key="7ev0e-1-0"><span data-offset-key="7ev0e-1-0"><span data-text="true">《Flask Web开发实战》中的示例程序们</span></span></a><span data-offset-key="7ev0e-2-0"><span data-text="true">一文中了解这些程序的具体信息，其中包含大量程序界面截图。</span></span></div>
</blockquote>
<blockquote>
<div data-offset-key="7ev0e-0-0"><strong>这几个项目的源码和在线Demo链接均可以在<a class="Link ztext-link" href="http://helloflask.com/" target="_blank" rel="noopener" data-editable="true" data-offset-key="3fgli-1-0">helloflask.com</a>看到。</strong></div>
</blockquote>
<h2 class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="f6j9o-0-0"><span data-offset-key="f6j9o-0-0"><span data-text="true">满足80%的读者提议</span></span></h2>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="fb97o-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="fb97o-0-0"><span data-offset-key="fb97o-0-0"><span data-text="true">在文章</span></span><a class="Link ztext-link" href="https://zhuanlan.zhihu.com/p/25214275" target="_blank" rel="noopener" data-editable="true" data-offset-key="fb97o-1-0"><span data-offset-key="fb97o-1-0"><span data-text="true">《写一本Flask书》</span></span></a><span data-offset-key="fb97o-2-0"><span data-text="true">中，很多知友通过评论给出了希望看到的内容和建议。我做了简单的收集和处理，粗略的浏览，大概有80%的读者提议得到了满足。</span></span></div>
</div>
<h2 class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="3noih-0-0"><span data-offset-key="3noih-0-0"><span data-text="true">内容丰富，大约700页</span></span></h2>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="27fiu-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="27fiu-0-0"><span data-offset-key="27fiu-0-0"><span data-text="true">这本书在介绍基础知识外，还引入了许多进阶技巧。第一部分从第2章开始每一章都包含一个《进阶实践》章节，其中包含一些常见的技巧，比如“如何安全的跳转回上一页”，“使用WTForms表单内置的中文错误消息”，“数据库事件监听”等，具体可以参考下面的《目录》部分。</span></span></div>
<div data-offset-key="27fiu-0-0"> </div>
</div>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="8cb8p-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="8cb8p-0-0"><span data-offset-key="8cb8p-0-0"><span data-text="true">另外，这本书还介绍了一些被其他Flask书忽略，但又非常实用的知识，比如实现AJAX时Flask和JavaScript交互数据的方式、通过AJAX实现的资料弹窗、在弹窗中实现动态的关注收藏按钮、通过AJAX实现简单的单页程序、实时双向通讯、国际化和本地化、全文搜索、第三方登录、Markdown支持、代码语法高亮、头像裁剪、设置缓存等。</span></span></div>
<div data-offset-key="8cb8p-0-0"> </div>
</div>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="ak40f-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="ak40f-0-0"><span data-offset-key="ak40f-0-0"><span data-text="true">本书会尽量提供多个技术选型，比如第6章《电子邮件》中，除了介绍使用Flask-Mail实现发送电子邮件，还介绍了使用事务邮件服务SendGrid发送电子邮件的两种方式；在第14章《部署上线》中，我介绍了一个基本的服务器初始化过程，包括安装基本的而库、设置SSH密钥登录、设置防火墙等部署，接着才是Gunicorn、Nginx和Supervisor的使用介绍。除了Linux部署，还介绍了使用PythonAnywhere和Heroku的程序部署流程。</span></span></div>
<div data-offset-key="ak40f-0-0"> </div>
</div>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="b9akb-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="b9akb-0-0"><span data-offset-key="b9akb-0-0"><span data-text="true">尽管如此，在多次修改的过程中，我还是删掉了大量内容（近8万字约240页）：</span></span></div>
<div data-offset-key="b9akb-0-0"> </div>
</div>
<ul class="public-DraftStyleDefault-ul" data-offset-key="c5f64-0-0">
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-reset public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="c5f64-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="c5f64-0-0"><span data-offset-key="c5f64-0-0"><span data-text="true">在Flask程序中使用Celery</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="9o60e-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="9o60e-0-0"><span data-offset-key="9o60e-0-0"><span data-text="true">Fabric自动化部署</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="evkbf-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="evkbf-0-0"><span data-offset-key="evkbf-0-0"><span data-text="true">使用Tox自动化测试</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="4j236-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="4j236-0-0"><span data-offset-key="4j236-0-0"><span data-text="true">使用Sentry处理日志</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="6p0pq-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="6p0pq-0-0"><span data-offset-key="6p0pq-0-0"><span data-text="true">使用Docker开发和部署Flask程序</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="7u2go-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="7u2go-0-0"><span data-offset-key="7u2go-0-0"><span data-text="true">NoSQL数据库的使用介绍</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="c0rj0-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="c0rj0-0-0"><span data-offset-key="c0rj0-0-0"><span data-text="true">使用Frozen-Flask静态化处理程序</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="ejtc6-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="ejtc6-0-0"><span data-offset-key="ejtc6-0-0"><span data-text="true">静态部署</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="aoap3-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="aoap3-0-0"><span data-offset-key="aoap3-0-0"><span data-text="true">Flask-SSE的使用</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="mgdl-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="mgdl-0-0"><span data-offset-key="mgdl-0-0"><span data-text="true">Travis CI、Coverall的使用</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="1a0lc-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="1a0lc-0-0"><span data-offset-key="1a0lc-0-0"><span data-text="true">使用GitHub-Flask集成GitHub登录</span></span></div>
</li>
</ul>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="35gck-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="35gck-0-0"><span data-offset-key="35gck-0-0"><span data-text="true">这些内容或是偏离主题，或是有了更好的替代内容，删掉这些内容一方面可以保证书的内容贴近主题，同时也可以避免成书太厚。因为内容丰富，所以最终完稿共980页，成书大概会在700页左右。</span></span></div>
</div>
<blockquote class="Editable-styled" data-block="true" data-editor="uvka" data-offset-key="63rss-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="63rss-0-0"><span data-offset-key="63rss-0-0"><span data-text="true">对于这些删减掉的内容，我会抽取有价值的内容并进行完善后陆续发布在专栏中。</span></span></div>
</blockquote>
<h2 class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="5j8ii-0-0"><span data-offset-key="5j8ii-0-0">关于我</span></h2>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="b58qd-0-0">
<p class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="b58qd-0-0"><span data-offset-key="b58qd-0-0">我是李辉，一个Python开发者，Flask开发团队（Pallets Team）的成员。我在</span><a class="Link ztext-link" href="https://github.com/greyli" target="_blank" rel="noopener" data-editable="true" data-offset-key="b58qd-1-0"><span data-offset-key="b58qd-1-0">GitHub</span></a><span data-offset-key="b58qd-2-0">上维护了几个Flask扩展项目，也尝试为多个Flask相关项目贡献代码和处理Issue；除了知乎，我偶尔会在</span><a class="Link ztext-link" href="https://stackoverflow.com/users/5511849/grey-li" target="_blank" rel="noopener" data-editable="true" data-offset-key="b58qd-3-0"><span data-offset-key="b58qd-3-0">Stack Overflow</span></a><span data-offset-key="b58qd-4-0">上回答一些Flask相关的问题。如果你想了解我的项目或书的最新动态，可以关注我的</span><a class="Link ztext-link" href="https://twitter.com/greylihui" target="_blank" rel="noopener" data-editable="true" data-offset-key="b58qd-5-0"><span data-offset-key="b58qd-5-0">Twitter</span></a><span data-offset-key="b58qd-6-0">或</span><a class="Link ztext-link" href="https://weibo.com/greylihui" target="_blank" rel="noopener" data-editable="true" data-offset-key="b58qd-7-0"><span data-offset-key="b58qd-7-0">新浪微博</span></a><span data-offset-key="b58qd-8-0">账号。</span></p>
</div>
<h2 class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="29kcu-0-0"><span data-offset-key="29kcu-0-0"><span data-text="true">章节概括</span></span></h2>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="9anhi-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="9anhi-0-0"><span data-offset-key="9anhi-0-0"><span data-text="true">下面是本书的章节概括，简单的介绍了各章的内容，你可以通过下面的《目录》部分来了解详细的内容。本书由四部分组成，分别为基本篇、实战篇、进阶篇和附录，共16章。本书的章节安排经过精心的设计，力求让读者可以循序渐进的掌握Flask开发基础知识和技巧。</span></span></div>
<div data-offset-key="9anhi-0-0"> </div>
</div>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="67nua-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="67nua-0-0"><span data-offset-key="67nua-0-0"><span data-text="true">第一部分：基础篇 介绍Flask开发相关的基础知识。</span></span></div>
<div data-offset-key="67nua-0-0"> </div>
</div>
<ul class="public-DraftStyleDefault-ul" data-offset-key="d43np-0-0">
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-reset public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="d43np-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="d43np-0-0"><span data-offset-key="d43np-0-0"><span data-text="true">第1章：搭建开发环境，编写一个最小的Flask程序并运行它，了解Flask基本知识。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="7up00-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="7up00-0-0"><span data-offset-key="7up00-0-0"><span data-text="true">第2章：介绍了Flask与HTTP的交互方式以及相关的Flask功能。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="d5tcg-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="d5tcg-0-0"><span data-offset-key="d5tcg-0-0"><span data-text="true">第3章：Jinja2模板的使用和技巧。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="4ek13-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="4ek13-0-0"><span data-offset-key="4ek13-0-0"><span data-text="true">第4章：Web表单的创建和表单数据的验证。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="27qif-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="27qif-0-0"><span data-offset-key="27qif-0-0"><span data-text="true">第5章：在Flask程序中使用数据库进行CRUD操作，各类数据库关系的建立。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="448g4-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="448g4-0-0"><span data-offset-key="448g4-0-0"><span data-text="true">第6章：在Flask程序中发送电子邮件的几种方式，使用Flask-Mail通过SMTP服务器发送，或是通过事务邮件服务SendGrid（SMTP和Web API两种方式）。</span></span></div>
</li>
</ul>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="m9kq-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="m9kq-0-0"><span data-offset-key="m9kq-0-0"><span data-text="true">第二部分：实战篇 通过几个示例程序来介绍Flask开发中的各类功能实现和技巧。</span></span></div>
<div data-offset-key="m9kq-0-0"> </div>
</div>
<ul class="public-DraftStyleDefault-ul" data-offset-key="bcinr-0-0">
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-reset public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="bcinr-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="bcinr-0-0"><span data-offset-key="bcinr-0-0"><span data-text="true">第7章：通过一个简单的留言板程序SayHello介绍Web开发基本流程和基本的项目管理方式，对第一部分的基础知识进行简单的回顾，最后还介绍了Faker、Flask-Moment和Flask-DebugToolbar的使用。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="e9jdg-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="e9jdg-0-0"><span data-offset-key="e9jdg-0-0"><span data-text="true">第8章 ：通过个人博客程序Bluelog介绍CRUD操作、用户认证（Flask-Login）、文章评论和回复、后台管理等功能，其中还包括网站主题更换，渲染导航链接等小技巧。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="5bm3v-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="5bm3v-0-0"><span data-offset-key="5bm3v-0-0"><span data-text="true">第9章：通过图片社交程序Albumy介绍用户注册和认证、用户权限管理、图片上传（Flask-Dropzone）与处理（Pillow）、用户头像、复杂的数据库关系、复杂的数据库查询、全文搜索（Flask-Whooshee）等内容。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="7n8ta-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="7n8ta-0-0"><span data-offset-key="7n8ta-0-0"><span data-text="true">第10章：通过待办事项程序Todoism介绍单页应用、国际化与本地化（Flask-Babel）、Web API、OAuth服务器端实现等内容。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="bhp1e-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="bhp1e-0-0"><span data-offset-key="bhp1e-0-0"><span data-text="true">第11章：通过聊天室程序CatChat介绍Websocket应用（实时双向通讯，通过Flask-SocketIO实现）、OAuth客户端实现（第三方登录，通过Flask-OAuthlib实现）、Markdown支持（markdown）、代码语法高亮（pygments）等内容。</span></span></div>
</li>
</ul>
<div class="Editable-unstyled" data-block="true" data-editor="uvka" data-offset-key="62ujs-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="62ujs-0-0"><span data-offset-key="62ujs-0-0"><span data-text="true">第三部分：进阶篇 介绍Flask程序的部署流程：测试、性能优化、部署上线；介绍Flask开发的进阶话题：Flask扩展开发和Flask源码与机制分析。</span></span></div>
<div data-offset-key="62ujs-0-0"> </div>
</div>
<ul class="public-DraftStyleDefault-ul" data-offset-key="9le2u-0-0">
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-reset public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="9le2u-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="9le2u-0-0"><span data-offset-key="9le2u-0-0"><span data-text="true">第12章：介绍Flask程序的自动化测试，包括单元测试和UI测试的编写、计算测试覆盖率和代码质量检查。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="eo5j1-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="eo5j1-0-0"><span data-offset-key="eo5j1-0-0"><span data-text="true">第13章：对Flask程序进行性能优化的主要措施，包括函数与数据库查询的性能分析、缓存的使用（Flask-Caching）、静态文件优化（Flask-Assets）。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="fjssk-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="fjssk-0-0"><span data-offset-key="fjssk-0-0"><span data-text="true">第14章：介绍部署Flask程序前的准备，以及部署到Linux服务器和云平台Heroku、PythonAnywhere的完整流程。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="13anp-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="13anp-0-0"><span data-offset-key="13anp-0-0"><span data-text="true">第15章：通过扩展Flask-Share来介绍编写Flask扩展的完整流程，从创建项目到上传到PyPI。</span></span></div>
</li>
<li class="Editable-styled public-DraftStyleDefault-unorderedListItem public-DraftStyleDefault-depth0 public-DraftStyleDefault-listLTR" data-block="true" data-editor="uvka" data-offset-key="48nrd-0-0">
<div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="48nrd-0-0"><span data-offset-key="48nrd-0-0"><span data-text="true">第16章：介绍了Flask的一些设计理念，包括底层WSGI的相关实现，并对各个主要功能点进行源码分析。</span></span></div>
</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/flask-web-development/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>如何获得优质的睡眠？</title>
		<link>https://greyli.com/how-to-own-better-sleep/</link>
		<comments>https://greyli.com/how-to-own-better-sleep/#comments</comments>
		<pubDate>Sat, 13 Aug 2016 14:40:19 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[睡眠]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://withlihui.com/?p=886</guid>
		<description><![CDATA[书籍信息 书名：Powerful Sleep – Secrets of the Inner Sleep Clo [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>书籍信息</h2>
<p>书名：Powerful Sleep – Secrets of the Inner Sleep Clock<br /><span lang="zh-CN">译名：有效睡眠</span> <span lang="zh-CN">–</span> <span lang="zh-CN">内在睡眠时钟的奥秘<br /></span>作者：Kacper M. Postawski<br /><span lang="zh-CN">译者：</span><span lang="en-US">Jude<br /></span>一句话介绍：关于睡眠的是什么、为什么以及怎么办？</p>
<p>&nbsp;</p>
<h2>我看</h2>
<p>作者很啰嗦，废话很多，很多东西一再的重复。所以，对于想提高睡眠质量的人来说，只看我的总结就够了。（注：下面的内容不全是书里面的。）</p>
<p>&nbsp;</p>
<h2>基本概念</h2>
<h3>睡眠周期</h3>
<p><img class="aligncenter size-full wp-image-887" src="http://greyli.com/wp-content/uploads/2016/08/sleep.jpg" alt="睡眠周期" width="853" height="311" srcset="https://greyli.com/wp-content/uploads/2016/08/sleep.jpg 853w, https://greyli.com/wp-content/uploads/2016/08/sleep-150x55.jpg 150w, https://greyli.com/wp-content/uploads/2016/08/sleep-300x109.jpg 300w, https://greyli.com/wp-content/uploads/2016/08/sleep-624x228.jpg 624w" sizes="(max-width: 853px) 100vw, 853px" /></p>
<p>特点：深度睡眠的时长决定我们的睡眠质量；睡眠是逐渐变得越来越浅的。</p>
<p>&nbsp;</p>
<h3>体温（生理）节律</h3>
<p>&nbsp;</p>
<p><a href="http://greyli.com/wp-content/uploads/2016/08/temperature.jpg" rel="attachment wp-att-888"><img class="aligncenter size-full wp-image-888" src="http://greyli.com/wp-content/uploads/2016/08/temperature.jpg" alt="体温节律" width="855" height="376" srcset="https://greyli.com/wp-content/uploads/2016/08/temperature.jpg 855w, https://greyli.com/wp-content/uploads/2016/08/temperature-150x66.jpg 150w, https://greyli.com/wp-content/uploads/2016/08/temperature-300x132.jpg 300w, https://greyli.com/wp-content/uploads/2016/08/temperature-624x274.jpg 624w" sizes="(max-width: 855px) 100vw, 855px" /></a></p>
<p><a href="http://greyli.com/wp-content/uploads/2016/08/sleep.jpg" rel="attachment wp-att-887"><br /></a>特点：体温和人的身体疲劳度成反比。体温升高时，人会感觉兴奋和有活力；体温降低时，人会感觉困倦和疲劳。午后会有短暂的体温下降，夜间开始稳定下降。</p>
<p>&nbsp;</p>
<h3>褪黑激素</h3>
<p>褪黑激素是松果状腺和视网膜里激素的统称。褪黑激素的功能是让我们睡觉并且在睡觉时恢复身体精力。如果你的褪黑激素含量太高，就会感到困倦，精力不足。当人身处黑暗之时，褪黑激素开始分泌。一旦眼睛接触不到阳光，褪黑激素含量就开始升高。褪黑激素含量和白天接触阳光的水平密切相关。</p>
<p>特点：褪黑激素含量和疲劳程度成正比，和接触的光量成反比。</p>
<p>&nbsp;</p>
<p><strong>从上面的概念我们可以知道：</strong></p>
<ol type="1">
<li value="1"><span lang="zh-CN">在深度睡眠起床会很困难，起床后会感到疲劳和困倦。在睡眠周期的末期（</span><span lang="en-US">REM</span><span lang="zh-CN">）醒来，会让你感觉精神饱满。所以尝试调整闹钟（早起或晚起，以</span><span lang="en-US">20</span><span lang="zh-CN">分钟为单位）找到自己的</span><span lang="en-US">REM</span><span lang="zh-CN">时间，或是使用睡眠周期闹钟（比如</span><span lang="en-US">iOS</span><span lang="zh-CN">下的</span><span lang="en-US">Sleep Cycle</span><span lang="zh-CN">）。</span></li>
<li>体温升高会让人感觉精神饱满，所以起床后接触阳光，适量活动，可以提高精神。白天多晒太阳可以降低褪黑激素的含量，并且会减缓体温降低。体育锻炼同样可以减轻紧张感和压力感。作为过多脑力活动的中和剂。</li>
</ol>
<p>因此：</p>
<ul>
<li><strong>如果生活是里缺乏活动和光照，那么感到疲劳并不是因为缺少睡眠。而是说明你该运动了。同时要多晒晒太阳。</strong></li>
<li><strong>起床困难很可能不是懒病作怪，或是意志力薄弱，而是因为闹钟没在合适的时间响起。</strong></li>
</ul>
<p>&nbsp;</p>
<h2>那么，怎么更好的睡觉？</h2>
<h3>健康的生活方式</h3>
<ul>
<li>早晨起床后喝一杯水，白天喝大量的水（但睡前一小时不要喝太多水）。</li>
<li>锻炼的最佳时间是清晨，最好是室外运动（接触阳光），这可以快速的提高体温。</li>
<li>烟、酒、咖啡因、安眠药都会对睡眠带来负面影响。</li>
<li>适量的运动（但避免在睡前三个小时锻炼。），适量的接触阳光。</li>
<li>含有大量糖和碳水化合物的食物和会产生气体和难消化的食物会加重睡眠时的消化负担。</li>
<li>趴着睡不利于呼吸。</li>
<li>正确面对生活压力，不把它带进卧室。</li>
</ul>
<p>&nbsp;</p>
<h3>小睡</h3>
<p><span lang="zh-CN">规律的午睡可以增加白天的精力。但时间不超过</span><span lang="en-US">45</span><span lang="zh-CN">分钟，避免进入深度睡眠。午睡后如果感到疲劳，那就去晒晒太阳，活动活动。就个人经验来看，要不要午睡是因人而异的。</span></p>
<p>&nbsp;</p>
<h3>建立一个良好的睡眠环境</h3>
<ul>
<li>除了睡觉和做爱，不要在床上做其他事。</li>
<li>安静凉爽黑暗的房间更容易使人入睡。</li>
<li>尽量买最好的床上用品。</li>
</ul>
<p>&nbsp;</p>
<h3>养成良好的睡眠习惯</h3>
<ul>
<li>保持稳定的睡眠作息，固定睡觉和起床的时间，不要周末补觉，也不要睡回笼觉。</li>
<li>不要在睡前接触电子设备（很容易让你忘记时间，光刺激也会让你变得兴奋）。</li>
<li>睡前洗个热水澡有利于降低体温，但要在睡前一小时进行。</li>
<li>晚饭少吃，减轻睡眠时的消化负担，睡前不要喝大量的水。</li>
<li><span lang="zh-CN">睡觉时间在</span><span lang="en-US">6~8</span><span lang="zh-CN">个小时为佳。</span></li>
</ul>
<p>&nbsp;</p>
<h3>更快的入睡</h3>
<ul>
<li>固定睡前的事项，不做计划外的事情</li>
<li>翻身的时候要轻柔缓慢，同时做个深呼吸。</li>
<li>思维规律是：一旦集中思考，想法源源不断。解决方法很简单，集中注意力去想轻松的东西，不要尝试逼自己睡着。想象轻松愉快的事情，你的目标不是睡觉，而是放松。</li>
<li>尝试减缓思维速度，不断的慢速重放自己的某个想法。</li>
<li>如果躺在床上超过三十分钟没有睡着，那就起来去做其他的事。直到困意再次来袭。</li>
</ul>
<p>&nbsp;</p>
<h3>如果你住在宿舍，你可以尝试：</h3>
<ul>
<li>和室友沟通，协调好噪音控制和关灯时间</li>
<li>备好耳塞，眼罩或床帘</li>
<li>搬宿舍或租房子</li>
</ul>
<p>&nbsp;</p>
<h3>拥有优质睡眠的一天是这样的：</h3>
<ul>
<li><span lang="zh-CN">起床，通过调整或使用软件使闹钟在</span><span lang="en-US">REM</span><span lang="zh-CN">阶段响起。<br /></span></li>
<li>早晨起床后，及时接触阳光，适当的运动。</li>
<li>白天喝足量的水，三餐适量，不吃难消化的食物。</li>
<li>晚上睡觉前三小时不吃食物，不剧烈运动，睡觉一小时前可以洗个热水澡。</li>
<li>上床后，不做其他的事情，如果不做爱的话，就开始放松身体和呼吸，直到入睡。</li>
</ul>
<p><span lang="zh-CN">简单来说就是：<strong>好的睡眠</strong></span><strong><span lang="en-US"> = </span><span lang="zh-CN">运动</span><span lang="en-US"> + </span><span lang="zh-CN">阳光</span><span lang="en-US"> + </span><span lang="zh-CN">合理饮食</span><span lang="en-US"> + </span><span lang="zh-CN">健康的生活方式</span></strong></p>
<p>&nbsp;</p>
<h3>放松的方法：</h3>
<ul>
<li>放松身体法：从头顶开始感受并放松身体的每一个部位。</li>
<li>呼吸法：注意力放在hu</li>
<li>冥想：冥想的方式有很多种，我也不是很熟悉，就不做介绍了。</li>
<li><span lang="zh-CN">白噪和自然声：有很多APP提供了这样的音频，比如</span><span lang="en-US">TaoMix。</span></li>
</ul>
<p>&nbsp;</p>
<h3>一些有益的尝试：</h3>
<ul>
<li>测试自己的体温周期（使用体温计），相应的安排自己的日常活动。</li>
<li><span lang="zh-CN">测试自己的睡眠周期（使用</span><span lang="en-US">Sleep Cycle</span><span lang="zh-CN">等</span><span lang="en-US">APP</span><span lang="zh-CN">），找到合适的睡眠节奏。</span></li>
</ul>
<p>&nbsp;</p>
<p>作者在书里提到了他做事情的方法。他说不论做什么事情，都有三个基本步骤：</p>
<ol type="1">
<li value="1">掌握正确的信息</li>
<li>制定正确的计划</li>
<li>实际的执行</li>
</ol>
<p>所以这篇文章算是第一步，剩下的就靠你自己了。</p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/how-to-own-better-sleep/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>《撒冷镇》笔记</title>
		<link>https://greyli.com/salems-lot-notes/</link>
		<comments>https://greyli.com/salems-lot-notes/#comments</comments>
		<pubDate>Wed, 27 Jul 2016 14:48:29 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[读书与写作]]></category>
		<category><![CDATA[撒冷镇]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://withlihui.com/?p=808</guid>
		<description><![CDATA[信息 书名：《撒冷镇》/ Salem&#8217;s Lot作者：斯蒂芬 · 金 / Stephen King [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>信息</h2>
<p><span lang="zh-CN">书名：《撒冷镇》</span><span lang="en-US">/</span><span lang="en-US"> Salem&#8217;s Lot<br /></span><span lang="zh-CN">作者：斯蒂芬</span> <span lang="zh-CN">·</span> <span lang="zh-CN">金</span><span lang="en-US"> / Stephen</span><span lang="en-US"> King<br /></span>译者：姚向辉<br />出版社：上海译文出版社<br />豆瓣链接：<a href="https://book.douban.com/subject/5409461/" target="_blank">https://book.douban.com/subject/5409461/</a></p>
<p>一句话介绍：吸血鬼来到了二十世纪的美国小镇，小镇居民不知道，知道了也不信。</p>
<div id="attachment_809" style="width: 550px" class="wp-caption aligncenter"><a href="http://greyli.com/wp-content/uploads/2016/07/18087575._SX540_.jpg" rel="attachment wp-att-809"><img class="size-full wp-image-809" src="http://greyli.com/wp-content/uploads/2016/07/18087575._SX540_.jpg" alt="马斯登老宅" width="540" height="402" srcset="https://greyli.com/wp-content/uploads/2016/07/18087575._SX540_.jpg 540w, https://greyli.com/wp-content/uploads/2016/07/18087575._SX540_-150x112.jpg 150w, https://greyli.com/wp-content/uploads/2016/07/18087575._SX540_-300x223.jpg 300w" sizes="(max-width: 540px) 100vw, 540px" /></a><p class="wp-caption-text">撒冷镇中的马斯登老宅</p></div>
<h2>我说</h2>
<p>尽管斯蒂芬金名气那么大，之前却并没有读过他的书。仅有的接触是：读过两遍《写作这回事》，看过根据小说拍摄的《魔女嘉丽》和《肖申克的救赎》。暑假前去图书馆，刚好看到这本《撒冷镇》，就带了回来。</p>
<p><span lang="zh-CN">尽管译本不能很好的还原作者的写作风格，但我还是被故事吸引住了。从早晨起床开始，到晚上八点读完，除了三餐时间，一直沉浸在故事里。我想好的小说应该有这种让人停不下来的魔力，好的阅读也应该是一气呵成的。尽管一天读完近</span><span lang="en-US">30</span><span lang="zh-CN">万字的长篇实在有些累得够呛。</span></p>
<p>读这本书的过程中，对小说和改编电影有了一些思考，见<a href="http://greyli.com/the-novel-and-film-adaptations/" target="_blank">《小说和改编电影》</a>。</p>
<p>&nbsp;</p>
<h2>摘抄</h2>
<p><em>（依照原文顺序排列，小节标题自取）</em></p>
<h3><strong><span lang="zh-CN">马克</span> <span lang="zh-CN">·</span> <span lang="zh-CN">佩特雷的特质</span></strong></h3>
<p>假如说他身上有什么与众不同之处的话，那一定是淡然处世和冷静自控的态度了。没有人这样教导过他，这无疑是天生就有的东西。小时候，马克的宠物狗乔巴遭遇了车祸，他坚持和母亲一起去送狗去看兽医。兽医说，孩子，我的让这条狗长眠了，你明白吗？马克答道，你不是要让他睡觉，而是要用毒气杀死他，对吗？兽医说是的。马克说请便吧，但他要先和乔巴吻别。他觉得很难过，但也没有哭泣，甚至没有想流泪的意思。他母亲倒是哭了，但三天后乔巴对她已经成了模糊的回忆，对于马克来说，乔巴永远不会变成模糊的回忆。这就是不哭的价值所在。哭泣就仿佛把内心的感情如撒尿般扔在地上。</p>
<p>&nbsp;</p>
<h3><strong>卡拉汉神父的苦恼</strong></h3>
<p><span lang="zh-CN">他想起博伊家的姑娘——不，麦杜高家的了，她现在姓麦杜高——喘息着用小小的声音说她打孩子，他问多久打一次的时候，他能感觉到（几乎能听到）姑娘脑子里的齿轮在转动，把十次说成五次，把一百次说成十次。人类这些可怜的借口。那孩子是他施洗的，兰道尔</span> <span lang="zh-CN">·</span> <span lang="zh-CN">弗雷图斯</span> <span lang="zh-CN">·</span> <span lang="zh-CN">麦杜高。在罗伊斯</span> <span lang="zh-CN">·</span> <span lang="zh-CN">麦杜高的车后座上受孕的，多半是汽车影院双片连映的第二部期间。不停尖叫的小东西。她知不知道，或者有没有猜到过他有多么想用双手砸烂那扇小窗，伸进隔壁斗室，揪出她的灵魂，任其怎么折腾，也要使劲搅搓挤榨，直到她拼命惨叫。你的布赎是头上六拳和屁股上狠狠一脚。滚回去，别再犯罪了。</span></p>
<p>“没劲儿啊，”他说。</p>
<p><span lang="zh-CN">然而，告解出了没劲之外还有更糟糕的地方；告解本身并不让他觉得恶心，把他驱赶进那个人数总是越来越多的俱乐部：“酒精成瘾天主教神甫及‘顺风</span><span lang="en-US">*</span><span lang="zh-CN">’成瘾骑士联合会”。让他难受的是教会这具稳定、呆板、不知疲倦的引擎，在飞往天堂的道路上对所有细小罪错视而不见。让他难受的是如今与种种社会弊病为伍的教会对邪恶的仪式性认可，变成了父母用欧洲语言说话的老妇数着念珠赎罪的工具。让他难受的是告解中真实存在的邪恶，与旧天鹅绒的味道一样真实。但这是愚蠢、低能的邪恶，既不值得怜悯，也不应该宽恕。第一次扇婴儿巴掌，用折刀刺破轮胎，酒吧里的争吵，在万圣节苹果里藏刀片，持续不断、索然无味地证明着：人类头脑那迷宫般的弯折沟回足以轻易折腾出这些东西。诸位先生，更好的监狱能解决问题。更好的警察。更好的社会服务机构。更好的生育控制。更好的绝育手段。更好的堕胎。诸位先生，要是能把手脚尚未成型的这团血肉从子宫里拽出来，它就永远不会长大了用榔头锤杀老妇人。诸位女士，要是能把这位先生捆上特制电椅，好像微波炉烤猪排一样活煎了他，他就永远不会有机会把更多孩子折磨致死。国民们，要是这项优生学法案能获得通过，我能向大家保证，永远不会——</span></p>
<p>妈的。</p>
<p><span lang="zh-CN">最近这三年来，他的处境的实质正在变得越来越清晰。仿佛失焦的电影放映机得到调整，清晰度和分辨率越来越高，最后直至每根线条都分外锐利、清晰可辨。他渴望挑战。新一代神职人员有他们的挑战：种族歧视、妇女解放，甚至同性恋解放；贫困、精神错乱、非法行为。这些都让他不舒服。在标榜社会良知的神职人员之中。他唯一能接受的是反对越战的那些。他们现在也变得死气沉沉，坐下来讨论游行集会的样子仿佛结婚多年的夫妻回忆蜜月和初次火车旅行。然而，卡拉汉既不属于新的一代，也不因循守旧；他发觉自己是一个传统主义者，但也不再相信最初的基本假定。他想领导一支军队——为谁效力呢？上帝，对，上帝和良善是一件东西的两样称呼，与邪恶展开斗争。他要的是流血和战斗，没兴趣大冷天的站在超市门口发放抵制莴苣和葡萄园罢工的传单。他想剥开邪恶本身欺骗世人的每一层裹尸布，看清楚邪恶的五官长相。他想和邪恶面对面堂堂正正打一场，就像穆罕默德</span> <span lang="zh-CN">·</span> <span lang="zh-CN">阿里对阵乔</span> <span lang="zh-CN">·</span> <span lang="zh-CN">弗雷泽，凯尔特人队对阵尼克斯队，雅各对阵天使。他要一场纯粹的斗争，不受政治制约的斗争，政治如畸形连体孪生兄弟那样攀在每一桩社会事务身上。自从他想侍奉神的那天起，他就想要这一切，神的赵换在十四岁那年降临，圣史蒂芬是第一位训教烈士，被乱石击死，在死前最后一刻见到基督。为了侍奉上帝而战斗，粉身碎骨也在所不辞，天堂的吸引力比起来微乎其微。</span></p>
<p>可是，哪里有什么战斗？只有模糊之至的小规模冲突而已。邪恶不止一副面孔，而是有许多张脸，每张脸都茫然愚蠢，下巴上多半还滑溜溜的糊满口水。说实话，他正在被迫得出结论：世界上不存在来自魔鬼的邪恶，只存在凡人的邪恶，甚至是琐碎的日常邪恶。每当这种时候，他就会怀疑希特勒不过是个为非作歹的大官僚，撒旦本人心智缺陷，有着扭曲的幽默感——就是拿面包裹了炮仗喂海鸥病从中获得莫大欢乐的那种人。</p>
<p><span lang="zh-CN">多少世纪以来的社会斗争、道德交锋和灵性交战最后却归结为珊迪</span> <span lang="zh-CN">·</span> <span lang="zh-CN">麦杜高痛打缩在角落里的鼻涕小儿，孩子长大后再痛打他缩在角落里的后代，周而复始，永无止境，哈利路亚，请赐我一大勺花生酱。万福玛利亚，帮我赢了这场赛车大赛吧！</span></p>
<p>这比没劲儿还要没劲。人生，无论你赋之以何种理性界定，最终结果竟如此可怕，天堂或许也一样。天堂是什么呢？永恒的教堂宾果游戏、游乐场嬉戏和空中加速汽车赛？</p>
<p><em><span lang="en-US">*</span><span lang="zh-CN">威士忌品牌</span></em></p>
<p>&nbsp;</p>
<h3><strong>苏珊的理性的崩溃</strong></h3>
<p><span lang="zh-CN">局势急转直下，苏珊的意识开始混乱，感觉所有事情都不真实起来。不到两分钟前，他们还在冷静地讨论事情，沐浴着电灯泡射出的理性光辉。此刻她很害怕。问题：把心理学家和自称拿破仑的男人在一个房间里关上一年（或十年、二十年），最后得到的是两个复合斯金纳理论的理性人，还是两个把手插在衬衫里的人</span><span lang="en-US">*</span><span lang="zh-CN">？答案：证据不足。</span></p>
<p><em><span lang="en-US">* </span><span lang="zh-CN">拿破仑的标准姿势</span></em></p>
<p>&nbsp;</p>
<h3><strong>小镇了解黑暗（最喜欢的一段）</strong></h3>
<p>小镇了解黑暗。</p>
<p><span lang="zh-CN">小镇了解自转使得大地背离太阳因而笼罩世间的黑暗，也了解人类灵魂的黑暗。小镇是三个部分的累积，但比三个部分都更大。小镇是居住在这里的人，是人造起来遮风避雨、行商务工的建筑物，也是土地。人是英国苏格兰人和法国人。当然也有其他人，可只是少数，就像扔进盐罐里的一把胡椒，但始终没能搅拌均匀。建筑物基本上都是纯木质结构。老屋子有很多是盐盒式，大部分商铺是假门脸，但谁也说不清为啥会这样。人们知道假门脸后空空如也，正如他们知道洛瓦塔</span> <span lang="zh-CN">·</span> <span lang="zh-CN">斯塔奇戴假胸。土地是花岗岩，仅仅覆盖了薄薄一层极易剥掉的表层土。种地在这里是事倍功半、汗流浃背、疯狂又可怜的营生。耙子动辄掘到泥土下的大块花岗岩，撞得浑身碎骨。五月份，你趁着地面干燥地足以支撑卡车时开车出门，和你家孩子在犁地前装个十几车石块，扔到野草丛生的乱石堆里；自从</span><span lang="en-US">1955</span><span lang="zh-CN">年你接受这片宛如老虎卵蛋的土地以来，你每年都要这么扔一场石头。等你捡完了石头，洗手时指甲缝都漏不出半点烂泥，手指感觉又肿又麻、粗大得畸形，这时候，你把耙子挂在拖拉机背后，还没犁完两趟，就在一块没发现的石块上碰断了锋刃。换上新刃头，叫你最大的那个孩子抬起钩套，好让你装回去，今年第一只嗜血的蚊子嗡嗡叫着飞过耳边，那声音叫你禁不住想流眼泪，让你觉得那准定是疯子在动手前听见的最后声音，然后要么屠杀自家儿孙，要么在洲际公路上一闭眼睛，把油门踩到底，要么将双管猎枪的枪口塞进嘴里，拿脚趾头扣动扳机；就在这时，孩子湿润的手指一打滑，圆耙的一个刃头割破你的胳膊，你不由环顾四周，痛感生活残忍而令人绝望，这一刻，你想抛下所有事情，抱起酒瓶痛饮一番，或者径直冲进为你做抵押的银行宣布破产；这一刻，你无比憎恨这片土地和束缚你的绵软但坚决有力的地心引力，但同时你也无比热爱这片土地，明白它为何了解黑暗，明白它一直了解黑暗。土地捕获了你，把你牢牢困在这里，还有你的屋子、你从念高中就与之坠入爱河的女人（彼时她还是女孩，你一丁点儿也不了解女孩，但你有了一个，总和她混在一起，她把你的名字写满书皮，你先破了她，她再破了你，然后你们谁也不需要担心那件破事儿了）、你的孩子（受孕于那张床头板有裂纹的吱嘎作响的双人床上）都困住了你。你和她在夜幕降临后不停制造孩子，六个，七个，甚至十个。银行困住了你，还有汽车销售商、路易斯顿的西尔斯百货商店、布伦瑞克的约翰</span> <span lang="zh-CN">·</span> <span lang="zh-CN">迪尔公司。但最重要的是，小镇困住了你，因为你了解小镇不亚于你了解老婆乳房的形状。你知道谁将在白天出没于克罗森商店，因为奈普鞋业解雇了他；你知道谁将遇上女人的麻烦，比事主知道得更早，比方说雷吉</span> <span lang="zh-CN">·</span> <span lang="zh-CN">索耶就有这种麻烦，因为电话公司那小子的雀儿正在出出进进邦妮</span> <span lang="zh-CN">·</span> <span lang="zh-CN">索耶的蜜壶；你知道道路通向何方，直到周五下午你、汉克还有诺雷</span> <span lang="zh-CN">·</span> <span lang="zh-CN">加德纳能去哪里：先停车，然后喝几套六罐装的啤酒甚至几箱啤酒。你知道地形，知道怎么在四月走过大沼泽同时连靴尖也不弄湿。你全都知道。小镇也了解你，知道犁地一天后腹股沟如何疼痛；知道后背上那个硬结只是囊肿而已，正如初诊时医生所说：没啥好担心的；知道你对每月最后一周到手的钞票有啥打算。小镇看得穿你的谎言，包括你对自己扯的那些在内，比方说明年或后年你一定带老婆孩子去迪斯尼乐园，比方说明年秋天多伐些木材就买得起彩色电视机了，比方说船到桥头自然直。住在小镇里是一种彻底而全然的沟通，日复一日，日日如此，彻底的让你和老婆在吱嘎响的床上做的事情仅仅像是握手。住在小镇里过的平凡，能满足感官的享受，宛如酗酒。在黑暗中，小镇是你的，你是小镇的，你俩如死尸版沉睡，恰似北边田野里的每块石头。这里没有生活，只有一天天缓慢的死亡；因此，当邪恶降临小镇的时候，它的到来显得那么命中注定，那么甘美，具有形态。就仿佛小镇知道邪恶即将扣门，也知道邪恶即将化为什么形状。</span></p>
<p>&nbsp;</p>
<h3><strong>小镇的秘密</strong></h3>
<p><span lang="zh-CN">小镇自有小镇的秘密，也守得很牢靠。人们全不知道这些秘密。他们知道艾比尔</span> <span lang="zh-CN">·</span> <span lang="zh-CN">克雷恩的老婆跟纽约城来的旅行者跑了，或者说，大家认为他们知道。实际上，旅行者玩够了离开之久，艾比尔砸烂了老婆的脑袋，在尸体的脚伤绑了块水泥，扔进那口古井；二十年后，艾比尔因心脏病突发在床上宁静辞世，他的儿子乔在这个故事的后面篇章中也将死去，或许有朝一日那个孩子会偶然发现那口古井，拨开盖住井口的茂盛黑莓藤蔓，搬掉被气候磨平了的发白木板，发现怪石嶙峋的井底有一个破碎的骷髅头空洞的望着天际，可爱的旅行者送给她的项链还挂在肋骨间，只是绿油油地长满了苔藓。</span></p>
<p>……</p>
<p><em>（下面也写得很好，但实在太长了，我的手指拒绝了我。）</em></p>
<p>&nbsp;</p>
<h3><strong>成年人的恐惧</strong></h3>
<p><span lang="zh-CN">“彻底睡着之前，他（马克</span> <span lang="zh-CN">·</span> <span lang="zh-CN">佩特雷，孩子）发觉自己又在思索成年人的独特之处。他们用轻泻剂、酒精和安眠药驱赶恐惧，安享美梦，他们的恐惧总是那么无趣，那么普通：工作，金钱，要是我不能给詹妮买身好衣服，老师会怎么想；老婆还爱我吗；谁是我的朋友——实在太没意思了，哪里比得上孩子在黑暗床铺之间与之共眠的恐惧？孩子只肯向其他孩子坦白，寻求完全而彻底的理解。有些孩子每个晚上都必须应付床底和地下室里的怪物，应付恰恰在实现不可及之处瞪视、跃动、威胁他们的怪物，也没听说有什么集体疗法、精神病医师或社会服务工作者来帮助他们。孤单的战争每夜上演，唯一的治愈手段是想象力的最终枯竭，又称“长大成人”。</span></p>
<p><span lang="zh-CN">这些念头以简短的表达方式掠过马克的脑海。前一天夜里，麦特</span> <span lang="zh-CN">·</span> <span lang="zh-CN">波特也正面接触了这么一个黑暗邪物，结果被京瓷啊引发的心脏病突发击倒；今夜，马克</span> <span lang="zh-CN">·</span> <span lang="zh-CN">特佩雷也遭遇了同样的事件，但十分钟之后，他就安然入梦，右手松垮垮的抓着那个塑料十字架，仿佛幼童抓住拨浪鼓一般。这就是男人和男孩的区别。</span></p>
<p>&nbsp;</p>
<h3><strong>邪恶的变化</strong></h3>
<p>“你也清楚，二十世纪，邪恶在天主教教会中的总体概念发生了天翻地覆的变化。知道这是为什么吗？”</p>
<p>“按照我的看法，是弗洛伊德。”</p>
<p>“答得好。进入二十世纪后，天主教教会开始接受一个全新概念：小写的邪恶。魔鬼不再是尾生长刺、蹄子开叉的红角怪物，也不是蜿蜒爬行花园中的大毒蛇——尽管这是一幅颇为适用的心理学图景。根据‘弗洛伊德福音’所述，魔鬼是一个巨大的复合本我，是我们所有人的潜意识的总和。”</p>
<p>“这个概念当然比鼻子过度敏感的红尾妖怪和恶魔更像样，便秘教士一个臭屁就能把它们熏走，”麦特说。</p>
<p>“的确更像样，但更非人化，更无情，更遥不可及。驱除弗洛伊德口中的邪魔，这比夏洛克那个取一磅肉但不流血的交易更难完成。天主教教会被迫重新诠释整套关于邪恶的理论，落在柬埔寨人头上的份额炸弹，爱尔兰的战争，中东冲突，警察杀人，黑人暴乱，每天都有几十亿更微小的邪魔横行世间，仿佛蚊蚋繁衍成灾。邪恶正在褪去旧时的巫医外壳，重新出现时变成了一种社会运动，一个社会性的意识知觉体。心理诊所在内城区取代了告解室。恳谈会在公民权利运动和城市重建的过程中帮腔敲鼓。教会正在把两只脚都踩在俗世中。”</p>
<p>“女巫、梦淫妖和吸血鬼不再出现，”麦特说，“剩下的只有虐待儿童、乱伦和强奸环境。”</p>
<p>&nbsp;</p>
<h3><strong>光明下的邪恶</strong></h3>
<p>也许根本不怪弗洛伊德那套东西，也许和电灯的发明关系更大，电灯杀死了人类意识中的阴影，效率比用木桩刺穿吸血鬼的心脏高得多，场面也不那么难看。</p>
<p>但邪恶仍旧存在，现在它存在于停车场日光灯、霓虹灯管和几十亿颗百瓦灯泡的冷漠无情的注视之下。将军在交流电的严肃光芒下制定战略空袭计划，一切都失去了控制，仿佛孩童乘着没有刹车的木箱赛车冲下山坡：我只是在执行命令。没错，一点不错，正确的一塌糊涂。我们是士兵，作战计划真么说，我们就怎么做。可说到底，那些命令来自何方呢？带我去见你们的头儿。可他的办公室在哪里呢？我只是在执行命令。人民选了我。但谁选了人民呢？</p>
<p><em>感谢养成错误打字习惯的，正在纠正指法的，使用标准指法打字的，手指酸痛的打字员——李辉。</em></p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/salems-lot-notes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
