长桥寂寞春寒夜

Python 使用元类实现单例模式

上次在工厂模式中提到了单例模式,说有空再写(咕)。啊不过也没咕多久啦~这篇博客就介绍一下如何用 Python 元类简单优雅地实现单例模式 。

在一些使用场景里,我们会希望某些类只能创建一个实例,以避免重复造成的资源浪费或是冲突等情况 —— 例如 Windows 系统下的回收站无论如何只能打开一个窗口 —— 这就算是单例模式的应用 。我们通过使用 Python 元类就能非常优雅地实现单例模式 。

......

Python 实现工厂模式

前几天订阅的 RSS 给我推送了 The Factory Method Pattern and Its Implementation in Python,于是就研究了一番工厂模式 。工厂模式从简单到复杂大约可以分为简单工厂模式(又称静态工厂方法模式),工厂方法模式(又称多态工厂模式)与抽象工厂模式;都是工厂(Factory)—产品(Product)—客户(Client)这样的基础架构 。作为一种创建型模式(Creational Pattern),工厂模式的核心理念就是让某个工厂类来负责生产对象(即产品),客户端只需要提供特定的参数即可;将对象创建和业务处理分离降低系统的耦合度,使得两者修改起来都相对容易 。本文依旧采用 python 实现这一设计模式 。

......

《流浪地球》豆瓣热评数据分析:热点、观点与反驳

我是在大年初二(即 2 月 6 日)观看的《流浪地球》,但我克制住了立马写影评的冲动 —— 一是因为影片前期宣传口碑火爆,我担心自己受到影响(事实上的确或多或少受到了影响)而带有偏见;二是我有预感这部电影会引起较大的争议,只是没想到围绕豆瓣爆发了一场如此激烈的口水仗 。2 月 14 日(即情人节)这天,我利用闲暇的单身时间编写 python 程序抓取了豆瓣短评热评中好、中、差评各 500 条并进行了数据分析与可视化,试图从一个更客观的角度解析这部争论不休的电影;而这些数据也的确为我提供了一些新颖的视角,我稍后会在文章中分析 。但首先声明:

  1. 我认为尽管《流浪地球》这部电影存在诸多明显的缺陷,但总体来说瑕不掩瑜,不失为国产科幻电影的一个良好开端;
  2. 观影体验因人而异,再优秀的电影同样也会有人不喜欢 。我尊重每个人对《流浪地球》理智的评价,即使你认为这部电影烂到透顶 。也欢迎你在下方评论提出不同观点;
  3. 尽管我不认同豆瓣上的某些低分评价中的观点,但我认同他们有逻辑条理的分析 。部分人情绪化地对一切反对声音发起谩骂式攻击,这样做与他/她们自己口中的水军又有何区别?

本文主要是影评,对技术部分感兴趣的朋友可以自行查看 GitHub Gist

......

Python 实现观察者模式/发布订阅模式

春节回乡拜年莫得电脑,于是窝在阁楼上看了些文字 —— 其中就包括发布订阅模式的一些相关内容 。发布订阅模式是设计模式中的比较简单一种;它定义了消息在生产者/发布者与消费者/订阅者之间传递的方式 。实际开发中我们通常会使用 Redis / ZeroMQ 等中间件来实现消息分发,但这里我只用 Python 来描述其中的逻辑关系 —— 使用其他语言乃至中间件的逻辑关系基本都是相同的,只有一些细节性差别 。值得一提的是,尽管多数情况下我们将观察者模式发布订阅模式混为一谈(或认为观察者=发布+订阅),但事实上它们之间存在一定的区别,这点我稍后也会提到 。

......

Python 学习手记:使用 smtplib 发送邮件

高中时期就用 Python 写过一个邮件发送脚本,但当时的逻辑处理得相当凌乱 。这次利用了一个周末晚上总结规整了一下 smtplibemail 模块的用法,并写了一个鲁棒性比较强且支持模板填充的邮件群发脚本 。这篇博客就简单记录一下 。

......

呓语:2018 / 2019

happy-new-year-2019

......

初步认识CGI/FastCGI:基本架构与C语言实现

最近在做 C 语言课大作业,一拍脑门就决定用 C 语言来实现一个 CGI 程序 —— 这是真实“文案一时爽,开发火葬场” 。总之花了一天时间总算是写出来了,虽然其中大部分时间都是在折腾 sqlite3 那些难懂的接口 。这篇博客就简单记录一下以下几个收获:

  • CGI 与 FastCGI 的概念与区别

  • 处理简单的 GET/POST 请求

源代码同样贴在 GitHub,欢迎参观 。

......

基于 Vue.js 实现递归树形导航栏组件以及页面锚点同步滚动

这篇博客的标题不是很直观 —— 事实上就是实现了类似百度百科(以及本博客 )的导航栏效果 。可以这样描述核心功能:

  • 首先,将正文内容按 H1 ~ H6 解析成递归的树形结构数据并映射到导航栏
  • 其次,在用户点击导航栏时将正文平滑滚动到相应锚点
  • 最后,当正文内容滚动时同步更新导航栏(高亮活动元素)

项目的全部源代码与效果图都在 GitHub 上,欢迎参观 。

......