开发项目涉及到 MySQL时就需要MySQL管理工具, phpmyadmin 是一款网页功能强大的免费软件。 安装 MySQL 命令方式: docker run -itd --name dev_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql docker-compose.yml 方式: version: '3' services: mysql: image: "mysql" restart: always container_name: "mysqld" environment: MYSQL_ROOT_PASSWORD: "123456" ports: - "3306:3306" 安装 phpmyadmin 管理 MySQL 的软件 修改 MySQL 配置 docker exec -it <dockerID> /bin/bash # 进入容器 mysql -u root -p # 进入 mysql # 将root账号(可替换成其他)的host修改为% update mysql.user set host = '%' where user = 'root'; # 查看修改结果 select host, user from user; # 刷新加密方式 flush privileges; 安装 phpmyadmin 命令行方式:
以 golang 构建项目为例。 新建任务 输入一个任务名称 选择:构建一个自由风格的软件项目 可选:也可以复制已创建的任务 确定提交 配置 再次编辑刚创建的任务 描述 对你的项目进行描述,可以写如下信息。 项目名称 部署的IP地址 部署远程的目录 日志路径 配置目录及文件名称 启动服务 停止服务 重启服务 等等 Job Notifications 参数化构建过程 构选: 参数化构建过程 GIT参数 选项参数 配置“构建” 和 “回滚” 参数。供构建时选择 字符参数 设置填写构建ID号。 源码管理 一般使用GIT,在 branches to build 指定分支使用变量 ${GIT_COMMIT},即参数化构建过程那一步使用的GIT参数名称 填写有效的 GIT 地址。并使用授权的用户帐号,保证可以访问仓库代码。 构建 会用到以下二个选项: 执行Shell Send files or execute commands over SSH 构建项目的SHELL 定义变量 删除或创建目录 判断用户是“构建”还是“回滚”进行区别操作 源码: set -x # 定义名称 program_name=go_test # 项目压缩名称 program_filename=${program_name}.tar.gz # 项目路径 target_path="${WORKSPACE}/target/" # 备份路径 back_path="${WORKSPACE}/bak/" if [ -f "${back_path}${program_filename}" ];then rm -f ${back_path}${program_filename} fi ls -l $back_path # 当前构建ID的路径 back_path_num="${back_path}${BUILD_NUMBER}" # 删除前必须判断是否存在 if [ -f "${target_path}${program_filename}" ]; then rm -rf "${target_path}${program_filename}" echo "${target_path}${program_filename} 删除成功" fi # 备份路径不存在则创建 if [ !
纲要 基础阅读 从一个孩童的视角切入。共四个阶段,循序渐进。 阅读准备阶段 身体方面的准备 良好的视力和听力。 起码的认知能力。 语言上的准备 口齿清晰。 个人的准备 与其它人一起学习时,保持注意力。 读一些简单的读物 看图识字。 字句的使用, 词名的含意,字句的发音等等。 快速建立词汇能力 阅读不同领域的书籍,像科学,社会学,语言艺术等等。 保持开放的心灵与好奇心,不断扩大自己的视野,增进阅读量。 精练与增进所学的技巧 此阶段为阅读的成熟阶段 开始消化阅读的经验 从一本书所提出来的一个观点转化到另一个观点。 在同一个主题上,对不同的作者所提出来的观点作比较。 检视阅读 检视阅读,才算是真正进入阅读的层次。 必须精通基础阅读,否则没法进入检视阅读层次。 略读的作用: 略读的目标是发现这本书值不值得花时间仔细阅读, 略读也能告诉你许多这本书有关的事。 略读的阅读 这是一种非常主动的阅读,需要集中精神来阅读。 先看书名页, 然后看序 特别注意副标题。 序囊括了这本书大部分的观点与内容。 在大脑里给这本书归个类。 研究目录页 对这本书的基本架构做概括性的理解。 检阅书中附有的索引 判断出这本书里的重要词汇,关系到作者的意图与态度。 了解下出版社和作者的背景 一个好的出版社会对他出版的图书背书的。 作者的背景与经历决定着这本书的高度。 挑几个看来跟主题息息相关的篇章来看 检阅这本书写得如何。 把书打开来,东翻翻西翻翻,念上一两段,有时候连续读几页,但不要太多 随时寻找主要论点的讯号,留意主题的基本脉动。 不要忽略最后的两三页,代表着一本书的收尾。 tip: 通过以上步骤有系统地略读过一本书,完成第一种型态的检视阅读。时间控制在一小时内完成。最后决定这本书是否值得继续投下时间与注意。 粗浅的阅读 对于一本难懂的书,阅读的规则: 头一次面对一本难讲的书的时候,从头到尾先读完一遍,碰到不懂的地方不要停下来查询或思索。 略过那些不懂的部分,直到读到你看得懂的地方,集中精神在这个部分,继续这样读下去。 将全书读完,不要被一个看不懂的章节,注解,评论或参考资料阻挠或泄气。 如果你让自己被困住了,如果你容许自己被某个顽固的段落绑住了,你就是被打败了。 在读第二遍的时候,你对那个地方的了解可能会多一些,但是在那之前,你必须至少将这本书先从头到尾读一遍才行。 从头到尾读一遍之后比你让自己在一碰上困难的地方就停止要好很多,后者让你对这本书真的一无所知。 阅读的速度: ​ 检视阅读是一种训练有素的快速阅读。懂得能快速读,也能用不同速度来阅读。 tip: 每一本书,不论是多么难读的书,在无关紧要的间隙部分就可以读快一点。而一本好书,总会包含一些比较困难的内容,应该慢慢阅读内容。 逗留与倒退: 许多人会从最初学会阅读之后,多年一直使用“半出声(sub-vocalize)”的方式来阅读。 此外还有些阅读者,在阅读一行字的时候会在五六个地方发生“逗留(fix-ate)”。 更糟的是,不熟练的阅读者在每看过两三行之后,眼睛就自然地“倒退”到先前读过的句子上去。 以上这些现象或习惯不但浪费时间而且降低阅读的速度。 我们的头脑跟眼睛不一样,并不需要一次只“读”一个字或一个句子。我们的头脑是个惊人的工具,可以在“一瞥”之间掌握住一个句子或段落。 矫正眼睛逗留的有效方法:
阅读的艺术 阅读是一件主动的事,而非被动。 阅读的误区 太多的资讯就如同太少的资讯一样, 都是一种对理解力的阻碍. 我们在这个互联网上接触的到的音频,视频及文章等等, 都是一些经过太精心的设计, 使得思考形同没有需要了, 长期接受这样的信息会对我们的理解力产生阻碍. tip: 远离二手信息, 直击源头知识. 主动的阅读 阅读越主动, 效果越好. 任务一种阅读都是一种活动, 那就必须要有一些主动的活力. 完全被动, 就阅读不了– 我们不可能在双眼停滞, 头脑昏睡的状况下阅读. 第一提醒读者: 阅读可以是一件主动的事. 第二提醒读者: 阅读越主动, 效果越好. 一个读者更主动一些, 在阅读的世界里探索能就更强一些, 收获更多一些, 因而也更高明一些. 读者对他自己, 以及面前的书籍, 要求的越多, 获得的就越多. 阅读的目标 以获得知识而读, 以及为求得理解而读. 一本书摆在你面前, 想要与你沟通一些想法. 你要能成功地阅读这本书, 完全看你能接获多少作者要要传达的讯息. 只有一种方式是真正地在阅读: 没有任何外力的帮助, 你就是要读这本书. 你什么都没有, 只凭着内心的力量, 玩味着眼前的字句, 慢慢地提升自己,从只有模糊的概念到更清楚地理解为止. 这样的一种提升, 是在阅读时的一种脑力活动, 也是更高的阅读技巧. 这种阅读就是让一本书向你即有的理解力做挑战。 两种不同意义的阅读: 第一种:阅读网文, 杂志, 公众号等, 凭我们的阅读技巧与聪明才智, 一下子便融会贯通. 这样的读物能增加我们的资讯, 却不能增进我们的理解力。 因为在开始阅读之前, 我们的理解力就已经与他们完全相当了。 否则我们一路读下去会被卡壳的。 第二种:试着读某样一开始并不怎么了解的东西。这个东西的水平就是比阅读的人高上一截。这个作者想要表达的东西, 能增进读者的理解力。 增进理解而阅读的两种状况: 第一是一开始时不相等的理解程度。 其次,阅读的人一定要把不相等的理解力克服到一定程度之内。一旦达到相同的理解程序,就完成了清楚的沟通。 tip: 我们只能从比我们"更高"的人身上学习。我们一定要知道他们是谁, 如何跟他们学习。
[TOC] SOLID原则包括单一职责,开闭原则,里氏替换原则,接口隔离原则,依赖倒置原则。 单一职责原则(SRP) SRP: Single Responsibility Principle A class or module should have a single reponsilibility.一个类或者模块只负责完成一个职责(或者功能) 一个类只负责完成一个职责或功能, 也就是说, 不要设计大而全的类, 要设计粒度小, 功能单一的类. 换个角度来讲就是. 一个类包含了两个或两个以上业务不相干的功能, 我们就说它的职责不够单一, 应该将它拆分成多个功能更加单一, 粒度更细的类. 如何判断类是否单一 类中的代码行数,函数或者属性过多. 类依赖的其它类过多, 或者依赖类的其它类过多, 不符合高内聚, 低耦合的设计思想. 私有方法过多 比较难给类起一个合适的名字 类中大量的方法都是集中操作类中的某几个属性. 如何设计单一类 技巧: 持续重构. 没有一尘不变的设计 单一职责原则通过避免设计大而全的类, 避免将不相关的功能耦合在一起, 来提高类的内聚性. 同时类职责单一, 类依赖和被依赖的其它类也会变少, 减少了代码的耦合性, 以此来实现代码的高内聚, 低耦合. 但是, 如果拆分得过细, 实际上会适得其反, 反倒会降低内聚性, 也会影响代码的可维护性. 开闭原则(OCP) OCP: Open Closed Priciple Software entities (modules, classes, functions, etc.) should be open for extension, but closed for modification.
很早前写过一篇关于Golang持续集成服务之Travis教程, 今天再写写关于 github 上常见的徽章是如何制作的. 让你的开源项目更高大上, 让你的代码也更健壮. 徽章的含意 当你浏览一个开源项目时,看到各种徽章, 有些徽章是直接反应这个开源库的质量和完整性等等. 如上图所示 第一个徽章即 Github 自带的 workflow 提供的持续集成(CI)和持续部署(CD), 官方称之为 Actions, 图示显示为 CI, CD 是否通过 第二个徽章即 Codecov 是一个测试结果分析工具, 图标显示测试覆盖率. 第三个徽章即 shields.io 一个可以自定义徽章的网站 第四个徽章即 goreportcard 是一个项目综合评分网站 第五个徽章即 gitter 自定义讨论组的网站 CI&CD 徽章 github 于2018. 10月推荐 GitHub Actions 持续集成服务, 在此之前大家都是使用 https://travis-ci.org/ 持续集成服务, 之前我也写过相关文章. Golang持续集成服务之Travis教程. 持续集成和持续部署目前 github 官方自带支持, 官方称之为 GitHub Actions. 只要你在 github 上创建一个开源项目仓库就自带 Actions 功能, 支持各种语言. 还可以自动发布 GitHub Pages 等功能, 十分强大. 如何使用可以参考阮一峰写的GitHub Actions 入门教程 关于GO的持续集成服务模板参考: 使用 GitHub Actions 后会在你的项目里自带生成一个.
Golang tracks stack error package. 优雅追踪堆栈错误包 安装(Install) go get github.com/yezihack/e 介绍(Introduction) github.com/yezihack/e 项目是一个优雅地追踪你的堆栈信息.方便存储日志里. 而且还扩展了error包,自定义 code,msg 信息. 特色(Features) 优雅地追踪堆栈错误信息 基于github.com/pkg/errors包进行封装 支持 code, msg 自定义错误码和错误信息 方便存储日志json文件 堆栈信息以人性化展示 文档(Documentation) https://godoc.org/github.com/yezihack/e 简单使用(Use) package main import ( "github.com/yezihack/e" "log" ) func foo() error { return e.New("foo") } func main() { err := foo() if err != nil { // 需要判断是否是自定义error, 否则无法输出堆栈信息. if e.Assert(err) { log.Println(e.Convert(err).ToStr()) // 输出字符串形式 log.Println(e.Convert(err).ToArr()) // 输出数组形式 } else { log.Println(err) // 系统的 error } } } 与原堆栈信息对比 github.
充血模式即领域驱动设计(Domain Driven Design, 简称 DDD) 贫血模式 在之前我们写一篇关于贫血模式的文章, 点击查看. 贫血模式是目前主流的一种开发模式, 基于MVC结构的开发模式. MVC三层架构中 M 表示 Model 即数据层 V 表示 View 即展示层 C 表示 Controller 即逻辑层 做为后端开发MVC有所调整 1. Model 层 负责数据访问 2. Service层 负责业务逻辑 3. Controller层 负责暴露接口
让.皮亚杰 瑞士人,近代最有名的发展心理学家,他的认知发展学成为了这个学科的典范。 20世纪最伟大的心理学家. 与弗洛伊德称为心理学史上两位巨人。 主要贡献是对儿童的心理发展做了全面的解释, 不同于成熟论与外铄论, 这些理论都不足以让人信服, 直到让.皮亚杰提出认识发展理论提出.也称之为建构主义. 皮亚杰认为孩子的认知不是被动的,而是个体与环境相互交互的时候形成的, 孩子们都是天生的科学家与哲学家. 他们有一套非常神奇的认识外界的方法. 就象小树苗一样是有所选择的接受外界的营养. 理论 图式理论 认知发展的核心理论. 孩子从婴儿时期什么也不懂, 只知道喝奶, 这叫遗传图式, 而有一个人总是给他喂奶, 建立起妈妈的概念, 妈妈就是总喂奶的那个人. 就这样通过外界不断刺激下建构成自己的一个一个的图式. 图式主要是通过外界对自身的刺激在自己的大脑里形成一个个概念, 即是建构图式 Tip: 图式具有对客体信息进行整理,归类.改造和创造功能,以使主体有效地适应环境. 同化理论 同化过程是对图式量的提升 同化是指遇到外界刺激后他们尝试着使用自己的这个图式去理解外界, 希望把外界纳入到原有的图式之中. 这个过程称之为同化 例: 如对狗的认识, 如吉娃娃狗的图式概念, 知道他长着四条脚, 一个尾巴, 会旺旺的叫, 下次遇到哈士奇, 就会使用这个图式解释他,也就是说他会把这个图式进行同化成为之前图式的一部分, 图式也得到的发展与巩固. 但是遇到一只猫时, 他使用同样的方式解释时, 妈妈告诉他这不是一条狗, 是一只猫. 这个时候孩子就混乱啦, 然后旁边的妈妈解释给他听, 猫的嘴巴上有长长的胡须, 还会喵喵的叫, 这个叫猫. 此时孩子会在大脑中重新构建新的图式概念, 这个过程是一种顺应. 同化是一个非常重要的概念, 只有对一个图式不断的同化,得到量的积累, 才会得以建立更加完善, 更加巩固. 成年人学习一个新知识也是一样, 需要不断的同化过程, 也就是需要做相关练习, 多加应用, 得到更多的同化过程, 你的知识图式才会更加牢固完美. 同化过程是对图式量的提升 Tip: 中国俗语称: 熟能生巧. 顺应理论 构建新图式的过程 外界的刺激不可能永远可以用同样的图式去解释,顺应是指同化失败后, 产生混乱时重新构建新的图式的一个过程. 如上面所说的猫的认识过程.
朴实定律 程序应该熟悉的常用定律法则 二八定律 二八定律是指在任何一组东西中, 最重要的只占其中一小部分, 约20%. 其余80%尽管是多数, 却是次要的. 如世界上的财富分配也属于二八定律, 20%人的撑握着世界80%的财富. 工程定律 海恩法则 是德国飞机涡轮机的发明者德国人帕布斯.海恩提出的一个在航空界关于飞行安全的法则. 海恩法则: 指任务不安全事故都是可以预防的. 海恩法则强调两点: 一是事故的发生是量的积累的结果 二是再好的技术, 再完美的规章, 在实际操作层面, 也无法取代人自身的素质和责任心. Tip: 软件行业也是如些, 生产上的程序出现故障, 也符合海恩法则. 墨菲定律 事情往往会向你所想到的不好的方向发展.只要有这个可能性. 比如你衣袋里有两把钥匙, 一把是房间的, 一把是车的, 如果你现在想拿车钥匙, 会发生什么呢?是的, 你往往是拿错了房间钥匙. Tip: 如果做某项工作有多种方法, 而其中一种方法将导致事故, 那么一定有人会按这种方法去做. 康威定律 设计系统的架构受制于产生这些设计的组织的沟通结构 — M.Conway 即系统设计本质上反映了企业的组织机构. 系统各个模块间的接口也反映了企业各个部门之间的信息流动和合作方式. Tip: 系统设计的结构必定反映其团队的组织结构 管理定律 SMART 原则 Smart 原则是目标管理中的一种方法. 由五个字母组成 S (Specific) 明确性: 指目标必须是明确的, 具体的.不能笼统. M (Measurable) 可衡量: 目标可以量化, 有计划的, 数据支撑. A (Achievable) 可达成: 付出努力的情况下可以实现你的目标, 避免设立过高或过低的目标. R (Relevant) 相关性: 指目标与那些还有关联, 需要配合, 辅助你完成目标.