一句话评脱口秀大会5选手

鸟鸟———— 怼男人很含蓄,用过家爱演爸爸就输出了段子,但应该学厨艺,因为炊烟袅袅。

杨笠———— 怼男人很直接,有点改邪归正了,但怎么不够邪了,因为脱口秀太后思文来了吗?。

杨蒙恩————爱情一美满,包袱有点短。

豆豆———— 再多理发的段子讲不过志胜的刘海儿。

广智———— 再多地铁的段子就一定能超越杰伦的专辑了。

rock———— 中年人的唯一力量,需要叹气,更需要硬气。

赵晓卉———— 如果我开一个专门怼笑果的公司,一定请你去。完全接得住李诞的招式,还能全身而退。

杨波———— 给你一句话机会逗笑我,不然我就……把你当海王的事说出去。

邱瑞———— 保持愤怒,千万别正常喽。就要膈应一下这个社会的乱现象。

小鹿———— 女版周奇墨,老不死,在笑果交完学费,你就火。

孟川———— 段子走偏锋,也是成绩不愠不火的原因。不能像杨波一样天马行空,有待突破。

呼兰———— 有货,知性,期待那种上气不接下气的密集包袱攻击感觉吧。要不表演前骑几圈共享单车先。

王建国———— 鸟鸟说她社恐,建国就笑了。千万不行嗑他俩的CP,不然,北大校友争抢三本理工男的新闻就见报了。

小北———— 放松是你的神器,可是你可能理解成没睡醒了。

志胜———— 上帝真是公平,低的不说了,情商是真高。笑果王熙凤,闹起大观园。

梁海源———— 中年人讲情怀段子只能讲给中老年人了。以灯泡见证程璐和思文的蜜月已经够尴尬了,还要以炮灰见证他们晋级,苦了你了。

norah———— 看看侬的名字,品牌设计就显媚外,根本无法谣谣领先的。

KID———— 短发造型明显增加功力了。

小块———— 就的瑟,北京的包租公。怎么让上海脱口秀冷静一下,也就是比深圳多点文化,但北京才是祖宗,用什么写稿,做一圈出租车就齐活了,不行就由请“周天花板”。

童漠男———— 北方有小爷,绝世而独立,到处毁行业,今天到笑果。

张骏———— 这男人嘛,不拿个博士,能面对自己且在大众前剖析,酷,张本科,我也是本科。

小佳———— 很狗嘛,弱势群体中的强势对手。

黑灯———— 嗓音很好听,视角专属,和小佳比,仍要进化到新阶段。

步惊云———— 只要场上大喊一声,大碗喝酒,再配上好汉歌,步三娘,晋级。

肉食动物———— 虽然有点漫才的审美疲劳了,但是,这种成人童话改编可以讲给小朋友专场吗? 德云社颤抖吗?

庞博———— 交大吴亦凡,不对交大李易峰,不对,总之,颜值靠你了。

House———— 此人正在接受银监会的调查,脱界的巴菲特。

新人:

毛豆———— 看着他我就想吃大肠,接地气的胖子。

璎宁———— 飒,舞台空间很大。

王十七———— 怎么感觉是钢铁侠+灭霸的结合体呢?

拉宏———— 那几分钟停电了。

橙色预警———— 有些风格,但默契不足,包装很漫画,才嘛。

郭展豪———— 还是学员,还是端着,不会自嘲,只在炫技和媚眼。

航哥———— 和三弟一样,看得到慢慢的成熟和执著,东北的那股劲儿,可以。

三弟———— 熟女范儿,线下一定很炸。而且听要配酒的。

北极熊猫———— 邻家兄妹装扮,但用着国宝的名号,结果小剧场水平。

唐香玉———— 全日制钢牙妹,我是有点怀疑,你脸上的那辆小面包车是啥牌子的?肇事的!

小四爷———— 冷面笑匠,可惜你不够面瘫。

蛋卷———— 起范,真的不笑,像管理厨子的。

南瓜———— 一张快递脸和一张厨子脸的区别是黑。

曹鹏———— 有潜力,医生吗?会有源源不断的笑料。

邓男子———— 差钱嘛,春晚魔术师?还是给这些小喀们授课呢?

江梓浩———— 进化了,学会了面对自己,努力搞笑,本身也挺搞笑。想无厘头还远些。

颜怡颜悦———— 三个女人才够热闹的,加上王勉就三个女人一台戏了。

伟大爷———— 挖掘了很多新人,像黄大妈,又讲的不错。80后有共鸣。

吴星辰———— 油腻,但不让人讨厌,这应该是很高的评价了。

下面,请出一对儿新人,程璐和思文,旧人吧不合适,新人吧还差点意思。唉^_^

婚姻将是你们永恒的主题和伤害,还有笑果。

每年此时,看完脱口秀大会就想掺和。

去年的感后观还是视频,链接在此。

https://www.toutiao.com/video/7019287901984784903/

今年就简单评论来一波吧!

swift编程开发

基础特性

可空类型的操作符

左边
右边
返回
使用示例及场景
可空实例绑定
if let va = vb, vc=va{
}
可空链式调用
va?.uppercased()
va?.append()—原地修改
隐式展开可空类型(是可空类型的一种)
??(nil合并运算符)
可空类型
对应的非可空类型
nil返回右边,否则左边的展开值

数组:

声明方式一:

var alist: Array<String>

声明方式二:

var alist: [String] = ["q","p","r"]

数据比较时,注意是有序的。

字典:

var dict1:Dictionary<String, Double> = [:]

var dict2 = Dictionary<String, Double>()

var dict3:[String:Double] = [:]

var dict4 = [String:Double]()

要点:

当用key去获取value时,如果没有值则返回的是value类型的可空类型。

技巧一:循环

for (key,value) in movieRatings{

}

技巧二:转换到数组

let va = Array(movieRatings.keys)

集合:

var groceryBag = Set<String>()

groceryBag.insert("qifwef")

for food in groceryBag{

print(food)

}

要点:不会重名,相当于distinct

有uion的方法针对两个set的取交集

有contain的方法针对set来判断元素存在

有intersection(_:)来找出两个set的都存在的元素set

有isDisjoint方法来判断两个set是否存在交集

函数:

func fname(外部参数名 内部参数名:[inout]类型)->(返回)类型{

return 返回值

}

注意:内部参数名就已经是显示参数名了,即在没有外部参数名时,使用函数时可以带着。而外部参数名更多是用于介词的辅助。当参数列表中有任一参数提升了层次,即用上了外部参数名,那么,有一个_符号是用来应付无关紧要的那个参数的外部参数名。如果要熟练玩味这两类参数名,一定是在使用中玩味出应用场景的概念。内部是函数微观算法层。外部是类型和指代层。

  • 变长参数

上面的变成<类型…>

  • 默认参数

直接用="defaultvalue"即可

  • in-out参数

调用时实参要加&修饰,以示要在函数内修改。

  • 多个返回值时

-> (returnvalue1: [Int], returnvalue2:[String])

  • guard语句

func …

{

guard let mv = name.middle else{

print("out func here.")

return

}

print(mv)

}

gurard守护的条件不足时提前返回。mv的可空类型没有值,或者为nil时,执行打印out func here.和返回。

如果守护的条件“不尴尬”时,就后面用其值了,print(mv)。

  • 闭包(高阶函数)

闭包通俗来说就是{},有时是嵌套在函数内的函数。但更多的指把函数为参数传值给函数和从函数内返回函数类型,注意返回是引用类型,传入可以匿名技巧。

高阶函数是至少要接受一个函数作为输入的。如:

数组的sorted(),map(),filter(),reduce()方法。在swift中sorted既可以用传入参数的语法:

vv.sorted(by: sortAscending)

也可以使用匿名函数法。即闭包表达式的应用:

vv.sorted(by:{(i:Int,j:Int)->Bool in

return i<j

})

利用类型推断,再进化一下:

vv.sorted(by:{(i,j in i<j})

最终版本:

vv.sorted(by:{$0 < $1})

因为数组的元素类型是默认的了。

对象特性/技术

枚举:

要点:第一次创建枚举的变量就必须要初始化。

枚举类型可以没有原始值,即一定要归成Int类型。当然也可以用原始值,并指定初始值。不局限成Int类型的。

细分应用场景:

有限的

计算的,可修改

技巧:

mutation func XXX…

说明这个函数会修改对象中的值。

结构:

细分应用场景

无限的

计算的,要修改,简单继承扩展

无复杂关联操作的

技巧:

mutation func XXX…

说明这个函数会修改对象中的值。

static func XXX…

说明这个函数是类型方法

类:

细分应用场景

无限的

计算的,要修改,要控制继承及可见性

复杂关联,可见性的

总之,继承,封闭,多态。

技巧:

[final] [override/static] [class] func XXX…

说明final class == static符号,关闭子类重写本方法的意思。所以class和static两个符号在结构和类中是不同涵义的。(结构中没有class关键字)

属性:

  • 嵌套属性

类作用域中的枚举或结构,比如某一个枚举Size(类的接下来的属性会用到。)

  • 存储属性

此类型属性必须有值,默认也可,后初始也可,这主要和下面的类型区别。只读的存储类型==常量

  • 惰性存储属性

lazy var townSize:Size = {

switch selft.population{

case 0…10_000:

return Size.small

….

}

}()

注意:后面还有一对小括号,就说明这是一个运行得出的属性。但依赖的population是一个存储属性。类一初始化就已经给定,所以,算法也是一并初始就定了。而且,后面不会重新计算了。这块取义依赖的成分大于惰性。

  • 计算属性

var townSize:Size {

get{

switch selft.population{

case 0…10_000:

return Size.small

….

}

}

set(){

}

}

  • 属性观察者

var population = 5_422 {

didSet(oldpopulation){

}

}

  • 类型属性

此类属性的值在同类型实例间共享。但必须有默认值(原因是没有初始化方法的)。

在类中的可以用class修饰来让子类继承覆盖,也可以用static来禁止覆盖。

适合将没有入参的行为改写成类型属性。

  • 访问控制

描述
对who可见
能继承使用
open
Public
internal(默认)
fileprivate
private

初始化方法

  • 结构体的默认初始化

var myTown = Town()

结构体的成员初始化

var myTown = Town(population:10_000, numberOfStoplights:6)

  • 结构体自定义初始化

委托初始化(在结构体中称为这个,在类中同义但是称为便捷初始化)

init(){

self.init()

}

  • 类的初始化(在类的继承场景中)

指定初始化

init(){

//初始化本类引入的属性

super.init()//调用父类中的初始化方法

}

便捷初始化

convenience init(){

selft.init()//本地的初始化,其中也可能调用指定的初始化,层层初始。

}

必需初始化

父类中要求

required init

子类中实现,关键字包括了Overrider的意思。

required init

反初始化方法

deinit{

}

高级特性

协议

枚举,结构体,类都可遵守协议,同时协议也可以继承,也可使用&来组合(用于传递参数)。可以理解它为是样貌。

protocol Velocity{

}

异常

func getNumber() throws -> Int{

throw 类中枚举的异常值

}

使用上面的函数时便可try getNumber()

或者在外层包裹:

do{

try get…

anotherfunc()

}catch Parse.Error.unexceptedEndOfInput{

}catch{

}

扩展

注意针对是类型,且是可以针对协议的。强大的冒汗了。可以理解成它是样式

typealias Velocity = Double

extension Velocity {

}

泛型和协议扩展的争论

泛型是固化一种模式算法,而扩展是让对象本身增量元素或行为,即样式或样貌。

所以,会用泛型,你要先具备知识,知晓有了某种前人栽的树,即知道已经有满足的可用的公共泛型函数了。

而用协议扩展,你就要自己栽树,但只给自己用在自己的地里。

育娃感悟

孩子是这个时代的焦虑之根。教育,健康。什么是更好的孩子,怎么成为更好的孩子。为人父母者苦苦寻觅,散尽千金……哲学能救人,救市,还是救时代!科学能害人,泡沫,还是制造焦虑!看着老婆发来的照片,一大堆儿童医院里测骨龄、看身高的家长和孩子们,我有点惊呼:这个时代的可悲与可笑。如果你能选择,你愿意选择活在当下吗?我的老婆认为让孩子长高才是父母应尽的义务。用生长激素来干预。我们不禁要反思,什么才是父母的责任,并且关键什么才是你责任的范畴呢?那些望子成龙的人,揠苗助长的监护人们…… 说他们为了自己的私心,他们一定是不服气的。 但孩子都是这样的家长给养废的! 为了成绩,为了长高,为了让自己的娃成为别人眼中的孩子。 而不是让孩子们成为自己。希望大家一起呼吁一下,父母和孩子,夫妻之间不要再“互相伤害”了。有些是我们必须干预的,有些是画蛇添足。为下一代养成饮食,作息,运动的好习惯,父母要处无为之事,行不言之教。一世缘分,各在其位,转眼而过,沧海一粟,包容带动,岂不快哉?

一簇牡丹花的家族传承

这簇一脉相承牡丹花的故事要从我爷爷讲起。本人的老家在东北辽宁的农村,有个叫小鸡冠山的地方。只所以叫这个地名,除了村边有了一大和一小相连的两个像鸡冠一样的山之外,在村里到处都找不到蝎子,因为,鸡是蝎子的天敌嘛。而相邻的村却是盛产蝎子。无奇不成书,从我爸爸八岁记事时,就已经有了这颗牡丹花,那么现在我爸68岁,那么百年牡丹花,名也副实了。爷爷在供销社工作,薪水虽然不多,而且要养着一大家子人。我爸是他最小的儿子了,排行老五,前面有两个哥两个姐。(这文章很多素材来自于他们,向亲人表示感谢!)

爷爷闲时就种花,而独对这颗牡丹悉心照料。那个年月,孩子都吃不饱饭,庄稼都种不过来的。但勤劳的人还是有路子生活。爷爷兄弟三人自己排行老大。话说,适逢文化大革命,除四旧。我们家虽然不是地主而且政治成分清楚,但是中农,不免也是要被刮一波的。听说,红卫兵要破坏花木,爷爷早听到风了,让我二爷连夜把牡丹花移栽到了一家贫农老赵家。花幸免了,可怜了那些只能存在于我爸的回忆中描述的器件了。比如:我印象中爸爸每每吃火锅便聊到的八仙涮肉火锅,号称比九宫格火锅设计的还好,八个人一人一面,精美绝伦。我太爷的许多书也被收了,全家人当然很是心疼。事实上,若只是身外之物损失也只是慨叹一下,但家人的精神和肉体也没有能幸免,这里就要谈到两把手枪。这块的故事不展开了,不然题目就要改成“枪炮和牡丹”了。但大家持续关注,我会再另外一篇来介绍,以此缅怀旧事。

发一张我爷的年轻时相片吧。这颜值我没能继承多少。

牡丹花分外的争气,它似乎理解爷爷和二爷的用心,在风声过后,从老赵家又迁回后,用茁壮成长来报答主人。爷爷的前后两任妻子都去世了,爸爸也是很早就没了娘,后妈待他不错。爷爷在供销社当掌柜看店时,邻村的朋友带闺女闲逛,爷爷一看这一个小姑娘挺好的,聪明伶俐,那便是我的妈妈。爷爷几次接触便找到姥爷家给爸爸妈妈订了娃娃亲。姥爷家也是儿女众多。九个孩子,还不算夭折的。有一次全家人种地,来征兵的,跑了三个儿子。他们不到征兵的年龄,但也谎报参军了抗美援朝,一走就是几十年。后来三个儿子没有在朝鲜的战场上牺牲,都当了师级以上干部还找回了老家。那时候如果有拐卖人,就细思极恐了。爸爸在农村吃苦受穷,上一辈人管不过来的,只有靠他自己的悟性。爷爷算是个商人,受其影响,我大爷算是个会计,珠算能力算神童的。而我太爷是个教书的先生。他教会了我爸下象棋,种下了一颗科举的种子。如今,我偶得了太爷的一本线装手墨,小楷那是一个漂亮,并且,字里行间无不关怀下一辈的教育。对于书法和家风教育这块,也足以分章的。我太爷写的软笔字文集,让当时年幼的我爷用笔帽醮红印来点标点。这种教育方法,我在国学大师黄侃教育弟子时见过。

而下面的硬笔则来自于我的爷爷,他整理了自己父亲的文集。同时,为后世子孙奠定了教育基础。

总之,农村人要想改变命运只在一句“一命二运三风水,四积阴德五读书”。事实上,有志读书也是要有环境。家里实在农活多,我的两个姑姑,长身体时却营养不良,大姑没有读书上学,而且承担了那个年龄小女孩不应该负担的重担。她便早早的外出谋生。二姑和我爸上了学,我爸在需要父母照顾的时候都是二姑在身边,这种感情不必多言。父母终究熬了出来,父亲在恢复高考后,坚持学习,上了大专。而母亲也奋斗到了一个学医的中专。过程却没有那么轻描谈写的。那么多农村子弟,为什么是你呢?你凭什么就吃官粮去?我来详解。文化大革命后,妈妈在农村当赤脚医生(走后门),哪有什么专业学习,就是挂名唬人。但守命待时,医学院要给每个村的赤脚医生一个进修学习的机会,那么母亲得到了这个机会。这一点颇像彭丽媛被音乐学院录取的过程。招生的人去到各村,物色学员,村长,支书,富农的儿女自不放过这些机会的,但政策要对贫下中农的子女多政策倾斜。可是,招的差不多时,总有些有着梦想的边缘人物。彭丽媛追着招生老师的车,边跑边唱,终于机会给了有准备的人。我妈也是有着一个好嗓子的,女孩子有才艺就有好命。而男孩呢,刻苦读书,我爸终于当上了一个县城冶炼厂的临时工,这个位子还是送礼走后门才得到,比固定工多做活不说,一把年纪了,晚上还要坚持看书。因为,恢复高考了,希望在召唤中。我特别关注电视剧中有关这一段青年生活状态的描写,可以说是竖起眼睛听。有的情节是,别人嘲笑他们一把年纪不好好工作,有的情节是为了请假去参加高考,在机床边,砸伤左手,因为右手要写字。最近的是《在人间》,爸爸看哭了,里面周芸的命运就和他的高考前后高度相似。

好在父母学成归来,依然爱情,他们努力分配到了一起,妈妈在乡镇当医生,分配到了一个平房宿舍,说是两卧一厅,但小卧不到10平米,总共不到30平。爸爸当一个中学教师。学习改变命运,告别了农业户口,双职工家庭的我竟然还有保姆来照看呢。我大约3岁左右,才第一次回老家小鸡冠山,但在途中父母把我放在姥姥家,偷偷的。因为那是我第一次与父母分离,所以印象深刻。他们要去小鸡冠山料理我后奶的后事。这也让我从下生来还没有见过奶的时候,就永久告别了这个称谓。从此,爷爷就孤家寡人了。他的孩子们也都成家了,甚至有了娃。因为,我爸是老儿子都有了我嘛。这颗牡丹一定陪他走过那段伤心的岁月。当他决定要来我们家和我们一起生活时,他也决定自己走到哪里,就把牡丹种在那里,于是我们家属院宿舍的门前就有了牡丹花。可是家属院的房子都是两户一院的。所以,邻居并不太满意,一簇花占用着本来不大的小院的中心位置。好在勤劳的人总有办法。妈妈开垦了一个小菜院,里面有颗小枣树(下面埋着我的胎盘)。于是,几个寒暑后牡丹仙子又落户到了菜院里。上面便是我的直接印象了,冬天来前,爷爷用纸壳把它包得严实(估计也考虑了透气),上面压砖,侧面用绳子固定,还在外面一圈堆上两排红砖,防止风雪把纸壳吹走。每当开春了,牡丹就展示它的神奇王者风范。花大,花红,花香……我虽然有时当帮手,但总体来说都是不情愿的。并且对养花草都认为是浪费时间和空间。要知道,这样一簇大花占用很多玩耍的地方。但我的生活中有牡丹是我的福分,直到这一刻,我才顿悟。那年月物质生活几乎就是吃睡。医院的家属有人看到花美就拿了相机来,我爷,我妈和我和它照过几张相。牡丹花就像一个重要的成员处于C位,骄傲的绽放。也应该是我的第一张彩色相片。

牡丹花越长越娇艳,岁月不失。我们家经历了从乡镇到县城建昌,后从县城到葫芦岛市区。搬家到县城时,也是租住平房,虽有园子但园子是用来给房主种菜的。于是,只好把牡丹又先迁栽到了同城我二大爷家的院子里。等搬家稳定后,再图把牡丹的主根回栽。而这一等,就是5年,我们又要搬家到葫芦岛市区里去了。

下图是二大爷家院子。

后来,二姑邀请爷爷去小住,爷爷分枝栽培了一份牡丹到二姑家的院子里。这样花开两处了。如下图:图片两边是二姑和二姑夫。

中间就是我爷,下图左右是我父母去串门时合影。

由于父母工作再次跃迁,从县城到市区了。租房的地面是水泥板了,没有条件了。牡丹很少见是盆栽的,可能是花中之王的骄傲吧,即便爷爷分枝栽培多次也只成功了一次,那就是在二姑家的那一簇特例。爷爷只好种了一些其它的盆栽植物,依稀记得我和妈妈冬天收花到屋里,开春再摆到院子里。过了3年后,我们终于有了自己的房子,是爸爸单位分的楼房。虽然,终于不再住平房了。但牡丹却很难在门前陪伴。爷爷想念牡丹时,就去儿女家看看。直到,我们家换买了一楼。爸爸考虑爷爷年纪大,上下五楼不方便,就换了个一楼。爷爷终于可以开始了迎回阔别8年的牡丹花的计划。不用说,入住后的首要之事,便把二大爷家的牡丹主根用租货车的方式从建昌拉到了葫芦岛了过来,人工和车费共约600左右。同时妈妈也在窗前开垦起自己的小园子。这几乎是带动了整个小区的人开始了绿化。楼上楼下有的种菜,有的种花。但只要到春天里,全小区最上镜的当属我家窗前的花中之王。它霸气的立足在窗前向阳处。如今,其它的二处牡丹已经由于变迁不知所终了。也许爱花之人给它机会,也许不了了之。爷爷还是迎来了他的最后岁月,享年94岁的高龄让我们在悲痛之余,也有些许的安慰。我们对牡丹的爱,不及他老人家的十分之一。他健在时常言道:你们要好生养这颗牡丹,看到他就像看到我一样,想念我时就看看它,浇浇水就算有心了。

不可否则上图就是我本人的首张相片啦!听说,那是妈妈同事的相机,我正穿着借来的衣服。

上图是爷爷的近照,在二姑家院子。

爷爷没能看到我成家也是遗憾之一。幸运的是,我的爱人也是个爱花之人。我深圳家的前后阳台的花,我都叫不上名和品类。我只是偶尔的留意这些花的美。有时我还取笑她,竟然在网上买土,买多肉种子,奇奇怪怪的工具,还养了几条小鱼。但我不得不承认,是她让我的生活充满着美。如果说我的心里开着牡丹,而老婆就是那浇水的人。我的第一个孩子出生在葫芦岛,所以,索性也把儿子的胎盘埋在了牡丹花的下面。我和我爸又浪漫了一把,把牡丹和家人的DNA交融在了一起。哈~~有没有点聊斋的感觉?

我虽然没有太多田间耕作的经历,也不算是农民的儿子,对土地对植物,心生敬畏和感恩。被家人驱动干农活时,有点兴奋,但干活完全的劳累又让我颇有微词。我才半天一天就累的不行了,试想那些天天脸朝黄土背朝天的农民是多么的可敬。但渐渐我觉悟到:人就是植物,需要枝枝蔓蔓、阳光和水,需要相互之间简单的理解和关怀来配合自己的一生向阳的生命力。

我和当医生的妈妈合影。

一个家里要感恩有一个爱植物之人,那个人是家的风水。在我家父母当年忙于工作,很少田里劳作。但好在爷爷推着我们家的绿植建设。现在,父母退休,接过了爷爷的衣钵。当然,也是回归了曾经农民儿女的本色。这簇牡丹的生命力让我们惊叹。爷爷去世后有几个冬天,爸爸也生病手术,我又不在身边。牡丹在过冬时,没有被包裹呵护,我们曾担心它熬不过寒冷的季节。记得有一年,百花都有了新芽,但牡丹花错过了它的花期,仍没有什么生气。我爸便断言,牡丹花死了,待到去北京看病回来后,就挖掉扔了。但神奇的牡丹,百年的牡丹起死回生了。它好像继承了爷爷的风骨,不仅保佑着爸爸手术康复,妈妈和家人们健康,现在我也是儿女双全,这是袓上积德。记得小鸡冠山的祖坟的风水寓意,希望我们的家族要走出贫苦的农村。现在,已经实现了。老家已经没有近系亲戚。现在,我在离家最远的岭南深圳写这篇文章,真是应了那首歌词:

我在南方的艳阳里大雪纷飞,

你在北方的寒夜里四季如春。

南山南,北秋悲,北方有墓碑……

前几天,爸妈和我大姑和大姑夫又在牡丹仙子前合影留念了。生活需要仪式感。

突然诗兴:

门前又见牡丹红,新人永驻乐融融。

爷爷在天灵有护,四世同堂旺双城。

爷爷——您看到了吗?你在天堂还好吗?

我们会努力呵护好牡丹仙子,争取让她在南国也成长,让她再开百年。

在线呼一下农业知识强的高手。欢迎指教。

1)如何鉴别这簇牡丹花的品种,有人说,这不是洛阳牡丹的品种,因为,他长的高大,叶大,花盘大。

2)如何能提高牡丹的分枝栽培的成功率和科学的养殖等。

曼联与国足之五大相同点


同为各自圈内的豪门虽然一个是俱乐部,一个是国家队,但不可否认,在俱乐部中曼联球迷的占比全球第一,同样,在国家队的支持球迷统计中,中国男足的球迷也绝对的世界第一。都不差钱吧,高薪请教练,高薪买人……没有一个教练能呆的长久,屁股稳定。


同为取笑的资源找乐子的话,看国足段子和英超漫画。


教练都是背锅的傀儡上场的一半的人都是别人安排的,而非出于战术需要。背后的曼联财团吸血,中国足协也有生意经。流水的主帅,都是人情事故。分手了,老是感觉上一任其实挺好。短视的人掌舵,就相当于泰坦尼克。


青训更是一沓糊涂马奎尔,林加德,博格巴都是曼联的产品,现象级几场面之后就是球队的毒瘤。看到国青或俱乐部的青年队,也是愁的后继无人呀。


成绩一样的惨不忍睹钱花了,人买了,留给自己能赢的对手却越来越少了。

一句话评2022世界杯分组

A组:卡塔尔、厄瓜多尔、塞内加尔、荷兰。

评论:三尔争二。这可能比较差的东道主签儿了,财团和卡塔尔足协后悔银子没有拿够呀。

预测:三个XX尔国,争一个小组第二。塞内加尔说东道主有Money我也有马内,人是活的。

B组:英格兰、伊朗、美国和(乌克 兰VS苏格兰的胜者)

评论: 注意安保。美伊不用说了,英格兰和苏格兰也是多方面历史宿敌。

预测:英和美出线。

C组:阿根廷、沙特、墨西哥、波兰

评论:两辆小摩托带着王储和田径冠军旅游小组比赛,各自归好。

D组:法国、(阿联酋与澳大利亚胜者vs秘鲁)、丹麦、突尼斯

评论:法国和丹麦练练后,其它的拼不过底蕴。最不具观赏性小组。

E组:西班牙、哥斯达黎加vs新西兰、德国、日本

评论:这里是“小世界杯”。各块大陆各派出一强队。准死亡小组。

预测:德国和西班牙是慢热的,估计出局一个,西班牙吧,而日本刀能否被南美风情迷惑呢?未必

F组:比利时、加拿大、摩洛哥、克罗地亚

评论:一直很担心克罗地亚这波老枪迟暮,希望小组比赛多出新人。相对比利时板凳上可能坐着扎球王。

预测:比利时,克罗地亚,很明显啦~

G组:巴西、塞尔维亚、瑞士、喀麦隆

评论:要知道国际足联搞这么多年随机转球抽签,但儿子和宠臣就是那么的顺。

预测:巴西,瑞士

H组:葡萄牙、加纳、乌拉圭、韩国

评论:勉强算是次死亡小组。因为,加纳是老牌劲旅,韩国也有当红小生。想看梅罗在各自最后一界中有场对话。

预测:为C罗留下葡萄牙,为弥补失意大利之蓝,放过乌拉圭。

易经

起卦

三不占原则是:不诚不占,不义不占,不疑不占。方式有二:

  1. 六爻
    • 三枚大钱,三正或三阴情况即为老阳或老阴,在各自对应为阳和阴之外都要算是变爻,其它,少阴为阴,少阳为阳,六次可成本卦和之卦。从初开始,(一摇得一爻,同时记住变爻)。
    • 这里重点是变爻会有多个。
    • http://life.httpcn.com/liuyao.asp
  2. 数字
    • 3个数,前两个都是取余在8以内,最后一个余数为6以内。
    • 按卦序即可成上下卦了,再加上动爻。
    • 注意这里与六爻不同的是,这是第几个爻(从初开始数)卦变出之卦的。

解卦

https://gua.wncx.cn/

https://www.bilibili.com/video/BV18q4y1u7mc

https://www.bilibili.com/video/BV1ma411k7Z1

学卦

乾天刚健,自强不息

坤地方直,厚德载物

水积雷响,屯积助长

山下流水,启蒙德育

水在天上,需等饮食

天升水落,讼兴不争

地下藏水,师出有名

水漫于地,密交亲比

风行天上,小畜积雨

天下有泽,和悦慎履

地天相交,和谐通泰

天地相悖,闭塞成否

天火同燃,同人团结

火燃天上,大有收获

地中隐山,谨慎为谦

雷响于地,豫乐自警

泽中有雷,随机应变

山下有风,蛊惑横行

地高于泽,居高临下

风拂大地,遍观通达

火闪雷鸣,噬嗑威刑

山脚火焰,贲饰文美

高山附地,剥蚀去伪

地下雷鸣,刚阳复兴

天降暴雷,守道无妄

山中有天,大畜能容

山下有雷,养志颐情

泽淹风木,大过之征

习坎为水,守信克险

附离为火,柔顺亨通

泽山相应,咸感贞吉

雷响风行,识道守恒

天下藏山,退遁避险

雷震天上,识礼大壮

火出地上,晋升明德

地压潜火,明夷避祸

风熊火里,家人同乐

上火下泽,睽违少和

水漫山路,蹇滞艰难

雷鸣水降,解除旱象

高山低泽,损下益上

风激雷荡,益下损上

泽与天上,夬决坚刚

天下微风,阴生姤合

泽汇于地,萃英聚众

地平风扬,贤能萌升

泽中漏水,知困早悟

水盛风木,井收勿幕

泽中起火,改制旧革

火燃风木,鼎新之物

震雷压惊,反思内省

艮为山止,知止当止

风木依山,循序渐进

雷震泽上,归妹依礼

雷鸣火电,丰茂光明

火烧山外,旅途亨通

巽为风顺,大人齐物

兑为泽悦,修德和睦

风行水面,离析涣散

水溢泽岸,节制礼数

风吹泽面,中孚信诚

雷惊山上,小过无妨

水火相融,既济功成

火水离错,未济大江

架构师论文之微服务

摘要

本人所在的单位是致力于为铁路和地铁提供技术服务和解决方案的研究机构。近年来由于地铁建设的不断扩张,线网式的管理日益受到了重视,为网络化运营的前提下,应对不同线路运营公司不同专业和不同的承包厂商,多个维度的应用的快速开发和集成,以及持续的进化的难点。需要设计新的适合场景的架构。在这样的背景下,2020年初某某城市地铁公司联合腾讯作为伙伴,一起派出人员组成了联合工作组,在线网智能运维项目中,推行以微服务为主的架构设计,业主同时提出解耦各专业厂商的应用和降低运维成本的要求。本人有幸加入在工作组中,主要负责了穗腾OS的架构设计和负责轨检专业的微服务集成工作。

联合小组最终开发出来的穗腾OS平台,它依托于腾讯云的paas。功能包括:协助各厂商接入智能运维平台,支撑了微服务的全面落地。此外还包括了地铁运维数据总线和算法/组件市场等子系统。本文着重从微服务的角度展开讨论。

正文

2020年某某城市的地铁线网智能运维平台开始建设。它被赋予线网级的综合监控和协调管理。这就面临着去集成既有的、已建设完且正在运营着的地铁线。以前建设此类平台的做法是依赖业主的铁腕,要建设的平台一般在业主的组织下与一家家的专业厂商谈接口协议,再开发调试,串行的去适配各家的单体应用。最后上线的运行效果且不说,耦合紧,工期长,变数多,后期维护成本高。面对这些待解决的痛点,联合小组提出了微服务为主的建设方案,各专业厂商的微服务需要接入穗腾os平台。在本文中首先介绍一下微服务的技术,再介绍微服务在项目中的用武之地—穗腾OS平台,最后结合实践的经历,阐述一下微服务的设计,服务治理和运维以及开发工具链。

首先,微服务是由Martin fowler最早提出的。它是SOA面向服务组件模型的一种实现,但它与同为分布式的esb企业服务总线不同,在微服务中服务提供者(provider)和服务消费者(consumer)之间并无转换和中间层,是去集中化的。同时服务提供者也可能是其它微服务的消费者。它允许各微服务以各自独立的技术栈开发。要加入智能运维平台的各专业厂商要横向拆分功能,以细粒度的组件方式提供。采用轻量级的协议。穗腾OS支持了HTTP/REST和dubbo等。微服务有小独轻松的特点,小不仅指拆分后的微服务灵活和功能单一,还指微服务的开发团体以小规模为佳,一般厂商团队都在5~7人,他们是特性团队,对微服务有着全生命周期的负责,包括设计开发、测试部署和交付。这和敏捷方法所倡导的理念高度契合。除了对团队规模要求不谋而合外,敏捷方法和微服务的初衷都是快速上线,尽早获得用户的反馈。而相信读者也能看出瀑布式的过程模型也由于自身原因很难实现细粒度单元的快速,流畅的交付。独的特点体现在独立的部署和交付,每个微服务也独立运行在各自的进程空间中。轻是指微服务的API无关性和使用HTTP和REST协议。解决了典型的RPC存在的调用者耦合问题。同时能快速搭建访问资源类的应用服务。REST把资源URL标识且在规范的http协议下设计操作(post、delete、put、get)。最后松是指松耦合,易复用。在穗腾OS运行时,提供了一些厂商级的公共微服务,比如身份认证,数据字典查询等。只要厂商提出调用申请,联合工作组开通其权限,厂商通过token凭证等信息即可使用。不然,如果项目中空调、电源、网检、轨检都自己去开发认证鉴权功能,将是极大的浪费,也不符合软件工程的思想。

穗腾os平台是paas,也就是厂商微服务部署和管理平台,智能运维平台应用的支撑环境。为方便厂商的微服务开发人员上手,本人带领联合小组开发了系列的demo模板工程, Java技术栈和GO语言使用的SDK,都能指导厂商接入穗腾os云生态中。同时作为架构师,我在设计架构时,预见到了当微服务接入的服务越来越多时,对某些核心微服务的调用依赖便达到极限时,可能会出现雪崩效应,如果应用间触发链式反应,受其影响的全线智能运维平台可能都会瘫痪。除了在服务治理的容错上设计外,本人提出用专业的消息中间件来作为基础设施向有场景需求的厂商提供,我们梳理了重要的场景,尤其是聚合根或事件源角色的微服务。也规范了中间件的使用制度。小组最终采用了本人的建议选型了kafka作为中间件布设在车辆段(地面中心)和车载的网络中。从厂商应用的角度设计了角色主题的命名规则,也就是topic。以网检的topic为例,18-wangjian-01的格式。18指线路号,拼音指业务分类,最后为专业厂商的业务通道标识。这样消息的订阅者就可以有的放矢地领取消息了,避免了冲突。专业厂商获取专属于自己的业务范围的消息,这也是安全性的角度考虑。

下面从具体专业厂商的角度来讲解微服务实践。探讨微服务的设计或拆分,微服务的治理,开发工具链和运维。在指导轨检专业集成时,本人借鉴了DDD(domain driven design)中一些设计方法。事实上ddd的提出更早于微服务。它主张以业务领域设计来主导整个开发活动,这对领域模型准确性要求非常高。在此基础上,不同的界限上下文中允许出现重复的实体(事实上实体在不同子域中侧重面不同)。DDD是打通问题分析域和解决域的一种创新。正所谓,德不孤,必有邻。DDD和微服务相结合,就像如虎添翼。把单体程序垂直拆分细粒度单元时,识别子域很重要,每个子域内众多微服务围绕着一个聚合根,并由其对外接口。内部业务单一,内部细粒度单元则是职责单一,借鉴了设计类的单一职责原则SRP。轨检专业分车载机检和人工巡检。前者有人工智能算法配合激光相机的帧图采集,后者人工经验比重高,自动化程度偏低,但两个子域分立后有些重叠的部分。在ddd中一般用两种手段再细分,如果重叠部分是一些操作过程,那么抽取出来变成领域服务,一般领域服务命名是动词开头。另外情况就建模为对象。具体是建成实体对象还是值对象。可以再从数据的唯一性角度分析。在项目中,把里程纠正作为是机检和巡检都依赖的领域服务去实施的。

在子域或者说界限上下文中,有地方也分翻译成限界上下文。总之子域内业务是单一的,细粒度单元中职责是单一的,遵循SRP。如果不是这情况,那么的原因就是未达到细粒度的拆分标准,需要重新审视一下,重新分析过程。

在界限上下文中存在上游和下游微服务如何集成问题,这时ddd的建议是用分层的技巧。可以参考某些资料,理解下何为通用协议层和防腐层。一般上游对下游的接口用up通用的协议来设计,比如以rest对外资源接口。而下游去支撑上游业务流程调用时,要开发出防腐层。ACL的建设手段可以应用门面设计模式,或者设计隔离适配层。acl的设计可大可小,用来适配遗留或外部的系统接口。它的作用既保护好自身领域模型免受侵害,又确保不同域在未来保持分离。本人在指导厂商设计微服务时也给出了其他的参考意见。如下:一,根据io的类型是读密集型还是写密集型来分类拆分。二,消除循环依赖和让核心微服务不受非核心微服务的异常影响。即核心不要依赖非核心微服务。三,根据非功能属性拆分服务,比如复用性、资源一致性、部署升级频率、伸缩性等。项目中,轨检中建设加密狗的业务环节时,由于具体需求当时尚未敲定,于是把变动性最高的环节独立设计成微服务,后期时方案成熟即替即用。对于微服务应用中最核心的环节就是服务的治理问题。它包括服务的注册、负载平衡、配置中心、容错。而容错中又细分有限流、超时、隔离和熔断等特性的。在脱离穗腾os平台的生态前提下,最合适的开发工具链则是spring cloud全家桶。它作为Java语言的解决方案,可选的注册工具有euroka和noca(阿里bb开源的)。注册/配置中还有consule。配置中心可选 spring cloud config。方便在测试环境、类生产环境和真正生产环境集中管理,灵活切换各种配置文件。网关建设应用zuul。Ribbon是一种客户端的负载平衡,他和euroka可以配合使用。在容错方案中spring cloud全家桶中的hystrix结合设置阀值的技巧,能帮助微服务在高并发出现时,在核心微服务上包装断路器暂时中断服务,待高峰过去再自动恢复。断路器是用三种状态,有打开、关闭和半开,专门处理线程耗光时的调用问题。同时,也可以设置阈值来保护微服务不被恶意调用。然而在本项目中,穗腾os平台在支持主流的spring cloud微服务生态时,也支持dubbo的RPC协议。厂商的服务如果是基于spring cloud开发的,那么在部署时需要适应性的维护。包括:从euroka注册方式改造到穗腾os的注册方式。这时需要调整的是 pom.xml文件。同时配置中要禁用hystrix,以便让腾讯的容错特性来接管。这些上线前的技术支持,联合工作组都会派出人员悉心的帮助。当部署交付到穗腾OS平台后,厂商团队也渐渐感受到了微服务结合云的一些利好。比如使用穗腾os封装好的调用链追踪,可以图表化展示微服务的运行情况。因为每次对微服务的请求都记录了日志,随时都可以溯源。同时穗腾os还支持容器和虚拟机/集群两方式的部署。如果用docker容器的,推荐仓库式的运维的特性,让用过git的开发工程师立刻解锁新技能。用docker push/pop命令一键部署和拉取云上的容器。而对于运维工程师,也能轻松激活devops的流水线生态中的方案。

就像操作代码仓库一样, 用docker push/pop命令一键部署到云。这些都是降低了运维的成本,也提高了devops的生产力。

项目最终成功上线,应用于某某城市地铁18和22号线上,解决了地铁业主提出的解耦各厂商应用和降低运维成本的两个问题。同时许多优秀的算法和组件在平台上涌现和沉淀。随着穗腾os2.0的商业化推广,新的架构模式在轨道交通行业方案中占有了一席之地,更多的红利会渐渐回馈开发者,开启双赢模式。同时冷静客观的看待微服务技术,还是仍然存在有待改进的地方。比如调用的响应速度,分布式下的事务和数据一致性的方案较复杂,调用链追踪技术还要有待发展。所以说流行的架构也不是万能的,不能脱离场景而选择架构,希望同僚们理性分析需求场景,更希望大家能共同健全微服务的生态。

架构师论文之软件架构风格

摘要

本文将主要讨论三种经典的软件架构风格,并且三种风格分别对应三个本人所负责的三个项目。首先是微内核风格是本人在开发自动售票机产品时使用。第二种管道过滤器风格是本人在开发架构地铁线网行车信号监察项目时的实践应用经历。最后再介绍一下微服务风格的架构项目,这是在2020年某某城市地铁智能运维项目中的应用。由于本人所在的单位是为铁路和地铁提供技术服务和解决方案的研究机构,故本人所阐述的项目背景也以轨道交通行业为主。软件架构风格发展到当今已经枝繁叶茂了,这极大的扩展了架构师选择架构风格的范围。本文首先宏观上罗列一下架构风格家族的成员和概念,中间详细讨论一下三种结合实践的软件架构风格。最后小结一下软件架构风格的意义。

正文

掌握软件架构风格的相关知识是每个架构师的必修课,即使不能各个风格都经历和擅长,但通过学习达到能识别或者辨析各种架构风格也是相当必要,为日后架构工作时选择准确的风格来匹配业务场景提供帮助。宏观上由于软件风格不断垂直细分,风格与风格是之间关系也略复杂了。下面梳理一下或相似或隶属的关系。在独立构件架构风格中,包括事件架构风格、进程通信风格。在虚拟机风格中包括解释解析器风格、规则系统风格。仓库风格中包括黑板风格、超文本风格、数据库风格。注意要区分这不是数据流风格,因为数据流风格强调的数据处理的过程流环节,它包括了批处理架构风格、管道过滤器风格,稍后会重点讲。还有调用返回风格也是比较常用的,包括了主程序子程序风格、层次结构风格、面向对象风格,其中层次结构风格,又不同于层次架构风格,在后者中分了B/S,C/S和三层c/s。当两层C/S中独立出了服务器后,业务逻辑就不在与表示层耦合了,这样客户端就变成了瘦客户端。这样风格的程序是比较容易移植和方便客户端部署,增加安全性。尤其是能在某些客户端资源有限或者紧张的场景中使用。其它,还有闭环风格,C2风格以及SOA家族的分布式风格。

软件架构风格,是描述了某一特定领域中系统的组织方式和惯用模式,它定义了一个系统家族,包括体系结构定义,一个词汇表和一组约束。词汇表,包括一些构件和连接件类型。而这组约束指出系统是如何将这些构件和连接件组合起来的。反映了领域中众多系统所共有的结构和语义特性。

以微内核风格为例,通常包括微内核、插件和UI界面。仅是从语义上就很容易理解微内核和插件的约束关系。即插件是插在微内核上,当插件脱离微内核构件,微内核可以支撑程序继续工作。就像是热插拔U盘时并不影响电脑的其它工作和其它硬件。在复杂的应用系统场景中,当插件不可用的时候,可能会出现降级服务,但应用不会崩溃。大家都体验过自动售票机,简称tvm。它包括了出售单程票,充值一卡通,找零。现在的一些更先进设备,还有二维码的扫描器,一般几个硬件配合围绕着一个应用服务。但当不能收硬币时可以收纸币,不能收纸币时可以扫二维码,不能售单凭单程票,tvm就降级,降级服务为充值一卡通,打印机坏了就提醒不要发票,询问用户是否可以接受。这些TVM的应用场景很多人都经历过,本人开发tvm机内软件,就需要把各种软硬件模块抽象成插件。而主控,也就是微内核的角色,他掌握着事件循环,就像大脑来管理协调各种器官一样。tvm的界面与主控的是分离的,通过socket协议通信,所以严格来说这是界面分离式的微内核架构。界面(UI)可以把插件的状态显示,当所有的硬件插件不服务,界面(UI)还是可以查询地铁的线路信息。想必这种风格已经给大家很形象的认识了。

接下来介绍数据流风格的子风格–管道过滤器风格。通常每个构件都有输入和输出,数据在各种环节中处理(批处理风格是顺序处理的)。管道过滤器风格的特点是,在输入未处理完时,组件输出就已经产生了,最后呈现结果给外部或输出给其它构件。而这个构件就是过滤器。在此项目中之所以没有选择相似的批处理风格来架构,是因为信号数据是实时的指令流,而非纯后台作业。并且处理步骤之间并没有清晰的分界。所以,为了不延迟信号的连贯渲染,就只能用管道过滤器风格。同时也未使用管道过滤器可以并发的特性。本人在架构线网行车信号监察项目时的业务场景如下:外部信号承包商有一套信号协议,包括20多条指令,其中包括道岔、信号灯,还有轨道状态,还有其他的一些信号设备状态。而同时本公司内部也存在着一套信号协议和成熟的渲染程序。如果改造渲染程序来适配外部的信号协议将是巨大的工作量,并且伴随风险。而为了快速上线和高可靠性的质量属性要求。本人选用了管道过滤器风格实现了架构。即新开发了协议转换组件,它相当于风格中的过滤器角色。软件工作时,原有的分发数据的通信模块会直接调用新开发的组件,完成过滤转换。软件很快就成功的接入了外部行车信号的数据。为了过滤器转换处理效率提升,本人使用了内存管理算法健全和控制内存api强大的c和c++开发。当然开发中对内存管理稍有不慎时也会碰到,内存随着进程时间运行越久,占用越大,在几分钟之内就可以让进程崩溃。

最后在重点讲一下特别火的新晋的软件架构风格-微服务风格。他属于SOA大风格中。在分布式风格中webservice/ESB是与微服务有着些许类似,但ESB是企业服务总线。一个介于服务提供者和消费者之间的环节,虽然解耦了两端的依赖,但同时也是中心化和集中化了。而微服务是面向轻量级的协议,比如HTTP,还有API无关性。服务可以用各种技术栈来建设,微服务提供者本身也可以是另外一个微服务的消费者。微服务解决了典型的RPC存在的调用者耦合问题。微服务的架构风格说明它是更纯粹的分布式。有着小独轻松的特点。每个微服务功能单一职责,细粒度且灵活。独立部署和交付。微服务也是独立运行在各自的进程空间中。本人在某某城市地铁智能运维项目中,组织研发了以微服务风格为主的架构产品。具体的场景是:地铁业主要求在平台上监察各专业设备的状态,比如车载电源、车载空调轨道的损耗。而各厂商的方案不能串行的调试开发适配,业主要求解耦单体程序且降低运维成本。因为任何的软件和服务难免升级,而且不可控,一旦有耦合关系存在,厂商就要牵着业主的鼻子走。此时应用微服务风格就是好的选择,它具有的特点也有了很大的用武之地。各厂商拆分细粒度的微服务组件,自己业务自治,快速部署和方便管理。交付在业主提供的paas上。解耦的附属好处就是复用,很多公用微服务可以被集中管理,比如很多专业都用到了身份认证和数据字典查询。当一步步的健全微服务的生态时,许多组件可以市场化的。优秀的算法会慢慢的涌现。并且以各种红利的方式来回馈开发者。新的风格引出新的架构模式,促进相关领域的深度融合。

小结并回头来看,梳理出来的架构风格思维导图就像一棵硕果累累的树。它是前人的经验总结。前辈栽树,后人来乘凉,使用成果。

项目一旦选定了软件的架构风格,大家就相当于有了一定的抽象上的共识。现在的软件架构风格俨然成为一种沟通的媒介了。当越来越多的人在使用这个“标准语言”时,作为从业者就更加需要在架构风格上努力来学习和积累经验。更重要的是熟练根据需求的场景来合理的、灵活的选择架构风格。用好一个架构风格是需要不断的实践的。在架构风格比较时要注意,有时即便系统组织风格相同,但约束上不同,就是细分的另外的一种架构风格。当项目的成败也并不代表架构风格的盖棺定论。我们需要不断的论证和优化,吸取其他架构风格的优点,屏蔽架构风格的缺点。因为项目是变化的,一种风格与另一种风格可以混合应用,也并不是互斥的。

总结就是一种创新,这是我们秉持的态度。希望更多的架构师能探索和实践并分享。大家一起互相学习,共同进步。