Search
Write a publication
Pull to refresh
2
0
Садовников Антон Петрович @Siddthartha

Developer

Send message

Реверс-инжиниринг исходного кода коронавирусной вакцины от компаний BioNTech/Pfizer

Reading time11 min
Views105K
Добро пожаловать. В данном посте мы посимвольно разберём исходный код вакцины BioNTech/Pfizer SARS-CoV-2 мРНК.

Да, такое заявление может вас удивить. Вакцина – это ведь жидкость, которую вводят человеку в руку. При чём тут какой-то исходный код?

Хороший вопрос. Начнём мы с небольшой части того самого исходного кода вакцины BioNTech/Pfizer, также известной, как BNT162b2, также известной, как Tozinameran, также известной, как Comirnaty.


Первые 500 символов мРНК BNT162b2.

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

Трехмерный движок в коде… ДНК

Reading time40 min
Views23K
UPD 29 ноября: Репозиторий с кодом ДНК выложен на GitHub.
github.com/pallada-92/dna-3d-engine

UPD 30 ноября:
В англоязычном твиттере заметили проект
Новость попала в топ-10 на HackerNews!






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

Ответ довольно неожиданный — lingua franca для моделирования сложных процессов в клетках является реакции вида
Эти реакции моделируются при помощи закона действующих масс, который одинаково работает и в химии, и в молекулярной биологии.

— Неужели при помощи этих примитивных реакций можно что-то программировать?
— Да, а то, что написано выше, вычисляет $B = \sqrt{A}$.

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

Потом я расскажу, как полученные реакции скомпилировать в код ДНК, который можно синтезировать в лаборатории и (если очень повезет) получить трехмерный куб из двумерного массива пробирок.

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

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

Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep

Reading time6 min
Views15K
Даже те, кто пользуется Linux лишь от случая к случаю, вероятно, знают о том, как работать с grep. При этом не нужно быть экспертом в сфере регулярных выражений для того чтобы без особых сложностей пользоваться grep для поиска в файлах строк, соответствующих простым последовательностям символов или сложным шаблонам. Конечно, grep — это отличный инструмент для поиска информации. Но что если нужно что-то найти, а потом — заменить это на что-то другое? Например, может быть, нужно изменить все найденные слова HackADay на Hackaday. Тут можно применить sed, но этой утилитой пользоваться довольно сложно. Для решения этой задачи можно было бы воспользоваться awk. Но, учитывая то, что речь идёт о языке программирования, использовать его для решения столь простой и распространённой задачи — это, пожалуй, чересчур. Именно идея, заключающаяся в простом решении вышеописанной задачи, и лежит в основе утилиты ripgrep (соответствующая ей команда выглядит как rg). С помощью rg можно решать те же задачи, что решает grep, но при этом — пользоваться более современными регулярными выражениями и, кроме того, не только искать строки, но и выполнять их замену.


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

Работа с GeoJSON в среде Node.js: практическое знакомство

Reading time7 min
Views21K
GeoJSON — это стандартизованный формат представления географических структур данных, основанный на JSON. Существует множество замечательных инструментов для визуализации GeoJSON-данных. При этом данный формат хорош не только в деле хранения координат неких точек. Он, помимо точек, позволяет описывать и другие объекты: линии, полигоны, коллекции объектов.


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

Установка OpenStreetMap Nominatim для нахождения широты и долготы по введенному адресу

Reading time6 min
Views62K
image

Хотел бы поведать свою историю об установке геокодера Nominatim на выделенный сервер. Изначально предполагалось, что эта задача займёт у меня около 5-7 часов, но не тут то было… Поэтому было решено написать статью c описанием разворачивания Nominatim на сервер до полной работоспособности сайта. Но обо всём по порядку.
Читать дальше

Линукс-порт Far Manager: прогресс за 4 года

Reading time5 min
Views70K
Первая публикация исходников far2l, порта Far Manager под Линукс — штуки, которая когда-то считалась принципиально невозможной — состоялась 10 августа 2016го. Поскольку главный разработчик поговаривает о переходе проекта в статус беты, решил написать обзорный пост, как там идут дела и чего удалось добиться за прошедшие четыре года.

Консольная версия


Первый же вопрос, который все задавали и здесь, и на опеннете, и на лоре — а чего не в консоли? Изначально far2l действительно работал только в графическом режиме, через wxWidgets. Это оказалось самым простым способом быстро получить работающий порт со всеми пользовательскими удобствами: иксовым буфером обмена и всеми сочетаниями клавиш, причем с поддержкой событий не только KeyDown, но и KeyUp.

Сейчас это ограничение в прошлом: far2l прекрасно себя чувствует в консоли. Более того, там появились так называемые расширения терминала far2l, поэтому если запускать консольный far2l внутри графического (например, зайдя куда-нибудь по ssh), они «сконнектятся» между собой, и внутренний far2l тоже будет видеть и буфер обмена (с разрешения пользователя, конечно), и все возможные горячие клавиши. Более того, сделана даже специальная сборка putty, позволяющая наслаждаться всеми этими фишками из Windows.

Вот, смотрите, это far2l в GNOME Terminal


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

Процедурная генерация деревьев методом транспорта питательных веществ

Reading time11 min
Views12K

Примечание: код для этой статьи выложен на мой Github [здесь].

Я провёл всё лето в восточной Пенсильвании рядом с рекой Делавер, потому что кампус MIT в начале марта закрыли и мне пришлось поехать домой. Время от времени прогуливаясь рядом с домом или работой, я заходил в леса, и однажды подметил простой принцип:

Когда любая ветвь дерева разделяется, сумма площадей поперечного сечения сохраняется.

Это наблюдение уже было сделано да Винчи. Я решил воспользоваться этим наблюдением, соединить его с транспортно-ориентированной интерпретацией естественного роста деревьев, создать простую модель и нагенерировать в ней деревьев.

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

При помощи этой методики можно генерировать высококачественные меши деревьев на разных этапах роста в реальном времени и с незначительной тратой вычислительных ресурсов!

Работа с геолокациями в режиме highload

Reading time6 min
Views60K
При разработке ПО часто возникают интересные задачи. Одна из таких: работа с гео-координатами пользователей. Если вашим сервисом пользуются миллионы пользователей и запросы к РСУБД происходят часто, то выбор алгоритма играет важную роль. О том как оптимально обрабатывать большое количество запросов и искать ближайшие гео-позиции рассказано под катом.

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

Проект Natasha. Набор качественных открытых инструментов для обработки естественного русского языка (NLP)

Reading time34 min
Views108K
Два года назад я писал на Хабр статью про Yargy-парсер и библиотеку Natasha, рассказывал про решение задачи NER для русского языка, построенное на правилах. Проект хорошо приняли. Yargy-парсер заменил яндексовый Томита-парсер в крупных проектах внутри Сбера, Интерфакса и РИА Новостей. Библиотека Natasha сейчас встроена в образовательные программы ВШЭ, МФТИ и МГУ.

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

Для новостных статей качество на всех задачах сравнимо или превосходит существующие решения. Например с задачей NER Natasha справляется на 1 процентный пункт хуже, чем Deeppavlov BERT NER (F1 PER 0.97, LOC 0.91, ORG 0.85), модель весит в 75 раз меньше (27МБ), работает на CPU в 2 раза быстрее (25 статей/сек), чем BERT NER на GPU.

В проекте 9 репозиториев, библиотека Natasha объединяет их под одним интерфейсом. В статье поговорим про новые инструменты, сравним их с существующими решениями: Deeppavlov, SpaCy, UDPipe.

Откуда взялся Волшебник из «Обыкновенного чуда»

Reading time9 min
Views17K
Первый был полукровкой — русская мама и папа-еврей. Внешне он был типичным евреем — брюнет, с большим носом и грустными еврейскими глазами.

image

Он был очень неправильным евреем.

Когда подавляющее большинство его соплеменников делало Революцию, он, прапорщик военного времени, вступил в создаваемую Добровольческую армию и ушел с белыми в знаменитый «Ледяной поход» в составе екатеринодарских частей «мгновенного генерала» Покровского.

Когда он прорывал оборону Екатеринодара в марте 1918 года, был сильно контужен, и эта контузия до конца жизни напоминала ему о белогвардейском прошлом тремором рук.

Больше он никогда не воевал.

После Гражданской он немного актерствовал, а потом ушел в журналистику.

Его звали Евгений Львович Шварц.

image

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

image

Он был очень неправильным казаком.

В то время как подавляющая часть его станичников искренне презирала «голоштанных пролетариев», он всем сердцем поверил в Революцию, и, как в песне — «хату покинул, пошел воевать». В отличие от Шварца, которого сразу выбили, этот Гражданскую хлебнул полной ложкой.
Читать дальше →

Active Restore: С чего начать разработку в UEFI

Reading time12 min
Views15K

Всем привет. В рамках проекта от компании Acronis со студентами Университета Иннополис (подробнее о проекте мы уже описали это тут и тут) мы изучали последовательность загрузки операционной системы Windows. Появилась идея исполнять логику даже до загрузки самой ОС. Следовательно, мы попробовали написать что-нибудь для общего развития, для плавного погружения в UEFI. В этой статье мы пройдем по теории и попрактикуемся с чтением и записью на диск в pre-OS среде.


cover

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

Пишем операционную систему. Часть 1. Загрузчик

Reading time3 min
Views46K
Всем привет! Сегодня мы напишем загрузчик, который будет выводить «Hello World» и запустим его на VirtualBox. Писать будем на ассемблере FASM. Скачать его можно отсюда. Также нам понадобится собственно VirtualBox и UltraISO. Перед тем как писать код, разберемся как загружаются операционные системы.

Итак, когда мы нажимаем большую кнопку включения на нашем компьютере запускается система, которая есть на любом компьютере — BIOS (Basic Input/Output System или базовая система ввода/вывода). Задача BIOS это:

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

Собираем недорогой 9.7" E-Ink дисплей для отображения чего угодно

Reading time2 min
Views76K
Всем привет. Давно хотел собрать большой E-Ink дисплей, который можно поставить на стол и отображать на нем полезную информацию (погоду, календарь и т.д.) В этой статье расскажу, как можно собрать такое устройство на базе ESP32 и дисплея от Kindle DX значительно дешевле, чем Waveshare.


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

Компьютерное зрение на WebRTC-сервере с аппаратным ускорением от Intel OWT

Reading time10 min
Views8K

WebRTC упростил (в большинстве своем) получение и отправку видеопотоков в реальном времени. А значит, можно немного поразвлекаться с ними при помощи машинного обучения. В прошлом месяце я показал, как запустить компьютерное зрение (Computer Vision – CV) локально в браузере. Как я уже упоминал, локально – это, конечно, хорошо, но иногда требуется более высокая производительность, и для этого нам понадобится удаленный сервер. В данном посте я расскажу о том, как запускать серверные модели OpenCV с аппаратным ускорением на чипсетах Intel с помощью Open WebRTC Toolkit (OWT) с открытым исходным кодом.
Читать дальше →

5 JavaScript-библиотек для работы со строками

Reading time6 min
Views12K
Работа со строками может оказаться непростым делом из-за того, что она подразумевает решение множества разноплановых задач. Например, для простого приведения строки к «верблюжьему» стилю понадобится несколько строк кода:

function camelize(str) {
  return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
    if (+match === 0) re
turn ""; // или if (/\s+/.test(match)) для пробелов
    return index === 0 ? match.toLowerCase() : match.toUpperCase();
  });
}

Этот фрагмент кода, кстати, в роли ответа на вопрос о приведении строк к «верблюжьему» стилю, собрал больше всего голосов на Stack Overflow. Но даже он не в состоянии правильно обработать, например, такую строку:

---Foo---bAr---


Результат обработки строки ---Foo---bAr---

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

Поговорим о нескольких JavaScript-библиотеках, предназначенных для работы со строками.
Читать дальше →

Сколько кода на C++ нужно написать для разбора HTTP-заголовка Authorization с помощью easy_parser из RESTinio?

Reading time9 min
Views6.8K


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


Одной из точек приложения C++ной шаблонной магии стал easy_parser, небольшая реализация нисходящего рекурсивного парсера на базе PEG. Easy_parser был добавлен в RESTinio в прошлом году для того, чтобы упростить работу с HTTP-заголовками.


Мы уже немного обсуждали easy_parser-е в предыдущей статье. А сегодня хочется показать как же easy_parser применяется при разработке RESTinio. На примере разбора содержимого HTTP-заголовка Authorization. Попробуем, так сказать, заглянуть в потроха RESTinio.


Грамматика Authorization


Структура заголовка Authorization определена в RFC7235 следующим образом:

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

MNT Reform — Полностью открытый ноутбук для параноиков

Reading time3 min
Views61K


MNT Reform — самый открытый ноутбук для параноиков из когда-либо созданных. Вся схемотехника плат, загрузчик и драйвера открыты, в нем нет веб-камеры, а в качестве батареи заменяемые банки 18650. Настоящее торжество красноглазия.

Используется ARM процессор i.MX8 в виде готового SoM (system on module) с полностью пассивным охлаждением и всего 4GB оперативной памяти.
Читать дальше →

На моей визитке работает Linux

Reading time6 min
Views110K
Перевод статьи из блога инженера Джорджа Хиллиарда


Кликабельно

Я инженер встроенных систем. В свободное время я часто ищу то, что можно будет использовать в проектировании будущих систем, или что-то из разряда моих интересов.

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

Я подумал: «Эти процессоры настолько дешёвые, что их практически можно раздавать даром». И через некоторое время ко мне пришла идея сделать голую карточку для Linux в форм-факторе визитной карточки.
Читать дальше →

Настоящее суммирование интернет-каналов — OpenMPTCPRouter

Reading time7 min
Views111K


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

Существуют дорогие коммерческие решения для видеотрансляций, но такие устройства стоят много килобаксов. В статье описывается настройка бесплатного, открытого пакета OpenMPTCPRouter, разбираются популярные мифы о суммировании каналов.
Читать дальше →

Процедурные дороги в Houdini и Unity

Reading time5 min
Views15K
image

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

Раньше, когда не знал о Houdini, я писал на C# собственные инструменты процедурной генерации мешей для Unity. Добавление новых функций было очень долгим процессом, и когда я однажды услышал, что Houdini предназначен для подобных задач, то сразу перешёл на него. Я поэкспериментировал с разными способами генерации городов и улиц, и в этой статье я вкратце расскажу о методике, которая в конечном итоге была использовала для игры.

Сначала я создал инструмент для генерации сети улиц, которые можно было бы использовать в городе. Моё решение основано на изложенных здесь концепциях, а также на использованной по ссылке статье. Там много говорится о тензорных полях и собственных векторах, и всё написано очень технически, но вкратце это можно объяснить так: для моего случая (генерации дорожной сети на рельефе) мне нужно было сгенерировать контурные линии рельефа, а также линии, перпендикулярные им.
Читать дальше →

Information

Rating
Does not participate
Location
Луганск, Луганская обл., Украина
Date of birth
Registered
Activity

Specialization

Specialist
Lead
From 10,800 $
PHP
OOP
Docker
Rust
Linux
Asynchronous programming
MQTT
Geoinformation systems
Machine learning
Computer Science