架构漫谈系列(2) 封装(Encapsulation)

这是这个系列的第二篇。在第二篇里,我决定讲一讲封装。
程序的不同部分应该用封装去互相隔离,模块之间应该不应该产生很随意的关联。

可能有的人觉得不解,又或觉得是有道理的废话,不急,先一步一步来。

我们先来看看面向对象的三个基本特征是什么?
– 继承
– 多态
– 封装

如果你是科班毕业,这6个字应该是你第一次学到类(class)的时候就听老师说了。 继续阅读架构漫谈系列(2) 封装(Encapsulation)

架构漫谈系列(1) 关注点分离

很想写相关的内容,一直以来这方面的东西很杂,自己各方面都多多少少有些总结,但是没有系统的成文,始终觉得是个遗憾。
这是这个系列的第一篇。
本文说的架构,还并不是说的Tier层的架构,这里面不会涉及到分布式、缓存、网络结构等等的布局,而是集中在软件的内部,是代码层级的,考虑这点架构的点,目的是在于帮助我们写出清晰、易维护的软件。

关注点分离(Separation of concerns, SoC)

这个准则应该作为我们开发和架构的指导性的原则。在该原则下,软件应该按照其业务来将软件本身划分成不同的部分,从而进一步降低耦合性,不过,这感觉是句废话,大家好像都懂。
继续阅读架构漫谈系列(1) 关注点分离

Caching漫谈–关于Cache的几个理论

如今缓存是随处可见了,如果你的程序还没有使用到缓存,那可能是你的程序并发量很低,或对实时性要求很低。我们公司的ERP在显示某些报表时,每次打开都需要花上几分钟的时间,假如搜索引擎也是这么慢,我想这家搜索引擎早就被淘汰了。
这些ERP报表是否该引入缓存加速一下呢……
使用缓存,就是在取出数据结果后,暂时将数据存储在某些可以快速存取的位置(例如各种NoSQL如Redis,HBase,又或MemoryCache等等),于是就可以让这些耗时的数据结果多次重复的利用,不必每次重复请求相同的数据,节省CPU和I/O,加速程序的响应。
使用缓存能让加载数据的延迟降低,I/O操作减少,从而性能得到提高。
缓存使用起来很容易,但是保持缓存的一致性却困难得多。有一些前人总结的经验和方法,我们可以借鉴一下。
缓存重点在于写入的时候,相关数据的更新问题,如果数据一直没有更新或删除操作,那缓存就不会存在脏数据一说了。
关于缓存写入,至少有4种写入的策略。

write-through

这个动作发生在Cache层。是指在写数据时,同时写入到缓存和DB中,这个写入操作认为是一个单一的事务,也就是说,在更新Cache时,我们先更新了Cache中的数据,然后接着更新Db中的数据。在DB的数据完成更新前,程序还不会返回,一直等到数据库存储的结果。可想而知,这种做法不会给写入数据带来更高的性能。
继续阅读Caching漫谈–关于Cache的几个理论

PyQt5环境搭建及cx_freeze打包exe

Python的图形库也有好几个,Qt文档和使用面还是要广一些。
打包成可执行文件的也有好几个,PyInstaller用的比较多,但是PyInstaller目前还不支持Python3.6(开发版支持3.6,但是我测试我的项目,打包出来的exe执行结果有问题)。
于是就选择了PyQt+cx_freeze。
安装PyQt5和cx_freeze用pip命令即可安装,非常方便。

pip install PyQt5
pip install cx_freeze

安装完毕后,测试一下:
继续阅读PyQt5环境搭建及cx_freeze打包exe

Python爬虫-爬小说

用途

用来爬小说网站的小说默认是这本御天邪神,虽然我并没有看小说,但是丝毫不妨碍我用爬虫来爬小说啊。
如果下载不到txt,那不如自己把txt爬下来好了。

功能

  • 将小说取回,去除HTML标签
  • 记录已爬过/未爬过的章节
  • 从最后爬过那一页开始继续爬,不会重复爬取爬过的目录
    因为爬过的章节是要有顺序的,目前版本还没有支持多线程。(线程混乱分不清章节先后)
    继续阅读Python爬虫-爬小说