Ruby meme generator para atrair interesse no idioma

imagem

Na minha opinião, a linguagem Ruby deixou de ser tão popular quanto em 2012 - 2014, e, por isso, tive um desejo, até que a linguagem fosse completamente esquecida, de tentar trazê-la para as massas novamente, porque Ruby, na minha opinião, é a linguagem mais conveniente e prática para o desenvolvimento da web.
Há uma semana, fiquei tentado a fazer minha comunidade em telegramas, encontrar programadores iniciantes e trazer o desenvolvimento do Ruby para o lado positivo.

Os planos eram criar uma comunidade, mas não na qual todos escrevessem sobre seus problemas e bugs em projetos (existem comunidades suficientes), mas uma comunidade na qual informações úteis do mundo Ruby serão publicadas.

Antes de tudo, eu queria fazer postagens na forma de memes, mas com conteúdo educacional.

Assim
imagem

Quando fiz 10 fotos no site dos geradores de memes, percebi que tudo é muito lento e problemático, além de tudo, fiz apenas 10 métodos ruby, e cerca de 1.000 outras podem ser digitadas. Foi decidido criar seu próprio gerador de meme e até vincular a interface a tudo isso e fazer tudo isso usando a linguagem Ruby.

Geração de imagens com RMagic


Para não se preocupar muito com a renderização, a gema `rmagick` já existente foi tomada como base. Graças a esta jóia, podemos modificar facilmente as imagens.

No código abaixo, criei novos objetos (textos) na forma de uma foto e os coloquei na foto tirada como base.

Código lógico principal
 img = Magick::ImageList.new("1.jpg") title = Magick::Draw.new title.pointsize = 126 title.font_weight = Magick::BoldWeight title.fill = 'white' title.gravity = Magick::CenterGravity title.annotate(img, 0, 0, 0, -400, first_text) descritpion = Magick::Draw.new descritpion.pointsize = 72 descritpion.font_weight = Magick::BoldWeight descritpion.fill = 'white' descritpion.gravity = Magick::CenterGravity descritpion.annotate(img, 0, 0, 0, 300, second_text) img.write("actual_mem/#{first_text}.jpg") 


Depois de preencher os atributos básicos, como tamanho da fonte, ousadia, cor e gravidade do texto. Em seguida, salve a imagem na pasta actual_mem. Por que preciso desta pasta retornará mais tarde.

Interface Web em Sinatra


Agora era necessário implementar a interface. Para não implantar um grande projeto Rails por causa de um pequeno aplicativo, decidi usar outra estrutura Ruby chamada Sinatra

O resultado é um pequeno arquivo com código para executar o aplicativo

Arquivo de inicialização do aplicativo Sinatra
 require 'sinatra' get('/') do haml :index end post('/') do if params[:title] && params[:description] require 'rmagick' b = params[:description].scan(/[-a-zA-Z-0-9_.,()—-]+/) second_text = "" b.each_with_index do |text, index| if index.modulo(4) == 3 second_text += text + "\n" else second_text += text + " " end end img = Magick::ImageList.new("../1.jpg") title = Magick::Draw.new title.font = '' title.pointsize = 126 title.font_weight = Magick::BoldWeight title.fill = 'white' title.gravity = Magick::CenterGravity title.annotate(img, 0, 0, 0, -400, params[:title]) descritpion = Magick::Draw.new descritpion.font = '' if b.size > 20 descritpion.pointsize = 48 else descritpion.pointsize = 72 end descritpion.font_weight = Magick::BoldWeight descritpion.fill = 'white' descritpion.gravity = Magick::CenterGravity descritpion.annotate(img, 0, 0, 0, 300, second_text) img.write("../actual_mem/#{params[:title]}.jpg") end haml :index end 


Você pode encontrar documentação sobre sinatra no site oficial, não vou explicar muito aqui.
Eu estraguei um pouco a CSS Grid e, usando o haml, criei a página de entrada de dados para criar um meme

Código Haml:
 !!! 5 %html(lang="en") %head %title C  %link{:rel => "stylesheet", :type => "text/css", :href => "/style/main.css"} %body %h1    %form{ :action => "/", method: "post"} %label   %input{ name: "title" } %label   %textarea{ name: "description" } %input{type: "submit"} 


Código CSS:
 form { display: grid; grid-template-columns: 200px 1fr; grid-gap: 16px; } label { grid-column: 1 / 2; } input, button { grid-column: 2 / 3; } 


Exibir no navegador:
imagem

Eu não adicionei nenhuma beleza no primeiro estágio, eu precisava apenas de uma implementação clara do funcional. Portanto, a página possui apenas um título, duas etiquetas, entrada para o texto superior e área de texto para a inferior. E também insira para enviar o formulário ao servidor.

Planos futuros


No futuro, estou pensando em preencher o formulário - adicionarei um controle deslizante para definir o tamanho da fonte do texto superior e inferior, controles deslizantes para posicionar o texto e você também poderá fazer um bloco de visualização.

Além do gerador de memes, também tenho um bot para o grupo que envia uma foto para a comunidade sob comando e move a foto da pasta actual_mem para a pasta sended_mem. O bot também é feito em Ruby, mas se for interessante, farei um artigo sobre ele outra vez.

O artigo foi escrito para que programadores iniciantes entendam que a linguagem não é complicada e você pode realizar suas idéias e projetos o mais rápido possível e sem situações tensas em apenas algumas horas.

Código fonte


link do github

Escolha Ruby


imagem

Source: https://habr.com/ru/post/pt468383/


All Articles