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

Головоломка. Болты и Гайки

Казуальные, Гиперказуальные, Головоломки

Играть

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

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

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

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

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

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

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

IT + Java

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

Программирование IT юмор Программист Юмор Работа Картинка с текстом Разработка Обучение Android Python Все
306 постов сначала свежее
1
Proglib
Proglib
10 месяцев назад
Серия Итоги недели в мире бэкенда, обзоры новых сервисов

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

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

📝 11 лучших инструментов для документации API

Документация служит всеобъемлющим руководством, объясняющим, как взаимодействовать с сервисом через API. Хорошая документация ускоряет процесс разработки, уменьшает количество ошибок и улучшает общее качество интеграции, поскольку включает в себя:

  • Описание конечных точек (эндпойнтов).

  • Форматы запросов и ответов.

  • Методы аутентификации.

  • Обработку ошибок.

  • Примеры использования.

Представляем подборку лучших инструментов для создания API-документации.

Swagger

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

Apidog

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

ReDoc

ReDoc – опенсорсный инструмент, поддерживающий спецификации OpenAPI 2.0 и 3.0. Он отлично подходит для публикации интерактивной API-документации и предлагает удобную навигацию с настраиваемым поиском, а также стильный, адаптивный дизайн с возможностью настройки тем.

DapperDox

DapperDox – опенсорсный OpenAPI-рендерер, совместимый с OAS 2.0 и 3.0. Он позволяет использовать контент в формате Markdown для создания диаграмм и предоставляет модуль исследования структуры API для практических экспериментов.

🎓☕ Подтянуть свои знания по Java вы можете на нашем телеграм-канале «Библиотека Java для собеса»

Theneo

Theneo – генератор документации, использующий ИИ для автоматического описания API. У него простой интерфейс, напоминающий Notion, и он поддерживает интеграции с Swagger, Postman и GitHub.

Sphinx

Sphinx – мощный генератор документации, широко используемый в Python-сообществе. Он поддерживает много языков и предлагает широкие возможности для настройки. Sphinx может генерировать документацию в разных форматах, включая HTML, PDF и ePub.

Javadoc

Javadoc специально разработан для документирования Java-кода. Он извлекает комментарии и аннотации из исходного кода для создания HTML-документации с подробным описанием классов, методов и полей.

DocFX

DocFX – генератор статических сайтов, разработанный Microsoft и с ноября 2022 года поддерживаемый сообществом .NET Foundation. Предлагает настраиваемые шаблоны для создания документации и лендингов.

Doxygen

Doxygen поддерживает C++, С, Objective-C, Python, Java, IDL, PHP, C# и Fortran, может генерировать документацию в разных форматах, включая HTML, PDF и LaTeX.

Slate

Slate фокусируется на простоте и удобстве использования, предоставляя удобный, современный, адаптивный интерфейс для API-документации. Он поддерживает Markdown, подсвечивает синтаксис больше 100 языков и предлагает интерактивную консоль для тестирования API-эндпойнтов.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Интерактивная API-документация на Slate

➕➕🧩 Интересные задачи по C++ для практики можно найти на нашем телеграм-канале «Библиотека задач по С++»

Docusaurus

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

Приглашаем вас на вебинар «Как меняется математика в разных индустриях: от мобильных игр к фондовым рынкам», который состоится 22 августа в 20:00 по МСК. Там вы сможете:

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

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

  • Изучить реальные кейсы применения математики в GameDev и финансах.

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

Стать участником вебинара

😎 Автоматизация слепых SQL-инъекций на основе логических значений

Слепая SQL-инъекция на основе логического значения (Boolean-Based Blind SQL Injection) – тип SQL-инъекции, где атакующий не видит прямого вывода SQL-запроса, но может делать выводы на основе логических (истина/ложь) ответов от приложения (эти ответы могут проявляться в виде разных кодов состояния HTTP, разного содержимого ответа или реже разных заголовков).

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

  • Простейший метод – извлекать данные по одному символу, используя функции SUBSTRING() и ASCII() в MySQL. Это позволяет узнавать значение каждого символа в строке путем сравнения с ASCII-кодами.

  • Оптимизированный подход – использовать алгоритм бинарного поиска. Это сокращает количество запросов для определения одного символа с 96 до 7, что значительно ускоряет процесс и делает атаку менее заметной.

  • Дополнительные приемы для извлечения разных типов данных включают использование подзапросов для выбора данных из произвольных таблиц, объединение значений из нескольких строк в одну строку с помощью GROUP_CONCAT и преобразование разных типов данных (числа, даты и т. д.) в строки, которые легче извлечь.

Для дальнейшего ускорения процесса можно использовать многопоточность с помощью ThreadPoolExecutor из библиотеки concurrent.futures.

🦫🎓 Подтянуть свои знания по Go вы можете на нашем телеграм-канале «Библиотека Go для собеса»

📶 Паттерны коммуникации в распределенных системах

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

Запрос-ответ с HTTP

Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP – GET, POST, PUT и DELETE.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

HTTP-запрос и ответ 

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

Общие данные

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

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Общие данные

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

Асинхронный запрос-ответ

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

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Асинхронный запрос-ответ

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

🧩☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»

Коммуникация на основе событий

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

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Коммуникация на основе событий

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

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

Postgres Sandbox – ИИ-песочница для работы с PostgreSQL в браузере. Проект реализован на PGlite – легковесной версии PostgreSQL, скомпилированной в WebAssembly и упакованной в клиентскую библиотеку TypeScript. Это позволяет запускать базу данных PostgreSQL непосредственно в браузере, Node.js и Bun без необходимости устанавливать другие зависимости. Размер PGLite – всего 3 Мб после сжатия Gzip, при этом база поддерживает многие расширения PostgreSQL, включая pgvector.

textual-plotext – виджет-обертка библиотеки для построения графиков Plotext. Визуализирует данные из Python-скриптов прямо в терминале.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Такие графики можно строить прямо в терминале

➕➕🎓 Подтянуть свои знания по C++ вы можете на нашем телеграм-канале «Библиотека С++ для собеса»

BunkerWeb – опенсорсный веб-фаервол (WAF), созданный на основе NGINX. Предназначен для защиты веб-сервисов – делает их безопасными по умолчанию. Легко интегрируется в существующие среды (Linux, Docker, Swarm, Kubernetes и т. д.), полностью адаптируется под ваши специфические требования. Предоставляет удобный веб-интерфейс и систему плагинов.

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

Viking – инструмент для управления удаленными серверами (и группами серверов) через SSH.

Terminus – опенсорсная ОС на базе Kubernetes, которая позволяет создать домашнее облако на собственном сервере. Подходит для любых задач – локального хостинга LLM, хаба по управлению IoT-девайсами, персонального репозитория или рабочего пространства.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Собственное облако Terminus

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

emval – супербыстрый валидатор email-адресов для Python-приложений, написанный на Rust.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

emval работает в 100–1000 раз быстрее других подобных модулей

🦫🧩 Интересные задачи по Go для практики можно найти на нашем телеграм-канале «Библиотека задач по Go»

RustPython – интерпретатор Python, написанный на Rust.

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

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

Показать полностью 8 6
IT Инновации Микросервисы Программирование Разработка Технологии Golang Java Python Длиннопост YouTube YouTube (ссылка) Видео
0
2
glass53
glass53
11 месяцев назад

Дневник разработчика. 2 года лени в обучении⁠⁠

Всем привет.

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

Честно скажу. Я ленивая жопа. Я не могу заставить себя учиться чему то новому. 2 Года назад я попробовал выучиться на Java разработчика. У меня не получилось.

Лень. Мозг сопротивляется получению новой информации. Такое ощущение, что внутри меня сидит маленькое ленивое чмо.
-Забей болт. сходи на рыбалку.
-Хватит мне больно. Давай просто поиграем в видео игры.
-Смотри. Там новый шортс на ютубе. Отдохнем 5 минут и продолжим.
Я ведусь на эти подсказки и перестаю учиться. Почему же? наверное у меня нет среднестатистического 49,5.

Я не буду грузить вас терминологией. Это не интересно. Я буду описывать свое состояние и какие то маленькие победы.

Будильник на 8 вечера каждый день заведен. Начинаем себя дисциплинировать.

Дневник разработчика. 2 года лени в обучении IT, Java, Дневник, Карьера, Юмор, Текст, Длиннопост
Показать полностью 1
[моё] IT Java Дневник Карьера Юмор Текст Длиннопост
4
0
lifeofjuniordev
lifeofjuniordev
11 месяцев назад

ПОЧЕМУ СЕКЬЮРИТИ ФРЕЙМВОРКИ ТАКИЕ СЛОЖНЫЕ⁠⁠

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

Ладно, спринг по своей философии огромный комбайн.
Возьмем ктор - он простой и представляет только необходимые функции.
Так в нем выглядит аутентификация:
routing {
authenticate("auth-basic") {
get("/login") {
// ...
}
get("/orders") {
// ...
}
}
get("/") {
// ...
}
}
Функция authenticate на основе переданной строки определяет, какую функцию авторизации вызвать... Зачем?

Почему нельзя просто вызвать функцию авторизации, внутри get? Чтобы была возможность "обернуть" геты функцией авторизации? Да, так, конечно, лаконичнее, но неужели весь огород, который пришлось фигачить, этого стоит?

👨‍💻 Джуниор

ПОЧЕМУ СЕКЬЮРИТИ ФРЕЙМВОРКИ ТАКИЕ СЛОЖНЫЕ Telegram (ссылка), Программирование, Java, IT
Показать полностью 1
[моё] Telegram (ссылка) Программирование Java IT
3
7
crazyzubr
11 месяцев назад
Лига программистов
Серия История с Java...script

Продолжение истории с java...script⁠⁠

Может кому-то покажется неочевидным, но я в течение всего периода работы в вышеупомянутой компании (да и сейчас, кстати, тоже) пытался понять: почему все-таки была сделана пауза после произнесенного "Javа"? И почему все же добавлено "...script" после паузы, если проекты были именно на Java? А проект был не один. Новый сайт провайдера тоже был начат на Java, а именно по технологии JSP (Java Server Pages); его мне тоже передали.

В один из дней "босс" (так называли того самого главного директора в компании) пришел ко мне и говорит: "Добавь новый сертификат на тестовый сайт". Я думаю это была одна из проверок того насколько я разобрался с этим проектом. Сертификат, то есть по сути картинка в pdf, в блок на сайте я добавил, это ведь было простое копирование элемента в шаблоне и дополнительно загрузка файла по scp на сервер. Основная сложность была только в том, что я еще не деплоил ни разу сайт, но в этом мне по скайпу помог прежний программист. Отсюда я делал вывод, что раз он проверяет мою способность менять что-либо на тестовом сайте, значит до сих пор думает что я умею в Java. Вот только позднее выяснилось (и "босс" об этом, конечно не сказал), что новый сайт теперь делает другой программист на аутсорсе. Должно быть делал его на удаленке, в офис он по крайней мере никогда не приходил. Забавно, что новая версия была сделана на PHP (а если быть точнее CRM битрикс).

Второй Java-проект (тот который я переписал на PHP) был призван выводить операторам номера должников. Основная его фича заключалась в том, чтобы показывать каждому оператору свой набор абонентов. Соответственно будет ошибкой показывать двум операторам одного клиента. Ну, и тех клиентов, с которыми состоялся разговор тоже не следует отображать. Оператор видел список, звонил по порядку и проставлял статусы. С этим и происходила беда, иногда операторам выпадали номера, по которым уже звонили недавно. Причем могли выпасть другому оператору в тот же день. Эта проблему, как я понял на тот момент, заключалась как раз в сервере tomcat6, а именно был какой-то баг с потоками.

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

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

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

После того как проект был переписан произошла какая-то дичь. Проблемы с потоками и выводом повторных абонентов по идее не должно быть. И все же меня вызвали "на ковер" к "боссу", и там уже была эта "мадам". Она указала перстом на меня и говорит "его спрашивайте". А "босс" такой - "так это ты во всем виноват?". Максимально непонятно что у них там происходило до того как я вошел, и какая проблема случилась, но естественно я подумал что где-то допустил ошибку.

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

После ухода из той компании провайдера я заходил периодически на страницу проекта, чтобы проверить не поменялось ли чего. Через три месяца обнаружил, что код обратно вернулся на Java-версию. Это было очевидно, потому что изначально сайт был по SPA-технологии, то есть после выполнения запроса обновление страницы было без перезагрузки этой самой страницы. Я же переписал на PHP по технологии SSR, только в некоторых местах был добавлен AJAX. Страница входа точно была с перезагрузкой, даже если просто выводилась ошибка входа. Кроме того, закрыли доступ или удалили аккаунт и я больше не мог входить внутрь ЛК оператора.

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

Показать полностью
[моё] Программирование IT IT юмор Карьера Java Javascript Личный опыт Программист Текст
4
18
quazr
11 месяцев назад

Начинать нужно с малого⁠⁠

Начинать нужно с малого IT юмор, Программирование, Мемы, IT, Telegram (ссылка), Java

айтификация

IT юмор Программирование Мемы IT Telegram (ссылка) Java
3
1765
crazyzubr
1 год назад
Лига программистов
Серия История с Java...script

История с Java...script⁠⁠

Устраивался как-то на одну из первых работ. Откликнулся на вакансию программиста в компанию местного провайдера. В описании ничего необычного, требуются знания HTML, JavaScript и чего-то еще, уже не вспомню.

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

Уселись с ним на диван, и он начал беседу: "Насколько хорошо ты знаешь Java". И делает паузу. Я напрягся. После двухсекундной паузы он все же произносит: "...script". Я с облегчением выдохнул: "Нет предела совершенству." Далее шел еще какой-то диалог, но не суть важно.

На первый рабочий день пришел другой программист и сразу выяснилось, что я нужен ему на замену, а он увольняется (или скорее его увольняют); поэтому он передает мне все дела, документацию и прочее. Когда он открыл проект, над которым работал в данный момент, то я покрылся холодным потом. Это был самый настоящий 100% натуральный код на Java. Он поинтересовался – с какого пункта надо объяснять. Я признался, что с нуля. Пути отхода я уже не видел. В голове промелькнули мысли про голодные дни, когда я снова ищу работу, и надо проходить собеседования. Поэтому я остался внимать суть по новому для меня направлению, тем более день собеседования уже был позади.

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

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

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

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

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

Показать полностью
[моё] Личный опыт Программирование IT PHP Собеседование Java Javascript Программист IT юмор Карьера Текст
347
2
lifeofjuniordev
lifeofjuniordev
1 год назад

ИЗБАВЛЯЕМСЯ ОТ ХАРДКОДА В JAVA С @FieldNameConstants⁠⁠

Если вы работали с JPA Criteria API, то вам точно приходилось хардкодить название полей:
public Specification<Car> where(@Nullable CarFilterDto carFilter) {
return (root, query, cb) -> cb.equal(root.get("type"), carFilter.getType());
}
Или возможно вам нужно было замапить поля дто, по которым можно сортировать, с полями entity:
private final Map<String, String> sortingMap = Map.of(
"user.age", "user_age",
"creationDate", "creationDate"
);

В таких случаях, чтобы избавиться от хардкода, нужно написать константы с именами полей.
Вручную это делать долго, но оказывается, это умеет ломбок!
Вот так выглядит код с ломбоком:
@FieldNameConstants
public class FieldNameConstantsExample {
private final String iAmAField;
private final int andSoAmI;
@FieldNameConstants.Exclude private final int asAmI;
}
и вот во что он превратится:
public class FieldNameConstantsExample {
private final String iAmAField;
private final int andSoAmI;
private final int asAmI;

public static final class Fields {
public static final String iAmAField = "iAmAField";
public static final String andSoAmI = "andSoAmI";
}
}
Также, можно:
- генерировать енам вместо констант
- поменять название статического класса
- поменять уровень доступа полей
- генерировать только для явно включенных полей
@FieldNameConstants(asEnum = true,
innerTypeName = "StaticClassName",
level = lombok.AccessLevel.PRIVATE,
onlyExplicitlyIncluded = true)

👨‍💻Джуниор

Показать полностью
[моё] Telegram (ссылка) Программирование IT Java Текст
1
49
megavatt
megavatt
1 год назад

Когда осознал, куда пришел⁠⁠

Когда осознал, куда пришел Юмор, IT, IT юмор, Java, Reddit, Срач, Перевел сам, Telegram (ссылка), Скриншот

itmemhub

Показать полностью 1
Юмор IT IT юмор Java Reddit Срач Перевел сам Telegram (ссылка) Скриншот
10
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии