Тёмный
CodeBrothers
CodeBrothers
CodeBrothers
Подписаться 2,9 тыс.
Ciao, e benvenuto tra i CodeBrothers! 🦾
Ebbene sì, qui troverai un corso completo di Java in italiano a partire dagli argomenti più basilari fino ai concetti più avanzati (Spring Boot, Jenkins, AWS..)
L'obiettivo di questo canale è farti imparare una materia difficile facendoti prima di tutto divertire! Ecco perchè durante le spiegazioni troverai spesso immagini magari bizzarre o piccoli spezzoni di video che mi passano per la testa mentre faccio le riprese 😄
Su CodeBrothers non imparerai solo una tecnologia ma un vero e proprio lavoro! Hai capito proprio bene, infatti prima della fine del corso sarai pronto per sostenere con successo la maggior parte dei colloqui aziendali.
E ricordati che i CodeBROthers non siamo solo noi che giriamo i video, lo saranno tutti coloro che avranno il piacere di unirsi alla nostra piccola community di BRO-grammatori quindi anche tu! 🤝
Quindi cosa aspetti? Unisciti a noi! Se non sei ancora convinto non ti rimane che cliccare sui nostri video. 🧐
Комментарии
@mattiasindoni4461
@mattiasindoni4461 8 дней назад
Dovevo giusto preparare l'esame di concorrente e distribuita
@CodeBrothers
@CodeBrothers 8 дней назад
@@mattiasindoni4461 Ciao Mattia! Ahaha grandeee sei riuscito a trovare almeno qualche risposta ai tuoi dubbi? 🙌
@mattiasindoni4461
@mattiasindoni4461 8 дней назад
@@CodeBrothers Diciamo che ho le idee più chiare dove andare ad effettuare le operazioni di gestione con wait, notify e notifyall, per garantire quindi la mutua esclusione dei Thread. Prima facevo confusione, ma ora ho compreso che principalmente, nella gestione della concorrenza di una classe, devo andare ad operare nella classe monitor, in modotale da gestirla. Poi, sempre in merito a dubbi che avevo, io mi sento più confident ad utilizzare le synchronized non dell'intero blocco ma solo di una porzione del codice, quindi anche in questo caso ho avuto una piccola conferma. L'unica mia perplessità riguarda ad esempio l'utilizzo dei semafori al posto delle wait e notify, e cercare di non far andare in deadlock/starvation il programma, ma quantomeno di questa parte mi sono tolto un bel dubbio
@CodeBrothers
@CodeBrothers 8 дней назад
@@mattiasindoni4461 siamo veramente felici di sentirtelo dire poiché questa parte è poco conosciuta nonostante sia fondamentale e pian piano sta venendo scoperta ☀️ Giusto a scanso di equivoci, cosa intendi che andrai ad agire sulla classe monitor? (Ogni object possiede wait e notify) Infine magari per darti una dritta i semafori sono per situazioni un po' più generiche e facili da usare, i metodi notify and wait invece per ottenere un controllo a livello molto più basso e sono un po' più complessi 🦀
@willjean3223
@willjean3223 8 дней назад
ciao ,guarda io non commento mai sui social pero cazzo mi sento in dovere di farti i complimenti per come fai sembrare facile cose complicate .
@CodeBrothers
@CodeBrothers 8 дней назад
@@willjean3223 WillJean grazie di cuore perché i commenti come il tuo sono ciò che ci fanno andare avanti! 🙏 Nel tempo abbiamo cercato di migliorare i video il più possibile, facci sapere, se vorrai, che ne pensi degli ultimi. Grazie e buon coding ☀️
@user-cf4dr5bz5z
@user-cf4dr5bz5z 18 дней назад
15:24 Ya like JAZZ
@allanhughes4808
@allanhughes4808 18 дней назад
sarebbe molto utile qualcosa del genere fatta passo-passo così da poterla scrivere e capirla meglio. Davvero complimenti comunque
@CodeBrothers
@CodeBrothers 18 дней назад
@@allanhughes4808 ciao Allan! Abbiamo appena finito di pubblicare una serie completa di 11 episodi dove facciamo vedere ogni singolo passaggio per creare una app completa! Dacci un'occhiata e facci sapere che ne pensi :)
@allanhughes4808
@allanhughes4808 18 дней назад
@@CodeBrothers oh perfetto :) vado subito a controllare
@CodeBrothers
@CodeBrothers 18 дней назад
@@allanhughes4808 grandeee!! Speriamo ti piaccia, facci sapere che ne pensi e se hai dubbi scrivi pure ☀️
@allanhughes4808
@allanhughes4808 18 дней назад
@@CodeBrothers certo! Davvero utili i tuoi video, ti farò sapere una volta terminata la playlist. P.s. bella la reference a dragon ball ahaha
@CodeBrothers
@CodeBrothers 18 дней назад
@@allanhughes4808 grazie mille! Ci sono tantissime ore di lavoro dietro ogni singolo video, siamo felici sì noti 🫂
@Andrea-wp5en
@Andrea-wp5en 23 дня назад
i Threads <3
@Andrea-wp5en
@Andrea-wp5en 23 дня назад
Poi che lavoro con java 8 è n altro discorso 😂
@giuseppemelchiorri7212
@giuseppemelchiorri7212 Месяц назад
bro, mi spieghi perché quando vado su offline resources -2x inserisco il link (che é corretto, tanté che me lo apre e mi fa vedere la foto di Super Mario) clicco sulla rotellina per ricarivare il gioco e non accade niente per favore. Ti prego dammi una spiegazione logica e una soluzione per avere lo stesso lo sfondo di Super Mario😢. Grazie mille.
@CodeBrothers
@CodeBrothers Месяц назад
Ehilà Giuseppe! Incolla questo nella console: document.getElementById('offline-resources-1x').src='chromedino.com/assets/offline-sprite-2x-mario.png';document.getElementById('offline-resources-2x').src='chromedino.com/assets/offline-sprite-2x-mario.png'; Buon divertimento :)
@giuseppemelchiorri7212
@giuseppemelchiorri7212 Месяц назад
non funziona
@CodeBrothers
@CodeBrothers Месяц назад
@@giuseppemelchiorri7212 prova a controllare bene se incolli correttamente tutto o se stai utilizzando una versione di Chrome stabile perché l'ho appena fatto e mi funziona :(
@user-jv3pm5wp8j
@user-jv3pm5wp8j Месяц назад
Il link mi si apre mostrando l'immagine di Super Mario, ma quando lo incollo su offline resources -2x non succede niente, mi spieghi perché? Il link é giusto perché me lo apre!
@admaiora3353
@admaiora3353 Месяц назад
Ciao, seguo con piacere i tuoi video e hai una capacità nel semplificare i concetti davvero assurda. Avrei una domanda da farti, se ho acquisito dimestichezza con Java BASIC, quindi tipizzazione, oop, liste e via dicendo, a cosa devo approcciare per poter arrivare a utilizzare il framework Spring? Il fatto è che il mondo Java è così esteso che non so nemmeno dove mettere le mani, ho provato a vedere un po di JEE, però la versione Enterprise così su due piedi non è che si capisca molto. Ti ringrazio in anticipo. Continua con i tuoi video, che sono fantastici 😉💪🏻
@CodeBrothers
@CodeBrothers Месяц назад
Ciaooo Admaiora!! Il tuo commento ci fa ricordare perchè abbiamo creato il canale, siamo entusiasti di essere riusciti a dare una mano con questa serie un po' più diversa dal solito.. :D Spring è proprio il passo successivo allo studio di Java, infatti anche sul canale arriverà quando finiremo tutte le basi. Intanto come sempre siamo disponibili in privato se hai bisogno di una mano o di un percorso ad hoc ;) Per rispondere alla tua domanda però ti consigliamo prima di formarti per bene su tutta una serie di concetti FONDAMENTALI che fanno da contorno a Spring, altrimenti non ti spiegherai mai tantissime cose quando ci lavorerai e finirai comunque per doverle studiare, quindi tanto vale...farle subito com'è giusto che sia ^_^ Mi spiego con una breve lista di argomenti da studiare un poco che ti permetterà di comprendere Spring e di lavorarci adeguatamente: - servlet container (tomcat) - come funzionano le servlet e i filtri e il servlet context - protocollo http - cos'è JSON e perchè e come si usa - cos'è serializzazione e deserializzazione - networking in generale - interazione base con database - cos'è un ORM - basi di JPA - come funziona l'autenticazione base e basata su cookie - conoscere xml - conoscere maven e il pom.xml - sapere come funzionano i gestori di dipendenze e cosa sono le dipendenze transitive - cos'è il pattern MVC - cos'è la dependency injection - come funzionano i file di properties Facci sapere se è tutto chiaro e come sempre buon coding! :D
@giuseppemelchiorri7212
@giuseppemelchiorri7212 Месяц назад
grazie mille bro
@CodeBrothers
@CodeBrothers Месяц назад
Figurati 😄
@alexdelarge1508
@alexdelarge1508 Месяц назад
utilissimo questo tutorial <3
@CodeBrothers
@CodeBrothers Месяц назад
Grazie per avercelo fatto sapere Alex! Una delle basi questa, spunta spesso nei colloqui
@eigherreight71
@eigherreight71 Месяц назад
Che figata!
@CodeBrothers
@CodeBrothers Месяц назад
Siamo felicissimi ti piaccia ^_^ C'è stato un sacco di lavoro dietro!
@eigherreight71
@eigherreight71 Месяц назад
@@CodeBrothers immagino! Però è super super apprezzato, vi prego continuatelo!
@CodeBrothers
@CodeBrothers Месяц назад
@@eigherreight71 sarà fatto allora! Siamo felici torni utile, oggi abbiamo fatto uscire la quarta puntata ☀️
@alexdelarge1508
@alexdelarge1508 Месяц назад
io preferisco questa modalità, non quella da zero. si risparmia tempo, viene più breve il tutorial e si capisce lo stesso. Comunque, io avrei implementato il metodo isAlreadyPresent facendo un check non solo sul nome, possiamo avere infatti due titoli uguali ma diverse edizioni e pesi diversi, quindi sovrascrivendo public boolean equals(Object obj) e public int hashCode(), sui campi nome e peso, anche per ricordare come vanno fatte queste @Override. Non voglio assolutamente essere pedante, ma negli esami di ingegneria queste cose le vogliono vedere, anzi, sono sicuro che 9 professori su 10 ti fanno notare questo punto, meglio giocare d'anticipo :D
@alexdelarge1508
@alexdelarge1508 Месяц назад
più in profondità praticamente sarebbe dirmi i voltaggi dei transistor sulle memorie ad ogni operazione 😅
@CodeBrothers
@CodeBrothers Месяц назад
XD è il miglior complimento che potessi farci, per queste puntate ci siamo impegnati tantissimo, ma tanto davvero!
@ngald
@ngald Месяц назад
sei bravo e simpatico. Se posso dare un consiglio per passare dall'ottimo all'eccellente servirebbe un pò più di sintesi, a mio parere.
@CodeBrothers
@CodeBrothers Месяц назад
Ciao ngald! Grazie mille del commento 😄 Pian piano questa cosa l'abbiamo capita e i video attuali sono tanto più corti e sintetizzati, con audio migliore effetti e musiche diverse. Ci piacerebbe molto un tuo parere su qualcuno degli ultimi pubblicati se hai tempo, grazie in ogni caso!
@alexdelarge1508
@alexdelarge1508 Месяц назад
la nuova versione free (che è basata sulla 4) dice: Sì, puoi convertire l'implementazione anonima del Consumer in una lambda senza problemi. Tuttavia, devi fare attenzione al contesto del synchronized, poiché l'uso di this cambierà nel contesto delle lambda. Ecco come fare: public void printConsumer() { consumePizza(o -> { synchronized (printConsumer.this) { System.out.println("Mi sto sincronizzando!"); } }); } In questo caso, usi printConsumer.this per mantenere il riferimento corretto all'oggetto esterno all'interno del blocco synchronized.
@alexdelarge1508
@alexdelarge1508 Месяц назад
ciao Michele, riguardo all'esempio iniziale e finale, ma come è possibile che sposta r1 = y su x = 1, se hai detto che sono in relazione di hb, e quindi devono avvenire secondo il po??
@CodeBrothers
@CodeBrothers Месяц назад
Ciao Alex! Bella domanda e complimenti per aver visto anche questo argomento ^_^ come ti è sembrato? Ci piacerebbe tanto un tuo feedback giunto a questo punto del percorso :D Per rispondere alla tua domanda invece: è vero che son in relazione di HB e sono anche in PO, tuttavia io posso leggere anche una qualunque write NON in relazione di HB. Quindi posso sia leggere l'1 che lo 0. Proprio perchè posso leggere ciò che voglio per memory model, al compilatore è permesso di riordinare perchè tanto all'interno di ogni singolo Thread, quei due statement continuerebbero a dare lo stesso comportamento e continuerebbero a sembrare scritti secondo il PO.
@alexdelarge1508
@alexdelarge1508 Месяц назад
@@CodeBrothers nulla da dire su come avete fatto il video, non si può cercare di spiegarlo meglio. L'argomento va un po' digerito prima. Per questo la mia domanda. Ma, quindi, la relazione di hb non è un vincolo a priori? Cioè, se leggo un dato valore, so che c'è quel vincolo, altrimenti no? Riformulo: come faccio a capire che c'è un vincolo di hb? lo devo sapere come dato, o lo devo inferire dall'esecuzione? me lo deve dire qualcuno? dove? quando? XD
@CodeBrothers
@CodeBrothers Месяц назад
​@@alexdelarge1508 eheh, capisco perfettamente il tuo dubbio ed è proprio per questo che l'argomento è così complesso. Il termine "happens before" poi non aiuta a nostro avviso 😃Per capire questo esempio concentrati sul fatto che le due istruzioni di cui stai parlando (x=1 e r1=y) sono sì in HB ma quello che dice la relazione di HB è che il programma deve comportarsi per l'osservatore COME SE le due istruzioni si fossero eseguite esattamente nell'ordine definito dalla relazione di HB. Il "come se" non l'abbiamo messo in CAPS per caso, vogliamo proprio sottolineare il fatto che non è importante che si eseguano veramente in quell'ordine, ma che sembri che sia successo. Queste 2 istruzioni ( x=1 e r1=y) non hanno ALCUNA relazione di HB nei confronti delle altre, quindi non è importante che si comportino in un certo ordine nei confronti di istruzioni presenti in altri thread, l'unica relazione che esiste è solo tra quelle due istruzioni. Quindi se isoli il problema a solo quelle 2 istruzioni che cosa ti cambia come osservatore esterno se dietro le quinte il processore esegue: - r1=y E POI x=1 oppure - x=1 E POI r1=y niente, perchè dal punto di vista di queste due istruzioni, nessuna impatta l'altra. Quindi qualsiasi sia l'ordine di esecuzione reale dietro le quinte tu puoi assumere che si siano sempre eseguite secondo l'ordine di HB (anche se non è vero), per il semplice fatto che non è dimostrabile il contrario. Tu potresti dire che però vedendo i risultati delle interazioni con l'altro thread noti che l'ordine di esecuzione non è quello stabilito dall'HB, però in questo caso questo aspetto non conta, perché con le altre azioni non hai alcuna relazione, quindi è normale che non puoi farci assunzioni. Proprio perché non puoi fare assunzioni rispetto alle esecuzioni delle altre operazioni la relazione di HB specifica che una lettura potrebbe leggere O l'ultima scrittura in HB rispetto a lei OPPURE una scrittura totalmente casuale che non ha relazioni di HB. Quando nel thread 1 (quello a sinistra) leggi il valore di Y potresti leggere lo zero oppure il valore 1, proprio perché il valore 1 non ha relazioni di HB con queste due istruzioni, quindi potrebbe essere stato scritto in memoria oppure no. Quando gli sviluppatori di Java hanno scritto il compilatore e la JVM si sono solo accertati di rispettare le regole descritte nel memory model, anche se delle volte possono sembrare controintuitive 😅 e la parte difficile per loro è stato far rispettare queste regole per ogni architettura hardware che ha le sue peculiarità... quindi su architetture diverse hai motivi diversi per il quale potresti leggere 1 o 0, ma indipendentemente dai motivi la cosa importante è che quello che capita sia coerente con il JMM. E' venuto un papiro ma spero sia più chiaro ora ahaha
@CodeBrothers
@CodeBrothers Месяц назад
@alexdelarge1508 p.s. riguardo al feedback di cui parlavamo prima, lo intendavamo riguardo a tutto il corso fino a questo video (visto che sei uno dei pochi eletti che ha seguito ogni singola lezione 🤣), non specifico su questo video. È abbastanza difficile raccogliere feedback, quindi volevamo cogliere l'occasione per chiederti cosa ti è piaciuto/non ti è piaciuto del corso fino a questo punto e cosa miglioreresti. Quando hai un attimo di tempo ci farebbe piacere se ci mandi una tua opinione via mail a ytcodebrothers@gmail.com Ciao e alla prossima! 👋
@alexdelarge1508
@alexdelarge1508 Месяц назад
@@CodeBrothers grazie intanto del papiro che mi ha finalmente chiarito il concetto. mi mancano da vedere pochi altri video e poi, senz'altro, vi manderò un mio parere
@luigidechiara5238
@luigidechiara5238 Месяц назад
Non hai bisogno dell'annotazione @Autowired nella classe service?
@CodeBrothers
@CodeBrothers Месяц назад
Ciao Luigi! Se intendi nella mia ItemFacade, mi inietto il repository mettendolo nel costruttore e non mi serve quindi fare field injection con @Autowired che tra l'altro è una brutta pratica, ecco perché in questa serie non ne vedrai nemmeno uno 🖖😎
@luigidechiara5238
@luigidechiara5238 Месяц назад
Capito, grazie mille.
@CodeBrothers
@CodeBrothers Месяц назад
@@luigidechiara5238 grazie a te per il commento e ci vediamo domani per la continuazione!
@alexdelarge1508
@alexdelarge1508 Месяц назад
bellissima la zoommata da java ad assembly :D
@CodeBrothers
@CodeBrothers Месяц назад
Dobbiamo anche stupire 🤣
@alexdelarge1508
@alexdelarge1508 Месяц назад
molto interessante, grazie ragazzi
@CodeBrothers
@CodeBrothers Месяц назад
Ciao Alex, già operativo vedo! XD Grazie a te, questa puntata è stata assai difficile da realizzare😆
@alexdelarge1508
@alexdelarge1508 Месяц назад
troppo veloce brooo😅😅😅😵‍💫
@CodeBrothers
@CodeBrothers Месяц назад
Davvero? Quale parte dici? :c
@alexdelarge1508
@alexdelarge1508 Месяц назад
@@CodeBrothers tutto xD non ho studiato i thread, quindi questo flusso di informazioni mi ha stordito. L'ho visto due volte e, la seconda visione, ha chiarito tutto :D
@CodeBrothers
@CodeBrothers Месяц назад
@@alexdelarge1508 Mhh capisco, grazie intanto del feedback! Giusto per capire, avevi visto anche le altre puntate sui thread? Perchè davano un po' di contesto.. Comunque dai se vedendola due volte hai capito poi tutto, mezz'ora per questo argomento non è male xD Questo argomento purtroppo è INFINITO, se non premevo un po' l'acceleratore avremmo finito col rimanerci mesi (cosa che già sta succedendo infatti.. x_x )
@alexdelarge1508
@alexdelarge1508 Месяц назад
Argomento complesso ma spiegato, come sempre, molto bene. A mio avviso bisognava citare l'uso delle bounded wildcards legate ai tipi parametrici delle interfacce Comparable e Comparator, che si vedono molto spesso e magari uno non capisce perché sia meglio scrivere Comparator<? super T> invece di <T> e basta (colgo l'occasione per suggerirvi di usarlo e spiegarlo in qualche esercizio che svolgete). In realtà, dopo questo tutorial, si è in grado di capire le motivazioni, ma magari sarebbe stato utile a più di qualcuno trattare per bene questa specifica situazione, perché sono domande che i prof fanno spesso. Non è una critica, anzi, in 40 minuti avete spiegato cose che richiedono ore per essere studiate. Oltre l'umanamente possibile :D
@CodeBrothers
@CodeBrothers Месяц назад
Grazie come sempre dei commenti utili Alex! Essendo autodidatta in informatica purtroppo non ho idea di cosa chiedano i Prof però se mi dai qualche spunto posso provare a vedere di dedicare un video a tal proposito ^_^ D'altronde il nostro obiettivo è quello di aiutare più possibile con problemi reali quindi ben venga! ps: non farti problemi, le critiche se costruttive sono assolutamente ben accette! pps: complimenti infiniti per esserti visto questo mega video e la costanza soprattutto o_ò credo che da quando abbiamo aperto il canale sei l'unico che si sta vedendo ogni singolo video xD
@alexdelarge1508
@alexdelarge1508 Месяц назад
​@@CodeBrothers Come sempre grazie a voi. Quello che mi piacerebbe fosse approfondito (anche senza un video dedicato, ma magari in un video di svolgimento di un esercizio o esame) è l'ereditarietà dei metodi e quindi, come dicevo prima, il perché sia bene usare <? super T> quando si definisce un tipo che deve essere comparato. Ad esempio: Ho la classe "Bottiglia", e la sottoclasse "BottigliaDiVino" che estende "Bottiglia". La classe Bottiglia ha il field "capacity" e voglio che le bottiglie siano ordinate in base alla loro capacità. Supponiamo che Bottiglia realizzi l'interfaccia Comparable<Bottiglia>. Se scrivo un metodo sort del tipo: public static <T extends Comparable<T>> T sort(List<T> bottles), avrei un problema: BottigliaDiVino realizzerà anch'essa Comparable<Bottiglia>, e NON Comparable<BottigliaDiVino>. Quindi, se si vuole usare il metodo sort anche con una lista di tipo BottigliaDiVino, allora il tipo che specifica il parametro dell'interfaccia Comparable deve essere qualsiasi supertipo del tipo dell'elemento dell'array: public static <T extends Comparable<? super T>> T sort(List<T> bottles). Alla fine l'ho spiegato io xD, però voi siete molto più bravi nella spiegazione e nell'aggiungere esempi e casi d'uso e nello snocciolare bene le questioni, per questo vi chiedo, quando e se ne avrete il tempo, di approfondire questo e di mostrarlo in un video :) Grazie!
@alexdelarge1508
@alexdelarge1508 2 месяца назад
ciao Michele, a 17:35 il compilatore ti dice che hai due metodi con la stessa firma (vogliono Integer) in Lontra, ma, quando vai nella classe Lontra (17:45), solo V estende Integer. È un errore nel montaggio? Non dovresti avere un metodo che vuole Object e uno che vuole Integer?
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Alex! No nessun taglio o errore nel montaggio tranquillo xD Poichè ho una Lontra<Integer, Integer> la mia K è un Integer e quindi A COMPILE-TIME Java, il compilatore e anche l'IDE quindi si aspettano di ricevere ciò che effettivamente hai scritto come argomento (e quindi Integer). Capisco il tuo dubbio perchè a RUNTIME in realtà avrei un Object e quindi avrei due setter con firme diverse, intendevi questo giusto? 🥸 ps: giusto per completezza anche se scrivo Lontra<Integer, Integer> questa verrà compilata con un metodo che accetterà Object e uno Integer. L'errore che vedi è una cosa a compile-time relativa al concetto di early-binding. Insomma non sa chi chiamare visto che appaiono uguali xD
@alexdelarge1508
@alexdelarge1508 Месяц назад
@@CodeBrothers Capisco, chiarissimo, grazie tante :)
@razeft
@razeft 2 месяца назад
oh ottimo, é sempre difficile trovare video tutorial fatti bene usando queste due tecnologie, spero in un ottima serie per capirle al meglio
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Razeft! Farò del mio meglio 😄 Ovviamente non ci potremo dilungare troppo su ogni concetto poiché diciamo che è più una serie "pratica" che "teorica" come lo sono tutti gli altri video ma tu in caso se hai domande non esitare! Intanto domani piccolo spoiler, uscirà già la continuazione su come implementare il Mapper utilizzando Mapstruct ;)
@razeft
@razeft 2 месяца назад
@@CodeBrothers grazie mille, comunque non è un problema sono una persona che apprende molto di più facendo le cose, quindi anche se molto pratica come serie non è un problema
@CodeBrothers
@CodeBrothers 2 месяца назад
@@razeft ci fa un sacco piacere sentirtelo dire! Perché è la prima serie in cui non spieghiamo ogni dettaglio ma ci concentriamo più sul mostrare, così da dare una traccia a chi con queste cose deve effettivamente lavorarci e non sa proprio da dove partire 💪
@alexdelarge1508
@alexdelarge1508 2 месяца назад
27:00 in questo caso ZERO è una costante, non una variabile, ed è buona pratica dichiararle in maiuscolo
@CodeBrothers
@CodeBrothers 2 месяца назад
Diciamo che la questione è un po' controversa, a me piace metterla in maiuscolo però in tanti, quando si tratta di variabili locali (si chiama variabile anche se il valore non cambia in Java, poi va bene che lo raggiungi con static final ma è un altro discorso..non esiste il tipo "const") sostengono che si metta in camel case con il final.. punti di vista 🖖
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers io comunque trovo sensato questo stile. Nel libro di Horstmann si legge: "Molti programmatori usano per le costanti (cioè per le variabili final) nomi con tutte le lettere maiuscole, come NICKEL_VALUE, perché così si distinguono facilmente dalle variabili vere e proprie, i cui nomi hanno lettere in maggior parte minuscole. Anche in questo libro useremo questa convenzione, ma è soltanto un buono stile di programmazione, non un requisito del linguaggio Java: il compilatore non protesterà se date a una variabile final un nome con lettere minuscole."
@CodeBrothers
@CodeBrothers 2 месяца назад
@@alexdelarge1508 Team Horstmann presente! 🙌 Purtroppo non ci sono regole per ste cose anche se a mio avviso dovrebbero, migliorerebbe un sacco la leggibilità
@alexdelarge1508
@alexdelarge1508 2 месяца назад
16:40 Giusto perché è la correzione di un esame universitario: che succede se l'utente inserisce solo uno 0? Nel System out rimane una divisione per 0... Il prof ci tirerebbe le orecchie :D
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Alex! Grazie per l'appunto, effettivamente si finirebbe in ArithmeticException!
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers pensavo anch'io che lanciasse un'eccezione, invece il programma si esegue normalmente, solo che mi stampa: "Media dei quadrati: NaN". Se avessimo usato degli int ci sarebbe stata l'eccezione, ma con double si produce il valore speciale "Not a Number" o "Infinity" se il numeratore è valorizzato. Giusto per completezza :) Grazie mille ancora per questi video. Quando una lezione sugli stream che tanto utilizzi? :D
@CodeBrothers
@CodeBrothers 2 месяца назад
@@alexdelarge1508 ah ma che figata! Così a occhio dal cellulare pensavo quella eccezione 🤣 evidentemente a suo tempo ci avevo pensato e l'avevo provata, comunque in ogni caso guardandolo adesso avrei messo un check nel caso si dividesse per zero così da dare almeno un risultato più normale e "parlante" diciamo :')
@CodeBrothers
@CodeBrothers 2 месяца назад
@@alexdelarge1508 comunque per rispondere all'altra domanda, vorremmo cominciare tutta una serie sui metodi di stream, giusto il tempo di finire queste ultimissime cose sui Threads, far uscire questa miniserie di Spring ed Angular in contemporanea e poi credo proprio partiremo con quelli 😎
@uovolabel
@uovolabel 2 месяца назад
ciao! ma sai se Docker si può installare su un hard disk esterno?
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Uovo! 🥚 Certamente, puoi mettere sia docker che i tuoi volumi su un disco esterno 💪😎
@uovolabel
@uovolabel 2 месяца назад
@@CodeBrothers carissimo ma per caso sapresti come? perchè io non riesco xD, scusa se ti do noia
@CodeBrothers
@CodeBrothers 2 месяца назад
@@uovolabel xD ma va tranquillo! Di cosa avresti bisogno di preciso preciso? Prova a spiegarci e vediamo cosa possiamo fare :)
@SamSung-yp7uw
@SamSung-yp7uw 2 месяца назад
MOOOLTO BENE !!! Fai ancora cosi BRO!
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao SamSung!! Siamo felici che questo format sia piaciuto anche perchè non è stato easy, vedremo di far uscire in settimana almeno una piccola continuazione allora :)
@nicobill95
@nicobill95 2 месяца назад
Super interessante! Proprio in questi giorni sono entrato in un'azienda e come formazione sto creando un'app da 0 (solo BE) utilizzando esattamente questi concetti. Sto utilizzando anche Docker, Liquibase e Mapstruct, quindi sará interessantissimo vedere nello specifico come queste cose funzionino, anche perché arrivo da soli due corsi di programmazione e tante cose (come Mapstruct) non le ho mai viste e quindi le sto utilizzando un po' al buio. Comunque io ed un mio collega abbiamo delle task da eseguire, utilizzare Git e simuleremo proprio un reale ambiente di lavoro! Questa serie di video arriva proprio con un tempismo perfetto :')
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Nico!! Ma che figata siamo gasati anche noi per te adesso xD Intanto complimenti per la tua nuova posizione, non è affatto facile ritrovarsi già immersi in un mare di concetti arrivando da tanta teoria.. Magari vediamo di far uscire già venerdì la seconda parte in modo tale da poterti venire incontro con Mapstruct almeno ^_^ Facci sapere come procede e se ti trovi con i concetti spiegati, nel caso facci pure domande nei commenti così vedremo di indirizzarti al meglio 😄 In bocca al lupo e buon coding intanto!
@nicobill95
@nicobill95 2 месяца назад
@@CodeBrothers assolutamente! Grazie mille per la disponibilità ragazzi, siete i migliori a spiegare in Italia!
@CodeBrothers
@CodeBrothers 2 месяца назад
@@nicobill95 Stiamo dando il 100% per portare un po' questa materia su YT Italia visto che manca, grazie per il tuo incoraggiamento Nico! ❤️💪😎
@BiagioRosarioGreco
@BiagioRosarioGreco 2 месяца назад
Ultimissimo commento giuro! Io odio un po' postman perché è un'app ibrida creata con react quindi grande 100mb .. esistono valide alternative tra le quali dei plugin del browser.. andando su Chrome web store e cercando appunto Portman come secondo risultato della ricerca esce Tab postman.. penso si una validissima alternativa.. poi non è l'unica estensione.. addirittura esiste anche postwoman .. che però è localizzata temo solo in cinese ed io non col cinese ho qualche problemino 😂
@luigi6639
@luigi6639 2 месяца назад
Ragazzi gran bella idea! Unico appunto, secondo me ci sono alcuni argomenti di base che se spiegati così velocemente non vengono effettivamente capiti da qualcuno che non ha le basi, ma semplicemente copiate e incollate. Ci vorrebbe forse una serie di video in cui viene affrontato git, database, struttura dei config ecc, e spiegare più nello specifico determinati concetti. Personalmente ho le basi ma comunque la parte di configurazione di un progetto se spiegata così velocemente non mi lascia qualcosa, non mi sento di aver appreso, ma solo ricopiato
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Luigi e ben risentito!! Prima di tutto vogliamo rassicurarti: spiegheremo passo passo anche tutti gli argomenti da te citati ;) Per il resto capisco pienamente, era anche il nostro pensiero: come detto nel video infatti stiamo cercando un po' di prendere le misure e abbiamo bisogno anche di sentire qualcuno nei commenti poiché siamo 2700+ iscritti e tutti hanno preferenze ed esigenze diverse... Accontentare ogni CodeBrother non credo sarà possibile, abbiamo quindi deciso di dedicare questa serie solo ad una fascia ben precisa: tutti coloro che ci chiedevano a gran voce di costruire un'app completa da zero per vedere il procedimento ed essere indirizzati correttamente. Avevamo già fatto un video con Spring ed Angular ma non era costruito da zero passo passo. Questo video è quindi per tutti coloro che riescono già ad essere un minimo autonomi, cercando online, come faresti un po' a lavoro, le cose che non sono ancora totalmente chiare, per poi procedere avendo comunque una guida da seguire :) Per fare ciò che dici, che è coretto, avremmo avuto bisogno di ritardare di quasi un altro anno l'uscita di un video del genere poiché con un video a settimana, spiegare tutte quelle cose prenderebbe almeno 40 video e questo avrebbe creato malcontento per tutta un'altra fascia di CodeBrothers che avevano necessità.
@luigi6639
@luigi6639 2 месяца назад
@@CodeBrothers capisco tutto il discorso. Alla fine il mio commento viene dal fatto che sono un fun dei vostri video classici da 30/40 Min con cui ho fatto il salto di qualità in Java. Seguirò comunque questi video con interesse ❤️
@CodeBrothers
@CodeBrothers 2 месяца назад
@@luigi6639 Grazie Luigi ☀️ in realtà pure noi siamo fan dei video da mezz'ora, secondo noi è il minimo per parlare di un qualunque concetto solo che purtroppo le statistiche ci dicono che tutti guardano quei video appena 5 minuti...quindi ci sembra una faticaccia che per ora non viene notata.. ad esempio il video del Java Memory model o degli optional.. :(
@BiagioRosarioGreco
@BiagioRosarioGreco 2 месяца назад
Spero mi perdonerete ma questo video visto che lo cercavo ho mille domande.. allora creando la tabella, perché la chiave primaria non è auto increment? Inoltre.. creando il db postgresql non poi attraverso orm/jpa creare una classe entity? (Ok in effetti state usando orm, potevate inserire anche lombok ed evitare di scrivere un po' di cose)
@CodeBrothers
@CodeBrothers 2 месяца назад
Puoi farci tutte le domande che desideri, siamo qui per questo Biagio! ^_^ Per l'auto increment ti lascio questo link molto ben fatto: thorben-janssen.com/jpa-generate-primary-keys/ e sono sicuro che troverai la risposta La tabella hai ragione, poteva essere creata tranquillamente attraverso Hibernate però volevamo mostrare anche un po' di scrittura SQL con la ddl opportuna :) Su Lombok c'è una grande discussione da sempre, personalmente preferiamo non utilizzarlo per vari motivi, immagino sia una preferenza però.. Anche per i Mapper ci sono un po' le stesse controversie xD Alla fine dei conti l'importante è che tutto funzioni come ti aspetti e che l'app sia solida e leggibile
@BiagioRosarioGreco
@BiagioRosarioGreco 2 месяца назад
Ora continuo a vere il video ma se dentro c'è pure un login con jwt raga mi salvate la vita🎉
@CodeBrothers
@CodeBrothers 2 месяца назад
L'autenticazione con JWT sarebbe molto interessante, eravamo indecisi se metterla o tenerla per un video proprio a parte.. magari se avremo un po' di tempo cerchiamo di dedicartela includendola magari proprio in questa webapp ;)
@BiagioRosarioGreco
@BiagioRosarioGreco 2 месяца назад
Cari i miei fratelli sto video mi servirà tantissimo lo rivedrò più e più volte promesso.. intanto.. ma per disabilitare cors non devo scrivere due righe in Java.. se funziona così ho svoltato😮
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Biagio! Piacere di risentirti, siamo felicissimi che ti torni utile, abbiamo messo un po' di turbo temporaneamente :D Per il discorso CORS non ci piace abilitarlo se ti riferisci al classico modo estendendo da "WebSecurityConfigurerAdapter", ti esponi a dei potenziali rischi per cui non ne vale la pena, meglio avere il FE che proxa direttamente :)
@BiagioRosarioGreco
@BiagioRosarioGreco 2 месяца назад
@@CodeBrothers sembra interessante ma funziona col file JSON solo grazie alla dockerizzazione o cosa.. è un passaggio molto interessante che vorrei capire bene, anche perché al posto di angular posso metterci di tutto
@alexdelarge1508
@alexdelarge1508 2 месяца назад
Parlando di efficienza, l'algoritmo dei numeri primi cicla sugli stessi numeri (2 ... sqrt(n)) ad ogni valore contenuto nell'array, quindi è un O(n^2), non buono. Era meglio individuare il valore massimo, e rimuovere tutti i multipli di 2 ... sqrt(max), salvando i rimanenti in un array di primi (quindi usando Eratostene): for (int i = 2; i <= Math.sqrt(n); i++) { for (int j = 2; i * j <= n; j++) { values.remove(i * j); } } Ovviamente non possiamo usare remove sugli array, ma si risolve facilmente cambiando collection
@CodeBrothers
@CodeBrothers 2 месяца назад
Questi sono i commenti che ci piacciono, grande Alex! Hai forse una laurea in ingegneria? 😆 Ps: Non ricordo in quale video ma Eratostene salta fuori a una certa
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers Grazie :) mi manca solo un esame (a parte OOP che devo dare il mese prossimo)
@CodeBrothers
@CodeBrothers 2 месяца назад
@@alexdelarge1508 Complimentissimi! Si nota che ti stai applicando con serietà, questi concetti poi ti torneranno un sacco utili 😉
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers grazie :) e mi sto applicando anche grazie a voi
@CodeBrothers
@CodeBrothers 2 месяца назад
@@alexdelarge1508 Felici di aver contribuito 💪😎
@alexdelarge1508
@alexdelarge1508 2 месяца назад
5:56 per la precisione fa n(n+1)/2, se no Gauss si arrabbia :D ma ovviamente per la stima dell'O-grande non cambia niente
@CodeBrothers
@CodeBrothers 2 месяца назад
Grazie per l'appunto Alex! XD meglio calmare i bollenti spiriti
@alexdelarge1508
@alexdelarge1508 2 месяца назад
Piccola nota per chi non conosce i varargs: è possibile dichiarare metodi che ricevono un numero di parametri variabile, dichiarandoli, ad esempio, come: public void metodo(String... words) o public void metodo(int... values) I parametri words e values, in questi casi, sono di fatti degli array di tipo String[] e int[] contenenti tutti i valori effettivamente passati ai metodi.
@CodeBrothers
@CodeBrothers 2 месяца назад
Grazie come sempre per aggiungere del valore alla community Alex! ❤️
@alexdelarge1508
@alexdelarge1508 2 месяца назад
5:35 concettualmente è più appropriato pensare al transistor come ad una valvola, perché apre o chiude un passaggio di qualcosa che non è lei a erogare, mentre l'amplificatore lavora su ciò che gli viene dato in input, sembra una sottigliezza ma secondo me chiarisce molto il concetto di cosa faccia un transistor
@CodeBrothers
@CodeBrothers 2 месяца назад
Direi ottima analogia!
@alexdelarge1508
@alexdelarge1508 2 месяца назад
public static String getMiddle(String word) { if (word.length() <= 2) { return word; } return getMiddle(word.substring(1, word.length() - 1)); } e non mi devo preoccupare se la lunghezza è pari o dispari (almeno, non esplicitamente) :D
@CodeBrothers
@CodeBrothers 2 месяца назад
Bella idea Alex, non sono abituato a vedere soluzioni ricorsive in giro, specialmente in Java (per eventuali problemi di memoria) però in sto caso ci sta! ^_^
@alexdelarge1508
@alexdelarge1508 2 месяца назад
12:30 ciao Michele, ma scusa, quindi quello che succede non è che, semplicemente, nella lambda viene prima calcolato il valore di value+zampeDaSommare e questo valore finale viene passato al metodo faiSomma?
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Alex! È proprio questo il fatto, io fino a quel momento ho solo DEFINITO non ho eseguito nulla 😉 infatti faccio proprio vedere che è come se definissi una classe anonima, ma mica ne sto invocando il metodo. Il valore definito nella lambda viene catturato e verrà eseguito soltanto dopo, quando effettivamente chiamerò somma, quindi a livello di frames sullo stack prima ci sarà il main, poi faiSomma e infine somma
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers chiarissimo. grazie!
@BiagioRosarioGreco
@BiagioRosarioGreco 2 месяца назад
Mi sento un po' confuso.. all'inizio del video hai proposto postgresql e nel codice della connection c'è il driver a mysql e la connessione a mysql😮.. si in effetti cambiano solo due righe di codice Avete usato maven?
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Biagio! Hai ragione xD troppo abituato a usare postgres ovunque! Comunque sì abbiamo usato Maven
@BiagioRosarioGreco
@BiagioRosarioGreco 2 месяца назад
@@CodeBrothers dalle credenziali username e password settate come root root deduco che state lavorando con mamp su MacOS e non xampp su Windows, vero?
@CodeBrothers
@CodeBrothers 2 месяца назад
@@BiagioRosarioGreco in realtà è un semplice db con mysql su Windows senza altri programmi o cose intermedie :)
@CodeBrothers
@CodeBrothers 2 месяца назад
@@BiagioRosarioGreco In realtà nessuno dei due, solo un semplice DB creato con Mysql su windows :)
@fabiosarra9776
@fabiosarra9776 2 месяца назад
Grazie mille brothers 😍😍
@CodeBrothers
@CodeBrothers 2 месяца назад
Di niente Fabio! Felici di aver dato una mano ^_^
@verov5
@verov5 2 месяца назад
Ciao @CodeBrothers, devo dire che fate dei bellissimi video e molto interessanti. Sono molto di aiuto. Volevo chiedere se potete fare dei video di come si può sviluppare il modo di ragionare per imparare a programmare, il modo in cui uno può creare algoritmi o come spacchettare in piccoli problemi quelli più grossi insomma, in poche parole come riuscire a sviluppare il modo di pensare, analizzare per riuscire acquisire il pensiero di strategia risolutiva, problem solving o meglio il pensiero computazionale. Grazie mille di tutto spero non sia una scocciatura 😅 e se ci riuscite. 😊
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Veronica, grazie per l'incoraggiamento ❤️ vedremo di continuare così! Prossimamente vedremo di dedicarti un video su come approcciare i problemi allora, ti dico subito che ovviamente buona parte è l'esperienza però comunque ci sono piccoli accorgimenti che si possono adottare per avere la vita più facile 😉
@verov5
@verov5 2 месяца назад
@@CodeBrothers grazie mille 😊 per la vostra disponibilità siete molto gentile 😊
@CodeBrothers
@CodeBrothers 2 месяца назад
@@verov5 figurati siamo qui per questo!
@verov5
@verov5 2 месяца назад
@@CodeBrothers ❤️
@alexdelarge1508
@alexdelarge1508 2 месяца назад
perché le classi Ricezione e Visualizzazione sono statiche? Più in generale, quando creo una nested class, quale/i domanda/e devo pormi per capire se farla static?
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Alex, diciamo per semplicità in questo esempio, non era obbligatorio ecco :) Una inner class la fai statica in generale per organizzare meglio il tuo codice quando dipende da quella outer, solo che non così tanto da doverne fare una istanza. Inoltre puoi risparmiare memoria facendola statica (cosa di cui abbiamo già parlato eheh) inoltre puoi migliorare l'encapsulation dato che non potrà accedere ai suoi instance field (come detto nell'altra puntata). ;)
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers sulla memoria e sull'encapsulation è chiaro, ma il primo punto non tanto... :'D
@CodeBrothers
@CodeBrothers 2 месяца назад
@@alexdelarge1508 per esempio se hai una classe Banca può avere senso scrivere una inner class CartaDiCredito così che solo banca possa accedere ai suoi metodi come "setCardLimit" e logicamente solo la banca può metterla ✌️😎
@alexdelarge1508
@alexdelarge1508 2 месяца назад
Alla parte del cane demone ho detto: "we rallenta cap'e provola" xD Come fa il thread principale a chiudersi se siamo nel for del thread principale? i thread non li conosco, mi sarà chiaro più avanti?
@CodeBrothers
@CodeBrothers 2 месяца назад
Ahahah esattamente dopo affronteremo tutto il capitolo dei Thread che sta già duranto da MESI ti dico solo questo.. se vuoi puoi darci una sbirciata tanto è totalmente scollegato come argomento ;) Comunque la motivazione è proprio quella detta: Alla JVM non interessa affatto dei Demoni! xD
@alexdelarge1508
@alexdelarge1508 2 месяца назад
14:13 ma se lo stack era pieno, come ha fatto a fare tutte quelle altre chiamate? ha flushato lo stack? p.s.: peccato che a 16:15 hai scritto 1000 invece di 10000, forse avremmo potuto vedere lo stack? :'D
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Alex! Come sempre ottime domande, tra l'altro grande che ti stai vedendo tutto quanto seguendo la scaletta, come ti ci stai trovando? Questi non erano argmenti semplici! Per risponderti intanto: sono riuscito a fare tutte le altre chiamate perchè appena sono esploso ho cominciato a rimuovere ogni frame dentro il mio stack cercando qualcuno che potesse gestire l'eccezione, e una volta arrivano al 2500-esimo frame ho trovato finalmente il catch. Infine dato che avevo liberato un bel po' di frame ho potuto continuare finchè non sono esploso di nuovo :) Ahaha è vero ecco perchè! Beh sì forse se scrivevo 10k l'avremmo potuto vedere :')
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers ah ecco, giustamente, essendo uno stack, mi estrae i frame quando "risale la scaletta". Per risponderti: mi sto trovando benissimo. Ho studiato per l'esame di OOP da un libro (Big Java Early Objects, di Horstmann) e sto usando tutti i vostri video come ripasso, anche se in realtà, più che un ripasso, sto arricchendo moltissimo le mie conoscenze di Java, quindi grazie, sia per i video, sia per l'attenzione che dedicate a noi commentatori :D
@CodeBrothers
@CodeBrothers 2 месяца назад
@@alexdelarge1508 ti sei trovato bene con quel libro? Pensi che ai nostri video manchi qualcosa per passare gli esami o capire la materia? Ci piacerebbe il tuo parere visto che hai già passato un esamone e siamo alla costante ricerca di come migliorare! Comunque non siete commentatori, una volta iscritti siamo tutti Codebrothers o BRO-grammatori ✌️😎 In caso se ti va abbiamo anche un gruppo Discord!
@alexdelarge1508
@alexdelarge1508 2 месяца назад
​@@CodeBrothers il libro è spiegato bene ed è di facile lettura e comprensione, specialmente per chi si avvicina per la prima volta a Java. Bisogna avere qualche background di matematica però, ma niente di che. Il vostro corso invece mi sembra più adatto a chi già conosce l'argomento, e vuole approfondire e capire bene i concetti. Non è un corso per newbie, secondo me. Senza la lettura di quel libro avrei faticato a starvi dietro :D Cosa manca ai vostri video? Considerando la piattaforma, che non permette scambio di codice, direi niente. Purtroppo bisogna scrivere e scrivere codice e sporcarsi le mani per avere padronanza, altrimenti i concetti, anche se spiegati bene, si dimenticano, ma su youtube come fate a coinvolgere attivamente chi vi segue? cioè, o si guarda il video, o si apre l'IDE... Voi state riuscendo a spiegare concetti difficili con leggerezza, e il fatto stesso che siete alla costante ricerca di come migliorare, alla fine porterà miglioramenti. Perciò ragazzi, nient'altro da aggiungere, continuate così!
@CodeBrothers
@CodeBrothers 2 месяца назад
@@alexdelarge1508 grazie Alex! Ci ha fatto un sacco piacere che ti sei preso tempo per darci il tuo punto di vista, cercheremo di continuare così allora 😄 Hai forse visto i video fin da principio? Perché abbiamo approcciato Java fin dall'installazione dell'IDE e pensavamo che chiunque vi si potesse approcciare e ci faceva un poco pensare che invece l'impressione sia un'altra. D'altronde il canale è nato proprio per aiutare chi non potesse permettersi l'università... Ovviamente per seguire tutto serve anche esercitarsi dici bene 🫂
@alexdelarge1508
@alexdelarge1508 2 месяца назад
Secondo me va anche detto che non è una good practice lanciare eccezioni unchecked: se da qualche parte c'è il rischio di IndexOutOfBounds, forse dovrei rivedere il codice piuttosto che tirare un'eccezione
@CodeBrothers
@CodeBrothers 2 месяца назад
Ti riferisci a una parte precisa del video o intendi in generale? xD
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers dicevo in generale :D se la colpa delle unchecked exceptions è del programmatore, allora forse il programmatore dovrebbe rivedere e migliorare il codice dove c'è il rischio di dividere per zero, includendo dei controlli su quella variabile, e così per gli index e tutto il resto di unchecked
@alexdelarge1508
@alexdelarge1508 2 месяца назад
Piccola curiosità sulle eccezioni: L'incidente del razzo Ariane L’Agenzia Spaziale Europea (European Space Agency, ESA), la controparte europea della NASA, sviluppò un modello di missile denominato Ariane, usato più volte con successo per lanciare satelliti e per svolgere esperimenti scientifici nello spazio. Tuttavia, quando una nuova versione. Ariane 5, fu lanciata il 4 giugno 1996 dal sito di lancio dell’ESA a Kourou, nella Guyana Francese, il missile virò dalla sua rotta circa 40 secondi dopo la partenza. Volando a un angolo di più di 20 gradi, anziché verticalmente, si esercitò su di esso una tale forza aerodinamica che i razzi propulsori si staccarono dal missile, innescando il meccanismo automatico di auto-distruzione: il missile si fece esplodere. La causa che innescò questo incidente fu un’eccezione non gestita! Il missile conteneva due dispositivi identici (chiamati sistemi di riferimento inerziali) che elaboravano dati di volo provenienti da dispositivi di misura e li trasformavano in informazioni riguardanti la posizione del missile, usate poi dal computer di bordo per controllare i razzi propulsori. Gli stessi sistemi di riferimento inerziali e lo stesso software per il calcolatore avevano funzionato bene per il predecessore. Ariane 4. Tuttavia, a causa di modifiche al progetto del missile, uno dei sensori misurò una forza di accelerazione maggiore di quella che si riscontrava nell’Ariane 4. Tale valore, espresso come numero in virgola mobile, era memorizzato in un numero intero a 16 bit (come una variabile di tipo short in Java). Diversamente da Java, il linguaggio Ada usato per il software di quei dispositivi genera un’eccezione se un numero in virgola mobile troppo grande viene convertito in un intero, ma, sfortunatamente, i programmatori avevano deciso che tale situazione non sarebbe mai accaduta e non avevano definito un gestore per l’eccezione. Quando avvenne il trabocco numerico, venne lanciata l’eccezione e, poiché non vi era un gestore, il dispositivo si spense. Il computer di bordo rilevò il guasto e interrogò il sensore di riserva, che, però, si era spento per lo stesso identico motivo, una cosa che i progettisti del missile non avevano previsto: avevano immaginato che tali dispositivi potessero guastarsi per motivi meccanici e la probabilità che i due dispositivi avessero lo stesso guasto meccanico era considerata assai remota. A quel punto il razzo era privo di informazioni affidabili sulla propria posizione e andò fuori rotta. Sarebbe forse stato meglio che il software non fosse stato così diligente? Se avesse ignorato l’errore numerico di trabocco, il dispositivo non si sarebbe spento, avrebbe semplicemente elaborato dati errati. Ma in tal caso il sensore avrebbe segnalato errati valori di posizione, cosa che sarebbe stata altrettanto fatale. Al contrario, una implementazione corretta avrebbe dovuto catturare l’errore di trabocco, fornendo una strategia per ricalcolare i dati di volo. Ovviamente, in questo contesto “lasciar perdere” non era una scelta ragionevole. Il vantaggio del meccanismo di gestione delle eccezioni sta nel fatto che rende questi problemi espliciti per i programmatori, una cosa a cui dovete pensare quando state maledicendo il compilatore Java perché si lamenta di eccezioni non catturate. (dal libro: Concetti di informatica e fondamenti di Java)
@CodeBrothers
@CodeBrothers 2 месяца назад
Bellissima storia, ecco perché a maggior ragione continueremo a non prendere altri voli 🤣
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers azz... non era mia intenzione alimentare alcuna fobia :D
@alexdelarge1508
@alexdelarge1508 2 месяца назад
Ciao Michele, nella parte finale del video spieghi che, per risparmiare memoria, se la mia inner class non ha bisogno degli istance field della classe outer, allora la posso fare statica. Va bene, ma il perché di questa cosa l'hai spiegata in qualche video e il mio cervello era in buffer overflow, o la stai dicendo adesso per la prima volta? Per darmi una spiegazione, presumo sia perché una classe statica non alloca spazio per quegli istance field, è giusto? Mille grazie. Questa lezione è davvero ben fatta.
@CodeBrothers
@CodeBrothers 2 месяца назад
Ciao Alex! Bella domanda questa, il motivo per cui la inner class, una volta statica richiede meno memoria sta nel fatto che non ha bisogno di tenere una referenza all'oggetto Outer class ;)
@alexdelarge1508
@alexdelarge1508 2 месяца назад
@@CodeBrothers chiaro, grazie!
@nicolacampano9044
@nicolacampano9044 2 месяца назад
Top, anche da zero sarebbe fantastico
@CodeBrothers
@CodeBrothers 2 месяца назад
Grazie di avercelo fatto sapere Nicola!
@nicolacampano9044
@nicolacampano9044 2 месяца назад
Non c’è una pagina Instagram?
@CodeBrothers
@CodeBrothers 2 месяца назад
@@nicolacampano9044 certo che c'è, la mettiamo anche alla fine di ogni video oltre che nel canale come link