Shi Hai's Blog

随遇而安

groovy学习

主要想通过Groovy来管理架构的DSL,实际用DSL的逻辑组织会强于json、xml这类文件存储格式,当然带来的成本还是需要熟悉一下groovy的语法。主要还是对官网给的一些示例代码熟悉一下,主要重点想看一下怎么定义DSL和存储格式(ToString、yaml、json、xml等)的输出。 groovy吸收了很多Java和Python的语言特性,代码本身应该用vim编辑是比较高效的,不过...

AWS最佳架构实践随笔

对AWS最佳架构实践的上下文及演进驱动力做个单纯的考古活动,内容主要从各个网站介绍上拷贝过来,如要看完整文档建议看参考文献相关索引链接。 一、亚马逊最佳架构实践 1.1 目标 它提供了一种方法,使您能够根据最佳实践持续衡量架构,并确定需要改进的方面。审查架构的流程是关于架构决策的建设性对话,不是一种审核机制。 1.2 框架的六大支柱(Pillar) 1.2.1 卓越运营(Operatio...

记一个python默认参数引用泄露问题

一、问题背景 如下这段代码后,执行compute()函数前后,引用计数居然多了3,也就意味泄露了3个引用。 cache={}会让cache引用变量的引用计数加2,另外还有1个引用计数的增加以及怎么产生引用泄露的呢? import sys class A: pass def compute(cache={}): cache[0] = dict() x = A()...

python urllib内存泄露问题分析

一、问题背景 在python2/3中调用urllib模块会有循环引用没被释放,触发代码如下所示: import gc import sys if sys.version_info.major == 3: from urllib import request urlopen = request.urlopen else: import urllib2 url...

领域特定语言(DSL)学习和总结

一、DSL介绍 DSL的核心价值在于提供了一种可以清晰地就系统某部分的意图进行沟通的手段。它提供了一种用于思考问题的抽象,更容易用一种可理解的方式指定系统行为。DSL领域模型可以降低阅读复杂度,可以提升开发团队与客户以及软件用户之间的沟通。DSL提供了一种清晰而准确的语言,可以有效地改善这种沟通。 1.1 外部DSL 通常采用自定义语法,不过选择其他语言的语法也很常见,如:XML。外部DS...

Python调用Golang

记一个工作中遇到的问题,由于要给C、Java、Go、Python提供客户端,客户端的核心逻辑实现语言是Go,所以Python客户端最快的实现方式是直接封装Go语言逻辑,而且因为业务需要,还要提供Python3/2两个版本,先有Python3版本,后有Python2版本,因此还需要考虑在Python2上执行Python3代码的兼容性问题。 主要的解决思路是Go语言和Python语言都对底层C...

代码索引工具调研

一、相关协议 1. 语言服务器协议(LSP) 语言服务器协议定义了编辑器或IDE与语言服务器之间使用的协议,该语言服务器提供自动完成、转到定义、查找所有引用等语言功能。 2. 语言服务器索引协议(LSIF) 为了在开发工具或 Web UI 中支持丰富的代码导航,而无需源代码的本地副本。 3. LSP vs Kythe Schema LSP/LSIF的核心目标是让IDE与工具之间,Web和代...

COVID-19注意事项

一、中国医学科学院阜外医院-冯雪教授交流 新冠对肺的影响:肺的修复能力很强,被新冠攻击后会马上恢复(以月为单位),上、下呼吸道没有严格区分; 新冠对心理改变:心理门诊暴涨40%,抑郁发生率34.9%、焦虑发生率35.1%、失眠发生率29.7%、认知障碍发生率22%; 对新冠的认知:只掌握了10%,还有90%是未知的; 基因的两种长寿:复制(保障细胞的持续生长)和逆境(饥饿、跑步、感冒、新冠...

图数据库

一、图数据库 1.1 图数据库存在的意义 关系模型的设计目标之一是能快速执行数据的按行访问,但当遇到多表关联查询时就会变得非常复杂。和关系型数据库相比,图数据库模型能更好的直接映射至面向对象的应用程序,并且对对象关联关系查询的速度更快。 1.2 各类图数据库 各类图数据库的排名可以参考此链接,评分由网上的各类讨论计算得出。github上的图数据库主题的关注趋势可以点此链接查看。 二、neo4...

golang 结构体指针使用

一、指针 1.1 基本概念 go语言中指针定义和c语言中的指针定义和使用没有太大区别,一个有效的go语言指针定义: var ip *int var fp *float32 1.2 在结构体中使用指针 type Employee struct { FirstName *string Salary *int } func (e Employee) Set...