По моему мнению язык Ruby перестал быть популярным как в 2012 — 2014 году и поэтому у меня возникло желание пока про язык совсем не забыли, попробовать его снова донести в массы, ведь Ruby по моему мнению самый удобный и практичный язык для веб разработки.
Я с неделю назад загорелся желанием сделать свое сообщество в телеграм, найти начинающих программистов и привлечь на светлую сторону Ruby разработки.
В планах было создать сообщество, но не в котором все будут писать о своих проблемах и багах на проектах (таких сообществ хватает), а сообщество в котором будет поститься полезная информация из мира Ruby.
В первую очередь я захотел сделать посты в виде мемов, но с учебным контентом.
Когда сделал через сайт генераторов мемов штук 10 картинок — я понял, что очень все медленно и проблемно, плюс ко всему я сделал только 10 методов ruby, а их еще около 1 000 может наберется. Было принято решение создать свой генератор мемов да и еще интерфейс к этому всему прикрутить и все это сделать с использованием языка Ruby.
Генерация картинок с RMagic
Чтобы сильно не заморачиваться с отрисовкой был взят за основу уже существующий гем
`rmagick`
. Благодаря этому гему мы можем с легкостью видоизменять картинки.В коде ниже я создал новые объекты(тексты) в виде картинки и поместил их на картинку взятую за основу.
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")
После заполнения базовых атрибутов, таких как размер шрифта, жирность, цвет и гравитацию текста. Далее сохраняю картинку в папку actual_mem. Зачем нужна эта папка вернусь попозже.
Веб-интерфейс в Sinatra
Теперь нужно было реализовать интерфейс. Чтобы не разворачивать ради маленького приложения большой Rails проект я решил воспользоваться другим Ruby фреймворком под названием 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
Документацию по sinatra можете найти на официальном сайте, не буду сильно тут объяснять.
Немного прикрутил CSS Grid и с помощью 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"}
form {
display: grid;
grid-template-columns: 200px 1fr;
grid-gap: 16px;
}
label {
grid-column: 1 / 2;
}
input,
button {
grid-column: 2 / 3;
}
Никакой красоты на первом этапе добавлять не стал, мне нужно было только четкое выполнение функционала. Поэтому на странице только заголовок, два тега label, input для верхнего текста и textarea для нижнего. А так же input для отправки формы на сервер.
Планы на будущее
В будущем думаю доделать форму — добавлю бегунок для установления размера шрифта верхнего и нижнего текста, бегунки для позиционирования текста, а так же можно будет сделать блок предпросмотра.
Помимо генератора мема у меня так же реализован бот для группы, который по команде отправляет картинку в сообщество и перемещает картинку из папки actual_mem в папку sended_mem. Бот тоже сделан на руби, но если будет интересно, сделаю про него статью в другой раз.
Статья была написана для того, чтобы начинающие программисты поняли, что язык не сложный и можно реализовать свои идеи и проекты максимально быстро и без каких-либо напряженных ситуаций всего за пару часов.
Исходный код
ссылка на github
Выбирайте Ruby
Комментарии (18)
QtRoS
22.09.2019 17:11Как мне кажется камбэк Руби на пьедестал почета уже просто невозможен. Он так и остался языком под нужны одного фреймворка, Rails. И трудно себе представить, что могло бы появиться в языке, чтобы он вновь начал набирать популярность.
Envek
23.09.2019 10:23-1Это он только в западном мире остался «языком одного фреймворка» (а как же Chef, а как же Homebrew?), а вот на родине, в Японии, он живее всех живых и вместе с младшим братишкой mRuby используется для всего подряд, включая скриптинг для мини-спутников, например.
QtRoS
23.09.2019 11:13В свое время в организации выбирали между Chef и Ansible. Оказалось, что Ruby на тот момент знал только я (а в Chef, если я не ошибаюсь, даже конфиги это валидный руби-код), а yaml с примесью питона знали все. Поэтому опять же по моему мнению для рубистов Chef приятнее, но для большинства Ansible более прост в освоении и эксплуатации.
mammoth
23.09.2019 13:25В общем-то на Ruby можно писать даже мобильные приложения. И, что характерно, пишут.
Santana
22.09.2019 18:36+1Ruby, конечно, крут и не перестал быть популярным (куча народу пишет, огромные конференции), просто прошла волна хайпа.
Есть Julia Evans, которая выпускает «zines», как она их называет, — лучше один раз увидеть, т. к. описать это сложно. Вот у неё получилось на просторах Twitter неплохо раскрутиться, и теперь она аж их печатает на бумаге, а люди покупают. Так что формат имеет потенциал. Хотя по мне ничто не сравнится с видосами RailsCasts.
Но искусственно что-то популяризовать невозможно, если ты не Google / Facebook.
UksusoFF
22.09.2019 20:32+2посты в виде мемов, но с учебным контентом.
Мне всегда казалось что мемы это не просто картинки с текстом. Несколько обманчивый заголовок получился.
Vladbrain Автор
22.09.2019 21:55Ну никто не мешает подставлять картинки из мемов и смешной текст, да я использую по другому, но все таки это генератор мемов и обмана в названии нет)
DarkHost
23.09.2019 14:02-1До тех пор пока в книгах по Ruby/ROR будет «вам пока рано это понимать, просто примите», у языка нет будущего.
rssdev10
23.09.2019 14:39Это проблема качества учебных материалов. Впрочем, идти в ROR не зная Ruby — это сложно… Ruby довольно простой язык, но его модель отличается от других императивных языков. И, как раз, попытки тащить предыдущий опыт на Ruby-программирование и вызывают ту самую проблему вхождения и полного непонимания что происходит. Это касается и функционального стиля Ruby, и принципа умолчания в Rails, где просто надо знать, что происходит внутри. Иначе, сплошная непредсказуемая (для новичка) магия.
FForth
Какими технологиями, платформами разработки, языками… кроме Руби Вы увлечены, чтобы пытаться реанимировать «мёртворождённое» решение?
P.S. Мало ли языков появляются, не набирают популярность в силу разных причин и «вымирают» в историческом контексте.
Vladbrain Автор
Профессионально занимаюсь пока что только Ruby разработкой, но не понял по поводу «мертворожденного» решения — это вы про сам язык Ruby или про мой код? Если речь про код, то я эту статью год назад писал, в актуальном состоянии программу не держу. Если речь про язык, то у меня пока не много скилла, что бы реанимировать Ruby, да и последние релизы очень даже нормально покрывают мои потребности в рабочих процессах.
k_topolyan
> Руби
> пытаться реанимировать «мёртворождённое» решение
Очень спорное утверждение. Я как раз сделал небольшое исследование по этому поводу, работы на Ruby/RoR более чем хватает.
Кстати, почему-то чаще всего я встречаю реплики типа «Ruby мёртв» на русском языке, англоязычные же коллеги имеют другое мнение.
VlK
Нет, все англоязычные коллеги понимали, и уже давно, еще со времен статьи "Rails is Ghetto" (2007).
Многие разработчики (вне зависимости от географического положения) понимали, что у Руби есть проблемы с выходом из ниши, куда его привел главный фреймворк. Главный конкурент, Python, например, хотя и не блистал со своим титульным Джанго, но изначально делал ставку на околонаучное сообщество — и выиграл в перспективе, даже не смотря на то, что веб-разработка сместилась в сторону Javascript.
rssdev10
Из этой ниши его сейчас активно выбивает Julia. И, откровенно говоря, надо быть сильно упёртым питонистом, чтобы не мигрировать на Julia. По крайней мере в том, что касается научных вычислений.
VlK
очень может быть, Julia очень даже набирает.
Но будущее — штука туманная. :-)