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.
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; }
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 githubEscolha Ruby