Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
🔥 Дрифт и гонки без правил!
Садись за руль, жги резину и уноси баллы в безумных поворотах!
🚗 Реалистичный дрифт
🏁 Захватывающие трассы
💨 Улучши свою тачку и побеждай!

Дрифт Без Лимита

Гонки, Симуляторы, Спорт

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Code

964 поста сначала свежее
5
Uncle.Shrimp
Uncle.Shrimp
26 дней назад

Как установить библиотеку GLFW3 на Windows 10, Microsoft Visual Studio 2022⁠⁠

Здравствуйте! Я увлекся программированием графики на C++ и решил написать свой 2D движок под это дело, но столкнулся с проблемой - не мог установить нужную для моей задумки библиотеку GLFW. В интернете всё было слишком сложным и непонятным. Я пытался через vcpkg, но не получилось.
В конце концов я разобрался и сейчас решил поделиться находками здесь. Мало ли, может кому-то пригодится.

Начнем со скачивания библиотеки с официального сайта.
Качаем pre-compiled версию.

Как установить библиотеку GLFW3 на Windows 10, Microsoft Visual Studio 2022 Программирование, IT, Длиннопост

После скачивания распаковываем в удобную для вас папку.

Как установить библиотеку GLFW3 на Windows 10, Microsoft Visual Studio 2022 Программирование, IT, Длиннопост

Вот так это выглядит у меня

Открываем папку. Внутри это должно выглядеть так :

Как установить библиотеку GLFW3 на Windows 10, Microsoft Visual Studio 2022 Программирование, IT, Длиннопост

Для версии Microsoft Visual Studio 2022, нам, как понятно, понадобится открыть папку lib-vc2022.

Как установить библиотеку GLFW3 на Windows 10, Microsoft Visual Studio 2022 Программирование, IT, Длиннопост

В ней должны быть эти файлы

Файлы

glfw3.lib

glfw3_mt.lib

glfw3dll.lib

Нужно скопировать в следующую папку :

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\lib\x64

Файл

glfw3.dll

Копируем в эту папку :

C:\Windows\SysWOW64

Последнее, что надо скопировать - это файлы из папки include (на третьем скриншоте) :

glfw3.h

glfw3native.h

В папку : (папку GLFW я сам создал)

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include\GLFW

На этом с копированием всё. Теперь надо настроить сам проект.

Для этого нажимаем правой кнопкой мыши на заголовок проекта, как на скрине и выбираем Properties.

Как установить библиотеку GLFW3 на Windows 10, Microsoft Visual Studio 2022 Программирование, IT, Длиннопост

Последнее, что надо сделать - во вкладке Linker -> Input -> Additional Dependencies указать как на скрине :

glfw3.lib

glfw3_mt.lib

glfw3dll.lib

Как установить библиотеку GLFW3 на Windows 10, Microsoft Visual Studio 2022 Программирование, IT, Длиннопост

Не забываем нажать Apply и всё!

Как установить библиотеку GLFW3 на Windows 10, Microsoft Visual Studio 2022 Программирование, IT, Длиннопост

Теперь можем в начале кода написать

#include <GLFW/glfw3>

И работать на здоровье!

Если кто-нибудь попросит, могу написать, как устанавливать glew, чтобы полноценно работать с 2D графикой.

Надеюсь, кому-то поможет! Критика и замечания приветствуются! Спасибо за внимание!

Показать полностью 7
Программирование IT Длиннопост
7
10
psyvld
26 дней назад

Опаньки, Фортран⁠⁠

Опаньки, Фортран
СССР Информатика Школа Программирование Языки программирования
8
2
user7359809
26 дней назад

История Linux, Minix и GNU: краткий обзорMinix — учебная⁠⁠

Minix — учебная операционная система

  • Создана Эндрю Таненбаумом в 1987 году как лёгкая микроядерная ОС для образовательных целей.

  • Имеет микроядерную архитектуру, была предназначена для изучения принципов ОС.

  • Содержит собственное ядро и базовый набор утилит.

Linux — монолитное ядро, родившееся в Minix-среде

  • Линус Торвальдс начал разработку ядра Linux в 1991 году, используя Minix как платформу для разработки и тестирования.

  • Первые версии Linux использовали некоторые библиотеки и утилиты из Minix (например, перекомпилированный shell bash, стартовые библиотеки).

  • Linux — самостоятельное монолитное ядро, не зависящее от микроядра Minix и не работающее в ней.

  • На ранних этапах Linux не мог самостоятельно запускать полноценные программы — многие утилиты были кросскомпилированы или запускались из Minix.

GNU — свободный проект ОС с утилитами

  • Начат Ричардом Столлманом в 1983 году для создания полностью свободной UNIX-подобной ОС.

  • К 1991–1992 году GNU предоставлял большинство необходимых компонентов: компилятор gcc, оболочку bash, системные утилиты, библиотеки, но не имел своего ядра (проект ядра GNU Hurd ещё не готов).

  • В 1992 году ядро Linux было переведено под лицензию GNU GPL, что позволило объединить Linux и GNU-компоненты в полноценную систему — GNU/Linux.

Итог

  • Linux — ядро, разработанное в среде Minix, но являющееся самостоятельной системой.

  • Minix — отдельная ОС с микроядром, послужившая средой и вдохновением для Linux.

  • GNU — проект системных утилит и инструментов, без ядра, который вместе с Linux образует полнофункциональную ОС GNU/Linux.

Показать полностью
Linux Windows Программирование Текст
0
3
ru1000
ru1000
26 дней назад
Серия Игрушечный программист - мой опыт Construct 3

Часть 13. Оформление формул - Порядок в проекте Construct 3 - собственный взгляд⁠⁠

Добрый день!

Меня зовут Руслан.
С 2016 года делаю игры в редакторе Construct 3.


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

Пример:

Часть 13. Оформление формул - Порядок в проекте Construct 3 - собственный взгляд Gamedev, Браузерные игры, Программирование, Construct 3, Порядок, Формула

Оформление формул.

Часть 13. Оформление формул - Порядок в проекте Construct 3 - собственный взгляд Gamedev, Браузерные игры, Программирование, Construct 3, Порядок, Формула

Оформление формул.

Здесь пробел есть как между операциями (+, -, *, /), так и между параметрами массивов ArrayFragments.At,(0, 0).

Так глаз быстрее выхватывает нужные блоки, чем если лепить всё непрерывным потоком.


Как обычно, Телеграм:
https://t.me/toyprogrammer

[моё] Gamedev Браузерные игры Программирование Construct 3 Порядок Формула
0
4
Gordok
26 дней назад

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов⁠⁠

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

В повседневной жизни каждого человека или компании в целом есть множество рутинных повторяющихся задач, которые охватывают несколько процессов и приложений. И каждый рано или поздно приходит к логичной мысли, что было бы неплохо их автоматизировать. При этом большинство этих прекрасных идей так и остаются только идеями. Почему? Нас пугает страшное слово «автоматизация». Сразу возникают мысли, что это сложно (нужно что‑то программировать, обладать особыми знаниями), муторно и дорого.

В своей статье я хочу развеять этот стереотип и рассказать об интересном low‑code решении с визуальным интерфейсом — n8n. Мы разберем принципы работы и основные возможности n8n, а также, в качестве иллюстрации, приведу 4 практических примера автоматизации процессов, которые показались мне интересными и покажу как можно запустить собственную версию приложения в облаке.

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

Итак, n8n это open source инструмент для автоматизации рабочих процессов, который позволяет планировать задачи, собирать отдельные действия в сценарии, а также извлекать и перемещать данные между множеством приложений, платформ и сервисов, которые вы и ваша команда используете ежедневно.

Основное его преимущество — вам не нужно обладать даже минимальными знаниями в программировании, глубоко разбираться в настройках API и понимать принципы написания кода. Полностью визуальный интуитивно понятный интерфейс с набором готовых модулей и шаблонов для различных ситуаций позволит вам настроить и объединять в единый процесс любой набор действий по вашей логике. Большую часть настроек можно сделать пользуясь только мышкой или тачпадом. Вы можете воспринимать его как цифрового помощника, который выполняет повторяющуюся работу за вас, планируя задачи, интегрируя сервисы или автоматически перемещая данные между различными приложениями, которые обычно по умолчанию не взаимодействуют друг с другом. Например, в n8n вы можете создать процесс, который будет ежедневно обновлять данные (делать выгрузку) в заданной вами Google таблице, делать выборку в нужном вам виде и отправлять краткий отчет (несколько ключевых цифр) в виде сообщения в Telegram.

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

При объединении все узлы образуют рабочий процесс — набор действий, объединенный общей логикой для достижения какого‑то результата. Создание и настройка логики узлов происходит через визуальный интерфейс, что упрощает создание рабочих процессов без написания пользовательского кода.

Гибкость n8n и широкий набор различных шаблонов и интеграций (более 300 приложений) позволяет автоматизировать множество действий: от простых задач до сложных многошаговых рабочих процессов.

Существуют различные типы узлов в зависимости от их функции. Типичный рабочий процесс состоит из:

  • Узел триггера: это то, что запускает ваш рабочий процесс. Это может быть обычная кнопка в приложении, электронное письмо в вашем почтовом ящике, сообщение в бота Telegram или любое событие из другого приложения.

  • Узлы действий: они определяют логику, конкретные приложения и действия в вашем рабочем процессе.

Узлы действий могут содержать простые задачи, такие как сохранение данных в базе данных, манипуляцию с данными (сортировку, вычисления и т. д.), отправку уведомления или обновление задачи в вашем приложении для управления проектами. Также они могут инициировать более сложные действия, такие как отправка HTTP‑запросов, запуск пользовательского кода Python или JavaScript или генерация запроса к AI с вашими собственными данными. Например:

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

Простой пример рабочего процесса n8n.

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

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

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

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

Я выбрал 4 интересных на мой взгляд примера с целью демонстрации возможностей приложения, а на сайте n8n вы сможете найти 1000+ различных бесплатных шаблонов, созданных сообществом.

Создание AI чат бота с помощью модулей n8n

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

Аналогичную задачу можно решить без написания сложных скриптов. N8n предлагает мощное и удобное решение, с встроенными модулями управления и взаимодействия с AI моделями. Это означает, что вы можете создать чат‑бота быстрее и с большей гибкостью, сохраняя при этом полный контроль над его функциональностью.

Итак, приступим. Для нашего бота мы создадим рабочий процесс, который использует языковые модели OpenAI и SerpAPI для поддержки динамичного и интеллектуального AI агента. Благодаря встроенным ручным триггерам чата и буферу памяти он сможет поддерживать непрерывные диалоги с учетом контекста.

Итоговая схема нашего рабочего процесса в n8n выглядит следующим образом:

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

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

  1. Создайте триггер чата. Выберете в меню соответствующий узел триггера чата и добавьте его в свой рабочий процесс.

  2. Создайте узел агента ИИ (выбрав его из меню узлов справа) и подключите его к триггеру чата.

  3. Добавьте узел выбранной вами языковой модели AI (например, в нашем случае это модель на базе OpenAI) кликнув на соответствующую ветку узла Агента (ветки визуально промаркированы, вам нужна Chat Model)

  4. Подключите узел памяти для контекста. Для подключения узла буфера памяти кликните на соответствующую ветку узла Агента (вам нужна ветка memory) и выберете нужный узел из меню, например узел Window Buffer Memory

  5. И финальный шаг, добавим дополнительные инструменты к нашему процессу. К ветке Узла Агента с маркировкой Tools подключим инструмент SerpAPI для поддержки web поиска. Для этого кликнем на соответствующую ветку и выберем инструмент из списка.

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

Автоматизация Push кода в Git Hub

Еще одна опция использование n8n, это автоматизация процесса доставки кода в GitHub. Основные преимущества использования модулей n8n:

  • Во‑первых, возможность вносить изменения непосредственно в репозиторий GitHub. Это особенно полезно, когда вам нужно обновить части файлов документации Git без необходимости извлекать данные из GitHub и делать локальные коммиты перед отправкой изменений обратно.

  • Во‑вторых, вы можете дополнительно автоматизировать процессы Git. n8n позволяет автоматизировать локальный цикл разработки, проверяя статус локального репозитория и отправляя код на GitHub в нерабочее время

Вот пример рабочего процесса n8n для отправки и обновления файлов в GitHub.

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

Вы можете работать с GitHub через готовый узел, через универсальный узел Git или через команду Execute Command.

В данном процессе приведены 2 возможных сценария:

1. Push через стандартный узел GitHub

Такой подход позволяет обновлять репозиторий GitHub, не затрагивая локальный репозиторий.

В верхней части схемы процесса расположены три узла:

  • GitHub извлекает файл README.md из репозитория и возвращает его в виде двоичных данных;

  • Узел декодирования файла преобразует строку base64 в понятный человеку текст;

  • Последний узел отправляет отредактированный файл непосредственно на GitHub:

{{ $json.data }} ## Updated at: {{ $now.toISO() }}

2. Push через Git node/bash

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

В нижней строке схемы процесса показано несколько узлов Git и один узел Execute Command:

  • Git Pull извлекает удаленный репозиторий и обновляет локальную копию. Этот шаг необходим, поскольку репозиторий GitHub был обновлен ранее, и ваша локальная копия может быть не синхронизирована.

  • Узел обновления README и добавления нового файла выполняет ряд локальных команд, которые записывают строки в файл README.md и создают новый файл.

echo '' >> {{ $('config').item.json.localrepo }}/README.md echo '## Updated at:' >> {{ $('config').item.json.localrepo }}/README.md echo '{{ $now.toISO() }}' >> {{ $('config').item.json.localrepo }}/README.md echo 'Check new file' >> {{ $('config').item.json.localrepo }}/README.md echo '' >> {{ $('config').item.json.localrepo }}/README.md echo '# This is a new file' >> {{ $('config').item.json.localrepo }}/new_{{ $now.toFormat('yyyyddMM-hhmmss') }}.md

  • Узлы Add files, Commit и Push по функционалу соответствуют своим названиям — они обновляют все последние изменения в репозитории GitHub. Важно отметить, что узел Git работает с локальным репозиторием. Поэтому вам необходимо заранее убедиться, что файл конфигурации Git настроен.

Чат с БД PostgreSQL с использованием модуля AI.

Еще один интересный пример рабочего процесса n8n, который предназначен для организации чата с AI агентом, который выдает релевантные данные из заданной БД в ответ на промпты, написанные естественным языком.

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

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

  • Каждый раз, когда пользователь задает вопрос с помощью интерфейса чата n8n, запускается рабочий процесс.

  • Затем сообщение обрабатывается модулем AI Agent с использованием соответствующих инструментов — Execute SQL Query, Get DB Schema, Tables List и Get Table Definition, если требуется. Агент использует эти инструменты для формирования и выполнения SQL‑запросов, которые необходимы для ответа на вопросы.

  • Получив данные, AI Agent использует их для формирования ответа и возвращает его пользователю.

При первом запуске процесса вам необходимо произвести настройку учетных данных. Для этого вам понадобятся учетные данные PostgreSQL и ключ API OpenAI.

Автоматизация процесса мониторинга доступности сайта.

Этот рабочий процесс n8n демонстрирует, как создать простую службу мониторинга uptime сайтов с использованием запланированных триггеров. Позволяет одновременно работать со списком сайтов.

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

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

  • Запланированный триггер считывает список URL‑адресов веб‑сайтов в Google Таблице каждые 5 минут.

  • Каждый URL‑адрес веб‑сайта проверяется с помощью узла HTTP, который определяет, находится ли веб‑сайт в состоянии UP или DOWN.

  • Для веб‑сайтов, находящихся в состоянии DOWN, отправляются электронные письма и сообщения в Slack (можно заменить модулем Telegram).

  • Google таблица обновляется с учетом состояния веб‑сайта и создается журнал.

  • Журналы можно использовать для определения общего процента времени UP и DOWN за определенный период.

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

  • Google Таблица для хранения отслеживаемых веб‑сайтов и их состояний

  • Gmail для оповещений по электронной почте (можно заменить на модуль вашего почтового сервиса)

  • Slack для оповещений по каналам (можно заменить на модуль Telegram).

Надеюсь, что выбранные мной примеры будут вам полезны. Ну или, как минимум, сподвигнут вас поэкспериментировать с этим low‑code инструментом или найти готовый шаблон (из более чем 1000, представленных сообществом), который пригодится для решения именно вашей задачи.

А для того, чтобы было с чем экспериментировать, расскажем как можно развернуть приложение n8n в облаке.

Как развернуть собственное приложение n8n  в облаке Dockhost.

Наиболее простой способ развернуть облачную версию приложения — запустить его готовую к установке версию на платформе Dockhost.

Рассмотрим подробно как развернуть собственное приложение N8N. Для этого воспользуемся функционалом «Приложения» облачной платформы Dockhost.

Первым шагом переходим в раздел «Приложения» в панели управления Dockhost, и в открывшемся каталоге в разделе Low‑code выбираем приложение n8n.

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

Раздел «Приложения» — это каталог популярных приложений, готовых к установке и использованию на платформе.

В открывшемся окне нужно выбрать необходимую вам конфигурацию приложения. К установке доступно 8 конфигураций, отличающиеся выделенными для приложения ресурсами. После выбора конфигурации нажимаем «Установить» и указываем имя приложения в открывшемся модальном окне:

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

Нажимаем установить и дожидаемся завершения процесса установки приложения:

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

После завершения процесса установки приложения будет установлено: само приложение n8n, база данных PostgreSQL и для удобства создан динамический домен, по которому мы сможем подключиться к приложению.

Все созданные ресурсы вы можете увидеть, нажав кнопку «Управлять» справа от установленного приложения.

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

При необходимости можно обновить конфигурацию, переустановить приложение целиком или восстановить его настройки в состояние после установки.

Итак, наше приложение создано и готов к использованию. Для перехода в web версию приложения нужно перейти в раздел «Приложения / Установленные» и нажать кнопку «Web» справа от выбранного приложения.

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

При нажатии на кнопку «Web» вы переходите на страницу приложения в вашем браузере, где вам необходимо пройти стандартную первичную регистрацию:

N8n - все о сервисе автоматизации с примерами популярных рабочих процессов IT, Автоматизация, Гайд, Программирование, Приложение, Длиннопост

Все, теперь у вас есть собственная версия n8n в облаке и вы можете приступать к работе с приложением.

Заключение

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

Лучший способ начать — автоматизировать одну небольшую задачу. С наработкой практики вы сможете расширить и улучшить свои рабочие процессы, сделав их еще более полезными. Если у вас возникнут трудности, вы всегда можете обратиться за помощью к существующим шаблонам и примерам или поискать ответ в комьюнити.

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

Показать полностью 11
[моё] IT Автоматизация Гайд Программирование Приложение Длиннопост
3
206
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
26 дней назад

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру⁠⁠

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Осторожно: в данной серии статей я рассказываю о реверс-инжиниринге и хакинге простых кнопочных звонилок. Цель простая: расширить скудный функционал телефонов ценой до 1 000 рублей и сделать их привлекательной моддинг-платформой для самых разных гиков. Если вы когда-нибудь слышали про эльфы и патчи, и вам интересно узнать, как происходит процесс взлома и изучения прошивок, а также написания новых программ для кнопочников — приглашаю вас под кат!

❯ Предыстория

Недавно я познакомился с Ilya_ZX, человеком-легендой в моддинг сцене телефонов из нулевых. Илья рассказал мне забавную историю: ещё будучи студентом, он увидел как одногруппник играет на своём LG G1800 в легендарную мобильную игру нулевых — «Змейку». Его тогдашний Siemens A60 не умел ничего кроме игрушки Stack Attack, даже Java-игры не поддерживались, а молодому парню очень хотелось сыграть в Змейку на скучных парах!

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Казалось бы, на дворе 2005 год, можно просто пойти на рынок и купить уже изрядно подешевевшую Б/У 3310 и поиграть в «трушную» змейку именно там. Но Илья был не просто студентом технаря, он с юности интересовался программированием, реверс-инжинирингом и телефонами! И он решил поспорить с одногруппником — сможет ли он реализовать Змейку на своём A60? Всего за один месяц он умудрился исследовать прошивку телефона на диковинной процессорной архитектуре, найти необходимые функции для работы с дисплеем, вводом и окнами и написать ту самую змейку. Попробуйте теперь представить лицо его одногруппника, который проиграл спор молодому реверсеру :)

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Сначала Илья написал игру на Паскале для самопального «симулятора» A60, а затем переписал её на ассемблере для C166s!

На момент написания статьи мне 23 года, я лишь чуточку старше тогдашнего Ильи. После рассказанной истории, я подумал «А чем я хуже?» и принялся реверсить прошивку бюджетного кнопочника 10-й давности - Explay B240. В прошлой статье, мы с вами проделали первые шаги по хакингу телефона: загрузка прошивки в IDA Pro и поиск системных функций, хакинг файлового менеджера для запуска программ с MicroSD-флэшки, разработка загрузчика исполняемых файлов и организация таблицы функций. В целом, это весьма неплохая поучительная статья для новичков в реверс-инжиниринге.

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Однако итоговый результат в виде заливки экрана желтым цветом может показаться незначительным. Поэтому в сегодняшней статье мы с вами напишем первую действительно полезную программу!

❯ «Змейка»

Напомню, что загрузчик внешних программ работает по очень простому принципу: мы нашли в дизассемблере функцию обработки сообщений окна встроенной игры и хукнули её, дабы при открытии окна она загружала программу с MicroSD-флэшки в ОЗУ и передавала ей управление. При этом загрузчик сразу интегрирован в проводник: при запуске файла с расширением .app, патч кладет строку с абсолютным путем к нему в одну из «угнанных» глобальных переменных, открывает хукнутое окно игры, а далее бинлоадер транслирует все сообщения от ОС в загруженную программу.

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Наглядная демонстрация работы

Таким образом, жизненный цикл приложений значительно упрощается по сравнению с "эльфами" на тех же Motorola и Siemens: по сути, нам остаётся лишь проинициализировать состояние программы в MSG_CREATE и освободить динамическую память в MSG_CLOSE. Читателям, которые хоть раз писали программы под Windows, такой подход может показаться очень знакомым!

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

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

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

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Таким образом, сначала нам нужно получить указатель на буфер кадра, затем сделать весь экран «грязным» путем отрисовки полноэкранного прямоугольника и только потом поверх него рисовать графику нашей игры. На первый взгляд листинг ниже кажется дичью, но чуток отрефакторить — и выглядит как типичный код эмбедщика!

void Paint(LoaderContext* context)
{
LcdId lcd = { 0, 0 };
uint16* fb = ((uint16*(*)(LcdId* id)) LcdGetFrameBuffer)(&lcd); // Get framebuffer for primary screen

uint16 startEnd[4] = { 0, 0, 240, 320 }; // Rect
((void(*)(LcdId* lcdId, uint32 start, uint32 end, uint16 col)) LcdDrawRectPtr)(&lcd, ((uint32*)&startEnd[0])[0], ((uint32*)&startEnd[0])[1], 0x0); // Draw fullscreen rectangle

((void(*)()) LcdUpdateRect)(); // Update rect
}

Далее я реализовал функцию для отрисовки текста на экране. Шрифты самые примитивные — 8x8, побитовые, примерно как в знакогенераторе оригинального IBM PC. Принцип отрисовки прост: каждый символ (глиф) хранится в виде 8 байт. В каждом байте один бит представляет из себя пиксель по координате Y, если он равен нулю — значит пиксель прозрачный, в обратном же случае он должен быть закрашен нужным цветом.

Алгоритм для отрисовки шрифтов выглядит так:

int LcdDrawChar(LoaderContext* context, uint16* frameBuffer, char chr, uint32 x, uint32 y, uint16 color)
{
if(x >= 0 && y >= 0 && x + FONT_WIDTH < LCD_WIDTH && y + FONT_HEIGHT < LCD_HEIGHT)
{
int i, j;
unsigned char* glyph = (unsigned char*)(GLOBAL(context) + &embedded_font[chr * 8]);

for(i = 0; i < FONT_HEIGHT; i++)
{
short* fb = &((short*)frameBuffer)[(y + i) * LCD_WIDTH + x];

for(j = 0; j < FONT_WIDTH; j++)
{
if((*glyph >> (FONT_WIDTH - j)) & 0x1)
*fb = color;

fb++;
}

glyph++;
}

return true;
}

return false;
}

void LcdDrawString(LoaderContext* context, uint16* frameBuffer, char* str, uint32 x, uint32 y, uint16 color)
{
if(x >= 0 && y >= 0)
{
unsigned int i;

for(i = 0; i < strlen(str); i++)
{
if(!LcdDrawChar(context, frameBuffer, str[i], x, y, color))
return; // Out of screen

x += FONT_WIDTH;
}
}
}

Наверняка вы заметили страшный костыль в локальной переменной glyph с арифметикой над указателями. Дело в том, что на момент написания статьи, программа представляет из себя сырую склейку секций .text, .data, .bss и .rodata, поэтому на данный момент в ней нет релокаций, которые помогли бы сделать программу перемещаемой в памяти. В arm-none-eabi все вызовы функций без явного указателя — относительные, но при этом обращения к глобальным переменным и константам (например, строковым литералам) — абсолютные. Если попытаться напрямую использовать глобальную переменную по адресу 0x18 — программа будет пытаться читать или портить память в таблице векторов прерываний, что неизбежно приведет к HardFault. Поэтому для получения настоящего адреса переменной, к ней необходимо прибавить базовый адрес загрузки программы:

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Этот костыль можно избежать, если в конец программы дописать сведения о релокациях, которые можно вытянуть путем парсинга промежуточного эльфа, а при особом желании — можно сделать так, что программа сама себя будет патчить «на лету»!

Далее мы рисуем нашу строку с текстом:

LcdDrawString(context, fb, SCONST(context, "Ya lyublu AvtoVAZ"), 0, 0, 0xFFFFFF);

И получаем следующий результат:

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Для змейки, если она не ASCII, этого всё равно мало. Поэтому нам нужна функция для вывода картинок на дисплей. Написать загрузчик tga или bmp не составляет труда, но хотелось бы чтобы программа была самодостаточной и несла с собой все необходимые ресурсы. Поэтому для конвертации картинок я использую вот этот инструмент: выбираем файл, формат ставим в 16-бит 565 и преобразовываем в C-массив.

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

void LcdDrawBitmap(uint16* frameBuffer, short* bitmap, uint32 width, uint32 height, uint32 x, uint32 y)
{
if(bitmap)
{
int i, j;
short* bmp = bitmap;

// Slow debug version
for(i = 0; i < height; i++)
{
for(j = 0; j < width; j++)
{
LCD_PLOT_565(clamp(x + j, 0, LCD_WIDTH), clamp(y + i, 0, LCD_HEIGHT), bmp[i * width + j]);
}
}
}
}

А отрисовать нашу картинку можно вот так:

LcdDrawBitmap(fb, (short*)(GLOBAL(context) + (uint32)&lada_bmp), LADA_WIDTH, LADA_HEIGHT, 0, 0);

Почему бы не спрятать дескриптор изображения в структуру?

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

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

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Помощь

Переходим к геймплею. Сама по себе «Змейка» в реализации — простая игра, где каждый уровень представляет из себя примитивную сетку. Алгоритм работы заключается в том, что раз в n-миллисекунд вызывается один игровой тик, который двигает игрока в текущем выбранном направлении. Если в момент тика нажата одна из кнопок-стрелок — направление движения меняется — тут всё очевидно:

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Сама змея представляет из себя массив сегментов, который хранит свою текущую позицию в сетке уровня:

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

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

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Для того, чтобы проверить скушали ли мы яблочко — достаточно сравнить координаты головы и объекта. Если они идентичны, то прибавляем очко и переносим яблоко на другую позицию:

if(state->Segments[SEGMENT_HEAD].X == state->AppleX && state->Segments[SEGMENT_HEADER].Y == state->AppleY)
{
state->Score++;
MoveApple(state);
}

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

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

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

unsigned int rand()
{
int v0; // r3
int v1; // r4
int v2; // r1

v0 = MEMORY[0x4710E80] - 1;
v1 = *(_DWORD *)(4 * MEMORY[0x4710E84] + 0x4710E88) + *(_DWORD *)(4 * MEMORY[0x4710E80] + 0x4710E88);
*(_DWORD *)(4 * MEMORY[0x4710E84] + 0x4710E88) = v1;
MEMORY[0x4710E80] = v0;
v2 = MEMORY[0x4710E84] - 1;
if ( v0 >= 0 )
{
--MEMORY[0x4710E84];
if ( v2 < 0 )
MEMORY[0x4710E84] = 54;
}
else
{
--MEMORY[0x4710E84];
MEMORY[0x4710E80] = 54;
}
return (unsigned int)(2 * v1) >> 1;
}

Если же голова оказывается в одном из сегментов или же за полем — игра окончена. Полный вес собранного приложения - 5 килобайт 644 байта! А ниже - демонстрация его работы:

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

❯ Заключение

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

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

Это приносит невероятное моральное наслаждение

А что ещё нужно парню в 23 года? Правильно: чтобы мотор бодро тянул любимую десятку и чтобы реверсилось всё легко и понятно! Исходный код и все что необходимо для установки бинлоадера есть в на моем гите.

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

Важно: друзья! Я уверен, что статью будут читать выходцы с форумов моддеров и возможно даже ребята, связанные с прошивочными боксами. Если у вас есть исходный код или объектные файлы для телефонов Siemens (S-Gold или E-Gold — не имеет значения) и вы хотели бы помочь общему моддерскому делу — напишите пожалуйста мне в Telegram. Несмотря на то, что этот код уже давно никому не нужен и E-Gold/S-Gold уже более 15 лет снят с производства, гарантирую полную анонимность и крутой контент :)

Очень важно! Разыскиваются девайсы для будущих статей!

Друзья! Если вам понравилась сегодняшняя статья про разработку эльфов, то спешу объявить: для подготовки будущих материалов с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я сейчас занимаюсь, а затем написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

А также я ищу старые (2010-2014) подделки на брендовые смартфоны Samsung, Apple и т. п. Они зачастую работают на весьма интересных чипсетах и поддаются хорошему моддингу, парочку статей уже вышло, но у меня ещё есть идеи по их моддингу! Также может у кого-то остались самые первые смартфоны Xiaomi (серии Mi), Meizu (ещё на Exynos) или телефоны на Linux (например Motorola EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E6, ZINE ZN5 и т. п., о них я хотел бы подготовить специальную статью и видео т. к. на самом деле они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake!). Всем большое спасибо за донаты!

Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост
Самая сложная «Змейка»: Как я отреверсил и хакнул кнопочный телефон, чтобы написать для него классическую игру Телефон, Гаджеты, Программирование, Реверс-инжиниринг, Хакеры, Моддинг, Кастомизация, Игра змейка, Гифка, Длиннопост

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

Показать полностью 19
[моё] Телефон Гаджеты Программирование Реверс-инжиниринг Хакеры Моддинг Кастомизация Игра змейка Гифка Длиннопост
24
8
tproger.official
tproger.official
26 дней назад
Типичный программист

«СДВГ разработчик» starter pack⁠⁠

IT юмор IT Программирование Созвоны СДВГ Вертикальное видео Видео Короткие видео
0
Партнёрский материал Реклама
specials
specials

Как бросить курить и не сорваться: инструкция от тех, кто смог⁠⁠

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

Как бросить курить и не сорваться: инструкция от тех, кто смог Курение, Борьба с курением, Зависимость, Telegram (ссылка), ВКонтакте (ссылка), Длиннопост

История 1 — отражение

@ holoroad

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

Решение бросить курить — одно из лучших, которое вы можете принять для своего здоровья, будущего и близких. Но справиться с зависимостью только потому, что «это вредно» будет тяжело. А вот если хотите не задыхаться, поднимаясь по лестнице, или волнуетесь за своего ребенка, которые вдыхает табачный дым, — уже другое дело.

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

История 2 — список

@ maxneb

Беременность жены, рождение ребенка, здоровье, деньги — ничего не было веским поводом бросить окончательно. Постоянно срывался. Помогло составить список, что теряю и что получаю от сигарет, и понимание, что хотя бы одна затяжка — и все насмарку: пару месяцев буду курить. Только список и его осознание. Для каждого он свой. И постоянное обращение к нему. После составления списка курил еще. Но он как заноза висел в голове с вопросом «зачем?»... Так, что-то щелкнуло и сейчас не тянет. Иногда тянет физически, но осознание бесполезности курения сразу глушит позывы. Полгода, полет нормальный...

Бросать на авось — идея, которая подойдет не всем. Нужно понимать, что делать в трудные моменты:

  • Определите дату отказа. Подготовьтесь морально, уберите сигареты, зажигалки, пепельницы.

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

  • Займите время. Вспомните, чем вы любили заниматься: спорт, хобби, прогулки.

  • Планируйте, что делать при тяге. Она длится всего 3–5 минут. Дыхательные практики или звонок другу помогут пережить сильное желание закурить.

  • Откажитесь от «наградных сигарет». Одна затяжка и вы откатитесь назад.

Можно бросить резко, «с понедельника», или постепенно, снижая количество сигарет до нуля. Главное — определиться и не отступать.

История 3 — переключение

@ Spaka

45 лет, стаж 30. Пытался завязать много раз, потом понял, что после каждой попытки бросить, курить начинаешь больше. Как ребенок, которому не дают вкусняшку, а она случайно попала ему в руки. Из чего мозг сделал вывод: не уверен — не бросай. Потом стал замечать, что организм уже стал сам просить перестать курить. По утрам было очень неприятно во рту, удовольствие после сигареты стало короче, а негатив, приходящий следом, ощутимее: неприятные ощущения в горле, боли миндалин, страх схватить онкодиагноз. Хотя врачи говорили, что все ок, в голове-то гоняешь мысли. Я решил попробовать обмануть сам себя. Не делать из процесса отказа какого-то события. Бросить так, как будто это и должно было произойти, но ты не знаешь когда. Про себя помолился, как сумел, и попросил помощи, хитро прищурил глаз и в момент, когда забыл купить про запас (оставалась пара штук в пачке), просто перестал курить. Мне теперь даже странно, как я раньше это делал. Так и живу почти два года. Кстати, раньше в момент завязки курящих ненавидел, дым был очень противен, до тошноты. Теперь все равно. Присоединяйтесь ;)

Есть несколько стратегий отказа от курения:

  • Резкий. Эффективный и решительный подход.

  • Постепенный. Сначала — меньше сигарет, потом — меньше затяжек. И так до нуля.

  • Психологическая замена. Каждая сигарета — это ритуал. Найдите для каждого из них «здоровую замену».

  • Медикаментозная терапия. При сильной зависимости врач может порекомендовать никотинозаместительную терапию (пластыри, таблетки, жвачки) или препараты, которые помогают справиться с синдромом отмены. Но любые лекарства принимаются только по рекомендации специалиста.

Каждый, кто хочет оставить зависимость в прошлом, может обратиться в центры здоровья, которые работают при поддержке нацпроекта «Продолжительная и активная жизнь», и получить необходимую помощь специалистов. Адреса доступны на официальном портале Минздрава России о здоровье: takzdorovo.ru. Также можно позвонить на горячую линию по отказу от зависимостей 8 800 200-0-200.

История 4 — форма

Аноним

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

За модными гаджетами и фруктовыми ароматами скрывается химическая бомба, разрушающая организм быстрее, чем обычные сигареты. Электронные сигареты активно продвигаются производителями как «безопасная» альтернатива сигаретам. Но курение вейпа может обернуться серьезными проблемами: от кашля и одышки до поражения сосудов и дыхательных путей.

«Особую тревогу вызывает рост потребления табачных изделий и электронных сигарет. Согласно исследованию, проведенному в нашем Центре, 36,8% курильщиков потребляют одновременно и табак, и электронные сигареты. Среди молодежи в возрасте 25-39 лет этот показатель превышает 45%. Электронные никотиносодержащие и безникотиновые устройства поражают сердце, сосуды, дыхательную систему и ДНК организма не менее пагубно, чем традиционные сигареты, а в ряде случаев способны вызывать острые состояния, включая сосудистые поражения и летальные исходы» – рассказывает руководитель Центра профилактики и контроля потребления табака НМИЦ терапии и профилактической медицины Минздрава России Маринэ Гамбарян.

История 5 — пари

@ kernima

Вроде не было никаких серьезных предпосылок, чтобы бросить. Да и чтобы начать: просто все вокруг курили, думал, это сейчас тренд. А потом как-то сидели в баре и решили поспорить с некурящим другом. Он затирал, что моя жизнь из-за электронки катится ко дну, я — доказывал, что это всего лишь маленькая шалость. В общем поспорили на пять тысяч. Чтобы было легче и можно было отвлечься, начал бегать по утрам. Друг проиграл, а я возвращаться к курению не стал. Вдруг снова у еды появился вкус, я начал высыпаться и больше не устаю на втором лестничном проеме. Короче, советую!))

Сульфат никотина, один из компонентов электронных сигарет, раньше использовали как пестицид, но запретили из-за высокой токсичности. Жидкость для «электронок» содержит и опасные химикаты вроде пропиленгликоля, ацетальдегида и акролеина — промышленных веществ, способных вызывать воспаления, поражения органов и мутации клеток. Ароматизаторы, создающие иллюзию безвредности, на деле могут привести к более тяжелой интоксикации, чем при курении сигарет. А еще вейпы содержат не природный, а синтетический никотин — солевой. Он быстрее всасывается, дольше выводится и вызывает зависимость стремительнее.

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

История 6 — связь

Аноним

Устал курить, понял, что мне это мешает заниматься спортом и в целом комфортно себя чувствовать. Пошел через ассоциации: покурил во время головной боли, и потом через самовнушение дал себе установку, что голова болела от курения. Звучит странно, конечно, но это сработало. Никотиновую зависимость снижал постепенно через редкое курение кальяна (2-3 раза в неделю с последующим уменьшением).

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

Разберитесь, что именно тянет вас к сигарете: скука, стресс, привычка? Когда вы это осознаете, будет легче подобрать альтернативные действия — прогулку, книгу, разговор с близким. Учитесь распознавать моменты, когда особенно хочется закурить, и переключаться на что-то другое. Можно подключиться к программам или группам поддержки — это поможет не сдаваться. И главное: уберите из дома все сигареты.

История 7 — вершина

Аноним

Поднимался с сыном по Пушкинской тропе на гору Железная. Мне лет сорок пять было, идем общаемся, сын бегает туда-сюда. Ну идем короче, а сзади нас догоняет семейная пара, мирно о чем-то щебеча между собой. Догнали и обходят. И так спокойно удаляются… Все бы ничего, но им лет по шестьдесят, если не больше. Я попробовал в их темпе, но задыхаться стал. Короче, поднялся я на гору, спустился, смял пачку и выкинул в мусорную урну. Вот уже 13 лет не курю. Стаж 27 лет.

Курение — это быстро развивающаяся зависимость, схожая по механизму с наркотической. Никотин воздействует на мозг, вызывая кратковременное улучшение настроения, за которым следует упадок сил и потребность в новой дозе. Со временем формируется толерантность, и прежние негативные реакции организма на табак ослабевают. Физическая зависимость сочетается с психологической: сигарета начинает ассоциироваться с отдыхом, решением задач, рутиной. Курение укрепляется поведенческими шаблонами: кофе, вождение, паузы на работе уже не мыслимы без сигареты.


Каждый, кто пытался избавиться от никотиновой зависимости, знает, как это тяжело. Ломка, раздражительность, навязчивые мысли. Даже при переходе на вейпы, иллюзия «меньшего вреда» быстро развеивается: химические коктейли из ароматических смесей также бьют по легким, сосудам и всему организму.

Хорошая новость в том, что вы не одни. В сообществе «Давай бросать» (ВКонтакте и мессенджере Telegram), который работает при поддержке нацпроекта «Продолжительная и активная жизнь» знают, каково бороться с триггерами, искать замену привычке и удерживать себя от срыва. Здесь делятся историями тех, кто смог, поддерживают тех, кто только начал, и помогают разобраться в главном: как пережить отказ без мучений.

Социальная реклама. АНО «Национальные приоритеты», ИНН: 9704007633

Показать полностью
Курение Борьба с курением Зависимость Telegram (ссылка) ВКонтакте (ссылка) Длиннопост
513
pikabu.education
pikabu.education
26 дней назад
Серия Программирование

5 бесплатных ресурсов для изучения Kotlin⁠⁠

Kotlin — современный и мощный язык программирования, который стал официальным для разработки под Android. Если вы хотите освоить его с нуля или углубить свои знания, эти бесплатные ресурсы помогут вам в обучении.

1. Официальная документация Kotlin

Лучший способ начать изучение Kotlin — обратиться к официальной документации. Здесь вы найдете: базовые руководства по синтаксису, примеры кода, подробные объяснения ключевых концепций, рекомендации по использованию Kotlin в Android, серверной и мультиплатформенной разработке.

5 бесплатных ресурсов для изучения Kotlin Обучение, Программирование, Kotlin, Android, Учеба, Длиннопост

Почему стоит использовать?

  • Актуальная и достоверная информация.

  • Подходит как новичкам, так и опытным разработчикам.

2. JetBrains Academy (Hyperskill)

JetBrains — создатели Kotlin — предлагают бесплатные проекты и задачи на платформе Hyperskill. Обучение построено на практике: интерактивные задачи, реальные проекты, пошаговые объяснения.

5 бесплатных ресурсов для изучения Kotlin Обучение, Программирование, Kotlin, Android, Учеба, Длиннопост

Почему стоит использовать?

  • Обучение через практику.

  • Интересные проекты для портфолио.

3. Курс от Google на Udacity

Бесплатный курс от Google и Udacity, который поможет освоить Kotlin для Android: основы языка, работа с Android Studio, примеры приложений.

5 бесплатных ресурсов для изучения Kotlin Обучение, Программирование, Kotlin, Android, Учеба, Длиннопост

Почему стоит использовать?

  • Подходит для будущих Android-разработчиков.

  • Практические задания.

4. Codecademy: Learn Kotlin

Бесплатный интерактивный курс от Codecademy состоит из следующих элементов: основы синтаксиса, функции и ООП, практические задания.

5 бесплатных ресурсов для изучения Kotlin Обучение, Программирование, Kotlin, Android, Учеба, Длиннопост

Почему стоит использовать?

  • Интерактивное обучение.

  • Не требует установки IDE (можно писать код прямо в браузере).

5. Kotlin Koans (Официальные интерактивные задания от JetBrains)

Kotlin Koans — это серия интерактивных упражнений от разработчиков Kotlin (JetBrains), которые помогают освоить язык через практику.

5 бесплатных ресурсов для изучения Kotlin Обучение, Программирование, Kotlin, Android, Учеба, Длиннопост

Почему стоит попробовать?

  • Интерактивное обучение – пишете код прямо в браузере.

  • Постепенная сложность – от простых задач к продвинутым.

  • Покрытие ключевых тем – основы, функции, ООП, коллекции, корутины.

  • Автоматическая проверка – система подскажет, если что-то не так.

Изучать Kotlin можно бесплатно и эффективно, если использовать правильные ресурсы. Выбирайте тот формат, который вам ближе:

  • Официальная документация — для глубокого понимания.

  • Hyperskill и Udacity — для практики.

  • Codecademy — для интерактивных заданий.

  • Kotlin Koans — для интерактивного решения задач прямо в браузере.

Какой бы способ вы ни выбрали — главное начать и практиковаться регулярно. Kotlin открывает двери в мир Android-разработки, бэкенда и даже мультиплатформенных приложений, так что потраченное время окупится с лихвой.

Показать полностью 5
Обучение Программирование Kotlin Android Учеба Длиннопост
139
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии