Search
Write a publication
Pull to refresh
4
0.9
Дмитрий Померанцев @pda0

User

Send message

Как работают браузеры. Часть 2: парсинг и выполнение JS

Reading time9 min
Views31K

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

В прошлой статье мы обсудили навигацию и получение данных. Сегодня поговорим о HTML- и CSS-парсинге и выполнении JavaScript.

Содержание:

1. HTML-парсинг:
— Парсинг
— Браузерные движки
— Токенизация
— Построение DOM
— Предварительные загрузчики и ускорение страницы

2. CSS-парсинг:
— Токенизация и построение CSSOM

3. Выполнение JavaScript:
— Движки JavaScript
— Компиляция
— Интерпретация
— Комплияция Just-In-Time
— Как обрабатывается код JavaScript

Читать далее

В условиях параллелизма обнуление памяти замедляется

Reading time9 min
Views6.6K

Взявшись исследовать некоторые непонятки с производительностью в Chrome, я обнаружил, что Microsoft распараллелили обнуление памяти, и иногда работа из-за этого сильно замедляется. В Windows 11 такое замедление можно частично побороть, но в последних версиях Windows Server — где этот фактор наиболее важен — баг живее всех живых.

Но есть и хорошие новости: по-видимому, проблема актуальна только на тех машинах, где много процессоров. Под «много» я понимаю «96 или более». Поэтому вашего ноутбука проблема не касается. И даже 96-процессорные машины могут сталкиваться с ней не так часто. Но я нашел и другие факторы, из-за которых может быть спровоцирована такая неэффективность, если сложится подходящая ситуация — и обомлел. Вы бы посмотрели, как разбазаривается мощность ЦП. 

Окей – давайте перейдем к деталям.

Читать далее

Пишем на Rust расширение для SQLite, чтобы научить его работать с файлами Excel

Reading time11 min
Views7.5K

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

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

Исходный код на GitHub

Читать далее

Python GUI. Обзор Hero Animation в библиотеке KivyMD

Reading time5 min
Views8.1K

Приветствую вас, дорогие любители и знатоки Python! Сегодня как всегда будем делать обзор библиотеки для кроссплатформенной разработки, которая реализует набор виджетов в стиле Google Material Design для фреймворка Kivy — KivyMD. В этой статье рассмотрим пример создания и управления Hero анимациями, которые недавно были добавлены в библиотеку KivyMD.
Читать дальше →

Как из костей собрать животное?

Reading time28 min
Views5.7K

Вашему внимаю, представляется один из докладов с прошедшего 2 апреля научного фестиваля. Сегодня выступит спикер нашего палеофеста «Улики Эволюции»: Дмитрий Соболев, автор ютуб-канала «Упоротый Палеонтолог».

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

Как работает быстрый текстовый поиск для WordPress

Reading time7 min
Views7.8K

Много лет мы (команда Epsilon Web Manufactory) занимались разработкой сайтов и разных приложений на заказ, в основном это были проекты на базе популярного движка WordPress. И как правило самой сложной и интересной задачей всегда был полнотекстовый поиск. Если на сайте были только статьи и какие-то кастомные типы записей, содержащие заголовок и основной текст, то достаточно было использовать встроенный класс WP_Query, который с небольшой подстройкой входных параметров отлично справлялся с задачей. Но это было лет 10-12 назад.

Читать далее

Теория алгоритма, дающего смысл словам

Reading time6 min
Views4.4K

Существующие алгоритмы работающие с о смыслом слов:

Векторное представление слов, GPT-3 - статистика

Алгоритм Леска - подбор значения многозначного слова по статистике встречаемости слов в предложении

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

В других вариантах - по сути поиск закономерностей через нейросети.

Читать далее

Самого быстрого GIF не существует

Reading time8 min
Views33K

В чём проблема GIF?


Допустим, вы ради шутки хотите создать дико трясущийся GIF (ссылка). Редактор GIF позволяет задать длительность/задержку кадра, поэтому для максимальной тряски вы указываете самое маленькое значение. Но при просмотре получившегося GIF оказывается, что она проигрывается гораздо медленнее, чем задумано, и вы точно видели более быстрые GIF. Что же происходит?

Если вы читаете эту статью, чтобы исправить свой GIF и вам нужен чёткий ответ, то вот решение: установите задержку кадра не на 10 мс, а на 20 мс. Если вы хотите чуть больше узнать о GIF и о том, почему возникает этот пограничный случай, а также о том, как улучшить ситуацию, то продолжайте чтение!

(Пояснение: если вы читаете статью из далёкого утопического будущего, где это перестало быть проблемой, то некоторые из примеров GIF будут не особо понятными. В противном случае, мои соболезнования, и можете не обращать на это пояснение внимания.)


Я, когда мои GIF слишком медленные
Читать дальше →

Спящий гигант, или Почему Cardano продолжает и выигрывает

Reading time11 min
Views6.8K

Cardano и Ethereum — блокчейны, у которых схожие возможности и они неизбежно подвергаются сравнению друг с другом. Постепенно расстановка сил меняется, и о  Cardano всё чаще говорят как об «убийце Ethereum». Разбираемся в особенностях технологии Cardano, смотрим, есть ли основания для слухов и рассказываем, почему Cardano может стать мощнее, быстрее и доступнее, чем Ethereum или Bitcoin.

Читать далее

Вёрстка писем почти без боли

Reading time8 min
Views23K

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

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

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

Читать далее

Реализация перехвата вызовов API

Reading time33 min
Views32K
Монитор. Отличное слово, правда, объединяющее в себе целую кучу понятий. Ну например впервые данное слово было применено в 1861 году к броненосцу «USS Monitor». Чуть позже данным словом стали называть дисплеи. Еще через некоторое в славную когорту мониторов вошли более привычные нам вещи, наподобие счетчиков производительности, а вместе с ними целая куча разнообразного ПО, основной задачей которого является наблюдение — то есть мониторинг.

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

В современном ПО мониторы встречаются практически повсеместно, ну для примера тот же Punto Switcher — классический пример легального монитора. Практически все антивирусы являются мониторами, профилировщики, ну и я уж не говорю об основном нашем инструментарии — отладчике, который так же является монитором.

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

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

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

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

Триумф и трагедия «Бурана»

Reading time10 min
Views96K


Ровно 30 лет назад с космодрома Байконур на ракете-носителе «Энергия» в свой единственный полёт отправился корабль «Буран». В полностью автоматическом режиме он совершил 2 витка вокруг Земли и успешно приземлился спустя 205 минут. Это стало несомненным триумфом советской космонавтики, впервые в мире сумевшей посадить многоразовый космоплан в автоматическом режиме на землю.

Но спустя всего год работы по проекту были приостановлены, а в 1993 году — и вовсе прекращены. В 2002 году единственный летавший в космос «Буран» был навсегда погребён под обломками цеха в котором хранился. Об предпосылках к появлению проекта «Энергия-Буран», его ходе и печальном завершении, пойдёт сегодня речь.

Создание рига персонажа в Maya

Reading time3 min
Views7.4K

В этой статье мы рассмотрим один из способов создания рига персонажа, используя дополнение к Autodesk Maya Advanced Skeleton. Maya содержит достаточное количество инструментов для работы со скелетной анимацией и огромное количество дополнений в виде плагинов и наборов скриптов, расширяющих функционал программы. Чтобы персонаж “ожил” и его можно было начать анимировать, необходимо сначала создать риг. (от англ. Rig - оснастка). Риг - это огромная конструкция, состоящая из суставов, контроллеров в виде простых кривых либо других примитивов, solver’ов инверсной кинематики, выражений (expressions), ограничителей (constraints) и прочих объектов, находящихся в определенной иерархической зависимости по отношению друг к другу. Вся эта конструкция будет управлять нашим персонажем, позволяя ему ходить, бегать, приседать, поворачивать головой и тд. По сути риг - это такие “ниточки”, дергая за которые, мы управляем нашим персонажем.

Читать далее

Распределенное производство – концептуальное будущее или ближайшее настоящее

Reading time6 min
Views3.1K

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

Читать далее

Скрипт архивации баз данных Microsoft SQL Server с полной моделью восстановления

Reading time7 min
Views6.8K

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

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

Читать далее

Переписать второй закон термодинамики и выжить

Reading time13 min
Views12K

Второй закон термодинамики — один из самых священных во всей науке, но он всегда опирался на обоснование XIX века, которое касается вероятности. В новой аргументации истинный его источник усматривают в потоках квантовой информации. Подробности — к старту флагманского курса по Data Science.

Читать далее

Язык описания квестов или как сделать квестовую систему на Unity

Reading time8 min
Views17K

Привет, habr! Это моя первая статья, поэтому будет хорошим тоном представиться. Я независимый разработчик мобильных игр. Два года работаю на Unity и прогаю на C#. Выпустил одну инди-игрушку, которая хоть и не выстрелила, и не принесла денег, получила неплохие отзывы.

Эта статья про один из возможных способов создания расширяемой системы квестов, которая может пригодится во множестве игр.

Читать далее

Солнечная геоинженерия. Искусственные космические пузыри для охлаждения Земли

Reading time6 min
Views6.9K

Сегодня океаны теплее, сильные засухи, уровень моря поднимается, ледяные щиты сокращаются, а ледники отступают. Средняя температура поверхности Земли повысилась на 0,9 ℃ с конца XIX века, и большая часть повышения температуры произошла за последние 35 лет. За последние десять лет было зафиксировано пять самых тёплых лет на планете. Согласно исследованию НАСА, нынешняя тенденция к потеплению с вероятностью 95 % вызвана деятельностью человека. Повышение температуры на поверхности Земли уносит жизни людей: 5 миллионов человек за последние 20 лет, согласно исследованию. В новом исследовании, опубликованном в журнале Nature Medicine, международная группа исследователей подсчитала, что почти 900 000 смертей в период между 2002 и 2015 годами связаны только с экстремальными температурами в крупных южноамериканских городах. Это самая подробная оценка для Латинской Америки. Аналогичные исследования проводятся и для Европы, Азии и других континентов.

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


Рост температуры по всему миру
Читать дальше →

Алгоритм ECDSA

Reading time5 min
Views19K

Алгоритм ECDSA (Elliptic Curve Digital Signature Algorithm) — это реализация схемы цифровой подписи, основанная на использовании эллиптических кривых и модульной арифметики.

Мы оставим подробный разбор всех тонкостей этого алгоритма и соответствующей математической теории для будущих статей. Здесь же просто покажем основные идеи, за счет которых в ECDSA реализуются алгоритмы KeyGen, Sig и Ver.

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

Эллиптическая кривая в ECDSA — это линия на плоскости, задаваемая уравнением y²=x³+a∙x+b, где a и b — такие числа, что 4∙a³+27∙b²≠0. Например, Bitcoin и Ethereum используют кривую y²=x³+7 (рис. 1).

Читать далее

Всё о cookies в свете GDPR и не только

Reading time5 min
Views7.4K

GDPR вступил в силу уже четыре года назад, однако его понимание и практика применения до сих пор развиваются. Как показывают последние новости, далеко не все преуспели в борьбе за соответствие – в январе Google и Facebook получили серьёзные штрафы (на €150 млн и €60 млн соответственно) за нарушения законодательства в отношении cookies, причём для Google это уже второй штраф за них (предыдущий был на €100 млн). Именно тема cookies постепенно становится "горячей": ей занялись не только регуляторы, но и активисты. Правила, действующие в отношении cookies, основываются частью на GDPR, частью – на ePrivacy Directive. В этой статье собрано текущее понимание этих правил для практического применения.

Читать далее

Information

Rating
2,724-th
Location
Химки, Москва и Московская обл., Россия
Date of birth
Registered
Activity