The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2019-04-15
Desenvolvimento de software

Jogo especial para programadores Ruby

The Codest

Tomasz Szkaradek

Arquiteto de desenvolvimento

Um dia, há 3 anos, na equipa The Codest, preparámos um grande jogo de Cody para programadores Ruby. No artigo de hoje, gostaria de descrever como foi o trabalho neste projeto e, acima de tudo, mostrar-vos o código do projeto, que a partir de agora está disponível publicamente no nosso github.

Conceção de jogos

Ao conceber o jogo, o nosso principal objetivo era preparar um entretenimento divertido para os programadores, bem como fazer algo interessante como parte do trabalho na nossa empresa. Até à data, não tínhamos tido quaisquer competências na criação de jogos, razão pela qual o jogo nós um desafio significativo. Em primeiro lugar, concentrámo-nos no que era realmente este jogo. Depois de elaborarmos o plano inicial, pusemos mãos à obra.

Como parte do trabalho no jogo, decidimos fazer uma hackathon e dividirmo-nos em grupos que realizam tarefas específicas. Com esta divisão de trabalho de 8 horas, conseguimos perceber o aspeto dos adversários no jogo, todo o layout e a base das tarefas e APIs de todo o sistema. Durante a fase seguinte, reunimo-nos em encontros de 4 horas uma vez por mês, pelo que conseguimos terminar o jogo em 3 encontros.

Implementação

Como somos especializados em RubyOnRails, escolhemos a tecnologia como a principal. No entanto, o jogo não se destinava a ser textual e, por isso, a abordagem ao mesmo reflectiu-se na aplicação do tipo SPA. Como parte da tarefa, trabalhámos num conhecido pipeline de activos de carris (em 2016 não havia nada melhor em princípio) e todo o javascript com base nas nossas código com a ajuda de TypeScript. Na aplicação, havia uma divisão padrão de responsabilidades: Rails como ativo e fonte de API, javascript e afins como interação com o utilizador. Aqui, no entanto, funcionou como um híbrido e algumas visualizações foram simplesmente renderizadas a partir do Rails, enquanto outras - a partir do JS.

Tipografia

Foi a nossa primeira experiência neste domínio. Era uma época em que as pessoas acreditavam no sucesso do CoffeScript. O uso do TypeScript exigiu a introdução de uma gem typescript-rails. Infelizmente, isso não foi o final, pois o typescript, sendo uma linguagem estaticamente tipada, também exigia isso das bibliotecas anexadas por padrão ao rails.

https://github.com/codesthq/cody_the_game/blob/master/app/assets/javascripts/jquery.d.ts (especialmente quando se utiliza o sistema de gestão de activos incorporado com carris).

O Cody como jogo exigia muita dinâmica do lado do browser, bem como a modificação da árvore DOM. Utilizar o TypeScript em vez do javascript normal foi um grande salto na qualidade do código, a própria presença de classes e encapsulamento foi muito tentadora para nós.

API e SPA

Em 2019, as aplicações SPA são geridas utilizando o magnífico React ou Vue bibliotecas. No entanto, em 2015, fizemo-lo de uma forma diferente. O typescript mencionado anteriormente foi útil na implementação do jogo, enquanto o jQuery revogou todo o trabalho relacionado com o pedido http xml. Agora podemos usar o fetch, enquanto naquela época o `$ .ajax` era tudo o que era necessário para o trabalho. Dê uma olhada na nossa api cliente!

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

Se era uma API, então tinha de resolver o problema da autenticação de alguma forma, não era? Bem, é verdade. Mas nesse caso, fomos atrás (é possível escrever aqui - usámos a banda?!) da banda e na sessão rails criámos cookie_key e depois guardámo-la na base de dados. Portanto, sabíamos que estava tudo bem.

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

O estado do jogo estava armazenado na base de dados e a informação sobre quantos utilizadores tinham pontos vinha da base de dados (é a mesma base de dados? Podemos trocá-la por um pronome?). O ACID dá sempre jeito quando não há cache do lado do sistema;)

No caso do spa, é a melhor solução sem recarregar a página. Resolvemo-lo de forma clássica e a âncora html foi a melhor solução sem expandir dependências desnecessárias. Porque quem é que usaria turbolinks?

SnapSVG

Se concebermos um jogo, este só pode ser lançado com excelentes gráficos e animações. Na altura, passámos muitas horas a pensar como satisfazer essas exigências na nossa aplicação. Por um lado, o canvas pode fazer milagres, por outro, num html limpo é muito mais fácil de apanhar e toda a gente sabe isso. Depois de uma busca minuciosa pela melhor solução, descobrimos que a combinação destas duas soluções é o svg. Permite-lhe apresentar facilmente gráficos num vetor, está escrito na linguagem de marcação e, o que é mais importante, pode ser modificado em tempo real. É importante notar que existe uma biblioteca para ficheiros svg que funciona de forma semelhante ao jQuery e permite operações na imagem de uma forma unificada. Isto é: http://snapsvg.io, temos boas recordações dessa utilização específica da solução.

Um exemplo de como utilizámos o snap.svg pode ser encontrado abaixo:

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

O próprio ficheiro haml com o esqueleto gráfico:

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

Como pode ver, é quase como uma árvore DOM normal e uma aplicação rails normal!

TrustedSandbox

Bem, finalmente tínhamos API, Gráficos, SPA. Mas e a implementação das soluções enviadas pelos utilizadores?

A primeira coisa que nos vem à cabeça é o método eval, mas nós não somos loucos;) Em 2016, o método doca estava a aumentar, pelo que pareceu uma escolha natural. Os próprios contentores não garantiam um isolamento e uma proteção completos, pelo que utilizámos uma solução pronta no Rubi chamado https://github.com/vaharoni/trusted-sandbox. Permitiu proteger melhor o código antes de sair da sandbox e configurar de forma padronizada os requisitos do sistema operativo. Era muito importante limitar adequadamente o tempo de execução do código, a memória necessária para operar e os ciclos da CPU. A nossa configuração está disponível abaixo

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

É claro que a mesma caixa de areia de confiança não garantia nada, e foi por isso que criámos um sítio Web especial para executar o código.

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

Cada uma das tarefas tinha o seu próprio caso de teste, o que nos permitiu verificar a correção da solução implementada. Isto foi feito injectando o código do utilizador no caso de teste, de modo a que tudo fosse executado isoladamente.

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

Naturalmente, esta ação custou bastante tempo e, enquanto recolhíamos as respostas, não nos podíamos dar ao luxo de executar a caixa de areia, pelo que apenas guardámos o código na base de dados, criando uma submissão e, em seguida, utilizando o long pooling, pedimos ao endpoint para obter o estado do código. Isto permitiu-nos aliviar o servidor de aplicações e verificar os dados de forma adequada. É claro que também tínhamos de nos proteger contra o "bloqueio do script" e, por isso, limitámos o número de consultas ao servidor utilizando a variável ttl, que pode ser vista abaixo.

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

Resumo do concurso

Até setembro de 2011, as estatísticas do jogo eram as seguintes:

- número de sessões: 1945 - tarefas enviadas: 4476 - enviou respostas corretas: 1624 - terminou o jogo: 31

Como se pode ver, a maior escada começou na tarefa # 2, porque já não era um exemplo vulgar de hello world.

Leia também:

Um mergulho rápido no Ruby 2.6. O que há de novo?

Escrever documentação tornou-se fácil graças ao VuePress

 Tutorial básico do Vue.js. Como começar com esta estrutura?

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

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