Как стать автором
Обновить
1065.47

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

WAF (гав-гав): гибкая настройка пользовательских правил PT AF PRO

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров482

Разберёмся, как грамотно (хотелось бы так) настраивать пользовательские правила в Positive Technologies Application Firewall, чтобы при виде атаки ваша защита не превратилась в уязвимую "истеричку". Расскажем про ключевые директивы, покажем примеры из реальной практики и обоснуем каждый шаг.

Читать далее

Краткая история JavaScript

Уровень сложностиПростой
Время на прочтение27 мин
Количество просмотров3.2K



В этом году JavaScript исполняется 30 лет.


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

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

Шардирование баз данных: проблемы, альтернативы, практические рекомендации

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров6.8K

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

Читать далее

От конфигурации к динамике. Новый API по созданию бинов в Spring

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров5.4K

В Spring Framework 7 появился новый API — BeanRegistry, который упрощает и расширяет возможности по динамической регистрации бинов. Это особенно актуально, когда невозможно заранее предсказать, сколько компонентов потребуется, как в случае со Spring Data. В новой статье от эксперта сообщества Spring АйОМихаила Поливахи, вы узнаете:

– Как Spring Data справлялась с динамической регистрацией раньше;

– Какие подходы регистрации существовали до BeanRegistrar, как они работали;

– Как новый API связан со Spring AOT.

Читать далее

Плоские контейнеры в C++23

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров6.4K

Новый стандарт C++, C++23, впервые с C++11 расширил всем привычную линейку контейнеров: помимо знакомых array, vector, (unordered_)set, (unordered_)map и прочим в нее теперь входят непонятные flat_set, flat_map, flat_multiset и flat_multimap. Ответим на вопросы, что это за контейнеры, когда они могут быть полезны, сравним дизайн стандартизированных «плоских» контейнеров с дизайном плоских контейнеров из Boost и ETL и, конечно, произведём замеры и сравним производительность flat_ и не flat_ контейнеров.

Читать далее

Absolute Zero Reasoner: ИИ научился программированию без входных данных — и это может поменять всё

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров21K

Возможно я был недостаточно внимателен, но мне попалось на Хабре буквально одно, очень краткое упоминание крайне интересного исследования от команды из Университета Цинхуа и партнерских институтов нескольких стран: Absolute Zero Reasoner (AZR) — новую систему машинного обучения, которая развивает принципы self-play и способна обучаться без каких-либо внешних данных. В отличие от традиционных подходов, требующих тысячи размеченных примеров, AZR использует принцип самообучения через создание и решение собственных задач программирования. Система играет две роли одновременно: составителя задач (Proposer) и решателя (Solver), используя исполнитель кода как объективного судью для получения обратной связи. AZR продемонстрировал state-of-the-art результаты в программировании и математических рассуждениях, превзошедший модели, обученные на десятках тысяч человеческих примеров, при этом показав впечатляющий кросс-доменный перенос знаний между различными областями знаний.

Читать далее

Подбираем лучший механизм аппаратной конкурентности для машинного обучения на ЦП

Время на прочтение7 мин
Количество просмотров498

В среде выполнения задач ИИ для Firefox можно задействовать сразу множество потоков в выделенном процессе логического вывода, чтобы ускорить выполнение таких операций на ЦП. В среде WASM/JS можно создать SharedArrayBuffer и обрабатывать содержимое этого буфера сразу несколькими потоками. Такая рабочая нагрузка поддаётся конкурентному распределению на несколько ядер ЦП.
Читать дальше →

Java Digest #25

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров1.9K

Всем привет! 👋

Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

Читать свежий выпуск

Как собрать ДНК с помощью кода: симуляция молекулярных операций на Python

Уровень сложностиСложный
Время на прочтение4 мин
Количество просмотров1.8K

Синтез ДНК кажется чем-то сугубо биологическим — с пробирками, центрифугами и белыми халатами. Но что, если попробовать собрать ДНК в коде? Не просто сгенерировать последовательность, а симулировать реальные процессы: лигирование, гибридизацию, ПЦР, ошибочные вставки, ферментативные сдвиги и многое другое. В этой статье — практическая попытка воссоздать молекулярную биологию средствами Python, без библиотек типа Biopython, с нуля. Много кода, немного шуток и один вопрос — можно ли построить in silico ДНК-лабораторию?

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

Идея: построить в коде лабораторную скамью, где можно будет “сшивать” фрагменты ДНК, копировать их, проверять на ошибки. Причём без привычных библиотек вроде Biopython — просто Python, NumPy и желание воссоздать реальный молекулярный процесс в виртуальной среде. Можно ли собрать виртуальную ДНК-плазмиду и отдать её синтетической биологии?

Да. Но сначала немного теории.

Читать далее

Агентная экономика. Дайджест за неделю

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров643

Для тех, кто следит за трендами Умной Автоматизации (ИИ-агенты, Мультиагентные системы, Ко-пилоты), чтобы понимать тему глубже и принимать верные решения.

Дайджест по материалам McKinsey, Research IBM, PWC и Wired.

Читать далее

Практическое применение встроенной в ОСРВ технологии ИИ для анализа и отладки аномалий в работе софта

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров878


В статье расскажем как встроенные диагностические средства нашей ОС, основанные на ИИ, помогают искать и устранять проблемы в функционировании программ.


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

Почему sync.Map — почти всегда плохая идея

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров4.5K

Привет, Хабр!

Сегодня разбираемся, почему sync.Map — выглядит аппетитно, но почти всегда оказывается не тем, чем вы ожидали.

Читать далее

QapDSL — декларативное описание AST и парсеров для C++

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров1.5K



QapDSL — декларативное описание AST и парсеров для C++


QapDSL — это специализированный язык (DSL), который позволяет описывать абстрактные синтаксические деревья (AST) и правила их разбора для языков программирования, прежде всего C++. Такая формализация помогает автоматизировать построение парсеров, генерацию кода, анализ исходников и даже рефакторинг.



Зачем нужен QapDSL?


  • Компактно и наглядно описывать структуру и грамматику языка.
  • Автоматически генерировать C++-структуры, парсеры, сериализаторы и визиторы.
  • Ускорять эксперименты с языками, создавая прототипы компиляторов и анализаторов.
  • Упрощать анализ и рефакторинг сложных языков, в т.ч. C++.


Пример QapDSL-описания


Рассмотрим, как описывается объявление класса C++ на QapDSL:


t_class{
  string keyword;
  t_sep sep0;
  string name;
  t_sep sep1;
  TAutoPtr<t_parents> parents;
  t_sep sep2;
  TAutoPtr<t_class_body> body;
  t_sep sep3;
  {
    M+=go_any_str_from_vec(keyword,split("struct,class,union",","));
    O+=go_auto(sep0);
    M+=go_str<t_name>(name);
    O+=go_auto(sep1);
    O+=go_auto(parents);
    O+=go_auto(sep2);
    O+=go_auto(body);
    O+=go_auto(sep3);
    M+=go_const(";");
  }
}

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

Ближайшие события

ЦКП в IT: зачем вам понимать, какой у вас на самом деле продукт

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров542

«Писал код, участвовал в дейликах, устранял баги, потом снова писал код. День пролетел. Устал. Вроде был продуктивным. Но один вопрос не дает покоя: а что конкретно я сегодня сделал полезного?»

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

Меня зовут Влад Лукашенко, и я больше 10 лет занимаюсь аналитикой, SEO, платным трафиком и управлением командами в digital-маркетинге. В этой статье расскажу, что такое ценный конечный продукт и почему каждому айтишнику полезно определить его для себя.

Читать далее

Пишем движок SQL на Spark. Часть 8: CREATE FUNCTION

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.1K
В предыдущих сериях ( 1 2 3 4 5 6 7 Ы ) рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL, заточенный на задачи подготовки и трансформации наборов данных, и работающий как тонкая прослойка поверх Spark RDD API.

Штука получилась довольно продвинутая, с поддержкой императивщины типа циклов/ветвлений/переменных, и даже с поддержкой пользовательских процедур. И в плане этой самой императивщины расширяемая: может импортировать функции из Java classpath, равно как и операторы выражений. То есть, если необходимо, можно написать функцию на Java, или определить новый оператор, и использовать потом в любом выражении на SQL.


Круто? Ещё как круто. Но как-то однобоко. Если в языке у нас поддерживаются функции, то почему бы не дать нашим пользователям определять их самостоятельно? Вот прямо через CREATE FUNCTION? Тем более, что вся необходимая для этого инфраструктура уже вовсю присутствует. Да и процедуры на уровне интерпретатора у нас уже поддерживаются ведь…



Функция для затравки.

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

Как сделать TENEX — твёрдотельный объёмный OLED-дисплей

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров4.9K

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

Читать далее

Как устроены новые мапы в Go 1.24

Время на прочтение9 мин
Количество просмотров6.6K

Привет, Хабр! Меня зовут Владимир Марунин, я ведущий разработчик в команде Clatch. Сегодня расскажу о новых мапах в Go 1.24: разберем изменения, посмотрим, что было и что стало. О мапах часто спрашивают на собеседованиях, а еще без них нельзя просто так взять и написать программу на Go — так что, надеюсь, тема будет полезной и интересной.

Этот текст — расширенная версия моего доклада с митапа МТС True Tech Go. Если больше нравится слушать, а не читать, можно сразу переходить по ссылке. Поехали!

Читать далее

Покерная лаборатория закрывается, ловите исходники

Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров16K

Я делал этот проект более полутора лет, сейчас отказываюсь от него. И, чтобы эти полтора года не были прожиты зря) открываю исходники. Java+Spring.

Принимайте проект «как есть», со всеми ad-hoc костылями, незаконченными исследованиями, TODOs, а также всевозможными KISS, DRY, и, как их… SOLID с GoF.

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

Читать далее

Эволюция веб-приложения PREMIER: от legacy к современной архитектуре

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.4K

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

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

Читать далее

Обработка повторных запусков приложения в Windows

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров848

Один экземпляр — множество вызовов: Как обеспечить работу вашего приложения так, чтобы оно запускалось только один раз, а все последующие вызовы — передавали данные уже работающему экземпляру?
Предлагаю рассмотреть решение с использованием Mutex и Named Pipes на примере заглушки, которая должна обрабатывать ссылки протокола ask: для ЛОЦМАН:PLM.

Читать далее