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

Пинбол Пикабу

Аркады, На ловкость, Казуальные

Играть

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

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

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

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

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

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

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

Backend + Разработка

С этим тегом используют

IT Программирование Frontend IT юмор Программист Drupal Gamedev Инди игра Инди Игры Unity Все
62 поста сначала свежее
thecodemedia
thecodemedia
14 дней назад

Пояснительная бригада: мем про защитные конструкции⁠⁠

Пояснительная бригада: мем про защитные конструкции IT, Программирование, Программист, Разработка, IT юмор, Backend, Python

Комментирует Паша Вавилин, наставник на курсе по Python:

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

Теперь время работы самого начинающего джуниора стоит в разы дороже времени работы обычного компьютера. Компьютеры подешевели, время работы программиста подорожало. Как быстро запустить проект? Ведь не оплачивать же месяцы работы программисту за то, что будет работать пару часов! Давайте научим компьютер обнаруживать и обрабатывать ошибки, назовём это эксепшенами, тогда можно будет выполнять код, окружая его защитными конструкциями, типа «попробуй сделать это действие, если оно возбудит ошибку доступа к файлу или ошибку подключения к сети, то будем обрабатывать такую ситуацию». Класс! Что, это долго? Ну не знаю, давайте тогда просто обернём всё конструкцией «выполни всю программу, если что-то случится, то ок». Не будет детализации, какая конкретно ошибка и где произошла? Главное всё работает! Вообще всё работает, чего вам ещё надо!»

Показать полностью 1
IT Программирование Программист Разработка IT юмор Backend Python
4
2
mars.frontier
mars.frontier
1 месяц назад

Как мы делали мини-игру про ровер на Марсе внутри Telegram WebApp⁠⁠

«Хочется сделать простую карту, чтобы листать её в Telegram». С этого всё и началось. А закончилось — изометрическим движком, авторизацией по WebApp, системой энергии, покупкой участков и боевым ровером с шестью колёсами.

1/3

🚀 С чего всё началось?

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

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

Но само собой, что бот - не предел мечтаний, нужно было пилить полноценный мини-апп.

На боте лишь проверили гипотезу, отладили механики, типа уменьшения энергии, подзарядки аккумулятора в течении времени, пока не заходишь в игру.

Первый шаг в сторону мини-аппки - сделали вебстраничку, где можно было листать мышкой или пальцем — просто ради визуализации. Прямоугольная сетка, тайлы, немного стилей. Telegram WebApp проглатывал HTML5 на ура. Тогда не было никакой логики, просто подгрузка текстур и картинка под пальцем.

Вот как это выглядело:

  • Пользователь заходил и видел карту Марса.

  • Никакого взаимодействия — только “глянуть”.

🎮 А потом захотелось интерактивности

Следующим шагом стало добавление изометрии — чтобы выглядело как псевдо-3D. Самое интересное, что даже не потребовалось изменять текстуры. Серьезно :) Они по-прежнему те же самые, квадратные, 64 х 64. И не используется никакой 3д - движок.

вот краткое и понятное объяснение, как строится изометрическая карта из квадратных тайлов:


🧠 Основная идея:

Каждый квадратный тайл поворачивается на 45° и масштабируется по вертикали, чтобы получился ромб (изометрическая проекция). Вместо привычной сетки (x, y) мы рассчитываем экранные координаты (left, top) по формуле:


📐 Формулы для отображения:

При размере одного тайла T:

  • W = T * sqrt(2) — изометрическая ширина (диагональ квадрата).

  • H = W / 2 — изометрическая высота (высота ромба).

  • WX2 = W / 2, HX2 = H / 2 — половинки для смещения от центра.

Переход от логических координат (dx, dy) к пиксельным:

isoX = (dx - dy) * WX2 + centerX; isoY = (dx + dy) * HX2 + centerY;


🧩 Что это даёт:

  • (dx - dy) — смещает тайл по горизонтали.

  • (dx + dy) — смещает тайл по вертикали.

  • centerX, centerY — центр экрана, чтобы карта строилась относительно игрока.


🎯 В результате:

  • Из обычной квадратной сетки (x, y) формируется ромбовидная карта, где видны и горизонтальные, и вертикальные соседние тайлы.

  • Центральная клетка (текущий игрок) — всегда по центру, а остальные располагаются вокруг.

    Ну а дальше уже дело техники - придумали алгоритм перемещения в 8 направлениях: вверх, вниз, влево, вправо, плюс диагонали.

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

    Задали запреты на воду, скалы и занятую клетку, чтобы не было “читов”.

🔐 Само собой - авторизация

Чтобы пользователь не “прыгал” по чужим роверам и участкам, мы внедрили Telegram WebApp InitData (это такая строка с хешем, которую фронт передает нам в бэк, а мы - уже на сервере телеграм с токеном бота валидируем подпись. Если сошлась - то пользователь зашел к нам через телегу. Если нет - скорее всего он просто открыл веб-страницу как сайт, или что-то пытается поломать, подделать :)

Если кратко:

  • Telegram сам отдаёт токен с подписью.

  • Мы проверяем подпись на бэке по HMAC SHA256.

  • Получаем ID пользователя, сохраняем его в сессии.

Теперь всё честно: ровер – только твой, кристаллы – только твои.

🪐 Стало красивее: добавили кристаллы и рамки

Потом появились:

  • Кристаллы на клетках — можно собирать.

  • Подсветка клеток: белая рамка — твоя, красная — чужая.

  • Имена владельцев, чтобы было видно, кто что захватил.

    В планах: Покупка участков за кристаллы. Это было в текстовом боте. И ползая по карте, даже видны купленные тобой (белым) и оппонентами (красным) участки.

⚡️ Оптимизация и загрузка ассетов

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

  • Добавили прелоадер, который подгружает PNG-шки перед игрой.

  • Сделали показ спиннера на любом действии (движение, загрузка).

  • Кэшируем тайлы и обновляем только при движении.

🤖 Как выглядит сейчас

Игрок:

  • Заходит в Telegram Mini App.

  • Авторизуется за доли секунды.

  • Видит изометрическую карту с ровером, кристаллами, участками, рекламными баннерами.

  • Может двигаться по клеткам, собирать кристаллы (в будущем - бурить и находить ресурсы, торговать ими, покупать землю).

А мы — всё это рисуем прямо в DOM.
Никаких Canvas, WebGL, или тяжелых движков. Только HTML, CSS и немного магии на JS.


💬 Если интересно — покажу, как это выглядит вживую.
Тестить можно тут. А если зайдёт — добавим NFT, фермы и квесты на выживание 😄

Показать полностью 3
[моё] Gamedev Разработка Программирование Telegram Javascript Python Unity Frontend Backend Web Web-программирование Ton HTML CSS Верстка Длиннопост
9
3
DropTrigger
DropTrigger
4 месяца назад
Серия Записки вкатуна

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT)⁠⁠

Термины в статье:

  1. Эндпоинт

  2. Аутентификация, Регистрация, JWT, Access, Refresh

К стеку добавился:

  • Vue.js

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Дописываю API

Потратив 2 ночи (и немного терпения), я наконец завершил реализацию всех эндпоинтов! В какой-то момент это очень наскучило, но я все равно продолжал писать их.

Как выглядят эндпоинты в этой статье - Создаю онлайн-сервис для чтения книг. День 4. Обработка первого запроса.

Архитектура папок теперь выглядит вот так:

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Всего реализовано 38 эндпоинтов , и это еще не конец — их количество будет расти! Последний из них ощущался как будто я пробежал марафон.


Разработка дизайна 🎨

Но как делать веб без дизайна? Верно, никак! 🤔
Зайдя в Figma и подсмотрев интерфейс GitHub'а , я накидал ориентировочный дизайн страниц регистрации и входа.

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост
Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Верстка 🖥️

Верстка — это немного рутинное занятие, но результат того стоит!
Могу сказать, что получилось почти идентично дизайну.

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Frontend с Vue.js

Почему Vue.js ? Просто такие условия 🙃. Если бы выбор был за мной, я бы взял React .

Добавлю в решение новый проект Веб-приложение ASP.NET Core (MVC) . Стандартный шаблон создаст такие папки:

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

  • Controllers
    Папка содержит классы контроллеров, которые управляют маршрутизацией.

  • Models
    Папка содержит модели данных, которые представляют сущности приложения.

  • Views
    Папка содержит представления — файлы, которые отвечают за отображение HTML-страниц пользователю.

В папку wwwroot/lib добавлю клиентскую библиотеку Vue.js .

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Создам новый контроллер для страниц аутентификации.

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

В папке Views есть еще 2 папки:

  • Home

  • Shared

В папку Shared добавлю новый шаблон страницы Razor с названием _LoginLayout для страниц аутентификации.

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Создам папку Auth, добавив туда пустую страницу Razor с названием _ViewStart. Этот файл указывает какой шаблон будут использовать страницы.

@{

Layout = "_LoginLayout";

}

Теперь закину в wwwroot/css свой файл со стилем, который наверстал.


Логика фронтенда 🧠

Начну со страницы входа, добавив HTML-разметку, которую наверстал.

Снизу файла напишу блок скриптов:

@Section scripts {

<script src="~/lib/vue/vue.global.js"></script>

<script>

...тут будут все скрипты...

</script>

}

Пример запроса на бэкенд:

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

На скрине показан метод ассинхронный метод login(), в нем реализована отправка запроса на эндпоинт /auth/login, если запрос проходит успешно, я записываю Access-токен в локальное хранилище и перенаправляю пользователя на страницу по адресу /home. В противном случае я показываю ошибку пользователю.

В ответе сервера я получаю Access и Refresh токены.

  • Access-токен записываю в локальное хранилище.

  • Refresh-токен храню в Http-only куках для большей безопасности 🛡️.

Пример записи куки на сервере:

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Здесь я записал новую куку с под названием refreshToken, и значением, равным Refresh-токену.

Вообще для чего мне Refresh-токен, если есть Access? Все очень просто, у Access-токена срок жизни 15 минут, поэтому через 15 минут его необходимо будет сгенерировать заново. Для этого как раз и понадобится Refresh-токен.

По истечению Access-токена я буду посылать на сервер запрос со своими куками. Сервер прочитает Refresh-токен из них и, если он валидный, вернет новый Access-токен.

Как это реализовано со стороны сервера:

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Со стороны клиента:

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

При загрузке страницы сразу же срабатывает метод checkRefreshToken, далее отправляется запрос на /auth/refresh. Если сервер возвращает положительный ответ, записываю новый Access в локальное хранилище и продолжаю пользоваться сервисом.

Тестирование 🧪

Запущу бэкенд и фронтенд.

После запуска я сразу попадаю на страницу входа.

Войду в аккаунт, который я создвал еще на начальных этапах.

Если сейчас обратиться по адресу /home, меня перекинет назад на страницу авторизации.

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Попробую сначала ввести неправильный пароль.

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Теперь введу правильный пароль. Все сработало! Я попал на домашнюю страницу.

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Зайдя в консоль разработчика, можно посмотреть локальное хранилище и найти там Access-токен.

Создаю онлайн-сервис для чтения книг. День 6-9. CRUD, Дизайн+Верстка, Frontend(JWT) Разработка, Программирование, Aspnet, Frontend, Backend, Длиннопост

Теперь я могу пользоваться сервисом, отправляя запросы на эндпоинты, передавая данный токен в заголовке.

Показать полностью 15
[моё] Разработка Программирование Aspnet Frontend Backend Длиннопост
3
2231
KFalcon
7 месяцев назад

Дорогу осилит идущий⁠⁠

Для ЛЛ:

Я учу людей языку программирования Java. Бесплатно. Совсем бесплатно. Прям даром. И даже без рекламы. Совсем без рекламы. Вот вообще.
Ссылка на тг: Дорогу осилит идущий. Java
С чего все началось: Помогу с изучением Java. Бесплатно. Не реклама:)

Пост посвящен круглой дате этой инициативы. И анонсу интенсива для самых начинающих

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

Сегодня ровно два года с момента той публикации. Два года каналу. И два года небольшому, но очень уютному сообществу, которое для меня лично стало чем-то очень важным.

Дорогу осилит идущий Без рейтинга, Помощь, Работа, IT, Образование, Учеба, Карьера, Преподаватель, Java, Backend, Волонтерство, Удаленная работа, Благотворительность, Поиск работы, Консультация, Разработка, Веб-разработка, Собеседование, Мат, Длиннопост

И по такому случаю команда канала решила анонсировать интенсив для новичков, рассчитанный на тех, кто еще не начал (или только начинает) свой путь в Java.

Что это значит? Речь идет о:

  • Пяти видеолекциях по базовым темам - от основ синтаксиса до ООП

  • Секциях вопрос-ответ в конце лекций

  • 20 задачам по пройденным темам

  • Проверке данных задач и рекомендациям по каждой от членов команды канала

  • Обучению базовой работе с git и GitHub

  • Общем чате для участников, где также будут присутствовать более опытные ребята для помощи по возникающим вопросам

Чувствуете, как запахло какой-то продажной херней? Но нет. И интенсив, и основной курс по разработке, и все остальные активности, связанные с каналом, полностью бесплатны.

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

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

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

Пора вернуться к основной теме поста. Каналу исполнилось два года.

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

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

Но как и в любом сообществе, самой главной его составляющей остаются люди.

Те, кто задают вопросы и позволяют чувствовать, что канал жив и движется в правильном направлении. И те, кто на эти вопросы отвечают, показывая, что это уже не только моя личная инициатива.

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

И все вместе мы продолжаем осиливать дорогу, которая заявлена в названии. От Java Core к базам данных, далее к системам сборки, тестированию, вебу... И обязательно дойдем до финишной черты, за которой начнется новая дорога - собеседования, работа и... и что-то еще;)

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

Спасибо за внимание!

P.S. Жена сказала, что текст вышел пресноватым. Поэтому - анекдот:

Специалистов тех. поддержки на военной кафедре отправили на стрельбы. Все отстрелялись, в мишень никто не попал. Майор орёт:

— Как так, блять?!
— У нас пули из ствола вылетели. Проблемы на вашей стороне.

Показать полностью 1
[моё] Без рейтинга Помощь Работа IT Образование Учеба Карьера Преподаватель Java Backend Волонтерство Удаленная работа Благотворительность Поиск работы Консультация Разработка Веб-разработка Собеседование Мат Длиннопост
190
5
golodnyyFrontend
golodnyyFrontend
8 месяцев назад

Про синдром самозванца⁠⁠

Про синдром самозванца Работа, Программирование, Веб-разработка, Разработка, Frontend, Backend, IT, Айтишники, Продуктивность, Собеседование, Карьера, Поиск работы, Программист, Текст, Scrum, Тайм-менеджмент, Эмоциональное выгорание, Самозванец, Синдром самозванца, Мат

Через 1.5 недели выхожу на новую работу. Там крайне опытный коллектив, амбициозные цели, новые креативные задачи, в общем все по списку "крутая модная компания".

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

ИМХО, это свойственно для большинства людей. Сначала мы не хвалим себя за успехи и достижение целей. А потом получаем в обратку страх ответственности за случившиеся перемены.

В своей жизни, также как и в команде, надо проводить ретроспективы. Как только начинает крыть - включаем наше РАЦИО, и заставить его поработать вместо нашего ЭМОЦИО.

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

  • что я сделал и чего я достиг

  • что я не сделал и чего я не достиг

  • что я сейчас чувствую и что меня выдрачивает

  • что я могу с этим сделать

  • какие новые цели я себе ставлю

Выглядит как "Я делаю ЭТИ три простых упражнения...", но в реальности это помогает голове сразу с двух сторон: антисамозванец и целеполагание

  1. Вспомнил тернистый путь до цели -> Благодаря усилиям добился цели -> Получил заслуженный приз. И вот самозванец внутри уже не может пынять на "незаслуженную выгоду"

  2. Добился целей -> Порефлексировал -> Поставил новые цели -> Сделал работу над ошибками и выполнил новые цели -> Repeat. Ура, мы изобрели скрам

Нашей голове всегда нужно напоминать, кто тут красавчик, и кто выполнил поставленные цели.

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

Показать полностью
Работа Программирование Веб-разработка Разработка Frontend Backend IT Айтишники Продуктивность Собеседование Карьера Поиск работы Программист Текст Scrum Тайм-менеджмент Эмоциональное выгорание Самозванец Синдром самозванца Мат
4
5
golodnyyFrontend
golodnyyFrontend
8 месяцев назад

Про самопрезентацию⁠⁠

И сразу интересное наблюдение про самопрезентацию

На прошлой неделе проходил техническое собеседование в прикольный стартап.

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

И тут CTO вспоминает что у него был пулл вопросов технического характера для самой самой финальной проверки кандидата. И первый из этих вопросов - на typescript.

Сначала подумал что просто по Utility types погоняют, или про различия interface и type спросят. И тут меня просят написать несколько разных дженериков 😱. А я их последний раз писал пол года назад, синтаксиса уже естественно не помню, короче жопа. На финальном этапе на таком базовом вопросе естественно опозориться не хочется.

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

На этом моменте я искренне почувствовал студенческое "прокатило".

По итогу оффер на 300+ прям в этот же день. И все благодаря правильной самопрезентации на протяжении всех этапов, по итогу которых в глазах команды я уже был "компетентным спецом с большим опытом".

  • Если у вас есть слабые стороны - не выводите на них собеседника, и не плавайте с ответами. Лучше сразу сказать, что вы не знаете и последний раз в проде видели этот вопрос примерно "никогда"

  • На ваши сильные стороны делайте акцент и углубляйтесь в рассуждениях до потолка ваших знаний

Лучше выглядеть как специалист в некоторых областях, чем плавать во всех вопросах одинаково поверхностно

Показать полностью
[моё] Работа Программирование Веб-разработка Разработка Frontend Backend IT Айтишники Продуктивность Собеседование Карьера Поиск работы Программист Текст
1
Proglib
Proglib
9 месяцев назад
Серия Итоги недели в мире бэкенда, обзоры новых сервисов

Итоги недели в мире бэкенда и обзоры новых сервисов: 3 эпических сбоя, вызванных регулярками⁠⁠

Итоги недели в мире бэкенда и обзоры новых сервисов: 3 эпических сбоя, вызванных регулярками Backend, Искусственный интеллект, Инновации, Микросервисы, Программирование, Разработка, Технологии, Cloudflare, Отдел кадров, IT, Javascript, Nodejs, Regex, Stack Overflow, Windows, Видео, Длиннопост, YouTube, YouTube (ссылка)

😈 Осторожно – Regex! 3 эпических сбоя, вызванных регулярками

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

Сбой Stack Overflow

В 2016 году Stack Overflow испытал 34-минутный перебой в работе. Причиной стало регулярное выражение, используемое для обработки пользовательского ввода:

^[\s\u200c]+|[\s\u200c]+$

Это выражение должно было находить пробелы в начале и конце строки. Проблема возникла, когда какой-то пользователь запостил комментарий, содержащий около 20 000 последовательных пробелов. Механизм обработки регулярных выражений начал проверять каждый пробел. Когда после 20 000-го пробела встретился другой символ, движок начал откатываться назад, пытаясь найти соответствие, начиная со второго пробела, третьего и так далее.

Это привело к катастрофическому возврату (catastrophic backtracking) – ошибке, которая возникает, когда движок регулярных выражений тратит чрезмерное количество времени на попытки найти соответствие шаблону, перебирая различные комбинации. Количество проверок начало лавинообразно увеличиваться и быстро достигло 199 990 000 – это вызвало значительную задержку и в итоге сбой системы.

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

📖#️⃣ Больше полезных книг вы найдете на нашем телеграм-канале

«Книги для шарпистов | C#, .NET, F#»

Сбой Cloudflare

2 июля 2019 года произошел крупный сбой в работе платформы Cloudflare. Один из инженеров написал регулярное выражение, которое привело к действительно катастрофическому возврату – вызвало экстремальную перегрузку всей инфраструктуры. Использование процессоров выросло до 100%, а большинство сайтов, подключенных к Cloudflare, замедлились до крайности или вовсе оказались недоступными.

Коварная регулярка выглядела так:

(?:(?:\"|'|\]|\}|\\|\d|(?:nan|infinity|true|false|null|undefined|symbol|math)|\`|\-|\+)+[)]*;?((?:\s|-|~|!|{}|\|\||\+)*.*(?:.*=.*)))

Самую большую опасность в этом выражении представляет

.*(?:.*=.*)

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

Глобальный сбой Windows/CrowdStrike

19 июля 2024 года произошел самый массовый сбой в истории – из строя вышли около 8,5 млн Windows-компьютеров с ПО CrowdStrike. Причиной сбоя стало несоответствие между ожидаемым количеством входных параметров (21) и фактическим количеством параметров (20), которые были переданы в интерпретатор контента (этот компонент отвечает за обработку содержимого с использованием регулярных выражений). Когда система получила ввод с 21 параметром, интерпретатор контента попытался считать данные за пределами выделенной памяти, что и привело к сбою системы.

Привет!

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

  • Языки программирования и фреймворки для бэкенда

  • Архитектура и проектирование серверных приложений

  • Базы данных и управление данными

  • Безопасность и защита данных

  • Облачные технологии и DevOps

  • API и интеграции

  • Тестирование и отладка

  • Инструменты и утилиты для бэкенд-разработчиков

  • Лучшие практики и паттерны проектирования

📧 Подпишись, чтобы быть в числе первых, кто получит дайджест

🤵 Как не завалить собеседование в крупной ИТ-компании

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

  • Перед собеседованием нужно освежить знания о структурах данных – и не только о списках, массивах и словарях. Не стоит игнорировать и те структуры, с которыми вы в последний раз сталкивались в университете и никогда не используете на практике – очереди, кучи и деревья. Автору попался как раз вопрос о деревьях, с которыми он с университетских времен не встречался и которые, скорее всего, на новой работе ему бы тоже не понадобились. Однако на собеседовании зачастую проверяются не только практические навыки, но и общая ИТ-эрудиция.

  • Для тренировки нужно использовать самый простой редактор кода и таймер. Хотя в реальной работе повсеместно используются IDE с автодополнением кода и прочей ИИ-функциональностью, крупные компании при проведении теста обычно настаивают на старомодном способе решения задач, без каких-либо подсказок со стороны IDE. Писать код надо быстро – поэтому во время подготовки к собеседованию обязательно нужно пользоваться таймером для самоконтроля.

  • Не надо решать задания по порядку. Необходимо прочитать все вопросы сразу и начинать с ответов на те, что попроще. Автор надолго застрял на первом вопросе, хотя мог быстро ответить на второй и успел бы выполнить третье задание. Два решенных задания, несомненно, лучше, чем незаконченный ответ на первый вопрос.

📖🤖 Больше полезных книг вы найдете на нашем телеграм-канале

«Книги для дата-сайентистов | Data Science»

🛠️ Инструменты

BullMQ – библиотека для Node.js, которая реализует быструю и надежную систему очередей, основанную на Redis и предназначенную для решения всех основных задач в современных микросервисных архитектурах (сглаживание пиков нагрузки, создание надежных каналов связи между сервисами, распределение ресурсоемких задач между несколькими обработчиками и тому подобное).

Основные возможности и преимущества BullMQ:

  • Точная обработка сообщений – библиотека гарантирует доставку как минимум один раз.

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

  • Высокая производительность – благодаря эффективным Lua-скриптам и конвейерной обработке.

  • Минимальное использование CPU.

  • Распределенное выполнение заданий на основе Redis.

  • Поддержка очередей LIFO и FIFO.

  • Приоритезация и отсроченное выполнение заданий.

  • Запланированные и повторяющиеся задачи по расписанию.

  • Настройка параллельности для каждого обработчика.

  • Многопоточные (изолированные) функции обработки.

  • Автоматическое восстановление после сбоев процесса.

  • Поддержка зависимостей между задачами (родительские и дочерние задачи).

📖🦫 Больше полезных книг вы найдете на нашем телеграм-канале

«Книги для Go-разработчиков»

SigNoz – опенсорсный инструмент для мониторинга и устранения неполадок в развернутых приложениях. Это отличная бесплатная альтернатива коммерческим решениям – DataDog и New Relic.

Основная функциональность:

  • Единый интерфейс для метрик, трассировок и логов.

  • Визуализация метрик производительности приложений (RPS, процентили задержек, частота ошибок).

  • Распределенная трассировка для выявления проблем в сервисах.

  • Управление логами с продвинутым построителем запросов.

  • Мониторинг инфраструктуры.

  • Отслеживание исключений в различных языках программирования.

  • Настраиваемые оповещения.

  • Поддержка OpenTelemetry для инструментирования приложений.

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

Итоги недели в мире бэкенда и обзоры новых сервисов: 3 эпических сбоя, вызванных регулярками Backend, Искусственный интеллект, Инновации, Микросервисы, Программирование, Разработка, Технологии, Cloudflare, Отдел кадров, IT, Javascript, Nodejs, Regex, Stack Overflow, Windows, Видео, Длиннопост, YouTube, YouTube (ссылка)

Интерфейс SigNoz

📖➕➕ Больше полезных книг вы найдете на нашем телеграм-канале «Книги для C/C++-разработчиков»

Infisical – опенсорсная платформа для удобного и безопасного управления секретами и конфигурационными данными. Основные возможности:

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

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

  • Предотвращение утечек – помогает предотвратить случайное раскрытие секретной информации, например, путем коммита в Git-репозиторий.

  • Управление конфигурациями – позволяет управлять общими настройками приложений для разных сред (разработка, тестирование, продакшн).

  • Безопасный доступ – предоставляет инструменты (SDK, CLI, API) для безопасного получения секретов в приложениях и инфраструктуре.

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

  • Аудит и версионирование – ведет лог всех действий с секретами и позволяет отслеживать их изменения во времени.

  • Интеграция с инфраструктурой – легко интегрируется с популярными платформами и инструментами (GitHub, AWS, Kubernetes и т. п.).

  • Управление внутренней PKI – позволяет создавать и управлять собственной инфраструктурой открытых ключей для выпуска цифровых сертификатов.

KubeAI – инструмент для развертывания и управления опенсорсными LLM-моделями в среде Kubernetes. Среди основных функций и особенностей:

  • Совместимость с OpenAI. Предоставляет API, совместимый с OpenAI, что позволяет легко заменить сервисы OpenAI в любых ИИ-приложениях на локальные.

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

  • Мультиплатформенность. Может работать на разных аппаратных платформах, включая системы только с CPU, системы с GPU, а в будущем планируется поддержка TPU.

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

  • Простота развертывания. Не требует никаких дополнительных зависимостей типа Istio или Knative.

  • Встроенный пользовательский интерфейс. Предоставляет чат-интерфейс OpenWebUI для взаимодействия с моделями.

  • Управление серверами vLLM, Ollama и FasterWhisper.

  • Интеграция с системами обмена сообщениями. Поддерживает потоковую передачу и пакетную обработку через интеграции с Kafka и другими PubSub-системами обмена сообщениями.

Zed – опенсорсный многопользовательский редактор кода, предназначенный для совместной работы над проектом в реальном времени. Основные особенности и возможности:

  • Написан на Rust и отличается высокой скоростью и минимальными требованиями к ресурсам.

  • Предусматривает интеграцию с LLM для генерации, анализа и рефакторинга кода.

  • Имеет встроенный терминал.

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

  • Разработан с учетом конфиденциальности пользователей и не собирает личные данные.

📖☕ Больше полезных книг вы найдете на нашем телеграм-канале

«Книги для джавистов | Java»

Warp – современный высокопроизводительный терминал с ИИ-функциональностью. Основные особенности и возможности:

  • Производительность. Написан полностью на Rust и использует рендеринг на GPU через Metal API, что обеспечивает высокую скорость работы (60+ FPS даже на 4K- и 8K-мониторах).

  • Поддержка совместной работы в реальном времени.

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

  • Встроенный чат-бот. Понимает указания на естественном языке, дает рекомендации и отвечает на вопросы.

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

  • Совместимость с популярными оболочками. Работает с Bash, ZSH и Fish, сохраняя существующие привязки клавиш.

  • Кроссплатформенность. Работает на macOS и Linux, вскоре будет поддерживать Windows и WASM.

  • Продвинутый UI. В отличие от традиционных терминалов, может отображать различные элементы интерфейса (всплывающие уведомления, меню и т. д.).

Автор рассылки: Наталья Кайда

📧 Подписаться на рассылку

Показать полностью 1 2
Backend Искусственный интеллект Инновации Микросервисы Программирование Разработка Технологии Cloudflare Отдел кадров IT Javascript Nodejs Regex Stack Overflow Windows Видео Длиннопост YouTube YouTube (ссылка)
0
aks2dio
aks2dio
11 месяцев назад

Заметка про бэкенд и геймдев⁠⁠

Не редко сталкиваюсь с тем, что для игровых разработчиков вопросы бэкенда являются чем-то инородным 🤔

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

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

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

Есть бэкенд-сервисы по типу Playfab, но в какой-то момент они могут оказаться или слишком дорогими, или недостаточными/неудобными по возможностям, или вовсе недоступными. Тогда захочется реализовать свой сервер 🌐

Если слова типа docker, nginx, deploy, сертификаты, http казались избыточными для геймдева — это не совсем так. Без этого прожить можно, но это сильно сузит спектр возможностей. Если засиживаться в Middle-звене не хочется, то стоит развивать свои компетенции и в этом направлении. А если в планах есть место руководителя, то знание этих технологий необходимо.

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

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

—————————————

#gamedev #development #backend #server #infrastructure #management #career #teamlead #геймдев #разработка #бэкенд #сервер #инфраструктура #менеджмент #управление #компетенции #карьера #рекомендация #видео

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