|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
[OT][FUN] Indiana BOFH ed i Predatori del CED Perduto
Oggi non mi passa un cavolo, la sezione è un mortorio e quindi... e comunque non è spam al 100%, l'anedotto ha un valore didattico in quanto illustra un caso tipico di dipendenza circolare
![]() --- Sembrava una giornata molto tranquilla, T e' a casa a cercare di sviluppare una applicazione (o meglio, ad adattare una applicazione) per un cliente, H e' ancora in 'recupero' dopo l'esplosione, Bart e' alla co-locazione. Il che sostanzialmente lascia ME... con licenza di cazzeggiare. E cazzeggio e' fino circa alle 11.30, poi arriva Wendy (la nostra segretaria) con il Problema. W - Ha chiamato SL di $dittafancazzisti, hanno un guaio con un paio di macchine che vennero installate tempo addietro e di cui noi dovremmo occuparci. IO - Ok, molla il foglio. W - No, il fatto e' che quelle macchine sono per la LAN del loro ufficio, quindi qualcuno dovrebbe andare la a vedere... Oh che bello. Cosi' vado a $dittafancazzisti, li' vengo accolto da UL, con l'altisonante titolo di Direttore dell'IT. UL - ...quindi abbiamo avuto questo problema con l'ups e praticamente tutti i server si sono spenti... IO - Ok, e perche' non li avete riaccesi? UL - Non e' cosi' semplice, e' un sistema altamente integrato yada yada, processi concorrenti blah blah, massima ridondanza yada yada... IO - ?? Come sarebbe a dire?? UL - Mah... il vostro collega H non vi ha spiegato? IO - H e' momentaneamente in ferie, quindi no, non ha spiegato un tubo. Avete della documentazione su sta cosa? UL - Ah si, c'e' un manuale... E mi molla il malloppazzo. Ok, sti rimbamba hanno una manica di server, di cui uno, che sarebbe quello principale e che chiameremo A tanto per capirci, pare che abbia dei file di configurazione che sono su una partizione montata via NFS da un altro server, che chiameremo B, il quale a sua volta ha qualche accrocchio di middelware scoobydoobydo che richiede per avviarsi una autenticazione via server Radius che e' installato sul server C, il quale a sua volta richiede saildiavolocosa su server A... He...hummmm... 'spetta 'n moment... allora, per avviare server A ti serve il server B, ma per avviare B ti serve C e C dipende da A... oh che bello! IO - (rivolto ad UL) E chi sarebbe il Torquemada che si e' sognato sta cosa? Si, perche' bisogna essere Himmler o Hannibal Lecter per mettere in piedi una roba del genere. Comunque, nella documentazione c'e' anche la "procedura per il riavvio del sistema", che e' una roba del genere: 1) Pregare Cthulhu che un asteroide distrugga l'edificio risolvendo il problema per voi (no, ok, questo punto non c'era, l'ho aggiunto io a matita...) 2) Avviare server B in single-user mode 3) Avviare server A in single-user mode 4) Mentre A si avvia e quando raggiunge il punto X, avviare su B il processo tal-de-tali 5) Avviare C in single-user mode 6) Avviare su A il processo tal-de-tali 7) su C fare un ping -c 10 -s 128 verso B 8) su A avviare il processo tal-de-tal-altro E va avanti cosi' per un bel po'... in sostanza il sistema e' imbrogliare i 3 rottamoni facendogli credere che i vari servizi siano gia' su quando questi non lo sono. Sembra facile eh? Quello che ancora non ho detto e' che i 3 cosi sono agli estremi opposti della sala macchine di $dittafancazzisti, separati da quello che potrebbe essere solo descritto come un percorso alla Indiana Jones con cavi di rete tesi in mezzo ai corridoi, mattonelle del pavimento pericolanti, racks proni al crollo e CL che sputano freccette avvelenate con le cerbottane (ok, no, quest'ultimo particolare non c'era, ma non mi sarei stupito piu' di tanto) Ah, ed ovviamente in tutta la sala macchine c'e' UN solo monitor ed UNA sola tastiera. Ok, indosso il mio cappellino da BOFH, la giacca da moto, faccio schioccare un cavo di rete a mo' di frusta e recupero dagli uffici attinenti 3 tastiere e 3 monitors con relativi cavi di alimentazione, dopo di che procedo a mettere in pratica cio' che dice la documentazione. Al terzo o al quarto tentativo imbrocco il tempo giusto ed i 3 magi sembrano riavviarsi. Dopo essermi ripreso dall'immane faticata sono arrivato persino a suggerire ad UL di mettere in piedi un sistema diverso, o come minimo a mettere i 3 maledetti nello stesso rack e con un KVM, sono quasi pronto per ripartire. UL - Ma in effetti stavamo pensando ad un sistema piu' robusto, distribuito su 2 datacenter con un load-balancer geografico e... Un serpente velenoso! Voglio un serpente velenoso. Anzi no, 2! Che li metto in cluster! --- (Autore: Davide Bianchi)
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 20-06-2012 alle 10:37. |
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Milano - Udine
Messaggi: 9418
|
Mi ricorda il sistema della doppia chiave nell'inizio di WarGames. Solo che stavolta è in due stanze separate.
Geniale
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ne aggiungo un'altra. Altra fonte.
Social Engineering: Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Pare che ci sia in giro gente che non ha ben capito che cosa si intenda per codice 'parlante' o 'autodocumentato':
Codice:
public bool IsEligibleToSeeThisEvent(EventRegistrationInformation eventRegistrationInformation)
{
if (ThisEventDoesNotRestrictRegistrantsBasedUponActivityType(eventRegistrationInformation))
return TrueBecauseThisEventDoesNotRegistrictBasedUponActivityType();
var activityTypes = GetTheActivityTypesAttachedToThisEvent(eventRegistrationInformation);
if (NoActivityTypesAreAttachedToThisEvent(activityTypes))
return TrueBecauseThereAreNoActivityTypesToFilterOnThisEvent();
if (TheUserIsNotLoggedIn(eventRegistrationInformation))
return FalseBecauseNoActivityTypesAreAvailableForUsersWhoAreNotLoggedIn();
return ThereIsAtLeastOneSharedActivityTypeBetweenTheEventAndCurrentUser(
eventRegistrationInformation,
activityTypes);
}
private static bool TrueBecauseThisEventDoesNotRegistrictBasedUponActivityType()
{
return true;
}
private bool ThisEventDoesNotRestrictRegistrantsBasedUponActivityType(
EventRegistrationInformation eventRegistrationInformation)
{
return eventActivityTypeFilterRetriever
.DoesThisEventHaveARestrictionBasedOnActivityTypes(
eventRegistrationInformation.EventId) == false;
}
private bool ThereIsAtLeastOneSharedActivityTypeBetweenTheEventAndCurrentUser(
EventRegistrationInformation eventRegistrationInformation,
IEnumerable<ActivityType> activityTypes)
{
var currentActivities = registrantActivityRetriever
.GetRegistrantActivityProductCode(eventRegistrationInformation.AccountId);
return activityTypes.Any(x => currentActivities.Any(y => y.Id == x.Id));
}
private static bool FalseBecauseNoActivityTypesAreAvailableForUsersWhoAreNotLoggedIn()
{
return false;
}
private static bool TheUserIsNotLoggedIn(EventRegistrationInformation eventRegistrationInformation)
{
return eventRegistrationInformation.IsLoggedIn == false;
}
private static bool TrueBecauseThereAreNoActivityTypesToFilterOnThisEvent()
{
return true;
}
private static bool NoActivityTypesAreAttachedToThisEvent(IEnumerable<ActivityType> activityTypes)
{
return activityTypes.Any() == false;
}
private IEnumerable<ActivityType> GetTheActivityTypesAttachedToThisEvent(
EventRegistrationInformation eventRegistrationInformation)
{
return eventActivityTypeFilterRetriever.GetAll(eventRegistrationInformation.EventId);
}
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Milano - Udine
Messaggi: 9418
|
Meno male che sono arrivati i Retina sul mercato, un bel po' di spazio in più per Visual Studio, XCode, Eclipse ecc.
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 3488
|
Quote:
Ai sottoposti toccheranno gli Acer da 1366*768. Seriamente, ne ho conosciuti alcuni che per la disperazione si sono comprati un monitor di tasca loro...
__________________
www.biffuz.it | Thou shall not follow the NULL pointer, for chaos and madness await thee at its end. Powered by: M1 @ Sonoma | 7600X @ W11 | C2Q @ XP | P!!! @ W98+BeOS | 286 @ W3.1 | C64 | iP16 | iPad8 | rPi4 | and more... |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
è sempre bello e gratificante vedere che ci sta qualcuno messo peggio di te.
uan curiopsità...ma a voi capita di scrivere codice con commenti "per i posteri"??? l'altro giorno mi sono ritrovato a scriver eun commento che faceva più o meno così: Quote:
P.S.: la variabile ancora non l'ho cambiata
__________________
My gaming placement |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Nei commenti ho: chiesto scusa in anticipo, bestemmiato, inveito contro chi ha deciso di implementare una cosa in un certo modo senza poi doverci mettere le mani, ammesso che la mia soluzione in questo o quel caso faceva cagare, scritto "hic sunt leones", e tanto altro ancora... Con lo stress mi capita di usare i commenti come un diario. I miei colleghi ci ridono sopra, quindi per ora tutto ok!
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Cow-Location
Un'altra (dis)avventura di Davide Bianchi, la posto perchè è da antologia:
--- Dopo un certo numero di cappellate da parte del nostro co-location partner, abbiamo deciso che era il caso di cercare un'altra societa' presso la quale piazzare i nostri server. SL, dimostrando una incredibile rapidita', ha selezionato a tempo di record una societa' di co-locazione che promette faville. Stabilito pertanto un contratto "di prova", si tratta di installare qualche server e vedere come funziona la cosa. Nel nostro contratto per altro e' specificato che noi vogliamo un rack per intero tutto per noi. Sistemate le cose, telefono al capoccia che promette di essere presso il centro dati all'ora giusta, io lo informo che voglio prima dare un'occhiata al rack e poi installarci i server e che (dato che i server pesucciano), mi portero' dietro due aiutanti. Lui si fa dare i nomi dei due (CB e AD), e mi assicura che e' tutto Ok. Con i server nel bagagliaio della macchina ed il mio laptop al seguito ci avviamo percio' alla volta del centro dati, e la' giunti ci presentiamo alla Reception. Li' veniamo apostrofati da CL. CL - Che volete? IO - (alla faccia della gentilezza) Salve, sono DB di $societa, dobbiamo controllare il nostro rack ed installare i server. CL - Io non so niente! Non ho ricevuto nessuna e-mail di autorizzazione! IO - (mostrandogli il fax) Ecco, questa e' l'autorizzazione del vostro boss. CL - Non mi interessa. Io devo avere una mail di autorizzazione direttamente dalla societa'. IO - Questo qui' e' un fax dalla vostra societa'! CL - Non me ne frega niente! Io devo avere una mail da voi che vi autorizza ad entrare! IO - Una mail? Da me? CL - Esattamente! IO - ...Ok... Tiro fuori il portatile, mi appoggio sul suo banco, attivo il modem GSM... cliccketi-clicckety-mail [email protected]kkety... -*BING*- You've got mail... CL - Ecco, adesso va bene... IO - Ma.... te l'ho mandata da qui!!! Vedi??? CL - Non mi interessa! A me serve una mail... Gia' le cose mi pare che non vadano troppo bene... guardo CB e AD che sembrano pensarla allo stesso modo. Ok, presentiamo i documenti e ci vengono forniti i tesserini di identificazione. Entriamo quindi e CL ci conduce al Rack... ed io osservo i 3 Dell con le lucine lampeggianti dentro... CL - Ecco, questo qui' e' il vostro rack. IO - ??? Hemmm... momento... non puo' essere il nostro rack! Ci sono tre server dentro! CL - Questo qui' e' il vostro rack! C'e' scritto cosi' sul foglio! IO - Ma noi abbiamo pagato per un rack vuoto. Questi di chi sono? CL - (veramente incazzato) Questo qui' e' il vostro rack! E questi sono i vostri Server! IO - Ma noi non li abbiamo ancora messi dentro i server! Questi non sono nostri! CL - QUESTO E' IL VOSTRO F@77UT0 RACK E QUESTI SONO I VOSTRI F@77UT1 SERVER! SE NON SIETE CONTENTI NON SONO AFFARI MIEI!!! A questo punto mi volto a guardare CB e AD... IO - (rivolto a CB e AD) Voi avete sentito bene che questi sono i NOSTRI server giusto? CB e AD - Hemmm... herr... si', ha detto proprio cosi'... IO - (rivolto a CL) Allora... se questi sono nostri possiamo portarceli via giusto? CL - PIANTATELA DI ROMPERMI I C@GL1@N1! POTETE FARCI QUELLO CHE VI PARE!!! IO - Potrebbe controllare un'ultima volta che questo sia il NOSTRO Rack? Senza dubbio alcuno?? CL - QUESTO E' IL VOSTRO RACK!!! E' IL VOSTRO F@77U7@ RACK!!! IO - Ok, allora... Stacco uno dei server, lo smonto dal rack, lo metto in mano ad AD e (parlando italiano che AD lo capisce benissimo) IO - (rivolto ad AD) Mettilo in macchina e porta qui' uno dei nostri. AD - Hemmm.. 'spetta un momento... che hai in mente??? IO - Lo hai sentito no? Questi sono i nostri server! Smonto tutti e tre ed installo i nostri, CL, molto incazzato, passa il tempo parlando al cellulare, da come cinguettava direi che stava parlando con la fidanzata. Mentre sto finendo di controllare che il tutto funzioni correttamente (con AD e CB piuttosto preouccupati dietro), Luser-Supervisor (LS) arriva al galoppo dalla receptions con un bel colorito da colpo apoplettico imminente... LS - FEEEEERMIIIIIII!!! CHE CA$$@ STATE FACEEEENDOOOOOOO!!!!!! IO - (il piu' calmo possibile) Sto' controllando i miei server. LS - (fissando il rack) QUESTO NON E' IL VOSTRO RACK!!!!!! IO - Si', lo e'. L'ho chiesto a lui (indicando CL) almeno sei volte. E lui ha confermato almeno 6 volte che questo e' il mio rack. Ed io ho pure due testimoni (indicando AD e CB). Quindi e' il mio rack. LS - (fissa CL, poi guarda me) QUESTO NON E' IL VOSTRO RACK!!! E DOVE SONO I SERVER CHE ERANO DENTRO????? IO - (sempre calmissimo) Li abbiamo buttati via. LS - (arterie pulsanti, occhi fuori dalle orbite...) COOOOOOOOOSAAAAAAA???? IO - Lui (indicando CL) ha detto che erano i nostri server, pertanto li abbiamo eliminati. A questo punto LS comincia ad ululare in direzione di CL, ed io mi godo la scena di CL il cui colore passa dal rosso al bianco e poi al verde. Non ho capito un gran che di quello che ha detto, ma ho sentito la parola "ontslagen" (licenziato) almeno 3 o 4 volte... poi LS si rivolge a me. LS - (sull'orlo di un colpo apoplettico) Ditemi che state scherzando e che i server li avete ancora... IO - Certo che li ho ancora. Non sono mica come lui (indicando CL). LS - E se dimenticassimo tutta la faccenda e li rimettessimo dentro? IO - No, non credo proprio... penso che io restero' qui ad aspettare che il legittimo poprietario di quei server venga a vedere che sta succedendo, cosi' potremmo avere una bella discussioncina riguardo il vostro cosiddetto "servizio"... Che ne dice? Adesso ho una tesserina di plastica nel mio portafogli, che mi consente accesso illimitato, 24 ore su 24, al mio rack. No-question-asked.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
A proposito dei commenti nel codice...
... riporto alcuni stralci di commenti tratti dai sorgenti di Win2K.
E' ovviamente roba vecchia, ma sempre lollica --- Some dissatisfaction with the compiler is expressed in private\shell\shell32\util.cpp: Codice:
// the fucking alpha cpp compiler seems to fuck up the goddam type "LPITEMIDLIST", so to work // around the fucking peice of shit compiler we pass the last param as an void *instead of a LPITEMIDLIST Codice:
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* !!!!!!!IF YOU CHANGE TABS TO SPACES, YOU WILL BE KILLED!!!!!!!
* !!!!!!!!!!!!!!DOING SO FUCKS THE BUILD PROCESS!!!!!!!!!!!!!!!!
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Codice:
// The specific idiot in this case is Office95, which likes
// to free a random pointer when you start Word95 from a desktop
// shortcut.
Codice:
* for idiots like MS-Access 2.0 who SetWindowPos( SWP_BOZO
* and blow away themselves on the shell, then lets
* just ignore their plea to be removed from the tray
Codice:
// we are such morons. Wiz97 underwent a redesign between IE4 and IE5 Codice:
We have to do this only because Exchange is a moron. Codice:
// We are morons. We changed the IDeskTray interface between IE4 Codice:
// should be fixed in the apps themselves. Morons! Codice:
// HACK! HACK! HACK! (MohanB) In order to fix #64710 at this very late Codice:
// HACK HACK HACK. REMOVE THIS ONCE MARLETT IS AROUND Codice:
// <HACK> goto EndHack; // </HACK> Codice:
// God, I hate this hack ... Codice:
// Dumb hack for back compat. *sigh* Codice:
// ACHTUNG!!! this is a special hack for IBM antivirus software Codice:
// HACK ALERT, believe it or not there is no way to get the height of the current // HACK ON TOP OF HACK ALERT, Codice:
// Add the hack-o-ramma to fix formats. Codice:
// Mondo hackitude-o-rama. Codice:
// HUGE, HUGE hack-o-rama to get NTSD started on this process! Codice:
// HACK OF DEATH: Codice:
// TERRIBLE HORRIBLE NO GOOD VERY BAD HACK Codice:
* The magnitude of this hack compares favorably with that of the national debt. Codice:
* CallProc32W is insane. It's a variadic function that uses * the pascal calling convention. (It probably makes more sense * when you're stoned.) Codice:
// These undocumented messages are used by Excel 5.0 Codice:
// InquireVisRgn is an undocumented Win 3.1 API. This code has been // suggested by ChuckWh. If this does not fix the s 2.0 // problem, then ChuckWh would be providing us with an private entry // point. Codice:
* This thunk implements the undocumented Win3.0 and Win3.1 API * GetCurLogFont (GDI.411). Symantec QA4.0 uses it. * To implement this undocumented API we will use the NT undocumented API Codice:
// Set the GlobalPopupMenu variable so that EndMenu works for popupmenus so // that WinWart II people can continue to abuse undocumented functions. Codice:
// Guess what? Latent background color is always adopted for mosaics. // This is a major undocumented find... Codice:
// Ah, the life of the undocumented. The documentation says // that this guys does not validate, colors, act as a delimiter // and fills with spaces. Wrong. It does validate the color. // As such its a delimiter. If...
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Milano - Udine
Messaggi: 9418
|
Un mio collega da un altro cliente ha twittato:
Sai che la giornata partirà già storta quando ti chiedono "che differenza c'è tra compila e funziona?" Non benissimo
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 3488
|
Personalmente, una volta stavo cercando di debuggare per l'ennesima volta una funzione da circa 1000 righe, scritta malissimo, con una serie di cicli innestati, senza uno straccio di spiegazione e piena di pezzi di codice commentati in anni e anni di debug, quando con una illuminazione divina ho capito a cosa serviva.
L'ho commentata tutta, ci ho scritto sopra "CHI E' QUELL'IDIOTA CHE SI E' INVENTATO QUESTA ROBA???" e l'ho sostituita con una nuova funzione da circa 50 righe che faceva la stessa cosa in tempo O(logn), che ho scritto nella spiegazione. Il mio capo si è complimentato per la nuova funzione, ha esclamato "wow, non pensavo che quella roba di O(logn) si potesse usare davvero", però ha dovuto rimettere quella vecchia: "non ci pagano per scrivere nuove funzioni... e poi non sta bene dare dell'idiota al cliente"
__________________
www.biffuz.it | Thou shall not follow the NULL pointer, for chaos and madness await thee at its end. Powered by: M1 @ Sonoma | 7600X @ W11 | C2Q @ XP | P!!! @ W98+BeOS | 286 @ W3.1 | C64 | iP16 | iPad8 | rPi4 | and more... |
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
@shinya: shit & crap in crescita esponenziale, mwawawawa!!
@biffuz: beato te che ancora ce le hai le "illuminazioni divine"
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Cosa puo' andare male?
Altra storiella di Davide Bianchi, questa ci racconta che tutto il mondo è paese quando si tratta di project managment et similia (le vicende di Davide Bianchi sono localizzate in Olanda)
--- Ritorniamo a parlare di $allupati, di cui avevo accennato in questa storia. Allora, avevamo lasciato il branco a smazzarsi la loro server-farm composta da una dozzina di macchine per capire perche' la foxxuta applicascione e' cosi' lenta prima di andare in produzione. Fedeli al modo standard di pianificare le cose, l'intero ambaradan e' andato in produzione prima che i problemi di cui sopra fossero corretti. Cosi' ci ritroviamo alla prima settimana di attivita'. Settimana che e' stata preceduta da un barrage pubblicitario inaudito per promuovere una qualche cosa che sta' gente vorrebbe vendere. Il risultato e' che il primo giorno e' tutto calmo sul fronte occidentale, il secondo giorno cominciamo a vedere che dalle 11.30 circa il numero di richieste comincia ad aumentare e la webapplicascion comincia ad andare in panico. Ogni tanto qualche cosa si incatasta ed io mi ritrovo con Tomcat a palla con 300 thread attivi in stato di attesa e niente che arriva. Risultato: si riavvia tomcat. Avendo questi 8 (otto) applicascionserver il gioco consiste nell'avere su uno schermo un computo dei thread attivi sui vari servers e quando uno dei servers comincia ad aumentare (20... 23.... 28.... 31... 38...) significa che e' andato in palla ed e' il momento di fare un restart. Il che va' avanti dalle 11.30 fino circa alle 14.00, poi la gente ritorna a lavorare (o far finta di) e tutto ritorna tranquillo fino al giorno dopo. Solo che $allupati non gradisce di ricevere una fattura per 3 ore di lavoro extra ogni giorno, specialmente da quando io ho cominciato a chiamare tale attivita' "retarded craplication pick-and-spin-up" (cioe' dal primo giorno). Quindi oggi, verso le 10.30, ci becchiamo la telefonata dall'UL di turno del branco di mammalucchi che hanno scritto l'applicascion che fa' domande varie. IO - ...e quindi penso che il problema non sia tanto in TomCat quanto nella connessione tra la vostra applicazione ed il backend che fornisce i dati. UL - Ma il backend non lo abbiamo fatto noi. IO - E mi sta bene. Ma tu mi hai chiesto che cosa ne penso, e questo e' quello che ne penso. UL - Mi viene in mente... avete provato a fare una pulizia della cache del database? IO - La cache di che cosa? UL - La cache del database. Pausa, mentre io e DB ci guardiamo pensando "di che ca$$o sta' parlando questo qui'?". IO - No, noi manco sapevamo che ci fosse una roba del genere... dove sarebbe sta' cosa, come si fa' ed a che serve? E qui' UL si e' lanciato in una spiegazione irta di buzzwords in cui specificava che nel database esistono una serie di tabelle che contengono le query che sono state eseguite precedentemente allo scopo di stilare delle classifiche e statistiche e tali tabelle vengono elaborate ogni ora e sarebbe opportuno ripulirle di tanto in tanto in modo da mantenerle il piu' possibile pulite. Ora, sorvoliamo sulla logica della cosa e sul fatto che se non ce lo dici sara' dura che ce lo sogniamo di notte, ma la faccenda mi ha fatto venire un dubbio. IO - 'momento... ma di database ce ne sono due e dovrebbero essere sincronizzati, quindi a che vi serve calcolare ste' statistiche? UL - Ah no, i databases non sono sincronizzati. Ne usiamo solo uno. IO - ??? Come sarebbe a dire ne usate solo uno? Tutto sto' popo' di front-end con 8 server ed avete UN SOLO database? UL - Bhe', si', perche' altrimenti e' un casino e... Ma che cosa puo' andare male in ogni caso? IO - Hu... che il database si incatasta e tutto smette di funzionare? UL - Heee... Ma no, questo non succede. Comunquesia, io suggerisco di eseguire la pulizia delle statistiche. IO - (guardando DB che sta' eseguendo un perfetto face-palm) Ok, lo possiamo schedulare per stanotte? UL - No, no. Facciamolo subito! IO - (guardando l'orologio) Ma sono gia' le 11. E fra mezz'ora comincia il momento di massimo carico. Forse e' meglio evitarlo. UL - Ma no, la procedura e' rapida e dovrebbe risolvere il problema. Che cosa puo' andare male? Cosi' dopo un rapido giro di mails, lanciamo sta' cosa e rimaniamo a guardare mentre il db server comincia a macinare ed il load average comincia a salire fino ad assestarsi intorno ad un 49 e rimane li'. E di concerto gli otto servers cominciano ad incatastarsi uno dopo l'altro quando le loro richieste non ricevono risposta. Verso le 12, DB che e' al telefono da una parte con $allupati e dall'altra parte con gli sviluppatori decide che e' il caso di tirare giu' tutti e 8 i servers, fare un bello shutdown del database e ripartire da capo. Io do' lo shutdown al database e rimango ad aspettare mentre quello comincia il rollback di quella famosa procedura di pulizia, con il redo log che si riempie a ritmi allucinanti. Dopo un quarto d'ora DB decide che forse e' il caso di mettere una pagina di "lavori in corso" sul sito. Finalmente, alle 13.45, il database riesce a spegnersi, noi riavviamo tutto in sequenza e le cose ritornano in vita. A quel punto abbiamo schedulato la procedura di pulizia per mezzanotte e vedremo come vanno le cose. Ed adesso ho visto che stamani c'era pure una mail da parte di SL di $allupati che voleva avere una misura della frequenza dei riavvii dei servers durante il "round-up". Be', per oggi e' facile, la frequenza e' UNO. Quindi dei DUE database servers in realta' ne e' usato solo uno. Per la serie: che cosa puo' andare male? Davide 07/02/2011 08:00
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Bisogna sempre stare attenti a quello che si scrive nei commenti... non si sa mai chi li legge.
Ma puo' andare anche peggio. Ad esempio una volta ci era capitato di dover sviluppare una interfaccia utente per un macchinario. In caso di errore in uno dei componenti hardware, doveva apparire un popup a video e il classico "ping!" di errore. Un giorno per fare uno scherzo qualcuno sostitui il .wav dell ping con qualcosa di piu' colorito (fate conto un qualcosa tipo un spezzone tratto da un video di Mosconi, o giu' di li'). Momento di grande ilarita', fatto salvo che il qualcuno si dimentico' di togliere il .wav "burlone", che rimase li' fino al giorno in cui il cliente venne a testare il macchinario. E come sanno tutti, se c'e' un momento in cui un macchinario si rompe, e' proprio quando viene il cliente a testarlo. Per fortuna era un burlone anche lui e si e' fatto solo quattro risate...
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]() Per fortuna il cliente aveva il senso dell'umorismo...
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Milano - Udine
Messaggi: 9418
|
Il fantastico mondo dell'integrazione
Discussione tipo con gli utenti di un call center dediti al data entry:
Utente: "Salve, non riusciamo a chiudere pratiche da Giovedì, ad es questa ticket numero 123456 di tipo X" Io: "Controlliamo. Possiamo avere il tracciato utilizzato per verificare che sia corretto?" Utente: "Sì certo, lo alleghiamo". Io: "scusate ma nella segnalazione si parla di un ticket di tipo X numero 123456. Ma il tracciato allegato è di tipo Y (che non c'entra una mazza aggiungo sommessamente). E' possibile avere quello utilizzato?" Utente: "Esatto. Grazie. Saluti" ... Poi uno non deve bestemmiare contro l'intelligenza da armadillo degli utenti. |
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Talebano
Questa volta la storiella divertente illustra cosa succede nel mondo reale quando diventa "stardand" il non rispetto degli standard (RFC)
--- Premessa: questa qui' non e' propriamente una 'storia', ma mi e' stato fatto notare da piu' parti che ultimamente scrivo un po' troppi "commenti", ed e' abbastanza relativa, quindi la posto qui'. Il termine talebani o talibani indica gli studenti delle scuole coraniche (incaricati della prima sommaria alfabetizzazione, basata esclusivamente su testi sacri islamici). Sono diventati famosi sugli organi di comunicazione di massa, che usa questo termine per indicare la popolazione fondamentalista presente in Afghanistan e nel confinante Pakistan (fonte: Wikipedia). Ed e' usato (aggiungo io) anche per indicare in generale chiunque assuma posizioni estremiste in una qualunque discussione o su qualunque argomento. Che io sia tacciato di "talibanismo" non e' cosa anormale, in molti casi le mie opinioni su certe cose sono oramai un po' troppo "estremizzate" per poter essere definite "bilanciate" (cose come "php e' una chiavica", "tutti i phprogrammatroti dovrebbero essere sterminati" e "exchange != mail server" tanto per citarne alcune). Ma in molti casi capisco che un approccio del tipo "digitale", con solo due posizioni possibili (bianco e nero, giusto e sbagliato, si o no) e' piuttosto difficile da tenere ed alla lunga provoca piu' problemi che altro, in questo mondo complesso e differenziato e' sempre necessario mediare. Allora, stamani mi arriva la telefonata del CL del giorno (CL per gli amici), che si lamenta che non riesce a ricevere la posta dall'altro CL del giorno (CL2 per gli amici) il quale sarebbe tanto interessato a diventare suo cliente (cliente di CL intendo) ma a quanto pare se non riescono a comunicare via e-mail non c'e' modo. Il server di posta di CL fu' installato un po' di tempo fa' dal mio ex-collega (si', quello che tirava le tastiere dalla finestra), il quale era pure lui un talebano, ma fino ad ora ha funzionato regolarmente e, dato che pare che sia solo la mail di CL2 che non viene ricevuta, io comincio a sentire puzza di un grosso, peloso e fetente Exchange in giro. IO - Quindi che errore ricevete? CL - Noi non riceviamo nessun errore, e' la posta di CL2 che non riceviamo IO - E CL2 non riceve nessun errore al riguardo? CL - No nessun errore, solo la posta di CL2 che non arriva. IO - Si', che la sua posta non vi arriva lo avevo capito, ma di solito quando la posta non viene consegnata viene consegnato un qualche tipo di messaggio di mancato recapito, con una indicazione del perche' non si e' potuto consegnare il messaggio. CL2 dovrebbe avere un qualche tipo di errore. CL - No la posta di CL2 non ci arriva. Grrr... Dopo una rapida ricerca nel nostro database di configurazione scovo i dati di login sul server di posta di CL, mi loggo e scopro che il server e' QMail. Nel paese dei Talebani Dan Bernstein e' il supremo ed indiscusso imperatore. Ravano un po' nei log e mi becco questo frammento di balbuzie: [ScanFlowStore] Mail error: The message could not be sent to the SMTP server. The transport error code was 0x800ccc6a. The server response was 451 See http://pobox.com/~djb/docs/smtplf.html. E nella pagina specificata si legge: Your mailer is violating 822bis section 2.3, which specifically prohibits all bare LFs Un rapido controllo sul server di posta di CL2 mi dice che si', loro usano Sexchange. Venghino venghino siorre e siorri! Lo scontro del secolo! Il Talebano delle RFC contro "noipossediamolafottutainterneteglistandardlipossiamoignorare", l'Oggetto Inamovibile contro La Forza Irresistibile! Vecchi e bambini meta' prezzo. Che sexchange abbia un approccio per cosi' dire "rilassato" nei confronti delle RFC e degli standard vari non e' che sia una cosa tanto nuova. D'altra parte le RFC stesse specificano che e' consigliabile tenere a mente che, si', esistono dei software bacati che non rispettano i dettami e sarebbe opportuno tentare di cooperare e non stigmatizzare questi cerebrolesi. Si potrebbe anche obiettare che porcoca$$o! Non e' che non abbiano i soldi, l'energia o le capacita' per scrivere una chiavica di mailer che rispetti quei quattro dettami che sono vecchi di vent'anni, e che se non vogliono rispettare gli standard possono anche andare a succhiare le dita dei piedi sporchi di una valkiria incazzosa (la Convenzione di Ginevra non copre le torture alle metafore vero? Phew...) Purtroppo, in molti casi occorre anche sapersi destreggiare, perche' e' bello dire che bisogna essere interoperabili (che detto cosi' suona quasi una roba sconcia) ed essere aperti agli standard di scambio delle informazioni eccetera eccetera. Ma se vuoi lavorare in certi casi devi anche saperti adattare, quindi accettare documenti di Worp, Expel ed aspettarti il CL del caso che ti manda uno snapshot dello schermo incorporato in un documento di Word per spiegarti quale e' l'errore che riceve dalla famosa applicazione (404, pagina non trovata). Comunquesia, io giro la cosa a CL, con spiegazione che sostanzialmente dice "finche' CL2 non invia una mail che risponde ai dettami di quello che una mail dovrebbe essere il mail server persistera' nel non accettarlo. Potrebbe essere che CL2 stia cercando di inviare un qualche file binario che non viene impacchettato come dovrebbe, potrebbe essere che hanno qualche casino, ma come e' come non e' il server si rifiuta di accettare la mail. E dato che si rifiuta di accettare solo la mail di CL2 non e' che il mail server e' rotto. E' quello di CL2 che e' rotto. Ovviaemente la spiegazione non e' garbata a CL che ha cominciato con una filippica allucinante che loro stanno cercando di acquisire il cliente e che la comunicazione e' essenziale e blah blah blah yada yada yada. Per cui alla fine della lunghissimissima telefonata mi sono limitato a dirgli che se vuole cambiare la cosa dovremo installare un server di posta diverso e meno "stretto" nei confronti delle regole. E come accennato sopra, a volte per amore del quieto vivere e della busta paga a fine mese bisogna sapersi piegare a certi compromessi, percui QMail verra' presto sostituito da un bel Postfix. Segnamo un altro punto a favore della corruzione degli standard. Davide 07/03/2011 08:00
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 3488
|
Quote:
__________________
www.biffuz.it | Thou shall not follow the NULL pointer, for chaos and madness await thee at its end. Powered by: M1 @ Sonoma | 7600X @ W11 | C2Q @ XP | P!!! @ W98+BeOS | 286 @ W3.1 | C64 | iP16 | iPad8 | rPi4 | and more... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:33.




















