Folklor ta' programmaturi u inġiniera (parti 1)

Folklor ta' programmaturi u inġiniera (parti 1)

Din hija għażla ta 'stejjer mill-Internet dwar kif bugs kultant ikollhom manifestazzjonijiet kompletament inkredibbli. Forsi għandek xi tgħid ukoll.

Allerġija tal-karozzi għall-ġelat tal-vanilla

Storja għall-inġiniera li jifhmu li l-ovvju mhux dejjem huwa r-risposta, u li l-fatti kemm jistgħu jidhru sħaħ, xorta huma l-fatti. Il-Pontiac Division of General Motors Corporation irċeviet ilment:

Din hija t-tieni darba li qed niktbilkom, u ma naħtix li ma weġibx, għax tinstema’ miġnun. Il-familja tagħna għandha tradizzjoni li tiekol ġelat kull lejl wara l-pranzu. It-tipi ta 'ġelat jinbidlu kull darba, u wara l-pranzu, il-familja kollha tagħżel liema ġelat tixtri, u wara mmur il-maħżen. Dan l-aħħar xtrajt Pontiac ġdid u minn dakinhar il-vjaġġi tiegħi biex nikseb il-ġelat saru problema. Tara, kull darba li nixtri ġelat tal-vanilla u niġi lura mill-maħżen, il-karozza ma tibda. Jekk inġib xi ġelat ieħor, il-karozza tibda mingħajr ebda problema. Irrid nistaqsi mistoqsija serja, ma jimpurtax kemm tinstema 'stupid: "X'inhu dwar il-Pontiac li jagħmilha ma tibda meta nġib ġelat tal-vanilla, iżda jibda faċilment meta nġib togħma oħra ta' ġelat?" "

Kif tistgħu timmaġinaw, il-president tad-diviżjoni kien xettiku dwar l-ittra. Madankollu, fil-każ, bgħatt inġinier biex jiċċekkja. Kien sorpriż li ltaqaʼ minn raġel għani u edukat li jgħix f’żona sabiħa. Ftehmu li jiltaqgħu immedjatament wara l-ikel biex it-tnejn li huma jkunu jistgħu jmorru l-ħanut għall-ġelat. Dakinhar filgħaxija kien vanilla, u meta marru lura lejn il-karozza, ma kinitx tibda.

L-inġinier ġie tliet serati oħra. L-ewwel darba l-ġelat kien iċ-ċikkulata. Il-karozza bdiet. It-tieni darba kien hemm ġelat tal-frawli. Il-karozza bdiet. Fit-tielet filgħaxija talab biex jieħu l-vanilla. Il-karozza ma bdietx.

B'raġunament razzjonali, l-inġinier irrifjuta li jemmen li l-karozza kienet allerġika għall-ġelat tal-vanilla. G[alhekk, ftiehem ma’ sid il-karozza li kien se jkompli bi]-]jarat tieg[u sakemm isib soluzzjoni g[all-problema. U tul it-triq, beda jieħu noti: kiteb l-informazzjoni kollha, il-ħin tal-ġurnata, it-tip ta 'gażolina, il-ħin tal-wasla u r-ritorn mill-maħżen, eċċ.

L-inġinier malajr induna li sid il-karozza qatta’ inqas ħin jixtri ġelat tal-vanilla. Ir-raġuni kienet it-tqassim tal-merkanzija fil-maħżen. Il-ġelat tal-vanilla kien l-aktar popolari u kien jinżamm f’friża separat fuq quddiem tal-maħżen biex ikun aktar faċli biex jinstab. U l-varjetajiet l-oħra kollha kienu fuq wara tal-maħżen, u ħa ħafna aktar ħin biex issib il-varjetà t-tajba u tħallas.

Issa l-mistoqsija kienet għall-inġinier: għaliex il-karozza ma bdietx jekk ikun għadda inqas ħin mill-mument li l-magna kienet mitfija? Peress li l-problema kienet iż-żmien, mhux il-ġelat tal-vanilla, l-inġinier malajr sab it-tweġiba: kien serratura tal-gass. Dan seħħ kull filgħaxija, iżda meta sid il-karozza qatta’ aktar ħin ifittex il-ġelat, il-magna rnexxielha tibred biżżejjed u bdiet faċilment. U meta r-raġel xtara ġelat tal-vanilla, il-magna kienet għadha sħuna wisq u l-lock tal-gass ma kellux ħin biex jinħall.

Morali: Anke problemi kompletament miġnun kultant huma reali.

crash Pikachu

Huwa ta 'uġigħ li tesperjenza dan. Bħala programmatur, tidra twaħħal il-kodiċi tiegħek l-ewwel, it-tieni, it-tielet... u x'imkien fl-għaxar elf post twaħħal fil-kompilatur. U aktar 'l isfel fil-lista diġà twaħħal it-tagħmir.

Hawnhekk hawn l-istorja tiegħi dwar il-bug tal-ħardwer.

Għal-logħba Crash Bandicoot, ktibt kodiċi biex tagħbija u tissejvja fuq karta tal-memorja. Għal tali żviluppatur tal-logħob smug, kien bħal mixja fil-park: ħsibt li x-xogħol jieħu diversi jiem. Madankollu, spiċċajt niddibaggja l-kodiċi għal sitt ġimgħat. Tul it-triq, solvejt problemi oħra, iżda kull ftit jiem erġajt lura għal dan il-kodiċi għal ftit sigħat. Kienet agunija.

Is-sintomu deher bħal dan: meta tissejvja l-playthrough attwali tal-logħba u taċċessa l-karta tal-memorja, kollox kważi dejjem imur tajjeb... Imma xi drabi l-ħinijiet tal-operazzjoni tal-qari jew tal-kitba m'hemmx raġuni ovvja. Reġistrazzjoni qasira ħafna drabi tagħmel ħsara lill-karta tal-memorja. Meta plejer jipprova jsalva, mhux biss jonqos milli jsalva, iżda wkoll jeqred il-mappa. Ħażin.

Wara ftit, il-produttur tagħna f'Sony, Connie Bus, beda jippaniku. Ma stajniex nibgħatu l-logħba b'dan il-bug, u sitt ġimgħat wara ma fhimtx x'kien qed jikkawża l-problema. Permezz ta 'Connie, ikkuntattjana żviluppaturi oħra tal-PS1: xi ħadd iltaqa' ma 'xi ħaġa simili? Nru. Ħadd ma kellu problemi bil-karta tal-memorja.

Meta ma jkollokx ideat għad-debugging, l-uniku approċċ li fadal huwa li "taqsam u jirbħu": neħħi aktar u aktar kodiċi mill-programm difettuż sakemm jibqa 'framment relattivament żgħir li għadu jikkawża l-problema. Jiġifieri taqta’ l-programm biċċa biċċa sakemm tibqa’ l-parti li fiha l-bug.

Iżda l-ħaġa hija, huwa diffiċli ħafna li tnaqqas biċċiet minn video game. Kif tħaddem jekk neħħejt il-kodiċi li jimita l-gravità? Jew tpinġi karattri?

Għalhekk, irridu nissostitwixxu moduli sħaħ bi stubs li jippretendu li jagħmlu xi ħaġa utli, iżda fil-fatt nagħmlu xi ħaġa sempliċi ħafna li ma jistax ikun fiha żbalji. Irridu niktbu krozzi bħal dawn biex il-logħba tal-inqas taħdem. Dan huwa proċess bil-mod u bl-uġigħ.

Fil-qosor, għamilt dan. Neħħejt aktar u aktar biċċiet ta 'kodiċi sakemm tħallejt bil-kodiċi inizjali li jikkonfigura s-sistema biex tmexxi l-logħba, inizjalizza l-ħardwer tar-rendi, eċċ. Naturalment, f'dan l-istadju ma stajtx noħloq menu ta 'salvataġġ u tagħbija, għax ikolli noħloq stub għall-kodiċi tal-grafika kollu. Imma stajt nippretendu li nkun utent bl-użu tal-iskrin (inviżibbli) tal-issejvjar u t-tagħbija u nitlob biex issalva u mbagħad nikteb fuq il-karta tal-memorja.

Dan ħallieni biċċa żgħira ta 'kodiċi li xorta kellha l-problema ta' hawn fuq - iżda xorta kienet qed isseħħ bl-addoċċ! Ħafna drabi kollox ħadem tajjeb, iżda kultant kien hemm glitches. Neħħejt kważi l-kodiċi tal-logħba kollha, iżda l-bug kien għadu ħaj. Dan kien jistaqsi: il-kodiċi li kien fadal fil-fatt ma għamel xejn.

F'xi ħin, aktarx għall-ħabta tat-tlieta ta' filgħodu, ġratli ħsieb. L-operazzjonijiet ta' qari u tikteb (input/output) jinvolvu ħinijiet preċiżi ta' eżekuzzjoni. Meta taħdem ma 'hard drive, karta tal-memorja jew modulu Bluetooth, il-kodiċi ta' livell baxx responsabbli għall-qari u l-kitba jagħmel dan skont il-impulsi tal-arloġġ.

Bl-għajnuna ta 'arloġġ, apparat li mhux konness direttament mal-proċessur huwa sinkronizzat mal-kodiċi li jeżegwixxi fuq il-proċessur. L-arloġġ jiddetermina l-baud rate—il-veloċità li biha tiġi trasferita d-data. Jekk ikun hemm konfużjoni mal-ħinijiet, allura jew il-ħardwer jew is-softwer, jew it-tnejn, huma wkoll konfużi. U dan huwa ħażin ħafna, minħabba li d-dejta tista 'tiġi bil-ħsara.

X'jiġri jekk xi ħaġa fil-kodiċi tagħna tħawwad il-ħinijiet? Iċċekkja dak kollu relatat ma 'dan fil-kodiċi tal-programm tat-test u ndunajt li waqqafna t-tajmer programmabbli f'PS1 għal 1 kHz (1000 qurdien kull sekonda). Dan huwa pjuttost ħafna; b'mod awtomatiku, meta jibda l-console, jaħdem f'100 Hz. U ħafna logħob juża din il-frekwenza.

Andy, l-iżviluppatur tal-logħob, issettja t-tajmer għal 1 kHz sabiex il-movimenti jkunu kkalkulati b'mod aktar preċiż. Andy għandu t-tendenza li jmur il-baħar, u jekk nimitaw il-gravità, nagħmluh bl-aktar mod preċiż possibbli!

Imma x'jiġri jekk it-tħaffif tat-tajmer b'xi mod affettwat iż-żmien ġenerali tal-programm, u għalhekk l-arloġġ li jirregola r-rata tal-baud għall-karta tal-memorja?

Ikkummentajt il-kodiċi tat-tajmer. L-iżball ma reġax seħħ. Iżda dan ma jfissirx li rranġawh, minħabba li n-nuqqas seħħ b'mod każwali. X'jiġri kieku kont xortik tajba?

Ftit jiem wara erġajt esperimentajt bil-programm tat-test. Il-bug ma rrepetix. Mort lura għall-kodiċi tal-logħba sħiħa u mmodifikat il-kodiċi tal-issejvjar u tat-tagħbija sabiex it-tajmer programmabbli jerġa 'jissettja għall-valur oriġinali tiegħu (100Hz) qabel ma jaċċessa l-karta tal-memorja, u mbagħad reset lura għal 1kHz. Ma kienx hemm aktar ħabtiet.

Imma għaliex ġara dan?

Erġajt lura għall-programm tat-test. Ippruvajt insib xi mudell fl-okkorrenza ta 'żball b'timer ta' 1 kHz. Eventwalment innutajt li l-iżball iseħħ meta xi ħadd jilgħab ma 'kontrollur PS1. Peress li rari nagħmel dan jien stess - għaliex għandi bżonn kontrollur meta nittestja l-kodiċi tas-salvataġġ u tat-tagħbija? - Lanqas ma ndunajt din id-dipendenza. Imma ġurnata waħda wieħed mill-artisti tagħna kien qed jistenna li nispiċċa nispiċċa l-ittestjar – x’aktarx kont qed nisħet f’dak il-mument – ​​u b’mod nervuż dawwar il-kontrollur f’idejh. Sar żball. "Stenna, xiex?!" Tajjeb, erġa’ agħmel!”

Meta rrealizzajt li dawn iż-żewġ avvenimenti kienu interkonnessi, stajt nirriproduċi l-iżball faċilment: bdejt nirrekordja fuq il-karta tal-memorja, ċaqlaq il-kontrollur, u ħassejt il-karta tal-memorja. Għalija deher qisu hardware bug.

Wasalt għand Connie u għedtilha dwar l-iskoperta tiegħi. Hija għaddiet l-informazzjoni lil wieħed mill-inġiniera li ddisinja l-PS1. "Impossibbli," wieġeb, "Ma tistax tkun problema ta 'hardware." Tlabt lil Connie biex tirranġa konversazzjoni għalina.

L-inġinier ċempilli u argumentejna bl-Ingliż imkisser tiegħu u bil-Ġappuniż (estremament) imkisser. Fl-aħħar għidt, "Ħalli nibgħat il-programm tiegħi tat-test ta' 30 linja fejn inċaqlaq il-kontrollur jikkawża bug." Huwa qabel. Qal li kien ħela ta 'ħin u li kien terriblement busy jaħdem fuq proġett ġdid, iżda se jċedi għax konna żviluppatur importanti ħafna għal Sony. Naddaf il-programm tat-test tiegħi u bgħattlu.

L-għada filgħaxija (konna Los Angeles u hu kien f’Tokjo) ċemplili u skuża ruħi bi skuża. Kienet problema ta 'hardware.

Ma nafx x'kienet eżattament il-bug, iżda minn dak li smajt fil-kwartieri ġenerali ta 'Sony, jekk issettja t-tajmer għal valur għoli biżżejjed, interferiet mal-komponenti fuq il-motherboard fil-viċinanza tal-kristall tat-tajmer. Waħda minnhom kienet kontrollur tar-rata tal-baud għall-karta tal-memorja, li stabbiliet ukoll ir-rata tal-baud għall-kontrolluri. Jien m'iniex inġinier, allura jista' jkun li nħawwad xi ħaġa.

Iżda l-aħħar linja hija li kien hemm interferenza bejn il-komponenti fuq il-motherboard. U meta tittrasmetti d-data fl-istess ħin permezz tal-port tal-kontrollur u l-port tal-karta tal-memorja b'timer li jaħdem f'1 kHz, il-bits intilfu, id-dejta ntilfet, u l-karta kienet bil-ħsara.

Baqar ħżiena

Fis-snin tmenin, il-parrinu tiegħi Sergei kiteb softwer għall-SM-1980, klonu Sovjetiku tal-PDP-1800. Dan il-mikrokompjuter għadu kif ġie installat fi stazzjon tal-ferrovija qrib Sverdlovsk, ċentru tat-trasport importanti fl-USSR. Is-sistema l-ġdida kienet iddisinjata biex tgħaddi l-vaguni u t-traffiku tal-merkanzija. Iżda kien fih bug tedjanti li wassal għal ħabtiet każwali u ħabtiet. Il-waqgħat dejjem seħħew meta xi ħadd imur id-dar filgħaxija. Iżda minkejja investigazzjoni bir-reqqa l-għada, il-kompjuter ħadem b'mod korrett fit-testijiet kollha manwali u awtomatiċi. Dan normalment jindika kundizzjoni ta 'razza jew xi bug kompetittiv ieħor li jseħħ taħt ċerti kundizzjonijiet. Għajjien tas-sejħiet tard bil-lejl, Sergei iddeċieda li jasal fil-qiegħ tiegħu, u l-ewwelnett, jifhem liema kundizzjonijiet fit-tarzna tal-marshalling wasslu għall-ħsara tal-kompjuter.

L-ewwel, huwa ġabar statistika tal-waqgħat kollha mhux spjegati u ħoloq graff skont id-data u l-ħin. Il-mudell kien ovvju. Wara li osserva għal ftit jiem oħra, Sergei induna li seta 'faċilment ibassar iż-żmien ta' fallimenti futuri tas-sistema.

Malajr sar jaf li l-interruzzjonijiet seħħew biss meta l-istazzjon kien qed jagħżel ferroviji ta’ baqar mit-Tramuntana tal-Ukrajna u l-Punent tar-Russja sejrin lejn biċċerija fil-qrib. Dan fih innifsu kien stramba, minħabba li l-biċċerija kienet fornuta minn rziezet li jinsabu ħafna eqreb, fil-Każakstan.

L-impjant tal-enerġija nukleari ta 'Chernobyl sploda fl-1986, u l-konsegwenzi radjuattivi għamlu ż-żoni tal-madwar inabitabbli. Żoni kbar fit-Tramuntana tal-Ukrajna, il-Belarus u l-Punent tar-Russja kienu kkontaminati. Filwaqt li jissuspetta livelli għoljin ta 'radjazzjoni fil-vaguni li waslu, Sergei żviluppa metodu biex jittestja din it-teorija. Il-popolazzjoni kienet ipprojbita milli jkollha dożimetri, għalhekk Sergei irreġistra ruħu ma 'diversi irġiel militari fl-istazzjon tal-ferrovija. Wara diversi xorb ta’ vodka, irnexxielu jikkonvinċi suldat biex ikejjel il-livell ta’ radjazzjoni f’wieħed mill-vaguni suspettużi. Irriżulta li l-livell kien bosta drabi ogħla mill-valuri normali.

Mhux biss il-baqar emettu ħafna radjazzjoni, il-livell tiegħu kien tant għoli li wassal għal telf każwali ta 'bits fil-memorja tal-SM-1800, li kien jinsab f'bini ħdejn l-istazzjon.

Kien hemm nuqqas ta 'ikel fl-USSR, u l-awtoritajiet iddeċidew li jħalltu laħam ta' Chernobyl ma 'laħam minn reġjuni oħra tal-pajjiż. Dan għamilha possibbli li jitnaqqas il-livell ġenerali ta 'radjuattività mingħajr ma jintilfu riżorsi ta' valur. Wara li tgħallem dwar dan, Sergei immedjatament imla dokumenti għall-emigrazzjoni. U l-ħabtiet tal-kompjuter waqfu waħedhom meta l-livell tar-radjazzjoni naqas maż-żmien.

Permezz tal-pajpijiet

Darba, Movietech Solutions ħolqot softwer għaċ-ċinema, iddisinjat għall-kontabilità, il-bejgħ tal-biljetti u l-ġestjoni ġenerali. Il-verżjoni DOS tal-app ewlenija kienet popolari ħafna fost il-ktajjen tat-teatri taċ-ċinema ta’ daqs żgħir u medju fl-Amerika ta’ Fuq. Għalhekk mhux sorprendenti li meta tħabbret verżjoni tal-Windows 95, integrata mal-aħħar touch screens u kjosks self-service, u mgħammra b'kull xorta ta 'għodda ta' rappurtar, malajr saret popolari wkoll. Ħafna drabi l-aġġornament mar mingħajr problemi. Il-persunal lokali tal-IT installaw tagħmir ġdid, emigraw id-dejta, u n-negozju kompla. Ħlief meta ma damx. Meta ġara dan, il-kumpanija kienet tibgħat lil James, imlaqqam "The Cleaner."

Għalkemm il-laqam jissuġġerixxi tip nefarious, il-cleaner huwa biss taħlita ta 'għalliem, installatur u jack-of-all-trades. James kien iqatta 'ftit jiem fuq is-sit tal-klijent ipoġġi l-komponenti kollha flimkien, u mbagħad iqatta' ftit jiem oħra jgħallem lill-persunal kif juża s-sistema l-ġdida, isolvi kwalunkwe problema ta 'hardware li jinqalgħu u essenzjalment jgħin lis-softwer matul il-bidu tiegħu.

Għalhekk, mhux sorprendenti li f’dawn iż-żminijiet ta’ ħeġġa, James wasal l-uffiċċju filgħodu, u qabel ma seta’ jilħaq l-iskrivanija tiegħu, ġie milqugħ mill-maniġer, mimli kaffeina lil hinn mis-soltu.

"Nibża li għandek bżonn tmur Annapolis, Nova Scotia, kemm jista 'jkun malajr." Is-sistema kollha tagħhom waqgħet, u wara lejl ta 'ħidma mal-inġiniera tagħhom, ma nistgħux insemmu x'ġara. Jidher li n-netwerk falla fuq is-server. Iżda biss wara li s-sistema kienet ilha taħdem għal diversi minuti.

— Ma rritornawx għas-sistema l-antika? - wieġeb James bis-serjetà għal kollox, għalkemm mentalment kabbar għajnejh b'sorpriża.

— Eżattament: l-ispeċjalista tal-IT tagħhom "biddlu l-prijoritajiet" u ddeċidew li jitilqu bis-server l-antik tagħhom. James, installaw is-sistema f'sitt siti u ħallsu biss għall-appoġġ premium, u n-negozju tagħhom issa huwa mmexxi bħalma kien fl-1950s.

James iddritta ftit.

- Dik hija kwistjoni oħra. Tajjeb, ejja nibdew.

Meta wasal Annapolis, l-ewwel ħaġa li għamel kienet li sab l-ewwel teatru tal-klijent li kellu problema. Fuq il-mappa meħuda fl-ajruport, kollox deher deċenti, iżda ż-żona madwar l-indirizz mixtieq dehret suspettuża. Mhux ghetto, imma reminixxenti tal-film noir. Hekk kif James ipparkja fil-bankina tal-belt, resqet lejh prostituta. Minħabba d-daqs ta 'Annapolis, x'aktarx kienet l-unika waħda fil-belt kollha. Id-dehra tagħha immedjatament ġabet f’moħħok il-karattru famuż li offra s-sess għall-flus fuq il-big screen. Le, mhux dwar Julia Roberts, imma dwar Jon Voight [allużjoni għall-film "Midnight Cowboy" - approx. korsija].

Wara li bagħtet lill-prostituta fi triqitha, James mar iċ-ċinema. Iż-żona tal-madwar kienet marret għall-aħjar, iżda xorta tat l-impressjoni li kienet imżaqqba. Mhux li James kien inkwetat wisq. Huwa kien f'postijiet miskin qabel. U din kienet il-Kanada, fejn anke l-muggers huma edukati biżżejjed biex jgħidu "grazzi" wara li ħadu l-kartiera tiegħek.

Id-daħla tal-ġenb taċ-ċinema kienet fi sqaq niedja. James mar lejn il-bieb u ħabbat. Ma damx ma nfetaħ u fetaħ ftit.

-Int cleaner? - ħarġet vuċi ħanina minn ġewwa.

- Iva, jien... ġejt biex nirranġa kollox.

James daħal fil-lobby taċ-ċinema. Jidher li ma kellux għażla oħra, il-persunal beda jqassam biljetti tal-karti lill-viżitaturi. Dan għamel ir-rappurtar finanzjarju diffiċli, aħseb u ara dettalji aktar interessanti. Iżda l-istaff sellem lil James b'serħan u ssieħbu u immedjatament ħadu fil-kamra tas-server.

L-ewwel daqqa t'għajn, kollox kien tajjeb. James illoggja fis-server u ċċekkja l-postijiet suspettużi tas-soltu. Mhux problema. Madankollu, minn abbundanza ta 'kawtela, James għalaq is-server, issostitwixxa l-kard tan-netwerk, u reġġa' lura s-sistema. Hija mill-ewwel bdiet taħdem bis-sħiħ. Il-persunal reġa beda jbigħ il-biljetti.

James ċempel lil Mark u informah bis-sitwazzjoni. Mhux diffiċli li wieħed jimmaġina li James jista’ jkun irid jibqa’ u jara jekk jiġrix xi ħaġa mhux mistennija. Niżel it-taraġ u beda jistaqsi lill-impjegati x’ġara. Ovvjament is-sistema waqfet taħdem. Tefgħuha u mixgħula, kollox ħadem. Iżda wara 10 minuti s-sistema waqgħet.

Proprju f'dan il-mument ġrat xi ħaġa simili. F'daqqa waħda, is-sistema tal-biljetti bdiet tarmi żbalji. L-istaff daqqa u qabad il-biljetti tal-karti, u James ħaffef lejn il-kamra tas-server. Kollox deher tajjeb mas-server.

Imbagħad daħal wieħed mill-impjegati.

— Is-sistema qed taħdem mill-ġdid.

James kien imħasseb għax ma kien għamel xejn. B'mod aktar preċiż, xejn li jagħmel is-sistema taħdem. Huwa illoggjat, qabad it-telefon tiegħu, u ċempel il-linja ta 'appoġġ tal-kumpanija tiegħu. Dalwaqt l-istess impjegat daħal fil-kamra tas-server.

- Is-sistema hija mwaqqfa.

James ħares lejn is-server. Mudell interessanti u familjari ta 'forom b'ħafna kuluri danced fuq l-iskrin - kaotikament writhing u intertwining pajpijiet. Ilkoll rajna dan l-iscreensaver f'xi punt. Kien beautifully mogħtija u litteralment ipnotizzanti.


James għafas buttuna u l-mudell sparixxa. Ħaġa lejn l-uffiċċju tal-biljetti u fit-triq iltaqa’ ma’ impjegat li kien qed jirritorna għandu.

— Is-sistema qed taħdem mill-ġdid.

Jekk inti tista 'tagħmel facepalm mentali, dak huwa eżattament dak li għamel James. Screensaver. Hija tuża OpenGL. U għalhekk, waqt it-tħaddim, jikkonsma r-riżorsi kollha tal-proċessur tas-server. Bħala riżultat, kull sejħa lis-server tispiċċa b'timeout.

James irritorna fil-kamra tas-server, illoggja, u biddel l-iscreensaver bil-pajpijiet sbieħ bi skrin vojt. Jiġifieri, minflok screensaver li jikkonsma 100% tar-riżorsi tal-proċessur, installajt ieħor li ma jikkonsmax ir-riżorsi. Imbagħad stennejt 10 minuti biex niċċekkja l-raden tiegħi.

Meta James wasal fiċ-ċinema li jmiss, kien qed jistaqsi kif jispjega lill-maniġer tiegħu li kien għadu kemm tajjar 800 km biex jitfi l-iscreen saver.

Crash waqt ċerta fażi tal-qamar

Storja vera. Ġurnata waħda qamet bug tas-software li tiddependi fuq il-fażi tal-qamar. Kien hemm ftit rutina li kienet użata komunement f'diversi programmi tal-MIT biex tikkalkula l-approssimazzjoni għall-fażi vera tal-Qamar. GLS bena din ir-rutina fi programm LISP li, meta jikteb fajl, joħroġ linja b'timestamp twila ta' kważi 80 karattru. Kien rari ħafna li l-ewwel linja ta’ messaġġ tispiċċa tkun twila wisq u twassal għall-linja li jmiss. U meta l-programm aktar tard jaqra dan il-fajl, misħuta. It-tul tal-ewwel linja kien jiddependi fuq id-data u l-ħin eżatti, kif ukoll it-tul tal-ispeċifikazzjoni tal-fażi fil-ħin li ġie stampat it-timestamp. Jiġifieri, il-bug litteralment kien jiddependi fuq il-fażi tal-qamar!

L-ewwel edizzjoni tal-karta Ġargon File (Steele-1983) kien fih eżempju ta 'tali linja li wasslet għall-bug deskritt, iżda t-typesetter "iffissa"ha. Minn dakinhar dan ġie deskritt bħala "moon phase bug".

Madankollu, oqgħod attent bis-suppożizzjonijiet. Ftit snin ilu, inġiniera mis-CERN (Ċentru Ewropew għar-Riċerka Nukleari) iltaqgħu ma’ żbalji fl-esperimenti li saru fil-Kbir Electron-Positron Collider. Peress li l-kompjuters jipproċessaw b'mod attiv l-ammont enormi ta 'dejta ġġenerata minn dan l-apparat qabel ma juru r-riżultat lix-xjenzati, ħafna spekulaw li s-softwer kien b'xi mod sensittiv għall-fażi tal-qamar. Diversi inġiniera ddisprati waslu fil-qiegħ tal-verità. L-iżball inqala 'minħabba bidla żgħira fil-ġeometrija taċ-ċirku twil ta' 27 km minħabba d-deformazzjoni tad-Dinja waqt il-mogħdija tal-Qamar! Din l-istorja daħlet fil-folklor tal-fiżika bħala "Newton's Revenge on Particle Physics" u eżempju tal-konnessjoni bejn l-aktar liġijiet sempliċi u antiki tal-fiżika u l-kunċetti xjentifiċi l-aktar avvanzati.

Il-flushing tat-tojlit iwaqqaf il-ferrovija

L-aqwa hardware bug li qatt smajt bih kien fuq ferrovija ta’ veloċità għolja fi Franza. Il-bug wassal għall-ibbrejkjar ta 'emerġenza tal-ferrovija, iżda biss jekk kien hemm passiġġieri abbord. F'kull każ bħal dan, il-ferrovija ttieħdet mis-servizz, iċċekkjata, iżda ma nstab xejn. Imbagħad intbagħat lura għal-linja, u immedjatament waqaf.

Waqt waħda mill-kontrolli, inġinier li kien qed jivvjaġġa fuq il-ferrovija mar it-tojlit. Dalwaqt ħasel, BOOM! Waqfien ta’ emerġenza.

L-inġinier ikkuntattja lis-sewwieq u staqsa:

— X'kont tagħmel eżatt qabel ibbrejkja?

- Tajjeb, naqqas il-veloċità fl-inżul...

Din kienet stramba, għax waqt it-tħaddim normali l-ferrovija tnaqqas il-veloċità fuq inżul għexieren ta 'drabi. Il-ferrovija kompliet, u fl-inżul li jmiss is-sewwieq wissa:

- Jien ser inaqqas.

Ma ġara xejn.

— X'għamilt waqt l-aħħar ibbrejkjar? - staqsa x-xufier.

- Tajjeb... kont fit-tojlit...

- Tajjeb, imbagħad mur fit-tojlit u agħmel dak li għamilt meta nerġgħu ninżlu!

L-inġinier mar fit-tojlit, u meta x-xufier wissa: “Qed inrażżan,” laħlaħ l-ilma. Naturalment, il-ferrovija waqfet immedjatament.

Issa setgħu jirriproduċu l-problema u kellhom bżonn isibu l-kawża.

Wara żewġ minuti, innutaw li l-kejbil tal-kontroll mill-bogħod tal-brejk tal-magna (il-ferrovija kellha magna waħda f'kull tarf) kien skonnettjat mill-ħajt tal-kabinett tal-elettriku u kien mimdud fuq ir-relay li jikkontrolla s-solenojd tal-plagg tat-twaletta... Meta r-relay kienet mixgħula, ħoloq interferenza fil-kejbil tal-brejk, u l-protezzjoni tas-sistema kontra l-ħsarat sempliċement inkludiet ibbrejkjar ta 'emerġenza.

Il-portal li hated FORTRAN

Ftit xhur ilu ndunajna li l-konnessjonijiet tan-netwerk fuq il-kontinent [dan kien fil-Hawaii] kienu qed isiru bil-mod ħafna, ħafna. Dan jista 'jdum għal 10-15-il minuta u mbagħad f'daqqa waħda jerġa' jseħħ. Wara xi żmien, kollega tiegħi lmenta miegħi li l-konnessjonijiet tan-netwerk fuq il-kontinent b'mod ġenerali ma jaħdimx. Kellu xi kodiċi FORTRAN li kien jeħtieġ li jiġi kkupjat għal magna fuq il-kontinent, iżda ma setax għax "in-netwerk ma żammx biżżejjed biex jitlesta l-FTP upload."

Iva, irriżulta li seħħew fallimenti tan-netwerk meta kollega pprova jagħmel FTP fajl b'kodiċi tas-sors f'FORTRAN għal magna fuq il-kontinent. Ippruvajna narkivjaw il-fajl: imbagħad ġie kkupjat bla xkiel (iżda l-magna fil-mira ma kellhiex unpacker, għalhekk il-problema ma ġietx solvuta). Finalment aħna "qassmu" il-kodiċi FORTRAN f'biċċiet żgħar ħafna u bgħatthom waħda waħda. Ħafna mill-frammenti ġew ikkupjati mingħajr problemi, iżda ftit biċċiet ma għaddewx, jew għaddew wara numerużi tentattivi.

Meta eżaminajna s-siltiet problematiċi, skoprejna li kellhom xi ħaġa komuni: kollha kien fihom blokki ta 'kummenti li bdew u spiċċaw b'linji li jikkonsistu f'kapital C (kif kollega pprefera jikkummenta f'FORTRAN). Bgħatna email esperti tan-netwerk fuq il-kontinent u tlabna għall-għajnuna. Naturalment, riedu jaraw kampjuni tal-fajls tagħna li ma setgħux jiġu trasferiti permezz tal-FTP... iżda l-ittri tagħna ma waslux għalihom. Fl-aħħar ħriġna bi sempliċi iddeskrivikif jidhru fajls mhux trasferibbli. Ħadem :) [Dare nżid eżempju ta' wieħed mill-kummenti problematiċi ta' FORTRAN hawn? Probabbilment mhux worth it!]

Fl-aħħar irnexxielna nifhmuha. Dan l-aħħar ġie installat gateway ġdid bejn il-parti tagħna tal-kampus u n-netwerk kontinentali. Kellha diffikultà ENORMI biex tittrasmetti pakketti li kien fihom biċċiet ripetuti ta’ C uppercase! Ftit minn dawn il-pakketti biss jistgħu jieħdu r-riżorsi kollha tal-portal u jipprevjenu l-biċċa l-kbira tal-pakketti l-oħra milli jgħaddu. Ilmentajna mal-manifattur tal-gateway... u huma wieġbu: “Oh, iva, qed iffaċċjat b’bug ta’ C ripetut! Diġà nafu dwaru.” Eventwalment solvejna l-problema billi xtraw portal ġdid minn manifattur ieħor (fid-difiża ta 'l-ewwel, l-inabbiltà li tittrasferixxi programmi FORTRAN tista' tkun vantaġġ għal xi wħud!).

Żminijiet diffiċli

Ftit snin ilu, waqt li naħdem fuq il-ħolqien ta 'sistema ETL f'Perl biex tnaqqas l-ispejjeż tal-provi kliniċi tal-fażi 40, kelli bżonn nipproċessa madwar 000 data. Tnejn minnhom ma għaddewx mit-test. Dan ma tantx iddejjaqni għax dawn id-dati ttieħdu minn data pprovduta mill-klijent li spiss kienet, ngħidu aħna, sorprendenti. Imma meta ċċekkja d-dejta oriġinali, irriżulta li dawn id-dati kienu l-1 ta’ Jannar 2011 u l-1 ta’ Jannar 2007. Ħsibt li l-bug kien jinsab fil-programm li kont għadni kif ktibt, iżda rriżulta li kien diġà 30 sena qodma. Dan jista 'ħoss misterjuż għal dawk li mhumiex familjari mal-ekosistema tas-softwer. Minħabba d-deċiżjoni twila ta’ kumpanija oħra li tagħmel il-flus, il-klijent tiegħi ħallasni biex nirranġa bug li kumpanija waħda kienet introduċiet bi żball u l-oħra apposta. Biex tifhem dak li qed nitkellem, għandi bżonn nitkellem dwar il-kumpanija li żiedet il-karatteristika li spiċċat saret bug, kif ukoll ftit avvenimenti interessanti oħra li kkontribwew għall-bug misterjuż li rranġat.

Fl-antik it-tajjeb, il-kompjuters tat-tuffieħ kultant kienu spontanjament jerġgħu jissettjaw id-data tagħhom għall-1 ta’ Jannar, 1904. Ir-raġuni kienet sempliċi: użat "arloġġ tas-sistema" li jaħdem bil-batterija biex iżżomm kont tad-data u l-ħin. X'ġara meta mietet il-batterija? Il-kompjuters bdew isegwu d-data bin-numru ta 'sekondi mill-bidu ta' epoka. B'epoka rridu nfissru d-data oriġinali ta 'referenza, u għal Macintoshes kienet l-1 ta' Jannar 1904. U wara li mietet il-batterija, id-data attwali ġiet reset għal dik speċifikata. Imma għaliex ġara dan?

Preċedentement, Apple użat 32 bit biex jaħżen in-numru ta ' sekondi mid-data oriġinali. Bit wieħed jista 'jaħżen wieħed minn żewġ valuri - 1 jew 0. Żewġ bits jistgħu jaħżnu wieħed minn erba' valuri: 00, 01, 10, 11. Tliet bits - valur wieħed minn tmienja: 000, 001, 010, 011, 100 , 101, 110, 111, eċċ. U 32 jistgħu jaħżnu wieħed minn 232 valur, jiġifieri, 4 sekonda. Għad-dati Apple, dan kien ekwivalenti għal madwar 294 sena, għalhekk Macs anzjani ma jistgħux jimmaniġġjaw dati wara l-967. U jekk il-batterija tas-sistema tmut, id-data tiġi reset għal 296 sekondi mill-bidu tal-epoka, u trid issettja d-data manwalment kull darba li tixgħel il-kompjuter (jew sakemm tixtri batterija ġdida).

Madankollu, id-deċiżjoni ta’ Apple li taħżen id-dati bħala sekondi mill-epoka fissret li ma stajniex nittrattaw dati qabel l-epoch, li kellha konsegwenzi kbar, kif naraw. Apple introduċiet karatteristika, mhux bug. Fost affarijiet oħra, dan kien ifisser li s-sistema operattiva Macintosh kienet immuni għall-“millennium bug” (li ma setax jingħad dwar ħafna applikazzjonijiet Mac li kellhom is-sistemi tad-data tagħhom stess biex jevitaw ir-restrizzjonijiet).

Aqbad. Aħna użajna Lotus 1-2-3, l-"applikazzjoni qattiel" ta 'IBM li għenet biex tniedi r-rivoluzzjoni tal-PC, għalkemm il-kompjuters Apple kellhom VisiCalc, li għamel il-kompjuter personali suċċess. Fil-ġustizzja, li kieku 1-2-3 ma deherx, il-PCs bilkemm telaq, u l-istorja tal-kompjuters personali setgħet żviluppat b'mod differenti ħafna. Lotus 1-2-3 ttrattat ħażin l-1900 bħala sena biżestili. Meta Microsoft ħarġet l-ewwel spreadsheet tagħha, Multiplan, qabdet sehem żgħir tas-suq. U meta nedew il-proġett Excel, iddeċidew mhux biss li jikkupjaw l-iskema ta 'l-ismijiet tar-ringieli u l-kolonni minn Lotus 1-2-3, iżda wkoll biex jiżguraw il-kompatibilità tal-bugs billi jittrattaw deliberatament l-1900 bħala sena biżestili. Din il-problema għadha teżisti llum. Allura f'1-2-3 kien bug, iżda f'Excel kienet deċiżjoni konxja li jiġi żgurat li l-utenti kollha 1-2-3 setgħu jimportaw it-tabelli tagħhom f'Excel mingħajr ma jbiddlu d-dejta, anki jekk kienet ħażina.

Imma kien hemm problema oħra. L-ewwel, Microsoft ħarġet Excel għall-Macintosh, li ma għarfetx dati qabel l-1 ta 'Jannar 1904. U f'Excel, l-1 ta' Jannar 1900 kien meqjus bħala l-bidu tal-era. Għalhekk, l-iżviluppaturi għamlu bidla sabiex il-programm tagħhom għaraf it-tip ta 'era u ħażen id-dejta fih innifsu skond l-era mixtieqa. Microsoft saħansitra kitbet artiklu spjegattiv dwar dan. U din id-deċiżjoni wasslet għall-bug tiegħi.

Is-sistema ETL tiegħi rċeviet spreadsheets Excel minn klijenti li nħolqu fuq il-Windows, iżda setgħu jinħolqu wkoll fuq Mac. Għalhekk, il-bidu tal-era fit-tabella jista 'jkun jew l-1 ta' Jannar, 1900, jew l-1 ta 'Jannar, 1904. Kif issir taf? Il-format tal-fajl Excel juri l-informazzjoni meħtieġa, iżda l-parser li użajt ma werihiex (issa jagħmel), u assuma li taf l-epoka għal tabella speċifika. Probabbilment stajt qattajt aktar ħin nifhem il-format binarju ta 'Excel u nibgħat garża lill-awtur tal-parser, iżda kelli ħafna aktar x'nagħmel għall-klijent, għalhekk malajr ktibt euristiku biex tiddetermina l-epoka. Kienet sempliċi.

Fl-Excel, id-data 5 ta 'Lulju, 1998 tista' tkun rappreżentata fil-format "07-05-98" (sistema Amerikana inutli), "5 Lulju, 98", "5 Lulju, 1998", "5-Jul-98" jew xi format ieħor.format ieħor inutli (ironikament, wieħed mill-formati li l-verżjoni tiegħi ta' Excel ma offrietx kien ISO 8601). Madankollu, fit-tabella, id-data mhux ifformattjata kienet maħżuna jew bħala "35981" għal epoch-1900 jew "34519" għal epoch-1904 (in-numri jirrappreżentaw in-numru ta 'jiem mill-epoch). Sempliċement użajt parser sempliċi biex estratti s-sena mid-data ifformattjata, u mbagħad użajt il-parser ta 'Excel biex estratt is-sena mid-data mhux ifformattjata. Jekk iż-żewġ valuri kienu differenti b'4 snin, allura kont naf li kont qed nuża sistema b'epoch-1904.

Għaliex ma użajtx biss dati fformattjati? Minħabba li l-5 ta' Lulju 1998 jista' jiġi fformattjat bħala "Lulju, 98" bil-jum tax-xahar mitluf. Irċevejna tabelli minn tant kumpaniji li ħolquhom b'ħafna modi differenti li kien f'idejna (f'dan il-każ, jien) biex insemmu d-dati. Barra minn hekk, jekk l-Excel jirnexxilu, allura hekk għandna aħna!

Fl-istess ħin iltqajt ma' 39082. Ħa nfakkarkom li Lotus 1-2-3 qieset l-1900 bħala sena biżestili, u dan ġie ripetut fedelment f'Excel. U peress li dan żied jum wieħed mas-sena 1900, ħafna funzjonijiet ta 'kalkolu tad-data jistgħu jkunu żbaljati għal dik il-ġurnata stess. Jiġifieri, 39082 seta’ kien l-1 ta’ Jannar 2011 (fuq il-Macs) jew il-31 ta’ Diċembru, 2006 (fuq il-Windows). Jekk "year parser" tiegħi estratt is-sena 2011 mill-valur ifformattjat, allura kollox huwa tajjeb. Iżda peress li l-parser ta 'Excel ma jafx liema epoch qed jintuża, huwa default għal epoch-1900, li jirritorna s-sena 2006. L-applikazzjoni tiegħi rat li d-differenza kienet ta '5 snin, qiesha żball, illoggjatha, u rritornat valur mhux ifformattjat.

Biex nidħol minn dan, ktibt dan (psewdocode):

diff = formatted_year - parsed_year
if 0 == diff
    assume 1900 date system
if 4 == diff
    assume 1904 date system
if 5 == diff and month is December and day is 31
    assume 1904 date system

U mbagħad l-40 data kollha ġew analizzati b'mod korrett.

Fin-nofs ta 'impjiegi stampati kbar

Fil-bidu tas-snin tmenin, missieri ħadem f’Stock Technology, diviżjoni li issa m’għadhiex taħdem li ħolqot tape drives u sistemi pnewmatiċi għal tape feeding b’veloċità għolja.

Huma ddisinjati mill-ġdid id-drajvs sabiex ikun jista 'jkollhom drive ċentrali "A" konness ma' seba 'drives "B", u l-OS żgħir fir-RAM li kkontrolla d-drajv "A" jista 'jiddelega operazzjonijiet ta' qari u kitba lid-drives "B" kollha.

Kull darba li nbeda d-drajv "A", kien meħtieġ li tiddaħħal floppy disk fil-drive periferali konnessa ma '"A" sabiex titgħabba s-sistema operattiva fil-memorja tagħha. Kien estremament primittiv: il-qawwa tal-kompjuter kienet ipprovduta minn mikrokontrollur ta '8-bit.

L-udjenza fil-mira għal tali tagħmir kienet kumpaniji b'imħażen tad-dejta kbar ħafna - banek, ktajjen tal-bejgħ bl-imnut, eċċ. - li kellhom bżonn jistampaw ħafna tikketti tal-indirizzi jew rendikonti bankarji.

Klijent wieħed kellu problema. Fin-nofs ta 'xogħol ta' l-istampar, drive partikolari "A" jista 'jieqaf jaħdem, u jikkawża l-waqfien tax-xogħol kollu. Biex tirrestawra l-operazzjoni tas-sewqan, il-persunal kellu jerġa 'jibda kollox. U jekk dan ġara f'nofs kompitu ta 'sitt sigħat, allura intilef ammont kbir ta' ħin għali tal-kompjuter u l-iskeda tal-operazzjoni kollha ġiet imfixkla.

Tekniċi intbagħtu minn Storage Technologies. Iżda minkejja l-aħjar sforzi tagħhom, ma setgħux jirriproduċu l-bug taħt kundizzjonijiet tat-test: deher li seħħ f'nofs xogħlijiet ta 'stampar kbir. Il-problema ma kinitx il-ħardwer, issostitwixxew dak kollu li setgħu: RAM, mikrokontrollur, floppy drive, kull parti konċepibbli tat-tape drive - il-problema baqgħet tippersisti.

Imbagħad it-tekniċi sejħu l-kwartieri ġenerali u ċempel lill-Espert.

L-espert qabad siġġu u kikkra kafè, qagħad fil-kamra tal-kompjuter—f’dawk il-jiem kien hemm kmamar ddedikati għall-kompjuters—u ra kif l-istaff ipoġġi fil-kju xogħol ta’ stampar kbir. L-espert kien qed jistenna li jseħħ nuqqas - u hekk għamel. Kulħadd ħares lejn l-Espert, iżda ma kellux idea għaliex ġara dan. Għalhekk ordna li l-impjieg jerġa’ jitqiegħed fil-kju, u l-istaff u t-tekniċi kollha reġgħu lura għax-xogħol.

L-espert reġa’ poġġa bilqiegħda fis-siġġu u beda jistenna għal falliment. Għaddew madwar sitt sigħat u l-falliment seħħ. L-Espert reġa’ kellu l-ebda ideat, ħlief li kollox ġara f’kamra mimlija nies. Ordna li l-missjoni terġa’ tinbeda, poġġa lura u stenna.

Sat-tielet falliment, l-Espert innota xi ħaġa. Il-falliment seħħ meta l-persunal biddel tejps f'sewqan barrani. Barra minn hekk, in-nuqqas seħħ hekk kif wieħed mill-impjegati għadda minn ċertu madum fuq l-art.

L-art mgħollija kienet magħmula minn madum tal-aluminju mqiegħda f'għoli ta '6 sa 8 pulzieri. Bosta wajers mill-kompjuters damu taħt l-art mgħollija biex jipprevjenu lil xi ħadd milli aċċidentalment iżżid kejbil importanti. Il-madum tpoġġa sewwa ħafna biex jipprevjeni li d-debris jidħol taħt l-art mgħollija.

L-espert induna li waħda mill-madum kienet deformata. Meta impjegat ħarġet fuq il-kantuniera tiegħu, it-truf tal-madum jingħorok mal-madum li jmissu magħhom. Il-partijiet tal-plastik li konnessi l-madum ukoll jingħorok magħhom, li kkawża mikroskariki statiċi li ħolqu interferenza tal-frekwenza tar-radju.

Illum, RAM hija protetta ħafna aħjar minn interferenza tal-frekwenza tar-radju. Imma f’dawk is-snin dan ma kienx il-każ. L-espert induna li din l-interferenza ħarbat il-memorja, u magħha t-tħaddim tas-sistema operattiva. Huwa ċempel lis-servizz ta 'appoġġ, ordna madum ġdid, installahom hu stess, u l-problema sparixxa.

Hija l-marea għolja!

L-istorja seħħet f’kamra tas-server, fir-raba’ jew il-ħames sular ta’ uffiċċju f’Portsmouth (naħseb), fiż-żona tal-baċiri.

Ġurnata waħda s-server Unix bid-database prinċipali ġġarraf. Reboot lilu, iżda hu kuntent kompla jaqa 'mill-ġdid u għal darb'oħra. Iddeċidejna li nċemplu lil xi ħadd mis-servizz ta’ appoġġ.

Il-bniedem tal-appoġġ... Naħseb li kien jismu Mark, imma dan ma jimpurtax... ma naħsibx li naf lilu. Ma jimpurtax, tassew. Ejja nżommu ma' Mark, okay? Kbir.

Allura, ftit sigħat wara wasal Mark (mhix triq twila minn Leeds sa Portsmouth, taf), xegħel is-server u kollox ħadem mingħajr problemi. Appoġġ kkritikat tipiku, il-klijent jitħawwad ħafna dwar dan. Mark iħares fil-log files u ma jsib xejn ħażin. Allura Mark jerġa’ jitla’ fuq il-ferrovija (jew ikun xi jkun il-mezz ta’ trasport li wasal fuqu, setgħet kienet baqra zoppa għal kull ma naf... xorta waħda, ma jimpurtax, okay?) u jmur lura lejn Leeds, wara li ħela. il-gurnata.

Dakinhar stess filgħaxija s-server jerġa’ jaħbat. L-istorja hija l-istess... is-server ma jogħlax. Mark jipprova jgħin mill-bogħod, iżda l-klijent ma jistax jibda s-server.

Ferrovija oħra, karozza tal-linja, meringue tal-lumi jew xi ħażin ieħor, u Mark huwa lura Portsmouth. Ara, is-server boots mingħajr problemi! Miraklu. Mark iqatta’ diversi sigħat jiċċekkja li kollox huwa fl-ordni mas-sistema operattiva jew is-software u jitlaq lejn Leeds.

Madwar nofs il-ġurnata s-server jiġġarraf (ħuha faċli!). Din id-darba jidher raġonevoli li ġġib in-nies ta 'appoġġ tal-ħardwer biex jissostitwixxu s-server. Imma le, wara madwar 10 sigħat taqa’ wkoll.

Is-sitwazzjoni rrepetiet ruħha għal diversi jiem. Is-server jaħdem, jiġġarraf wara madwar 10 sigħat u ma jibdax għas-sagħtejn li ġejjin. Iċċekkjaw it-tkessiħ, tnixxijiet tal-memorja, iċċekkjaw kollox, iżda ma sabu xejn. Imbagħad il-ħabtiet waqfu.

Il-ġimgħa għaddiet bla ħsieb... kulħadd kien ferħan. Ferħan sakemm jerġa' jibda kollox. L-istampa hija l-istess. 10 sigħat xogħol, 2-3 sigħat waqfien...

U mbagħad xi ħadd (naħseb li qalli li din il-persuna ma kellha x'taqsam xejn mal-IT) qal:

"Huwa l-marea!"

L-exclamation intlaqgħet b'ħarsa vojta, u l-idejn ta 'xi ħadd probabbilment eżita fuq il-buttuna tas-sejħa tas-sigurtà.

"Jieqaf jaħdem mal-marea."

Dan jidher li huwa kunċett kompletament barrani għall-ħaddiema li jappoġġjaw l-IT, li x'aktarx ma jaqrawx it-Tide Yearbook waqt li joqogħdu bilqiegħda għall-kafè. Spjegaw li dan ma jista’ jkun relatat mal-marea bl-ebda mod, għax is-server kien ilu ġimgħa jaħdem mingħajr fallimenti.

"Il-ġimgħa li għaddiet il-marea kienet baxxa, iżda din il-ġimgħa hija għolja."

Ftit terminoloġija għal min m’għandux liċenzja tal-jottijiet. Il-maread jiddependu fuq iċ-ċiklu lunar. U hekk kif id-Dinja ddur, kull 12,5 siegħa l-ġibda gravitazzjonali tax-Xemx u l-Qamar toħloq mewġa tal-marea. Fil-bidu taċ-ċiklu ta '12,5 siegħa hemm marea għolja, f'nofs iċ-ċiklu jkun hemm rifluss, u fl-aħħar jerġa' jkun hemm marea għolja. Imma hekk kif l-orbita tal-qamar tinbidel, hekk ukoll tagħmel id-differenza bejn il-marea baxxa u dik għolja. Meta l-Qamar ikun bejn ix-Xemx u d-Dinja jew fuq in-naħa opposta tad-Dinja (full moon jew l-ebda qamar), ikollna l-mareat Syzygyn - l-ogħla marea għolja u l-inqas marea baxxa. F'nofs qamar ikollna mareat kwadratura - l-iktar mareat baxx. Id-differenza bejn iż-żewġ estremi tonqos ħafna. Iċ-ċiklu lunar idum 28 jum: syzygian - quadrature - syzygian - quadrature.

Meta t-tekniċi ġew spjegati l-essenza tal-forzi tal-marea, mill-ewwel ħasbu li kellhom bżonn iċemplu lill-pulizija. U pjuttost loġiku. Imma jirriżulta li t-raġel kellu raġun. Ġimagħtejn qabel, destroyer irmiġġa mhux 'il bogħod mill-uffiċċju. Kull darba li l-marea għollitha sa ċertu għoli, il-post tar-radar tal-vapur spiċċat fil-livell tal-art tal-kamra tas-server. U r-radar (jew tagħmir elettroniku tal-gwerra, jew xi ġugarell militari ieħor) ħoloq kaos fil-kompjuters.

Missjoni tat-titjira għar-rokit

Kelli l-kompitu li ntrasferixxi sistema ta 'kontroll u monitoraġġ tal-varar rokit kbir (madwar 400 elf linja) għal verżjonijiet ġodda tas-sistema operattiva, il-kompilatur u l-lingwa. B'mod aktar preċiż, minn Solaris 2.5.1 għal Solaris 7, u mis-Sistema ta' Żvilupp Verdix Ada (VADS), miktuba f'Ada 83, għas-sistema Rational Apex Ada, miktuba f'Ada 95. VADS inxtara minn Rational, u l-prodott tiegħu kien skaduti, għalkemm Rational ipprova jimplimenta verżjonijiet kompatibbli ta 'pakketti speċifiċi għall-VADS biex ittaffi t-tranżizzjoni għall-kompilatur Apex.

Tliet persuni għenuni biss nikseb il-kodiċi miġbura b'mod nadif. Ħadu ġimgħatejn. U mbagħad ħdimt waħdi biex is-sistema taħdem. Fil-qosor, kienet l-agħar arkitettura u implimentazzjoni ta 'sistema ta' softwer li kont iltqajt magħhom, għalhekk ħadet xahrejn oħra biex jitlesta l-port. Is-sistema mbagħad ġiet sottomessa għall-ittestjar, li ħa diversi xhur oħra. Immedjatament ikkoreġejt il-bugs li nstabu waqt l-ittestjar, iżda n-numru tagħhom naqas malajr (il-kodiċi tas-sors kien sistema ta 'produzzjoni, għalhekk il-funzjonalità tagħha ħadmet b'mod pjuttost affidabbli, kelli biss inneħħi l-bugs li qamu waqt l-adattament għall-kompilatur il-ġdid). Eventwalment, meta kollox kien qed jaħdem kif suppost, ġejt trasferit għal proġett ieħor.

U nhar il-Ġimgħa qabel Radd il-Ħajr, it-telefon daqq.

It-tnedija tar-rokit suppost kellha tiġi ttestjata f'madwar tliet ġimgħat, u waqt it-testijiet tal-laboratorju tal-countdown, is-sekwenza tal-kmandi ġiet imblukkata. Fil-ħajja reali, dan ikun abort it-test, u jekk l-imblukkar seħħ fi ftit sekondi mill-bidu tal-magna, iseħħu diversi azzjonijiet irriversibbli fis-sistemi awżiljarji, li jkunu jeħtieġu prontezza twila - u għalja - tar-rokit. Ma kienx jibda, imma ħafna nies kienu jkunu mdejqa ħafna dwar it-telf ta 'ħin u ħafna, ħafna flus. Tħallix lil ħadd jgħidlek li d-Dipartiment tad-Difiża jonfoq il-flus b'mod imprudenti—Qatt ma ltqajt ma' maniġer tal-kuntratti li ma poġġax il-baġit l-ewwel jew it-tieni, segwit minn skeda.

Fix-xhur ta’ qabel, din l-isfida tal-countdown kienet twettqet mijiet ta’ darbiet f’ħafna varjazzjonijiet, bi ftit problemi żgħar biss. Allura l-probabbiltà li dan iseħħ kienet baxxa ħafna, iżda l-konsegwenzi tagħha kienu sinifikanti ħafna. Immoltiplika dawn iż-żewġ fatturi, u tifhem li l-aħbarijiet bassru ġimgħa ta 'vaganzi mħassra għalija u għal għexieren ta' inġiniera u maniġers.

U ingħatat attenzjoni lili bħala l-persuna li ġġarrab is-sistema.

Bħal fil-biċċa l-kbira tas-sistemi kritiċi għas-sigurtà, ġew irreġistrati ħafna parametri, għalhekk kien pjuttost faċli li jiġu identifikati l-ftit linji ta 'kodiċi li ġew esegwiti qabel ma ġġarraf is-sistema. U ovvjament, ma kien hemm assolutament xejn mhux tas-soltu dwarhom; l-istess espressjonijiet kienu ġew eżegwiti b'suċċess litteralment eluf ta 'darbiet matul l-istess ġirja.

Aħna sejħu lin-nies minn Apex għal Rational għax kienu huma li żviluppaw il-kompilatur u xi wħud mir-rutini li żviluppaw issejħu fil-kodiċi suspettuż. Huma (u kulħadd) kienu impressjonati li kien hemm bżonn li wieħed jasal fl-għerq ta’ problema ta’ importanza litteralment nazzjonali.

Peress li ma kien hemm xejn interessanti fil-ġurnali, iddeċidejna li nippruvaw nirriproduċu l-problema f'laboratorju lokali. Din ma kinitx biċċa xogħol faċli peress li l-avveniment seħħ bejn wieħed u ieħor darba għal kull 1000 ġirja. Raġuni waħda suspettata kienet li sejħa għal funzjoni mutex żviluppata mill-bejjiegħ (parti mill-pakkett tal-migrazzjoni VADS) Unlock ma wassalx għall-ftuħ. Il-ħajt tal-ipproċessar li sejjaħ il-funzjoni pproċessa messaġġi ta 'taħbit tal-qalb, li nominalment waslu kull sekonda. Għolja l-frekwenza għal 10 Hz, jiġifieri 10 darbiet kull sekonda, u bdejna niġru. Madwar siegħa wara s-sistema ssakkar lilha nnifisha. Fil-ġurnal, rajna li s-sekwenza tal-messaġġi rreġistrati kienet l-istess bħal waqt it-test li falla. Għamilna diversi ġirjiet oħra, is-sistema kienet imblukkata b'mod konsistenti 45-90 minuta wara l-bidu, u kull darba l-ġurnal kien fih l-istess rotta. Anke jekk teknikament konna qed inħaddmu kodiċi differenti - il-frekwenza tal-messaġġ kienet differenti - l-imġieba tas-sistema kienet l-istess, għalhekk konna kunfidenti li dan ix-xenarju tat-tagħbija kien qed jikkawża l-istess problema.

Issa kellna bżonn biex insemmu fejn eżattament l-imblukkar seħħ fis-sekwenza ta 'espressjonijiet.

Din l-implimentazzjoni tas-sistema użat is-sistema tal-kompitu Ada, u użatha oerhört ħażin. Il-kompiti huma kostruzzjoni ta 'livell għoli eżekutibbli fl-istess ħin f'Ada, xi ħaġa bħal ħjut ta' eżekuzzjoni, mibnija biss fil-lingwa nnifisha. Meta żewġ ħidmiet jeħtieġ li jikkomunikaw, huma "jiffissaw rendezvous", jiskambjaw id-dejta meħtieġa, u mbagħad iwaqqfu l- rendezvous u jirritornaw għall-eżekuzzjonijiet indipendenti tagħhom. Madankollu, is-sistema ġiet implimentata b'mod differenti. Wara li kompitu fil-mira kien rendezvous, dak il-kompitu fil-mira rendezvoused ma 'kompitu ieħor, li mbagħad rendezvoused mat-tielet kompitu, u l-bqija sakemm xi proċessar tlesta. Wara dan, dawn il- rendezvous kollha tlestew u kull kompitu kellu jerġa 'lura għall-eżekuzzjoni tiegħu. Jiġifieri, konna qed nittrattaw is-sistema ta 'sejħa ta' funzjoni l-aktar għalja fid-dinja, li waqqfet il-proċess kollu ta '"multitasking" waqt li pproċessat parti mid-dejta tal-input. U qabel dan ma wassalx għal problemi biss minħabba li t-throughput kien baxx ħafna.

Iddeskriviejt dan il-mekkaniżmu tal-kompitu għax meta kien mitlub jew mistenni li jitlesta rendezvous, jista' jseħħ "swiċċ tal-kompitu". Jiġifieri, il-proċessur jista 'jibda jipproċessa kompitu ieħor li huwa lest biex jiġi eżegwit. Jirriżulta li meta kompitu wieħed ikun lest biex rendezvous ma 'kompitu ieħor, kompitu kompletament differenti jista' jibda eżekuzzjoni, u eventwalment ritorni ta 'kontroll għall-ewwel rendezvous. U avvenimenti oħra jistgħu jseħħu li jikkawżaw li l-kompitu jinbidel; avveniment wieħed bħal dan huwa sejħa għal funzjoni tas-sistema, bħall-istampar jew l-eżekuzzjoni ta 'mutex.

Biex nifhem liema linja ta 'kodiċi kienet qed tikkawża l-problema, kelli nsib mod biex nirreġistra l-progress permezz ta' sekwenza ta 'dikjarazzjonijiet mingħajr ma niskatta swiċċ tal-kompitu, li jipprevjeni ħabta milli sseħħ. Allura ma stajtx nieħu vantaġġ Put_Line()biex tevita li twettaq operazzjonijiet I/O. Nista' nissettja kont varjabbli jew xi ħaġa simili, imma kif nista' nara l-valur tagħha jekk ma nistax nuriha fuq l-iskrin?

Barra minn hekk, meta eżamina r-reġistru, irriżulta li, minkejja l-iffriżar fl-ipproċessar tal-messaġġi ta 'taħbit tal-qalb, li mblokka l-operazzjonijiet kollha I/O tal-proċess u pprevjeniet li jitwettaq ipproċessar ieħor, kompiti indipendenti oħra komplew jiġu esegwiti. Jiġifieri, ix-xogħol ma kienx imblukkat għal kollox, biss katina (kritika) ta 'kompiti.

Dan kien il-ħjiel meħtieġ biex tiġi evalwata l-espressjoni li timblokka.

Għamilt pakkett Ada li kien fih kompitu, tip enumerat, u varjabbli globali ta 'dak it-tip. Litterali numerużi kienu marbuta ma' espressjonijiet speċifiċi tas-sekwenza problematika (eż. Incrementing_Buffer_Index, Locking_Mutex, Mutex_Unlocked), u mbagħad daħħal fiha espressjonijiet ta' assenjazzjoni li assenjaw l-enumerazzjoni korrispondenti għal varjabbli globali. Peress li l-kodiċi tal-oġġett ta 'dan kollu sempliċement ħażen kostanti fil-memorja, il-bidla tal-kompitu bħala riżultat tal-eżekuzzjoni tagħha kienet estremament improbabbli. Konna primarjament suspettużi ta 'espressjonijiet li jistgħu jaqilbu l-kompitu, peress li l-imblukkar seħħ mal-eżekuzzjoni aktar milli lura meta jaqleb il-kompitu lura (għal diversi raġunijiet).

Il-kompitu tat-traċċar sempliċement dam f'linja u perjodikament iċċekkjat biex tara jekk il-valur tal-varjabbli globali kienx inbidel. Ma' kull bidla, il-valur ġie ssejvjat f'fajl. Imbagħad stennija qasira u kontroll ġdid. Jien ktibt il-varjabbli fil-fajl minħabba li l-kompitu ġie esegwit biss meta s-sistema għażletha għall-eżekuzzjoni meta taqleb il-kompitu fiż-żona problematika. Kwalunkwe ġara f'dan il-kompitu ma jaffettwax ħidmiet imblukkati oħra mhux relatati.

Kien mistenni li meta s-sistema tilħaq il-punt li tesegwixxi l-kodiċi problematiku, il-varjabbli globali tiġi reset meta timxi għal kull espressjoni li jmiss. Imbagħad se jiġri xi ħaġa li tikkawża li l-kompitu jinbidel, u peress li l-frekwenza tal-eżekuzzjoni tiegħu (10 Hz) hija inqas minn dik tal-kompitu ta 'monitoraġġ, il-monitor jista' jaqbad il-valur tal-varjabbli globali u jiktebha. F'sitwazzjoni normali, nista 'nikseb sekwenza ripetuta ta' subsett ta 'enumerazzjonijiet: l-aħħar valuri tal-varjabbli fil-ħin tal-bidla tal-kompitu. Meta mdendla, il-varjabbli globali m'għandhiex tinbidel aktar, u l-aħħar valur miktub se jindika liema espressjoni ma tlestietx.

I dam il-kodiċi bit-traċċar. Huwa ffriżat. U l-monitoraġġ ħadem bħal arloġġ.

Ir-reġistru kien fih is-sekwenza mistennija, li ġiet interrotta b'valur li jindika li kien imsejjaħ mutex Unlock, u l-kompitu ma jitlestax - kif inhu l-każ b'eluf ta 'sejħiet preċedenti.

L-inġiniera Apex kienu qed janalizzaw b'deni l-kodiċi tagħhom f'dan il-ħin u sabu post fil-mutex fejn, teoretikament, jista 'jseħħ lock. Iżda l-probabbiltà tagħha kienet baxxa ħafna, peress li ċerta sekwenza biss ta 'avvenimenti li jseħħu f'ċertu ħin tista' twassal għall-imblukkar. Il-Liġi ta’ Murphy, guys, hija l-Liġi ta’ Murphy.

Biex nipproteġi l-biċċa kodiċi li kelli bżonn, biddel is-sejħiet tal-funzjoni mutex (mibnija fuq il-funzjonalità tal-mutex tal-OS) b'pakkett żgħir nattiv Ada mutex biex jikkontrolla l-aċċess mutex għal dik il-biċċa.

Daħħlitha fil-kodiċi u għamilt it-test. Seba' sigħat wara l-kodiċi kien għadu jaħdem.

Il-kodiċi tiegħi ġie sottomess lil Rational, fejn ġabruh, żarmawh, u ċċekkjaw li ma użax l-istess approċċ li ntuża fil-funzjonijiet mutex problematiċi.

Din kienet l-aktar reviżjoni tal-kodiċi iffullar tal-karriera tiegħi 🙂 Kien hemm madwar għaxar inġiniera u maniġers fil-kamra miegħi, għaxar persuni oħra kienu fuq telefonata konferenza - u kollha eżaminaw madwar 20 linja ta 'kodiċi.

Il-kodiċi ġie rivedut, fajls eżekutibbli ġodda ġew assemblati u sottomessi għall-ittestjar ta 'rigressjoni formali. Ftit ġimgħat wara, it-test tal-countdown kien suċċess u r-rokit telaq.

Okay, dak kollu tajjeb u tajjeb, imma x'inhu l-punt tal-istorja?

Kienet problema assolutament disgusting. Mijiet ta 'eluf ta' linji ta 'kodiċi, eżekuzzjoni parallela, aktar minn tużżana proċessi ta' interazzjoni, arkitettura fqira u implimentazzjoni fqira, interfaces għal sistemi inkorporati u miljuni ta 'dollari minfuqa. Ebda pressjoni, id-dritt.

Jien ma kontx l-uniku wieħed li qed jaħdem fuq din il-problema, għalkemm kont fil-attenzjoni hekk kif kont qed nagħmel il-porting. Iżda minkejja li għamilt dan, dan ma jfissirx li fhimt il-mijiet ta 'eluf ta' linji ta 'kodiċi, jew saħansitra xkumathom. Il-kodiċi u z-zkuk ġew analizzati minn inġiniera madwar il-pajjiż kollu, iżda meta qaluli l-ipoteżi tagħhom dwar il-kawżi tal-falliment, domt biss nofs minuta biex niċħadhom. U meta ġejt mitlub nanalizza t-teoriji, kont ngħaddiha lil xi ħadd ieħor, għax kien ovvju għalija li dawn l-inġiniera kienu sejrin fit-triq ħażina. Ħoss preżuntuż? Iva, dan huwa minnu, imma rrifjutajt l-ipoteżijiet u t-talbiet għal raġuni oħra.

Fhimt in-natura tal-problema. Ma kontx naf eżatt fejn kien qed jiġri jew għaliex, imma kont naf x’qed jiġri.

Matul is-snin, akkumulajt ħafna għarfien u esperjenza. Jien kont wieħed mill-pijunieri li nuża Ada u fhimt il-vantaġġi u l-iżvantaġġi tagħha. Naf kif il-libreriji tar-runtime Ada jimmaniġġjaw il-kompiti u jittrattaw l-eżekuzzjoni parallela. U nifhem programmar ta 'livell baxx fil-livell ta' memorja, reġistri u assemblatur. Fi kliem ieħor, għandi għarfien profond fil-qasam tiegħi. U użajthom biex insib il-kawża tal-problema. Jien ma ħdimtx biss madwar il-bug, fhimt kif insibha f'ambjent runtime sensittiv ħafna.

Stejjer bħal dawn ta 'ġlieda mal-kodiċi mhumiex interessanti ħafna għal dawk li mhumiex familjari mal-karatteristiċi u l-kundizzjonijiet ta' ġlieda bħal din. Iżda dawn l-istejjer jgħinuna nifhmu x’hemm bżonn biex insolvu problemi tassew diffiċli.

Biex issolvi problemi verament iebsa, trid tkun aktar minn sempliċiment programmatur. Trid tifhem id-“destin” tal-kodiċi, kif jinteraġixxi mal-ambjent tiegħu, u kif jaħdem l-ambjent innifsu.

U allura jkollok il-ġimgħa tal-vaganzi ruined tiegħek stess.

Għandha titkompla.

Sors: www.habr.com

Żid kumment