0%

最近用vscode远程开发功能调试一台centos虚拟机上的python的时候遇到connection refused问题,而之前在windows本地环境一直是好的,非常奇怪。研究了2天的时间,才把问题找到,通过定位问题,把vscode的调试器的架构也有了更深入的了解,下面记录下问题定位过程。

阅读全文 »

Elasticsearch目前的发展可谓如日中天,DBEngine上在搜索引擎领域位列第一,作为后来者热度远高于排第二、三的Splunk和Solr。Elasticsearch的创造者叫Shay Banon,最初是因为Lucence的接口使用困难,开发了一个库Compass,让Lucence更好用,2010年Shay Banon对Compass进行重写,把它变成一个高性能的、分布式的服务端软件,取名叫Elasticsearch,并在github开源。这背后还有一个温情的故事,据说起因是为了给新婚老婆写一个菜谱搜索应用,但是最后菜谱应用没有写出来,倒是造就了一个伟大的软件。

Elasticsearch发展非常快,2010年2月发布第一个版本,2012年成立Elastic公司,2014年开始商业化,2018年纽交所上市,在全球股市低迷的背景下上市当天仍大涨94%,创造了开源软件的传奇。而Elastic公司非常的厚道,坚持开源路线,从6.3版本开始将其收费部分x-pack也"开源",x-pack的基础功能终身免费,不需要注册,其中就包括安全方面必须的HTTPS,权限控制等。

今天开始我想通过一系列文章来探索和学习一下ES,第一篇介绍一下ES的基本概念,搭建单节点的ES,通过图形客户端去探索ES的数据结构和操作,通过监控了解ES运行状态,建立对ES总体上的一个认识。

阅读全文 »

Spring Boot已经成为开发web应用的标配,通过Spring Initializr创建Spring应用时,Spring Boot已经是必选项。Spring官方提供两个重要开发工具:

  • Spring Tools 4:包括eclipse、vscode和Theia三个版本,其中针对eclipse的就是之前的STS(Spring Tools Suit),是一个基于eclipse的定制版本,而针对vscode的其实就是Spring Boot Extension Pack,是一系列vscode插件。其中Spring Boot Dashboard插件提供对spring boot应用的调试支持。
  • spring initializr:用于创建一个spring模板项目,目前Spring Boot是必选项。

如果你使用的Spring Boot,那么vscode调试不是问题,已经有很好的支持。但是你可能出于学习的目的,创建的单纯Spring mvc项目,那么调试就需要一番折腾了。

阅读全文 »

spring cloud中有几个重要的组件,深入理解它们之间的关系才能更好的使用它们:

  • ribbon:实现服务定位和客户端负载均衡;
  • hystrix:实现服务熔断、服务降级、资源隔离等;
  • feign:声明式的http客户端,用于服务之间的http调用。相比于resttemplate,feign与ribbon和hystrix集成更友好,是spring cloud的顶层组件。

上述ribbon和hystrix都是netflix贡献组件,目前它们都处于维护模式,不再增加新特性,将逐渐被spring cloud官方组件取代,例如从Hoxton.M2开始整合spring-cloud-loadbalancer用于替换ribbon,但目前还不成熟,还是老老实实用ribbon,而断路器方面spring cloud抽象了Spring Cloud Circuit Breaker,hystrix只是其中一个实现,还有其他实现可选,例如阿里贡献的sentinel

阅读全文 »

因为github屏蔽了baidu的页面抓取,所以baidu一直无法索引自建博客。而在国内毕竟baidu的使用量还是更大,为了让自己的博客有更多人访问,还是需要打通这条通道。查找了一些网上资料,解决办法可以通过使用国内的类似服务coding pages作为镜像。

coding在国内云端开发者服务里有良好的口碑,2019年被鹅厂收购,当时广大码农担心又一个好技术被葬送,现在来看有鹅厂的加持,coding发展还是不错的,也为广大开发者提供更多实惠。所以如果你正在选择一个建站方式,直接使用coding pages也是个不错的选择。下面说下已经使用github pages时如何解决baidu无法抓取页面问题。

阅读全文 »

模块化是设计软件的一个基本手段,将软件模块化使得模块可以被复用,可以独立维护。Spring boot应用通常使用Spring initializr创建,它是不支持多模块创建的。多模块构建的能力是构建工具所提供,也就是Maven或Gradle。一些高级的IDE,如JIDE,可以支持多模块创建,就是帮你修改好Maven或Gradle的脚本。你可能使用的vscode这类编辑工具,但是也想体验一下多模块,那么就只能手工修改构建脚本。

Gradle是基于Groovy语言构建出来的一个特定领域语言(DSL),用来进行项目的构建。我觉得它和C++领域的CMake比较像,但是CMake是完全特化的脚本语言,而Gradle是基于JVM上的脚本语言Groovy构建,其编程和扩展能力远远超过CMake,Gradle也支持C++语言的构建。一个Gradle脚本是后缀为gradle的文件,其中通常为DSL语句,具有特定的格式,这能降低脚本的编写难度,同时你也完全可以参杂进Groovy语句,实现更复杂的功能。同时借助插件,还可以很容易扩展这个DSL,实际上Gradle大部分功能都是通过插件实现的。

从网络上可以搜索到很多关于如何构建Gradle多模块项目的资料,但是它们都有共同的问题,所使用的Gradle版本较低,按照其方法都有一些问题。本文基于目前最新的版本,总结一下创建多模块Gradle项目的问题。

阅读全文 »

2019年的冬天爆发新冠病毒疫情,而我正处于这次疫情的中心武汉,除夕我带着大儿女回到武汉郊区的农村老家,而老婆带着刚满一岁的小儿女留在武汉城区,那个时候已经公布人传人,武汉也刚封城,我虽然意识到严重,但还没有惊慌,执意回了老家。直到后来确诊人数暴增,大量疑似病人无法入院治疗,网络上各种无助的求救,才开始担心起来。现在回想起来决定回老家非常冒险,万一感染亲人将不堪设想。

春节过后,因为疫情,工作中多了一些相关的统计工作,例如统计在家远程办公时长、统计复工情况、统计外地返汉信息等等,经常需要把团队的反馈合并到一起,非常的繁琐。于是我开始寻找一款能够协同编辑的在线表格,让我找到了Airtable,瞬间解决了困扰我的问题,真是如获至宝。

随着复工时间一再推迟,在家远程办公将成为一种常态,怎么做好远程办公是需要好好琢磨的一个事情。怎么样让大家分散各地,但是能够行动一致、高效的工作,是非常有挑战的。这周经过一番折腾,利用Airtable把团队的任务管理起来,我觉得是一个很好的尝试,也让我更加喜欢上Airtable。

Airtable解决了一个很重要的问题,就是度量和可视化。所谓没有度量就没有改进,管理中需要量化各种数据,这些数据会成为一把戒尺,有意无意中规范影响大家的行为。选择什么的度量指标,是因时因事而异的。再好的项目管理软件也不可能面面俱到,满足各种需求。而Airtable的纯粹,就是为了处理数据、显示数据,可随心所欲定制,成为了它的过人之处。

下面我就详细说说,我是怎么几小时内就用Airtable打造一个软件开发任务管理系统,我对它非常满意,而如果要开发一个类似的项目管理系统绝不是一时半会能办到的。

阅读全文 »

c++对内存的原始控制是其优势,同时带来一系列灾难性问题,例如野指针问题、内存泄漏问题、内存碎片问题,在c++世界这是非常常见而棘手的问题,其实这些问题早有成熟应对方案,就以boost为例,早就包含相关库,有些已经成为c++标准库。c++解决内存方面的技术有:

(1)智能指针:解决野指针、内存泄漏问题;

(2)内存池:提升内存分配效率,解决内存碎片问题;

(3)flyweight:解决大量重复对象对内存的浪费。

下面通过一些实例介绍boost对上述技术的实现。

阅读全文 »

最近在vscode中重构python代码,修改符号名时总是失败,报如下错误:

Refactor failed. expected string or buffer
[(‘refactor.py’, 294, ‘watch’, ‘self._process_request(self._input.readline())’), (‘refactor.py’, 275, ‘_process_request’, “request[‘start’]), request[‘name’], int(request[‘indent_size’]))”), (‘refactor.py’, 206, ‘_rename’, ‘refactor.refactor()’), (‘refactor.py’, 117, ‘refactor’, ‘self.onRefactor()’), (‘refactor.py’, 139, ‘onRefactor’, ‘changes = renamed.get_changes(self._newName, task_handle=self.handle)’), (‘D:\Programs\Anaconda2\lib\site-packages\rope\refactor\rename.py’, 97, ‘get_changes’, 'new_content = rename_in_module(finder, new_name, resource=file)’), …

从报错中可以看到重命名用到了rope,推测可能是rope有bug,经过一番尝试,有两种解决方法。

阅读全文 »

关注C++的包管理有一段时间了,一直非常羡慕python、java的同学,有非常完善的包管理工具,使用第三方库非常方便。2016年底开始接触到conan,后来又发现vcpkg,两者都是github开源项目,前者后来得到jfrog的支持,其artifactory也增加了对conan包的支持,而后者是大牌microsoft维护的。

conan和vcpkg的出现终于让人眼前一亮,经过1年的发展,到2018年它们相对成熟起来,而我们的产品也急剧膨胀,迫切需要包管理的机制,因此我下定决心将包管理引入到产品中。

到底选择conan还是vcpkg,有两点使我们必须选择conan,一是跨平台,不仅要支持windows,还要支持linux,二是要能自建包服务器。当时的vcpkg还只能支持windows,当然后来的版本也支持linux了,而自建包服务器,vcpkg一直都不可以。后来证明这个选择是正确的。

阅读全文 »