• Non ci sono risultati.

8.4 Valutazione personale

8.4.3 Valutazione finale

Mi sento di valutare la mia esperienza di questo stage come tutto sommato positiva e gradita, ma ritengo opportuno mantenere una riserva per quanto riguarda il futuro del progetto software in sé.

Glossario

A

API Acronimo di “Application Programming Interface”, è un set di metodi ben definiti per la comunicazione fra diverse componenti software.

Assertion In programmazione, un’assertion (asserzione) è uno statement sempre vero ad un determinato punto di esecuzione del codice, questo è solitamente usato per fare in modo che un software sia in grado di rilevare i propri difetti. In molti casi la contraddizione di un assert provoca il sollevamento di un’eccezione.

B

Background (operazioni in background) Letteralmente “sottofondo” o “sfondo”, per “operazione in background” si intende un’operazione eseguita senza provocare disturbo all’utente, mentre questo sta effettuando altre operazioni.

Bytecode Set di istruzioni usato dai linguaggi interpretati per aumentare l’efficienza nell’esecuzione di codice.

Build Procedura, solitamente eseguita da un set di script automatici, che solitamente prevede il passaggio dal codice sorgente ad un prodotto eseguibile, eventualmente attraversando ulteriori fasi come test automatici (analisi dinamica), analisi statica, creazione di statistiche sulla coverage del codice e risoluzione di eventuali dipendenze. [27, cap. 6-11 §6.1, p. 128]

C

CRUD Acronimo di Create, Read, Update, Delete, CRUD è un acronimo che riassume le quattro operazioni principali effettuate su un dato conservato all’interno di una base di dati, nell’ordine: Creazione, Lettura, Aggiornamento, Cancellazione. [27, cap. 13-9 §6.3, p. 232]

Commit Operazione effettuata su un repository in cui si rendono definitive delle modifiche ad uno o più files condivisi. [33]

Continuous Integration Pratica, atta al ridurre i problemi di integrazione, nella quale si vanno ad eseguire una serie di operazioni automatizzate ad ogni push, come esecuzione di test di unità e di integrazione;

così da poter rilevare immediatamente problemi di integrazione ed errori. [32, cap. 3, p. 78]

Coverage Metrica che rappresenta la quantità di codice sorgente eseguita da una determinata suite di test.

[27, cap. 4-8 §3.3.1, p. 89]

D

Data enrichment Termine generico che si riferisce a tutti i processi usati per raffinare o comunque migliorare dati grezzi, oppure estrarre dati da un insieme di dati grezzi, come testi in linguaggio naturale.

Dati non strutturati Dati privi di schema, le cui modalità di gestione cambiano sostanzialmente a seconda del dato specifico. Solitamente si tratta di elementi multimediali o testo in linguaggio naturale o narrativo.

Dati semi-strutturati Dati solitamente ordinati, annidati e basati sul concetto di lista che condividono caratteristiche con i dati non strutturati ma possiedono uno schema parziale (ma non necessariamente regolare) per la loro rappresentazione. Solitamente i dati semi-strutturati sono rappresentati con linguaggi come XML o JSON.

DBMS Acronimo di “DataBase Management System”, è un sistema software che facilita la creazione ed il mantenimento di una base di dati informatica. [34, cap. 1 §1.2, p. 3-6]

DTD Acronimo di “Document Type Definition”, il DTD è una dichiarazione che definisce il tipo (ed eventualmente la struttura) di un documento scritto in un linguaggio di markup come XML. [39]

Duck Typing Stile di tipizzazione dinamica dove la semantica di un oggetto è determinata dall’insieme dei metodi e proprietà dell’oggetto stesso.

E

EAV Vedi Entity-Attribute-Value

Entity-Attribute-Value Modello di dati usato per codificare, in modo spazialmente efficiente, entità il cui numero di attributi è potenzialmente vasto, ma il numero di attributi relazionati ad una determinata entità è solitamente modesto.

Espressione Regolare Per espressione regolare si intende un insieme di caratteri e simboli che vanno a rappresentare un linguaggio regolare. Molte volte le espressioni regolari sono usate come strumento di ricerca nelle stringhe oppure come strumento di validazione di un eventuale input. [37, cap. 3 §3.1, p. 89]

ETL Acronimo di “Extract, Transform, Load”, fa riferimento ad un processo nell’uso delle basi di dati in cui si effettua l’estrazione di un dato da un sistema sorgente (extract), in seguito tale dato viene elaborato, così da prepararlo per il caricamento (transform) ed infine caricato nella destinazione finale (load). [34, cap. 19 §19.1, p. 700]

F

Favicon Icona rappresentativa di un sito web, solitamente usata all’interno dei segnalibri di un browser. [40]

Fork Il fork di un progetto accade quando uno sviluppatore copia il codice sorgente di un progetto ed inizia una linea di sviluppo indipendente da quella copiata, creando un software separato, solitamente questo comporta anche una divisione di un’organizzazione di sviluppatori.

Finestra Modale Per finestra modale si intende un elemento grafico che è subordinato alla finestra principale di un’applicativo software. La comparsa di una finestra modale solitamente comporta la disabilitazione della finestra principale, che comunque rimane visibile, e la visualizzazione della finestra modale in cima alla finestra principale.

Frame HTML Nel markup HTML, un <frame> provoca la divisione fisica della finestra del browser in diverse parti, ognuna con il proprio contenuto. Questo elemento di markup è considerato ufficialmente obsoleto [35], considerando anche i problemi di accessibilità ed usabilità che questi comportano. [41]

Framework Insieme di librerie e codici sorgenti atti a creare una struttura base di un software, solitamente imponendo un certo stile di programmazione.

H

Home Page Home Page fa riferimento alla pagina principale di un sito web, quella a cui si accede inserendo l’URL del sito web, senza specificare alcuna sotto sezione o pagina.

I

IDE Acronimo di “Integrated Development Environment”, un IDE è uno strumento di sviluppo contenente un editor di testo e diversi strumenti per la gestione del versionamento dei files, gestione degli alberi di cartelle, debugging e molto altro.

J

JSON Acronimo di “JavaScript Object Notation”, JSON è uno standard per la trasmissione di oggetti tramite stringhe leggibili da esseri umani. Fa uso di coppie chiave/valore e di array e viene solitamente usato nella comunicazione asincrona tra browser e server. [36]

L

Legacy Per sistema legacy si fa riferimento a metodi, tecnologie e software che fanno riferimento a sistemi informatici obsoleti o comunque che necessitano di essere rimpiazzati.

Linguaggio interpretato Si dice interpretato un linguaggio di programmazione in cui non viene effettuata una compilazione del codice sorgente in codice macchina, ma l’esecuzione del codice sorgente avviene tramite un software, detto interprete, che esegue le istruzioni dal codice sorgente in tempo reale.

M

Metodologia Euristica Metodologia, atta a bilanciare ottimizzazione, completezza, accuratezza e velocità di esecuzione, usata nel caso si vogliano trovare soluzioni approssimate di un determinato problema oppure nel caso le metodologie classiche di estrazione di un risultato siano troppo lente.

Microdata Serie di dati integrati nelle pagine web, usati per migliorare l’esperienza utente all’interno della pagina stessa o per fornire ulteriori informazioni riguardo alla pagina a crawler, motori di ricerca e browser web. [1, 2]

Minificazione Procedura tramite la quale si va a modificare (solitamente in maniera automatica) un codice sorgente per ridurne la dimensione quanto più possibile. Questo solitamente comporta la ridenominazione delle variabili con nomi lunghi un solo carattere, rimozione dei commenti e riformattazione del codice su una sola riga. [51]

Mocking Per mocking si intende la sostituzione (solitamente in ambito di test), di alcuni metodi o oggetti con classi che ne simulano il comportamento ma hanno un comportamento predefinito, cioè non eseguono alcuna logica ma semplicemente restituiscono risultati precedentementi definiti. (Da “to mock” - “fare il verso, imitare”). [32, cap. 8.1 §8.1.1, p.234]

O

Object-Oriented (paradigma) Paradigma di programmazione basato sul concetto di “oggetto”, il quale può contenere dati sotto forma di campi (detti anche attributi) e codice, sotto forma di funzioni (dette metodi), questi oggetti solitamente interagiscono tra loro. [27, cap. 13-6 §3.2, p. 229]

Open-source Open-source è un termine ampio che definisce un software il cui codice è pubblicamente disponibile a scopo di studio o modifica, oltre che distribuzione per qualunque fine, sia esso commerciale o meno. Solitamente Open-source fa riferimento anche alle licenze sotto cui questi software sono distribuiti, come GNU GPL o MIT License. [48, 42]

P

Periodo di slack Periodo temporale tra due attività che funge da “cuscinetto”, riducendo i danni provocati da problemi che influenzano la pianificazione temporale delle attività. Può essere visto come un “margine di sicurezza” tra due attività dipendenti l’una dall’altra e con inizio e fine ben definiti nel tempo.

Pixel Contrazione di “picture element” (elemento d’immagine), il pixel è l’elemento più piccolo indirizzabile e controllabile di un’immagine basata su punti.

Plugin Per plugin si intende una componente atta ad estendere le funzionalità di un software terzo e dipendente da quest’ultimo per il proprio funzionamento.

Polling Il polling è il processo in cui un sistema software va a verificare lo stato di una risorsa esterna in maniera attiva, solitamente ad intervalli regolari, chiedendo se tale risorsa ha subito un cambiamento dello stato.

Progetto pilota Progetto di natura sperimentale intrapreso allo scopo di verificare la fattibilità e l’utilità di una determinata azione.

Programmazione funzionale (paradigma) Paradigma di programmazione che tratta l’elaborazione in-formatica come la valutazione di funzioni matematiche, evitando dati mutevoli e cambi di stato. [27, cap. 13-6 §3.2, p. 229]

Push Operazione effettuata tramite lo strumento di versionamento GIT, in cui si va a caricare su un server locale o remoto le proprie modifiche dei files sottoposti a versionamento. [44]

R

Redirect Tradotto con “ridirezione” o “deviazione”, un redirect consiste nel deviare una richiesta ad un determinato URL verso una diversa locazione. [43, §10.3]

Reflection Caratteristica di un software in grado di esaminare e modificare la propria struttura e comporta-mento durante la propria esecuzione.

Regular Expression Vedi Espressione Regolare

Repository Per repository si intende una porzione di un server, locale o remoto, in cui si mantengono, in persistenza e con possibilità di accesso da parte di tutti i membri di un gruppo, dei dati sottoposti a versionamento.

REST Acronimo di “Representational State Transfer”, REST è uno stile architetturale che definisce un insieme di proprietà e limitazioni basati sul protocollo HTTP. [34, cap. 18 §18.4.4, p. 667-670]

Ricerca Fuzzy Con il termine “ricerca fuzzy” si fa riferimento alla ricerca di una stringa all’interno di un testo in maniera approssimativa, piuttosto che esatta.

S

Scraping Processo, solitamente automatizzato, di estrazione di dati da siti web, solitamente tramite accesso diretto al protocollo HTTP o tramite un browser automatizzato.

SEO: Acronimo di “Search Engine Optimization” (ottimizzazione per i motori di ricerca), è un insieme di tecniche e pratiche atte a migliorare il posizionamento di una pagina presso i motori di ricerca.

Single Responsibility Principio della programmazione secondo cui ogni classe dovrebbe avere una responsa-bilità su una singola parte delle funzionalità del software, e tale funzionalità devono essere completamente incapsulate in tale classe. È possibile integrare questa definizione dicendo che ogni classe dovrebbe avere un singolo “asse di cambiamento”, cioè una sola motivazione per cui essa dovrebbe essere modificata o integrata.

Singly Linked List Struttura dati a lista, conosciuta anche come “lista concatenata”, il cui ordine degli elementi non è dato dalla loro posizione in memoria, ma piuttosto ogni elemento ha un puntatore al prossimo elemento, creando una struttura che rappresenta una sequenza.

Sitemap File, solitamente in formato XML, che rappresenta la strutture di pagine all’interno di un sito web.

[45]

Social Media Piattaforma on-line usata da persone per costruire relazioni o reti sociali con persone che condividono gli stessi interessi, attività o che si conoscono nella vita reale.

T

Task (Celery) Un task è un’operazione assegnata a Celery per l’esecuzione, astratta nella forma di classe.

[49]

Template (Django) Un template Django è un foglio di markup HTML con degli elementi di markup aggiuntivi, dove il markup HTML definisce la struttura della pagina, mentre gli elementi aggiuntivi vengono compilati in tempo reale da Django per restituire una pagina html completa. I template fungono quindi da “scheletro” per la costruzione di una pagina HTML. [50]

Test Case Un test case è una specifica degli input, procedure di test e risultati attesi da un singolo test.

Test Fixture Una test fixture è un set di dati consistente usato per testare in maniera consistente deter-minate componenti, rimuovendo così la dipendenza del test dai dati presenti nel sistema al momento dell’esecuzione.

U

Unit testing Attività in cui si va a testare la più piccola unità logica di un sistema software, solitamente quest’ ultima corrisponde con la singola funzione o metodo. [32, cap.8 §8.1.1 p. 232]

URL Acronimo di “Uniform Resource Locator”, fa riferimento ad un indirizzo che riferisce ad una determinata risorsa sul web. [38, cap. 7 §7.3.1, p. 616-621]

UUID Acronimo di “Universally Unique Identifier”, fa riferimento ad un numero a 128 bit usato per identificare univocamente una determinata informazione in un sistema informatico. [46]

V

View (Django) Una view (o più precisamente view function) è una funzione che riceve in input una richiesta web e ritorna una risposta. Tale risposta può essere il contenuto di una pagina, un file XML, un errore, una redirect o altro. [47]

W

Web crawling Per web crawling si intende un’attività, portata a termine da un sistema automatizzato chiamato web crawler, dove si esplorano uno o più siti web, tipicamente alla ricerca di una determinata pagina o per scopi di indicizzazione.

Web scraping Vedi Scraping

Riferimenti bibliografici

[1] Sito ufficiale dei microdata schema.org, https://schema.org

[2] Pagina W3C sui microdata schema.org, https://www.w3.org/community/schemaorg/

[3] Pagina di documentazione sulle twitter cards, https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/abouts-cards

[4] Pagina di Facebook sulle notizie OpenGraph, https://developers.facebook.com/docs/sharing/opengraph [5] RFC-2368, https://www.ietf.org/rfc/rfc2368.txt

[6] PEP-8 - Style Guide for Python Code, https://www.python.org/dev/peps/pep-0008 [7] Sito ufficiale del linguaggio Python, https://www.python.org/

[8] Sito ufficiale del framework Django, https://www.djangoproject.com/

[9] Sito ufficiale di Django REST Framework, http://www.django-rest-framework.org/

[10] Sito ufficiale di Celery, http://www.celeryproject.org/

[11] Sito ufficiale di Flake8, http://flake8.pycqa.org/en/latest/

[12] Sito ufficiale di Swagger, http://swagger.io/

[13] Sito ufficiale di Vagrant, https://www.vagrantup.com/

[14] Sito ufficiale di Virtualbox, https://www.virtualbox.org/

[15] Documentazione ufficiale di BeautifulSoup4, https://www.crummy.com/software/BeautifulSoup/bs4/

doc/#beautifulsoup

[16] Sito ufficiale di PostgreSQL, https://www.postgresql.org/

[17] Documentazione ufficiale di Selenium, https://docs.seleniumhq.org/

[18] Sito ufficiale di Requests, http://docs.python-requests.org/en/master/

[19] Sito ufficiale di NeoVIM, https://neovim.io/

[20] Sito ufficiale di ECMA International, https://www.ecma-international.org/

[21] Sito ufficiale di ESLint, https://eslint.org/

[22] Standard ECMAScript 9.0, http://www.ecma-international.org/ecma-262/9.0/index.html [23] Sito ufficiale di ReactJS, https://reactjs.org/

[24] Sito ufficiale di Redux, https://redux.js.org/

[25] Pagina di NPM del progetto bundle-js, https://www.npmjs.com/package/bundle-js [26] Sito ufficiale di Scrapy, https://scrapy.org/

[27] SWEBOK Guide v3, P. Bourque, R.E. Fairley, IEEE, 2014, https://www.computer.org/web/swebok/v3 [28] Informazioni e discussioni in merito al chain of responsibility pattern sul Portland Pattern Repository,

http://wiki.c2.com/?ChainOfResponsibilityPattern

[29] Il PipelineProcessing pattern sul sito della University Of Florida, https://www.cise.ufl.edu/research/

ParallelPatterns/PatternLanguage/AlgorithmStructure/Pipeline.htm

[30] Interfacce fluide sul sito di Martin Fowler, https://www.martinfowler.com/bliki/FluentInterface.html [31] Modello di branching Git usato, https://nvie.com/posts/a-successful-git-branching-model/

[32] Software Engineering, Ian Somerville, 10th Edition, Addison-Wesley / Pearson Education Inc., 2015 [33] Manuale di git-commit, https://git-scm.com/docs/git-commit

[34] Basi di dati, P.Atzeni, S.Ceri, P.Fraternali, S. Paraboschi, R. Torlone, 4a Edizione, McGrawHill Education, 2014

[35] Differenze tra HTML5 ed HTML4 su W3C, https://www.w3.org/TR/html5-diff/#obsolete-elements [36] RFC-8259, https://tools.ietf.org/html/rfc8259

[37] Automi, linguaggi e calcolabilità, J.E. Hopcroft, R. Motwani, J.D. Ulman, 3a Edizione, Pearson Education Italia, 2003

[38] Reti di calcolatori, A.S. Tanenbaum, D.J. Wetherall, 5a Edizione, Pearson Education Italia, 2011 [39] DTD su W3Schools, https://www.w3schools.com/xml/xml_dtd_intro.asp

[40] W3C Quality Assurance: Favicon, https://www.w3.org/2005/10/howto-favicon [41] Tag Frame su W3Schols, https://www.w3schools.com/tags/tag_frame.asp

[42] Choose your license, sito per evidenziare le differenze fra i vari tipi di licenza, https://choosealicense.

com/licenses/

[43] RFC-2616, https://tools.ietf.org/html/rfc2616

[44] Manuale di git-push, https://git-scm.com/docs/git-push

[45] Sito ufficiale del protocollo sitemaps, https://www.sitemaps.org/index.html [46] RFC-4122, https://tools.ietf.org/html/rfc4122

[47] Documentazione sulle views di Django 2.1, https://docs.djangoproject.com/en/2.1/topics/http/views/

[48] Open Source Definition sul sito di Open Source Initiative, https://opensource.org/osd-annotated [49] Task nella documentazione di Celery, http://docs.celeryproject.org/en/latest/userguide/tasks.html [50] Documentazione sui template di Django 2.1, https://docs.djangoproject.com/en/2.1/topics/templates/

[51] Definizione di Minificazione (Recuperato da Archive.org), https://web.archive.org/web/20160424125048/

https://docs.webplatform.org/wiki/concepts/programming/javascript/minification

Documenti correlati