Oppure

Loading
11/12/15 22:01
lumo
Aggiungerei che la qualità dei programmi inviati lascia quasi sempre a desiderare, e ancora più spesso si tratta di cose banalissimi (in linea calcolatrice).
Personalmente mi ritrovo sempre a dare un -1.
Esempio con i tre programmi che ci sono ora:
Pitagora 	Programma in grado di risolvere un triangolo rettangolo. 	Lazarus 1.4.2

Risolvere un triangolo rettangolo?
Cosa vuol dire?
Tipo che il cateto 1 vale 3, il cateto 2 vale 4 e allora l'ipotenusa vale 5?
Oppure che il cateto 1 vale x+1, il cateto 2 vale x+2, e l'ipotenusa vale 5 e quindi x=3?

Il titolo poco originale del programma mi fa propendere per la prima opzione, quindi già il programma rientra nella categoria "inutilità".
> Lazarus 1.4.2
Che è?
Apro la cartella.
La cartella contiene un .exe
Sono abbastanza contrario a questa cosa: posso capire che non tutti abbiano la voglia o la possibilità di compilarsi il programma, ma se io mi mettessi a far valutare programmi dove c'è un .exe che è un malware?
Il secondo cateto nell'interfaccia viene sempre chiamato "catato".
Quando cambio da calcolo ipotenusa/cateto il programma cancella tutto ciò che ho inserito.
Il codice è banale, il grosso è tutto XML generato probabilmente con qualche RAD (ah giusto, ecco cos'era lazarus).
-1

Classe OROLOGIO 	La classe OROLOGIO riguarda oggetti che tracciano l'immagine di un orologio analogico entro un riquadro predefinito nell'ambito della finestra passata al momento della creazione. Le funzioni della classe sono di tipo esclusivamente grafico (la classe NON gestisce timer d'alcun genere). 	CPP

La spiegazione è un po' così ma almeno c'è ed è completa.
La cartella contiene il solito exe che mi va per traverso, ma ha i file ordinati. C'è addirittura un doc.pdf
Lo apro:
v1.0 – dicembre 2015, di Aldo Carpanelli

Siccome conosco Aldo, la mia imparzialità data dall'interfaccia di valutazione va a farsi friggere.
Inoltre noto che il codice è fortemente monopiattaforma (usa gdi+). Vabbè che ho wine, ma oh.
static REAL kAngoloGiro = 6.283185307179586476925286766559f;
static REAL kIncGrado   = 0.104719755119659774615421446109f;

OROLOGIO::OROLOGIO( HWND hwnd, Rect *rOrologio ) {
    annulla_parametri();

    try {
        FontFamily ff;
        if( ff.GetLastStatus() != Ok ) goto uscita;

        if( hwnd == NULL ) {
            hwnd = GetForegroundWindow();
            if( hwnd == NULL ) goto uscita;
        }

        if( rOrologio != NULL )
            if( !rOrologio->IsEmptyArea() )
                r = *rOrologio;

        gfxWnd = new Graphics( hwnd );
        if( gfxWnd->GetLastStatus() != Ok ) goto uscita;

        bmpOs = new Bitmap( r.Width, r.Height );
        if( bmpOs->GetLastStatus() != Ok ) goto uscita;

        gfxOs = new Graphics( bmpOs );
        if( gfxOs->GetLastStatus() != Ok ) goto uscita;
        gfxOs->SetSmoothingMode( SmoothingModeHighQuality );
        gfxOs->SetTextRenderingHint( TextRenderingHintAntiAlias );

        penna = new Pen( 0xFF000000 );
        if( penna->GetLastStatus() != Ok ) goto uscita;
        penna->SetAlignment( PenAlignmentCenter );
        penna->SetLineCap( LineCapRound, LineCapRound, DashCapFlat );

        pennello = new SolidBrush( 0xFF000000 );
        if( pennello->GetLastStatus() != Ok ) goto uscita;

        font = new Font(
            L"Arial", ((REAL)r.Width)/12.0f, FontStyleBold, UnitPixel );
        if( font->GetLastStatus() != Ok ) goto uscita;
        if( font->GetFamily(&ff) == Ok ) {
            fDescent = ff.GetCellDescent( FontStyleBold );
            fDescent = font->GetSize()*fDescent/ff.GetEmHeight(FontStyleBold)/2.0f;
        }
        else {
            fDescent = 0.0f;
        }

        // lo sfondo per l'intero riquadro dell'oggetto
        cSfondoOggetto = 0xFFFFFFFF;

        // imposta le caratteristiche del quadrante
        cq.X = ((REAL)r.Width)/2.0f;
        cq.Y = ((REAL)r.Height)/2.0f;
        rq = r.Width>r.Height ? r.Height : r.Width;
        SpessoreBordoQuadrante( rq/66.6667f );
        cBordoQuadrante  = 0x99000000;
        cSfondoQuadrante = 0xFFFFEEDD;
        cNumeriQuadrante = 0x99000000;

        // preimposta le caratteristiche delle lancette
        c[0]    = 0xDDCC0000; // le ore
        l[0]    = rq*0.6667;
        s[0]    = spQuadrante>1.0f ? spQuadrante : 1.0f;

        c[1]    = 0xDD0066FF; // i minuti
        l[1]    = rq*0.825;
        s[1]    = spQuadrante>1.0f ? spQuadrante : 1.0f;

        c[2]    = 0xDD009900; // i secondi
        l[2]    = rq*0.825;
        s[2]    = spQuadrante/5.0f>1.0f ? spQuadrante/5.0f : 1.0f;

        // imposta le caratteristiche dei marcatori
        c[3]    = 0x99000000; // le ore
        l[3]    = rq*0.125;
        s[3]    = spQuadrante/2.0f>1.0f ? spQuadrante/2.0f : 1.0f;

        c[4]    = 0x66000000; // i minuti
        l[4]    = rq*0.075;
        s[4]    = spQuadrante/4.0f>1.0f ? spQuadrante/4.0f : 1.0f;

        ok = 1;
        return;

        uscita:
        dismetti_elementi_dinamici();
    }
    catch( ... ) {
        return;
    }
}

Il costruttore silenzia tutti gli errori, con pratiche barbare come goto e un catch che ricorda tanto l'analogo java catch(Exception e) {}
La classe è strutturata in modo funzionale, ma non me la sento di valutare positivamente il programma, specie perché penso che lo scopo ultimo del sito non sia quello di distribuire programmini ma di distribuire codici sorgenti come modelli di riferimento.
Avrei votato +0 anche se non mi fossi invischiato nel conflitto di interessi.

ChatJavaConGrafica 	una semplice chat in java usando la grafica sia dalla parte client che server. Semplice perche non ho curato i dettagli e il codice non è molto ordinato quindi usero i commenti per aiutarvi a comprendere... 	java 1.8

La descrizione non è invitante, visto che devo valutare proprio il codice.
In realtà il codice è scritto abbastanza bene, è diviso in due file ed è corrispondente alla descrizione.
I file non sono in utf8 e gli spazi sono mischiati ai tab.
Il codice è abbastanza ordinato, i metodi sono separati correttamente e la parte grafica è separata da quella logica.
Mi accorgo che ci sono delle parti in italiano mischiate a parti in inglese.
Infatti scopro che più o meno tutto il codice è scopiazzato dai meandri dell'internet, e a giudicare da stackoverflow in molti l'hanno scopiazzato.
gist.github.com/anonymous/…

-1 secco, ed è una cosa vergognosa.
Più o meno tutti i programmi inviati seguono la traccia del primo.
Scrivendo questo post mi sono reso conto che i commenti nella valutazione sarebbero molto utili. Basterebbe anche che all'inivio del programma si generasse nel forum un thread apposito.
L'user non dovrebbe essere anonimo, perché se è il pirla che copia i codici da internet e li mette qua lo prendo a insulti personalmente.


Ultima modifica effettuata da lumo 11/12/15 22:03
aaa
11/12/15 22:15
Template
E poi non sarebbe intenzione creare una piattaforma di valutazione definitiva ovviamente ma più che altro un set di indicazioni e impressioni che ognuno liberamente lascia.


Capisco... e già così cambia tutto e la mia riflessione viene a decadere ;)
Per come lo delinei tu, sarebbe anche una cosa sensata... forse non necessaria (non so, non sta a me giudicare), ma senz'altro sensata :k:


Postato originariamente da lumo:
Il codice è abbastanza ordinato, i metodi sono separati correttamente e la parte grafica è separata da quella logica.
Mi accorgo che ci sono delle parti in italiano mischiate a parti in inglese.
Infatti scopro che più o meno tutto il codice è scopiazzato dai meandri dell'internet, e a giudicare da stackoverflow in molti l'hanno scopiazzato.
gist.github.com/anonymous/…

-1 secco, ed è una cosa vergognosa.
Più o meno tutti i programmi inviati seguono la traccia del primo.


Sono senza parole... :noway:
aaa
11/12/15 22:27
pierotofy
Interessante, io quando voto i programmi (raramente, siccome preferisco che siano approvati in maniera democratica dalla Community) solitamente non valuto la qualità del codice, siccome trovo che ci siano talmente tante regole da seguire per avere un sorgente di qualità. Per essere giusti, se volessi valutare la qualità del codice, dovrei togliere molti programmi che ho caricato nei primi 10 anni di pierotofy.it, siccome guardandoli posso trovare una marea di problemi...

Solitamente guardo che ci siano i sorgenti, che compilino e si possa eseguire il programma senza troppe difficoltà, e guardo che il programma sia di "non ovvia natura" (non una calcolatrice, area del quadrato, etc.).

In breve: non penso un sistema di feedback aiuterebbe le cose.

Fun fact: anni fa ho lanciato un sito chiamato Indie Apps Alliance (IAA), ora defunto da anni, dove sviluppatori potevano accedere ad un network per fare promozione delle proprie apps per iOS. Uno dei requisiti era avere "un app di qualità". Ho costruito il sistema permettendo ad un gruppo di persone di valutare le apps che facevano domanda, con possibilità di inviare un feedback in caso di rifiuto. Le persone che venivano rifiutate constantemente cominciavano a difendere la propria app invece di prendere il feedback in maniera costruttiva. C'era poi il problema che persone diverse avevano idee diverse su quali standard un app dovesse avere.
Ultima modifica effettuata da pierotofy 11/12/15 22:28
Il mio blog: piero.dev
11/12/15 22:46
lumo
Solitamente guardo che ci siano i sorgenti, che compilino e si possa eseguire il programma senza troppe difficoltà, e guardo che il programma sia di "non ovvia natura" (non una calcolatrice, area del quadrato, etc.).

In breve: non penso un sistema di feedback aiuterebbe le cose.

Io guardo i codici, e in particolare mi pongo la domanda: questo programma può essere utile alla community, in sé o per fini didattici?
Se tenessi l'asticella alta per la qualità ovviamente non passarebbe proprio nulla.

Detto questo il mio prossimo programma sarà un gioco bellissimo con .exe dotato di rootkit :D

Fun fact: anni fa ho lanciato un sito chiamato Indie Apps Alliance (IAA), ora defunto da anni, dove sviluppatori potevano accedere ad un network per fare promozione delle proprie apps per iOS. Uno dei requisiti era avere "un app di qualità". Ho costruito il sistema permettendo ad un gruppo di persone di valutare le apps che facevano domanda, con possibilità di inviare un feedback in caso di rifiuto. Le persone che venivano rifiutate constantemente cominciavano a difendere la propria app invece di prendere il feedback in maniera costruttiva. C'era poi il problema che persone diverse avevano idee diverse su quali standard un app dovesse avere.

Riconosco il problema, però qui si tratta di avere il proprio programma rifiutato per motivi ignoti oppure rifiutato con una motivazione.
aaa
11/12/15 22:51
pierotofy
Postato originariamente da lumo:
Detto questo il mio prossimo programma sarà un gioco bellissimo con .exe dotato di rootkit :D


:rotfl:

Eseguirò i tuoi programmi in una virtual machine da oggi in poi :)
Il mio blog: piero.dev
13/12/15 0:10
AldoBaldo
Non mi costa nulla accogliere la critica circa l'inopportunità di inserire l'eseguibile del programma di test. Ne capisco le motivazioni anche se poi mi vien da pensare "uff! ma perché devono esserci in giro cretini che diffondono programmi pericolosi creando diffidenza su diffidenza?". Però ha ragione lumo: il mondo è fatto così, quei cretini ci sono, e se uno non mi conosce può pensare che io sia uno di loro non appena vede un file eseguibile. Dunque, da oggi niente più .exe nei miei .zip.

Per quel che riguarda la natura "monopiattaforma" dei miei giocattoli c'è più di un motivo per la mia scelta, in parte obbligata. 1) Ho dei limiti, per cui al momento non sarei in grado di fare diversamente; 2) vengo dal mondo Mac degli anni '90, quando un programma "colossale" era costituito da un unico file di 800-1200 Kb, per cui non amo dover "accoppiare" i miei giocattolini a cartelle stracolme di file di quelli che appena ne sposti uno va a carte e quarantotto tutto l'insieme; 3) non conosco librerie multipiattaforma di piccole dimensioni e che sia possibile "raggruppare" in un unico file eseguibile (ho provato con SDL, ma non sono riuscito a ottenere nulla senza abbinare diverse .dll).

Circa l'uso dei goto e gli altri aspetti più tecnici che mi hai fatto presente, ho provato a modificare la funzione creatrice. Ora lancia eccezioni di tipo const char* e non usa più goto. Tra l'altro, nell'effettuare la modifica mi sono accorto che c'erano anche altri errori forse peggiori e (credo di) averli eliminati. Non solo sono ben disposto a ricevere nuove critiche, ma se riuscirò a comprenderle le considererò un valido aiuto per scoprire debolezze delle quali magari non sono neppure al corrente (alcune le conosco, ne prendo atto, e ci convivo per mancanza di basi adeguate per superarle; di altre manco m'accorgo finché non me le si fa notare -- non ho mai avuto la fortuna di avere un insegnante sulla materia).

Rimane una questione: andrò ora da includere alla pagina creata automaticamente dal sito i codici sorgenti nella versione aggiornata (nel visualizzatore dei sorgenti), ma non so come aggiornare lo .zip che contiene l'eseguibile (da rimuovere) e il pdf di accompagnamento, ammesso che sia possibile.

Siccome credo che questa mia risposta sia fuori tema rispetto al thread, chi avesse qualcosa da consigliarmi o qualche tirata d'orecchie da darmi penso sia meglio che usi lo spazio commenti della pagina del programma...
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
13/12/15 0:39
R0gerBlack
[i]Postato originariamente da lumo:
L'user non dovrebbe essere anonimo, perché se è il pirla che copia i codici da internet e li mette qua lo prendo a insulti personalmente.


In realtà l'user non è realmente anonimo. Per un glitch che ho scoperto 7 anni fa, tutt'ora presente, è sufficiente recarsi in una sezione qualsiasi di Programmi, e digitare nella barra di ricerca il nome del programma in certificazione. Lo si troverà tra i risultati, facilmente riconoscibile per la stessa descrizione alla zona di certificazione (qualora apparissero più programmi nel risultato), e a differenza della zona di certificazione, viene mostrato anche il nome del membro. :rotfl:

Comunque devo dire che ora rispetto al passato, vengono lasciati passare (approvati) molti più programmi di dubbia qualità.
Ultima modifica effettuata da R0gerBlack 13/12/15 0:39
aaa
13/12/15 11:56
Roby94
Sono d'accordo con lumo sulla maggior parte degli argomenti e motivazioni, non trovo corretto però la pubblicazione del nome utente, renderebbe il tutto troppo soggettivo, in fondo anche senza il nome basta un occhiata al codice sorgente per capire se si è davanti ad un lavoro scopiazzato oppure meritevole di essere valutato per l'inserimento sul sito. Mi trovo di dissentire anche sulla storia degli eseguibili all'interno dei file, è vero che in alcuni casi il codice è multi piattaforma quindi è poco sensato compilare e fornire un exe, ma in altri casi, vedi C# e VB.NET la precompilazione mi pare un modo per velocizzare il tutto. L'importante è che dentro lo zip ci siano i codici sorgente, poi se si aggiungono altri file (readme file compilati documentazione di viario tipo) il giudice è libero di considerarli o meno nella valutazione complessiva del programma. Le finalità del sito mi sono sempre sembrate didattiche, se non vi sono i sorgenti poco senso hanno le pubblicazioni.

Ho costruito il sistema permettendo ad un gruppo di persone di valutare le apps che facevano domanda, con possibilità di inviare un feedback in caso di rifiuto. Le persone che venivano rifiutate constantemente cominciavano a difendere la propria app invece di prendere il feedback in maniera costruttiva.

Piero, è vero che si possono trovare utenti di questo genere, ma è anche vero che il primo utente che passa non puo pubblicare sorgenti, deve prima essere ammesso nella comunità, dovrebbe sapere quale è il comportamento consono ad essa, e lo standard minimo per pubblicare un sorgente. Se poi si inchioda sul voler contrastare il giudizio della community poco si puo fare, vorrà dire che il suo sorgente non sarà mia pubblicato, si spera comunque che questi individui siano una minima parte. Forse sarebbe bene alzare leggermente il livello di selezione per diventare membro.
Per entrare a far parte della PieroTofy's Community c'è da possedere un solo requisito:
Conoscere almeno un linguaggio di programmazione

Conoscere almeno un linguaggio di programmazione non sembra poco per essere ammessi?
C'era poi il problema che persone diverse avevano idee diverse su quali standard un app dovesse avere.

è il bello del sistema attuale, l'idea di un singolo non ha valenza sul numero, una direttiva piu precisa su cosa debba essere accettato e cosa no metterebbe d'accordo la maggior parte degli animi.
L'unica altra soluzione che mi viene in mente è lasciare l'intero compito ad un gruppo selezionato di moderatori, ma non mi da l'idea di essere nello spirito del forum.
Ultima modifica effettuata da Roby94 13/12/15 12:07
aaa