DEV: Рубиновые тона – Telegram
DEV: Рубиновые тона
3.21K subscribers
143 photos
2 videos
8 files
981 links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
Напоминалка по JWT
👍204🔥1
В этом уроке мы поговорим о низкоуровневых вызовах call и delegatecall, узнаем, в чём их отличие, как работать с возвращаемыми ими данными. Посмотрим, как работать с encodeWithSignature и encodeWithSelector, а также узнаем, к каким проблемам безопасности может привести использование delegatecall. https://www.youtube.com/watch?v=QzdMZbcn3o4
👍20
Говорят, с апдейтом Hardhat и glob какие-то проблемы (не проверял ещё)
Forwarded from Roman Brix
I finally found it.
glob@7.2.2 <- This is problem

I haven't looked for it exactly from what point, but it's version 7.2.0 in the package at the point where that package works well, and version 7.2.2 in the "nothing to compile" version.

Type the "npm intstall glob@7.2.0" into an empty project and copy /node_modules/glob
copy /node_modules/glob to YOUR_HARDHAT_PROJECT/node_modules/hardhat/node_modules/glob
It works.
Срочно в номер: оказывается, в Remix можно выбрать одну из нескольких тем оформления. Правда Old Hope нет :( https://remix-ide.readthedocs.io/en/latest/layout.html#themes
👍2
Удобная штука для тех, кто использует для разработки TypeScript. Typechain умеет генерировать типы для контрактов Solidity и легко интегрируется с Hardhat и Ethers. https://github.com/dethcrypto/TypeChain/
👍3🔥3
По многочисленным просьбам трудящихся, следующее видео будет про Ruby. Да я и сам немного соскучился.
👍35🥰5😢21
Ну а пока ещё немного 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