Search
Write a publication
Pull to refresh
0
0
Константин Артюшкевич @profyan

Старший фронтенд разработчик

Send message

Шпаргалки по безопасности: REST

Reading time5 min
Views28K


REST — чрезвычайно популярная архитектура веб-приложений. Для вызова функций на сервере используются обычные HTTP-запросы с задаваемыми параметрами (для структуризации параметров обычно используют JSON или XML), при этом, строгого стандарта для REST-архитектуры не существует, что добавляет ей гибкости (и, конечно, немного хаоса).
Читать дальше →

JavaScript-движки: как они работают? От стека вызовов до промисов — (почти) всё, что вам нужно знать

Reading time14 min
Views64K

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

Начнём наше путешествие в язык с экскурсии в удивительный мир JavaScript-движков.
Читать дальше →

Совершенствуем контроль сессий в Spring Security

Reading time10 min
Views33K
Добрый день, уважаемое Сообщество.

Разрабатывая многопользовательское web-приложение, столкнулся с проблемой многократного входа в систему (новый login при незавершенной старой сессии), решение которой потребовало необычного обходного маневра, чтобы сохранить логичную работу программы и ее понятный дизайн. В этой статье хочу поделиться c Вами опытом, осветив сперва традиционные подходы к управлению сессиями в Spring Security, и завершив обзор рацпредложением в виде 'костыля' собственной разработки.

Проблема контроля сессий актуальна для множества проектов. В моем случае это была игра (бэкенд на Java+Spring), где зарегистрировавшиеся пользователи могут выбирать с кем сразиться из списка присутствующих на сайте свободных игроков. После входа (login) игрока информация о нем добавляется в структуру данных в памяти. Часть этих данных асинхронно отображается в игровом интерфейсе, как список игроков, присутствующих на арене. Когда игрок выходит, то информация о нем должна быть сохранена в БД, удалена из структуры данных, и игрок более не будет отображаться в списке соперников online. Здесь возникали некоторые трудности из-за асинхронности, но не будем затрагивать их, ведь они лежат в стороне от темы статьи.

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

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


Уходим по-аглийски


Для таких 'английских' сценариев используется следующий подход.

1.  Добавляется SessionEventListener при регистрации DispatcherServlet в ходе стандартной инициализации и настройки Spring MVC приложения:
Читать дальше →

Spring Websocket + SockJs. How it works?

Reading time6 min
Views33K
Доброго времени суток уважаемые хабравчане. В данной статье хочу продолжить рассказ устройства Spring Websocket, рассмотрев серверную реализацию Spring Websocket + SockJs.

SockJs — это JavaScript библиотека, которая обеспечивает двусторонний междоменный канал связи между клиентом и сервером. Другими словами SockJs имитирует WebSocket API. Под капотом SockJS сначала пытается использовать нативную реализацию WebSocket API. Если это не удается, используются различные транспортные протоколы, специфичные для браузера, и представляет их через абстракции, подобные WebSocket. Про порт данной библиотеки в мир Spring Frameworks мы сегодня и поговорим.
Читать дальше →

Выпускники американских университетов превосходят выпускников России, Китая и Индии

Reading time6 min
Views90K
Каждый месяц мы читаем новости о недостатках и провалах образования в США. Если верить прессе, то начальная школа в Америке не способна научить учеников даже базовым знаниям, знаний даваемых средней школой явно недостаточно для поступления в колледж, ну а школьники, сумевшие все же продержаться до окончания колледжа, оказываются абсолютно беспомощны за его стенами. Но недавно была опубликована весьма интересная статистика, показывающая что по крайней мере в одном конкретном аспекте подобное мнение весьма далеко от истины. Несмотря на известные проблемы американской системы среднего образования, выпускники американских колледжей специализирующихся на computer science оказались прекрасно развитыми и очень конкурентоспособными специалистами по сравнению со своими зарубежными конкурентами.

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

История транзистора, часть 3: многократное переизобретение

Reading time14 min
Views19K


<< До этого: Из горнила войны

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

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

Однако ничего этого бы не произошло, если бы изобретение транзистора остановилось бы на работе Бардина и Бреттейна.
Читать дальше →

Spring Data JPA: доводим напильником

Reading time14 min
Views71K

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

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

Космос как смутное воспоминание

Reading time10 min
Views46K
Мне больно. Известный советский космонавт сказал, что космос – это факт далекого прошлого. Эпоха романтики прошла, эпоха зрелости не наступила. Мы летаем на орбиту на высоту в 180 км и уже много-много лет рассуждаем о возвращении на Луну и высадке на Марс. Космические программы прошлого заканчиваются и сворачиваются. Комплексы отслуживают свой ресурс и списываются в утиль. Одна только МКС кружит и кружит над Землей, словно обозначая наше присутствие там, как таможенный пост на далекой безлюдной границе, до которой мало кому есть дело.
Читать дальше →

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

Reading time16 min
Views15K
На рынке труда в Java-разработке наблюдается интересная ситуация. Активных резюме разработчиков больше 100 000 и на одно резюме приходится одна вакансия. В то же время работодатели и кадровые агентства жалуются на недостаток кадров, и, несмотря на тысячи резюме, найти хорошего специалиста тяжело. Например, Java-разработчик продукт дефицитный: встречается редко, сокращения их не касаются, зарплаты растут, а конкуренция падает. Исследовать причины явления мы не будем, а расскажем об одном из способов, как можно эту проблему решать.



Искать технических специалистов можно долго, но работа не ждет, поэтому приходится принимать на работу не достаточно квалифицированные кадры и обучать в процессе. Из вариантов: самообучение в свободное время или курсы и семинары в рабочее, но можно выбрать и игры. Артём Ларин (artem_larin) расскажет почему традиционные способы обучения ненадежны и почему игры — в чём-то лучше остальных.

Лабиринты: классификация, генерирование, поиск решений

Reading time44 min
Views93K

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

Классификация лабиринтов


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

Введение в криптографию и шифрование, часть первая. Лекция в Яндексе

Reading time20 min
Views262K
Чтобы сходу понимать материалы об инфраструктуре открытых ключей, сетевой безопасности и HTTPS, нужно знать основы криптографической теории. Один из самых быстрых способов изучить их — посмотреть или прочитать лекцию Владимира ivlad Иванова. Владимир — известный специалист по сетям и системам их защиты. Он долгое время работал в Яндексе, был одним из руководителей нашего департамента эксплуатации.


Мы впервые публикуем эту лекцию вместе с расшифровкой. Начнём с первой части. Под катом вы найдёте текст и часть слайдов.

Криптоалгоритмы. Классификация с точки зрения количества ключей

Reading time52 min
Views119K


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

Криптография в Java

Reading time11 min
Views64K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Java Cryptography" автора Jakob Jenkov.


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

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

Криптография в Java. Класс Cipher

Reading time5 min
Views36K

Привет, Хабр! Представляю вашему вниманию перевод второй статьи "Java Cipher" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

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

Разрабатываем Telegram-бота для отслеживания фильмов на NodeJS и TypeScript

Reading time9 min
Views77K


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

Я достаточно часто сталкивался с такой проблемой и решил ее созданием Eve — Telegram-бота, который помогает мне не забывать про релизы моих любимых фильмов. Что это, как оно работает и как разрабатывалось вы можете почитать под катом!
Читать дальше →

CI/CD используя Jenkins на Kubernetes

Reading time7 min
Views57K

Добрый день.


На Хабре уже есть несколько статей о jenkins, ci/cd и kubernetes, но в данной я хочу сконцентрироваться не на разборе возможностей этих технологий, а на максимально простой их конфигурации для постройки ci/cd pipeline.


Я подразумеваю, что читатель имеет базовое понимание docker, и не буду останавливаться на темах установки и конфигурирования kubernetes. Все примеры будут показаны на minikube, но так же могут быть применены на EKS, GKE, либо подобных без значительных изменений.


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

Изучаем Docker, часть 4: уменьшение размеров образов и ускорение их сборки

Reading time8 min
Views170K
В этой части перевода серии материалов, которая посвящена Docker, мы поговорим о том, как оптимизировать размеры образов и ускорить их сборку. В прошлых материалах мы сравнивали образы Docker с пиццей, термины с пончиками, а инструкции файлов Dockerfile с бубликами. Сегодня же не будет никакой выпечки. Пришло время посидеть на диете.

Часть 1: основы
Часть 2: термины и концепции
Часть 3: файлы Dockerfile
Часть 4: уменьшение размеров образов и ускорение их сборки
Часть 5: команды
Часть 6: работа с данными


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

Моделирование метрополиса

Reading time10 min
Views11K
В основе одной из самых знаковых игр всех времён лежит теория о том, как умирают города, внезапно оказавшая слишком влиятельной.


В 1984 году разработчик Уилл Райт как раз завершил работу над своей первой видеоигрой в жанре shoot-em-up под названием Raid on Bungeling Bay. В ней игрок управляет вертолётом, сбрасывающим бомбы на вражеские цели, расположенные на цепи островов. Райт был доволен своей игрой, получившей успех у покупателей и критиков, но даже после её выпуска продолжал экспериментировать с редактором рельефа, который использовал для дизайна уровней Raid. «Оказалось, что мне было гораздо интереснее заниматься этой частью, чем играть в саму игру и бомбить цели», — рассказывал Райт Onion AV Club. Очарованный создаваемыми островами, Райт продолжал добавлять в редактор уровней новые функции, создавая такие сложные элементы, как автомобили, люди и дома. Он был восхищён идеей сделать эти острова больше похожими на города, и продолжал выдумывать способы сделать мир «живым и более динамичным».

Пытаясь разобраться в том, как функционируют реальные города, Райт нашёл книгу 1969 года Джея Форрестера под названием Urban Dynamics. Форрестер был инженером-электротехником, начавшим вторую карьеру в области компьютерных симуляций; в Urban Dynamics используется его методология симуляции, позволившая ему предложить теорию о развитии и увядании городов, вызвавшую противоречивые отзывы. Райт использовал теории Форрестера, чтобы превратить создаваемые в редакторе уровней города из статичных карт зданий и дорог в живые модели растущего метрополиса. Со временем Райт убедился, что «подопытный город» был увлекательной видеоигрой без логического конца. После выпуска в 1989 году игра стала безумно популярной, продалась миллионами копий, выиграла десятки наград, зародила целую франшизу последователей и десятки подражателей. Она называлась SimCity.
Читать дальше →

Загоризонтный Дятел: недолгая история объекта «Чернобыль-2»

Reading time9 min
Views107K

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

https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Woodpecker.ogg

Причём сигнал был «плавающий» — поработав несколько минут на одной частоте, он переходил на другую. Загадочность и создаваемые неудобства привели к тому, что военные ряда стран попытались запеленговать источник. Оказалось, что он расположен в глубине Советского Союза. А поскольку сигнал — к тому времени получивший прозвище «Русский Дятел», — периодически вторгался на частоты, зарезервированные для авиации, этим не замедлили воспользоваться США, Великобритания и Канада, заявившие СССР протест. СССР сделал удивлённое лицо и ответил, что ничего не знает ни о каком сигнале.
Читать дальше →

Откуда растут ноги у Java Memory Model

Reading time19 min
Views78K
Современное железо и компиляторы готовы перевернуть с ног на голову наш код, лишь бы он работал быстрее. А их производители тщательно скрывают свою внутреннюю кухню. И все прекрасно, пока код выполняется в одном потоке.

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

Но все уже осознали, ведь жить с этим как-то надо. А Java программисты даже неплохо живут. Потому что в Java есть модель памяти — Java Memory Model (JMM), которая предоставляет достаточно простые правила для написания корректного многопоточного кода.

И правил этих достаточно для большинства программ. Если вы их не знаете, но пишите или хотите писать многопоточные программы на Java, то лучше как можно скорее ознакомиться с ними. А если знаете, но вам не хватает контекста или интересно узнать откуда растут ноги у JMM, тогда статья может вам помочь.
Читать дальше →

Information

Rating
Does not participate
Location
Омск, Омская обл., Россия
Registered
Activity