Folklore sa mga programmer ug inhenyero (bahin 1)

Folklore sa mga programmer ug inhenyero (bahin 1)

Kini usa ka pagpili sa mga istorya gikan sa Internet kung giunsa ang mga bug usahay adunay hingpit nga dili katuohan nga mga pagpakita. Basin duna kay isulti usab.

Allergy sa sakyanan sa vanilla ice cream

Usa ka istorya alang sa mga inhenyero nga nakasabut nga ang klaro dili kanunay ang tubag, ug nga bisan kung unsa ka layo ang mga kamatuoran ingon og, sila gihapon ang mga kamatuoran. Ang Pontiac Division sa General Motors Corporation nakadawat og reklamo:

Kini ang ikaduhang higayon nga nagsulat ako kanimo, ug dili ko ikaw mabasol nga wala ka motubag, tungod kay morag buang. Ang among pamilya adunay tradisyon sa pagkaon og ice cream kada gabii human sa panihapon. Ang mga klase sa ice cream mag-usab-usab sa matag higayon, ug human sa panihapon, ang tibuok pamilya mopili kon unsa nga ice cream ang paliton, human niana moadto ko sa tindahan. Bag-o lang ko nakapalit og bag-ong Pontiac ug sukad niadto nahimong problema ang akong mga biyahe sa pagkuha og ice cream. Tan-awa, matag higayon nga mopalit ko og vanilla ice cream ug mobalik gikan sa tindahan, ang sakyanan dili moandar. Kon magdala kog laing ice cream, moandar ang sakyanan nga walay problema. Gusto kong mangutana usa ka seryoso nga pangutana, bisan unsa pa ka kabuang: "Unsa man ang bahin sa Pontiac nga dili kini magsugod kung magdala ako og vanilla ice cream, apan dali magsugod kung magdala ako usa ka lami sa ice cream?" "

Sama sa imong mahanduraw, ang presidente sa dibisyon nagduhaduha bahin sa sulat. Pero, in case lang, nagpadala kog engineer para magsusi. Natingala siya nga gisugat siya sa usa ka adunahan, edukado nga tawo nga nagpuyo sa usa ka matahum nga lugar. Nagsabot sila nga magkita dayon inigkahuman sa panihapon para adto silang duha sa tindahan para mag ice cream. Nianang gabhiona kadto vanilla, ug sa dihang sila mibalik sa sakyanan, kini dili moandar.

Miabot ang enhinyero tulo pa ka gabii. Ang unang higayon nga ang ice cream kay tsokolate. Misugod ang sakyanan. Ang ikaduha nga higayon adunay strawberry ice cream. Misugod ang sakyanan. Sa ikatulo nga gabii siya mihangyo sa pagkuha sa vanilla. Wala moandar ang sakyanan.

Nangatarongan nga makatarunganon, ang engineer nagdumili sa pagtuo nga ang awto adunay alerdyik sa vanilla ice cream. Busa, misugot ko sa tag-iya sa sakyanan nga padayunon niya ang iyang mga pagbisita hangtod nga makakita siyag solusyon sa problema. Ug sa dalan, nagsugod siya sa pagkuha og mga nota: gisulat niya ang tanang impormasyon, oras sa adlaw, tipo sa gasolina, oras sa pag-abot ug pagbalik gikan sa tindahan, ug uban pa.

Wala madugay naamgohan sa enhinyero nga ang tag-iya sa sakyanan migugol ug gamayng panahon sa pagpalit ug vanilla ice cream. Ang hinungdan mao ang layout sa mga butang sa tindahan. Ang vanilla ice cream mao ang pinakasikat ug gitago sa separadong freezer sa atubangan sa tindahan aron mas sayon ​​pangitaon. Ug ang tanan nga uban pang mga lahi naa sa luyo sa tindahan, ug nagkinahanglag daghang oras aron makit-an ang husto nga klase ug bayad.

Karon ang pangutana alang sa inhenyero: ngano nga wala magsugod ang awto kung gamay ra ang oras nga milabay sukad nga gipalong ang makina? Tungod kay ang problema mao ang panahon, dili vanilla ice cream, ang enhinyero dali nga nakakaplag sa tubag: kini usa ka gas lock. Nahitabo kini kada gabii, apan sa dihang ang tag-iya sa sakyanan migugol ug dugang nga panahon sa pagpangitag ice cream, ang makina daling mobugnaw ug daling moandar. Ug sa dihang mipalit ang lalaki og vanilla ice cream, init pa kaayo ang makina ug wala nay panahon nga matunaw ang gas lock.

Moral: Bisan ang bug-os nga buang nga mga problema usahay tinuod.

crash bandicoot

Sakit kaayo ma experience ani. Isip usa ka programmer, naanad ka sa pagbasol sa imong code una, ikaduha, ikatulo... ug sa usa ka dapit sa ika-napulo ka libo nga dapit imong gibasol ang compiler. Ug sa unahan sa listahan gibasol na nimo ang kagamitan.

Ania ang akong istorya bahin sa bug sa hardware.

Alang sa dula nga Crash Bandicoot, nagsulat ko og code aron i-load ug i-save sa usa ka memory card. Alang sa ingon nga usa ka madasigon nga developer sa dula, kini sama sa usa ka paglakaw sa parke: Naghunahuna ko nga ang trabaho molungtad og pipila ka mga adlaw. Bisan pa, gitapos nako ang pag-debug sa code sulod sa unom ka semana. Sa dalan, akong nasulbad ang ubang mga problema, apan matag pipila ka adlaw mobalik ko niini nga code sulod sa pipila ka oras. Kasakit kadto.

Ang simtoma ingon niini: kung imong gitipigan ang kasamtangan nga playthrough sa dula ug gi-access ang memory card, ang tanan halos kanunay nga maayo ... Apan usahay ang pagbasa o pagsulat sa mga oras sa operasyon sa walay klaro nga rason. Ang usa ka mubo nga pagrekord sagad makadaot sa memory card. Kung ang usa ka magdudula mosulay sa pagluwas, dili lamang siya mapakyas sa pagluwas, apan gilaglag usab ang mapa. Kabuang.

Pagkataudtaod, ang among prodyuser sa Sony, si Connie Bus, nagsugod sa kalisang. Dili namo mapadala ang dula nga adunay kini nga bug, ug unom ka semana ang milabay wala nako masabti kung unsa ang hinungdan sa problema. Pinaagi ni Connie, nakontak namo ang ubang mga developer sa PS1: aduna bay nakasugat og susama? Dili. Walay usa nga adunay problema sa memory card.

Kung wala ka'y ​​ideya alang sa pag-debug, ang nahabilin nga paagi mao ang "pagbahinbahin ug pagbuntog": kuhaa ang dugang ug dugang nga code gikan sa sayup nga programa hangtod adunay gamay nga tipik nga nahabilin nga hinungdan sa problema. Sa ato pa, imong putlon ang programa nga tipik sa piraso hangtod magpabilin ang bahin nga adunay sulud.

Apan ang butang mao, lisud kaayo ang pagputol sa mga tipik sa usa ka video game. Giunsa kini pagdagan kung imong gitangtang ang code nga nagsundog sa grabidad? O pagdrowing og mga karakter?

Busa, kinahanglan natong ilisan ang tibuok nga mga module sa mga stubs nga nagpakaaron-ingnon nga nagbuhat sa usa ka butang nga mapuslanon, apan sa pagkatinuod pagbuhat sa usa ka butang nga yano kaayo nga dili adunay mga sayup. Kinahanglan namon nga isulat ang ingon nga mga crutches alang sa dula nga labing menos molihok. Kini usa ka hinay ug sakit nga proseso.

Sa laktod, akong gibuhat. Gikuha nako ang daghang mga piraso sa code hangtod nga nabilin ako sa inisyal nga code nga nag-configure sa sistema sa pagpadagan sa dula, nag-initialize sa hardware sa pag-render, ug uban pa. Siyempre, niining yugtoa dili ko makahimo ug save ug load menu, tungod kay kinahanglan kong maghimo ug stub para sa tanang graphics code. Apan mahimo kong magpakaaron-ingnon nga usa ka tiggamit gamit ang (dili makita) nga save ug load screen ug mohangyo nga i-save ug dayon magsulat sa memory card.

Nagbilin kini kanako og usa ka gamay nga piraso sa code nga aduna pa'y problema sa ibabaw - apan kini nahitabo gihapon nga random! Kasagaran ang tanan nagtrabaho nga maayo, apan usahay adunay mga glitches. Gitangtang nako ang hapit tanan nga code sa dula, apan ang bug buhi gihapon. Kini nakapalibog: ang nahabilin nga code wala gyud makahimo bisan unsa.

Sa usa ka punto, tingali mga alas tres sa buntag, usa ka hunahuna ang misantop kanako. Ang pagbasa ug pagsulat (input/output) nga mga operasyon naglakip sa tukma nga mga oras sa pagpatuman. Kung nagtrabaho ka gamit ang usa ka hard drive, memory card o Bluetooth module, ang ubos nga lebel nga code nga responsable sa pagbasa ug pagsulat mohimo niini pinauyon sa mga pulso sa orasan.

Sa tabang sa usa ka orasan, ang usa ka aparato nga dili direktang konektado sa processor gi-synchronize sa code nga gipatuman sa processor. Ang orasan nagtino sa baud rate—ang gikusgon sa pagbalhin sa datos. Kung adunay kalibog sa mga timing, nan ang hardware o ang software, o ang duha, naglibog usab. Ug kini daotan kaayo, tungod kay ang datos mahimong madaot.

Unsa kaha kung adunay usa ka butang sa among code nga naglibog sa mga oras? Akong gisusi ang tanan nga may kalabutan niini sa test program code ug nakamatikod nga among gitakda ang programmable timer sa PS1 ngadto sa 1 kHz (1000 ticks kada segundo). Daghan kaayo kini; pinaagi sa default, kung magsugod ang console, modagan kini sa 100 Hz. Ug kadaghanan sa mga dula naggamit niini nga frequency.

Si Andy, ang developer sa dula, nagbutang sa timer sa 1 kHz aron mas tukma nga makalkula ang mga paglihok. Si Andy lagmit nga molapas sa dagat, ug kung atong sundon ang grabidad, buhaton nato kini sa tukma kutob sa mahimo!

Apan unsa man kon ang pagpadali sa timer sa usa ka paagi makaapekto sa kinatibuk-ang timing sa programa, ug busa ang orasan nga nag-regulate sa baud rate alang sa memory card?

Nagkomento ko sa timer code. Ang sayop wala na mahitabo pag-usab. Apan wala kini magpasabot nga giayo namo kini, tungod kay ang kapakyasan nahitabo nga random. Unsa kaha kung swerte lang ko?

Paglabay sa pipila ka adlaw nag-eksperimento na usab ako sa programa sa pagsulay. Wala na nibalik ang bug. Mibalik ko sa bug-os nga game codebase ug giusab ang save ug load code aron ang programmable timer ma-reset sa orihinal nga bili niini (100Hz) sa dili pa ma-access ang memory card, ug dayon i-reset balik sa 1kHz. Wala nay nahagsa.

Apan nganong nahitabo kini?

Mibalik ko pag-usab sa programa sa pagsulay. Gisulayan nako nga makit-an ang pipila nga mga sumbanan kung adunay usa ka sayup nga adunay usa ka 1 kHz timer. Sa kadugayan akong namatikdan nga ang sayup mahitabo kung adunay usa nga nagdula sa usa ka PS1 controller. Tungod kay panagsa ra nako buhaton kini sa akong kaugalingon - ngano nga kinahanglan nako ang usa ka controller kung magsulay sa pagluwas ug pagkarga sa code? - Wala ko makamatikod niini nga pagsalig. Apan usa ka adlaw usa sa among mga artista naghulat nako nga mahuman ang pagsulay - tingali nagtunglo ako nianang higayuna - ug gikulbaan nga gikuot ang controller sa iyang mga kamot. Usa ka sayup ang nahitabo. “Wait, unsa?!” Aw, buhata kini pag-usab!”

Sa dihang akong naamgohan nga kining duha ka mga panghitabo nagkadugtong, dali nakong nahimo ang sayop: Gisugdan nako ang pagrekord sa memory card, gibalhin ang controller, ug giguba ang memory card. Para nako murag hardware bug.

Miadto ko kang Connie ug gisultihan siya bahin sa akong nadiskobrehan. Gihatag niya ang kasayuran sa usa sa mga inhenyero nga nagdisenyo sa PS1. “Imposible,” mitubag siya, “Dili kini problema sa hardware.” Gihangyo ko si Connie nga maghikay ug panag-estorya namo.

Gitawag ko sa engineer ug naglalis mi sa iyang broken English ug sa akong (sobrang) broken Japanese. Sa katapusan miingon ko, "Pasagdi lang ko nga ipadala ang akong 30 line test program diin ang paglihok sa controller hinungdan sa usa ka bug." Nisugot siya. Miingon nga kini usa ka pag-usik sa oras ug nga siya busy kaayo sa pagtrabaho sa usa ka bag-ong proyekto, apan motugyan tungod kay kami usa ka hinungdanon nga developer alang sa Sony. Akong gilimpyohan ang akong test program ug gipadala kini kaniya.

Pagkasunod gabii (naa mi sa Los Angeles ug naa siya sa Tokyo) nanawag siya nako ug nangayog pasaylo. Kini usa ka problema sa hardware.

Wala ko mahibal-an kung unsa gyud ang bug, apan gikan sa akong nadungog sa punoan nga punoan sa Sony, kung imong gibutang ang timer sa usa ka taas nga kantidad, kini nakabalda sa mga sangkap sa motherboard sa palibot sa kristal nga timer. Usa niini mao ang baud rate controller alang sa memory card, nga nagtakda usab sa baud rate alang sa mga controllers. Dili ko engineer, mao nga basin naa koy nagubot.

Apan ang hinungdan mao nga adunay pagpanghilabot tali sa mga sangkap sa motherboard. Ug kung dungan nga ipadala ang data pinaagi sa controller port ug ang memory card port nga adunay timer nga nagdagan sa 1 kHz, nawala ang mga bit, nawala ang data, ug nadaot ang card.

Dili maayo nga mga baka

Sa dekada 1980, ang akong magtutudlo nga si Sergei nagsulat og software para sa SM-1800, usa ka Soviet clone sa PDP-11. Kini nga microcomputer bag-o lang na-install sa usa ka estasyon sa tren duol sa Sverdlovsk, usa ka importanteng transport hub sa USSR. Ang bag-ong sistema gidesinyo sa pagruta sa mga karwahe ug trapiko sa kargamento. Apan kini adunay usa ka makalagot nga bug nga misangpot sa random crashes ug crashes. Ang pagkahulog kanunay mahitabo kung adunay mopauli sa gabii. Apan bisan pa sa usa ka bug-os nga imbestigasyon sa sunod nga adlaw, ang kompyuter nagtrabaho sa husto sa tanan nga manual ug awtomatiko nga mga pagsulay. Kasagaran kini nagpakita sa usa ka kondisyon sa lumba o uban pang bug sa kompetisyon nga mahitabo ubos sa pipila ka mga kondisyon. Gikapoy sa mga tawag sa lawom nga kagabhion, nakahukom si Sergei nga moadto sa ubos niini, ug una sa tanan, sabton kung unsa nga mga kondisyon sa marshalling yard ang misangpot sa pagkaguba sa kompyuter.

Una, gikolekta niya ang mga estadistika sa tanan nga wala mahibal-an nga pagkahulog ug naghimo usa ka graph sa petsa ug oras. Ang sumbanan klaro. Human sa pag-obserbar sa pipila ka mga adlaw, si Sergei nakaamgo nga dali ra niyang matagna ang panahon sa umaabot nga mga kapakyasan sa sistema.

Sa wala madugay nahibal-an niya nga ang mga pagkabalda nahitabo lamang sa dihang ang estasyon naghan-ay sa mga karga sa mga baka gikan sa amihanang Ukraine ug kasadpang Russia paingon sa duol nga ihawan. Kini sa iyang kaugalingon talagsaon, tungod kay ang ihawan gisuplay sa mga umahan nga nahimutang sa mas duol, sa Kazakhstan.

Ang nukleyar nga planta sa Chernobyl mibuto niadtong 1986, ug ang radioactive fallout naghimo sa palibot nga mga dapit nga dili na mapuy-an. Ang dagkong mga lugar sa amihanang Ukraine, Belarus ug kasadpang Russia nahugawan. Nagduda nga taas ang lebel sa radyasyon sa nangabot nga mga karwahe, si Sergei nakahimog paagi sa pagsulay niini nga teoriya. Ang populasyon gidid-an sa pagbaton ug mga dosimeter, mao nga si Sergei nagparehistro sa iyang kaugalingon uban sa daghang mga sundalo sa estasyon sa tren. Human sa pipila ka mga ilimnon sa vodka, nakahimo siya sa pagkombinsir sa usa ka sundalo sa pagsukod sa lebel sa radiation sa usa sa mga kadudahang mga karwahe. Nahibal-an nga ang lebel daghang beses nga mas taas kaysa sa normal nga mga kantidad.

Dili lamang ang mga baka nagpagawas ug daghang radiation, ang lebel niini taas kaayo nga misangpot sa random nga pagkawala sa mga piraso sa memorya sa SM-1800, nga nahimutang sa usa ka bilding tupad sa estasyon.

Adunay kanihit sa pagkaon sa USSR, ug ang mga awtoridad mihukom sa pagsagol sa karne sa Chernobyl sa karne gikan sa ubang mga rehiyon sa nasod. Kini nagpaposible sa pagpakunhod sa kinatibuk-ang lebel sa radioactivity nga dili mawad-an sa bililhong mga kahinguhaan. Kay nahibal-an kini, gipuno dayon ni Sergei ang mga dokumento alang sa paglalin. Ug ang mga pagkahagsa sa kompyuter mihunong sa ilang kaugalingon sa dihang ang lebel sa radiation mikunhod sa paglabay sa panahon.

Pinaagi sa mga tubo

Kaniadto, ang Movietech Solutions nagmugna og software para sa mga sinehan, nga gidisenyo alang sa accounting, ticket sales ug general management. Ang bersyon sa DOS sa punoan nga app popular kaayo sa gagmay ug tunga-tunga sa gidak-on nga mga sinehan nga kadena sa North America. Mao nga dili katingad-an nga kung gipahibalo ang usa ka bersyon sa Windows 95, gisagol sa labing bag-o nga mga touch screen ug mga kiosk sa serbisyo sa kaugalingon, ug nasangkapan sa tanan nga klase sa mga himan sa pagreport, dali usab kini nga nabantog. Kasagaran ang pag-update wala’y mga problema. Ang lokal nga kawani sa IT nag-instalar ug bag-ong kagamitan, migrate nga datos, ug nagpadayon ang negosyo. Gawas kon kini wala molungtad. Kung mahitabo kini, ipadala sa kompanya si James, gianggaan og "The Cleaner."

Bisan kung ang angga nagsugyot usa ka daotan nga tipo, ang tiglimpyo usa lamang ka kombinasyon sa instruktor, installer ug jack-of-all-trades. Si James mogugol ug pipila ka adlaw sa site sa kliyente nga maghiusa sa tanang mga sangkap, ug dayon mogugol ug laing duha ka adlaw sa pagtudlo sa mga kawani kon unsaon paggamit ang bag-ong sistema, pagsulbad sa bisan unsang mga problema sa hardware nga mitungha ug sa esensya nagtabang sa software hangtod sa iyang pagkamasuso.

Busa, dili katingad-an nga niining mga panahona, si James miabot sa opisina sa buntag, ug sa wala pa siya makaabot sa iyang lamesa, gisugat siya sa manedyer, nga puno sa caffeine nga labaw sa naandan.

"Nahadlok ko nga kinahanglan ka moadto sa Annapolis, Nova Scotia, sa labing madali." Ang ilang tibuuk nga sistema nahulog, ug pagkahuman sa usa ka gabii nga pagtrabaho kauban ang ilang mga inhenyero, dili namon mahibal-an kung unsa ang nahitabo. Morag napakyas ang network sa server. Apan pagkahuman nga nagdagan ang sistema sa pipila ka minuto.

— Wala ba sila mobalik sa daang sistema? - Seryoso kaayo nga tubag ni James, bisan og sa kaisipan iyang gipadako ang iyang mga mata sa katingala.

— Eksakto: ang ilang espesyalista sa IT "nagbag-o sa mga prayoridad" ug nakahukom nga mobiya kauban ang ilang daan nga server. James, ilang gi-install ang sistema sa unom ka mga site ug nagbayad lang alang sa premium nga suporta, ug ang ilang negosyo karon gipadagan sama sa 1950s.

Mibarog og gamay si James.

- Laing butang kana. Okay, sugdan na nato.

Pag-abot niya sa Annapolis, ang una niyang gibuhat mao ang pagpangita sa unang teatro sa kustomer nga adunay problema. Sa mapa nga gikuha sa airport, ang tanan tan-awon nga desente, apan ang lugar sa palibot sa gusto nga adres morag kadudahan. Dili ghetto, apan nagpahinumdom sa film noir. Samtang nagparking si James sa kurbada sa downtown, usa ka bigaon ang miduol kaniya. Tungod sa gidak-on sa Annapolis, lagmit nga kini lamang ang usa sa tibuok siyudad. Ang iyang panagway mipahinumdom dayon sa sikat nga karakter nga nagtanyag og sekso alang sa kuwarta sa dako nga screen. Dili, dili bahin kang Julia Roberts, kondili bahin kang Jon Voight [pasumbingay sa pelikula nga "Midnight Cowboy" - gibanabana. lane].

Sa pagpadala sa bigaon sa iyang dalan, si James miadto sa sinehan. Ang palibot nga lugar nahimong mas maayo, apan kini naghatag gihapon sa impresyon nga nadaganan. Dili kay nabalaka kaayo si James. Nakaadto na siya sa mga daotang lugar kaniadto. Ug kini ang Canada, diin bisan ang mga mugger matinahuron nga moingon "salamat" pagkahuman gikuha ang imong pitaka.

Ang kilid nga entrada sa sinehan diha sa usa ka dank alley. Milakaw si James sa pultahan ug nanuktok. Taud-taud nikibot kini ug miabli og gamay.

-Limpyo ka ba? - usa ka pagaw nga tingog gikan sa sulod.

- Oo, ako kini ... mianhi ako aron ayohon ang tanan.

Misulod si James sa lobby sa sinehan. Dayag nga walay laing kapilian, ang mga kawani nagsugod sa pagpanghatag og mga tiket sa papel ngadto sa mga bisita. Kini nakapalisud sa pagreport sa pinansyal, labi pa nga mas makapaikag nga mga detalye. Apan ang staff misugat kang James nga malipayon ug gidala dayon kini sa server room.

Sa unang tan-aw, maayo ra ang tanan. Nag-log in si James sa server ug gisusi ang naandan nga kadudahang mga lugar. Walay problema. Bisan pa, tungod sa daghang pag-amping, gisira ni James ang server, giilisan ang network card, ug gibalik ang sistema. Nagsugod dayon siya sa pagtrabaho sa hingpit. Nagsugod na usab ang mga kawani sa pagbaligya og mga tiket.

Gitawagan ni James si Mark ug gipahibalo ang sitwasyon. Dili lisud hunahunaon nga si James gusto nga magpabilin ug tan-awon kung adunay wala damha nga mahitabo. Nanaog siya sa hagdanan ug nangutana sa mga empleyado kon unsay nahitabo. Dayag nga ang sistema mihunong sa pagtrabaho. Gipalong nila kini ug nagpadayon, ang tanan nagtrabaho. Apan pagkahuman sa 10 ka minuto nahulog ang sistema.

Niining higayona adunay susama nga nahitabo. Sa kalit, ang sistema sa pagtiket nagsugod sa paglabay sa mga sayup. Nanghupaw ang staff ug gikuha ang mga tiket sa papel, ug si James nagdali sa lawak sa server. Nindot tan-awon ang tanan sa server.

Unya misulod ang usa sa mga empleyado.

- Ang sistema nagtrabaho pag-usab.

Naglibog si James kay wala man siyay nahimo. Sa mas tukma, walay bisan unsa nga makahimo sa sistema sa pagtrabaho. Nag-log out siya, gikuha ang iyang telepono, ug nanawag sa linya sa suporta sa iyang kompanya. Sa wala madugay ang sama nga empleyado misulod sa lawak sa server.

- Ang sistema nawala.

Gitan-aw ni James ang server. Ang usa ka makapaikag ug pamilyar nga sumbanan sa daghang kolor nga mga porma nagsayaw sa screen - gubot nga nagkurog ug nagdugtong nga mga tubo. Kitang tanan nakakita niini nga screensaver sa usa ka punto. Nindot kini nga pagkahubad ug literal nga nagpa-hypnotize.


Gipindot ni James ang usa ka buton ug nawala ang pattern. Nagdali siyang miadto sa ticket office ug sa dalan nasugatan niya ang usa ka empleyado nga mibalik kaniya.

- Ang sistema nagtrabaho pag-usab.

Kung maka-mental facepalm ka, mao nay gibuhat ni James. Screen Saver. Gigamit niini ang OpenGL. Ug busa, sa panahon sa operasyon, gigamit niini ang tanan nga mga kahinguhaan sa processor sa server. Ingon usa ka sangputanan, ang matag tawag sa server matapos sa usa ka timeout.

Mibalik si James sa lawak sa server, mi-log in, ug gipulihan ang screensaver sa nindot nga mga tubo nga adunay blangko nga screen. Sa ato pa, imbes nga usa ka screensaver nga nagkonsumo sa 100% nga mga kapanguhaan sa processor, nag-instalar ako og lain nga wala magkonsumo sa mga kapanguhaan. Unya naghulat kog 10 minutos para masusi ang akong tagna.

Pag-abot ni James sa sunod nga sinehan, naghuna-huna siya unsaon pagpasabot sa iyang manager nga bag-o lang siyang nilupad og 800 km aron ma-off ang screen saver.

Pag-crash sa panahon sa usa ka yugto sa bulan

Tinuod nga istorya. Usa ka adlaw mitungha ang usa ka bug sa software nga nagdepende sa hugna sa bulan. Adunay gamay nga rutina nga sagad gigamit sa lainlaing mga programa sa MIT aron makalkulo ang gibanabana sa tinuud nga yugto sa Bulan. Gibuhat sa GLS kini nga rutina nga usa ka programa sa LISP nga, kung nagsulat usa ka file, magpagawas usa ka linya nga adunay timestamp nga hapit 80 ka mga karakter ang gitas-on. Talagsa ra kaayo nga ang una nga linya sa usa ka mensahe mahimong taas kaayo ug modala sa sunod nga linya. Ug sa diha nga ang programa sa ulahi nagbasa niini nga file, kini gitunglo. Ang gitas-on sa unang linya nagdepende sa eksaktong petsa ug oras, ingon man ang gitas-on sa detalye sa hugna sa panahon nga giimprinta ang timestamp. Sa ato pa, ang bug literal nga nagdepende sa yugto sa bulan!

Unang edisyon sa papel Jargon File (Steele-1983) adunay usa ka pananglitan sa ingon nga linya nga mitultol sa gihulagway nga bug, apan ang mga tigbutang sa sulat "nag-ayo" niini. Kini sukad gihulagway nga usa ka "moon phase bug".

Bisan pa, pag-amping sa mga pangagpas. Pipila ka tuig ang milabay, ang mga inhenyero gikan sa CERN (European Center for Nuclear Research) nakasugat og mga sayup sa mga eksperimento nga gihimo sa Large Electron-Positron Collider. Tungod kay ang mga kompyuter aktibo nga nagproseso sa daghang mga datos nga nahimo sa kini nga aparato sa wala pa ipakita ang resulta sa mga siyentipiko, daghan ang nangagpas nga ang software sa usa ka paagi sensitibo sa yugto sa bulan. Daghang desperado nga mga inhenyero ang nakahibalo sa kamatuoran. Ang sayup mitumaw tungod sa gamay nga pagbag-o sa geometry sa 27 km nga gitas-on nga singsing tungod sa deformation sa Yuta sa panahon sa paglabay sa Bulan! Kini nga istorya nakasulod sa physics folklore isip "Newton's Revenge on Particle Physics" ug usa ka pananglitan sa koneksyon tali sa pinakasimple ug labing karaan nga mga balaod sa pisika ug sa pinaka-abante nga siyentipikong mga konsepto.

Ang pag-flush sa kasilyas makapahunong sa tren

Ang labing kaayo nga bug sa hardware nga akong nadungog mao ang sa usa ka high speed nga tren sa France. Ang bug misangpot sa emergency braking sa tren, apan kung adunay mga pasahero nga sakay. Sa matag ingon niini nga kaso, ang tren gikuha gikan sa serbisyo, gisusi, apan walay nakit-an. Unya gipabalik siya sa linya, ug nahagsa dayon siya sa paghunong.

Atol sa usa sa mga pagsusi, usa ka enhinyero nga nagbiyahe sakay sa tren miadto sa kasilyas. Wala madugay nahugasan siya, BOOM! Paghunong sa emerhensya.

Gikontak sa engineer ang drayber ug nangutana:

— Unsa ang imong gibuhat sa wala pa magpreno?

- Aw, gipahinay nako ang pagkanaog...

Katingad-an kini, tungod kay sa normal nga operasyon ang tren mohinay sa paglugsong sa daghang mga higayon. Mipadayon ang tren, ug sa sunod nga pagkanaog ang drayber mipasidaan:

- Maghinayhinay ko.

Walay nahitabo.

— Unsa ang imong gibuhat sa miaging pagpreno? - nangutana ang drayber.

- Aw... naa ko sa kasilyas...

- Aw, adto sa kasilyas ug buhata ang imong gibuhat sa among pagkanaog pag-usab!

Ang inhenyero miadto sa kasilyas, ug sa dihang gipasidan-an sa drayber: “Naghinayhinay na ko,” iyang gibanlas ang tubig. Siyempre, mihunong dayon ang tren.

Karon mahimo na nilang ibalik ang problema ug kinahanglan nga pangitaon ang hinungdan.

Human sa duha ka minuto, ilang namatikdan nga ang engine brake remote control cable (ang tren adunay usa ka makina sa matag tumoy) nadiskonekta gikan sa bungbong sa electrical cabinet ug naghigda sa relay nga nagkontrol sa toilet plug solenoid... Sa dihang ang relay gi-on, nakamugna kini og interference sa brake cable, ug ang proteksyon sa sistema batok sa mga kapakyasan naglakip lang sa emergency braking.

Ang ganghaan nga nagdumot sa FORTRAN

Pipila ka bulan ang milabay among namatikdan nga ang mga koneksyon sa network sa mainland [kini sa Hawaii] nagkahinay, kaayo. Mahimong molungtad kini og 10-15 ka minuto ug unya kalit nga mahitabo pag-usab. Human sa pipila ka mga panahon, ang akong kauban mireklamo kanako nga ang mga koneksyon sa network sa mainland sa kinatibuk-an dili molihok. Siya adunay pipila ka FORTRAN code nga kinahanglan nga kopyahon sa usa ka makina sa mainland, apan dili kini mahimo tungod kay "ang network wala magdugay nga igo aron makompleto ang pag-upload sa FTP."

Oo, nahimo nga ang mga kapakyasan sa network nahitabo sa dihang ang usa ka kauban misulay sa FTP sa usa ka file nga adunay source code sa FORTRAN sa usa ka makina sa mainland. Gisulayan namon nga i-archive ang file: dayon kini gikopya nga hapsay (apan ang target nga makina walay unpacker, mao nga ang problema wala masulbad). Sa katapusan among "gibahin" ang FORTRAN code ngadto sa gagmay kaayo nga mga piraso ug gipadala kini sa tagsa-tagsa. Kadaghanan sa mga tipik gikopya nga walay mga problema, apan pipila ka mga piraso wala moagi, o milabay human daghang mga pagsulay.

Sa dihang among gisusi ang mga problema nga mga tudling, among nadiskobrehan nga sila adunay usa ka butang nga komon: silang tanan adunay sulod nga mga bloke sa komentaryo nga nagsugod ug natapos sa mga linya nga naglangkob sa kapital C (ingon nga ang usa ka kauban mas gusto nga magkomento sa FORTRAN). Nag-email kami sa mga eksperto sa network sa mainland ug nangayo og tabang. Siyempre, gusto nila nga makita ang mga sample sa among mga file nga dili mabalhin pinaagi sa FTP ... apan ang among mga sulat wala makaabot kanila. Sa katapusan nakahimo kami og usa ka yano ihulagwayunsa ang hitsura sa dili mabalhin nga mga file. Nagtrabaho kini :) [Mangahas ba ako magdugang usa ka pananglitan sa usa sa mga problema nga komento sa FORTRAN dinhi? Tingali dili kini takus!]

Sa katapusan nakahimo kami sa paghunahuna niini. Usa ka bag-ong ganghaan ang bag-o lang na-install tali sa among bahin sa campus ug sa mainland network. DAKO ang kalisud sa pagpadala sa mga pakete nga adunay gibalikbalik nga mga piraso sa uppercase nga C! Pipila lang niini nga mga pakete ang mahimong makakuha sa tanan nga mga kapanguhaan sa ganghaan ug makapugong sa kadaghanan sa ubang mga pakete nga makalusot. Nagreklamo kami sa tiggama sa ganghaan ... ug sila mitubag: "Oh, oo, nag-atubang ka sa usa ka bug sa gibalikbalik nga C! Nakahibalo na kami bahin kaniya.” Sa kadugayan nasulbad namo ang problema pinaagi sa pagpalit og bag-ong ganghaan gikan sa laing tiggama (sa depensa sa kanhi, ang kawalay katakos sa pagbalhin sa mga programa sa FORTRAN mahimong usa ka bentaha alang sa pipila!).

Lisud nga mga panahon

Pipila ka tuig ang milabay, samtang nagtrabaho sa paghimo sa usa ka sistema sa ETL sa Perl aron makunhuran ang gasto sa yugto 40 nga mga pagsulay sa klinika, kinahanglan nako nga iproseso ang mga 000 nga petsa. Duha kanila ang wala makapasar sa pagsulay. Kini wala kaayo makahasol kanako tungod kay kini nga mga petsa gikuha gikan sa kliyente-gihatag data nga sa kasagaran, kita moingon, katingala. Apan sa dihang akong gisusi ang orihinal nga datos, nasuta nga kini nga mga petsa mao ang Enero 1, 2011 ug Enero 1, 2007. Nagtuo ko nga ang bug nasulod sa programa nga bag-o lang nakong gisulat, apan kini nahimo nga 30 ka tuig na. tigulang. Mahimong misteryoso kini sa mga dili pamilyar sa ekosistema sa software. Tungod sa dugay na nga desisyon sa laing kompanya nga makakwarta, gibayran ako sa akong kliyente aron ayohon ang usa ka bug nga gipaila sa usa ka kompanya nga aksidente ug ang lain gituyo. Aron masabtan nimo kung unsa ang akong gihisgutan, kinahanglan nako nga hisgutan ang bahin sa kompanya nga nagdugang sa bahin nga nahimo’g usa ka bug, ingon man ang uban pang makapaikag nga mga panghitabo nga nakatampo sa misteryosong bug nga akong giayo.

Sa maayong karaan nga mga adlaw, ang mga kompyuter sa Apple usahay kusog nga mag-reset sa ilang petsa sa Enero 1, 1904. Simple ra ang rason: migamit kinig battery-powered “system clock” aron masubay ang petsa ug oras. Unsa ang nahitabo sa dihang ang baterya namatay? Ang mga kompyuter nagsugod sa pagsubay sa petsa pinaagi sa gidaghanon sa mga segundo sukad sa pagsugod sa usa ka panahon. Pinaagi sa kapanahonan among gipasabot ang reperensiya sa orihinal nga petsa, ug alang sa Macintosh kini mao ang Enero 1, 1904. Ug human mamatay ang baterya, ang kasamtangang petsa gi-reset sa gitakda nga usa. Apan nganong nahitabo kini?

Kaniadto, gigamit sa Apple ang 32 bits aron tipigan ang gidaghanon sa mga segundo sukad sa orihinal nga petsa. Ang usa ka bit makatipig sa usa sa duha ka mga kantidad - 1 o 0. Ang duha ka mga bit mahimong magtipig sa usa sa upat ka mga kantidad: 00, 01, 10, 11. Tulo ka bits - usa ka bili gikan sa walo: 000, 001, 010, 011, 100 , 101, 110, 111, ug uban pa. Ug ang 32 makatipig sa usa sa 232 ka mga kantidad, nga mao, 4 segundos. Alang sa mga petsa sa Apple, kini katumbas sa mga 294 ka tuig, mao nga ang mga tigulang nga Mac dili makadumala sa mga petsa pagkahuman sa 967. Ug kung ang baterya sa sistema mamatay, ang petsa i-reset sa 296 segundos sukad sa pagsugod sa panahon, ug kinahanglan nimo nga mano-mano nga itakda ang petsa sa matag higayon nga imong i-on ang kompyuter (o hangtod nga mopalit ka usa ka bag-ong baterya).

Bisan pa, ang desisyon sa Apple nga itago ang mga petsa ingon mga segundo sukad ang panahon nagpasabut nga dili namon madumala ang mga petsa sa wala pa ang panahon, nga adunay daghang mga sangputanan, ingon sa makita namon. Gipaila sa Apple ang usa ka bahin, dili usa ka bug. Lakip sa uban nga mga butang, kini nagpasabut nga ang Macintosh operating system dili maapektuhan sa "millennium bug" (nga dili masulti bahin sa daghang mga aplikasyon sa Mac nga adunay kaugalingon nga sistema sa petsa aron malikayan ang mga pagdili).

Sige na nga. Gigamit namo ang Lotus 1-2-3, ang "killer application" sa IBM nga nakatabang sa paglunsad sa PC revolution, bisan tuod ang mga Apple computer adunay VisiCalc, nga naghimo sa personal nga kompyuter nga malampuson. Sa kaangayan, kung wala pa makita ang 1-2-3, ang mga PC dili gyud mawala, ug ang kasaysayan sa mga personal nga kompyuter mahimong lahi kaayo. Ang Lotus 1-2-3 sayop nga nagtratar sa 1900 isip leap year. Sa dihang gipagawas sa Microsoft ang una nga spreadsheet, ang Multiplan, nakuha niini ang gamay nga bahin sa merkado. Ug sa dihang gilusad nila ang Excel project, nakahukom sila nga dili lang kopyahon ang row ug column name scheme gikan sa Lotus 1-2-3, kondili aron maseguro usab ang bug compatibility pinaagi sa tinuyo nga pagtagad sa 1900 isip leap year. Kini nga problema anaa gihapon karon. Mao nga sa 1-2-3 kini usa ka bug, apan sa Excel kini usa ka mahunahunaon nga desisyon aron masiguro nga ang tanan nga 1-2-3 nga tiggamit maka-import sa ilang mga lamesa sa Excel nga dili usbon ang datos, bisan kung kini sayup.

Apan adunay laing problema. Una, gipagawas sa Microsoft ang Excel alang sa Macintosh, nga wala makaila sa mga petsa sa wala pa ang Enero 1, 1904. Ug sa Excel, ang Enero 1, 1900 giisip nga sinugdanan sa panahon. Busa, ang mga developers naghimo sa usa ka pagbag-o aron nga ang ilang programa makaila sa matang sa panahon ug gitipigan data sa sulod sa iyang kaugalingon sumala sa gitinguha nga panahon. Nagsulat pa gani ang Microsoft og usa ka pagpatin-aw nga artikulo bahin niini. Ug kini nga desisyon misangpot sa akong bug.

Ang akong ETL nga sistema nakadawat sa mga Excel nga spreadsheet gikan sa mga kustomer nga gihimo sa Windows, apan mahimo usab nga himoon sa Mac. Busa, ang sinugdanan sa panahon sa talaan mahimong Enero 1, 1900, o Enero 1, 1904. Unsaon pagkahibalo? Ang format sa file sa Excel nagpakita sa gikinahanglan nga impormasyon, apan ang parser nga akong gigamit wala magpakita niini (karon kini na), ug nagtuo nga nahibal-an nimo ang panahon alang sa usa ka piho nga lamesa. Tingali makagugol ako og dugang nga panahon sa pagsabot sa Excel binary format ug pagpadala og patch ngadto sa parser author, apan daghan pa ko og buhaton para sa kliyente, mao nga misulat dayon ko og heuristic aron mahibal-an ang panahon. Simple ra siya.

Sa Excel, ang petsa nga Hulyo 5, 1998 mahimong irepresentar sa format nga "07-05-98" (walay pulos nga sistema sa Amerika), "Hul 5, 98", "Hulyo 5, 1998", "5-Hul-98" o ubang format, laing walay kapuslanan nga pormat (ironically, usa sa mga format nga wala gihatag sa akong bersyon sa Excel mao ang ISO 8601). Bisan pa, sulod sa lamesa, ang wala maporma nga petsa gitipigan ingon nga "35981" para sa epoch-1900 o "34519" para sa epoch-1904 (ang mga numero nagrepresentar sa gidaghanon sa mga adlaw sukad sa panahon). Gigamit ra nako ang usa ka yano nga parser aron makuha ang tuig gikan sa gi-format nga petsa, ug dayon gigamit ang Excel parser aron makuha ang tuig gikan sa wala ma-format nga petsa. Kung ang duha nga mga kantidad magkalainlain sa 4 ka tuig, nan nahibal-an nako nga naggamit ako usa ka sistema nga adunay epoch-1904.

Ngano nga wala na lang nako gigamit ang gi-format nga mga petsa? Tungod kay ang Hulyo 5, 1998 mahimong maporma nga "Hulyo, 98" nga nawala ang adlaw sa bulan. Nakadawat kami mga lamesa gikan sa daghang mga kompanya nga nagmugna kanila sa daghang lainlaing mga paagi nga naa ra kanamo (sa kini nga kaso, ako) aron mahibal-an ang mga petsa. Gawas pa, kung nakuha kini sa Excel nga husto, kinahanglan usab naton!

Sa samang higayon akong nasugatan ang 39082. Tugoti ako nga pahinumdoman ka nga ang Lotus 1-2-3 nag-isip sa 1900 nga usa ka leap year, ug kini matinud-anong gisubli sa Excel. Ug tungod kay gidugang kini usa ka adlaw sa tuig 1900, daghang mga function sa pagkalkula sa petsa mahimong sayup alang sa mismong adlaw. Sa ato pa, ang 39082 mahimong Enero 1, 2011 (sa mga Mac) o Disyembre 31, 2006 (sa Windows). Kung ang akong "year parser" gikuha ang tuig 2011 gikan sa gi-format nga kantidad, nan ang tanan maayo. Apan tungod kay ang Excel parser wala mahibal-an kung unsa nga panahon ang gigamit, kini nag-default sa epoch-1900, nga nagbalik sa tuig 2006. Nakita sa akong aplikasyon nga ang kalainan 5 ka tuig, giisip kini nga usa ka sayup, gi-log kini, ug gibalik ang usa ka wala ma-format nga kantidad.

Aron makalibot niini, gisulat ko kini (pseudocode):

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

Ug dayon ang tanan nga 40 nga mga petsa gi-parse sa husto.

Sa tunga-tunga sa dagkong mga trabaho sa pag-imprinta

Sa sayong bahin sa 1980s, ang akong amahan nagtrabaho sa Storage Technology, usa ka wala na karon nga dibisyon nga nagmugna og mga tape drive ug pneumatic system alang sa high-speed tape feeding.

Gidisenyo nila pag-usab ang mga drive aron sila adunay usa ka sentral nga "A" nga drive nga konektado sa pito nga "B" nga mga drive, ug ang gamay nga OS sa RAM nga nagkontrol sa "A" nga drive mahimong magdelegar sa pagbasa ug pagsulat sa tanan nga "B" nga mga drive.

Sa matag higayon nga ang drive "A" gisugdan, gikinahanglan nga magsal-ot og floppy disk sa peripheral drive nga konektado sa "A" aron ma-load ang operating system sa memorya niini. Kini labi ka karaan: ang gahum sa pag-compute gihatag sa usa ka 8-bit microcontroller.

Ang target nga mamiminaw alang sa ingon nga kagamitan mao ang mga kompanya nga adunay daghang mga bodega sa datos - mga bangko, mga kadena sa tingi, ug uban pa - nga kinahanglan nga mag-imprinta og daghang mga label sa address o mga pahayag sa bangko.

Usa ka kliyente adunay problema. Sa tunga-tunga sa usa ka trabaho sa pag-imprinta, ang usa ka partikular nga drive nga "A" mahimong mohunong sa pagtrabaho, hinungdan nga ang tibuuk nga trabaho mahunong. Aron mabalik ang operasyon sa drive, ang mga kawani kinahanglan nga i-reboot ang tanan. Ug kung kini nahitabo sa tunga-tunga sa usa ka unom ka oras nga buluhaton, nan usa ka dako nga kantidad sa mahal nga oras sa kompyuter ang nawala ug ang iskedyul sa tibuuk nga operasyon nabalda.

Ang mga teknisyan gipadala gikan sa Storage Technologies. Apan bisan pa sa ilang labing maayo nga mga paningkamot, wala sila makahimo sa pag-reproduce sa bug ubos sa mga kondisyon sa pagsulay: kini daw nahitabo sa tunga-tunga sa dagkong mga trabaho sa pag-imprinta. Ang problema dili ang hardware, ilang gipulihan ang tanan nga ilang mahimo: RAM, microcontroller, floppy drive, matag mahunahuna nga bahin sa tape drive - ang problema nagpadayon.

Unya ang mga teknisyan mitawag sa hedkuwarter ug mitawag sa Eksperto.

Ang eksperto mikuhag lingkoranan ug usa ka tasa sa kape, milingkod sa lawak sa kompiyuter—niadtong mga adlawa adunay mga lawak nga gipahinungod sa mga kompiyuter—ug nagtan-aw samtang ang mga kawani naglinya sa usa ka dakong trabaho sa pag-imprenta. Ang eksperto naghulat alang sa usa ka kapakyasan nga mahitabo - ug kini nahitabo. Ang tanan mitan-aw sa Eksperto, apan wala siya'y ideya kung nganong nahitabo kini. Busa iyang gimando nga ipila pag-usab ang trabaho, ug ang tanang kawani ug mga technician mibalik sa trabaho.

Ang eksperto milingkod pag-usab sa lingkuranan ug nagsugod sa paghulat sa usa ka kapakyasan. Mga unom ka oras ang milabay ug nahitabo ang kapakyasan. Ang Eksperto pag-usab walay ideya, gawas nga ang tanan nahitabo sa usa ka lawak nga puno sa mga tawo. Gimando niya nga i-restart ang misyon, milingkod ug naghulat.

Sa ikatulo nga kapakyasan, ang Eksperto adunay namatikdan. Ang kapakyasan nahitabo sa dihang ang mga personahe nag-ilis sa mga teyp sa usa ka langyaw nga biyahe. Dugang pa, ang kapakyasan nahitabo sa diha nga ang usa sa mga empleyado miagi sa usa ka tile sa salog.

Ang gipataas nga salog ginama sa aluminum tiles nga gibutang sa gitas-on nga 6 ngadto sa 8 ka pulgada. Daghang mga wire gikan sa mga kompyuter ang nagdagan sa ilawom sa gipataas nga salog aron mapugngan ang bisan kinsa nga aksidenteng makatunob sa usa ka importante nga kable. Ang mga tile gipahimutang pag-ayo aron malikayan ang mga tinumpag gikan sa ilawom sa gipataas nga salog.

Ang eksperto nakaamgo nga ang usa sa mga tile deformed. Sa dihang ang usa ka empleyado nakatunob sa eskina niini, ang mga ngilit sa tile mikuniskunis sa kasikbit nga mga tile. Ang mga plastik nga mga bahin nga nagkonektar sa mga tile usab gipahid niini, nga hinungdan sa mga static nga microdischarges nga nakamugna og interference sa frequency sa radyo.

Karon, ang RAM mas maayo nga gipanalipdan gikan sa radio frequency interference. Apan niadtong mga tuiga dili kini mao ang kahimtang. Ang eksperto nakaamgo nga kini nga pagpanghilabot nakabalda sa panumduman, ug uban niini ang operasyon sa operating system. Gitawagan niya ang serbisyo sa suporta, nag-order og bag-ong mga tile, gi-install kini mismo, ug nawala ang problema.

Taas na ang tubig!

Ang istorya nahitabo sa usa ka server room, sa ikaupat o ikalimang andana sa usa ka opisina sa Portsmouth (sa akong hunahuna), sa docks area.

Usa ka adlaw ang Unix server nga adunay nag-unang database nahagsa. Ila siyang gi-reboot, apan siya malipayong nagpadayon sa pagkahulog balik-balik. Nakahukom kami nga tawagan ang usa ka tawo gikan sa serbisyo sa suporta.

Ang support guy... abi nakog Mark iyang name, pero balewala lang... murag wa ko kaila niya. Dili igsapayan, tinuod. Magpabilin ta kang Mark, okay? Nindot.

Mao nga, pipila ka oras ang milabay si Mark miabot (dili kini layo gikan sa Leeds hangtod sa Portsmouth, nahibal-an nimo), gi-on ang server ug ang tanan nagtrabaho nga wala’y mga problema. Kasagaran nga damn nga suporta, ang kliyente nasuko kaayo bahin niini. Gitan-aw ni Mark ang mga file sa log ug wala’y nakit-an nga dili maayo. Busa si Mark mibalik sa tren (o bisan unsa nga paagi sa transportasyon nga iyang naabutan, kini mahimo nga usa ka bakol nga baka alang sa tanan nga akong nahibal-an ... bisan pa, dili igsapayan, okay?) ug mibalik sa Leeds, nga nausik. ang adlaw.

Nianang gabhiona nag-crash na usab ang server. Ang istorya mao ang sama ... ang server dili mobangon. Si Mark misulay sa pagtabang sa layo, apan ang kliyente dili makasugod sa server.

Laing tren, bus, lemon meringue o uban pang kabuang, ug si Mark mibalik sa Portsmouth. Tan-awa, ang server nag-boot nga wala’y mga problema! Milagro. Gigugol ni Mark ang pipila ka oras sa pagsusi nga ang tanan naa sa operating system o software ug mipaingon sa Leeds.

Sa tunga-tunga sa adlaw ang server nahagsa (pagdali!). Niining higayona daw makatarunganon ang pagdala sa mga tawo nga suporta sa hardware aron mapulihan ang server. Apan dili, pagkahuman sa mga 10 ka oras nahulog usab kini.

Nagbalikbalik ang kahimtang sulod sa pipila ka adlaw. Ang server nagtrabaho, nag-crash pagkahuman sa mga 10 ka oras ug dili magsugod sa sunod nga 2 ka oras. Gisusi nila ang pagpabugnaw, mga pagtulo sa memorya, gisusi nila ang tanan, apan wala'y nakit-an. Unya mihunong ang pagkahagsa.

Nilabay ang semana nga walay kabalaka... malipayon ang tanan. Malipayon hangtod nga nagsugod na usab ang tanan. Parehas ang hulagway. 10 ka oras nga trabaho, 2-3 ka oras nga downtime...

Ug unya usa ka tawo (sa akong hunahuna gisultihan nila ako nga kini nga tawo wala’y kalabotan sa IT) miingon:

"Kini ang sulog!"

Ang pagtuaw gisugat sa blangko nga mga pagtan-aw, ug ang kamot sa usa ka tawo tingali nagduha-duha sa button sa tawag sa seguridad.

"Kini mihunong sa pagtrabaho uban sa sulog."

Kini daw usa ka hingpit nga langyaw nga konsepto sa IT support workers, nga dili tingali mobasa sa Tide Yearbook samtang naglingkod para magkape. Gipatin-aw nila nga dili kini mahimong may kalabutan sa sulog sa bisan unsang paagi, tungod kay ang server nagtrabaho sulod sa usa ka semana nga wala’y kapakyasan.

"Sa miaging semana ang tubig gamay, apan kini nga semana taas."

Usa ka gamay nga terminolohiya alang sa mga wala’y lisensya sa yate. Ang pagtaob nagdepende sa lunar cycle. Ug samtang nagtuyok ang Yuta, matag 12,5 ka oras ang grabidad nga pagbira sa Adlaw ug Bulan momugna og tidal wave. Sa sinugdanan sa 12,5 ka oras nga siklo adunay usa ka taas nga tubig, sa tunga-tunga sa siklo adunay usa ka ebb, ug sa katapusan adunay usa ka pagtaas sa tubig. Apan samtang nagbag-o ang orbito sa bulan, nagbag-o usab ang kalainan tali sa ubos ug taas nga tubig. Sa diha nga ang Bulan anaa sa taliwala sa Adlaw ug sa Yuta o sa atbang nga bahin sa Yuta (takdol o walay bulan), atong makuha ang Syzygyn tides - ang pinakataas nga high tides ug ang pinakaubos nga low tides. Sa tunga sa bulan kita makakuha og quadrature tides - ang pinakaubos nga pagtaob. Ang kalainan tali sa duha ka mga extremes mikunhod pag-ayo. Ang lunar cycle molungtad ug 28 ka adlaw: syzygian - quadrature - syzygian - quadrature.

Sa dihang gipatin-aw sa mga technician ang esensya sa mga puwersa sa tubig, naghunahuna dayon sila nga kinahanglan nilang tawagan ang pulis. Ug lohikal kaayo. Apan kini nahimo nga husto ang dude. Duha ka semana ang milabay, usa ka tiglaglag ang midunggo dili layo sa opisina. Sa matag higayon nga ang tubig mopataas niini ngadto sa usa ka piho nga gitas-on, ang radar post sa barko mosangko sa lebel sa salog sa lawak sa server. Ug ang radar (o elektronikong kagamitan sa pakiggubat, o uban pang dulaan sa militar) nakamugna ug kagubot sa mga kompyuter.

Ang misyon sa paglupad alang sa rocket

Gitahasan ako sa pag-port sa usa ka dako (mga 400 ka libo nga linya) nga kontrol sa paglansad sa rocket ug sistema sa pag-monitor sa mga bag-ong bersyon sa operating system, compiler ug lengguwahe. Mas tukma, gikan sa Solaris 2.5.1 ngadto sa Solaris 7, ug gikan sa Verdix Ada Development System (VADS), nga gisulat sa Ada 83, ngadto sa Rational Apex Ada system, nga gisulat sa Ada 95. Ang VADS gipalit sa Rational, ug ang produkto niini mao ang karaan na, bisan tuod ang Rational misulay sa pagpatuman sa mga compatible nga bersyon sa VADS-specific packages aron mapagaan ang transisyon ngadto sa Apex compiler.

Tatlo ka tawo ang nagbulig sa akon nga makuha lang sing limpyo ang code. Niabot ug duha ka semana. Ug unya nagtrabaho ako sa akong kaugalingon aron mahimo ang sistema nga molihok. Sa laktud, kini ang pinakagrabe nga arkitektura ug pagpatuman sa usa ka sistema sa software nga akong nasugatan, mao nga milungtad pa og duha ka bulan aron makompleto ang pantalan. Gisumite dayon ang sistema alang sa pagsulay, nga milungtad og daghang mga bulan. Gitul-id dayon nako ang mga bug nga nakit-an sa panahon sa pagsulay, apan ang ilang gidaghanon dali nga mikunhod (ang source code usa ka sistema sa produksiyon, mao nga ang pag-andar niini nagtrabaho nga kasaligan, kinahanglan nako nga tangtangon ang mga bug nga mitumaw sa panahon sa pagpahiangay sa bag-ong compiler). Sa kadugayan, sa dihang ang tanan nagtrabaho sumala sa angay, gibalhin ko sa laing proyekto.

Ug sa Biyernes sa wala pa ang Thanksgiving, ang telepono mibagting.

Ang paglansad sa rocket kinahanglan nga sulayan sa mga tulo ka semana, ug sa panahon sa mga pagsulay sa laboratoryo sa pag-ihap, ang pagkasunod-sunod sa mga mando gibabagan. Sa tinuud nga kinabuhi, kini mag-abort sa pagsulay, ug kung ang pagbabag nahitabo sa sulod sa pipila ka segundo sa pagsugod sa makina, daghang dili mabag-o nga mga aksyon ang mahitabo sa mga sistema sa auxiliary, nga nanginahanglan usa ka taas - ug mahal - kaandam sa rocket. Dili unta kini magsugod, apan daghang mga tawo ang naguol tungod sa pagkawala sa oras ug daghan, daghang salapi. Ayaw itugot nga bisan kinsa nga mosulti kanimo nga ang Departamento sa Depensa naggasto nga walay pagtagad-wala pa ako makahimamat og usa ka contracting manager nga wala mag-una o ikaduha sa badyet, gisundan sa iskedyul.

Sa miaging mga bulan, kini nga hagit sa pag-ihap gidagan gatusan ka beses sa daghang mga pagbag-o, nga adunay pipila ra ka gagmay nga mga hiccups. Busa ang kalagmitan niini nga mahitabo gamay kaayo, apan ang mga sangputanan niini mahinungdanon kaayo. I-multiply ang duha niini nga mga hinungdan, ug imong masabtan nga ang balita nagtagna sa usa ka guba nga semana sa holiday alang kanako ug sa daghang mga inhenyero ug mga manedyer.

Ug ang pagtagad gihatag kanako isip ang tawo nga nag-port sa sistema.

Sama sa kadaghanan sa mga sistema nga kritikal sa seguridad, daghang mga parameter ang na-log, mao nga dali ra mailhan ang pipila ka mga linya sa code nga gipatuman sa wala pa ang sistema nahagsa. Ug siyempre, wala'y bisan unsa nga talagsaon mahitungod kanila; ang parehas nga mga ekspresyon malampuson nga gipatuman sa literal nga liboan ka beses sa parehas nga pagdagan.

Gitawag namo ang mga tawo gikan sa Apex ngadto sa Rational tungod kay sila ang nagpalambo sa compiler ug pipila sa mga rutina nga ilang gihimo gitawag sa kadudahang code. Sila (ug ang tanan) nakadayeg nga adunay panginahanglan sa pagkuha sa gamut sa usa ka problema sa literal nga nasudnong importansya.

Tungod kay walay bisan unsa nga makapaikag sa mga journal, nakahukom kami sa pagsulay sa pagkopya sa problema sa usa ka lokal nga laboratoryo. Dili kini sayon ​​nga buluhaton tungod kay ang kalihokan nahitabo gibana-bana nga kausa sa matag 1000 ka run. Usa ka gidudahang rason mao nga ang usa ka tawag sa usa ka mutex function nga gihimo sa vendor (bahin sa VADS migration package) Unlock wala mosangpot sa pag-unlock. Ang pagproseso nga hilo nga nagtawag sa function nagproseso sa mga mensahe sa pinitik sa kasingkasing, nga kasagaran moabut matag segundo. Gipataas namo ang frequency ngadto sa 10 Hz, nga mao, 10 ka beses matag segundo, ug nagsugod sa pagdagan. Mga usa ka oras ang milabay ang sistema nag-lock sa kaugalingon. Sa log, among nakita nga ang pagkasunod-sunod sa natala nga mga mensahe parehas sa panahon sa napakyas nga pagsulay. Naghimo kami og daghang mga dagan, ang sistema kanunay nga gibabagan 45-90 ka minuto pagkahuman sa pagsugod, ug matag higayon nga ang log adunay parehas nga ruta. Bisan kung kami sa teknikal nga paagi nagpadagan sa lainlaing code - lahi ang frequency sa mensahe - parehas ang pamatasan sa sistema, mao nga masaligon kami nga kini nga senaryo sa pagkarga hinungdan sa parehas nga problema.

Karon kinahanglan namon nga mahibal-an kung diin gyud ang pag-block nahitabo sa han-ay sa mga ekspresyon.

Kini nga pagpatuman sa sistema migamit sa Ada task system, ug gigamit kini nga dili maayo. Ang mga buluhaton kay usa ka taas nga lebel nga dungan nga ma-executable nga pagtukod sa Ada, usa ka butang nga sama sa mga hilo sa pagpatuman, gitukod lamang sa pinulongan mismo. Kung ang duha ka mga buluhaton kinahanglan nga makigkomunikar, sila "nagbutang usa ka panagtagbo", nagbinayloay sa kinahanglan nga datos, ug dayon hunongon ang panagtagbo ug mobalik sa ilang mga independente nga pagpatay. Apan, lahi ang gipatuman sa sistema. Human makigkita ang usa ka gipunting nga buluhaton, kana nga gipunting nga buluhaton gitagbo sa lain nga buluhaton, nga dayon gitagbo sa usa ka ikatulo nga buluhaton, ug padayon hangtod nahuman ang pipila nga pagproseso. Pagkahuman niini, ang tanan nga mga panagtagbo nahuman ug ang matag buluhaton kinahanglan nga ibalik sa pagpatuman niini. Kana mao, nag-atubang kami sa labing mahal nga sistema sa pagtawag sa function sa kalibutan, nga nagpahunong sa tibuuk nga proseso sa "multitasking" samtang giproseso ang bahin sa data sa input. Ug sa wala pa kini wala magdala sa mga problema lamang tungod kay ang throughput gamay ra kaayo.

Gihulagway nako kini nga mekanismo sa buluhaton tungod kay kung ang usa ka panagtagbo gihangyo o gipaabut nga makompleto, ang usa ka "task switch" mahimong mahitabo. Kana mao, ang processor mahimong magsugod sa pagproseso sa laing buluhaton nga andam na nga ipatuman. Mopatim-aw nga kung ang usa ka buluhaton andam na nga makigtagbo sa lain nga buluhaton, ang usa ka hingpit nga lahi nga buluhaton mahimong magsugod sa pagpatuman, ug sa katapusan ang pagpugong mobalik sa una nga panagtagbo. Ug ang ubang mga panghitabo mahimong mahitabo nga hinungdan sa buluhaton sa pagbalhin; usa sa ingon nga panghitabo mao ang usa ka tawag sa usa ka function sa sistema, sama sa pag-imprenta o pag-execute sa usa ka mutex.

Aron masabtan kung unsang linya sa code ang hinungdan sa problema, kinahanglan nako nga mangita usa ka paagi aron marekord ang pag-uswag pinaagi sa usa ka han-ay sa mga pahayag nga dili mag-trigger sa usa ka switch sa buluhaton, nga makapugong nga mahitabo ang pagkahagsa. Mao nga dili ko makapahimulos Put_Line()aron malikayan ang pagbuhat sa mga operasyon sa I/O. Mahimo kong magbutang og counter variable o susama nga butang, apan unsaon nako pagtan-aw ang bili niini kung dili nako kini mapakita sa screen?

Usab, kung gisusi ang log, nahibal-an nga, bisan pa sa pag-freeze sa pagproseso sa mga mensahe sa heartbeat, nga gibabagan ang tanan nga mga operasyon sa I / O sa proseso ug gipugngan ang ubang pagproseso nga gihimo, ang uban pang mga independente nga buluhaton nagpadayon sa pagpatuman. Sa ato pa, ang trabaho wala gibabagan sa hingpit, usa lamang ka (kritikal) nga kutay sa mga buluhaton.

Kini ang timailhan nga gikinahanglan sa pagtimbang-timbang sa blocking expression.

Naghimo ako usa ka pakete sa Ada nga adunay sulud nga buluhaton, usa ka enumerated nga tipo, ug usa ka global nga variable sa kana nga tipo. Ang maihap nga mga literal gigapos sa espesipikong mga ekspresyon sa problemado nga han-ay (eg. Incrementing_Buffer_Index, Locking_Mutex, Mutex_Unlocked), ug dayon gisal-ot ang mga ekspresyon sa assignment niini nga nag-assign sa katugbang nga enumeration sa usa ka global variable. Tungod kay ang code sa butang niining tanan nagtipig lamang sa usa ka makanunayon sa panumduman, ang pagbalhin sa buluhaton isip resulta sa pagpatuman niini hilabihan nga dili mahimo. Kami sa panguna nagduda sa mga ekspresyon nga makabalhin sa buluhaton, tungod kay ang pag-block nahitabo sa pagpatuman kaysa pagbalik kung gibalik ang buluhaton (sa daghang mga hinungdan).

Ang buluhaton sa pagsubay nagdagan lang sa usa ka loop ug matag karon ug unya gisusi aron makita kung ang kantidad sa global variable nausab. Sa matag pagbag-o, ang kantidad gitipigan sa usa ka file. Unya usa ka mubo nga paghulat ug usa ka bag-ong tseke. Gisulat nako ang variable sa file tungod kay ang buluhaton gipatuman lamang kung gipili kini sa sistema alang sa pagpatuman kung gibalhin ang buluhaton sa lugar nga adunay problema. Bisan unsa ang nahitabo sa kini nga buluhaton dili makaapekto sa uban, wala’y kalabutan nga gibabagan nga mga buluhaton.

Gilauman nga kung ang sistema makaabut sa punto sa pagpatuman sa problema nga code, ang global variable ma-reset kung mobalhin sa matag sunod nga ekspresyon. Unya adunay mahitabo nga hinungdan sa pagbalhin sa buluhaton, ug tungod kay ang frequency sa pagpatuman niini (10 Hz) mas ubos kaysa sa buluhaton sa pag-monitor, makuha sa monitor ang kantidad sa global variable ug isulat kini. Sa usa ka normal nga sitwasyon, makakuha ako usa ka balik-balik nga pagkasunod-sunod sa usa ka subset sa mga enumerasyon: ang katapusan nga mga kantidad sa variable sa oras sa switch sa buluhaton. Kung nagbitay, ang global variable kinahanglan nga dili na mausab, ug ang katapusan nga kantidad nga gisulat magpakita kung unsang ekspresyon ang wala makompleto.

Gipadagan nako ang code nga adunay pagsubay. Nag-freeze siya. Ug ang pagmonitor nagtrabaho sama sa orasan.

Ang log naglangkob sa gipaabut nga pagkasunod-sunod, nga nabalda sa usa ka kantidad nga nagpakita nga usa ka mutex ang gitawag. Unlock, ug ang buluhaton wala mahuman - sama sa kaso sa libu-libo nga nangaging mga tawag.

Ang mga inhenyero sa Apex grabe nga nag-analisar sa ilang code niining panahona ug nakit-an ang usa ka lugar sa mutex diin, sa teorya, usa ka kandado ang mahitabo. Apan ang kalagmitan niini gamay ra kaayo, tungod kay ang usa ka piho nga pagkasunod-sunod sa mga panghitabo nga nahitabo sa usa ka piho nga oras mahimong mosangput sa pagbabag. Murphy's Law, guys, Murphy's Law kini.

Aron mapanalipdan ang piraso sa code nga akong gikinahanglan, akong gipulihan ang mutex function calls (gitukod sa ibabaw sa OS mutex functionality) nga adunay gamay nga lumad nga Ada mutex package aron makontrol ang mutex access sa maong piraso.

Gisulod nako kini sa code ug gipadagan ang pagsulay. Paglabay sa pito ka oras nagtrabaho gihapon ang code.

Ang akong code gisumite sa Rational, diin ilang gihugpong kini, gibungkag kini, ug gisusi nga wala kini naggamit sa parehas nga pamaagi nga gigamit sa mga problema nga mutex function.

Kini ang pinakapuno nga pagrepaso sa code sa akong karera 🙂 Adunay mga napulo ka mga inhenyero ug mga manedyer sa kwarto kauban nako, laing napulo ka mga tawo ang naa sa usa ka tawag sa komperensya - ug silang tanan nagsusi sa mga 20 ka linya sa code.

Ang kodigo gisusi, ang mga bag-ong executable nga mga file gitigom ug gisumite para sa pormal nga regression testing. Pipila ka semana ang milabay, ang pagsulay sa pag-ihap nagmalampuson ug ang rocket milupad.

Okay, maayo ra ug maayo, apan unsa ang punto sa istorya?

Kini usa ka hingpit nga dulumtanan nga problema. Gatusan ka libo nga linya sa code, parallel execution, sobra sa usa ka dosena nga mga proseso sa interaksyon, dili maayo nga arkitektura ug dili maayo nga pagpatuman, mga interface alang sa mga naka-embed nga sistema ug milyon-milyong dolyar nga gigasto. Walay pressure, tama.

Dili ra ako ang nagtrabaho sa kini nga problema, bisan kung naa ko sa spotlight samtang nagbuhat ako sa porting. Apan bisan pa nga gibuhat ko kini, wala kana magpasabut nga nasabtan nako ang tanan nga gatusan ka libo nga linya sa code, o bisan gi-skim kini. Ang kodigo ug mga troso gisusi sa mga inhenyero sa tibuok nasod, apan sa dihang gisultihan nila ako sa ilang mga pangagpas bahin sa mga hinungdan sa kapakyasan, tunga sa minuto lang ang akong gikinahanglan aron ipanghimakak kini. Ug kung gihangyo ako sa pag-analisar sa mga teorya, ipasa nako kini sa lain, tungod kay klaro alang kanako nga kini nga mga inhenyero naglakaw sa sayup nga paagi. Morag mapangahason? Oo, kini tinuod, apan akong gisalikway ang mga pangagpas ug mga hangyo tungod sa laing rason.

Nakasabot ko sa kinaiya sa problema. Wala ko nahibal-an kung diin kini nahitabo o ngano, apan nahibal-an ko kung unsa ang nahitabo.

Sulod sa mga katuigan, nakatigom kog daghang kahibalo ug kasinatian. Usa ako sa mga pioneer sa paggamit sa Ada ug nakasabut sa mga bentaha ug disbentaha niini. Nahibal-an ko kung giunsa pagdumala sa mga librarya sa runtime sa Ada ang mga buluhaton ug pag-atubang sa parehas nga pagpatuman. Ug nasabtan nako ang ubos nga lebel nga programming sa lebel sa memorya, mga rehistro ug assembler. Sa laing pagkasulti, ako adunay lawom nga kahibalo sa akong natad. Ug gigamit nako sila sa pagpangita sa hinungdan sa problema. Wala lang ko nagtrabaho sa palibot sa bug, nasabtan nako kung giunsa kini pagpangita sa usa ka sensitibo kaayo nga runtime nga palibot.

Ang ingon nga mga istorya sa pakigbisog sa code dili kaayo makapaikag alang sa mga dili pamilyar sa mga bahin ug kondisyon sa ingon nga pakigbisog. Apan kini nga mga istorya makatabang kanato nga masabtan kung unsa ang kinahanglan aron masulbad ang lisud nga mga problema.

Aron masulbad ang lisud nga mga problema, kinahanglan nimo nga labaw pa sa usa ka programmer. Kinahanglan nimong masabtan ang "kapalaran" sa code, kung giunsa kini nakig-uban sa palibot niini, ug kung giunsa ang paglihok mismo sa palibot.

Ug unya makabaton ka sa imong kaugalingon nga naguba nga semana sa pangilin.

Ang pagpadayon.

Source: www.habr.com

Idugang sa usa ka comment