标签 [编程]

23
QT 5.11.1 nativeEvent 实现有 bug, 好在 5.11.2 已经修正了
昨天碰上一个挺郁闷的问题。我们需要在 Qt 程序里处理某些原生 Windows 消息,本来这应该是个挺简单的事情。Qt 早期版本有一个专门的 winEvent 事件,但是用新版时发现这个函数已经换成了 nativeEvent,如果不需要关注跨平台的话,这个方法也没多大差别。重写该函数后,运行时方法倒是触发了,但从参数获得的却是一些匪夷所思的消息标志,简直百思不得其解。仔细看代码也发现不了什么问题,尝试了多种不同写法,无果。通过网络搜索,发现还有另一种方法是通过消息过滤器,即从 QAbstractNativeEventFilter 继承子类。按照这个路子走倒是正常了。因为时间紧,也没来得及深入思考,把程序直接提交了事。
JetBrains Rider 介绍
概述 在 JetBrains 的产品大家族中,Rider 算是比较年轻的一款, 网络上的资料也比较少。不过,考虑到 Rider 主体程序的两大组成部分(IntelliJ Platform 和 Resharper Backend) 都已经发展了很多年,那么 Rider 也不能简单地看作一个新生儿了。如果你比较关注 JetBrains 官方信息的话,那么会发现最近一段时间 Rider 和其他产品相比出现的频率相当高,可见这个产品很受重视,开发也非常活跃。
Qt 5.11 生成文档需要 LLVM
最近,Qt 版本 5.11 发布了(变更内容可以看这里)。我也花了点时间下载编译了一回。原本以为只是一个小版本的变更,对于已经多次自己编译过 Qt 的我来说应该是轻车熟路(当然编译花费的时间依旧漫长)。没想到的是,主体程序的编译虽然很顺利,但编译文档时却出错了,提示 qdoc 不是合法的命令。到程序目录下面看,确实没有生成 qdoc.exe。 这是怎么回事?到官方网站上查找,发现这样的内容: Note: From Qt 5.11, QDoc requires clang from LLVM 3.9 for parsing C++ header and source files, and for parsing the function signatures in \fn commands. See Installing clang for QDoc for details. 原来编译文档现在需要 LLVM/CLang 了。按照官方描述的信息,下载 并安装 LLVM 当前版本,并设置 LLVM_INSTALL_DIR 环境变量到安装目录,然后再重新编译。在失败的目录上重新编译似乎是不行的,最好是删除原来的内容,配置好环境后,再整个重新编译。 再次经历漫长的编译时间,这次一切正常,qdoc 和所有 .qch 文件全部生成成功。
Python 项目可以有多大
.text-right { text-align: right; } 总是看到有人说,动态一时爽,重构火葬场。然而这世界上有的是著名的开源项目, 也有像 Github、Instagram 这样流量巨大的知名网站是基于动态语言开发的,经过了这么多年重构,也未听说哪个作者进了火葬场的,不明白这些人是真的不知道还是装作看不见呢?不过他们说动态语言大到一定程度就无法维护,虽然这话也同样不值一驳,不过也提醒了我,我也很好奇用动态语言开发的项目规模能大到什么程度。
JetBrains 系列 IDE 开放了背景图设置选项
我在之前的文章 为 JetBrains 系列 IDE 设置背景图片 曾经抱怨过,JetBrains 系列 IDE 已经有设置背景图的功能,但不知道为什么没有把它开放出来。就在今天早上,JetBrains 家族产品从 2017.2.x 系列更新到了 2017.3,其中的变化之一就是终于把这个设置放开了(如下图所示)。
为什么不应该使用 (OLE)自动化
前言 我喜欢在回答问题之前先考虑另一个问题:这个问题合理吗?但提问题的同学未必会这么想。可能他们已经被项目的压力压迫到不想去思考了,只想得到一个简单粗暴的答案。这个过程其实是一件蛮痛苦的事情,因为我自己需要花额外的精力去思考问题的动机和背景,提问者却经常不领情,并且经常导致我们的对话不在一个频道上。 其中一个典型的案例是关于 Office OLE 自动化的(大部分是 Excel)。遇到这样的问题,我一般会直接建议放弃这个方案。至于提问者的反应则五花八门,虽然大多还算客气,但我能听出来背后通常有这样的意思:你不想答就不答管那么多干嘛。碰到这样的情况我通常选择沉默,因为很难用一两句话讲清楚自己的意思。但既然有自己的博客了,那么我还是花点功夫来解释一下我的想法。
PyCharm 小知识系列 - 索引
PyCharm 小知识系列索引 PyCharm 小知识系列 - 设置(基本概念)
PyCharm 小知识系列 - 设置(基本概念)
很多同学对 PyCharm 设置的直观理解就是打开 Settings 对话框看到的那一大堆东西。这样理解并没有错,但是在“盖子下面”其实并不是一个简单的平面式系统,而是一个层级式的复杂体系,有点类似于 Web 中的层叠样式表(CSS),同时还有其他一些鲜为人知的内容。本文将讲述这些概念和一些特殊的设置用法。
Paypal 支付 REST 接口介绍
Paypal 支付提供了两种风格的 API 接口(如下图),一种是 NVP/SOAP 风格的经典接口,另一种是比较新的、 RESTful 风格的接口。NVP 风格目前已经被视为遗留接口,官方推荐使用 RESTful 接口访问。但目前网络上流传的资料还是以 NVP 居多,介绍 REST 接口的比较罕见。 本文是对目前使用 Paypal 支付接口的一个总结,也供有类似需求的朋友参考。
为什么我(作为程序员)要避开中文
题目可能有些容易引起误会。作为中国人,我们在日常生活中当然要使用中文,这是没有疑问的。然而,在程序员的世界中,我会在很多情况下尽量远离中文。前几天有朋友问我一个有关 GBK 编码的问题,我不愿意回答,他很不理解。但这是我自己思考以后做出的选择。 我并无意让其他人都接受我的意见。不过还是有必要说明一下我做出这些选择的理由,是否认同就是你的事情了。我相信读者的背景和知识范围会对他的选择有极大的影响。所以,觉得百度是世界上最好的搜索引擎的同学可以 Alt + F4 了,这篇文章不是为你写的。 接下来我会说明,在哪些地方尽量不要使用中文,以及为什么要这样做。
那些我不想回答的坏问题
我喜欢在网站上浏览各种别人提出的问题。有耐心的回答者提供详尽丰富的内容能让人直接受益;有些问题不见得多么有意义,但看看别人大开的脑洞也挺有趣。 但很无奈的现实是:无论在哪里,没有营养的小白问题都占了大多数。尤其在 知乎 这样的地方,人家邀请你,你装没看见吧,不好意思;耐心回复吧,一遍遍解答入门级的问题对我没有任何益处。 说这些并不是因为我鄙视小白;没有人生来就是大牛的。包括我自己,在某些领域或许可以(有点心虚地)自称专家,但在其它不熟悉的行业我就是小白。不过,小白也有小白的道德。因此,我希望把自己看过的,不喜欢的、不合理的、会冒犯观众和回答者的情况,在这里总结一下;也希望以后再有类似问题时,能够直接把总结的内容丢出去作为答复,免得总是要在无意义的事情上浪费太多时间。 这篇文章可能没有多少深度可言,其实大部分内容别人已经说过很多遍了,主要是写给初级用户听/看的。对于有丰富网上问答经验的读者,建议看到这里就可以直接关掉窗口了。
Nodejs 不适用于大规模服务端开发?
今天看到文章 Node之父Ryan Dahl:我不想被定义。 前面是 Nodejs 之父 Ryan Dahl 的个人经历,耳熟能详,倒也没什么好说的。倒是中间这一段:
Qt5.9.1 修正了编译问题
Qt 5.9.0 今年5月份已经发布了,但我下载以后,用 Visual C++ 2015编译却不成功,出现了一些奇奇怪怪的问题。当时因为时间有限,并且也没有资源可供参考(太新了),因此也就弃坑没有深究。 这两天偶然间发现 Qt 5.9.1 已经放出来了(看目录信息,真正放出来的时间应该是6月底)。下载回来用同样方法再编译,这次非常顺利的通过了。看起来上个版本确实存在问题,这次修正了。CHANGELOG 很简单,只说这是个 bug 修复版本,没有更详细的记录。 不过编译已经通过,并且 5.9 是 LTS 版本,我可以考虑逐渐把以前用 5.6/5.8 编写的程序迁移过来了。和 5.6~5.8 有一点不同的是,mkspec 中现在 msvc 不再像以前那样区分版本号(win32-msvc20XX),现在统一为 win32-msvc。在 configure 指令中简单调整一下就好。
用雷达图帮你做技术选型
软件开发行业一个经久不衰的主题是:如何从一堆不同的技术(语言、类库、框架、应用、数据库 etc...)中做出选择。这也难怪,因为可以选择的轮子实在太多了。 当这种问题出现的时候,通常看到的局面是——一群不关己事的人七嘴八舌的评论这个好,那个不好,有时候还会有人强行安利和问题本身不大的内容。结果往往并不好。因为提问者会问出这个问题,说明他自己缺少足够的背景知识,再听上这么多东拉西扯的意见,不昏头转向才对。 事实上,做技术选择也可以是有方法、有套路的。我在这里介绍一种有用的思考方法:雷达图。
Beyond What?——十年之后,谈谈 Ruby, Rails,过去和未来 (二)
在 上一篇文章 中,我们讲到了 Ruby / Rails 为何没有如先前人们预期的那样成为业界开发的主流——主要是在技术的层面上。但我觉得似乎还缺点什么。 有意思的是,Rails 当初之所以被当作 Java 的继承者,主要原因是在开发效率上有10倍的差距(撇开其中的宣传成分不论)。而之后被众多网站弃用,则是因为在性能上比后继者有10倍以上差距——这个变化当然有点讽刺意味,却也道出了一个事实:开发的风向已经变了。
Beyond What?——十年之后,谈谈 Ruby, Rails,过去和未来
2005年,Java 开发者和专栏作家 Bruce Tate 写下了 《Beyond Java》 一书(中译本《超越 Java》,2007年出版)。该书的主要目标是探讨 Java 企业开发的发展方向。尽管作者尽力避免对未来做出明确的预言,但通读全书后,含义仍然是非常明显的:以 Ruby 编程语言和 Rails 框架为代表的新一代编程技术将会超越 Java,引导下一个时代的开发潮流。 需要说明的是,该书提出的观点并不只是作者的个人意见,而是在很大程度上代表了当时很多具有前瞻思想的开发者、包括一些著名业界领袖的共识。要理解这一点,首先需要了解 Ruby / Rails 兴起的历史背景。
为 JetBrains 系列 IDE 设置背景图片
2017-12-04 更新: 在最新的 JetBrains 2017.3 系列中已经开放了背景图设置功能,因此本文的内容部分过时了。如果读者使用最新版 IDE 的话,请参考 最新文章: JetBrains 系列 IDE 开放了背景图设置选项,使用更简便的方法设置背景。 ========================================================= 为 JetBrains 系列的 IDE 设置背景图片有两种途径: 通过第三方插件; 通过 IDE 自身提供的功能。 其中第一种(插件方式)已经存在很长时间,第二种(IDE)则隐藏的很深,通常很难发现,我也是最近才知道有这个方法,不知道 JetBrains 官方是怎么考虑的?
用面向对象方法组织 Flask 应用程序(二)——组织 Blueprint
在 上一篇文章 我说过示例程序中的 Blueprint 存在设计问题,即 Blueprint 和视图函数存在着循环引用。
Nuget 批量删除工具
由于代码调整原因,我需要将以前发布在 nuget 上的一些包进行清理。Nuget 并不支持对包进行物理删除,这可以理解,万一有人还在继续引用呢。但是 Unlist 这个操作就有点不人道了,那么多历史版本,要逐个在控制面板里操作,还要经过好几个页面跳转,那么多版本要点击到什么时候啊?
用面向对象方法组织 Flask 应用程序 (一)
Flask 是著名的 Python Web 微框架,而 《Flask Web 开发——基于 Python 的 Web 应用开发实战》(OReilly出版社出品,以一只大狗作为封面,所以也有人戏称“狗书”)则是这一框架的经典书籍。特别是该书的第七章,描述如何将网站划分为多个模块,很多 Flask 网站都是参照该例子的形式进行规划的。 我的 个人主页 也用了 Flask 框架来开发,网站结构在很大程度上参考了该书的示例。但在开发过程中,我也感觉到该方式也有一些不够合理的地方,主要表现在:
Qt 直接定位下载地址
Qt 5.9 发布了,这是一个LTS(长期支持)版本,应该值得好好研究。 然而不得不说,最近几年从 Qt 官网明显感觉到商业化味道越来越重了,下载 SDK 要你先填一堆个人资料,让人感觉很不舒服,而在不同页面跳来跳去的体验也让人抓狂(速度问题我就不说了,这个锅大概应该让墙来背,不怪你)。 好在 Archive Repository 现在还是可以直接访问的。如果有不想跟官网捉迷藏、或者和我一样,不希望为了下载一个开发包而把个人资料交出去的同学,请温柔地点击如下地址: Qt Archive Repository
浏览器是更强大的IDE
虽然我很多时间都在做和 Web 网站相关的开发工作,但很少有机会从另一个角度去看待这件领域。直到有一天,我和设计师沟通需求时,看着他在浏览器里打开开发工具,直接修改线上的网页样式,然后观察效果,这样反复几次,最后效果满意了,再把完成的样式复制到自己的设计稿里。 那一刻我被深深触动了。尽管从技术上说这并不是多么稀奇的事情,甚至我自己也做过好多次类似的事情,但是从旁观者的视角,却让我意识到自己过去一直不太注重的一个事实:浏览器实际上是一个非常强大的IDE,甚至比某些人喜欢挂在嘴边的“宇宙最强”,在某些方面更加强大。
IDE的现实分析 - 答“开发一个IDE难度有多大”
本文是看到知乎问题 开发一个IDE难度多大? 之后产生的想法。古人云:与其坐而论道,不如起而躬行。世界上已经有很多开源的IDE了,我们完全可以拿一个现实的例子来分析,知道实现一个IDE到底有多大的难度。