12
6

東方之珠

0
归档:2019年6月分类:点滴生活

東方之珠

羅大佑 詞曲 《皇后大道東》

小河彎彎向南流

流到香江去看一看

東方之珠我的愛人

你的風采是否浪漫依然

月兒彎彎的海港

夜色深深 燈火閃亮

東方之珠 整夜未眠

守著滄海桑田變幻的諾言

讓海風吹拂了五千年

每一滴淚珠彷彿都說出你的尊嚴

讓海潮伴我來保佑你

請別忘記我永遠不變黃色的臉

船兒彎彎入海港

回頭望望 滄海茫茫

東方之珠 擁抱著我

讓我溫暖你那蒼涼的胸膛

For HK~

12
6

php-fpm找不到php-cgi.sock

0
归档:2019年6月分类:LAMP开发

这两天整理centos服务器,为了节省空间清理了不少文件,没想到不小心把/tmp/下的目录清除了,导致程序报错:php-fpm找不到php-cgi.sock。

php-fpm有两种listen方式,一种是通过端口来操作,一种是sock文件。

在nginx的server配置当中,如果设置为fastcgi_pass unix:/tmp/php-cgi.sock的话,有可能会出现502错误,这是以为nginx此项没有找到php-cgi.sock文件或者权限问题导致的,我们也可以改成fastcgi_pass:127.0.0.1:9000来修正这个错误 。

当我们用php-fpm来管理我们的php启动时,按照如下的配置,就会自动生成/tmp/php-cgi.sock文件,然后再访问的话就不回出现502 Gateway错误了。配置如下:

[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
user = www
group = www
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

注:将php.ini里的cgi.fix_pathinfo设置为0,不然会有漏洞。

10
6

选择Angular而不是Vue

0
归档:2019年6月分类:架构之路

最近团队要选择前端开发框架,我进行了大量对比,最终选择了Angular,我承认Vue也很优秀,React也超级棒,但Angular非常适合我们。我们需要的就是这样一个真正的框架,包含了组件化方案、模块化方案、测试方案、表单验证、路由、国际化方案和安全方案。

Angular 的工程师将我们需要的所有功能做了不错的整合。如果使用 Vue,我可能还要面临更多选择。Angular 的一份文档涵盖了开发中的方方面面。如果使用 Vue,可能每个功能要去看不同的文档。Angular 更强势更主观,它的文档对于如何完成某个功能给出了明确的建议。我们团队的成员有不同的编程背景,虽然有三个全职的前端,但是还有十几个 Java 和 Python 程序员,他们也可能会参与前端工作,Angular 的文档能让这些成员快速适应环境。

Angular = Vue + vue-router + axios + karma + 表单验证插件 + i18n …

我们需要typescript来告别原来脓肿不堪的js代码

使用TypeScript,告别对臃肿代码的重构,让自己的编程真正能够面向对象吧。

一千个人有一千种React代码风格,但是Angular的代码风格只有一种。你会发现Angular的每一处都是最佳实践,设计模式的运用是基于Google多年的Java编程经验的,响应式的应用也是基于微软对于操作系统中异步处理的经验总结。
无数的编程概念都有其历史厚重感,而Angular将他们汇聚到了一起。windows中的linq‘时间上的数组’,spring中的依赖注入,处理HDFS的MR,到linux线程本地存储,再到前端界的MVVM,MVC。

Angular优势:
Angular 的工程师将我们需要的所有功能做了不错的整合。如果使用 Vue,我可能还要面临更多选择。
Angular 的一份文档涵盖了开发中的方方面面。如果使用 Vue,可能每个功能要去看不同的文档。
Angular 更强势更主观,它的文档对于如何完成某个功能给出了明确的建议。我们团队的成员有不同的编程背景,虽然有三个全职的前端,但是还有十几个 Java 和 Python 程序员,他们也可能会参与前端工作,Angular 的文档能让这些成员快速适应环境。
核心原因:Angular 是一个完整的框架。

31
5

我们都拿到了4个6.5,总分7

0
归档:2019年5月分类:点滴生活

其实这个分数,我在去年9月份的时候就拿到了,但是因为就差一点点达到4个7,所以很不服气又考了3次,但依然没有拿到理想分数,幸运的是爱人也拿到了这个分数。目前来看,只能抢489和491了,如果抢不到就考虑新西兰。

我心里觉得如果坚持下去,应该能拿到4个7,但是现在这个分数也无法189和190,特别是最近澳洲出了新的政策,砍掉大量的配额,并且出了新的491签证,所以不打算考了。

回过头了,从2017年5月起,到2018年12月,一年半的时间,虽然没有达到理想的分数,但是想想对于口语那么烂的我,也许这个结果已经很不错了。

这近两年过来关于migaration的问题,我们讨论、争论、研究、分析,期间还去了一趟澳新,最终达成一致,定了目标,就看后面这几个月了。

希望有志者事竟成,我真的很希望能拿我们喜欢的地方,I love Melbourne!

写在五月的最后一天。

28
5

.NET Core 3.0 Preview 5发布

0
归档:2019年5月分类:C#和.NET

今天我们非常高兴发布 .NET Core 3.0 Preview 5,它包含了新的Json serializer,支持发布单执行文件,并且更新到新的runtime roll-forward,BCL也做了一些改动。

目前可以下载.NET Core 3.0 Preview 5安装到Windows, macOS and Linux.另外,ASP.NET Core和EF Core也发布了。

具体英文地址:https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-5/

28
5

留美幼童观后感

0
归档:2019年5月分类:点滴生活

“他们是中国历史上最早的官派留学生。公元1872年到1875年间,清政府先后派出四批共一百二十名学生赴美国留学。这批学生出洋时的平均年龄只有十二岁,因此 他们有一个共同的名字——留美幼童。这批饱受欧风美雨熏陶的学子是中国矿业、铁路业、电报业的先驱。他们中出现了今天清华大学、天津大学最早的校长,出现了中国最早的一批外交官,出现了中华民国的第一任总理。回国后的这批西学所造之子历经中国晚清政坛的跌宕起伏,目睹了近代中国的荣辱兴衰。 留美幼童的命运,离奇曲折;他们的故事,美丽而忧伤。 他们有一个永远的名字:留美幼童。”

p1123457390

最近翻出央视的一部纪录片《留美幼童》,居然眼前一亮,原来央视也出过这么优秀的纪录片。眼看现在中美贸易战打得火热,不知道有多少人认真去看这部纪录片。如果认真想想中国近代化和现代话过程中,哪个国家对中国最慷慨和友好,我觉得一定是美国,美国没有侵略过中国,并且100多年来一直在帮助中国。历史上美国对中国伤害最大的估计也就是1882的排华法案,但要知道这只是限制华人在美的权利。

留美幼童是中国与美国的第一次接触,但清政府却因为排华法案从日后第一强国撤回留学生。从此以后,美国对中国的帮助就一直延续:庚子赔款退还用于建设清华园、为中国培养大批人才;协和医院救助大量中国人、并且培养大量医学人才;二战期间无私地帮助中国进行反法西斯战争、并确认战后五个大国之一的地位;中美建交成功阻止了苏联对中国的威胁;新世纪帮助加入世贸、彻底改变中国的经济状况...

20
5

领域驱动设计实现之路

0
归档:2019年5月分类:C#和.NET

2004年,Eric Evans出版《领域驱动设计——软件核心复杂性应对之道》(简称《领域驱动设计》),10年之后,我们有了《实现领域驱动设计》。DDD将一个软件系统的核心业务功能集中在一个核心域里面,其中包含了实体、值对象、领域服务、资源库和聚合等概念。在此基础上,DDD提出了一套完整的支撑这样的核心领域的基础设施。此时,DDD已经不再是“面向对象进阶”那么简单了,而是演变成了一个系统工程。

领域,即是一个组织的业务开展方式,业务价值便体现在其中。长久以来,我们程序员都是很好的技术型思考者,我们总是擅长从技术的角度来解决项目问题。但是,一个软件系统是否真正可用是通过它所提供的业务价值体现出来的。因此,与其每天钻在那些永远也学不完的技术中,何不将我们的关注点向软件系统所提供的业务价值方向思考思考,这也正是DDD所试图解决的问题。在DDD中,代码就是设计本身,你不再需要那些繁文缛节的并且永远也无法得到实时更新的设计文档。编码者与领域专家再也不需要翻译才能理解对方所表达的意思。DDD有战略设计和战术设计之分。战略设计主要从高层“俯视”我们的软件系统,帮助我们精准地划分领域以及处理各个领域之间的关系;而战术设计则从技术实现的层面教会我们如何具体地实施DDD。

DDD之战略设计

DDD的战略设计主要包括领域/子域、通用语言、限界上下文和架构风格等概念。

1、领域和子域(Domain/Subdomain)

领域驱动设计关注点应该放在如何设计领域模型上,以及对领域模型的划分。

领域的概念:一个电商网站的领域包含了产品名录、订单、发票、库存和物流的概念。领域的划分是将一个大的领域划分成若干个子域。通常会将一个大型的软件系统拆分成若干个子系统。这种划分有可能是基于架构方面的考虑,也有可能是基于基础设施的。DDD对系统的划分是基于领域的,即基于业务。第一个问题,哪些概念应该建模在哪些子系统里面?第二个问题是,各个子系统之间的应该如何集成?如何解决?答案是:限界上下文和上下文映射图。

2、限界上下文(Bounded Context)

在一个领域/子域中,我们会创建一个概念上的领域边界,在这个边界中,任何领域对象都只表示特定于该边界内部的确切含义。这样边界便称为限界上下文。限界上下文和领域具有一对一的关系。将一个限界上下文中的所有概念,包括名词、动词和形容词全部集中在一起,我们便为该限界上下文创建了一套通用语言。通用语言是一个团队所有成员交流时所使用的语言,业务分析人员、编码人员和测试人员都应该直接通过通用语言进行交流。

上文中的各个子域之间的集成问题,是限界上下文之间的集成问题。防腐层负责与外部服务提供方打交道,还负责将外部概念翻译成自己的核心领域能够理解的概念。当然,防腐层只是限界上下文之间众多集成方式的一种,另外还有共享内核、开放主机服务等,具体细节请参考 《实现领域驱动设计》原书。限界上下文之间的集成关系也可以理解为是领域概念在不同上下文之间的映射关系,因此,限界上下文之间的集成也称为上下文映射图。

3、架构风格(Architecture)

DDD并不要求采用特定的架构风格,因为它是对架构中立的。可以采用传统的三层式架构,也可以采用REST架构和事件驱动架构等。但是在《实现领域驱动设计》中,作者比较推崇事件驱动架构和六边形(Hexagonal)架构。在六边形架构中,已经不存在分层的概念,所有组件都是平等的。这主要得益于软件抽象的好处,即各个组件的之间的交互完全通过接口完成,而不是具体的实现细节。Robert C. Martin:抽象不应该依赖于细节,细节应该依赖于抽象。

采用六边形架构的系统中存在着很多端口和适配器的组合。端口表示的是一个软件系统的输入和输出,而适配器则是对每一个端口的访问方式。

DDD之战术设计

战略设计为我们提供一种高层视野来审视我们的软件系统,而战术设计则将战略设计进行具体化和细节化,它主要关注的是技术层面的实施,也是对我们程序员来得最实在的地方。

1、领域对象

领域对象能够准确地表达出业务意图,但多数时候却是充满getter和setter的领域对象,此时的领域对象已经不是领域对象了,而是Martin Fowler所称之为的贫血对象。.NET里面很好地支持非贫血对象。

2、实体vs值对象(Entity vs Value Object)

软件系统中实体表示那些具有生命周期并且会在其生命周期中发生改变的东西;而值对象则表示起描述性作用的并且可以相互替换的概念。同一个概念,在一个软件系统中被建模成了实体,但是在另一个系统中则有可能是值对象。

3、聚合(Aggregate)

聚合是DDD中最难理解的概念 ,聚合中所包含的对象之间具有密不可分的联系,他们是内聚在一起的。比如一辆汽车(Car)包含了引擎(Engine)、车轮 (Wheel)和油箱(Tank)等组件,缺一不可。一个聚合中可以包含多个实体和值对象,因此聚合也被称为根实体。聚合是持久化的基本单位,它和资源库具有一一对应的关系。

4、领域服务(Domain Service)

领域概念放在实体上不合适,放在值对象上也不合适,领域服务本来就是来处理这种场景的。比如对密码进行加密,可以创建一个 PasswordEncryptService来专门负责此事。

5、资源库(Repository)

资源库用于保存和获取聚合对象,资源库与DAO相似。但资源库和DAO存在显著区别。DAO只是对数据库的一层很薄的封装,而资源库则更加具有领域特征。另外,所有的实体都可以有相应的DAO,但并不是所有的实体都有资源库,只有聚合才有相应的资源库。资源库分为两种,一种是基于集合的,一种是基于持久化的。顾名思义,基于集合的资源库具有编程语言中集合的特征。

6、领域事件(Domain Event)

《领域驱动设计》中并没有提到领域事件,领域事件是最近几年才加入DDD生态系统的。微服务(Micro Service)的架构中,整个系统被分成了很多个轻量的程序模块,他们之间的数据一致性并不容易通过事务一致性完成,领域事件便可以用于处理上述问题,此时最终一致性取代了事务一致性,通过领域事件的方式达到各个组件之间的数据一致性。

10
5

澳新之行

0
归档:2019年5月分类:点滴生活

微信图片_20190606145906

这趟旅行我们酝酿了将近一年时间。今年正好是我们结婚七周年,而从去年开始,澳新这两个国家就一直在我们家里反复被提起讨论,连宝宝都是不是冒出阿德莱德、奥克兰、悉尼、墨尔本了。想想如果不先出去看看,对于我们都没有出过国的人来说,讨论migration貌似真的有点夸张。正好从网上、电视上看,这两个国家的景色和环境都非常棒,所以我们就打算作为旅行地。

从北京出发,穿过中国的大江南北,穿过黄河、长江、南海,穿过马来西亚,来到新加坡,休息一晚上,从新加坡穿过南太平洋,来到澳大利亚的上空,穿过帕斯、穿过阿德莱德,来到墨尔本。

一、墨尔本

微信图片_20190606153223

墨尔本气候宜人,人文氛围好。这是皇家植物园,确实名不虚传。

二、悉尼

微信图片_20190606152923

 悉尼确实很繁华,她的繁华体现在几乎每个地方都很发达。这是悉尼歌剧院和海港大桥。

三、奥克兰

微信图片_20190606152931

奥克兰是新西兰的首都,但因为准备举办帆船世界杯,到处都在施工,而且山地多,所以整体的感觉没有澳洲方便。当然,伊甸山还是很棒的。

四、皇后镇(格林诺奇、剑镇和瓦纳卡湖)

新西兰的自然环境无可挑剔,真的是100%纯净的新西兰。皇后镇很美,格林诺奇是一个来了就不想走的地方,秋天的剑镇更是让人心醉。

微信图片_20190606152928

这是箭镇,而文章最开始那张是格林诺奇,爱人和女儿的合影。

微信图片_20190606155841

这是瓦纳卡湖,没有什么比这个湖更美的了。

五、惠灵顿

惠灵顿是首都,所以更让人舒适,而且这里居住的人,很多是英国人的后裔,感觉他们依然秉承英伦gentle之风。

微信图片_20190606155800

 

公告栏

欢迎大家来到我的博客,我是dodoro,希望我的博客能给你带来帮助。