Pull to refresh
22
0.2
Даниил Солопов @dan_sw

Software Engineer, Bachelor of Computer Science

Send message

Никто не читает старые статьи… базу, так сказать, основу…

Reading time7 min
Views4.4K

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

Для себя и, надеюсь, кого-то ещё, я предлагаю эти три разбора, на мой взгляд, основополагающих статей мира ML. Приятного прочтения.

Читать далее

ИИ-агенты в современных IT-решениях

Level of difficultyEasy
Reading time14 min
Views2.4K

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

Читать далее

Как собрать Docker-образ, который можно запускать в проде (а не только у себя на ноуте)

Level of difficultyEasy
Reading time4 min
Views29K

Если ты пишешь Dockerfile, скорее всего, он работает. Но вопрос не в том, работает ли. Вопрос в другом: будет ли он работать через неделю, на другом сервере, в CI/CD, на чужом железе — и будет ли это безопасно?

Читать далее

Часть 1: Как я создал идеальный REST API — микросервис инцидентов на Java и Spring

Level of difficultyMedium
Reading time17 min
Views20K

В этой статье вы узнаете, как спроектировать и реализовать REST API для микросервиса на Java с использованием Spring Framework.

Рассмотрим лучшие практики, принципы архитектуры, реализацию CRUD-операций и удобные инструменты, такие как Lombok, ControllerAdvice, MapStruct. Эта статья будет полезна как начинающим разработчикам, так и тем, кто хочет улучшить свои навыки в проектировании REST API.

Читать далее

Анализ текстовых данных на примере ОМ

Level of difficultyEasy
Reading time14 min
Views1.9K

О чем говорят волки? Анализ текстовых данных открывает уникальную возможность заглянуть за кулисы Осознанной меркантильности.

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

Весь код внутри.

Читать далее

Огромный гайд по настройке рабочего окружения: Linux, VScode, Python

Level of difficultyEasy
Reading time29 min
Views55K

Привет всем!

Как обычно это и бывает, я накопил критическую массу мыслей, и пора их как-то систематизировать, чтобы вы, мои замечательные читатели Хабра, могли что-то извлечь из моего опыта или поделиться своим :)

Я люблю и одновременно ненавижу статьи-обзоры в стиле «10 программ для {whatever}». Ненавижу — потому что их очень легко делать, вбил в гугл «программа для X», взял первые 10 ссылок, статья готова. Я называю такие статьи «лёгкий рейтинг». А люблю я их за то, что даже если 9 пунктов — чушь полная, то десятый, как правило, годный, я узнаю что-то новое, это что-то облегчает мне жизнь и позволяет мне быть более продуктивным.

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

Статья получилась ОГРОМНАЯ, и у меня был большой соблазн разбить её на сотню статей поменьше, чтобы в каждой ставить ссылки на свой телеграм-канал и получать гонорар за каждую по отдельности. Но я не буду. Пусть знания будут сгруппированы вместе. Welcome!

Читать далее

Оптимизация быстродействия динамического выделения памяти в многопоточной библиотеке

Reading time4 min
Views13K
image

Предисловие


Данная статья выросла из проблемы, которую мне относительно недавно пришлось решить: скорость кода, предназначенного для работы одновременно в нескольких потоках, резко упала после очередного расширения функционала, но только на Windows XP/2003. С помощью Process Explorer я выяснил, что в большинство моментов времени исполняется только 1 поток, остальные находятся в ожидании, причём TID активного потока постоянно меняется. На лицо явная конкуренция за ресурс, и этим ресурсом оказалась куча по умолчанию (default heap). Новый код активно использует динамическое выделение/высвобождение памяти (копирование строк, копирование/модификация STL контейнеров большого размера), что собственно и привело к возникновению данной проблемы.

Немного теории


Как известно, аллокатор по умолчанию (default allocator) для STL контейнеров и std::basic_string (std::allocator) выделяет память из кучи по умолчанию, а операции выделения/высвобождения памяти в ней являются блокирующими (косвенное подтверждение). Исходя из этого, при частых вызовах HeapAlloc/HeapFree мы рискуем намертво заблокировать кучу для других потоков. Собственно это и произошло в моём случае.

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

Containerlab, как альтернатива Cisco Packet Tracer / PNETLab

Level of difficultyEasy
Reading time8 min
Views4.5K

Всем привет!

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

Читать далее

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

Level of difficultyMedium
Reading time13 min
Views7.5K

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

Читать далее

Что происходит с вашим JavaScript-кодом внутри V8. Часть 1

Level of difficultyMedium
Reading time6 min
Views6.1K

В этой серии статей мы пройдемся по каждому этапу работы V8: лексическому и синтаксическому анализу, построению AST, интерпретации и оптимизациям. Затронем Ignition, Sparkplug, Maglev и Turbofan; разберемся с hidden classes, байт-кодом, и много чем еще. Углубимся во все этапы достаточно, чтобы понимать, за что отвечает каждый из них.

В этой части посмотрим на лексический и синтаксический анализ.

Читать далее

Дескрипторы Python. Подробное руководство

Level of difficultyHard
Reading time34 min
Views7K

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

Читать далее

Почему multiprocessing.Queue() тормозит и как обойти это с помощью shared_memory

Level of difficultyEasy
Reading time6 min
Views1.9K

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

Вы запускаете многопроцессную задачу, кидаете данные в multiprocessing.Queue(), а потом вдруг замечаете... что всё тормозит. Муторно. Медленно. Местами прям отвратительно. Вы смотрите в монитор, на top, на htop, на код — и не понимаете: ну ведь должно же летать! А не летит.

Читать далее

std::launder: зачем и когда нужен

Level of difficultyEasy
Reading time7 min
Views8.3K

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

В этой статье разберём мутный, но крайне важный инструмент ‒ std::launder. Мы поглядим, зачем его протащили в C++17 и что компилятор делает, когда видит launder.

Читать далее

Как ИИ-агенты управляют операционной системой и оживляют героев романов: топ-10 исследований ИИ за апрель 2025

Reading time20 min
Views2.9K

Привет, Хабр! В апреле вышли несколько интересных исследований: один ИИ-агент без участия человека автоматически готовит научную статью, другой научился управлять любыми Windows-приложениями. Появились методы, позволяющие сотням симулированных пользователей выявлять слабые места в интерфейсе; платформа, где герои знакомых романов превращаются в ИИ-агентов и создают новые сюжеты; а также симуляция соцсетей, в которой сотни ИИ-юзеров читают посты, лайкают, репостят и проверяют фейки. Узнайте все подробности об этих и других исследованиях в этой статье.

Читать далее

Многопоточность в Node.js: модуль worker_threads

Reading time13 min
Views76K
18 января было объявлено о выходе платформы Node.js версии 11.7.0. Среди заметных изменений этой версии можно отметить вывод из разряда экспериментальных модуля worker_threads, который появился в Node.js 10.5.0. Теперь для его использования не нужен флаг --experimental-worker. Этот модуль, с момента появления, оставался достаточно стабильным, поэтому и было принято решение, отражённое в Node.js 11.7.0.

Автор материала, перевод которого мы публикуем, предлагает обсудить возможности модуля worker_threads, в частности, он хочет рассказать о том, зачем нужен этот модуль, и о том, как в JavaScript и в Node.js, по историческим причинам, реализована многопоточность. Здесь же речь пойдёт и о том, какие проблемы сопряжены с написанием многопоточных JS-приложений, о существующих способах их решения, и о будущем параллельной обработки данных с использованием так называемых «потоков воркеров» (worker threads), которые иногда называют «рабочими потоками» или просто «воркерами».
Читать дальше →

Шпаргалка по установке драйверов NVIDIA на ML сервер

Level of difficultyEasy
Reading time4 min
Views1.4K

Данный материал предназначен для быстрой и последовательной установки драйверов NVIDIA, в том числе для видеокарт 50xx серии, а также настройки NVIDIA Container Toolkit. Эта инструкция актуальна для Linux-систем на базе Ubuntu и других Debian-совместимых дистрибутивов.

Читать далее

О чём не молчит Windows. Погружение в Windows Registry Forensic

Reading time7 min
Views24K

Всем привет, Хабровчане!

Думаю ни у кого не возникает сомнений в важности грамотной работы специалистов ИБ и ИТ служб, учитывая события недавних дней с ТК СДЭК, а также другие крупные взломы/утечки, которых было немало за последние пару, тройку лет. Обеспечение грамотной работы включает в себя обычно комплекс мероприятий, да и в целом в работе служб ИБ есть множество направлений, где одним из интереснейших направлений, без которого, на мой взгляд, трудно обойтись, является компьютерная криминалистика (Forensic или форенсика).

Читать далее

Inno Setup: создание инсталлятора на примере развертывания C# приложения

Reading time13 min
Views218K

Введение



Я не являюсь профессиональным программистом. В том смысле, что не зарабатываю денег этим ремеслом, а использую свои навыки в качестве инструмента для основной, научной, деятельности. Поэтому все мои «поделки» живут лишь отведенный им на решение конкретной задачи период и не выходят за пределы каталогов проекта. Кроме того, уже довольно давно я отошел от разработки под ОС Windows, ибо Linux для решения моих задач более удобен.

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

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

Созданием инсталляторов я не занимался никогда. Поэтому данный вопрос был основательно «загуглен», в числе прочего попалась и такая статья с Хабра. Выбор средств для подобной задачи довольно широк, и включает как проприетарные, так и открытые продукты. Вот список того, что я «пощупал»

  1. InstallShield — классика жанра, достаточно солидный проприетарный продукт
  2. Adnvanced Installer — проприетарный инструмент с широкими возможностями кастомизации через GUI. На сайте сказано, что если Вы блоггер и будете писать об этом продукте много хороших слов, то у Вас есть возможность получить Free License
  3. WiX — открытый бесплатный продукт, основанный на XML-скриптах. Мощная, хорошо документированная штука. Разбираться с ним я пока не стал, ибо время дорого (да и к XML душа лежит не очень). Возможно когда нибудь я к нему вернусь. Да, к нему есть плагины для Visual Studio, что несомненный плюс.
  4. Inno Setup — опенсорсный проект, код которого доступен на гитхабе. В силу бесплатности и низкого порога вхождения мой выбор остановился именно на нем, как инструменте позволившем выполнить работу быстро и качественно.


Так что в статье мы будем рассматривать пример использования Inno Setup, для которого имеется полезный фронтэнд Inno Script Studio, позволяющий выполнять создание простых инсталляторов с помощью мастера и менять настройки через GUI. GUI понадобился мне для первого знакомства, с продуктом, но мы не будем уделять ему большого внимания — мой «линукс головного мозга» в последнее время всё больше и больше уводит меня от желания использовать разного рода «мастера» (это субъективно, прошу не пинать). Мы рассмотрим хардкорный способ написания скрипта с чистого листа.

Поехали!

Вы все еще пишете многопоточку на C++ с ошибками синхронизации?

Level of difficultyMedium
Reading time11 min
Views27K
Привет, коллеги! В этой статье я покажу свой подход к написанию многопоточного кода, который помогает избежать типовых ошибок, связанных с использованием базовых примитивов синхронизации.

Демонстрация идеи будет проходить на живых примерах кода на современном C++. Большинство описанных решений я применял сначала на собственных проектах, а теперь часть этих подходов уже используется в нашей собственной микроядерной операционной системе «Лаборатории Касперского» (KasperskyOS).

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

Information

Rating
3,915-th
Location
Иркутск, Иркутская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Engineer, ML Engineer
Middle
C++
Python
TENSORFLOW
Pytorch
Cmake
Linux
Deep Learning
Cuda
Computer Science
Keras