В феврале прошлого года я впервые обращался к теме прогнозирования новых химических соединений методами глубокого обучения — когда опубликовал перевод об инструменте FermiNet. Такие исследования, находящиеся на стыке физики, химии, биоинформатики и фармакологии, призваны смоделировать потенциально возможные химические связи и конфигурации молекул. Так можно одновременно удешевить и значительно ускорить разработку новых лекарств. Также я затрагивал эту тему в статье о выращивании кристаллов, но в несколько ином аспекте: гравитация вносит коррективы в форму молекул, поэтому некоторые конфигурации молекул быстро «сминаются». Эта проблема остро стоит при производстве баснословно дорогих препаратов (прежде всего, противораковых), терапевтический эффект которых заключается в поддержании строго определенной формы молекул, блокирующих патологические биохимические процессы. Если бы мы могли поставить на поток производство филигранных молекул (в частности, ферментов), блокирующих работу определенных белков, это преобразило фармакологию, в значительной степени ее персонализировав. Но у такой линии исследований есть и обратная сторона: она открывает путь к созданию чрезвычайно токсичных и цепких веществ, которые было бы практически невозможно «выковырять» из биохимического аппарата, если они там окажутся.
Новости
Reactive Spring Cloud Gateway: конвейер WebSocket в Restful и обратно
Spring Cloud Gateway официально служит следующим целям: слоем безопасности, маршрутизатором, балансировщиком, провайдером протоколов сжатия. Gateway ничего не знает о передаваемых данных и тем более о бизнес-логике – это инфраструктурный сервис.
Связь Gateway с WebSocket обуславливает здравый смысл. Если перенести логику WebSocket в Gateway, то при высоких нагрузках потребуется ненамного увеличить количество подов с одной стороны, а с другой если через WebSocket работают не только браузеры, но и мобильные приложения – то такой подход становится естественным.
В статье описываются преимущества данного подхода, детально перечисляются нюансы реализации и определяются общие перспективы дальнейшего развития. Но основная идея сводится к уменьшению стоимости разработки за счёт переиспользования базовых технологий для всего необходимого функционала.
4K Ultra HD в проекторах с технологией Pixel Shifting. Правда или маркетинг?
Разрешение 4K Ultra HD уже давно превратилось из некой экзотики для энтузиастов в обычный повседневный формат изображения, и трудно найти в продаже телевизоры и мониторы с Full-HD матрицей. На этой волне несколько лет назад начали появляться относительно недорогие китайские проекторы с технологией Pixel Shifting, которые, имея нативную матрицу 1920-1080px, могли путем быстрого сдвига пикселей воспроизводить разрешение 3840-2160px. В этой статье мы разберемся насколько хорошо они справляются с этой задачей и не водят ли нас маркетологи за нос, пытаясь продать кота в мешке.
Сложение векторов со скоростью 154 Гб/с на WebAssembly
Автор ускорил сложение векторов до ~12 000 000 сложений 1024-мерных векторов в секунду. Делимся подробностями и представляем генератор WASM из С++ от автора статьи к старту курса по Fullstack-разработке на Python.
Рыцарь Машинной Графики
Эта статья не относится к жанру официозных юбилейных публикаций. Скорее – это небольшой, очень личный, не совсем упорядоченный и причёсанный набор воспоминаний и раздумий о пути, пройденном Машинной Графикой в в СССР и о человеке, посвятившему ей всю свою жизнь - докторе технических наук, лауреате Государственной Премии СССР, Викторе Алексеевиче Дебелове.
Уверен, что Виктора Алексеевича, учитывая его колоссальный вклад в становление советской Машинной Графики, без особой натяжки можно было бы назвать одним из её основоположников в СССР.
Но… зная его скромность и пренебрежительное отношение к почестям и наградам, позволю себе «наградить» его в этом рассказе званием, которого он безусловно заслуживает – Рыцарь Машинной Графики.
Введение в $mol. Часть 1. Модульная система
Эта статья открывает серию публикаций по обучению фреймворку $mol. Сегодня мы разберемся в модульной системе MAM. Речь пойдет об организации кода, отделении его от инфраструктуры, сборке, версионировании, нейминге, минимизации размера бандла, автоматическом выкачивании зависимостей, фрактальных моно-поли-репозиториях, разделении кода на платформы, альтернативе импортам/экспортам, автоматическом разруливании циклических зависимостей.
Как мы думаем? Вступление к курсу о когнитивных искажениях
Эта статья является вступительным уроком к курсу о когнитивных искажениях, над которым я работал последние несколько месяцев. Изначально курс планировался в виде веб-приложения с интерактивными заданиями. К сожалению, сейчас у меня нет финансовой возможности закончить этот проект в виде веб-приложения, поэтому я решил опубликовать написанный материал в виде статей. Приношу извинения тем, кто не найдёт в этой статье новой для себя информации, но во вступлении я, как автор, должен ориентироваться на разную аудиторию и потому мне пришлось начать с азов. Следующие статьи из цикла определённо будут более интересными.
Как происходит процесс мышления, и почему в нём появляются ошибки?
Представь, что кто-то описывает тебе своего знакомого: «Сергею 35 лет. Он высокий, в хорошей физической форме, сильный и ловкий. Хорошо водит машину и любит быструю езду, занимается экстремальными видами спорта. Из особых примет — шрам на руке».
На твой взгляд, более вероятно, что Сергей каскадёр или что Сергей бухгалтер?
Пожалуйста, ответь на этот вопрос, прежде чем читать далее.
Фиалку поливать не нужно
Серега уезжал покорять Москву, и я зашел к нему попрощаться, пожелать удачи. Взять нужно было все самое необходимое, все для новой работы и все для новой жизни. Кота хотелось бы оставить, но пришлось брать. А вот с другими обитателями квартиры – огромным числом фиалок, нужно было распрощаться.
- Возьмешь фиалку? Марина выращивает, не везти же их все с собой. Мы их всем друзьям раздаем.
Я ответил, что не держу дома цветов, поскольку забываю их поливать, и они у меня быстро загибаются. Поэтому у меня только кактус.
- Эту фиалку поливать не нужно.
Он принес из комнаты цветок, и я был вынужден признать верность его заявления. Фиалка имела «систему автополива». Растение было посажено в маленький горшок, который помещался в большой пластиковый стакан, вроде бы из под кваса. Из горшка спускалась веревочка, через которую и поступала необходимая для жизни влага. Таким образом, залив один раз пол литра, можно было не беспокоиться о цветке несколько месяцев. Фиалку я взял.
«Синхронизируй это»: компактный обзор примечательных решений и протоколов для передачи звука по Ethernet
На неделе один из участников Hacker News запустил тематический тред с целью узнать, как «связать» компьютер, колонки и другую акустику в единую звуковую систему.
Мы решили рассмотреть несколько стандартов, которые используют музыканты в студиях, а также open source решения, доступные для развертки любому аудиоману.
ЧудESA защиты корпоративной почты или внедрение свободных почтовых шлюзов на базе Proxmox Mail Gateway
Средства межсетевого экранирования стали де-факто атрибутом любой сетевой инфраструктуры. Почтовому трафику тоже необходимы средства фильтрации. Поэтому в современных релеях реалях тяжело представить почтовую инфраструктуру организации без почтовых шлюзов (mail gateways).
Дайджест интересных материалов для мобильного разработчика #440 (18 — 24 апреля)
PHP фреймворк отечественной разработки
Друзья, всем пример. Меня зовут Макс и я хочу познакомить вас с IsEngine framework.
Это новый фреймворк отечественной разработки для простого и быстрого создания web-приложений.
Я занимаюсь его разработкой в течение последних 5 лет. Сейчас готовлю его к релизу, и поэтому начинаю продвигать.
Чтобы понять любой продукт, вообще любую систему, нужно понимать, какие задачи она решает. И здесь самый первый и самый главный вопрос - это для кого она создана. Для программистов? Разработчиков? Или для обычных людей (я имею ввиду не специалистов в web'е).
Простой способ создания и переиспользования модальных диалогов во Vue 3
Модальные диалоги не такая и сложная задача в разработке. Разве что можно легко запутаться в коде, если нужно вызывать модальные окна по цепочке. Но это очень монотонная и неинтересная работа с повторяющейся логикой, которую подчас копируют из компонента в компонет с незначительными изменениями.
Хорошим решением было бы создать функцию, которая принимала бы компонент диалога и управляла бы его рендерингом в шаблоне, а этот диалог можно "промисифицировать" и работать с ним как с асинхронной функцией. Как например в этой библиотеке vue-modal-dialogs. К сожалению она давно не обновлялась и не опддерживает Vue 3.
А еще отличной идеей для организации кода было бы отдельные хуки, код в которых выполнялся бы в зависимости от действий пользователя.
Все это есть в плагине vuejs-confirm-dialog, о котором я хочу вам рассказать.
Большая статья о переезде на остров Пенанг, Малайзия. Часть 2
В первой статье я рассказывал о переезде в Малайзию. Здесь я расскажу о ценах в Малайзии и каких-то вещах о жизни. Цены буду писать в малайзийских рингитах, поделив эти цифры на 5, вы получите цены в евро.
Изоляция зубов в стоматологии
Если Вы подумали, что стоматологи нашли способ отправлять зуб на карантин, то спешу Вас огорчить, эта статья немного о другом. А именно о изоляции зубов с помощью системы коффердам.
Коффердам - это немецкое слово, которое можно дословно перевести как: "резиновая преграда", что очень ярко отражает весь смысл.
Эпичная реклама кредитки
Всем привет, это Денис Вебер.
Ещё во времена, когда я думал, что полигон это место в Северной Корее, а превью к видео на ютюбе в стиле сделай из плоскости машину казались мне обманом, я даже не догадывался о том, как сильно полюблю 3д.
Тестовая ферма: как упростить тестирование мобильных игр с минимумом затрат
Тестирование — неотъемлемая часть разработки игр, и мобильные тайтлы не исключение. Рынок полон устройств самых разных форм-факторов, мощности и совместимости. При этом чем больше игроков, тем игра успешнее и тем доход больше. Чтобы игроков было как можно больше, нужна поддержка максимального количества смартфонов и планшетов. Чтобы этого добиться, нужно “отполировать билд” для работы даже на самых бюджетных девайсах.
Ускорить, оптимизировать и автоматизировать процесс можно и нужно. Как это сделать? Установить тестовую ферму.
Telegram bot на aiogram + Google Analytics 4
Статья о том как удалось прикрутить гугл аналитику к Telegram боту на aiogram.
Дело в том, что гугл объявил о закрытии Universal Analytics и полном переходе на Google Analytics 4. Погуглив стало ясно что инфы про новую аналитику крайне мало, а о её работе с питоном инфы в принципе нет.
Поскольку это телеграм бот, где нет доступа к фронтэнду, нам не подходят стандартные способы сбора аналитики. А так же любые библиотеки, которым так славится питон, являются устаревшими из-за перехода на новую версию.
В качестве примера будет использоваться python + aiogram, но здесь описывается взаимодействие с api аналитики посредством обычных http запросов. Так что статья актуальна для любого языка.
Обзор всего доступного в С++ type erasure
Техника стирания типов - type erasure - известна довольно давно, хоть её и долго не замечали. Тем не менее кажется только в последнюю декаду она стала из игрушки и костылей превращаться в мощный инструмент, использующийся каждый день в разработке.
Если спросить современного С++ разработчика какие примеры type erasure он видел / использовал, то вероятно он ответит что то про std::function и возможно про std::any, но это лишь малая часть всех применений этого замечательного инструмента!
В статье я постараюсь описать все возможные виды type erasure в современном С++, но начать стоит с определения.
Стирание типов - потеря части информации о типе так, чтобы получившийся после "стирания всего ненужного" тип был общим для всех стираемых, а значит его можно будет использовать в рамках системы типов, опираясь только на оставшуюся после стирания информацию.
Начнём с того, что было уже в С и о чём часто забывают говоря об erasure
void* - мы стёрли всю информацию о типе под указателем, не можем ничего прочитать, но с другой стороны доступ к данным у нас абсолютно без оверхеда! Достаточно угадать тип. Часто внутри именно на этом и построены другие более сложные стирания. Ну и конечно примерно в эту труху из байтов компилятор перетирает всю нашу систему типов в процессе работы.
Кстати, насчёт байтов:
std::byte (since C++17) / unsigned char / char так исторически сложилось, что в С все использовали чары для работы с сырыми байтами, поэтому для них в языке С++ исключение и указатель на них можно приводить к указателю на любой другой тип. Это не обходится без последствий и иногда из-за этого строки теряют некоторые оптимизации, поэтому сначала добавили std::byte, а потом начали потихоньку заменять чары (char8_t since C++20), но это уже совсем другая история. В контексте стирания типов нам важно, что мы получили способность читать данные из стёртого типа, а составив массив мы получим ещё и верхнюю границу размера типа, что конечно немного, но с void и так нельзя.
«Скрытый код» принятых решений
Есть способные к обучению объекты, как живые, так и некоторые математические конструкции. Обучение можно формулировать по-разному, но будучи обученным - что происходит при принятии решения? Некоторое соображение по этому поводу приведено в этой (нет, не научной) статье, не претендующей на какие-то откровения, а скорее на размышления.