Друзья, на 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 - в крутой проект разыскивается бодрый дизайнер, причём довольно срочно🕵️♂️
А вы знаете, откуда взялось название "Ruby on Rails"? 💎🚊
Оказывается, название это основано, как говорится, на реальных событиях, которые произошли много лет назад, когда Дэвид Хэнссон впервые посетил Нью-Йорк и спустился в местное метро. Подошёл поезд, началась обычная толкучка (народ входит-выходит), и вдруг Дэвид услышал женский крик с другой стороны платформы: "У меня пропало кольцо!". Как истинный джентльмен, наш герой поспешил к даме, которая объяснила, что кольцо упало на рельсы. Недолго думая, он спрыгнул вниз и действительно увидел на рельсах роскошное кольцо с рубином, которое, видимо, стоило целое состояние.
Вообще-то, это был довольно глупый поступок, так как прыгать на рельсы категорически запрещено. Собственно, когда Дэвид поднял кольцо, то услышал какой-то подозрительный шум. Он едва успел забраться обратно на перрон, как из тоннеля вылетел поезд. Если бы Дэвид промедлил, то, возможно, сейчас мы бы пользовались совершенно иным фреймворком...
В любом случае, всё закончилось благополучно. Растроганная женщина залилась слезами, объяснив, что кольцо принадлежало её матери, умершей буквально накануне. Она долго благодарила Дэвида, а он впоследствии вспомнил этот инцидент и подобрал запоминающееся имя для своего нового фреймворка. 💍
Хотя, возможно, это просто красивая история, которую придумали уже впоследствии - кто его знает, как оно там было на самом деле...
Оказывается, название это основано, как говорится, на реальных событиях, которые произошли много лет назад, когда Дэвид Хэнссон впервые посетил Нью-Йорк и спустился в местное метро. Подошёл поезд, началась обычная толкучка (народ входит-выходит), и вдруг Дэвид услышал женский крик с другой стороны платформы: "У меня пропало кольцо!". Как истинный джентльмен, наш герой поспешил к даме, которая объяснила, что кольцо упало на рельсы. Недолго думая, он спрыгнул вниз и действительно увидел на рельсах роскошное кольцо с рубином, которое, видимо, стоило целое состояние.
Вообще-то, это был довольно глупый поступок, так как прыгать на рельсы категорически запрещено. Собственно, когда Дэвид поднял кольцо, то услышал какой-то подозрительный шум. Он едва успел забраться обратно на перрон, как из тоннеля вылетел поезд. Если бы Дэвид промедлил, то, возможно, сейчас мы бы пользовались совершенно иным фреймворком...
В любом случае, всё закончилось благополучно. Растроганная женщина залилась слезами, объяснив, что кольцо принадлежало её матери, умершей буквально накануне. Она долго благодарила Дэвида, а он впоследствии вспомнил этот инцидент и подобрал запоминающееся имя для своего нового фреймворка. 💍
Хотя, возможно, это просто красивая история, которую придумали уже впоследствии - кто его знает, как оно там было на самом деле...
Что ж, пока готовится новое видео (а также один музыкальный сюрприз, о котором чуть позже), я стал перебирать свои старые записи в блоге (который, конечно же, тоже сделан на Ruby on Rails, пусть и с весьма допотопным дизайном на плавающих элементах, который мне лень обновить уже лет пять), я набрёл на отчёт о поездке своим ходом на остров Валаам. Возможно, кому-нибудь покажется полезным. 🚶♀️Скоро увидимся! http://bodrovis.tech/en/categories/puteshestviya/posts/na-valaam-s-palatkami-ch-1
Ilya Krukowski
На Валаам с палатками (ч. 1) - by Ilya Krukowski
Забавная тема для Bootstrap в стиле Web 1.0 (осторожно, глаза!) https://code.divshot.com/geo-bootstrap/ 😂
Divshot
Geo for Bootstrap, a Timeless Theme by Divshot
A timeless theme for Twitter Bootstrap.
В этом уроке по Ruby on Rails 6 мы узнаем, как выполнять перевод приложения на несколько языков, то есть внедрять интернационализацию (i18n) и локализацию (l10n). Поговорим о том, как сохранять язык в маршруте, сохранять его при переходе между страницами, переключать язык и "угадывать" язык на основе предпочтений пользователя. Также узнаем, что такое TMS и рассмотрим в качестве примере сервис Lokalise. https://www.youtube.com/watch?v=mwEHVNZ1VLM
YouTube
Ruby on Rails 6/7, урок #13 | Перевод, интернационализация, локализация (i18n, l10n)
В этом уроке по Ruby on Rails 6/7 мы узнаем, как выполнять перевод приложения на несколько языков, то есть внедрять интернационализацию (i18n) и локализацию (l10n). Поговорим о том, как сохранять язык в маршруте, сохранять его при переходе между страницами…
Я сначала не очень понял, в чём прикол данного изображения https://i.imgur.com/JJL9U1j.png 😂
В этом видео мы поговорим о пяти принципах SOLID, которые частенько спрашивают на собеседовании. Принципы эти придумал известный разработчик Роберт Мартин ещё в 1995 году, и они актуальны до сих пор. Во-первых, мы обсудим их сущность, а, во-вторых, рассмотрим нарушение этих принципов на примерах и то, как ситуацию можно исправить. https://www.youtube.com/watch?v=SGS8i09mn7c
YouTube
Принципы SOLID | На примере Ruby
В этом видео мы поговорим о пяти принципах SOLID, которые частенько спрашивают на собеседовании. Принципы эти придумал известный разработчик Роберт Мартин ещё в 1995 году, и они актуальны до сих пор. Во-первых, мы обсудим их сущность, а, во-вторых, рассмотрим…
Полезный сайт, где рассказывается, как сделать некоторый типичный функционал типа слайдера без использования JS (только на CSS). http://youmightnotneedjs.com/
Youmightnotneedjs
You Might Not Need JavaScript
Examples of common UI elements and interactions with HTML and CSS alone.
А вы знаете, что не devise-ом единым богата область аутентификации в Rails? Существует ещё решение Сlearance - несколько более лёгкое и простое. Я как-то использовал его в паре проектов, в принципе, вполне прилично работает. Если не требуется чего-то сверх-навороченного, то как альтернатива devise сойдёт https://github.com/thoughtbot/clearance Да, между прочим аутентификация и авторизация - это разные вещи 🤓 Первое - это проверка учётных данных и идентификация с их помощью юзера, а второе - проверка, может ли юзер выполнять запрошенное действие
GitHub
GitHub - thoughtbot/clearance: Rails authentication with email & password.
Rails authentication with email & password. Contribute to thoughtbot/clearance development by creating an account on GitHub.
Всем отличной пятницы! 🤪 А какие "типичные" реплики в отношении вас как айтишника (неважно, сисадмина, программиста etc) вас раздражают больше всего? Ну, или не раздражают, а веселят, но всё же звучат при этом очень глупо.
Я начну: "Ты же программист, там принтеры привезли, помоги-ка разгрузить". И ещё: "Ну, раз ты программист, то можешь же мне ноутбук починить?" (хотя именно со сборкой стационарных компьютеров у меня как-то проблем никогда было).
Но это, скорее, шутки, но однажды была вполне реальная история. Прослышав, что я приехал помочь другу со сломавшимся компьютером, его бабушка попросила заодно перепаять радио - а чего там, это ведь то же самое. 😝
Я начну: "Ты же программист, там принтеры привезли, помоги-ка разгрузить". И ещё: "Ну, раз ты программист, то можешь же мне ноутбук починить?" (хотя именно со сборкой стационарных компьютеров у меня как-то проблем никогда было).
Но это, скорее, шутки, но однажды была вполне реальная история. Прослышав, что я приехал помочь другу со сломавшимся компьютером, его бабушка попросила заодно перепаять радио - а чего там, это ведь то же самое. 😝