DEV: Рубиновые тона – Telegram
DEV: Рубиновые тона
3.22K subscribers
143 photos
2 videos
8 files
978 links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
Спокойной ночи
👍17
В этом видео по Ruby мы поговорим о таком сравнительно малоизвестном классе, как Enumerator::Lazy, который позволяет создавать "ленивые" перечисления и обходить не всю (потенциально, очень большую) коллекцию, а ровно ту её часть, которая необходима для получения искомого результата. Это может быть очень удобно, если вы работаете с большими объёмами данных и хотите оптимизировать свой код. Конечно, "ленивые" перечисления - это не волшебная таблетка, но всё же весьма полезный функционал, который может выручить в некоторых ситуациях. https://www.youtube.com/watch?v=fJdPOKth9TM
🔥313🏆2👍1
Итак, друзья, в следующий вторник в 19:30 UTC+2 (20:30 UTC+3, соответственно) состоится очередная интеллектуальная заруба между командами школы, телезрителей и вредным ведущим. Как обычно, турнирная дистанция 24 вопроса, будет интересно. Увидимся! https://youtu.be/Rv9vtYpSL5o
🔥7
Что ж, я всё-таки набрался терпения и наконец-то полностью перевёл свой сайт на Rails 7 и Stimulus, отказавшись от старых решений типа sass-rails и sprockets, а также от старья вроде kaminari. Так как сайт написан ещё лет десять назад, пришлось довольно много менять (хотя, к счастью, изменения для rails 6 я внёс ранее), но ушло не так уж много времени.

В принципе, каких-то проблем не возникло, всё шаги, описанные в уроках по esbuild и stimulus, вполне валидны. Единственное, на что действительно нужно обратить внимание - удостоверьтесь, что вы не изъяли полностью из git папку app/assets/builds (проще всего добавить там пустой файл .keep и не добавлять его в .gitignore). В противном случае в production у вас будут проблемы в духе "нет файла application.css".

В общем, если у вас есть старые приложения, то не бойтесь их обновлять - с новыми решениями всё куда проще, тем более, что многие старые гемы уже просто не поддерживаются
👍25
Очень удобный ресурс для оптимизации изображений https://squoosh.app/ P.S. Спасибо всем, кто заметил проблему на моём сайте на мобильных устройствах, уже поправил, там просто нужно было перенос слов добавить 😂
8🔥2👍1🤣1
В этом уроке по Solidity мы узнаем, как реализовать полноценную ролевую систему в своих контрактах. С её помощью вы сможете разграничить права доступа, выбрать, кто может вызывать какие функции, а также указывать, кто может управлять разными ролями. https://www.youtube.com/watch?v=gQtaEtSCpPE
👍22❤‍🔥2🔥2
В этом видео о Ruby мы поговорим о том, как обрабатывать ошибки и исключения (exceptions). Мы узнаем о конструкции begin-rescue-else-ensure, о том, какие вообще ошибки бывают. Также узнаем о методе retry и научимся порождать собственные ошибки с помощью raise. Полученные знания мы применим на практике и продолжим писать нашу собственную библиотеку. https://www.youtube.com/watch?v=r8p1R8gOXSM
👍205
Небольшой лайфхак на сегодня.

Предположим, вы тестируете скрипт Ruby, в котором присутствует метод gets (ввод с клавиатуры) и вы хотите эмулировать ситуацию, когда был введён ответ Y (да). Это довольно просто, если знать, что существует глобальная переменная $stdin - standard input, которая как раз содержит метод gets (хотя, помимо стандартного инпута могут быть другие).

Тогда:

allow($stdin).to receive(:gets).and_return('Y')


Говорим, что если вызван gets, мы отвечаем "Y".

Ну а дальше вызываем нужный метод в тестах. Можно также проверить, что gets действительно был вызван:

expect($stdin).to have_received(:gets)


Тут даже можно дописать, сколько раз он был вызван, к примеру

expect($stdin).to have_received(:gets).at_most(2).times


То есть не более 2 раз был вызван gets.
👍22🔥5
Что ж, решил я тут тряхнуть стариной и спустя пять лет выпустить вторую версию библиотеки messages_dictionary для ruby. 😂 Я про неё немного рассказывал на одном стриме, но в общем там суть в том, что с неё помощью можно легко вытаскивать нужные сообщения из файлов yaml, по аналогии с i18n. https://github.com/bodrovis-learning/messages_dictionary Можно пользоваться, можно почитать вот тут, как она была написана (хотя во второй версии много изменений) https://www.sitepoint.com/learn-ruby-metaprogramming-for-great-good/ Думаю, на одном из стримов мы обсудим, как эта библиотека устроена, тк там есть некоторые интересные моменты
👍19👏7🎉2
В этом очень важном уроке по Ruby 3 мы начнём обсуждать новую тему: это автоматизированные тесты (они же "автотесты"). Мы поговорим о том, зачем тесты нужны, где и как их писать с помощью RSpec, а также поработаем с ними на практике, обсудив много интересных вещей. https://www.youtube.com/watch?v=lfKKEUjtaYs
🔥24
В общем, чтиво может показаться довольно тяжёлым, но, тем не менее, интересным. По опыту могу сказать - это то, что может случиться с каждым довольно внезапно. Берегите себя https://batenka.ru/resource/med/crazy-in-ussr/
5👍1🤯1
В этом уроке по Solidity мы поговорим о Foundry: платформе для разработки и тестирования смарт-контрактов, которая может выступать альтернативой Hardhat. В отличие от HH, тесты в Foundry пишутся прямо на Solidity (таким образом, вам не потребуется Typechain), а сама платформа работает куда шустрее за счёт того, что написана она на Rust. Мы поговорим о том, как настроить Foundry, создать проект и как писать тесты для контрактов. https://www.youtube.com/watch?v=nMZlVNmC5-I
👍265🤔1
😁19👍1🔥1🌚1
Немного Ruby на сегодня.

module MessagesDictionary
def self.included(klass)
klass.include MessagesDictionary::Injector
end
end

Что это значит? Это значит, что когда текущий модуль был добавлен (include) куда-то ещё, он подключает Injector туда же. Зачем? Чтобы можно было писать

include MessagesDictionary

а не

include MessagesDictionary::Injector

😂 Ну, короче ведь. Обратите внимание, что и в Injector можно добавлять такой же хук

    def self.included(klass)
klass.extend ClassMethods
klass.include InstanceMethods
klass.extend InstanceMethods
end

Вуаля, в классе появляются все нужные методы, как по волшебству.

Пример тут https://github.com/bodrovis-learning/messages_dictionary/blob/master/lib/messages_dictionary/injector.rb
🔥134😱21👏1
Ну, и немного музыки на сегодня. Думаю, эту историю знают почти все. Спокойной ночи, скоро увидимся https://www.youtube.com/watch?v=N8YAbH7d8dQ
👍6
В этом уроке по Ruby 3 мы продолжим говорить об автотестах и применим свои знания на практике. Мы узнаем, как тестировать сторонние API с помощью webmock, как измерять покрытие кода тестами и как работать со вспомогательными файлами. https://youtu.be/f9yVwBYyNqU
👍19🔥101