Quante volte in questi ultimi mesi abbiamo sentito parlare di AJAX?
In effetti molti articoli che ho letto presuppongono una qualche conoscenza di AJAX stesso o comunque una buona conoscenza da parte dei lettori delle tecnologie alla sua base, ad esempio Javascript.
Ho avuto la sensazione che AJAX sia percepito dai neofiti come una cosa per soli programmatori esperti e quindi ho pensato di scrivere un articolo per cercare di aiutare coloro che si avvicinano a questo mondo per la prima volta permettendogli di scrivere le loro prime semplici applicazioni.
Sperando di riuscire nel mio intento vi auguro buona lettura.
How create a single page apps using html5 and javascript Stefano Marchisio
Create a html5/javascript apps with mvc/ajax using knockout.js/mvvm. Javascript to IQueryable is a framework that allows you to write a simple query in javascript client side and then execute it server side with EntityFramework or a linq provider that implement IQueryable. On the server is used "Dynamic Expressions and Queries in LINQ by Microsoft" to compose dynamically your query. In this way you can create a grid with filter, paging and sort functions. There is also support for: mvc3 unobtrusive jquery validation and jquery mobile/phonegap. - http://Javascriptiqueryable.codeplex.com - http://www.youtube.com/watch?v=qjwyKwsXHKs - http://www.linqitalia.com/articoli/entity-framework/sfruttare-javascript-eseguire-query-linq-server-tramite-dynamic-iqueryable.aspx
Quante volte in questi ultimi mesi abbiamo sentito parlare di AJAX?
In effetti molti articoli che ho letto presuppongono una qualche conoscenza di AJAX stesso o comunque una buona conoscenza da parte dei lettori delle tecnologie alla sua base, ad esempio Javascript.
Ho avuto la sensazione che AJAX sia percepito dai neofiti come una cosa per soli programmatori esperti e quindi ho pensato di scrivere un articolo per cercare di aiutare coloro che si avvicinano a questo mondo per la prima volta permettendogli di scrivere le loro prime semplici applicazioni.
Sperando di riuscire nel mio intento vi auguro buona lettura.
How create a single page apps using html5 and javascript Stefano Marchisio
Create a html5/javascript apps with mvc/ajax using knockout.js/mvvm. Javascript to IQueryable is a framework that allows you to write a simple query in javascript client side and then execute it server side with EntityFramework or a linq provider that implement IQueryable. On the server is used "Dynamic Expressions and Queries in LINQ by Microsoft" to compose dynamically your query. In this way you can create a grid with filter, paging and sort functions. There is also support for: mvc3 unobtrusive jquery validation and jquery mobile/phonegap. - http://Javascriptiqueryable.codeplex.com - http://www.youtube.com/watch?v=qjwyKwsXHKs - http://www.linqitalia.com/articoli/entity-framework/sfruttare-javascript-eseguire-query-linq-server-tramite-dynamic-iqueryable.aspx
jQuery è un framework javascript che permette di semplificare la scrittura di codice javascript, facilitando l'iterazione con gli elementi della pagina (controlli, stili, eventi, animazioni, ...), e permettendo di aumentare la user experience delle applicazioni, riducendone al tempo stesso la complessità di scrittura. Vista la sua diffusione e potenza, è stato anche incluso nei project templete di Visual Studio. In questa sessione vedremo cos'è jQuery, e scopriremo le potenzialità e funzionalità che offre, verificando se il motto "write less do more" sia vero o meno.
Come aggiornare i dati di una tabella relazionale prima di chiavi straniere. Le quattro operazioni fondamentali. CRUD. Visualizzare una lista di righe della tabella relazionale, inserire una nuova riga, ricercare un record conoscendo la sua chiave primaria. Modificare e annullare
The HTTP protocol was created in 1990 and led to the establishment of the World Wide Web by English physicist Tim Berners-Lee. It led to what is now the world's most used language, HTML (Hyper Text Markup Language). HTML5 is being developed as the next major revision of HTML: what is it about? What will it change?
Da un po' di tempo a questa parte quando uno sviluppatore software sente la parola "Clouds" non pensa più alle nuovole, ma a...? Durante l'intervento risponderò a questa domanda e mostrerò come una applicazione web sviluppata con Spring Framework, Apache Maven e OpenJPA può essere installata facilmente e (quasi)gratuitamente sulla piattaforma per il cloud computing messa a disposizione da Google.
Il codice di esempio della presentazione lo trovate su: http://code.google.com/p/gae-javaday10/
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0 Andrea Volpini
La presentazione è focalizzata sulle tecniche di SEO Semantico, sull'importanza di curare i propri dati e sul nuovo algoritmo di ricerca di Google denominato Hummingbird.
Il colibrì, in inglese hummingbird, è un uccello particolarmente veloce e preciso; nel mondo dei motori di ricerca il cambiamento introdotto da questo nuovo algoritmo è epocale. Google inizia a riconoscere, usando l'analisi del linguaggio (NLP), l'intento di chi effettua la ricerca e fornisce delle risposte puntuali al posto della tradizionale lista di link.
In questo nuovo scenario diventa importante "curare" oltre che i propri contenuti anche i dati ad essi associati.
WordLift, un plugin per WordPress (presto disponibile nella sua terza release), ci consente di pubblicare i nostri contenuti come Linked Open Data e li "collega" con il Knowledge Graph di Google (la base di conoscenza che Google utilizza per "rispondere" alle domande degli utenti").
Le slide, realizzate da Kim Renberg ed Andrea Volpini, sono state presentate al Meetup di WordPress a Roma (#wproma su Twitter).
jQuery è un framework javascript che permette di semplificare la scrittura di codice javascript, facilitando l'iterazione con gli elementi della pagina (controlli, stili, eventi, animazioni, ...), e permettendo di aumentare la user experience delle applicazioni, riducendone al tempo stesso la complessità di scrittura. Vista la sua diffusione e potenza, è stato anche incluso nei project templete di Visual Studio. In questa sessione vedremo cos'è jQuery, e scopriremo le potenzialità e funzionalità che offre, verificando se il motto "write less do more" sia vero o meno.
Come aggiornare i dati di una tabella relazionale prima di chiavi straniere. Le quattro operazioni fondamentali. CRUD. Visualizzare una lista di righe della tabella relazionale, inserire una nuova riga, ricercare un record conoscendo la sua chiave primaria. Modificare e annullare
The HTTP protocol was created in 1990 and led to the establishment of the World Wide Web by English physicist Tim Berners-Lee. It led to what is now the world's most used language, HTML (Hyper Text Markup Language). HTML5 is being developed as the next major revision of HTML: what is it about? What will it change?
Da un po' di tempo a questa parte quando uno sviluppatore software sente la parola "Clouds" non pensa più alle nuovole, ma a...? Durante l'intervento risponderò a questa domanda e mostrerò come una applicazione web sviluppata con Spring Framework, Apache Maven e OpenJPA può essere installata facilmente e (quasi)gratuitamente sulla piattaforma per il cloud computing messa a disposizione da Google.
Il codice di esempio della presentazione lo trovate su: http://code.google.com/p/gae-javaday10/
Semantic SEO nell’Era Post Hummingbird e WordLift 3.0 Andrea Volpini
La presentazione è focalizzata sulle tecniche di SEO Semantico, sull'importanza di curare i propri dati e sul nuovo algoritmo di ricerca di Google denominato Hummingbird.
Il colibrì, in inglese hummingbird, è un uccello particolarmente veloce e preciso; nel mondo dei motori di ricerca il cambiamento introdotto da questo nuovo algoritmo è epocale. Google inizia a riconoscere, usando l'analisi del linguaggio (NLP), l'intento di chi effettua la ricerca e fornisce delle risposte puntuali al posto della tradizionale lista di link.
In questo nuovo scenario diventa importante "curare" oltre che i propri contenuti anche i dati ad essi associati.
WordLift, un plugin per WordPress (presto disponibile nella sua terza release), ci consente di pubblicare i nostri contenuti come Linked Open Data e li "collega" con il Knowledge Graph di Google (la base di conoscenza che Google utilizza per "rispondere" alle domande degli utenti").
Le slide, realizzate da Kim Renberg ed Andrea Volpini, sono state presentate al Meetup di WordPress a Roma (#wproma su Twitter).
SOFTWARE LIBERO e NON
DIRITTI E DOVERI
GLI SVILUPPI DEL SOFTWARE LIBERO E I CONTRASTI CON QUELLO COMMERCIALE
PIRATERIA
LEGGE 248 AGOSTO 2000
PREVENZIONE E RESPONSABILITÀ PER L'ABUSIVA DUPLICAZIONE
DEL SOFTWARE ALL'INTERNO DELL'AZIENDA
The document outlines the lean startup approach for starting a business. It discusses how the traditional startup process can involve months or years of guessing and high risks of failure. The lean startup approach advocates building minimal viable products and using customer feedback and data to test assumptions and pivot if needed, reducing costs and risks compared to traditional guessing. Examples of companies that used this approach, like Google and Facebook, are provided.
The London Underground, also known as the Tube, is the oldest underground railway system in the world. It has over 270 stations and 11 lines spanning more than 400 km. While the first underground train opened in 1863, much of the network was constructed over 100 years ago and requires extensive maintenance. Technological challenges included building tunnels near historical structures without damage and addressing water issues near the river Thames. The Underground also played an important role as a bomb shelter during World War II and its iconic map design helped popularize the system.
implementazione sistema di tipi (strutture di messaggi xml) e controllo conformità in JOLIE, un nuovo linguaggio open source per realizzare applicazioni distribuite nella rete
1. S.P.R.I.T.e. Magazine VI
S.P.R.I.Te.MagazineS.P.R.I.Te.Magazine VIVI
Bimensile gratuito - Associazione studentesca S.P.R.I.Te.
C.d.l. In Scienze dell'Informazione – Cesena
Numero 6 – anno 2007
SOMMARIOSOMMARIO
Ajax articolo numero 2 - Demo 2
Welcome Day CSR - Tommaso
Dionigi
5
wxWidgets e wxDevC++ - Elvis
Ciotti
6
Development day 8
Last.fm, the social music
revolution - Matteo Battistelli
8
“Stay hungry. Stay foolish.” by
Steve Jobs - Venturi Filippo
10
Enigmi matematici e soluzioni 13
Streamtuner – Matteo Lupini 15
Eccoci qua !
S.P.R.I.Te. Magazine è il giornalino della nostra associazione nel quale
parliamo dei nostri progetti, attività, argomenti inerenti il nostro c.d.l. e non
solo.
Per chi già non ci conoscesse, l'associazione S.P.R.I.Te. è composta di
studenti volenterosi che offrono il loro aiuto per creare tutto quello che non è
normalmente offerto agli studenti: servizio fotocopie e dispense,
organizzazione feste, gestione sala Albatros, buffet di benvenuto alle
matricole, linux/development-day, ecc...
Per consultare l'elenco completo dei progetti/attività consulta il nostro sito
http://sprite.csr.unibo.it/
Se ti senti coinvolto e vuoi darci una mano, scrivere un articolo per questo
giornalino o proporre idee, contattaci all'indirizzo e-mail
sprite@sprite.csr.unibo.it, oppure vieni a trovarci negli orari di apertura,
siamo nell'atrio della sede del c.d.l. , accanto all'aula E.
S.P.R.I.Te.
Ricordiamo i prossimi eventi ai quali non puoi assolutamente mancare:
• Mar 23 Ottobre – Vidia Club (S.Vittore): Festa delle matricole 07 [pag 3]
• Ven 26 Ottobre – Aule Scienze dell'Informazione: Development day 07 [pag 4]
23 OTTOBRE
Festa delle matricole 2007
[PAG 4]
26 OTTOBRE 07
Development Day
[PAG 8]
scherzo alle matricole e
Welcome Day S.P.R.I.Te.
[PAG. 5]
PAG 1
2. S.P.R.I.T.e. Magazine VI
Ajax articolo numero 2
di Demo <sensorario@gmail.com>
Nello scorso numero ho introdotto Ajax e vi ho mostrato
un semplice esempio di codice su come è nato e quale era
una delle sue prime implementazioni. Dall'introduzione
dei frameset e degli iframe ci sono stati un po' di
cambiamenti. Vari browser hanno iniziato ad
implementare diverse soluzioni per dare a Javascript il
“potere” di effettuare chiamate GET e/o POST in
background. Senza tornare troppo nel dettaglio, in questo
numero introdurrò due nuovi concetti senza discostarmi
troppo da quanto detto nel precedente articolo.
1) XMLHttpRequest / ActiveXObject(Microsoft.XMLHTTP)
2) PHP5 & XML (rss)
Con il primo elimineremo un sacco di codice sia
javascript che html al fine di rendere le nostre pagine
sempre più leggere, e capaci di sfruttare le potenzialità di
ajax. Di per se pochi kb in una pagina non fanno la
differenza ma un milione di siti per un pugno di kb di
traffico in meno per ogni pagina che viene vista... Se tutti
gli sviluppatori fossero più consapevoli nel creare le
proprie applicazioni ne gioverebbe tutta la rete.
Con il secondo introdurremo e vedremo in maniera
assolutamente periferica, come php5 consente di
interagire con lo standard rss.
sprite.html
<html>
<head>
<script language="JavaScript" src="caricaFeed.js"></script>
</head>
<body onload="javascript:caricaFeed('elfo', 'sprite.php');">
<div id="elfo">Sto caricando ...</div>
</body>
</html>
Tutto il codice HTML della volta scorsa è scomparso. Per
chi non avesse letto lo scorso numero il pattern utilizzato
prevedeva l'utilizzo di un'applicazione a frame. In un
frame con altezza 0% venivano caricate le pagine (essendo
questo frame nascosto) che andavano a riempire la pagina
principale nel frame con altezza impostata al 100%.
Diciamo che lo spazio occupato ora è almeno un terzo o
addirittura un quarto.
In questo documento HTML ci sono 3 cose da notare.
Per prima la chiamata ad un file .js che ho chiamato
caricaFeed.js. La seconda è la chiamata alla funzione
caricaFeed(); non appena il documento è stato caricato
(<body ... onload=””>). Terzo è l'elemento <div id=”elfo”
/>.
Come nell'esempio scorso, mi piace spiegare i miei script
esattamente per come si comportano:
Il browser ha caricato sprite.html, ha incluso un
file javascript, e quando finisce di caricare tutto il
documento si genera l'evento onload e il tag body fa si che
venga richiamata la funzione caricaFeed('elfo',
'sprite.php');. Andiamo a vedere che cosa fa questa
funzione (che ci tengo a sottolineare è l'unica presente in
questo esempio: a dimostrazione del fatto che ajax può
ridurre notevolmente il “peso” e/o la “leggibilità” di
un'applicazione web).
caricaFeed.js
function caricaFeed(id, pagina)
{
if(window.XMLHttpRequest)
req = new XMLHttpRequest();
else if (window.ActiveXObject)
req = new ActiveXObject(Microsoft.XMLHTTP);
req.onreadystatechange = function()
{
if(req.readyState == 4)
if(req.status == 200)
document.getElementById(id).innerHTML = req.responseText;
};
var today = new Date();
var strDateOut = today.getFullYear() + today.getMonth()
+ today.getDate() + today.getMinutes()
+ today.getSeconds();
PAG 2
3. S.P.R.I.T.e. Magazine VI
req.open("GET", pagina + "?" + strDateOut, true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(null);
}
Specifichiamo subito che questa funzione vuole due
argomenti:
1) id dell'elemento nella pagina html
2) la pagina da caricare in background
In primo luogo (chiedo venia se ho omesso commenti
direttamente nel codice), viene creato l'oggetto in grado di
leggere la struttura DOM (Document Object Model) che si
vuole caricare. Dovete sapere che IE e FF hanno due
implementazioni differenti per la gestione delle richieste
HTTP con Javascript (ma va ...).
Per creare un parser controlliamo se esiste
window.XMLHttpRequest. Questo è il nome dell'oggetto
su FF. Beh, ovviamente c'è ancora quel “sempre troppo”
percento dell'utenza che si ostina ad utilizzare IE. In quel
caso l'XMLHttpRequest non esisterà e quindi noi
andremo a creare un controllo ActiveX con
window.ActiveXControl(Microsoft.XMLHTTP). In questo
articolo non voglio entrare nel dettaglio del
funzionamento delle implementazioni di Microsoft o di
altri standard, mi limiterò a dire che hanno punti in
comune.
Teniamo presente che questo oggetto caricherà una
pagina in background, questo caricamento attraverserà
diverse fasi che scaturiranno degli eventi. In particolare
noi possiamo andare a gestire il “momento”
onreadystatechange.
Ogni volta che cambia lo stato di questo oggetto si
controlla se lo stato è 4 (finished) ed a quel punto si
controlla che lo stato sia 200. Se lo stato dovesse essere
404 avremo una situazione di “page not found”. Appurato
il fatto che il nostro documento in background è stato
caricato, ne preleviamo il testo reperibile dall'attributo
responseText. A questo punto lo possiamo
tranquillamente “schiaffare” dove vogliamo. Per come ho
scritto questa funzione, la nostra pagina andrà a caricare
l'elemento passato come argomento: nel nostro caso
“elfo”.
I più attenti noteranno un codice strano:
caricaFeed.js
...
var today = new Date();
var strDateOut = today.getFullYear() + today.getMonth()
+ today.getDate() + today.getMinutes()
+ today.getSeconds();
req.open("GET", pagina + "?" + strDateOut, true);
...
Questo codice assurdo, serve per evitare che IE carichi la pagina in background dalla cache. Se notate viene aggiunta
alla pagina php una querystring il cui valore sarà al 99.9% sempre diverso. Questo fa credere ad IE che le richieste
sono diverse e caricherà nuovamente la pagina in questione.
Adesso è il turno della pagina php. Che cosa farà mai questa pagina?
sprite.php
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('http://punto-informatico.it/fader/pixml.xml');
$xp = new DOMXPath($xmldoc);
$xml = $xp->query("//rss/channel/item/title");
foreach ($xml as $node) {
print $node->textContent.'<br>';
}
?>
Questa è una pagina semplicissima. Anche qui ci sarebbe
da estendere ancora di più questo articolo e parlare
meglio del DOM xml con php, poi... Xpath. Eheheh le cose
da dire sarebbero davvero tante.
Limitiamoci a dire che in questo documento viene creato
un oggetto DOMDocument il cui costruttore altro non fa
che allocare la memoria per contenere un file XML. Il
documento può essere interno o appartenente ad un sito
PAG 3
4. S.P.R.I.T.e. Magazine VI
esterno. Infatti nella riga successiva si nota che l'XML
caricato fa riferimento al sito di punto-informatico.
Il costruttore della classe DOMXPath, invece, prende
come parametro l'oggetto della classe DOMDocument che
contiene il documento XML, e ne crea uno nuovo che può
essere interrogato con Xpath. La riga successiva carica
tutti i titoli dell'rss. Un semplice foreach se li scorre tutti e
mostra il contenuto del nodo title.
Fine =)
-Per domande e chiarimenti
-GMAIL sensorario at gmail.com
-ICQ 55493398
-MSN knottyboy at hotmail.it
-MYSPACE http://www.myspace.com/knottyboybox
Festa delle matricole 2007
PAG 4
5. S.P.R.I.T.e. Magazine VI
Welcome Day CSR: una giornata a base di S.P.R.I.Te.!
Il primo giorno di scuola: di nuovo!
Di Tommaso Dionigi <info@tommaso.dionigi.name>
Ormai abituato a “primi giorni di scuola” la
preoccupazione e l’ansia sono ridotte al minimo.
Probabilmente un ambiente nuovo ti non emoziona più
come i banchi, gli odori, i colori di quella prima
elementare di tanti anni fa.
Allora arrivi tranquillo, cercando di riabituarti alla
sveglia che suona in linea con gli orari della “gente
normale”, orari abbandonati a giugno, quando saltando
l’ostacolo dell’esame di maturità ti avviavi con passo
deciso verso quella che capirai presto essere l’ultima vera
e lunga vacanza degli anni di scuola.
Si arriva presto oggi, il “quarto d’ora accademico” non è
ancora entrato a far parte dei tuoi ritardi abituali.
Alle nove sono tutti li, come te, ad aspettare l’inizio della
nuova, ennesima metamorfosi della propria figura di
studente.
Il primo giorno di scuola non si fa gran che, ti dici. Forse
te la caverai in qualche ora, forse nessuno ha pensato a
come organizzare una giornata di passaggio. Ma si, si...
sarà una cosa veloce e ci penseremo domani.
Invece no.
Giacca, cravatta e passo deciso: entra il professore. Non
sembra avere voglia di scherzare né tanto meno di
perdere il suo tempo in inutili introduzioni.
Il concetto è chiaro: 5 minuti del suo tempo valgono di
più della tua intera mattinata. Non c’è speranza.
Sospettavi che “all’Università fossero un po’ esigenti”,
ma non saresti mai arrivato ad immaginare tanto.
Tutti in silenzio, le parole del professore si susseguono
ad un ritmo molto diverso da quello dei tuoi pensieri che
invece ripetono lenti: “non guardare me, ci sono altre 100
persone qui dentro, io taccio e faccio finta di niente”.
Suona un cellulare, la fondamentale raccomandazione
del prof è già stata violata: lui sta perdendo tempo a causa
vostra. Al malcapitato dopo qualche minuto restano solo
frammenti dell’oggetto che fino a poco prima usava come
telefono.
Alla lavagna un limite che non sai risolvere: sono passati
solo 10 minuti.
Ma... non dovevi cavartela con qualche cenno
introduttivo o poco altro? Qualcosa non va, non è
possibile!
Quello che accade dopo è poco importante: il prof si
interrompe, gira il portatile... cosa sta succedendo?
La rivelazione: S.P.R.I.Te. ha pensato a te molto prima
che tu mettessi piede in quell’aula, quella mattina del
primo giorno di ottobre. Era uno scherzo. Benvenuta
all’università cara matricola!
Un’introduzione da parte dei referenti del Corso di
Laurea, qualche ora di lezione. Vai a vedere cosa avrà
avuto il coraggio di organizzare ancora “S.P.R.I.Te.” .
E’ “S.P.R.I.Te. Welcome!”. Stranamente è tutto
tranquillo.
Ma poi cosa sarà questa sprite? E che nome sarà mai
questo?!
Studenti Polo Romagnolo Informatica e Tecnologie,
eccoti la spiegazione.
Benvenuto! Mangi, bevi, fai la tessera dell’Associazione
(l’hai fatta la tessera vero?! ndr).
Ora puoi anche tornare a casa.
Questo primo giorno da universitario non te lo
dimenticherai tanto facilmente.
Tommaso Dionigi
Presidente Ass.Stud. S.P.R.I.Te.
info@tommaso.dionigi.name
Il video dello scherzo a questo link:
http://sprite.csr.unibo.it/blog/2007/10/10/scherzo-matricole-1-ottobre-2007/
PAG 5
6. S.P.R.I.T.e. Magazine VI
Window applications con wxWidgets e wxDevC++
di Elvis Ciotti <info@elvisciotti.it>
Questa guida, rivolta a chi conosce già C++, illustra un
modo open-source e platform-independent per creare
applicazioni a finestre per Ms Windows, Linux, Max Os
X, Win CE. In pratica un'alternativa gratuita e portabile
a Ms Visual C++ /NET.
Le librerie che forniscono queste funzionalità sono le
wxWidgets (http://wxwidgets.org).
Possono essere usate dai linguaggi ad oggetti C++,
C#/net,Per, Python.
A differenza delle MFC e WTL, utilizzano un look
nativo, quindi indipendente delle API di Ms Windows,
non servono quindi dll esterne. Le wxWidgets sono
estensibili e Open Source.
La grafica che ne risulterà non sarà quindi
perfettamente in stile visuale di Ms Windows se
compilate in piattaforme win32, in pratica lavorerete in
modalità WYSINAWYG (What You See Is Not Always
What You Get).
Nel sito trovate la guida, da tenere sottomano per la
lista funzioni.
Per utilizzare le librerie con l'ausilio di tools per
disegnare i controlli con il mouse, esiste wxDev-C++
(http://wxdsgn.sourceforge.net), ambiente di sviluppo
Dev C++ modificato per utilizzare al meglio le librerie
wxWidgets.
wxDev-C++ contiene sia le librerie che tool grafici per
disporre i controlli nelle finestre, oltre a creare
automaticamente il codice c++ necessario
all'istanziazione, inizializzazione e funzionamento dei
componenti.
Il compilatore che usa è MinGW (cioè il porting di GCC
su windows), non molto veloce ma con un ottimo
debugger. L'editor supporta l'autocompletamento del
codice, comprese le funzioni della libreria wxWidgets.
Iniziamo
Dal menu File creiamo un nuovo wxFrame, lasciamo il
nome Progetto1.
Automaticamente vengono creati i file:
Progetto1Frm.cpp
Progetto1Frm.h
Progetto1Frm.wxform
questi 3 file contengono la classe Progetto1Frm,
estensione di wxFrame.
Consiglio già da adesso di abituarsi a consultare la
guida per vedere le funzioni della classe wxFrame, in
modo da sapere già da subito cosa è possibile fare.
Ad esempio, quando inseriamo i componenti (bottoni,
EditText, Selectbox...) nella finestra, viene ridefinito il
metodo CreateGUIControls() che li instanzia durante la
costruzione della classe, oltre a definire altre proprietà
della finestra.
Progetto1App.cpp
Progetto1App.h
Progetto1App.rc
Contengono il "main" dell'applicazione, cioè il codice
che lancia le varie finestre create.
In questi file viene definita la classe Progetto1FrmApp,
ereditata da wxApp.
I metodi sono essenzialmente due: OnInit() che
instanzia e mostra il nostro unico frame (Progetto1Frm)
e OnExit() che gestisce l'uscita dal programma.
Il file wxform è il file che memorizza le dimensioni dei
frames (windows) e componenti (widgets) al loro
interno.
Primi passi
Per inserire il codice che vogliamo parta con un evento
di un componente, clicchiamo sul componente, nella
finestra proprietà scegliamo l'evento dal menù a discesa.
Viene automaticamente creata la funzione ed aggiunta
alla classe del frame.
Dobbiamo solo inserire il codice da eseguire allo
scatenarsi dell'evento.
Le variabili relative ai componenti della finestra, sono
puntatori alle classi degli oggetti relativi della libreria
(wxButton per i pulsanti, wxTextCtrl per editbox...),
sono dichiarate "private" nella classe Progetto1Frm.
Se siamo all'interno di una funzione della classe (ad
esempio la funzione che parte al click su un pulsante),
per usarne una proprietà, dobbiamo chiamare:
WxButton1->metodo(<argomenti>)
L'elenco dei metodi lo trovate nella guida, classe
WxButton.
Stringhe
Le stringhe, indispensabili per utilizzate quasi tutti i
controlli (es: testo editabile wxTextCtrl, testo dei
pulsanti WxButton), vanno usate con la classe wxString,
quasi identica alla classe String della StdLib C++.
La classe wxString presenta le funzioni per calcolarne
lunghezza, leggerne un carattere, concatenazione,
estrazione sottostringa, conversione del formato,
conversione in numero.
PAG 6
7. S.P.R.I.T.e. Magazine VI
Alcune funzionalità
Elenco alcuni metodi dei controlli più usati, in modo da
poter creare fin da subito qualche cosa di utile.
Consultate l'elenco degli argomenti e prototipi delle
funzioni nella guida di wxWidgets.
Caselle di testo anche multilinea (wxTextCtrl):
AppendText, GetValue, SetValue, GetNumberOfLines,
GetLineText, GetLineLength, GetStringSelection,
SaveFile, SetValue
CheckBox (wxCheckBox): GetValue, SetValue
SelectBox (wxChoice): Append, GetSelection
Abbiamo anche molti altri controlli, per selezione date,
print e MessageDialog, ColourDialog, Timer,
TreeListCtrl, HTMLwindow...
Sviluppo con wxDevc++
Ci sono dei problemi riguardanti il tool per disegnare i
frames e i componenti al loro interno.
Al momento, disegnando un controllo, non è possibile
più cambiarne il nome per richiamarne proprietà e
metodi, neanche sostituendo tutte le dichiarazioni nei
files del codice. Si può rimediare a questo bug usando un
puntatore alla classe col nome che vogliamo.
Se vogliamo isolarci da questi problemi e avere più
controllo (componenti simili potrebbero essere meglio
gestiti da un array di puntatori piuttosto che da una
variabile per ogni controllo), possiamo creare
manualmente il codice inserendo le dichiarazioni dei
componenti nella classe del frame (Progetto1Frm) e
inserirne la creazione in CreateGUIControls(), metodo
della classe, dove istanziamo il componente con le
relative proprietà.
wxDev-C++ permette di aggiornare il compilatore, le
librerie (anche le wxWidgets) e i files al suo interno
senza dover reinstallare il programma, tramite una
funzionalità presente nel menù di info/about.
Come già detto, l'eseguibile dell'applicazione che viene
prodotto non richiede alcuna libreria esterna per
disegnare e gestire i componenti delle finestre, questo
comporta che la grafica sarà leggermente diversa e
l'eseguibile sarà di alcuni Mb.
L'enorme vantaggio è che abbiamo un software
completamente indipendente, ricompilabile senza tante
modifiche in altre piattaforme.
Una volta compilato su Ms Windows, la grafica del
software funziona sempre, senza terminare
nell'eventuale mancanza di una dll esterna come
potrebbe succedere per applicazioni create con librerie
specifiche del sistema operativo.
Tra le varie opzioni dell'editor di codice, possiamo
specificare i colori con cui vengono evidenziate le varie
parti, oltre a carattere, tabulazioni e modo di elencare le
classi e metodi esistenti.
Troviamo nel menu anche il supporto CVS e controlli
per upload files / progetto.
Tra le opzioni di compilazione troviamo anche il
supporto per compilatori Visual C++ 6, Visual C++
2005, Visual C++ NET, qualora si abbiamo installati, in
alternativa al MinGw presente con l'ambiente.
Alternative
Segnalo anche le librerie SmartWin++
(http://smartwin.sourceforge.net), sempre distribuite
sotto licenza GPL e fornite con un ambiente tipo DevCpp
Segnalo anche Ultimate++
(http://upp.sourceforge.net/index.html), un ambiente
di sviluppo che dovrebbe creare eseguibili meno pesanti
e compilare più velocemente.
Un ambiente RAD (rapid application development)
commerciale per disegnare con le wxWidgets è
WxDesigner (http://www.roebling.de), mentre un
ambiente alternativo a wxDev-C++ freeware è invece
VisualWx (http://visualwx.altervista.org).
PAG 7
+
Interfaccia di wxDevC+
8. S.P.R.I.T.e. Magazine VI
Development day – 26 ottobre 2007
Development Day
Il Development Day si svolgerà lungo tutta la
giornata del 26 Ottobre 2007 presso il Corso di
Laurea in Scienze dell’Informazione di Cesena.
Il tema centrale di questa giornata tratta,
ovviamente, la programmazione in tutti i suoi
aspetti. La giornata sarà composta di interventi
puramente relazionali (detti talk) e di
interventi con dimostrazione pratica (detti
workshop). Inoltre, saranno suddivisi in due
livelli: livello I, che si riferisce a quei interventi
in cui non è necessaria una conoscenza molto
approfondita dell’argomento relazionato, e
livello II, in cui è necessaria una conoscenza
approfondita dell’argomento relazionato.
Call for Paper
Chiunque voglia proporre una conferenza per
il Development Day può consultare il Call for
Paper. Troverete tutte le specifiche per farci
pervenire le vostre proposte. Sono indicati gli
argomenti generali che preferiremmo trattare
durante le due giornate, le modalità di
svolgimento delle conferenze, le modalità di
invio degli interventi e le date da rispettare per
la richiesta e la conferma della propria
conferenza.
Se avete interventi da proporre per il
Development Day vi invitiamo a contattarci di
modo che i vostri contributi, i risultati del
vostro lavoro, le vostre esperienze possano
essere condivise con chi come voi apprezza e
lavora con Linux o più in generale con e per gli
utenti e gli sviluppatori del mondo del free
software e dell’open source.
Elenco dei talk, informazioni al sito web: http://sprite.csr.unibo.it/blog/progetti/linuxday-2007/
Last.fm, the social music revolution
di Matteo Battistelli <matteo.battistelli2@studio.unibo.it>
Vi piace ascoltare musica? E vi piace farlo, magari,
tramite il vostro pc... mentre programmate, leggete la
posta, scribacchiate un breve articolo per il giornale di
Sprite? E magari vi piacerebbe avere una cronologia di ciò
che avete ascoltato, su questa ottenere una serie di
statistiche e trovare utenti per il web che hanno gusti
simili ai vostri e che possano consigliarvi qualche pezzo
interessante?
Oppure avete un gruppo e qualche vostro brano da
distribuire, o semplicemente volete pubblicizzare le vostre
prossime esibizioni live?
Bene allora last.fm è il sito che fa per voi.
Quella che segue è solo una breve introduzione ad alcune
delle funzioni , a mio avviso le più interessanti, che il sito
offre. Per le altre vi consiglio di andare su www.last.fm e
dare una sbirciatina alla guida: il sito è molto intuitivo e
con qualche click del mouse scoprirete che si possono far
parecchie cose interessanti.
PAG 8
9. S.P.R.I.T.e. Magazine VI
Audioscrobbler
Una volta registrati al sito e scaricato l'apposito player (o
un plug-in per vostro player preferito) siete pronti per
effettuare l'
audioscrobbling.
Ma che cos'è
l'audioscrobbler?
Esso non è altro
che un sistema
per tenere traccia
dei brani che
ascoltate. Questi
saranno
immediatamente
pubblicati sul
vostro spazio
last.fm (che si
trova all'indirizzo
www.last.fm/user/vosto_username). Dopo un numero
sufficiente di brani memorizzati il sito inizierà a fornirvi
una serie di statistiche tra cui la classifica degli artisti,
album e pezzi più ascoltati. Inoltre, e questa è forse la
cosa più interessante, vi consiglierà brani o musicisti
compatibili con i vostri gusti.
Sulla base di ciò che ascoltate inoltre verra stilata una
lista di "vicini", utenti cioè che hanno gusti simili ai vostri
e da cui potrete farvi consigliare qualche nuovo artista.
I profili degli artisti.
Per ogni cantante o gruppo esiste un apposito spazio
all'interno del sito che mostra una breve descrizione con
la lista dei suoi concerti oltre che la classifica dei brani
più ascoltati dagli utenti del sito. Alcuni di questi brani
possono essere scaricati, gratuitamente o a pagamento, o
ascoltati in streaming.
Questa sezione del sito, naturalmente, può essere usata
anche da gruppi emergenti che possono fare l'upload dei
propri brani e decidere in che modo distribuirli o
pubblicare le date dei propri concerti.
Playlist
Una funzione molto interessante è quella che dà la
possibilità di creare una playlist con i propri brani
preferiti. Se alla vostra playlist vengono aggiunti almeno
15 brani (scelti anche tra quelli distribuiti a pagamento) di
album e artisti diversi quest'ultima potrà essere
liberamente ascoltata in streaming da chiunque si colleghi
all'indirizzo del vostro spazio su last.fm. Naturalmente
l'utente non potrà scegliere liberamente il brano da
ascoltare: sarà il sistema che si occuperà di selezionare,
come una sorta di radio on-line, quale brano della playlist
trasmettere in streaming.
Widgets
In questa sezione del sito è possibile creare delle piccole
applet da inserire nel proprio sito web o blog. Con una
serie di semplici click otterrete in un batter d'occhio il
codice html da aggiungere alla propria pagina web. E'
possibile, ad esempio, creare il codice di un semplice
playlist player, un "quilt", cioè un collage animato delle
copertine degli album o delle foto degli artisti preferiti,
oppure la classifica dei brani più ascoltati.
PAG 9
10. S.P.R.I.T.e. Magazine VI
“Stay hungry. Stay foolish.” by Steve Jobs
a cura di Venturi Filippo (2007.05.19)
Fidatevi di me.
Questo articolo è lungo, ma merita di essere
letto e scommetto una birra che alla fine mi
darete ragione.
Nel Giugno 2005, alla Stanford University,
situata in California nella Contea di Santa Clara,
Steve Jobs (fondatore di Apple) ha ricevuto la
laurea honoris causa, ovvero uno speciale titolo
accademico assegnato ad una persona come
riconoscimento alla propria esperienza e
competenza in un determinato campo del
sapere, pur senza aver dato esami.
Steve Jobs, alla Stanford University
L’evento è stato sicuramente importante anche se ormai questo genere di riconoscimento sta perdendo valore, visto
che avviene sempre più spesso, da quando le università hanno scoperto il lato “pubblicitario” di questo tipo di
iniziativa.
La parte più interessante però è il discorso tenuto da Jobs che, pur essendo lungo, ha fatto riflettere e a anche portato
alla luce alcuni piccoli aneddoti sul Jobs studente e in seguito manager, senza mai annoiare. Ecco il testo tradotto. (Il
video è reperibile all’indirizzo http://news-service.stanford.edu/news/2005/june15/videos/51.html)
“Sono onorato di essere qui con voi oggi alle vostre lauree in una delle migliori università del mondo. Io non mi
sono mai laureato. Anzi, per dire la verità, questa è la cosa più vicina a una laurea che mi sia mai capitata. Oggi
voglio raccontarvi tre storie della mia vita. Tutto qui, niente di eccezionale: solo tre storie.”
La prima storia è sull’unire i puntini
“Ho lasciato il Reed College dopo il primo semestre, ma
poi ho continuato a frequentare in maniera ufficiosa per
altri 18 mesi circa prima di lasciare veramente. Allora,
perché ho mollato?
E’ cominciato tutto prima che nascessi. Mia madre
biologica era una giovane studentessa di college non
sposata, e decise di lasciarmi in adozione. Riteneva con
determinazione che avrei dovuto essere adottato da
laureati, e fece in modo che tutto fosse organizzato per
farmi adottare fin dalla nascita da un avvocato e sua
moglie. Però quando arrivai io loro decisero all’ultimo
minuto che avrebbero voluto adottare una bambina.
Così quelli che poi sono diventati i miei genitori adottivi
e che erano in lista d’attesa, ricevettero una chiamata nel
bel mezzo della notte che gli diceva: “C’è un bambino, un
maschietto, non previsto. Lo volete voi?” Loro risposero:
“Certamente”. Più tardi mia madre biologica scoprì che
mia madre non si era mai laureata al college e che mio
padre non aveva neanche finito il liceo. Rifiutò di
firmare le ultime carte per l’adozione. Poi accetto di
farlo, mesi dopo, solo quando i miei genitori adottivi
promisero formalmente che un giorno io sarei andato al
college.
Diciassette anni dopo andai al college. Ma
ingenuamente ne scelsi uno altrettanto costoso di
Stanford, e tutti i risparmi dei miei genitori finirono per
pagarmi l’ammissione e i corsi. Dopo sei mesi, non
riuscivo a vederci nessuna vera opportunità. Non avevo
idea di quello che avrei voluto fare della mia vita e non
vedevo come il college potesse aiutarmi a capirlo.
Eppure ero là, che spendevo tutti quei soldi che i miei
genitori avevano messo da parte lavorando per tutta la
loro vita. Così decisi di mollare e avere fiducia che tutto
sarebbe andato bene lo stesso. Era molto difficile
all’epoca, ma guardandomi indietro ritengo che sia stata
una delle migliori decisioni che abbia mai preso.
Nell’attimo che mollai il college, potei anche smettere di
seguire i corsi che non mi interessavano e cominciai
invece a capitare nelle classi che trovavo più
interessanti.
Non è stato tutto rose e fiori, però. Non avevo più una
camera nel dormitorio, ed ero costretto a dormire sul
pavimento delle camere dei miei amici. Guadagnavo
soldi riportando al venditore le bottiglie di Coca cola
vuote per avere i cinque centesimi di deposito e poter
comprare da mangiare. Una volta la settimana, alla
domenica sera, camminavo per sette miglia attraverso
la città per avere finalmente un buon pasto al tempio
Hare Krishna: l’unico della settimana. Ma tutto quel che
ho trovato seguendo la mia curiosità e la mia intuizione
è risultato essere senza prezzo, dopo. Vi faccio subito un
esempio.
Il Reed College all’epoca offriva probabilmente la
miglior formazione del Paese relativamente alla
calligrafia. Attraverso tutto il campus ogni poster, ogni
etichetta, ogni cartello era scritto a mano con calligrafie
PAG 10
11. S.P.R.I.T.e. Magazine VI
meravigliose. Dato che avevo mollato i corsi ufficiali,
decisi che avrei seguito la classe di calligrafia per
imparare a scrivere così. Fu lì che imparai dei caratteri
serif e san serif, della differenza tra gli spazi che
dividono le differenti combinazioni di lettere, di che cosa
rende grande una stampa tipografica del testo. Fu
meraviglioso, in un modo che la scienza non è in grado
di offrire, perché era artistico, bello, storico e io ne fui
assolutamente affascinato.
Nessuna di queste cose però aveva alcuna speranza di
trovare una applicazione pratica nella mia vita. Ma poi,
dieci anni dopo, quando ci trovammo a progettare il
primo Macintosh, mi tornò tutto utile. E lo utilizzammo
tutto per il Mac. E’ stato il primo computer dotato di una
meravigliosa capacità tipografica. Se non avessi mai
lasciato il college e non avessi poi partecipato a quel
singolo corso, il Mac non avrebbe probabilmente mai
avuto la possibilità di gestire caratteri differenti o font
spaziati in maniera proporzionale. E dato che Windows
ha copiato il Mac, è probabile che non ci sarebbe stato
nessun personal computer con quelle capacità. Se non
avessi mollato il college, non sarei mai riuscito a
frequentare quel corso di calligrafia e i persona
computer potrebbero non avere quelle stupende capacità
di tipografia che invece hanno. Certamente all’epoca in
cui ero al college era impossibile unire i puntini
guardando il futuro. Ma è diventato molto, molto chiaro
dieci anni dopo, quando ho potuto guardare all’indietro.
Di nuovo, non è possibile unire i puntini guardando
avanti; potete solo unirli guardandovi all’indietro. Così,
dovete aver fiducia che in qualche modo, nel futuro, i
puntini si potranno unire. Dovete credere in qualcosa - il
vostro ombelico, il destino, la vita, il karma, qualsiasi
cosa. Questo tipo di approccio non mi ha mai lasciato a
piedi e invece ha sempre fatto la differenza nella mia
vita.
La mia seconda storia è a proposito
dell’amore e della perdita
Sono stato fortunato: ho trovato molto presto che cosa
amo fare nella mia vita. Woz e io abbiamo fondato Apple
nel garage della casa dei miei genitori quando avevo
appena 20 anni. Abbiamo lavorato duramente e in 10
anni Apple è cresciuta da un’azienda con noi due e un
garage in una compagnia da due miliardi di dollari con
oltre quattromila dipendenti. L’anno prima avevamo
appena realizzato la nostra migliore creazione - il
Macintosh - e io avevo appena compiuto 30 anni, e in
quel momento sono stato licenziato. Come si fa a venir
licenziati dall’azienda che hai creato? Beh, quando Apple
era cresciuta avevamo assunto qualcuno che ritenevo
avesse molto talento e capacità per guidare l’azienda
insieme a me, e per il primo anno le cose sono andate
molto bene. Ma poi le nostre visioni del futuro hanno
cominciato a divergere e alla fine abbiamo avuto uno
scontro. Quando questo successe, il Board dei direttori si
schierò dalla sua parte. Quindi, a 30 anni io ero fuori. E
in maniera plateale. Quello che era stato il principale
scopo della mia vita adulta era andato e io ero devastato
da questa cosa.
Non ho saputo davvero cosa fare per alcuni mesi. Mi
sentivo come se avessi tradito la generazione di
imprenditori prima di me - come se avessi lasciato
cadere la fiaccola che mi era stata passata. Incontrai
David Packard e Bob Noyce e tentai di scusarmi per aver
rovinato tutto così malamente. Era stato un fallimento
pubblico e io presi anche in considerazione l’ipotesi di
scappare via dalla Silicon Valley. Ma qualcosa
lentamente cominciò a crescere in me: ancora amavo
quello che avevo fatto. L’evolvere degli eventi con Apple
non avevano cambiato di un bit questa cosa. Ero stato
respinto, ma ero sempre innamorato. E per questo decisi
di ricominciare da capo.
Non me ne accorsi allora, ma il fatto di essere stato
licenziato da Apple era stata la miglior cosa che mi
potesse succedere. La pesantezza del successo era stata
rimpiazzata dalla leggerezza di essere di nuovo un
debuttante, senza più certezze su niente. Mi liberò dagli
impedimenti consentendomi di entrare in uno dei periodi
più creativi della mia vita.
Durante i cinque anni successivi fondai un’azienda
chiamata NeXT e poi un’altra azienda, chiamata Pixar, e
mi innamorai di una donna meravigliosa che sarebbe
diventata mia moglie. Pixar si è rivelata in grado di
creare il primo film in animazione digitale, Toy Story, e
adesso è lo studio di animazione più di successo al
mondo. In un significativo susseguirsi degli eventi, Apple
ha comprato NeXT, io sono ritornato ad Apple e la
tecnologia sviluppata da NeXT è nel cuore dell’attuale
rinascimento di Apple. E Laurene e io abbiamo una
meravigliosa famiglia.
Sono sicuro che niente di tutto questo sarebbe successo
se non fossi stato licenziato da Apple. E’ stata una
medicina molto amara, ma ritengo che fosse necessaria
per il paziente. Qualche volta la vita ti colpisce come un
mattone in testa. Non perdete la fede, però. Sono
convinto che l’unica cosa che mi ha trattenuto dal
mollare tutto sia stato l’amore per quello che ho fatto.
Dovete trovare quel che amate. E questo vale sia per il
vostro lavoro che per i vostri affetti. Il vostro lavoro
riempirà una buona parte della vostra vita, e l’unico
modo per essere realmente soddisfatti è fare quello che
riterrete un buon lavoro. E l’unico modo per fare un
buon lavoro è amare quello che fate. Se ancora non
l’avete trovato, continuate a cercare. Non
accontentatevi. Con tutto il cuore, sono sicuro che
capirete quando lo troverete. E, come in tutte le grandi
storie, diventerà sempre migliore mano a mano che gli
anni passano. Perciò, continuate a cercare sino a che
non lo avrete trovato. Non vi accontentate.
La mia terza storia è a proposto della morte
Quando avevo 17 anni lessi una citazione che suonava
più o meno così: “Se vivrai ogni giorno come se fosse
l’ultimo, sicuramente una volta avrai ragione”. Mi colpì
molto e da allora, per gli ultimi 33 anni, mi sono
guardato ogni mattina allo specchio chiedendomi: “Se
oggi fosse l’ultimo giorno della mia vita, vorrei fare
quello che sto per fare oggi?”. E ogni qualvolta la
risposta è “no” per troppi giorni di fila, capisco che c’è
qualcosa che deve essere cambiato.
Ricordarsi che morirò presto è il più importante
strumento che io abbia mai incontrato per fare le grandi
scelte della vita. Perché quasi tutte le cose - tutte le
aspettative di eternità, tutto l’orgoglio, tutti i timori di
PAG 11
12. S.P.R.I.T.e. Magazine VI
essere imbarazzati o di fallire - semplicemente
svaniscono di fronte all’idea della morte, lasciando solo
quello che c’è di realmente importante. Ricordarsi che
dobbiamo morire è il modo migliore che io conosca per
evitare di cadere nella trappola di chi pensa che avete
qualcosa da perdere. Siete già nudi. Non c’è ragione per
non seguire il vostro cuore.
Più o meno un anno fa mi è stato diagnosticato un
cancro. Ho fatto la scansione alle sette e mezzo del
mattino e questa ha mostrato chiaramente un tumore
nel mio pancreas. Non sapevo neanche che cosa fosse un
pancreas. I dottori mi dissero che si trattava di un
cancro che era quasi sicuramente di tipo incurabile e che
sarebbe stato meglio se avessi messo ordine nei miei
affari (che è il codice dei dottori per dirti di prepararti a
morire). Questo significa prepararsi a dire ai tuoi figli in
pochi mesi tutto quello che pensavi avresti avuto ancora
dieci anni di tempo per dirglielo. Questo significa essere
sicuri che tutto sia stato organizzato in modo tale che
per la tua famiglia sia il più semplice possibile. Questo
significa prepararsi a dire i tuoi “addio”.
Ho vissuto con il responso di quella diagnosi tutto il
giorno. La sera tardi è arrivata la biopsia, cioè il
risultato dell’analisi effettuata infilando un endoscopio
giù per la mia gola, attraverso lo stomaco sino agli
intestini per inserire un ago nel mio pancreas e
catturare poche cellule del mio tumore. Ero sotto
anestesia ma mia moglie - che era là - mi ha detto che
quando i medici hanno visto le cellule sotto il
microscopio hanno cominciato a gridare, perché è
saltato fuori che si trattava di un cancro al pancreas
molto raro e curabile con un intervento chirurgico. Ho
fatto l’intervento chirurgico e adesso sto bene.
Questa è stata la volta in cui sono andato più vicino
alla morte e spero che sia anche la più vicina per qualche
decennio. Essendoci passato attraverso posso parlarvi
adesso con un po’ più di cognizione di causa di quando la
morte era per me solo un concetto astratto e dirvi:
Nessuno vuole morire. Anche le persone che vogliono
andare in paradiso non vogliono morire per andarci. E
anche che la morte è la destinazione ultima che tutti
abbiamo in comune. Nessuno gli è mai sfuggito. Ed è
così come deve essere, perché la Morte è con tutta
probabilità la più grande invenzione della Vita. E’
l’agente di cambiamento della Vita. Spazza via il vecchio
per far posto al nuovo. Adesso il nuovo siete voi, ma un
giorno non troppo lontano diventerete gradualmente il
vecchio e sarete spazzati via. Mi dispiace essere così
drammatico ma è la pura verità.
Il vostro tempo è limitato, per cui non lo sprecate
vivendo la vita di qualcun altro. Non fatevi intrappolare
dai dogmi, che vuol dire vivere seguendo i risultati del
pensiero di altre persone. Non lasciate che il rumore
delle opinioni altrui offuschi la vostra voce interiore. E,
cosa più importante di tutte, abbiate il coraggio di
seguire il vostro cuore e la vostra intuizione. In qualche
modo loro sanno che cosa volete realmente diventare.
Tutto il resto è secondario.
Quando ero un ragazzo c’era una incredibile rivista che
si chiamava The Whole Earth Catalog, praticamente una
delle bibbie della mia generazione. E’ stata creata da
Stewart Brand non molto lontano da qui, a Menlo Park,
e Stewart ci ha messo dentro tutto il suo tocco poetico. E’
stato alla fine degli anni Sessanta, prima dei personal
computer e del desktop publishing, quando tutto era fato
con macchine da scrivere, forbici e foto polaroid. E’ stata
una specie di Google in formato cartaceo tascabile, 35
anni prima che ci fosse Google: era idealistica e
sconvolgente, traboccante di concetti chiari e fantastiche
nozioni.
Stewart e il suo gruppo pubblicarono vari numeri di
The Whole Earth Catalog e quando arrivarono alla fine
del loro percorso, pubblicarono il numero finale. Era più
o meno la metà degli anni Settanta e io avevo la vostra
età. Nell’ultima pagina del numero finale c’era una
fotografia di una strada di campagna di prima mattina,
il tipo di strada dove potreste trovarvi a fare l’autostop
se siete dei tipi abbastanza avventurosi. Sotto la foto
c’erano le parole: “Stay Hungry. Stay Foolish.”, siate
affamati, siate folli. Era il loro messaggio di addio. Stay
Hungry. Stay Foolish. Io me lo sono sempre augurato
per me stesso. E adesso che vi laureate per cominciare
una nuova vita, lo auguro a voi.
Stay Hungry. Stay Foolish.
Grazie a tutti.”
FONTI:
http://news-service.stanford.edu/news/2005/june15/grad-061505.html
http://news-service.stanford.edu/news/2005/june15/videos/51.html
http://macintosh.wordpress.com/2005/10/27/stay-hungry-stay-foolish/
http://www.youtube.com/watch?v=D1R-jKKp3NA
PAG 12
13. S.P.R.I.T.e. Magazine VI
Enigmi matematici
tratti da chiesi.net
Una corda e tre animali
Immaginate di avere una corda lunga quanto la
circonferenza terrestre (cioè all'incirca 40000 km), che si
trova distesa lungo l'equatore. Immaginate ora di
prendere questa corda, di tagliarla, di aggiungervene un
metro e quindi di ridistribuirla attorno all'equatore in
modo che abbia una distanza dalla superficie terrestre che
rimanga costante lungo tutta la circonferenza.
La domanda a cui dovete cercare
di rispondere è: quale dei seguenti
tre animali può passare di misura
nello spazio interposto tra la corda
e la superficie: una formica, un
gatto o un elefante?
Il ciclista
Un ciclista scala una montagna
alla media di 20 km/h , e poi,
giunto in cima, gira la bicicletta e
ridiscende a valle (seguendo la
stessa strada) ad una media di 60
km/h. Qual è la media complessiva
tenuta dal ciclista, durante tutto il suo viaggio?
Stato di famiglia
Due vecchi amici matematici si ritrovano dopo molti
anni, e discorrono per un po'. Il primo fa: "Allora hai tre
figli? E quanti anni hanno?". L'altro risponde:
"Considerando le loro età come numeri interi, il loro
prodotto è 36, e la somma è il numero civico di questa
casa qui davanti". Il primo ci pensa un po' e sbotta: "Beh,
non mi hai certo dato dei dati sufficienti!" e il secondo
ribatte: "Hai ragione: il maggiore ha gli occhi azzurri".
Quali sono le età dei tre figli?
Gioco a premi
Supponiamo di essere a un gioco a premi e di dovere
scegliere quale porta aprire fra le tre proposte dal
presentatore. Dietro una di queste c'e` un'auto, nelle
altre due... una capra. Noi scegliamo una porta, e come
capita in tutte le puntate, il presentatore ci dice "Ne sei
proprio sicuro? Puoi ancora cambiare la scelta: anzi, ti
voglio aiutare", e apre una delle porte che noi non
abbiamo scelto, mostrando una capra. Ammesso che
vogliamo vincere l'auto, ci conviene cambiare porta, o la
cosa è indifferente?
Corde che bruciano
Ci sono a disposizione due corde di lunghezza uguale, e
tanti accendini quanti si vuole... e nient'altro! Entrambe le
corde, se incendiate, impiegano un'ora esatta per
bruciare.
Cioè dando fuoco ad una estremità, il fuoco arriverà
all'altra estremità dopo esattamente 60 minuti. Le due
corde però non bruciano in maniera uniforme, ma
casualmente, e non bruciano nemmeno
nello stesso modo ma ognuna per i fatti
suoi. L'obiettivo del gioco è riuscire a
trovare un modo per calcolare il passare
di un quarto d'ora di tempo.
Successione di numeri
Qual è il termine successivo in questa
successione?
1 - 11 - 21 - 1211 - 111221 - ...
Le noci di cocco
Tre marinai trovano un mucchio di noci
di cocco. Il primo ne prende la metà più mezza noce. Il
secondo prende metà di quello che è rimasto più mezza
noce. Anche il terzo prende metà del rimanente più mezza
noce. Rimane esattamente una noce che essi danno alla
scimmia. Quante erano inizialmente le noci del mucchio?
I berretti
Tre esploratori vengono catturati da una tribù africana
con l'hobby degli enigmi. Il capo tribù decide di graziarli
solo se si dimostrano sufficientemente intelligenti. Mostra
loro tre berretti rossi e due berretti bianchi. Poi li benda e
pone sulla testa di ognuno un berretto rosso. Una volta
sbendati ogni esploratore può vedere il berretto sulla testa
degli altri ma non il proprio.
Chiede al primo: "Di che colore è il berretto che hai sulla
testa?". Il primo osserva gli altri due e risponde che non lo
sa. Chiede al secondo: "Di che colore è il berretto che hai
sulla testa?". Il secondo osserva gli altri due e risponde
che non lo sa. Chiede al terzo: "Di che colore è il berretto
che hai sulla testa?". Il terzo risponde esattamente
dicendo che il proprio berretto è rosso salvando la vita a
tutti e tre. Come ha fatto a saperlo? (Si supponga che i tre
esploratori siano dei logici perfetti, cioè siano in grado di
dedurre istantaneamente tutte le conseguenze da un
insieme di premesse dato).
SOLUZIONI NELLA PROSSIMA PAGINA !
PAG 13
14. S.P.R.I.T.e. Magazine VI
Soluzioni
soluzioni agli enigmi della pagina precedente
Una corda e tre animali
La risposta è: un gatto. Questa risposta è sorprendente,
in quanto si è indotti a pensare che allungare una
circonferenza così lunga di una percentuale tanto
insignificante provochi un aumento del raggio altrettanto
insignificante. Invece questo non è vero, poichè
l'incremento subito dal raggio dipende solo dalla
lunghezza del pezzo di corda aggiunto e non dal raggio
della circonferenza iniziale. Detto questo, il calcolo è
veramente immediato. Infatti, indicando con R il raggio
terrestre, con PI la costante pi greco e con C=2*PI*R la
circonferenza, si ha che la distanza tra la corda e la
superficie terrestre vale: d = (C+1)/(2*PI) - R = 1/(2*PI)
che vale circa 16 centimetri, e quindi ci può passare sotto
un gatto.
Il ciclista
La risposta corretta è: 30 km/h. La risposta più
frequente che viene data a questo problema è è invece 40
km/h, basata sul fatto che che il ciclista ha percorso
esattamente metà del cammino alla velocità (media) di 20
km/h e esattamente l'altra metà alla velocità (media) di
60 km/h; ma ciò nondimeno, la risposta è errata, giacché
procedendo in discesa ad una velocità tripla rispetto a
quella tenuta in salita il nostro atleta ha pedalato per un
tempo triplo alla velocità di 20 km/h rispetto al tempo in
cui è andato a 60 km/h. La risposta corretta è dunque
data da v = (3 x 20 + 60) / 4 = 30 km/h. Bisogna cioè
tenere conto del peso relativo di ciascuna delle medie.
Stato di famiglia
Le terne di numeri interi il cui prodotto è 36 (con le
somme vicino) sono riportate in tabella. Il secondo
matematico conosce la somma (vede il numero della casa)
ma non sa rispondere. Questo significa che la somma è 13,
l'unico numero che appare due volte. La seconda
affermazione del primo matematico ci dice che la risposta
giusta è 9-2-2, nell'altro caso infatti si avrebbero due
gemelli di 6 anni.
Terna Somma
36-1-1 38
18-2-1 21
12-3-1 16
9-4-1 14
9-2-2 14
6-6-1 13
6-3-2 11
4-3-3 10
Gioco a premi
Il trucco qui è il fatto che il presentatore non apre una
porta a caso, ma ne sceglie una con una capra.
Supponiamo di avere scelto la prima porta: in questo
momento abbiamo probabilità 1/3 che l'auto sia dietro
una qualunque porta. Nei due casi in cui l'auto sia nella
porta 2 o 3, il presentatore apre rispettivamente la porta 3
o 2, e se noi cambiamo scelta vinciamo (probabilità 2/3);
se avevao scelto la porta giusta, lui ne apre a caso una
delle altre (probabilità 1/6 per ciascuna) e se noi
cambiamo perdiamo (probabilita` 1/3). Quindi ci
conviene cambiare porta.
Corde che bruciano
All'inizio si prende la prima corda e si dà fuoco a
entrambe le estremità contemporaneamente, e sempre
nello stesso istante accendo un estremo della seconda
corda. Passata mezz'ora la prima corda sarà
completamente consumata (visto che ci avrebbe
impiegato un'ora se fosse stata accesa solo da una parte).
A questo punto la seconda corda continuerebbe a bruciare
ancora per mezz'ora, ma se si dà fuoco anche all'altro
estremo, finirà esattamente nel giro di un quarto d'ora....
il quarto d'ora da misurare.
Successione di numeri
Il termine successivo è 312211. Ogni termine si ricava dal
precedente "spiegando cosa è scritto": in 1112211 ci sono
tre 1, due 2 e ancora due 1, quindi 3 1, 2 2, 2 1, quindi
312221.
Le noci di cocco
La risposta è 15 noci. Infatti se alla fine resta una noce
(quella che viene data alla scimmia) vuol dire che il terzo
marinaio si è trovato davanti ad un mucchio di 3 noci, dal
quale ne ha prese 2, ovvero metà del mucchio (cioè una
noce e mezza) più mezza noce, lasciandone 1.
Analogamente il secondo marinaio avrà avuto a
disposizione 7 noci prendendone 4 (3 e mezzo + 1 mezza
noce) e lasciandone appunto 3 per il terzo marinaio.
Infine, il primo marinaio poteva disporre di un totale di 15
noci, e ne ha prese 8.
I berretti
Il primo esploratore non sa rispondere di che colore è il
proprio berretto perciò evidentemente vuol dire che gli
altri due non hanno entrambi il berretto bianco,
altrimenti avrebbe saputo rispondere che il proprio era
rosso.
Neppure il secondo esploratore sa di che colore è il
proprio berretto, ciò significa che il terzo non può avere il
berretto bianco altrimenti lui avrebbe detto che il suo è
rosso (non potendo essere entrambi bianchi).
Di conseguenza il terzo dice che è il proprio è rosso .
PAG 14
15. S.P.R.I.T.e. Magazine VI
Streamtuner - Installazione, uso e trickz
di Matteo Lupini <matteo.lupini@studio.unibo.it>
Salve ragazzi, amanti di Linux e della musica. Stanchi
della solita musica? Avete mai sentito parlare di
streaming Audio/Video? Certamente, immagino.
Streaming (dall'inglese stream che significa fiume, o
corrente) è quel flusso di dati audio/video trasmessi da
una sorgente ad una o più destinazioni tramite la rete
internet. Lo streaming può essere Live oppure
OnDemand. Per OnDemand intendiamo quella corrente
di dati che risiede sul server ospitante, e che viene avviata
su richiesta del client. Live invece, significa la tradizionale
trasmissione radio o video in broadcast. I dati che
vengono trasmessi in streaming, sono compressi per
poter occupare il minor numero di banda possibile, e
vengono bufferizzati sul client, ovvero, prima di
riprodurre, vengono prima raccolte una quantità di
informazioni tale da non creare stalli o interruzioni nella
riproduzione. Questi file, quindi, non vengono scaricati
interamente e fisicamente sul client, i dati ricevuti
vengono decompressi e riprodotti pochi secondi dopo
l'inizio della ricezione, e scompaiono con la chiusura del
programma.
In questa sede mi occuperò di streaming Audio Live, e di
un programma per poter utilizzare questo servizio sulla
propria Linux Box. Vediamo come poter usare
StreamTuner!
Streamtuner (http://www.nongnu.org/streamtuner) è
free ed è coperto dalla GNU GPL, sfrutta servizi come
SHOUTcast (http://www.shoutcast.com) e Live365
(http://www.live365.com), che sono siti web che
permettono di ascoltare la propria musica preferita in
streaming, su vere e proprie radio. Streamtuner permette
di sfogliare gli archivi e le radio di questi due principali
servizi, di selezionare un canale, e con l'aiuto di
StreamRipper di poterla registrare e riascoltarla quando
si vuole. Ma andiamo passo passo:
Installazione:
Streamtuner si può reperire dal proprio sito web, oppure
dalle repository Debian tramite il comando:
# apt-get install streamtuner
ricordatevi, però, di abilitare l'opzione “universe” nelle
vostre repository.
Per poter funzionare correttamente, Streamtuner ha
bisogno dei seguenti pacchetti: GTK+ (versione 2.4.0 o
superiore) e libcurl (versione 7.10.8 o superiore), che sono
essenziali per il funzionamento del programma, più altri
pacchetti opzionali: libxml (versione 2.0 or superiore),
TagLib (versione 1.2 o superiore), Python (versione 2.3 o
superiore) e PyGTK (versione 2.4.0 o superiore). Con
tutta questa roba, streamtuner funzionerà alla perfezione,
e sarete in grado di sfogliare non soltanto SHOUTcast e
Live365, ma anche Xiph, basic.ch, Google Stations e
punkcast.com. Per l'installazione dai sorgenti, seguite la
guida INSTALL che si trova all'interno del pacchetto, per
poterlo compilare adeguatamente.
Utilizzo:
Aprite Streamtuner, selezionate il servizio che preferite,
come SHOUTcast o Live365, selezionate il genere
musicale che preferite poi andate sulla stazione che volete
ascoltare e cliccate sul pulsante che si trova in alto “Tune
In”. Si aprirà il lettore multimediale predefinito che
riceverà la radio e la bufferizzerà riproducendo la stazione
selezionata. Semplice, no? Per modificare il lettore
multimediale andate nel menu Edit -> Preferences. Nella
scheda Application vedrete una tabella. Nella colonna di
destra, dove c'è scritto “Listen to a stream”, di fianco
apparirà la scritta, ad esempio “xmms %q”. Cancellare
xmms e sostituirlo con amarok, ad esempio, o noatun. La
cosa importante è di non eliminare %q alla fine, lasciarlo
invariato. Esempio: “amarok %q” o “/usr/bin/amarok
%q”.
Trickz
Ora, non vi basta ascoltare solo la musica, ma volete
registrarla e salvarla sul vostro hard disk per poterla
ascoltare ogni volta che volete? Ci pensa Streamripper.
Importante: registrare musica dalla radio è perfettamente
legale, come anche registrare un programma dalla TV, ma
ricordate che condividere questa musica da voi registrata
sulla rete è vietato, dato che tutta la musica riprodotta è
coperta da diritti d'autore. Ci siamo capiti? Se proprio
volete farlo, vedete almeno di non farvi beccare! ;) Ma
veniamo a noi. Per scaricare streamripper utilizziamo il
nostro fantastico Advanced Package Toolkit, se
utilizziamo Debian, oppure scarichiamo i sorgenti e li
compiliamo da http://streamripper.sourceforge.net, in
questo modo:
# apt-get install streamripper
Ora, diciamo a streamtuner di usare streamripper per
registrare musica, in questo modo: Nel menu Edit ->
Preferences, cerchiamo nella colonna di destra la voce
“Record a stream”, e cancelleremo quello che c'è dentro
con, ad esempio, questa riga
x-terminal-emulator -e streamripper %q
-d /home/mouse/Ripped -r -q
dove “/home/mouse/Ripped” è la cartella dove andrà
salvata tutta la musica registrata. Ricordate che la cartella
dove andrete a salvare i file, deve poter godere dei
permessi dell'utente, perché se non ci sono i permessi di
scrittura, il rippaggio non funzionerà.
L'opzione "-r" dice a Streamripper di creare un server di
ritrasmissione. In altre parole, se non lo fate scaricherete
la versione rippata due volte, una da streamripper, e una
dal vostro media player. Non è un problema se avete una
banda larga, ma d'altro canto risparmiare banda è
importante. Come dicevo, l'opzione "-r" creerà un "relay
server" usando di default la porta 8000 ma, nel caso fosse
occupata, continuerà cercando nella prossima porta
aperta. In genere, se la 8000 è occupata, la 8001 non lo
sarà.
Esempio. Trovate una radio carina. La caricate, il vostro
lettore si apre e la ascoltate. Vi piace e decidete di iniziare
a rippare. Premete il pulsante "Record". Si aprirà una
PAG 15
16. S.P.R.I.T.e. Magazine VI
console (da qui "x-terminal-emulator"), e streamtuner
inizierà il suo lavoro. Ora potete ascoltare qualsivoglia
con il vostro lettore multimediale (altre radio, file locali,
etc), perché intanto streamripper continuerà a rippare su
quella stazione e salverà i file sul disco. Se decidete di
voler ascoltare cosa è stato fin'ora rippato, invece di
connettervi a quella stazione, vi connetterete al server
creato da streamripper, e per farlo aprite con il vostro
media player "http://localhost:8000/” (oppure
http://localhost:8001/, etc).
Tutto chiaro? Buon divertimento nel mondo dello
streaming audio, e ricordate: l'udito è un senso dell'uomo
molto importante, non lo rovinate!! :-P
FINE
Hanno collaborato a questo numero (in ordine alfabetico):
Matteo Battistelli, Elvis Ciotti (articolo e impaginazione giornalino), Tommaso Dionigi,
Demo/Simone Gentili, Lupini Matteo, Filippo Venturi
PAG 16