资讯

展开

patchmania攻略 仓库里,手机二次元学院怎么隐藏对话框我卡在我和美波躲在体育课仓库里

作者:本站作者

1,手机二次元学院怎么隐藏对话框我卡在我和美波躲在体育课仓库里

这个隐藏对话框只要在这里设置就可以了。这个只要躲到仓库里就行了。
点垫子,路障,推车,门右边的推车,在点跳高的架子,再点灭火器

手机二次元学院怎么隐藏对话框我卡在我和美波躲在体育课仓库里

2,patchmania仓库里第63关

patchmania仓库里第63关

3,patchmania第二章仓库里第610关图文攻略

patchmania(兔子复仇记)是最近一款非常好玩的单机手机解谜游戏,在第二章仓库里第6-10关中有些关卡是非常有挑战性的。小兔子如何才能吃掉所有的作物向农夫挑战呢?下面小编叶子就和大家分享patchmania兔子复仇记仓库里6-10关通关攻略,希望你能喜欢。   兔子复仇记第二章仓库里第6关通关图文攻略:   Patchmania仓库里6关玩法点评:首先胖兔子otto借助一个蘑菇吃掉卷心菜进洞;接着小白兔calvin吃掉剩下的萝卜和蘑菇即可。   兔子复仇记第二章仓库里第7关通关图文攻略:   Patchmania仓库里7关玩法点评:首先小白兔吃掉萝卜和两个蘑菇,接着胖兔子直接吃掉卷心菜就可以了。   兔子复仇记第二章仓库里第8关通关图文攻略:   Patchmania仓库里8关玩法点评:首先小白兔下来吃掉胡萝卜和洞口的蘑菇;剩下的食物交给胖兔子就ok了。   兔子复仇记第二章仓库里第9关通关图文攻略:   Patchmania仓库里里9关玩法点评:首先让胖兔子下去,吃掉卷心菜和蘑菇,剩下的小白兔的路线就非常明朗了。   兔子复仇记第二章仓库里第10关通关图文攻略:   Patchmania仓库里10关玩法点评:小白兔calvin从自己下面的蘑菇开始吃,一直到洞口。剩下的卷心菜和蘑菇让胖兔子寻找路线吃掉。   以上就是兔子复仇记《Patchmania》第二章仓库里第6-10关的详细图文攻略了,大家现在知道这几关怎么玩了吧!这几关有的玩法还是有挑战性的,剩下的几关就是非常容易了,如果你还有什么疑问的话,不妨留言评论,小编叶子将为你解答哦!如果你喜欢兔子复仇记这个游戏,欢迎持续关注哦!

patchmania第二章仓库里第610关图文攻略

4,小米和海信哪个品牌的电视机比较好

即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。
即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。看到这个问题,我的脑海里就浮现了之前看到的两则故事,一则是跟Linux作者Linus有关,他的这个故事严格意义上并不是一个后门,但是确实在Linux系统里面安插了“私货”;另外一个故事是真的在Linux源码中安插了后门,而且差一点成功了。故事一:Linus在Linux中安插“私货”如果你对Linux代码还算比较熟的,应该就知道下面截图的是系统调用SYSC_reboot接口的代码。代码中有一段校验Magic Number(魔数)的代码,上面的注释是:“For safty, we require "magic" arguments.”哇塞!说的多么“冠冕堂皇”啊,为了安全,好像不做一下校验就很不严谨似的。接着看看那几个比较的宏是干嘛的:嗯?!第一个参数貌似很有意思,像英文的“feeldead”,感觉要死了,可不是么系统马上要重启了。但貌似除了这第一个参数的魔数,第二个参数要比较的魔数都没什么特别的意思嘛。神奇的事情来了,把这几个魔数转成16进制:0x281219690x51219960x160419980x20112000看着像什么?有点像是日期啊,答对了!第一个是Linus大神的生日1969年12月28日,第二个是Linus的大女儿的生日1996年12月5日,第三个是Linus的二女儿的生日1998年4月16日,最后一个零零后是Linus的小女儿剩余2000年11月20日。Linus这是在Linux代码中公然夹带私货啊!换句话来说,要想成功调用reboot API,那么前两个参数必须严格按如下规则填写: 第一个参数必须是0xfee1dead。 在Linus大神的大女儿Patricia出生之前,第二个参数能且只能是0x28121969,也就是大神的生日。 当Linus有了大女儿Patricia后,第二个参数也可以是Patricia的生日0x5121996。这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。可以想见,Linus大神在喜得爱女的几天内就修改了内核代码,然后在女儿满月之前把把这个代码发布给世界了。当Linus有二女儿后,第二个参数也可以是二女儿的生日。 当Linus有了小女儿后,第二个参数也可以是小女儿的生日。 Linus大神把这些有意义的魔数写入Linux内核中,而且使它们称为系统调用的一部分,也就是说只要Linux还在,只要Linux还运行,这些数字将在全世界各地流淌。全世界的Linux应用程序开发者都将使用这些魔数才能正确调用重启接口,而且考虑到前向兼容性,这些数字是不会被轻易更改或者去除的。幸运的是,只要你系统不重启,Linus的诡计就不能得逞,机智!故事一的创作来源于格友公众号的文章:雕刻在LINUX内核中的LINUS故事:https://blog.csdn.net/PCb4jR/article/details/81518695。原文要比我写的精彩,我只是把切题的部分摘出来了,它涉及很多有趣细节,感兴趣的建议去看一下完整版。故事二:惊天黑客Linux插入后门记Linux内核是开源代码界可以说是最著名的标杆项目,全世界无数双最顶尖的程序员的眼睛都盯着,正是基于此开源世界宣传开源软件比专有软件更安全,那能不能向其中安插一个后门呢?虽然这是一件难度极高的事情,但有人差一点做到了,是怎么回事呢?在正式说之前,我们必须要了解一些背景知识。2002年2月,Linux之父Linus Torvalds决定使用BitKeeper工具来管理Linux内核代码主线(mainline)。利用版本控制工具,我们可以记录每次代码修改的差异,代码修改的提交人信息,修改原因和其他信息,这对于软件开发来说是一个很重要的事情。一开始Linus对BitKeeper评价很高,他认为是“The best tool for the job”。BitMover是BitKeeper的开发厂商,其创始人和CEO是Larry McVoy,这个人也很热衷于开源事业的发展。Larry期望BitKeeper能帮助Linus 免于陷入不断加重的Linux内核管理工作中--事实上,自从Linus 开始使用BitKeeper之后,Linux的开发步伐加快了两倍。BitMover授权Linux开发者不用付费就能使用这个工具--前提是这样一个协议:这个免费工具的真正使用者不能同时开发其竞争产品。换句话说,这个工具可以免费 使用(freely used),不过不能被自由克隆(freely cloned)。事实上,BitMover开发维护了两个BitKeeper版本,一个免费的授权给Linux开发者使用开发Linux,另一个是商业产品需要购买,但BitKeeper其实也不亏,因为它的商业模式就是授权给开源开发者使用吸引那些付费用户,相当于整个Linux开发团体给这个产品做了背书。当然这两个版本都是BitMover的知识产权。扯的原了,书回正传。2003年Linux源码主拷贝存储在BitKeeper中,如果开发者想往Linux代码中提交一个修改,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。但是有些人不喜欢BitKeeper,于是BitMover的一些人(在Larry McVoy的指示下)建立一个单独的CVS仓库,这个仓库包含了当前完整的Linux代码以及全部的修改记录,这样的话不喜欢用BitKeeper的开发者就可以从CVS仓库中获取代码,CVS代码拷贝实际上是BitKeeper代码的一个直接克隆。因此,CVS仓库不是新修改提交代码的地方,当然,当有人试图往CVS中推送一些修改的时候,Larry McVoy能第一时间注意到。故事就发生在这个CVS仓库中。2003年11月5号,Larry McVoy 注意到了一件怪事,CVS中的一个代码变更没有包含审批记录的链接, 这是怎么回事? 经过一番调查发现:从来没有人批准过这个代码变更,奇怪的是,这个代码变更并没有出现在BitKeeper主仓库中,原来是有人黑进了CVS的服务器,偷偷插入了一段代码。这段代码到底做了什么事情呢?这段代码修改了一个叫做wait4的Linux函数,程序可以使用wait4来等待一些事情的发生,这个代码变更增加了这么两行:+ if ((options == (__WCLONE | __WALL)) && (current->uid = 0))+ retval = -EINVAL;不仔细看,这段代码并没有什么特别,只是做一下条件检查,不满足的话就返回错误码。但仔细一看"current->uid=0"是一个赋值语句啊!也就是说在用户态调用wait4函数,条件随便写一个满足“options == (__WCLONE | __WALL)”的,"current->uid=0"会立马被执行。current->uid赋值为0意味着用户ID被改成了0,也就拿到了root权限,那么在系统中可以想干什么就干什么了。幸运的是,这样一个后门被Linux团队敏锐的发现了,虽然它只是在CVS代码库中,但是危险性不容小觑。首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。 那么后果不堪设想!故事二的创作来源于码农翻身公众号的文章:如何在Linux中安插一个后门?:https://blog.csdn.net/coderising/article/details/100682413。并在此基础上结合另外三篇文章做了再整理创作:https://lwn.net/Articles/57135/https://blog.csdn.net/glory1234work2115/article/details/51277402https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/番外:Linux使用BitKeeper做开发管理,但有人不乐意了,为什么呢?因为BitKeeper是一个非开源但是有条件免费的版本控制工具,而Linux是开源软件的标杆产品,用一个闭源软件来管理开源软件,就有“政治不正确”,心里也膈应。但是在当时,确实也没有哪个自由软件/开源软件工具具有BitKeeper那样的功能--它提供了真正的分布式开发能力,所以又不得不用。虽然有协议要求“这个免费工具的真正使用者不能同时开发其竞争产品”,但是还是有人不断的试图反向工程BitKeeper,多次这样的举动引起了BitMover的注意和警告,最终导致了BitMover决定终 止结束免费BitKeeper产品的开发和应用。没有了免费的BitKeeper,Linus大神自己在短短几个星期里面撸了一个版本管理软件git,更厉害的是他大概花一天的时间就让Git能达到自己管理自己的程度(self-hosting),之后就开始用Git提交Git的程序代码了。多年以后,Github代码托管平台在开源界横空出世,被称为程序员的社交平台,它的底层就是Git。目前Linux也将代码托管在Github上,真是令人感慨啊。
即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。看到这个问题,我的脑海里就浮现了之前看到的两则故事,一则是跟Linux作者Linus有关,他的这个故事严格意义上并不是一个后门,但是确实在Linux系统里面安插了“私货”;另外一个故事是真的在Linux源码中安插了后门,而且差一点成功了。故事一:Linus在Linux中安插“私货”如果你对Linux代码还算比较熟的,应该就知道下面截图的是系统调用SYSC_reboot接口的代码。代码中有一段校验Magic Number(魔数)的代码,上面的注释是:“For safty, we require "magic" arguments.”哇塞!说的多么“冠冕堂皇”啊,为了安全,好像不做一下校验就很不严谨似的。接着看看那几个比较的宏是干嘛的:嗯?!第一个参数貌似很有意思,像英文的“feeldead”,感觉要死了,可不是么系统马上要重启了。但貌似除了这第一个参数的魔数,第二个参数要比较的魔数都没什么特别的意思嘛。神奇的事情来了,把这几个魔数转成16进制:0x281219690x51219960x160419980x20112000看着像什么?有点像是日期啊,答对了!第一个是Linus大神的生日1969年12月28日,第二个是Linus的大女儿的生日1996年12月5日,第三个是Linus的二女儿的生日1998年4月16日,最后一个零零后是Linus的小女儿剩余2000年11月20日。Linus这是在Linux代码中公然夹带私货啊!换句话来说,要想成功调用reboot API,那么前两个参数必须严格按如下规则填写: 第一个参数必须是0xfee1dead。 在Linus大神的大女儿Patricia出生之前,第二个参数能且只能是0x28121969,也就是大神的生日。 当Linus有了大女儿Patricia后,第二个参数也可以是Patricia的生日0x5121996。这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。可以想见,Linus大神在喜得爱女的几天内就修改了内核代码,然后在女儿满月之前把把这个代码发布给世界了。当Linus有二女儿后,第二个参数也可以是二女儿的生日。 当Linus有了小女儿后,第二个参数也可以是小女儿的生日。 Linus大神把这些有意义的魔数写入Linux内核中,而且使它们称为系统调用的一部分,也就是说只要Linux还在,只要Linux还运行,这些数字将在全世界各地流淌。全世界的Linux应用程序开发者都将使用这些魔数才能正确调用重启接口,而且考虑到前向兼容性,这些数字是不会被轻易更改或者去除的。幸运的是,只要你系统不重启,Linus的诡计就不能得逞,机智!故事一的创作来源于格友公众号的文章:雕刻在LINUX内核中的LINUS故事:https://blog.csdn.net/PCb4jR/article/details/81518695。原文要比我写的精彩,我只是把切题的部分摘出来了,它涉及很多有趣细节,感兴趣的建议去看一下完整版。故事二:惊天黑客Linux插入后门记Linux内核是开源代码界可以说是最著名的标杆项目,全世界无数双最顶尖的程序员的眼睛都盯着,正是基于此开源世界宣传开源软件比专有软件更安全,那能不能向其中安插一个后门呢?虽然这是一件难度极高的事情,但有人差一点做到了,是怎么回事呢?在正式说之前,我们必须要了解一些背景知识。2002年2月,Linux之父Linus Torvalds决定使用BitKeeper工具来管理Linux内核代码主线(mainline)。利用版本控制工具,我们可以记录每次代码修改的差异,代码修改的提交人信息,修改原因和其他信息,这对于软件开发来说是一个很重要的事情。一开始Linus对BitKeeper评价很高,他认为是“The best tool for the job”。BitMover是BitKeeper的开发厂商,其创始人和CEO是Larry McVoy,这个人也很热衷于开源事业的发展。Larry期望BitKeeper能帮助Linus 免于陷入不断加重的Linux内核管理工作中--事实上,自从Linus 开始使用BitKeeper之后,Linux的开发步伐加快了两倍。BitMover授权Linux开发者不用付费就能使用这个工具--前提是这样一个协议:这个免费工具的真正使用者不能同时开发其竞争产品。换句话说,这个工具可以免费 使用(freely used),不过不能被自由克隆(freely cloned)。事实上,BitMover开发维护了两个BitKeeper版本,一个免费的授权给Linux开发者使用开发Linux,另一个是商业产品需要购买,但BitKeeper其实也不亏,因为它的商业模式就是授权给开源开发者使用吸引那些付费用户,相当于整个Linux开发团体给这个产品做了背书。当然这两个版本都是BitMover的知识产权。扯的原了,书回正传。2003年Linux源码主拷贝存储在BitKeeper中,如果开发者想往Linux代码中提交一个修改,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。但是有些人不喜欢BitKeeper,于是BitMover的一些人(在Larry McVoy的指示下)建立一个单独的CVS仓库,这个仓库包含了当前完整的Linux代码以及全部的修改记录,这样的话不喜欢用BitKeeper的开发者就可以从CVS仓库中获取代码,CVS代码拷贝实际上是BitKeeper代码的一个直接克隆。因此,CVS仓库不是新修改提交代码的地方,当然,当有人试图往CVS中推送一些修改的时候,Larry McVoy能第一时间注意到。故事就发生在这个CVS仓库中。2003年11月5号,Larry McVoy 注意到了一件怪事,CVS中的一个代码变更没有包含审批记录的链接, 这是怎么回事? 经过一番调查发现:从来没有人批准过这个代码变更,奇怪的是,这个代码变更并没有出现在BitKeeper主仓库中,原来是有人黑进了CVS的服务器,偷偷插入了一段代码。这段代码到底做了什么事情呢?这段代码修改了一个叫做wait4的Linux函数,程序可以使用wait4来等待一些事情的发生,这个代码变更增加了这么两行:+ if ((options == (__WCLONE | __WALL)) && (current->uid = 0))+ retval = -EINVAL;不仔细看,这段代码并没有什么特别,只是做一下条件检查,不满足的话就返回错误码。但仔细一看"current->uid=0"是一个赋值语句啊!也就是说在用户态调用wait4函数,条件随便写一个满足“options == (__WCLONE | __WALL)”的,"current->uid=0"会立马被执行。current->uid赋值为0意味着用户ID被改成了0,也就拿到了root权限,那么在系统中可以想干什么就干什么了。幸运的是,这样一个后门被Linux团队敏锐的发现了,虽然它只是在CVS代码库中,但是危险性不容小觑。首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。 那么后果不堪设想!故事二的创作来源于码农翻身公众号的文章:如何在Linux中安插一个后门?:https://blog.csdn.net/coderising/article/details/100682413。并在此基础上结合另外三篇文章做了再整理创作:https://lwn.net/Articles/57135/https://blog.csdn.net/glory1234work2115/article/details/51277402https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/番外:Linux使用BitKeeper做开发管理,但有人不乐意了,为什么呢?因为BitKeeper是一个非开源但是有条件免费的版本控制工具,而Linux是开源软件的标杆产品,用一个闭源软件来管理开源软件,就有“政治不正确”,心里也膈应。但是在当时,确实也没有哪个自由软件/开源软件工具具有BitKeeper那样的功能--它提供了真正的分布式开发能力,所以又不得不用。虽然有协议要求“这个免费工具的真正使用者不能同时开发其竞争产品”,但是还是有人不断的试图反向工程BitKeeper,多次这样的举动引起了BitMover的注意和警告,最终导致了BitMover决定终 止结束免费BitKeeper产品的开发和应用。没有了免费的BitKeeper,Linus大神自己在短短几个星期里面撸了一个版本管理软件git,更厉害的是他大概花一天的时间就让Git能达到自己管理自己的程度(self-hosting),之后就开始用Git提交Git的程序代码了。多年以后,Github代码托管平台在开源界横空出世,被称为程序员的社交平台,它的底层就是Git。目前Linux也将代码托管在Github上,真是令人感慨啊。这几年以小米为代表的互联网电视确实很火。其实最先做互联网电视的是乐视,在乐视刚开始做电视的时候,贾跃亭还没有那么疯狂,电视业务做的还算可以,很快做到了互联网电视的第一名。小米开始做互联网电视的时候,乐视已经在行业内小有名气了,再加上乐视那时候内容做的也不错,乐视电视在用户中间也有不错的口碑。小米做了电视之后就把乐视作为最大的竞争对手,处处跟乐视对标,两家经常在微博上打口水战。在刚开始做电视的那几年,小米在电视上投入了很多资源,但是一直没法超越乐视,乐视的先发优势还是比较明显。结果后来贾跃亭疯狂大跃进,搞七大生态把自己搞死了,乐视最优质的电视业务就这么完蛋了,从互联网电视的第一名直接跌到谷底,而且再无翻身可能,小米则顺利的接收了之前乐视电视的市场,成为互联网电视第一名。看去年一些研究机构发布的数据,小米已经不仅仅是互联网电视第一,现在已经是国内电视行业的第一,超过了海信、康佳、TCL等等一众传统电视巨头。小米在短时间内能取得这样的成绩,除了接收乐视的市场快速扩大市场规模之外,在用户体验上的领先也是一大原因。小米电视除了几款高端机型,大部分机型都卖的比较便宜,真要跟其他品牌的高端机型比品质可能还真比不过,但是小米胜在用户体验上。雷军说小米既是一家硬件公司,也是一家互联网公司,传统电视厂商要跟小米比用户体验是很难的。我个人比较喜欢的一个功能是小米把小爱同学集成到了小米电视上,然后在遥控器上加入了语音输入功能,想在电视上搜什么东西直接语音输入搜索就行,用遥控器在电视上打过字的人都知道这个功能带来的效率提升有多大。另外小米在在内容方面和传统电视厂商比也有相当大的优势。首先小米自己就有内容部门,比如小米视频、小米音乐、小米游戏、小米影业等等,另外小米和业内内容巨头也有合作,在好几年前小米就入股了爱奇艺,现在是爱奇艺的第二大股东。所以我个人给题主的建议是买小米电视比较好。我看题主提到了京东年货节,应该是在京东对比过小米和海信的电视了吧,其实平时不太了解行业信息的消费者临时去去做个对比也分不出哪个好哪个坏,像我说的用户体验、内容这些东西,做参数对比是看不出来的。既然题主想买的话,就趁现在京东在搞年货节活动赶紧买吧,这可能是每年继双十一之后优惠力度最大的促销活动了,京东现在也在推科技年货的概念,优惠力度还是不小的。
即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。看到这个问题,我的脑海里就浮现了之前看到的两则故事,一则是跟Linux作者Linus有关,他的这个故事严格意义上并不是一个后门,但是确实在Linux系统里面安插了“私货”;另外一个故事是真的在Linux源码中安插了后门,而且差一点成功了。故事一:Linus在Linux中安插“私货”如果你对Linux代码还算比较熟的,应该就知道下面截图的是系统调用SYSC_reboot接口的代码。代码中有一段校验Magic Number(魔数)的代码,上面的注释是:“For safty, we require "magic" arguments.”哇塞!说的多么“冠冕堂皇”啊,为了安全,好像不做一下校验就很不严谨似的。接着看看那几个比较的宏是干嘛的:嗯?!第一个参数貌似很有意思,像英文的“feeldead”,感觉要死了,可不是么系统马上要重启了。但貌似除了这第一个参数的魔数,第二个参数要比较的魔数都没什么特别的意思嘛。神奇的事情来了,把这几个魔数转成16进制:0x281219690x51219960x160419980x20112000看着像什么?有点像是日期啊,答对了!第一个是Linus大神的生日1969年12月28日,第二个是Linus的大女儿的生日1996年12月5日,第三个是Linus的二女儿的生日1998年4月16日,最后一个零零后是Linus的小女儿剩余2000年11月20日。Linus这是在Linux代码中公然夹带私货啊!换句话来说,要想成功调用reboot API,那么前两个参数必须严格按如下规则填写: 第一个参数必须是0xfee1dead。 在Linus大神的大女儿Patricia出生之前,第二个参数能且只能是0x28121969,也就是大神的生日。 当Linus有了大女儿Patricia后,第二个参数也可以是Patricia的生日0x5121996。这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。可以想见,Linus大神在喜得爱女的几天内就修改了内核代码,然后在女儿满月之前把把这个代码发布给世界了。当Linus有二女儿后,第二个参数也可以是二女儿的生日。 当Linus有了小女儿后,第二个参数也可以是小女儿的生日。 Linus大神把这些有意义的魔数写入Linux内核中,而且使它们称为系统调用的一部分,也就是说只要Linux还在,只要Linux还运行,这些数字将在全世界各地流淌。全世界的Linux应用程序开发者都将使用这些魔数才能正确调用重启接口,而且考虑到前向兼容性,这些数字是不会被轻易更改或者去除的。幸运的是,只要你系统不重启,Linus的诡计就不能得逞,机智!故事一的创作来源于格友公众号的文章:雕刻在LINUX内核中的LINUS故事:https://blog.csdn.net/PCb4jR/article/details/81518695。原文要比我写的精彩,我只是把切题的部分摘出来了,它涉及很多有趣细节,感兴趣的建议去看一下完整版。故事二:惊天黑客Linux插入后门记Linux内核是开源代码界可以说是最著名的标杆项目,全世界无数双最顶尖的程序员的眼睛都盯着,正是基于此开源世界宣传开源软件比专有软件更安全,那能不能向其中安插一个后门呢?虽然这是一件难度极高的事情,但有人差一点做到了,是怎么回事呢?在正式说之前,我们必须要了解一些背景知识。2002年2月,Linux之父Linus Torvalds决定使用BitKeeper工具来管理Linux内核代码主线(mainline)。利用版本控制工具,我们可以记录每次代码修改的差异,代码修改的提交人信息,修改原因和其他信息,这对于软件开发来说是一个很重要的事情。一开始Linus对BitKeeper评价很高,他认为是“The best tool for the job”。BitMover是BitKeeper的开发厂商,其创始人和CEO是Larry McVoy,这个人也很热衷于开源事业的发展。Larry期望BitKeeper能帮助Linus 免于陷入不断加重的Linux内核管理工作中--事实上,自从Linus 开始使用BitKeeper之后,Linux的开发步伐加快了两倍。BitMover授权Linux开发者不用付费就能使用这个工具--前提是这样一个协议:这个免费工具的真正使用者不能同时开发其竞争产品。换句话说,这个工具可以免费 使用(freely used),不过不能被自由克隆(freely cloned)。事实上,BitMover开发维护了两个BitKeeper版本,一个免费的授权给Linux开发者使用开发Linux,另一个是商业产品需要购买,但BitKeeper其实也不亏,因为它的商业模式就是授权给开源开发者使用吸引那些付费用户,相当于整个Linux开发团体给这个产品做了背书。当然这两个版本都是BitMover的知识产权。扯的原了,书回正传。2003年Linux源码主拷贝存储在BitKeeper中,如果开发者想往Linux代码中提交一个修改,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。但是有些人不喜欢BitKeeper,于是BitMover的一些人(在Larry McVoy的指示下)建立一个单独的CVS仓库,这个仓库包含了当前完整的Linux代码以及全部的修改记录,这样的话不喜欢用BitKeeper的开发者就可以从CVS仓库中获取代码,CVS代码拷贝实际上是BitKeeper代码的一个直接克隆。因此,CVS仓库不是新修改提交代码的地方,当然,当有人试图往CVS中推送一些修改的时候,Larry McVoy能第一时间注意到。故事就发生在这个CVS仓库中。2003年11月5号,Larry McVoy 注意到了一件怪事,CVS中的一个代码变更没有包含审批记录的链接, 这是怎么回事? 经过一番调查发现:从来没有人批准过这个代码变更,奇怪的是,这个代码变更并没有出现在BitKeeper主仓库中,原来是有人黑进了CVS的服务器,偷偷插入了一段代码。这段代码到底做了什么事情呢?这段代码修改了一个叫做wait4的Linux函数,程序可以使用wait4来等待一些事情的发生,这个代码变更增加了这么两行:+ if ((options == (__WCLONE | __WALL)) && (current->uid = 0))+ retval = -EINVAL;不仔细看,这段代码并没有什么特别,只是做一下条件检查,不满足的话就返回错误码。但仔细一看"current->uid=0"是一个赋值语句啊!也就是说在用户态调用wait4函数,条件随便写一个满足“options == (__WCLONE | __WALL)”的,"current->uid=0"会立马被执行。current->uid赋值为0意味着用户ID被改成了0,也就拿到了root权限,那么在系统中可以想干什么就干什么了。幸运的是,这样一个后门被Linux团队敏锐的发现了,虽然它只是在CVS代码库中,但是危险性不容小觑。首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。 那么后果不堪设想!故事二的创作来源于码农翻身公众号的文章:如何在Linux中安插一个后门?:https://blog.csdn.net/coderising/article/details/100682413。并在此基础上结合另外三篇文章做了再整理创作:https://lwn.net/Articles/57135/https://blog.csdn.net/glory1234work2115/article/details/51277402https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/番外:Linux使用BitKeeper做开发管理,但有人不乐意了,为什么呢?因为BitKeeper是一个非开源但是有条件免费的版本控制工具,而Linux是开源软件的标杆产品,用一个闭源软件来管理开源软件,就有“政治不正确”,心里也膈应。但是在当时,确实也没有哪个自由软件/开源软件工具具有BitKeeper那样的功能--它提供了真正的分布式开发能力,所以又不得不用。虽然有协议要求“这个免费工具的真正使用者不能同时开发其竞争产品”,但是还是有人不断的试图反向工程BitKeeper,多次这样的举动引起了BitMover的注意和警告,最终导致了BitMover决定终 止结束免费BitKeeper产品的开发和应用。没有了免费的BitKeeper,Linus大神自己在短短几个星期里面撸了一个版本管理软件git,更厉害的是他大概花一天的时间就让Git能达到自己管理自己的程度(self-hosting),之后就开始用Git提交Git的程序代码了。多年以后,Github代码托管平台在开源界横空出世,被称为程序员的社交平台,它的底层就是Git。目前Linux也将代码托管在Github上,真是令人感慨啊。这几年以小米为代表的互联网电视确实很火。其实最先做互联网电视的是乐视,在乐视刚开始做电视的时候,贾跃亭还没有那么疯狂,电视业务做的还算可以,很快做到了互联网电视的第一名。小米开始做互联网电视的时候,乐视已经在行业内小有名气了,再加上乐视那时候内容做的也不错,乐视电视在用户中间也有不错的口碑。小米做了电视之后就把乐视作为最大的竞争对手,处处跟乐视对标,两家经常在微博上打口水战。在刚开始做电视的那几年,小米在电视上投入了很多资源,但是一直没法超越乐视,乐视的先发优势还是比较明显。结果后来贾跃亭疯狂大跃进,搞七大生态把自己搞死了,乐视最优质的电视业务就这么完蛋了,从互联网电视的第一名直接跌到谷底,而且再无翻身可能,小米则顺利的接收了之前乐视电视的市场,成为互联网电视第一名。看去年一些研究机构发布的数据,小米已经不仅仅是互联网电视第一,现在已经是国内电视行业的第一,超过了海信、康佳、TCL等等一众传统电视巨头。小米在短时间内能取得这样的成绩,除了接收乐视的市场快速扩大市场规模之外,在用户体验上的领先也是一大原因。小米电视除了几款高端机型,大部分机型都卖的比较便宜,真要跟其他品牌的高端机型比品质可能还真比不过,但是小米胜在用户体验上。雷军说小米既是一家硬件公司,也是一家互联网公司,传统电视厂商要跟小米比用户体验是很难的。我个人比较喜欢的一个功能是小米把小爱同学集成到了小米电视上,然后在遥控器上加入了语音输入功能,想在电视上搜什么东西直接语音输入搜索就行,用遥控器在电视上打过字的人都知道这个功能带来的效率提升有多大。另外小米在在内容方面和传统电视厂商比也有相当大的优势。首先小米自己就有内容部门,比如小米视频、小米音乐、小米游戏、小米影业等等,另外小米和业内内容巨头也有合作,在好几年前小米就入股了爱奇艺,现在是爱奇艺的第二大股东。所以我个人给题主的建议是买小米电视比较好。我看题主提到了京东年货节,应该是在京东对比过小米和海信的电视了吧,其实平时不太了解行业信息的消费者临时去去做个对比也分不出哪个好哪个坏,像我说的用户体验、内容这些东西,做参数对比是看不出来的。既然题主想买的话,就趁现在京东在搞年货节活动赶紧买吧,这可能是每年继双十一之后优惠力度最大的促销活动了,京东现在也在推科技年货的概念,优惠力度还是不小的。巧了,我两个都有。49寸的小米电视3,是装修之前买的。质量,做工,样子都还不错,屏幕也挺好,进口屏。最大的不满,是资源。当时雷军天天发些“十亿美金打造小米生态”的微博,并且把新浪微博的老大挖过去做内容这块,我觉得肯定不会差。可是到现在,那点可怜的资源内容实在是拿不出手。唯一能看看的是整合了腾讯芒果pptv的资源在里面。可是这和你们的“十亿美金打造”有什么关系呢?准确的说,我当时是被忽悠了。装修之后,又买了台乐视,就把原来的小米放在卧室。从做工上来说,乐视比小米差一些,廉价感比小米强烈。而且我买的是x3 55寸的低配,用的是国产屏,比起小米的进口屏鲜艳程度和饱和度有点差距,但是不大。可是乐视的资源我满意啊,送了好几年会员,影视资源很多,实打实的原创资源也目不暇接,并且可以看除西甲外的五大联赛欧冠中超(按个pptv客户端可以解决看西甲的问题)。总之资源方面说到做到,非常满意。说起来现在也叫互联网时代,各家厂商也都推出了所谓的智能电视,和传统电视不同的是,你能做的事更多,给你更大的使用粘性“”。这个粘性决定了你是否愿意多去用它,甚至是因为它,你愿意多在这个空间里逗留。客厅换乐视之前,我回家不太看电视,回家洗洗就躺床上玩玩ipad,看看手机。换了乐视之后,因为资源很多,时刻保持好奇和兴趣,所以总愿意待在客厅看看各种球赛和感兴趣的节目。我想这一点是小米一直没做到的。再补充一点,服务。这一点小米比乐视强很多。当然我说的不是电视的售后服务,因为两台电视都没有过问题,而是我使用两个品牌的其它商品感受到的服务差距。年初乐视的手机流量包月服务出问题了(我主要用它看球赛),明明包月了,几场球赛看下来联通扣了我好几g的流量,损失了好几百话费。后来查明是乐视的问题,简单点说就是乐视的办理成功短信发过来了,事实上乐视出了问题没给我提交办理。这件事开始了为期几个月的扯皮,客服百般推脱,扯皮甚至耍赖,最后承认错误之后开始拖时间,每次问他们怎么处理他们会让你耐心等待,现在已经过去六个多月了…相比较小米的服务真好,我打电话说智能插线板坏了,他问明情况和地址,过了半小时顺丰快递员就来我家,单子不用填快递费不用交把插线板带走,第三天新换的又通过顺丰寄到了我家,真的非常感动。其它的还有好多方面的对比,楼主或者大家感兴趣了我再说,手机打字太累了,错别字估计也不少,大家海涵。最后祝楼主早日买到称心如意的电视。也祝乐视提高服务,越来越好,更祝小米早日把“十亿美金”花完。??附:上卧室小米,下客厅乐视
即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。看到这个问题,我的脑海里就浮现了之前看到的两则故事,一则是跟Linux作者Linus有关,他的这个故事严格意义上并不是一个后门,但是确实在Linux系统里面安插了“私货”;另外一个故事是真的在Linux源码中安插了后门,而且差一点成功了。故事一:Linus在Linux中安插“私货”如果你对Linux代码还算比较熟的,应该就知道下面截图的是系统调用SYSC_reboot接口的代码。代码中有一段校验Magic Number(魔数)的代码,上面的注释是:“For safty, we require "magic" arguments.”哇塞!说的多么“冠冕堂皇”啊,为了安全,好像不做一下校验就很不严谨似的。接着看看那几个比较的宏是干嘛的:嗯?!第一个参数貌似很有意思,像英文的“feeldead”,感觉要死了,可不是么系统马上要重启了。但貌似除了这第一个参数的魔数,第二个参数要比较的魔数都没什么特别的意思嘛。神奇的事情来了,把这几个魔数转成16进制:0x281219690x51219960x160419980x20112000看着像什么?有点像是日期啊,答对了!第一个是Linus大神的生日1969年12月28日,第二个是Linus的大女儿的生日1996年12月5日,第三个是Linus的二女儿的生日1998年4月16日,最后一个零零后是Linus的小女儿剩余2000年11月20日。Linus这是在Linux代码中公然夹带私货啊!换句话来说,要想成功调用reboot API,那么前两个参数必须严格按如下规则填写: 第一个参数必须是0xfee1dead。 在Linus大神的大女儿Patricia出生之前,第二个参数能且只能是0x28121969,也就是大神的生日。 当Linus有了大女儿Patricia后,第二个参数也可以是Patricia的生日0x5121996。这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。可以想见,Linus大神在喜得爱女的几天内就修改了内核代码,然后在女儿满月之前把把这个代码发布给世界了。当Linus有二女儿后,第二个参数也可以是二女儿的生日。 当Linus有了小女儿后,第二个参数也可以是小女儿的生日。 Linus大神把这些有意义的魔数写入Linux内核中,而且使它们称为系统调用的一部分,也就是说只要Linux还在,只要Linux还运行,这些数字将在全世界各地流淌。全世界的Linux应用程序开发者都将使用这些魔数才能正确调用重启接口,而且考虑到前向兼容性,这些数字是不会被轻易更改或者去除的。幸运的是,只要你系统不重启,Linus的诡计就不能得逞,机智!故事一的创作来源于格友公众号的文章:雕刻在LINUX内核中的LINUS故事:https://blog.csdn.net/PCb4jR/article/details/81518695。原文要比我写的精彩,我只是把切题的部分摘出来了,它涉及很多有趣细节,感兴趣的建议去看一下完整版。故事二:惊天黑客Linux插入后门记Linux内核是开源代码界可以说是最著名的标杆项目,全世界无数双最顶尖的程序员的眼睛都盯着,正是基于此开源世界宣传开源软件比专有软件更安全,那能不能向其中安插一个后门呢?虽然这是一件难度极高的事情,但有人差一点做到了,是怎么回事呢?在正式说之前,我们必须要了解一些背景知识。2002年2月,Linux之父Linus Torvalds决定使用BitKeeper工具来管理Linux内核代码主线(mainline)。利用版本控制工具,我们可以记录每次代码修改的差异,代码修改的提交人信息,修改原因和其他信息,这对于软件开发来说是一个很重要的事情。一开始Linus对BitKeeper评价很高,他认为是“The best tool for the job”。BitMover是BitKeeper的开发厂商,其创始人和CEO是Larry McVoy,这个人也很热衷于开源事业的发展。Larry期望BitKeeper能帮助Linus 免于陷入不断加重的Linux内核管理工作中--事实上,自从Linus 开始使用BitKeeper之后,Linux的开发步伐加快了两倍。BitMover授权Linux开发者不用付费就能使用这个工具--前提是这样一个协议:这个免费工具的真正使用者不能同时开发其竞争产品。换句话说,这个工具可以免费 使用(freely used),不过不能被自由克隆(freely cloned)。事实上,BitMover开发维护了两个BitKeeper版本,一个免费的授权给Linux开发者使用开发Linux,另一个是商业产品需要购买,但BitKeeper其实也不亏,因为它的商业模式就是授权给开源开发者使用吸引那些付费用户,相当于整个Linux开发团体给这个产品做了背书。当然这两个版本都是BitMover的知识产权。扯的原了,书回正传。2003年Linux源码主拷贝存储在BitKeeper中,如果开发者想往Linux代码中提交一个修改,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。但是有些人不喜欢BitKeeper,于是BitMover的一些人(在Larry McVoy的指示下)建立一个单独的CVS仓库,这个仓库包含了当前完整的Linux代码以及全部的修改记录,这样的话不喜欢用BitKeeper的开发者就可以从CVS仓库中获取代码,CVS代码拷贝实际上是BitKeeper代码的一个直接克隆。因此,CVS仓库不是新修改提交代码的地方,当然,当有人试图往CVS中推送一些修改的时候,Larry McVoy能第一时间注意到。故事就发生在这个CVS仓库中。2003年11月5号,Larry McVoy 注意到了一件怪事,CVS中的一个代码变更没有包含审批记录的链接, 这是怎么回事? 经过一番调查发现:从来没有人批准过这个代码变更,奇怪的是,这个代码变更并没有出现在BitKeeper主仓库中,原来是有人黑进了CVS的服务器,偷偷插入了一段代码。这段代码到底做了什么事情呢?这段代码修改了一个叫做wait4的Linux函数,程序可以使用wait4来等待一些事情的发生,这个代码变更增加了这么两行:+ if ((options == (__WCLONE | __WALL)) && (current->uid = 0))+ retval = -EINVAL;不仔细看,这段代码并没有什么特别,只是做一下条件检查,不满足的话就返回错误码。但仔细一看"current->uid=0"是一个赋值语句啊!也就是说在用户态调用wait4函数,条件随便写一个满足“options == (__WCLONE | __WALL)”的,"current->uid=0"会立马被执行。current->uid赋值为0意味着用户ID被改成了0,也就拿到了root权限,那么在系统中可以想干什么就干什么了。幸运的是,这样一个后门被Linux团队敏锐的发现了,虽然它只是在CVS代码库中,但是危险性不容小觑。首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。 那么后果不堪设想!故事二的创作来源于码农翻身公众号的文章:如何在Linux中安插一个后门?:https://blog.csdn.net/coderising/article/details/100682413。并在此基础上结合另外三篇文章做了再整理创作:https://lwn.net/Articles/57135/https://blog.csdn.net/glory1234work2115/article/details/51277402https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/番外:Linux使用BitKeeper做开发管理,但有人不乐意了,为什么呢?因为BitKeeper是一个非开源但是有条件免费的版本控制工具,而Linux是开源软件的标杆产品,用一个闭源软件来管理开源软件,就有“政治不正确”,心里也膈应。但是在当时,确实也没有哪个自由软件/开源软件工具具有BitKeeper那样的功能--它提供了真正的分布式开发能力,所以又不得不用。虽然有协议要求“这个免费工具的真正使用者不能同时开发其竞争产品”,但是还是有人不断的试图反向工程BitKeeper,多次这样的举动引起了BitMover的注意和警告,最终导致了BitMover决定终 止结束免费BitKeeper产品的开发和应用。没有了免费的BitKeeper,Linus大神自己在短短几个星期里面撸了一个版本管理软件git,更厉害的是他大概花一天的时间就让Git能达到自己管理自己的程度(self-hosting),之后就开始用Git提交Git的程序代码了。多年以后,Github代码托管平台在开源界横空出世,被称为程序员的社交平台,它的底层就是Git。目前Linux也将代码托管在Github上,真是令人感慨啊。这几年以小米为代表的互联网电视确实很火。其实最先做互联网电视的是乐视,在乐视刚开始做电视的时候,贾跃亭还没有那么疯狂,电视业务做的还算可以,很快做到了互联网电视的第一名。小米开始做互联网电视的时候,乐视已经在行业内小有名气了,再加上乐视那时候内容做的也不错,乐视电视在用户中间也有不错的口碑。小米做了电视之后就把乐视作为最大的竞争对手,处处跟乐视对标,两家经常在微博上打口水战。在刚开始做电视的那几年,小米在电视上投入了很多资源,但是一直没法超越乐视,乐视的先发优势还是比较明显。结果后来贾跃亭疯狂大跃进,搞七大生态把自己搞死了,乐视最优质的电视业务就这么完蛋了,从互联网电视的第一名直接跌到谷底,而且再无翻身可能,小米则顺利的接收了之前乐视电视的市场,成为互联网电视第一名。看去年一些研究机构发布的数据,小米已经不仅仅是互联网电视第一,现在已经是国内电视行业的第一,超过了海信、康佳、TCL等等一众传统电视巨头。小米在短时间内能取得这样的成绩,除了接收乐视的市场快速扩大市场规模之外,在用户体验上的领先也是一大原因。小米电视除了几款高端机型,大部分机型都卖的比较便宜,真要跟其他品牌的高端机型比品质可能还真比不过,但是小米胜在用户体验上。雷军说小米既是一家硬件公司,也是一家互联网公司,传统电视厂商要跟小米比用户体验是很难的。我个人比较喜欢的一个功能是小米把小爱同学集成到了小米电视上,然后在遥控器上加入了语音输入功能,想在电视上搜什么东西直接语音输入搜索就行,用遥控器在电视上打过字的人都知道这个功能带来的效率提升有多大。另外小米在在内容方面和传统电视厂商比也有相当大的优势。首先小米自己就有内容部门,比如小米视频、小米音乐、小米游戏、小米影业等等,另外小米和业内内容巨头也有合作,在好几年前小米就入股了爱奇艺,现在是爱奇艺的第二大股东。所以我个人给题主的建议是买小米电视比较好。我看题主提到了京东年货节,应该是在京东对比过小米和海信的电视了吧,其实平时不太了解行业信息的消费者临时去去做个对比也分不出哪个好哪个坏,像我说的用户体验、内容这些东西,做参数对比是看不出来的。既然题主想买的话,就趁现在京东在搞年货节活动赶紧买吧,这可能是每年继双十一之后优惠力度最大的促销活动了,京东现在也在推科技年货的概念,优惠力度还是不小的。巧了,我两个都有。49寸的小米电视3,是装修之前买的。质量,做工,样子都还不错,屏幕也挺好,进口屏。最大的不满,是资源。当时雷军天天发些“十亿美金打造小米生态”的微博,并且把新浪微博的老大挖过去做内容这块,我觉得肯定不会差。可是到现在,那点可怜的资源内容实在是拿不出手。唯一能看看的是整合了腾讯芒果pptv的资源在里面。可是这和你们的“十亿美金打造”有什么关系呢?准确的说,我当时是被忽悠了。装修之后,又买了台乐视,就把原来的小米放在卧室。从做工上来说,乐视比小米差一些,廉价感比小米强烈。而且我买的是x3 55寸的低配,用的是国产屏,比起小米的进口屏鲜艳程度和饱和度有点差距,但是不大。可是乐视的资源我满意啊,送了好几年会员,影视资源很多,实打实的原创资源也目不暇接,并且可以看除西甲外的五大联赛欧冠中超(按个pptv客户端可以解决看西甲的问题)。总之资源方面说到做到,非常满意。说起来现在也叫互联网时代,各家厂商也都推出了所谓的智能电视,和传统电视不同的是,你能做的事更多,给你更大的使用粘性“”。这个粘性决定了你是否愿意多去用它,甚至是因为它,你愿意多在这个空间里逗留。客厅换乐视之前,我回家不太看电视,回家洗洗就躺床上玩玩ipad,看看手机。换了乐视之后,因为资源很多,时刻保持好奇和兴趣,所以总愿意待在客厅看看各种球赛和感兴趣的节目。我想这一点是小米一直没做到的。再补充一点,服务。这一点小米比乐视强很多。当然我说的不是电视的售后服务,因为两台电视都没有过问题,而是我使用两个品牌的其它商品感受到的服务差距。年初乐视的手机流量包月服务出问题了(我主要用它看球赛),明明包月了,几场球赛看下来联通扣了我好几g的流量,损失了好几百话费。后来查明是乐视的问题,简单点说就是乐视的办理成功短信发过来了,事实上乐视出了问题没给我提交办理。这件事开始了为期几个月的扯皮,客服百般推脱,扯皮甚至耍赖,最后承认错误之后开始拖时间,每次问他们怎么处理他们会让你耐心等待,现在已经过去六个多月了…相比较小米的服务真好,我打电话说智能插线板坏了,他问明情况和地址,过了半小时顺丰快递员就来我家,单子不用填快递费不用交把插线板带走,第三天新换的又通过顺丰寄到了我家,真的非常感动。其它的还有好多方面的对比,楼主或者大家感兴趣了我再说,手机打字太累了,错别字估计也不少,大家海涵。最后祝楼主早日买到称心如意的电视。也祝乐视提高服务,越来越好,更祝小米早日把“十亿美金”花完。??附:上卧室小米,下客厅乐视美国凭借二战一举奠定了其世界霸主的地位,因为二战,美国在全球各地建立了不计其数的军事基地。自从美苏争霸之后,美国取得了完胜,基于世界格局的重大变化,美国决定减少海外军事基地。目前为止,美国在海外建立了374个军事基地,这些军事基地分布在140多个国家和地区,驻军人数一度超过了三十万人,而美国在本土拥有八百多个军事基地,这包括242个海军基地和384个空军基地。可以说,这些军事基地的存在是美国全球霸权的战略支撑,它们有力的维护了美国在全球各地的战略利益。对于美国而言,保持强大的军力是其霸主的重要标志,用拳头去打击那些不服霸主的国家是最简单有效的办法。像伊拉克战争和阿富汗战争就是美国用海军军事基地打击潜在对手的重要体现。当然,在众多的海外军事基地中,最为重要的则要数关塔那摩基地、珍珠港基地和关岛基地。其中位于古巴东南面的关塔那摩基地,有力的扼守着美国的南面门户,对美国控制南美有着不可替代的作用。而珍珠港基地位于美丽的夏威夷,这也是美国海军最重要的基地,也是让美国伤心的一个基地。美国太平洋舰队总部就驻扎在珍珠港,该基地是美国挺近太平洋的前沿阵地。值得注意的是,随着美国重返亚太战略计划的实施,关岛基地的作用显得越来越重要。美国可以通过关岛基地对包括日韩在内的东亚国家实施战略打击。关岛基地也是美国岛链战略的核心基地。(欢迎关注第一军情,若有其他问题,请在评论区留言。)
即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。看到这个问题,我的脑海里就浮现了之前看到的两则故事,一则是跟Linux作者Linus有关,他的这个故事严格意义上并不是一个后门,但是确实在Linux系统里面安插了“私货”;另外一个故事是真的在Linux源码中安插了后门,而且差一点成功了。故事一:Linus在Linux中安插“私货”如果你对Linux代码还算比较熟的,应该就知道下面截图的是系统调用SYSC_reboot接口的代码。代码中有一段校验Magic Number(魔数)的代码,上面的注释是:“For safty, we require "magic" arguments.”哇塞!说的多么“冠冕堂皇”啊,为了安全,好像不做一下校验就很不严谨似的。接着看看那几个比较的宏是干嘛的:嗯?!第一个参数貌似很有意思,像英文的“feeldead”,感觉要死了,可不是么系统马上要重启了。但貌似除了这第一个参数的魔数,第二个参数要比较的魔数都没什么特别的意思嘛。神奇的事情来了,把这几个魔数转成16进制:0x281219690x51219960x160419980x20112000看着像什么?有点像是日期啊,答对了!第一个是Linus大神的生日1969年12月28日,第二个是Linus的大女儿的生日1996年12月5日,第三个是Linus的二女儿的生日1998年4月16日,最后一个零零后是Linus的小女儿剩余2000年11月20日。Linus这是在Linux代码中公然夹带私货啊!换句话来说,要想成功调用reboot API,那么前两个参数必须严格按如下规则填写: 第一个参数必须是0xfee1dead。 在Linus大神的大女儿Patricia出生之前,第二个参数能且只能是0x28121969,也就是大神的生日。 当Linus有了大女儿Patricia后,第二个参数也可以是Patricia的生日0x5121996。这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。可以想见,Linus大神在喜得爱女的几天内就修改了内核代码,然后在女儿满月之前把把这个代码发布给世界了。当Linus有二女儿后,第二个参数也可以是二女儿的生日。 当Linus有了小女儿后,第二个参数也可以是小女儿的生日。 Linus大神把这些有意义的魔数写入Linux内核中,而且使它们称为系统调用的一部分,也就是说只要Linux还在,只要Linux还运行,这些数字将在全世界各地流淌。全世界的Linux应用程序开发者都将使用这些魔数才能正确调用重启接口,而且考虑到前向兼容性,这些数字是不会被轻易更改或者去除的。幸运的是,只要你系统不重启,Linus的诡计就不能得逞,机智!故事一的创作来源于格友公众号的文章:雕刻在LINUX内核中的LINUS故事:https://blog.csdn.net/PCb4jR/article/details/81518695。原文要比我写的精彩,我只是把切题的部分摘出来了,它涉及很多有趣细节,感兴趣的建议去看一下完整版。故事二:惊天黑客Linux插入后门记Linux内核是开源代码界可以说是最著名的标杆项目,全世界无数双最顶尖的程序员的眼睛都盯着,正是基于此开源世界宣传开源软件比专有软件更安全,那能不能向其中安插一个后门呢?虽然这是一件难度极高的事情,但有人差一点做到了,是怎么回事呢?在正式说之前,我们必须要了解一些背景知识。2002年2月,Linux之父Linus Torvalds决定使用BitKeeper工具来管理Linux内核代码主线(mainline)。利用版本控制工具,我们可以记录每次代码修改的差异,代码修改的提交人信息,修改原因和其他信息,这对于软件开发来说是一个很重要的事情。一开始Linus对BitKeeper评价很高,他认为是“The best tool for the job”。BitMover是BitKeeper的开发厂商,其创始人和CEO是Larry McVoy,这个人也很热衷于开源事业的发展。Larry期望BitKeeper能帮助Linus 免于陷入不断加重的Linux内核管理工作中--事实上,自从Linus 开始使用BitKeeper之后,Linux的开发步伐加快了两倍。BitMover授权Linux开发者不用付费就能使用这个工具--前提是这样一个协议:这个免费工具的真正使用者不能同时开发其竞争产品。换句话说,这个工具可以免费 使用(freely used),不过不能被自由克隆(freely cloned)。事实上,BitMover开发维护了两个BitKeeper版本,一个免费的授权给Linux开发者使用开发Linux,另一个是商业产品需要购买,但BitKeeper其实也不亏,因为它的商业模式就是授权给开源开发者使用吸引那些付费用户,相当于整个Linux开发团体给这个产品做了背书。当然这两个版本都是BitMover的知识产权。扯的原了,书回正传。2003年Linux源码主拷贝存储在BitKeeper中,如果开发者想往Linux代码中提交一个修改,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。但是有些人不喜欢BitKeeper,于是BitMover的一些人(在Larry McVoy的指示下)建立一个单独的CVS仓库,这个仓库包含了当前完整的Linux代码以及全部的修改记录,这样的话不喜欢用BitKeeper的开发者就可以从CVS仓库中获取代码,CVS代码拷贝实际上是BitKeeper代码的一个直接克隆。因此,CVS仓库不是新修改提交代码的地方,当然,当有人试图往CVS中推送一些修改的时候,Larry McVoy能第一时间注意到。故事就发生在这个CVS仓库中。2003年11月5号,Larry McVoy 注意到了一件怪事,CVS中的一个代码变更没有包含审批记录的链接, 这是怎么回事? 经过一番调查发现:从来没有人批准过这个代码变更,奇怪的是,这个代码变更并没有出现在BitKeeper主仓库中,原来是有人黑进了CVS的服务器,偷偷插入了一段代码。这段代码到底做了什么事情呢?这段代码修改了一个叫做wait4的Linux函数,程序可以使用wait4来等待一些事情的发生,这个代码变更增加了这么两行:+ if ((options == (__WCLONE | __WALL)) && (current->uid = 0))+ retval = -EINVAL;不仔细看,这段代码并没有什么特别,只是做一下条件检查,不满足的话就返回错误码。但仔细一看"current->uid=0"是一个赋值语句啊!也就是说在用户态调用wait4函数,条件随便写一个满足“options == (__WCLONE | __WALL)”的,"current->uid=0"会立马被执行。current->uid赋值为0意味着用户ID被改成了0,也就拿到了root权限,那么在系统中可以想干什么就干什么了。幸运的是,这样一个后门被Linux团队敏锐的发现了,虽然它只是在CVS代码库中,但是危险性不容小觑。首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。 那么后果不堪设想!故事二的创作来源于码农翻身公众号的文章:如何在Linux中安插一个后门?:https://blog.csdn.net/coderising/article/details/100682413。并在此基础上结合另外三篇文章做了再整理创作:https://lwn.net/Articles/57135/https://blog.csdn.net/glory1234work2115/article/details/51277402https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/番外:Linux使用BitKeeper做开发管理,但有人不乐意了,为什么呢?因为BitKeeper是一个非开源但是有条件免费的版本控制工具,而Linux是开源软件的标杆产品,用一个闭源软件来管理开源软件,就有“政治不正确”,心里也膈应。但是在当时,确实也没有哪个自由软件/开源软件工具具有BitKeeper那样的功能--它提供了真正的分布式开发能力,所以又不得不用。虽然有协议要求“这个免费工具的真正使用者不能同时开发其竞争产品”,但是还是有人不断的试图反向工程BitKeeper,多次这样的举动引起了BitMover的注意和警告,最终导致了BitMover决定终 止结束免费BitKeeper产品的开发和应用。没有了免费的BitKeeper,Linus大神自己在短短几个星期里面撸了一个版本管理软件git,更厉害的是他大概花一天的时间就让Git能达到自己管理自己的程度(self-hosting),之后就开始用Git提交Git的程序代码了。多年以后,Github代码托管平台在开源界横空出世,被称为程序员的社交平台,它的底层就是Git。目前Linux也将代码托管在Github上,真是令人感慨啊。这几年以小米为代表的互联网电视确实很火。其实最先做互联网电视的是乐视,在乐视刚开始做电视的时候,贾跃亭还没有那么疯狂,电视业务做的还算可以,很快做到了互联网电视的第一名。小米开始做互联网电视的时候,乐视已经在行业内小有名气了,再加上乐视那时候内容做的也不错,乐视电视在用户中间也有不错的口碑。小米做了电视之后就把乐视作为最大的竞争对手,处处跟乐视对标,两家经常在微博上打口水战。在刚开始做电视的那几年,小米在电视上投入了很多资源,但是一直没法超越乐视,乐视的先发优势还是比较明显。结果后来贾跃亭疯狂大跃进,搞七大生态把自己搞死了,乐视最优质的电视业务就这么完蛋了,从互联网电视的第一名直接跌到谷底,而且再无翻身可能,小米则顺利的接收了之前乐视电视的市场,成为互联网电视第一名。看去年一些研究机构发布的数据,小米已经不仅仅是互联网电视第一,现在已经是国内电视行业的第一,超过了海信、康佳、TCL等等一众传统电视巨头。小米在短时间内能取得这样的成绩,除了接收乐视的市场快速扩大市场规模之外,在用户体验上的领先也是一大原因。小米电视除了几款高端机型,大部分机型都卖的比较便宜,真要跟其他品牌的高端机型比品质可能还真比不过,但是小米胜在用户体验上。雷军说小米既是一家硬件公司,也是一家互联网公司,传统电视厂商要跟小米比用户体验是很难的。我个人比较喜欢的一个功能是小米把小爱同学集成到了小米电视上,然后在遥控器上加入了语音输入功能,想在电视上搜什么东西直接语音输入搜索就行,用遥控器在电视上打过字的人都知道这个功能带来的效率提升有多大。另外小米在在内容方面和传统电视厂商比也有相当大的优势。首先小米自己就有内容部门,比如小米视频、小米音乐、小米游戏、小米影业等等,另外小米和业内内容巨头也有合作,在好几年前小米就入股了爱奇艺,现在是爱奇艺的第二大股东。所以我个人给题主的建议是买小米电视比较好。我看题主提到了京东年货节,应该是在京东对比过小米和海信的电视了吧,其实平时不太了解行业信息的消费者临时去去做个对比也分不出哪个好哪个坏,像我说的用户体验、内容这些东西,做参数对比是看不出来的。既然题主想买的话,就趁现在京东在搞年货节活动赶紧买吧,这可能是每年继双十一之后优惠力度最大的促销活动了,京东现在也在推科技年货的概念,优惠力度还是不小的。巧了,我两个都有。49寸的小米电视3,是装修之前买的。质量,做工,样子都还不错,屏幕也挺好,进口屏。最大的不满,是资源。当时雷军天天发些“十亿美金打造小米生态”的微博,并且把新浪微博的老大挖过去做内容这块,我觉得肯定不会差。可是到现在,那点可怜的资源内容实在是拿不出手。唯一能看看的是整合了腾讯芒果pptv的资源在里面。可是这和你们的“十亿美金打造”有什么关系呢?准确的说,我当时是被忽悠了。装修之后,又买了台乐视,就把原来的小米放在卧室。从做工上来说,乐视比小米差一些,廉价感比小米强烈。而且我买的是x3 55寸的低配,用的是国产屏,比起小米的进口屏鲜艳程度和饱和度有点差距,但是不大。可是乐视的资源我满意啊,送了好几年会员,影视资源很多,实打实的原创资源也目不暇接,并且可以看除西甲外的五大联赛欧冠中超(按个pptv客户端可以解决看西甲的问题)。总之资源方面说到做到,非常满意。说起来现在也叫互联网时代,各家厂商也都推出了所谓的智能电视,和传统电视不同的是,你能做的事更多,给你更大的使用粘性“”。这个粘性决定了你是否愿意多去用它,甚至是因为它,你愿意多在这个空间里逗留。客厅换乐视之前,我回家不太看电视,回家洗洗就躺床上玩玩ipad,看看手机。换了乐视之后,因为资源很多,时刻保持好奇和兴趣,所以总愿意待在客厅看看各种球赛和感兴趣的节目。我想这一点是小米一直没做到的。再补充一点,服务。这一点小米比乐视强很多。当然我说的不是电视的售后服务,因为两台电视都没有过问题,而是我使用两个品牌的其它商品感受到的服务差距。年初乐视的手机流量包月服务出问题了(我主要用它看球赛),明明包月了,几场球赛看下来联通扣了我好几g的流量,损失了好几百话费。后来查明是乐视的问题,简单点说就是乐视的办理成功短信发过来了,事实上乐视出了问题没给我提交办理。这件事开始了为期几个月的扯皮,客服百般推脱,扯皮甚至耍赖,最后承认错误之后开始拖时间,每次问他们怎么处理他们会让你耐心等待,现在已经过去六个多月了…相比较小米的服务真好,我打电话说智能插线板坏了,他问明情况和地址,过了半小时顺丰快递员就来我家,单子不用填快递费不用交把插线板带走,第三天新换的又通过顺丰寄到了我家,真的非常感动。其它的还有好多方面的对比,楼主或者大家感兴趣了我再说,手机打字太累了,错别字估计也不少,大家海涵。最后祝楼主早日买到称心如意的电视。也祝乐视提高服务,越来越好,更祝小米早日把“十亿美金”花完。??附:上卧室小米,下客厅乐视美国凭借二战一举奠定了其世界霸主的地位,因为二战,美国在全球各地建立了不计其数的军事基地。自从美苏争霸之后,美国取得了完胜,基于世界格局的重大变化,美国决定减少海外军事基地。目前为止,美国在海外建立了374个军事基地,这些军事基地分布在140多个国家和地区,驻军人数一度超过了三十万人,而美国在本土拥有八百多个军事基地,这包括242个海军基地和384个空军基地。可以说,这些军事基地的存在是美国全球霸权的战略支撑,它们有力的维护了美国在全球各地的战略利益。对于美国而言,保持强大的军力是其霸主的重要标志,用拳头去打击那些不服霸主的国家是最简单有效的办法。像伊拉克战争和阿富汗战争就是美国用海军军事基地打击潜在对手的重要体现。当然,在众多的海外军事基地中,最为重要的则要数关塔那摩基地、珍珠港基地和关岛基地。其中位于古巴东南面的关塔那摩基地,有力的扼守着美国的南面门户,对美国控制南美有着不可替代的作用。而珍珠港基地位于美丽的夏威夷,这也是美国海军最重要的基地,也是让美国伤心的一个基地。美国太平洋舰队总部就驻扎在珍珠港,该基地是美国挺近太平洋的前沿阵地。值得注意的是,随着美国重返亚太战略计划的实施,关岛基地的作用显得越来越重要。美国可以通过关岛基地对包括日韩在内的东亚国家实施战略打击。关岛基地也是美国岛链战略的核心基地。(欢迎关注第一军情,若有其他问题,请在评论区留言。)https://medium.freecodecamp.org/an-introduction-to-git-merge-and-rebase-what-they-are-and-how-to-use-them-131b863785zhicheng Miya大部分开发者都有遇到过该用 Merge 还是 Rebase 的问题,网络上的各种相关介绍几乎都认为:“不要使用 Rebase,因为它会产生各种问题”。这里我将介绍 merge 和 rebase 的概念,为什么你应该(或者不应该)使用它们,以及怎么用。Git Merge 和 Git Rebase 目的相同,它们都是把不同分支的提交合并到一起。虽然最终目的是一致的,但是其过程却颇为不同。了解它们之间的区别之后,你会成为一个更出色的开发者。Git 社区对这个问题有很大争论,一些人坚持应该只用 rebase,另外一些人认为只用 merge,事实上两种方式各有优势。Git Merge对于使用版本控制系统的开发者来说,Merging 是常规操作。不管创建的分支是用来测试、修复 bug,还是别的什么原因,可能都会需要把分支的提交 merging 到其它的分支上。具体来说,merging 就是把源分支的提交放到目标分支里面。在这个过程里,只有目标分支改变,而源分支保持原样。Merge Master->Featuer branch优点简单易上手保留了提交历史和时间次序保留了分支的结构缺点提交历史被大量的 merge 提交污染了使用 git bisect 调试变得更困难了怎样做使用 checkout 和 merge 命令把 master 分支 merge 到 feature 分支。$ git checkout feature$ git merge master(or)$ git merge master feature这将会在 feature 分支上创建一个新的 “Merge 提交” 用来保留所有分支的记录。Git RebaseRebase 是合并两个分支的另一种方式。Rebase 把所有的提交压缩成一个 “patch”。然后把 patch 添加到目标分支里。和 merging 不同,rebasing 清除了历史,因为它完全是从一个分支转移到了另一个分支。在这个过程中,多余的记录被移除了。Rebases 的提交从顶部按次序向下排列,而 merges 则自下而上。Rebase feature branch into master优点把复杂的历史变成优雅的提交线操作单个提交变得很简单(比如,reverting)避免了庞大的仓库、海量的分支以及烦人的 merge 提交线性合并清除了中间的无用提交,对于 DevOps 团队来说是个好消息缺点Rebase 后 feature 分支间的上下文模糊了在团队里 rebasing 公共分支是高风险的事工作变多了:feature 分支需要经常更新Rebasing 到远程分支需要 force push。最大的问题是人们经常已经 force push 了,才发现忘记了设置 git push 默认值。结果本地远程所有同名的分支都进行了更新,清理起来很要命。如果你 rebase 出错并且很不幸重写了历史,很棘手,所以一定要明白操作的意义。怎样做下面的命令把 feature 分支 rebase 到 master 分支上。$ git checkout feature$ git rebase master它把整个 feature 分支的提交移动到了 master 分支上。通过给每个源(feature) 分支创建了一个 brand 来 re-writing 项目的历史。Interactive Rebasing这个命令可以在移动 commit 前改变它们。这比普通的 rebase 更加强大,它提供了对分支提交历史的完整控制。另外,在合并 feature 分支到 master 前,还可以用它来清理混乱的提交历史。$ git checkout feature$ git rebase -i master他会打开编辑器列出将要被移动的提交。pick 22d6d7c Commit message#1pick 44e8a9b Commit message#2pick 79f1d2h Commit message#3它清晰地展示了分支在 rebase 后的样子。通过重新调整,提交历史可以变成任何你想要的样子。如,可以把 pick 换成 fixup , squash , edit 等命令。选哪个所以,哪个是最好的?有没有专业的建议呢?很难明确告诉你该选哪一个,毕竟每个团队的情况不同。但还是有章可循。团队在制定他们的 Git rebase vs. merge 策略时需要考虑很多问题。事实证明,工作流之间并无明显的高下之分,一切都取决于团队情况。选择更直白的 rebasing 还是历史可塑性更强的 merging,要考虑团队对 rebasing 的了解情况以及 Git 熟悉程度。最后,决定使用 merging 还是 rebasing 还应该考虑到分支策略。团队有必要制定一个合适的分支策略。我的建议随着团队增长,通过 merge 策略很难管理和追踪到每个提交。为了提交历史更清晰、更易于理解,使用 Rebase 是一个明智、高效的选择。下面是针对不同环境的建议,可以最大限度地发挥 Rebase 的优势:本地开发:如果你没有和别人协同工作,你应该使用 rebasing 而不是 merging ,这样历史记录会很清晰。如果你已经从仓库拉取了你的个人 fork,并且不准备和别的开发者一起工作,在分支 push 前 rebase 也是可以的。你的代码准备好了被 review: 你创建了 pull request。别人正在 review 你的代码,可能把它拉到了本地 review。如果这样,你最好别 rebase 你的代码。你应该创建一个 “rework” 提交来更新你的 feature 分支。它会让 pull request 的可塑性更强,也能避免历史突然丢失。review 已经完成并且已经准备好了合并到目标分支。恭喜!你就要删除你的 feature 分支了。由于别的开发者不需要拉取、合并这些更改,这是你清理记录的好机会。你可以改写记录,折叠原始提交、“pr rework” 提交和 "merge"提交,使之成为一整个清晰的提交。作为可选,你还可以给这些提交创建一个明确的 merge,这样做实际上很有用。它会记录 feature 并入master 的时间。结论希望这些解释能让你对 Git merge 和 Git rebase 更了解。Merge .vs. rebase 策略之争永无止境。希望这篇文章可以帮助你扫清迷惑,找到一个适合自己的团队的方向。
即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。
即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。看到这个问题,我的脑海里就浮现了之前看到的两则故事,一则是跟Linux作者Linus有关,他的这个故事严格意义上并不是一个后门,但是确实在Linux系统里面安插了“私货”;另外一个故事是真的在Linux源码中安插了后门,而且差一点成功了。故事一:Linus在Linux中安插“私货”如果你对Linux代码还算比较熟的,应该就知道下面截图的是系统调用SYSC_reboot接口的代码。代码中有一段校验Magic Number(魔数)的代码,上面的注释是:“For safty, we require "magic" arguments.”哇塞!说的多么“冠冕堂皇”啊,为了安全,好像不做一下校验就很不严谨似的。接着看看那几个比较的宏是干嘛的:嗯?!第一个参数貌似很有意思,像英文的“feeldead”,感觉要死了,可不是么系统马上要重启了。但貌似除了这第一个参数的魔数,第二个参数要比较的魔数都没什么特别的意思嘛。神奇的事情来了,把这几个魔数转成16进制:0x281219690x51219960x160419980x20112000看着像什么?有点像是日期啊,答对了!第一个是Linus大神的生日1969年12月28日,第二个是Linus的大女儿的生日1996年12月5日,第三个是Linus的二女儿的生日1998年4月16日,最后一个零零后是Linus的小女儿剩余2000年11月20日。Linus这是在Linux代码中公然夹带私货啊!换句话来说,要想成功调用reboot API,那么前两个参数必须严格按如下规则填写: 第一个参数必须是0xfee1dead。 在Linus大神的大女儿Patricia出生之前,第二个参数能且只能是0x28121969,也就是大神的生日。 当Linus有了大女儿Patricia后,第二个参数也可以是Patricia的生日0x5121996。这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。可以想见,Linus大神在喜得爱女的几天内就修改了内核代码,然后在女儿满月之前把把这个代码发布给世界了。当Linus有二女儿后,第二个参数也可以是二女儿的生日。 当Linus有了小女儿后,第二个参数也可以是小女儿的生日。 Linus大神把这些有意义的魔数写入Linux内核中,而且使它们称为系统调用的一部分,也就是说只要Linux还在,只要Linux还运行,这些数字将在全世界各地流淌。全世界的Linux应用程序开发者都将使用这些魔数才能正确调用重启接口,而且考虑到前向兼容性,这些数字是不会被轻易更改或者去除的。幸运的是,只要你系统不重启,Linus的诡计就不能得逞,机智!故事一的创作来源于格友公众号的文章:雕刻在LINUX内核中的LINUS故事:https://blog.csdn.net/PCb4jR/article/details/81518695。原文要比我写的精彩,我只是把切题的部分摘出来了,它涉及很多有趣细节,感兴趣的建议去看一下完整版。故事二:惊天黑客Linux插入后门记Linux内核是开源代码界可以说是最著名的标杆项目,全世界无数双最顶尖的程序员的眼睛都盯着,正是基于此开源世界宣传开源软件比专有软件更安全,那能不能向其中安插一个后门呢?虽然这是一件难度极高的事情,但有人差一点做到了,是怎么回事呢?在正式说之前,我们必须要了解一些背景知识。2002年2月,Linux之父Linus Torvalds决定使用BitKeeper工具来管理Linux内核代码主线(mainline)。利用版本控制工具,我们可以记录每次代码修改的差异,代码修改的提交人信息,修改原因和其他信息,这对于软件开发来说是一个很重要的事情。一开始Linus对BitKeeper评价很高,他认为是“The best tool for the job”。BitMover是BitKeeper的开发厂商,其创始人和CEO是Larry McVoy,这个人也很热衷于开源事业的发展。Larry期望BitKeeper能帮助Linus 免于陷入不断加重的Linux内核管理工作中--事实上,自从Linus 开始使用BitKeeper之后,Linux的开发步伐加快了两倍。BitMover授权Linux开发者不用付费就能使用这个工具--前提是这样一个协议:这个免费工具的真正使用者不能同时开发其竞争产品。换句话说,这个工具可以免费 使用(freely used),不过不能被自由克隆(freely cloned)。事实上,BitMover开发维护了两个BitKeeper版本,一个免费的授权给Linux开发者使用开发Linux,另一个是商业产品需要购买,但BitKeeper其实也不亏,因为它的商业模式就是授权给开源开发者使用吸引那些付费用户,相当于整个Linux开发团体给这个产品做了背书。当然这两个版本都是BitMover的知识产权。扯的原了,书回正传。2003年Linux源码主拷贝存储在BitKeeper中,如果开发者想往Linux代码中提交一个修改,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。但是有些人不喜欢BitKeeper,于是BitMover的一些人(在Larry McVoy的指示下)建立一个单独的CVS仓库,这个仓库包含了当前完整的Linux代码以及全部的修改记录,这样的话不喜欢用BitKeeper的开发者就可以从CVS仓库中获取代码,CVS代码拷贝实际上是BitKeeper代码的一个直接克隆。因此,CVS仓库不是新修改提交代码的地方,当然,当有人试图往CVS中推送一些修改的时候,Larry McVoy能第一时间注意到。故事就发生在这个CVS仓库中。2003年11月5号,Larry McVoy 注意到了一件怪事,CVS中的一个代码变更没有包含审批记录的链接, 这是怎么回事? 经过一番调查发现:从来没有人批准过这个代码变更,奇怪的是,这个代码变更并没有出现在BitKeeper主仓库中,原来是有人黑进了CVS的服务器,偷偷插入了一段代码。这段代码到底做了什么事情呢?这段代码修改了一个叫做wait4的Linux函数,程序可以使用wait4来等待一些事情的发生,这个代码变更增加了这么两行:+ if ((options == (__WCLONE | __WALL)) && (current->uid = 0))+ retval = -EINVAL;不仔细看,这段代码并没有什么特别,只是做一下条件检查,不满足的话就返回错误码。但仔细一看"current->uid=0"是一个赋值语句啊!也就是说在用户态调用wait4函数,条件随便写一个满足“options == (__WCLONE | __WALL)”的,"current->uid=0"会立马被执行。current->uid赋值为0意味着用户ID被改成了0,也就拿到了root权限,那么在系统中可以想干什么就干什么了。幸运的是,这样一个后门被Linux团队敏锐的发现了,虽然它只是在CVS代码库中,但是危险性不容小觑。首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。 那么后果不堪设想!故事二的创作来源于码农翻身公众号的文章:如何在Linux中安插一个后门?:https://blog.csdn.net/coderising/article/details/100682413。并在此基础上结合另外三篇文章做了再整理创作:https://lwn.net/Articles/57135/https://blog.csdn.net/glory1234work2115/article/details/51277402https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/番外:Linux使用BitKeeper做开发管理,但有人不乐意了,为什么呢?因为BitKeeper是一个非开源但是有条件免费的版本控制工具,而Linux是开源软件的标杆产品,用一个闭源软件来管理开源软件,就有“政治不正确”,心里也膈应。但是在当时,确实也没有哪个自由软件/开源软件工具具有BitKeeper那样的功能--它提供了真正的分布式开发能力,所以又不得不用。虽然有协议要求“这个免费工具的真正使用者不能同时开发其竞争产品”,但是还是有人不断的试图反向工程BitKeeper,多次这样的举动引起了BitMover的注意和警告,最终导致了BitMover决定终 止结束免费BitKeeper产品的开发和应用。没有了免费的BitKeeper,Linus大神自己在短短几个星期里面撸了一个版本管理软件git,更厉害的是他大概花一天的时间就让Git能达到自己管理自己的程度(self-hosting),之后就开始用Git提交Git的程序代码了。多年以后,Github代码托管平台在开源界横空出世,被称为程序员的社交平台,它的底层就是Git。目前Linux也将代码托管在Github上,真是令人感慨啊。
即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。看到这个问题,我的脑海里就浮现了之前看到的两则故事,一则是跟Linux作者Linus有关,他的这个故事严格意义上并不是一个后门,但是确实在Linux系统里面安插了“私货”;另外一个故事是真的在Linux源码中安插了后门,而且差一点成功了。故事一:Linus在Linux中安插“私货”如果你对Linux代码还算比较熟的,应该就知道下面截图的是系统调用SYSC_reboot接口的代码。代码中有一段校验Magic Number(魔数)的代码,上面的注释是:“For safty, we require "magic" arguments.”哇塞!说的多么“冠冕堂皇”啊,为了安全,好像不做一下校验就很不严谨似的。接着看看那几个比较的宏是干嘛的:嗯?!第一个参数貌似很有意思,像英文的“feeldead”,感觉要死了,可不是么系统马上要重启了。但貌似除了这第一个参数的魔数,第二个参数要比较的魔数都没什么特别的意思嘛。神奇的事情来了,把这几个魔数转成16进制:0x281219690x51219960x160419980x20112000看着像什么?有点像是日期啊,答对了!第一个是Linus大神的生日1969年12月28日,第二个是Linus的大女儿的生日1996年12月5日,第三个是Linus的二女儿的生日1998年4月16日,最后一个零零后是Linus的小女儿剩余2000年11月20日。Linus这是在Linux代码中公然夹带私货啊!换句话来说,要想成功调用reboot API,那么前两个参数必须严格按如下规则填写: 第一个参数必须是0xfee1dead。 在Linus大神的大女儿Patricia出生之前,第二个参数能且只能是0x28121969,也就是大神的生日。 当Linus有了大女儿Patricia后,第二个参数也可以是Patricia的生日0x5121996。这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。可以想见,Linus大神在喜得爱女的几天内就修改了内核代码,然后在女儿满月之前把把这个代码发布给世界了。当Linus有二女儿后,第二个参数也可以是二女儿的生日。 当Linus有了小女儿后,第二个参数也可以是小女儿的生日。 Linus大神把这些有意义的魔数写入Linux内核中,而且使它们称为系统调用的一部分,也就是说只要Linux还在,只要Linux还运行,这些数字将在全世界各地流淌。全世界的Linux应用程序开发者都将使用这些魔数才能正确调用重启接口,而且考虑到前向兼容性,这些数字是不会被轻易更改或者去除的。幸运的是,只要你系统不重启,Linus的诡计就不能得逞,机智!故事一的创作来源于格友公众号的文章:雕刻在LINUX内核中的LINUS故事:https://blog.csdn.net/PCb4jR/article/details/81518695。原文要比我写的精彩,我只是把切题的部分摘出来了,它涉及很多有趣细节,感兴趣的建议去看一下完整版。故事二:惊天黑客Linux插入后门记Linux内核是开源代码界可以说是最著名的标杆项目,全世界无数双最顶尖的程序员的眼睛都盯着,正是基于此开源世界宣传开源软件比专有软件更安全,那能不能向其中安插一个后门呢?虽然这是一件难度极高的事情,但有人差一点做到了,是怎么回事呢?在正式说之前,我们必须要了解一些背景知识。2002年2月,Linux之父Linus Torvalds决定使用BitKeeper工具来管理Linux内核代码主线(mainline)。利用版本控制工具,我们可以记录每次代码修改的差异,代码修改的提交人信息,修改原因和其他信息,这对于软件开发来说是一个很重要的事情。一开始Linus对BitKeeper评价很高,他认为是“The best tool for the job”。BitMover是BitKeeper的开发厂商,其创始人和CEO是Larry McVoy,这个人也很热衷于开源事业的发展。Larry期望BitKeeper能帮助Linus 免于陷入不断加重的Linux内核管理工作中--事实上,自从Linus 开始使用BitKeeper之后,Linux的开发步伐加快了两倍。BitMover授权Linux开发者不用付费就能使用这个工具--前提是这样一个协议:这个免费工具的真正使用者不能同时开发其竞争产品。换句话说,这个工具可以免费 使用(freely used),不过不能被自由克隆(freely cloned)。事实上,BitMover开发维护了两个BitKeeper版本,一个免费的授权给Linux开发者使用开发Linux,另一个是商业产品需要购买,但BitKeeper其实也不亏,因为它的商业模式就是授权给开源开发者使用吸引那些付费用户,相当于整个Linux开发团体给这个产品做了背书。当然这两个版本都是BitMover的知识产权。扯的原了,书回正传。2003年Linux源码主拷贝存储在BitKeeper中,如果开发者想往Linux代码中提交一个修改,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。但是有些人不喜欢BitKeeper,于是BitMover的一些人(在Larry McVoy的指示下)建立一个单独的CVS仓库,这个仓库包含了当前完整的Linux代码以及全部的修改记录,这样的话不喜欢用BitKeeper的开发者就可以从CVS仓库中获取代码,CVS代码拷贝实际上是BitKeeper代码的一个直接克隆。因此,CVS仓库不是新修改提交代码的地方,当然,当有人试图往CVS中推送一些修改的时候,Larry McVoy能第一时间注意到。故事就发生在这个CVS仓库中。2003年11月5号,Larry McVoy 注意到了一件怪事,CVS中的一个代码变更没有包含审批记录的链接, 这是怎么回事? 经过一番调查发现:从来没有人批准过这个代码变更,奇怪的是,这个代码变更并没有出现在BitKeeper主仓库中,原来是有人黑进了CVS的服务器,偷偷插入了一段代码。这段代码到底做了什么事情呢?这段代码修改了一个叫做wait4的Linux函数,程序可以使用wait4来等待一些事情的发生,这个代码变更增加了这么两行:+ if ((options == (__WCLONE | __WALL)) && (current->uid = 0))+ retval = -EINVAL;不仔细看,这段代码并没有什么特别,只是做一下条件检查,不满足的话就返回错误码。但仔细一看"current->uid=0"是一个赋值语句啊!也就是说在用户态调用wait4函数,条件随便写一个满足“options == (__WCLONE | __WALL)”的,"current->uid=0"会立马被执行。current->uid赋值为0意味着用户ID被改成了0,也就拿到了root权限,那么在系统中可以想干什么就干什么了。幸运的是,这样一个后门被Linux团队敏锐的发现了,虽然它只是在CVS代码库中,但是危险性不容小觑。首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。 那么后果不堪设想!故事二的创作来源于码农翻身公众号的文章:如何在Linux中安插一个后门?:https://blog.csdn.net/coderising/article/details/100682413。并在此基础上结合另外三篇文章做了再整理创作:https://lwn.net/Articles/57135/https://blog.csdn.net/glory1234work2115/article/details/51277402https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/番外:Linux使用BitKeeper做开发管理,但有人不乐意了,为什么呢?因为BitKeeper是一个非开源但是有条件免费的版本控制工具,而Linux是开源软件的标杆产品,用一个闭源软件来管理开源软件,就有“政治不正确”,心里也膈应。但是在当时,确实也没有哪个自由软件/开源软件工具具有BitKeeper那样的功能--它提供了真正的分布式开发能力,所以又不得不用。虽然有协议要求“这个免费工具的真正使用者不能同时开发其竞争产品”,但是还是有人不断的试图反向工程BitKeeper,多次这样的举动引起了BitMover的注意和警告,最终导致了BitMover决定终 止结束免费BitKeeper产品的开发和应用。没有了免费的BitKeeper,Linus大神自己在短短几个星期里面撸了一个版本管理软件git,更厉害的是他大概花一天的时间就让Git能达到自己管理自己的程度(self-hosting),之后就开始用Git提交Git的程序代码了。多年以后,Github代码托管平台在开源界横空出世,被称为程序员的社交平台,它的底层就是Git。目前Linux也将代码托管在Github上,真是令人感慨啊。https://medium.freecodecamp.org/an-introduction-to-git-merge-and-rebase-what-they-are-and-how-to-use-them-131b863785zhicheng Miya大部分开发者都有遇到过该用 Merge 还是 Rebase 的问题,网络上的各种相关介绍几乎都认为:“不要使用 Rebase,因为它会产生各种问题”。这里我将介绍 merge 和 rebase 的概念,为什么你应该(或者不应该)使用它们,以及怎么用。Git Merge 和 Git Rebase 目的相同,它们都是把不同分支的提交合并到一起。虽然最终目的是一致的,但是其过程却颇为不同。了解它们之间的区别之后,你会成为一个更出色的开发者。Git 社区对这个问题有很大争论,一些人坚持应该只用 rebase,另外一些人认为只用 merge,事实上两种方式各有优势。Git Merge对于使用版本控制系统的开发者来说,Merging 是常规操作。不管创建的分支是用来测试、修复 bug,还是别的什么原因,可能都会需要把分支的提交 merging 到其它的分支上。具体来说,merging 就是把源分支的提交放到目标分支里面。在这个过程里,只有目标分支改变,而源分支保持原样。Merge Master->Featuer branch优点简单易上手保留了提交历史和时间次序保留了分支的结构缺点提交历史被大量的 merge 提交污染了使用 git bisect 调试变得更困难了怎样做使用 checkout 和 merge 命令把 master 分支 merge 到 feature 分支。$ git checkout feature$ git merge master(or)$ git merge master feature这将会在 feature 分支上创建一个新的 “Merge 提交” 用来保留所有分支的记录。Git RebaseRebase 是合并两个分支的另一种方式。Rebase 把所有的提交压缩成一个 “patch”。然后把 patch 添加到目标分支里。和 merging 不同,rebasing 清除了历史,因为它完全是从一个分支转移到了另一个分支。在这个过程中,多余的记录被移除了。Rebases 的提交从顶部按次序向下排列,而 merges 则自下而上。Rebase feature branch into master优点把复杂的历史变成优雅的提交线操作单个提交变得很简单(比如,reverting)避免了庞大的仓库、海量的分支以及烦人的 merge 提交线性合并清除了中间的无用提交,对于 DevOps 团队来说是个好消息缺点Rebase 后 feature 分支间的上下文模糊了在团队里 rebasing 公共分支是高风险的事工作变多了:feature 分支需要经常更新Rebasing 到远程分支需要 force push。最大的问题是人们经常已经 force push 了,才发现忘记了设置 git push 默认值。结果本地远程所有同名的分支都进行了更新,清理起来很要命。如果你 rebase 出错并且很不幸重写了历史,很棘手,所以一定要明白操作的意义。怎样做下面的命令把 feature 分支 rebase 到 master 分支上。$ git checkout feature$ git rebase master它把整个 feature 分支的提交移动到了 master 分支上。通过给每个源(feature) 分支创建了一个 brand 来 re-writing 项目的历史。Interactive Rebasing这个命令可以在移动 commit 前改变它们。这比普通的 rebase 更加强大,它提供了对分支提交历史的完整控制。另外,在合并 feature 分支到 master 前,还可以用它来清理混乱的提交历史。$ git checkout feature$ git rebase -i master他会打开编辑器列出将要被移动的提交。pick 22d6d7c Commit message#1pick 44e8a9b Commit message#2pick 79f1d2h Commit message#3它清晰地展示了分支在 rebase 后的样子。通过重新调整,提交历史可以变成任何你想要的样子。如,可以把 pick 换成 fixup , squash , edit 等命令。选哪个所以,哪个是最好的?有没有专业的建议呢?很难明确告诉你该选哪一个,毕竟每个团队的情况不同。但还是有章可循。团队在制定他们的 Git rebase vs. merge 策略时需要考虑很多问题。事实证明,工作流之间并无明显的高下之分,一切都取决于团队情况。选择更直白的 rebasing 还是历史可塑性更强的 merging,要考虑团队对 rebasing 的了解情况以及 Git 熟悉程度。最后,决定使用 merging 还是 rebasing 还应该考虑到分支策略。团队有必要制定一个合适的分支策略。我的建议随着团队增长,通过 merge 策略很难管理和追踪到每个提交。为了提交历史更清晰、更易于理解,使用 Rebase 是一个明智、高效的选择。下面是针对不同环境的建议,可以最大限度地发挥 Rebase 的优势:本地开发:如果你没有和别人协同工作,你应该使用 rebasing 而不是 merging ,这样历史记录会很清晰。如果你已经从仓库拉取了你的个人 fork,并且不准备和别的开发者一起工作,在分支 push 前 rebase 也是可以的。你的代码准备好了被 review: 你创建了 pull request。别人正在 review 你的代码,可能把它拉到了本地 review。如果这样,你最好别 rebase 你的代码。你应该创建一个 “rework” 提交来更新你的 feature 分支。它会让 pull request 的可塑性更强,也能避免历史突然丢失。review 已经完成并且已经准备好了合并到目标分支。恭喜!你就要删除你的 feature 分支了。由于别的开发者不需要拉取、合并这些更改,这是你清理记录的好机会。你可以改写记录,折叠原始提交、“pr rework” 提交和 "merge"提交,使之成为一整个清晰的提交。作为可选,你还可以给这些提交创建一个明确的 merge,这样做实际上很有用。它会记录 feature 并入master 的时间。结论希望这些解释能让你对 Git merge 和 Git rebase 更了解。Merge .vs. rebase 策略之争永无止境。希望这篇文章可以帮助你扫清迷惑,找到一个适合自己的团队的方向。
即便是C罗、梅西这样可以享受赞助商定制装备服务的顶级巨星也不是每场比赛都会穿新鞋。他们的球鞋之所以看起来很新,一方面是因为赞助商会在一定时段为其提供多双同一款式的足球鞋,另一方面还要归功于各自俱乐部和国家队的装备管理人员的细心打理。印象中换鞋换的最频繁的当属贝克汉姆了,作为足坛近20年最具影响力的人物之一,小贝的商业价值在代言球鞋这件事儿上也体现的淋漓尽致。从猎鹰3到猎鹰12,从Predator Mania到Predator Pulse,贝克汉姆的人气丝毫没有随着年龄的增长或是远走大联盟而衰减,而这也让他代言的球鞋获得了最大程度的曝光度。据悉,在贝克汉姆和阿迪达斯的合同中明确标注了他必须在一定的时间内更换自己穿的球鞋,此举就是为了让新款球鞋得到更多的曝光度,从而达到增加销售量的目的。当然,并不是所有球员都被精明的装备厂商“绑架”了。前不久刚在世界杯上拯救了德国队的中场大师克罗斯便在球鞋的问题上坚持着“不坏不换”的原则。熟悉TK的球迷一定不会对阿宽的小白鞋感到陌生,从2009年签约阿迪达斯开始,将近10年的时间,克罗斯已经不知道拒绝了不少次阿迪达斯提出的更换新款球鞋的建议。为了保住阿宽不跑到竞品代言,阿迪达斯方面不得不每年专门为其定制这款经典白鞋。看到这个问题,我的脑海里就浮现了之前看到的两则故事,一则是跟Linux作者Linus有关,他的这个故事严格意义上并不是一个后门,但是确实在Linux系统里面安插了“私货”;另外一个故事是真的在Linux源码中安插了后门,而且差一点成功了。故事一:Linus在Linux中安插“私货”如果你对Linux代码还算比较熟的,应该就知道下面截图的是系统调用SYSC_reboot接口的代码。代码中有一段校验Magic Number(魔数)的代码,上面的注释是:“For safty, we require "magic" arguments.”哇塞!说的多么“冠冕堂皇”啊,为了安全,好像不做一下校验就很不严谨似的。接着看看那几个比较的宏是干嘛的:嗯?!第一个参数貌似很有意思,像英文的“feeldead”,感觉要死了,可不是么系统马上要重启了。但貌似除了这第一个参数的魔数,第二个参数要比较的魔数都没什么特别的意思嘛。神奇的事情来了,把这几个魔数转成16进制:0x281219690x51219960x160419980x20112000看着像什么?有点像是日期啊,答对了!第一个是Linus大神的生日1969年12月28日,第二个是Linus的大女儿的生日1996年12月5日,第三个是Linus的二女儿的生日1998年4月16日,最后一个零零后是Linus的小女儿剩余2000年11月20日。Linus这是在Linux代码中公然夹带私货啊!换句话来说,要想成功调用reboot API,那么前两个参数必须严格按如下规则填写: 第一个参数必须是0xfee1dead。 在Linus大神的大女儿Patricia出生之前,第二个参数能且只能是0x28121969,也就是大神的生日。 当Linus有了大女儿Patricia后,第二个参数也可以是Patricia的生日0x5121996。这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。可以想见,Linus大神在喜得爱女的几天内就修改了内核代码,然后在女儿满月之前把把这个代码发布给世界了。当Linus有二女儿后,第二个参数也可以是二女儿的生日。 当Linus有了小女儿后,第二个参数也可以是小女儿的生日。 Linus大神把这些有意义的魔数写入Linux内核中,而且使它们称为系统调用的一部分,也就是说只要Linux还在,只要Linux还运行,这些数字将在全世界各地流淌。全世界的Linux应用程序开发者都将使用这些魔数才能正确调用重启接口,而且考虑到前向兼容性,这些数字是不会被轻易更改或者去除的。幸运的是,只要你系统不重启,Linus的诡计就不能得逞,机智!故事一的创作来源于格友公众号的文章:雕刻在LINUX内核中的LINUS故事:https://blog.csdn.net/PCb4jR/article/details/81518695。原文要比我写的精彩,我只是把切题的部分摘出来了,它涉及很多有趣细节,感兴趣的建议去看一下完整版。故事二:惊天黑客Linux插入后门记Linux内核是开源代码界可以说是最著名的标杆项目,全世界无数双最顶尖的程序员的眼睛都盯着,正是基于此开源世界宣传开源软件比专有软件更安全,那能不能向其中安插一个后门呢?虽然这是一件难度极高的事情,但有人差一点做到了,是怎么回事呢?在正式说之前,我们必须要了解一些背景知识。2002年2月,Linux之父Linus Torvalds决定使用BitKeeper工具来管理Linux内核代码主线(mainline)。利用版本控制工具,我们可以记录每次代码修改的差异,代码修改的提交人信息,修改原因和其他信息,这对于软件开发来说是一个很重要的事情。一开始Linus对BitKeeper评价很高,他认为是“The best tool for the job”。BitMover是BitKeeper的开发厂商,其创始人和CEO是Larry McVoy,这个人也很热衷于开源事业的发展。Larry期望BitKeeper能帮助Linus 免于陷入不断加重的Linux内核管理工作中--事实上,自从Linus 开始使用BitKeeper之后,Linux的开发步伐加快了两倍。BitMover授权Linux开发者不用付费就能使用这个工具--前提是这样一个协议:这个免费工具的真正使用者不能同时开发其竞争产品。换句话说,这个工具可以免费 使用(freely used),不过不能被自由克隆(freely cloned)。事实上,BitMover开发维护了两个BitKeeper版本,一个免费的授权给Linux开发者使用开发Linux,另一个是商业产品需要购买,但BitKeeper其实也不亏,因为它的商业模式就是授权给开源开发者使用吸引那些付费用户,相当于整个Linux开发团体给这个产品做了背书。当然这两个版本都是BitMover的知识产权。扯的原了,书回正传。2003年Linux源码主拷贝存储在BitKeeper中,如果开发者想往Linux代码中提交一个修改,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。但是有些人不喜欢BitKeeper,于是BitMover的一些人(在Larry McVoy的指示下)建立一个单独的CVS仓库,这个仓库包含了当前完整的Linux代码以及全部的修改记录,这样的话不喜欢用BitKeeper的开发者就可以从CVS仓库中获取代码,CVS代码拷贝实际上是BitKeeper代码的一个直接克隆。因此,CVS仓库不是新修改提交代码的地方,当然,当有人试图往CVS中推送一些修改的时候,Larry McVoy能第一时间注意到。故事就发生在这个CVS仓库中。2003年11月5号,Larry McVoy 注意到了一件怪事,CVS中的一个代码变更没有包含审批记录的链接, 这是怎么回事? 经过一番调查发现:从来没有人批准过这个代码变更,奇怪的是,这个代码变更并没有出现在BitKeeper主仓库中,原来是有人黑进了CVS的服务器,偷偷插入了一段代码。这段代码到底做了什么事情呢?这段代码修改了一个叫做wait4的Linux函数,程序可以使用wait4来等待一些事情的发生,这个代码变更增加了这么两行:+ if ((options == (__WCLONE | __WALL)) && (current->uid = 0))+ retval = -EINVAL;不仔细看,这段代码并没有什么特别,只是做一下条件检查,不满足的话就返回错误码。但仔细一看"current->uid=0"是一个赋值语句啊!也就是说在用户态调用wait4函数,条件随便写一个满足“options == (__WCLONE | __WALL)”的,"current->uid=0"会立马被执行。current->uid赋值为0意味着用户ID被改成了0,也就拿到了root权限,那么在系统中可以想干什么就干什么了。幸运的是,这样一个后门被Linux团队敏锐的发现了,虽然它只是在CVS代码库中,但是危险性不容小觑。首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。 那么后果不堪设想!故事二的创作来源于码农翻身公众号的文章:如何在Linux中安插一个后门?:https://blog.csdn.net/coderising/article/details/100682413。并在此基础上结合另外三篇文章做了再整理创作:https://lwn.net/Articles/57135/https://blog.csdn.net/glory1234work2115/article/details/51277402https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/番外:Linux使用BitKeeper做开发管理,但有人不乐意了,为什么呢?因为BitKeeper是一个非开源但是有条件免费的版本控制工具,而Linux是开源软件的标杆产品,用一个闭源软件来管理开源软件,就有“政治不正确”,心里也膈应。但是在当时,确实也没有哪个自由软件/开源软件工具具有BitKeeper那样的功能--它提供了真正的分布式开发能力,所以又不得不用。虽然有协议要求“这个免费工具的真正使用者不能同时开发其竞争产品”,但是还是有人不断的试图反向工程BitKeeper,多次这样的举动引起了BitMover的注意和警告,最终导致了BitMover决定终 止结束免费BitKeeper产品的开发和应用。没有了免费的BitKeeper,Linus大神自己在短短几个星期里面撸了一个版本管理软件git,更厉害的是他大概花一天的时间就让Git能达到自己管理自己的程度(self-hosting),之后就开始用Git提交Git的程序代码了。多年以后,Github代码托管平台在开源界横空出世,被称为程序员的社交平台,它的底层就是Git。目前Linux也将代码托管在Github上,真是令人感慨啊。https://medium.freecodecamp.org/an-introduction-to-git-merge-and-rebase-what-they-are-and-how-to-use-them-131b863785zhicheng Miya大部分开发者都有遇到过该用 Merge 还是 Rebase 的问题,网络上的各种相关介绍几乎都认为:“不要使用 Rebase,因为它会产生各种问题”。这里我将介绍 merge 和 rebase 的概念,为什么你应该(或者不应该)使用它们,以及怎么用。Git Merge 和 Git Rebase 目的相同,它们都是把不同分支的提交合并到一起。虽然最终目的是一致的,但是其过程却颇为不同。了解它们之间的区别之后,你会成为一个更出色的开发者。Git 社区对这个问题有很大争论,一些人坚持应该只用 rebase,另外一些人认为只用 merge,事实上两种方式各有优势。Git Merge对于使用版本控制系统的开发者来说,Merging 是常规操作。不管创建的分支是用来测试、修复 bug,还是别的什么原因,可能都会需要把分支的提交 merging 到其它的分支上。具体来说,merging 就是把源分支的提交放到目标分支里面。在这个过程里,只有目标分支改变,而源分支保持原样。Merge Master->Featuer branch优点简单易上手保留了提交历史和时间次序保留了分支的结构缺点提交历史被大量的 merge 提交污染了使用 git bisect 调试变得更困难了怎样做使用 checkout 和 merge 命令把 master 分支 merge 到 feature 分支。$ git checkout feature$ git merge master(or)$ git merge master feature这将会在 feature 分支上创建一个新的 “Merge 提交” 用来保留所有分支的记录。Git RebaseRebase 是合并两个分支的另一种方式。Rebase 把所有的提交压缩成一个 “patch”。然后把 patch 添加到目标分支里。和 merging 不同,rebasing 清除了历史,因为它完全是从一个分支转移到了另一个分支。在这个过程中,多余的记录被移除了。Rebases 的提交从顶部按次序向下排列,而 merges 则自下而上。Rebase feature branch into master优点把复杂的历史变成优雅的提交线操作单个提交变得很简单(比如,reverting)避免了庞大的仓库、海量的分支以及烦人的 merge 提交线性合并清除了中间的无用提交,对于 DevOps 团队来说是个好消息缺点Rebase 后 feature 分支间的上下文模糊了在团队里 rebasing 公共分支是高风险的事工作变多了:feature 分支需要经常更新Rebasing 到远程分支需要 force push。最大的问题是人们经常已经 force push 了,才发现忘记了设置 git push 默认值。结果本地远程所有同名的分支都进行了更新,清理起来很要命。如果你 rebase 出错并且很不幸重写了历史,很棘手,所以一定要明白操作的意义。怎样做下面的命令把 feature 分支 rebase 到 master 分支上。$ git checkout feature$ git rebase master它把整个 feature 分支的提交移动到了 master 分支上。通过给每个源(feature) 分支创建了一个 brand 来 re-writing 项目的历史。Interactive Rebasing这个命令可以在移动 commit 前改变它们。这比普通的 rebase 更加强大,它提供了对分支提交历史的完整控制。另外,在合并 feature 分支到 master 前,还可以用它来清理混乱的提交历史。$ git checkout feature$ git rebase -i master他会打开编辑器列出将要被移动的提交。pick 22d6d7c Commit message#1pick 44e8a9b Commit message#2pick 79f1d2h Commit message#3它清晰地展示了分支在 rebase 后的样子。通过重新调整,提交历史可以变成任何你想要的样子。如,可以把 pick 换成 fixup , squash , edit 等命令。选哪个所以,哪个是最好的?有没有专业的建议呢?很难明确告诉你该选哪一个,毕竟每个团队的情况不同。但还是有章可循。团队在制定他们的 Git rebase vs. merge 策略时需要考虑很多问题。事实证明,工作流之间并无明显的高下之分,一切都取决于团队情况。选择更直白的 rebasing 还是历史可塑性更强的 merging,要考虑团队对 rebasing 的了解情况以及 Git 熟悉程度。最后,决定使用 merging 还是 rebasing 还应该考虑到分支策略。团队有必要制定一个合适的分支策略。我的建议随着团队增长,通过 merge 策略很难管理和追踪到每个提交。为了提交历史更清晰、更易于理解,使用 Rebase 是一个明智、高效的选择。下面是针对不同环境的建议,可以最大限度地发挥 Rebase 的优势:本地开发:如果你没有和别人协同工作,你应该使用 rebasing 而不是 merging ,这样历史记录会很清晰。如果你已经从仓库拉取了你的个人 fork,并且不准备和别的开发者一起工作,在分支 push 前 rebase 也是可以的。你的代码准备好了被 review: 你创建了 pull request。别人正在 review 你的代码,可能把它拉到了本地 review。如果这样,你最好别 rebase 你的代码。你应该创建一个 “rework” 提交来更新你的 feature 分支。它会让 pull request 的可塑性更强,也能避免历史突然丢失。review 已经完成并且已经准备好了合并到目标分支。恭喜!你就要删除你的 feature 分支了。由于别的开发者不需要拉取、合并这些更改,这是你清理记录的好机会。你可以改写记录,折叠原始提交、“pr rework” 提交和 "merge"提交,使之成为一整个清晰的提交。作为可选,你还可以给这些提交创建一个明确的 merge,这样做实际上很有用。它会记录 feature 并入master 的时间。结论希望这些解释能让你对 Git merge 和 Git rebase 更了解。Merge .vs. rebase 策略之争永无止境。希望这篇文章可以帮助你扫清迷惑,找到一个适合自己的团队的方向。这几年以小米为代表的互联网电视确实很火。其实最先做互联网电视的是乐视,在乐视刚开始做电视的时候,贾跃亭还没有那么疯狂,电视业务做的还算可以,很快做到了互联网电视的第一名。小米开始做互联网电视的时候,乐视已经在行业内小有名气了,再加上乐视那时候内容做的也不错,乐视电视在用户中间也有不错的口碑。小米做了电视之后就把乐视作为最大的竞争对手,处处跟乐视对标,两家经常在微博上打口水战。在刚开始做电视的那几年,小米在电视上投入了很多资源,但是一直没法超越乐视,乐视的先发优势还是比较明显。结果后来贾跃亭疯狂大跃进,搞七大生态把自己搞死了,乐视最优质的电视业务就这么完蛋了,从互联网电视的第一名直接跌到谷底,而且再无翻身可能,小米则顺利的接收了之前乐视电视的市场,成为互联网电视第一名。看去年一些研究机构发布的数据,小米已经不仅仅是互联网电视第一,现在已经是国内电视行业的第一,超过了海信、康佳、TCL等等一众传统电视巨头。小米在短时间内能取得这样的成绩,除了接收乐视的市场快速扩大市场规模之外,在用户体验上的领先也是一大原因。小米电视除了几款高端机型,大部分机型都卖的比较便宜,真要跟其他品牌的高端机型比品质可能还真比不过,但是小米胜在用户体验上。雷军说小米既是一家硬件公司,也是一家互联网公司,传统电视厂商要跟小米比用户体验是很难的。我个人比较喜欢的一个功能是小米把小爱同学集成到了小米电视上,然后在遥控器上加入了语音输入功能,想在电视上搜什么东西直接语音输入搜索就行,用遥控器在电视上打过字的人都知道这个功能带来的效率提升有多大。另外小米在在内容方面和传统电视厂商比也有相当大的优势。首先小米自己就有内容部门,比如小米视频、小米音乐、小米游戏、小米影业等等,另外小米和业内内容巨头也有合作,在好几年前小米就入股了爱奇艺,现在是爱奇艺的第二大股东。所以我个人给题主的建议是买小米电视比较好。我看题主提到了京东年货节,应该是在京东对比过小米和海信的电视了吧,其实平时不太了解行业信息的消费者临时去去做个对比也分不出哪个好哪个坏,像我说的用户体验、内容这些东西,做参数对比是看不出来的。既然题主想买的话,就趁现在京东在搞年货节活动赶紧买吧,这可能是每年继双十一之后优惠力度最大的促销活动了,京东现在也在推科技年货的概念,优惠力度还是不小的。

5,psp 超杰交融 攻略 的第6章潜入里 左边仓库哪里有暗道啊

用蕾芙的技能 躲过探照灯 进去右边 退开小车 让大叔进来就行了
我把档发到你邮箱那里我有档。但是建议你升级下d2不稳定望楼主采纳

6,兔子复仇记第二章仓库里第18关怎么过

兔子复仇记第二章仓库里第18关通关图文攻略:Patchmania仓库里18关玩法点评:先让小胖兔子吃掉卷心菜,然后让黄兔子吃掉茄子,最后小白兔吃掉胡萝卜。

7,patchmania兔子复仇记龙舌兰高原第44关攻略

patchmania 龙舌兰高原44关玩家首先要把灰兔子进入绿色的地道,让它去篱笆里面,不要挡住小白兔的路。让小白兔进入蓝色的地道然后在从蓝色地道出来,进入黄色地道,从上面的黄色地道出来后可以按照图示的路线吃掉萝卜和蘑菇进入洞口。最后剩下的小灰兔只要吃掉小白兔为他预留好的卷心菜与蘑菇即可顺利通关。
有些事情别人帮不了你,还是得自己拿主意。

8,兔子复仇记仓库里第28关通关攻略

本文是飞翔铭月为大家带来的兔子复仇记通关攻略,patchmania逃出险境里面有25个关卡,前面的貌似比较简单,所以小编没有整理,不过对于24关和25关,个人觉得是有点难度的就整理出来了,具体如何顺利三星通关,一起看下此篇文章。第28关攻略:

9,阿拉德之怒仓库怎么用 仓库使用方法详解

城镇的精灵旅店中,左侧的箱子即是游戏仓库,玩家可以将背包中的装备或者材料保存到仓库中,并且仓库是可以和其他同账号同区服下的其他角色通用存取的。
隐藏技能:1,滑铲 (这个应该不算) 很多新手不知道抢手的滑铲怎么放,那么你需要在设置里 操作设置 把滑动跑变成双击跑 这样就可以滑铲了。2,三重控制端游的漫游有一招三重控制,意为回旋踢,瞬踢浮空弹,在这个游戏里没显示可以三重控制,但是经过亲身测试,瞬踢可以打断回旋踢,浮空弹可以打断瞬踢,从而做到三重控制(仅限漫游)。

10,兔子复仇记仓库里第43关通关攻略

本文是飞翔铭月为大家带来的兔子复仇记通关攻略,patchmania逃出险境里面有25个关卡,前面的貌似比较简单,所以小编没有整理,不过对于24关和25关,个人觉得是有点难度的就整理出来了,具体如何顺利三星通关,一起看下此篇文章。第43关攻略:

11,逃离机器猫仓库攻略

这里是来自百度机器猫吧官方知道团时空巡逻队的回答,希望能帮助到您^ ^1、墙上的画哆啦a梦的口袋里有一张拼图碎片2、蓝桌子的角落里有一张拼图碎片3、右转,书架上左数第8本书里有一张拼图碎片4、右转,沙发底下有一张拼图碎片5、桌子上的铜锣烧拿最上面的那个6、右转,植物右下角有一张拼图碎片7、拿衣架上的帽子,查看,点左侧帽子翻过来有一张拼图碎片8、右转两次,把铜锣烧给哆啦a梦吃,得到钥匙9、左转,用钥匙打开箱子,得到一张拼图碎片10、右转,点击拼图拼好,得到四个数字,右转两次在门上的框框输入,点门把手~\(≧▽≦)/~自己玩出来的恩

12,兔子复仇记仓库里5660关图文攻略 突破思维定势

兔子复仇记《Patchmania》第二章仓库里第56-60关怎么玩?随着关卡的深入,难度系数也越来越高,这让有强迫症必须吃光所有食物的小伙伴真是相当地焦急啊!下面小编叶子和大家分享兔子复仇记第二章仓库里56-60关图文攻略,保证你把农夫的作物吃光光,完美三星跑不掉的喽! 兔子复仇记第二章仓库里第56关通关图文攻略:  兔子复仇记仓库里56关玩法点评:这么多的蘑菇真是让人纠结,玩家可能要多尝试几次才能得到正确的路线,记住并不是所有的兔子都必须吃蘑菇,脱离这个思维限制的话,很快你就会胜利啦!  兔子复仇记第二章仓库里第57关通关图文攻略:兔子复仇记仓库里57关玩法点评:这一关需要玩家合理地分配蘑菇,当然路线不是唯一的,感兴趣的话可以多尝试几个路线哦!  兔子复仇记第二章仓库里第58关通关图文攻略:兔子复仇记仓库里58关玩法点评:这一关还是比较简单的,让peanut先行动即可。  兔子复仇记第二章仓库里第59关通关图文攻略:  兔子复仇记仓库里59关玩法点评:这一关的必胜秘诀在于不要害怕绕路,只要能够吃到所有的食物,一定要多动脑、多动手哦!当然calvin也是必须先行动的。  兔子复仇记第二章仓库里第60关通关图文攻略:  兔子复仇记仓库里60关玩法点评:这最后一关别看植物多,但是其实化繁为简,相信经过了重重考验练就了火眼金睛的你一定会看到那正确的路线。otto的那条路线还是需要小小动一下脑筋的,找到正确的第一个莴苣,其他的就都不是问题了。 小编推荐:>>>>>>patchmania攻略大全  以上就是兔子复仇记《Patchmania》第二章仓库里第56-60关的详细图文攻略了,大家现在知道仓库里56-60关怎么玩了吧!如果你还有什么疑问的话,不妨留言评论,小编叶子将为你解答哦!如果你喜欢兔子复仇记这个游戏,欢迎持续关注哦!  

13,刀剑封魔录之上古传说 我怎么玩都没有拿到那个聚宝盆啊 仓库那里就

你看看攻略不就知道了只要完成“帮沈万山找药”的主线剧情:去落马坡山洞和老沈一起打掉玉衡回去后和伯祁说话,接下“寻找玲珑心”任务,再和老沈说话就可以了你再去看仓库就多出个聚宝盆了
要完成任务的 具体的有点忘记了 应该是先到北面拿到什么冰。。好象是前年寒冰 然后找祁伯 再去东面找老英雄 总之一开始是没有聚宝盆的 跟着任务走就是了
只要完成“帮沈万山找药”的主线剧情:去落马坡山洞和老沈一起打掉玉衡回去后和伯祁说话,接下“寻找玲珑心”任务,再和老沈说话就可以了你再去看仓库就多出个聚宝盆了
你好!要完成任务的 具体的有点忘记了 应该是先到北面拿到什么冰。。好象是前年寒冰 然后找祁伯 再去东面找老英雄 总之一开始是没有聚宝盆的 跟着任务走就是了仅代表个人观点,不喜勿喷,谢谢。

14,达尔文进化岛V177攻略和仓库怎么用

这图没攻略的说,靠你运气,反应能力,再加一点技术~仓库就直接把东西放过去就行,直接拿,那东西全图的能给的
打什么也没法变人,因为在达尔文进化论这个地图里只有达尔文一个,而我们经常玩的达尔文进化论这个地图里面所有小怪升级以后都还是小怪,不能进化成人类,这也是开发团队在最初创作时所考虑到的。 {开始的时候你只是个1级的小生物,你得努力吃其他的小动物或者其他玩家来获得进化。而且有意思的是,吃的动物种类不同,进化后的生物种类也不一样。相当有新意,很值得一玩哦。 你的食物量=金子+木材 当食物量到达一定程度的时候,就能获得进化 进化后的生物种类由您的 金子与木材数之比来决定 杀死食肉动物可以增加金子,杀死食草动物可以增加木材,杂食动物就是都增加啦。。 如果被别的生物杀死,会减少食物量,甚至退化到低级生物! 到达8级以后,再杀小猪小鹿获得的食物量就会减少了 到达9级以后,就算是“近战“攻击也可以对空了 到达10级以后,你的行踪将被所有玩家看到 当你到达11级,就可以选择终极进化,此时游戏进入死亡模式,玩家的视野全开,被杀后将不能复活 绝对是个好游戏,带领您的种族统治这片大陆吧! 附:升级所需食物量(金子与木材数之和) LV2 : 2 LV3 : 8 LV4 : 18 LV5 : 32 LV6 : 50 LV7 : 72 LV8 : 98 LV9 : 128 LV10: 162 LV11(最终进化): 200
文章TAG:patchmania攻略  仓库里  手机二次元学院怎么隐藏对话框我卡在我和美波躲在体育课仓库里  攻略  仓库  库里  
相关教程
猜你喜欢