Gli "Ospiti" della Sala Macchine


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Login/Register
Nota: i miei commenti (quando ci sono) sono in italico

La storia (infinita?) del $4WC (parte 1)

Era una bella giornata di Novembre, il citofonino suonava puntuale alle 07.15 strappandomi dalle braccia di Morfeo e switchando il cervello dalla modalita' "Sleep" a "Zombie". Mi lancio quindi nella solita routine colazione -> lavaggio -> treno -> ufficio.

Micro digressione su di me: sono un Windows (l)user, senior programmer (leggi: sei comunque alla base della catena alimentare aziendale ma ti diamo 10e in piu' ed un titolo figo), programmo in qualsiasi cosa mi capiti sottomano (in particolare Java, ma non e' che lo conosco.. diciamo che lo uso) e fortunatamente spesso SO cosa sto facendo, quindi posso evitare di tenere l'etichetta di CL sul badge.

Eravamo alle battute finali di un progetto per $Grossa_ditta_supermercati_francese e ci avviavamo a togliere il telo dal nuovo progetto, per $Altra_grossa_ditta_supermercati. Il capo (project architect) si era fatto una settimana fuori per farsi un'idea di cosa avremmo dovuto affrontare e dopo aver riunito il team attorno alla tavola rotonda (seeeh) esordisce con le seguenti parole:

Capo (CA): "Waugliu'.. e' un applettone!"

Dopo di che ci illustra la rava e la fava del progetto: l'implementare una nuova funzionalita', modificando il pregresso in maniera non invasiva con interventi mirati e chirurgici atti a minimizzare gli impatti senza stravolgere il funzionamento precedente. La tecnologia sarebbe stata all'incirca AWT, EJB 2.0 per i batch, il tutto su Jbuilder X. Una delle ditte fornitrici di software per $Altra_grossa_ditta_supermercati stava per essere sbattuta fuori a calci e noi avremmo dovuto prenderne il posto, quindi performance bla bla, metodologia yadda yadda.. insomma le solite belle parole con cui ci si riempie la bocca.

Tradotto dal politichese: vedete di non far casino, che quella roba se finisce in produzione e non funziona perdiamo il cliente.

Ora, dopo che il mio neurone apposito si e' trascritto la parte interessante del discorso sopra, il CL che e' in me NON si e' fatto i fatti suoi e, dopo una rapida ricerca su interDet, si e' fatto un'idea di cosa CA stesse dicendo. Ma non aveva idea di cosa EFFETTIVAMENTE potesse essere cio' cui stava andando incontro (che CL sarebbe, altrimenti!), quindi fesso io a dargli ascolto e pronunciare le parole che mi suggeriva: "ah, beh.. allora e' facile!". D'altronde, un accrocchio fatto in AWT, che complessita' poteva mai avere? Ah, quanto sbagliavo...

Il senno di poi e' una scienza esatta. Dicono.

La settimana dopo, in compagnia di Collega1 (C1) e guidati da CA, ci siam lanciati verso la sede di $Altra_grossa_ditta_supermercati a seguire un corso per imparare a "programmare in $4WC" (WC per water closet.. e 4 perche' e' troppo grossa per starci in uno solo). $4WC? E che roba sara' mai? Ma non era Swing? AWT? Booooooh...

Sotto il simbolo della ditta, giro di presentazioni con il Manager, il Senior Manager (pezzo grosso) e Senior Executive (qualcosa che non potro' mai essere nemmeno dopo 130 anni di fedele lecchin.. ehm.. servizio in azienda), ci accomodiamo in uno stanzino, attacchiamo i portatili (mi ero portato il MIO PERSONALE perche' quelli aziendali erano finiti. E meno male che lavoro per una multinazionale), configurazione di rete per la posta (il vecchio progetto ancora richiedeva un po' di attenzione, particolare la cui importanza verra' spiegata in seguito), tiriamo fuori carta e penna e ci prepariamo a prendere appunti.

Partiro' prima col resoconto della giornata, poi vi illustrero' il motivo:

Pagine di appunti prese il giorno 1: 2.
% di testo comprensibile: 4% (a voler essere buoni), il resto erano tutte frasi sconnesse.
Distanza tra arcata dentale superiore ed inferiore: non pervenuta, ma sicuramente ben oltre il limite umano per via di stupore e sconforto.

Il motivo?

Visto che avevamo avuto parte della documentazione teorica (poco aggiornata) dell'accrocchio e ce l'eravamo gia' studiata, avevamo insistito per far qualcosa di piu' pratico. "Facciamo un esempio, un template" ha detto CA, "qualcosa che somigli molto alla maggior parte delle cose che dovremo affrontare in seguito. Qualcosa del tipo un filtro di ricerca, una griglia di risultati, una lookup (popup di ricerca, pensavamo) e le funzionalita' di inserimento, modifica e salvataggio".

Il primo Luser, che chiameremo quindi con uno sforzo di fantasia L1, era comunque una persona che si faceva seguire, quando spiegava. Dinamico quanto basta, preparato quanto basta, ma comunque chiuso nella sua conoscenza. Alla domanda "ma non possiamo mettere Hibernate per interfacciarci col DB?" ha risposto candidamente "non lo so", per intenderci.

Ci mettiamo comunque con la voglia di un condannato a morte ed un sorriso professionale e falso da politici consumati e cominciamo.

L1: bene, allora, per creare una nuova applicazione.
*scrib scrib*
L1: ..creiamo una cartella sotto l'alberatura col nome del progetto, per esempio MyTest...
*scrib scrib*
L1: ...poi copiamo la cartella di un'altra applicazione, tipo questa..
*scrib...eh? mah.. scrib*
L1: ...dopo aver incollato la cartella sotto MyTest, apriamo e cancelliamo queste sottodirectory..
*scrib....*
L1: ..quindi apriamo il progetto nell'ide e siamo pronti a continuare.
*tunk!*

L'ultima era la p... enna che cadeva.

CA: Quindi mi stai dicendo che non sappiamo creare un progetto da zero ma dobbiamo partire da uno gia' esistente?
L1: eh... ma abbiamo sempre fatto cosė..
CA: ma qualcuno avra' pur scritto per la prima volta queste cose!
L1: eh si, forse $nome_che_ho_dimenticato, credo... anni fa.
CA: vabe', non fa niente, 'ndiamo avanti.

Passiamo a creare la classe con pannelli, bottoni, etc. ed il relativo controllore.

L1: quindi estendiamo la classe EXTGridController2Impl...
Io (ingenuo): 2? 2 come due?
L1: si, 2!
CA: perche', quante implementazioni precedenti ci sono?
L1: per questa solo un'altra..
Noi tre, quasi in coro: "per questa??"

E veniamo a sapere che altre classi hanno addirittura DUE antenati... e richiamano oggetti di questi di cui, ovviamente, le implementazioni sono a noi precluse perche' infilati in jar di infrastruttura (le famose cartelle che non dovevamo cancellare alla creazione del progetto). Scopriamo inoltre che OGNI SINGOLO COMPONENTE di AWT e' stato esteso da loro, quindi non usero' mai una comboBox, ma una EXTComboBox ed amenita' simili.

Scopriamo poi, nei giorni successivi, che hanno un modo tutto loro di fare operazioni sul db! Hanno costruito in illo tempore i loro metodi di lettura, scrittura, modifica e cancellazione ed usano solo quelli. E fin qui, se funziona non toccarlo, dice il saggio. Ci troviamo pero' di fronte a:

  1. query in un file xml esterno (ok, ci sto);
  2. un ulteriore file xml per il mapping delle tabelle. Ad ogni campo della tabella viene associata una chiave per distinguerlo da campi omonimi di altre. (Nota: le tabelle sono 1400. No, gli zeri son giusti, MILLEQUATTROCENTO, con alcune di 120 colonne);
  3. un mapping in una classe detta VO (value object.. un bean, praticamente), che in ogni metodo di set degli oggetti al suo interno porta un attributo chiamato chiave xml;
  4. un mapping nella classe di visualizzazione (quella coi pannelli etc) con le suddette chiavi xml per gli attributi che mettono a video gli oggetti del VO;
  5. un doppio mapping nella classe di business che incrocia la chiave db con quella del vo, a cui (abbiamo scoperto dopo) va aggiunta la necessita' di mappare il nome delle tabelle usate nelle varie operazioni di questa classe in un hashSet, pena il vedere miseramente fallire anche la piu' semplice delle query!

Quindi contiamo.. mapping + mapping + mapping + chiave sull'xml delle tabelle.. otteniamo.. un TRIPLO MAPPING PERFORANTE! Adesso capisco a chi si sono ispirati per creare sto accrocchio... agli scienziati pazzi dei cartoni giapponesi!

La nostra odissea continua, mentre ci addentriamo nella jungla del $4WC. Il nostro "esempio" si rivela una cosa assurdamente difficile da manipolare. O forse siamo noi troppo scemi.. non so.. pero'... ditemi voi se e' normale che per ottenere il risultato: caricare una griglia popolando dei filtri di ricerca e premendo il tasto "ricerca" e' necessario (faccio tutto il giro):

  1. Catturare l'evento nella classe della griglia, che richiama un metodo nel controllore della griglia
  2. eseguire il metodo nel controllore della griglia che chiama TRAMITE REFLECTION (perche'?!) la classe di business passando un array di oggetti tra cui il famigerato VO ed altre amenita' che non sto qui a spiegarvi (anche perche' non potrei, non le ho capite)
  3. mappare in un servletController la chiamata al metodo di business, facendo da ponte tra i mondi
  4. copiare la firma del metodo richiesto da qualche parte, se e' uno di quelli standard che vuoi sovrascrivere, anche passando parametri vuoti al metodo e facendogli fare tutt'altro
  5. assicurarsi di aver mappato correttamente e posizionalmente i campi risultanti della query (si, usa il nome ma vuole ANCHE che i campi della query siano nello stesso ordine in cui sono mappati nel doppio mapping di cui sopra)
  6. a quel punto entrera' in gioco la vera potenza del framework. AUTOMATICAMENTE, senza il minimo sforzo da parte del programmatore, mettera' a video un messaggio d'err... ehm.. i risultati della query popolando la tabella!

Con questo orrore che ci divorava la mente e' passata una settimana. Abbiamo avuto un week end per ripensare a tutto (o meglio, per dimenticare) e poi siamo ritornati a seguire il corso. Ignari di cosa ci aspettava ancora.

--segue--

GattoNero

14/05/2009 16:23

Precedente elenco Successivo

le storie degli ospiti sono in ordine sparso, quindi 'precedente' e 'successiva' possono portare su storie di altri autori

I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli (io o l'autore della storia) e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

In aggiunta: se il vostro commento non viene pubblicato non scrivetemi al riguardo, evidentemente non era degno di pubblicazione.

6 messaggi this document does not accept new posts
AdrianoAccrocchi Di Adriano - postato il 11/05/2009 22:25
Chi dice che i CMS fatti in PHP siano una defecata ha ragione, ma non ha visto il WCMS LiveLink della Open Text, fatto in gia'va. Quello che ha sbattuto quel mostro non ha mai pensato, mai, dico mai, a come si fa una pagina web.

--
Adriano


Bill GreenGatto Nero Di Bill Green - postato il 12/05/2009 10:19

You're fired

--
Bill Green


GattoNero-AT- Bill Green Di GattoNero - postato il 14/05/2009 12:35

> You're fired
> --
> Bill Green

Un modo come un altro per uscire dal progetto... e non penso sia il peggiore..

--
il gattaccio nero


AndreaConsiglio Di Andrea - postato il 12/05/2009 14:51

Scappa!

--
Andrea


Daniele C.Ok, mi hai colpito Di Daniele C. - postato il 12/05/2009 16:00

Ammetto che mi mancava ancora di vedere uno che, dato che non sa come creare un progetto con un IDE (cercare "Create Project" no, eh?), cosa che dovrebbe fare quasi tutti i giorni, decide di fare copia incolla di un progetto esistente e poi cancellare i file di troppo.

Scommetto che hanno provato a creare le directory nel posto giusto da zero, ma poi si sono resi conto che l'IDE non vedeva il progetto e non sapevano perché (i file di sistema o nascosti questi sconosciuti).

Pensavo di aver visto il peggio quando avevo analizzato un CMS per valutarne la complessità (per gli UberCuriosi "echo clone | sed -e s/c/p/"), dove per creare un template del CMS medesimo si doveva usare un tool che generava la struttura delle directory, con i file necessari, vuota (che farlo a mano era un delirio), poi dovevi aggiungere la roba mano a mano nel posto giusto, sennò crashava tutto.

Al peggio non c'è mai limite, vedo.

--
Don't Make me get my Hambone!!!
http://www.dilbert.com/strips/comic/2009-02-19
---
D.


CarloQuanti brutti ricordi! Di Carlo - postato il 25/05/2009 14:36

A suo tempo sono stato fagocitato anche io in un $chifosissimo corso molto ma molto uguale al tuo perché nonostante i miei anni di "esperienza" il cliente voleva un attestato che avessi frequentato una $str0nz-AT-t-AT- simile per dimostrare che ero esperto... Salvato dal fatto che l'insegnante (parola grossa) aveva appena litigato con la sua fidanzata e quindi passava il tempo al telefono :-\)

--
--
Carlo


6 messaggi this document does not accept new posts

Precedente elenco Successivo


Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gort