
JavaScript-классы — это не просто «синтаксический сахар»

User
Рассказ пойдет об исследовании циклических чисел, и как это исследование привело к случайному открытию нового класса простых чисел. Помимо простых чисел мы так же коснемся чисел Фибоначчи и представления чисел в разных системах счисления.
Когда мы разрабатывали модуль ghidra nodejs для инструмента Ghidra, мы поняли, что не всегда получается корректно реализовать опкод V8 (движка JavaScript, используемого Node.js) на языке описания ассемблерных инструкций SLEIGH. В таких средах исполнения, как V8, JVM и прочие, один опкод может выполнять достаточно сложные действия. Для решения этой проблемы в Ghidra предусмотрен механизм динамической инъекции конструкций P-code — языка промежуточного представления Ghidra. Используя этот механизм, нам удалось превратить вывод декомпилятора из такого:
Как фронтенд-дизайнер я за последние 6 лет не был так взволнован новой CSS-функцией, как сейчас. Благодаря усилиям Мириам Сюзанны и других умных людей прототип контейнерных запросов можно включить в Chrome Canary
О контейнерных запросах запомнилось много шуток, но они, наконец, здесь. Специально к старту нового потока курса по Frontend разработке, делимся с вами статьей, в которой рассказывается зачем нам нужны контейнерные запросы, как они облегчат нашу жизнь, и, самое важное, ваши компоненты и макеты станут мощнее. Если вы взволновались так же, как и я, давайте углубимся в тему. Вы готовы?
(Визуализатор VMD в связке с проектором и управлением жестами, 1994 г.)
С самодельным параллельным суперкомпьютером в рюкзаке Клаус Шультен терпеливо ждал в чикагском аэропорту О'Хара, надеясь, что после прибытия из Германии ему не составит труда пройти таможню. Это было летом 1988 года, и Шультен собирался начать новую работу в Университете Иллинойса. В разгар холодной войны, когда напряженность между США и Советским Союзом достигла наивысшего пика, суперкомпьютеры вызывали у администрации Рейгана большой ужас. Хотя Рейган, находясь на своем посту, усилил гонку вооружений и все сопутствующие ей технологические достижения, он хотел, чтобы бурно развивающиеся разработки суперкомпьютеров не попали в руки Советов, которые могли бы создать более совершенное оружие.
Многим знакома проблема однотипных действий за компьютером, особенно на офисных работах. Заполнение каких-то данных в таблицу, размещение постов в социальных сетях, поиск в базе данных и заполнение отчетов. И если для программистов решение такой задачи не составит труда, то что делать обычным офисным работникам?
Я долго мучался над подобной проблемой, был период когда вся моя работа заключалась в сравнении данных в Excel, SAP и ещё парочки источников, но так как я очень ленив, стал искать способ как это дело можно автоматизировать и вот уже два года, я с некой периодичностью создаю новые или редактирую старые программы действий для компьютера (скрипты или сценарии), позволяя ему работать вместо меня, а себе гонять чай в рабочее время посматривая на экран. Я не стал супер экспертом по автоматизированию (RPA разработка если по научному), но работа стала приносить намного меньше стресса.
В 1944 году физик Эрвин Шредингер, один из основателей современной квантовой механики, опубликовал небольшую книгу, которая изменила ход современной биологии. "Что такое Жизнь?" – лихо вопрошает заголовок. Могут ли события внутри живого организма быть объяснены исключительно физикой и химией? – Да, могут, – отвечает Шредингер. "Неспособность современной физики и химии объяснить такие события вовсе не дает оснований сомневаться в том, что они могут быть объяснены этими науками в будущем."
Эта мысль привлекла поколения ученых-физиков к биологии и стала поводом создания таких коллабораций как Theoretical and Computational Biophysics Group под шефством Клауса Шультена. Это объединение экспериментальных биологов и кафедр физики, химии, биохимии, клеточной и молекулярной биологии из Иллинойского университета в Урбана-Шампейне с лабораториями по всему миру. Особую роль в группе занимают профессиональные программисты – ПО разработанное группой используется научными сотрудниками по всему миру.
Это история об исследователях, которые пытаются понять таинства жизни, воспроизводя их силами компьютерного моделирования и о становлении вычислительной биологии как таковой.
NB: это черновик двух новых глав моей книги, посвященной дизайну API. В тексте встречаются отсылки к предыдущим главам.
В предыдущих разделах мы старались приводить теоретические правила и принципы, и иллюстрировать их на практических примерах. Однако понимание принципов проектирования API, устойчивого к изменениям, как ничто другое требует прежде всего практики. Знание о том, куда стоит «постелить соломку» — оно во многом «сын ошибок трудных». Нельзя предусмотреть всего — но можно выработать необходимый уровень технической интуиции.
Поэтому в этом разделе мы поступим следующим образом: возьмём наше модельное API из предыдущего раздела, и проверим его на устойчивость в каждой возможной точке — проведём некоторый «вариационный анализ» наших интерфейсов. Ещё более конкретно — к каждой сущности мы подойдём с вопросом «что, если?» — что, если нам потребуется предоставить партнерам возможность написать свою независимую реализацию этого фрагмента логики.
Принципы SOLID говорят нам, как нам соединять наши функции и данные в классы, и как эти классы должны быть взаимосвязаны. Т.е. эти принципы относятся к уровню модулей (mid-level). Однако они также применимы и к уровню компонентов (high-level архитектура).
Принципы SOLID зародились в конце 80-х и стабилизировались в начале 2000-х.
Это серия статей — вольный и очень краткий пересказ книги Роберта Мартина (Дяди Боба) «Чистая Архитектура», выпущенной в 2018 году.
Если на вашем сайте присутствует большое количество контента, то для отображения пользователю его приходится так или иначе делить.
Все известные мне способы имеют недостатки и я попытался создать систему, которая сможет решить некоторые из них и при этом не будет слишком сложна для реализации.
Здравствуй, уважаемый читатель!
Многие из нас слышали о слежке за пользователями в интернете и о сборе персональных данных, некоторые сталкивались с этим не понаслышке.
Неважно, являетесь вы домашним или корпоративным пользователем, все мы посещаем различные сайты, которые в той или иной мере вытягивают с наших устройств информацию о нас. Еще больше данных о себе и своем устройстве вы отдаёте, посещая вредоносные сайты.
Собирая эти данные и обрабатывая их, тот, кто ими завладел, может составить ваш цифровой портрет, состоящий из цифровых отпечатков или следов, оставленных в сети и этим уже занимаются злоумышленники, взломавшие 120 рекламных серверов.
Согласно результатам исследования EFF (Electronic Frontier Foundation), уникальность отпечатка браузера очень высока, и он содержит в себе нижеописанные данные.
#!/bin/bash
exec > my_image.ppm # Все инструкции echo будут писать в этот файл
echo "P3 250 250 255" # формат, ширина, высота, максимальное значение цвета
for ((y=0; y<250; y++)) {
for ((x=0; x<250; x++)) {
echo "$((x^y)) $((x^y)) $((x|y))" # r, g, b
}
}
Яаков Зив разработал то, что мы привыкли называть термином lossless data compression — сжатие данных без потерь. Его работы стали основой для технологий, которыми мы пользуемся и по сей день, от GIF и PDF до ZIP и MP3.
Должно быть, Зив сказочно богат? Увы, нет.
Ученые доказали, что существуют особые простые числа, настолько чувствительные, что изменение любой из их цифр превращает такие числа в составные. Однако конкретных примеров исследователи пока не нашли.
Возьмем числа 294 001, 505 447 и 584 141. Заметили в них что-нибудь особенное? Можно догадаться, что все они простые (без остатка делятся только сами на себя и на единицу). Но указанные выше простые числа еще более необычны!
Если вы выберете любую цифру в каждом из этих чисел и измените ее, новое число будет составным и, следовательно, больше не будет являться простым. Изменим, например, цифру 1 в числе 294 001 на 7, и полученное число будет делиться на 7; изменим 1 на 9, и полученное число делится на 3.
В прошлом году наша команда столкнулась с необходимостью анализа байткода V8. Тогда еще не существовало готовых инструментов, позволявших восстановить такой код и обеспечить удобную навигацию по нему. Было принято решение попробовать написать процессорный модуль под фреймворк Ghidra. Благодаря особенностям используемого языка описания инструкций на выходе мы получили не только читаемый набор инструкций, но и C-подобный декомпилятор. Эта статья — продолжение серии материалов (1, 2) о нашем плагине для Ghidra.
Между написанием процессорного модуля и статьи прошло несколько месяцев. За это время спецификация SLEIGH не изменилась, и описанный модуль работает на версиях 9.1.2–9.2.2, которые были выпущены за последние полгода.
Сейчас на ghidra.re и в приложенной к Ghidra документации есть достаточно хорошее описание возможностей языка — эти материалы стоит почитать перед написанием своих модулей. Отличными примерами могут быть уже готовые процессорные модули разработчиков фреймворка, особенно если вы знаете описываемую в них архитектуру.
В документации можно прочесть, что процессорные модули для Ghidra пишутся на языке SLEIGH, который произошел от языка SLED (Specification Language for Encoding and Decoding) и разрабатывался целенаправленно под Ghidra. Он транслирует машинный код в p-code (промежуточный язык, используемый Ghidra для построения декомпилированного кода). Как у языка, предназначенного для описания инструкций процессора, у него достаточно много ограничений, которые, однако, можно купировать за счет механизма внедрения p-code в java-коде.
Исходный код созданного процессорного модуля представлен на github. В этой статье будут рассматриваться принципы и ключевые понятия, которые использовались при разработке процессорного модуля на чистом SLEIGH на примере некоторых инструкций. Работа с пулом констант, инъекции p-code, анализатор и загрузчик будут или были рассмотрены в других статьях. Также про анализаторы и загрузчики можно почитать в книге The Ghidra Book: The Definitive Guide.
v-agent ориентированное программирование (VAOP) - это методология программирования, основанная на представлении алгоритма в виде v-agent script, который позволяет программному агенту, получившему название v-agent, выполнять операции закодированные в модулях v-agent box.
Идеологически v-agent ориентированное программирование - добивается того, чтобы алгоритм был записан в одном месте в виде, понятном всем - заказчикам, программистам и исполняющей среде (компьютеру), что улучшает процесс взаимодействия всех при создания программного продукта и, что особенно важно, существенно снижает затраты на этапе поддержания работы и адаптации к изменению внешних условий в Будущем.
Парадокс заключается в том, что мы должны меняться, чтобы все было по-прежнему, поэтому главная задача v-agent ориентированного программирования это обеспечить Бессмертие программного продукта при минимальных вложениях средств в его постоянную модернизацию.
No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com/
Access to fetch at ‘https://example.com’ from origin ‘http://localhost:3000’ has been blocked by CORS policy.
Попался мне достаточно крупного размера проект написанный на React + Typescript.
Покопался в коде. Всё круто, контейнеры, компоненты, типы везде стоят, линтер настроен, styled-components, даже storybook есть и некий react-query.
Ну просто счастье, а не проект!
Сажусь делать простую таску – какую-то страничку собрать из компонентов.
Пишу в коде But… и IDE мне предлагает 16 Button компонентов.
Блииин…