...quando le cose iniziano a funzionare.
Tra qualche anno, son certo che la programmazione GPGPU sarà all'ordine del giorno ed esisteranno efficaci strumenti di supporto allo sviluppo e al debug.
Fino ad allora resterà puro autolesionismo.
Showing posts with label programmazione. Show all posts
Showing posts with label programmazione. Show all posts
Wednesday, 24 August 2011
Wednesday, 9 February 2011
"Impariamo il C", un corso collaborativo
Qualche settimana fa ho dato via ad un piccolo esperimento sul forum di NGI. Si tratta di un micro-corso di programmazione C di stampo collaborativo: una breve lezione "frontale" discussa con la community.
L'approccio che seguo è bottom-up: son voluto partire dalle minuzie (cioé il ferro, quella che viene chiamata architettura dell'elaboratore) e risalire lentamente, introducendo un piccolo tassello aggiuntivo ad ogni lezione. Naturalmente, tutto scritto in maniera easy, con molte metafore, illustrazioni ed esercizietti.
Perché proprio il C? Beh, perché è la base dei linguaggi imperativi. In fondo, praticamente tutti i linguaggi non funzionali e non logici sono dialetti del C. Una volta imparata la logica, poi ci si può spostare su altri contesti senza paura, dai sistemi embedded alle web-application, passando per il mondo emergente del GPGPU computing.
Queste sono le "lezioni" effettuate finora:
Come sosteneva Schoenberg, anche il maestro impara nell'insegnare all'allievo. Trasmettendo il C sto scoprendo aspetti che proprio cui non avevo mai prestato attenzione o di cui ignoravo completamente l'esistenza. Per esempio, ho reagito in maniera un po' scomposta alla scoperta che sia sizeof che la virgola sono operatori in C, e in particolare la virgola (grazie ACray!) che in base alle situazioni può avere una semantica che definire balzana è usare un eufemismo. Il C non finisce mai di stupire.
L'approccio che seguo è bottom-up: son voluto partire dalle minuzie (cioé il ferro, quella che viene chiamata architettura dell'elaboratore) e risalire lentamente, introducendo un piccolo tassello aggiuntivo ad ogni lezione. Naturalmente, tutto scritto in maniera easy, con molte metafore, illustrazioni ed esercizietti.
Perché proprio il C? Beh, perché è la base dei linguaggi imperativi. In fondo, praticamente tutti i linguaggi non funzionali e non logici sono dialetti del C. Una volta imparata la logica, poi ci si può spostare su altri contesti senza paura, dai sistemi embedded alle web-application, passando per il mondo emergente del GPGPU computing.
Queste sono le "lezioni" effettuate finora:
- installazione dell'IDE, cenni di architettura degli elaboratori
- sintassi del C, programmazione strutturata
- ancora sulla sintassi, i tipi di dato, le variabili
- variabili parte seconda: gli array
- introduzione delle funzioni
- operatori aritmetici e logici
- costrutti di selezione
- costrutti di iterazione
- ancora sull'iterazione
- array multipli e struct
- ricorsione
- ancora ricorsione, memoria (record attivazione, heap, stack, ecc), introduzione dei puntatori
- le liste e l'allocazione di memoria (malloc)
- accenni dei costi asintotici, e ancora liste
Come sosteneva Schoenberg, anche il maestro impara nell'insegnare all'allievo. Trasmettendo il C sto scoprendo aspetti che proprio cui non avevo mai prestato attenzione o di cui ignoravo completamente l'esistenza. Per esempio, ho reagito in maniera un po' scomposta alla scoperta che sia sizeof che la virgola sono operatori in C, e in particolare la virgola (grazie ACray!) che in base alle situazioni può avere una semantica che definire balzana è usare un eufemismo. Il C non finisce mai di stupire.
Friday, 11 June 2010
Mergifier: prima alfa
Mergifier è entrato in funzione! Attualmente si occupa di classificare le notizie di interesse per studenti, docenti e dipendenti. Questi sono i link per sottoscrivere i feed ATOM:
Il progetto è in una fase embrionale e potrebbe manifestare qualche malfunzionamento; aiutaci segnalando bug o eventuali suggerimenti via email o sul canale facebook! :)
Saturday, 17 April 2010
Un percettrone per il portalone
Da un po' di tempo a questa parte mi frulla l'idea di rendere in qualche modo "intelligente" le generazione del primo piano del portale www.unimib.it.
Fresco del corso di machine learning del prof. Mauri ho deciso di tentare l'implementazione di un software in grado di imparare dagli esempi - storici e futuri - la mentalità con cui realizziamo giornalmente il primo piano, arrivando un giorno a realizzarlo in maniera automatica. A.N.N.N.E, questo il nome del programma, attualmente sfrutta una semplice rete neurale feed-forward. Nell'esperimento cui si riferisce lo screenshot ha avuto in pasto circa 1700 esempi, tutti classificati in base ad una manciata di attributi.
Gli esempi sono stati sufficienti per avere circa il 22% di errori di classificazione; non è male ma temo che il problema, più che della rete in sè, sia nella limitatezza del modello che non tiene in alcun modo conto della componente temporale.
Può capitare infatti che qualche notizia/evento importante non finisca nel primo piano per banali ragioni di congestionamento. Inoltre, gli eventi è più probabile che finiscano in primo piano nei giorni immediatamente precedenti l'evento stesso. Per le notizie vale l'opposto: più tempo è trascorso e più è probabile la discesa negli avvisi normali. Entrambi gli aspetti non sono considerati al momento, e sicuramente influiscono negativamente nel risultato.
L'inizio è comunque stimolante.
Monday, 9 November 2009
Chiarezza, innanzitutto
error LNK2005: "class std::map,class std::allocator >,class Proiettile *,struct std::less,class std::allocator > >,class std::allocator,class std::allocator > const ,class Proiettile *> > > MappaProiettili" (?MappaProiettili@@3V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVProiettile@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVProiettile@@@std@@@2@@std@@A) già definito in PLT.obj
Cosa stai cercando di dirmi, caro Visual Studio? O_o"
Cosa stai cercando di dirmi, caro Visual Studio? O_o"
Thursday, 3 September 2009
Δελφοί
Delphi, l'ombelico del mondo, sede dell'oracolo più famoso di sempre, il posto "in cui chiunque avrebbe fatto il proprio santuario, se non ci avessero pensato prima i Greci".
Perché un posto del genere si ritrova come eredità moderna un linguaggio di programmazione insulso? Borland accidenti a te!
Monday, 23 February 2009
Ippopotami e nuvole
Le tags cloud sono un metodo molto efficace per condurre il navigatore attraverso le proprie notizie, informazioni e quant'altro legati ad un preciso argomento, mostrando nel contempo il ventaglio di informazioni disponibili sul sito.Abbiamo deciso quindi di fornire ai visitatori di unimib.it questa possibilità, e in fase di implementazione stanno emergendo alcune considerazioni non triviali.
Lunghezze
La parola più lunga sul dizionario è "precipitevolissimevolmente", 26 caratteri; pare che la più lunga in italiano sia "hippopotomonstrosequippedaliofobia" (che non è la fobia degli animali grossi e zozzi ma delle parole lunghe e impronunciabili) di 34 caratteri, ma gli si preferisce la più concisa "sesquipedalofobia".
E' ragionevole pensare che non ci sarà mai l'esigenza di una parola così enorme e, comunque, se mai capiterà non sarà la più frequente nel database. La più lunga sul mio blog è "multitexturing" di 14, e le parolone composte impronunciabili sono all'ordine del giorno in informatica.
Dunque, abbiamo calibrato la dimensione massima del font e la larghezza del box adatti ad accogliere una o più parole di 26 caratteri.
Collisioni
Quando si tratta di taggare un contenuto, ognuno la vede alla sua maniera. Non c'è un manuale definitivo a cui attenersi al proposito, e anche solo dover decidere se sia meglio mettere parole singolari o plurali accende dibattiti inestinguibili. Quel che è sicuro è che faremo una lunga opera di persuasione verso i redattori decentrati affinchè scelgano pochi concetti chiari ed evitino frasi o parole multiple.
Quello che ci preoccupa maggiormente, però, è la normalizzazione delle parole. "Università", "università" e "universita" devono in qualche modo essere la controimmagine di una funzione intelligente che sappia riconoscerle e fargli puntare lo stesso entry nel database. Le poche soluzioni che abbiamo trovato comprendono la conversione in minuscolo, l'eliminazione dei caratteri non alfanumerici e un qualche tipo di aiuto AJAX per il redattore, ma tutte e tre non risolvono il fatto che "università" e "universita" punteranno comunque a record differenti. Damn.
Probabilità
La distribuzione di probabilità delle tags è senza dubbio normale: è facile prevedere che ci saranno delle tag con frequenza estrema (convegni, avvisi), ma il grosso starà intorno al valore atteso. Per questa ragione, mi cruccia un po' dover decidere un numero massimo di tags da poter visualizzare: scelta un po' arbitraria, visto che "il grosso" sarà lì nel mezzo della gaussiana. Per ora, comunque, si è deciso che visualizzeremo le prime 40, e forse sono anche troppe per la varietà di parole chiave che abbiamo utilizzato fino a questo momento.
Subscribe to:
Posts (Atom)



