window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Gioco speciale per programmatori Ruby - The Codest
The Codest
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Industrie
    • Fintech e banche
    • E-commerce
    • Adtech
    • Tecnologia della salute
    • Produzione
    • Logistica
    • Automotive
    • IOT
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
Freccia indietro TORNA INDIETRO
2019-04-15
Sviluppo di software

Gioco speciale per programmatori Ruby

The Codest

Tomasz Szkaradek

Architetto dello sviluppo

Un giorno di 3 anni fa nel team The Codest abbiamo preparato un grande gioco di Cody per programmatori Ruby. Nell'articolo di oggi, vorrei descrivere come si è svolto il lavoro su questo progetto e soprattutto mostrarvi il codice del progetto, che da oggi è disponibile pubblicamente sul nostro github.

Design del gioco

Quando abbiamo progettato il gioco, il nostro obiettivo principale era quello di preparare un intrattenimento divertente per i programmatori, oltre a fare qualcosa di interessante come parte del lavoro nella nostra azienda. Finora non avevamo avuto alcuna competenza nella creazione di giochi, per cui la sfida è stata notevole. In primo luogo, ci siamo concentrati su cosa fosse realmente questo gioco. Dopo aver elaborato il piano iniziale, ci siamo messi all'opera.

Nell'ambito del lavoro sul gioco, abbiamo deciso di partecipare a un hackathon e di dividerci in gruppi che svolgessero compiti specifici. Con questa divisione di 8 ore di lavoro, siamo riusciti a realizzare l'aspetto degli avversari nel gioco, l'intero layout e le fondamenta dei compiti e delle API dell'intero sistema. Nella fase successiva, ci siamo riuniti per incontri di 4 ore una volta al mese, grazie ai quali siamo riusciti a completare il gioco in 3 incontri.

Attuazione

Poiché siamo specializzati in RubyOnRails, abbiamo scelto questa tecnologia come leader. Tuttavia, il gioco non doveva essere testuale e quindi l'approccio ad esso si rifletteva in un'applicazione di tipo SPA. Come parte del compito, abbiamo lavorato su una ben nota pipeline di asset da rails (nel 2016 non c'era niente di meglio in linea di principio) e l'intera javascript basato su un sistema di proprietà codice con l'aiuto di TypeScript. Nell'applicazione c'era una divisione standard delle responsabilità: Rails come risorsa e fonte di API, javascript e affini come interazione con l'utente. In questo caso, tuttavia, si è operato come un ibrido e alcune viste sono state semplicemente renderizzate da Rails, mentre altre - da JS.

Dattiloscritto

Era il nostro primo esperimento in questo campo. Erano tempi in cui si credeva nel successo di CoffeScript. L'uso di TypeScript richiedeva l'introduzione di una gemma typescript-rails. Sfortunatamente, questa non era la soluzione definitiva, perché typescript, essendo un linguaggio tipizzato staticamente, richiedeva anche questo dalle librerie allegate di default a rails.

https://github.com/codesthq/cody_the_game/blob/master/app/assets/javascripts/jquery.d.ts (soprattutto quando si utilizza il sistema di gestione degli asset incorporato in rails).

Cody come gioco richiedeva molte dinamiche sul lato del browser, oltre alla modifica dell'albero del DOM. L'uso di TypeScript al posto di javascript vanilla ha rappresentato un enorme salto di qualità del codice; la presenza stessa di classi e incapsulamento era molto allettante per noi.

API e SPA

Nel 2019, le applicazioni SPA sono gestite utilizzando i magnifici React o Vue biblioteche. Tuttavia, nel 2015, lo abbiamo fatto in modo diverso. Il già citato typescript è stato utile per l'implementazione del gioco, mentre jQuery ha revocato tutto il lavoro relativo alla richiesta xml http. Ora possiamo usare fetch, mentre a quei tempi `$ .ajax` era tutto ciò che serviva per il lavoro. Date un'occhiata alla nostra API client!

https://github.com/codesthq/cody_the_game/blob/master/app/assets/javascripts/services/api_client.js.ts

Se si trattava di un'API, bisognava risolvere il problema dell'autenticazione in qualche modo, no? Beh, è vero. Ma in questo caso, abbiamo seguito (è possibile scrivere qui - abbiamo usato la banda?!) la banda e nella sessione di rails abbiamo creato cookie_key e poi l'abbiamo salvata nel database. Quindi sapevamo che tutto era più che a posto.

https://github.com/codesthq/cody_the_game/search?q=cookie_key&unscoped_q=cookie_key

Lo stato del gioco era memorizzato nel database e le informazioni su quanti utenti avevano punti provenivano dal database (è lo stesso database? Possiamo cambiarlo con un pronome?). L'ACID è sempre utile quando non c'è cache sul lato del sistema;)

Nel caso della spa, è la soluzione migliore senza ricaricare la pagina. Abbiamo risolto il problema in modo classico e l'ancoraggio html era la soluzione migliore senza espandere le dipendenze inutili. Perché chi userebbe i turbolink?

SnapSVG

Se progettiamo un gioco, questo deve essere rilasciato solo con grafica e animazioni eccezionali. All'epoca passavamo molte ore a chiederci come soddisfare queste esigenze nella nostra applicazione. Da un lato, il canvas può fare miracoli, dall'altro, in un html pulito è molto più facile da raggiungere e tutti lo sanno. Dopo una minuziosa ricerca della soluzione migliore, abbiamo capito che la combinazione di queste due soluzioni è svg. Permette di presentare facilmente la grafica in un vettore, è scritto in linguaggio markup e, cosa più importante, può essere modificato al volo. È importante notare che esiste una libreria per i file svg che funziona in modo simile a jQuery e consente di effettuare operazioni sull'immagine in modo unificato. Questo è: http://snapsvg.io, abbiamo un bel ricordo dell'utilizzo di quella particolare soluzione.

Un esempio di utilizzo di snap.svg è riportato di seguito:

https://github.com/codesthq/cody_the_game/blob/master/app/assets/javascripts/intro.js.ts

Il file haml stesso con lo scheletro grafico:

https://github.com/codesthq/cody_the_game/blob/master/app/views/game/show.html.haml

Come si può vedere, è quasi come un normale albero DOM e una normale applicazione rails!

TrustedSandbox

Bene, finalmente abbiamo API, grafica e SPA. Ma che dire dell'implementazione delle soluzioni inviate dagli utenti?

La prima cosa che viene in mente è il metodo eval, ma non siamo pazzi;) Nel 2016, docker era in ascesa, quindi ci è sembrata una scelta naturale. I container stessi non garantivano un isolamento e una protezione completi, per questo motivo abbiamo utilizzato una soluzione già pronta in Ruby chiamata https://github.com/vaharoni/trusted-sandbox. Questa soluzione ha permesso di proteggere meglio il codice prima di lasciare la sandbox e di configurare in modo standardizzato i requisiti del sistema operativo. Era molto importante limitare adeguatamente il tempo di esecuzione del codice, la memoria necessaria per operare e i cicli della CPU. La nostra configurazione è disponibile di seguito

https://github.com/codesthq/cody_the_game/blob/master/config/trusted_sandbox.yml.example

Naturalmente, la stessa sandbox di fiducia non garantiva nulla, ed è per questo che abbiamo ideato un sito web speciale per eseguire il codice.

https://github.com/codesthq/cody_the_game/blob/master/app/services/task_runner/base_task.rb

Ciascuno dei compiti aveva un proprio caso di test, che ci ha permesso di verificare la correttezza della soluzione implementata. Questo è stato fatto iniettando il codice utente nel caso di test, in modo che tutto fosse eseguito in isolamento.

https://github.com/codesthq/cody_the_game/blob/master/app/challenges/challenge/case.rb

Naturalmente, questa azione costava parecchio tempo e, mentre raccoglievamo le risposte, non potevamo permetterci di eseguire la sandbox, quindi ci siamo limitati a salvare il codice nel database, creando una submission e poi, utilizzando il long pooling, abbiamo chiesto all'endpoint di ottenere lo stato del codice. Questo ci ha permesso di alleggerire l'application server e di verificare i dati in modo appropriato. Naturalmente, dovevamo anche proteggerci dal "crash dello script" e quindi abbiamo limitato il numero di interrogazioni al server utilizzando la variabile ttl, che si può vedere qui sotto.

https://github.com/codesthq/cody_the_game/blob/master/app/assets/javascripts/level_controller.js.ts#L92

Sintesi della competizione

Fino a settembre 2011, le statistiche di gioco erano le seguenti:

- numero di sessioni: 1945 - compiti inviati: 4476 - ha inviato le risposte corrette: 1624 - ha terminato la partita: 31

Come si può vedere, le scale più grandi sono iniziate nel task # 2, perché non si trattava più di un normale esempio di hello world.

Leggi anche:

Una rapida immersione in Ruby 2.6. Cosa c'è di nuovo?

Scrivere la documentazione è diventato facile grazie a VuePress

 Tutorial sulle basi di Vue.js. Come iniziare con questo framework?

Articoli correlati

Sviluppo di software

Costruire applicazioni web a prova di futuro: le intuizioni del team di esperti di The Codest

Scoprite come The Codest eccelle nella creazione di applicazioni web scalabili e interattive con tecnologie all'avanguardia, offrendo esperienze utente senza soluzione di continuità su tutte le piattaforme. Scoprite come la nostra esperienza favorisce la trasformazione digitale e il business...

IL CANCRO
Sviluppo di software

Le 10 principali aziende di sviluppo software con sede in Lettonia

Scoprite le migliori aziende di sviluppo software della Lettonia e le loro soluzioni innovative nel nostro ultimo articolo. Scoprite come questi leader tecnologici possono aiutarvi a migliorare la vostra attività.

thecodest
Soluzioni per aziende e scaleup

Essenziali di sviluppo software Java: Guida all'outsourcing di successo

Esplorate questa guida essenziale sullo sviluppo di software Java con successo outsourcing per migliorare l'efficienza, accedere alle competenze e guidare il successo del progetto con The Codest.

thecodest
Sviluppo di software

La guida definitiva all'outsourcing in Polonia

L'aumento di outsourcing in Polonia è guidato dai progressi economici, educativi e tecnologici, che favoriscono la crescita dell'IT e un clima favorevole alle imprese.

IlCodesto
Soluzioni per aziende e scaleup

Guida completa agli strumenti e alle tecniche di audit IT

Gli audit IT garantiscono sistemi sicuri, efficienti e conformi. Per saperne di più sulla loro importanza, leggete l'articolo completo.

The Codest
Jakub Jakubowicz CTO e cofondatore

Iscrivetevi alla nostra knowledge base e rimanete aggiornati sulle competenze del settore IT.

    Chi siamo

    The Codest - Società internazionale di sviluppo software con centri tecnologici in Polonia.

    Regno Unito - Sede centrale

    • Ufficio 303B, 182-184 High Street North E6 2JA
      Londra, Inghilterra

    Polonia - Poli tecnologici locali

    • Parco uffici Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Ambasciata del cervello, Konstruktorska
      11, 02-673 Varsavia, Polonia

      The Codest

    • Casa
    • Chi siamo
    • Servizi
    • Case Studies
    • Sapere come
    • Carriera
    • Dizionario

      Servizi

    • Consulenza
    • Sviluppo di software
    • Sviluppo backend
    • Sviluppo Frontend
    • Staff Augmentation
    • Sviluppatori backend
    • Ingegneri del cloud
    • Ingegneri dei dati
    • Altro
    • Ingegneri QA

      Risorse

    • Fatti e miti sulla collaborazione con un partner esterno per lo sviluppo di software
    • Dagli Stati Uniti all'Europa: Perché le startup americane decidono di trasferirsi in Europa
    • Confronto tra gli hub di sviluppo Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filippine), Eurasia (Turchia)
    • Quali sono le principali sfide di CTO e CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condizioni di utilizzo del sito web

    Copyright © 2025 di The Codest. Tutti i diritti riservati.

    it_ITItalian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek it_ITItalian