Folklore nan pwogramasyon ak enjenyè (pati 1)

Folklore nan pwogramasyon ak enjenyè (pati 1)

Sa a se yon seleksyon nan istwa ki soti nan entènèt la sou ki jan pinèz pafwa gen manifestasyon konplètman enkwayab. Petèt ou gen yon bagay pou di tou.

Machin alèji ak vaniy glas krèm

Yon istwa pou enjenyè ki konprann ke evidan an se pa toujou repons lan, e ke kèlkeswa jan reyalite yo ka sanble, yo toujou reyalite yo. Pontiac Division of General Motors Corporation te resevwa yon plent:

Se dezyèm fwa m ap ekri w, e mwen pa blame w paske w pa reponn, paske sa sonnen fou. Fanmi nou an gen yon tradisyon pou manje krèm glase chak swa apre dine. Kalite krèm glase yo chanje chak fwa, epi apre dine, tout fanmi an chwazi ki krèm glase yo achte, apre sa mwen ale nan magazen an. Mwen fèk achte yon Pontiac nouvo e depi lè sa a vwayaj mwen pou jwenn krèm glase vin tounen yon pwoblèm. Ou wè, chak fwa mwen achte glas vaniy epi mwen tounen soti nan magazen an, machin nan pa pral kòmanse. Si mwen pote nenpòt lòt krèm glase, machin nan kòmanse san okenn pwoblèm. Mwen vle poze yon kesyon serye, kèlkeswa sòt li son: "Ki sa ki genyen sou Pontiac a ki fè li pa kòmanse lè mwen pote krèm glase vaniy, men li kòmanse fasil lè mwen pote yon lòt gou nan krèm glase?""

Kòm ou ka imajine, prezidan divizyon an te ensèten sou lèt la. Sepandan, jis nan ka, mwen voye yon enjenyè tcheke. Li te etone ke li te rankontre pa yon moun rich, byen edike k ap viv nan yon zòn bèl. Yo te dakò pou yo rankontre imedyatman apre dine pou yo de nan yo te ka ale nan magazen an pou krèm glase. Aswè sa a se te vaniy, epi lè yo tounen nan machin nan, li pa ta kòmanse.

Enjenyè a te vini twa lòt aswè. Premye fwa krèm glase a te chokola. Machin nan te kòmanse. Dezyèm fwa te gen krèm glase frèz. Machin nan te kòmanse. Sou twazyèm aswè a li te mande pou pran vaniy. Machin nan pa t kòmanse.

Rezònman rasyonèl, enjenyè a te refize kwè ke machin nan te fè alèji ak krèm glase vaniy. Se poutèt sa, mwen te dakò ak mèt machin nan ke li ta kontinye vizit li jiskaske li jwenn yon solisyon a pwoblèm nan. Ak sou wout la, li te kòmanse pran nòt: li te ekri tout enfòmasyon yo, lè nan jounen an, kalite gazolin, lè arive ak retounen soti nan magazen an, elatriye.

Enjenyè a byento reyalize ke mèt machin nan te pase mwens tan achte krèm glase vaniy. Rezon ki fè la te layout nan machandiz yo nan magazen an. Vaniy krèm glase te pi popilè a epi yo te kenbe nan yon frizè separe nan devan magazen an pou fè li pi fasil jwenn. Ak tout lòt varyete yo te nan do a nan magazen an, epi li te pran pi plis tan jwenn varyete nan dwa ak peye.

Kounye a kesyon an te pou enjenyè a: poukisa machin nan pa t kòmanse si mwens tan te pase depi moman motè a etenn? Depi pwoblèm nan te tan, pa krèm glase vaniy, enjenyè a byen vit jwenn repons lan: li te yon seri gaz. Li te fèt chak aswè, men lè mèt machin nan te pase plis tan ap chèche krèm glase, motè a te rive refwadi ase epi li te kòmanse fasil. Men, lè nonm lan te achte krèm glase vaniy, motè a te toujou twò cho ak fèmen gaz la pa t 'gen tan fonn.

Moral: Menm pwoblèm konplètman fou yo pafwa reyèl.

Aksidan Bandicoot

Li fè mal fè eksperyans sa a. Kòm yon pwogramè, ou abitye blame kòd ou an premye, dezyèm, twazyèm ... ak yon kote nan plas la dimilyèm ou blame du a. Ak pi lwen desann lis la ou deja blame ekipman an.

Isit la se istwa mwen sou pinèz pyès ki nan konpitè.

Pou jwèt Crash Bandicoot, mwen te ekri kòd pou chaje ak sove sou yon kat memwa. Pou tankou yon devlopè jwèt kontan, li te tankou yon ti mache nan pak la: mwen te panse travay la ta pran plizyè jou. Sepandan, mwen te fini debogaj kòd la pou sis semèn. Sou wout la, mwen rezoud lòt pwoblèm, men chak kèk jou mwen retounen nan kòd sa a pou kèk èdtan. Se te agoni.

Sentòm nan te sanble ak sa a: lè ou sove jwèt aktyèl la nan jwèt la epi jwenn aksè nan kat memwa a, tout bagay prèske toujou ale amann ... Men, pafwa, li oswa ekri operasyon timeouts pou okenn rezon evidan. Yon anrejistreman kout souvan domaje kat memwa a. Lè yon jwè eseye sove, li pa sèlman echwe pou sove, men tou, li detwi kat jeyografik la. Crap.

Apre yon ti tan, pwodiktè nou an nan Sony, Connie Bus, te kòmanse panike. Nou pa t 'kapab bato jwèt la ak ensèk sa a, ak sis semèn pita mwen pa t' konprann sa ki te lakòz pwoblèm nan. Atravè Connie, nou kontakte lòt devlopè PS1: èske yon moun te rankontre yon bagay ki sanble? Non. Pa gen moun ki te gen pwoblèm ak kat memwa a.

Lè ou pa gen okenn lide pou debogaj, apwòch la sèlman ki rete se "divize ak konkeri": retire plis ak plis kòd nan pwogram nan defo jiskaske gen yon fragman relativman ti kite ki toujou lakòz pwoblèm nan. Sa vle di, ou koupe pwogram nan moso pa moso jiskaske pati ki gen pinèz la rete.

Men, bagay la se, li trè difisil yo koupe moso soti nan yon jwèt videyo. Ki jan yo kouri li si ou retire kòd la ki imite gravite a? Oswa desen karaktè?

Se poutèt sa, nou dwe ranplase tout modil ak souch ki pretann fè yon bagay itil, men an reyalite fè yon bagay trè senp ki pa ka gen erè. Nou dwe ekri beki sa yo pou jwèt la omwen travay. Sa a se yon pwosesis dousman ak douloure.

Nan ti bout tan, mwen te fè li. Mwen retire pi plis ak plis moso nan kòd jiskaske mwen te kite ak kòd inisyal la ki configured sistèm nan kouri jwèt la, inisyalize pyès ki nan konpitè rann, elatriye. Natirèlman, nan etap sa a mwen pa t 'kapab kreye yon meni sove ak chaj, paske mwen ta gen yo kreye yon souch pou tout kòd la grafik. Men, mwen te kapab pretann yo dwe yon itilizatè lè l sèvi avèk (envizib) sove ak chaje ekran epi mande pou konsève pou ak Lè sa a, ekri nan kat memwa a.

Sa a te kite m 'ak yon ti moso nan kòd ki te toujou gen pwoblèm ki anwo a - men li te toujou ap pase owaza! Pi souvan tout bagay te travay byen, men detanzantan te gen pepen. Mwen retire prèske tout kòd jwèt la, men pinèz la te toujou vivan. Sa a te mystérieu: kòd ki rete a pa t 'aktyèlman fè anyen.

Nan kèk pwen, pwobableman alantou twa nan maten, yon panse te rive m '. Li ak ekri (antre/sòti) operasyon yo enplike tan egzekisyon egzak. Lè w ap travay ak yon kondwi difisil, kat memwa oswa modil Bluetooth, kòd ki ba-nivo ki responsab pou lekti ak ekri fè sa an akò ak pulsasyon revèy la.

Avèk èd nan yon revèy, yon aparèy ki pa dirèkteman konekte ak processeur a senkronize ak kòd la egzekite sou processeur a. Revèy la detèmine vitès baud la - vitès la nan ki done yo transfere. Si gen konfizyon ak tan, Lè sa a, swa pyès ki nan konpitè oswa lojisyèl an, oswa toude, yo tou konfonn. Lè sa a se trè move, paske done yo ka domaje.

E si yon bagay nan kòd nou an konfonn tan yo? Mwen tcheke tout bagay ki gen rapò ak sa a nan kòd pwogram tès la epi mwen remake ke nou mete revèy pwogramasyon an nan PS1 a 1 kHz (1000 tik pou chak segonn). Sa a se byen anpil; pa default, lè konsole a kòmanse, li kouri nan 100 Hz. Ak pifò jwèt itilize frekans sa a.

Andy, devlopè jwèt la, mete revèy la sou 1 kHz pou mouvman yo ta ka kalkile pi byen. Andy gen tandans ale pi lwen, epi si nou imite gravite, nou fè li avèk presizyon ke posib!

Men, e si pi vit revèy la yon jan kanmenm afekte distribisyon an jeneral nan pwogram nan, ak Se poutèt sa revèy la ki kontwole vitès la baud pou kat memwa a?

Mwen kòmante kòd revèy la. Erè a pa t rive ankò. Men, sa pa vle di ke nou fikse li, paske echèk la te fèt owaza. E si mwen te jis chans?

Kèk jou apre mwen te fè eksperyans ankò ak pwogram tès la. Ensèk la pa t repete. Mwen te retounen nan kodbaz jwèt la konplè epi mwen modifye kòd sove ak chaj la pou revèy pwogramasyon an ta reset nan valè orijinal li (100Hz) anvan ou jwenn aksè nan kat memwa a, ak Lè sa a, reset tounen nan 1kHz. Pa te gen okenn aksidan ankò.

Men, poukisa sa te rive?

Mwen te retounen nan pwogram tès la ankò. Mwen te eseye jwenn kèk modèl nan ensidan an nan yon erè ak yon revèy 1 kHz. Evantyèlman mwen remake ke erè a rive lè yon moun jwe ak yon kontwolè PS1. Depi mwen ta raman fè sa tèt mwen - poukisa mwen ta bezwen yon kontwolè lè tès sove ak chaje kòd? - Mwen pa t 'menm remake depandans sa a. Men, yon jou, youn nan atis nou yo t ap tann pou m fini tès la - mwen te pwobableman madichon nan moman sa a - ak nève vire kontwolè a nan men l '. Yon erè te fèt. "Tann, kisa?!" Oke, fè li ankò!"

Lè mwen reyalize ke de evènman sa yo te konekte, mwen te kapab byen fasil repwodui erè a: mwen te kòmanse anrejistreman sou kat memwa a, deplase kontwolè a, ak kraze kat memwa a. Pou mwen li te sanble ak yon pinèz pyès ki nan konpitè.

Mwen te vin jwenn Connie epi mwen te di l sou dekouvèt mwen an. Li te transmèt enfòmasyon an bay youn nan enjenyè ki te fèt PS1 la. "Enposib," li te reponn, "Li pa kapab yon pwoblèm pyès ki nan konpitè." Mwen te mande Connie pou fè aranjman pou yon konvèsasyon pou nou.

Enjenyè a te rele m 'epi nou diskite nan angle kase l' yo ak Japonè mwen (trèman) kase. Finalman, mwen te di, "Kite m jis voye pwogram tès 30 liy mwen an kote deplase kontwolè a lakòz yon ensèk." Li te dakò. Li te di ke li te yon fatra nan tan e ke li te fò anpil okipe ap travay sou yon nouvo pwojè, men li ta bay nan paske nou te yon pwomotè trè enpòtan pou Sony. Mwen netwaye pwogram tès mwen an epi mwen voye l ba li.

Nan denmen aswè (nou te nan Los Angeles e li te nan Tokyo) li te rele m ', li te eskize ti kras. Se te yon pwoblèm pyès ki nan konpitè.

Mwen pa konnen ki sa egzakteman ensèk la te, men nan sa mwen te tande nan katye jeneral Sony, si ou mete revèy la nan yon valè ase wo, li entèfere ak eleman sou mèr la nan vwazinaj la nan kristal la revèy. Youn nan yo se te yon kontwolè baud pou kat memwa a, ki te tou mete pousantaj baud pou contrôleur yo. Mwen pa yon enjenyè, kidonk mwen ta ka dezòd yon bagay.

Men, liy anba a se ke te gen entèferans ant eleman sou mèr la. Ak lè transmèt done ansanm nan pò a kontwolè ak pò a kat memwa ak yon revèy kouri nan 1 kHz, Bits yo te pèdi, done yo te pèdi, ak kat la te domaje.

Move bèf

Nan ane 1980 yo, konseye mwen an Sergei te ekri lojisyèl pou SM-1800, yon script Sovyetik PDP-11 la. Mikwo òdinatè sa a jis te enstale nan yon estasyon tren toupre Sverdlovsk, yon sant transpò enpòtan nan Sovyetik la. Nouvo sistèm nan te fèt pou wout kabwèt ak trafik machandiz. Men, li te genyen yon ensèk anmèdan ki te mennen nan aksidan o aza ak aksidan. Falls te toujou fèt lè yon moun te ale lakay ou nan aswè. Men, malgre yon ankèt apwofondi jou kap vini an, òdinatè a te travay kòrèkteman nan tout tès manyèl ak otomatik yo. Sa a anjeneral endike yon kondisyon ras oswa kèk lòt ensèk konpetitif ki rive nan sèten kondisyon. Fatige ak apèl byen ta nan mitan lannwit, Sergei deside ale nan pati anba a nan li, epi premye a tout moun, konprann ki kondisyon nan lakou a marshalling te mennen nan pann nan òdinatè.

Premyèman, li te kolekte estatistik sou tout tonbe san rezon epi li te kreye yon graf pa dat ak lè. Modèl la te evidan. Apre obsève pou kèk jou plis, Sergei reyalize ke li te kapab fasil predi tan nan echèk nan sistèm nan lavni.

Byento li te aprann ke dezòd te fèt sèlman lè estasyon an t ap klase tren mouton ki soti nan nò Ikrèn ak lwès Larisi te dirije nan yon labatwa ki tou pre. Sa a nan tèt li te etranj, paske labatwa a te apwovizyone pa fèm ki sitiye pi pre, nan Kazakhstan.

Plant nikleyè Chernobyl te eksploze an 1986, epi retonbe radyo-aktif yo te fè zòn ki antoure yo pa ka rete. Vas zòn nan nò Ikrèn, Byelorisi ak lwès Larisi te kontamine. Sispèk wo nivo radyasyon nan cha yo rive, Sergei devlope yon metòd pou teste teyori sa a. Popilasyon an te entèdi pou gen dozimèt, kidonk Sergei te anrejistre tèt li ak plizyè militè nan estasyon tren an. Apre plizyè bwason vodka, li te rive konvenk yon sòlda pou mezire nivo radyasyon nan youn nan cha yo sispèk. Li te tounen soti ke nivo a te plizyè fwa pi wo pase valè nòmal.

Se pa sèlman bèt yo emèt anpil radyasyon, nivo li yo te tèlman wo ke li te mennen nan pèt o aza nan ti moso nan memwa a nan SM-1800, ki te sitiye nan yon bilding ki toupre estasyon an.

Te gen yon mank manje nan Sovyetik la, ak otorite yo deside melanje vyann Chernobyl ak vyann ki soti nan lòt rejyon nan peyi a. Sa te fè li posib pou redwi nivo jeneral radyoaktivite san pèdi resous valab. Lè Sergei te aprann sou sa a, imedyatman ranpli dokiman pou emigrasyon. Ak aksidan òdinatè yo te sispann poukont yo lè nivo radyasyon an diminye apre yon sèten tan.

Atravè tiyo yo

Yon fwa, Movietech Solutions te kreye lojisyèl pou sinema, ki fèt pou kontablite, lavant tikè ak jesyon jeneral. Vèsyon DOS nan aplikasyon bato a te byen popilè nan mitan chenn teyat ti ak mitan gwosè nan Amerik di Nò. Se konsa, li pa etone ke lè yo te anonse yon vèsyon Windows 95, entegre ak dènye ekran tactile yo ak kontwar endepandan, ak ekipe ak tout kalite zouti rapò, li byen vit te vin popilè tou. Pi souvan aktyalizasyon a te ale san pwoblèm. Anplwaye IT lokal yo enstale nouvo ekipman, imigre done, epi biznis kontinye. Eksepte lè li pa dire. Lè sa a te rive, konpayi an ta voye soti James, surnome "The Cleaner."

Malgre tinon a sijere yon kalite move, cleaner a se jis yon konbinezon de enstriktè, enstalatè ak Jack-of-all-trades. James ta pase kèk jou nan sit kliyan an mete tout eleman yo ansanm, epi Lè sa a, pase yon lòt koup de jou anseye anplwaye a ki jan yo sèvi ak nouvo sistèm nan, rezoud nenpòt pwoblèm pyès ki nan konpitè ki te parèt ak esansyèlman ede lojisyèl an nan anfans li.

Se poutèt sa, li pa etone ke pandan tan ajitasyon sa yo, James te rive nan biwo a nan maten an, epi anvan li te kapab rive nan biwo li, li te akeyi pa manadjè a, plen ak kafeyin pi lwen pase nòmal.

"Mwen pè ou bezwen ale Annapolis, Nova Scotia, pi vit posib." Tout sistèm yo te tonbe, epi apre yon nwit nan travay ak enjenyè yo, nou pa ka konnen sa ki te pase. Li sanble ke rezo a te echwe sou sèvè a. Men, sèlman apre sistèm nan te kouri pou plizyè minit.

— Yo pa t retounen nan ansyen sistèm lan? - James reponn konplètman seryezman, malgre mantalman li te elaji zye li sezi.

— Egzakteman: espesyalis IT yo "chanje priyorite" epi yo deside ale ak ansyen sèvè yo. James, yo enstale sistèm nan nan sis sit epi jis peye pou sipò prim, ak biznis yo kounye a se kouri tankou li te nan ane 1950 yo.

James te dwate yon ti kras.

- Sa se yon lòt bagay. Oke, ann kòmanse.

Lè li te rive nan Annapolis, premye bagay li te fè se te jwenn premye teyat kliyan an ki te gen yon pwoblèm. Sou kat jeyografik la te pran nan ayewopò an, tout bagay te sanble desan, men zòn ki ozalantou adrès ou vle a te sanble sispèk. Pa ghetto, men okoumansman de fim noir. Pandan James t ap estasye nan twotwa anba lavil la, yon jennès pwoche bò kote l. Etandone gwosè a nan Annapolis, li te gen plis chans youn nan sèlman nan tout vil la. Aparans li imedyatman te pote nan lespri pèsonaj la pi popilè ki te ofri sèks pou lajan sou ekran an gwo. Non, pa sou Julia Roberts, men sou Jon Voight [alizyon nan fim nan "Midnight Cowboy" - approx. liy].

Li te voye jennès la sou wout li, James te ale nan sinema. Zòn ki antoure a te vinn pi byen, men li te toujou bay enpresyon ke yo te kouri desann. Se pa ke James te twò enkyete. Li te ale nan kote mizerab anvan. Epi sa a te Kanada, kote menm vòlè yo politès ase yo di "mèsi" apre yo fin pran bous ou.

Antre bò nan sinema a te nan yon ale dank. James ale nan pòt la epi li frape. Byento li krake epi li louvri yon ti kras.

-Eske w se yon netwayaj? - yon vwa rau soti anndan.

- Wi, se mwen... Mwen vin ranje tout bagay.

James antre nan sal sinema a. Aparamman pa t gen okenn lòt chwa, anplwaye yo te kòmanse distribye tikè papye bay vizitè yo. Sa te fè rapò finansye difisil, se pou kont li plis enteresan detay. Men, anplwaye a te salye James ak soulajman epi imedyatman mennen l 'nan chanm sèvè a.

Nan premye gade, tout bagay te byen. James konekte sou sèvè a epi tcheke kote ki sispèk abityèl yo. Pa gen pwoblèm. Sepandan, nan yon abondans nan prekosyon, James fèmen sèvè a, ranplase kat rezo a, ak woule tounen sistèm nan. Li imedyatman te kòmanse travay nan plen. Anplwaye yo te kòmanse vann tikè ankò.

James rele Mark epi li fè l konnen sitiyasyon an. Li pa difisil pou imajine ke James ta ka vle rete ak wè si yon bagay inatandi rive. Li desann mach eskalye yo epi li te kòmanse mande anplwaye yo sa k te pase. Li evidan sistèm nan sispann travay. Yo etenn li epi limen, tout bagay te travay. Men apre 10 minit sistèm lan tonbe.

Jis nan moman sa a yon bagay ki sanble te rive. Menm lè a, sistèm tikè a te kòmanse voye erè. Anplwaye a te fè yon soupi epi li te pwan tikè papye yo, epi James te prese ale nan chanm sèvè a. Tout bagay te parèt byen ak sèvè a.

Lè sa a, youn nan anplwaye yo antre.

— Sistèm nan ap travay ankò.

James te sezi paske li pat fè anyen. Plis jisteman, pa gen anyen ki ta fè sistèm nan travay. Li dekonekte, li pran telefòn li epi li rele liy sipò konpayi li a. Byento anplwaye a menm antre nan chanm sèvè a.

- Sistèm nan desann.

James gade sèvè a. Yon modèl ki enteresan ak abitye nan fòm milti-koulè danse sou ekran an - chaotikman tòde ak mare tiyo. Nou tout te wè ekran sa a nan kèk pwen. Li te trè byen rann ak literalman ipnotize.


James te peze yon bouton epi modèl la te disparèt. Li te prese nan biwo tikè a epi sou wout la te rankontre yon anplwaye ki te retounen jwenn li.

— Sistèm nan ap travay ankò.

Si ou ka fè yon mantal facepalm, se egzakteman sa James te fè. Screensaver. Li itilize OpenGL. Se poutèt sa, pandan operasyon an, li konsome tout resous processeur sèvè a. Kòm yon rezilta, chak apèl nan sèvè a fini ak yon tan.

James te retounen nan chanm sèvè a, connecté, li ranplase D' ak bèl tuyaux ak yon ekran vid. Sa vle di, olye pou yo yon screensaver ki konsome 100% nan resous processeur, mwen enstale yon lòt ki pa konsome resous. Lè sa a, mwen tann 10 minit yo tcheke devine mwen.

Lè James rive nan pwochen sinema a, li t ap mande kòman pou l eksplike manadjè li ke li te fèk vole 800 km pou etenn ekran ekonomizeur la.

Aksidan pandan yon sèten faz nan lalin lan

Istwa vre. Yon jou, yon ensèk lojisyèl te parèt ki depann de faz lalin lan. Te gen yon ti woutin ki te souvan itilize nan divès pwogram MIT pou kalkile apwoksimasyon a vrè faz Lalin nan. GLS te konstwi woutin sa a nan yon pwogram LISP ki, lè w ap ekri yon fichye, ta bay yon liy ak yon timestamp prèske 80 karaktè. Li te trè ra ke premye liy nan yon mesaj ta fini twò long epi mennen nan liy kap vini an. Men, lè pwogram nan pita li dosye sa a, li madichon. Longè premye liy lan te depann de dat egzak ak lè, ansanm ak longè spesifikasyon faz la nan moman yo te enprime timestamp la. Sa vle di, pinèz la literalman depann de faz lalin lan!

Premye edisyon papye Fichye jagon (Steele-1983) te gen yon egzanp sou yon liy konsa ki te mennen nan ensèk ki dekri a, men tipografi a "ranje" li. Depi lè sa a te dekri kòm yon "ensèk faz lalin".

Sepandan, fè atansyon ak sipozisyon. Sa gen kèk ane, enjenyè CERN (Sant Ewopeyen pou Rechèch Nikleyè) te rankontre erè nan eksperyans ki te fèt nan Gwo kolizyon Elektwon-Pozitron. Depi òdinatè yo aktivman trete gwo kantite done aparèy sa a te pwodwi anvan yo montre rezilta a bay syantis yo, anpil moun te espekile ke lojisyèl an te yon jan kanmenm sansib a faz lalin lan. Plizyè enjenyè dezespere rive nan pati anba a nan verite a. Erè a rive akòz yon ti chanjman nan jeyometri bag ki gen 27 km nan longè akòz deformation Latè a pandan pasaj Lalin nan! Istwa sa a te antre nan folklore fizik kòm "Revenge Newton sou Fizik Patikil" ak yon egzanp sou koneksyon ki genyen ant lwa ki pi senp ak pi ansyen nan fizik ak konsèp syantifik ki pi avanse.

Flushing twalèt la sispann tren an

Pi bon ensèk pyès ki nan konpitè mwen te janm tande pale sou yon tren gwo vitès an Frans. Pinèz la te mennen nan frenaj ijans nan tren an, men sèlman si te gen pasaje abò. Nan chak ka sa yo, yo te pran tren an soti nan sèvis, tcheke, men pa gen anyen yo te jwenn. Lè sa a, li te voye tounen nan liy lan, epi li imedyatman fè aksidan nan yon kanpe.

Pandan youn nan chèk yo, yon enjenyè ki t ap vwayaje nan tren an te ale nan twalèt la. Li byento lave lwen, BOOM! Arè ijans.

Enjenyè a kontakte chofè a epi li mande:

— Kisa w t ap fè jis anvan w frennen?

- Ebyen mwen ralanti nan desandan an...

Sa a te etranj, paske pandan operasyon nòmal tren an ralanti sou desant plizyè douzèn fwa. Tren an te deplase, epi nan pwochen desandan chofè a te avèti:

- Mwen pral ralanti.

Pa gen anyen ki te pase.

— Kisa ou te fè pandan dènye frenaj la? - mande chofè a.

- Ebyen... mwen te nan twalèt...

- Ebyen, ale nan twalèt epi fè sa ou te fè lè nou desann ankò!

Enjenyè a te ale nan twalèt la, epi lè chofè a te avèti: "Mwen ralanti," li vide dlo a. Natirèlman, tren an te kanpe imedyatman.

Koulye a, yo te kapab repwodui pwoblèm nan epi yo bezwen jwenn kòz la.

Apre de minit, yo remake ke kab kontwòl remote fren motè a (tren an te gen yon motè nan chak bout) te dekonekte nan miray kabinè elektrik la epi li te kouche sou relè a ki kontwole solenoid ploge twalèt la... Lè relè a te vire sou, li te kreye entèferans nan kab fren an, ak pwoteksyon nan sistèm kont echèk tou senpleman enkli frenaj ijans.

Pòtay ki rayi FORTRAN

Sa gen kèk mwa, nou remake ke koneksyon rezo yo sou tè pwensipal la [sa a te nan Hawaii] te vin trè, trè dousman. Sa a ta ka dire pou 10-15 minit ak Lè sa a, toudenkou rive ankò. Apre kèk tan, kòlèg mwen plenyen m 'ke koneksyon yo rezo sou tè pwensipal la an jeneral pa fonksyone. Li te gen kèk kòd FORTRAN ki bezwen kopye nan yon machin sou tè pwensipal la, men li pa t 'kapab paske "rezo a pa t' kenbe ase lontan pou telechaje FTP la fini."

Wi, li te tounen soti ke echèk rezo ki te fèt lè yon kòlèg te eseye FTP yon dosye ak kòd sous nan FORTRAN nan yon machin sou tè pwensipal la. Nou te eseye achiv fichye a: Lè sa a, li te kopye san pwoblèm (men machin nan sib pa t 'gen yon depake, kidonk pwoblèm nan pa te rezoud). Finalman nou "divize" kòd FORTRAN an an ti moso epi voye yo youn pa youn. Pifò nan fragman yo te kopye san pwoblèm, men kèk moso pa t 'pase, oswa te pase apre anpil tantativ.

Apre nou fin egzamine pasaj ki gen pwoblèm yo, nou te dekouvri ke yo te gen yon bagay an komen: yo tout te gen blòk kòmantè ki te kòmanse ak fini ak liy ki gen C majiskil (tankou yon kòlèg te pito fè kòmantè nan FORTRAN). Nou te voye yon imèl bay ekspè rezo yo sou tè pwensipal la epi nou te mande èd. Natirèlman, yo te vle wè echantiyon dosye nou yo ki pa t 'kapab transfere atravè FTP... men lèt nou yo pa t' rive jwenn yo. Finalman nou te vini ak yon senp dekriki jan dosye ki pa transfere yo sanble. Li te travay :) [Oze mwen ajoute yon egzanp youn nan kòmantè FORTRAN ki gen pwoblèm isit la? Pwobableman pa vo li!]

Nan fen a nou jere yo kalkile li soti. Yo fèk enstale yon nouvo pòtay ant pati kanpis nou an ak rezo tè pwensipal la. Li te gen GWO difikilte pou transmèt pakè ki te repete ti moso C majiskil! Jis kèk nan pakè sa yo ka pran tout resous pòtay yo epi anpeche pifò lòt pakè yo pase. Nou te pote plent bay manifakti pòtay la... epi yo te reponn: "O, wi, ou fè fas ak yon ensèk ki repete C! Nou deja konnen sou li." Nou finalman rezoud pwoblèm nan lè nou achte yon nouvo pòtay nan yon lòt manifakti (nan defans ansyen an, enkapasite a transfere pwogram FORTRAN yo ka yon avantaj pou kèk!).

Moman difisil

Sa gen kèk ane, pandan m ap travay sou kreye yon sistèm ETL nan Perl pou diminye depans faz 40 esè klinik yo, mwen te bezwen trete apeprè 000 dat. De nan yo pa t pase tès la. Sa a pa t deranje m 'twò paske dat sa yo te pran nan done kliyan bay ki te souvan, nou ta di, etone. Men, lè mwen tcheke done orijinal yo, li te tounen soti ke dat sa yo te 1 janvye 2011 ak 1 janvye 2007. Mwen te panse ke pinèz la te genyen nan pwogram nan mwen te jis ekri, men li te tounen soti ke li te deja 30 ane. fin vye granmoun. Sa a ka son misterye pou moun ki pa abitye ak ekosistèm lojisyèl an. Akoz yon lòt konpayi te pran desizyon depi lontan pou fè lajan, kliyan mwen an te peye m 'repare yon ensèk ke yon konpayi te prezante pa aksidan ak lòt la espre. Pou w konprann de sa m ap pale a, mwen bezwen pale sou konpayi an ki te ajoute karakteristik nan ki te fini vin tounen yon ensèk, osi byen ke kèk lòt evènman enteresan ki te kontribye nan ensèk misterye mwen ranje.

Nan bon ansyen tan yo, òdinatè Apple ta pafwa espontaneman retabli dat yo nan 1 janvye 1904. Rezon ki fè la te senp: li te itilize yon "revèy sistèm" ki mache ak pil pou kenbe tras dat ak lè a. Kisa ki te pase lè batri a te mouri? Òdinatè yo te kòmanse swiv dat la pa kantite segonn depi kòmansman yon epòk. Pa epòk nou te vle di dat referans orijinal la, e pou Macintosh li te 1ye janvye 1904. Apre batri a te mouri, dat aktyèl la te reset nan yon sèl ki espesifye. Men, poukisa sa te rive?

Précédemment, Apple te itilize 32 Bits pou estoke kantite segonn depi dat orijinal la. Yon ti jan ka estoke youn nan de valè - 1 oswa 0. De ti ka estoke youn nan kat valè: 00, 01, 10, 11. Twa ti jan - yon valè sou uit: 000, 001, 010, 011, 100. , 101, 110, 111, elatriye. Ak 32 ta ka estoke youn nan 232 valè, se sa ki, 4 segonn. Pou dat Apple, sa egalize a apeprè 294 ane, kidonk pi gran Mac yo pa ka okipe dat apre 967. Men, si batri sistèm lan mouri, dat la reset a 296 segonn depi kòmansman epòk la, epi ou dwe manyèlman mete dat la chak fwa ou limen òdinatè a (oswa jiskaske ou achte yon nouvo batri).

Sepandan, desizyon Apple pou estoke dat kòm segonn depi epòk la te vle di ke nou pa t 'kapab okipe dat anvan epòk la, ki te gen konsekans byen lwen, jan nou pral wè. Apple prezante yon karakteristik, pa yon ensèk. Pami lòt bagay, sa vle di ke sistèm operasyon Macintosh la te iminitè a "ensèk milenè" (ki pa ta ka di sou anpil aplikasyon Mac ki te gen pwòp sistèm dat yo pou kontourne restriksyon).

Ale pi devan. Nou te itilize Lotus 1-2-3, "aplikasyon asasen" IBM ki te ede lanse revolisyon PC a, byenke òdinatè Apple yo te gen VisiCalc, ki te fè òdinatè pèsonèl la yon siksè. Nan jistis, si 1-2-3 pa t parèt, PC yo ta diman pran, e istwa òdinatè pèsonèl yo te kapab devlope yon fason diferan. Lotus 1-2-3 mal trete 1900 kòm yon ane kwasans. Lè Microsoft te pibliye premye calcul li a, Multiplan, li te pran yon ti pati nan mache a. Epi lè yo te lanse pwojè Excel la, yo te deside pa sèlman kopye konplo nonmen ranje ak kolòn nan Lotus 1-2-3, men tou pou asire konpatibilite ensèk yo lè yo trete 1900 kòm yon ane kwasans. Pwoblèm sa a toujou egziste jodi a. Sa vle di, nan 1-2-3 sa a te yon ensèk, men nan Excel se te yon desizyon konsyan ki asire ke tout itilizatè 1-2-3 te kapab enpòte tab yo nan Excel san yo pa chanje done yo, menm si li pa kòrèk.

Men, te gen yon lòt pwoblèm. Premyèman, Microsoft te pibliye Excel pou Macintosh, ki pa t rekonèt dat anvan 1ye janvye 1904. Ak nan Excel, 1ye janvye 1900 te konsidere kòm kòmansman epòk la. Se poutèt sa, devlopè yo te fè yon chanjman pou pwogram yo rekonèt ki kalite epòk la ak done ki estoke nan tèt li an akò ak epòk la vle. Microsoft menm te ekri yon atik eksplikasyon sou sa. Ak desizyon sa a te mennen nan ensèk mwen an.

Sistèm ETL mwen an te resevwa fèy kalkil Excel nan men kliyan ki te kreye sou Windows, men yo ta ka kreye tou sou yon Mac. Se poutèt sa, kòmansman epòk la nan tablo a ta ka swa 1 janvye 1900, oswa 1 janvye 1904. Ki jan yo chèche konnen? Fòma fichye Excel la montre enfòmasyon ki nesesè yo, men analizeur mwen itilize a pa t montre li (kounye a li fè sa), e li sipoze ke ou konnen epòk la pou yon tab espesifik. Mwen pwobableman te ka pase plis tan konprann fòma binè Excel la epi voye yon patch bay otè analizè a, men mwen te gen anpil plis fè pou kliyan an, kidonk mwen byen vit te ekri yon eristik pou detèmine epòk la. Li te senp.

Nan Excel, dat 5 jiyè 1998 la ka reprezante nan fòma "07-05-98" (sistèm Ameriken initil), "5 jiyè 98", "5 jiyè 1998", "5-Jul-98" oswa kèk lòt fòma, yon lòt fòma initil (iwonilman, youn nan fòma vèsyon mwen an nan Excel pa t ofri se ISO 8601). Sepandan, nan tablo a, yo te estoke dat ki pa gen fòma kòm swa "35981" pou epòk-1900 oswa "34519" pou epòk-1904 (nimewo yo reprezante kantite jou depi epòk la). Mwen tou senpleman itilize yon analizeur senp pou ekstrè ane a soti nan dat la fòma, ak Lè sa a, itilize analizeur Excel la ekstrè ane a soti nan dat la san fòma. Si tou de valè yo te diferan pa 4 ane, Lè sa a, mwen te konnen ke mwen te itilize yon sistèm ak epòk-1904.

Poukisa mwen pa t jis itilize dat fòma? Paske 5 jiyè 1998 ka fòma kòm "Jiyè 98" ak jou mwa a pèdi. Nou te resevwa tab nan men anpil konpayi ki te kreye yo nan anpil fason diferan ke li te jiska nou (nan ka sa a, mwen menm) konnen dat yo. Anplis, si Excel jwenn li dwat, Lè sa a, se konsa nou ta dwe!

An menm tan mwen te rankontre 39082. Kite m raple w ke Lotus 1-2-3 te konsidere ane 1900 kòm yon ane kwasans, e sa te repete fidèlman nan Excel. Epi depi sa a te ajoute yon jou nan ane 1900 la, anpil fonksyon kalkil dat ta ka mal pou jou sa a menm. Sa vle di, 39082 te kapab 1 janvye 2011 (sou Mac) oswa 31 desanm 2006 (sou Windows). Si "ane analizeur" mwen an ekstrè ane 2011 la soti nan valè fòma a, Lè sa a, tout bagay anfòm. Men, kòm analizeur Excel la pa konnen ki epòk yo te itilize, li par défaut nan epòk-1900, retounen ane 2006 la. Aplikasyon mwen an te wè diferans lan te 5 ane, li te konsidere li kòm yon erè, li te konekte li epi li te retounen yon valè san fòma.

Pou jwenn alantou sa a, mwen te ekri sa a (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

Lè sa a, tout 40 dat yo te analize kòrèkteman.

Nan mitan gwo travay enprime

Nan kòmansman ane 1980 yo, papa m te travay nan Teknoloji Depo, yon divizyon kounye a ki disparèt ki te kreye kondui kasèt ak sistèm pneumatik pou manje kasèt gwo vitès.

Yo reamenaje kondui yo pou yo ka gen yon sèl santral "A" kondwi ki konekte ak sèt "B" kondui, ak ti OS nan RAM ki te kontwole "A" kondwi a te kapab delege operasyon lekti ak ekri nan tout "B" kondui yo.

Chak fwa kondwi "A" te kòmanse, li te nesesè yo mete yon diskèt nan kondwi periferik ki konekte ak "A" yo nan lòd yo chaje sistèm operasyon an nan memwa li. Li te trè primitif: pouvwa enfòmatik te bay pa yon mikrokontwolè 8-bit.

Odyans lan sib pou ekipman sa yo se te konpayi ki gen gwo depo done - bank, chenn Yo Vann an Detay, elatriye - ki te bezwen enprime yon anpil nan etikèt adrès oswa deklarasyon labank.

Yon kliyan te gen yon pwoblèm. Nan mitan yon travay ekri an lèt detache, yon sèl kondwi an patikilye "A" ka sispann travay, sa ki lakòz tout travay la bloke. Pou retabli operasyon kondwi a, anplwaye yo te oblije rdemare tout bagay. Men, si sa a te rive nan mitan an nan yon travay sis èdtan, Lè sa a, yon gwo kantite tan òdinatè chè te pèdi ak orè a nan operasyon an antye te deranje.

Teknisyen yo te voye nan Depo Technologies. Men, malgre pi bon efò yo, yo pa t 'kapab repwodui ensèk la nan kondisyon tès yo: li te sanble rive nan mitan an nan gwo travay enprime. Pwoblèm lan pa t ' pyès ki nan konpitè a, yo ranplase tout sa yo te kapab: RAM, microcontrôleur, lecteur disquette, tout pati posib nan lecteur kasèt la - pwoblèm lan te pèsiste.

Lè sa a, teknisyen yo rele katye jeneral la epi yo rele Ekspè a.

Ekspè a te pwan yon chèz ak yon tas kafe, li te chita nan sal òdinatè a—nan epòk sa yo te gen chanm ki te dedye a òdinatè—epi li te gade kòm anplwaye yo te fè yon seri gwo travay enprime. Ekspè a t ap tann yon echèk rive - e li te fè. Tout moun te gade Ekspè a, men li pa t gen okenn lide poukisa sa te rive. Se konsa, li te bay lòd pou travay la dwe keud ankò, ak tout anplwaye yo ak teknisyen yo te retounen nan travay.

Ekspè a ankò chita sou chèz la epi li kòmanse tann yon echèk. Apeprè sis èdtan te pase ak echèk la te fèt. Ekspè a ankò pa te gen okenn lide, eksepte ke tout bagay te pase nan yon chanm plen ak moun. Li te bay lòd pou yo rekòmanse misyon an, li chita tounen epi tann.

Pa twazyèm echèk la, Ekspè a remake yon bagay. Echèk la te fèt lè pèsonèl chanje kasèt nan yon kondwi etranje. Anplis, echèk la te fèt le pli vit ke youn nan anplwaye yo te mache nan yon mozayik sèten sou planche a.

Te etaj la leve soti nan mozayik aliminyòm mete nan yon wotè 6 a 8 pous. Plizyè fil ki soti nan òdinatè te kouri anba etaj ki wo a pou anpeche nenpòt moun pa aksidantèlman mache sou yon kab enpòtan. Mozayik yo te mete trè byen sere pou anpeche debri soti anba etaj la leve.

Ekspè a reyalize ke youn nan mozayik yo te defòme. Lè yon anplwaye te demisyone sou kwen li, bor mozayik la fwote kont mozayik adjasan yo. Pati plastik ki konekte mozayik yo tou fwote ak yo, sa ki te lakòz microdischarges estatik ki te kreye entèferans frekans radyo.

Jodi a, RAM pi byen pwoteje kont entèferans frekans radyo. Men, nan ane sa yo sa a pa t 'ka a. Ekspè a reyalize ke entèferans sa a deranje memwa a, epi ak li operasyon an nan sistèm nan fonksyone. Li rele sèvis sipò a, kòmande nouvo mozayik, enstale yo tèt li, epi pwoblèm nan disparèt.

Se mare wo!

Istwa a te fèt nan yon chanm sèvè, nan katriyèm oswa senkyèm etaj nan yon biwo nan Portsmouth (mwen panse), nan zòn waf la.

Yon jou sèvè Unix ak baz done prensipal la te fè aksidan. Yo rekòmanse l ', men li san pwoblèm mwen tap kontinye tonbe sou yo ak ankò. Nou deside rele yon moun nan sèvis sipò a.

Nèg sipò a... Mwen panse ke li te rele Mark, men sa pa gen pwoblèm... Mwen pa kwè mwen konnen li. Li pa enpòtan, reyèlman. Ann rete ak Mark, ok? Gwo.

Se konsa, kèk èdtan pita Mark te rive (li pa yon fason lontan soti nan Leeds nan Portsmouth, ou konnen), vire sou sèvè a ak tout bagay te travay san pwoblèm. Tipik sipò modi, kliyan an vin fache anpil sou li. Mark gade nan fichye yo epi li pa jwenn anyen endezirab. Se konsa, Mark tounen nan tren an (oswa kèlkeswa mòd transpò li te rive sou li, li te kapab yon bèf bwete pou tout sa mwen konnen ... de tout fason, sa pa gen pwoblèm, oke?) epi li tounen nan Leeds, li te gaspiye. jou a.

Menm aswè a sèvè a kraze ankò. Istwa a se menm bagay la tou... sèvè a pa leve. Mark eseye ede adistans, men kliyan an pa ka kòmanse sèvè a.

Yon lòt tren, otobis, mereng sitwon oswa kèk lòt krap, ak Mark tounen nan Portsmouth. Gade, sèvè a bòt san okenn pwoblèm! Mirak. Mark pase plizyè èdtan tcheke si tout bagay anfòm ak sistèm operasyon an oswa lojisyèl epi li ale nan Leeds.

Nan mitan jounen an sèvè a aksidan (pran li fasil!). Fwa sa a, li sanble rezonab pou pote nan pyès ki nan konpitè sipò moun pou ranplase sèvè a. Men, non, apre apeprè 10 èdtan li tonbe tou.

Sitiyasyon an repete pou plizyè jou. Sèvè a ap travay, aksidan apre apeprè 10 èdtan epi li pa kòmanse pou pwochen 2 èdtan yo. Yo tcheke refwadisman, koule memwa, yo tcheke tout bagay, men yo pa jwenn anyen. Lè sa a, aksidan yo sispann.

Semèn nan te pase san sans... tout moun te kontan. Kè kontan jiskaske tout rekòmanse. Foto a se menm bagay la. 10 èdtan travay, 2-3 èdtan D '...

Lè sa a, yon moun (mwen panse ke yo te di m ke moun sa a pa gen anyen fè ak li) te di:

"Se mare nan!"

Eksklamasyon an te rankontre ak regards vid, ak men yon moun pwobableman ezite nan bouton an apèl sekirite.

"Li sispann travay ak mare nan."

Sa a ta sanble yon konsèp konplètman etranje pou travayè sipò IT, ki pa gen anpil chans pou li Annuaire Tide a pandan y ap chita pou kafe. Yo te eksplike ke sa a pa t 'kapab gen rapò ak mare nan okenn fason, paske sèvè a te ap travay pou yon semèn san echèk.

"Semèn pase a mare a te ba, men semèn sa a li wo."

Yon ti tèminoloji pou moun ki pa gen yon lisans yatch. Mare yo depann de sik linè a. Epi pandan Latè a wotasyon, chak 12,5 èdtan rale gravitasyonèl Solèy la ak Lalin lan kreye yon vag. Nan kòmansman sik la 12,5 èdtan gen yon mare wo, nan mitan sik la gen yon reflu, ak nan fen a gen yon mare wo ankò. Men, kòm òbit lalin lan chanje, se konsa diferans ki genyen ant mare ba ak wo. Lè Lalin nan se ant Solèy la ak Latè a oswa sou bò opoze a nan Latè a (plen lalin oswa pa gen lalin), nou jwenn mare Syzygyn - mare segondè ki pi wo ak mare ki pi ba yo. Nan mwatye lalin nou jwenn mare kwadrati - mare ki pi ba yo. Diferans ki genyen ant de ekstrèm yo diminye anpil. Sik linè a dire 28 jou: syzygian - kwadrature - syzygian - kwadratur.

Lè teknisyen yo te eksplike sans nan fòs mare yo, yo imedyatman te panse ke yo te bezwen rele lapolis la. Ak byen lojik. Men, li sanble mesye a te gen rezon. De semèn pi bonè, yon destriktè mare pa lwen biwo a. Chak fwa mare nan leve l 'nan yon wotè sèten, pòs rada bato a te fini nan nivo a nan etaj la chanm sèvè. Ak rada a (oswa ekipman lagè elektwonik, oswa kèk lòt jwèt militè) te kreye dezòd nan òdinatè yo.

Misyon vòl pou fize a

Mwen te charger ak pòtaj yon gwo (apeprè 400 mil liy) fize lanse kontwòl ak siveyans sistèm nan nouvo vèsyon sistèm operasyon an, du ak lang. Plis presizeman, soti nan Solaris 2.5.1 rive nan Solaris 7, ak soti nan Verdix Ada Development System (VADS), ki ekri nan Ada 83, nan sistèm Rational Apex Ada, ki ekri nan Ada 95. Rational te achte VADS, e pwodwi li yo te achte. demode, byenke Rational te eseye aplike vèsyon konpatib nan pakè VADS-espesifik pou fasilite tranzisyon an nan du Apex la.

Twa moun te ede m jis jwenn kòd la konpile pwòp. Li te pran de semèn. Apre sa, mwen te travay poukont mwen pou fè sistèm nan mache. Nan ti bout tan, li te pi move achitekti ak aplikasyon nan yon sistèm lojisyèl ke mwen te rankontre, kidonk li te pran yon lòt de mwa pou konplete pò a. Lè sa a, sistèm nan te soumèt pou tès, ki te pran plizyè mwa ankò. Mwen imedyatman korije ensèk yo te jwenn pandan tès la, men nimewo yo te byen vit diminye (kòd sous la se te yon sistèm pwodiksyon, kidonk fonksyonalite li yo te travay byen fyab, mwen jis te oblije retire ensèk yo ki te parèt pandan adaptasyon nan nouvo du). Evantyèlman, lè tout bagay te travay jan li ta dwe, mwen te transfere nan yon lòt pwojè.

Epi vandredi anvan Jou Aksyon de Gras la, telefòn nan sone.

Lansman fize a te sipoze teste nan apeprè twa semèn, epi pandan tès laboratwa dekont la, sekans kòmandman an te bloke. Nan lavi reyèl, sa a ta avòte tès la, epi si blokaj la te fèt nan kèk segonn nan kòmanse motè a, plizyè aksyon irevokabl ta rive nan sistèm oksilyè yo, ki ta mande pou yon preparasyon long - ak chè - nan fize a. Li pa t ap kòmanse, men anpil moun t ap fache anpil paske yo te pèdi tan ak anpil, anpil lajan. Pa kite pèsonn di w ke Depatman Defans lan depanse lajan san reflechi—mwen pa janm rankontre yon manadjè kontra ki pa t mete bidjè an premye oswa dezyèm, apre sa.

Nan mwa anvan yo, defi dekont sa a te kouri plizyè santèn fwa nan plizyè varyasyon, ak sèlman kèk okèt minè. Se konsa, chans pou sa a rive te trè ba, men konsekans li yo te trè enpòtan. Miltipliye tou de faktè sa yo, epi w ap konprann ke nouvèl la te prevwa yon semèn jou ferye depafini pou mwen ak plizyè douzèn enjenyè ak administratè.

Apre sa, yo te peye atansyon sou mwen kòm moun ki te pote sistèm nan.

Menm jan ak pifò sistèm ki enpòtan pou sekirite yo, yo te konekte anpil paramèt, kidonk li te fasil pou idantifye kèk liy kòd ki te egzekite anvan sistèm nan te fè aksidan. Ak nan kou, pa te gen absoliman anyen dwòl sou yo; menm ekspresyon yo te egzekite avèk siksè literalman dè milye de fwa pandan menm kouri a.

Nou te rele moun ki soti nan Apex nan Rational paske se yo menm ki te devlope du a ak kèk nan woutin yo te devlope yo te rele nan kòd la sispèk. Yo (ak tout lòt moun) te enpresyone ke te gen yon bezwen pou rive nan rasin nan yon pwoblèm ki genyen literalman enpòtans nasyonal la.

Kòm pa te gen anyen ki enteresan nan jounal yo, nou deside eseye repwodui pwoblèm nan nan yon laboratwa lokal. Sa a pa t 'yon travay fasil depi evènman an te rive apeprè yon fwa pou chak 1000 kouri. Youn nan rezon sispèk se ke yon apèl nan yon fonksyon mutex devlope pa vandè (ki fè pati pake migrasyon VADS la) Unlock pa t mennen nan debloke. Fil pwosesis la ki rele fonksyon an trete mesaj batman kè, ki nominalman te rive chak segonn. Nou ogmante frekans lan a 10 Hz, se sa ki, 10 fwa pa segonn, epi nou te kòmanse kouri. Apeprè yon èdtan pita sistèm lan fèmen tèt li. Nan jounal la, nou te wè ke sekans mesaj anrejistre yo te menm jan ak pandan tès la echwe. Nou te fè plizyè kouri plis, sistèm nan te toujou bloke 45-90 minit apre kòmansman an, epi chak fwa boutèy la te genyen menm wout la. Menmsi nou te teknikman kouri kòd diferan - frekans mesaj la te diferan - konpòtman sistèm lan te menm, kidonk nou te gen konfyans ke senaryo chaj sa a te lakòz menm pwoblèm nan.

Koulye a, nou te bezwen konnen ki kote egzakteman bloke a te fèt nan sekans ekspresyon yo.

Aplikasyon sa a nan sistèm nan itilize sistèm nan travay Ada, ak itilize li ekstrèmman mal. Travay yo se yon konstriksyon wo nivo ansanm ègzekutabl nan Ada, yon bagay tankou fil nan ekzekisyon, sèlman bati nan lang nan tèt li. Lè de travay bezwen kominike, yo "mete yon rendez-vous", echanj done ki nesesè yo, ak Lè sa a, sispann rendez-vous la epi retounen nan ekzekisyon endepandan yo. Sepandan, sistèm lan te aplike yon fason diferan. Apre yon travay sib te rendezvous, travay sib sa a te rendezvous ak yon lòt travay, ki Lè sa a, rendezvoused ak yon twazyèm travay, ak sou sa jiskaske kèk pwosesis te konplete. Apre sa, tout rendez-vous sa yo te fini ak chak travay te oblije retounen nan ekzekisyon li. Sa vle di, nou t ap fè fas ak sistèm apèl fonksyon ki pi chè nan mond lan, ki te sispann tout pwosesis "multitasking" pandan ke li te trete yon pati nan done yo opinyon. Ak anvan sa a pa t 'mennen nan pwoblèm sèlman paske debi a te trè ba.

Mwen te dekri mekanis travay sa a paske lè yo te mande yon randevou oswa yo te espere konplete, yon "chanje travay" te kapab rive. Sa vle di, processeur a ta ka kòmanse trete yon lòt travay ki pare yo dwe egzekite. Li sanble ke lè yon travay se pare pou randevou ak yon lòt travay, yon travay konplètman diferan ka kòmanse egzekite, epi evantyèlman kontwòl retounen nan premye randevou a. Ak lòt evènman ka rive ki lakòz travay la chanje; youn evènman sa yo se yon apèl nan yon fonksyon sistèm, tankou enprime oswa egzekite yon mutex.

Pou konprann ki liy kòd ki te lakòz pwoblèm nan, mwen te bezwen jwenn yon fason pou anrejistre pwogrè atravè yon sekans deklarasyon san yo pa deklanche yon chanjman travay, ki ta anpeche yon aksidan rive. Se konsa, mwen pa t 'kapab pwofite Put_Line()pou evite fè operasyon I/O. Mwen ta ka mete yon varyab kontwa oswa yon bagay ki sanble, men ki jan mwen ka wè valè li si mwen pa ka montre li sou ekran an?

Epitou, lè w ap egzamine boutèy la, li te tounen soti ke, malgre pwosesis la nan mesaj batman kè pandye, ki bloke tout operasyon I / O nan pwosesis la ak anpeche lòt pwosesis yo te fèt, lòt travay endepandan kontinye ap egzekite. Sa se, travay la pa te bloke antyèman, se sèlman yon chèn (kritik) nan travay.

Sa a te siy ki nesesè pou evalye ekspresyon bloke a.

Mwen te fè yon pake Ada ki gen yon travay, yon kalite enimere, ak yon varyab mondyal nan kalite sa a. Literal anpil moun te mare nan ekspresyon espesifik nan sekans pwoblèm nan (egzanp. Incrementing_Buffer_Index, Locking_Mutex, Mutex_Unlocked), ak Lè sa a, mete ekspresyon plasman nan li ki asiyen enimerasyon ki koresponn lan nan yon varyab mondyal. Depi kòd objè a nan tout bagay sa a tou senpleman estoke yon konstan nan memwa, chanje travay kòm yon rezilta nan ekzekisyon li yo te trè fasil. Nou te sitou sispèk nan ekspresyon ki ta ka chanje travay la, depi bloke a te fèt sou ekzekisyon olye ke retounen lè chanje travay la tounen (pou plizyè rezon).

Travay swiv la tou senpleman kouri nan yon bouk epi detanzantan tcheke pou wè si valè varyab mondyal la te chanje. Avèk chak chanjman, valè a te sove nan yon dosye. Lè sa a, yon kout tann ak yon nouvo chèk. Mwen te ekri varyab la nan dosye a paske travay la te egzekite sèlman lè sistèm nan te chwazi li pou ekzekisyon lè chanje travay la nan zòn nan pwoblèm. Kèlkeswa sa ki te pase nan travay sa a pa ta afekte lòt travay bloke ki pa gen rapò.

Li te espere ke lè sistèm nan rive nan pwen an nan egzekite kòd la pwoblèm, varyab mondyal la ta dwe reset lè w ap deplase nan chak ekspresyon pwochen. Lè sa a, yon bagay pral rive ki lakòz travay la chanje, epi depi frekans ekzekisyon li yo (10 Hz) pi ba pase sa yo ki nan travay la siveyans, monitè a ka pran valè a nan varyab mondyal la epi ekri li. Nan yon sitiyasyon nòmal, mwen te kapab jwenn yon sekans repete nan yon ti gwoup enimerasyon: dènye valè yo nan varyab la nan moman chanjman an nan travay la. Lè pandye, varyab mondyal la pa ta dwe chanje ankò, epi dènye valè ekri a pral endike ki ekspresyon ki pa ranpli.

Mwen kouri kòd la ak swiv. Li te jele. Ak siveyans la te travay tankou revèy.

Jounal la te genyen sekans espere a, ki te entèwonp pa yon valè ki endike ke yo te rele yon mutex Unlock, epi travay la pa fini - menm jan ak plizyè milye apèl anvan yo.

Enjenyè Apex yo te fyèvman analize kòd yo nan moman sa a epi yo te jwenn yon plas nan mutex la kote, teyorikman, yon seri ka rive. Men, pwobabilite li yo te trè ba, paske se sèlman yon sèten sekans evènman ki rive nan yon sèten tan ka mennen nan bloke. Lwa Murphy, mesye, se Lwa Murphy.

Pou pwoteje moso kòd mwen te bezwen an, mwen ranplase apèl fonksyon mutex yo (bati sou tèt fonksyonalite OS mutex la) ak yon ti pake mutex natif natal Ada pou kontwole aksè mutex nan moso sa a.

Mwen mete li nan kòd la epi li kouri tès la. Sèt èdtan apre kòd la te toujou ap travay.

Kòd mwen an te soumèt bay Rational, kote yo te konpile li, demonte li, epi tcheke ke li pa t 'sèvi ak apwòch la menm ki te itilize nan fonksyon yo mutex pwoblèm.

Sa a se te revizyon kòd ki gen plis moun nan karyè mwen 🙂 Te gen anviwon dis enjenyè ak manadjè nan chanm nan avè m ', yon lòt dis moun te nan yon apèl konferans - epi yo tout egzamine apeprè 20 liy nan kòd.

Yo te revize kòd la, nouvo dosye ègzèkutabl yo te rasanble epi yo te soumèt pou tès regresyon fòmèl. Yon koup de semèn pita, tès dekont la te reyisi ak fize a te pran.

Oke, sa a tout byen ak bon, men ki pwen nan istwa a?

Se te yon pwoblèm absoliman degoutan. Dè santèn de milye de liy kòd, ekzekisyon paralèl, plis pase yon douzèn pwosesis entèraksyon, pòv achitekti ak aplikasyon pòv, koòdone pou sistèm entegre ak dè milyon de dola depanse. Pa gen presyon, dwa.

Mwen pa t 'sèl moun k ap travay sou pwoblèm sa a, byenke mwen te nan dokiman Pwen Enpòtan an kòm mwen te fè pòtaj la. Men, menm si mwen te fè li, sa pa vle di mwen te konprann tout santèn de milye liy kòd yo, oswa menm ekreme yo. Enjenyè nan tout peyi a te analize kòd la ak mòso bwa yo, men lè yo te di m 'ipotèz yo sou kòz echèk la, li te pran sèlman mwatye yon minit pou demanti yo. Epi lè yo te mande m pou analize teyori yo, m t ap pase l bay yon lòt moun, paske li te evidan pou mwen ke enjenyè sa yo t ap mache mal. Son presumptuous? Wi, sa a se vre, men mwen rejte ipotèz yo ak demann yo pou yon lòt rezon.

Mwen te konprann nati pwoblèm nan. Mwen pa t konnen egzakteman ki kote sa t ap pase oswa poukisa, men mwen te konnen sa ki t ap pase.

Pandan ane yo, mwen te akimile anpil konesans ak eksperyans. Mwen te youn nan pyonye sèvi ak Ada e mwen te konprann avantaj ak dezavantaj li yo. Mwen konnen ki jan bibliyotèk kouri Ada yo okipe travay yo ak fè fas ak ekzekisyon paralèl. Apre sa, mwen konprann ba-nivo pwogramasyon nan nivo memwa, rejis ak asanblaj. Nan lòt mo, mwen gen konesans pwofon nan domèn mwen an. Apre sa, mwen te itilize yo jwenn kòz pwoblèm nan. Mwen pa t 'sèlman travay alantou ensèk la, mwen konprann ki jan yo jwenn li nan yon anviwònman ègzekutabl trè sansib.

Istwa sa yo nan lit ak kòd yo pa trè enteresan pou moun ki pa abitye ak karakteristik yo ak kondisyon nan yon lit konsa. Men, istwa sa yo ede nou konprann sa li pran pou rezoud pwoblèm vrèman difisil.

Pou rezoud pwoblèm vrèman difisil, ou bezwen plis pase jis yon pwogramè. Ou bezwen konprann "sò" kòd la, ki jan li reyaji ak anviwònman li yo, ak ki jan anviwònman an li menm ap travay.

Lè sa a, ou pral gen pwòp semèn jou ferye depafini ou.

Yo dwe kontinye.

Sous: www.habr.com

Add nouvo kòmantè