[{"data":1,"prerenderedAt":761},["ShallowReactive",2],{"post-migrare-da-magento-2-a-woocommerce-la-sfida-delle-password":3,"related-migrare-da-magento-2-a-woocommerce-la-sfida-delle-password":197},{"id":4,"title":5,"body":6,"categories":179,"coverImage":181,"date":182,"description":183,"extension":184,"meta":185,"navigation":186,"path":187,"seo":188,"stem":189,"sticky":190,"tags":191,"__hash__":196},"articles/migrare-da-magento-2-a-woocommerce-la-sfida-delle-password.md","Migrare da Magento 2 a WooCommerce: La Sfida delle Password",{"type":7,"value":8,"toc":166},"minimark",[9,13,18,21,26,29,33,36,40,43,47,50,54,62,72,77,80,83,87,95,114,117,121,127,134,138,145,148,151,155],[10,11,12],"p",{},"Mi sono imbattuto in una sfida interessante: creare un plugin per WordPress che permettesse una migrazione senza soluzione di continuità degli utenti da Magento 2 a WooCommerce. Sembra semplice, vero? Lo pensavo anche io, prima di rendermi conto che mi trovavo di fronte a un terreno inesplorato, senza una libreria, un plugin o una guida a cui fare riferimento. Lasciatemi spiegare.",[14,15,17],"h2",{"id":16},"woocommerce-vs-magento-perché-scegliere-woocommerce","WooCommerce vs Magento: perché scegliere WooCommerce?",[10,19,20],{},"Quando si tratta di scegliere una piattaforma di e-commerce, WooCommerce e Magento sono due dei nomi più popolari che vengono in mente. Entrambi offrono un'ampia gamma di funzionalità che possono aiutare a costruire un negozio online robusto. Tuttavia, ci sono diverse ragioni per cui potresti voler scegliere WooCommerce su Magento. Ecco alcuni dei vantaggi principali:",[22,23,25],"h4",{"id":24},"facilità-duso","Facilità d'uso",[10,27,28],{},"WooCommerce è noto per la sua facilità d'uso. È un plugin di WordPress, il che significa che si integra perfettamente con qualsiasi sito WordPress esistente. Se hai già familiarità con WordPress, allora imparare a usare WooCommerce sarà un gioco da ragazzi. Magento, d'altra parte, ha una curva di apprendimento più ripida e può essere più complicato da configurare e gestire.",[22,30,32],{"id":31},"flessibilità-e-personalizzazione","Flessibilità e personalizzazione",[10,34,35],{},"WooCommerce offre una grande flessibilità quando si tratta di personalizzare il tuo negozio. Ci sono migliaia di temi e plugin disponibili che ti permettono di aggiungere nuove funzionalità e cambiare l'aspetto del tuo negozio con facilità. Magento offre anche molte opzioni di personalizzazione, ma può richiedere più competenze tecniche per apportare modifiche significative.",[22,37,39],{"id":38},"costi","Costi",[10,41,42],{},"WooCommerce è un plugin gratuito, il che lo rende una scelta eccellente per le piccole imprese o per chi è alle prime armi con l'e-commerce. Anche se ci sono costi associati all'hosting del tuo sito e all'acquisto di temi o plugin premium, questi costi sono generalmente più bassi rispetto a quelli di Magento. Magento offre una versione gratuita (Magento Open Source), ma per accedere a tutte le funzionalità e al supporto dovrai optare per estensioni premium o a Magento Commerce, ad un costo significativo.",[22,44,46],{"id":45},"supporto-della-comunità","Supporto della comunità",[10,48,49],{},"Sia WooCommerce che Magento hanno comunità di sviluppatori attive, ma la comunità di WordPress (e quindi di WooCommerce) è molto più grande. Questo significa che è più facile trovare risorse, tutorial e soluzioni a problemi comuni con WooCommerce.",[14,51,53],{"id":52},"migrazione","Migrazione",[10,55,56,57,61],{},"Mentre Magento può essere una scelta eccellente per le grandi imprese che necessitano di una soluzione di e-commerce robusta, WooCommerce offre una soluzione più accessibile e user-friendly che è ",[58,59,60],"strong",{},"perfetta per le piccole imprese",".",[10,63,64,65,71],{},"Per questi motivi, talvolta le imprese di piccole dimensioni che hanno adottato Magento inizialmente, si trovano in difficoltà con costi e rigidità difficilmente sostenibili ed optano per un'attività di ",[58,66,67],{},[68,69,70],"em",{},"replatforming"," per proseguire le vendite su WooCommerce.",[73,74,76],"h3",{"id":75},"i-vantaggi-di-una-transizione-fluida","I Vantaggi di una transizione fluida",[10,78,79],{},"Una delle principali preoccupazioni quando si migra da una piattaforma all'altra è la frizione percepita dall'utente finale, che potrebbe incidere negativamente sulle conversioni.",[10,81,82],{},"Se mantenere la struttura generale del sito ecommerce familiare (o addirittura identica) ed il catalogo intatto è ragionevolmente semplice, non lo è quando si tratta di autenticazione.",[73,84,86],{"id":85},"magento-2-e-wordpress-autenticazione-a-confronto","Magento 2 e WordPress: autenticazione a confronto",[10,88,89,90,94],{},"WordPress utilizza una tecnologia chiamata ",[91,92,93],"code",{},"phpass"," per l'hashing delle password. Si tratta di un framework di hashing delle password di dominio pubblico portatile per l'uso in applicazioni PHP.",[10,96,97,98,101,102,107,108,113],{},"Magento 2, d'altra parte, utilizza un algoritmo di hashing delle password più complesso. Da un lato infatti utilizza ",[91,99,100],{},"sodium"," (incluso in PHP dalla versione 7.2), dall'altro utilizza una tecnica chiamata ",[58,103,104],{},[68,105,106],{},"hash stretching"," per aumentare la sicurezza delle password hashate. Questo comporta l'hashing della password più volte (per di più con l'aggiunta di una stringa casuale detta ",[58,109,110],{},[68,111,112],{},"salt"," che ne aumenta ulteriormente la complessità).\nQuesto approccio rende il processo di hashing estremamente intensivo dal punto di vista computazionale, il che può aiutare a rallentare un attaccante che sta cercando di indovinare la password.",[10,115,116],{},"Questa sostanziale differenza nel processo di hashing delle password le rende incompatibili quando importate direttamente da Magento a WordPress e viceversa.",[73,118,120],{"id":119},"approcci-comuni","Approcci comuni",[10,122,123,124,61],{},"La soluzione più comune è quella di forzare il reset delle password degli utenti. Questo può essere un processo fastidioso per gli utenti e ",[58,125,126],{},"può portare a una perdita di traffico e di fiducia",[10,128,129,130,133],{},"Un'altra soluzione diffusa è quella di introdurre un meccanismo che verifichi la correttezza della password attraverso un login via API verso la vecchia piattaforma. Ciò però comporta la ",[58,131,132],{},"necessità di mantenere attiva ed accessibile a tempo indefinito la vecchia piattaforma",". Per di più in caso di down di quest'ultima il meccanismo fallirà.",[14,135,137],{"id":136},"la-mia-soluzione-insegnare-a-wordpress-come-comprendere-le-password-di-magento","La mia soluzione: insegnare a WordPress come comprendere le password di Magento",[10,139,140,141,144],{},"Dopo aver letto miriadi di articoli fuorvianti, ho deciso di sporcarmi le mani e di analizzare la classe ",[91,142,143],{},"Encryptor"," di Magento 2 per comprenderne a pieno l'algoritmo (e sì, avevo dapprima provato a\nchiedere a chatGPT4, con esito fallimentare). Da questo studio è scaturito un plugin WordPress leggerissimo che consente a WordPress di interpretare gli hash generati su Magento.",[10,146,147],{},"Il plugin si aggancia alla funzione di autenticazione di WordPress e verifica che l'hash importato dal database Magento 2 corrisponda alla password inserita, per poi eventualmente procedere\na creare un nuovo hash nativo di WordPress.",[10,149,150],{},"Gli utenti possono dunque effettuare il login su WordPress con le loro password Magento 2 esistenti, rendendo la transizione trasparente.",[14,152,154],{"id":153},"open-source","Open Source",[10,156,157,158,165],{},"In piena filosofia open source, e per contribuire ad ambedue le community ho deciso di rilasciare questo plugin sotto licenza GPL2 sia sul repository dei plugin di WordPresss che\nsu ",[159,160,164],"a",{"href":161,"rel":162},"https://github.com/enricodeleo/wp-password-migration-magento/",[163],"nofollow","GitHub"," per eventuali contribuzioni da parte di altri dev.",{"title":167,"searchDepth":168,"depth":168,"links":169},"",2,[170,171,177,178],{"id":16,"depth":168,"text":17},{"id":52,"depth":168,"text":53,"children":172},[173,175,176],{"id":75,"depth":174,"text":76},3,{"id":85,"depth":174,"text":86},{"id":119,"depth":174,"text":120},{"id":136,"depth":168,"text":137},{"id":153,"depth":168,"text":154},[180],"Dev","https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/images/migration.jpeg","2023-06-07T12:27:00.000Z","La vera sfida nel rendere fluida la migrazione tra Magento e WooCommerce (WordPress). Un viaggio nell'algoritmo di hashing delle password di Magento 2 e come ho risolto questo problema.","md",{},true,"/migrare-da-magento-2-a-woocommerce-la-sfida-delle-password",{"title":5,"description":183},"migrare-da-magento-2-a-woocommerce-la-sfida-delle-password",false,[192,193,194,195],"sviluppo","magento","wordpress","plugin","XMglEILjloRo_HKiYFSPtAoSKKAZ5VdYivsFrsy_yFQ",[198,553],{"id":199,"title":200,"body":201,"categories":538,"coverImage":540,"date":541,"description":542,"extension":184,"meta":543,"navigation":186,"path":544,"seo":545,"stem":546,"sticky":190,"tags":547,"__hash__":552},"articles/velocita-senza-giudizio.md","Velocità senza giudizio",{"type":7,"value":202,"toc":529},[203,208,211,218,221,224,230,237,241,244,251,265,272,278,281,285,291,298,301,312,315,322,330,333,337,340,347,358,361,368,373,376,379,386,390,393,396,399,402,408,411,416,419,423,429,432,439,442,453,457,463,466,477,482,485,488,493,497,500,507,510,521,524],[10,204,205],{},[68,206,207],{},"Il vibe coding non ha inventato il codice scritto male. Ha solo tolto l'attrito.",[10,209,210],{},"Ho visto un backend con l'autenticazione hardcodata nel frontend. Password admin in chiaro, visibile a chiunque aprisse DevTools. Non era vibe coding — era 2018, dev umani, trovati su Upwork.",[10,212,213,214,217],{},"Ve lo dico perché quello che sta succedendo adesso ",[58,215,216],{},"non è una novità",". È la stessa roba, più veloce.",[10,219,220],{},"Ho visto Google Sheets usato come database. Collassava a quattro utenti. I fondatori si sono sorpresi.",[10,222,223],{},"Ho visto funzionalità dichiarate implementate che erano solo API vuote senza niente dietro. L'ho visto fare a dev umani. L'ho visto fare a Claude Opus 4.6, che in questo momento è il modello più capace di Anthropic. Ho visto test scritti per passare, non per verificare.",[225,226,227],"blockquote",{},[10,228,229],{},"Un sistema che si auto-certifica è più pericoloso di uno che fallisce apertamente.",[10,231,232,233,236],{},"Il problema non è l'AI. È che la velocità che offre può farti dimenticare che costruire software è ",[58,234,235],{},"fondamentalmente un atto cognitivo"," — non di scrittura.",[14,238,240],{"id":239},"il-software-non-è-testo","Il software non è testo",[10,242,243],{},"Questa è la cosa che l'entusiasmo attorno al vibe coding dimentica sistematicamente.",[10,245,246,247,250],{},"Il software non è testo. È un ",[58,248,249],{},"modello formale della realtà"," — un sistema di regole che descrive come un dominio si comporta, come gli stati cambiano, come le eccezioni vengono gestite, come il tempo e la concorrenza e il fallimento vengono trattati.",[10,252,253,254,257,258,261,262,61],{},"Scrivere codice non è mai stato il problema difficile. Il problema difficile è capire ",[68,255,256],{},"cosa"," scrivere — e ",[68,259,260],{},"perché",". È identificare i confini del dominio, le invarianti che devono reggere, i casi limite che il business non ti ha detto perché non sapeva di doverlo fare, le implicazioni che una scelta architetturale avrà tra sei mesi quando i requisiti cambieranno — ",[58,263,264],{},"perché cambiano sempre",[10,266,267,268,271],{},"Questa comprensione non si ottiene velocemente. Si ottiene attraverso iterazioni, conversazioni, errori, correzioni, notti a chiedersi perché quella cosa non funziona come dovrebbe. È quella che Michael Polanyi chiamava ",[68,269,270],{},"conoscenza tacita"," — sapere che non si riesce a trasferire completamente in parole, che risiede nell'esperienza accumulata, nei pattern riconosciuti, nelle intuizioni costruite su decine di progetti.",[10,273,274,277],{},[58,275,276],{},"L'AI non ha questa conoscenza."," Ha la media statistica di quello che è stato scritto su internet riguardo a problemi simili al tuo.",[10,279,280],{},"Che non è la stessa cosa.",[14,282,284],{"id":283},"la-trappola-della-perfezione-apparente","La trappola della perfezione apparente",[10,286,287,288,61],{},"C'è qualcosa di specifico nell'AI che aggrava tutto questo: ",[58,289,290],{},"il codice che produce sembra sempre scritto bene",[10,292,293,294,297],{},"È ben nominato, ha i commenti nei posti giusti, segue le convenzioni, usa i pattern corretti. Non sembra il codice di qualcuno che non sa quello che fa — sembra il codice di qualcuno che sa ",[68,295,296],{},"esattamente"," quello che fa.",[10,299,300],{},"Questo è il problema.",[10,302,303,304,307,308,311],{},"Il codice sbagliato scritto male ti ferma. Lo vedi, lo senti, ti insospettisce. Attiva il tuo senso critico prima ancora che tu abbia capito cosa fa. Il ",[58,305,306],{},"codice sbagliato scritto bene"," attraversa la code review senza attivare nessun campanello d'allarme, supera i test, va in produzione. E quando si rompe — ",[68,309,310],{},"perché si rompe"," — la forma corretta del codice rende ancora più difficile localizzare il problema concettuale che ci sta sotto.",[10,313,314],{},"Stai cercando un bug in codice che non sembra buggy. Stai cercando un'assunzione sbagliata in codice che sembra ragionevole.",[10,316,317,318,321],{},"Nel 1986 Fred Brooks scriveva che la difficoltà essenziale del software non è accidentale — non riguarda la sintassi, i compilatori, la velocità di scrittura. Riguarda la ",[58,319,320],{},"complessità concettuale intrinseca"," dei sistemi che costruiamo. Quarant'anni dopo, l'AI ha eliminato quasi completamente la difficoltà accidentale. Quella essenziale è rimasta intatta.",[225,323,324],{},[10,325,326,329],{},[68,327,328],{},"\"No silver bullet.\"","\n— Fred Brooks, 1986",[10,331,332],{},"E ora che la difficoltà accidentale è sparita, la difficoltà essenziale è più esposta che mai. Ma è anche più facile da non vedere, perché l'output che la nasconde sembra così convincente.",[14,334,336],{"id":335},"il-modello-della-realtà","Il modello della realtà",[10,338,339],{},"Quando chiedi all'AI di costruire qualcosa, quello che ricevi non è una soluzione.",[10,341,342,343,346],{},"È una ",[58,344,345],{},"interpretazione"," del problema che hai descritto.",[10,348,349,350,353,354,357],{},"L'AI costruisce un modello della realtà basato su quello che gli hai detto — e quello che gli hai detto è inevitabilmente incompleto, perché la conoscenza del dominio che hai in testa non si trasferisce per intero in un prompt. Il gap tra il problema che hai ",[68,351,352],{},"in testa"," e il problema che l'AI ha ",[68,355,356],{},"capito"," è sempre presente. A volte è trascurabile. A volte è la differenza tra un sistema che regge e uno che collassa al primo caso limite reale.",[10,359,360],{},"La velocità non ti dà il tempo di misurare quel gap. Peggio: la velocità e la perfezione apparente dell'output creano attivamente l'illusione che il gap non esista.",[10,362,363,364,367],{},"Questo è il motivo per cui ",[58,365,366],{},"\"funziona\" non è mai abbastanza"," come criterio di accettazione.",[10,369,370],{},[68,371,372],{},"Funziona rispetto a cosa?",[10,374,375],{},"Rispetto ai test che l'AI ha scritto per passare — costruiti attorno agli stessi casi che aveva in testa quando ha scritto il codice, in un loop chiuso che non include nessuna realtà esterna? Rispetto alla demo con dati puliti e percorsi felici? O rispetto alla logica reale del dominio, con tutti i casi limite che solo tu conosci perché ci hai lavorato dentro?",[10,377,378],{},"Salvatore Sanfilippo ha sollevato un problema analogo sulla code review: lo stato mentale di chi scrive non è trasferibile al reviewer. Il reviewer vede il testo, non il ragionamento che ha prodotto quel testo. O puntualizza cose superficiali, oppure non comprende abbastanza da vedere il problema vero.",[10,380,381,382,385],{},"Con l'AI il problema si radicalizza: ",[58,383,384],{},"l'AI non ha stato mentale da trasferire",". Ha prodotto output ottimizzando per la coerenza interna del testo, non per la corrispondenza con la tua realtà. Il reviewer — che sei tu — deve colmare quel gap da solo. Se non ti fermi a farlo, nessuno lo farà.",[14,387,389],{"id":388},"let-it-sink","Let it sink",[10,391,392],{},"C'è una pratica che ogni ingegnere con abbastanza cicatrici ha interiorizzato: dormirci sopra.",[10,394,395],{},"Non per pigrizia. Per necessità cognitiva.",[10,397,398],{},"Il cervello umano non elabora i problemi complessi in modo lineare e sequenziale. Elabora in parallelo, spesso al di sotto della soglia della coscienza. È per questo che le soluzioni migliori arrivano sotto la doccia, in macchina, la mattina appena svegli — non davanti allo schermo quando stai cercando attivamente la risposta. I problemi che non vedi nel momento emergono dopo, quando torni con occhi freschi e il cervello ha avuto il tempo di connettere pattern che la concentrazione attiva non riesce a vedere.",[10,400,401],{},"Non è misticismo. È neuroscienze. La modalità diffusa del cervello è essenziale per l'insight, per la comprensione profonda, per accorgersi delle incongruenze che la modalità focalizzata salta perché è troppo dentro il problema.",[10,403,404,405],{},"Con l'AI quella pratica diventa ancora più importante, e ancora più facile da saltare. Perché in pochi minuti hai davanti qualcosa che sembra completo. L'effort che hai speso è minimo, quindi la sensazione di investimento è bassa, quindi la soglia per dichiararlo fatto si abbassa. ",[58,406,407],{},"Non hai faticato per arrivare lì, quindi non senti il bisogno di proteggerti dall'errore di aver faticato invano.",[10,409,410],{},"Ma \"sembra completo\" e \"è corretto\" sono due cose diverse — e la velocità di produzione dell'AI ha reso quella distinzione più sottile che mai.",[225,412,413],{},[10,414,415],{},"Fermarsi non è perdere il vantaggio della velocità. È il momento in cui verifichi che quella velocità ti abbia portato nella direzione giusta.",[10,417,418],{},"Senza quel momento, stai solo andando veloce verso il posto sbagliato — e ci arrivi prima.",[14,420,422],{"id":421},"la-code-review-non-basta","La code review non basta",[10,424,425,426,61],{},"La risposta istintiva a tutto questo è: ",[68,427,428],{},"\"per questo c'è la code review\"",[10,430,431],{},"Ma la code review, così come è praticata nella maggior parte dei team, non risolve il problema che stiamo descrivendo.",[10,433,434,435,438],{},"La code review tradizionale è ottima per trovare bug sintattici, violazioni di convenzioni, problemi di sicurezza ovvi. È molto meno efficace per valutare se le ",[58,436,437],{},"decisioni architetturali sono corrette",", se il modello del dominio rispecchia la realtà, se le assunzioni implicite nel codice sono valide.",[10,440,441],{},"Con l'AI il problema si amplifica: il codice generato è sintatticamente inattaccabile. Il reviewer scorre, non trova niente che attivi i campanelli d'allarme standard, approva. Il problema concettuale che stava sotto passa indisturbato.",[10,443,444,445,448,449,452],{},"La code review utile in questo contesto non è ",[68,446,447],{},"\"questo codice è scritto bene?\""," — quella risposta è quasi sempre sì. È ",[68,450,451],{},"\"questo codice fa quello che dovrebbe fare nel contesto del dominio reale?\""," — e per rispondere devi avere la conoscenza del dominio che l'AI non ha, devi aver capito i requisiti abbastanza da sapere cosa verificare, devi aver lasciato che la soluzione sedimentasse abbastanza da poterla vedere con distacco critico.",[14,454,456],{"id":455},"il-debito-che-non-vedi","Il debito che non vedi",[10,458,459,460,61],{},"Il debito tecnico generato senza giudizio ha una caratteristica precisa: ",[58,461,462],{},"è silenzioso",[10,464,465],{},"Non si manifesta subito. Si accumula in decisioni prese per default dall'AI che non erano le tue decisioni — ma ora sono nel codice, e il codice è in produzione. In architetture che reggono il caso d'uso che hai descritto ma non quello successivo. In assunzioni implicite che l'AI ha fatto riempiendo i gap del tuo prompt con la media di quello che ha visto in training.",[10,467,468,469,472,473,476],{},"Ward Cunningham, che il termine \"debito tecnico\" lo ha inventato, intendeva qualcosa di specifico: il debito ",[68,470,471],{},"deliberato",", contratto consapevolmente per andare più veloci ora con l'intenzione di ripagarlo dopo. Non il debito ",[68,474,475],{},"accidentale",", quello che accumuli senza saperlo perché non hai capito abbastanza bene il problema.",[10,478,479],{},[58,480,481],{},"Il debito deliberato è uno strumento legittimo. Il debito accidentale è ignoranza capitalizzata.",[10,483,484],{},"Il vibe coding senza giudizio produce quasi esclusivamente debito accidentale. Perché la velocità impedisce la comprensione, e senza comprensione non puoi nemmeno scegliere consapevolmente di indebitarti — ti indebiti e basta, senza saperlo, senza poterlo quantificare, senza un piano per ripagarlo.",[10,486,487],{},"E quando emerge, emerge nel momento peggiore. Quando c'è trazione. Quando ci sono utenti reali. Quando il costo di sistemare è un ordine di grandezza superiore a quello che sarebbe stato all'inizio.",[225,489,490],{},[10,491,492],{},"Il conto arriva sempre. La velocità determina solo quanto in fretta lo accumuli.",[14,494,496],{"id":495},"la-velocità-è-un-mezzo","La velocità è un mezzo",[10,498,499],{},"L'AI nello sviluppo è straordinaria. La uso ogni giorno.",[10,501,502,503,506],{},"Ma la velocità non è il fine — è un mezzo. Il fine è costruire qualcosa che ",[58,504,505],{},"rispecchi la logica che avevi in testa",", che regga i casi limite del dominio reale, che qualcuno possa capire e modificare tra un anno senza maledire chi lo ha scritto.",[10,508,509],{},"Se la velocità ti impedisce di verificare che questo sia vero, non stai andando più veloce. Stai solo sbagliando più in fretta. Con più righe di codice. Con più fiducia. Con meno possibilità di accorgertene prima che diventi costoso.",[10,511,512,513,516,517,520],{},"La differenza tra un ingegnere che usa l'AI bene e uno che la usa male non è tecnica. ",[58,514,515],{},"È cognitiva."," È la capacità di fermarsi, lasciare che le cose sedimentino, tornare con distacco critico e chiedersi: questo rispecchia davvero quello che volevo? O sto guardando qualcosa che ",[68,518,519],{},"sembra"," quello che volevo?",[10,522,523],{},"Sono domande scomode da fare quando hai appena passato un pomeriggio produttivo e lo schermo è pieno di codice nuovo e i test passano.",[10,525,526],{},[68,527,528],{},"Falle lo stesso.",{"title":167,"searchDepth":168,"depth":168,"links":530},[531,532,533,534,535,536,537],{"id":239,"depth":168,"text":240},{"id":283,"depth":168,"text":284},{"id":335,"depth":168,"text":336},{"id":388,"depth":168,"text":389},{"id":421,"depth":168,"text":422},{"id":455,"depth":168,"text":456},{"id":495,"depth":168,"text":496},[180,539],"AI","https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/images/velocita-senza-giudizio.png","2026-04-03T10:00:00.000Z","Il vibe coding non ha inventato il codice scritto male. Ha solo tolto l'attrito. E la velocità, senza il tempo di valutare, produce solo errori più rapidi.",{},"/velocita-senza-giudizio",{"title":200,"description":542},"velocita-senza-giudizio",[548,549,550,551],"ai","vibe-coding","engineering","build-in-public","U75B5WaPnYhOsgue02Cp92PwZioiIXFh6SRZMrizYok",{"id":554,"title":555,"body":556,"categories":748,"coverImage":749,"date":750,"description":751,"extension":184,"meta":752,"navigation":186,"path":753,"seo":754,"stem":755,"sticky":190,"tags":756,"__hash__":760},"articles/la-storia-si-ripete.md","La storia si ripete",{"type":7,"value":557,"toc":740},[558,563,571,575,578,581,594,600,603,606,610,616,619,625,629,632,638,641,645,667,674,677,684,694,698,701,707,710,713,718,722,727,737],[10,559,560],{},[68,561,562],{},"Graph database, MongoDB, vector database dedicati. Il pattern è sempre lo stesso. Solo i nomi cambiano.",[10,564,565,566,570],{},"Nel ",[159,567,569],{"href":568},"/il-cms-in-c-che-non-ho-mai-scritto","post precedente"," ho raccontato di come nel 2015 ho scelto \"il solito\" WordPress per creare una piattaforma usata da decine di migliaia di persone. Ma c'è un'altra storia di quegli anni che vale la pena raccontare.",[14,572,574],{"id":573},"_2015-i-graph-database-erano-il-futuro-nosql-il-presente","2015: i graph database erano il futuro, noSQL il presente",[10,576,577],{},"Ogni conferenza, ogni blog post, ogni dev entusiasta. \"Le foreign key non scalano. I join sono roba vecchia. Il mondo è fatto di connessioni.\" Neo4j, Cypher, slide piene di nodi colorati e frecce.",[10,579,580],{},"Sullo stesso tono di guerra ai classici relazionali, le milioni di persone che si sono riversata su una unica combo, che quasi faceva da sinonimo a startup: nodejs + mongodb.",[10,582,583,584,587,588,587,591,61],{},"Partecipavo spesso a demo day tecnici dove CTO di altre startup raccontavano come stavano impostando la loro tecnologia.\nRicordo ancora uno ha esordire, appunto, con il classico dell'epoca: \"useremo node in accoppiata con mongo!\".\nPoi ha iniziato a descrivere il dominio: ",[68,585,586],{},"\"la relazione con\"",", ",[68,589,590],{},"\"la relazione di\"",[68,592,593],{},"\"questo è collegato a quello tramite quell'altro\"",[10,595,596,597],{},"Ho detto: ",[58,598,599],{},"\"Che follia sarebbe stata salvare le relazioni in un db... relazionale, vero?\"",[10,601,602],{},"Oggi uso Postgres per quasi tutto. Quando mi serve qualcosa in più pesco a piene mani da estensioni per lo stesso : pgvector per i vettori, timescale per time series, pg_textsearch per full text con ranking.",[10,604,605],{},"Graph database: zero.",[14,607,609],{"id":608},"cosa-è-successo","Cosa è successo",[10,611,612,613],{},"Niente di drammatico. ",[58,614,615],{},"Postgres è andato avanti.",[10,617,618],{},"Recursive CTE, jsonb, estensioni per tutto. Ha cannibalizzato il 90% dei casi d'uso senza aggiungere un componente infrastrutturale in più da mantenere, sincronizzare, monitorare e pagare.\nIl costo operativo di un grafo dedicato non è banale: lo sharding è complicato, e il modello mentale è diverso da quello relazionale che la maggior parte degli sviluppatori ha già interiorizzato.",[10,620,621,622,61],{},"Risultato: ottimo strumento per nicchie specifiche — fraud detection su scala enterprise, knowledge graph in grandi organizzazioni. Per il 95% dei progetti: ",[58,623,624],{},"overkill",[14,626,628],{"id":627},"la-stessa-storia-prima","La stessa storia, prima",[10,630,631],{},"Prima dei graph database c'era stato MongoDB.",[10,633,634,637],{},[68,635,636],{},"\"I join non scalano\""," — ripetuto come un mantra da chi non aveva mai avuto problemi di scala.\nDue anni dopo: array di userId dentro il documento ordine, ma alcuni stringhe, alcuni numeri altri ObjectId e manca il 3% dei riferimenti, e nessuno sa perché.",[10,639,640],{},"MongoDB era genuinamente utile per alcuni casi d'uso e anch'io l'ho usato tantissimo (più frequentemento a fianco anziché in sostituzione).\nIl problema era che veniva usato per tutto, perché era nuovo, perché era cool, perché usarlo sembrava una scelta moderna.",[14,642,644],{"id":643},"il-pattern-è-sempre-lo-stesso","Il pattern è sempre lo stesso",[646,647,648,652,655,658,661,664],"ol",{},[649,650,651],"li",{},"Tecnologia nuova risolve problemi reali in casi specifici",[649,653,654],{},"Viene presentata con casi d'uso di aziende con scala che il 99% dei team non avrà mai",[649,656,657],{},"Viene adottata come soluzione generale",[649,659,660],{},"Chi usa la tecnologia \"noiosa\" sembra un fossile",[649,662,663],{},"Arriva il momento dei conti",[649,665,666],{},"La tecnologia noiosa è ancora lì, qualcuno propone un refactor \"per irrobustire\" (leggasi tornare a schemi e contratti solidi), che durerà un anno.",[10,668,669,670,673],{},"C'è un concetto che si chiama ",[58,671,672],{},"Lindy Effect",": una tecnologia che esiste da vent'anni probabilmente esisterà altri vent'anni.",[10,675,676],{},"Ve lo dice uno che è smanettone e enthusiast dalla nascita: conoscere tutto, sperimentare tutto, ma in produzione... Dipende.",[10,678,679,680,683],{},"Il nostro mestiere è ",[58,681,682],{},"identificare contesti in cui è necessario operare scelte \"a mestiere\""," anche considerando aree di rischio come il supporto sul lungo periodo,\nla reperibilità (e dunque i costi) di risorse schillate in quella tecnologia col crescere del team, trasferimento di competenze, disponibilità di estensioni/librerie già pronte e battle-tested.",[10,685,686,689,690,693],{},[58,687,688],{},"E lo so che riusare qualcosa che usi da 20 anni è noioso",", ma a volte è anche il servizio più professionale che possiamo rendere. Per il brivido della novità basta un po' di pazienza e\ncertamente l'universo ci manderà il progetto in cui avrà veramente senso utilizzare la novità. Nel frattempo ci sono i vari progetti personali ",[68,691,692],{},"for fun"," come sfogo.",[14,695,697],{"id":696},"sta-succedendo-adesso","Sta succedendo adesso",[10,699,700],{},"Pinecone, Weaviate, Chroma. Vector database dedicati, presentati come componente necessario di qualsiasi architettura AI.",[10,702,703,704,61],{},"Anche qui: non è che siano inutili. È che nella stragrande maggioranza dei casi ",[58,705,706],{},"non ne hai bisogno",[10,708,709],{},"Una ricerca ibrida full-text con BM25 + pgvector risolve il grosso — con il vantaggio di avere tutto nello stesso database, relazioni intatte, zero sincronizzazioni, zero componenti aggiuntivi da mantenere. Fino a circa mezzo milione di record la differenza di performance rispetto a un vector database dedicato è risibile. E la maggior parte dei progetti non arriverà mai a mezzo milione di record.",[10,711,712],{},"Il costo dell'infrastruttura esotica lo paghi sempre dopo, mai subito. E \"dopo\" coincide quasi sempre con il momento peggiore: trazione reale, investitori che guardano, utenti che si lamentano.",[10,714,715],{},[58,716,717],{},"La storia è ciclica. Solo i nomi cambiano.",[14,719,721],{"id":720},"il-mio-mantra","Il mio mantra",[225,723,724],{},[10,725,726],{},"Minimum diff, less moving parts.",[10,728,729,730,733,734],{},"Nei progetti ho una regola che mi porto dietro da anni: ",[58,731,732],{},"minimum diff, less moving parts",". Ogni componente aggiuntivo è una dipendenza, una cosa che può rompersi e che ha side effects a volte impliciti. Una cosa che qualcuno\ndeve capire, mantenere, aggiornare. ",[58,735,736],{},"Il costo non è mai solo tecnico — è cognitivo, operativo, economico.",[10,738,739],{},"Scegliere la tecnologia più \"dritta\" che risolve il problema non è una scorciatoia. È il mestiere.",{"title":167,"searchDepth":168,"depth":168,"links":741},[742,743,744,745,746,747],{"id":573,"depth":168,"text":574},{"id":608,"depth":168,"text":609},{"id":627,"depth":168,"text":628},{"id":643,"depth":168,"text":644},{"id":696,"depth":168,"text":697},{"id":720,"depth":168,"text":721},[180],"https://i2.wp.com/enricodeleo.s3.eu-south-1.amazonaws.com/images/la-storia-si-ripete.png","2026-03-30T10:00:00.000Z","Nel 2015 i graph database erano il futuro. Oggi uso Postgres per quasi tutto. Nel mezzo: MongoDB, ObjectId misti, e il solito conto arrivato dopo. Sta succedendo di nuovo con i vector database.",{},"/la-storia-si-ripete",{"title":555,"description":751},"la-storia-si-ripete",[757,758,550,759,551],"postgres","database","tech-debt","VEFCqWkv1Yjj6bCK7VDZSq71yRGNeyfN3gYqOWZux44",1777303095466]