Хоумпэйдж на задворках • НавигацияОбо мне

Позднее Ctrl + ↑

Команда git stash: для чего нужна и как работает

Команда git stash в Git используется для временного сохранения (или «прихоронения») изменений в рабочем каталоге, чтобы вы могли вернуться к чистому состоянию репозитория. Это полезно, когда вам нужно переключиться на другую ветку или выполнить другую задачу, но вы не хотите коммитить незавершенные изменения.

Подробнее — в этой небольшой заметке.

Команда git stash

Когда вы выполняете команду git stash, Git сохраняет ваши изменения (как в отслеживаемых, так и в неотслеживаемых файлах) и возвращает рабочий каталог в состояние последнего коммита. Вы можете позже восстановить эти изменения.

Основные команды и примеры:

✵ Сохранение изменений в stash:

git stash

Это сохранит все изменения в отслеживаемых файлах и вернет рабочий каталог в состояние последнего коммита.

✵ Сохранение изменений с сообщением:

git stash save "Сообщение о стэше"

Это позволяет вам добавить описание к вашему stash, что может быть полезно для идентификации изменений позже.

✵ Просмотр списка сохраненных stash:

git stash list

Эта команда покажет список всех сохраненных stash с их идентификаторами и сообщениями.

✵ Восстановление изменений из stash:

git stash apply

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

✵ Восстановление конкретного stash:

git stash apply stash@{1}

Здесь stash@{1} — это идентификатор конкретного stash, который вы хотите восстановить.

✵ Удаление stash после применения: если вы хотите удалить stash после его применения, используйте:

git stash pop

Эта команда применит изменения и удалит их из списка stash.

✵ Удаление конкретного stash:

git stash drop stash@{0}

Это удалит указанный stash из списка.

✵ Очистка всех stash:

git stash clear

Эта команда удалит все сохраненные stash.

Пример использования:

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

✵ Вы сохраняете свои изменения:

git stash

✵ Переключаетесь на ветку main:

git checkout main

✵ Исправляете ошибку и коммитите изменения.

✵ Возвращаетесь к ветке feature:

git checkout feature

✵ Восстанавливаете свои изменения:

git stash pop

Теперь вы можете продолжить работу над своей функцией с сохраненными изменениями.

Получил два новых сертификата в школе PurpleSchool

По Git’у и общим принципам современной разработки.

PurpleSchool сертификат PurpleSchool сертификат

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

Основатель и преподаватель школы — разработчик Антон Ларичев, и мне очень нравится, как он объясняет материал. Пока закончил два модуля и буду двигаться дальше.

Мои области развития потихонечку, но ползут вперёд:

PurpleSchool карта развития фронтенд

Если вам тоже хочется развиваться в этом направлении — вот ссылка на курс, который я сейчас сам прохожу.

Display: flex

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

Сегодня говорим про свойство display: flex .

Display: flex CSS

display: flex — это свойство CSS, которое позволяет управлять расположением элементов внутри контейнера, превращая его в так называемый «флекс-контейнер». Давайте представим, что у нас есть коробка (контейнер) с игрушками (элементами). Display: flex дает нам инструменты, чтобы упорядочить эти игрушки в ряд, колонку или как-нибудь по-другому, как нам нужно.

Где применяется?

  • Навигационные меню: для выравнивания пунктов меню.
  • Карточки продуктов: для создания гибких сеток товаров.
  • Формы: для выравнивания полей ввода и кнопок.
  • Галереи изображений: для создания адаптивных галерей.

Как это работает?

Когда вы применяете display: flex к контейнеру, все его непосредственные дочерние элементы становятся flex-элементами. Это означает, что вы можете управлять их размером, порядком и выравниванием с помощью различных свойств Flexbox.

Основные свойства:

flex-direction — определяет направление, в котором располагаются flex-элементы (по горизонтали или вертикали).
row (по умолчанию) — элементы располагаются в строку.
column — элементы располагаются в столбик.
justify-content — определяет, как элементы распределяются по основной оси (горизонтально или вертикально).
flex-start — элементы выравниваются по началу.
flex-end — элементы выравниваются по концу.
center — элементы выравниваются по центру.
space-between — элементы распределяются с равными промежутками между ними.
space-around — элементы распределяются с равными промежутками вокруг них.
align-items — определяет, как элементы выравниваются по поперечной оси (перпендикулярно основной оси).
flex-start — элементы выравниваются по началу.
flex-end — элементы выравниваются по концу.
center — элементы выравниваются по центру.
baseline — элементы выравниваются по базовой линии текста.
stretch — элементы растягиваются, чтобы заполнить контейнер.

Примеры кода:

Простой пример применения флексбокса:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Пример</title>
    <style>
        .container {
            display: flex; /* Включаем Flexbox */
            flex-direction: row; /* Элементы располагаются в строку */
            justify-content: space-between; /* Равные промежутки между элементами */
            align-items: center; /* Выравнивание по центру по вертикали */
            height: 100px; /* Высота контейнера */
            background-color: #f0f0f0; /* Цвет фона контейнера */
            padding: 10px; /* Отступы внутри контейнера */
        }

        .item {
            background-color: #4CAF50; /* Цвет фона элементов */
            color: white; /* Цвет текста */
            padding: 20px; /* Отступы внутри элементов */
            border-radius: 5px; /* Закругленные углы */
        }
    </style>
</head>
<body>

<div class="container">
    <div class="item">Элемент 1</div>
    <div class="item">Элемент 2</div>
    <div class="item">Элемент 3</div>
</div>

</body>
</html>
  • В этом примере мы создали контейнер с классом container, который использует display: flex.
  • Элементы внутри контейнера (с классом item) располагаются в строку благодаря flex-direction: row.
  • Свойство justify-content: space-between распределяет элементы с равными промежутками между ними.
  • Свойство align-items: center выравнивает элементы по центру по вертикали.

Пример с навигационным меню:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flexbox Menu</title>
    <style>
        .menu {
            display: flex; /* Включаем flexbox */
            list-style-type: none;
            padding: 0;
            margin: 0;
        }
        .menu li {
            margin-right: 20px;
        }
    </style>
</head>
<body>
    <nav>
        <ul class="menu">
            <li>Главная</li>
            <li>О нас</li>
            <li>Услуги</li>
            <li>Контакты</li>
        </ul>
    </nav>
</body>
</html>
  • Здесь .menu использует display: flex для выравнивания пунктов меню в строку.
  • Свойство list-style-type: none убирает маркеры списка для навигационных пунктов.

Свойство display и значения inline, block, inline-block

Объясняя читателям одну из самых непростых тем в CSS, я сам лучше закрепляю эти знания.

Свойство display и его значения inline, block, inline-block

Свойство display в CSS определяет, как элемент отображается на веб-странице. Оно влияет на поведение элемента, его размеры, расположение и взаимодействие с другими элементами.

В зависимости от значения, элемент может быть:

Строчным (inline) — отображается как часть текста, занимает столько места, сколько нужно для его содержимого. Идеально для коротких фрагментов (слова, аббревиатуры, ссылки) или элементов, которые должны «плыть» в тексте, не создавая новых строк.
Блочным (block) — отображается как отдельный блок, занимает всю ширину родительского элемента, имеет отступ сверху и снизу. Данное свойство балансирует макет, формирует блоки контента (заголовки, параграфы, кнопки) и позволяет применять фиксированную ширину и высоту.
Строчно-блочным (inline-block) — сочетает в себе свойства inline и block, отображается как часть текста, но может иметь ширину и высоту, а также отступы. Например, идеально подходит для вёрстки навигационных меню, карточек, элементов с фиксированной формой внутри динамичного контента.

Применение

В современной веб-разработке display используется повсеместно:

✵ структурирование контента: с помощью display: block можно создавать разделы, блоки текста, заголовки и другие элементы, которые должны занимать всю ширину родительского элемента.
✵ оформление элементов: display: inline-block позволяет размещать элементы в строке, но при этом задавать им ширину и высоту, что позволяет создавать более сложные макеты.
✵ скрытие элементов: с помощью display: none можно скрывать элементы с страницы, что удобно для управления отображением контента.
✵ создание гибких макетов: display в сочетании с другими свойствами CSS позволяет создавать сложные макеты с адаптивным отображением элементов на разных устройствах.

Примеры:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Пример display</title>
    <style>
        .inline {
            display: inline;
            background-color: lightblue;
            padding: 10px;
        }

        .block {
            display: block;
            background-color: lightgreen;
            padding: 10px;
            margin-bottom: 10px;
        }

        .inline-block {
            display: inline-block;
            background-color: lightcoral;
            padding: 10px;
            width: 100px;
            height: 50px;
        }
    </style>
</head>
<body>
    <div class="inline">Inline элемент</div>
    <div class="inline">Inline элемент</div>
    <div class="block">Block элемент</div>
    <div class="block">Block элемент</div>
    <div class="inline-block">Inline-block элемент</div>
    <div class="inline-block">Inline-block элемент</div>
</body>
</html>

Что такое веб-доступность?

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

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

Сегодня говорим о веб-доступности и о том, зачем она нужна.

Что такое веб-доступность и как она работает?

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

Основные понятия веб-доступности:

  1. Перцептивность (Perceivable): Информация и элементы интерфейса должны быть представлены таким образом, чтобы их могли воспринимать все пользователи. Например, добавление текстовых описаний к изображениям для людей с нарушениями зрения.
  1. Управляемость (Operable): Пользователи должны иметь возможность взаимодействовать с интерфейсом всеми доступными способами, включая клавиатуру и вспомогательные технологии. Например, все функции сайта должны быть доступны с клавиатуры.
  1. Понятность (Understandable): Интерфейс и его элементы должны быть понятны и предсказуемы. Например, использование простого и ясного языка, а также логичная структура навигации.
  1. Надежность (Robust): Контент должен быть доступен и корректно отображаться на различных устройствах и с использованием различных вспомогательных технологий. Например, использование стандартов HTML и CSS.

Основные задачи веб-доступности:

  1. Добавление альтернативного текста (alt-текста) к изображениям: Это помогает людям с нарушениями зрения понять, что изображено на картинке.
  1. Создание доступной навигации: Убедитесь, что все элементы навигации доступны с клавиатуры и имеют логичную структуру.
  1. Использование семантической разметки: Правильное использование HTML-тегов помогает вспомогательным технологиям правильно интерпретировать контент.
  1. Контрастность цветов: Убедитесь, что текст контрастирует с фоном, чтобы его было легко читать людям с нарушениями зрения.
  1. Тестирование с помощью вспомогательных технологий: Проверяйте ваш сайт с использованием экранных читалок и других вспомогательных технологий, чтобы убедиться в его доступности.

Почему это важно?

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

Дополнительные материалы для изучения:

Что такое веб-доступность и как научиться делать доступные сайты
Доступность — Doka Guide
Доступность — Result School
Доступность от Google
ТОП-5 проблем с доступностью, которые чаще всего игнорируют
Основы веба, которые должен знать начинающий разработчик
Веб-разработчик: кто это, что делает, сколько зарабатывает и как им стать
Веб-технологии для разработчиков | MDN

Как работают протоколы TCP/IP? Если совсем по-простому

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

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

Начинаем с базы: TCP/IP.

Как работают протоколы TCP/IP

База TCP/IP

Протоколы TCP/IP — это основа интернета, которая позволяет компьютерам и другим устройствам обмениваться данными. Давайте разберем это на простом примере.

Представьте себе почтовую службу.

  1. IP (Internet Protocol) — это как адрес на конверте. Он указывает, куда нужно доставить данные. Каждый компьютер в сети имеет уникальный IP-адрес, как дом имеет свой почтовый адрес.
  1. TCP (Transmission Control Protocol) — это как почтальон, который следит за тем, чтобы письмо дошло до адресата. Он разбивает данные на маленькие кусочки (пакеты), отправляет их и проверяет, что все пакеты дошли в правильном порядке и без ошибок.

И как это работает вместе?

  • Отправка данных — когда вы отправляете данные (например, сообщение или файл), TCP разбивает их на пакеты и нумерует их.
  • Маршрутизация — IP отвечает за то, чтобы каждый пакет нашел правильный путь к получателю, даже если они идут разными маршрутами.
  • Получение данных — на стороне получателя TCP собирает пакеты обратно в исходное сообщение и проверяет, что все пакеты на месте и в правильном порядке.

Представьте, что вы отправляете письмо другу. Вы пишете письмо (данные), кладете его в конверт и пишете адрес (IP). Почтальон (TCP) берет конверт, проверяет адрес и доставляет его вашему другу. Если письмо потеряется, почтальон попросит вас отправить его снова.

Пример простейшего TCP-соединения

Ниже представлен листинг простейшего TCP-соединения на Python. Этот код включает сервер и клиент, которые могут обмениваться сообщениями.

Код сервера:

import socket

# Настройки сервера
HOST = '127.0.0.1'  # Локальный хост
PORT = 65432        # Порт для прослушивания

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    print(f"Сервер запущен на {HOST}:{PORT}")
    conn, addr = s.accept()
    with conn:
        print(f"Подключение от {addr}")
        while True:
            data = conn.recv(1024)
            if not data:
                break
            print(f"Получено: {data.decode()}")
            conn.sendall(data)

Код клиента:

import socket

# Настройки клиента
HOST = '127.0.0.1'  # Серверный хост
PORT = 65432        # Порт сервера

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Привет, сервер!')
    data = s.recv(1024)

print(f"Получено от сервера: {data.decode()}")

Как работает этот код?

  1. Сервер — создает сокет, привязывает его к адресу и порту, и начинает слушать входящие соединения.
  2. Клиент — создает сокет и подключается к серверу.
  3. Обмен сообщениями — клиент отправляет сообщение серверу, сервер получает его и отправляет ответ.

Дополнительный материал для изучения темы:

TCP — Википедия
Что такое TCP/IP и как работает этот протокол
Что такое TCP/IP — как работает, как настроить на Windows, MacOS
Что такое TCP/IP: Объясняем на пальцах — видео
TCP/IP: что это и зачем нужно — видео
Стек протоколов TCP/IP. Особенности технологии и многоуровневая модель — видео
Как настроить протокол TCP/IP: пошаговая инструкция для начинающих
Протоколы семейства TCP/IP. Теория и практика / Хабр
TCP: Transmission Control Protocol
Модель TCP/IP: что такое уровни и протоколы? Стек TCP/IP

А вы слышали про Audius?

Ну что, самое время нырять в крипту?

Audius Music Service

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

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

На скрине ниже — красивый визуалайзер, который появляется, когда играет какой-нибудь трек.

Audius Music Service Audius Music Service

Надеюсь, кто-нибудь когда-нибудь занесёт мне крипто-копеечку за мои музыкальные труды. Если что, ссылочка вот: https://audius.co/tatuuma

Ах да. Audius недоступен в России без ВПН.

Из чего состоит бренд?

Сейчас читаю очень интересную книжку Джона Сонмеза «Гибкие навыки» и мне в ней понравилась глава под названием «Из чего состоит бренд?». Надеюсь, не нарушу ничьи права, если коротенько поделюсь основными тейками из этой главы.

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

Из чего состоит бренд? Четыре элемента бренда

Посыл

Первый и самый важный элемент — это посыл. У бренда без посыла нет цели. Посыл — это мысли и чувства, которые вы пытаетесь передать с помощью своего бренда. Когда вы создаёте собственный бренд, вам нужно определиться с главным посылом. Какой посыл у вашего бренда? Какой цели вы пытаетесь достигнуть? Например, в основе брен­да автора книги Джона Сонмеза Simple Programmer лежит посыл «делать все сложное простым». Посыл заключается в том, что автор берёт сложные концепции и объясняет их так, чтобы его мог понять каждый.

Изображения

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

Вы можете создать логотип даже в том случае, если ваш бренд — это ваше личное имя. По правде говоря, такие ситуации случаются очень ча­сто: многие люди используют в качестве логотипа свои имена. Если открыть браузер и поискать «логотип бренда», то найдётся множе­ство хороших примеров, которыми можно вдохновиться.

Последовательность

Третий элемент — это последовательность, или постоянность. У вас может иметься хо­роший посыл и логотип, но если вы непоследовательны, то вы не сможете создать ожидания от своего бренда. Но что еще хуже, вы можете начать предавать свои идеалы и посыл. Представьте, что случится, если вы зай­дёте в несколько ресторанов McDonalds, а в каждом из них будут разные меню и цены. Тогда бренд потеряет огромную часть стоимости. Когда вы идёте в McDonalds, у вас есть определенные ожидания насчет того, каким будет ваш опыт. Но если этот опыт постоянно меняется, если бред непоследователен, то всё теряет смысл.

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

Многократное воздействие

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

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

Альбом Tatuuma — Business Customs вышел!

Ну что, вот он, момент истины: результаты моих творческих трудов последних (почти) полутора лет можно послушать сегодня. Вот уже прямо сейчас.

Tatuuma — Business Customs (2024)

Встречайте новую пластинку Татуумы под названием Business Customs — она и про меня прошлого, и про меня настоящего, и про меня (надеюсь) будущего. Здесь и грустный дэнс, и старомодный синти-поп 90-х, и даже неловские попытки в хип-хоп. Наверное, самая личная вещь получилась.

За обложку огромная благодарность Андрею Исакову — моему неизменному персональному Антону Корбейну имении Татуумы.

Ссылка на площадки:

Альбом можно послушать на всех основных музыкальных платформах: https://band.link/businesscustoms

Слушать альбом целиком на YouTube:

Синглы с альбома:

На некоторые треки я постарался сделать интересный видеоряд.

Слушать альбом в Яндекс.Музыке:

Буду рад вашим прослушиваниям, лайкам и отзывам. Спасибо за внимание к моему творчеству!

Hearthis.at x Tatuuma = ♥

Обожаю эти несколько степеней офигевания. Особенно под вечер перед сном.

Hearthis.at Tatuuma Artist

Сначала ты офигеваешь, что существует такая прикольная альтернатива Саундклауду, как Hearthis.at. Довольно быстрая, кастомизируемая и дружелюбная платформа для меломанов и музыкантов.

Потом офигеваешь, что ты на этой платформе как артист уже присутствуешь (Что?! Когда и как я там зарегистрировался и уж тем более успел накидать туда своих треков?). Ну да ладно, прикольно.

А уже аккурат перед сном ты окончательно обескуражен цифрой прослушиваний твоей музыки на этом сайте. Например, у трека Light Room целых 17 тысяч прослушиваний! ПРОСТО ЧТО ВООБЩЕ ПРОИСХОДИТ?

Ну ладно, в любом случае, это приятно: я восстановил доступ, загрузил последний трек для приличия, обновил ссылки и шапку профиля.

Кому интересно: https://hearthis.at/tatuuma/

Ранее Ctrl + ↓