Search
Write a publication
Pull to refresh
37
0.8
Send message

Квантовый ластик, Хорхе Луис Борхес и сказка, которая пишет сама себя

Level of difficultyEasy
Reading time19 min
Views2.4K

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

Читать далее

Кэширование с FeignClient: как ускорить микросервисы и стать героем проекта

Level of difficultyEasy
Reading time6 min
Views8.9K

Кэширование с FeignClient: ускоряем микросервисы и радуем пользователей

Статья о том, как добавить кэширование в FeignClient с помощью Caffeine Cache и сделать микросервисы молниеносными. Простая настройка, минимум кода, максимум пользы — пошагово на примере Java и Spring Boot, чтобы ваши запросы летали, а API не тормозил.

Читать далее

Гайд по реализации паттерна Composite в Kotlin с sealed-классами и корутинами

Level of difficultyEasy
Reading time7 min
Views1.1K

Привет, Хабр! Сегодня рассмотрим, как реализовать паттерн Composite в Kotlin с помощью sealed-классов и корутин. Если у вас есть сложная система с кучей объектов — простых и составных — и вы хотите управлять ими, не теряя асинхронности, то этот гайд для вас.

Читать далее

Анализируем простейший усилитель

Level of difficultyMedium
Reading time26 min
Views37K
В настоящей статье я хочу рассмотреть и проанализировать широко известную и подкупающую своей простотой минимальную схему усилителя на одном биполярном транзисторе:


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

Паттерн Builder в Java на котиках

Level of difficultyEasy
Reading time5 min
Views3.4K

Привет, друзья! Сегодня рассмотрим реализацию паттерна «Строитель» в Java. Паттерн может превратить необъятный хаос параметров в аккуратную и управляемую конструкцию. И всё это на примере наших пушистых друзей — котиков.

Читать далее

Понимание Common Expression Language (CEL): Руководство для начинающих

Level of difficultyEasy
Reading time3 min
Views2.2K

Common Expression Language (CEL) - это специализированный язык выражений, разработанный Google для безопасного, эффективного и простого выполнения различных проверок и вычислений в приложениях. Проще говоря, CEL - это мощный инструмент для создания логических правил и условий, которые легко интегрируются в приложение и позволяют гибко управлять его поведением без необходимости изменения основного кода.

Читать далее

Оптимистические и пессимистические блокировки на примере Hibernate (JPA)

Level of difficultyEasy
Reading time4 min
Views13K

Привет, Хабр! Недавно пытался изучить тему «оптимистические» и «пессимистические» блокировки, но на мое удивление ни в ру сегменте, ни в англ — хороших статей, которые дают полное представление об двух типах блокировок с применением Hibernate, — нет, поэтому я решил агрегировать всю информацию в одной короткой статье. Так как это моя первая статья, буду рад критике:) Итак, погнали.

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

Читать далее

Кроссплатформенные приложения на Python с Flet и FastAPI: Полное руководство по разработке

Reading time39 min
Views28K

Сегодня я покажу вам, что для создания полноценных кроссплатформенных приложений достаточно одного языка — Python. С помощью всего нескольких библиотек и фреймворков можно легко обойтись без JavaScript для веб-разработки, без Kotlin и Swift для мобильных приложений и даже без C++ для десктопных программ. В этой статье разберем, как, используя Flet и FastAPI, можно создавать мощные и удобные решения для любой платформы!

Читать далее

Разбор регулярного выражения, проверяющего простоту чисел

Level of difficultyEasy
Reading time16 min
Views11K

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

Он меня заинтриговал. Хоть это, возможно, и не самый эффективный способ, но определённо один из наименее очевидных, поэтому мне стало любопытно. Каким образом соответствие регулярному выражению .?|(..+?)\1+ должно показать, что число непростое (после его преобразования в унарную систему счисления)?

Если вы заинтересовались, продолжайте чтение, я проанализирую это регулярное выражение и объясню, что же в нём происходит. Объяснение не зависит от языка программирования, однако я приведу версии показанного выше Java-кода на PythonJavaScript и Perl  и объясню, почему они немного различаются.

Я объясню, как регулярное выражение ^.?$|^(..+?)\1+$ способно отфильтровывать все простые числа. Почему это выражение, а не .?|(..+?)\1+ (использованное в примере кода на Java)? Это связано с тем, как работает String.matches(), о чём я расскажу ниже.

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

Читать далее

Не только нейроимпланты: как нейротехнологии меняют медицину

Reading time9 min
Views1.9K

Нейротехнологии сегодня в первую очередь ассоциируют с нейроимплантами — устройствами, которые имплантируют в мозг, чтобы вернуть людям утраченные способности двигаться, видеть, слышать и т. д. Достижения знаменитой компании Neurolink Илона Маска, которая недавно успешно провела операцию по установке такого импланта, — одна из главных причин подобных ассоциаций, но нейротехнологии — это не только импланты. Это более обширная дисциплина, совмещающая в себе генетику, биологию, физику, материаловедение и компьютерные технологии. Прямо сейчас она меняет подходы и способы лечения многих заболеваний, некоторые из которых пока что считаются неизлечимыми. В том, как именно это происходит, нам помог разобраться член Научного комитета премии «Вызов», профессор РАН, член-корреспондент РАН, генеральный директор Федерального центра мозга и нейротехнологий ФМБА России Всеволод Белоусов.

Читать далее

Почему программное обеспечение движется только вперёд

Level of difficultyEasy
Reading time6 min
Views8.8K

В случае масштабных систем не происходит ни откатов, ни запланированных переходов (cut-over) — ваше ПО движется только вперёд.

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

Алгоритмы. Рекурсивные функции. Часть I

Level of difficultyMedium
Reading time12 min
Views6.4K

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


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

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


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

Читать далее

Подборка: навыки и инструменты начинающего Go-разработчика

Level of difficultyEasy
Reading time4 min
Views19K

Привет! Меня зовут Александр Тетеркин, я Go-разработчик в VK. Раньше я писал на Python, потом перешел на Go — пишу на этом языке уже три года, а также являюсь наставником на курсе «Go-разработчик с нуля».

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

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

Читать далее

Глобально оптимальный, восьмой и наиболее быстрый вид интерпретаторов байткода

Level of difficultyHard
Reading time15 min
Views12K

Совершать невозможное и раздавать пинки здравому смыслу — в этом и состоит жизнь членов Гуррен-Дана! (C) Камина

Эта статья вступает в техническую полемику со статьей 2015 года за авторством Atakua, подходы из которой я и атакую. Atakua исследует 7 видов интерпретаторов байткода, но делает это без уважения - быстрейшей оказывается двоичная трансляция, которая, по сути, уже не интерпретатор байткода, а форма Ahead-Of-Time компилятора. Эта двоичная трансляция транслирует байткод в машинный код, представляющий собой цепочку вызовов скомпилированных сервисных процедур. Тех самых, что в интерпретаторе байткода отвечают за выполнение каждого опкода.

Но Atakua не выжал из интерпретаторов байткода всю скорость которая возможна. Так что эта статья - туториал: как написать интерпретатор байткода, который может обгонять JIT/AOT-компиляцию по скорости. Интересно? Читайте дальше!

Бенчмарк прилагается. Будет немного хардкора и ни одной сгенерированной нейросетью картинки!

Читать далее

Погружение в интерфейсы Go

Level of difficultyMedium
Reading time13 min
Views23K

Интерфейсы — одна из самых сложных тем для начинающих в Go. Я решил тщательно разобраться с этой темой и одновременно написать эту статью. После прочтения этой статьи вы сможете ответить на следующие вопросы:
Что такое интерфейс? Что такое значение интерфейса? Что такое пустой интерфейс? Почему nil-интерфейс не равен nil? Где разместить интерфейс? Какая структура интерфейса?

Читать далее

Prolog: три портрета через 50 лет

Level of difficultyEasy
Reading time25 min
Views4.8K

В 2024 году языку логического программирования Prolog исполнилось пятьдесят лет! Оказывая дань уважения, мне хотелось бы в небольшом историческом очерке рассказать о научном контексте семидесятых годов прошлого века, в котором зародилась как теория логического программирования, так и её реализация — язык Prolog. Более подробного и полного изложения вы не найдёте не только на страницах «Хабра», но и в русскоязычном сегменте Интернета.

Существует старая «бородатая» шутка полувековой давности — язык Prolog создали в 1974 в Эдинбурге и реализовали в 1972 в Марселе. Хотите узнать как это произошло?!

Читать далее

Kafka и картошка

Level of difficultyEasy
Reading time4 min
Views9.7K

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

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

Читать далее

Строим микрокernel на Golang

Reading time6 min
Views3.3K

Привет, Хабр! Сегодня рассмотрим, как построить гибкую и масштабируемую систему с использованием микрокernel архитектуры на Golang.

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

Почему стоит использовать микрокernel? Простота модификации, высокая степень изоляции компонентов и легкость масштабирования — лишь малая часть преимуществ.

Читать далее

API-Шлюз или опять тестировать

Reading time7 min
Views2.3K

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

Если вас интересует эта тема, то добро пожаловать под кат.

В лунапарк

Spring изнутри. Этапы инициализации контекста

Reading time11 min
Views373K


Доброго времени суток уважаемые хабравчане. Уже 3 года я работаю на проекте в котором мы используем Spring. Мне всегда было интересно разобраться с тем, как он устроен внутри. Я поискал статьи про внутреннее устройство Spring, но, к сожалению, ничего не нашел.

Всех, кого интересует внутреннее устройство Spring, прошу под кат.
Читать дальше →

Information

Rating
3,170-th
Registered
Activity