Наши услуги

Мы предлагаем

serv2
Сайт визитка - лендинг
Одна шаблонная страница - когда надо сегодня
serv2
Сайт магазин с CRM
Главная страница, каталог товаров/услуг, личный кабинет продавца
serv2
Дизайн для своего сайта
Нарисуем вам новый дизайн
serv2
Доработка существующего сайта
Когда что-то сломалось
serv2
Дизайн печатной продукции
Визитки, баннеры, стикеры и прочее нецифровое, что можно будет потрогать :)
serv2
Не знаю как объяснить - посмотрите сами
И такое делаем :)

Почему мы?

Минимум взаимодействий
Минимум взаимодействий
Из материалов только ваша страница или сайт
Всегда на связи
Всегда на связи
Голосовые, текст, видео - как удобно :)
Бывает и дорого, но есть бесплатно
Бывает и дорого, но есть бесплатно
Качество не зависит от цены
Индивидуальный подход
Индивидуальный подход
Разумеется :)
business
Коротко

О нас

wow5
2015
работаем успешно с
wow3
5
Реализованных проектов

Это начало интересного текста обо мне

Чуть позже напишу тут интересный текст

Партнёров пока нет
Но, ты пиши если что :)

Наши работы

Работа 1
Работа 2

Ознакомьтесь с нашим сервисом и комфортным сотрудничеством

Тарифы

Сайтик фри
0
Точно такой лендинг
checkedВаши фото, контакты и тексты
checkedИмя сайта имя.dencompany.ru
checkedБез мелкого шрифта и камней
Лайт
от
5 000
₽/год
Когда сайт пробник понравился и надо расширяться
checkedСамостоятельное имя сайта
checkedИндивидуальные настройки
checkedCRM (личный кабинет продавца)
checkedБез мелкого шрифта и камней
Хочу всё
от
15 000
₽/мес
Когда налажен процесс или не очень, но надо много и не хочется вникать
checkedСамостоятельное имя сайта
checkedИндивидуальный дизайн
checkedCRM (личный кабинет продавца)
checkedПеренос товаров с текущего сайта
checkedБез мелкого шрифта и камней

Профессионалы своего дела

Наша команда

Фото
Fullstack ведущий программист
Денис

О нас говорят

Отзывы клиентов

Фото отзыв
Я — специалист по SMM
Linda
Дизайнер
Фото отзыв
Отзыв 1
Mark
Backend разработчик
Смотреть все

Все, что нужно знать о бизнесе

Блог

Читать блог
Фото блог
19
08.2026
5 основных инструментов для продвижения интернет-бизнеса
Я — специалист по SMM.
Фото блог
19
08.2026
5 основных инструментов для продвижения интернет-бизнеса
Раньше работала дома.
Фото блог
19
08.2026
5 основных инструментов для продвижения интернет-бизнеса
Я работала дома.

Все, что нужно знать о создании сайтов

Статьи

19.08.2026
Выбор хостинга для Kotlin-игр: практическое руководство на август 2026 года Разработка игр на Kotlin — это вызов не только для вашего кода, но и для инфраструктуры. Конец лета — идеальное время, чтобы пересмотреть свои серверные мощности перед осенним наплывом игроков. В этой статье мы разберем, как выбрать хостинг, учитывая специфику Kotlin, требования игровой индустрии и текущий сезон. Почему Kotlin диктует особые условия к хостингу Kotlin, будучи языком для JVM (Java Virtual Machine), требует от сервера стабильной работы с памятью и процессором. В отличие от статичных сайтов, игры на Kotlin (особенно серверная часть на Ktor или Spring) создают постоянную нагрузку на CPU и RAM. В августе, когда многие пользователи находятся в отпусках и играют с мобильных устройств, пиковая нагрузка может смещаться на вечерние часы. Ваш хостинг должен без задержек масштабировать ресурсы, иначе вы потеряете игроков на старте осеннего сезона. Ключевые критерии выбора: от железа до географии Процессор и память: не экономьте на ядрах Для игрового сервера на Kotlin минимальная конфигурация — это 2 виртуальных ядра и 4 ГБ оперативной памяти. Однако, если ваша игра использует сложную физику или процедурную генерацию мира, смело берите 4 ядра и 8 ГБ. В августе, из-за жары, дата-центры могут испытывать перегрузки систем охлаждения, что снижает тактовую частоту CPU. Выбирайте хостинг с гарантированной долей CPU (vCPU), а не с общей очередью, чтобы ваш сервер не «тормозил» в часы пик. Дисковая система: SSD обязателен, NVMe желателен Игровые миры и ассеты требуют быстрого чтения данных. Обычные HDD-диски — это прошлый век. Вам нужен NVMe-накопитель, который обеспечит скорость чтения/записи не менее 3000 МБ/с. Это критично для сохранения игровых сессий и загрузки уровней. Учитывая, что в конце лета вы будете загружать много обновлений перед релизом, быстрый диск сэкономит часы ожидания. Расположение сервера: ближе к игрокам Август — сезон путешествий. Ваши игроки могут быть в любой точке мира. Если ваша аудитория — русскоязычная, выбирайте хостинг в Москве или Санкт-Петербурге. Если игра нацелена на Европу, рассмотрите Франкфурт или Амстердам. Помните: задержка (пинг) более 50 мс делает динамичные игры некомфортными. Идеальный вариант — облачный провайдер с несколькими регионами, чтобы вы могли запускать игровые инстансы ближе к кластерам игроков. Типы хостинга: что выбрать для игры на Kotlin Виртуальный выделенный сервер (VPS/VDS) Это оптимальный выбор для инди-студий и средних проектов. Вы получаете выделенные ресурсы ядра и памяти, полный root-доступ и возможность установить любую JVM и библиотеки. В августе, перед началом учебного года, многие провайдеры устраивают распродажи — можно сэкономить до 30% на годовом плане. Главное — проверьте, чтобы у хостинга была функция «горячего» расширения диска и RAM, так как после релиза игры нагрузка может резко вырасти. Облачные платформы (AWS, Google Cloud, Yandex Cloud) Для крупных проектов с сотнями тысяч игроков облако — единственный разумный вариант. Вы платите только за фактическое потребление ресурсов. Однако в конце лета будьте осторожны с тарифами на исходящий трафик. Игровые обновления «весят» гигабайты, и счет за трансфер может вас удивить. Используйте CDN для раздачи статики (текстур, звуков), а сам игровой сервер держите на виртуальных машинах с автоматическим масштабированием. Выделенный сервер (Dedicated) Если ваша игра — это MMORPG с тысячами одновременных подключений, аренда физического сервера оправдана. Вы получаете 100% мощности железа без «соседей» по гипервизору. Но в августе, в период жары, убедитесь, что дата-центр имеет резервное охлаждение. Перегрев сервера летом — частая причина внезапных даунтаймов. Стоимость такого решения высока, но стабильность того стоит. Практические советы на август 2026 года Проведите стресс-тест до сентября. Не ждите пиковой нагрузки. Запустите бета-тест с 1000 ботов в конце августа, чтобы увидеть, как ваш сервер ведет себя при 100% загрузке CPU. Это выявит узкие места в коде и конфигурации JVM (например, настройки G1GC). Настройте мониторинг температуры. Используйте метрики из Grafana или Prometheus. Если температура процессора на сервере стабильно выше 80°C, это сигнал к тому, что пора переезжать на более «холодный» тариф или в другой регион. Подумайте о резервном копировании. Август — сезон гроз. Отключение электроэнергии в дата-центре может стереть данные. Настройте автоматический снапшот диска каждые 6 часов. Это займет 10 минут, но спасет ваш проект от катастрофы. Выбирайте тариф с оплатой за месяц. Не подписывайтесь на год вперед, не протестировав сервер в реальных условиях. Возьмите месяц, погоняйте игру, а затем, если все устраивает, оплатите долгосрочный план со скидкой. Заключение: сезонные скидки и готовность к зиме Выбор хостинга для Kotlin-игры — это баланс между производительностью, бюджетом и географией. В конце августа 2026 года обратите внимание на акции «Back to School» от крупных облачных провайдеров — они часто дают бонусы на счет за первый месяц. Не гонитесь за самой дешевой ценой; лучше потратить на 20% больше, но получить гарантированную частоту CPU и NVMe-диск. Помните, что осенью конкуренция за внимание игроков обостряется, и ваш сервер должен быть готов к наплыву пользователей. Начните с VPS на 4 ядра и 8 ГБ, проведите нагрузочное тестирование в последние теплые дни, и вы встретите сентябрь во всеоружии. Удачи в разработке, и пусть ваш Kotlin-код компилируется быстро, а сервер никогда не падает.
16.08.2026
Миграция легаси-приложения на Delphi: пошаговое руководство для мидл-разработчика Миграция фреймворка — это всегда сложный и ответственный процесс, особенно когда речь идет о таком ветеране программирования, как Delphi. Для разработчика уровня middle это не просто задача по замене библиотек, а целый проект, требующий системного подхода, глубокого понимания архитектуры и умения работать с унаследованным кодом. В этой статье мы разберем ключевые этапы миграции Delphi-приложения, типичные ловушки и практические рекомендации, которые помогут провести процесс без потери качества и в срок. Оценка масштаба и постановка целей Прежде чем писать первую строку кода, необходимо четко определить, что мы мигрируем и зачем. Для мидл-разработчика это этап, на котором нужно проявить аналитические способности и умение задавать правильные вопросы. Аудит текущего кода Начните с полного аудита исходного кода. Не пытайтесь охватить все сразу — разбейте проект на модули и оцените каждый по следующим критериям: Возраст кода — код, написанный на Delphi 5-7, будет сильно отличаться от кода на Delphi 10.4+. Используемые библиотеки — составьте полный список сторонних компонентов и библиотек, от которых зависит проект. Степень связанности — определите, насколько модули зависят друг от друга. Чем выше связанность, тем сложнее будет миграция. Покрытие тестами — наличие автоматических тестов критически важно для безопасной миграции. Если их нет, это первая задача, которую нужно решить. Определение целевой версии Выбор целевой версии Delphi — стратегическое решение. Не всегда нужно гнаться за самой свежей версией. Оцените, какие новые возможности вам действительно нужны, и совместимы ли они с вашим стеком технологий. Например, переход на Delphi 10.3+ дает доступ к современным возможностям языка (inline variables, enhanced RTTI), но может потребовать обновления сторонних библиотек. Планирование миграции После аудита переходим к планированию. Это этап, где мидл-разработчик должен проявить свои навыки тайм-менеджмента и управления рисками. Стратегия миграции Существует два основных подхода к миграции: «большой взрыв» (big bang) и поэтапная миграция. Для больших проектов второй подход предпочтительнее. Поэтапная миграция — вы постепенно переносите модули на новую версию, сохраняя работоспособность приложения на каждом этапе. Это позволяет быстрее выявлять ошибки и снижает риски. Параллельная работа — старая и новая версии работают одновременно, что позволяет сравнить поведение системы и плавно переключить пользователей. Составление карты зависимостей Создайте детальную карту зависимостей между модулями. Это поможет определить порядок миграции: начинать нужно с самых низкоуровневых модулей, которые не зависят от других, и постепенно подниматься вверх. Используйте инструменты анализа кода, такие как Pascal Analyzer или ModelMaker, чтобы автоматизировать этот процесс. Процесс миграции кода Теперь переходим к самой технической части. Здесь мидл-разработчик сталкивается с конкретными проблемами, которые требуют внимательности и знания особенностей Delphi. Изменения в языке и RTL Каждая новая версия Delphi вносит изменения в язык и Runtime Library. Вот что нужно проверить в первую очередь: Изменения в типах данных — например, размер некоторых целочисленных типов мог измениться. Депрецированные функции — функции, которые были помечены как deprecated, могут быть удалены в новой версии. Изменения в работе с памятью — особенно если вы используете ручное управление памятью или интерфейсы. Изменения в VCL/FMX — визуальные компоненты могли изменить свое поведение или свойства. Работа с устаревшими конструкциями Код, написанный 10-15 лет назад, часто содержит устаревшие конструкции. Например, использование глобальных переменных, прямых ссылок на внутренние структуры данных или устаревших паттернов работы с исключениями. В процессе миграции это нужно аккуратно рефакторить, но помните: не пытайтесь переписать все сразу. Сначала добейтесь того, чтобы код компилировался и работал на новой версии, а затем уже улучшайте его. Совместимость сторонних библиотек Одна из самых частых проблем — несовместимость сторонних компонентов. Проверьте, есть ли обновленные версии для целевой платформы. Если библиотека не обновляется, у вас есть три варианта: Найти альтернативную библиотеку с аналогичным функционалом. Написать собственную обертку (wrapper) для замены функционала. Перенести код библиотеки в проект и адаптировать его вручную (самый трудоемкий вариант). Тестирование и обеспечение качества Без качественного тестирования миграция обречена на провал. Для мидл-разработчика это возможность проявить свои навыки в создании надежного программного обеспечения. Стратегия тестирования Разработайте стратегию тестирования, которая включает в себя: Модульное тестирование — используйте DUnit или DUnitX для проверки отдельных модулей. Интеграционное тестирование — проверка взаимодействия между модулями. Системное тестирование — проверка всего приложения в целом. Регрессионное тестирование — убедитесь, что новая версия не сломала существующий функционал. Автоматизация тестов Настройте автоматический запуск тестов при каждой сборке. Это позволит быстро выявлять ошибки на ранних этапах. Используйте системы непрерывной интеграции (CI), такие как Jenkins или GitLa
11.08.2026
Решаем проблему фреймворка в QBasic: руководство для джуна Когда мы слышим слово «фреймворк», мы обычно представляем Django, Spring или Laravel. Но в мире QBasic, где царит процедурное программирование и прямое обращение к памяти, понятие фреймворка трансформируется в нечто иное. Здесь фреймворк — это не библиотека классов, а набор соглашений, модулей и макросов, которые позволяют структурировать код и избавляют от хаоса. Для джуна, который привык к современным IDE, QBasic покажется архаизмом, но именно здесь можно понять фундаментальные принципы организации кода, не отвлекаясь на сложный синтаксис. Почему в QBasic возникает проблема «фреймворка»? QBasic не имеет встроенной поддержки объектно-ориентированного программирования, исключений или пакетов. Весь код — это последовательность строк, выполняемых интерпретатором. Когда проект разрастается, возникает классическая проблема: глобальные переменные и перекрестные вызовы превращают программу в «спагетти». Джуны часто пытаются решить эту проблему, создавая подобие фреймворка, но терпят неудачу из-за отсутствия дисциплины. Суть проблемы в том, что QBasic не навязывает структуру. В отличие от строгих компиляторов, он позволяет писать код как угодно. Это свобода, которая убивает проект. Поэтому «фреймворк» здесь — это свод правил, которые вы сами себе устанавливаете. Основные компоненты самодельного фреймворка Чтобы решить проблему, нужно разбить её на три кита: модульность, управление состоянием и единая точка входа. Рассмотрим каждый пункт с точки зрения джуна. 1. Модульность через SUB и FUNCTION В QBasic нет классов, но есть SUB (процедуры) и FUNCTION (функции). Это ваш единственный инструмент для создания модулей. Проблема джуна в том, что он пытается сделать одну гигантскую процедуру, которая делает всё. Правильный подход — разбить программу на маленькие кирпичики. Каждая SUB должна выполнять ровно одну задачу (принцип единственной ответственности). Имена процедур должны быть глаголами: DrawMenu, CalculateScore, SaveGame. Избегайте GOTO — это убивает структуру. Используйте циклы DO...LOOP и IF...THEN...ELSE. Пример правильной структуры: SUB Main CALL Initialize DO CALL ProcessInput CALL Update CALL Render LOOP UNTIL GameOver CALL Shutdown END SUB Это и есть каркас вашего фреймворка. Он напоминает игровой цикл, но подходит для любого приложения. 2. Управление состоянием: избегаем глобальных переменных Глобальные переменные в QBasic — это зло. Они доступны отовсюду, и любая процедура может их изменить. Это приводит к трудноотловимым багам. Решение — использовать общие блоки данных через COMMON SHARED или, что лучше, передавать параметры по ссылке. Для джуна важно понять: состояние программы должно быть инкапсулировано. Создайте один тип данных (например, TYPE PlayerState) и передавайте его в процедуры как параметр. TYPE Player X AS INTEGER Y AS INTEGER Health AS INTEGER END TYPE DIM SHARED CurrentPlayer AS Player SUB MovePlayer (P AS Player, DX AS INTEGER, DY AS INTEGER) P.X = P.X + DX P.Y = P.Y + DY END SUB Такой подход позволяет тестировать процедуры изолированно и не бояться, что кто-то случайно перезапишет чужую переменную. 3. Единая точка входа и инициализация Фреймворк должен иметь чёткую точку старта. В QBasic это обычно метка Main или первая строка кода. Проблема джуна в том, что он начинает писать код сразу, без плана. Правильно — создать процедуру Initialize, которая настраивает все параметры: экран, переменные, файлы. Сначала объявите все типы и константы. Затем вызовите Initialize для установки начальных значений. Только потом запускайте основной цикл. Это похоже на конструктор в ООП, но реализовано процедурно. Такой подход гарантирует, что вы не обратитесь к переменной до её инициализации. Практический пример: мини-фреймворк для игры Представьте, что вы пишете змейку. Без фреймворка код будет состоять из 500 строк с перемешанными выводами на экран и логикой. С фреймворком — из 5 модулей. Структура: Init.bas — настройка экрана и переменных. Input.bas — обработка нажатий клавиш. Logic.bas — движение змейки, проверка столкновений. Draw.bas — отрисовка всех объектов. Main.bas — связующий код, который вызывает остальные модули. Каждый модуль — это отдельный файл, который вы подключаете через '$INCLUDE. Это и есть ваш фреймворк. Он не универсален, но решает конкретную задачу и легко расширяется. Типичные ошибки джуна и как их избежать Первая ошибка — преждевременная оптимизация. Джуны пытаются написать универсальный движок, который решает все проблемы сразу. В итоге получается абстрактный код, который не работает ни для одной задачи. Начните с конкретной программы, а потом выделите общие части в процедуры. Вторая ошибка — игнорирование обработки ошибок. В QBasic нет try-catch, но есть ON ERROR GOTO. Используйте его в критических местах: чтение файлов, деление на ноль. Это часть фреймворка — защита от сбоев. Третья ошибка — отсутствие комментариев. Джуны считают, что код говорит сам за себя. Но в QBasic, где нет автодополнения и подсветки синтаксиса, комментарии — это единственный способ не запутаться. Пишите комментарии к каждой процедуре: что она делает,
Открыть все статьи
bg_1
Остались вопросы? Задавайте их немедленно.
мы проконсультируем совершенно бесплатно