Pull to refresh
25
0
Хмелев Александр @akhmelev

программирование и AI

Send message

Компоновка аннотаций в Spring

Reading time6 min
Views8.3K

Привет Хабр! Совсем недавно, в процессе разработки на Spring я столкнулся с невероятным количеством бойлерплейт-кода в аннотациях. Решение сделать с этим что-то было принято мгновенно и вот что из этого вышло...

Читать далее
Total votes 18: ↑18 and ↓0+18
Comments11

Перевод книги Эндрю Ына «Страсть к машинному обучению» Главы 1 — 14

Reading time24 min
Views59K

Некоторое время назад в моей ленте в фейсбуке всплыла ссылка на книгу Эндрю Ына (Andrew Ng) "Machine Learning Yearning", которую можно перевести, как "Страсть к машинному обучению" или "Жажда машинного обучения".


image<img src="<img src="https://habrastorage.org/webt/ds/rc/ct/dsrcctfottkedkf7o1hxbqsoamq.png" />" alt="image"/>


Людям, интересующимся машинным обучением или работающим в этой сфере представлять Эндрю не нужно. Для непосвященных достаточно сказать, что он является звездой мировой величины в области искусственного интеллекта. Ученый, инженер, предприниматель, один из основателей Coursera. Автор отличного курса по введению в машинное обучение и курсов, составляющих специализацию "Глубокое обучение" (Deep Learning).

Читать дальше →
Total votes 40: ↑40 and ↓0+40
Comments3

Как сделать из сайта приложение и выложить его в Google Play за несколько часов. Часть 1/2: Progressive Web App

Reading time8 min
Views97K


Наверное, все близкие к веб-разработке люди уже наслышаны о Progressive Web App. Ещё бы! Эта технология практически уравняла веб и мобильную разработку с точки зрения распространения продуктов и вовлечённости пользователей.

Да, современный фронтенд, написанный, например, на React, работает как приложение. Но вот только скачивается это приложение в браузер и запускается из него. В этом и заключается огромный гандикап, который всегда имела мобильная разработка. Давайте подумаем, чем с точки зрения обычного пользователя, «приложение» отличается от «сайта». Сразу в голову приходит, что приложение в телефоне, а сайт на компьютере. Но ведь есть мобильный браузер, так что сайт и в телефоне тоже. Тогда остаётся 3 существенных отличия:
Читать дальше →
Total votes 52: ↑52 and ↓0+52
Comments31

Обход блокировок на OpenWRT с помощью v2rayA (xray-core) и баз GeoIP, Geosite Antifilter

Level of difficultyEasy
Reading time5 min
Views17K

В данном гайде будем устанавливать пакет v2rayA на OpenWRT на примере стабильной 23.05.0. Рекомендуется роутер минимум с 128 МБ RAM (256 предпочтительно) и памятью более 16 Мб (установка занимает около 30МБ памяти)

v2rayA — это простой в использовании и мощный клиент ориентированный на Linux. Несмотря на название актуальная версия использует xray-core, хотя есть возможность использовать и v2ray-core. Имеет веб-интерфейс для управления настройками и импорта конфигураций, подписок. Поддерживает всё, что поддерживает xray-core:

Shadowsocks (в т.ч. 2022), ShadowsocksR, Trojan, Vless (включая XTLS-Reality), Vmess, Juicity, Tuic

Руководство будет включать:

1. Установку из репозитория

2. Настройку v2rayA и обход блокировок с помощью Antifilter GeoIP, Geosite

Читать далее
Total votes 31: ↑31 and ↓0+31
Comments10

Поймать перо jar-птицы: новый сезон Java на Хабре

Reading time18 min
Views27K

Спят усталые игрушки, книжки спят… А вот Хабр не дремлет. Уже целый год прошёл с прошлого сезона Java. Стал ли за это время язык менее актуальным? Его всё ещё путают с JavaScript? Помогла ли Java 20 поставить новый рекорд длины Hello World? Чтобы ответить на эти и другие вопросы, мы запускаем новый сезон Java.

Программирование — это про целесообразность. Для многих простых задач достаточно подружиться со слонёнком. Однако когда хочешь сотворить настоящее, крупномасштабное чудо вроде национальной платёжной системы, без jar-птицы никак не обойтись — можете поверить опыту НСПК, партнёра этого сезона.

С 31 июля по 19 сентября мы будем говорить о чудесах больших и поменьше, о кровавых ритуалах энтерпрайза и защитных пентаклях тестовых окружений. Лучший кудесник, избранный народным голосованием, получит в награду Apple MacBook Air 13, а его имя навсегда останется на страницах нашей сказки.

Читать далее
Total votes 29: ↑29 and ↓0+29
Comments23

Ката программиста — путь к недостижимому идеалу. Или как я упал с велосипеда этим летом

Reading time8 min
Views16K

Ежедневные тренировки — это основа многих профессий. Музыканты, спортсмены, танцоры, врачи — все они оттачивают своё мастерство с помощью многократных повторений одних и тех же важных для них действий.

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

А что же программисты?...

Читать далее
Total votes 39: ↑37 and ↓2+35
Comments26

Как запомнить что-нибудь навсегда?

Level of difficultyEasy
Reading time9 min
Views28K

Привет, это история о разработке самого удобного приложения
для зубрежки английских слов инди-разработчиком. Еще одно?!

– Да, но с GenAI-особенностями и алгоритмами!

Читать далее
Total votes 38: ↑36 and ↓2+34
Comments76

В России не любят Линукс, а я не люблю виртуальные машины. Что делать?

Level of difficultyEasy
Reading time11 min
Views35K

В России не любят Линукс. Студенты и корпорации всячески отлынивают его использовать, даже если Линукс насаждают преподаватели или госзаказчики. Но есть область, в которой Линукс придется полюбить. Это разработка микросхем. Даже внутри Apple и Microsoft инженеры используют Synopsys Design Compiler / IC Compiler и Cadence Genus / Innovus, у которых вообще нет версий для Windows и MacOS, только для Linux. Да, я знаю, что Synopsys и Cadence ушли из России. Но даже открытые тулы для синтеза ASIC - Open Lane - есть только под Linux.

Я уже несколько лет использую для семинаров по FPGA загружаемые через USB SSD диски, на который ставится весь необходимый софтвер. Такое решение позволяет избежать агонии первого дня семинара, когда приходит куча народу со своими ноутбуками, три часа ставят Quartus, а потом мучаются с драйверами USB Blaster для китайского контрафактного клона, который без танцев с бубном не хотят поддерживать не Win10, ни Linux, ни особенно Win11, который хочет подписанные драйверы.

А как же виртуальные машины? - спросите вы. С моей точки зрения они вносят дополнительный уровень танцев с бубном. И это не мое дремучее мнение - так же считает мой приятель, который работал над виртуализацией в Микрософте. То оно USB порт не пробивает, то еще какие-нибудь глюки. Плюс учить дополнительные опции, качать и копировать файлы в десятки гигабайт. А тут вставил в USB порт, и если загрузится, то заработает.

Конечно, загружаемые SSD тоже не без проблем: тут и Legacy BIOS boot против UEFI boot, и Secure Boot с Bit Locker, и зловещий "хвост GPT", и отрубание всего из-за скачка напряжения в USB хабе - но с этими проблемами мы методично разобрались. Решение я и описываю в этой заметке, предназначенной в первую очередь для учеников и руководителей кластеров в Школе Синтеза Цифровых Схем, которая начинается с сентября в 14 российских городах (объявления и точных дат еще нет, но уже записалось 200 учеников).

Прежде всего: как выглядит загружаемый SSD? А вот так:

Читать далее
Total votes 58: ↑51 and ↓7+44
Comments161

Kafka за 20 минут. Ментальная модель и как с ней работать

Level of difficultyMedium
Reading time19 min
Views74K

Привет! Меня зовут Глеб Гончаров, и я руковожу подгруппой ИТ-инфраструктуры в СберМаркете. В работе мы широко используем Kafka как шину данных для микросервисов и не раз убедились на практике, что к инструменту важно подобрать правильный подход. Об этом сегодня и поговорим в двух частях — сначала обсудим основы, а в конце статьи будет ссылка на практические задания.

Читать далее
Total votes 41: ↑41 and ↓0+41
Comments15

«Входить в IT неспеша» или как стать Middle Java Backend разработчиком минуя ступень Junior

Level of difficultyEasy
Reading time12 min
Views39K

Статья о том, как шаг за шагом при дефиците свободного времени обучиться и устроиться на работу сразу Middle Java разработчиком перескочив через Junior ступеньку, основанная на личном опыте, и о том, как мне это помогло, когда сразу после трудоустройства пришлось тянуть проект практически в solo.

Статья родилась как некий ответ на вопросы, которые мне часто задавали люди, находящиеся в таком же положении, как и был когда‑то я, когда времени на обучение почти нет и хочется войти в IT кем‑то выше, чем Junior разработчик.

Давай-ка разберёмся с этим
Total votes 22: ↑17 and ↓5+12
Comments80

Java для новичков: подборка материалов для самостоятельного изучения и сообществ для погружения

Level of difficultyEasy
Reading time3 min
Views26K

Привет, Хабр! Меня зовут Егор Ерохин, я — наставник на курсе «Java-разработчик» Яндекс Практикума и Java тимлид. В этой статье я собрал как русскоязычные, так и англоязычные ресурсы, которые помогут начинающим Java-разработчикам на их пути. А ещё комьюнити, которые будут полезны для расширения кругозора и нетворкинга.

Читать далее
Total votes 4: ↑3 and ↓1+2
Comments5

Пишем простой docker-compose.yml для контейнеризации приложения (React, Spring Boot, PostgreSQL, pgAdmin)

Level of difficultyEasy
Reading time21 min
Views33K

В данной статье описан простой пример написания docker-compose.yml файла на примере контейнеризации приложения с использованием Spring Boot на бэкенде, React на фронте, PostgreSQL в качестве базы данных и pgAdmin - для просмотра данных в базе.

Читать далее
Total votes 17: ↑14 and ↓3+11
Comments16

Spring Data JPA: проекции в запросах

Reading time8 min
Views13K

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

Читать далее
Total votes 9: ↑8 and ↓1+7
Comments1

Как я делал внутренний cookbook по тому, как писать код (и результат можно скачать)

Level of difficultyHard
Reading time16 min
Views16K

Авокадо с зубами подсказывает, что так код легче поддерживать, дописывать и рефакторить. Мы всё теперь пишем только так.

Привет, Хабр! У нас была проблема: каждый писал код как хотел. Было очень тяжело это поддерживать и ревьюить. Мы сначала думали, что достаточно написать стандарт кода. Оказалось, недостаточно, ему ещё надо обучить. Чтобы обучить, мы открыли для ревью эталоны кода, чтобы покрыть ими самую частую логику взаимодействия с компонентами. Тоже не хватило. А заодно я узнал, что мои же «золотые» образцы противоречили моему же стандарту кода (сначала было смешно, а потом пришлось переписывать).

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

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

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

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

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

Посвящается всем, кто коллекционирует элегантные решения без привязки к языку, фрэймворку, Фаундлингам и Software Craftsmanʼам.

Погнали.
Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments4

SourceBuddy динамически компилирует исходный код Java

Reading time3 min
Views2.9K

Через два месяца после первого коммита в октябре 2022 года Питер Верхас, старший архитектор EPAM Systems, выпустил версию 2.0.0 SourceBuddy, новой утилиты, которая компилирует динамически исходный код Java, заданный в строке или файле, в файл класса. 

Утилит SourceBuddy требует Java 17 и представляет собой упрощенный фасад для компилятора javac, который обеспечивает ту же функциональность.

Версия 2.0.0 поддерживает комбинацию скрытых и нескрытых классов во время компиляции и выполнения. Кроме того, был упрощен API, включая критические изменения, такие как изменение метода loadHidden() на метод hidden(), поэтому и выпущен новый основной релиз. Полный обзор изменений для каждой версии доступен в документации по выпускам на GitHub.

Читать далее
Total votes 4: ↑2 and ↓20
Comments13

GPT-3. Есть проблема побольше, чем потеря рабочих мест

Level of difficultyEasy
Reading time6 min
Views73K

В моей книге “Просто о мозге” была ещё одна глава, которую я удалил перед публикацией. Она называлась “Будущее”. В ней я приводил прогнозы развития человечества на основе того, что сейчас известно о мозге. Глава получилась грустной, а мне хотелось, чтобы книга заканчивалась на позитивной ноте.

Поэтому расскажу три прогноза оттуда здесь. Они хорошо перекликаются с хайпом вокруг GPT-3 и позволяют по-новому взглянуть на всё, что происходит.

///

Прогноз первый. Нейросеть-президент.

Начнём с простых и очевидных прогнозов. Скоро мы увидим первую страну, которой управляет нейросеть.

Чтобы это произошло, надо преодолеть две проблемы: моральную и техническую. Техническая простая. Нужно создать комплекс нейросетей-министерств. С одной стороны в такие министерства будут втекать данные, а с другой стороны вытекать распоряжения для исполнительной власти. Этот тип власти какое-то время ещё будет состоять из аналоговых биологических механизмов. Из людей.

Моральная проблема чуть сложнее. Звучит она примерно так: “Чтоооо?! Да никогда мы не позволим компьютеру принимать столь важные решения!”. Давайте все дружно крикнем вслух, как называется решение этой проблемы. Раз! Два! Три! Беспилотное Такси!

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

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

Ещё два предсказания
Total votes 194: ↑161 and ↓33+128
Comments766

Двадцать бабушек – уже рубль. Как GraalVM Native Image позволяет экономить джавистам и девопсам деньги на облако

Reading time14 min
Views5.7K

Первая статья в нашем блоге. Я постарался написать хороший текст на основе докладов из Failover Bar и прошлого митапа Альфы, и человеческими словами объяснить, зачем нужен GraalVM.

Мы поговорим об экономии на облаках в мире победившего Кубернетиса, обсудим перформанс современного приложения, и какие ништяки Native Image помогут нам во всём этом.

Mad skills bonus: вы сможете писать на Java приложения для командной строки так, что они не будут тормозить по сравнению со скриптами на Bash. Но вначале небольшая телега вместо вступления.

Читать далее
Total votes 27: ↑23 and ↓4+19
Comments21

Testcontainers: тестирование с реальными зависимостями

Reading time8 min
Views14K

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

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

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

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

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

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments12

Как уменьшить размер образа Docker для JVM

Reading time8 min
Views10K
image

Если вы уже достаточно долго пишете на Kotlin, или Scala, или на любом другом языке, основанном на JVM, то могли заметить: начиная с Java 11 среда Java Runtime Environment (JRE) больше не поставляется в виде отдельного дистрибутива, а распространяется только в составе Java Development Kit (JDK). В результате такого изменения многие официальные образы Docker не предлагают вариант образа «только для JRE». Таковы, например, официальные образы openjdk, образы corretto от Amazon. В моем случае при использовании такого образа в качестве заготовки получался образ приложения, завешивавший на 414 MB, тогда как само приложение занимало всего около 60 MB. Мы стремимся к эффективной и бережливой разработке, поэтому такая расточительность для нас непозволительна.

Давайте же рассмотрим, как можно радикально уменьшить размер Docker-образа для Java.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments16

Безопасный Spring REST с применением Spring Security и OAuth2

Reading time12 min
Views21K

В этой статье мы продемонстрируем пример настройки Spring Security + OAuth2  для защиты конечных точек REST API на фреймворке Spring Boot. Клиенты и учетные данные пользователей будут храниться в реляционной базе данных (для баз данных H2 и PostgreSQL подготовлены примеры конфигураций).

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments4
1
23 ...

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity