Сегодня будет большой и важный урок, в котором мы обсудим, что такое декораторы, как выполнять аутентификацию пользователя, как выходить из системы, как измерять сложность пароля и проверять корректность введённых электронных адресов, а также как требовать от пользователя вводить старый пароль при задании нового и как создавать собственные валидации. https://www.youtube.com/watch?v=4C8dEznmkI8
YouTube
Ruby on Rails 6/7, урок #9 | Декораторы, аутентификация, редактирование пользователей, валидации
Продолжаем уроки по Ruby on Rails 6/7! Сегодня будет большой и важный урок, в котором мы обсудим, что такое декораторы, как выполнять аутентификацию пользователя, как выходить из системы, как измерять сложность пароля и проверять корректность введённых электронных…
Интересное решение, которое позволяет выводить объекты 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
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.
А вы знаете, что исключения в 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, то будет повторно вызвано то же самое исключение с тем же сообщением.Подготовил для вас небольшую напоминалку по популярным командам Git (а также кое-какую терминологию) https://lokalise.com/blog/10-git-commands-for-day-to-day-work/
Lokalise Blog
10 Git commands for your day-to-day work - Lokalise Blog
Learn about top 10 useful Git commands that you will use in your day-to-day work: make commits, manage branches, view logs, and more.
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
Сегодня поговорим о том, как добавить на страницу входа в систему галочку "запомнить меня" и правильным образом реализовать данный функционал. Кроме того, добавим в наше приложение Rubocop - статический анализатор кода, который проверяет, следуете ли вы рекомендованным практикам по стилю и даже исправляет некоторые недочёты автоматически. Закончим же мы рефакторингом некоторых частей нашего приложения. https://www.youtube.com/watch?v=gXl82AdMK9w
YouTube
Ruby on Rails 6/7, урок #10 | Запоминание пользователя и Rubocop
Новый урок по Ruby on Rails 6/7! Сегодня поговорим о том, как добавить на страницу входа в систему галочку "запомнить меня" и правильным образом реализовать данный функционал. Кроме того, добавим в наше приложение Rubocop - статический анализатор кода, который…
И ещё немного материала в ленту. Мы недавно с нашим фрилансером подготовили список из хороших блогов и агрегаторов новостей, которые могут показаться интересными разработчикам 🤓 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!
Любопытное решение для "аннотации" своих моделей - в частности, добавления информации о том, что за поля есть в соответствующей таблице, какого типа и так далее. Скажу честно, мне оно показалось несколько избыточным, но вам, вполне возможно, понравится. Да и использовать его очень просто 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
Друзья, на pragprog вышла, судя по всему, весьма актуальная книга по фронт-энду для Rails в современном мире. Я пока не читал, но выглядит очень круто (да и автор человек довольно известный). https://pragprog.com/noscripts/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
Итак, в этом видео мы закончим первую версию нашего квиза в стиле "Кто хочет стать миллионером?". Создадим ещё несколько классов, сделаем хранилище заданий, реализуем логику игры. По ходу ещё немного поработаем с ООП, посмотрим использование метод inject (reduce) и ряд других моментов. https://www.youtube.com/watch?v=IgrVRs1NBP4
YouTube
Пишем квиз на Ruby, часть #2 | Логика игры, ООП, YAML, inject
Итак, в этом видео мы закончим первую версию нашего квиза в стиле "Кто хочет стать миллионером?". Создадим ещё несколько классов, сделаем хранилище заданий, реализуем логику игры. По ходу ещё немного поработаем с ООП, посмотрим использование метод inject…
Небольшая подсказка: если вы используете
begin-rescue в Ruby, то можно задействовать такую штуку, как retry. При вызове этой инструкции код в блоке begin будет выполнен ещё раз:begin
retries ||= 0
puts "try ##{ retries }"
raise "some error"
rescue
retry if (retries += 1) < 3
end
Что такое "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, то будет сделано не больше пяти попыток обратиться к серверу, причём попытки будут сделаны не одна за другой через секунду, а с разными промежутками времени. Можно даже ввести элемент случайности и генерировать случайное количество секунд в некоем диапазонеНекоторое время думал, делиться ли этим видео или нет, но всё-таки поделюсь. Во всяком случае мне, как преподавателю, было любопытно послушать необычную точку зрения на то, как выстраивать процесс обучения. Пусть к Пивоварову у меня отношение сложное, но гость действительно интересный. p.s. "Любопытная точка зрения" - не значит "безусловно правильная" 🤓 p.p.s. Кроме того, я знаю, что многие подписчики - люди 25+, поэтому, вероятно, семейные https://www.youtube.com/watch?v=eUbdyWVpHJc
YouTube
Ребёнок сидит в телефоне и не хочет больше ничего — что делать? / Редакция / Интервью
Whoosh Pass позволяет экономить: https://whoosh.app.link/redakciya. Используй промокод WHSH_PASS21 и получай скидку 100 рублей на поездку во всех 18 городах присутствия Whoosh.
Подписывайтесь на YouTube-канал «Редакция. Наука»! Все выпуски смотрите вот тут:…
Подписывайтесь на YouTube-канал «Редакция. Наука»! Все выпуски смотрите вот тут:…
🧙♂️ Итак, по многочисленным просьбам трудящихся новое видео о Rails и не только 🚊 Сегодня будет очень интересный урок по Ruby on Rails, в рамках которого мы узнаем, как выгружать данные в формате Excel (.xlsx), при этом помещая их в архивы ZIP. Также поговорим о массовом создании объектов в БД на основе загруженных файлов Excel (опять же заархивированных). Помимо этого, узнаем о том, как делать массовый импорт за один запрос и как работать с сервисными объектами (классами). Затронем такие решения, как caxlsx, rubyXL, rubyzip, activerecord-import. https://youtu.be/sP67KqMWf4E
YouTube
Ruby on Rails 6/7, урок #11 | Импорт/экспорт Excel, архивы ZIP, сервисные объекты
Сегодня будет очень интересный урок по Ruby on Rails, в рамках которого мы узнаем, как выгружать данные в формате Excel (.xlsx), при этом помещая их в архивы ZIP. Также поговорим о массовом создании объектов в БД на основе загруженных файлов Excel (опять…
Что ж, друзья, сегодня я сделал большую глупость и попробовал мигрировать на webpacker 6 скрипты и SCSS. В общем, если говорить кратко, то это тихий ужас. Так как 6-я версия ещё в бете, нормальной документации нет, всё постоянно ломается, вылезают какие-то странные косяки, однако через несколько часов всё (кажется) заработало - даже на production. Во всяком случае, в нашем тестовом приложении AskIt работает и bootstrap, и свои стили. Возможно, расскажу в ближайшее время более подробно об этом процессе. Но в общем и целом, я бы подождал выхода стабильной версии 😄
Мнение довольно типичное https://twitter.com/sgremyachikh/status/1410308910397935616 - интересно, что вы думаете. Спойлер: я совершенно не согласен, но у меня подход с точки зрения свободного художника
Twitter
𝚂𝚟𝚎𝚝𝚘𝚣𝚊𝚛
Каждый раз себе повторяю, но бесполезно: Твой овертайм никто не оценит, всем похер на тебя и что ты там превозмог. Вероятнее всего (почти всегда) тебе овертайм не оплатят - не согласовывал же. Твое чувство долга и синдром отличника только на руку бизнесу)…
В этом видео мы поговорим о том, как добавить в приложение Ruby on Rails 6 такое решение, как Webpacker 6 и мигрировать свои скрипты и стили (включая SCSS и Bootstrap) с Sprockets на Webpacker. Хотя шестая версия пока ещё в бете, очень скоро она будет выпущена как стабильная, поэтому рассматривать Webpacker 5 уже нет особенного смысла. В этом видео будет объяснено, как выполнить миграцию по шагам, а затем полностью отказаться от Sprockets и отключить данный функционал в приложении Rails. https://www.youtube.com/watch?v=Vqh4wHdNXg8
YouTube
Ruby on Rails 6/7, урок #12 | Webpacker 6 - миграция JS и CSS с Sprockets
В этом видео мы поговорим о том, как добавить в приложение Ruby on Rails 6/7 такое решение, как Webpacker 6 и мигрировать свои скрипты и стили (включая SCSS и Bootstrap) с Sprockets на Webpacker. Хотя шестая версия пока ещё в бете, очень скоро она будет выпущена…
1.png
51.6 KB
Типичный чат (обсуждение разработчиков из компании Адидас). Всем хорошего дня 😄
Друзья, если кто-то в прошлой жизни занимался UX/UI - в крутой проект разыскивается бодрый дизайнер, причём довольно срочно🕵️♂️