Pull to refresh
4
1

Пользователь

Send message

Рассылка Push-уведомлений с SpringBoot сервера

Reading time4 min
Views22K

Предисловие


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

Также данная статья может быть полезна программирующим на Node.js, Python и Go, поскольку библиотека есть и на этих языках.
Читать дальше →

ООП мертво, да здравствует ООП

Reading time18 min
Views60K
image

Источники вдохновения


Этот пост возник благодаря недавней публикации Араса Пранцкевичуса о докладе, предназначенном для программистов-джуниоров. В нём рассказывается о том, как адаптироваться к новым ECS-архитектурам. Арас следует привычной схеме (объяснения ниже): показывает примеры ужасного ООП-кода, а затем демонстрирует, что отличным альтернативным решением является реляционная модель (но называет её «ECS», а не реляционной). Я ни в коем случае не критикую Араса — я большой фанат его работ и хвалю его за отличную презентацию! Я выбрал именно его презентацию вместо сотен других постов про ECS из Интернета потому, что он приложил дополнительные усилия и опубликовал git-репозиторий для изучения параллельно с презентацией. В нём содержится небольшая простая «игра», используемая в качестве примера выбора разных архитектурных решений. Этот небольшой проект позволил мне на конкретном материале продемонстрировать свои замечания, так что спасибо, Арас!

Слайды Араса выложены здесь: http://aras-p.info/texts/files/2018Academy — ECS-DoD.pdf, а код находится на github: https://github.com/aras-p/dod-playground.

Я не буду (пока?) анализировать получившуюся ECS-архитектуру из этого доклада, но сосредоточусь на коде «плохого ООП» (похожего на уловку «чучело») из его начала. Я покажу, как бы он выглядел на самом деле, если бы правильно исправили все нарушения принципов OOD (object-oriented design, объектно-ориентированного проектирования).

Спойлер: устранение всех нарушений OOD приводит к улучшениям производительности, аналогичным преобразованиям Араса в ECS, к тому же использует меньше ОЗУ и требует меньше строк кода, чем ECS-версия!

TL;DR: Прежде чем прийти к выводу, что ООП отстой, а ECS рулит, сделайте паузу и изучите OOD (чтобы знать, как правильно использовать ООП), а также разберитесь в реляционной модели (чтобы знать, как правильно применять ECS).
Читать дальше →

Первое знакомство с протоколом HTTP через написание простейшего Web сервера на Java

Reading time4 min
Views41K
Думаю что не будет преувеличением утверждать, что знание и понимание сути протокола HTTP необходимо любому, кто решил сколь-нибудь серьезно заняться любым из направлений современной Web разработки. Мой личный опыт говорит о том, что понимание это приходит не сразу. Стыдно сказать, что были времена, когда слова GET и POST были для меня сродни магическим заклинаниям, а о существовании PUT, PATCH и DELETE я даже не подозревал.

Несколько месяцев назад помимо собственно разработки я занялся также преподаванием, и возник вопрос о том, как проще и понятнее рассказать о сути протокола HTTP будущим Java разработчикам. После нескольких дней возни и ряда неудачных попыток сделать презентацию возникла идея, а почему бы не написать простейший HTTP сервер на Java, потому как ни что так хорошо не объясняет суть протокола, как его простейшая, но работающая реализация.
Читать дальше →

В разработке — каждый сам за себя. Но иногда это приводит в тупик

Reading time5 min
Views48K


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

У меня была неделя — целая бесконечность, которой мне не хватило. Снова и снова я перебирал в голове варианты использования того, что должен сделать, но картинка идеального модуля не клеилась. Всегда находился кейс, который хорошо показывал: такой дизайн — говно. Я думал, играл на гитаре, пробовал писать, тупил в монитор, гуглил, играл с детьми, снова думал — голова всегда была занята дурацким модулем.

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

В понедельник утром я отправил пулл реквест. Его приняли с восторгом. Но способ, на который я пошел… вот уж никогда не думал, что отважусь на такое.
Читать дальше →

Боль в спине — понимание с позиции современной медицины

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

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


Несмотря на акцент на болях в области поясницы в целом все написанное применимо в контексте болей и в других отделах позвоночника.
Читать дальше →

Полное практическое руководство по Docker: с нуля до кластера на AWS

Reading time39 min
Views1.8M



Содержание



Вопросы и ответы


Что такое Докер?


Определение Докера в Википедии звучит так:


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



Ого! Как много информации.

Читать дальше →

Прогулка по заводу желаний

Reading time36 min
Views33K
Откуда приходят и куда исчезают желания?

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

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

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

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

Или еще проще — проблемы нет, у вас воля слабая, отговорки ищете, возьми и сделай (just do it).

Позвольте усложнить.
Читать дальше →

Побеждаем прокрастинацию игровой зависимостью

Reading time3 min
Views28K
Всем вам, безусловно, знакомо явление прокрастинации. Психологическая неспособность покинуть зону комфорта и начать заниматься каким-то делом здесь и сейчас съела немало человеко-часов представителей самых разных профессий. Под её влиянием, не занимаясь ни делом, ни отдыхом, а только каким-нибудь бесцельным занятием вроде сёрфинга сети, мы зарабатываем только лишний стресс. Это история о том, как одна случайная идея позволила мне не только избавиться от этой проблемы, но и повысить свою продуктивность до уровня, о котором я раньше мог только мечтать.

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

Lombok возвращает величие Java

Reading time11 min
Views139K


Мы в Grubhub почти во всём бэкенде используем Java. Это проверенный язык, который за последние 20 лет доказал свою скорость и надёжность. Но с годами возраст «старичка» всё-таки начал сказываться.

Java — один из самых популярных языков JVM, но не единственный. В последние годы конкуренцию ему составляют Scala, Clojure и Kotlin, которые обеспечивают новую функциональность и оптимизированные функции языка. Короче говоря, они позволяют делать больше с более лаконичным кодом.
Читать дальше →

Как научиться учиться

Reading time5 min
Views14K
Привет, Хабр! Представляю вашему вниманию перевод статьи «HOW TO LEARN HOW TO LEARN».

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

Мы, IT-шники, обречены на постоянное обучение до конца жизни.

Еще 10-15 лет назад знания Java и JSP-серверлетов было достаточным для статуса востребованного специалиста. Когда мобильная разработка стала популярной, можно было освоить Objective-C и выучить Cocoa Touch. Теперь все помешаны на React, и современный JavaScript – это уже не тот JavaScript, каким он был 3 года назад. JavaScript того времени – это древний язык сейчас. C C++ все перешли на Go, а теперь переходят на Rust? А как насчет Haskell и Elexir?
Читать дальше →

Осваиваем async/await на реальном примере

Reading time9 min
Views59K
Конструкция async/await представляет собой сравнительно новый подход к написанию асинхронного кода в JavaScript. Она основана на промисах и, в результате, не блокирует главный поток. Новшество этой конструкции заключается в том, что благодаря ей асинхронный код становится похожим на синхронный и ведёт себя подобным образом. Это открывает перед программистом замечательные возможности.

image

До появления async/await при разработке асинхронных механизмов программ использовались коллбэки и промисы. Автор материала, перевод которого мы публикуем сегодня, предлагает сначала вспомнить о том, как писать код по-старому, а потом, на реальном примере, изучить применение async/await.
Читать дальше →

Как освоить синтаксис async/await: реальный пример

Reading time6 min
Views15K
Перед вами перевод статьи Adrian Hajdin, которая была опубликована на сайте freeCodeCamp. Под катом автор понятно и лаконично объясняет, в чем преимущество async/await, и на конкретном примере показывает, как использовать этот синтаксис.

Читать дальше →

Переписываем домашний проект на микросервисы (Java, Spring Boot, Gradle)

Reading time13 min
Views74K

Введение


Image


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


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


Всё это было реализовано в виде прототипа — были пользователи, один урок и одна задача для него, возможность отправить код, который компилировался и исполнялся. Кое-какой фронтенд, но в статье о нём речи не будет. Технологии — Spring Boot, Spring Data, Gradle.


В статье будет реализован такой же прототип, но уже на микросервисах. Реализация будет наиболее простым путём (точнее наиболее простым, из известных мне). Реализация будет доступна любому, кто знаком со Spring.

Читать дальше →

Введение в Spring Boot: создание простого REST API на Java

Reading time8 min
Views438K

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


Каждый раз, создавая очередное корпоративное Java-приложение на основе Spring, вам необходимо повторять одни и те же рутинные шаги по его настройке:


  • В зависимости от типа создаваемого приложения (Spring MVC, Spring JDBC, Spring ORM и т.д.) импортировать необходимые Spring-модули
  • Импортировать библиотеку web-контейнеров (в случае web-приложений)
  • Импортировать необходимые сторонние библиотеки (например, Hibernate, Jackson), при этом вы должны искать версии, совместимые с указанной версией Spring
  • Конфигурировать компоненты DAO, такие, как: источники данных, управление транзакциями и т.д.
  • Конфигурировать компоненты web-слоя, такие, как: диспетчер ресурсов, view resolver
  • Определить класс, который загрузит все необходимые конфигурации
Читать дальше →

Студентам, вечным студентам и жаждущим новых знаний

Reading time6 min
Views9.6K


В ноябре студиозусы всего мира отмечали Международный день студента. А сегодня мы празднуем свой, «локализованный» День российского студенчества — 264 года назад был подписан указ о создании Московского университета, сегодня известного в узких кругах как МГУ. И в честь праздника ловите подборку курсов GeekBrains и видеолекций на любой вкус. Это ведь 200 лет назад можно было получить диплом и прекрасно жить с полученными знаниями до внуков, а сегодня знания устаревают стремительно.

И пока будете читать, не забудьте включить фоном бессмертный Gaudeamus Igitur.
Читать дальше →

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

Reading time6 min
Views53K


Кто сказал, что разработчики могут учиться новому только через книги, видео и анализ чужого кода? Ведь у нас и другие каналы получения информации из окружающего мира. Конечно, речь не о том, чтобы попробовать знания на вкус, пощупать их или понюхать. А вот послушать — самое оно. Мы собрали для вас коллекцию действующих русскоязычных подкастов для разработчиков. Хороший способ дать глазам отдых или занять себя в пробках.
Читать дальше →

JSON API – работаем по спецификации

Reading time23 min
Views178K
В последнее время веб-разработка разделилась. Теперь мы все не full-stack программисты — мы фронтендеры и бэкендеры. А самое сложное в этом, как и везде, это проблема взаимодействия и интеграции.

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

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


Всегда ли нужны Docker, микросервисы и реактивное программирование?

Reading time15 min
Views51K


Автор: Денис Цыплаков, Solution Architect, DataArt

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

Если вы не делаете что-то принципиально новое, например, первый в мире интернет-поисковик или искусственный интеллект для управления запуском ядерных ракет, создать дизайн хорошей системы довольно просто. Достаточно учесть все требования, посмотреть на дизайн похожих систем и сделать примерно так же, не совершив при этом грубых ошибок. Звучит как чрезмерное упрощение вопроса, но давайте вспомним, что на дворе 2019 год, и «типовые рецепты» дизайна систем есть практически для всего. Бизнес может подкидывать сложные технические задачи — скажем, обработать миллион разнородных PDF-файлов и вынуть из них таблицы с данными о расходах — но вот архитектура систем редко отличается большой оригинальностью. Главное тут — не ошибиться с определением того, какую именно систему мы строим, и не промахнуться с выбором технологий.

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

$ ls -l /home/avitotech/new_year

Reading time3 min
Views12K

Привет. Этот пост — поздравление с наступающим Новым годом.


Тут не будет попыток пошутить, подвести итоги-2018 или пожелать всем сразу всего нужного, а будет открытка-загадка про технологии. Вот она.



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


Enjoy!

Читать дальше →

Комплект увольнения

Reading time13 min
Views76K
  • Знание ООП и структуры данных;
  • опыт разработки на Java для Android.;
  • знание Android API, понимание архитектуры Android;
  • знание основ HTTP, XML, JSON;
  • опыт работы с системами контроля версий Git;
  • опыт работы с Android Studio, Gradle;
  • опыт работы с SQL базами данных;
  • знакомство с принципами Material Design;

Узнали? Конечно, узнали. Это — одно из стандартных резюме программиста.

Лично мне такое резюме напоминает одну песню, а точнее одну строку этой песни: «Жигули! Едет и уже хорошо!».

Еще напоминает рекламу тех же Жигулей, где наличие ABS, датчиков дождя и света и т.д. выдается за конкурентное преимущество. Ну и лозунг знаменитый: «Таким и должен быть автомобиль!».

А программист таким и должен быть? Если хочет быть, как жигули – массовым, дешевым и «как бы и не машиной программистом», то да.

Но мы не такие, поэтому будем формировать и формулировать свое конкурентное преимущество – комплект увольнения.



Комплект увольнения – то, что остается с вами, когда вы меняете место работы. Как пел Юрий Шевчук, «Это то, что останется после меня. Это то, что возьму я с собой».
Читать дальше →

Information

Rating
2,650-th
Location
Ижевск, Удмуртия, Россия
Works in
Date of birth
Registered
Activity