计算机史最疯狂一幕:豪赌50亿美元,“蓝色巨人”奋身一跃
作者 | OneFlow社区
来源 | OneFlow社区
“Go big or go home. ”是美国人的一句习语,经常会在赛场上听到,NBA球迷应该很熟悉,翻译过来就是“要不变强大,要不滚回家”。在1960年初期的计算机行业,IBM正站在这样一个十字路口。
凭借刚发布不久的能彻底替代穿孔卡片分析机的1401大型机,IBM本可以在市场上轻松躺赚两年,但总裁小托马斯·沃森(Thomas J. Watson Jr.)还不想“躺平”,他从父亲手上继承到这一职位已有四年。
整个行业发展正在加速,但IBM却进入平台期,增长放缓,公司两个计算机部门的“内卷”竞争让产品线变得混杂,而最新产品线的竞争壁垒并不高,这些危机感让他催促手下的IBM高管通过更大的产品创新来提升营收。
彼时,计算机厂商的产品线互不兼容,客户要升级到新机器时,很容易改用其他厂商的产品:基本每个产品都有自己的ISA、软件堆栈、I/O系统和利基市场(分别针对小企业、大企业、科研应用)。各种主机需要量身定做操作系统,兼容性、系统升级等操作无从谈起,定制化系统所耗费的大量人力、财力甚至会超过主机本身。
很快,经过副总裁文森特·利尔森(T. Vincent Learson)等人来回争论后,最终敲定他们需要开发一种系统,以简化产品线、降低研发成本,提高竞争力。沃森也希望能尽早淘汰过时的晶体管计算机,要求着手研制由集成电路组成的机器。
但让所有人始料未及的是,这几乎是一个让IBM搭上全部身家性命的抉择。
在日夜兼程制造新机器的四年里,IBM总计为新机器的研发投入了50亿美元(按购买力计算,相当于今天至少400多亿美元),是他们一开始预估费用6.75亿美元的7.4倍。其中,45亿美元用于建造新设施以及购买和租赁设备,最头疼的软件系统花了5亿美元,是一开始3000万美元预算的近17倍,而系统研发最终耗费了大约5000人年(指5000人工作1年或500人工作10年的工作总量),而此前有介绍过有450万行代码的Windows NT系统不过才花了1000人年。
其中,最多时有2000名顶级工程师参与了软件编写,最终写出了百万级代码量的操作系统。当然,以现代眼光来看,写一个类似的软件似乎已不是什么了不起的事,也根本用不到上千人,但在当时绝对开创了先河。
这个新机器就是IBM System/360,为了制造这一庞然大物,IBM不可避免地走了不少弯路。它让IBM的开发资源、运营流程和商业战略经历了一场彻底的洗礼,在技术不稳定、执行混乱、充满不确定性的情形下摸着石头过河,以一种他们自己都未曾想到的创业方式,踏上了一场前无古人后无来者式的冒险之旅。
幸运的是,IBM的“豪赌”大获成功。在回忆录里,小沃森称这是他一生中所做的“最大、最富冒险的决策和最辉煌的胜利”,这场胜利让这家企业蜕变成真正的“蓝色巨人”,在整个行业独领风骚至少二十年。领导开发System/360系统设计和工程实施的弗利德利克·布鲁克斯(Frederick Brooks)等人也因此获得了图灵奖等极高声誉,其技术创新和影响决定了数十年的计算机历史进程。它也被视为美国迄今最伟大的三大商业成就之一,与福特的Model T汽车和波音的首款喷气式客机707齐名。
“Go big or go home. ”听起来是道二选一的选择题,但对勇者而言,选择往往只有一个:干就完了。IBM奋身一跃,就此掀起计算机史上的一场滔天巨浪。
1
新机器的野心
1960年代初期,计算机的存储容量与运行速度增加了10倍,有效性能由此提高100倍,但这超出了软件设计人员的驾驭能力,机器之间互不兼容是普遍现象,软件技术几乎止步不前。
当时,IBM共有八款晶体管计算机和一些真空管计算机,还有六款晶体管计算机正在开发中,但它们的内部结构、处理器、程序设计软件和外部设备不尽相同,功能和性能也不同,一款计算机对应一个系统,无法扩展或升级。
互不兼容带来了两大弊端。一方面,这严重制约了计算机厂商的生产力。大部分工程师不得不做没什么技术含量的重复劳动,比如把一台磁带机设计出来后,技术人员必须做同一台磁带机与各种机型匹配的大量改造工作。
另一方面,这让客户的使用体验极其糟糕。当客户想换机器时,不仅需要更换机器本身,还需要更换外部设备,重编程序。尤其当时大部分程序是用汇编语言编写而成,移植工作量很大,而且即便把程序移植到性能快一倍的机器上,实际速度却不会增加多少,还需等厂商的技术人员来做专门匹配优化。总之,费时、费力又费钱。
小沃森得知,IBM的现有产品还能在市场上挣扎两年,因此必须在两年内推出高增值的新产品才能在竞争中大幅领先。而在利尔森看来,坐以待毙确实是一种风险,他性格强硬,执行力和好胜心极强,在整个职业生涯都在关注如何将新产品推向市场,所以当决定要做新产品时,他会雷厉风行地将其推行下去。
在公司内部,还面临着一场部门间的暗斗,由于最新的1401在市场上大受欢迎,一些工程师团队比较抵触开发更庞大的计算机。同时,正在研发中的机器还有IBM 8000,但刚刚担任这一团队工程经理的鲍伯·伊万斯(Bob O. Evans)认为,8000的设计自始至终都没有将科学应用和商业应用结合起来,因此要求暂停该产品的研发,现在应该要做相互兼容的新机器,还提议未来所有系统采用最新的固态逻辑技术(SLT),使IBM的机器更具竞争力。
但这遭到了领导设计8000系列机器的布鲁克斯团队的反对,他认为,重新研发新机型意味着至少还要花两年时间才有结果。好几个月争论不休,有一次伊万斯甚至给布鲁克斯打电话,悄悄提到后者要加薪,但后者说了几句感谢的话后,伊万斯直截了当地说这事跟他没关系。
于是,利尔森引入了第三方部门的高级工程师杰瑞·哈达德(Jerrier A. Haddad)分别研究了他们各自的提议,最终哈达德建议采用伊万斯的方案。在争论六个月后,8000项目于1961年5月停止研发,这让布鲁克斯团队感到心碎了一地。
布鲁克斯还在为8000项目的失败耿耿于怀。不过,让他惊讶的是,伊万斯随后主动要求布鲁克斯负责制定计划以开发兼容的新机器,伊万斯展现出的胸怀让他欣然接受了这个任务。两个工程团队开始合作,在新机器路线上做出了重大贡献。
IBM内部逐渐达成一个共识。1961年10月,在小沃森的拍板下,利尔森召集了代表系统编程、研究工程和开发的特别委员会SPREAD,将他们关到一个旅馆,限令在年底前提出一个新产品线研发总体方案。
经过两个月的综合研判,1961年12月28日,一份有长达80页的文档《处理机产品―SPREAD工作组的最后报告》诞生了,也就是System/360计算机系统的总体方案。布鲁克斯在一次专门会议上解读了报告的重点内容:
需要一个单一的、兼容的机器系列,涵盖现有最小内存的机器,例如可能低于1401到功能最强大的7094型机器。事实上,报告对兼容性的范围表达了质疑。
新机型的目标不应该仅仅是取代1401或7000系列,而是要开辟一个全新的计算机应用领域。当时,这些机型和新产品线之间的兼容性并不被认为是最重要的,因为新机器出现的最初时间表已经被延长了好几年。
System/360必须同时具有商业和科学应用。这是一个艰巨的双重任务,因为商业机器可以接收大量的数据,但却没有多少处理能力,而科学机器只能处理相对较少的数据。为了达到这一目的,他们决定新生产线上的每台机器都将配备不同大小的内存。此外,新机器将提供各种最新技术特性,如“浮点计算”、“可变字长”和“十进制指令集”,以处理科学和商业任务。
信息输入和输出设备以及所有其他外设必须有“标准接口”,以便各种类型和大小的外设连接到主计算机。这也成为新生产线的一个重要特征。
尽管这次报告的反响并不好,但没有真正的反对意见。当时《报告》估计,System/360操作系统将不得不花费1.25亿美元,而当时他们每年的编程支出不过在1000万美元,所有人都意识到这是一项黑洞式任务,所有资源都可能会被它吸走。
在方案实施和管理机制上,工作组提出了一套详尽的管理和监控机制,确保管理层和部门经理能监控项目的各方面进展。
为了让工程师有充分的创新空间,在设计和工程实施中发挥他们的聪明才智,方案还将体系结构的定义和实现分开。比如地址格式和数据格式这种事关全局的工作不可轻易更改,而像“微编程”这种来自研究部门的新技术,如果工程师有更好的方法实现同样功能,可以进行替换。
总之,从“360”这个命名就能看出新机器的野心,IBM要为用户提供全方位无死角的服务。新机器要同时支持科学计算、商业应用和信息处理,让一套程序运行在所有系统上。所有机器都使用标准接口,以此取代市面上的所有计算机,包括IBM现有的“各自为政”的八款机器。
但这毕竟是书面规划,在真正实践中,这个极其宏大的目标充满各种意想不到的陷阱,让他们像在一个满是沼泽地的无人区行进。
2
摸着石头过河
在360的方案确定后,IBM管理层任命了这一项目的相关负责人。主管设计工程的总负责人正是29岁的布鲁克斯,在这之前,他担任IBM的Harvest和世界上第一台流水线计算机STRETCH的体系结构设计师。
布鲁克斯负责协调4个小组的工作,其中3个小组都由金·阿姆达尔(Gene Amdahl)领导,IBM的最后一种电子管计算机IBM 709就出自他手,此外,他还担任过第一台全晶体管计算机IBM 7030的设计师。
他们就360系统技术问题进行了多次商讨,最终决定实现“兼容性”这一全新思路:尽管360系列在型号上会有区别,但它们都必须能够用相同的方式处理相同的指令,具有相同的软件,配置相同的磁盘机、打印机等外设,而且能够相互连接在一起工作,此外在更换新机器时不用再更换外设。
正式动工后,他们会发现,360项目的推进远比他们想象的要艰难,除了解决技术难题,他们还面临人员协调、资源调动等难题。但开弓已没有回头箭。
每一个难题都让小沃森夜不能寐。在回忆录里,他提到了两大风险:首先是要协调来自欧美等地不同的工程团队,他们同时在研发六种新计算机和各类外设,但最终要将所有硬件都联结起来。
为了推进System/360的研发,利尔森采用了一种“摩擦式互动(abrasive interaction)”的管理手法,把小型机团队的顶尖工程师提拔成为大型机部门中最优秀开发团队的负责人,迫使IBM内部不同的工程团队通力合作。
其次,IBM决定自己为这个新系统制造相应的电子部件,这是条烧钱路线。他们必须自己制造集成电路,因为买不到现成的芯片。不过,新建一个集成电路制造厂,对生产环境要求极为苛刻,成本超过普通厂房的四、 五倍。
更大的挑战在于编写可能是一个百万级代码的操作系统,没有工程师参与过这么庞杂的编程重任,而后投入的人力资源更是远超预判。
就在他们如火如荼研发360机型时,1963年年底,IBM的旧生产线开始抵挡不住竞争对手的攻势。为了提早拖住用户转向的势头,他们必须尽快让外界知道360产品的存在。1964年4月7日,在老沃森创建IBM的50周年之际,他们分别在美国63个城市和14个国家举办了有近万人参加的新闻发布会,向全世界昭告IBM System/360的诞生。小沃森称“这是该公司史上最重要的新产品”。
他们向外界展示了由六台兼容机器组成的系列System/360 30、40、50、60、62和70,它们的体系结构完全一样,只是性能上不同,相邻两档机器的计算速度之差别约为3至5倍,最高运算速度可达每秒100万次。另外,他们还发布了44种外设,包括磁带驱动器、磁盘驱动器、打印机等,承诺会提供使一切协同运行所必需的软件。不过,他们那天抄了一个捷径,当天展示的设备并非都是真实的,有些展品只是木制的模型。
由于发布的许多新概念和最新技术,System/360在外界的反响非常热烈。作为一种多用途产品,System/360多达248个数据传输终端可以与计算机进行通信,即使计算机忙于批处理作业。它不仅能够处理小型二进制、十进制或浮点计算,还可以处理科学或商业工作。
最突出的核心功能当然是兼容性。它可以让庞大的数据中心安装一台小型360计算机,然后升级到更庞大的计算机,而无需重写软件或更换外设。同时,一旦工程师熟悉了这一新系统,就不必再学习更多新知识来做升级。
IBM还为360项目构建了自己的固态逻辑技术,密度是当时技术的10 倍,可靠性是100倍。它还制造了从电路到内存、存储、打印机和屏幕的所有即插即用的组件,处理器和存储器都安装在一个名为“主机”的金属机柜。此外,它还将设计与构建分开,因此可以复制系统。System/360的制造成本也进一步降低,并且易于定制以满足相对广泛的客户场景。
但是,System/360的长征只走了一半,发布会的成功并不意味着项目已经成功。
3
豪赌50亿美元
4月宣布新产品后,IBM进入规模化生产时期,实际上,这是其历史上最危险的时刻。
发布会后的一个月,来自全球客户的360订单超过100000台,而同年在英国、西欧、美国和日本安装的各类计算机总共也就20000多台。IBM承诺1965年第三季度交付首批小型计算机,1966年第一季度交付大型计算机。
与此同时,360项目的投入不断加注到让人咋舌。通过粗略估算,他们将为System/360的研发投入50亿美元,其中研制经费5亿,生产设备投资10亿,推销和租赁垫支35亿。要知道,美国研制第一颗原子弹的“曼哈顿工程”也才用了20亿美元。这笔费用是IBM在1962年营收的两倍,他们还雇用了7万多名新员工。
IBM为自己争取了两年时间来生产机器,如果不能按时交付就会功亏一篑。
当然,生产问题无可避免。巨大的订单数量严重影响了生产质量,存储器磁芯的制造难度,再加上不少机器因为电子电路不完整严重延误了交付工期。同时,随着制造活动在全球展开来,由于小沃森的弟弟Arthur K. Watson管理不足,协调活动和制造机器方面由此衍生出各种问题,他忍痛将弟弟调整到其他部门,但这也伤害了弟弟的自尊,多年以后,小沃森都觉得很是内疚。
软件问题同样阻碍了System/360的生产。即便在今天,很多项目的上万行代码都是一团糟,更不用说这个百万级代码量的操作系统,让360操作系统一次运行多项任务还要确保高效性并非易事。同时,应用程序和编程支持等也是令人头疼的顽疾。
漏洞百出的重重压力之下,1964年10月,IBM宣布产品交付严重延误。
在360系统上,他们新增了1000名工程师来追赶工期,这使得IBM在软件方面的投入比硬件还多,不过投入更多的工程师参与项目基本于事无补。基于360系统的实践经验,布鲁克斯在1975年出版的《人月神话》一书中给出了他的见解:生孩子需要经过十月怀胎,不管把这个任务交给几个女人完成都一样。
很多人每周工作近100小时,到处都是焦虑的灰暗气息。一次,当小沃森去视察工作进展时,不认识他的工程师大吼着让他滚出去,不要影响他们工作,小沃森灰溜溜地离开了。有些经理和工程师由于难以承受诸多压力而选择辞职。
好在,他们在五个月内奇迹般地解决了很多问题,产品得以如期交付,尽管新交付的360机器的质量还是有部件短缺、程序bug等诸多缺陷,几乎每个早期客户都会遇到一些问题。
IBM的同行也对其新产品线做出了回应。GE、霍尼韦尔、NCR等抱团推出了与对方机器兼容的系统,除了没有兼容IBM的机器。一些小规模的公司决定制造与IBM兼容的机器,包括RCA以及欧洲和日本的其他公司。
即便如此,System/360的历史性创新使它遥遥领先于竞争对手。1966年底,他们建造和安装了大约8000台360机器,IBM的收入几乎翻了一番,达到40亿美元左右,税前净利润达到10亿美元,而到1970年又几乎翻了一番,达到70亿美元,员工人数从360项目之前的120000人增加到269000人。
到1970年代时,IBM占据了全球大型机市场70%的份额,其中催生出很多现代化应用的初代模型,包括银行ATM交易系统、航空业在线票务服务,期间帮助NASA运行了阿波罗太空计划。在360推出25年后的1989 年,基于其架构及扩展设备的产品收入占据IBM总营收的一半以上,每台计算机价格超过10万美元。
50亿美元的孤注一掷最终为IBM带来了巨额回报。
4
划时代的杰作
IBM System/360的出现无疑是一个划时代杰作。它让大型机行业改头换面,极大推动了未来计算机行业的变革——即便他们一开始只是出于提升自身商业竞争力的目的。
它帮助IBM击退了市场上各大竞争对手,得以在20世纪80年代前一直稳居计算机行业的主导地位。这背后主要是因为System/360的技术创新推动了市场对计算的整体需求,消除了计算机技术的诸多谜团,使得更多工程师在该机器上运行软件。
值得一提的是,基于VLIW这种颠覆性的单一原创技术去制造新型计算机,System/360的成功更多是组合了当时的诸多新想法和新技术,最终产生了巨大的聚变效应。
他们以市场需求为导向,按近10年技术发展的预测去实现产品。比如,System/360必须提供的新功能:大内存、远程通信和处理、交互式模式、多用户环境。他们还提出通用性和计算机家族等革命性概念。为了解决这些问题,在技术实现上他们尽量采用最新技术,比如超大主存储器、固体逻辑技术(混合集成电路)、中断处理、优先级,用微编程实现复杂指令等。
这一切的核心在于OS/360操作系统,这个最终花费了5亿美元的系统成为计算机行业事实上的标准,更为后来的大型软件研发留下了宝贵经验。System/360的代码量从一百万行最终增长到了一千万行。
尤其兼容性思想是一个伟大的观念革新。它第一次实现了兼容多款机型,在一定程度上解决了用户在升级计算时遇到的重编程问题。这套新系统提升了新功能的价值,并使IBM能以相对较低的成本生产新机器。在它之后,他们很快就生产出与其兼容的IBM 370,运算速度最快的370/168机型可达到每秒250万次。
System/360还有其他一系列技术创新。软件工程的必读“圣经”《人月神话》第五章“画蛇添足”中提到了动态链接库、运行时快照和调试等开创性工作。此外,IBM将其数据格式由当时最流行的6位字节转变成了现在所用的8位字节,使System/360满足各种计算处理的需求。而它所推出的固态逻辑技术是集成电路的先驱,使得机器比当时的竞争产品更快、体积更小。
当然,System/360的优势后来也成为它的弱点,由于它采用同一种体系结构的计算机家族,所以一旦竞争对手发现其体系结构的缺陷,就可以打击IBM的全线产品。但这是另一个故事了。
Vincent Learson, Bob Evans, Frederick Brooks, Erich BIoch, Gene Amdahl
更重要的是,小沃森、利尔森的强大魄力和冒险精神使这一切变成可能,后来参与设计System/360的关键人物也获得了极高荣誉。
作为System/360和相关项目背后的主要驱动力,利尔森随后接班小沃森成为IBM总裁。凭借在此项目中的杰出贡献,负责兼容性目标和整个System/360事业的工作组组长伊万斯由于升任IBM技术副总裁,并且与工作组成员布鲁克斯被并称为“IBM/360之父”,1985年,他们还与架构经理艾里奇·布洛赫(Erich BIoch)一起获得了美国国家技术奖。
布鲁克斯提出许多现代计算机体系结构新概念,比如“计算机架构”一词,他还发现了软件开发的“布鲁克斯定律”,他曾提出程序中断系统理念,这启发了世界上首个交互式多道程序操作系统的设计,让用户在击键时就能看到屏幕显示,而计算机运行却不会产生混乱。1999年,他获得了图灵奖,以表彰其“对计算机体系结构、操作系统和软件工程作出了里程碑式的贡献”。
工作组成员阿姆达尔发明了计算机体系结构理论中的“阿姆达尔定律”,即并行计算的能力受限于串行指令。他在1969成为IBM Fellow,但在1970年被IBM否决掉开发巨型机计划后,他连续创办了阿姆达尔公司、三部曲公司、CDS等五家计算机公司。
布洛赫主要负责固态逻辑技术的研发,为System/360提供卓越的功率、速度和内存,所有这些都成为了计算的基础。他在IBM工作了32年,期间还开发了STRETCH超级计算机系统,曾被任命为IBM数据系统部门的副总裁。
System/360之后,再也没有出现将如此量级的投入押注到一款产品系列的案例。甚至,小沃森制定了一项政策:“永不宣布将超过25%以上的产能专门投入于其中的新技术。”
如今,它所带来的技术创新和对计算机产业的影响,至今还在发挥巨大作用。可以想象,如果没有IBM System/360,计算机的大众化将严重滞后,PC信息时代的繁荣也将无从谈起。
主要参考资料
1.《计算机简史》,马丁坎贝尔-凯利等著,蒋楠译
2.《小沃森自传》,小托马斯·沃森、彼得·彼得著,梁卿译
3.https://mp.weixin.qq.com/s/NsPn4S2z2M4LHQULdNLICg
4.https://www.ibm.com/ibm/history/ibm100/us/en/icons/system360/
5.https://www.theregister.com/2014/04/07/ibm_s_360_50_anniversary/
6.http://tipc002.informatik.uni-leipzig.de/cs/Literature/History/FiveMillGamble1.pdf
7.https://spectrum.ieee.org/tech-history/silicon-revolution/building-the-system360-mainframe-nearly-destroyed-ibm
8.https://cacm.acm.org/magazines/2019/2/234352-a-new-golden-age-for-computer-architecture/fulltext
9.https://www.nytimes.com/2016/11/30/technology/erich-bloch-who-helped-develop-ibm-mainframe-dies-at-91.html
往
期
回
顾
福利
小白入门机器学习的三个问题
资讯
Twitter禁止未经用户同意分享照片和视频
资讯
全球首个活体机器人,能生娃
技术
Python实现人脸监测制作摸鱼神器
分享
点收藏
点点赞
点在看
相关文章:

CentOS Linux内核升级全过程
首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。接下来,让我们一起开始精彩的Linux内核升级之旅吧!一、准备工作启动Linux系统,并用根用户登录,进入终端模式下。1、查看…

Windows程序设计------字体不等宽引出的问题及其细节知识
在写Windows程序设计的Typer程序时,我并不是在每一个使用HDC的地方都重新创建选中字体,而是在一开始选中之后,就没有再删除它,代码如图: 结果我的字体不是等宽字体! 起先我以为是没有设置WM_INPUTLANGCHANG…

看闯关东原来知道古代已经十六进制了
闯关东第四集中夏掌柜说黄县口诀什么意思 1625 2125 31875 425 53125 6375 74375 85 95625 1625 116875 1275 138125 14875 159375 161 这个问题实际上是过去商品流通中的一种算法。过去的衡器十六两为一斤,也就是十六进制。为了计算方便,先人便选用了这…

手机客户端和web端开发的异同
2019独角兽企业重金招聘Python工程师标准>>> 版本升级。用户角度上看,客户端升级必须让用户手动下载整个新的安装包覆盖安装,而web的升级无需用户做任何事情。开发角度上看,如果客户端有个小bug需要紧急修复,需要修复完…

AI 监视打工人,这个国家明确说:保护我方“摸鱼权”!
撰文 | 刘芳来源 | 学术头条近日,国美控股集团对员工“摸鱼” 的处罚引起了关于职场中隐私权的巨大争议。事实上,这一事件并非个例。如今人工智能(AI)算法在职场中的使用,已经涉及到包含隐私权在内的诸多问题。随着…
Hibernate复习之Hibernate基本介绍
众所周知。眼下流行的面向对象的对象关系映射的Java持久层框架有MyBatis和Hibernate。他们都是对象关系映射ORM。 解决的主要问题就是对象-关系的映射。域模型和关系模型都分别建立在概念模型的基础上。域模型是面向对象的,关系模型是面向关系的,普通情况…
Linux常用命令手册
核心: cat定位,sed时间搜索,grep关键字查询,tail行数,|管道结合 最前N行 这个主要看文件最开始是什么时候记录了什么 #head -1 XXX.log 最后N行 #cat XXX.log | tail -n 10 时间区间搜索 #sed -n /2010-05-20…

程序员敲诈老板,或面临 37 年监禁
作者 | 祝涛 出品 | CSDN(ID:CSDNnews)12月1日,网络设备制造商优比快(Ubiquiti)的前雇员尼古拉斯夏普(nicholas Sharp)被捕,他被控窃取数据,并试图…

使用modernizr.js检测浏览器对html5以及css3的支持情况
使用modernizr.js检测浏览器对html5和css3的支持情况 详情请看主页:modernizr主页 1. modernizr 是什么? modernize 是一个js库————一个用于检测当前浏览器对html5&css3 的支持情况,其中包括对 css3 的 font-face、border-radius、…

SharePoint运行状况分析器有关磁盘空间不足的警告
对于负责管理SharePoint内部部署安装的SharePoint管理员,SharePoint Health Analyzer是一款出色的工具。此功能不仅有助于解决服务器故障和服务失败的问题,还提供了有关如何解决问题的提示。总的来说,我觉得这个功能非常有帮助。但是…

百度PHP高级顾问惠新宸:PHP在百度的发展历程
惠新宸,百度PHP高级顾问,年二十有八,好追根究底,有不良嗜好, 幸性本善。乙酉年识互联网,丁亥年入雅虎,翌年入百度。虽性好安稳,然经变无数,唯常叹"人生,菠菜汤尔"。大家好…

Python 远程连接服务器用它就够了
作者 | 费弗里来源 | Python大数据分析❝本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes❞1 简介日常工作中经常需要通过SSH连接到多台远程服务器来完成各种任务,当需要操作的服务器众多,且要执行的任务涉…

如何在centos安装python-mysql
在python中使用mysql,需要安装mysql-python依赖包,可以通过pip来安装:pip install MySQL-python如果发生错误,需要先安装一个开发包:yum install python-devel如果还是报错,运行:yum install my…

DNS 到底怎么工作的? (How does dns work?)
其实这个问题每次看的时候都觉得很明白,但是很久之后就忘记了,所以这次准备记录下来。深入到这个过程的各个细节之中,以后多看看。 Step 1 请求缓存信息: 当你在开始访问一个 www.baidu.com 开始,第一件事情就是去访问…

#pragma pack(n) 的作用
在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结…

LoadRunner设置检查点的几种方法介绍
LoadRunner设置检查点的几种方法介绍 发布时间: 2011-5-03 11:53 作者: 一米阳光做测试 来源: 51Testing软件测试网采编 字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 3、将脚本切换回代码界面, 在光标闪烁的上行,添加如下的代码&…

Python 爬虫利器 Selenium 从入门到进阶
作者 | 俊欣来源 | 关于数据分析与可视化今天小编就来讲讲selenium,我们大致会讲这些内容selenium简介与安装页面元素的定位浏览器的控制鼠标的控制键盘的控制设置元素的等待获取cookies调用JavaScriptselenium进阶selenium的简介与安装selenium是最广泛使用的开源W…

获取下个月的今天
/* 获取下个月的今天如果 $date 2018-1-31 二月没有31号 则获取二月份的最后一天 返回值为2018-2-28如果 $date 2018-1-15 返回值为2018-2-15 -- psw-- */function getNextMonthDays($date){$firstday date(Y-m-01, strtotime($date));$lastday strtotime("$firstday …

C语言的sizeof和strlen
strlen是函数,而sizeof是算符。strlen需要进行一次函数调用,而对于sizeof而言,因为缓冲区已经用已知字符串进行了初始化,起长度是固定的,所以sizeof在编译时计算缓冲区的长度。因为sizeof()测试的是数组的长度。而strl…

机器人 Ameca「苏醒」瞬间逼真到令人恐惧,网友纷纷惊叹……
整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 近日,国内外网友都被一段机器人「苏醒」的视频惊讶到。 视频开始时,机器人似乎已经睡着,眼睛闭着,头部略微向下倾斜。随着肩膀的伸展,机器…

linux源码包卸载方式
linux源码包软件的安装与卸载3人收藏此文章,我要收藏 发表于1年前 , 已有593次阅读 共0个评论Linux软件安装与卸载(源码包形式):一般情况下linux程序的发布不能像windows那样,直接打包成一个setup.exe文件,然用户安装 …
在实践中我遇到stompjs, websocket和nginx的问题与总结
阅读原文:https://wdd.js.org/stomp-over... 1. AWS EC2 不支持WebSocket 直达解决方案 英文版 简单说一下思路:WebSocket底层基于TCP协议的,如果你的服务器基于HTTP协议暴露80端口,那WebSocket肯定无法连接。你只要将HTTP协议修改…

C语言memset函数详解(Linux下和windows下的差异)
memest原型 (please type "man memset" in your shell) void *memset(void *s, int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。 #include <stdio.h>#include <string.…

Oracle 工程师离职并回踩:MySQL 糟糕透顶,强烈推荐 PostgreSQL
整理 | 祝涛 出品 | CSDN(ID:CSDNnews)如果你即将离职,你会做什么?抨击自己付出了五年心血的技术——这是Oracle公司前首席软件工程师、MySQL优化器团队成员Steinar Gunderson的选择。这位工程师现已在Chrome团队…

ORA-01109:数据库未打开(解决)
SQL> startup mountORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它SQL> shutdown immediateORA-01109: 数据库未打开 已经卸载数据库。ORACLE 例程已经关闭。SQL> startup mountORACLE 例程已经启动。 Total System Global Area 612368384 bytesFixed Size 125…

[洛谷P1317]低洼地
题目大意:一组数,分别表示地平线的高度变化。高度值为整数,相邻高度用直线连接。找出并统计有多少个可能积水的低洼地?(首尾都为0) 题解:求出其中都多少个不严格下降子段和不严格上升子段所夹的…

Linux环境编程--多线程
本文作者: 姚继锋 (2001-08-11 09:05:00) 时隔多年 原文地址已经无从查。。。 居然是2001年就写了 今天看来对初学者还是很有参考意义 所以特转给大家 本人在原文基础上适当修改 1 引言 线程(thread)技术早在60年代就被提出,但真正应…

Python 到底该怎么学才好?你关心的答案来了
相对于Android、IOS等技术,Python有着更为广阔的应用领域,例如前后端、AI、数据分析、爬虫、自动化、游戏开发等几乎所有领域都有它的应用。但也正因为如此,很多新人在学完Python基础后,根本不知道该选择什么方向深造,…

9513 防空洞
时间限制:1000MS 内存限制:65535K提交次数:104 通过次数:24 题型: 编程题 语言: G;GCC Description 有一天,dragon123偷偷地拿锄头在学校里挖开了一个尘封已久的防空洞。他在这个防空洞里面找到许多贵重的东西:一些石头和一些液体。dragon123知道&…

学习Mybatis与mysql数据库的示例笔记
目录结构: pom.xml文件 1 <?xml version"1.0" encoding"UTF-8"?>2 <project xmlns"http://maven.apache.org/POM/4.0.0"3 xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"4 xsi:schem…