DEV: Рубиновые тона – Telegram
DEV: Рубиновые тона
3.23K subscribers
143 photos
2 videos
8 files
978 links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
Наша группа Ravens Die Laughing рада сообщить, что наконец-то вышел новый трек "Sons of the North" (кавер на оригинальный трек Vanir). Это был достаточно большой проект, который потребовал немалого времени на запись как аудио, так и видео, и в нём поучаствовали люди из разных стран. Приятного прослушивания 🤟 https://www.youtube.com/watch?v=VdVI8xC04bI
🔥7👏21
Итак, друзья, на следующей неделе мы проведём не только день открытых дверей MCS, но и стрим по NFT и ERC721, где рассмотрим очень много важных моментов. Начало 28.07 19:00 UTC+3. Присоединяйтесь! https://youtu.be/VrYsT4asWPc
🔥14👍2
По мотивам обсуждения в чате зафиксирую полезные команды для evm в hardhat и не только (полезно в тестах).

Не забудьте сделать сначала:

import { network, ethers } from 'hardhat';


* await network.provider.send("evm_increaseTime", [timeInSeconds]); - поставит метку времени для следующего блока на значение "текущая метка времени + timeInSeconds". Обратите внимание, что майнинг следующего блока не произойдёт автоматически, то есть грубо говоря само по себе время не перескочит. Впрочем, подобная форма записи должна работать и для ethers тоже, то есть ethers.provider.send. Для того, чтобы сделать майнинг вам нужен...

* await network.provider.send('evm_mine'); - сделает майнинг пустого блока. Вот у него уже будет новое время, если перед evm_mine вы говорили evm_increaseTime. Но можно сделать и проще...

* await network.provider.send('evm_mine', [newTimestamp]); - сразу сделать майнинг нового блока с новой меткой времени. Обратите внимание, что нужно передавать именно новую метку, а не просто кол-во секунд, на которое вы хотите увеличить время. Поэтому можно подойти подход вида

const blockNumBefore = await ethers.provider.getBlockNumber();

const blockBefore = await ethers.provider.getBlock(blockNumBefore);

await network.provider.send('evm_mine', [blockBefore.timestamp + 1200]); // увеличиваем на 1200 секунд


* await network.provider.send("hardhat_reset") - сбросит локальный блокчейн. То есть сбросит совсем: текущий блок будет опять нулевым, время вернётся к текущему, данные потеряются. Можно засунуть в beforeEach, чтобы перед каждым тестом получать девственно чистый блокчейн (впрочем, если в beforeEach вы делаете заново деплой, то контракты у вас и так будут свежие).

Отмотать время назад (типа decrease time), увы, не получится.
👍13
Ну, и немного художеств от нейросети на сегодня. Спокойной ночи
👍13😱1
Небольшой лайфхак. Если status bar в VS Code (это полоса внизу) кажется вам слишком яркой - а меня лично это очень отвлекает, - то можно сделать вот что.

Нажимаем Ctrl + Shift + P

Выбираем Open Settings (JSON)

Добавляем в настройки код:

  "workbench.colorCustomizations": {
"statusBar.background" : "#1A1A1A",
"statusBar.noFolderBackground" : "#212121",
"statusBar.debuggingBackground": "#263238"
},

Ну, тут могут быть любые цвета.

Сохраняем.

Панель стала другого цвета, ура!
🔥13😁1
Забавное мнение о JS и его проблемах.
🔥6😁3
Вот это смешно - я подумал даже, что это нарочно так сделали, но наверняка нет тк все другие письма от этих челов приходили правильные. В общем, они пишут, что тестирование - это важно, а у них прямо в шаблоне письма ошибка (подстановка неправильная - naame, а не name) 😂🤪
😁9
А сегодня у нас интересный урок по Stimulus! В этом видео мы применим полученные знания о Stimulus и Turbo на практике и сделаем реализацию типа drag & drop: пользователь меняет местами положение элементов путём их перетаскивания. Мы обсудим решения acts_as_list, sortable.js, напишем контроллер Stimulus, поговорим о constraints (в том числе типа deferrable) и обсудим ещё несколько важных моментов. https://www.youtube.com/watch?v=_gIJWpfjXBc
👍13🔥42
Интересная книга о разработке "долгоиграющих" приложений Rails. Я пока кратко посмотрел первые главы, но в целом мысли весьма здравые https://pragprog.com/noscripts/d-dcrails/sustainable-web-development-with-ruby-on-rails/ Это не реклама
👍17🤩2
Довольно тяжёлая, но насыщенная была семидневка - надеюсь, новые уроки и стримы принесли плоды. Ну, а сегодня просто немного музыки. Спокойной ночи https://www.youtube.com/watch?v=PBa1iM29mGI
👍6🔥2
Первый урок из серии "Ruby с нуля" (aka "Самоучитель Ruby")! В нём мы настроим рабочую среду, немного поговорим о самом языке, напишем первую программу, обсудим типы данных и переменные. Эти уроки подойдут для начинающих, а также для тех, кто уже когда-то что-то учил, но успел забыть. Помогать в этих уроках мне будет мой друг, который совсем не разбирается в программировании, поэтому это не просто лекции, а, скорее, совместное обсуждение нового материала. https://www.youtube.com/watch?v=lhRAK_bwaeo
👍29🔥7
Рубрика "заметки на полях". Как сделать так, чтобы можно было относительно объекта Ruby вызывать метод обычным способом и через квадратные скобки, то есть писать

obj.method

obj[:method]


В целом, всё просто. Скажем, можно проверить, есть ли такая переменная в объекте:

      def [](raw_key_attr)
key_attr = raw_key_attr.to_s.to_sym

return nil unless self.instance_variables.include?(:"@#{key_attr}")

self.send key_attr
end


Зачем это нужно? К примеру, чтобы объект в массиве нормально работал с методом pluck, который как раз вызывает всё через квадратные скобки. То есть вот это

objects_array.pluck :id


значит, что на каждом объекте массиве вызывается obj[:id], поэтому если метода [] нет, то и pluck не сработает.
👍13
Друзья, и пожалуйста, не надо больше спрашивать, зачем я занимаюсь "вымирающим Ruby". Это по меньшей мере странно, тем более, что этот язык долгие годы (включая этот) держится в топ-5 по зарплате и может похвастать весьма крупным сообществом. Давайте лучше послушаем музыку. Спокойной ночи. https://www.youtube.com/watch?v=qIiZFpOQnd8
🔥19👍9