Не хочу быть, как гоблин https://www.youtube.com/watch?v=KsMKOx6fumc :( Прямо страшно становится. Зато завтра у нас интеллектуальная заруба и возможно стрим по Ruby. Увидимся!
YouTube
Nekrogoblikon - No One Survives [OFFICIAL VIDEO]
©2012 Brandon Dermer & Associates, all rights reserved.
"No One Survives" by Nekrogoblikon from 'Stench,'
©2011 Nekrogoblikon, all lyrics and music rights reserved.
BUY THE ALBUM
CD: http://www.districtlines.com/nekrogoblikon
iTunes: https://itunes.app…
"No One Survives" by Nekrogoblikon from 'Stench,'
©2011 Nekrogoblikon, all lyrics and music rights reserved.
BUY THE ALBUM
CD: http://www.districtlines.com/nekrogoblikon
iTunes: https://itunes.app…
❤1😁1
Через 2 минуты начинаем нашу зарубу :) https://youtu.be/Rv9vtYpSL5o
YouTube
СТРИМ! Интеллектуальная игра MCS Answer: команда школы и зрителей против вредного ведущего
Наша традиционная игра MCS Answer: команда знатоков и зрителей против вредного ведущего!
Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам: https://www.youtube.com/channel/UCN2waErKU52T_41pGgUimXw/join
Boosty: https://boosty.to/bodrovis…
Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам: https://www.youtube.com/channel/UCN2waErKU52T_41pGgUimXw/join
Boosty: https://boosty.to/bodrovis…
В этом уроке по Solidity мы узнаем, как реализовать полноценную ролевую систему в своих контрактах. С её помощью вы сможете разграничить права доступа, выбрать, кто может вызывать какие функции, а также указывать, кто может управлять разными ролями. https://www.youtube.com/watch?v=gQtaEtSCpPE
YouTube
Solidity и смарт-контракты Ethereum, урок #36 | Ролевая система (access control)
ХОТИТЕ СТАТЬ РАЗРАБОТЧИКОМ Solidity, узнать об Ethereum, блокчейне и многом другом ещё больше?!
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
👍22❤🔥2🔥2
В этом видео о Ruby мы поговорим о том, как обрабатывать ошибки и исключения (exceptions). Мы узнаем о конструкции begin-rescue-else-ensure, о том, какие вообще ошибки бывают. Также узнаем о методе retry и научимся порождать собственные ошибки с помощью raise. Полученные знания мы применим на практике и продолжим писать нашу собственную библиотеку. https://www.youtube.com/watch?v=r8p1R8gOXSM
YouTube
Ruby 3 с нуля, урок #13 | Обработка исключений - когда всё идёт не по плану
В этом видео о Ruby мы поговорим о том, как обрабатывать ошибки и исключения (exceptions). Мы узнаем о конструкции begin-rescue-else-ensure, о том, какие вообще ошибки бывают. Также узнаем о методе retry и научимся порождать собственные ошибки с помощью raise.…
👍20❤5
Небольшой лайфхак на сегодня.
Предположим, вы тестируете скрипт Ruby, в котором присутствует метод
Тогда:
Говорим, что если вызван gets, мы отвечаем "Y".
Ну а дальше вызываем нужный метод в тестах. Можно также проверить, что gets действительно был вызван:
Тут даже можно дописать, сколько раз он был вызван, к примеру
То есть не более 2 раз был вызван gets.
Предположим, вы тестируете скрипт 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
Ночь под звуки саксофона (точнее, сразу двух) https://www.youtube.com/watch?v=48tU3P8f46Y
YouTube
Van Der Graaf Generator - Darkness (11/11) (1970)
Van der Graaf Generator are an English progressive rock band, formed in 1967 in Manchester by singer-songwriters Peter Hammill and Chris Judge Smith and the first act signed by Charisma Records. They did not experience much commercial success in the UK, but…
❤5👍3🤔1
Что ж, решил я тут тряхнуть стариной и спустя пять лет выпустить вторую версию библиотеки messages_dictionary для ruby. 😂 Я про неё немного рассказывал на одном стриме, но в общем там суть в том, что с неё помощью можно легко вытаскивать нужные сообщения из файлов yaml, по аналогии с i18n. https://github.com/bodrovis-learning/messages_dictionary Можно пользоваться, можно почитать вот тут, как она была написана (хотя во второй версии много изменений) https://www.sitepoint.com/learn-ruby-metaprogramming-for-great-good/ Думаю, на одном из стримов мы обсудим, как эта библиотека устроена, тк там есть некоторые интересные моменты
GitHub
GitHub - bodrovis-learning/messages_dictionary: Store your messages anywhere and fetch them anytime.
Store your messages anywhere and fetch them anytime. - bodrovis-learning/messages_dictionary
👍19👏7🎉2
В этом очень важном уроке по Ruby 3 мы начнём обсуждать новую тему: это автоматизированные тесты (они же "автотесты"). Мы поговорим о том, зачем тесты нужны, где и как их писать с помощью RSpec, а также поработаем с ними на практике, обсудив много интересных вещей. https://www.youtube.com/watch?v=lfKKEUjtaYs
YouTube
Ruby 3 с нуля, урок #14 | Автотесты RSpec - тестируй меня полностью
В этом очень важном уроке по Ruby 3 мы начнём обсуждать новую тему: это автоматизированные тесты (они же "автотесты"). Мы поговорим о том, зачем тесты нужны, где и как их писать с помощью RSpec, а также поработаем с ними на практике, обсудив много интересных…
🔥24
В общем, чтиво может показаться довольно тяжёлым, но, тем не менее, интересным. По опыту могу сказать - это то, что может случиться с каждым довольно внезапно. Берегите себя https://batenka.ru/resource/med/crazy-in-ussr/
Батенька, да вы трансформер
Как сходили с ума в Советском Союзе
Что можно узнать о себе из пособия «Параноидная шизофрения»: начальство собирает на вас информацию, какие народы надо смешать, подменили всю посуду и исщтщц
⚡5👍1🤯1
Подборка скидок на чёрную пятницу на всякие штуки для разработчиков - может быть, кому пригодится https://github.com/trungdq88/Awesome-Black-Friday-Cyber-Monday
GitHub
GitHub - trungdq88/Awesome-Black-Friday-Cyber-Monday: Awesome apps, software, and SaaS deals on Black Friday.
Awesome apps, software, and SaaS deals on Black Friday. - trungdq88/Awesome-Black-Friday-Cyber-Monday
👍10
В этом уроке по Solidity мы поговорим о Foundry: платформе для разработки и тестирования смарт-контрактов, которая может выступать альтернативой Hardhat. В отличие от HH, тесты в Foundry пишутся прямо на Solidity (таким образом, вам не потребуется Typechain), а сама платформа работает куда шустрее за счёт того, что написана она на Rust. Мы поговорим о том, как настроить Foundry, создать проект и как писать тесты для контрактов. https://www.youtube.com/watch?v=nMZlVNmC5-I
YouTube
Solidity и смарт-контракты Ethereum, урок #37 | Foundry: альтернатива Hardhat для разработки/тестов
ХОТИТЕ СТАТЬ РАЗРАБОТЧИКОМ Solidity, узнать об Ethereum, блокчейне и многом другом ещё больше?!
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
👍26❤5🤔1
Немного Ruby на сегодня.
Пример тут https://github.com/bodrovis-learning/messages_dictionary/blob/master/lib/messages_dictionary/injector.rb
module MessagesDictionaryЧто это значит? Это значит, что когда текущий модуль был добавлен (include) куда-то ещё, он подключает Injector туда же. Зачем? Чтобы можно было писать
def self.included(klass)
klass.include MessagesDictionary::Injector
end
end
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
GitHub
messages_dictionary/lib/messages_dictionary/injector.rb at master · bodrovis-learning/messages_dictionary
Store your messages anywhere and fetch them anytime. - bodrovis-learning/messages_dictionary
🔥13❤4😱2⚡1👏1
Ну, и немного музыки на сегодня. Думаю, эту историю знают почти все. Спокойной ночи, скоро увидимся https://www.youtube.com/watch?v=N8YAbH7d8dQ
YouTube
The Khlysti Evangelist
Provided to YouTube by The Orchard Enterprises
The Khlysti Evangelist · Therion
Sirius B
℗ 2020 Solturn Trading and Marketing OÜ
Released on: 2004-05-24
Auto-generated by YouTube.
The Khlysti Evangelist · Therion
Sirius B
℗ 2020 Solturn Trading and Marketing OÜ
Released on: 2004-05-24
Auto-generated by YouTube.
👍6
В этом уроке по Ruby 3 мы продолжим говорить об автотестах и применим свои знания на практике. Мы узнаем, как тестировать сторонние API с помощью webmock, как измерять покрытие кода тестами и как работать со вспомогательными файлами. https://youtu.be/f9yVwBYyNqU
YouTube
Ruby 3 с нуля, урок #15 | Webmock, тестируем HTTP, покрытие тестами (codecov)
В этом уроке по Ruby 3 мы продолжим говорить об автотестах и применим свои знания на практике. Мы узнаем, как тестировать сторонние API с помощью webmock, как измерять покрытие кода тестами и как работать со вспомогательными файлами.
Таймкоды:
00:00 Введение…
Таймкоды:
00:00 Введение…
👍19🔥10❤1
Сегодня мне приснилось, что в Ruby появился цикл вида
https://www.youtube.com/watch?v=zs8UpY2YF3c
for ... of ....https://www.youtube.com/watch?v=zs8UpY2YF3c
YouTube
I Dreamed I Dream
Provided to YouTube by TuneCore
I Dreamed I Dream · Sonic Youth
Sonic Youth
℗ 1981 Squeaky Squawk
Released on: 1981-03-14
Auto-generated by YouTube.
I Dreamed I Dream · Sonic Youth
Sonic Youth
℗ 1981 Squeaky Squawk
Released on: 1981-03-14
Auto-generated by YouTube.
😁8🌚3👍1
Можно ли в тестах для контрактов легко получить нужное событие? Вполне. К примеру, есть транзакция:
Тогда мы можем сделать функцию для поиска события
Ищем событие
И достаём из него нужное поле
Вопросительные знаки тут потому, что наличие этих полей не гарантированно, то есть формально события может и не быть (другими словами, это атрибуты optional). Но так как мы делаем это в тестах и как раз ожидаем, что оно *должно быть* (если, конечно, все предварительные условия выполнены), то всё должно сработать корректно. А вот если события как раз нет, то вылетит ошибка, тест сломается и мы поймём, что где-то у нас проблема.
const tx = contract.doSomething();
const receipt = await tx.wait();
Тогда мы можем сделать функцию для поиска события
import type { ContractReceipt } from 'ethers';
async function eventFor(receipt: ContractReceipt, name: string) {
return receipt?.events?.find(function (e) {
return e.event === name;
});
}Ищем событие
const myEvent = await eventFor(receipt, "MyEvent");
И достаём из него нужное поле
myEvent?.args?.value
Вопросительные знаки тут потому, что наличие этих полей не гарантированно, то есть формально события может и не быть (другими словами, это атрибуты optional). Но так как мы делаем это в тестах и как раз ожидаем, что оно *должно быть* (если, конечно, все предварительные условия выполнены), то всё должно сработать корректно. А вот если события как раз нет, то вылетит ошибка, тест сломается и мы поймём, что где-то у нас проблема.
🔥11👍3
В этом уроке по Solidity мы с помощью дебаггера Remix будем разбирать байткод, который генерирует компилятор и который используется для деплоя контракта. Мы обсудим каждую отдельную инструкцию, каждый операционный код (opcode) и узнаем смысл и назначение этих инструкций. Таким образом мы поймём, как именно работает стек и память,что именно происходит в момент развёртывания нашего контракта и как передаются в конструктор аргументы и как они обрабатываются.
Это довольно длинный урок, на запись которого ушло весьма приличное время, так что надеюсь, он вам понравится. https://www.youtube.com/watch?v=pz8NeV6bo3E
Это довольно длинный урок, на запись которого ушло весьма приличное время, так что надеюсь, он вам понравится. https://www.youtube.com/watch?v=pz8NeV6bo3E
YouTube
Solidity и Ethereum, урок #38 | Разбор байткода, opcodes, деплой - идём на самый нижний уровень!
ХОТИТЕ СТАТЬ РАЗРАБОТЧИКОМ Solidity, узнать об Ethereum, блокчейне и многом другом ещё больше?!
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
👍25🔥16
Планируется саммит по Rails в начале следующего года. Правда интересных докладов там пока как-то не очень много, и, похоже, послушать их можно только за деньги (пусть и не очень большие) https://events.geekle.us/ruby
events.geekle.us
Ruby on Rails Global Summit'23
Anything, that you have to know about Ruby in 2023
👍6❤🔥1