mercoledì 12 maggio 2010

Il CRUD è completo!

Salve a tutti!

Con questo brevissimo intervento comunico che ho finalmente terminato l'implementazione ottimizzata (copyright © Doctor Vel 2010) del CRUD del database libri, in JavaServerPage.

I link per accedere al download dei sorgenti o per aprire direttamente le pagine sul web sono sempre quelli dell'altra volta:
Questo per aprire la pagina principale del CRUD, e Questo per scaricare l'archivio contenente i sorgenti, le dichiarazioni SQL e la pagina dello stile.

Vi cominico che, purtroppo, il servizio offerto da HostingJava è una mezza ciofeca, dunque dopo 2-3 volte che eseguite una operazione tutto si blocca. Che sòla! Mi domando se sia dovuto anche al fatto che la connessione al database non è mai stata chiusa, e anzi ad ogni esecuzione ne viene creata una nuova...cosa ne pensa prof.? Possibile che è questo che intasa tutto?

Comunque, sul localhost funziona tutto perfettamente con il Tomcat. Quindi, se il problema di HostingJava è risolvibile bene, altrimenti pace!

Buonanotte a tutti, a domani!

domenica 9 maggio 2010

Ottimizzazione del CRUD

Buonasera a tutti!

Eccomi di nuovo "presente" sul blog. Quest'oggi, siccome è abbastanza tardi, provvederò a pubblicare sfruttando appieno le potenzialità dei diversi strumenti che ho a disposizione: Hosting Java e questo blog.

Il lavoro che sto per presentarvi consiste nell'implementazione del CRUD del database libri, e fin qui non ci piove. La novità sta nel fatto che le pagine non richiamano altre pagine, bensì richiamano se stesse. In questo modo è possibile diminuire drasticamente:
  • il codice dupilcato
  • il numero di pagine necessarie
  • il tempo di navigazione, visto che bisogna caricare meno pagine
Se poi si considera che è stata effettuata anche la separazione dello stile (in CSS) dal contenuto, ed anche le istruzioni ridondanti (come quella di connessione al database) sono state poste in file separati opportunamente richiamati, allora si ha un'implementazione davvero più leggera e pulita.

Il tutto è pubblicato sul mio spazio web, a questo indirizzo.
Vi ricordo che l'homepage di questo spazio è, invece, questa.

Potete sbizzarrirvi a inserire nel database tutte le informazioni che volete, visto che non c'è bisogno di autenticazione alcuna. L'unica cosa che non ho fatto in tempo ad implementare, però, è la pagina di visualizzazione/modifica dei titoli (che comunque arriverà a breve).
Per chi volesse, è disponibile anche il download dell'archivio contenente tutti i file costituenti questo CRUD, compreso un documento di testo con le dichiarazioni SQL utilizzate per creare il database MySQL al quale si collega il tutto.
L'archivio di cui appena detto è disponibile per il download a questo indirizzo.

Non mi resta che augurare buonanotte a tutti!
Alla prossima!

PS_prof. che ne pensa di questo sistema?

lunedì 5 aprile 2010

::: HOSTING JAVA :::

Buonasera e buona Pasquetta a tutti!

Oggi piove (what that fuck!). Quindi il progetto di andare a fare un po' di chilometri alla Penna è fallito ed ho approfittato di questo breve periodo di tempo per dare una riguardata agli ultimi argomenti di Informatica.
Questi riguardano la realizzazione di programmi Servlet e pagine JSP (Java Server Page, linguaggio le cui istruzioni mi sono ancora ostili...), il tutto per restare nell'argomento delle pagine Web dinamiche.

Siccome, tempo addietro, mi ero iscritto a HostingJava, oggi ho caricato (tramite FileZilla) tutti gli ultimi lavori fatti, e ne ho creati e testati anche di nuovi. Così, almeno, sta roba non me la scordo di sicuro.

Ecco quindi a voi lo SPAZIO WEB del Doctor Vel! È raggiungibile da tutti a questo indirizzo. Vi sono pubblicati tutti gli ultimi lavori svolti ed alcuni miei elaborati, come la sintesi sul funzionamento di server e pagine dinamiche (presente a questo link).

Non mi resta che augurarvi una buona navigazione nel mio "mini-sito"...

Arrivederci a tutti! :-)

giovedì 25 febbraio 2010

Maschere...e tanto altro

Buonasera frèghi !!!

Appena tornato a casa sono crollato (come al solito) in un sonno profondo di circa un'ora, dopodichè mi sono messo a fare quel compito che oggi il prof. aveva assegnato in classe. In teoria avrei dovuto ripassare diritto, ma siccome l'informatica mi interessa di più ho optato per questa scelta.

Cooooooomunque... faccio presente a chi stamani non era presente (che giro di parole!) quale era il compito da svolgere: il Nata, dopo aver riepilogato come si creavano delle maschere, ne ha proiettata una per un'ora di fila e noi bravi studenti la dovevamo rifare identica.
Siccome sono stato assente tutta la prima ora di informatica (causa orientamento ai freghi delle seconde), non avevo voglia di iniziare il lavoro in fretta e in furia, così mi sono limitato a studiare come si sarebbe potuta realizzare quella benedetta maschera, magari senza andarsi a complicare troppo la vita.

La maschera in questione è la seguente :


Oggi pomeriggio, con un'oretta di lavoro, sono riuscito ad ottenere il seguente risultato, che a me pare più che soddisfacente (poi valutate voi...) :


Però, come giustamente starete pensando, a far vedere solo il risultato so capaci tutti i coglioni. Ecco, perciò, che pubblico anche il sorgente. Vi consiglio anche di leggere bene i commenti che ho messo all'inizio, in quanto contengono un'informazione particolarmente utile che ho scoperto prima per caso.
Nonostante abbia potuto farlo, non ho volutamente preso spunto dal sorgente della maschera originale perchè volevo fare una sorta di sfida con me stesso, per capire se le conoscenze che avevo fossero bastate a realizzare quanto chiesto. E in effetti sono bastate.

Ecco il sorgente (l'immagine è in formato A2) :


E fino a qui nulla fa una grinza.
Ora vi dirò di più: siccome il sorgente è abbastanza corposo, ho deciso di snellirlo leggermente. Per mettere in atto ciò, ho fatto quello che il prof. aveva profetizzato tempo fa: la separazione dello stile dal contenuto. Quindi, da un solo sorgente ne ho realizzati due: uno contenente solo l'HTML, e l'altro solo il CSS. Poi ho collegato tramite delle semplici istruzioni i due file, ed ecco che il risultato è lo stesso di prima, con la differenza che il codice è separato in due file.

A seguire, ecco i sorgenti delle parti HTML e CSS :




In questo modo è possibile assegnare lo stesso stile a pagine dal differente contenuto.
E cosa succede se, per qualche motivo, il file dello stile non venisse trovato? Semplice: si vedrebbe solo il contenuto con una formattazione penosa, come si può vedere dall'immagine che segue...


Stracco morto, ma soddisfatto, finalmente vado a dormire...

Buonanotte a tutti! Ce vedemo!

lunedì 22 febbraio 2010

Pagine web DINAMICHE

Buonasera a tutti!

Oggi, con questo breve post, illustro lo stato di avanzamento della trattazione riguardante il linguaggio HTML, questa volta con particolare riferimento alla form ed alle pagine HTML dinamiche.

Innanzi tutto, ecco gli appunti relativi a questa parte di modulo:



A seguire, pubblico un esempio pratico di una pagina web realizzata ad-hoc per toccare con mano in cosa consiste la dinamicità di un'interfaccia web. Faccio notare che il metodo utilizzato per l'invio dei dati dell'utente è quello GET, come visibile dall'URL posto nella parte bassa dello screen della pagina.

SORGENTE e SCREEN



Reduce di una lezione all'Università (facoltà di Ingegneria Informatica), vi saluto...

Alla prossima! Arrivederci!

domenica 14 febbraio 2010

Ripasso HTML - CSS

Buonasera a tutti!

Siccome domani mi tocca di essere interrogato su questi argomenti che stiamo trattando, ho dato una bella riguardata a tutte le pagine realizzate man mano che la spiegazione del prof. proseguiva.

L'ultima di queste, Pagina_3.html, è stata realizzata con lo scopo di prendere dimestichezza con le ancore ed i collegamenti ipertestuali. Siccome non l'avevo ancora pubblicata, ecco a seguire sorgente e screen:



Inoltre, pubblico l'aggiornamento dei miei appunti:

Dentro il TAG "head" ci stanno tutti i metadati della pagina, che indicano come sono organizzati i dati della pagina.

HEADER: h1 formatta con un carattere grande
h2 con un carattere più piccolo
h3 con un carattere ancora più piccolo
Fino ad arrivare ad h6 che è il più piccolo in assoluto. Ovviamente, posso usare più di ogni h*, a seconda delle necessità (posso mettere contemporaneamente, nella stessa pagina, quanti h1 mi pare, e così per h2 e tutti gli altri)

Direi che è tutto...
Arrivederci, alla prossima!

mercoledì 10 febbraio 2010

Ancora appunti su HTML - CSS

Ciao a tutti!

Stasera sono esausto quindi scrivo poco ma pubblico tanto. Allora, ecco a seguire gli altri appunti da me presi sui linguaggi HTML e CSS durante le ultime due lezioni, spero che siano utili a qualcuno e, più che altro, spero che siano comprensibili e che si leggano.




Alla prossima, buona serata a tutti i lettori!

domenica 7 febbraio 2010

Web developing : HTML - CSS

Salve a tutti,

oggi sarò breve e diretto. La scorsa lezione abbiamo iniziato la trattazione del nuovo modulo sui linguaggi di programmazione HTML e CSS, con i quali è possibile creare i layout di pagine web.

Dunque, pubblico gli appunti da me presi ed il relativo screen della prima pagina web che abbiamo realizzato, visualizzata mediante il browser Mozilla Firefox.



Una nota relativa all'inserimento dell'immagine: se essa viene posta nella stessa cartella del codice HTML, è necessario specificare soltanto il suo nome ed estensione in fase di inserimento. Qualora, invece, l'immagine si trovi in una cartella differente da quella dove è situato il codice, è necessario specificare l'intero path-name (percorso completo + nome) del file che si vuole inserire.

Ce vedemo, arvedecce!

mercoledì 13 gennaio 2010

Preparazione al compito

Buonasera freghi e compagnia bella!

Dopo un bel giretto in moto (ho anche dato dietro, per quasi 10km, a uno che alla fine sentendosi seguito metteva le frecce ma non girava...bellissimo) ... dicevo, dopo il giro in moto mi sono messo a rifare di sana pianta l'esercitazione di martedì (quella che doveva essere il compito) e l'ho finita tutta.

Quello che pubblico ora è nient'altro che la soluzione dei miei esercizi, che spero siano stati fatti bene altrimenti domani mi attacco e tiro forte.

Il database su cui ruotavano gli esercizi è il seguente:



Ecco a seguire le soluzioni degli esercizi, ciascuna preceduta dalla relativa consegna. L'ultimo esercizio, il numero 15, è pubblicato sottoforma di screen, e secondo me (fatto in quel modo) non è proprio perfetto: al prof. il giudizio!



martedì 5 gennaio 2010

Arpìamo l'via!

Buonasera a tutti!

Purtroppo le vacanze sono ormai giunte agli sgoccioli e tra due giorni ci ritroveremo nuovamente a scuola, dunque dopo un ozio totale di due settimane ho dato una riguardata agli ultimi argomenti fatti per non impappinare il cervello all'imminente ripresa delle lezioni.

Colgo l'occasione per ringraziare il prof. Natalizi per gli auguri che or ora ho visto pubblicati sul suo blog, e che ricambio anche se mooooolto in ritardo...

Comunque, veniamo al dunque. Premetto di non aver creato materiale nuovo ma semplicemente guardato e risistemato quello fatto a scuola, che ora pubblicherò anche per permettere a coloro che non hanno le idee chiare di confrontare un po' gli appunti...

Quelle che seguono sono le istruzioni utilizzate per realizzare, attraverso SQLite3, un database di 3 tabelle (studente, materia e voto) volto alla memorizzazione dei voti conseguiti dagli studenti in diverse materie. Dopo aver inserito i dati, sono state effettuate delle estrapolazioni utilizzando le varie istruzioni viste finora a scuola.
Trattandosi di appunti, sono presenti anche parti di teoria relative alle istruzioni e ai database in generale.

sqlite3 voti.db (accede al database voti.db, e se non esiste lo crea)
.tables
.headers on
.mode columns on

█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦

► creo le tabelle
create table studente (id int, nome varchar(30), primary key(id));
create table materia (id int, nome varchar(30), primary key(id));
create table voto(id int, voto int, dataVoto char(10), studente_id int, materia_id int, primary key(id));

► inserisco i dati
insert into materia values(1,"Italiano");
insert into materia values(2,"Storia");
insert into materia values(3,"Inglese");
insert into materia values(4,"Matematica");
insert into materia values(5,"Informatica");
insert into materia values(6,"Elettronica");

insert into studente values(1,"Anselmi");
insert into studente values(2,"Baldassarri");
insert into studente values(3,"Bazzucchi");
insert into studente values(4,"Biancalana");
insert into studente values(5,"Biscarini");
insert into studente values(6,"Cavalierini");
insert into studente values(7,"Ceccarini");
insert into studente values(8,"Lugani");

insert into voto values(1,5,"14-12-2009",1,4);
insert into voto values(2,9,"14-12-2009",6,3);
insert into voto values(3,9,"14-12-2009",1,3);
insert into voto values(4,6,"14-12-2009",7,5);
insert into voto values(5,7,"15-12-2009",4,2);
insert into voto values(6,8,"15-12-2009",3,6);
insert into voto values(7,5,"15-12-2009",2,2);
insert into voto values(8,4,"15-12-2009",5,1);
insert into voto values(9,5,"15-12-2009",5,1);

► estrapolo
SELECT studente.nome,
materia.nome,
voto.voto, voto.dataVoto
FROM materia, studente, voto
WHERE studente.id=voto.studente_id
AND voto.materia_id=materia.id;

Visualizza, senza criteri restrittivi (nel senso che visualizza tutti i dati) il nome dello studente, il nome della materia, il voto conseguito e la data in cui è stato conseguito. In pratica visualizza tutti i voti che sono stati inseriti

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

SELECT count(*) AS "numero voti" FROM voto;

Conta il numero di voti che sono stati assegnati in totale, e il risultato lo identifica come una variabile chiamata "numero voti". Il nome della variabile è visualizzato nell'estrapolazione come etichetta della colonna

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

SELECT count(studente.nome) AS "numero studenti" FROM studente;

Conta i nomi degli studenti, e il risultato lo identifica come una variabile chiamata "numero studenti"

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

SELECT materia.nome, count(*) AS "numero totale voti per materia"
FROM studente, voto, materia
WHERE studente.id=voto.studente_id AND
voto.materia_id=materia.id
GROUP BY materia.nome
HAVING materia.nome="Inglese";

Estrapola, chiamandolo "numero totale voti per materia" e raggruppandolo per nome della materia, quanti voti sono stati assegnati per la materia Inglese

NOTA: la WHERE seleziona delle specifiche RIGHE, mentre la HAVING seleziona un RAGGRUPPAMENTO di righe

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

SELECT studente.nome, materia.nome, count(*) AS "numero totale voti per studente per materia"
FROM studente, voto, materia
WHERE studente.id=voto.studente_id AND
voto.materia_id=materia.id
GROUP BY studente.nome, materia.nome;

Estrapola, chiamandolo "numero totale voti per studente per materia", quanti voti sono stati assegnati in totale ad ogni studente ad ogni materia

♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣

SELECT count(*) from
SELECT count(*), studente_id
FROM voto
GROUP BY studente_id
ORDER BY studente_id AS "numero studenti";

In questo caso si è adoperata una SUB-QUERY, ossia una query che usa il risultato di un'altra query come fonte a cui attingere dati per la nuova estrapolazione. Per non utilizzare due operazioni singole, si sarebbe potuto anche creare una VIEW, ossia una nuova tabella contenente i dati dell'estrapolazione. Questa tabella risulta presente poi come tabella insita al database, interrogabile come una qualsiasi altra tabella

CREATE VIEW studenti_voto AS
SELECT count(*), studente_id
FROM voto
GROUP BY studente_id
ORDER BY studente_id AS "numero studenti";

█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦

► cancello i dati da una o più righe ( ISTRUZIONE DELICATA !!! )
DELETE FROM voto WHERE id=8;

NOTA: mettendo "DELETE FROM voto" e basta, cancella TUTTI i dati contenuti nelle righe ma non la struttura della tabella, che si mantiene

► cancella TUTTA la tabella, compresa la struttura
DROP TABLE voto;

► modifica i dati di alcune righe
UPDATE voto SET dataVoto="16-12-2009" WHERE id=9;

█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦█♦

CRUD=create, read, update, delete (creazione, lettura, aggiornamento, eliminazione). È il meccanismo che permette di gestire le tabelle attraverso le quattro operazioni eseguibili su di esse, ed è la minima richiesta di elaborazione in un database operata da un gestore di database

Inoltre, parte dell'elaborazione di questo database l'ho immortalata con uno screen, che pubblico a seguire:



Ultima cosa: come avrete tutti sicuramente notato, le dimensioni della finestra DOS del prompt sono piuttosto piccole e per visualizzare tutto correttamente ci sarebbe la necessità di ingrandirla. Inoltre, nel caso si volessero fare degli screen della finestra stessa, poi in fase di stampa la cartuccia del nero si consumerebbe come il pandoro a Natale dato che lo sfondo è tutto nero...
La soluzione è impostare la finestra DOS modificando le dimensioni ed i vari colori, però poi bisognerebbe farlo ogni qualvolta la si utilizza o, nel migliore dei casi, almeno una volta su ognuno dei computer dove usiamo SQLite. Senza contare il fatto che bisognerebbe sempre stare a cambiare la directory di lavoro...insomma: una perdita di tempo e, a lungo termine, una rottura immane.

Per questo ho realizzato una cosa molto semplice ma che risolve molti problemi: una semplice BAT. Utilizzando semplici comandi, questa BAT:
  1. Apre una finestra DOS di dimensioni accettabili e con un buffer consistente (ovvero non è che, dopo un po' che scorre la finestra, le righe scritte per prime non stanno più in memoria per essere riguardate)
  2. Imposta lo sfondo bianco e il carattere del testo nero, così sarà felice la cartuccia della stampante quando mettiamo su carta gli screen
  3. La directory di lavoro diventa automaticamente quella dove è collocata la BAT. Basterà perciò porla nella stessa cartella di SQLite3 per avere la cartella di lavoro subito pronta
  4. Visualizza il contenuto di questa cartella, il che non serve quasi a nulla però a volte è utile a me...perciò ecco anche questa funzione
Per chi non lo sapesse, per creare una BAT è sufficiente realizzare un nuovo documento di testo con il blocco note, e poi salvarlo con estensione .BAT. Io, ad esempio, l'ho chiamato Finestra.bat ed al suo interno contiene le seguenti istruzioni, di cui potete tranquillamente fare copia e incolla:

MODE CON: COLS=150 LINES=800
COLOR F0
dir
@echo ----------------------------------
@echo Finestra impostata dal Doctor Vel
@echo ----------------------------------
cmd

Ecco, ora che ho pubblicato questa roba mi vado a vedere un film...
Buona serata e buonanotte a tutti! E buona epifania!