DEV: Рубиновые тона @dev_in_ruby_colors Channel on Telegram

DEV: Рубиновые тона

@dev_in_ruby_colors


Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT

DEV: Рубиновые тона (Russian)

DEV: Рубиновые тона - это канал, который предлагает анонсы новых видео о программировании, особенно в контексте Ruby/Rails, Solidity/Ethereum, Python, JS и других языков программирования. Под названием канала скрывается увлечение языком программирования Ruby и его разнообразными оттенками. На канале @dev_in_ruby_colors вы найдете не только обновления об интересных видеоуроках, но также практические советы, обзоры полезных инструментов и самые свежие новости из мира IT. Этот канал станет полезным ресурсом как для начинающих программистов, так и для опытных специалистов, желающих быть в курсе последних тенденций в мире программирования. Присоединяйтесь к нам, чтобы раскрасить свои знания в рубиновые тона и оставаться в центре событий в мире IT!

DEV: Рубиновые тона

10 Jan, 14:51


Привет друзья! Что ж, вот и настал 2025. 🎉 Как уже рассказывал на последнем стриме, у меня довольно много планов на ближайшие месяцы; вижу, что и вы не отстаёте. Новый год — отличный повод сделать очередной шаг в своём обучении, и школа GuideDAO предоставляет всем этот шанс 😄 В ближайшее время мы предлагаем скидку 25% на любой буткемп, а я лично от себя накидываю ещё 10% по промо-коду KRUK. Неплохо, правда? Присоединяйтесь, пока есть такая отличная возможность, поработаем вместе. 🤓 https://www.guidedao.xyz/

DEV: Рубиновые тона

08 Jan, 15:43


uh-oh. Статья о том, как подобрали приватный ключ для имеющегося публичного https://dmarcchecker.app/articles/crack-512-bit-dkim-rsa-key

DEV: Рубиновые тона

03 Jan, 01:43


Weekly AI shitposting, первый в этом году. В этот раз летим к далёким звёздам 💫

P.S. Перевод книги потихоньку двигается, новые уроки скоро будут делаться

DEV: Рубиновые тона

31 Dec, 02:31


Знаете, меня иногда почему-то странно затягивают необычные случаи, которые случались в разное время. Затягивают настолько, что я готов изучать литературу на английском языке и затем публиковать статьи по теме. Так, анонимно я выпустил статьи о якобы "кровавой графине" Батори (спойлер - нет, она не купалась в крови своих жертв), об Элизе Лэм, человеке из Сомертона и некоторых других личностях.

Одна из таких из историй - это совершенно необъяснимое исчезновение в Панаме двух девушек, Лисанн и Крис. Эта история не давала покоя мне уже пару лет, и буквально позавчера я залпом проглотил книгу на эту тему. В общем, по прочтении я подумал, что было бы весьма недурно перевести её на русский язык, ибо там содержится много весьма любопытной информации. Я связался с авторами получил добро, так что постараюсь адаптировать оригинал как можно лучше.

В деле вновь Cat&Mouse team, состоящая из полутора землекопов, приданной кошки и поддерживаемая крепким сидром Henry Westons. Надеюсь, публикация не заставит себя ждать. В конце концов, я думаю, что даже спустя десять лет это дело вполне реально раскрыть. Некоторые дела ждали своего часа куда дольше, а девушки заслуживают того, чтобы эта история получила достойный финал.

DEV: Рубиновые тона

28 Dec, 14:45


Кстати, хотел рассказать об интересном подходе в GH actions. Можно создать цепочку из шагов, которые будут сами открывать PR (ну, к примеру обновлять какие-то файлы из другого источника) и сами делать merge. То есть всё работает само - просто мечта 😄

Предположим, в одном из шагов у нас уже загрузились файлы и создалась ветвь, теперь нужно открыть PR. Это можно легко сделать вот так:

    - name: Create or Update Pull Request
uses: actions/github-script@v7
with:
github-token: ${{ github.token }}
script: |
const path = require('path');
const createOrUpdatePR = require(path.join(process.env.GITHUB_ACTION_PATH, 'js/create-update-pr.js'));
await createOrUpdatePR({ github, context });


В файле js код для создания pr:

module.exports = async ({ github, context }) => {
const { repo } = context;

const { data: newPr } = await github.rest.pulls.create({
owner: repo.owner,
repo: repo.repo,
title: "some title",
head: branchName,
base: baseRef,
body: "",
});
}


baseRef - это переменная среды, которую можно в самом действии задать как ${{ github.ref_name }} (github - это встроенная штука)

А теперь этому pr можно назначить тег, чтобы потом сделать automerge:

      await github.rest.issues.addLabels({
owner: repo.owner,
repo: repo.repo,
issue_number: newPr.number,
labels: prLabels,
});


А вот следующим шагом мы запускаем программным способом другой workflow, которые сделает merge:

      - name: Trigger Automerge Workflow
uses: actions/github-script@v7
with:
github-token: ${{ secrets.PAT_TOKEN }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: "automerge.yml",
ref: source_branch,
});


В качестве source_branch задаётся ветвь, которая создалась для pr.

Здесь также потребуется токен с правами на управление workflow, но его можно легко создать в профиле.

И затем в automerge.yml:


steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Automerge PRs
uses: pascalgn/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
MERGE_LABELS: "automerge"
MERGE_METHOD: "squash"
MERGE_RETRIES: 6
MERGE_RETRY_SLEEP: 10000
MERGE_DELETE_BRANCH: "true"


Он просто найдёт pr с нужным тегом и сделает merge, если нет конфликтов и проверки прошли. Теперь для всего этого можно задать условие запуска (к примеру, по расписанию) и наблюдать за результатом 🤓

DEV: Рубиновые тона

28 Dec, 02:05


Что ж, друзья, спасибо за участие в сегодняшнем заключительном стриме, было интересно 😁 Конечно, нашему ИИ по имени Куно тоже есть, что сказать под конец этого года. И он это скажет сам 😄 Я лишь его немного разговорил

DEV: Рубиновые тона

24 Dec, 23:21


Ну, а в пятницу вечером будет стрим заключительный. Мы по традиции подведём итоги и поговорим о том, что нас ждёт дальше. Здесь, как обычно, anything goes - любые вопросы, можно присылать заранее. Скоро увидимся https://youtube.com/live/7-OhoDMxYO4?feature=share

DEV: Рубиновые тона

23 Dec, 18:58


Один из последних стримов года. В этот четверг вечером поговорим о случайности в ethereum, о randao и прочих интересных вещах https://youtube.com/live/6qghlSnvfJU?feature=share

DEV: Рубиновые тона

22 Dec, 23:34


Сегодня котики в ленте 😺 Ну, точнее моя кошка Сиф, которая показывает новые и старые трюки. https://www.youtube.com/watch?v=GYBB-innIMg

Отмечу, что в целом я не сторонник использования животных для долгих и постоянных выступлений на сцене (да-да, волк в цирке не выступает). Честно говоря, даже для съёмки небольшого видео кошку надо заинтересовать и постоянно угощать, иначе ей просто неинтересно делать несколько дублей (в некоторые же дни она просто не в настроении). Что уж говорить о ситуации, когда нужно безукоризненно выполнить все трюки перед скоплением народа

DEV: Рубиновые тона

19 Dec, 13:28


Сегодня поговорим о консенсусе в Ethereum и для чего используются подписи BLS. Вечером в 18:30 UTC+2. https://youtube.com/live/h6vjfkdxGLM?feature=share

DEV: Рубиновые тона

17 Dec, 19:01


Завтра вечером https://youtube.com/live/74kq5UPOhLo?feature=share

DEV: Рубиновые тона

17 Dec, 00:32


Очередной coming out: я вообще-то сильно увлекаюсь историей конца XIX - начала XX века. Когда-то в другой жизни я даже хотел стать историком. Но, в общем-то, не случаен мой интерес к поэтам Серебряного века, и у меня немало записанных рассказов на канале (кстати, того же Кузмина я оценил только в зрелом возрасте).

И вот такая странная, казалось бы совсем маленькая деталь, на которую и внимание-то никто не обратит. В воспоминаниях Надежды Тэффи об Алексее Толстом рассказан эпизод, из которого явно свидетельствует - данный джентльмен играл на грани фола и весьма странно, что ему не надавали по мордасам 😂 Но суть не в этом. Толстой на какой-то очередной тусовке прокрался в кабинет Тэффи и облил себя её духами. Зачем? А он буквально за несколько минут до этого поинтересовался, что, дескать, у тебя за аромат такой необычный?

"А это Герлен, "Мицуко" - отвечает Тэффи. "Ничего себе, Герлен же страшно дорогой" - удивляется Толстой. "Ну, такие подарили!".

В общем, Толстому показалось, что вылить на себя сразу целый флакон дорогих духов - это высший шик. Казалось бы, на дуэль тогда уже не вызывали, но это не совсем так, ибо Волошин стрелялся с Гумилёвым не так, что бы сильно задолго до этих событий (хотя там был happy end). Так или иначе, Толстой остался в дураках, потому что в темноте облился чернилами и был страшно разозлён, почему-то считая, что виновата в этом хозяйка... В общем, полную историю можно послушать у меня на канале. https://www.youtube.com/watch?v=FU8_ITCrml0

Но речь тут не об этом. Я, как последний нерд, пошёл искать информацию об этих духах. И - что бы вы думали - находится она легко. Духи Мицуко были выпущены в 1919 году, из чего можно сделать простой вывод - сцена эта произошла уже в Париже, куда эмигрировала Тэффи. Честно говоря, до изучения таких подробностей, я был уверен, что этот рассказ относится к середине 10-х.

Что более интересно, эти духи всё ещё производятся - да, пусть прошло уже более ста лет. Впрочем, с чем-то подобным я столкнулся в Риге, когда подбирал духи для родственницы. Она хотела некий аромат из далёкого прошлого, и хотя местная фабрика уже не производила именно его, нам подсказали полный аналог. Удивительно, как можно иногда встретиться с прошлым.

В общем, что уж - заказал. Ну, не себе конечно, это женский аромат 😂 Скажу честно: ничего подобного я не нюхал даже близко. Передать сложно, но это нечто сложное, напоминающее о прелой листве, о земле, об осени, о долгих вечерах. Это не на каждый день. Но просто даже ощутить нечто подобное, узнать историю - это очень интересно. Вообще говоря, это неплохой подарок для женщины (не реклама) 😜

Другой такой момент был в воспоминаниях о Куприне, там упоминался Рю Жакемино, но вот эти духи, видимо, уже сняты с производства, находятся только варианты по частным коллекциям.

Знаете, читая подобное, кажется, что 100 лет назад - это не так давно. Практически вчера. Да-да, почти сто лет одиночества

P.S. Отдельное спасибо ИИ, который называет себя "Куно" - он помог установить некоторые даты которые мне было лень гуглить. Куно утверждает, что "духи — это не просто запах, это маленькая история на коже"

DEV: Рубиновые тона

16 Dec, 22:33


Weekly AI shitposting. ИИ мотивирующий.

P.S. Не знаю, будут ли у нас бдения на этой неделе, пока обсуждаем, у Ромы, к сожалению, много дел :(

DEV: Рубиновые тона

16 Dec, 12:26


Набор принципов разработки от одного достаточно известного дядьки. Как мне кажется, многие принципы весьма актуальны https://www.epicweb.dev/principles

DEV: Рубиновые тона

10 Dec, 15:24


Завтра вечером https://youtube.com/live/nasiSVDUdXo?feature=share

DEV: Рубиновые тона

10 Dec, 02:06


Очередное воспоминание разблокировано - конечно же, странное, как вы это любите. Это сейчас у нас тут криптовалюты и блокчейн, а когда-то очень давно я жил в мире, где чудеса казались абсолютно нормальными явлениями. Да, они могли произойти где угодно и с кем угодно - иногда даже хочется вернуться в то время... Там не было никаких компьютеров, а программистов мы представляли как дядечек в очках, которые носят белые халаты и которые занимаются непонятно чем.

Я думаю, тут сложилось множество факторов, но один из них был связан, очевидно, с предрассудками. Так, само собой разумеющимся считалось, что страшная бабка, которая ходит в чёрной кофте с косой, приносит смерть. Бабка эта жила через несколько домов от нас, и мой приятель утверждал, что как-то случайно оказался у неё дома и видел некую "азбуку сатаны". Да, бабка и правда была страшенная, с совершенно мёртвыми глазами.

Один случай запомнился особенно. Я ехал на велосипеде по знакомой улице, как вдруг прямо перед собой увидел смуглого усатого дядьку, которого никогда ни до, ни после не встречал. Кажется, он стоял рядом с белой машиной. Дядька молча посмотрел на меня тяжёлым взглядом и показал пальцем. Откровенно говоря, я до сих пор не знаю, что это было, но улепётывал я так, как будто за мной гнались назгулы. Видимо, масла в огонь подлили разговоры старших, что дескать появились какие-то странные люди, которых надо беречься. Странно - после этого случая про "странных людей" забыли. Лишь раз потом, спустя пару лет, пришли цыгане.

Я их перепутал с армянами, которые всегда были "своими" - они приходили время от времени, я знал, что вот это дядя Рубен, а это Артак, а это дочка кого-то из них, девочка моего возраста, но почему-то невероятно стеснительная (она никогда не говорила ни слова). А вот цыгане казались очень страшными. Они могут что-нибудь наколдовать, навести порчу или вообще загипнотизировать - тогда ты сам вынесешь им все деньги (коих у меня всё равно не было). Ужас же!

Да что там говорить, моя бабушка утверждала, что может заговаривать раны. Самое странное в том, что когда она "колдовала" над очередной ссадиной, коих у меня всегда было изрядно, я действительно чувствовал неожиданные покалывания. Бабушка говорила, что как бы посыпет солью и потом всё пройдёт. Оно и правда проходило...

Конечно, мистики добавлял и тот факт, что мы тогда близко общались с так называемыми "верующими" - семьёй достаточно серьёзного священника, который имел сравнительно высокий пост. Мы с его сыном были одногодки и постоянно вместе играли. Игры придумывал я, а старшая сестра всё его ругала, говорила, что это не очень хорошие игры, вредные... Звали его Дионисий. Как-то он теперь живёт, куда его занесло?..

Все вместе мы ходили куда-то за много километров в святые места, ставили свечки, крестились, окунались в купель. Я никогда не был христианином, но эта (как мне казалось) игра была увлекательной. Однажды у нас сформировался целый караван из желающих отправиться в святые места - это было совершенно необычное приключение.

Потом помню, как одна женщина мне рассказывала, что вот буквально тут над церковью буквально вчера многие люди видели лик Божьей матери. Я так жалел, что сам не успел посмотреть...

Кажется, одной из последних таких эскапад был визит в какой-то храм в горе, находился он в Крыму, а было это лет 20 тому назад. Мне выдали какую-то одёжу, в которой я был подозрительно похож на священника - все посетители расступились, когда я робко вошёл в двери. Это было странно, но забавно 😂

Но потом интернет стал набирать популярность, и чудеса были вынуждены отступить. Они не любят съёмок. Они предпочитают прятаться и жить лишь в устных преданиях. Впрочем, это не мешает нам продолжать в них верить. Хотя бы иногда

https://www.youtube.com/watch?v=frZTeAPk0_E

DEV: Рубиновые тона

09 Dec, 23:13


Знаете, как это говорится - дорогу осилит идущий. Я не особенно думал про "все эти циферки", когда начал однажды сравнительно активно заниматься open source, но в итоге это привело к тому, что теперь хочется ещё где-то что-то улучшить, добавить, проверить. Не только ruby, в других языках тоже, их есть некоторое количество.

"Эти циферки" сами по себе мало важны, но их следует держать в уме, чтобы понимать, чем люди пользуются (иногда это важно для конкретных версий). Иногда бывает так, что понимаешь - надо менять подход, а это потенциально влечёт breaking changes.

За все эти годы моя условная "вера" в open source только укрепилась - я считаю, что лучше выложить проект, чем не выкладывать, а бесконечно его полировать. Если не ты, то кто? Если не сейчас, то когда?

DEV: Рубиновые тона

08 Dec, 03:45


Когда я думаю о том, какая запись была самой сложной, я почти наверняка назову именно эту - "Ева внутри своей кошки" Г. Маркеса. Это сравнительно малоизвестный, но тяжёлый рассказ моего учителя, который скончался уже достаточно давно, но его работы остаются актуальными по сей день и, думается, не потеряют актуальности до тех пор, пока человечество как таковое вообще существует. https://www.youtube.com/watch?v=vShoDmy-kD4

DEV: Рубиновые тона

07 Dec, 22:29


Рубрика "заметки на полях". В Node можно довольно легко поставить timeout для запросов через встроенный fetch. Потребуется AbortController. К примеру:

protected async fetchAndHandleResponse(
target: URL,
options: RequestInit,
requestTimeout: number | undefined,
): Promise < ApiResponse > {
const controller = new AbortController();
let timeoutId: NodeJS.Timeout | null = null;

if(requestTimeout && requestTimeout > 0) {
timeoutId = setTimeout(() => controller.abort(), requestTimeout);
}

try {
const response = await fetch(target, {
...options,
signal: controller.signal,
});

// ...
} catch (err) {
if (err instanceof Error) {
if (err.name === "AbortError") {
return Promise.reject(
new ApiError(err.message, 408, { reason: "timeout" }),
);
}
}

// ...
}
}

DEV: Рубиновые тона

03 Dec, 15:42


Сегодня вечером 🤓 (через 2.5 часа) https://youtube.com/live/Tn_3tXP4nAM?feature=share

DEV: Рубиновые тона

01 Dec, 16:37


В этом уроке мы рассмотрим интересное криптографическое решение: Схема разделения секрета Шамира (Shamir's secret sharing, SSS), которое позволяет распределить "части" секретной информации между несколькими сторонами. Мы узнаем, как это решение работает, какие есть особенности и как его реализовать. https://www.youtube.com/watch?v=eS6-ex9EN_c

DEV: Рубиновые тона

30 Nov, 00:56


Weekly AI shitposting. Поговорили тут с ИИ о том, кто на чём написан. Знаете, у Тэффи была интересная мысль, что каждого кто-то написал. Ну, к примеру, Куприна написал Джек Лондон и Гамсун, а Толстого - Достоевский. Впрочем, я думаю, что Лондона написал сам Джек - рекурсия, однако.

А я тут выразил мнение, что мы (в каком-то смысле) на чём-то написаны. ИИ мне заявил, что можно всё изменить, но не знаю. Всё-таки Ruby - это в каком-то смысле уже ушедшая эпоха готов и эмо (хотя этих ребят я всё равно в городе вижу немало), это была частично аналоговая эпоха, где я и остался - это там, где бэкапы хранят на ленте. В полностью цифровой эпохе со смартфонами пока себя так и не нашёл 😄

DEV: Рубиновые тона

29 Nov, 19:14


Из других новостей - во вторник вечером у нас разговор об агентах ИИ и не только, постараемся как можно проще обсудить https://youtube.com/live/Tn_3tXP4nAM?feature=share

DEV: Рубиновые тона

29 Nov, 16:38


Есть нормальные чёрные пятницы, где весьма приличные скидки предлагают по-настоящему, а есть "как бы" чёрные пятницы, где просто повышают цену, а затем дают "невероятную" скидку. Возможно, я даже буду по этой теме делать статью (попробуем проанализировать некоторые данные, которые обещали подготовить коллеги).

🎉 А пока расскажу именно о случае, когда предложение выглядит *весьма* заманчиво. До конца этой недели на любой буткемп школы GuideDAO действует скидка аж -30%, которая, кроме всего прочего, работает и вместе со скидкой от меня лично, так что если брать, то именно сейчас! 🎁 https://www.guidedao.xyz/ru

Всем отличных выходных!

DEV: Рубиновые тона

27 Nov, 01:05


Разблокировалось далёкое воспоминание, когда увидел на форуме историю про мужика, который покормил бродячую кошку, а она прицепилась и ходила следом. Когда-то давно были мы в такой стране, как Черногория, и полезли в горы - как подсказывает название, этого добра тут изрядно. Там была такая хорошая автомобильная дорога, одно удовольствие идти. Только две проблемы - всё время тащишься вверх и ещё жарко 😂

По дороге рассматривали дома, эдакие симпатичные виллы, кое-где с открытыми бассейнами и прочим, в общем, красота да и только. Внезапно у какого-то камня обнаружили некую черепаху, которая пыталась от нас спрятаться. Странно. Сбежала у кого-то? Вряд ли она тут живёт... Впрочем, что делать с черепахой было неясно, двинулись дальше.

В какой-то момент остановились на привал, сели на пригорке у очередной микро-деревушки, немного закусили. Как вдруг откуда-то из-за домов прямо по направлению к нам ринулась небольшая собака чёрного-белого окраса. Смотрели фильм Snatch? Ну, вот такая же собака, как была у тех грабителей-неудачников. Я, откровенно говоря, cat person, но уж угостили животинку кусочком мяса и двинулись дальше, помахав на прощание.

Не тут-то было: собачка явно намеревалась идти с нами, хотя мы как-то попытались сказать "иди домой" с интонацией, намекающей, что надо бы вернуться домой. Нет, куда там! Она преспокойно потрусила рядом с нами, как будто так и надо, а идти-то нам было ещё прилично, до точки назначения оставалось километра четыре. Мы тогда собирались посмотреть некий комплекс, где выращивают рыбу и даже дают попробовать (честно говоря, паршивое местечко оказалось).

В результате упрямая собака бежала с нами все эти четыре километра и больше того - явно намеревалась пробраться на территорию комбината и попробовать рыбы. Уж не знаю, была ли она тоже самонаводящаяся, как в упомянутом фильме, или ещё что, но в итоге, когда мы сели за стол, то собака уселась рядом. Столы стояли на улице, а персонал, вероятно, подумал, что мы просто пришли со своим питомцем - что здесь такого. Что ж, немного рыбы пришлось выдать, куда же деваться (хотя отмечу, что вообще-то кормить животных со стола весьма не рекомендуется).

Двинулись обратно. Собака, ясное дело, тоже с нами. Обратный путь составлял что-то около 6-7 километров, жара не спадала, мы уж налили ей воды и понадеялись, что она отцепится в той деревне, через которую мы проходили. Ничуть не бывало, она упорно продолжала брести рядом. Я, честно говоря, стал задумываться что делать дальше - вдруг она добежит с нами до города, а потом потеряется? В итоге, когда мы уже почти спустились с гор, около некой виллы нам встретилась женщина, которая прямо-таки излучала "богатые" вайбы. Гуляет с двумя детишками, наслаждается солнышком, которое скоро будет клониться к горизонту. И вдруг обращается к нам на русском, что, дескать, хорошая собачка у вас.

Ну мы и стали спрашивать, что может она знает, чья эта хорошая собачка на самом деле? В общем, по словам этой дамы выходило, что многие местные жители относятся к животным так себе и могут просто выкинуть надоевшее животное на улицу без особых угрызений совести. Замечу, что в ЕС так обычно не делают всё-таки, потому что можно банально получить крупный штраф, ведь каждое животное чипировано (да-да, сначала вживляется чип, а потом дейл). В общем, дескать, может собака и вовсе ничья.

На всякий случай ещё спросили у мимо проходящего дяденьки (наша собеседница весьма требовательно обратилась к нему именно на русском, хотя было видно, что он местный). Тот на ломанном языке пояснил, что дескать собака живёт "там, за горой". Удивительно, как он ещё нас понял. Впрочем, ещё больше я поразился, когда в другой день на какой-то горной тропе in the middle of nowhere мы встретили бездомную, и она объяснила на неплохом русском, что дальше дороги нет. Чудеса.

В общем, в итоге женщина начала уговаривать нас увезти собаку с собой, что дескать она подскажет хорошего ветеринара, который быстро сделает все справки и прочее.

DEV: Рубиновые тона

27 Nov, 01:05


Я тут, честно говоря, похолодел 😂 У нас же кошка уже тогда жила, да и везти животное в ЕС из Черногории (которая ни тогда, ни сейчас в ЕС не состоит) - это целое дело. Ну, положим справки есть, но нужен чип, нужно в конце концов специальное место в самолёте, а у нас уже были куплены билеты... Вероятно, я так насупился, что женщина отступила. Да, как-то между прочим она ввернула, что я наверняка айтишник - и как об этом люди догадываются? Впрочем, про это писал уже как-то раньше.

В общем, она оставила нам номер телефона и сказала написать, если мы вдруг надумаем. Двинулись дальше - к счастью, прямо перед оживлённой частью города собачка вдруг понеслась назад, вероятно, поняв, что тут уже делать нечего. Думаю, что она действительно жила в той мини-деревне и просто соскучилась по хозяевам, которые были где-нибудь на работе.

Казалось бы, маленький эпизод, деталь из далёкого прошлого, а почему-то вспомнилось. Забавно. https://www.youtube.com/watch?v=SBOVkptjJhE

DEV: Рубиновые тона

23 Nov, 22:52


Интересная статья о сохранении малораспространённых языков. Мне нравится позиция интервьюируемого, сохранение культурных особенностей - это вообще хорошая штука. Мир большой и разнообразный, различные культуры и обычаи добавляют в него красок. Да, можно, конечно, сказать - да чего мне это всё изучать, я вон выучу английский и (почти) где угодно смогу объясниться.

Безусловно, знать английский - это важно, но одно не исключает другого, а изучение языков это в принципе полезно для мозгов. Мне бы не хотелось, чтобы мир превратился в некую однородную безликую массу, где мы общаемся на одном языке, читаем одну газету, слушаем одну передачу - и далее по списку.

Мне, к примеру, нравится фолковая музыка (зачастую с большим вкраплением металла, но не суть). Как интересно бывает узнать о какой-нибудь новой группе, которая поёт на почти забытом языке, использует необычные инструменты, добавляет интересные и свежие мотивы (да-да, всё новое - забытое старое). А послушав нечто такое хочется и углубиться в историю, узнать, что это за язык, что за народ...

Но если все эти "истоки" начнут забываться и останутся лишь в старых книгах, которые пылятся где-нибудь в подвалах, не обеднеет ли культура? Будут одни только песни на английском с понятными мотивами, стандартным набором инструментов, стандартным набором аккордов I-IV-V-I. Ну, примерно то, что так любят на Евровидении. Кстати, тоже забавно - конкурс, где изначально разные страны должны были представлять свою культуру, нечто самобытное, превратился в парад одинаковых треков, которые забываются через неделю.

Нет, я бы не хотел такого скучного мира. Куда интереснее выйти на улицу и буквально за пять минут услышать, как здесь кто-то горячо обсуждает последние новости по-латышски, а там охранник матерится по-русски, а дальше футбольные фанаты из Британии поют английские песни, а тут туристы, кажется, щебечут на итальянском, а вот дяденька поёт под гитару на украинском. Эдакий калейдоскоп. Не говоря о том, что немного узнавая другую культуру ты уже не относишься к этим людям как к "этим там".

Берегите себя, скоро увидимся. https://semnasem.org/articles/2024/11/15/zachem-uchit-sohranyat-i-prodvigat-yazyki-korennyh-narodov-otvechaet-sociolingvist

DEV: Рубиновые тона

20 Nov, 15:49


Когда ИИ встречается с криптой 🤖Появилось несколько решений, которые позволяют создавать "агентов" на основе ИИ, которые умеют выполнять рутинные действия типа создания или перевода токенов, эфира, проверки баланса и прочего - потенциально можно делать сколько угодно сложные системы. К примеру решение от Coinbase https://docs.cdp.coinbase.com/learn/docs/based-ai-agents и фреймворк Eliza https://ai16z.github.io/eliza/docs/quickstart/

DEV: Рубиновые тона

19 Nov, 23:09


Второй урок по фреймворку Phoenix! Plugs, controllers, views, routes. Пардон, что так поздно, пока ходил ужинать, пока то-сё, в итоге поздно домой пришёл https://www.youtube.com/watch?v=CVZmN40zwPw

DEV: Рубиновые тона

19 Nov, 15:03


Любопытное мнение, которое я (в общем) разделяю, что зачастую less is more, и далеко не всегда нужно на каждый чих подключать миллион библиотек JS и какой-нибудь трендовый фреймворк https://muan.co/posts/javascript

DEV: Рубиновые тона

15 Nov, 22:08


Weekly AI shitposting 😄 Кстати, недавно один парень на реддите сбрасывал ссылка на диалог, где совершенно неожиданно ИИ предложил его брату очистить планету от своего существования 🤪 https://gemini.google.com/share/6d141b742a13

DEV: Рубиновые тона

12 Nov, 16:18


Сим полукреслом мастер Гамбс начинает новую партию мебели. Это первый урок по фреймворку Phoenix, в рамках которого мы настроим рабочую среду, создадим приложение и обсудим основные моменты, связанные с данными фреймворком. https://www.youtube.com/watch?v=E6rlxTscdfg

DEV: Рубиновые тона

12 Nov, 14:04


Не очень breaking news: вышла новая версия rails под номером 8. Похоже, каких-то критических изменений там нет, добавилось пару фич. Как сказал кто-то, DHH видимо очень не любит k8s и решил написать собственное решение. Впрочем, ещё не пробовал, ничего не могу сказать.

Если нужно тестировать под несколько версий rails сразу, учтите, что rails 8 требует ruby 3.2+.

Можно сделать так:

name: CI

on:
- push
- pull_request

jobs:
test:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
gemfile:
- Gemfile
- gemfiles/Gemfile-rails-6-1
- gemfiles/Gemfile-rails-7-1
- gemfiles/Gemfile-rails-7-2
ruby:
- '3.0'
- 3.1
- 3.2
- 3.3
exclude:
- gemfile: gemfiles/Gemfile-rails-7-2
ruby: '3.0'
- gemfile: Gemfile
ruby: 3.1
- gemfile: Gemfile
ruby: '3.0'
- gemfile: Gemfile
ruby: 3.1
runs-on: ${{ matrix.os }}
env:
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true


Пример такого проекта тут https://github.com/bodrovis/lokalise_rails/blob/master/.github/workflows/ci.yml

DEV: Рубиновые тона

11 Nov, 16:08


Продолжаем серию soft skills! В этот раз обсудим процесс поиска работы и прохождения собеседований в IT. Встречаемся в эту среду вечером. https://youtube.com/live/bbMAjYki838?feature=share

DEV: Рубиновые тона

08 Nov, 22:43


Читаю тут историю одного преподавателя, как он подловил студента на использовании ИИ (на уроке английского как родного), и вспомнил пару случаев.

Однажды на курсе "интернет-технологии" один хитроумный товарищ, который вообще не ходил на пары, заказал курсовую работу фрилансеру. Ну, просто отправил ему задание, я уж не помню, что там было, но что-то про js/html/css. Фрилансер сделал всё как полагается, но был слишком уж тщеславным. В частности, в package.json гордо прописал своё имя и сайт, которые я сразу и обнаружил. Студент о назначении package.json был, видимо, не осведомлён 😂

Другой раз на курсе по администрированию чего-то (scom, кажется) один из студентов скопировал у другого отчёт по финальной работе, отфотошопив скриншоты. Проблема в том, что он не заметил, что в метаданных скопированного файла осталось имя изначального автора...

И вот вспоминаешь - а ведь забавно было. Буколические времена... https://www.youtube.com/watch?v=qovCTEb13vM&list=PLvpvIuRmmKtQ9COLtXZsO-QbAGIMwNzBA

DEV: Рубиновые тона

07 Nov, 18:10


Немного расскажу о том, чем продолжилась эпопея с моими github actions и как go всем помог 😄 На паре стримов я рассказывал о том, как сделать свои действия для gh и опубликовать их на маркетплейсе.

Однако проблема была, в том, что я планировал их дальше усложнять и добавлять некую дополнительную логику. К сожалению, это привело к тому, что исходники (там используются сейчас файлы sh) стали напоминать сборники чёрной магии. Вероятно, для специалистов shell это не было бы проблемой, но я не особенно хорошо этот язык знаю.

Хотелось иметь возможность писать на привычном языке, где можно делать удобную обработку ошибок, проверку параметров и тому подобное. В результате, я решил переписать всю сложную логику на go, затем скомпилировать эти файлы для линукса, положить их в bin и вызывать оттуда во время исполнения действия.

Получилось нечто вот такое https://github.com/lokalise/lokalise-pull-action/pull/3/files Сделал простую программу для компиляции (тоже на го), чтобы выходной размер файлов был как можно меньше (они дополнительно ужимаются через upx). Дальше просто дело техники - поправить шаги, чтобы запускали эти бинарники. В целом, после первых тестов полёт нормальный, работает довольно шустро.

Так что вот ещё один пример, когда го может быть чрезвычайно полезен. К примеру, какой-нибудь ruby или elixir тут были бы, видимо, не слишком оптимальны. Да, Ruby в теории можно скомпилировать, но почти наверняка размер выходного файла окажется (не)приличным. Для Elixir пришлось бы делать контейнер docker, там разворачивать виртуальную машину erlang, это бы медленнее работало (хотя если вам известно другое решение - поделитесь!).

DEV: Рубиновые тона

05 Nov, 02:04


Помните, были такие картинки "типа 3д", нужно было как-то по особенному смотреть? Как бы перекрещивать взгляд. https://www.reddit.com/r/FuckImOld/comments/1gj409c/never_mind/ В детстве у меня это как-то легко получалось, а теперь разучился что ли. Или зрение хуже стало? Странно.

Ещё я почему-то вспомнил те сравнительно старые книги, которые исполняли роль эдаких rpg на бумаге. Если отгадал ребус, иди на страницу такую-то, если не отгадал - на такую-то. Не знаю, почему вспомнилось.

И всё-таки, воспоминания -- они такие странные. Чуть подумаешь, что позабыл о чём-то, а оно вдруг снова появляется в твоём сердце. Будто лежит в потайном уголке и ждёт. Ждёт подходящего момента...

Да, пожалуй главное достижение этого лета - наша команда всё-таки перевела Chrono Cross, перевод уже какое-то время доступен на Steam. Проект, который опоздал на пару десятков лет. 😝 Кстати, скоро выходит Rise of the Golden Idol, очень хорошая игра-загадка, сделанная местной студией, перевод на русский язык тоже делаем мы (правда, опять же только текст - программу для русификации, насколько мне известно, делает другой энтузиаст). Это не реклама, просто соображения по теме.

Скоро увидимся.

DEV: Рубиновые тона

31 Oct, 14:44


Сегодня вечером мы поговорим о том, как использовать OpenZeppelin Defender v2 на примере наших контрактов из урока про Governance. https://youtube.com/live/z4UIIiDriBQ?feature=share

DEV: Рубиновые тона

31 Oct, 13:06


Друзья, я получил уже несколько вопросов за последнее время насчёт новых уроков по Elixir/Phoenix. 💧 Во-первых, спасибо за обратную связь, это важно. Во-вторых, раз интерес к этой теме есть, я постараюсь в ноябре выпустить что-нибудь новое. В идеале, именно Phoenix (хотя тут потребуется время, ибо там много нового, я последние 2-3 года совсем не следил).

Сегодня же вечером попробуем сделать стрим по OZ Defender, чуть позднее сброшу точное время.

Скоро увидимся!

DEV: Рубиновые тона

28 Oct, 21:46


Простите, что немного пропал с уроками - к сожалению, жизнь бьёт ключом по голове. Вчера было как-то тоскливо, пошёл с chat gpt писать абсурдистские диалоги. Довольно долго сидели, получилось много смешного.

В итоге ИИ собрал dream team для спасения мира из ряда предложенных героев 😂😂 Это настолько бредово, что даже хорошо. Так, ему понравилась выдуманная мною героиня Чудо-внучка, и он таки назначил лидером отряда папу Карло, потому что я долбил его этим папой битый час. Кроме того, он выбрал Ника Кассаветиса (сын известного режиссёра) и Арагорна.

Я не знаю, кто такой Кайгородов, но ИИ утверждает, что композитор. Латышский поэт Райнис остался в резерве, а алкаша Васильича и Атанасиуса Перната ИИ исключил. Последнего по причине того, что без Мириам он не раскроет свой потенциал 😂

В общем, иногда хочется посмеяться над подобным абсурдом 🤖

DEV: Рубиновые тона

28 Oct, 12:06


Давненько не говорили про Angular. В этом уроке мы узнаем, как перевести приложение Angular с помощью Transloco. https://www.youtube.com/watch?v=VlOPXg-wFGI

DEV: Рубиновые тона

24 Oct, 17:21


В субботу вечером поговорим о том, как подготовить свои Github Actions для публикации и как опубликовать их на Github Marketplace! ☁️ https://youtube.com/live/rfoG477QZV0?feature=share

DEV: Рубиновые тона

20 Oct, 14:00


Завтра вечером говорим про токены и wrapped ether 💸 https://youtube.com/live/RvwmDKux3eo?feature=share

DEV: Рубиновые тона

20 Oct, 00:07


Наткнулся на забавный "starter pack" (ну, как бы "стартовый набор", но в шутку) https://www.reddit.com/r/starterpacks/comments/1g75tcf/touristy_european_location_starter_pack/ Это про туристические места в Европе. Ну, как это говорилось у Тэффи: жить в анекдоте ведь совсем не весело, а, скорее, грустно.

Не сказать, что у нас тут так много туристов, но всё-таки исторический центр, старый город. Количество баров действительно легендарное, равно как и количество не вполне трезвых британцев вечером в пятницу. Впрочем, они почти всегда безобидные, только мусорят.

И действительно - магазины с "как бы каннабисом" тоже имеются, но это "легальная" трава, то есть по факту медицинская, это вообще не наркотик. Ну, кто-то на это покупается, наверное. Впрочем, добрые души есть. Как-то ко мне подошёл какой-то забулдыжный дядька и по-дружески предложил косяк.

Что касается типичных "ловушек" для туристов - их, кажется, почти и нет. Ну, есть не слишком вкусные рестораны с завышенными ценами, но их не особенно много. Есть пару мест, куда зазывают богатых англичан прекрасные дамы, но там и без того всё довольно очевидно. Как-то ко мне обратился парень из Швеции, спрашивал насчёт места поужинать. А я подумал, что после девяти часов вечера особенно и пойти-то некуда - к десяти часам почти всё закрывается за исключением нескольких пабов. У скандинавов с этим всё несколько лучше; одна беда - простой ужин будет стоить в районе 100 евро...

А так - тишь, гладь, божья благодать. Если, конечно, не забредать в какие-нибудь отдалённые районы. Вряд ли что случится, но всё же. К сожалению, в некоторых других странах сейчас всё куда хуже. Мой родственник уже лет 20 живёт во Франции, ну там в пригородах Парижа есть места, куда даже полиция не суётся. Впрочем, про это я кажется уже рассказывал... А так - инвентаризация произведена, скоро увидимся 😂

DEV: Рубиновые тона

16 Oct, 23:16


Я тут набрёл на одну статью - она, в общем, достаточно печальная, но жизненная. Девушка помладше меня рассказывает, как трудно найти себя в этой жизни. Что ж, и правда - для трудной дороги жизненного счастья нужны ноги длинные, как писала Тэффи... Не скажу, что во мне эта статья откликнулась в положительном ключе, но кое-какие мысли появились. Захотелось даже обсудить, но не вполне ясно, надо ли проводить такие стримы про "поговорить" (ведь ИИ уже с этим уже справляется, см. запись чуть выше)

https://holod.media/2024/10/17/mne-33-i-ya-ne-znayu-kem-stanu-kogda-vyrastu/

DEV: Рубиновые тона

13 Oct, 13:54


А завтра вечером стрим, говорим про DAO и Governance https://youtube.com/live/lP5Qg4VB1nI?feature=share

DEV: Рубиновые тона

13 Oct, 11:33


Торжество навыка "говорить обо всём и ни о чём с умным видом". ИИ создал "подкаст" на основе документа, который состоит лишь из двух слов - poop и fart, написанных 1000 раз. С умным видом "ведущие" обсуждают, можно ли найти смысл в бессмыслице.

А самое страшное в том, что если не знать подоплёки, то и не отличишь от реальной записи. Попробуйте на досуге скинуть кому-нибудь, не объясняя контекст (можно дать подводку, что дескать психологи обсуждают странное письмо, присланное неким человеком) 😂 https://www.youtube.com/watch?v=ftg7UC3CGjc

DEV: Рубиновые тона

11 Oct, 20:27


Сегодня музыка: Radical Dreamers ~ 盗めない宝石 (Chrono Cross OST cover)

Это наш самый крупный проект за последнее время, на который ушло какое-то легендарное время, но в целом получилось неплохо. Это кавер, но в более классической версии, на саундтрек из одной старой игры. 🎻

https://soundcloud.com/ravens-die-laughing/radical-dreamers-chrono-cross-ost-cover

DEV: Рубиновые тона

07 Oct, 22:54


Советую обратить внимание на решение tsup, построенное на основе esbuild - отличная и быстрая замена tsc. Правда, если нужно тестировать типы, то всё равно tsc нужен 😂 Но вообще я тут недавно перешёл, очень нравится https://tsup.egoist.dev/

DEV: Рубиновые тона

30 Sep, 20:46


Вы спрашивали - мы отвечаем. Что такое API (на примере бара), зачем это всё надо и как его сделать https://www.scrapingbee.com/blog/api-for-dummies-learning-api/

DEV: Рубиновые тона

29 Sep, 22:25


А вы слышали историю о Джеймсе Боуэне и его коте? Джеймс - самый обычный мужчина из Великобритании, которого очень сильно потрепала жизнь. В результате, он подсел на наркотические вещества и, фактически, оказался на улице, как это, к сожалению, и бывает в таких случаях.

Промышлял он игрой на гитаре, зарабатывая совсем небольшие деньги. Однако его жизнь изменилась в один (обычный и не слишком прекрасный день), когда Джеймс неожиданно встретил некоего уличного кота. Такой себе рыжий котяра, коих полно в любом городе.

Странность заключалась в том, что котяра никак не желал уходить. То есть да, он не сидел на одном месте, но регулярно возвращался к Джеймсу и торчал рядом, пока тут бренчал на гитаре. В итоге люди, постоянно проходящие мимо уличного музыканта, стали приносить подарки для котика - ну, к примеру, шарфы, вкусняшки. При всём при этом Джеймс совершенно не хотел называть кота "своим", ведь он сам не представлял, где окажется завтра. Не помогало ситуации и то, что особо сердобольные граждане утверждали, что он насильно держит у себя кота, не давая тому уйти.

Но это, вероятно, была судьба. В итоге кот, получивший имя Боб, остался с Джеймсом. Тот понял, что теперь отвечает не только за себя, и титаническим усилием воли отказался от наркотиков. Совсем. Этому, конечно, поспособствовала благотворительная организация, помогающая перейти с тяжёлых веществ на более безопасные заменители. Потом о его истории услышали другие люди, а профессиональный писатель помог написать историю жизни, которая вышла под названием "Уличный кот по имени Боб". Это совсем простая книга, без каких-либо заумностей. История жизни неплохого человека, который сбился с пути, но сумел взять себя в руки благодаря рыжему коту.

Потом выходили продолжения, сняли фильм, у Джеймса брали автографы, Бобу приносили подарки, он же приветствовал фанатов фирменным жестом "дай пять". Вот так может измениться жизнь, когда ты совсем этого не ждёшь.

Впрочем, господа присяжные заседатели, жизнь - далеко не сказка, и эта история не получила счастливого финала. Джеймс, разбогатевший после такого успеха, обзавёлся собственным домом и перестал выпускать Боба на улицу, что, конечно, весьма разумно; у него был доступ только в огороженный дворик. Однако в какой-то момент кот каким-то образом сумел выйти за ограду и попал под машину - Боба доставили в клинику, но констатировали смерть. Ему было около 15 лет.

С этого момента, судя по всему, Джеймс снова ударился во все тяжкие. Его бросил агент, он потерял дом, и вновь оказался на улице, живя милостями благотворительного центра. В какой-то момент он снова вернулся к наркотикам, но теперь утверждает, что больше ни к чему подобному не прикоснётся.

https://www.youtube.com/watch?v=4HovJoMVtt0

DEV: Рубиновые тона

29 Sep, 20:04


Вышли новые рекомендации по использованию паролей от национального института стандартов и технологии. В общем-то, многие вещи и так относительно очевидны, но зафиксируем:

- Заставлять юзеров в каждом пароле использовать 1 специальный символ, 1 букву, 1 цифру, 2 прихлопа, 3 притопа особенного смысла не имеет. Куда важнее длина пароля

- Минимальная длина должна быть 8 символов, но лучше хотя бы 15. Использование пасс-фраз весьма рекомендуется

- Заставлять менять пароли каждый день - тоже плохая идея. Это может, наоборот, приводить к тому, что пароли будут становиться менее надёжными (до известных пределов) и юзеры будут делать минимально необходимые изменения, которые даже потенциально можно угадать

- Пароли необходимо хэшировать с использованием соли. Использовать алгоритмы медленного хэширования - тоже хорошая идея (мы про это говорили в одном из уроков)

- Предлагать пользователям ввести какой-нибудь контрольный вопрос - тоже не супер-хорошая идея, так как эти ответы можно получить путём социального инжиниринга. Хотя самые хитрые вводят совершенно не относящиеся к делу ответы, типа "Девичья фамилии матери?" - "Купи слона"

- Двухфакторная аутентификация - это хорошо

https://cybersecuritynews.com/nist-rules-password-security/

DEV: Рубиновые тона

28 Sep, 17:55


Для пользователей Hygraph у меня тут вышла статья о пользе локализации и зарядке по утрам (ну, может про зарядку там и нет) https://hygraph.com/blog/manage-multilingual-products-with-hygraph-and-lokalise

DEV: Рубиновые тона

23 Sep, 23:51


Кто-то запостил с подписью "you don't need Spotify". Да уж, было время

DEV: Рубиновые тона

23 Sep, 17:38


В этом уроке по Solidity и Ethereum мы поговорим про паттерн CREATE3. С его помощью можно разворачивать контракты на адреса, которые зависят только от msg.sender и salt, но не от разворачиваемого байткода. Мы узнаем, как этот паттерн устроен и как его реализовать. https://www.youtube.com/watch?v=Mj3Q5HZz_04

DEV: Рубиновые тона

22 Sep, 15:53


Что ж, видимо наши прогнозы по "тапанию хомяка" оказались более-менее верным. Выигрывают устроители лавочки, а пользователи получат крохи от этого пирога https://cq.ru/articles/gaming/skolko-stoit-token-hamster-kombat-tsena-khomiak-koina-v-rubliakh

DEV: Рубиновые тона

19 Sep, 22:44


Давно вас не радовал умными и не очень мыслями, хотя их есть у меня. А поговорить хотелось бы о том, о чём не все и не всегда задумываются, особенно в ранней молодости: о некоторых здоровых и не очень привычках. А ведь уже сформировавшие дурные привычки потом сложно изменить...

Честно говоря, обычно думать об этом не очень хочется, мне в том числе. Какая разница - все и так планируют жить лет до ста, а уж раньше-то жили по 150 лет минимум (и ростом были по 5 метров).

Увы и ах - привычки имеют неприятное свойство подкрадываться незаметно и бить стулом по голове. Но, с другой стороны, их можно менять и постепенно привыкать к новым полезным практикам. Нет, я не планирую делиться волшебными таблетками или что-либо рекламировать, не беспокойтесь. Просто некоторые соображения по теме.

Задумался я об этом всём тогда, когда как-то набрал вес и сильно увлёкся горячительным. С Джоном Ячменное зерно связь всё равно периодически приходится поддерживать - она сформировалась много лет назад, когда я чуть не заехал на психушку, а затем буквально заново учился есть. Такие штуки проходят долго и не слишком легко, однако и с этим кое-что получилось сделать.

Но во многом упор был сделан на пищевые привычки, которые за последние лет 10 удалось несколько перестроить. Теперь, спустя все эти годы, я могу сказать честно - это того стоит. Не сказать, что раньше я каждый день питался, как герой фильма Super size me, но бывало всякое. Теперь "всякого" не бывает почти никогда и это несколько помогает жить.

Делюсь я этим потому, что мой девиз остаётся прежним - "я просто хотел помочь". Слушать данные советы или нет - дело хозяйское, мы тут все относительно большие мальчики-девочки. Итак, основные моменты.

Vispirmais, забудьте слово "фаст-фуд". Да, фаст-фуда больше не существует от слова "совсем". Вы туда не ходите и ничего оттуда не заказываете, даже если никто-никто про это никогда не узнает. Скажу, честно последний раз что-либо я ел в фаст-фуде полгода назад (жена очень захотела жареных крыльев, я попробовал парочку), а до этого - три года назад. Самый максимум - диетическая шаурма с нежирным соусом, но в этом случае это единственное блюдо на ужин.

Больше того, здесь вообще ресторанов известной сети не так много, потому что имеются довольно качественные и недорогие места, если финансы не позволяют замахнуться на что-то более презентабельное.

Далее, количество разнообразных снеков мы снижаем практически до нуля. Как можно меньше чипсов и сухарей. Если неймётся - можно какие-нибудь хлебцы или мелкие "хрустелки" с отрубями. Хорошая штука. Хотя в идеале лучше заменить мини-морковью или чем-то таким. Особенно не советую хрумкать чипсы перед сном, чтобы не было ощущения, что во рту ночевал табор цыган.

Красного мяса как можно меньше, в идеале никакой свинины. Дело не только и не столько в каких-то религиозных вещах, а просто в пользе. Куда лучше курица или что-нибудь типа кролика. Как хоббит, кролика я уважаю особенно и делаю по особому хоббичьему рецепту. Рыба - это тоже очень хорошо, Голлум не даст соврать.

Вообще, присмотритесь к азиатской кухне, если ещё не. У этих ребят много вполне полезных и очень вкусных блюд. К сожалению, мои любимые китайцы, о которых я как-то рассказывал, съехали, а корейцы перебрались на другой конец города, но эти кухни занимают особое место в сердце.

Прекратите налегать на сладкое. Серьёзно, количество шоколада лучше снизить до минимума. Не помню, когда я последний раз брал шоколад, но это всегда что-то с содержанием какао 70%+ или поделка без сахара и из каких-то водорослей (не знаю, не спрашивайте, но вкусно).

Вероятно, латте с солёной карамелью - это очень круто, а burbļu tēja - так вообще (это такой чай с шарами), но всё это сильно калорийно. Шары делаются из тапиоки, которую котируют бедняки, так как дешёво и нажористо. Лучше чёрный кофе со свежим соком или просто сок какой-нибудь свеклы без сахара. Бонусом можно почувствовать себя вампиром.

DEV: Рубиновые тона

19 Sep, 22:44


Конечно, алкоголь лучше минимизировать, если есть возможность. Ну, по крайней мере контролировать это дело, чтобы не стать рабом того самого супер-героя Ячменное зерно. Об этом интересно пишет Джек Лондон, почитайте на досуге. Кстати, любителям этого дела советую принимать магний. Таблетки такие, обычно продаются без рецепта. Про курение даже не говорю.

И да - давайте начинать двигаться. Не стоит везде ездить на машине или электросамокате. Купите велосипед. Ходите пешком. Я понимаю, что это не всегда и не всем доступно, но стоит стремиться. А делать простые упражнения можно и квартире - для этого не нужно платить сотни евро за абонемент в зале.

В мире, где царит такой хаос, стоит по крайней мере взять под контроль собственную жизнь, насколько это возможно. Через полгода вы почувствуете себя куда лучше, поверьте.

https://music.youtube.com/watch?v=i2i_jtU8IgM&feature=shared

DEV: Рубиновые тона

16 Sep, 12:10


Solidity и Ethereum #84 | ERC6909: Minimal Multi-Token Interface | И снова стандарт для токенов!

Залетайте на стрим вечерком. https://www.youtube.com/watch?v=hssO7t72e-0

DEV: Рубиновые тона

14 Sep, 12:53


Набор "низкоуровневых" уязвимостей смарт-контрактов (не на solidity). Многие в том или ином виде мы уже встречали, но вообще любопытная штука https://github.com/AmadiMichael/LowLevelVulnerabilities

DEV: Рубиновые тона

13 Sep, 12:42


Ещё раз о GH Actions и о цене опечатки. Здесь подробно описано, что нужно быть очень аккуратным при подключении каких-либо действий. Злоумышленник может создать действие с названием, очень похожим на "настоящий" action (к примеру, action/checkout вместо actions/checkout), которое делает нечто очень неприятное. Ну, к примеру, каким-то образом меняет код. Поэтому будьте осторожны https://orca.security/resources/blog/typosquatting-in-github-actions/

DEV: Рубиновые тона

09 Sep, 13:17


Залетайте сегодня вечером! В этот раз мы поговорим о стандарте ERC2535: Diamonds, Multi-Facet Proxy, который позволяет создавать сложные прокси. https://youtube.com/live/ceWpA6EwDXg?feature=share