DEV: Рубиновые тона – Telegram
DEV: Рубиновые тона
3.21K subscribers
143 photos
2 videos
8 files
981 links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
Ну а пока ещё немного Solidity. Сегодня поступил резонный и не вполне очевидный вопрос. Есть код:

contract Adder {
uint public a;

function add() public {
for (uint i; i < 100; i++) {
a += i;
}
}
}


Почему в этом случае первый вызов функции add стоит сильно больше газа (на 20к больше), чем последующие? И почему вот с таким кодом:

contract Adder {
uint public a = 1; // a любой, но НЕ нулевой

function add() public {
for (uint i; i < 100; i++) {
a += i;
}
}
}


вызовы стоят одинаково? Я и раньше замечал такую вещь, причём в разных средах. Ответ, на самом деле, очень простой: эта логика зашита прямо в EVM. Читаем документацию по опкодам:

* G(sset) — 20000 Paid for an SSTORE operation when the storage value is set to non-zero from zero
* G(sreset) — 2900 Paid for an SSTORE operation when the storage value’s zeroness remains unchanged or
is set to zero.

То есть переводя с русского на человеческий:

* Мы платим 20к газа, если сохраняем в переменную состояния новое НЕ нулевое значение, но только в том случае, если эта переменная хранила до этого ноль

* Но мы платим всего лишь 2900 газа, если в не-нулевую переменную мы сохраняем что-то ещё (или она была нулевой и осталась нулевой)

Отака история, малята.
20👍1
В этом уроке мы поговорим о test doubles: так называемых "заглушках", которые позволяют вместо реальных объектов использовать "дублёров". Это очень удобно в тех случаях, когда необходимо ввести изолирование и тестировать не всю систему целиком, а конкретную часть. Узнаем, что такое mocks, stubs и spies и как их создавать. https://www.youtube.com/watch?v=4JyOmdi-hNs
🔥293
Один чел из твиттера сделал нейронку, которая на основе фоток и мемов с волками делает свои. Ну, в общем, получилось странновато
😁7🔥2
Перебирал старые посты и нашёл некую зарисовку-рассуждение (дела минувших дней, конечно, но всё же) http://bodrovis.tech/en/categories/prochee/posts/byt-ravnodushnym-pomoch-ili
🤔3👍2
Гугловский сервис для "разогрева" перед интервью - актуально в случаях, если собеседование на английском. https://grow.google/certificates/interview-warmup/
👍7
Мой товарищ написал статейку про GraphQL и mutations на Ruby - коротко, но по делу https://ryanbigg.com/2022/05/ruby-graphql-mutations-with-union-types
🔥4
По мотивам "this person does not exist", ресурс, который показывает несуществующие блюда с названиями, сгенерированными нейросетью https://thissnackdoesnotexist.com/
👍3
И правда
😁22🎉3
Overengineering, доведённый до абсурда: библиотека, которая говорит, равняется ли число 13. https://github.com/jezen/is-thirteen Что интересно, у неё в списке зависимостей есть noop3 - https://github.com/sindresorhus/noop3#readme библиотека, которая ничего не делает
😁9👏1
Странное стоковое фото https://twitter.com/darkstockphotos/status/1364550361260974082/photo/1 В компе, кстати, ещё есть вход PS/2 😄
🤔4
В очередном уроке по RSpec мы разберём решение WebMock, позволяющее легко тестировать сторонние сервисы API. С его помощью вы можете создавать "запросы-заглушки", формировать ожидаемые ответы и проверять, что вызов определённых методов действительно приводит к отпрвке запросов. https://www.youtube.com/watch?v=M0_wdUNf6PE
🔥12👍85