Тёмный
AFK
AFK
AFK
Подписаться
Salve a tutti Pinguini e Pinguine,

Mi chiamo Valerio e benvenuti sul mio canale AFK (Away From Keyboard), che vi porta nel mio mondo, ovvero quello dell'informatica.

Ecco i temi e le rubriche che tratto:

► Under the hood: Vado a trattare tematiche dell'informatica in dettaglio, andando a scavare nelle profondità
► Storia (e Storie): Vi racconto la storia (e anche le storie) di quello che circonda l'informatica
► Code Academy: Dove programmo da solo o in compagnia e spiego come funzionano diversi linguaggi di programmazione
► VLOG: racconto della mia vita portandomi nel mio modo di vedere l'informatica

Pubblico 2 video a settimana sempre alla stessa ora: 15:30. Ecco il calendario:
► MARTEDI: VLOG/CODE ACADEMY (alternati)
► VENERDI: UNDER THE HOOD/STORIA (alternati)

Non perdere altro tempo e sfoglia i contenuti già pubblicati!
🍼ME NE TORNO ALL'ASILO - AFK VLOG
17:07
2 месяца назад
REAGISCO ai MEME su REDDIT - AFK VLOG
10:48
2 месяца назад
Комментарии
@bergaminennio
@bergaminennio 7 часов назад
Grazie mille 🙏! Sto imparando molte cose, l'ignoranza delle quali mi ha creato molti grattacapi negli anni passati, quando volevo far girare programmi W su Linux
@RenatoT66
@RenatoT66 3 дня назад
Ben tornato :)
@daniellvincenzi
@daniellvincenzi 3 дня назад
ciao stavo finendo di studiare la mia lezione giornaliera di C quando ho visto la notifica e ho cliccato subito il video, ps; sei un grande
@Alenico75
@Alenico75 4 дня назад
Ciao fai sempre video fantastici ma scusa se te lo dico devi assolutamente migliorare la dizione. Spesso faccio fatica a capirti e devo tornare indietro con il video. È davvero un peccato perchè il tuo canale mi piace molto
@LucaSantoro-k4b
@LucaSantoro-k4b 5 дней назад
video molto bello e utilissimo, seguendo il tuo video sono riuscito a comprendere meglio i concetti del capitolo sui sistemi operativi del libro di tanenbaum
@alcimlibero
@alcimlibero 5 дней назад
Quando impazzava MS DOS 3.0, io preferivo DR DOS 5.0, secondo me, nettamente superiore!
@alcimlibero
@alcimlibero 5 дней назад
L’ho appena scoperta: bravissimo, complimenti!
@wox76
@wox76 6 дней назад
Amiga è stato il futuro negli anni 80! Grazie a loro ho imparato grafica 3d/programmazione/montaggio video! incredibile!
@gaiking-rb2dl
@gaiking-rb2dl 11 дней назад
Ciao volevo dirti video tra bellissimo aspetto il prossimo video mi sono iscritto e sono interessato perché come studente delle superiori spieghi molto bene in modo facile Questa è il mio più onesto pensiero
@agvelli
@agvelli 23 дня назад
Bel video, hai però scordato di citare AROS (Amiga Replacement Operating System), versione open source di un OS compatibile con AmigaOS che può girare anche su x86 e che non dipende da guerre intestine ad un'azienda. Magari in un secondo video 😁
@il_solito_troll
@il_solito_troll 25 дней назад
ti saluta il trota
@Tecnobingo
@Tecnobingo 25 дней назад
Discorso sensato. Tempo fa un informatico mi disse che sbagliavo a credere che l'informatica fosse una cosa complessa, perché era solo un insieme di molte cose semplici.
@maui-maui4011
@maui-maui4011 28 дней назад
Ciao. Grazie per i tuoi video sempre arricchiti di cose inusuali e interessanti. ------ Magari se vuoi tu o chi lo sa puo' rispondermi. Avrei un problema di output con questa scheda perforata. Che necessita evidentemente di una patch, ma dove ? se come batch da Cmd io scrivo @echo off :ping Dir Echo Fine timeout 10 goto ping ---- Ottengo : L'elenco dir e la scritta fine E tutto viene ciclato ogni 10 secondi correttamente con output ma se io scrivo Al posto di Dir ping 127.0.0.1 Cioe' @echo off :ping ping 127.0.0.1 Echo Fine timeout 10 goto ping ------- Ecco che l'output del ping scompare e la finestra si fa molto nera !!! Qualcuno suggerisce di reindirizzare il ping 127.0.0.1 > su file o su nul > NUL Ma io non vorrei fare questo ma ottenere l'esito del responso del ping a video sulla finestra attiva dello script, cosi' come ottenevo la lista della dir, fine. nel primo caso. E' evidente che mi sfugge qualcosa di importante da sapere su perche' quel responso del ping non compare mai, ma non so quale sia il problema, ne' a sto punto se l'esito sia cosi' processabile. Grazie a chi mi aiutera'
@valerio_afk
@valerio_afk 27 дней назад
Beh. Non so esattamente cosa consigliarti per il semplice motivo che a me funziona (ho riscritto il codice e pure quello che ho copiato e incollato dal tuo commento)
@maui-maui4011
@maui-maui4011 27 дней назад
@@valerio_afk Ciao Una cosa che non ho detto che il batch risiedeva su un'altra partizione Dal momento che mi hai detto che te funziona, l'ho fatto partire da C: E va bene cicla e da l'esito del ping Per farlo funzionare da un'altra partizione mentre i comandi dir e echo continuano a funzionare cosi', ho visto che occorre cambiare il comando ping con %WINDIR%\System32\PING.EXE Tu sai il perche' ? Grazie
@iamsofuckingmad
@iamsofuckingmad Месяц назад
Il nome HAIKU OS deriva dal fatto che quando c'era un problema nel browser in beos spuntava un haiku che diceva essenzialmente che il browser ha avuto un problema(al inizio si chiamava openbeos ma lo hanno cambiato per evitare problemi di copyright).
@PASQUALEDITA
@PASQUALEDITA Месяц назад
Duck duck go ❤
@Thebasicmaker
@Thebasicmaker Месяц назад
Il mio linguaggio preferito: B.A.S.I.C. si, sono vecchio e mi piace stare comodo! Uso diversi "dialetti" basic contemporanei, con librerie grafiche e altro, tipo dark basic o just basic o RFO BASIC sul telefono con cui mi faccio le APK col suo compilatore.. insomma mi diverto col basic. Linguaggio odiato C e C++ per fare una cosa da 5 minuti in basic col C++ ci vuole un'ora! A scuola mi divertivo a programmare in pascal, (così ti fai un'idea di quanti anni ho) e feci impazzire un prof che il giorno degli esami si ritrovo' installato nei computers del corso un programma password che se la sbagliavi 3 volte formattava l'hard disk...creato usando un file batch in dos
@maui-maui4011
@maui-maui4011 28 дней назад
Ciao Lui ha detto che per android si usa java. Cio' non toglie che la medesima applicazione si possa scrivere anche in C++, vero ?
@carlodaroma
@carlodaroma Месяц назад
Ma perché la sigla dopo 10 minuti😂? Bel video comunque 👍👍
@carlomaggiolo2180
@carlomaggiolo2180 Месяц назад
Grazie per spiegato la stabilità
@nikecatania95
@nikecatania95 Месяц назад
manca il tuo audio, è normale?
@carlodaroma
@carlodaroma Месяц назад
Non penso volesse fare un commentary 😅
@nikecatania95
@nikecatania95 Месяц назад
@@carlodaroma questo è vero, però sarebbe stato interessante.
@RenatoT66
@RenatoT66 Месяц назад
Buone vacanze :)
@TimelessX974
@TimelessX974 Месяц назад
come potrei capire che algoritmo adopero in python ? Es se uso numPy o Pandas cosa adoperano ? e Sqlite , Mysql , MariaDB e altri DB cosa adoperano ? Scrivo molti programmi che fanno ordinameto di molti dati con le operazioni di Python con numpy e Panda e suo molto anche database
@TimelessX974
@TimelessX974 Месяц назад
Ottimo lavoro come sempre! sei un Grande e mille grazie del tuo impegno
@DanielePrevedello
@DanielePrevedello Месяц назад
Ottimo video come sempre! Grande! 😁
@ilio.meloni
@ilio.meloni Месяц назад
Mi piacerebbe sapere cosa ne pensate di questo algoritmo che ho implementato... basato sui sulla logica quicksort.. che ne dovrebbe aver migliorato le prestazioni, specialmente su dati semi-ordinati (non è ricorsivo per poterlo testate su sito sortvisualizer) async function cutSort(elements) { let stack = []; let pivotLeft; let pivotRight; let cursorLeft; let cursorRight; stack.push({left: 0, right: elements.length - 1}); while(stack.length){ const{left,right} = stack.shift(); switch(right-left) { case -1: case 0: break; case 1: if(getValue(left) > getValue(right)) await swap( left, right); break; case 2: cursorLeft = left + 1; if (getValue(left) > getValue(cursorLeft)){ if (getValue(left) > getValue(right)){ if (getValue(cursorLeft) > getValue(right)){ await swap( left, right); } } await swap( left, cursorLeft); } else { if (getValue(cursorLeft) > getValue(right)){ if (getValue(left) > getValue(right)){ await swap( left, right); } await swap( cursorLeft, right); } } break; default: if(getValue(left) > getValue(right)) await swap( left, right); pivotLeft = left; pivotRight = right; cursorLeft = left + 1; cursorRight = right - 1; doBreak = 0; do { while (getValue(pivotLeft) > getValue(cursorLeft)) cursorLeft++; while (getValue(cursorRight) > getValue(pivotRight)) cursorRight--; switch(cursorRight-cursorLeft) { case -1: await swap( pivotLeft, cursorRight); await swap( cursorLeft, pivotRight); cursorRight++; cursorLeft--; doBreak = 1; break; case 0: if (pivotLeft < cursorLeft-1){ await swap( pivotLeft, cursorLeft-1); } if (cursorRight + 1< pivotRight){ await swap( cursorRight+1, pivotRight); } doBreak = 1; break; case 1: if (getValue(cursorLeft) > getValue(cursorRight)){ await swap(cursorLeft, cursorRight); } else { if (pivotLeft < cursorLeft-1){ await swap( pivotLeft, cursorLeft-1); } if (cursorRight + 1< pivotRight){ await swap( cursorRight+1, pivotRight); } doBreak = 1; } break; default: if (getValue(cursorLeft) > getValue(cursorRight)){ await swap(cursorLeft, cursorRight); } else { if (pivotLeft < cursorLeft-1){ await swap( pivotLeft, cursorLeft-1); } if (cursorRight + 1< pivotRight){ await swap( cursorRight+1, pivotRight); } pivotLeft= cursorLeft; pivotRight = cursorRight; cursorLeft++; cursorRight--; } } if (doBreak === 1) break; } while (true) stack.push({left: left, right: cursorLeft--}); stack.push({left: cursorRight++, right: right}); } } }
@valerio_afk
@valerio_afk Месяц назад
Dunque, l'ho reimplementato in python (per adattarlo all'interfaccia) seguento passo passo gli step e, una volta eseguito, una mia intuizione e' stata confermata: fa tanti confronti (nello stesso caso dei video ne fa poco piu' di 1400. Tuttavia, fa un numero di scambi decisamente molto basso: 186. Che non e' da sottovalutare. Secondo me si dovrebbe ragionare su come ridurre il numero di scambi.
@ilio.meloni
@ilio.meloni Месяц назад
@@valerio_afk questi confronti e scambi non solo strettamente necessari al sort ....} else { if (pivotLeft < cursorLeft-1){ await swap( pivotLeft, cursorLeft-1); } if (cursorRight + 1< pivotRight){ await swap( cursorRight+1, pivotRight); } pivotLeft= cursorLeft;..... ma, nelle intenzioni, dovrebbero preservare i confronti fatti, progredire nell'ordinamento delle porzioni piccole e minimizzare gli scambi... forse si può limare qualche confronto ridondante... le porzioni da 2 e 3 elementi non credo che si possano ottimizzare di più
@ilio.meloni
@ilio.meloni Месяц назад
@@valerio_afk meno confronti ma molti più scambi.. non necessari (sullo stesso indice) (il case 1 interno è meglio e andrebbe sostituito nell'originale) async function cutSort(elements) { let stack = []; let pivotLeft; let pivotRight; let cursorLeft; let cursorRight; stack.push({left: 0, right: elements.length - 1}); while(stack.length){ const{left,right} = stack.shift(); switch(right-left) { case -1: case 0: break; case 1: if(getValue(left) > getValue(right)) await swap( left, right); break; case 2: cursorLeft = left + 1; if (getValue(left) > getValue(cursorLeft)){ if (getValue(left) > getValue(right)){ if (getValue(cursorLeft) > getValue(right)){ await swap( left, right); } } await swap( left, cursorLeft); } else { if (getValue(cursorLeft) > getValue(right)){ if (getValue(left) > getValue(right)){ await swap( left, right); } await swap( cursorLeft, right); } } break; default: if(getValue(left) > getValue(right)) await swap( left, right); pivotLeft = left; pivotRight = right; cursorLeft = left + 1; cursorRight = right - 1; doBreak = 0; do { while (getValue(pivotLeft) > getValue(cursorLeft)) cursorLeft++; while (getValue(cursorRight) > getValue(pivotRight)) cursorRight--; switch(cursorRight-cursorLeft) { case -1: await swap( pivotLeft, cursorRight); await swap( cursorLeft, pivotRight); cursorRight++; cursorLeft--; doBreak = 1; break; case 0: //if (pivotLeft < cursorLeft-1){ await swap( pivotLeft, cursorLeft-1); //} //if (cursorRight + 1< pivotRight){ await swap( cursorRight+1, pivotRight); //} doBreak = 1; break; case 1: if (getValue(cursorLeft) > getValue(cursorRight)){ await swap(cursorLeft, cursorRight); if (getValue(pivotLeft) <= getValue(cursorLeft) && pivotLeft < cursorLeft-1){ cursorLeft--; } if (getValue(cursorRight) <= getValue(pivotRight) && cursorRight+1 < pivotRight){ cursorRight++; } } //if (pivotLeft < cursorLeft-1){ await swap( pivotLeft, cursorLeft-1); //} //if (cursorRight + 1< pivotRight){ await swap( cursorRight+1, pivotRight); //} doBreak = 1; break; default: if (getValue(cursorLeft) > getValue(cursorRight)){ await swap(cursorLeft, cursorRight); } else { pivotLeft= cursorLeft; pivotRight = cursorRight; cursorLeft++; cursorRight--; } } if (doBreak === 1) break; } while (true) stack.push({left: left, right: cursorLeft--}); stack.push({left: cursorRight++, right: right}); } } }
@ilio.meloni
@ilio.meloni Месяц назад
@@valerio_afk ultima implementazione async function cutSort(elements) { let stack = []; let pivotLeft; let pivotRight; let cursorLeft; let cursorRight; let bitmap; stack.push({left: 0, right: elements.length - 1}); while(stack.length){ const{left,right} = stack.shift(); switch(right-left) { case -1: case 0: break; case 1: if(getValue(left) > getValue(right)) await swap( left, right); break; case 2: cursorLeft = left + 1; if (getValue(left) > getValue(cursorLeft)){ if (getValue(left) > getValue(right)){ if (getValue(cursorLeft) > getValue(right)){ await swap( left, right); } } await swap( left, cursorLeft); } else { if (getValue(cursorLeft) > getValue(right)){ if (getValue(left) > getValue(right)){ await swap(left, right); } await swap(cursorLeft, right); } } break; case 3: bitmap = 0; cursorLeft = left + 1; cursorRight = right - 1; if (getValue(left) > getValue(cursorLeft)) bitmap = 1; if (getValue(cursorLeft) > getValue(cursorRight)) bitmap += 2; if (getValue(cursorRight) > getValue(right)) bitmap += 4; switch(bitmap) { case 0: break; case 1: if (getValue(left) > getValue(right)) { await swap(left, cursorLeft); await swap(cursorLeft, cursorRight); await swap(cursorRight, right); } else if (getValue(left) > getValue(cursorRight)) { await swap(left, cursorLeft); await swap(cursorLeft, cursorRight); } else { await swap(left, cursorLeft); } break; case 2: await swap(cursorLeft, cursorRight); if (getValue(left) > getValue(cursorLeft)) { await swap(left, cursorLeft); } if (getValue(cursorRight) > getValue(right)) { await swap(cursorRight, right); } break; case 3: if (getValue(left) > getValue(right)) { await swap(left, right); await swap(left, cursorRight); if (getValue(cursorLeft) > getValue(cursorRight)) { await swap(cursorLeft, cursorRight); } } else { await swap(left, cursorRight); } break; case 4: if (getValue(left) > getValue(right)) { await swap(cursorRight, right); await swap(cursorLeft, cursorRight); await swap(left, cursorLeft); } else if (getValue(cursorLeft) > getValue(right)) { await swap(cursorRight, right); await swap(cursorLeft, cursorRight); } else { await swap(cursorRight, right); } break; case 5: if (getValue(left) > getValue(cursorRight)) { await swap(left, right); if (getValue(left) > getValue(cursorLeft)) { await swap(left, cursorLeft); if (getValue(cursorLeft) > getValue(cursorRight)) { await swap(cursorLeft, cursorRight); } } } else { await swap(cursorRight, right); if (getValue(cursorLeft) > getValue(cursorRight)) { await swap(left, cursorLeft); if (getValue(cursorLeft) > getValue(cursorRight)) { await swap(cursorLeft, cursorRight); } } else { await swap(left, cursorRight); } } break; case 6: if (getValue(left) > getValue(right)) { await swap(left, right); await swap(cursorLeft, right); if (getValue(cursorLeft) > getValue(cursorRight)) { await swap(cursorLeft, cursorRight); } } else { await swap(cursorLeft, right); } break; case 7: await swap(left, right); await swap(cursorLeft, cursorRight); break; } default: if(getValue(left) > getValue(right)) await swap( left, right); pivotLeft = left; pivotRight = right; cursorLeft = left + 1; cursorRight = right - 1; doBreak = 0; do { while (getValue(pivotLeft) > getValue(cursorLeft)) cursorLeft++; while (getValue(cursorRight) > getValue(pivotRight)) cursorRight--; switch(cursorRight-cursorLeft) { case -1: await swap( pivotLeft, cursorRight); await swap( cursorLeft, pivotRight); cursorRight++; cursorLeft--; doBreak = 1; break; case 0: if (pivotLeft < cursorLeft-1){ await swap( pivotLeft, cursorLeft-1); } if (cursorRight + 1< pivotRight){ await swap( cursorRight+1, pivotRight); } doBreak = 1; break; case 1: if (getValue(cursorLeft) > getValue(cursorRight)){ await swap(cursorLeft, cursorRight); if (getValue(pivotLeft) <= getValue(cursorLeft) && pivotLeft < cursorLeft-1){ cursorLeft--; } if (getValue(cursorRight) <= getValue(pivotRight) && cursorRight+1 < pivotRight){ cursorRight++; } } if (pivotLeft < cursorLeft-1){ await swap( pivotLeft, cursorLeft-1); } if (cursorRight + 1< pivotRight){ await swap( cursorRight+1, pivotRight); } doBreak = 1; break; default: if (getValue(cursorLeft) > getValue(cursorRight)){ await swap(cursorLeft, cursorRight); } else { if (pivotLeft < cursorLeft-1){ await swap( pivotLeft, cursorLeft-1); } if (cursorRight + 1< pivotRight){ await swap( cursorRight+1, pivotRight); } pivotLeft= cursorLeft; pivotRight = cursorRight; cursorLeft++; cursorRight--; } } if (doBreak === 1) break; } while (true) stack.push({left: left, right: cursorLeft--}); stack.push({left: cursorRight++, right: right}); } } }
@samas69420
@samas69420 Месяц назад
la sigla nei primi 30 secondi mi ha stunnato non me lo aspettavo
@samoelepasqualini1432
@samoelepasqualini1432 Месяц назад
Grazie valerio, buone ferie 🏖️
@sorakmhearts5929
@sorakmhearts5929 Месяц назад
Grazie per il video! Buone vacanze 😊
@grazianofalcone3093
@grazianofalcone3093 Месяц назад
Ok accetto il tuo punto di vista ma quel brivido quando hai parlato di VB sinceramente non ľho capito, considera che VB viene ancora usato adesso ed é stata usata la versione per MSDOS per sviluppare FreeBASIC attualmente il migliore compilatore con sintassi BASIC al mondo ed é autocompilabile dato che gli stessi sorgenti di FreeBASIC sono scritti nel medesimo linguaggio, si puo programmare a Oggetti e Procedurale ottimo per fini didattici ed essendo compatibile con le librerie scritte in C e C++ si possono sviluppare applicazioni che usano api windows librei GTK QT ecc ecc io stesso ho sviluppato un gestionale che opera in rete usando server mysql e interfaccia GTK e il gestionale puo essere compilato per windows BSD e linux. E a differenza di python é autonomamente implementabile, per chi non lo sa Python pup essere implementato solo tramite C C++e altri linguaggi.
@valerio_afk
@valerio_afk Месяц назад
La maggior parte dei linguaggi di programmazione (python incluso) sono self-hosted (en.wikipedia.org/wiki/Self-hosting_(compilers)) - a meno che abbia frainteso il tuo punto. PS.: non ricordo esattamente il punto del video a cui ti riferisci, molto probabilmente era dovuto al fatto che non mi piace BASIC.
@grazianofalcone3093
@grazianofalcone3093 Месяц назад
@@valerio_afk Accetto il fatto che non ti piace BASIC. Ma devo chiarire il mio post: I linguaggi autocompilabili sono quei linguaggi dove i sorgenti di base sono scritti nel medesimo linguaggio spiego meglio: I sorgenti di C sono scritti in C I sorgenti di C++ sono scritti in C e C++ I sorgenti di Fortran sono scritti in Fortran I sorgenti di FreeBASIC sono scritti in FreeBASIC I sorgenti di VisualBASIC sono scritti in C++ I Sorgenti di Python sono scritti in C Tornando a Python ha una sola implementazione scritta in Python è si tratta del suo compilatore JIT PYPY che serve a ottimizzare il codice in memoria e compilarlo in codice macchina prima di eseguirlo ( Come fa PHP dalla versione 8 in poi ) I Compilatori JIT hanno il vantaggio che una volta caricato e compilato il programma questo ha prestazioni pari a un programma compilato ma deve essere volta per volta caricato e compilato.
@stalinizzatore8292
@stalinizzatore8292 Месяц назад
Ragazzi devo prendere un max 8 Ryanair tra poco.. mi potete rincuorare al riguardo? Ad oggi è sicuro viaggarci e i problemi sono stati risolti? Grazie
@valerio_afk
@valerio_afk Месяц назад
Vai sereno. Guarda il canale di EttiAviation e vedrai che Ryanair non ha mai avuto incidenti fatali
@grazianofalcone3093
@grazianofalcone3093 Месяц назад
Ok lo hai spiegato in maniera che quelli che non ne capiscono riescano a farsene una idea. Tutto esatto, però c'è una cosa che dovresti cancellare, non dal video ma proprio dal tuo cervello, il nome PASCAL e TURBO PASCAL, il più odioso linguaggio che ho usato nella mia vita, uno schifo di ambiente privo di senso razionale, tanto valeva imparare a programmare in QuickBASIC che almeno ancora oggi i sorgenti sono compilabili usando FreeBASIC su ARM, INTEL DOS Win 32 e 64 Linux 32 e 64 e pure Mac e BSD. Per il resto tutto ok. PS, odio Turbo Pascal
@valerio_afk
@valerio_afk Месяц назад
Benché possa capire il tuo sentimento e potrei pure empatizzare, (turbo) pascal è stato il mio primissimo approccio alla programmazione. Non so neanche come si usi piu ma è grazie a lui se ho imparato 😅
@grazianofalcone3093
@grazianofalcone3093 Месяц назад
@@valerio_afk Scusa ma io ho iniziato con Commodore 64 BASIC e poi ANSI C per passare a C++ e derivati come PHP, JAVA, Attualmente uso solo C, C++ e FreeBASIC perchè sono compatibili tra di loro le librerie che scrivo su FreeBASIC posso usarle su C++ e viceversa, Per risparmiare tempo molti sorgenti li aggiorno per i nuovi sistemi e via ecco che applicazioni vecchie di 20 anni riprendono a funzionare.
@Thebasicmaker
@Thebasicmaker Месяц назад
Io l'ho usato a scuola, bellino, ma un fastidio dover dichiarare le variabili prima di poterle usare!
@grazianofalcone3093
@grazianofalcone3093 Месяц назад
@@Thebasicmaker Spiegami, escludendo i linguaggi interpretati, come Python, PHP e quelli ormai obsoleti quale non richiede la dichiarazione delle variabili ? In ogni caso, dichiarare una variabile offre 3 vantaggi e nessuno svantaggio: 1) Dichiarandoli sin dall'inizio sai cosa stai usando e se puoi riutilizzarlo. 2) Dare una tipologia di variabile significa ottimizzare l'esecuzione e la memoria necessaria. 3) Eviti il verificarsi di possibili BUG's in futuro. Esempio in C: int x = 9999999; char x[8] = { "9"."9"."9"."9"."9"."9"."9"."\0"}; nel primo caso la x è una variabile numerica è occupando 4 Byte è puo conservare un valore numerico superiore a 2 miliardi Nel secondo caso occupa 8 Byte e puoi inserire 7 caratteri di vario tipo o scrivere sotto forma di stringa un valore di 9 milioni 999 mila 999. I linguaggi interpretati invece sono fatti per scrivere piccoli script dove l'uso della memoria è irrilevante perchè nel dispositivo in questione abbonda, ma non è sempre così; infatti se tu volessi scrivere un programma che deve lavorare in un ambiente ristretto come i registri di un processore oltre a non avere la possibilità di eseguire un codice interpretato è indispensabile definire ogni variabile altrimenti sarebbe impossibile allocarle in uno spazio ridotto di memoria. In ogni caso ogni linguaggio ha la sua utilità e quelli facili non sono adatti a creare cose complesse.
@giannabranchino9553
@giannabranchino9553 Месяц назад
Splendida storia e molto importante da conoscere, così tanto che non dovrebbe mai essere dimenticata. Fa sicuramente capire che l'intelligenza umana e il buon senso possono fare la differenza, quest'uomo e davvero un eroe, avrebbe meritato di più.
@jackzugna5830
@jackzugna5830 Месяц назад
Dell'IA non mi sono accorto di nulla, è pressoché impossibile capire le differenze nella generazione di testi. Un'altra cosa che ci dovremmo rendere conto è di quanti incidenti accadono tutt'ora e che possono causare conseguenze devastanti ma di cui non sappiamo niente e chissà quando sapremo qualcosa.
@RenatoT66
@RenatoT66 Месяц назад
La conoscevo :) Grazie
@paolocoppi7444
@paolocoppi7444 Месяц назад
Grandissimo Stanislav e bravissimo Valerio!
@bitsmanent
@bitsmanent Месяц назад
Video interessante, complimenti. Consiglio: quando rimandi a un altro video metti l'anteprima in modo che chi ha le annotazioni disattivate non veda che indichi il nulla col ditino.
@valerio_afk
@valerio_afk Месяц назад
Ma quello lo faccio sempre! In questo caso metto una playlist e non mi andava di mettere 6 o forse più miniature 😅
@davidglc
@davidglc Месяц назад
Pochissimi sono a conoscenza che l'intera classe di indirizzi IPv4 44.0.0.0/9 (8 milioni di indirizzi!) è da sempre riservata da IANA ai RADIOAMATORI (AMPRNET).
@RenatoT66
@RenatoT66 Месяц назад
Nomen Omen
@grazianofalcone3093
@grazianofalcone3093 Месяц назад
1) Sono stati inventati gli IPV6 nel 2004 2) Gli indirizzi IPV4 vengono usati solo in ambito semplicistico, gli attuali router dal 2011 hanno iniziato a usare in maniera IPV6 3) Il sistema NAT non serve a compensare i pochi indirizzi IPV4 ma per instradare gli accessi nelle sottocatene dei router. 4) I Service provider non forniscono IPv4 Pubblici dal 2004 , quando fastweb forniva il servizio internet erano reclusi nella loro sottocatena e solo chi lo richiedeva poteva avere un IP Pubblico. 5) Utilizzando il sistema delle sottocatene routing ogni provider ha a disposizione 4 milioni di indirizzi che puo instradare con un solo ip pubblico. 6) Nessuna connessione tramite smartphone usa un indirizzo Pubblico sono tutti privati dove la stessa TIM usa 40 sotto catene da 4 milioni di indirizzi ognuna per ogni regione di copertura. Alla fine un video che serve a incuriosire chi non ne capisce nulla di rete informatica. Le NAT venivano usate sin dall'inizio per i provider che dovevano pubblicare piu server avendo una sola connessione, usando le NAT si possono avere 160 mila dispositivi per ogni indirizzo. PS. Io risolvevo questi problemi quando tu ancora venivi allattato al biberon, e con tutto che ormai il problema non sussiste hai fatto un video dove il 99% dei visualizzatori non ha idea di cosa tu stia parlando sopratutto non ha idea di cosa sia un indirizzi ip pubblico ne tanto meno se lo ha mai usato. dal 2011 i provider italiani non forniscono piu indirizzi ip pubblici a meno che non si tratta di una connessione aziendale fissa e ormai con l'avvento del 4g e 5g molti hanno disdetto le connessioni fisse per usare i cellulari come hotspot, e molti usano connessioni con modem 4G e 5G poichè la copertura per una linea fissa non permette una connessione ottimale o per questione di costi, ebbene le connessione 4g e 5g sono tutte con indirizzo privato, quindi il video a livello pratico è sono una curiosità e pure fuorviante di un argomente che per te è troppo complesso da comprendere.
@ilciumbia
@ilciumbia Месяц назад
Bel video, ma mi domando una cosa: come fai a sapere tutte queste cose sulla trasformata di Fourier e non conoscerne la pronuncia corretta? 😉
@valerio_afk
@valerio_afk Месяц назад
Enlighten me!
@ilciumbia
@ilciumbia Месяц назад
@@valerio_afk Furié, senza la r finale! 😉
@valerio_afk
@valerio_afk Месяц назад
Il francese non è il mio forte eheheh. La prima r di fourier tra l'altro andrebbe pronunciata alla francese (simbolo ipa ʁ) che io non so pronunciare. Quindi, è meglio per me italianizzare. Diverso sarebbe stato se fosse stato un nome inglese. In quel caso, avrei potuto fare certamente di meglio :P
@CrazyNet
@CrazyNet Месяц назад
Premesso che IPv6 è ampiamente usato dai grandi ISP, ma non è cosi diffuso o meglio non ha ancora soppiantanto IPv4 per mollti probemi e si va da: Compatibilità con l'infrastruttura esistente, Costi e risorse, Conoscenza e formazione, Servizi e applicazioni ecc. Ma Tuttavia, con il continuo esaurimento degli indirizzi IPv4 e l'evoluzione delle infrastrutture di rete, l'adozione di IPv6 sta gradualmente aumentando.
@davidglc
@davidglc Месяц назад
Non so quante persone saranno in grado di scrivere e leggere regole di firewall con indirizzi del tipo "2001:db8:abcd:0012:ffff:ffff:ffff:ffff"
@CrazyNet
@CrazyNet Месяц назад
@@davidglc hai ragione! Anch'io ero un po' perplesso in merito poi qualche tempo fa realizzai in video su IPv6 e devo dirti che non é cosi complicato come sembra di primo acchito
@CrazyNet
@CrazyNet Месяц назад
il NAT è stato creato per risolvere problemi di esaurimento degli indirizzi IPv4, aumentare la sicurezza delle reti, facilitare la gestione delle reti interne e fornire maggiore flessibilità e funzionalità, specialmente in ambienti aziendali e domestici. Non fu inventato come walk around
@valerio_afk
@valerio_afk Месяц назад
Rfc 1631 (link in descrizione). Abstract: The two most compelling problems facing the IP Internet are IP address depletion and scaling in routing
@CrazyNet
@CrazyNet Месяц назад
@@valerio_afk Come ho scritto sopra "il NAT è stato creato per risolvere problemi di esaurimento degli indirizzi IPv4" per risolvere i problemi dell'esaurimento degli IPV4 (ovviamente pubblici) e per aumentare la sicurezza, ma non è un walk around
@valerio_afk
@valerio_afk Месяц назад
@@CrazyNet poco piu sotto nell abstact: This memo proposes another short-term solution, address reuse, that complements CIDR or even makes it unnecessary. Basterebbe leggere il link nella descrizione
@CrazyNet
@CrazyNet Месяц назад
@@valerio_afk capisco. Ma quello che dice nel link in descrizione in sostanza Il memo propone NAT come una soluzione di breve termine per affrontare il problema della scarsità di indirizzi IP, integrandosi con CIDR. Questa soluzione offre un modo per continuare a utilizzare gli indirizzi IP esistenti senza dover ricorrere a cambiamenti significativi nell'infrastruttura di rete esistente. Soluzione a breve termine non è un walk around. Considera che negli anni 90 internet non era proprio come lo conosci oggi e quando appunto in quegli anni fu creato il NAT (infatti il documento nel link è datato May 1994) non si immaginava neppure uno sviluppo cosi rapido della rete. Per quanto rigurda IPV6 è dagli inizi del 2000 che se ne parla e dopo 24 anni stiamo ancora a ipv4
@obvion861
@obvion861 Месяц назад
Non so se centra, ma è per questo NAT che i siti che rilevano la posizione in base all'IP mi segnalano in una località che dista circa 50 Km da casa mia?
@CrazyNet
@CrazyNet Месяц назад
no, non c'entra niente se hai o non hai il nat solitamente i siti che rilevano la posizione sono abbastanza accurati a patto che abiliti la localizazione
@LeoSomnolentus
@LeoSomnolentus Месяц назад
Serve un messia che converta all' IPv6
@rifiutoILsistema
@rifiutoILsistema Месяц назад
I soldi ci sono e ci saranno solo per le armi, per il resto soldi non ce ne sono. Semplice....
@CyberVerseForPeace
@CyberVerseForPeace Месяц назад
domanda: ma perché metti la sigla quasi a fine video? Per il resto sei un grande nell'esporre i contenuti!
@tinnybrinca8620
@tinnybrinca8620 Месяц назад
Video ben fatto e molto divertente, avevo già sentito parlare di questo problema e qualche anno fa mi hanno detto che esistono indirizzi ipv6 corti a 48bit o 64bit, sai dirmi se e vero anche perché questo abbasserebbe i costi delle infrastrutture in caso di cambiamento. Continua così.
@CrazyNet
@CrazyNet Месяц назад
non esistono indirizzi IP a 48bit esistono a 32 o 128 Bit forse fai confusione con il MAC- Adrress che è di 48Bit
@tinnybrinca8620
@tinnybrinca8620 Месяц назад
@@CrazyNet grazie per la gentile risposta
@CrazyNet
@CrazyNet Месяц назад
@@tinnybrinca8620 figurati! Prego
@VasaMusic438
@VasaMusic438 Месяц назад
ma perchè parli cosi? possibile che oggi i "divulgartori " debbano tutti parlare cosi?
@valerio_afk
@valerio_afk Месяц назад
In che senso?
@leonardogiammalvo
@leonardogiammalvo Месяц назад
Complimenti c'è uno stesso programma ben featto che il programmatore ha sospeso scritto in con comandi In italiano e genera un file con comandi in python ,il progetto si chiamava Lungo
@GiovanniPerdicaro
@GiovanniPerdicaro Месяц назад
Riguardo la lampada, potresti usare un colore diverso per ogni rubrica
@TimelessX974
@TimelessX974 Месяц назад
io ho TIM 2.5Gb in FTTH ma tuttora il router TIM HUB anche se é ATTIVO il supporto alla connessione IPV6 non gli viene assegnato nessun ip in formato v6 ma si congela sempre in ip v4. Poi ho molti se non tutti i dispositivi di domotica acquistati negli ultimi 2 anni che sono solo ipv4. Secondo Te se arriverà questo fantomatico IP v6 si potrá connettersi alla infrastruttura di Internet in IP V6 e poi Nattare in IP V4 sulla rete locale ? o devono essere entrambe le reti in IPV6 ?
@iuciubbb
@iuciubbb Месяц назад
Lo dico da esperto di sistemi informatici con a casa una FTTH DSLite. Cosa vuol dire DSLite? Sostanzialmente che il supporto dual stack (IPv4+6) è limitato per la parte IPv4 al CGNAT, ossia condividi lo stesso IP pubblico anche con altre utenze e la tua connessione riceve un indirizzo privato nel blocco 100.64.0.0/10. Tutto bene fin quando non hai dispositivi ai quali accedere da fuori, con CGNAT puoi scordartelo. Se i tuoi dispositivi di domotica richiedono accesso esterno e non sono dual stack, hai bisogno della mappatura delle porte da IPv6. Puoi sottoscrivere un servizio per una piccola somma annua oppure fare da te affittando un piccolo server virtuale ed installandoci sopra un servizio reverse proxy o tunnel 6to4 (quest'ultima è anche la maniera in cui le reti IPv4 sono accessibili da IPv6). Questo oltre a sottoscrivere un servizio DNS dinamico nel caso l'operatore cambi il prefisso IPv6 ogni notte.