Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Basi di dati ~ informatica triennale
 
Progetto di basi finito - beta test
Clicca QUI per vedere il messaggio nel forum
lordghost
Se volete qualche idea per il progetto metto a disposizione il mio, così magari ho anche dei beta tester in più.

http://cbus.usr.dsi.unimi.it:4000/wargame/

ditemi magari cosa ne pensate. Aggiungo che ha problemi con IE7 e CSS quindi evitate, funziona perfettamente con IE8 e FF

Non ho testato il funzionamento per molti utenti collegati contemporaneamente. :D

Attendo commenti, magari anche per svilupparlo in un prodotto realmente giocabile.:-D

per chi volesse dare un'occhiata al manuale utente :D
http://www.omam.it/scambio/ManualeUtente.pdf

Beppuz
Cavolo!! Complimenti è veramente un ottimo sito!!
Avrai lavorato per molto tempo per costruire un opera così raffinata...
mi sono subito iscritto!!!

Saresti ancora più d' aiuto all' intera comunità del dsy se posassi i codici e gli script in sql del tuo progetto!!!

Ancora complimenti!

Amorphis
penso che hai spesso troppo tempo sul progetto che vale solo 3 punti dal voto :)

lordghost
È vero, direi che non valeva tanto sforzo per 3 punti, ma non l'ho faccio certo per i 3 punti in db, ho guadagnato skill in php, ho imparato nuove potenzialità di mysql, ho imparato a strutturare una sito modulare ed integrare con javascript, per non parlare del mio primo manuale e documentazione tecnica redatta personalmente. direi che il guadagno è stato molto più di 3 punti.

@beppuz: non so se questo sia giusto perchè il progetto è ancora in corso di valutazione, e non so neanche se rispetti le politiche del dsy.
Se c'è una domanda sufficiente potrei anche pensarci, tanto se siete alle prime armi con php, dubito possiate capire il mio codice, mal commentato.

PS: se ti presenti ad un annuncio di lavoro come programmatore, una demo del genere fa il suo figurino :D

Beppuz
Beh, pensare che una domanda chiusa vale 3 punti all' esame scritto, e un progetto di mesi valga lo stesso punteggio mi sembra un pò assurdo anche a me.. Ma come dice Lordghost è più un esperienza o una sfida con se stessi per valutare le proprie capacità e scoprire nuovi strumenti ed efficienti.
@lordghost: ovviamente credo che i prof non siano stupidi, che non si accorgano di ricopiature fatte da progetti già consegnati. Quindi dovrebbe essere uno strumento chiamiamolo "didattico", come esempio di studio di nuovi strumenti di programmazione dinamica, e visto dal mio punto di vista, lodato dall' intera comunità del Dsy.

morbido007
ciao,
scusa ma nel tuo gioco un esercito puo attaccare una città senza che esista una strada che li collega:?

è giusto?

lordghost
@Beppuz: beh detto questo allora lo metto in condivisione, anche dal momento che il progetto è stato già consegnato, ovviemente non mi assumo nessuna responsabilità e confido nella buona fede degli utilizzatori.

@morbido007: esatto, le specifiche lasciano questo dubbio e io l'ho interpretato che un esercito può attaccare qualsiasi città avversaria, indipendentemente dai collegamenti. Ho infatti evitato anche collegamenti con le città straniere.

Inoltre non è stato implementato nessun algoritmo di instradamento e ricerca di percorsi per lo spostamento degli eserciti. Infatti ho previsto un lock per ogni esercito che nel singolo turno ha libertà di movimento fino alla prima azione, quindi è come se il percorso lo scegliesse il giocatore.

Counter65
bel lavoro comunque :)

lordghost
Ecco il Manuale Tecnico con molte spiegazioni sulle scelte di progettazione, funzioni usate etc... tratta più di sql

Beppuz
10 punti a Lordghost!!!

carla86
ciao lordghost!
sto facendo il progetto ma ho qualche problema con il salvataggio delle bandiere.
ho provato a impostare il campo mysql come text ma phpmyadmin mi da errore:
#1170 - BLOB/TEXT column 'bandiera' used in key specification without a key length
mi sai dire come posso fare?! grazie!

lordghost
blob?mi sembra strano che ti dia errore. il mio campo per le bandiere è un varchar di una cinquantina di caratteri in cui ci registro il path.
che viene richiamato con il tag img:
<img src="$path" />

toolpepe
ciao! volevo dire che il sino non va piu, se puoi sistemarlo perfavore cosi posso vedere il tuo progetto grazie

darkshadow
Originally posted by lordghost

@morbido007: esatto, le specifiche lasciano questo dubbio e io l'ho interpretato che un esercito può attaccare qualsiasi città avversaria, indipendentemente dai collegamenti. Ho infatti evitato anche collegamenti con le città straniere.

Inoltre non è stato implementato nessun algoritmo di instradamento e ricerca di percorsi per lo spostamento degli eserciti. Infatti ho previsto un lock per ogni esercito che nel singolo turno ha libertà di movimento fino alla prima azione, quindi è come se il percorso lo scegliesse il giocatore. [/B]


sul primo punto sono d'accordo nelle specifiche dice splicitamente che un esercito può attacare chiunque anceh se non esistono strade e indipendentemente dai PM.

per quanto riguarda il punto 2 non sono d'accordo perchè per spostarsi (non attacare) prima di tutto ci deve essere un cammino tra le due citta e secondo il numero di strade per raggiungere la seconda citta deve essere <= dei PM dell'esercito quindi è necessario calcolare se esiste un cammino che rispetta questo vincolo.
sinceramente non ho capito come hai fatto a verificare che ci sia un percorso valido.


ds.

lordghost
nel modo più semplice possibile: se devo andare da A verso C passando per B, sposto in B e poi in C. Niente di più semplice, funzionale e veloce.
Di certo non è una buona idea se stiamo parlando di mmorpg di 2k persone con più di 200 città collegate tra loro, ma in questo modesto progetto da 3 punti credo che sia perfetto.
Durante la correzione non è stata considerata una mancanza, direi che in fondo il fine è raggiunto.

Ovviamente se dovessi continuarlo lo farei più intelligente, con una mappa virtuale dei collegamenti, una grafica accattivante con animazioni, magari anche in flash... ma dato che nessuno mi paga :D

@toolpepe: mi spiace ma non gestisco il server che sta su uno dei laboratori in comelico, credo che qualcuno l'abbia spento -.-'

dArkLuis
ciao, forse non ho capito bene la traccia, ma come si fa ad avere punti PI alla fine del turno??Perchè il testo dice solo se si avrà avuto un aumento della popolazione e del risorse naturali...però non possono aumentare tutte e due contemporaenamente perchè il testo dice che uno fa diminuire l'altro. Quindi la mia domanda è in che situazione c'è un aumento di PI della nazione??
E poi come si fa ad richiamare una vista tramite SQL??Grazie.

lordghost
1) conquistando le città straniere: nel mio gioco il giocatore acquisisce i VI della città e li porta nei suoi pi
2) aumentando la popolazione, nel mio caso l'aumento della popolazione segna una buona tattica e quindi alla fine del turno c'è un premio, al contrario vice versa. vincendo le battaglie e conquistando pi ci fa aumentare il premio della metà del guadagno ad ogni turno.
queste sono le mie formule.

R1cky`
Allora non sono l'unico a essersi scritto un framework php per il progetto :) Peccato che il prof probabilmente non se ne sia nemmeno accorto :P
Comunque, rinnovo la segnalazione del malfunzionamento, la connessione pare andare in timeout :)

carla86
Come avete fatto a fare la gestione dei turni?
Mi spiego meglio: Il testo dice ke un giocatore quando non è di turno può visualizzare i suoi dati (la nazione, quanti pi, quante citta e cosi via...) quindi nn lo posso sloggare ma allo stesso tempo gli devo togliere la possibilità d fare azioni..
Cosa avete fatto voi?

E un altra domanda: io sto utilizzando mysql. Dove posso mettere i trigger e le funzioni? in qualsiasi punto del file php o all'inizio? e le funzioni sql?

GRAZIE Carla

carla86
Un altra domanda..
nella pagina d login ossia la prima pagina della sessione ho messo queste righe di codice x verificare i dati della sessione:

$nomesessione = session_name();
$idsessione = session_id();
print($nomesessione); //restituisce il nome della sessione
print($idsessione); //restituisce l'ID

ma in realtà nn me li stampa.
xo' c'è da dire ke le variabili d $_SESSION che contengono user e password se metto le print me li stampa..

quindi nn capisco, la sessione funziona anche se nn mi stampa il nome e l'id?
Vi prego aiutatemi.. Grazie

R1cky`
Originally posted by carla86
La sessione funziona anche se nn mi stampa il nome e l'id?


Non credo te ne freghi nel nome e dell'id, una volta che ti tiene i valori nell'array $_SESSION vuol dire che funziona corettamente.

carla86
Come avete fatto a fare la gestione dei turni?
Mi spiego meglio: Il testo dice ke un giocatore quando non è di turno può visualizzare i suoi dati (la nazione, quanti pi, quante citta e cosi via...) quindi nn lo posso sloggare ma allo stesso tempo gli devo togliere la possibilità d fare azioni..
Cosa avete fatto voi?

E un altra domanda: io sto utilizzando mysql. Dove posso mettere i trigger e le funzioni? in qualsiasi punto del file php o all'inizio? e le funzioni sql?

GRAZIE Carla

R1cky`
Originally posted by carla86
Come avete fatto a fare la gestione dei turni?
Mi spiego meglio: Il testo dice ke un giocatore quando non è di turno può visualizzare i suoi dati (la nazione, quanti pi, quante citta e cosi via...) quindi nn lo posso sloggare ma allo stesso tempo gli devo togliere la possibilità d fare azioni..
Cosa avete fatto voi?

E un altra domanda: io sto utilizzando mysql. Dove posso mettere i trigger e le funzioni? in qualsiasi punto del file php o all'inizio? e le funzioni sql?

GRAZIE Carla


I trigger e le funzioni le devi inserire nel dbms e poi quest'ultime le richiami tramite il php.
Comunque credo che ti conviene aprire un topic apposito, qui sei ot ;)

lordghost
io li ho gestiti così che mi sembra il metodo più sicuro:
login -> verifica dei dati criptati con sha-1 con token challange e memorizzazione dell'attuale sid (session id)
verifica -> ad ogni refresh l'unica cosa che si passa al server è il sid che confronta nel database per scegliere l'utente attivo con quel sid (se ne esiste uno)

è un metodo sicuro che permette di non tenere in memoria nome utente e password che potrebbero essere a riscchio dato che sono dati sensibili.

ovviamente il sid ha una scadenza, oltre il quale non è più valido (da implementare in php)

carla86: ricordati che un buon tutorial risponde a tutte le domande :D, ma una dritta te la do lo stesso, prima di usare le sessioni è meglio inizzializzarle :D
prova con session_start(); all'inizio di tutto (tag <html> compreso), ad inizio file. ;)

carla86
Ciao Lordghost! Innanzitutto grazie x la risposta..
Cmq è ovvio ke la prima riga d codice deve essere session_start();
L'avevo già messa...
Qui ho copiato la parte d codice ke avevo messo apposta x controllare il funzionamento della sessione e siccome sono alle prime armi cn php e mysql nn sapevo se il fatto ke nn li stampa voleva dire un cattivo funzionamento della sessione.

dArkLuis
scusa lordghost, ma volevo chiederti come fai a fare un messaggio di alert senza che la pagina sottostante non viene caricata o cambiata. Ho delle difficolta in merito. Magari con un esempio di codice capirei di piu. GRAZIE.

xSharKMaNx
Davvero un ottimo lavoro direi da very sborone!
A parte gli scherzi, complimenti per tutto ;)

Sacratix
Originally posted by darkshadow

per quanto riguarda il punto 2 non sono d'accordo perchè per spostarsi (non attacare) prima di tutto ci deve essere un cammino tra le due citta e secondo il numero di strade per raggiungere la seconda citta deve essere <= dei PM dell'esercito quindi è necessario calcolare se esiste un cammino che rispetta questo vincolo.
ds. [/B]


occhio che il testo dice
Lo spostamento è possibile solo se il numero di strade da percorrere è inferiore ai pm

non <=

Sacratix
Originally posted by carla86
Ciao Lordghost! Innanzitutto grazie x la risposta..
Cmq è ovvio ke la prima riga d codice deve essere session_start();


veramente basta chiamarla prima di usare qualsiasi variabile $_SESSION

lordghost
Originally posted by dArkLuis
scusa lordghost, ma volevo chiederti come fai a fare un messaggio di alert senza che la pagina sottostante non viene caricata o cambiata. Ho delle difficolta in merito. Magari con un esempio di codice capirei di piu. GRAZIE.

Molto semplice, javascript. è un codice abbastanza banale, ad esempio la conferma la si fa:
PHP:

if(confirm(&quot;Sicuro di voler attaccare questa città?&quot;)) 
      
location.href '?m=army&fn=battle&aid='+esercito.value+'&cid='+id;



oppure potrebbe essere messo dentro un form con validazione all'evento submit. non è facile spiegare js in un semplice reply quindi basta cercare su google "form validation javascript" è un risultato possibile è http://www.w3schools.com/jS/js_form_validation.asp (sono affezzionato a questo sito io :D sfogliato è un ottimo prontuario)

xSharKMaNx
Creazione Esercito
Ti conviene mettere una MaxLenght ai campi:

code:
SQL Error SELECT createArmy('EXTEST', 108, 999999999999999999999999999, 90) Error: Out of range value for column 'api' at row 1


Oppure effettuare il controllo come hai fatto per i Soldati arruolati

xSharKMaNx
Creazione Città

code:
Errore SQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''LE PARIS'') as id' at line 1 in SQL:SELECT createCity(90, 'LE PARIS'') as id


Devi prevedere le città con l'apostrofo ' :)

xSharKMaNx
a video è poco intuitivo sulle azioni da svolgere, l'utente ha la necessità di leggersi il manuale per poter capire dove "mettere le mani".

Il design è molto bello, ma il pupazzetto fatto in Paint è inguardabile :)

Proporrei una bella img tipo questa:
http://www.hugewallpaper.com/data/m...lin_01_1600.jpg

lordghost
hehehe xSharKMaNx, ti ricordo che il progetto vale 3 punti, il professore lo ha guardato per 30 secondi e probabilmente non ha letto nessuno dei due manuali. Però rimane un bell'esercizio. Il problema principale è che come progetto è stato codificato senza nessuna progettazione "on the fly" quindi guardando indietro vedo che ci sono scelte progettuali eterogenee, e purtroppo senza un buon framework di validazione ci sono un bel po di buchi :D

Per l'interfaccia invece credo che sia un po laborioso ma questo è cmq ricompensato dalla velocità di gioco, poi rimane sempre il fatto che non ho fatto molti studi di usabilità :D:D

PS: noto con piacere che il server è tornato up, finalmente

dArkLuis
scusa lordghost, ma forse non mi sono spiegato bene. Non intendevo perchè nel form, ok lo so fare, ma mi riferivo quando devi dare un messaggio di alter ad esempio se l'esercito non ha abbastanza pm per effettuare lo spostamento. In questo caso quando usi un alert con js, cambia pagina (sfondo tutto bianco con messaggio di alert al centro della pagina). Io non vorrei far cambiare pagina. Hai qualche soluzione?? Perchè in rete ho trovato la soluzione di history.go(-1) ma non mi sembra molto elegante...GRAZIE:)

Sacratix
grazie per aver messo il manuale tecnico, ora sò esattamente cosa ci si deve mettere

quindi mi sorge spontaneo:

- perchè usi degli ID come chiavi primarie e metti i nomi UNIQUE, invece di usare i nomi come chiavi?

2° FN: è rispettata pure la seconda forma normale poiché ogni attributo non chiave dipende funzionalmente e completamente dalla chiave primaria

insomma, bandiera e pi dipendono da nazione, non da id_player

lordghost
Semplicemente perchè poi nella vita reale si usa fare così, e a livello di prestazioni è sicuramente migliore di granlunga durante i join. E poi il passaggio dei parametri tramite URL risulta più corto se uso gli id piuttosto che i nomi lunghi. Insomma non è sbagliato usare il nome, ma trovo comodo usare un campo ID.
Risulta anche comodo in fase di programmazione id_table che facilita i join o altro, mentre ricordarsi ogni volta i campi delle tabelle può essere noioso.

Sacratix
non lo sò, nel mio caso è saltato fuori solo una volta un join, e solo per semplifcare l'interfaccia, sarà che cmq non ci vedo un grosso problema, per il resto sono solo gusti immagino.

ah,
un'ultima cosa poi prometto che smetto di rompere.
dove dici che lo spazio per l'id lo recuperi snellendo l'indice, sei sicuro?
rendendo un campo unique, lo indicizzi...
[ho appena provato ad eliiminarlo e non mi lascia, giusto per essere sicuro di non dire caz.]

lordghost
Hai ragione, sinceramente non ti so dire. Sono conscio del fatto che in realtà potrebbe non esserci risparmio di spazio o di prestazione, ma dopotutto se guardi come fuori dal corso di basi vengono implementati i DB usano tutti questi indici numerici che sono molto comodi. In realtà non avrei neanche messo UNIQUE, ma avrei preferito un controllo fatto da php per l'unicità del nome.
Comunque non mi soffermerei troppo sugli indici, l'importante è avere delle relazioni stabili e compatte, poi si può filosofizzare molto sulle forme normali.

Vorrei ricordare però che il mio materiale è da considerare di pura curiosità e spunto, non è detto che sia tutto giusto.

Kopz
Sinceramente a me non sembra fatto bene (senza offesa).. L'ho provato solo 5 minuti e ho trovato una grande serie di problemi.

Prima di tutto nessun input e' controllato, o escapato. Questo apre le porte ad un sacco di SQL injection ed e' un serissimo problema di sicurezza.

Il sito non valida

Se creo una citta' e gli do' per esempio "100000" Risorse Naturali e Agricole vengo bannato, senza ricevere nessun motivo ne' nulla.

Creare eserciti sembra non funzionare e ricevo un warning di php. Altre volte ricevo:
SELECT createArmy('nnn', 143, 0, 0)
Error: Data truncated for column 'pm' at row 1

Se gli do' piu' PI di quelli che ho a disposizione, di nuovo, vengo bannato con il semplice messaggio "Area riservata, non hai accesso".

Comunque sia "actual" vuol dire "reale" non "attuale" o "corrente". actual_turn per esempio in javascript dovrebbe essere current_turn.

lordghost
Ma per quale motivo dovrebbe validare il sito? Non è certo un sito istituzionale, nè offre servizi di nessun tipo... ma a parte questo.
È tutto molto bello quello che dici kopz ma che centra?? Lo scopo di questo progetto è passare l'esame di basi e prendere quei miseri 3 punto. In due o tre mesi di lavoro potrei ridefinire tutta la strategia e migliorare la gerarchia delle classi, implementando metodi di validazione e strutture di sicurezza migliori. Potrei passare ad una connessione sicura su un server protetto con datacenter di backup in Nevada ed almeno 30 server collegati per creare una grid mirror ed avere un load balancing del carico potendo così gestire più di 200 milioni di utenti attivi in tempo reale. Ovviamente per un tale carico avrei un contratto con qualche ente che gestisce le portanti intercontinentali della rete Internet.

Scherzi a parte, nonostante gli innumerevoli problemi che hai riscontrato ho passato basi, e dato che non ha nessun valore di mercato non vedo perchè dovrei spendere tempo per debuggare qualcosa che non mi serve più.

Come ho già detto: non l'ho postato come progetto esemplare, ma solo come spunto per chi non sa come andare avanti.

Kopz
E' un progetto di database. Il fatto che sia pieno di SQL injection e' un grave errore, non una cosa "in piu'" che "non vale la pena correggere per un progetto di 3 punti". E' una cosa fondamentale.

Stesso per quanto riguarda gli errori della query quando provi a creare un esercito, o quello che succede quando inserisci valori molto grandi nelle risorse.

Se non riesci a creare un esercito allora non funziona, non e' una cosa "extra", e' un requisito del progetto.

E no, non l'hai postato come progetto esemplare, l'hai postato chiedendo feedback:
ditemi magari cosa ne pensate

[...]

Attendo commenti


Ed e' quello che ho fatto.

EDIT: ah, per rispondere alla tua domanda: http://validator.w3.org/docs/why.html

lordghost
è qua che ti sbagli, nella documentazione del progetto no vi è nessuna richiesta riguardo alla sicurezza di eventuali falle, forse ti confondi con il progetto di Sicurezza. Il fatto che uno sappia decomporre una tabella, creare join, e normalizzare relazioni, QUESTO è un requisito del progetto.
Ho chiesto pareri sulle richieste del progetto e la mia implementazione, non sul fatto che non sia validato.

E sulla validazione è solo una medaglietta in più da portarsi a casa, il fatto che sui link non abbia inserito gli attributi alt poco importa ai fini del progetto.

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate