Рубрика «Блог компании RUVDS.com» - 97

Объектная модель документа (Document Object Model, DOM) — это интерфейс, который рассматривает HTML- или XML-документы в виде древовидных структур, каждый узел которых является объектом документа. DOM, кроме того, предоставляет набор методов для выполнения запросов к дереву документа, для изменения его структуры и для выполнения с ним некоторых других действий.

В чём разница между узлом и элементом DOM? - 1

При работе с DOM, кроме того, используется термин «элемент». Элементы очень похожи на узлы, но, всё же, это — не одно и то же. В чём же разница?
Читать полностью »

Cheney on the M.T.A.: компилятор, в котором стек служит заодно и кучей - 1 

Did he ever return? No, he never returned,
And his fate is still unlearned,
He may ride forever ‘neath the streets of Boston,
He’s the man who never returned.

“Charlie on the M.T.A.”, 1949

1. Замыкания

Одна из удобных возможностей современных языков программирования – вложенные функции:

def bubble(arr, comp):

    def swap(i, j):
        temp = arr[i]
        arr[i] = arr[j]
        arr[j] = temp

    flag = True
    while flag:
        flag = False
        for i in range(len(arr) - 1):
            if comp(arr[i], arr[i+1]) > 0:
                swap(i, i+1)
                flag = True

Сама эта возможность не нова: она была уже в Алголе (1958) и многим знакома из Паскаля (1970). В компиляции вложенных функций нет ничего сложного: например, в стековом кадре внутренней функции может храниться указатель на стековый кадр внешней функции, чтобы внутренняя функция могла обращаться к параметрам и локальным переменным внешней. Кто-то может вспомнить, что инструкции enter и leave, появившиеся в 80186 (1982), реализуют именно такую поддержку вложенных функций (хотя я не встречал ни один компилятор, который бы её задействовал).

Сложности начинаются, если язык позволяет передать внутреннюю функцию наружу внешней:

def by_field(name):

    def comp(x, y):
        return x[name] – y[name]

    return comp

bubble(my_records, by_field("year"))

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

Симуляция радара истребителя на 3″ осциллографической ЭЛТ - 1


Все из вас уже наверняка повыбрасывали старые громоздкие ЭЛТ-мониторы, предпочтя им изящные ультратонкие ЖК-дисплеи. Многие уже и не думают, что еще можно повстречать столь древний девайс в современном мире… Но здесь речь пойдет об особенном ЭЛТ-дисплее – круглом! Его диаметр составляет всего 3 дюйма, и выглядит это чудо очень мило.Читать полностью »

Как Amazon тратил по $500 млн на разработку провальных игр и почему ничего не вышло - 1

В 2012 году в структуре Amazon возникла собственная студия по производству компьютерных игр. По замыслу Джеффа Безоса, Amazon Game Studios должна была стать успешной и эффективной частью корпоративной экосистемы. Однако за прошедшие восемь лет добиться этого, увы, так и не удалось. Как же так вышло, что богатейшая компания, у которой получалось практически всё, не сумела завоевать рынок геймдева?

Ответы на этот вопрос нашел журналист Джейсон Шрайер (автор книги “Кровь, пот и пиксели”). Публикуем главные тезисы расследования.
Читать полностью »

«Баночный» детектор нейтронов (фотоотчет) - 1

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

Это был небольшой занятный вечерний проект, в котором я снабдил замедлителем пропорциональный нейтронный детектор SNM3 ³He. Сам замедлитель я отлил из парафина в банку из-под краски, просверлив в нем отверстие для детектора. Читать полностью »

В прошлый вторник у нас выступал Михаил Веселов — полиграфолог со стажем в 10 лет. Миша провел более 3000 допросов и обучил почти 400 человек проходить проверки на детекторе лжи.

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

Жизнь интересная штука: иногда узнать, как работают и думают люди, которые на совершенно другом от тебя полюсе даже любопытнее, чем общаться с теми, с кем ты «на одной волне». Это нечастый аттракцион (все же, мы стараемся окружать себя единомышленниками и часто варимся в своей закрытой кастрюльке). Кроме того, это возможность задать вопросы такому человеку напрямую и подтвердить свою сложившуюся точку зрения или наоборот — поменять ее.

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


Меня зовут Михаил Алексеевич Веселов, я – полиграфолог, бывший сотрудник уголовного розыска. Родился и вырос в Москве, служил в армии, а потом решил свою жизнь связать с милицией. В милиции много различных служб, одна из них – это уголовный розыск, который занимается непосредственно раскрытием преступлений. В общем, 11 лет после армии я этим и занимался.
Читать полностью »

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

WebAssembly, в теории, может позволить кому угодно писать низкоуровневый код, выполняющийся в браузере, в безопасном виртуальном окружении. И, что ещё интереснее, технология WASM (сокращение от WebAssembly) была спроектирована как цель компиляции для других языков, позволяя коду, который обычно выполняют в серверной среде (например — коду, написанному на C или на C++), компилироваться в соответствующий формат и выполняться в браузере.

Что не так с WebAssembly? - 1

У WASM был огромный потенциал и невероятные перспективы. Что же пошло не так? Почему WASM, через 3 года после релиза, ещё не используется в каждом веб-проекте? Есть ли у WASM будущее в веб-разработке? Поищем ответы на эти вопросы.
Читать полностью »

HEY! LISTEN! Каким получилось путешествие в «золотой век видеоигр»? - 1


Стив Макнил — хорошо известный в Великобритании телеведущий, подкастер, стендапер, стример, актёр, а по совместительству еще и очень увлечённый геймер, ставший соавтором Dara O Briain’s Go 8 Bit — популярного британского телешоу о видеоиграх.

В 2019 г. Стив выпустил книгу под названием Hey! Listen!, своего рода «В поисках утраченного времени» для геймеров, — так оценил книгу один из рецензентов, подчеркнув тем самым две её главные особенности: тщательное восстановление генеалогии игровой индустрии и глубоко личное, неравнодушное отношение к описываемым событиям. Недавно книга стала доступна и для русскоязычного читателя.
Читать полностью »

Пишем юзабельную оболочку для FFMPEG на Powershell - 1
Нормальный вывод для ffmpeg

Наверное, вы, как и я, слышали про ffmpeg, но боялись его использовать. Респект таким парням, программа целиком выполнена на C ( си, без # и ++ ).

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

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

Заметки о Unix: системный вызов write(), на самом деле, не такой уж и атомарный - 1

Недавно я читал материал Эвана Джонса «Устойчивое хранение данных и файловые API Linux». Я полагаю, что автор этой довольно хорошей статьи ошибается, говоря о том, чего можно ожидать от команды write() (и в том виде, в каком она описана в стандарте POSIX, и на практике). Начну с цитаты из статьи:

Системный вызов write() определён в стандарте IEEE POSIX как попытка записи данных в файловый дескриптор. После успешного завершения работы write() операции чтения данных должны возвращать именно те байты, которые были до этого записаны, делая это даже в том случае, если к данным обращаются из других процессов или потоков (вот соответствующий раздел стандарта POSIX). Здесь, в разделе, посвящённом взаимодействию потоков с обычными файловыми операциями, имеется примечание, в котором говорится, что если каждый из двух потоков вызывает эти функции, то каждый вызов должен видеть либо все обозначенные последствия, к которым приводит выполнение другого вызова, либо не видеть вообще никаких последствий. Это позволяет сделать вывод о том, что все файловые операции ввода/вывода должны удерживать блокировку ресурса, с которым работают.

Означает ли это, что операция write() является атомарной? С технической точки зрения — да. Операции чтения данных должны возвращать либо всё, либо ничего из того, что было записано с помощью write(). […].
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js