趴边去!

CodeEcho
• 阅读 2313

趴边去!

昨天,一整天都在折腾,用 Python 写出来一个挺简单的 POV-Ray 代码生成器,解决了三维点集的可视化问题。今天对它又作了一些改进,之后又写了一个无向图的 POV-Ray 代码生成器。以后再有需要,还得为向量场、曲线等几何对象的可视化写相应的代码生成器。

这些举动,起因是系统里的一个软件包死活安不上。这个软件包的名字叫 PySide,我给它取了个好听的名字:趴边。

事情还得从 Qt 讲起。众所周知……不知道也无所谓,我以前经常用的一个三维软件叫 FreeCAD,因为它不仅支持三维点集的显示,而且还支持用户通过 Python 脚本对其进行功能的扩展,恰好我对 Python 的熟悉程度超过 C 之外的其他语言。我只需要写几份很简单的脚本就能在 FreeCAD 里绘制一大堆盒子与一大堆向量,这一切都令人身心舒畅。不过,这与 Qt 有什么关系呢?FreeCAD 的 GUI 是用 Qt 写的。更确切的说,是用了 Qt 的 一种 Python 绑定—— PySide 写的。

我的 Gentoo 系统里存在着两个版本的 Qt,即 Qt4 与 Qt5。之前一直都觉得无所谓,但是前些天忽然觉得有些不对。掐值一算,Qt5 都已经问世将近 5 年了,怎么我的系统里还有依赖 Qt4 的软件呢?之后,内心就开始不舒服了起来。又查了查,发现 Gtk+ 2 也还在我的系统里被一些包依赖着。

显然,现在还依赖 Qt4 或 Gtk+ 2 的软件包,这在很大程度上意味着它们正在走向坟墓。我送它们一程。先送 Qt4 的那堆,Gtk+ 2 再缓缓。因为我经常需要用 xournal 这个工具给他们批改论文,而它依赖 Gtk+ 2。

我检查了一下系统里所有依赖 Qt4 的包,发现只有 FreeCAD 依赖它。不过,FreeCAD 一直是我自行编译安装的,我看过它的编译配置选项,是支持 Qt5 的。所以,我决定把 Qt4 包删掉,然后重新编译一下 FreeCAD 就是。本以为很顺利,没成想上上个周,整个周末都没搞定。

问题出在 PySide2 上。PySide2 是对 Qt5 的绑定。之前,FreeCAD 用的是 Qt4 的绑定,即 PySide1。这个 PySide2 在 Gentoo 里装不上,因为它用了 clang 来解析 Qt5 的 C++ 头文件以实现绑定过程的自动化,可是它又用得不够好,以至于在 Gentoo 里,总是出现 stddef.h 找不到之类的错误,而这种错误显然很低级。Gentoo 开发者似乎也没搞清楚是怎么回事,他以为是 clang 版本的问题,并且是 PySide2 那边的问题 [1]。

在找办法的过程中,顺便了解了一下 PySide 的一些事。之前,我一直以为 Qt 的 Python 绑定是 PyQt。现在才知道,PyQt 就跟早期的 Qt 一个操性,商业使用要花钱买,免费使用就得遵守 GPL 协议。PySide 是 LGPL 协议,商业软件公司显然更喜欢 LGPL。所以,又出现了明明一个软件包就能解决的问题,非得分化出两个包。

PyQt 是一个商业公司开发的。PySide 这个包是之前收购了 Qt 的诺基亚公司开发的。微软收购了诺基亚公司之后,PySide 可能死过一段时间,后来又有人继续开发,直到今年的年初才发布 PySide2,并支持 Qt5。

它们这样起来一茬,倒了一茬,此起彼伏的搞,不令人厌倦誓不罢休。这让我再一次确信,几年前作出的「珍惜生命,远离 GUI 和 3D」的决定是绝对正确的。

我常用的 fish 终端、Emacs、gcc、nikola、Pov-Ray、ConTeXt、sed、gpg 之类的软件,这么多年了,从未坏过,而许多桌面软件,时不时就陷入半死不活的境地,甚至慢慢地就销声匿迹了。

问题出在哪呢?还要让 X11 背锅么?Wayland 要取代 X11 的呼声也喊了快有 7 年了吧?似乎不仅没有改变什么,反而把许多原本挺不错的软件送进了坟墓。GNOME 3 的革命也有 7 年了吧?说好的要运行在平板上,要运行在手机上,要运行在……今年 Ubuntu 又上演了剧情逆转的一幕,扔掉了自家开发的那堆,重新拥抱 GNOME 的大腿。

我觉得就是精英主义作祟,把原本很务实的东西随手就扔掉了,去追求一些镜花水月的东西。前段时间又有人开始埋怨 DBus 有这个问题那个问题,然后另起炉灶,要弄一个比 DBus 更好的 DBus……歪国人喜欢中国式的革命的人似乎不太多,但是实际上自由/开源软件社区里的人一直都在前仆后继地这么干。

Systemd 已经是许多 Linux 发行版的标配了,因为不用这个,就没法装 GNOME。我的一个笔记本上跑的 Debian,它前两年经过公投用上了 Systemd,结果它给我带来了什么呢,结果就是我经常不能迅速关机,时不时的就会让我等待 1 m 30 s。众人赞赏 Systemd 开机速度快,那关机速度慢的问题,难道就只有我一个人遇到?我台式机的 Gentoo 依然是 openrc,一直都没出过问题,尽管它开机并不是很快,但关机很快。

一个更先进的但是 Bug 迭出的软件,与一个性能虽然不太好,但是很稳定的软件,它们能做同样的事,选哪个?我选后者。所以,我宁愿用 Python 去写 POV-Ray 的生成器,然后很缓慢地渲染三维图形,也不愿意再用一个连安装都安不上的 PySide2 以及那些依赖它的软件。

以上,看似是在对开源软件发牢骚。非也。与 iPhone 每年都发布新款而导致 iPhone 爱好者在去年的 iPhone 还能用的情况下不得不扔掉也要「升级」为新款相比,开源软件社区里的这点破事也不值一提。

说到手机,我现在用于通话和短信的依然是一部诺基亚全键盘功能机。我也有一部智能手机,红米……想不起来是哪个版本了,没有插电话卡,平时就是当电子书和 MP3 用,有时不得不用微信或 QQ,也要用它。

[1] https://bugs.gentoo.org/624682

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Python 一键转化代码为流程图
!(http://pb3.pstatp.com/large/pgcimage/061d1b19a3bd48a3acba8988774974c5)Graphviz是一个可以对图进行自动布局的绘图工具,由贝尔实验室开源。我们在上次Python快速绘制画出漂亮的系统架构图提到的diagrams,其内部的编排逻辑就用到了这个开源工具包。而今天我们
Wesley13 Wesley13
3年前
C语言数据结构之图的基本操作
本博文是是博主在学习数据结构图的这一章知识时做的一些总结,代码运行环境:visualstudio2017纯C语言,当然掌握了方法,你也可以试着用其它的语言来实现同样的功能。下面的程序主要实现了对有向图,有向网,无向图,无向网,无向图的深度优先遍历,广度优先遍历,有向无环图的拓扑排序功能等。主要代码实现如下:1pragmao
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
SQL代码自动生成器
SQL代码自动生成器,效果图如下:!(http://static.oschina.net/uploads/img/201607/15200320_ZL9Z.jpg)!(http://static.oschina.net/uploads/img/201607/15200320_vPKS.jpg)!(http://static.oschi
Stella981 Stella981
3年前
Php5.5新特性 Generators详解
在PHP5.5.0版本中,新增了生成器\(Generators)_特性,用于简化实现迭代器接口_(Iterator)\创建简单的迭代器的复杂性。通过生成器,我们可以轻松的使用foreach迭代一系列的数据,而不需要事先在内存中构建要被迭代的对象,大大减少了内存开销。当生成器函数被调用的时候,它会返回一个可迭代的对象,当对该对象进行迭代
Stella981 Stella981
3年前
C#实现代码生成器【客户端】
做了2,3年的javaweb,始终木有逃离所谓基础业务,增删改查这些一成不变的东西写起来浪费大量时间,于是做了个简单的代码生成器快速生成代码生成器的原理其实很简单,都是基于模板实现替换,模板基于是Nvelocity。部分代码展示:【目前只支持mysql、oracle、sqlite三种数据库的连接有需要可以自己增加】singSy
Stella981 Stella981
3年前
PHP 生成器Generators的入门理解和学习
什么是生成器Generators生成器允许你在foreach代码块中写代码来迭代一组数据而不需要在内存中创建一个数组,那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样,和普通函数只返回一次不同的是,生成器可以根据需要yield多次,以便生成需要迭代的值。一个简单的例子就
Stella981 Stella981
3年前
Hibernate纯sql查询结果和该sql在数据库直接查询结果不一致
问题:今天在做一个查询的时候发现一个问题,我先在数据库实现了我需要的sql,然后我在代码中代码:selectdistinctd.id,d.name,COALESCE(c.count_num,0),COALESCE(c.count_fix,0),COALESCE(c
飞速低代码平台 | 风口上的低代码,专业开发者需要考虑哪些?
低代码平台采用可视化的声明性技术,而不是传统的编程方式,开发人员和非开发人员都使用这些技术,并显著减少了交付应用程序和自动化过程的时间和精力。即便如此,低代码对不同的人来说仍然意味着很多事情,因为在这个总称下存在几种工具类型:网站生成器、表单生成器、API连接器、数据库生成器、工作流自动化等。这里,我们将介绍低代码开发与“无代码开发”的区别、主要用例、平台使
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
DIY可视化 DIY可视化
11个月前
微信小程序可视化界面设计软件源码生成器
针对小程序的界面设计,DIY可视化实现设计一次打通设计师产品经理技术开发团队必备小程序界面设计软件代码生成器,从想法到原型到源码,一步到位小程序界面设计软件代码生成器。以更高的效率和更佳的效果完成设计任务