Technology [C++]Tetris, aiuto per la tesi

breakinlord

Ninja Skilled!
Egregi informatici soheddiani, ho un bel problema.

Sto sviluppando la tesi per la triennale, ma sono fermo causa incapacità.

La tesi consiste nell'interfacciare questo caschetto neurale con un semplice gioco.
Il prof mi ha passato questo tetris che presenta le versioni in c# e c++. Io sto lavorando sulla seconda.

Il problema sta in questi punti:
1. Se provo a compilare il codice spuntano fuori errori e warning
2. Ovviamente non riuscendo a compilare non posso fare l'eseguibile

sto utilizzando Eclipse c/c++ e dev-c++

La mia richiesta è questa, potete per piacere provare voi a compilare o a creare l'esegiubile semplicemente per vedere se anche a voi da problemi o sono io che sono totalmente incapace. Non vi chiedo altro.

Se neanche voi ce la fate proverò a cambiare gioco...
 

Samael

Ninja Skilled!
purtroppo non ho nessuno dei due compilatori da te citati... ma se mi posti i messaggi di errore 8iniziamo da quelli), forse potrei darti delle dritte... sempre che nel frattempo non mi sia arrugginito. :sad:
 

Sirion

Spam Master
Prova con visual studio, da quel che vedo (avendo giusto aperto l'archivio e richiuso 30 secondi dipo) mi pare di capire che siano progetti di visual studio 2005.

Poi inr ealtà non ho mai usato c/c++ con eclipse e il dev lo odio con tutto il sangue che ho in corpo. Per cose di dimensioni contenute preferisco editor di testo + compilatore da prompt/file di build.

Ma che errori dà a compilazione? Addirittura errori di compilazione mi pare peso.
 

Il Droide

Spam Master
Non ho mai usato Eclipse in vita mia quindi non ti posso aiutare, ma che compilatore utilizzi?

Comunque non saprei, non credo ci siano dei Makefile dentro quindi non ti posso aiutare.

Come ha detto Sammi, posta gli errori e vediamo piano piano di sistemarli.
 

breakinlord

Ninja Skilled!
Sirion ha scritto:
Prova con visual studio, da quel che vedo (avendo giusto aperto l'archivio e richiuso 30 secondi dipo) mi pare di capire che siano progetti di visual studio 2005.

Poi inr ealtà non ho mai usato c/c++ con eclipse e il dev lo odio con tutto il sangue che ho in corpo. Per cose di dimensioni contenute preferisco editor di testo + compilatore da prompt/file di build.

Ma che errori dà a compilazione? Addirittura errori di compilazione mi pare peso.
Si al momento lo sto scaricando dal msdnaa

Appena torno all'uni vi posto qualche errore
Ðroide Sir Cassius√ ha scritto:
Non ho mai usato Eclipse in vita mia quindi non ti posso aiutare, ma che compilatore utilizzi?

Comunque non saprei, non credo ci siano dei Makefile dentro quindi non ti posso aiutare.

Come ha detto Sammi, posta gli errori e vediamo piano piano di sistemarli.
Come compilatore sto usando miniGW
 

Sirion

Spam Master
OT

Essendo studente universitario, visual studio lo puoi scaricare full con una serial rinnovabile ogni 12 mesi (in pratica infinita se non ti revocano la casella mail istituzionale) da https://www.dreamspark.com/

Ci son anche un sacco di belle cose.

/OT
 

Samael

Ninja Skilled!
Sirion ha scritto:
Prova con visual studio, da quel che vedo (avendo giusto aperto l'archivio e richiuso 30 secondi dipo) mi pare di capire che siano progetti di visual studio 2005.

Poi inr ealtà non ho mai usato c/c++ con eclipse e il dev lo odio con tutto il sangue che ho in corpo. Per cose di dimensioni contenute preferisco editor di testo + compilatore da prompt/file di build.

Ma che errori dà a compilazione? Addirittura errori di compilazione mi pare peso.


il problema è che lo standard del C++ è stato approvato non tantissimo tempo fa, quindi è possibilissimo che:
a) codice scritto da tempo non sia affatto standard compliant
b) che alcuni compilatori non siano standard compliant... sebbene sia passato del tempo, ad esempio MS ha molto premuto verso .net fregandosene dello standard dei vari linguaggi (compreso il C++). fino a qualche anno fa il compilatore maggiormente aderente allo standard era il GCC e c'era un ottimo porting su piattaforma windows.


In ogni caso senza vedere almeno i messaggi di errore è impossibile fare alcunché...
Quanto agli IDE, oggi sono strumenti infinitamente utili nello sviluppo di applicazioni non banali ed il loro corretto utilizzo è in grado di migliorare la produttività di almeno un ordine di grandezza. Poi se chi scrive il software non vale una cippa, IDE o non IDE sempre una schifezza produrrà... perchè scrivere un programma non è mettere una istruzione dietro l'altra.
 

Il Droide

Spam Master
Samael ha scritto:
Quanto agli IDE, oggi sono strumenti infinitamente utili nello sviluppo di applicazioni non banali ed il loro corretto utilizzo è in grado di migliorare la produttività di almeno un ordine di grandezza. Poi se chi scrive il software non vale una cippa, IDE o non IDE sempre una schifezza produrrà... perchè scrivere un programma non è mettere una istruzione dietro l'altra.

Il problema degli IDE è che spesso danno per scontato conoscenze che un buon programmatore dovrebbe già avere.

Puoi avere tutti gli IDE del mondo, ma se mi apri una variabile nello stack e cerchi di referenziarla da fuori poi non ti devi lamentare se ti da segmentation fault.

Comunque sia io sono contentissimo di non utilizzare alcun IDE. Mi sbatto un po' di più in fase di creazione del progetto, ma almeno sono sicuro che chiunque potrà usufruirne, IDE o meno.
 

Samael

Ninja Skilled!
Ðroide Sir Cassius√ ha scritto:
Il problema degli IDE è che spesso danno per scontato conoscenze che un buon programmatore dovrebbe già avere.

Puoi avere tutti gli IDE del mondo, ma se mi apri una variabile nello stack e cerchi di referenziarla da fuori poi non ti devi lamentare se ti da segmentation fault.

Comunque sia io sono contentissimo di non utilizzare alcun IDE. Mi sbatto un po' di più in fase di creazione del progetto, ma almeno sono sicuro che chiunque potrà usufruirne, IDE o meno.


premesso che se gli ide danno per scontato competenze che il programmatore deve avere e che non ha, è un problema del programmatore (incapace e/o incompetente) e non dell'ide (programmare è una scienza, non un'arte e comunque una attività niente affatto banale e semplice)... ma non è certo l'uso dell'editor di testo che ti impedisce di referenziare una variabile locale al di fuori del suo scope, anzi probabilmente un editor/compilatore evoluto in almeno talune occasioni potrebbe anche accorgersene. Ci sono una miriade di controlli e ottimizzazioni che un compilatore c++ può fare e che molti ancora oggi non fanno.
E poi ricordati che l'uso di un IDE non preclude ad altri la possibilità di fruire del progetto... tutti gli ide ormai sono in grado di generare ad esempio dei file make che un qualsiasi compilatore può sfruttare. L'IDE è semplicemente un ambiente che integra editor di testo (spesso con sintax hilight), un debugger, un profiler, un progect manager, il compilatore, un sistema per la gestione delle versioni (indispensabile per lavori grossi e di squadra) e nei casi più evoluti anche un tool di progettazione basato su UML. Inoltre sono utilissimi nella progettazione visuale di interfacce grafiche e ormai in questi casi spesso producono buon codice. Certo dipende dalla qualità dell'ide, ma io ad esempio mi sono trovato piuttosto bene con quello del visual studio e molto tempo prima con quello della borland (ma allora eravamo ancora agli albori degli ide).
Oggi senza, non fai molto... di sicuro non affronti progetti di medie dimensioni dove magari a lavorarci sono più persone, magari a distanza... con parti di codice che possono cambiare a tua insaputa, dipendenze che vengono aggiunte e/o rimosse. Insomma un conto è l'applicazione di poche centinaia di riche di codice, al limite pochissime migliaia... ma un progetto un pelo complesso senza un ide decente è pesante da tenere sotto controllo nella sua globalità e nella sua dinamicità.
 

Il Droide

Spam Master
Samael ha scritto:
premesso che se gli ide danno per scontato competenze che il programmatore deve avere e che non ha, è un problema del programmatore (incapace e/o incompetente) e non dell'ide (programmare è una scienza, non un'arte e comunque una attività niente affatto banale e semplice)... ma non è certo l'uso dell'editor di testo che ti impedisce di referenziare una variabile locale al di fuori del suo scope, anzi probabilmente un editor/compilatore evoluto in almeno talune occasioni potrebbe anche accorgersene. Ci sono una miriade di controlli e ottimizzazioni che un compilatore c++ può fare e che molti ancora oggi non fanno.
E poi ricordati che l'uso di un IDE non preclude ad altri la possibilità di fruire del progetto... tutti gli ide ormai sono in grado di generare ad esempio dei file make che un qualsiasi compilatore può sfruttare. L'IDE è semplicemente un ambiente che integra editor di testo (spesso con sintax hilight), un debugger, un profiler, un progect manager, il compilatore, un sistema per la gestione delle versioni (indispensabile per lavori grossi e di squadra) e nei casi più evoluti anche un tool di progettazione basato su UML. Inoltre sono utilissimi nella progettazione visuale di interfacce grafiche e ormai in questi casi spesso producono buon codice. Certo dipende dalla qualità dell'ide, ma io ad esempio mi sono trovato piuttosto bene con quello del visual studio e molto tempo prima con quello della borland (ma allora eravamo ancora agli albori degli ide).
Oggi senza, non fai molto... di sicuro non affronti progetti di medie dimensioni dove magari a lavorarci sono più persone, magari a distanza... con parti di codice che possono cambiare a tua insaputa, dipendenze che vengono aggiunte e/o rimosse. Insomma un conto è l'applicazione di poche centinaia di riche di codice, al limite pochissime migliaia... ma un progetto un pelo complesso senza un ide decente è pesante da tenere sotto controllo nella sua globalità e nella sua dinamicità.


Premesso che sono perfettamente d'accordo su tutto, eccetto che sull'utilizzo dell'IDE.

Nel corso degli anni mi sono ritrovato obbligato ad usarne e non mi ci sono mai trovato bene, per il semplice motivo che Linux è già un IDE di suo; io utilizzo GNU Emacs, ho syntax highlighting, code completition, gestione del VCS sottostante (GIT tutta la vita), generazione quasi automatica degli autotools (configure, makefile, eccetera) e bene o male tutto ciò che hai detto.

Tuttavia, prima di GNU Emacs utilizzavo semplicemente un terminale e ti assicuro che la differenza era minima. Ripeto: il motivo è semplicemente che Linux è un sistema operativo già pensato per i programmatori, non hai bisogno di un IDE.

Per quanto riguarda l'UML, lo genero tramite gnuplot il più delle volte, ma devo ammettere che ancora non mi sono immediati: spesso fingo di guardarli e in realtà sto guardando il codice, mi è più chiaro :P

Attualmente comunque sto lavorando su tre progetti, uno è già bello avanzato ed evoluto, e ha un totale di
$ find . -type f -iname "*.java" -print0 | xargs -0 wc -l
[ snip perché son troppi file :P ]
12971 total


12971 righe di codice, scritte senza mai aprire un IDE. Da notare che il mio collega utilizza Eclipse e spesso (grazie al code completition e grazie al fatto che NON si documenta ma semplicemente preme CTRL + Spazio e aspetta di avere il completamento pronto) mi tocca correggere le sue vaccate.



L'altro è un progetto mio personale, ci sto lavorando assieme ad un'altra persona ma ho scritto tutto io (http://github.com/massix/vdepn)
$ find . -type f -iname "*.vala" -print0 | xargs -0 wc -l
98 ./src/tray_icon.vala
65 ./src/helper.vala
307 ./src/conf_parser.vala
142 ./src/main.vala
302 ./src/configuration_page.vala
202 ./src/preferences.vala
447 ./src/vde_connector.vala
137 ./src/configuration_property.vala
314 ./src/configuration_list.vala
2014 total

2014 righe di codice, mancano ancora parecchie funzioni ma per ora è già ampiamente fruibile;



L'altro l'ho iniziato ieri ed è ancora in fase embrionale (http://github.com/massix/kunor)
$ find . -type f -iname "*.cs*" -print0 | xargs -0 wc -l
46 ./src/Utils.cs
32 ./src/KunorNNTP/Exceptions.cs
256 ./src/KunorNNTP/Connector.cs
26 ./src/KunorNNTP/Constants.cs
51 ./src/Kunor.cs
46 ./src/Utils.cs.in
81 ./src/KunorClient/MainWindow.cs
96 ./src/KunorClient/GroupListBox.cs
634 total

634 righe di codice, anche queste scritte senza mai aprire un IDE.






E questi sono solo piccoli esempi, ne ho scritto parecchio di codice (certo, niente in confronto a quanto ne hai scritto te, ma comunque ho meno anni di lavoro alle spalle :P), semplicemente utilizzando i tool che il mio sistema operativo mi mette a disposizione.

diff, make, sed, awk, .. chi più ne ha più ne metta, formano un IDE ben più completo di un software di terze parti.





EDIT: uppo Sirion, Coding is Art.
 

Arch@ngel

Ninja Skilled!
Oddio Massi, come fai a vivere senza un IDE?
Io solo senza debugger mi sparerei in faccia. In più ho più classi che righe di codice (sono un entusiasta della programmazione ad oggetti), auguri a ricordarti a memoria tutti i membri o tutte le funzioni quando le istanzi.

Poi è impossibile ricordarsi, conoscere o essersi letto TUTTA la documentazione. Trovo molto più comodo istanziare un oggetto, scorrermi la lista delle funzioni, selezionare quella che sembra fare più al caso mio, leggermi l'hint che appare per conferma e poi usarla o magari leggermi la documentazione solo relativa a quella parte, se complicata.

Sinceramente non capisco perché uno in grado di programmare senza problemi, si rifiuti di usare un IDE. Cioè, non è che fa cose magiche o non trasparenti. Lo considero un semplice editor di testo con qualche servizio in più.
Alcuni di default sono invasivi, perché aggiungono codice automaticamente e capita a volte che non lo si voglia, ma è un comportamento che si può configurare.
Io attualmente, nella sua semplicità mi trovo bene con Code:Blocks, odio/amo QTCreator e mi fa sesso Netbeans. Visual Studio anche non è male, ma la versione express ha poca roba e quella a pagamento se la possono ficcare in culo.
Poi uno usa il compilatore che preferisce, ogni IDE ne supporta quanti ne vuoi, quindi dove sta la differenza?
Da dove salta fuori che un progetto scritto in Eclipse, non possa essere aperto in Netbeans o in Visual Studio o in Blocco Note o comunque usufruito da terzi?

Magari ti perdi le watches del debugger ed altre cagate, ma il codice mica è legato all'IDE.
 

Il Droide

Spam Master
In attesa che BLord posti gli errori di C++, due chiacchiere non fan mai male.

Se ricordi Arch@, quella sera al Barge ti dissi che ero passato a GNU Emacs da VIm (dopo $infiniti anni di solo VIm) proprio per il gdb integrato, quindi sì, sono d'accordo sull'utilità di avere un debugger integrato.

Per il resto, io invece non riesco a capire cosa ci sia di così straordinario in un IDE: la documentazione ce l'ho tutta tranquillamente offline ed è molto più esplicita e chiara che non una casellina gialla che spiega brevemente cosa fa il metodo che sto per invocare, chi mi assicura che faccia veramente quello che voglio? (L'esempio più eclatante è il ToString () di C# e Java, che spesso non funziona come vorresti). In caso di ereditarietà, da chi lo prendo quel metodo? Dalla classe padre? No perché sai, se devo implementare l'interfaccia IEnumerable (sempre di C#), mi serve sapere se il metodo GetEnumerator () lo devo associare alla classe padre e farlo ereditare da tutti i figli o mi basta farlo nei figli che implementeranno l'interfaccia. Queste cose un IDE non te le dice, spesso e volentieri, si limita a sputarti fuori una casellina gialla con scritto "Questo non mi piace :/".

Poi boh, ad oggetti io ho sempre programmato solo in C# (per il quale esiste un comodo programmino chiamato `monodoc' che contiene tutte le definizioni di tutte le classi che ho installato, comprese quelle esterne se usano la sintassi giusta), Vala (per il quale esiste un comodo programmino chiamato `devhelp' che contiene tutte le definizioni di tutte le classi che ho installato, comprese quelle esterne se usano la sintassi giusta), Java (per il quale esiste.. insomma avete capito), Python (si appoggia a devhelp) e pochi altri linguaggi ma per lo più per gioco (SMALLTALK!!!!).

Con C e C++ non credo di aver bisogno di grosse documentazioni, se non relative alle librerie che utilizzerò, e anche quelle me le trovo comodamente installate in /usr/share/docs/nomelibreria (ne tiro fuori una a caso
$ ls /usr/share/doc/gtk-doc-1.16
AUTHORS authors.txt COPYING COPYING-DOCS examples gnome.txt README README.docs sections-file.txt setting-up.txt style-guide.txt
)


Senza considerare il fatto che il 99% delle volte all'interno di una documentazione della classe c'è uno snippet di codice, che spesso e volentieri ti consente di saltare molte definizioni di metodi e arrivare subito al dunque.
Altra cosa in cui peccano gli IDE (ma qui mi riferisco principalmente ad Eclipse, dato che l'ho visto in azione) sono le eccezioni: Eclipse si limita a dirti "Ehi guarda, questa classe potrebbe lanciare questa eccezione, devi racchiuderla in un try/catch", scordandosi però di farti notare che magari gli antenati di quella classe lanciano altre 18000 eccezioni più interessanti che vorresti prender fuori.

Insomma, se uno vuole programmare seriamente ed è intenzionato anche ad imparare ciò che sta usando, così da non dover poi in futuro dire "Toh guarda, quella cosa lì non la sapevo proprio, anche se sono 15 anni che programmo in questo linguaggio", allora è meglio che lasci da parte l'IDE e si faccia un po' più le ossa sulle documentazioni.

Pensa, c'è gente che non sa neanche la differenza fra stack e heap (questa ce l'ho qui oggi perché son stato 40 minuti a cercare di spiegare ad un fottuto coglione il perché non è bene fare un return di un oggetto che sta solo sullo stack).



Poi alla fine son scelte: ti trovi bene con un IDE? Usalo. Ti trovi bene senza? Non usarlo. A me basta che il mio editor si limiti a mostrarmi il testo, correggermi gli errori banali (assenza di punti e virgola in primis) e aiutarmi un po' a versionare il mio software. Niente di più.
 

Arch@ngel

Ninja Skilled!
Ðroide Sir Cassius√ ha scritto:
Queste cose un IDE non te le dice, spesso e volentieri, si limita a sputarti fuori una casellina gialla con scritto "Questo non mi piace :/".


Ma queste cose un IDE non deve dirtele.
Cioè, se uno non sa programmare, non sa programmare.
L'IDE serve per ovviare ai comuni errori, per semplificare la vita al programmatore, ma non per scrivere codice al posto suo.

Se ti viene proposto un Try/Catch significa che a priori stai sbagliando e l'IDE ci sta mettendo una pezza.

La consultazione rapida della documentazione comunque è impagabile, magari anche solo per sapere le signature di una determinata funzione.
Seriamente, se solo dovessi leggermi TUTTA la documentazione QT, invecchierei. Preferisco molto di più scorrere tutte le funzioni fino a trovare ToInt() e poi magari leggermi la documentazione nel caso non funzioni come mi aspetto.

Quello che mi scoccia, è che tu dai la colpa all'IDE, per i pessimi programmatori o comunque associ le due cose.
Quelli sarebbero pessimi anche senza, non è che se li metti davanti ad un text editor migliorano o vanno a leggersi la documentazione.
Probabilmente copierebbero pezzi di codice dai forum e roba del genere.

Avere un IDE non significa "Che bello, fa tutto lui". Certamente è un aiuto, ma niente di più. Chi lo usa al di là di questo sbaglia, per questo sono convinto che tu potresti solo trarne beneficio, anche se trovare un IDE con cui convivere bene non è facile o così scontato.
Io Eclipse ad esempio lo odio, penso che piuttosto userei Vi (neanche Vim), e penso di aver detto tutto. o_o
 

Samael

Ninja Skilled!
Ðroide Sir Cassius√ ha scritto:
Attualmente comunque sto lavorando su tre progetti, uno è già bello avanzato ed evoluto, e ha un totale di
$ find . -type f -iname "*.java" -print0 | xargs -0 wc -l
[ snip perché son troppi file :P ]
12971 total


12971 righe di codice, scritte senza mai aprire un IDE. Da notare che il mio collega utilizza Eclipse e spesso (grazie al code completition e grazie al fatto che NON si documenta ma semplicemente preme CTRL + Spazio e aspetta di avere il completamento pronto) mi tocca correggere le sue vaccate.



ahem... non vorrei deluderti, ma 12k righe di codice non costituiscono un progetto di medie dimensioni... personalmente ho lavorato ad un progetto enormemente più grosso e con un semplice editor di testo non si sarebbe potuto fare nulla: servono anche altri strumenti a partire da un buon gestore di progetto passando per un sistema di controllo delle versioni. Cmq quando parli di emacs hai detto tutto: quello non è un semplice editor di testo ma un applicativo che va ben oltre (anche se personalmente non l'ho quasi mai usato).
e quanto al tuo collega... :gha: Massima solidarietà!!!!


Arch@ngel ha scritto:
Oddio Massi, come fai a vivere senza un IDE?


in realtà non è che lui viva senza ide... lui ha tutti gli strumenti che compongono un ide solo che se li integra più o meno a mano... ma quello che si definisce ide non è che l'insieme di tutti quegli strumenti raccolti sotto una interfaccia unica... tant'è che tu puoi usare l'ide o i singoli strumenti in command line.... e l'uso della command line è permesso da tutti gli ide che ho conosciuto.
 

Il Droide

Spam Master
Samael ha scritto:
in realtà non è che lui viva senza ide... lui ha tutti gli strumenti che compongono un ide solo che se li integra più o meno a mano... ma quello che si definisce ide non è che l'insieme di tutti quegli strumenti raccolti sotto una interfaccia unica... tant'è che tu puoi usare l'ide o i singoli strumenti in command line.... e l'uso della command line è permesso da tutti gli ide che ho conosciuto.

Esattamente, era quello che più o meno cercavo di spiegare nel primo post. Su Windows forse c'è più bisogno di un IDE perché molti strumenti mancano di default (vedi anche solo uno strumento per integrare le patch nel proprio sorgente).

Non è che integro a mano, è che pur avendo molti strumenti integrati nel mio editor (GNU Emacs, per l'appunto), certe cose preferisco ancora farle a modo mio. La prima stronzata che mi viene in mente è la normalizzazione dei whitespace prima di fare un commit sul VCS, spesso capita nel codice di lasciare una riga vuota con alcuni spazi (vuoi perché l'autoindentazione ha fallito, vuoi perché hai premuto invio poi sei andato a pisciare, sei tornato e hai ripremuto invio), e onestamente è una questione stilistica da non sottovalutare :D
 

Samael

Ninja Skilled!
Ðroide Sir Cassius√ ha scritto:
La prima stronzata che mi viene in mente è la normalizzazione dei whitespace prima di fare un commit sul VCS, spesso capita nel codice di lasciare una riga vuota con alcuni spazi (vuoi perché l'autoindentazione ha fallito, vuoi perché hai premuto invio poi sei andato a pisciare, sei tornato e hai ripremuto invio), e onestamente è una questione stilistica da non sottovalutare :D


la normalizzazione dei whitespace con un ide decente è un problema superato da anni...
 

Sirion

Spam Master
Da non sottovalutare assolutamente la questione stilistica. Quando si lavora in gruppo è fondamentale per garantire unità al lavoro. La prima cosa che ho chiesto una volta introdotto al team di sviluppo dell'azienda che collabora con la nostra uni su un progetto di cui faccio parte son proprio le convenzioni adottate (anche perchè son un seguace delle metodologie agili).

Vena polemica su visual studio: come cazzo è possibile che per avere un aiuto intelligente che gestisca le convenzioni stilistiche bisogna comrpare un plugin (resharper) dal costo non indifferente (fa anche un sacco di cose utili però, in refactoring è un must) solo per avere ciò che per esempio eclipse ha già di base :(
 
Alto