simplicity is prerequisite for reliability

在软件业,AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。

AOP 是我最常用的一种黑魔法了,在 Java 中它常常作为依赖注入框架的一个重要功能为人所知,在 Python 中它披上马甲,以 Monkey Patch 的名义行走江湖。

Java 9 是半年前推出的新版本,以模块化系统这个近乎于 Breaking Change 的特性为主要卖点之一,其发行版在目录结构上与 Java 8 相比有了巨大差异,原本巨大的 rt.jar 被拆散到各个「精心规划」的模块中,tools.jar 也不见了踪影。

Read More...

半年前我做了一个 side project,把 pip 魔改一番,使得我能够将 Maven 的 Nexus 仓库作为 pip 的后端仓库。于是原本通过 pip install xxx==version 命令,我们可以从 https://pypi.python.org/simple/ 把指定版本的包下载下来然后安装,我可以用 mpip install xxx==version 从公司内网的 Nexus 仓库下载包然后安装。

之所以做这么个工具,是因为公司没有提供一个内部的 pypi 服务器。Python 不是公司的主流语言,公司自然不会投人力物力去维护这么一个服务,如果由我所在团队自行维护,又得付出额外的人力物力,并不是十分划算。于是我们之前的做法是将系统依赖的三方包,不管是 whl 还是 tgz,直接放在代码目录里,然后在生成部署包的时候再复制、安装。

Read More...

周日深夜,我把代码分享到了 Github,用的 MIT 协议,详见 JamesPan/pdf-smart-crop。原本还想着把注释文档和单元测试写了再分享代码的,后来实在是懒了。所以说啊,这些东西如果开发的时候不好好写,以后就更没有动力去写了。

前作「Smart Crop,一种切除 PDF 扫描文档白边的新选择(算法篇)」分享了 Smart Crop 的算法设计、基本用法和脑洞,这里分享一下实现过程中遇到的问题和妥协。

Read More...

春节期间我弄了一个东西,我把它叫做“黑科技”,用到了编译期代码生成技术。Demo 做出来之后我很是开心了一段时间,因为它在性能上能够把现有的参考实现甩几条街,毕竟原生代码的性能比反射不知道高到哪里去,而参考实现恰恰是用反射实现的。虽然我的实现在扩展性上比参考实现弱了一些,而且写代码的时候 IDEA 总是不识相的报告找不到类定义……IDEA 找不到类的话,我只要执行编译把代码生成出来就好了,扩展性后面我会搞定的。

这几天我在做项目的时候,花了几个小时把这个黑科技从我的 Demo 项目迁移到了生产代码中,然后做了大量的改进。

Read More...