Llên gwerin rhaglenwyr a pheirianwyr (rhan 1)

Llên gwerin rhaglenwyr a pheirianwyr (rhan 1)

Dyma ddetholiad o straeon o'r Rhyngrwyd am sut mae gan fygiau weithiau amlygiadau cwbl anhygoel. Efallai bod gennych chi rywbeth i'w ddweud hefyd.

Alergedd car i hufen iâ fanila

Stori i beirianwyr sy'n deall nad yr amlwg yw'r ateb bob amser, ac ni waeth pa mor bell y mae'r ffeithiau'n ymddangos, maen nhw'n dal i fod y ffeithiau. Derbyniodd Adran Pontiac o General Motors Corporation gŵyn:

Dyma'r eildro i mi ysgrifennu atoch chi, a dwi ddim yn eich beio chi am beidio ag ateb, achos mae'n swnio'n wallgof. Mae gan ein teulu draddodiad o fwyta hufen iâ bob nos ar ôl swper. Mae'r mathau o hufen iâ yn newid bob tro, ac ar ôl cinio, mae'r teulu cyfan yn dewis pa hufen iâ i'w brynu, ac ar ôl hynny rwy'n mynd i'r siop. Prynais Pontiac newydd yn ddiweddar ac ers hynny mae fy nheithiau i gael hufen iâ wedi dod yn broblem. Rydych chi'n gweld, bob tro y byddaf yn prynu hufen iâ fanila ac yn dod yn ôl o'r siop, ni fydd y car yn dechrau. Os byddaf yn dod ag unrhyw hufen iâ arall, mae'r car yn dechrau heb unrhyw broblem. Dwi am ofyn cwestiwn difrifol, dim ots pa mor wirion mae’n swnio: “Beth am y Pontiac sy’n gwneud iddo beidio dechrau pan dwi’n dod â hufen ia fanila, ond yn dechrau’n hawdd pan dwi’n dod a blas arall o hufen ia?”.”

Fel y gallwch ddychmygu, roedd llywydd yr adran yn amheus ynghylch y llythyr. Fodd bynnag, rhag ofn, anfonais beiriannydd i wirio. Synodd fod gwr cyfoethog, dysgedig yn byw mewn ardal brydferth, yn ei gyfarfod. Fe gytunon nhw i gyfarfod yn syth ar ôl swper er mwyn i'r ddau ohonyn nhw gael mynd i'r siop i gael hufen iâ. Y noson honno roedd yn fanila, a phan gyrhaeddon nhw'n ôl i'r car, ni fyddai'n dechrau.

Daeth y peiriannydd dair noson arall. Y tro cyntaf i'r hufen iâ fod yn siocled. Dechreuodd y car. Yr eildro roedd hufen iâ mefus. Dechreuodd y car. Ar y drydedd noson gofynnodd am gael cymryd fanila. Wnaeth y car ddim dechrau.

Yn rhesymegol, gwrthododd y peiriannydd gredu bod gan y car alergedd i hufen iâ fanila. Felly, cytunais â pherchennog y car y byddai’n parhau â’i ymweliadau nes iddo ddod o hyd i ateb i’r broblem. Ac ar hyd y ffordd, dechreuodd gymryd nodiadau: ysgrifennodd yr holl wybodaeth, amser o'r dydd, math o gasoline, amser cyrraedd a dychwelyd o'r siop, ac ati.

Buan y sylweddolodd y peiriannydd fod perchennog y car yn treulio llai o amser yn prynu hufen iâ fanila. Y rheswm oedd gosodiad y nwyddau yn y siop. Hufen iâ fanila oedd y mwyaf poblogaidd ac fe'i cadwyd mewn rhewgell ar wahân o flaen y siop i'w gwneud yn haws dod o hyd iddo. Ac roedd yr holl fathau eraill yng nghefn y siop, a chymerodd lawer mwy o amser i ddod o hyd i'r amrywiaeth a'r tâl cywir.

Nawr roedd y cwestiwn i'r peiriannydd: pam na ddechreuodd y car os oedd llai o amser wedi mynd heibio ers i'r injan gael ei diffodd? Gan mai amser oedd y broblem, nid hufen iâ fanila, canfu'r peiriannydd yr ateb yn gyflym: clo nwy ydoedd. Digwyddodd bob nos, ond pan dreuliodd perchennog y car fwy o amser yn chwilio am hufen iâ, llwyddodd yr injan i oeri digon a dechreuodd yn hawdd. A phan brynodd y dyn hufen iâ fanila, roedd yr injan yn dal yn rhy boeth ac nid oedd gan y clo nwy amser i doddi.

Moesol: Mae hyd yn oed problemau hollol wallgof weithiau'n real.

Crash bandicoot

Mae'n boenus i brofi hyn. Fel rhaglennydd, rydych chi'n dod i arfer â beio'ch cod yn gyntaf, yn ail, yn drydydd ... ac yn rhywle yn y deg milfed lle rydych chi'n beio'r casglwr. Ac ymhellach i lawr y rhestr rydych chi eisoes yn beio'r offer.

Dyma fy stori am y byg caledwedd.

Ar gyfer y gêm Crash Bandicoot, ysgrifennais god i'w lwytho a'i gadw i gerdyn cof. Ar gyfer datblygwr gêm smyg o'r fath, roedd fel taith gerdded yn y parc: roeddwn i'n meddwl y byddai'r gwaith yn cymryd sawl diwrnod. Fodd bynnag, fe wnes i ddadfygio'r cod am chwe wythnos. Ar hyd y ffordd, fe wnes i ddatrys problemau eraill, ond bob ychydig ddyddiau dychwelais i'r cod hwn am ychydig oriau. Roedd yn ing.

Roedd y symptom yn edrych fel hyn: pan fyddwch chi'n cadw'r chwarae presennol o'r gêm ac yn cyrchu'r cerdyn cof, mae popeth bron bob amser yn mynd yn iawn ... Ond weithiau mae'r amseriadau llawdriniaeth darllen neu ysgrifennu heb unrhyw reswm amlwg. Mae recordiad byr yn aml yn niweidio'r cerdyn cof. Pan fydd chwaraewr yn ceisio arbed, mae nid yn unig yn methu ag arbed, ond hefyd yn dinistrio'r map. Crap.

Ar ôl ychydig, dechreuodd ein cynhyrchydd yn Sony, Connie Bus, fynd i banig. Ni allem anfon y gêm gyda'r byg hwn, a chwe wythnos yn ddiweddarach nid oeddwn yn deall beth oedd yn achosi'r broblem. Trwy Connie, fe wnaethom gysylltu â datblygwyr PS1 eraill: a oes unrhyw un wedi dod ar draws unrhyw beth tebyg? Nac ydw. Nid oedd unrhyw un yn cael problemau gyda'r cerdyn cof.

Pan nad oes gennych unrhyw syniadau ar gyfer dadfygio, yr unig ddull sydd ar ôl yw “rhannu a gorchfygu”: dileu mwy a mwy o god o'r rhaglen ddiffygiol nes bod darn cymharol fach ar ôl sy'n dal i achosi'r broblem. Hynny yw, rydych chi'n torri'r rhaglen fesul darn nes bod y rhan sy'n cynnwys y byg yn aros.

Ond y peth yw, mae'n anodd iawn torri talpiau allan o gêm fideo. Sut i'w redeg os gwnaethoch chi ddileu'r cod sy'n efelychu disgyrchiant? Neu dynnu cymeriadau?

Felly, mae'n rhaid i ni ddisodli modiwlau cyfan gyda bonion sy'n esgus gwneud rhywbeth defnyddiol, ond mewn gwirionedd yn gwneud rhywbeth syml iawn na all gynnwys gwallau. Mae'n rhaid i ni ysgrifennu baglau o'r fath ar gyfer y gêm i o leiaf weithio. Mae hon yn broses araf a phoenus.

Yn fyr, fe wnes i. Fe wnes i dynnu mwy a mwy o ddarnau o god nes i mi gael fy ngadael gyda'r cod cychwynnol sy'n ffurfweddu'r system i redeg y gêm, yn cychwyn y caledwedd rendro, ac ati. Wrth gwrs, ar hyn o bryd ni allwn greu dewislen arbed a llwytho, oherwydd byddai'n rhaid i mi greu bonyn ar gyfer yr holl god graffeg. Ond gallwn i esgus bod yn ddefnyddiwr gan ddefnyddio'r sgrin arbed a llwytho (anweledig) a gofyn am arbed ac yna ysgrifennu at y cerdyn cof.

Gadawodd hyn i mi darn bach o god oedd yn dal â'r broblem uchod - ond roedd yn dal i ddigwydd ar hap! Gan amlaf roedd popeth yn gweithio'n iawn, ond weithiau roedd diffygion. Fe wnes i dynnu bron yr holl god gêm, ond roedd y byg yn dal yn fyw. Roedd hyn yn ddryslyd: nid oedd y cod sy'n weddill yn gwneud dim mewn gwirionedd.

Ar ryw adeg, tua thri yn y bore fwy na thebyg, daeth meddwl i mi. Mae gweithrediadau darllen ac ysgrifennu (mewnbwn/allbwn) yn cynnwys amseroedd gweithredu manwl gywir. Pan fyddwch chi'n gweithio gyda gyriant caled, cerdyn cof neu fodiwl Bluetooth, mae'r cod lefel isel sy'n gyfrifol am ddarllen ac ysgrifennu yn gwneud hynny yn unol â chodlysiau'r cloc.

Gyda chymorth cloc, mae dyfais nad yw wedi'i chysylltu'n uniongyrchol â'r prosesydd yn cael ei chydamseru â'r cod gweithredu ar y prosesydd. Mae'r cloc yn pennu'r gyfradd baud - y cyflymder y mae data'n cael ei drosglwyddo. Os oes dryswch ynghylch amseriadau, yna mae naill ai'r caledwedd neu'r feddalwedd, neu'r ddau, hefyd yn ddryslyd. Ac mae hyn yn ddrwg iawn, oherwydd gall y data gael ei niweidio.

Beth os yw rhywbeth yn ein cod yn drysu'r amseriadau? Gwiriais bopeth sy'n ymwneud â hyn yn y cod rhaglen brawf a sylwais ein bod yn gosod yr amserydd rhaglenadwy yn PS1 i 1 kHz (1000 o diciau yr eiliad). Mae hyn yn eithaf llawer; yn ddiofyn, pan fydd y consol yn cychwyn, mae'n rhedeg ar 100 Hz. Ac mae'r rhan fwyaf o gemau'n defnyddio'r amlder hwn.

Gosododd Andy, datblygwr y gêm, yr amserydd i 1 kHz fel y byddai symudiadau'n cael eu cyfrifo'n fwy cywir. Mae Andy yn tueddu i fynd dros ben llestri, ac os ydyn ni'n efelychu disgyrchiant, rydyn ni'n ei wneud mor gywir â phosib!

Ond beth pe bai cyflymu'r amserydd rywsut yn effeithio ar amseriad cyffredinol y rhaglen, ac felly'r cloc sy'n rheoleiddio'r gyfradd baud ar gyfer y cerdyn cof?

Sylwais ar y cod amserydd. Ni ddigwyddodd y gwall eto. Ond nid yw hyn yn golygu ein bod yn ei drwsio, oherwydd digwyddodd y methiant ar hap. Beth pe bawn i'n lwcus?

Ychydig ddyddiau yn ddiweddarach arbrofais eto gyda'r rhaglen brawf. Ni ddaeth y byg eto. Es yn ôl i'r sylfaen cod gêm lawn ac addasu'r cod arbed a llwytho fel y byddai'r amserydd rhaglenadwy yn ailosod i'w werth gwreiddiol (100Hz) cyn cyrchu'r cerdyn cof, ac yna'n ailosod yn ôl i 1kHz. Nid oedd mwy o ddamweiniau.

Ond pam y digwyddodd hyn?

Dychwelais at y rhaglen brawf eto. Ceisiais ddod o hyd i ryw batrwm yn achos gwall gydag amserydd 1 kHz. Yn y pen draw, sylwais fod y gwall yn digwydd pan fydd rhywun yn chwarae gyda rheolydd PS1. Gan mai anaml y byddwn yn gwneud hyn fy hun - pam y byddai angen rheolydd arnaf wrth brofi cod arbed a llwytho? - Wnes i ddim hyd yn oed sylwi ar y ddibyniaeth hon. Ond un diwrnod roedd un o'n hartistiaid yn aros i mi orffen profi - mae'n debyg fy mod yn melltithio'r eiliad honno - ac yn nerfus troellog y rheolydd yn ei ddwylo. Mae gwall wedi digwydd. “Arhoswch, beth?!” Wel, gwnewch hynny eto!"

Pan sylweddolais fod y ddau ddigwyddiad hyn yn rhyng-gysylltiedig, roeddwn yn gallu atgynhyrchu'r gwall yn hawdd: dechreuais recordio i'r cerdyn cof, symud y rheolydd, a difetha'r cerdyn cof. I mi roedd yn edrych fel byg caledwedd.

Deuthum at Connie a dweud wrthi am fy narganfyddiad. Trosglwyddodd y wybodaeth i un o'r peirianwyr a ddyluniodd y PS1. “Amhosib,” atebodd, “Ni all fod yn broblem caledwedd.” Gofynnais i Connie drefnu sgwrs i ni.

Galwodd y peiriannydd fi a buom yn dadlau yn ei Saesneg toredig a fy Japaneg (hynod) doredig. Yn olaf dywedais, “Gadewch imi anfon fy rhaglen brawf 30 llinell lle mae symud y rheolydd yn achosi nam.” Cytunodd. Dywedodd ei fod yn wastraff amser a'i fod yn hynod o brysur yn gweithio ar brosiect newydd, ond y byddai'n ildio oherwydd ein bod yn ddatblygwr pwysig iawn i Sony. Fe wnes i lanhau fy rhaglen brawf a'i hanfon ato.

Y noson wedyn (roedden ni yn Los Angeles ac yntau yn Tokyo) fe ffoniodd fi ac ymddiheuro'n dda. Roedd yn broblem caledwedd.

Nid wyf yn gwybod beth yn union oedd y byg, ond o'r hyn a glywais ym mhencadlys Sony, os ydych chi'n gosod yr amserydd i werth digon uchel, fe wnaeth ymyrryd â chydrannau ar y motherboard yng nghyffiniau'r grisial amserydd. Roedd un ohonynt yn rheolydd cyfradd baud ar gyfer y cerdyn cof, a oedd hefyd yn gosod y gyfradd baud ar gyfer y rheolwyr. Dydw i ddim yn beiriannydd, felly efallai fy mod wedi gwneud llanast o rywbeth.

Ond y gwir amdani yw bod ymyrraeth rhwng cydrannau ar y famfwrdd. Ac wrth drosglwyddo data ar yr un pryd trwy'r porthladd rheolydd a'r porthladd cerdyn cof gydag amserydd yn rhedeg ar 1 kHz, collwyd darnau, collwyd data, a difrodwyd y cerdyn.

Buchod drwg

Yn yr 1980au, ysgrifennodd fy mentor Sergei feddalwedd ar gyfer y SM-1800, clôn Sofietaidd o'r PDP-11. Mae'r microgyfrifiadur hwn newydd gael ei osod mewn gorsaf reilffordd ger Sverdlovsk, canolbwynt trafnidiaeth pwysig yn yr Undeb Sofietaidd. Cynlluniwyd y system newydd i gyfeirio wagenni a thraffig nwyddau. Ond roedd yn cynnwys byg annifyr a arweiniodd at ddamweiniau a damweiniau ar hap. Roedd cwympiadau bob amser yn digwydd pan fyddai rhywun yn mynd adref gyda'r nos. Ond er gwaethaf ymchwiliad trylwyr y diwrnod wedyn, gweithiodd y cyfrifiadur yn gywir ym mhob prawf llaw ac awtomatig. Mae hyn fel arfer yn dynodi cyflwr hil neu ryw fyg cystadleuol arall sy'n digwydd o dan amodau penodol. Wedi blino ar alwadau yn hwyr yn y nos, penderfynodd Sergei fynd i'r gwaelod, ac yn gyntaf oll, deall pa amodau yn yr iard drefnu a arweiniodd at y dadansoddiad cyfrifiadurol.

Yn gyntaf, casglodd ystadegau o bob cwymp anesboniadwy a chreu graff yn ôl dyddiad ac amser. Roedd y patrwm yn amlwg. Ar ôl arsylwi am ychydig ddyddiau eraill, sylweddolodd Sergei y gallai ragweld yn hawdd amser methiannau system yn y dyfodol.

Clywodd yn fuan mai dim ond pan oedd yr orsaf yn didoli llwythi trenau o wartheg o ogledd Wcráin a gorllewin Rwsia yn mynd i ladd-dy cyfagos y bu aflonyddwch. Roedd hyn ynddo'i hun yn rhyfedd, oherwydd bod y lladd-dy yn cael ei gyflenwi gan ffermydd a leolir yn llawer agosach, yn Kazakhstan.

Ffrwydrodd gorsaf ynni niwclear Chernobyl ym 1986, a gwnaeth canlyniadau ymbelydrol yr ardaloedd cyfagos yn anghyfannedd. Roedd ardaloedd helaeth yng ngogledd Wcráin, Belarus a gorllewin Rwsia wedi’u halogi. Gan amau ​​bod lefelau uchel o ymbelydredd yn y cerbydau oedd yn cyrraedd, datblygodd Sergei ddull i brofi'r ddamcaniaeth hon. Gwaherddir y boblogaeth rhag cael dosimetrau, felly cofrestrodd Sergei ei hun gyda nifer o ddynion milwrol yn yr orsaf reilffordd. Ar ôl sawl diod o fodca, llwyddodd i argyhoeddi milwr i fesur lefel yr ymbelydredd yn un o'r cerbydau amheus. Mae'n troi allan bod y lefel yn sawl gwaith yn uwch na'r gwerthoedd arferol.

Nid yn unig bod y gwartheg yn allyrru llawer o ymbelydredd, roedd ei lefel mor uchel fel ei fod wedi arwain at golli darnau ar hap er cof am y SM-1800, a oedd wedi'i leoli mewn adeilad wrth ymyl yr orsaf.

Roedd yna brinder bwyd yn yr Undeb Sofietaidd, a phenderfynodd yr awdurdodau gymysgu cig Chernobyl gyda chig o ranbarthau eraill y wlad. Roedd hyn yn ei gwneud hi'n bosibl lleihau lefel gyffredinol yr ymbelydredd heb golli adnoddau gwerthfawr. Ar ôl dysgu am hyn, llenwodd Sergei ddogfennau ar gyfer ymfudo ar unwaith. A daeth y damweiniau cyfrifiadurol i ben ar eu pen eu hunain pan ostyngodd lefel yr ymbelydredd dros amser.

Trwy'r pibellau

Un tro, creodd Movietech Solutions feddalwedd ar gyfer sinemâu, a ddyluniwyd ar gyfer cyfrifeg, gwerthu tocynnau a rheolaeth gyffredinol. Roedd fersiwn DOS o'r app blaenllaw yn eithaf poblogaidd ymhlith cadwyni theatr ffilm bach a chanolig yng Ngogledd America. Felly nid yw'n syndod, pan gyhoeddwyd fersiwn Windows 95, wedi'i hintegreiddio â'r sgriniau cyffwrdd diweddaraf a chiosgau hunanwasanaeth, ac wedi'i gyfarparu â phob math o offer adrodd, daeth yn boblogaidd yn gyflym hefyd. Gan amlaf aeth y diweddariad heb broblemau. Gosododd y staff TG lleol offer newydd, mudo data, a pharhaodd y busnes. Ac eithrio pan nad oedd yn para. Pan fyddai hyn yn digwydd, byddai'r cwmni'n anfon James allan, a'r llysenw "The Cleaner."

Er bod y llysenw yn awgrymu math ysgeler, dim ond cyfuniad o hyfforddwr, gosodwr a jac-o-holl grefftau yw'r glanhawr. Byddai James yn treulio ychydig ddyddiau ar safle'r cleient yn rhoi'r holl gydrannau at ei gilydd, ac yna'n treulio cwpl o ddiwrnodau eraill yn addysgu'r staff sut i ddefnyddio'r system newydd, gan ddatrys unrhyw broblemau caledwedd a gododd ac yn y bôn yn helpu'r meddalwedd yn ei fabandod.

Felly, nid yw'n syndod bod James wedi cyrraedd y swyddfa yn y bore yn ystod y cyfnod prysur hwn, a chyn iddo allu cyrraedd ei ddesg, cafodd ei gyfarch gan y rheolwr, yn llawn caffein y tu hwnt i'r arfer.

“Mae gen i ofn bod angen i chi fynd i Annapolis, Nova Scotia, cyn gynted â phosib.” Aeth eu system gyfan i lawr, ac ar ôl noson o weithio gyda'u peirianwyr, ni allwn ddarganfod beth ddigwyddodd. Mae'n edrych fel bod y rhwydwaith wedi methu ar y gweinydd. Ond dim ond ar ôl i'r system fod yn rhedeg am sawl munud.

- Wnaethon nhw ddim dychwelyd i'r hen system? - James yn ateb yn gwbl ddifrifol, er ei fod yn feddyliol ehangu ei lygaid mewn syndod.

— Yn union: mae eu harbenigwr TG wedi “newid blaenoriaethau” a phenderfynu gadael gyda’u hen weinydd. James, gosodasant y system ar chwe safle a dim ond talu am gymorth premiwm, ac mae eu busnes bellach yn cael ei redeg fel yr oedd yn y 1950au.

Sythu James i fyny ychydig.

- Mater arall yw hynny. Iawn, gadewch i ni ddechrau.

Pan gyrhaeddodd Annapolis, y peth cyntaf a wnaeth oedd dod o hyd i theatr gyntaf y cwsmer a oedd â phroblem. Ar y map a gymerwyd yn y maes awyr, roedd popeth yn edrych yn weddus, ond roedd yr ardal o amgylch y cyfeiriad a ddymunir yn edrych yn amheus. Ddim yn ghetto, ond yn atgoffa rhywun o film noir. Wrth i James barcio wrth ymyl ymyl y ddinas, daeth putain ato. O ystyried maint Annapolis, mae'n debyg mai dyma'r unig un yn y ddinas gyfan. Daeth ei hymddangosiad i feddwl yn syth am y cymeriad enwog a oedd yn cynnig rhyw am arian ar y sgrin fawr. Na, nid am Julia Roberts, ond am Jon Voight [cyfeiriad at y ffilm "Midnight Cowboy" - tua. lôn].

Wedi anfon y butain ar ei ffordd, aeth James i'r sinema. Roedd yr ardal gyfagos wedi gwella, ond roedd yn dal i roi'r argraff o gael ei rhedeg i lawr. Nid bod James yn poeni gormod. Mae wedi bod i leoedd truenus o'r blaen. A dyma oedd Canada, lle mae hyd yn oed muggers yn ddigon cwrtais i ddweud “diolch” ar ôl cymryd eich waled.

Roedd mynedfa ochr y sinema mewn ale dank. Cerddodd James at y drws a churo. Yn fuan creodd ac agorodd ychydig.

-Ydych chi'n lanhawr? - daeth llais cryg o'r tu mewn.

- Ydy, fi yw e... des i drwsio popeth.

Cerddodd James i mewn i'r lobi sinema. Mae'n debyg nad oedd ganddynt unrhyw ddewis arall, dechreuodd staff ddosbarthu tocynnau papur i ymwelwyr. Roedd hyn yn gwneud adrodd ariannol yn anodd, heb sôn am fanylion mwy diddorol. Ond cyfarchodd y staff James gyda rhyddhad ac aeth ag ef i'r ystafell gweinyddwyr ar unwaith.

Ar yr olwg gyntaf, roedd popeth yn iawn. Mewngofnododd James i'r gweinydd a gwirio'r mannau amheus arferol. Dim problem. Fodd bynnag, o fod yn ofalus iawn, caeodd James y gweinydd, newidiodd y cerdyn rhwydwaith a rholio'r system yn ôl. Dechreuodd weithio'n llawn ar unwaith. Dechreuodd y staff werthu tocynnau eto.

Galwodd James ar Mark a rhoi gwybod iddo am y sefyllfa. Nid yw'n anodd dychmygu y gallai James fod eisiau aros o gwmpas a gweld a fydd unrhyw beth annisgwyl yn digwydd. Aeth i lawr y grisiau a dechreuodd ofyn i'r gweithwyr beth ddigwyddodd. Yn amlwg mae'r system wedi rhoi'r gorau i weithio. Fe wnaethon nhw ei ddiffodd ac ymlaen, fe weithiodd popeth. Ond ar ôl 10 munud fe ddisgynnodd y system i ffwrdd.

Dim ond ar hyn o bryd digwyddodd rhywbeth tebyg. Yn sydyn, dechreuodd y system docynnau daflu gwallau. Ochneidiodd y staff a gafael yn y tocynnau papur, a brysiodd James i ystafell y gweinydd. Roedd popeth yn edrych yn dda gyda'r gweinydd.

Yna aeth un o'r gweithwyr i mewn.

—Mae'r system yn gweithio eto.

Roedd James mewn penbleth oherwydd nad oedd wedi gwneud dim. Yn fwy manwl gywir, dim byd a fyddai'n gwneud i'r system weithio. Fe allgofnododd, cododd ei ffôn, a galwodd linell gymorth ei gwmni. Yn fuan aeth yr un gweithiwr i mewn i ystafell y gweinydd.

- Mae'r system i lawr.

Edrychodd James ar y gweinydd. Roedd patrwm diddorol a chyfarwydd o siapiau amryliw yn dawnsio ar y sgrin - yn gwingo'n anhrefnus ac yn cydblethu pibellau. Rydyn ni i gyd wedi gweld yr arbedwr sgrin hon ar ryw adeg. Roedd wedi'i rendro'n hyfryd ac yn llythrennol yn hypnoteiddio.


Pwysodd James fotwm a diflannodd y patrwm. Brysiodd i'r swyddfa docynnau ac ar y ffordd cyfarfu â gweithiwr yn dychwelyd ato.

—Mae'r system yn gweithio eto.

Os gallwch chi wneud palmwydd wyneb meddwl, dyna'n union a wnaeth James. Arbedwr sgrin. Mae'n defnyddio OpenGL. Ac felly, yn ystod gweithrediad, mae'n defnyddio holl adnoddau'r prosesydd gweinydd. O ganlyniad, mae pob galwad i'r gweinydd yn dod i ben gyda goramser.

Dychwelodd James i ystafell y gweinydd, mewngofnodi, a gosod sgrin wag yn lle'r arbedwr sgrin gyda'r pibellau hardd. Hynny yw, yn lle arbedwr sgrin sy'n defnyddio 100% o adnoddau prosesydd, gosodais un arall nad yw'n defnyddio adnoddau. Yna arhosais 10 munud i wirio fy nyfaliad.

Pan gyrhaeddodd James y sinema nesaf, roedd yn pendroni sut i egluro i'w reolwr ei fod newydd hedfan 800 km i ddiffodd y sgrin arbed.

Cwymp yn ystod cyfnod penodol o'r lleuad

Stori wir. Un diwrnod cododd nam meddalwedd a oedd yn dibynnu ar gyfnod y lleuad. Roedd ychydig o drefn a ddefnyddiwyd yn gyffredin mewn amrywiol raglenni MIT i gyfrifo'r brasamcan o wir gyfnod y Lleuad. Gwnaeth GLS gynnwys y drefn hon mewn rhaglen LISP a fyddai, wrth ysgrifennu ffeil, yn allbynnu llinell gyda stamp amser bron i 80 nod o hyd. Anaml iawn y byddai llinell gyntaf neges yn rhy hir ac yn arwain at y llinell nesaf. A phan fydd y rhaglen yn ddiweddarach yn darllen y ffeil hon, mae'n melltithio. Roedd hyd y llinell gyntaf yn dibynnu ar yr union ddyddiad ac amser, yn ogystal â hyd y fanyleb cyfnod ar yr adeg yr argraffwyd y stamp amser. Hynny yw, roedd y byg yn llythrennol yn dibynnu ar gyfnod y lleuad!

Argraffiad papur cyntaf Ffeil Jargon (Steele-1983) yn cynnwys enghraifft o linell o'r fath a arweiniodd at y byg a ddisgrifiwyd, ond fe wnaeth y cysodi ei “drwsio”. Ers hynny mae hwn wedi'i ddisgrifio fel "byg cyfnod y lleuad".

Fodd bynnag, byddwch yn ofalus gyda rhagdybiaethau. Ychydig flynyddoedd yn ôl, daeth peirianwyr o CERN (Canolfan Ewropeaidd ar gyfer Ymchwil Niwclear) ar draws gwallau mewn arbrofion a gynhaliwyd yn y Peiriant Gwrthdaro Electron-Positron Mawr. Gan fod cyfrifiaduron yn mynd ati i brosesu'r swm enfawr o ddata a gynhyrchir gan y ddyfais hon cyn dangos y canlyniad i wyddonwyr, roedd llawer yn dyfalu bod y feddalwedd rywsut yn sensitif i gyfnod y lleuad. Daeth sawl peiriannydd anobeithiol i waelod y gwir. Cododd y gwall oherwydd newid bach yn geometreg y cylch 27 km o hyd oherwydd anffurfiad y Ddaear yn ystod taith y Lleuad! Mae’r stori hon wedi mynd i mewn i lên gwerin ffiseg fel “Dial Newton ar Gronynnau Ffiseg” ac enghraifft o’r cysylltiad rhwng deddfau ffiseg symlaf a hynaf a’r cysyniadau gwyddonol mwyaf datblygedig.

Mae fflysio'r toiled yn atal y trên

Y byg caledwedd gorau dwi erioed wedi clywed amdano oedd ar drên cyflym yn Ffrainc. Arweiniodd y byg at frecio’r trên mewn argyfwng, ond dim ond os oedd teithwyr ar ei bwrdd. Ym mhob achos o'r fath, tynnwyd y trên allan o wasanaeth, ei wirio, ond ni ddarganfuwyd dim. Yna anfonwyd ef yn ôl i'r llinell, a damwain ar unwaith i stop.

Yn ystod un o'r gwiriadau, aeth peiriannydd oedd yn teithio ar y trên i'r toiled. Golchodd i ffwrdd yn fuan, BOOM! Stop brys.

Cysylltodd y peiriannydd â’r gyrrwr a gofynnodd:

— Beth oeddech chi'n ei wneud ychydig cyn brecio?

- Wel, mi arafu ar y disgyniad ...

Roedd hyn yn rhyfedd, oherwydd yn ystod gweithrediad arferol mae'r trên yn arafu ar ddisgyniadau dwsinau o weithiau. Symudodd y trên ymlaen, ac ar y disgyniad nesaf rhybuddiodd y gyrrwr:

- Rydw i'n mynd i arafu.

Ni ddigwyddodd dim.

— Beth wnaethoch chi yn ystod y brecio diwethaf? - gofynnodd y gyrrwr.

- Wel... roeddwn i yn y toiled...

- Wel, yna ewch i'r toiled a gwneud yr hyn a wnaethoch pan fyddwn yn mynd i lawr eto!

Aeth y peiriannydd i’r toiled, a phan rybuddiodd y gyrrwr: “Rwy’n arafu,” fflysio’r dŵr. Wrth gwrs, stopiodd y trên ar unwaith.

Nawr gallent atgynhyrchu'r broblem ac roedd angen dod o hyd i'r achos.

Ar ôl dwy funud, fe sylwon nhw fod cebl rheoli o bell brêc yr injan (roedd gan y trên un injan ar bob pen) wedi'i ddatgysylltu o wal y cabinet trydanol a'i fod yn gorwedd ar y ras gyfnewid a oedd yn rheoli solenoid plwg y toiled... Pan fydd y ras gyfnewid wedi'i droi ymlaen, creodd ymyrraeth yn y cebl brêc, ac roedd amddiffyniad y system yn erbyn methiannau yn syml yn cynnwys brecio brys.

Y porth a gasodd FORTRAN

Ychydig fisoedd yn ôl fe wnaethom sylwi bod y cysylltiadau rhwydwaith ar y tir mawr [roedd hyn yn Hawaii] yn mynd yn araf iawn, iawn. Gallai hyn bara am 10-15 munud ac yna digwydd yn sydyn eto. Ar ôl peth amser, cwynodd fy nghydweithiwr i mi fod y cysylltiadau rhwydwaith ar y tir mawr yn gyffredinol ddim yn gweithio. Roedd ganddo rywfaint o god FORTRAN yr oedd angen ei gopïo i beiriant ar y tir mawr, ond ni allai hynny oherwydd "nad oedd y rhwydwaith yn dal i fyny yn ddigon hir i'r uwchlwythiad FTP ei gwblhau."

Do, daeth i'r amlwg bod methiannau rhwydwaith wedi digwydd pan geisiodd cydweithiwr FTP ffeil gyda chod ffynhonnell yn FORTRAN i beiriant ar y tir mawr. Fe wnaethon ni geisio archifo'r ffeil: yna fe'i copïwyd yn llyfn (ond nid oedd gan y peiriant targed ddadbacio, felly ni chafodd y broblem ei datrys). Yn olaf, rydym yn "rhannu" cod FORTRAN yn ddarnau bach iawn a'u hanfon un ar y tro. Cafodd y rhan fwyaf o'r darnau eu copïo heb unrhyw broblemau, ond nid oedd rhai darnau'n mynd heibio, neu'n pasio ar ôl hynny lluosog ymdrechion.

Pan edrychon ni ar y darnau problemus, fe wnaethon ni ddarganfod bod ganddyn nhw rywbeth yn gyffredin: roedden nhw i gyd yn cynnwys blociau sylwadau a oedd yn dechrau ac yn gorffen gyda llinellau yn cynnwys prifddinas C (gan fod yn well gan gydweithiwr wneud sylw yn FORTRAN). Fe wnaethom anfon e-bost at arbenigwyr rhwydwaith ar y tir mawr a gofyn am help. Wrth gwrs, roedden nhw eisiau gweld samplau o'n ffeiliau na ellid eu trosglwyddo trwy FTP... ond nid oedd ein llythyrau yn eu cyrraedd. Yn olaf, rydym wedi meddwl am syml disgrifiosut olwg sydd ar ffeiliau anhrosglwyddadwy. Fe weithiodd :) [Dare i mi ychwanegu enghraifft o un o'r sylwadau FORTRAN problemus yma? Mae'n debyg nad yw'n werth chweil!]

Yn y diwedd fe wnaethom lwyddo i ddatrys y broblem. Gosodwyd porth newydd yn ddiweddar rhwng ein rhan ni o’r campws a rhwydwaith y tir mawr. Cafodd anhawster enfawr i drosglwyddo pecynnau a oedd yn cynnwys darnau niferus o briflythrennau C! Dim ond ychydig o'r pecynnau hyn a allai ddefnyddio'r holl adnoddau porth ac atal y rhan fwyaf o becynnau eraill rhag mynd drwodd. Fe wnaethon ni gwyno i wneuthurwr y porth ... ac atebon nhw: “O, ie, rydych chi'n wynebu byg o C dro ar ôl tro! Rydyn ni eisoes yn gwybod amdano.” Fe wnaethom ddatrys y broblem yn y pen draw trwy brynu porth newydd gan wneuthurwr arall (yn amddiffyniad y cyntaf, gall yr anallu i drosglwyddo rhaglenni FORTRAN fod o fantais i rai!).

Amserau caled

Ychydig flynyddoedd yn ôl, wrth weithio ar greu system ETL yn Perl i leihau costau treialon clinigol cam 40, roedd angen i mi brosesu tua 000 o ddyddiadau. Methodd dau ohonynt yn y prawf. Nid oedd hyn yn fy mhoeni'n ormodol oherwydd bod y dyddiadau hyn wedi'u cymryd o ddata a ddarparwyd gan gleientiaid a oedd yn aml, a ddywedwn, yn syndod. Ond pan wnes i wirio'r data gwreiddiol, mae'n troi allan mai'r dyddiadau hyn oedd Ionawr 1, 2011 ac Ionawr 1, 2007. Roeddwn i'n meddwl bod y byg wedi'i gynnwys yn y rhaglen yr oeddwn newydd ei hysgrifennu, ond daeth i'r amlwg ei bod eisoes yn 30 mlynedd hen. Gall hyn swnio'n ddirgel i'r rhai sy'n anghyfarwydd â'r ecosystem meddalwedd. Oherwydd penderfyniad hirsefydlog cwmni arall i wneud arian, talodd fy nghleient i mi atgyweirio nam yr oedd un cwmni wedi'i gyflwyno'n ddamweiniol a'r llall yn bwrpasol. Er mwyn i chi ddeall yr hyn rwy'n siarad amdano, mae angen i mi siarad am y cwmni a ychwanegodd y nodwedd a ddaeth i ben i fod yn fyg, yn ogystal ag ychydig o ddigwyddiadau diddorol eraill a gyfrannodd at y byg dirgel a drwsiais.

Yn yr hen ddyddiau da, weithiau byddai cyfrifiaduron Apple yn ailosod eu dyddiad yn ddigymell i Ionawr 1, 1904. Roedd y rheswm yn syml: roedd yn defnyddio “cloc system” wedi'i bweru gan fatri i gadw golwg ar y dyddiad a'r amser. Beth ddigwyddodd pan fu farw'r batri? Dechreuodd cyfrifiaduron olrhain y dyddiad yn ôl nifer yr eiliadau ers dechrau'r cyfnod. Erbyn y cyfnod roeddem yn golygu'r dyddiad cyfeirio gwreiddiol, ac ar gyfer Macintoshes oedd Ionawr 1, 1904. Ac ar ôl i'r batri farw, ailosodwyd y dyddiad cyfredol i'r un penodedig. Ond pam y digwyddodd hyn?

Yn flaenorol, defnyddiodd Apple 32 did i storio nifer yr eiliadau ers y dyddiad gwreiddiol. Gall un did storio un o ddau werth - 1 neu 0. Gall dau ddid storio un o bedwar gwerth: 00, 01, 10, 11. Tri did - un gwerth allan o wyth: 000, 001, 010, 011, 100 , 101, 110, 111, etc. A gallai 32 storio un o 232 o werthoedd, hynny yw, 4 eiliad. Ar gyfer dyddiadau Apple, roedd hyn yn cyfateb i tua 294 o flynyddoedd, felly ni all Macs hŷn drin dyddiadau ar ôl 967. Ac os bydd batri'r system yn marw, mae'r dyddiad yn cael ei ailosod i 296 eiliad ers dechrau'r epoc, a rhaid i chi osod y dyddiad â llaw bob tro y byddwch chi'n troi'r cyfrifiadur ymlaen (neu nes i chi brynu batri newydd).

Fodd bynnag, roedd penderfyniad Apple i storio dyddiadau fel eiliadau ers y cyfnod yn golygu na allem drin dyddiadau cyn yr epoc, a oedd â chanlyniadau pellgyrhaeddol, fel y gwelwn. Cyflwynodd Apple nodwedd, nid byg. Ymhlith pethau eraill, roedd hyn yn golygu bod system weithredu Macintosh yn imiwn i “fyg y mileniwm” (na ellid ei ddweud am lawer o gymwysiadau Mac a oedd â'u systemau dyddiad eu hunain i osgoi cyfyngiadau).

Cer ymlaen. Fe wnaethon ni ddefnyddio Lotus 1-2-3, "cymhwysiad lladdwr" IBM a helpodd i lansio'r chwyldro PC, er bod gan gyfrifiaduron Apple VisiCalc, a wnaeth y cyfrifiadur personol yn llwyddiant. A bod yn deg, pe na bai 1-2-3 wedi ymddangos, go brin y byddai cyfrifiaduron personol wedi diflannu, a gallai hanes cyfrifiaduron personol fod wedi datblygu'n wahanol iawn. Roedd Lotus 1-2-3 yn trin 1900 yn anghywir fel blwyddyn naid. Pan ryddhaodd Microsoft ei daenlen gyntaf, Multiplan, cipiodd gyfran fach o'r farchnad. A phan lansiwyd y prosiect Excel, fe wnaethant benderfynu nid yn unig gopïo'r cynllun enwi rhes a cholofn o Lotus 1-2-3, ond hefyd sicrhau cydnawsedd bygiau trwy drin 1900 yn fwriadol fel blwyddyn naid. Mae'r broblem hon yn dal i fodoli heddiw. Hynny yw, yn 1-2-3 roedd hwn yn nam, ond yn Excel roedd yn benderfyniad ymwybodol a sicrhaodd y gallai holl ddefnyddwyr 1-2-3 fewnforio eu tablau i Excel heb newid y data, hyd yn oed os oedd yn anghywir.

Ond roedd problem arall. Yn gyntaf, rhyddhaodd Microsoft Excel ar gyfer y Macintosh, nad oedd yn cydnabod dyddiadau cyn Ionawr 1, 1904. Ac yn Excel, ystyriwyd bod 1 Ionawr, 1900 yn ddechrau'r cyfnod. Felly, gwnaeth y datblygwyr newid fel bod eu rhaglen yn cydnabod y math o gyfnod ac yn storio data ynddo'i hun yn unol â'r cyfnod a ddymunir. Ysgrifennodd Microsoft erthygl esboniadol am hyn hyd yn oed. Ac arweiniodd y penderfyniad hwn at fy nam.

Derbyniodd fy system ETL daenlenni Excel gan gwsmeriaid a grëwyd ar Windows, ond y gellid eu creu ar Mac hefyd. Felly, gallai dechrau'r cyfnod yn y tabl fod naill ai Ionawr 1, 1900, neu Ionawr 1, 1904. Sut i gael gwybod? Mae fformat ffeil Excel yn dangos y wybodaeth angenrheidiol, ond nid oedd y parser a ddefnyddiais yn ei ddangos (yn awr mae'n ei wneud), a thybiwyd eich bod yn gwybod yr epoc ar gyfer tabl penodol. Mae'n debyg y gallwn fod wedi treulio mwy o amser yn deall fformat deuaidd Excel ac yn anfon darn i'r awdur parser, ond roedd gen i lawer mwy i'w wneud i'r cleient, felly ysgrifennais hewristig yn gyflym i bennu'r epoc. Roedd hi'n syml.

Yn Excel, gellir cynrychioli'r dyddiad Gorffennaf 5, 1998 yn y fformat "07-05-98" (system Americanaidd ddiwerth), "Gorffennaf 5, 98", "Gorffennaf 5, 1998", "5-Jul-98" neu fformat arall, fformat diwerth arall (yn eironig, un o'r fformatau nad oedd fy fersiwn i o Excel yn ei gynnig oedd ISO 8601). Fodd bynnag, yn y tabl, storiwyd y dyddiad heb ei fformatio fel naill ai "35981" ar gyfer yr epoc-1900 neu "34519" ar gyfer yr epoc-1904 (mae'r niferoedd yn cynrychioli nifer y dyddiau ers y cyfnod). Yn syml, defnyddiais ddosrannwr syml i dynnu'r flwyddyn o'r dyddiad fformatio, ac yna defnyddio'r parser Excel i dynnu'r flwyddyn o'r dyddiad heb ei fformatio. Pe bai'r ddau werth yn amrywio o 4 blynedd, yna roeddwn i'n gwybod fy mod yn defnyddio system gyda epoc-1904.

Pam na wnes i ddefnyddio dyddiadau wedi'u fformatio yn unig? Oherwydd gellir fformatio Gorffennaf 5, 1998 fel "Gorffennaf, 98" gyda diwrnod y mis yn cael ei golli. Cawsom dablau gan gynifer o gwmnïau a'u creodd mewn cymaint o wahanol ffyrdd fel mai mater i ni (yn yr achos hwn, fi) oedd cyfrifo'r dyddiadau. Ar ben hynny, os yw Excel yn ei gael yn iawn, yna dylem ni hefyd!

Ar yr un pryd deuthum ar draws 39082. Gadewch imi eich atgoffa bod Lotus 1-2-3 yn ystyried 1900 yn flwyddyn naid, a chafodd hyn ei ailadrodd yn ffyddlon yn Excel. A chan i hyn ychwanegu un diwrnod at y flwyddyn 1900, gallai llawer o swyddogaethau cyfrifo dyddiad fod yn anghywir ar gyfer yr union ddiwrnod hwnnw. Hynny yw, gallai 39082 fod wedi bod yn Ionawr 1, 2011 (ar Macs) neu Rhagfyr 31, 2006 (ar Windows). Pe bai fy “parser blwyddyn” wedi tynnu'r flwyddyn 2011 o'r gwerth wedi'i fformatio, yna mae popeth yn iawn. Ond gan nad yw'r parser Excel yn gwybod pa gyfnod sy'n cael ei ddefnyddio, mae'n rhagosodedig i'r epoc-1900, gan ddychwelyd y flwyddyn 2006. Gwelodd fy nghais mai 5 mlynedd oedd y gwahaniaeth, ei fod yn ei ystyried yn gamgymeriad, ei logio, a dychwelyd gwerth heb ei fformatio.

I fynd o gwmpas hyn, ysgrifennais hwn (ffug-god):

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

Ac yna cafodd pob un o'r 40 o ddyddiadau eu dosrannu'n gywir.

Yng nghanol swyddi print bras

Yn y 1980au cynnar, roedd fy nhad yn gweithio yn Storage Technology, adran sydd bellach wedi darfod, a greodd gyriannau tâp a systemau niwmatig ar gyfer bwydo tâp cyflym.

Fe wnaethant ailgynllunio'r gyriannau fel y gallent gael un gyriant canolog “A” wedi'i gysylltu â saith gyriant “B”, a gallai'r OS bach mewn RAM a oedd yn rheoli'r gyriant “A” ddirprwyo gweithrediadau darllen ac ysgrifennu i'r holl yriannau “B”.

Bob tro y cychwynnwyd gyriant “A”, roedd angen gosod disg hyblyg yn y gyriant ymylol wedi'i gysylltu ag “A” er mwyn llwytho'r system weithredu i'w gof. Roedd yn hynod gyntefig: darparwyd pŵer cyfrifiadurol gan ficroreolydd 8-did.

Y gynulleidfa darged ar gyfer offer o'r fath oedd cwmnïau â warysau data mawr iawn - banciau, cadwyni manwerthu, ac ati - yr oedd angen iddynt argraffu llawer o labeli cyfeiriadau neu ddatganiadau banc.

Roedd gan un cleient broblem. Yng nghanol swydd argraffu, gallai un gyriant penodol “A” roi'r gorau i weithio, gan achosi i'r swydd gyfan stopio. Er mwyn adfer gweithrediad y gyriant, roedd yn rhaid i staff ailgychwyn popeth. Ac os digwyddodd hyn yng nghanol tasg chwe awr, yna collwyd llawer iawn o amser cyfrifiadurol drud ac amharwyd ar amserlen y llawdriniaeth gyfan.

Anfonwyd technegwyr o Storage Technologies. Ond er gwaethaf eu hymdrechion gorau, nid oeddent yn gallu atgynhyrchu'r byg o dan amodau prawf: roedd yn ymddangos ei fod yn digwydd yng nghanol swyddi print bras. Nid y caledwedd oedd y broblem, fe wnaethant ddisodli popeth o fewn eu gallu: RAM, microreolydd, gyriant hyblyg, pob rhan bosibl o'r gyriant tâp - parhaodd y broblem.

Yna galwodd y technegwyr y pencadlys a galw'r Arbenigwr.

Cydiodd yr arbenigwr mewn cadair a phaned o goffi, eisteddodd yn yr ystafell gyfrifiaduron - yn y dyddiau hynny roedd ystafelloedd wedi'u neilltuo ar gyfer cyfrifiaduron - a gwylio wrth i'r staff giwio swydd print bras. Roedd yr arbenigwr yn aros i fethiant ddigwydd - ac fe wnaeth hynny. Edrychodd pawb ar yr Arbenigwr, ond nid oedd ganddo unrhyw syniad pam y digwyddodd hyn. Felly gorchmynnodd i'r swydd gael ei chiwio eto, a dychwelodd yr holl staff a thechnegwyr i'r gwaith.

Eisteddodd yr arbenigwr eto yn y gadair a dechreuodd aros am fethiant. Aeth tua chwe awr heibio a digwyddodd y methiant. Unwaith eto nid oedd gan yr Arbenigwr unrhyw syniadau, ac eithrio bod popeth yn digwydd mewn ystafell llawn pobl. Gorchmynnodd i'r genhadaeth gael ei hailddechrau, eistedd yn ôl ac aros.

Erbyn y trydydd methiant, sylwodd yr Arbenigwr ar rywbeth. Digwyddodd y methiant pan newidiodd personél dapiau mewn gyriant tramor. Ar ben hynny, digwyddodd y methiant cyn gynted ag y cerddodd un o'r gweithwyr trwy deilsen benodol ar y llawr.

Roedd y llawr dyrchafedig wedi'i wneud o deils alwminiwm a osodwyd ar uchder o 6 i 8 modfedd. Roedd nifer o wifrau o gyfrifiaduron yn rhedeg o dan y llawr uchel i atal unrhyw un rhag camu ar gebl pwysig yn ddamweiniol. Gosodwyd y teils yn dynn iawn i atal malurion rhag mynd o dan y llawr uchel.

Sylweddolodd yr arbenigwr fod un o'r teils wedi'i ddadffurfio. Pan gamodd gweithiwr ar ei gornel, rhwbiodd ymylon y deilsen yn erbyn y teils cyfagos. Roedd y rhannau plastig a gysylltodd y teils hefyd yn rhwbio â nhw, a achosodd micro-ollyngiadau statig a greodd ymyrraeth amledd radio.

Heddiw, mae RAM wedi'i amddiffyn yn llawer gwell rhag ymyrraeth amledd radio. Ond nid felly y bu yn y blynyddoedd hyny. Sylweddolodd yr arbenigwr fod yr ymyrraeth hon yn amharu ar y cof, a chydag ef gweithrediad y system weithredu. Galwodd y gwasanaeth cymorth, archebu teils newydd, eu gosod ei hun, a diflannodd y broblem.

Mae'n llanw uchel!

Digwyddodd y stori mewn ystafell weinydd, ar bedwerydd neu bumed llawr swyddfa yn Portsmouth (dwi'n meddwl), yn ardal y dociau.

Un diwrnod cwympodd gweinydd Unix gyda'r brif gronfa ddata. Maent yn ailgychwyn ef, ond mae'n hapus parhau i syrthio drosodd a throsodd. Fe benderfynon ni ffonio rhywun o'r gwasanaeth cefnogi.

Y boi cefnogi... dwi'n meddwl mai Mark oedd ei enw, ond does dim ots am hynny... dwi ddim yn meddwl mod i'n ei nabod. Nid oes ots, mewn gwirionedd. Gadewch i ni gadw at Mark, iawn? Gwych.

Felly, ychydig oriau yn ddiweddarach cyrhaeddodd Mark (nid yw'n bell o Leeds i Portsmouth, wyddoch chi), trodd y gweinydd ymlaen a gweithiodd popeth heb broblemau. Cefnogaeth damn nodweddiadol, mae'r cleient yn cynhyrfu'n fawr yn ei gylch. Mae Mark yn edrych trwy'r ffeiliau log ac yn canfod dim byd anffafriol. Felly mae Mark yn mynd yn ôl ar y trên (neu pa bynnag ddull trafnidiaeth y cyrhaeddodd arno, gallai fod wedi bod yn fuwch gloff i bopeth dwi'n gwybod... beth bynnag, does dim ots, iawn?) ac yn mynd yn ôl i Leeds, ar ôl gwastraffu y dydd.

Yr un noson honno mae'r gweinydd yn damwain eto. Mae'r stori yr un peth ... nid yw'r gweinydd yn codi. Mae Mark yn ceisio helpu o bell, ond ni all y cleient gychwyn y gweinydd.

Trên arall, bws, meringue lemon neu ryw crap arall, ac mae Mark yn ôl yn Portsmouth. Edrychwch, mae'r gweinydd yn cychwyn heb unrhyw broblemau! Gwyrth. Mae Mark yn treulio sawl awr yn gwirio bod popeth mewn trefn gyda'r system weithredu neu feddalwedd ac yn cychwyn am Leeds.

Tua chanol y dydd mae'r gweinydd yn chwalu (cymerwch hi'n hawdd!). Y tro hwn mae'n ymddangos yn rhesymol dod â'r gefnogaeth caledwedd i bobl i ddisodli'r gweinydd. Ond na, ar ôl tua 10 awr mae hefyd yn disgyn.

Ailadroddodd y sefyllfa ei hun am sawl diwrnod. Mae'r gweinydd yn gweithio, yn damwain ar ôl tua 10 awr ac nid yw'n cychwyn am y 2 awr nesaf. Fe wnaethant wirio oeri, gollyngiadau cof, gwirio popeth, ond dod o hyd i ddim. Yna daeth y damweiniau i ben.

Aeth yr wythnos heibio yn ddiofal... roedd pawb yn hapus. Hapus nes bydd y cyfan yn ailddechrau. Yr un yw'r llun. 10 awr o waith, 2-3 awr o amser segur...

Ac yna dywedodd rhywun (dwi'n meddwl iddyn nhw ddweud wrtha i nad oedd gan y person yma ddim i'w wneud â TG):

"Mae'n y llanw!"

Roedd syllu gwag ar yr ebychnod, ac mae'n debyg bod llaw rhywun wedi petruso wrth y botwm galwad diogelwch.

“Mae’n stopio gweithio gyda’r llanw.”

Mae'n ymddangos bod hwn yn gysyniad cwbl ddieithr i weithwyr cymorth TG, sy'n annhebygol o ddarllen y Tide Yearbook wrth eistedd i lawr am goffi. Eglurwyd na allai hyn fod yn gysylltiedig â'r llanw mewn unrhyw ffordd, oherwydd bod y gweinydd wedi bod yn gweithio am wythnos heb fethiannau.

“Yr wythnos diwethaf roedd y llanw’n isel, ond yr wythnos hon mae’n uchel.”

Ychydig o derminoleg ar gyfer y rhai nad oes ganddynt drwydded cychod hwylio. Mae llanw yn dibynnu ar gylchred y lleuad. Ac wrth i'r Ddaear gylchdroi, bob 12,5 awr mae tyniad disgyrchiant yr Haul a'r Lleuad yn creu ton llanw. Ar ddechrau'r cylch 12,5 awr mae llanw uchel, yng nghanol y cylch mae trai, ac ar y diwedd mae llanw uchel eto. Ond wrth i orbit y lleuad newid, felly hefyd y gwahaniaeth rhwng llanw isel ac uchel. Pan mae’r Lleuad rhwng yr Haul a’r Ddaear neu ar ochr arall y Ddaear (lleuad lawn neu ddim lleuad), cawn lanw Syzygyn – y penllanw uchaf a’r llanw isel isaf. Ar hanner lleuad cawn llanw pedwarawd - y llanw isaf. Mae'r gwahaniaeth rhwng y ddau begwn yn lleihau'n fawr. Mae cylchred y lleuad yn para 28 diwrnod: syzygian - quadrature - syzygian - quadrature.

Pan eglurwyd hanfod grymoedd llanw i'r technegwyr, roedden nhw'n meddwl ar unwaith bod angen iddyn nhw ffonio'r heddlu. Ac yn eithaf rhesymegol. Ond mae'n troi allan y dude oedd yn iawn. Bythefnos ynghynt, angorodd dinistriwr heb fod ymhell o'r swyddfa. Bob tro y byddai'r llanw'n ei godi i uchder penodol, roedd postyn radar y llong yn dod i ben ar lefel llawr ystafell y gweinydd. Ac roedd y radar (neu offer rhyfela electronig, neu ryw degan milwrol arall) yn creu anhrefn yn y cyfrifiaduron.

Taith hedfan ar gyfer y roced

Cefais y dasg o drosglwyddo system rheoli a monitro lansio roced fawr (tua 400 mil o linellau) i fersiynau newydd o'r system weithredu, y casglwr a'r iaith. Yn fwy manwl gywir, o Solaris 2.5.1 i Solaris 7, ac o System Datblygu Verdix Ada (VADS), a ysgrifennwyd yn Ada 83, i system Resymegol Apex Ada, a ysgrifennwyd yn Ada 95. Prynwyd VADS gan Rational, a chafodd ei gynnyrch ei wedi darfod, er bod Rational wedi ceisio gweithredu fersiynau cydnaws o becynnau VADS-benodol i hwyluso'r newid i'r casglwr Apex.

Fe wnaeth tri o bobl fy helpu i gael y cod wedi'i lunio'n lân. Cymerodd bythefnos. Ac yna fe wnes i weithio ar fy mhen fy hun i wneud i'r system weithio. Yn fyr, dyma'r bensaernïaeth a gweithrediad gwaethaf system feddalwedd yr oeddwn wedi dod ar ei draws, felly cymerodd ddau fis arall i gwblhau'r porthladd. Yna cyflwynwyd y system i'w phrofi, a gymerodd sawl mis arall. Cywirais y bygiau a ddarganfuwyd yn ystod y profion ar unwaith, ond gostyngodd eu nifer yn gyflym (system gynhyrchu oedd y cod ffynhonnell, felly roedd ei ymarferoldeb yn gweithio'n eithaf dibynadwy, roedd yn rhaid i mi gael gwared ar y bygiau a gododd wrth addasu i'r casglwr newydd). Yn y pen draw, pan oedd popeth yn gweithio fel y dylai, cefais fy nhrosglwyddo i brosiect arall.

Ac ar y dydd Gwener cyn Diolchgarwch, canodd y ffôn.

Roedd lansiad y roced i fod i gael ei brofi mewn tua thair wythnos, ac yn ystod profion labordy o'r cyfrif i lawr, rhwystrwyd dilyniant y gorchmynion. Mewn bywyd go iawn, byddai hyn yn erthylu'r prawf, a phe bai'r rhwystr yn digwydd o fewn ychydig eiliadau i gychwyn yr injan, byddai sawl gweithred anwrthdroadwy yn digwydd yn y systemau ategol, a fyddai'n gofyn am barodrwydd hir - a drud - y roced. Ni fyddai wedi dechrau, ond byddai llawer o bobl wedi cynhyrfu'n fawr am golli amser a llawer, llawer o arian. Peidiwch â gadael i unrhyw un ddweud wrthych fod yr Adran Amddiffyn yn gwario arian yn ddi-hid - nid wyf erioed wedi cwrdd â rheolwr contractio na roddodd y gyllideb yn gyntaf nac yn ail, ac yna amserlen.

Yn y misoedd blaenorol, roedd yr her cyfrif i lawr hon wedi cael ei rhedeg gannoedd o weithiau mewn llawer o amrywiadau, gyda dim ond ychydig o fân anawsterau. Felly roedd y tebygolrwydd y byddai hyn yn digwydd yn isel iawn, ond roedd ei ganlyniadau yn arwyddocaol iawn. Lluoswch y ddau ffactor hyn, a byddwch yn deall bod y newyddion yn rhagweld wythnos wyliau adfeiliedig i mi a dwsinau o beirianwyr a rheolwyr.

A rhoddwyd sylw i mi fel y person a borthodd y system.

Fel gyda'r rhan fwyaf o systemau sy'n hanfodol i ddiogelwch, cofnodwyd llawer o baramedrau, felly roedd yn weddol hawdd nodi'r ychydig linellau o god a weithredwyd cyn i'r system chwalu. Ac wrth gwrs, nid oedd dim byd anarferol yn eu cylch; roedd yr un ymadroddion wedi'u gweithredu'n llythrennol filoedd o weithiau yn ystod yr un rhediad.

Fe wnaethon ni alw'r bobl o Apex yn Rational oherwydd nhw oedd y rhai a ddatblygodd y casglwr a chafodd rhai o'r arferion a ddatblygwyd ganddynt eu galw yn y cod amheus. Roedden nhw (a phawb arall) wedi eu plesio bod angen mynd at wraidd problem o bwysigrwydd llythrennol cenedlaethol.

Gan nad oedd dim byd diddorol yn y cyfnodolion, fe benderfynon ni geisio atgynhyrchu'r broblem mewn labordy lleol. Nid oedd hon yn dasg hawdd gan fod y digwyddiad wedi digwydd tua unwaith bob 1000 o rediadau. Un rheswm a amheuir oedd bod galwad i swyddogaeth mutex a ddatblygwyd gan y gwerthwr (rhan o becyn mudo VADS) Unlock nid oedd yn arwain at ddatgloi. Roedd yr edefyn prosesu a alwodd y swyddogaeth yn prosesu negeseuon curiad calon, a gyrhaeddodd bob eiliad mewn enw. Fe wnaethom godi'r amledd i 10 Hz, hynny yw, 10 gwaith yr eiliad, a dechrau rhedeg. Tua awr yn ddiweddarach fe wnaeth y system gloi ei hun. Yn y log, gwelsom fod y dilyniant o negeseuon a recordiwyd yr un fath ag yn ystod y prawf a fethwyd. Gwnaethom sawl rhediad arall, cafodd y system ei rhwystro'n gyson 45-90 munud ar ôl y cychwyn, a phob tro roedd y log yn cynnwys yr un llwybr. Er ein bod yn dechnegol yn rhedeg cod gwahanol - roedd amlder y neges yn wahanol - roedd ymddygiad y system yr un peth, felly roeddem yn hyderus bod y senario llwyth hwn yn achosi'r un broblem.

Nawr roedd angen i ni ddarganfod ble yn union y digwyddodd y blocio yn y dilyniant o ymadroddion.

Defnyddiodd y gweithrediad hwn o'r system system dasg Ada, a'i defnyddio'n anhygoel o wael. Mae tasgau yn luniad gweithredadwy cydamserol lefel uchel yn Ada, rhywbeth fel edafedd cyflawni, sydd wedi'i ymgorffori yn yr iaith ei hun yn unig. Pan fydd angen cyfathrebu dwy dasg, maen nhw'n "gosod rendezvous", yn cyfnewid y data angenrheidiol, ac yna'n atal y rendezvous ac yn dychwelyd i'w dienyddiadau annibynnol. Fodd bynnag, gweithredwyd y system yn wahanol. Ar ôl i dasg darged gael ei rendezvous, cafodd y dasg darged honno ei datrys gyda thasg arall, a oedd wedyn yn cael ei hail-wneud gyda thrydedd dasg, ac yn y blaen nes bod rhywfaint o brosesu wedi'i gwblhau. Ar ôl hyn, cwblhawyd yr holl rendezvous hyn a bu'n rhaid i bob tasg ddychwelyd i'w weithrediad. Hynny yw, roeddem yn delio â'r system galwadau ffwythiant drutaf yn y byd, a roddodd y gorau i'r broses “aml-dasgau” gyfan wrth iddi brosesu rhan o'r data mewnbwn. Ac o'r blaen nid oedd hyn yn arwain at broblemau dim ond oherwydd bod y trwybwn yn isel iawn.

Disgrifiais y mecanwaith tasg hwn oherwydd pan ofynnwyd am rendezvous neu pan ddisgwylir ei gwblhau, gallai "switsh tasg" ddigwydd. Hynny yw, gallai'r prosesydd ddechrau prosesu tasg arall sy'n barod i'w chyflawni. Mae'n ymddangos, pan fydd un dasg yn barod i'w rendezvous gyda thasg arall, gall tasg hollol wahanol ddechrau cyflawni, ac yn y pen draw rheolaeth yn dychwelyd i'r rendezvous cyntaf. A gall digwyddiadau eraill godi sy'n achosi i'r dasg newid; un digwyddiad o'r fath yw galwad i swyddogaeth system, megis argraffu neu weithredu mutex.

Er mwyn deall pa linell o god oedd yn achosi'r broblem, roedd angen i mi ddod o hyd i ffordd i gofnodi cynnydd trwy ddilyniant o ddatganiadau heb sbarduno switsh tasg, a fyddai'n atal damwain rhag digwydd. Felly ni allwn gymryd mantais Put_Line()er mwyn osgoi perfformio gweithrediadau I/O. Gallwn i osod newidyn cownter neu rywbeth tebyg, ond sut alla i weld ei werth os na allaf ei ddangos ar y sgrin?

Hefyd, wrth archwilio'r log, daeth i'r amlwg, er gwaethaf y rhewi wrth brosesu negeseuon curiad y galon, a rwystrodd holl weithrediadau I / O y broses ac atal prosesu arall rhag cael ei berfformio, parhawyd i gyflawni tasgau annibynnol eraill i gael eu cyflawni. Hynny yw, ni chafodd y gwaith ei rwystro'n gyfan gwbl, dim ond cadwyn (hollbwysig) o dasgau.

Dyma oedd y cliw sydd ei angen i werthuso'r mynegiant blocio.

Gwneuthum becyn Ada a oedd yn cynnwys tasg, math wedi'i rifo, a newidyn byd-eang o'r math hwnnw. Roedd llythrennol dirifedi yn rhwym i fynegiadau penodol o'r dilyniant problematig (e.e. Incrementing_Buffer_Index, Locking_Mutex, Mutex_Unlocked), ac yna mewnosod mynegiadau aseiniad ynddo a oedd yn rhoi'r rhif cyfatebol i newidyn byd-eang. Gan fod y cod gwrthrych o hyn i gyd yn storio cysonyn yn y cof, roedd newid tasg o ganlyniad i'w weithredu yn annhebygol iawn. Roeddem yn amheus yn bennaf o ymadroddion a allai newid y dasg, gan fod y blocio wedi digwydd wrth gyflawni yn hytrach na dychwelyd wrth newid y dasg yn ôl (am sawl rheswm).

Roedd y dasg olrhain yn rhedeg mewn dolen yn syml ac yn gwirio o bryd i'w gilydd i weld a oedd gwerth y newidyn byd-eang wedi newid. Gyda phob newid, cafodd y gwerth ei arbed i ffeil. Yna arosiad byr a gwiriad newydd. Ysgrifennais y newidyn i'r ffeil oherwydd bod y dasg wedi'i chyflawni dim ond pan ddewisodd y system hi i'w chyflawni wrth newid y dasg yn yr ardal broblem. Ni fyddai beth bynnag a ddigwyddodd yn y dasg hon yn effeithio ar dasgau eraill sydd wedi'u blocio nad ydynt yn gysylltiedig.

Y disgwyl oedd, pan fyddai'r system yn cyrraedd y pwynt o weithredu'r cod problemus, y byddai'r newidyn byd-eang yn cael ei ailosod wrth symud i bob mynegiad nesaf. Yna bydd rhywbeth yn digwydd sy'n achosi i'r dasg newid, a chan fod ei amlder gweithredu (10 Hz) yn is nag un y dasg fonitro, gallai'r monitor ddal gwerth y newidyn byd-eang a'i ysgrifennu. Mewn sefyllfa arferol, gallwn i gael dilyniant ailadroddus o is-set o gyfrifiadau: gwerthoedd olaf y newidyn ar adeg y switsh tasg. Wrth hongian, ni ddylai'r newidyn byd-eang newid mwyach, a bydd y gwerth olaf a ysgrifennwyd yn nodi pa fynegiant na chwblhaodd.

Rwy'n rhedeg y cod gyda olrhain. Rhewodd. Ac roedd y monitro'n gweithio fel gwaith cloc.

Roedd y log yn cynnwys y dilyniant disgwyliedig, a amharwyd gan werth yn nodi bod mutex wedi'i alw Unlock, ac nid yw'r dasg wedi'i chwblhau - fel sy'n wir gyda miloedd o alwadau blaenorol.

Roedd peirianwyr Apex yn dadansoddi eu cod yn dwym ar yr adeg hon a daethant o hyd i le yn y mutex lle, yn ddamcaniaethol, y gallai clo ddigwydd. Ond roedd ei debygolrwydd yn isel iawn, gan mai dim ond dilyniant penodol o ddigwyddiadau sy'n digwydd ar amser penodol a allai arwain at rwystro. Cyfraith Murphy, bois, mae'n Gyfraith Murphy.

Er mwyn amddiffyn y darn o god yr oedd ei angen arnaf, fe wnes i ddisodli'r galwadau swyddogaeth mutex (a adeiladwyd ar ben ymarferoldeb mutex OS) gyda phecyn mutex Ada brodorol bach i reoli mynediad mutex i'r darn hwnnw.

Fe'i gosodais yn y cod a rhedeg y prawf. Saith awr yn ddiweddarach roedd y cod yn dal i weithio.

Cyflwynwyd fy nghod i Rational, lle gwnaethant ei lunio, ei ddadosod, a gwirio nad oedd yn defnyddio'r un dull ag a ddefnyddiwyd yn y swyddogaethau mutex problemus.

Hwn oedd yr adolygiad cod mwyaf gorlawn o fy ngyrfa 🙂 Roedd tua deg o beirianwyr a rheolwyr yn yr ystafell gyda mi, roedd deg person arall ar alwad cynhadledd - ac fe wnaethon nhw i gyd archwilio tua 20 llinell o god.

Adolygwyd y cod, cafodd ffeiliau gweithredadwy newydd eu cydosod a'u cyflwyno ar gyfer prawf atchweliad ffurfiol. Ychydig wythnosau'n ddiweddarach, roedd y prawf cyfrif i lawr yn llwyddiannus a dechreuodd y roced.

Iawn, mae hynny'n iawn ac yn dda, ond beth yw pwynt y stori?

Roedd yn broblem gwbl ffiaidd. Cannoedd o filoedd o linellau o god, gweithredu cyfochrog, dros ddwsin o brosesau rhyngweithio, pensaernïaeth wael a gweithredu gwael, rhyngwynebau ar gyfer systemau gwreiddio a miliynau o ddoleri wedi'u gwario. Dim pwysau, iawn.

Nid fi oedd yr unig un oedd yn gweithio ar y broblem hon, er mai fi oedd dan y chwyddwydr gan fy mod yn gwneud y porthi. Ond er i mi ei wneud, nid yw hynny'n golygu fy mod yn deall yr holl gannoedd o filoedd o linellau o god, neu hyd yn oed sgimio nhw. Dadansoddwyd y cod a'r logiau gan beirianwyr ledled y wlad, ond pan ddywedasant wrthyf eu damcaniaethau am achosion y methiant, dim ond hanner munud a gymerodd i mi eu gwrthbrofi. A phan ofynnwyd i mi ddadansoddi damcaniaethau, byddwn yn ei drosglwyddo i rywun arall, oherwydd roedd yn amlwg i mi fod y peirianwyr hyn yn mynd y ffordd anghywir. Sain rhyfygus? Ydy, mae hyn yn wir, ond gwrthodais y rhagdybiaethau a'r ceisiadau am reswm arall.

Roeddwn yn deall natur y broblem. Doeddwn i ddim yn gwybod yn union ble roedd yn digwydd na pham, ond roeddwn i'n gwybod beth oedd yn digwydd.

Dros y blynyddoedd, rwyf wedi cronni llawer o wybodaeth a phrofiad. Roeddwn yn un o arloeswyr defnyddio Ada ac yn deall ei fanteision a'i anfanteision. Rwy'n gwybod sut mae llyfrgelloedd amser rhedeg Ada yn trin tasgau ac yn delio â gweithredu cyfochrog. Ac rwy'n deall rhaglennu lefel isel ar lefel y cof, y cofrestrau a'r cydosodwr. Mewn geiriau eraill, mae gen i wybodaeth ddofn yn fy maes. Ac fe wnes i eu defnyddio i ddod o hyd i achos y broblem. Nid dim ond gweithio o gwmpas y byg oeddwn i, roeddwn i'n deall sut i ddod o hyd iddo mewn amgylchedd amser rhedeg sensitif iawn.

Nid yw straeon o'r fath o frwydro â chod yn ddiddorol iawn i'r rhai nad ydynt yn gyfarwydd â nodweddion ac amodau brwydr o'r fath. Ond mae'r straeon hyn yn ein helpu i ddeall beth sydd ei angen i ddatrys problemau anodd iawn.

I ddatrys problemau anodd iawn, mae angen i chi fod yn fwy na rhaglennydd yn unig. Mae angen i chi ddeall “tynged” y cod, sut mae'n rhyngweithio â'i amgylchedd, a sut mae'r amgylchedd ei hun yn gweithio.

Ac yna bydd gennych eich wythnos wyliau adfeiliedig eich hun.

I'w barhau.

Ffynhonnell: hab.com

Ychwanegu sylw