当前位置: 首页 > news >正文

网站设计有哪些语言版本wordpress自动水印代码

网站设计有哪些语言版本,wordpress自动水印代码,宁安网站建设,网站建设开票项目是什么意思摘要#xff1a;相信每个程序员都遇到过“不可能的bug”#xff0c;代码没有任何问题却出错了#xff01;问题肯定是出在操作系统上#xff0c;或者是工具#xff0c;甚至是因为计算机硬件的问题#xff1f;#xff01;#xff1f;当然#xff0c;魔兽之父也不例外相信每个程序员都遇到过“不可能的bug”代码没有任何问题却出错了问题肯定是出在操作系统上或者是工具甚至是因为计算机硬件的问题当然魔兽之父也不例外他在本文中分享了多个处理异常bug的经验。 今天要分享的故事关于一些我职业生涯中真正遇到的bug。 这个Bug是Microsoft的错还是…… Diablo发布后几个月StarCraft团队开始加班来保证游戏的按时完工。那时“距离游戏发布只剩两个月了”所以每天多加几个小时的班完全是正常的有时候周末也得加班有很多工作要完成因为Warcraft II的游戏引擎基本上得从系统层面返工。大家故意不按日程办事包括我自己所以最后游戏延期了超过一年。不清楚的可以看参考之前的文章。 最开始的时候我并不是StarCraft开发团队的一部分但在Diablo发布后StarCraft获得了更多的人力资源于是我加入了进来。但由于没给我安排固定的任务我只有自己“使用武力”来驱动项目进展。 我打算实现一些有意思的功能比如AI但AI主要还是Bob Fitch在做。其中一个功能是系统需要判定哪里是最适合聚集武装的地方AI部队会在那里集结并防守或者准备区域进攻。幸运的是已经有成熟的API供我调用了我可以直接使用路径寻找算法查询哪块地图区域是结合在一起的以及敌人会在哪里集结重兵、准备进攻以及加强易被突破区域的布兵情况。 我重新实现了某些组件包括之前Craft系列延续的“战争迷雾”系统。StarCraft需要拥有比Warcraft II更好的战争迷雾系统因为地图的分辨率更高了。所以我们打算实现视线计算位置更高的单位将会获得更好的使用同时也增加了游戏战术的复杂度如果你不知道对手在做什么想要赢就变得更加困难。同样躲在角落里的单位也将不会被外面的人看见。 新的战争迷雾系统是StarCraft项目中最令我感兴趣的地方我需要做一些快速学习来保证系统功能实现和快速运行。上一个程序员的成果让我很不开心运行起来非常之慢导致游戏几乎无法运行。我学习了纹理滤波算法和Gouraud描影最终写出了我职业生涯中最好的x386汇编程序——几乎是现代游戏开发必备的技术。和大家一样我也希望StarCraft最终能够开源这样我就能看到自己最喜欢的编码成果不过我记忆中的代码也许要更好 但我在StarCraft的开发中最大的贡献在于修补bug。因为大家都在透支着自己的极限来编写代码以至于整个开发过程都穿插着bug每向前两步都会倒退一步。大多数团队成员都在做功能开发所以我不得不花费大量时间来解决QAQuality Assurance质量保证团队捕捉到的问题。 高效修复bug的诀窍在于探索可靠地重现这个问题的方法。一旦你知道如何重现一个bug就很容易分析bug出现的原因通常离bug修复就不远了。不幸的是重现“will o’ the wispbug”这样偶尔才出现一次的bug需要几天甚至几周的努力。更糟的是因为很难甚至不能提前预估修复一个bug会花多长时间这又会在会议日程上花费更多时间。我说得最多的一句话是“嗯还在找”。通常我会从早晨开始办公然后整天都在做bug修复有时候一天能修复数百个有时候一个都解决不了。 有一天我正在检查一段无法运行的代码我们本希望它能按游戏单位类型选择行为“采伐单位”、“飞行单位”、“地面单位”等等和状态“活动的”、“伤残的”、“受攻击”、“繁忙的”、“闲置的”。因为时间太过久远我记不清具体的细节了有几行代码可能是这样的 if (UnitIsHarvester(unit))     return X; if (UnitIsFlying(unit)) {     if (UnitCannotAttack(unit))         return Z;     return Y; }  ...  if (! UnitIsHarvester(unit))     return Q; return R;    BUG永远不会执行到这行代码  在观察这个问题几个小时后我猜测可能是编译器bug引起的于是我又开始查看汇编代码。 对于非程序员来说编译器只是将程序员编写的代码转换成可以由CPU直接执行的机器语言的工具。 // Add two numbers in C, C#, C or Java  A  B  C  ; Add two numbers in 80386 assembly  mov     eax, [B]    ; move B into a register  add     eax, [C]    ; add C to that register  mov     [A], eax    ; save results into A   在查看了汇编代码后我确定是编译器导致了错误的结果因此向Microsoft发出了一个bug报告——也是我提交的第一个编译器bug报告。很快我就得到了回应回想起来还真是让人惊讶Microsoft的编译器在世界范围内是如此地流行我的bug报告竟然得到了回应而且非常之快 或许你能猜到——这不是一个bug虽然我看了很久的代码但是却还是忽略了一个小错误。我很疲惫——连续数周每天12小时以上的工作——所以没发现这是不可能工作的代码。一个单位不能既非“采伐者”又非“非采伐者”。Microsoft的测试人员礼貌地回复了我的失误但那时我却感到被羞辱了但幸好bug可以解决了。 顺便说一下压缩时间是一个失败的开发模式我在博客上很多篇文章中都提到过这里也一样疲惫的开发者很容易犯一些低级错误。合理地安排工作时间才能得到更高的开发效率所以回家休息去吧然后明天再以饱满的精神面来编写代码当我和两个朋友开始创办ArenaNet时“没有危机”正是我们开发的哲学基础原因之一在于我们没有在办公室置办足球桌和街机。工作-回家休息-再工作 这回bug真的出在Microsoft身上了 几年后在开发Guild War时我们发现了一个灾难性的错误会导致游戏服务器在启动时崩溃。不幸的是我们编程团队日常使用的“dev”development分支没有任何问题测试团队最后验证用的“stage”“staging”分支也没有问题。唯一出现问题的地方在于“live”分支也就是玩家使用的分支。我们把这个版本“推送”给了终端用户于是他们都玩不了游戏了WTF 数千名愤怒玩家要求快点修复这个问题。幸运的是我们可以把代码回滚到上一个版本而这花不了多长时间但仍然需要查清楚是哪里出了问题。最终我们发现是多个错误共同导致了这个问题这在编程中很常见。 Microsoft Visual Studio 6MSV6中的有一个bug而我们正是用的MSV6编译的游戏。对不是我们的问题自然我们的测试无法找出问题。Whoops。 在特定的情况下该编译器会在处理模板时生成错误的结果。模板是什么它们很有用但是会让你很头痛有胆量的话就看看这个。 C是一个很复杂的编程语言所以它的编译器有bug并不是什么奇怪的事情。实际上C比其它主流语言复杂得多你可以看看C和Ruby复杂度对比图。Ruby功能全面所以很复杂但如图所示C要复杂一倍所以在其它一样的情况下C的bug也会多一倍。 在研究这个编译器的bug时我们发现其实自己早就知道这个bug而且Microsoft dev团队已经在MSVC6 Service Pack 5SP5中修复了这个问题所有的程序员都已经升级到了SP5。悲剧的是我们忽略了构建服务器而它是集合代码、插图、游戏地图、等组件并最终组成游戏的地方。所以虽然游戏在每个程序员的计算机上能够正常运行却在构建服务器上出了巨大的问题因此也只有live分支有问题。 为什么只有live版本嗯理论上所有分支dev、stage、live同样有机会消除这样的bug但实际上还是有区别的。首先我们在live版本取消了很多编程和测试团队使用的调试功能这样可以节省时间和金钱但同样也会孕育出巨大的灾难甚至导致游戏崩溃。 我们想确保ArenaNet和NCsoft的员工在游戏中没有作弊的机会因为每个玩家都应该在一个公平的游戏平台上娱乐。很多MMO公司都曾有员工因使用“GM特权”而被开除的情况因此我们想通过删除该功能来解决这个问题。 另外就是我们清除了一些“sanity checking”代码它们本是用于验证游戏是否在正常运行。这类代码被程序员称为断言asserts or assertions用来保证游戏状态在计算之后是合适并且正确的。断言会造成性能上的损失每次例行检查都会花费时间如果代码中嵌入了过多的断言程序运行就会变得缓慢。我们在live版本中禁用了断言以降低游戏服务器的CPU利用率但无意间导致C编译器生成了错误的结果最终造成游戏崩溃。 这个bug修复起来很简单只需要升级下构建服务器就可以了但最终我们决定保持断言是开启状态即使在live版本中也是如此。为了保证不再出现这样的bug我们放弃了节省CPU利用率或者更准确地说未来需要的计算机数。 经验总结每个人包括程序员和构建服务器都应该使用同样的工具 也可能是你的计算机坏了 鉴于之前的bug误报我实在是不好意思再向Microsoft提交bug报告了开始怀疑是不是我或者其他组员的代码有问题。 在Guild WarsGW的开发期间我接收到并且检查了很多玩家返回的bug信息。GW的玩家可能会记得最好不记得当游戏崩溃时会提供向我们的“实验室”发送bug报告的信息供分析。收到这些信息后我们会筛选bug并并决定由谁来处理。这些bug的原因、程度都各不相同有的没有专人负责而是我们轮流负责处理。 我们经常会遇到挑战信仰的bug总是让人抓狂。bug的出现总是有原因的我们首先可以假设可能的原因并不涉及空间-时间统一性的重新定义。它看起来像是因为内存破坏或者线程竞争问题但已知的信息告诉我们这不大可能。 Mike O’BrienArenaNet的联合创始人之一也是一名骇客最终想到这可能是电脑硬件故障引起的而不是编程问题。更重要的是他还给出了测试这一假设的方法简直是一个杰出的科学家。 他写了一个模块“OsStress”可以分配出一块内存在那块内存中执行计算然后和已知答案做比较。他把这块“压力测试”代码添加到主要的游戏循环中这样每秒将执行30-50次这样的验证步骤。 在正常的计算机中这样的压力测试不会出问题但有大约1%运行GW的计算机会出问题1%听起来不是个很大的数字但当有100万玩家时意味着每天会有至少1万个崩溃bug这样编程团队将需要几周来研究这一天的bug 压力测试失败时GW会关闭游戏并打开一个“硬件问题”的网页以此提示用户哪些常见的原因会导致这样的错误 Memory failure: in the early days of the IBM PC, when hardware failures were more common, computers used to have “RAM parity bits” so that in the event a portion of the memory failed the computer hardware would be able to detect the problem and halt computation, but parity RAM fell out of favor in the early ’90s. Some computers use “Error Correcting Code” (ECC) memory, but because of the additional cost it is more commonly found on servers rather than desktop computers. Related articles: Google: Computer memory flakier than expected and doctoral student unravels ‘tin whisker’ mystery. Overclocking: while less common these days, many gamers used to buy lower clock rate — and hence less expensive — CPUs for their computers, and would then increase the clock frequency to improve performance. Overclocking a CPU from 1.8 GHz to 1.9 GHz might work for one particular chip but not another. I’ve overclocked computers myself without experiencing an increase in crash-rate, but some users ratchet up the clock frequency so high as to cause spectacular crashes as the signals bouncing around inside the CPU don’t show up at the right time or place. Inadequate power supply: many gamers purchase new computers every few years, but purchase new graphics cards more frequently. Graphics cards are an inexpensive system upgrade which generate remarkable improvements in game graphics quality. During the era when Guild Wars was released many of these newer graphics cards had substantially higher power needs than their predecessors, and in some cases a computer power supply was unable to provide enough power when the computer was “under load”, as happens when playing games. Overheating: Computers don’t much like to be hot and malfunction more frequently in those conditions, which is why computer datacenters are usually cooled to 68-72F (20-22C). Computer games try to maximize video frame-rate to create better visual fidelity; that increase in frame-rate can cause computer temperatures to spike beyond the tolerable range, causing game crashes. 在大学期间我的Mac上有个扩展硬盘经常会在春夏因为温度过高而出故障。因此我买了一个4英尺长的SCSI电缆足够从我的计算机连到冰箱我叫它Julio了并且全年将它存放在冰箱里后来就再也没出过问题 于是每当GW支持团队收到过热问题的反馈都会鼓励玩家去改善空气流动、增加散热风扇或者清理一下计算机中的灰尘这些做法通常都很奏效。 这个计算机压力测试不仅完成了它的使命还获得了丰厚的回报我们能够识别电脑产生虚假的bug报告并且忽视这些崩溃。一周内有数百万玩家在玩我们的游戏即使很低的故障率也会产生很多bug报告以至于超过编程团队的处理极限。通过这些减少bug反馈信息的措施编程团队能够更专注于开发玩家想要的新功能而不是去给bug分类。 当然还有更多bug 我认为现在还没有到计算机程序不会出现bug的阶段——用户期望的增长要比高级程序员的数量更快。Warcraft I大约有20万行代码包括内部工具而GW I的代码量已经超过了650万行也包括工具。尽管可以降低每行代码中bug出现的几率但代码行数的巨大增长仍然会导致问题数的剧增。但我们仍在努力。 最后我想分享一下在Blizzard时的同事——Bob Fitch的一句玩笑话他说道“所有代码都可以优化但所有程序都有bug因此所有程序都可以被优化为一行代码只不过无法运行。”这就是为什么我们总有bug。 原文链接Code of Honor
http://www.pierceye.com/news/781761/

相关文章:

  • 海外注册域名的网站给家乡做网站
  • 怎么做带数据库的网站重庆市建设工程信息网络
  • 做网站的越来越少了西宁网站建设多少钱
  • 环翠区网站建设做网站 用 显示器
  • 没学过计算机开始学做网站给别人做网站收多少钱
  • 网站建设的功能都需要有哪些方面大气一点的公司名字
  • 湘潭做网站价格问下磐石网络价格网站
  • 网站备案后可以更换域名吗2345网页游戏
  • 登录浏览器是建设银行移动门户网站广州专业做外贸网站
  • 思明区建设局网站微信 网页版
  • 淘宝客怎么做自己的网站搜索引擎营销案例分析题
  • 给女朋友做网站的素材友情链接是什么意思
  • 成都微信网站建设多少钱南平抖音搜索排名seo软件
  • 做外贸用哪些网站成都房地产开发商排名
  • 网站建设实施计划包括网页关键词优化
  • 建企业网站怎么做单页面网站源码
  • 儿童网站模板微信网站下载
  • 建设网站的市场背景搭建本地网站做色流
  • 湖南岳阳网站建设公司黄页顺企网宾馆在什么网站做推广效果好
  • 做外贸网站 怎么收钱网站自适应手机怎么
  • wordpress分只显示标题网站内容优化关键词布局
  • 校园云网站建设怎么做网站自动响应
  • 怎么做扫码进入网站北京seo计费
  • 网站备案 2016如何找网站
  • 网站开发客户挖掘做网站没签合同
  • 适合大学生做的兼职网站中国企业网信息查询系统
  • 淘宝网站的建设与运营设计思路做网站商铺模板
  • 网站优秀设计方案中国网站制作企业排行榜
  • 南昌建设局网站查询塔吊证怎么查福州seo网站建设
  • 机关内网站建设方案书给人做传销网站