Sotto i riflettori dello stagista: Ben McMorran

29 luglio 2015 | Di

fotografia di Ben McMorranSono Ben McMorran, un giovane emergente che studia informatica al Worcester Polytechnic Institute. Ho trascorso le ultime dodici settimane come stagista di ingegneria del software nel team Teaching and Learning (TNL). Questa è la mia seconda estate come stagista qui a edX. Mentre ci sono molte attività su cui ho lavorato durante il mio tempo qui, ci sono due progetti principali che vorrei evidenziare.

Sviluppo API e front-end per i team

Il primo progetto su cui ho lavorato è stata la funzionalità Teams per LMS, che è ancora in fase di sviluppo. Questa funzione renderà più facile per gli studenti connettersi e conversare tra loro in piccoli gruppi e aumenterà la viralità dei corsi edX. Lo sviluppo di questa funzionalità includeva l'utilizzo del lavoro front-end Spina dorsale e implementazione API con il Quadro di riposo Django (DRF). Sebbene avessi familiarità con Backbone dal miglioramento del flusso di lavoro di pubblicazione dei corsi la scorsa estate, il lavoro con l'API era nuovo per me.

Durante lo sviluppo c'è stata una forte attenzione alla creazione di componenti disaccoppiati e riutilizzabili. Un esempio di questo è il modo in cui abbiamo progettato i controlli di impaginazione per i team e gli elenchi degli argomenti. Ne abbiamo sviluppati diversi controlli di paging generici e riutilizzabili compatibile con le informazioni della pagina restituite da DRF: 

UX per la visualizzazione impaginata (Pagina 5 / 23)

Questi controlli, come illustrato sopra, saranno facili da integrare con altri endpoint API edX in futuri sviluppi.

Migliori campi espandibili Ho creato per supportare l'API Team sono un altro esempio di codice riutilizzabile. I clienti possono specificare su quali campi desiderano maggiori informazioni come parte della richiesta iniziale. Ad esempio, una richiesta di informazioni sul team potrebbe specificare che il campo degli utenti deve essere espanso. Invece di fornire solo nomi utente, la risposta includerebbe i dettagli su ciascun utente del team. Ciò riduce il numero di richieste che il client deve effettuare o riduce le dimensioni della risposta quando i campi non sono necessari. I campi espandibili sono facili da integrare con qualsiasi API DRF specificando il campo come an Campo espandibile e fornendo un serializzatore per lo stato compresso ed espanso. Con la crescita della piattaforma edX, questa attenzione ai componenti riutilizzabili diventerà solo più importante.

Forum di discussione Miglioramenti delle prestazioni

Ho anche trascorso diverse settimane a migliorare le prestazioni dei nostri forum di discussione. Usiamo New Relic per monitorare i server che eseguono edx.org. All'inizio di quest'estate, il monitoraggio ha catturato una traccia che mostrava che ci volevano più di 40 secondi per pubblicare un commento in un corso specifico, richiedendo ulteriori indagini.

L'elaborazione della traccia che mostra un post di commento richiede 43,400 millisecondi.

Ho caricato il corso problematico nel mio ambiente di sviluppo locale e ho provato a pubblicare un commento. La profilazione ha rivelato che il server trascorreva la maggior parte del tempo emettendo un evento di analisi, che includeva l'argomento della discussione, se applicabile. L'argomento di un componente di discussione fornisce un modo per filtrare e raggruppare i thread di discussione. Ad esempio, tutti i thread in un componente di discussione in linea hanno lo stesso argomento.

Nell'app di discussione, i commenti vengono creati in base a un ID discussione utilizzato dal servizio commenti. Tuttavia, l'argomento di discussione per un particolare commento viene memorizzato nel modulo di discussione come parte del corso. I moduli di discussione conoscono l'ID discussione associato, ma non esisteva un modo efficiente per ottenere l'argomento della discussione se si conosceva solo l'ID discussione. Il corso problematico aveva quasi 1000 moduli di discussione. Creazione dell'evento di analisi caricato ognuno per scoprire l'argomento di discussione!

Il mio primo pensiero è stato quello di aggiungere un indice sull'ID discussione. Ciò si è rivelato problematico perché esistono diversi meccanismi di persistenza per i corsi nella piattaforma edX (corsi old mongo, split mongo e XML). L'utilizzo di un nuovo indice richiederebbe cambiamenti drastici. Invece ho creato un mappatura degli ID discussione ai moduli associati. Questa mappatura viene memorizzata nella cache nel database MySQL quando viene pubblicato un corso. Poiché i dati del percorso cambiano raramente, ma sono spesso accessibili, il costo relativamente elevato della creazione della mappatura attraversando l'intero percorso è accettabile, poiché ciò accadrà di rado.

Con la mia correzione implementata, dovevo verificarla attraverso il test di carico. Questo processo era nuovo di zecca per me. Anche se non è stato impegnativo di per sé, mi ci è voluto un po' per mettermi al passo. Ho gestito i forum esistenti Locusta test contro il corso problematico prima e dopo l'applicazione della mia correzione.

Traccia di NewRelic che mostra in media 1320 query di database per inserire un commento.

Prima della correzione, ci sono voluti circa 20 secondi per creare un commento durante la mezz'ora di test di carico. Nota l'enorme numero di query MongoDB, 1320, nella tabella di suddivisione quando viene caricato ogni modulo di discussione nel corso.

Traccia di NewRelic che mostra in media 6.75 query di database per inserire un commento.

Dopo la correzione, sono stati necessari circa quattro secondi per creare un commento durante la mezz'ora di test di carico. Nota come il numero di query MongoDB ora è solo 6.75.

I tempi di risposta sono stati circa cinque volte più rapidi e il numero di query MongoDB è stato notevolmente ridotto con la correzione. Ora è nel ramo principale della piattaforma edx e dovrebbe essere distribuito presto su edx.org.

In sintesi…

La mia esperienza come stagista edX è stata fantastica. Incorporato nel team di TNL, mi sembrava di essere un impiegato a tempo pieno. Sono stato in grado di accettare biglietti reali e vedere l'impatto del mio lavoro sulla piattaforma. Sviluppare un progetto open source è fantastico. Vorrei ringraziare Andy Armstrong, Christina Roberts, l'intero team di TNL e edX per aver reso questa fantastica estate!

Caricamento in corso

Tempo per altro? Dai un'occhiata agli articoli qui sotto.

Risolvere i problemi insieme: sviluppo di piattaforme guidate dalla comunità
Competenze e sviluppo del futuro alla conferenza Open edX
Workshop per sviluppatori della conferenza Open edX
Riconquistare il nostro futuro digitale: perché mi sono unito all'Open Renaissance Group
Partecipa alla conferenza Open edX 2026!

La conferenza Open edX del 2026 presenterà casi d'uso innovativi per uno dei migliori sistemi di gestione dell'apprendimento online open source al mondo, la piattaforma Open edX, e scoprirà gli ultimi progressi nella progettazione didattica, nella costellazione dei corsi e nei metodi per utilizzare ed estendere la piattaforma Open edX , comprese tecnologie rivoluzionarie, come l'intelligenza artificiale generativa.