TGViewer
Channel Public Channel
DEV: Рубиновые тона

DEV: Рубиновые тона

@dev_in_ruby_colors

Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Subscribers
3.28K
Photos
156
Videos
2
Links
1.1K

Showing posts older than #86 · Back to latest

Older Posts 20 shown
Post #85 238
Что такое "exponential backoff mechanism" и зачем это надо? Предположим, что мы пишем скрипт для обращения к стороннему API. Естественно, этот API может иногда возвращать ошибку - например, вида "слишком много запросов". Естественно, подобную ошибку надо обрабатывать и пытаться отправить запрос повторно спустя некоторое время. Однако спамить сервер запросами каждую секунду всё-таки не стоит. Более того, имеет смысл ограничить максимальное количество попыток, после чего сдаться и сообщить пользователю, что до сервера достучаться не удалось. В этом-то случае и подойдёт данный механизм:

          retries = 0
begin
upload_file some_arguments
rescue TooManyRequests => e
raise(e.class, "Gave up after #{retries} retries") if retries >= max_retries

sleep 2**retries
retries += 1
retry
end


Формула тут очень простая: 2**retries (ну, это не совсем экспонента, но это не столь важно). Теперь выходит, что если max_retries=5, то будет сделано не больше пяти попыток обратиться к серверу, причём попытки будут сделаны не одна за другой через секунду, а с разными промежутками времени. Можно даже ввести элемент случайности и генерировать случайное количество секунд в некоем диапазоне
Post #84 211
Небольшая подсказка: если вы используете begin-rescue в Ruby, то можно задействовать такую штуку, как retry. При вызове этой инструкции код в блоке begin будет выполнен ещё раз:

begin
retries ||= 0
puts "try ##{ retries }"
raise "some error"
rescue
retry if (retries += 1) < 3
end
Post #83 221
Итак, в этом видео мы закончим первую версию нашего квиза в стиле "Кто хочет стать миллионером?". Создадим ещё несколько классов, сделаем хранилище заданий, реализуем логику игры. По ходу ещё немного поработаем с ООП, посмотрим использование метод inject (reduce) и ряд других моментов. https://www.youtube.com/watch?v=IgrVRs1NBP4
YouTube Пишем квиз на Ruby, часть #2 | Логика игры, ООП, YAML, inject Итак, в этом видео мы закончим первую версию нашего квиза в стиле "Кто хочет стать миллионером?". Создадим ещё несколько классов, сделаем хранилище заданий, реализуем логику игры. По ходу ещё немного поработаем с ООП, посмотрим использование метод inject…
Post #82 246
Друзья, на pragprog вышла, судя по всему, весьма актуальная книга по фронт-энду для Rails в современном мире. Я пока не читал, но выглядит очень круто (да и автор человек довольно известный). https://pragprog.com/titles/nrclient/modern-front-end-development-for-rails/
Pragprog Modern Front-End Development for Rails With Rails 6, Webpacker, Stimulus, and React you can efficiently build rich user interaction into your websites using the best of both server and client-side tools.
  • 👍 1
Post #81 219
Любопытное решение для "аннотации" своих моделей - в частности, добавления информации о том, что за поля есть в соответствующей таблице, какого типа и так далее. Скажу честно, мне оно показалось несколько избыточным, но вам, вполне возможно, понравится. Да и использовать его очень просто https://github.com/ctran/annotate_models
GitHub GitHub - ctran/annotate_models: Annotate Rails classes with schema and routes info Annotate Rails classes with schema and routes info - ctran/annotate_models
Post #80 231
Интернет вещей-вымогателей
Post #79 230
И ещё немного материала в ленту. Мы недавно с нашим фрилансером подготовили список из хороших блогов и агрегаторов новостей, которые могут показаться интересными разработчикам 🤓 https://lokalise.com/blog/top-dev-blogs-to-read-in-2021/
Lokalise Blog Top dev blogs to read in 2021 - Lokalise Blog This is your ultimate guide for the top dev blogs to read in 2021! Find out if you're already checking out at least half of them!
Post #78 206
Сегодня поговорим о том, как добавить на страницу входа в систему галочку "запомнить меня" и правильным образом реализовать данный функционал. Кроме того, добавим в наше приложение Rubocop - статический анализатор кода, который проверяет, следуете ли вы рекомендованным практикам по стилю и даже исправляет некоторые недочёты автоматически. Закончим же мы рефакторингом некоторых частей нашего приложения. https://www.youtube.com/watch?v=gXl82AdMK9w
YouTube Ruby on Rails 6/7, урок #10 | Запоминание пользователя и Rubocop Новый урок по Ruby on Rails 6/7! Сегодня поговорим о том, как добавить на страницу входа в систему галочку "запомнить меня" и правильным образом реализовать данный функционал. Кроме того, добавим в наше приложение Rubocop - статический анализатор кода, который…
Post #77 230
Closure Tree - классное решение для создания иерархий в ActiveRecord. Например, с помощью данного решения можно легко создавать "вложенные" комментарии https://github.com/ClosureTree/closure_tree
GitHub GitHub - ClosureTree/closure_tree: Easily and efficiently make your ActiveRecord models support hierarchies Easily and efficiently make your ActiveRecord models support hierarchies - ClosureTree/closure_tree
Post #75 213
А вы знаете, что исключения в Ruby можно повторно вызывать? А зачем? Ну, например, для того, чтобы изменить само сообщение об ошибке или сделать его более подробным. Или при появлении исключения сделать какое-то особое действие, после чего оставить остальную обработку на откуп самого программиста. Вот небольшой пример из одного проекта, который мне сегодня как раз и потребовалось модифицировать таким образом:

def open_and_process_zip(path)
Zip::File.open_buffer(open_file_or_remote(path)) do |zip|
fetch_zip_entries(zip) { |entry| process!(entry) }
end
rescue StandardError => e
raise e.class, "There was an error when trying to process the downloaded files: #{e.message}"
end


Получается, что тут мы добавляем более подробную информацию о том, на каком именно моменте произошла ошибка, а потом повторно её вызываем. Кстати, если написать просто raise в rescue, то будет повторно вызвано то же самое исключение с тем же сообщением.
Post #74 208
Goldiloader позволяет автоматически выполнять eager loading в приложении Rails. Сказать честно, сам я это решение ещё не пробовал, но выглядит любопытно https://github.com/salsify/goldiloader
GitHub GitHub - salsify/goldiloader: Just the right amount of Rails eager loading Just the right amount of Rails eager loading. Contribute to salsify/goldiloader development by creating an account on GitHub.
Post #73 190
Интересное решение, которое позволяет выводить объекты Ruby в более удобоваримом виде: с правильными отступами и даже в цвете https://github.com/amazing-print/amazing_print 🧙‍♂️
GitHub GitHub - amazing-print/amazing_print: Pretty print your Ruby objects with style -- in full color and with proper indentation Pretty print your Ruby objects with style -- in full color and with proper indentation - amazing-print/amazing_print
Post #72 214
Сегодня будет большой и важный урок, в котором мы обсудим, что такое декораторы, как выполнять аутентификацию пользователя, как выходить из системы, как измерять сложность пароля и проверять корректность введённых электронных адресов, а также как требовать от пользователя вводить старый пароль при задании нового и как создавать собственные валидации. https://www.youtube.com/watch?v=4C8dEznmkI8
YouTube Ruby on Rails 6/7, урок #9 | Декораторы, аутентификация, редактирование пользователей, валидации Продолжаем уроки по Ruby on Rails 6/7! Сегодня будет большой и важный урок, в котором мы обсудим, что такое декораторы, как выполнять аутентификацию пользователя, как выходить из системы, как измерять сложность пароля и проверять корректность введённых электронных…
Post #71 201
Если вы пишете сайт на Rails и хотите сгенерировать карту сайта, то лучшее решение - это, на мой взгляд, https://github.com/kjvarga/sitemap_generator. Его уже можно назвать проверенным временем (я его использую в своём блоге уже долгие годы), оно поддерживает разные хранилища для карт, позволяет "пинговать" поисковики и предлагает множество других фич. Очень советую!
GitHub GitHub - kjvarga/sitemap_generator: SitemapGenerator is a framework-agnostic XML Sitemap generator written in Ruby with automatic… SitemapGenerator is a framework-agnostic XML Sitemap generator written in Ruby with automatic Rails integration. It supports Video, News, Image, Mobile, PageMap and Alternate Links sitemap extensio...
Post #70 191
Первое видео экспериментальной серии "Создаём игру-квиз на Ruby с помощью Gosu и MiniGL". Конечно, писать очень сложные трёхмерные игры на Ruby никто не будет, но вот сделать двухмерную бродилку или квиз вполне реально - для этого мы используем движок MiniGL, который, в свою очередь, основывается на Gosu. В первом видео мы обсудим этот движок, создадим конфигурацию, посмотрим, как отрисовывать объекты на игровом окне, проигрывать звуки, и работать с событиями. https://www.youtube.com/watch?v=fy1qwUeNSEo
Post #68 189
Post #67 185
Очередной урок по Ruby on Rails 6! Сегодня будет очень важное видео, в котором мы создадим систему регистрации пользователей с нуля, поговорим о решении bcrypt и о том, как работать с сессией. Кроме того, обсудим хелпер dom_id и узнаем, как использовать решение pagy для разбиения записей по страницам (это альтернатива kaminari). https://youtu.be/7bn0M4Br4hc
YouTube Ruby on Rails 6/7, урок #8 | Регистрация пользователей с нуля, bcrypt, pagy Очередной урок по Ruby on Rails 6/7! Сегодня будет очень важное видео, в котором мы создадим систему регистрации пользователей с нуля, поговорим о решении bcrypt и о том, как работать с сессией. Кроме того, обсудим хелпер dom_id и узнаем, как использовать…
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →