SHUHARI 的博客

流光飞舞

重要通知: 本站将迁移到域名 https://shuhari.dev/, 原有域名 https://yuhao.space/ 将于一个月后过期。 如果您收藏了本站,请及时更新链接。给您带来不便,深表抱歉!

标签 编程

Themes 子站点上线了

Themes 子站点上线了

Visual Studio Code (以下简称 VSCode) 现在也是我日常使用的编辑器之一(其他还包括 PyCharm 和 Sublime Text)。和 PyCharm 相比,VSCode 更轻便一些,比 Sublime 则有更多的代码级别辅助功能,这两年发展势头很猛,算是一个比较中庸的选择吧。当然,重度的项目开发我依然会用 PyCharm。

QT 5.11.1 nativeEvent 实现有 bug, 好在 5.11.2 已经修正了

Qt
Qt

昨天碰上一个挺郁闷的问题。我们需要在 Qt 程序里处理某些原生 Windows 消息,本来这应该是个挺简单的事情。Qt 早期版本有一个专门的 winEvent 事件,但是用新版时发现这个函数已经换成了 nativeEvent,如果不需要关注跨平台的话,这个方法也没多大差别。重写该函数后,运行时方法倒是触发了,但从参数获得的却是一些匪夷所思的消息标志,简直百思不得其解。仔细看代码也发现不了什么问题,尝试了多种不同写法,无果。通过网络搜索,发现还有另一种方法是通过消息过滤器,即从 QAbstractNativeEventFilter 继承子类。按照这个路子走倒是正常了。因为时间紧,也没来得及深入思考,把程序直接提交了事。

JetBrains Rider 介绍

JetBrains Rider 介绍

概述

在 JetBrains 的产品大家族中,Rider 算是比较年轻的一款, 网络上的资料也比较少。不过,考虑到 Rider 主体程序的两大组成部分(IntelliJ Platform 和 Resharper Backend) 都已经发展了很多年,那么 Rider 也不能简单地看作一个新生儿了。如果你比较关注 JetBrains 官方信息的话,那么会发现最近一段时间 Rider 和其他产品相比出现的频率相当高,可见这个产品很受重视,开发也非常活跃。

Python 项目可以有多大

Python 项目可以有多大

总是看到有人说,动态一时爽,重构火葬场。然而这世界上有的是著名的开源项目, 也有像 Github、Instagram 这样流量巨大的知名网站是基于动态语言开发的,经过了这么多年重构,也未听说哪个作者进了火葬场的,不明白这些人是真的不知道还是装作看不见呢?不过他们说动态语言大到一定程度就无法维护,虽然这话也同样不值一驳,不过也提醒了我,我也很好奇用动态语言开发的项目规模能大到什么程度。

为什么不应该使用 (OLE)自动化

前言

我喜欢在回答问题之前先考虑另一个问题:这个问题合理吗?但提问题的同学未必会这么想。可能他们已经被项目的压力压迫到不想去思考了,只想得到一个简单粗暴的答案。这个过程其实是一件蛮痛苦的事情,因为我自己需要花额外的精力去思考问题的动机和背景,提问者却经常不领情,并且经常导致我们的对话不在一个频道上。

其中一个典型的案例是关于 Office OLE 自动化的(大部分是 Excel)。遇到这样的问题,我一般会直接建议放弃这个方案。至于提问者的反应则五花八门,虽然大多还算客气,但我能听出来背后通常有这样的意思:你不想答就不答管那么多干嘛。碰到这样的情况我通常选择沉默,因为很难用一两句话讲清楚自己的意思。但既然有自己的博客了,那么我还是花点功夫来解释一下我的想法。

PyCharm 小知识系列 - 设置(基本概念)

很多同学对 PyCharm 设置的直观理解就是打开 Settings 对话框看到的那一大堆东西。这样理解并没有错,但是在“盖子下面”其实并不是一个简单的平面式系统,而是一个层级式的复杂体系,有点类似于 Web 中的层叠样式表(CSS),同时还有其他一些鲜为人知的内容。本文将讲述这些概念和一些特殊的设置用法。

Paypal 支付 REST 接口介绍

Paypal 支付提供了两种风格的 API 接口(如下图),一种是 NVP/SOAP 风格的经典接口,另一种是比较新的、 RESTful 风格的接口。NVP 风格目前已经被视为遗留接口,官方推荐使用 RESTful 接口访问。但目前网络上流传的资料还是以 NVP 居多,介绍 REST 接口的比较罕见。

本文是对目前使用 Paypal 支付接口的一个总结,也供有类似需求的朋友参考。

6

为什么我(作为程序员)要避开中文

题目可能有些容易引起误会。作为中国人,我们在日常生活中当然要使用中文,这是没有疑问的。然而,在程序员的世界中,我会在很多情况下尽量远离中文。前几天有朋友问我一个有关 GBK 编码的问题,我不愿意回答,他很不理解。但这是我自己思考以后做出的选择。

我并无意让其他人都接受我的意见。不过还是有必要说明一下我做出这些选择的理由,是否认同就是你的事情了。我相信读者的背景和知识范围会对他的选择有极大的影响。所以,觉得百度是世界上最好的搜索引擎的同学可以 Alt + F4 了,这篇文章不是为你写的。

接下来我会说明,在哪些地方尽量不要使用中文,以及为什么要这样做。

那些我不想回答的坏问题

我喜欢在网站上浏览各种别人提出的问题。有耐心的回答者提供详尽丰富的内容能让人直接受益;有些问题不见得多么有意义,但看看别人大开的脑洞也挺有趣。

但很无奈的现实是:无论在哪里,没有营养的小白问题都占了大多数。尤其在 知乎 这样的地方,人家邀请你,你装没看见吧,不好意思;耐心回复吧,一遍遍解答入门级的问题对我没有任何益处。

说这些并不是因为我鄙视小白;没有人生来就是大牛的。包括我自己,在某些领域或许可以(有点心虚地)自称专家,但在其它不熟悉的行业我就是小白。不过,小白也有小白的道德。因此,我希望把自己看过的,不喜欢的、不合理的、会冒犯观众和回答者的情况,在这里总结一下;也希望以后再有类似问题时,能够直接把总结的内容丢出去作为答复,免得总是要在无意义的事情上浪费太多时间。

这篇文章可能没有多少深度可言,其实大部分内容别人已经说过很多遍了,主要是写给初级用户听/看的。对于有丰富网上问答经验的读者,建议看到这里就可以直接关掉窗口了。

1

用雷达图帮你做技术选型

软件开发行业一个经久不衰的主题是:如何从一堆不同的技术(语言、类库、框架、应用、数据库 etc...)中做出选择。这也难怪,因为可以选择的轮子实在太多了。

当这种问题出现的时候,通常看到的局面是——一群不关己事的人七嘴八舌的评论这个好,那个不好,有时候还会有人强行安利和问题本身不大的内容。结果往往并不好。因为提问者会问出这个问题,说明他自己缺少足够的背景知识,再听上这么多东拉西扯的意见,不昏头转向才对。

事实上,做技术选择也可以是有方法、有套路的。我在这里介绍一种有用的思考方法:雷达图。

Beyond What?——十年之后,谈谈 Ruby, Rails,过去和未来 (二)

Beyond Java

上一篇文章 中,我们讲到了 Ruby / Rails 为何没有如先前人们预期的那样成为业界开发的主流——主要是在技术的层面上。但我觉得似乎还缺点什么。

有意思的是,Rails 当初之所以被当作 Java 的继承者,主要原因是在开发效率上有10倍的差距(撇开其中的宣传成分不论)。而之后被众多网站弃用,则是因为在性能上比后继者有10倍以上差距——这个变化当然有点讽刺意味,却也道出了一个事实:开发的风向已经变了。

Beyond What?——十年之后,谈谈 Ruby, Rails,过去和未来

Beyond Java

2005年,Java 开发者和专栏作家 Bruce Tate 写下了 《Beyond Java》 一书(中译本《超越 Java》,2007年出版)。该书的主要目标是探讨 Java 企业开发的发展方向。尽管作者尽力避免对未来做出明确的预言,但通读全书后,含义仍然是非常明显的:以 Ruby 编程语言和 Rails 框架为代表的新一代编程技术将会超越 Java,引导下一个时代的开发潮流。

需要说明的是,该书提出的观点并不只是作者的个人意见,而是在很大程度上代表了当时很多具有前瞻思想的开发者、包括一些著名业界领袖的共识。要理解这一点,首先需要了解 Ruby / Rails 兴起的历史背景。

为 JetBrains 系列 IDE 设置背景图片

IDE
为 JetBrains 系列 IDE 设置背景图片

2017-12-04 更新:

在最新的 JetBrains 2017.3 系列中已经开放了背景图设置功能,因此本文的内容部分过时了。如果读者使用最新版 IDE 的话,请参考 最新文章: JetBrains 系列 IDE 开放了背景图设置选项,使用更简便的方法设置背景。

=========================================================

为 JetBrains 系列的 IDE 设置背景图片有两种途径:

  • 通过第三方插件;
  • 通过 IDE 自身提供的功能。

其中第一种(插件方式)已经存在很长时间,第二种(IDE)则隐藏的很深,通常很难发现,我也是最近才知道有这个方法,不知道 JetBrains 官方是怎么考虑的?

Nuget 批量删除工具

C#

Nuget Unlist app

由于代码调整原因,我需要将以前发布在 nuget 上的一些包进行清理。Nuget 并不支持对包进行物理删除,这可以理解,万一有人还在继续引用呢。但是 Unlist 这个操作就有点不人道了,那么多历史版本,要逐个在控制面板里操作,还要经过好几个页面跳转,那么多版本要点击到什么时候啊?

用面向对象方法组织 Flask 应用程序 (一)

OOP
Web

Flask

Flask 是著名的 Python Web 微框架,而 《Flask Web 开发——基于 Python 的 Web 应用开发实战》(OReilly出版社出品,以一只大狗作为封面,所以也有人戏称“狗书”)则是这一框架的经典书籍。特别是该书的第七章,描述如何将网站划分为多个模块,很多 Flask 网站都是参照该例子的形式进行规划的。

我的 个人主页 也用了 Flask 框架来开发,网站结构在很大程度上参考了该书的示例。但在开发过程中,我也感觉到该方式也有一些不够合理的地方,主要表现在:

浏览器是更强大的IDE

虽然我很多时间都在做和 Web 网站相关的开发工作,但很少有机会从另一个角度去看待这件领域。直到有一天,我和设计师沟通需求时,看着他在浏览器里打开开发工具,直接修改线上的网页样式,然后观察效果,这样反复几次,最后效果满意了,再把完成的样式复制到自己的设计稿里。

那一刻我被深深触动了。尽管从技术上说这并不是多么稀奇的事情,甚至我自己也做过好多次类似的事情,但是从旁观者的视角,却让我意识到自己过去一直不太注重的一个事实:浏览器实际上是一个非常强大的IDE,甚至比某些人喜欢挂在嘴边的“宇宙最强”,在某些方面更加强大。