还是选择放弃使用 Eve 作为 RESTful 框架的选择

虽然,Eve 框架很强大,也是基于 Flask,但是我还是选择放弃使用 Eve 了。几点原因:

  1. Eve 内置直接支持的数据库是 Mongo,我们已经不准备在 Mongo 上投入资源了。
  2. Eve 对额外的数据库的支持需要通过 eve-sqlalchemy,来调用 sqlalchemy 和 flask 等,这样就把问题搞的有点复杂化了。等于 flask、sqlalchemy、flask-sqlalchemy、eve、eve-sqllchemy,组合在一起,才能通过 orm 来支持各类数据库。
  3. Eve 的使用还是非常复杂的。
  4. 比较下来 flask-restful 框架就足够了。

flask-restful 框架通过将 class 直接转换为 RESTful 接口:

# Todo
# shows a single todo item and lets you delete a todo item
class Todo(Resource):
    def get(self, todo_id):
        abort_if_todo_doesnt_exist(todo_id)
        return TODOS[todo_id]

    def delete(self, todo_id):
        abort_if_todo_doesnt_exist(todo_id)
        del TODOS[todo_id]
        return '', 204

    def put(self, todo_id):
        args = parser.parse_args()
        task = {'task': args['task']}
        TODOS[todo_id] = task
        return task, 201

用类似下面的方法就直接 ok 了

##
## Actually setup the Api resource routing here
##
api.add_resource(TodoList, '/todos')
api.add_resource(Todo, '/todos/<todo_id>')

对于上面 Todo 这个 class 中数据怎么来,这不是 flask-restful 关心的,我们可以使用 flask-sqlalchemy 来完成这些和数据库操作的真正业务逻辑。

我一直觉得选择 flask 是正确的,它在很多理念的设计上也像微服务框架,每个人做好自己的事情,互相有一个约定来达到协同。

从 git 仓库看,flask-restful 的更新也还不错。

当然用了这个的话,Eve 框架很多强大的比如根据配置文件就能生成接口的能力,就要自己想办法了,初步考虑因为整个这些探索和设计都是为了自动根据数据库来生成 RESTful 接口程序,所以可以使用 DSL 来描述接口要求,将 DSL 转换为基于 flask 体系的 python 程序,来达到这个目的。

和美剧人物撞衫了

好像是前年在 amazon 上买过这件 tee,没想到在最近看的美剧 Salvation 救世 中看到了。也难怪,这个角色(也算主角之一吧)的定位就是一个极客,专注于技术而不太懂别的。我大概也是属于这个类型的。

这个 tee 都是纪念摇滚音乐,所以我也很乐意看到,JOY DIVISION 被翻译成:任逍遥。

Lazarus 1.8.0 发布

基于 freepascal 3.0.4 的 Lazarus 1.8.0 在12月初发布了。比较了 Delphi 之后的 GUI 开发工具,特别是在用 Python 的时候,也很不死心的想看看怎么样用 Python 来开发桌面应用,不管是基于 Qt,或者 Python 自带的 Tk,都一般吧。或许 Delphi 曾经太强大,已经超过了同时代的所有产品。VB 我已经要二十年不使用了,不知道如何,dotnet 架构现在应该也可以运行在 OSX 下了。

虽然 gdb 的安装还是很奔溃,Borland 当年的 Turbo C 2.0 横空问世现在想想是一件很恐怖的事情,在差不多20年前的电脑上,Delphi 可以几乎几秒就完成一个程序的编译。如果没有 IDE 的话,我们要耗费多少时间在安装、配置以及每次冗长的编译过程。其实 Delphi 还是占据了当前开发市场不小的份额,不过,太贵了。

偶尔如果需要写一些跨平台的小工具,那么 Lazarus 或许是不错的选择,Lazarus 的风格还是像一个增强版的 Delphi 7,不过也的确够用了。

最关键还是配合 Lazarus 和 FreePascal 背后的这些程序员、项目组织者,很不容易,坚持这么多年,逐步完善。

DSL,是否可以简化常规开发的复杂度?(1)

你知道 DSL 技术么?我认为 DSL 是适应目前多变的业务需求和需要稳定的底层系统的一座桥梁。

DSL,Domain Specific Language,领域特定语言。

DSL,是否可以简化常规开发的复杂度?到底是否存在终极武器?从 dos 年代到现在的云,开发越来越复杂。

开发一个可视化的 web 系统,来完成一些业务场景的定制,其实是非常耗费资源的。简单的例子如报表中心,每一份报表需要定义数据来源、呈现格式和计算规则、查看权限等,通过程序来实现这些功能,提供给报表制作人员的确是一个很好的注意,很多的报表类产品也是这样做的,但是我觉得这样系统的复杂度以及本身要考虑的细节非常之多。我们之前使用过 Oracle 的 BIEE,功能强大,但是用户体验很不好,造成的结果是制作一个报表的时间很长,如果需要修改的话,大部分的业务逻辑需要使用报表的人员向制作报表的人员提出,周而复始。面向大众的软件,即便是 Microsoft Office,也是需要学习曲线的,并且微软基本上也不会为用户来做功能定制,因为 Office 软件有强大的 VBA 来完成这些。

我们要做一个报表系统,但我们不是提供一个可视化的编辑系统,也不提供复杂的数据库连接工具,当然也不需要用户有太多 SQL 的知识。用 DSL,提供一种简单的接近自然语言的描述,然后通过解析,生成用户所需要的报表。我们开发这个系统的工作量主要是设计 DSL 以及解析引擎,当然一个包含主要功能的外壳还是需要的。实际上,我们已经在一些报表呈现,传统上所说的 Dashboard 上进行了实践,从概念到如今,也有四年之久,在最近的一个项目中,通过还略显粗糙的 DSL,从数据库连接到界面呈现,都自动化完成,传统意义上制作页面、切页面、写 SQL 都通过 DSL 的原理基本半自动化了。很感谢这些聪明的同事们。接下来的挑战自然越来越大。如何构造一套更加容易使用的 DSL、用在更加复杂的场景、提高解析效率等。只是用 DSL 来构造用户界面、固定的用户操作以及数据库连接,我们不太满足。

说说容易,以上这些是对于业务系统设计多年的反思,除了耳熟能详的那些中间件和越来越成熟也越来越复杂的云技术以外,系统业务逻辑的复杂和多变是事实,人工智能除了人脸识别以外可以做的事情太多了,而大数据不光是 hadoop 这六个字母,他们是真正的自动化、推理、演绎的基础。

下次再聊!

Flake8 Rules

The standardization of writing in programming languages is very important, good programming practices can prevent a lot of bugs.

Python is a language with more freely formatting, so it’s important to follow the famous flake8 rules.

The following article explains in detail every rule of the Flake8, it’s worth learning.

The Big Ol’ List of Rules

I like Pycharm because it can automate monitoring of these rules, so we can write the elegant Python program.

Pycharm 2017.3 发布

我始终认为用敏捷开发的方式持续升级是一件很恐怖的事情,因为不断的提升功能和性能同时又和市场贴近,产品就会非常有竞争力。

Pycharm 就是这样一款产品。Pycharm 2017.3 今天正式发布了,这次主要提升的是各类性能、科学计算、Rest 调试工具等,详细情况可以到 JetBrains 官网查看。

https://www.jetbrains.com/pycharm/whatsnew/#v2017-3-python

最近开始尝试用 Go 语言来进行服务端的测试,我始终不太喜欢 Java 的啰嗦。JetBrains 的 Go 语言工具目前还是在测试中,希望能够尽快提升功能和稳定性,现在这样一个月一个的早期测试版本使用起来也不是很方便。


I always think it’s a wonderful thing to keep upgrades in an agile way, because of the continuous promotion of features and performance and the close to the market, the product will be very competitive.

Pycharm is such a product. Pycharm 2017.3 was officially released today. The main promotion is all kinds of performance improved, scientific computing, Rest debugging tools, and so on. The details can be examined on the JetBrains website.

https://www.jetbrains.com/pycharm/whatsnew/#v2017-3-python

Recently I started trying to test writing server with the Go language. I don’t love Java verbose. JetBrains’s Go language tool is still in the early beta test, hope to improve the function and stability as soon as possible. It is not very convenient to use an early test version that I need update every month.

 

Flask, Sanic and Eve, Three Good Web Frameworks For Python

Prepare to improve my English writing ability. I know my English is very stiff, grammar also has many problems. But I still try to persist it. Thanks and sorry for my poor English

In recent years, the performance of Python has been greatly improved. Base on highly asynchronous event processing ability, web framework of Python have been greatly improved. After continued follow-up.  I think the following frameworks are worth future study.

In normal working hours, We use Flask as a web service framework. So I have some preference for flask-like type.

  1. Flask. http://flask.pocoo.org/  We all know, flask has long history and has stable performance. It’s a micro framework and has a lots of extensions. So it’s lightweight and configurable. I believe we will continue to use flask as the mainly web service framework for a long time. The latest version is 0.12.2.
  2. Sanic. https://github.com/channelcat/sanic This is a magical tool, it’s improve the web service performance by using asynchronous technology by Python 3.5+. In practical application, I think flask is enough. Flask can easily do hundreds concurrent in basic server on the cloud. But I believe it, The performance improvement is endless. In particular, the introduction of more and more Micro-Services framework requires that web service framework has strong ability. Sanic web framework much like flask, therefore, the learning and migration costs are relatively low.The latest version is 0.6.0.
  3. Eve. https://github.com/pyeve/eve Eve framework is based on flask, and mainly target is Restful API. As mentioned above, Restful API based design has became the standard in today’s internet application. Eve framework through the configuration file to quickly setup the restful api program. Design of Eve is very smart, we can learn a lots of python programming skill from it.

Currently, based on Flask, I’m studying Sanic and Eve, first, improve program skill of web service. Second, improve my English. At last, python is a profound script language, we will study lots from these famous frameworks, and I will continue share my study notes here. Looking forward to everyone’s correction.

终于新书完成

没想到前后居然还是花费了半年时间,本来想在8月完成的,一直因为内容和组稿的关系,拖拉到11月底。之后应该还要再等2个月,出版社印刷出版。

刚毕业的时候,很有冲劲,几乎一个人完成了一本书,耗时一年,当时写的 Visual Basic 的书和工作并不太大关系,现在看看这个书写的很幼稚,也充满了老气横秋的语句。

之后觉得写书太辛苦,在1997年应该是投稿之年,发表了20篇,偶然整理旧物,当时的文章简报都在。

然后出了零星的文章以外,就发表的少了。从2003年开始 blog,喜欢这种不受拘束的形式。

今年,2017年初,也是巧合,之前也想过的出书小结一些自己和团队这么多年互联网领域努力的成果,但是不太了解出版的行情,如今才知道,原来出版行业也是商业化运作了。

从2015年初开始重新学习 Python 到各类实践,以及同事们在机器学习方面的探索。为了把 Python 研究的更加好,参与了一些内部培训材料的编写。当然也发现外面各类鱼目混珠的教材太多了。且大多数国人不太有分享精神。我们并不是因为自己厉害,而是愿意分享,总是有人需要入门。特别是机器学习方面,国内要么只说结果,要么翻译一些国外的课件,鲜有真正的原创分享。技术从来不应该是保守的敝帚自珍。

我的所作所为就是喜欢这些作为,而不是要证明自己,也不是取悦他人。