来自IT世界的好奇变态-2

至今已有14年了, 每日WTF一直在收集来自IT世界的有趣,荒诞和/或悲伤的故事。 我翻译了一些我觉得很有趣的故事。 所有公司名称和名称均已更改。 第一部分在这里

第一个故事。 为了sp奶奶...


[ 原始 ]

克莱夫像许多自由职业者一样,将他的银行帐户中的内容与提供给他的每日汇率进行了比较,并决定在这种情况下, 任何工作都适合他。 一个空缺似乎几乎可以忍受:保险公司需要一个新的软件包,使其能够符合某些法律要求。 此外,管理层还需要有人来教给开发人员现代的工具和技术,例如代码版本控制。

克莱夫(Clive)出色地接受了采访,一个星期后开始工作。 信箱中有名叫布兰登的人来信。 上面写着:“我们必须见面。”

布兰登坐在他的办公室里,紧贴着90年代中期的人体工学椅子,仿佛与他合而为一。 他从监视器上抬起头,看着Clive。 “你为我工作。”

布兰登用由单音节组成的简短短语解释说,做出聘用决定的人都不会与克莱夫见面。 克莱夫只对他负责。

“好吧...所以,当我受雇时,他们说您需要配置Subversion。 我应该从这个开始吗?

“不。”

“我能找出原因吗?” 你还喜欢别的东西吗? 想讨论选项吗?”

“不。”

克莱夫等了。 布兰登并不急于表达他的想法。 他只是看着克莱夫。 继续观看和观看。

克莱夫慢慢回到他的立方体,开始研究代码库。 它位于网络共享上,版本控制为“ file.pl.old”,“ file.pl.old.old”。 事实证明,该代码是用Perl编写的,即使Perl标准也不可读。 他成长于“如果能够解析,它将开始”的文化,没有评论,也没有任何测试。 克莱夫(Clive)的唯一盟友是李(Lee),他也是另一位受聘的专家,他向布兰登(Brandon)报告,但是他在代码分析方面有两周的障碍。 当克莱夫卡在某个地方时,他从立方体墙后面望出去,问李。

就像从山上降下来的冰川一样,克莱夫(Clive)慢慢地通过了代码。 每周,他逐渐了解。 然后来自布兰登的一封信:“我们需要见面。”

他说:“您会干扰开发团队。”

“什么?”

“你和李太吵了。 这是办公室,而不是兴趣俱乐部。”

“这太疯狂了。 我只是问他有关工作的问题! “您是否要我们在会议室安排会议以问问题?”

“是的。”

布兰登沉默了一下,再次开始盯着克莱夫。 他看了看,然后看了一下……克莱夫明白了暗示,逃到了他的立方体。

要求令人困惑并且不断变化,这不足为奇。 唯一确切知道他们的用户是Carol,这也不足为奇。 克莱夫给她发来一封有疑问的信,并试图完成他的工作。 他等了几天才得到她的答复,然后他有新问题,并发了新信。

一周之内,他发送了大约十二封信,但未收到任何回复。 他发送了新邮件以查找新信息。 在这段时间里,甚至有更多的问题积累。 克莱夫(Clive)试图给她打电话,但遇到语音邮件。 他试图安排会议,但卡罗尔从未接受他的邀请。

然后来自布兰登的一封信:“我们需要见面。”

“卡罗尔说你在推她,”布兰登说。

“什么?”

“即使她回答了问题,您仍然给她写信。 她说您召集一次会议,但您没有来找他。 这必须停止。”

“这太疯狂了。 她从未回答,我可以显示我的收件箱并证明它。”

“卡罗尔不使用电子邮件,”布兰登解释说。 “实习生打印出她的电子邮件,然后她通过办公室的内部邮件答复。 她很忙。 您有一项技术任务。 跟随它,不再打扰她。”

“什么? “您是否希望我在不与知道所有要求的用户交谈的情况下实施该解决方案?”

布兰登看着他。 他继续观看并...

在接下来的几个月里,在李的帮助下,克莱夫取得了长足的进步。 他学会了处理荒谬的日期格式(日期被视为从1974年4月3日开始的天数,也被视为从上一个星期一开始的数,以及从下一个星期日开始的几周数)。 他们处理的事实是,没有人应该能够将Firefox更新到高于3的版本,并且无法进行超时工作,因为所有服务器均在下午6点断开连接。 卡罗尔没有保持联系,布兰登只是看着他们,其余的工作人员都像麻风病人一样对待他们。

在完成为期六个月的合同前几周,克莱夫(Clive)研究了公司网络驱动器的内容,以查找带有示例数据的电子表格。 他找到一张桌子,上面有聘用他的招聘公司的名字,并希望它对您有所帮助。 在某种程度上,确实如此。

该电子表格是一份报告,报告了招聘公司为克莱夫和李获得的收入。 这些钱是如此的无耻,以至于它们甚至会使二手车经销商脸红。 该文档包括变更跟踪和协作编辑,因此Clive可以阅读不同用户的评论。

从高层管理人员的角度出发,本着“无论您要花多少钱”的精神发表评论。 会计师警告说:“如果我们坚持下去,到年底我们将没有剩余的保费钱!”

布兰登留下了自己的注释:“我们的业务太具体了。 他们将无法应付。 浪费金钱。 他们做不到 。”

一切都准备就绪。 布兰登没有预料到,但作出了承诺 。 他将实现这一目标-在接下来的几周内,克莱夫和李将无法完成最初承诺的任务。

不久,他收到了招聘人员的来信。 “这家公司仍然需要额外的人员。 您想将合同再延长六个月吗?”

克莱夫(Clive)在布兰登(Brandon)的教导下,很快回答道:

第二个故事。 放弃一切不可能的事情...


[ 原始 ]

放弃一切不可能的事情...
...剩下的就是XML,无论它多么令人难以置信。


威廉·霍加斯(William Hogarth),荒诞的视角

开发人员有很多弱点,其中之一是:他们不喜欢说无法做某些事情。 这就是为什么当Glenn M (TelCo)的客户询问她的任务是否真的不可能,而不是道歉并果断地摇头时,他回答:“嗯, 理论上 ……”

结果,格伦写道:

 <value> <mult> <op> <mult> <op> <add> <op> <div> <op> <bitwise_and> <op> <baseNToInt base="16"> <regex> <op>(?:0x)?([0-9a-fA-F][0-9a-fA-F])\s*([0-9a-fA-F][0-9a-fA-F])\s*([0-9a-fA-F][0-9a-fA-F])\s*([0-9a-fA-F][0-9a-fA-F])</op> <op><getRowOid>.1.3.6.1.4.1.2011.2.217.1.4.1.1.6</getRowOid></op> <op>%4$s%3$s%2$s%1$s</op> </regex> </baseNToInt> </op> <op>8388607</op> </bitwise_and> </op> <op>8388608</op> </div> </op> <op>1</op> </add> </op> <op> <left_shift> <op>1</op> <op> <sub> <op> <bitwise_and> <op> <right_shift> <op> <baseNToInt base="16"> <regex> <op>(?:0x)?([0-9a-fA-F][0-9a-fA-F])\s*([0-9a-fA-F][0-9a-fA-F])\s*([0-9a-fA-F][0-9a-fA-F])\s*([0-9a-fA-F][0-9a-fA-F])</op> <op><getRowOid>.1.3.6.1.4.1.2011.2.217.1.4.1.1.6</getRowOid></op> <op>%4$s%3$s%2$s%1$s</op> </regex> </baseNToInt> </op> <op>23</op> </right_shift> </op> <op>255</op> </bitwise_and> </op> <op>127</op> </sub> </op> </left_shift> </op> </mult> </op> <op> <if> <op> <eq> <op> <bitwise_and> <op> <right_shift> <op> <baseNToInt base="16"> <regex> <op>(?:0x)?([0-9a-fA-F][0-9a-fA-F])\s*([0-9a-fA-F][0-9a-fA-F])\s*([0-9a-fA-F][0-9a-fA-F])\s*([0-9a-fA-F][0-9a-fA-F])</op> <op><getRowOid>.1.3.6.1.4.1.2011.2.217.1.4.1.1.6</getRowOid></op> <op>%4$s%3$s%2$s%1$s</op> </regex> </baseNToInt> </op> <op>31</op> </right_shift> </op> <op>1</op> </bitwise_and> </op> <op>1</op> </eq> </op> <op>-1</op> <op>1</op> </if> </op> </mult> </value> 

这是Glenn支持的系统监视应用程序的XML DDF,数据定义文件。 您会看到,如果系统具有定义数据点及其显示方式的DDF文件,则该系统可以从任何支持Modbus / TCP或SNMP协议的设备读取数据。 DDF架构包含上面显示的算术,布尔,常规和条件运算符,这对于系统知道如何清除数据是必不可少的。

XML逻辑? 是的,这本身就是WTF。 但是上面的代码才是真正的 WTF。 该公司监视了一个显示温度值的设备(这很容易解决),但它以八字符字符串的形式表示它们,该字符串以IEEE-754格式指示32位浮点数的十六进制值。 格伦必须立即意识到不可能完成的任务是将这种疯狂的价值转化为数字形式。 在DDF中,尽管具有全部表达能力,但没有类型转换运算符。

因此,Glenn编写了上面显示的DDF,它执行以下操作:

  • 由于字节顺序已反转,请使用<regex>将其返回到可以使用的顺序
  • 使用<baseNtoInt>octetString转换为uint_32
  • 使用<bitwise_and><right_shift>分隔符号位,指数和尾数
  • 将带符号的位转换为+/– 1
  • 我们消除指数偏移,然后通过该值执行<left_shift> 1
  • 将尾数除以2 23
  • 将最后三个元素相乘即可得出最终结果。 由于<mult>和其他运算符仅接受2个操作数,因此操作必须嵌套

下次,Glenn决定采用相同的策略,因为他最近听说TelCo会对设备进行了修改,以便以整数形式显示温度。

第三个故事。 A队(nti)


[ 原始 ]

在1980年代,拍摄了一部名为Team A的电视连​​续剧。 他内心有一个潜行,可以欺骗任何人。 为了得到他需要的东西,他做出了真实的承诺(例如营销?),团队中有一个很酷的人可以恐吓任何人以实现他的目标。 他知道如何实现目标,但内心深处他是一个好人。 团队有一个领导者,他总是可以提出一个计划并保存情况。 然后有一个稍微发疯(但效果很好)的人,您可以在战斗中始终依靠它。 助手有时会出现在团队中,从事干预和情报工作。 这群人工作得像个上油的齿轮。 他们不能失败! 他们是一个团队!


“ A”团队从未写过有关项目管理方法的文档。 毫不奇怪,他们都是通缉犯。

Alex在一个新项目中找到一份工作,以替换过时且不受支持的系统。 自然地,有人说该公司“正在努力做正确的一切!” 该项目已获得全部资金。 该团队将拥有进行工作所需的必要设备和人员。 六个领导层以及所有用户均得到全面支持。 亚历克斯很乐观。

公司要做的第一件事是花了几个月的时间来协调所有无数层的领导层,最终用户,支持人员,支持项目的退伍军人(以便他们可以解释使旧系统变得更糟的问题)和新系统的三位架构师。 以上所有内容都对新架构进行了广泛的文档记录,批准和签名。 甚至由独立的第三方监管审计机构进行了严格的审查,以确保监管机构对采取正确的方法充满信心。

在长达八页的文档中,详细描述了代码开发的建议(例如:代码格式选项,命名约定,单元测试,代码覆盖率以及对团队重要的其他类似方面)。 该文档已经过审阅,所有从事此项目的人员都应遵循该文档。

该项目的开始是好的。

第一个任务是为团队雇用开发人员。 为此,该公司一直在(很远)寻找离岸专家,以寻找最便宜的人才。 毕竟,每个人都可以接受培训,对吗? 一个由11名开发人员组成的团队拥有13年的经验,并雇用了具有5年经验的主管来管理他们。

下一个重要的决定是选择要使用的数据库。 公司已积极使用了三台。 由于所有数据库都存储在集中式服务器上,因此其中一个被立即排除在外:数据库服务器的设备功能过于强大,无法在合理的时间内处理预期的负载。 在其余的两个小组中,其中一个小组成员积极使用了一个。 他们知道它的语法,奇怪之处和局限性。 第三个设置不正确,因此因不可靠而享有声誉。 但是,她也是公司的标准。 尽管有团队的反对,但还是选择了三分之一。

项目管理人员决定可以在以后招聘质量检查人员。

最后,是时候实现一个详细的结构了。 海上团队的负责人决定,如果根据要求即时创建设计,则可以节省很多时间。 当然,建筑师对此表示反对,但是项目经理同意了。

建筑师已经开始构建控制器引擎和该项目的其他基本原理。 初级团队本应从许多远程系统创建一个队列,以进行数据输入,组合,过滤和预处理,但他们决定要比体系结构文档中写的更好,并开始开发自己的执行操作的方法。 不用对架构师或管理层说这话。

现在是时候检查第一个Sprint了,在检查代码期间,发现了许多各种各样的“红色标志”。 Junior Lead表示,建筑文档只是为了满足开发人员的意愿而忽略的建议。 自然,这引起了类似“您真的在...吗?”的反应。 以及领导链上的一堆信件。 但是项目经理和高层领导对此似乎并不感兴趣:他们说初级人员不应该这样做,但是他们信任他们。

工作继续进行。 架构师继续指出与要求不兼容的缺陷和实现缺陷。 所有报价都被忽略了,因为离岸团队的负责人说:“ Google正在营造创新和创造力的氛围; 我们也需要这样做!” 他被提醒,在大多数情况下,谷歌是“智囊团”,领导者在一个受到严格管制的行业中开展了一个严格标准化的项目。 经过40多个管理人员认可的该体系结构不是一种选择或建议,而是一项要求。 这不是一个鼓励创造力的幼儿园-您需要遵守批准的计划! 我们不是在谈论如何正确地编写子过程或封装对象,而是在错误的地方和错误的地方使用了线程处理,并且数据库访问和进程间通信将不可扩展。 您不需要创建多个进程,而只需使用线程即可。 不要仅仅因为文件是在学校做的,就不要将文件用作信号灯。 而且清单仍然很长。

但是这些都没有被注意到。 6月的开发人员抱怨说,在创建体系结构时,他们没有考虑到他们的意见,因此他们将继续忽略它(并感谢他们的领导)。 项目经理继续说,他知道这些问题,但是对它们什么也没做。 问题在整个链条中报告,但没有人做任何事情。 毕竟,团队中的每个人都有平等的投票权。

在现实世界中,如果学生认为老师错了,那么他们就不会改变他的成绩。 实习生会在外科医生向他展示的地方切开,而不是相反。 将军没有与军衔讨论战略。 如果您加入工会,并且作为新手,需要的权力与工会领袖相同,那么您将坐在吉米·霍夫 Jimmy Hoff)旁边(美国工会领袖在神秘的环境中突然失踪) 。 经验带有感叹号。 缺乏经验与审讯者说话。

但不在这个“团队”中。

大三学生继续做他们认为最好的事情,而忽略了建筑师的所有要求。 他们的大多数代码都被编写和复制过几次,因为琼斯无法在第一时间考虑到所有情况。 更有经验的开发人员会知道该依靠什么。 8个月后,该项目遭受了如此严重的损坏,以至于根本不可能达到最复杂的要求,并且在从头开始的开发项目中,有必要回滚一个月前。

大约在这个时候,管理层屈服于要求,并要求几个商业用户编写商业级别的测试(例如,可以将电子表格提交给JBehave进行JUnit测试)。 开发人员在电子表格中提供了代码和一些简单的示例。 架构师表示,他们需要聘用质量检查人员,因为用户很少知道如何处理临界情况,准确性问题等。 但是钱不能花。 经过六个月的运营,商业用户表示整个应用程序(即整个技术任务)的所有测试均已准备就绪。 仅仅看一下就可以理解,他们没有考虑临界情况,空洞的例子,准确性问题以及通常需要测试的大多数其他方面。 实际上,他们将理论上(从他们的角度来看)可能存在的所有记录都放在一个巨大的通过/失败测试中。 当然,当某些事情发生变化而不可避免地发生故障时,就无法找出发生的原因。

最终,事情变得如此遥远,以至于架构师使用设置代码(由离岸团队编写)和主机(由架构师创建)在应用程序的各个部分之间搭建了物理墙。 主机开始研磨数据后,系统中的每个变量都立即重置为数据库中的状态表,以便在不可避免的问题下显示输入数据,并可以向海上开发人员发送更正请求。 至少以这种方式,他们可以将主机与垃圾隔离。

该部通过使用廉价劳动力,缺乏质量检查部门以及使用“政治上健全的”数据库节省了大量资金。 当然,离岸团队编写的所有配置代码都很糟糕。 其中大多数很难学习,维护,调试和改进。

该产品尚未发布,用户已经抱怨诊断和修复问题的时间过长(这是重写旧项目的主要原因之一)。 如果重写不能解决重写的主要任务,那么可能出了点问题...

第四个故事。 通过空指针


[ 原始 ]

Maxine无法在带有NoScript附加组件的浏览器中显示网站。 这不足为奇-某些浏览器可能无法与NoScript一起正常使用,但是令人惊讶的是该浏览器引发了Java异常。 启用JavaScript后,错误页面消失了,但是怎么回事? 缺少JavaScript会导致Java异常!

她打开页面代码,发现服务器正在使用“ innerCHK”参数。 可能应该在URL查询字符串中传递的某种会话或安全令牌。 如果不是,则服务器返回一个错误页面,显示java.lang.NullPointerException。 幸运的是,前端开发人员提出了以下出色的JavaScript来解决该问题:

  //错误检查
如果(document.body.innerHTML.indexOf('java.lang'+'.NullPointerException')!= -1){   
   如果(document.location.href.indexOf('innerCHK =')== -1){    
         document.location.href = document.location.href +“&innerCHK =” + Math.random()* 10000;
    }
 }
 //结束检查 

但这仅仅是冰山一角。 该页面上装满了反图案,重新设计的车轮,备用轮胎和轮胎漏气。 所有这些都放在磁带上 。 为了感受一些奇怪的字符串转换的样式以及开发人员最喜欢的反模式-关闭脚本只是为了在下一行中打开一个新脚本,让我们看一下如何导入Dojo。 请注意,Dojo cookie已导入。

  <script type =“文本/ javascript”>
    如果(typeof dojo ==“ undefined”){        
         document.writeln('<scr'+'ipt src =“'+'/wps/themes/./dojo/portal_dojo/dojo/dojo.js'+'”> </ scr'+'ipt>');
     }
    如果(typeof dijit ==“ undefined”){      
         document.writeln('<scr'+'ipt src =“'+'/wps/themes/./dojo/portal_dojo/dijit/dijit.js'+'”> </ scr'+'ipt>');
     }      
  </ script>     
  <script type =“文本/ javascript”>     
  dojo.require(“ dijit.form.Button”);
  dojo.require(“ dojo.cookie”);
  //dojo.require("dijit.form.DropDownButton“);
  dojo.require(“ dijit.Dialog”);
  dojo.require(“ dijit.form.TextBox”);
  dojo.require(“ dijit.form.CheckBox”);
  dojo.require(“ dijit.form.ComboBox”);
  </ script>

有些(如果不是全部)CSS链接是通过这种方式处理的。 我在源代码中发现至少三个(相同)事件。 重复导入Dojo.cookie。

  <脚本名称=“ DojoEnable_script”语言=“ JavaScript”>如果(typeof dojo ==“ undefined”){
     dojo.require(“ dojo.cookie”);
     dojo.require(“ dojo.parser”);
     djConfig = {parseOnLoad:false,isDebug:false};
     document.write(“ <script src ='http://www.****************.com:80 / ps / PA_WPF / factory / dojo / dojo / dojo.js '> </“ +”脚本>“);
     document.write(“ <link rel ='stylesheet'type ='text / css'href ='http://www.****************.com:80 / ps /PA_WPF/factory/dojo/dojo/resources/dojo.css'/>“);
     document.write('<link rel =“ stylesheet” type =“ text / css” href =“ http://www.****************.com:80 / ps /PA_WPF/factory/dojo/dijit/themes/tundra/tundra.css“ />”);
     document.write('<link rel =“ stylesheet” type =“ text / css” href =“ http://www.****************.com:80 / ps /PA_WPF/factory/dojo/dijit/themes/tundra/tundra_rtl.css“ />”);
     dojo.addOnLoad(function(){if(!document.body.className)document.body.className ='tundra'});
 }


曾经有人说过,如果您想使用正则表达式解决问题,那么您将遇到两个问题。 我认为他说“两个”时低估了这种情况。

  var locale ='en'.replace(/ _ /,'-')。replace(/ iw /,'he')。toLowerCase();

记住,孩子们总是使用经过深思熟虑的名字作为常量! 魔术数字不好。 除了2008年,他一切都很好。

 如果(typeof(MONTHS_IN_YEAR)=='未定义')
 {
     MONTHS_IN_YEAR = 12;
 }

如果(typeof(isDisableDate)=='未定义'){
     var isDisableDate =函数(日期,年,月,iday)
     {
        如果(date.getFullYear()== 2008)
         {
            返回true;
         }
        返回false;
     }
 };

如果没有良好实施的DateTime库,则没有良好实施的应用程序将是不完整的。 对此必须有某种科学规律。

  var month = new Array(12);
 month [0] =“ 1”;
 month [1] =“ 2”;
 month [2] =“ 3”;
 month [3] =“ 4”;
 month [4] =“ 5”;
 month [5] =“ 6”;
 month [6] =“ 7”;
 month [7] =“ 8”;
 month [8] =“ 9”;
 month [9] =“ 10”;
 month [10] =“ 11”;
 month [11] =“ 12”; 

如果(typeof(MONVALUE)=='未定义')
 {
     MONVALUE =新数组
     (“ Jan”,
      “二月”,
      “ Mar”,
      “四月”,
      “五月”,
      “俊”
      “七月”,
      “八月”,
      “ 9月”,
      “十月”,
      “十一月”,
      “ Dec”);
 }

 //函数将日期从str转换为Num
函数Month2Num(月)
 {
     if(month ==“ JAN”)返回“ 01”; if(month ==“ FEB”)返回“ 02”; if(month ==“ MAR”)返回“ 03”; if(month ==“ APR” )返回“ 04”;如果(month ==“ MAY”)返回“ 05”;
     if(month ==“ JUN”)返回“ 06”; if(month ==“ JUL”)返回“ 07”; if(month ==“ AUG”)返回“ 08”; if(month ==“ SEP” )返回“ 09”;如果(month ==“ OCT”)返回“ 10”;
     if(month ==“ NOV”)返回“ 11”; if(month ==“ DECV”)返回“ 12”;
 }

该代码包含许多(通常是重复的)CSS样式,例如,这不是非常蓝色的样式。

  div.wpfThemeBlueBackgroundPanelTable  
 { 
    背景:#F6F9FC; 
    填充:10px; 
 } 
 / * ----蓝色面板---- * / 
 table.wpfThemeBlueBackgroundPanelTable  
 { 
    背景:#F6F9FC; 
    填充:10px; 
 } 

接下来是两个相同的数组,其中仅使用一个。

  var arr_location_001 = new Array();
 var arr_location_002 = new Array();

 arr_location_001 ['AU'] = {值:'AU',标题:'australia',文本:'Australia'};
 arr_location_002 ['0'] = {值:'AU',标题:'australia',文本:'Australia'};

 arr_location_001 ['CA'] = {值:'CA',标题:'canada',文本:'Canada'};
 arr_location_002 ['1'] = {值:'CA',标题:'canada',文本:'Canada'};

 arr_location_001 ['CN'] = {值:'CN',标题:'china',文本:'China'};
 arr_location_002 ['2'] = {值:'CN',标题:'china',文本:'China'};

 arr_location_001 ['FR'] = {值:'FR',标题:'france',文本:'France'};
 arr_location_002 ['3'] = {值:“ FR”,标题:“法兰西”,文本:“法国”};

 arr_location_001 ['HK'] = {值:'HK',标题:'hong_kong',文本:'Hong Kong'};
 arr_location_002 ['4'] = {value:'HK',标题:'hong_kong',文本:'Hong Kong'};

 / *相似代码的多行片段* /

这是另一个漂亮的小脚本,设法避免了很多,包括其自己的脚本标签! 如果开发人员将其写在紧身衣上,穿着紧身短裙,登上装满蝎子的棺材,并悬挂在哈德逊上空,他将获得积分。 (实际上,这可能是大多数代码的最合逻辑的解释。)
  <SPAN name =“ onloadScript”> <input type =“ hidden”>函数onSelectInfo(日历,日期,elem_date){ 
     elem_date = document.getElementById(&quot; Day_NArr&quot;);       
     elem_mon_year = document.getElementById(&quot; Month_NArr&quot;); 
     hidden_​​elem = document.getElementById(“ temp_date_NArr”); 
     doOnSelect(日历,日期,elem_date,elem_mon_year,hidden_​​elem); 
 } 

 Calendar.setup( 
     { 
         inputField:&quot; temp_date_NArr&quot ;, //输入字段的ID 
         ifFormat:&quot;%b,%e,%Y&quot ;, 
         onSelect:onSelectInfo, 
        范围:[currentYear,nextYear], 
         dateStatusFunc:dateStatusHandler, 
        按钮:&quot; cal_dep&quot;  //按钮的ID 

     } 
 ); 

 var _InfoVerAccurateFunc =克隆(accurateDate); 
 initializeDate(新数组('Month_NArr','Day_NArr'),_InfoVerAccurateFunc);“>
 <script type =“文本/ javascript”>

还记得上面导入的所有dojo.cookie吗? 有人添加了一个库函数来读取cookie。不过,其他人认为有必要从Internet 编写一个复制粘贴函数Get_Cookie,但不是一次,而是四次!

 函数Get_Cookie(check_name){
    //首先,我们将该Cookie分成名称/值对
    //注意:document.cookie仅返回name = value,而不返回其他组件
    var a_all_cookies = document.cookie.split(';');
    var a_temp_cookie ='';
    var cookie_name ='';
    var cookie_value ='';
    var b_cookie_found = false;

    对于(i = 0;我<a_all_cookies.length;我++){
        //现在,我们将每个名称=值对分开
        a_temp_cookie = a_all_cookies [i] .split('=');


        //修剪左右空格
        cookie_name = a_temp_cookie [0] .replace(/ ^ \ s + | \ s + $ / g,'');

        //如果提取的名称与传递的check_name匹配
        如果(cookie_name == check_name){
            b_cookie_found = true;
            //我们需要处理cookie没有值但存在的情况(没有=符号,即):
            如果(a_temp_cookie.length> 1){
                cookie_value = unescape(a_temp_cookie [1] .replace(/ ^ \ s + | \ s + $ / g,``)));
             }
            //注意,如果Cookie已初始化但没有值,则返回null
            返回cookie_value;
            打破
         }
        a_temp_cookie = null;
        cookie_name ='';
     }
    如果(!b_cookie_found){
        返回null;
     }
 }

我认为,该团队使用的软件开发方法是一个新创建的系统,称为“杜比CTRL-C和CTRL-V键!!!!!! 11 !!!! 11!11”。我相信在不久的将来它将取代敏捷。

第五个故事。人类机器人


[ 原文 ]

在SuperbServices,Inc成立期间,她的生意蒸蒸日上。这是一种祝福和诅咒。与任何一家初创公司一样,工作多于动手。销售部门不能放弃他们的成功,因此技术人员必须适应。

SuperbServices,Inc.的首席执行官为罗兰(Roland)承担了一项艰巨的任务,它可以挽救该公司,或者至少可以挽救员工的心理健康。首席执行官说:“我们需要使所有处理过程自动化,以便我们专注于提供服务。” “与我们在一起最有价值的事情是我们的服务,而其他一切都不必要地大惊小怪。您需要使其自动化,这就是您要做的。您将与人类机器人合作以使一切自动化:操作确认,购买,资金交易,客户电子邮件-仅此而已!”

“有……人类机器人?”

罗兰患有新的恐惧症。即使按照行业标准,该公司的服务器部门也异常古怪。只有少数人看到了他的员工,只有奇怪的谣言传到罗兰。

当Roland敲开服务器机房的门时,他头顶的监控摄像头复活了,机器人的冷漠声音问他:“您在寻找什么?”

“嗯,嗨……我是项目经理Roland。看来我们这些人,或者您在那里谁应该使任务自动化?”

“你向我们提供什么?”不祥的金属声音回答。

“嗯,……机器人喜欢甜甜圈吗?”我有我这就是全部。”

“通过”。咔嗒声打开门上的电子锁。罗兰把门拉向自己,冰冷的空气从后面吹了出来。数千盏灯和架子在里面闪烁,附近是一张小桌子。桌子上方闪烁着一盏灯。机枪从阴影中说道:“在这里提供。”

罗兰(Roland)将甜甜圈盒放在桌上,然后慢慢走开。一声“谢谢!”从他身后传来。罗兰跳了起来。那个有声音调制器的矮个子男人咯咯笑着,抓住了一个甜甜圈。

“嗨,罗兰,我是罗伊,”他一边说着调制器,一边说道。 “我们的访客不多,所以我们想嘲笑他们。好吧,您需要自动化一些东西吗?”

罗兰(Roland)对罗伊(Roy)的普通表现感到惊讶,而不是他真的是人类。 “嗯,是的,CEO表示您经常使用机器人工作,并且我们可以使用它们来使我们能够做到的一切自动化。” Roland概述了要求和规格。

罗伊叹了口气。 “很遗憾让您失望,但无论性别如何,我们实际上与机器人无关。他坚持认为Ruby是机器人的名字,尽管它只是一种编程语言。但是我们可以自动化大多数这些过程。给我们两个星期,我们可以食用尽可能多的甜甜圈和能量饮料,我们可以应付。”

在接下来的两个星期中,Roland带来了所要求的产品,并收到了有关功能进度和演示的交换信息。罗伊(Roy)和其他人类机器人编写了代码,很快,高层管理人员所做的大量书面工作转移到了地下室的服务器上。罗兰(Roland)解释说,大部分工作是由“人类机器人”完成的,但首席执行官对此表示赞赏。

“罗兰,完成了杰作,现在这些机器拉动了推动我们业务发展的杠杆,”总干事在他的背上拍了拍他。 “您的奖励将是一个新项目-另一个优先级最高的项目。我们的财务部门无法应付交易量。我与CFO进行了交谈,她希望您和机器人人们能够自动化我们购买的新产品-MoneyWorx。别让我失望!”

罗兰回到服务器室。如果以前的自动化项目是如此简单,那么一切都会一样,对吗?他向罗伊展示了要求。

在监视器的照耀下,罗伊(Roy)的皮肤变得更加苍白。 “这很糟糕,非常糟糕!危险!”罗伊哭了。他惊恐地挥了挥手。 “这不是MoneyWorx,而是MoneyDoesntWorx。即使服务正在运行,它们也需要RSA-SecurID令牌。必须有人手动输入代码。”

“手动?”也就是说,要使系统正常工作,必须有人在网上吗?”

“是的。我们使用三个SecurID令牌,因此通常在MoneyWorx要求输入新代码时,应该有3个人在网上。”

“所以这行不通。如果交易需要人们夜间打电话,首席执行官将大怒。他已经签署了一项协议-我们必须确保该系统在不致电人员的情况下正常工作。”

罗伊(Roy)打开精力充沛的人,颤抖了。 “给我一个周末,我会考虑的。而我将需要更多,”他摇了摇瓶子。 “还有这个。”他指着一盒甜甜圈。

罗兰(Roland)在周末出现并放下了他的礼物。罗伊接受了他们,但什么也没说。人类机器人忙于聊天。星期一到来时,罗兰带着新的甜甜圈和能量饮料回来了。 “尤里卡!”罗兰进场时罗伊大叫。 “让我告诉你我的杰作!”

“杰作”是放在一侧的空甜甜圈盒。 RSA-SecurID令牌已粘在盒子上。整个系统安装在便宜的网络摄像头前。 “当MoneyJerks需要一个新的两因素令牌时,某人可以远程访问该机器,检查令牌并输入正确的代码。”

“您不认为这个盒子需要密码保护吗?” Roland建议。

“您认为用户会记得如何登录吗?”罗伊反对。

这可能是Roland听说过的最愚蠢的想法,但他在楼上进行了报道,并在CEO的办公室展示了解决方案的演示。他用摄像头从汽车上断开后,他畏缩着等待发脾气。

“太棒了!他们将机器人的目光投向了这些狗屎,现在公司中没有人需要告诉MoneyWorx该怎么做!干得好,罗兰。向机械人表示祝贺。他们的机器人只是一个奇迹。”

罗兰很高兴这项工作已经完成,但无法摆脱他犯了一个严重错误的感觉。该公司的财务安全掌握在廉价的网络摄像头之内,除了缺乏公共IP地址外,没有任何保护。

图片

当灾难最终爆发时,它并​​没有采取欺诈性交易的形式。一个甜甜圈盒掉在了周三晚上。罗兰不得不打电话给罗伊,罗伊开车去办公室,把盒子放回原处。在分析了故障原因之后,Roy用胶带将盒子装在服务器机架上,从而确保了正常的正常运行时间。

Source: https://habr.com/ru/post/zh-CN437376/


All Articles