Conoscenza attraverso l'informatica
Giovani alunni cercano di diffondere informazioni e le proprie conoscenze informatiche
27 gen 2016
PHP
Il PHP (PHP Hipertext Processor) è nato nel 1994 ad opera del programmatore danese Rasmus Ledrof. Esso è un linguaggio di scripting integrato con linguaggio molto simile al C e viene distribuito con licenza open surce specifica. Originariamente concepito per la programmazione di pagine web dinamiche, è attualmente utilizzato principalmente per sviluppare applicazioni web lato server. L'esecuzione del codice PHP sul server produce codice HTML da inviare al browser client che ha richiesto la pagina. Molti siti famosi sono stati scritti in PHP : Wikipedia, Facebook, Flickr, Drupal... Inoltre è il linguaggio utilizzato per molti sistemi CMS come Joomla, Wordpress e Drupal.
PHP riprende per molti versi la sintassi del C e del Perl. È un linguaggio a tipizzazione debole e dalla versione 5 migliora il supporto al paradigma di programmazione ad oggetti. Certi costrutti derivati dal C permettono in alcuni casi di agire a basso livello; tuttavia è fondamentalmente un linguaggio di alto livello, caratteristica questa rafforzata dall'esistenza delle sue moltissime API, oltre 3.000 funzioni del nucleo base. PHP è in grado di interfacciarsi a innumerevoli database tra cui MySQL, PostgreSQL, MariaDB, Oracle, Firebird, IBM DB2, Microsoft SQL Server solo per citarne alcuni tra cui anche database NoSql come per esempio MongoDB, e supporta numerose tecnologie, come XML, SOAP, IMAP, FTP, CORBA. Si integra anche con altri linguaggi/piattaforme quali Java e .NET e si può dire che esista un wrapper per ogni libreria esistente, come CURL, GD, Gettext, GMP, Ming, OpenSSL ed altro. Fornisce un'API specifica per interagire con Apache, nonostante funzioni naturalmente con numerosi altri server web. È anche ottimamente integrato con il database MySQL, per il quale possiede più di una API. Per questo motivo esiste un'enorme quantità di script e librerie in PHP, disponibili liberamente su Internet. La versione 5, comunque, integra al suo interno un piccolo database embedded, SQLite. Dispone di un archivio chiamato PEAR che mette a disposizione un framework di librerie riusabili per lo sviluppo di applicazioni PHP e di PECL che raccoglie tutte le estensioni conosciute scritte in C. PHP non ha ancora un supporto nativo per le stringhe Unicode o multibyte.
30 set 2015
Tim Berners-Lee
Sir
Timothy John Berners-Lee è un informatico britannico,
co-inventore insieme a Robert
Cailliau del World Wide Web.
Nel
1976 si laureò in fisica al The Queen's College dell'Università
di Oxford, dove, in seguito, costruì il suo primo computer.
Successivamente trascorse due anni alla Plessey
Telecommunications Ltd, per passare nel 1978
alla D.G Nash Ltd.
Nel
1980 trascorse sei mesi al CERN come consulente nel
campo dell'ingegneria del software. Lì realizzò, per uso interno
nella diffusione di informazioni fra i diversi centri del CERN, il
primo software per immagazzinare informazioni usando associazioni
casuali: Enquire. Tale prototipo, mai pubblicato, formerà la
base concettuale per il futuro sviluppo del World Wide Web.
Dal
1981 al 1984 lavorò al John Poole's Image Computer
Systems Ltd. Nel 1984 ritornò al CERN con una borsa di studio
per lavorare sui sistemi distribuiti real-time per l'acquisizione di
dati scientifici e sistemi di controllo.
Nel
1989 propose un progetto globale sull'ipertesto, poi noto come
World Wide Web.
Tim
Berners-Lee ha coniato il nome di World Wide Web , ha scritto il
primo server per il World Wide Web, httpd, e il primo
client, WorldWideWeb, nell'ottobre del 1990. Ha scritto
inoltre la prima versione del linguaggio di formattazione di
documenti con capacità di collegamenti ipertestuali conosciuto come
HTML.
Nel 1993 lasciò il
CERN per il LCS del prestigioso Massachusetts Institute of
Technology di Boston, presso cui nel 1994 fondò il World
Wide Web Consortium.
IPERTESTO
Un ipertesto è un insieme di documenti messi in relazione tra loro per mezzo di parole chiave. Può essere visto come una rete; i documenti ne costituiscono i nodi. La caratteristica principale di un ipertesto è che la lettura può svolgersi in maniera non lineare: qualsiasi documento della rete può essere "il successivo", in base alla scelta del lettore di quale parola chiave usare come collegamento. All'interno dell'ipertesto sono possibili praticamente infiniti percorsi di lettura.
L'ipertesto informatico è la versione di ipertesto più usata e più diffusa oggi. Il computer ha automatizzato il passaggio da un documento all'altro. I documenti sono leggibili a video grazie a un'interfaccia elettronica, le parole chiave in esso contenute appaiono marcate in maniera da renderle riconoscibili.
Dopo la nascita del World Wide Web l'ipertesto ha avuto un notevolissimo sviluppo. Tutto il web, infatti, è stato concepito dal suo inventore, l'inglese Tim Berners-Lee, come un ipertesto globale in cui tutti i siti mondiali possono essere consultati da tutti. La pagina web è il singolo documento e la "navigazione" è il passaggio da un sito all'altro tramite i "link". Il World wide web utilizza il linguaggio HTML per definire all'interno del testo istruzioni codificate per il suo funzionamento. Se una pagina del web contiene informazioni su una parola utilizzata su un nuovo documento HTML è possibile creare un legame, chiamato collegamento ipertestuale, tra questo nuovo documento e la pagina già esistente.
STORIA: Nel 1945 l'ingegnere americano Vannevar Bush scrisse un articolo intitolato Come potremmo pensare nel quale descriveva un sistema di informazione interconnesso chiamato Memex. Molti esperti non considerano tuttavia il Memex un vero e proprio sistema ipertestuale. Nonostante ciò, il Memex è considerato la base degli ipertesti perché il saggio di Vannevar Bush influenzò direttamente Ted Nelson e Douglas Engelbart, universalmente riconosciuti come gli inventori dell'ipertesto.
Nel 1980 il programmatore Bill Atkinson realizzò per la Apple HyperCard, un'applicazione software che gestiva in maniera semplice grandi quantità di informazioni sotto forma di testo o di immagini, dotato di un avanzato linguaggio di programmazione ipertestuale, HyperTalk. Malgrado fosse disponibile solo per la piattaforma MacOS, HyperCard divenne uno dei più diffusi sistemi di realizzazione di ipertesti prima dell'avvento del World Wide Web.
Nel 1989 Tim Berners-Lee, ricercatore inglese del CERN, inventò il World Wide Web con l'intento di dare una risposta alla necessità espressa dalla comunità scientifica di un sistema di condivisione delle informazioni tra diverse università e istituti di tutto il mondo. All'inizio del 1993 il NCAS all'Università dell'Illinois rese pubblica la prima versione del loro browser Mosaic. Mosaic girava in ambiente X Window, popolare nella comunità scientifica, e offriva un'interfaccia di facile utilizzo. Il traffico web esplose, passando da soli 500 web server noti nel 1993 a oltre 10mila nel 1994 dopo la pubblicazione della versione che girava sia in ambiente Windows che MacOS.
SAPEVATE CHE...
- Alcuni pesci abissali sono dotati di organi bioluminescenti con cui attraggono le prede.
- La scimmia antropomorfa di più grandi dimensioni è il gorilla di pianura con un'altezza massima di 1,75m e un peso di 200Kg.
- Il nome americano della lampuga, un grosso pesce pelagico, è dolphinfish, spesso abbreviato in dolphin (delfino), cosa che ha tratto in inganno molti traduttori.
- In rapporto al peso, il colibrì è l'uccello che ha la più grande apertura alare.
- Al mondo sono pesenti un centinaio di specie di lemuri, diffuse unicamente in Madagascar, l'unico posto al mondo dove non hanno subito la concorrenza degli altri primati.
- La funzione della testa degli squali martello rimane tuttora un mistero, ma l'ipotesi più accreditata è che serva per orientarsi mediante il campo magnetico terrestre e per captare gli impulsi elettrici emessi dalle prede in movimento.
- Il rospo marino, o delle canne, è il più grande della sua famiglia. Il più grande di cui si ha notizia misurava 38cm per un peso di 2,65Kg.
- Grazie alla sua grande capacità di adattamento il piccione è considerato l'uccello più resistente al mondo.
- Il periodo di gestazione di un elefante può durare più di 600 giorni.
- La megalania è un varano gigante vissuto in Australia fino a 40.000 anni fa (all'incirca il periodo dell'arrivo dei primi uomini sul continente) e, secondo alcune stime, poteva raggiungere la lunghezza di 8m.
- Il pinguino imperatore è il più grande tra tutti i pinguini e raggiunge un'altezza di 1,15m per un peso massimo di 47kg.
- In virtù dei curiosi versi che emette, il beluga è conosciuto anche come canarino di mare.
- Il tuatara è l'unico rappresentante vivente degli sfenodonti, un gruppo di rettili apparsi 225 milioni di anni fa (durante il triassico), ed è attualmente considerato il rettile vivente più antico.
- Delle 18 specie di pinguini 12 vivono in antartide e nelle acque circostanti. Le restanti vivono in Sud America (2 specie), Galapagos (1 specie), Australia e Nuova Zelanda (2 specie) e Sudafrica(1 specie).
- Il capodoglio è il più grande animale vivente munito di denti e raggiunge una lunghezza di 18m per un peso di 50 tonnellate. I suoi denti possono raggiungere la lunghezza di 20cm.
- Il merlo ha la capacità di imparare a memoria qualsiasi melodia per poi ripeterla fino alla noia.
- Il "test dell'alce" viene eseguito per verificare la stabilità di una vettura nel caso di attraversamento della strada da parte di animali selvatici.
- Nel 2004, un orso nero selvatico venne trovato ubriaco dopo aver bevuto 36 lattine di birra, rubate dalla ghiacciaia di un camper, nello stato di Washington.
- Le anguille elettriche, dei pesci diffusi nei bacini fluviali del Sud America, sono considerati alcuni degli animali più pericolosi delle foreste sudamericane, data la loro capacità di generare scariche elettriche fino a 500 volt, in grado di uccidere un uomo adulto sano.
- Contrariamente a quanto si pensa il morso della vipera difficilmente è letale per un uomo adulto (a cui causa cefalea, nausea, vomito, dolori addominali, agitazione e alterazione della coagulazione). Sono a rischio invece i bambini, le persone con cardiopatie e malattie debilitanti.
- È detto grooming il comportamento osservato in diversi primati per cui un animale ripulisce un suo simile dai parassiti. Quest'azione serve anche a rafforzare i legami sociali, a creare alleanze e a risolvere dispute.
8 mag 2015
RICORSIONE
In informatica viene detto algoritmo ricorsivo un algoritmo
espresso in termini di se stesso, ovvero in cui l'esecuzione
dell'algoritmo su un insieme di dati comporta la semplificazione o
suddivisione dell'insieme di dati e l'applicazione dello stesso
algoritmo agli insiemi di dati semplificati.
Tale tecnica risulta particolarmente utile per eseguire dei compiti ripetitivi su di un set di variabili in input. L'algoritmo richiama se stesso generando una sequenza di chiamate che ha termine al verificarsi di una condizione particolare che viene chiamata condizione di terminazione, che in genere si ha con particolari valori di input.
La tecnica ricorsiva permette di scrivere algoritmi eleganti e sintetici per molti tipi di problemi comuni, anche se non sempre le soluzioni ricorsive sono le più efficienti. Questo è dovuto al fatto che comunemente la ricorsione viene implementata utilizzando le funzioni, e che l'invocazione di una funzione ha un costo rilevante, e questo rende più efficienti gli algoritmi iterativi.
In alcuni casi la ricorsione è altrettanto efficiente di un ciclo iterativo: linguaggi dei paradigmi funzionali o logici tipicamente non hanno il concetto di ciclo ed usano la ricorsione ottimizzando automaticamente.
n! = (1 * 2 * 3 * ...... * n-1) * n;
n! = (n-1)! * n;
ESEMPIO DI CODICE:
ECCO LE VARIE TIPOLOGIE DI RICORSIONE:
Esistono vari tipi di ricorsione. Si parla di mutua ricorsione quando nell'algoritmo una funzione ne richiama un'altra che a sua volta richiama la prima, altrimenti si parla di ricorsione diretta.
Altra distinzione è quella fra ricorsione lineare, che si ha quando vi è solo una chiamata ricorsiva all'interno della funzione, e non lineare nel caso in cui le chiamate ricorsive siano più di una.
La distinzione più importante ai fini pratici si ha fra ricorsione di coda (tail recursion) e ricorsione non di coda. Si parla di ricorsione di coda quando la chiamata ricorsiva è l'ultima istruzione eseguita nella funzione. Questo tipo di algoritmo ricorsivo è possibile trasformarlo semplicemente in una versione iterativa, che di solito è più efficiente, in quanto non occorre mantenere lo stato della funzione una volta calcolata come è stato fatto nell'esempio precedente. Se l'algoritmo non è ricorsivo di coda, per trasformarlo in una versione iterativa occorre utilizzare un meccanismo di mantenimento dello stato analogo a quello che è utilizzato implicitamente nelle chiamate di funzione.
Ecco qui un video che ci aiuterà a capire: link
Qui si può trovare un PDF sulla ricorsione: link
Tale tecnica risulta particolarmente utile per eseguire dei compiti ripetitivi su di un set di variabili in input. L'algoritmo richiama se stesso generando una sequenza di chiamate che ha termine al verificarsi di una condizione particolare che viene chiamata condizione di terminazione, che in genere si ha con particolari valori di input.
La tecnica ricorsiva permette di scrivere algoritmi eleganti e sintetici per molti tipi di problemi comuni, anche se non sempre le soluzioni ricorsive sono le più efficienti. Questo è dovuto al fatto che comunemente la ricorsione viene implementata utilizzando le funzioni, e che l'invocazione di una funzione ha un costo rilevante, e questo rende più efficienti gli algoritmi iterativi.
In alcuni casi la ricorsione è altrettanto efficiente di un ciclo iterativo: linguaggi dei paradigmi funzionali o logici tipicamente non hanno il concetto di ciclo ed usano la ricorsione ottimizzando automaticamente.
0! = 1;
n! = 1 * 2 * 3 * ...... * n-1 * n; per n > 0.
Rielaborando:
n! = (1 * 2 * 3 * ...... * n-1) * n;
n! = (n-1)! * n;
ESEMPIO DI CODICE:
int FATTiterativo (int n)
{
int fatt = 1;
while (1 <= n)
{
fatt = fatt * n;
n --;
}
return fatt;
}
ECCO LE VARIE TIPOLOGIE DI RICORSIONE:
Esistono vari tipi di ricorsione. Si parla di mutua ricorsione quando nell'algoritmo una funzione ne richiama un'altra che a sua volta richiama la prima, altrimenti si parla di ricorsione diretta.
Altra distinzione è quella fra ricorsione lineare, che si ha quando vi è solo una chiamata ricorsiva all'interno della funzione, e non lineare nel caso in cui le chiamate ricorsive siano più di una.
La distinzione più importante ai fini pratici si ha fra ricorsione di coda (tail recursion) e ricorsione non di coda. Si parla di ricorsione di coda quando la chiamata ricorsiva è l'ultima istruzione eseguita nella funzione. Questo tipo di algoritmo ricorsivo è possibile trasformarlo semplicemente in una versione iterativa, che di solito è più efficiente, in quanto non occorre mantenere lo stato della funzione una volta calcolata come è stato fatto nell'esempio precedente. Se l'algoritmo non è ricorsivo di coda, per trasformarlo in una versione iterativa occorre utilizzare un meccanismo di mantenimento dello stato analogo a quello che è utilizzato implicitamente nelle chiamate di funzione.
Ecco qui un video che ci aiuterà a capire: link
Qui si può trovare un PDF sulla ricorsione: link
16 gen 2015
numero aureo
public static void main(String[] args) {
int n = 11;
int f[] = new int[n];
fibonacci(f);
double a[] = new double[n];
aureo(f,a);
}
public static void fibonacci(int f[]) {
f[0] = 1;
f[1] = 1;
for (int i = 2; i < f.length; i++) {
f[i] = f[i - 2] + f[i - 1];
}
for (int i = 0; i < f.length; i++) {
System.out.println("nf " + f[i]);
}
}
public static void aureo(int f[], double a[]) {
for (int i = 1; i < a.length; i++) {
a[i] = (double)f[i] / f[i - 1];
}
for (int i = 0; i < a.length; i++) {
System.out.println("na " + a[i]);
}
}
}
int n = 11;
int f[] = new int[n];
fibonacci(f);
double a[] = new double[n];
aureo(f,a);
}
public static void fibonacci(int f[]) {
f[0] = 1;
f[1] = 1;
for (int i = 2; i < f.length; i++) {
f[i] = f[i - 2] + f[i - 1];
}
for (int i = 0; i < f.length; i++) {
System.out.println("nf " + f[i]);
}
}
public static void aureo(int f[], double a[]) {
for (int i = 1; i < a.length; i++) {
a[i] = (double)f[i] / f[i - 1];
}
for (int i = 0; i < a.length; i++) {
System.out.println("na " + a[i]);
}
}
}
12 gen 2015
Fibonacci
public static void main(String[] args) {
int f[]=new int [11];
f[0]=1;
f[1]=1;
for (int i=2; i<f.length;i++){
f[i]=f[i-2]+f[i-1];
}
for (int i=0; i<f.length;i++){
System.out.println(f[i]);
}
}
}
int f[]=new int [11];
f[0]=1;
f[1]=1;
for (int i=2; i<f.length;i++){
f[i]=f[i-2]+f[i-1];
}
for (int i=0; i<f.length;i++){
System.out.println(f[i]);
}
}
}
Iscriviti a:
Post (Atom)