Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.
Post - fulvio
1
« il: 05 Agosto 2014, 14:25:07 »
- Baldur's Gate + Planetscape Torment + Icewindale + Neverwinter Night (giochi basati su D&D, stile Elder's Scroll ma più tradizionale)
Hai provato Dragon Age? Che ne pensi?
2
« il: 01 Maggio 2014, 20:33:12 »
Io adesso sono in UK
Credo che tra qualche anno gli italiani saranno circa il 30-40% della popolazione inglese che lavoro fai lì?
Eheh mi sa che ci siamo già vicini, in pratica alcuni italiani vivono qui da anni senza aver imparato una parola di inglese. Io al momento lavoro in una piccola software house che fa principalmente software di catalogazione principalmente orientate ai musei e librerie, ma abbiamo anche sistemi di catalogazione di asset digitali (anche customizzati, alcune forze di polizia lo utilizzano qui). Ma è stato il primo lavoro che ho trovato in attesa di migliorare la lingua. Tra poco mi guardo intorno, qui di opportunità nel nostro campo ce ne sono a bizzeffe, dalle piccole alle grosse società
3
« il: 01 Maggio 2014, 17:55:37 »
Inoltre io non sono il programmatore ideale da un punto di vista dell'imprenditore, per il quale il tempo è denaro; sono molto lento: mi piace pensare alla soluzione ottimale anziché buttare lì righe di codice e aspettare che funzionino (credo sia una paranoia degli ultimi anni, più piccolo producevo di più e velocemente). Comunque i risultati si stanno vedendo a fine progetto, il mio codice funziona senza problemi e non presenta bug di funzionalità lievi/gravi; invece si sta impiegando un sacco di tempo per il bug fixing (soprattutto funzionali) nel codice di altri. Non è un vanto, perché continuo ugualmente a reputarmi inadeguato per l'imprenditore: per me un software che richiede 6 mesi o più di sviluppo non può essere fatto in 2 mesi con poco man-power e senza una forte progettazione iniziale (semplicemente, perché non ci sono le specifiche prima, ma vengono chieste sul momento dal cliente: ciò significa che spesso non sappiamo cosa ci troviamo a sviluppare e certe decisioni iniziali sbagliate portano frustrazione dopo).
Aggiungo poi che per come fanno i colloqui, non potrei superarli. Fanno domande troppo approfondite sulle API di vari framework, io sviluppo con il manual reference davanti e con l'autocompletition dell'editor, non imparo mai nulla a memoria (e per le complessità che ha raggiunto la programmazione di oggi, sarebbe impossibile almeno per me). Cambiare stato comunque mi alletta parecchio, prima di trovare questa occasione avevo intenzione di trasferirmi in UK, ma.. negli ultimi tempi sono cambiate tante cose e ci sono tanti punti interrogativi, si vedrà.. se devo cambiare però, qualcosa che non abbia a che fare con l'informatica :-)
Devo dire che anche io ho lo stesso modo di programmare. D'altronde le possibilità sono due: o ti specializzi in un prodotto e speri che non scompaia dal mercato in poco tempo, o impari i fondamenti e alla fine ti trovi a tuo agio con tutto, magari dovrai chiedere come fare una certa cosa, ma almeno non ti mancheranno le domande e qualcuno che sa a memoria il reference manual di qualcosa lo trovi sempre Io adesso sono in UK, con un coinquilino siciliano per giunta (che però lavora in finance). In fin dei conti non si sta male, ma venendo anch'io dal SUD (provincia di Napoli) ho sempre da lamentarmi del tempo e del cibo. E purtroppo anche quelle volte che si raggiungono i 28/30 gradi, non hai proprio l'opzione di andare al mare (ovviamente c'è a Brighton per esempio, ma non è niente di lontanamente comparabile )
4
« il: 30 Aprile 2014, 13:15:25 »
Limitare il genericity solo ai reference object è la soluzione adottata da ISO-Modula-2, Modula-3, Oberon-2ext, Java.
Ci sono due code pattern generation: lo shared object (di Ada) e specific object instantiation (di C++).
Immaginiamo di avere un generic package o template che accetta due classi con tre livelli di extension ed un tipo basic type come parametro, vengono usate per due funzioni all'interno del package/template. Classi T, T2 (estende T), T3 (estende T2), P, P1 (estende P), P2 (estende P1).
Shared object:
Il codice generato è unico per tutti i casi possibili. Vengono utilizzate le classi estese più grosse (T2 e P2) e le classi base vengono allocate con un padding tutte della stessa dimensione. Per il parametro basic type viene usato il basic type più grande rappresentabile.
Numero totale di codice oggetto per classe: 2, numero funzioni: 2.
Vantaggi: Velocità di compilazione, easy debugging, no code bloating.
Svantaggi: Il codice delle classi occupa leggermente di più, overhead sui basic type, aritmetica lenta (gli interi vengono usati all'intero più grosso di 128 bit, i float sono tutti a precisione doppia, etc..).
Specific object instantiation:
Viene istanziato codice per ogni classe in ogni sua estensione e per ogni basic type. Trattiamo prima il caso delle classi: Le classi vengono istanziate in ogni loro estensione, T, T1, T2, P, P1, P2. Il codice del template (le due funzioni) viene allocato per ogni coppia: T, P; T, P1; T, P2; ... T3, P3;
Numero totale di codice oggetto per classe: (3+3) 6, numero funzioni: 18 (3*3 * 2).
Quanti sono i primitive type in C++? 14? 9*2*14 = 252 funzioni in totale. Il C++ linker ovviamente eliminerà gran parte (se non quasi tutte) le istanze non utilizzate, ma sta di fatto che il compilatore per motivi di type checking andrà a generare tutto questo garbage.
Vantaggi: Storage economy nell'allocazione delle classi, no overhead sui basic type, nessuna influenza sull'aritmetica.
Svantaggi: Super code bloat, ultra slow compilation time, nightmare debugging.
I template del C++ sono comunque (inutilmente) molto avanzati e complicano di tantissimo questo code pattern generation. Non sono un esperto di C++ per poter dire di più.
Mi dilungherei sulle alternative/varianti ma per ora non posso, non ho nemmeno riletto per vedere se ho scritto inesattezze
Questo thread è davvero interessante, mi dispiace solo di non avere molto tempo. Se pur sono d'accordo su praticamente tutto quello che dice dsar, vorrei mettere solo un secondo le cose in prospettiva: molte delle cose cattive del C++ vengono dalla sua necessità di includere il C (quasi del tutto) e rimanere per lo più compatibile con esso. Certo ci sono scelte che potevano essere fatte diversamente, ma se il tuo primo vincolo è "devo rimanere compatibile con il C" allora diventa più difficile fare le cose diversamente da come sono state fatte (è una intuizione perchè non ho pensato seriamente ha come poteva evolvere il C++ senza quel vincolo). Il libro di Stroustrup comunque non è di language design, è più una introduzione al linguaggio. So che scrisse un altro libro, "The Design and Evolution of C++", dove spiegava il perchè di molte scelte, ma non l'ho mai letto. Sui template anche io sono d'accordo che è un meccanismo inutilmente complicato (tant'è che è turing complete) ma se ne sono accorti e hanno introdotto constexpr anche per questo, avere computazioni a compile-time senza l'uso della metaprogrammazione. Se ti limiti ai concetti base, quando i concept lite saranno implementati scrivere una funzione che calcola la media di una sequenza sarà una cosa come: auto mean( Sequence seq ) { return std::accumulate( begin(seq), end(seq), 0.0 ) / seq.size(); }
Questo sarà effettivamente un template, anche se non c'è bisogno della parola template, su qualsiasi modello di sequenza Scrivere la parte di infrastruttura sarà difficile (uno stack exception safe è già una sfida abbastanza difficile), ma se le astrazioni e le librerie le scrivono gli esperti, l'utilizzo poi diviene abbastanza semplice. Almeno è questo l'intento. C'è sempre un livello di complessità esposto al programmatore, ma se vuoi poter decidere l'allineamento e il layout dei dati in memoria e dettagli del genere è difficile nascondere del tutto certe cose. Principalmete che linguaggio usi?
5
« il: 04 Aprile 2014, 12:18:17 »
Io sono sempre del parere che chiedere pareri è controproducente Ma ti posso dire della mia esperienza dopo più di due anni passati a Londra. Sono andato via che ne avevo 30, quindi non un ragazzino, arrivato qui nell'età dove molti hanno una famiglia e diventa un tantino più difficile fare amicizia. Certo se hai famiglia e vi spostate in blocco le cose sono diverse. Ad ogni modo, se tornassi indietro prenderei la stessa decisione ogni volta. Nessun posto è come casa tua, ma come diceva AmigaCori non è una decisione definitiva, anche se ti risulterà più difficile tornare indietro se riesci ad integrarti. Io però pagherei oro se potessi lavorare nel modo che faccio qui e poter tornare a casa, ma purtroppo non riesco (ancora) ad avere la botte piena e la moglie ubriaca La mia situazione è abbastanza fortunata perchè adesso vivo con due coinquilini (un siciliano e un greco) con qui mi trovo benissimo. Lavoro in una piccola società (siamo 14) e devo dire che qui i complimenti e le gratifiche personali non mancano, inoltre il rispetto del lavoro è sacro e nessuno ti chiederà mai di fare straordinario non pagato. So però di amici software engineers in ambito finanziario dove le cose sono molto diverse e molto più stressanti, ma lì ci sono in ballo molti soldi e gli stipendi possono superare anche quello dei manager d'azienda italiani. In sostanza puoi trovare un po' di tutto. In definitiva io sono per andare via. Non ti so consigliare per quel che riguarda aprire una società all'estero perchè non l'ho fatto, ma so che le cose sono estremamente più semplici che in Italia (qui a Londra si può fare online in una giornata per quel che ne so). Just my 2 cents
6
« il: 13 Febbraio 2014, 11:07:25 »
Inoltre supporta le caratteristiche nuove di C++, che migliorano parecchio il linguaggio (ma che ancora devo approfondire). Appena possibile dagli un'occhiata: ci sono aggiunte veramente comodissime sia per creare funzionalità avanzate, sia per le piccole cose di tutti i giorni!
It's like a whole new language!
L'unica cosa è che il compilatore C++ della Microsoft è assolutamente uno schifo (per dire poco, è quasi un complimento questo) nel supporto di C++11, in alcuni punti pure sbagliano la specifica (testato con mano). Il compilatore che al momento supporta meglio C++11 è Clang, che addirittura implementa tutte le funzionalità WIP di C++14. Anche G++ non dovrebbe essere troppo lontano.
Vero, ma lo stanno migliorando. Microsoft sta prendendo seriamente la questine standard C++, solo che partivano da un compilatore che non costruiva l'AST perchè è nato non so quanti anni fa e non ti potevi permettere certe cose per limiti di spazio e tempo. Con un altro paio di release dovrebbero stare quasi al passo. GCC è pienamente conforme alle specifiche del linguaggio e supporta già molte feature C++14, ma la libreria standard non è ancora completa e in alcuni punti sbagliata (tipo std::string che non può più essere implementata con copy on write ma richiede una modifica che fa perdere la binary compatibility). Ah, clang sta facendo passi avanti anche su windows implementando l'ABI del compilatore microsoft (il che vuol dire che non si dovrà ricompilare un tubo e si potranno usare le librerie C++ di microsoft)
7
« il: 18 Gennaio 2014, 14:23:59 »
Secondo me le cose vanno viste anche in prospettiva. Vista è stato un clamoroso insuccesso, ma è la base per 7. Anche 8 magari non è andato come dovrebbe (8.1 è un gran passo Avanti comunque), ma sarà la base per 9. Microsoft è l'unica che si prende dei rischi, d'altronde per immettere cose nuove sul mercato l'unico modo è rischiare. Io personalmente ho appena comprato un laptop con schermo touch. Mi ero ripromesso di comprare un mouse ma ancora non l'ho fatto perchè non uso quasi piu nemmeno il touchpad. Non credevo, ma una volta preso confidenza con le gestures anche su un portatile uno schermo touch ha senso (io pensavo l'esatto contrario).
Per tornare al discorso sull'UI, io vedo che le app stanno migliorando (da 8 a 8.1 ci sono stati miglioramenti tipici di almeno due major release), e per quanto il touch sia indispensabile, credo davvero nel future ne vedremo delle belle.
8
« il: 09 Gennaio 2014, 15:22:36 »
Sono curioso di sapere come va, anche io sono in procinto di prendere un nuovo telefono e stavo pensando al lumia 925. Aspetto la recensione
9
« il: 27 ſettembre 2013, 15:30:11 »
Ecco qui come appare un problema di amazing maze in python. In lisp e' mooooooolto meno simpatico.
Hai l'implementazione lisp da qualche parte? Sarei curioso di vederla
10
« il: 27 ſettembre 2013, 14:29:57 »
prima il predicato doveva essere una funzione o un functor separato. Tant'è che secondo lo standard la lambda function è equivalente ad un functor anonimo. E di solito è implementata proprio così. Si tratta di zucchero sintattico, non di supporto alla programmazione funzionale.
Chiarissimo!
OT che compilatore C++14 usi?
Sto utilizzando Clang+libc++ compilati direttamente dall'svn. libc++ è oramai completa per C++14, Clang manca ancora di un paio di cosette tra cui le polimorphic lamdas (come quella dell'esempio) e la generalized lambda capture. Ma dato che alcune cose sono ancora in fase di standardizzazione...
11
« il: 27 ſettembre 2013, 13:37:52 »
chissa' se e' meglio risolvere labirinti in python, in erlang o in lisp
quasi quasi mi prendo un paio di orette per toccare con mano come/quanto aiuta python lisp aiuta, ma fa venire emicrania da aspirina C !!! (erlang anche peggio)
Chissà se le lambda function di C++ aiutano! (sicuramente a far aumentare il mal di testa! )
Le lambda function in C++ non sono state introdotte per supportare il paradigma funzionale, ma semplificare l'utilizzo di algoritmi come ci sono nella stdlib. Esempio: // in C++14 using namespace std; vector< int > v { 1, 2, 3, 4, 5 }; auto forth_element = find_if( begin( v ), end( v ), []( const auto& i ) { return i == 4; });
prima il predicato doveva essere una funzione o un functor separato. Tant'è che secondo lo standard la lambda function è equivalente ad un functor anonimo. E di solito è implementata proprio così. Si tratta di zucchero sintattico, non di supporto alla programmazione funzionale. Poi di nuovo vige sempre il detto che tutte le cose possono essere buone o cattive, dipende da come si usano. C++ costringe a pensare ad ogni linea di codice che scrivi per bene, perchè gli strumenti sono tanti e le interazioni complesse. Ma ti permette di scrivere tipi ed astrazioni che sembrano built in con il linguaggio e sono anche efficienti. Ovviamente da una grande potere derivano grandi responsabilità, e tutto il controllo che si ha non è facile da gestire. Però è anche vero che per tirare fuori performance comparabili in un linguaggio funzionale ce ne vuole. La cosa che fa rabbia è che spesso ti presentano una implementazione di un quicksort e ti fanno vedere l'eleganza perchè, ehi, descrivi qual è il risultato invece di come arrivarci. Sarebbe figo se non fosse che quella classica implementazione non è un quicksort (lascio l'esercizio ai lettori per capire perchè) Poi c'è Python, che è probabilmente il compromesso migliore! Anche se io preferisco C++ per motivi di interessi (ultimamente studio programmazione parallela e controllare il layout delle cose in memoria può essere un plus non indifferente, senza contare che si può arrivare al livello più basso della macchina senza dover utilizzare altri linguaggi). Cioè sono più il tipo che scriverebbe una virtual machine nel tempo libero
12
« il: 27 ſettembre 2013, 11:58:40 »
Entrambe le cose. Anche se, ovviamente, la programmazione funzionale non è ai livelli di un linguaggio funzionale. Python integra alcune cose interessanti, che sono quelle mediamente più utili per un programmatore.
Confermo, vorrei solo avere più tempo per studiarlo a fondo, solo che tra il lavoro e qualche altro progetto personale non c'è mai l'occasione!
13
« il: 25 ſettembre 2013, 15:08:04 »
spe, forse l'avevo gia' visto, intendi questa feature ? non ho ancora sbirciato come la faccia, mi ero annotato che la offre molto generosamente =P
Si, è un formatter con diverse opzioni che tiene conto di molte cose (del tipo se c'è una definizione di macro in mezzo ad una funzione e riformatti, la macro non viene toccata, oppure se hai particolari allineamenti nel codice se ne accorge e li preserva, etc.) In pratica usa il parser e l'AST di clang per raccogliere informazioni sul codice, c'è anche un video dove Chandler Carruth mostra la cosa al recente GoingNative2013 ( http://channel9.msdn.com/Events/GoingNative/2013/The-Care-and-Feeding-of-C-s-Dragons, è tutto specifico per C++ ma magari ci tiri fuori qualche idea).
14
« il: 25 ſettembre 2013, 14:20:47 »
Io pero' non sono d'accordo sul passarsi i file cosi' come sono, io sono per il machine duty, insegna alla macchina cosa vuoi che faccia per te, e poi ri-mettila ai suoi doveri, ed il primo dovere e' farti sgobbare il meno possibile!
e allora, una volta che hai fatto ingoiare un sorgente ed ottenuto il syntax-tree puoi fare l'operazione inversa a partire da indicazioni sul come farla! qui puoi definire uno stile, uno tuo personale, come vuoi che venga indentato, dove vuoi che vengano messi i block-delimiter, e tanti altri dettagli estetici, etc, e la App di turno lo fa per te, sputando indietro un nuovo sorgente.
e' un po' che sto usando questo sistema, ed e' favoloso, piacevole sopratutto, puoi pastrocchiare quanto vuoi, sopratutto se hai poco tempo e vai giu' di copy & past selvaggio, di quelli che sballano non solo l'indentazione ma anche regole di safeC (tipo if () senza graffe al seguito), o pessime header-comments, o funzioni con troppi parametri sulla stessa linea, na roba che non si legge a meno di avere 200000 colonne, insomma pasticci fastidiosi da sistemare perche' di pura manovalanza, ecco in tutti questi casi e' piacevole infischiarsene perche' ci pensa la App a smacchiare tutto con risultati impeccabili!
Potresti dare un'occhiata a clang-format!
15
« il: 23 ſettembre 2013, 11:58:11 »
Recentemente mi sono convertito anche io agli spazi, in ufficio i sorgenti sono spesso illeggibili perchè ognuno ha impostato emacs o vim in maniera diversa, e si possono vedere cose allucinanti :S
|