Обновить
28
0.3
Даниил Солопов @dan_sw

Software Engineer, Bachelor of Computer Science

Отправить сообщение

Делегирование событий в JavaScript: когда обычного всплытия недостаточно

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

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

Каждая интерактивная веб-страница опирается на Document Object Model (DOM) и ее систему событий. Когда мы нажимаем кнопку, вводим текст в поле или наводим курсор на изображение, возникает событие. Но оно не происходит само по себе — событие проходит по дереву DOM в процессе, который называется распространением события (event propagation).

Читать далее

Руководство по Node.js, часть 9: работа с файловой системой

Время на прочтение11 мин
Количество просмотров149K
Сегодня, в девятой части перевода руководства по Node.js, мы поговорим о работе с файлами. В частности, речь пойдёт о модулях fs и path — о файловых дескрипторах, о путях к файлам, о получении информации о файлах, об их чтении и записи, о работе с директориями.



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

Localhost-атака: как Meta* и Яндекс следят за пользователями Android через localhost

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

Мы раскрыли новый метод отслеживания, используемый компаниями Meta* и Яндекс, который потенциально затрагивает миллиарды пользователей Android. Мы обнаружили, что нативные приложения Android — включая Facebook, Instagram и несколько приложений Яндекса, таких как Карты и Браузер — незаметно слушают определенные локальные порты в целях отслеживания.

Эти нативные приложения Android получают метаданные браузеров, куки и команды от скриптов Meta* Pixel и Яндекс.Метрики, встроенных на тысячи веб-сайтов. Эти скрипты загружаются в мобильных браузерах пользователей и незаметно связываются с нативными приложениями, работающими на том же устройстве, через локальные сокеты (localhost). Так как нативные приложения программно получают доступ к идентификаторам устройства, таким как рекламный идентификатор Android (AAID), или обрабатывают идентификацию пользователя, как в случае приложений Meta, этот метод позволяет этим организациям связывать сессии мобильного браузера и веб-куки с личностью пользователя, тем самым деанонимизируя посетителей сайтов, на которых размещены их скрипты.

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

Читать далее

Рекурсивные типы. Часть 1/5. Рекурсия

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

Слово «рекурсия» происходит от латинского «recursio» – «круговорот, возврат». Применительно к вычислениям этот термин относится к алгоритмам, повторяющих какие-либо действия. Этот обзор посвящён типам, которые обслуживают рекурсивные алгоритмы.

Это вводная часть и собственно про типы здесь будет мало что сказано. Содержание:

Вычислимые функции
Циклы и рекурсия
Cтек и хвостовая рекурсия
Ссылки вперёд
Y-комбинатор в λ-исчислении
Реализация комбинатора неподвижной точки

Читать далее

Сортировки выбором

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


В чём идея сортировок выбором?

  1. В неотсортированном подмассиве ищется локальный максимум (минимум).
  2. Найденный максимум (минимум) меняется местами с последним (первым) элементом в подмассиве.
  3. Если в массиве остались неотсортированные подмассивы — смотри пункт 1.

Траффик

Интерпретация и оптимизация перцептрона Розенблатта

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

В прошлой статье на Хабре «На дворе LLM, а книгу о перцептроне так никто и не открыл!?» я указал, что многие понятия не имеют о перцептроне Розенблатта, но пишут о нем так как будто читали оригинал. И так или иначе в комментариях прошла дискуссия, как минимум с тремя оппонентами, которые тоже находятся в разного рода не знании о перцептроне. Что только подтверждает мои слова, что это массовое явление. Поэтому даже в научной статье мне придётся этому уделить не малое внимание. Свою статью, я еще не опубликовал, да ещё полностью и не написал, хотя все эксперименты были сделаны 15 лет назад, а сейчас их нужно улучшить. Собственно, когда я сам стряхнул пыль с них, я долго не мог по программному коду понять, о чем это, что это дает, так и возникла моя мысль, что это нужно донести людям. И подумал, почему бы мне некоторые разделы будущей статьи, сразу не взять и не опубликовать тут на Хабре. Имея широкий охват, это может иметь даже большую пользу, чем публикация в модерируемом издании. Поэтому ниже я дам выдержки из своего черновика статьи «как есть», относящиеся в основном к «утерянной памяти о перцептроне», но т.к. как это часть научной статьи, настоятельно прошу при цитировании ссылаться на меня. Хотя и понимаю, что выдержки не дадут вам полного понимания проблемы, но как минимум расскажут о известных фактах и надеюсь, все же уберегут от поверхностного взгляда. Ну и мало ли — если тут найдется специалист, который публикуется на https://arxiv.org последние 5 лет, мне нужна ваша помощь с рекомендацией, свяжитесь со мной. Тогда полноценная статья выйдет быстрее.

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

Читать далее

Оптимизация LLM: LoRA и QLoRA

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

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

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

Читать далее

Особенности Python, о которых вас точно спросят на техническом собеседовании

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

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

Как автор курса «Python-разработчик» в Яндекс Практикуме, я часто разбираю подобные ситуации на своём YouTube-канале, где провожу открытые тестовые интервью с джунами. Всё, о чём я говорю, — это не абстрактные примеры, а реальные наблюдения и выводы, сделанные прямо в ходе этих собеседований. 

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

Читать далее

Реализация Outbox паттерна в разных языках программирования

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

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

Сегодня мы рассмотрим реализацию Outbox паттерна в разных ЯП. Цель простая: одним атомарным действием обновлять бизнес-данные и фиксировать факт события, а затем надежно доставлять его в брокер. Разберем общую схему, конкуренцию воркеров, ретраи, дедупликацию, метрики и покажу, как это собрать на C#, Java, Go, Python и Node.js.

Читать далее

Мой путь в изучении языка C: какие книги реально помогли

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

Когда я начинал изучать C, я сразу взялся за «библию» — «Язык программирования С» Брайана Кернигана и Денниса Ритчи.

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

Читать далее

Systemd: полное руководство для админов + примеры

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

Привет, Хабр! Systemd — скелет современного Linux. Он управляет не только службами, но и таймерами, монтированием, логированием... Понимать его = значительно повысить эффективность администрирования системы.

Данное руководство — исключительно технические аспекты: архитектура, юниты, cgroups, работа с журналами. Только команды и конфиги.

Читать далее

Assembler для Windows в Visual Studio. Часть вторая — MASM x64 и юникод

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

Вторая часть рассказа об ассемблере под Windows. Здесь я расскажу про 64-разрядные приложения в Windows, чем отличается MASM 64 от MASM 32, про макросы из MASM 64 SDK, как работать с Юникодом на примере простого консольного REPL'а, а ещё как обойтись без Visual Studio и пользоваться masm просто из командной строки.

Первая часть — Assembler для Windows в Visual Studio.

Читать далее

Детальный обзор Well-known Symbols

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


Доброго времени суток, друзья!

Символ (Symbol) — это примитивный тип данных, представленный в ECMAScript2015 (ES6), позволяющий создавать уникальные идентификаторы: const uniqueKey = Symbol('SymbolName').

Вы можете использовать символы в качестве ключей для свойств объектов. Символы, которые JavaScript обрабатывает особым образом, называются хорошо известными символами (Well-known Symbols). Эти символы используются встроенными алгоритмами JavaScript. Например, Symbol.iterator используется для перебора элементов массивов, строк. Его также можно использовать для определения собственных функций-итераторов.

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

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

В данной статье речь пойдет о хорошо известных символах с примерами их использования.
Читать дальше →

Чистим строку от лишних/повторяющихся пробелов (и пробельных символов) в строковых значениях компактно. RegExp

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

Хочу поделиться компактной функцией для очищения лишних, повторяющихся пробелов и пробельных символов в строках. Не считайте это призывом, но если можно привести строковые данные в красивый вид без лишних хлопот, то почему бы и не воспользоваться. Те, кто не знаком с регулярными выражениями (regular expressions, RegExp, regex), может приоткроет форточку в этот славный и замороченный мир (Регулярные выражения (regexp) — основы)

Читать далее

Вкусы и предпочтения больших языковых моделей

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

У больших языковых моделей есть системы ценностей. БЯМ по-разному отзываются о чужих текстах или даже человеческой жизни, а их оценочные суждения и качество ответов отличаются в зависимости от упоминаемой расы, пола и национальности человека. Не вызывает никаких сомнений, что подобную предвзятость систем на искусственном интеллекте нужно искоренять.

Однако также у моделей есть предпочтения. Разные БЯМ называют любимыми разные песни, кино и книги. ИИ одного провайдера предпочитает одну разновидность мороженого, у конкурентов языковая модель любит десерты другого вкуса. Ответы на подобные вопросы глубоко субъективны, одного морально правильного нет.

Можно даже сказать, что вкусы — это частный случай систем ценностей. Разница в том, что явных угроз подобные артефакты выравнивания не несут. Какая разница, предпочитает ли БЯМ джаз или рок?

Читать далее

Руководство по Кросс-Платформенному Системному Программированию для UNIX и Windows: Уровень 1

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

С помощью этого учебного материала мы научимся писать кросс-платформенный код на Си, используя системные функции популярных ОС (Windows, Linux/Android, macOS и FreeBSD): управление файлами и файловый I/O, консольный I/O, пайпы (неименованные), запуск новых процессов. Мы напишем свои небольшие вспомогательные функции поверх низкоуровневого системного АПИ (API), для того чтобы наш основной код, используя эти функции, мог работать на любой ОС без изменений. Этот учебный материал — начального уровня. Я делю сложные вещи на части, чтобы примеры кода здесь не были слишком заумными для тех, кто только что начал программировать на Си. Мы обсудим различия между системными АПИ и разберёмся, как создать кросс-платформенный программный интерфейс, который скрывает все эти различия от пользователя этого интерфейса.

Читать далее

Генерация синтетических данных для LLM. Часть 3: случайные матрицы

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

Добрый день, уважаемые Хабровчане :) Продолжаем наши научные изыскания в области определения «синтетических» данных. В этой статье я рассмотрю тему анализа графов с позиции анализа спектров матрицы смежности для случайных матриц. То есть мы зайдём со стороны оптимизации знаний из прошлых двух статей (раз и два) и посмотрим, как применить теорию случайных матриц к нашей исходной задаче. Основная цель — расширение диапазона исследуемых значений. 

Итак, погнали, значицо ;)

Читать далее

gRPC-сервер на C++

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

Всем привет. На Хабре есть довольно большое количество примеров реализации gRPC‑серверов на GO, чуть в меньшей степени на python, еще меньше — на других языках. Поиск примеров данного проекта для C++ дал мне не так много информации, как хотелось бы. К счастью, очень крутое решение-экземпляр есть на официальном сайте (ссылка). Если вам не хочется читать код и комментарии на английском языке, добро пожаловать под кат.

Читать далее

Наша Вселенная — симуляция на основе большого клеточного автомата?

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

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

А также мы рассмотрим практический вопрос: что это может значить лично для нас, если симуляционная теория верна.

Читать далее

Создаём собственный системный вызов в Linux 6.8

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

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

Читать далее

Информация

В рейтинге
2 369-й
Откуда
Иркутск, Иркутская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Software Engineer, ML разработчик
Средний
C++
Python
TensorFlow
PyTorch
Cmake
Linux
Deep Learning
Cuda
Computer Science
Keras