Pull to refresh
1
0
Ghost_nsk @Ghost_nsk

User

Send message

Как мы уложили компьютерный мультик в 8 кБ

Reading time16 min
Views14K

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

В апреле 2023 года, спустя несколько месяцев работы, мы, наконец, выкатили ленту Барашек и цветок. Можете сами скачать его или проследить на YouTube ход выполнения программы.

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

Читать далее
Total votes 92: ↑90 and ↓2+88
Comments32

Математика для взрослых. Дорожная карта от выпускника Хармфульского клуба математики

Reading time9 min
Views28K

Математика для взрослых. Дорожная карта от выпускника Хармфульского клуба математики.

(1) Школа. (2) Матанализ. (3) Аналитическая геометрия. (4) Линейная алгебра.

Все плейлисты, материалы, курсы в открытом доступе и бесплатны.

Читать далее
Total votes 25: ↑25 and ↓0+25
Comments18

Как неуловимый «эйнштейн» помог решить давнюю математическую задачу

Level of difficultyMedium
Reading time7 min
Views11K


В ноябре прошлого года, после десяти лет неудачных попыток, Дэвид Смит, самопровозглашенный «любитель фигур» из Бридлингтона в Восточном Йоркшире, Англия, заподозрил, что, возможно, он наконец-то решил давнюю задачку в математике замощения плоскости: иначе говоря, он решил, что нашёл «эйнштейна».

В менее поэтичных терминах, «эйнштейн» — это «апериодическая моноплитка», фигура, которая покрывает плоскость или бесконечную двумерную плоскую поверхность неповторяющимся образом. (Термин «эйнштейн» происходит от немецкого «ein stein» или «один камень», в более свободной трактовке — «одна плитка» или «одна фигура»). Ваши обычные обои или кафельный пол представляют собою часть бесконечного узора, который периодически повторяется; при смещении или «переносе» узор может быть точно наложен сам на себя. Апериодическая плитка не обладает такой «трансляционной симметрией», и математики давно ищут единственную фигуру, которая могла бы покрыть плоскость такой плиткой. Эта задача известна под названием «проблемы Эйнштейна».
Читать дальше →
Total votes 56: ↑55 and ↓1+54
Comments10

FSI: метод калибровки FTM с использованием информации о физическом уровне Wi-Fi

Level of difficultyMedium
Reading time14 min
Views1.4K

Статья «FSI: A FTM Calibration Method Using Wi‑Fi Physical Layer Information» опубликована во 2-й части материалов 17-й Международной конференции по беспроводным алгоритмам, системам и приложениям, которая прошла в Даляне, Китай, с 24 по 26 ноября 2022 г. (Wireless Algorithms, Systems, and Applications; WASA 2022) и посвящена определению местоположения источников Wi‑Fi в помещениях.

Аннотация. В стандарте IEEE 802.11–2016 имеется протокол точного измерения времени (Fine Time Measurement, FTM), который предназначен для точного определения местоположения Wi‑Fi‑устройств. Хотя FTM предполагает измерение расстояния в условиях прямой видимости (Line‑Of‑Sight, LOS) с точностью до нескольких метров, эффекты отсутствия прямой видимости (Non‑line‑Of‑Sight, NLOS) и многолучевости радиосигнала приводят к резкому снижению заявленной точности. В данной статье представлены результаты подробного исследования взаимосвязи между ошибкой измерения времени по протоколу FTM и откликом многолучевого канала, которое построено на детальном анализе информации физического уровня, обладающей более высоким временны́м разрешением. На основе данного исследования предлагается FSI — метод калибровки ошибок FTM с использованием информации физического уровня, который может автоматически определять характеристики окружающей среды и рассчитывать длины траекторий распространения радиосигналов. Также в статье описан разработанный авторами метод оптимизации, основанный на перемещениях пользователей, позволяющий дополнительно повысить точность определения местоположения в реальных условиях. Экспериментальные результаты показывают, что метод FSI повышает точность измерения расстояний на 24,80% и точность определения местоположения на 28,45%.

Читать далее
Total votes 3: ↑3 and ↓0+3
Comments7

Темная тема = шрифтовой ад

Reading time2 min
Views14K

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

Читать далее
Total votes 41: ↑40 and ↓1+39
Comments35

«Хакер»: Учимся анализировать программы для x86 с нуля

Reading time15 min
Views23K

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

Читать далее
Total votes 37: ↑34 and ↓3+31
Comments17

Браузер и числа с плавающей запятой

Reading time12 min
Views15K

Изображение — www.freepik.com

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

Часть 1: нереальные ожидания


Баг назывался «JSON некорректно парсит 64-битные Integer»; поначалу это непохоже на проблему с плавающей запятой или браузером, но его отправили на crbug.com, поэтому меня попросили взглянуть. Проще всего воссоздать его, открыв инструменты разработчика Chrome (F12 или Ctrl+Shift+I) и вставив в консоль разработчика следующий код:

json = JSON.parse(‘{“x”: 2940078943461317278}’); alert(json[‘x’]);

Вставка неизвестного кода в окно консоли — замечательный способ оказаться взломанным, но этот код был настолько прост, я смог понять, что он не вредоносный. В отчёте о баге автор любезно указал свои ожидания и реальные результаты:
Читать дальше →
Total votes 57: ↑56 and ↓1+55
Comments19

Эмбарго на A-GPS или почему смартфоны стали плохо определять местоположение

Reading time5 min
Views140K

Ориентировочно с мая 2022 года в разных темах на форуме 4PDA и других интернет-площадках начали появляться сообщения вида "Что-то смартфон стал плохо ловить спутники GPS и показывать точное местоположение". Многие связывали это с обновлениями прошивок, пробовали откатываться, использовать различные приложения, дергающие различные API Android...

Объединяло все эти жалобы два момента: все смартфоны на чипах Qualcomm Snapdragon различных поколений, и все пользователи были из РФ.

Читать далее
Total votes 291: ↑291 and ↓0+291
Comments341

Приручаем многопоточность в Node.js (часть 5/5: автомасштабирование под нагрузку)

Reading time19 min
Views7K

В прошлых частях цикла мы:

- рассмотрели базовые концепты работы с многопоточностью в JavaScript на примере среды Node.js;

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

- использовали разделяемую память и Atomics-операции как самое быстрое средство обмена большими блоками данных;

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

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

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

Читать далее
Total votes 15: ↑15 and ↓0+15
Comments6

Портирование DOS игр. Tutorial

Level of difficultyMedium
Reading time12 min
Views8.5K

Мотивация к написанию статьи

Уважаемые коллеги, доброго времени суток!

Этой статьей я хочу показать приёмы портирования программ между аппаратно-программными платформами, и привлечь внимание к книге «Секреты программирования игр» Андрэ Ламота, 1995, которую вспомнят добрым словом многие разработчики компьютерных игр, и другим не менее полезным книгам этого автора.

Нам интересны приёмы портации, но мы так же проведём ревью, проверим насколько долговечен код 25-тилетней давности, и насколько сложно его портировать на любые современные платформы.

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

Читать далее
Total votes 40: ↑40 and ↓0+40
Comments9

Изучаем троянскую повестку с мимикрией под XDSpy

Reading time8 min
Views8.3K

В ходе постоянного отслеживания угроз ИБ утром 3 октября в одном из Telegram-чатов мы заметили промелькнувший файл со злободневным названием Povestka_26-09-2022.wsf. Беглый осмотр содержимого привлек наше внимание, и мы решили разобрать его подробней. И, как оказалось, не зря.

Подробности под катом
Total votes 17: ↑17 and ↓0+17
Comments8

Голос атомных ядер: собираем магнитно-резонансный магнитометр

Reading time18 min
Views19K
image

Пора уже поближе познакомиться с квантовой физикой на практике! Сегодня я расскажу вам об истории открытия эффекта ядерного магнитного резонанса, но в отличие от классических учебников полных зубодробительного матана мы обратим наш разрушительный для когеренции взгляд на экспериментальную составляющую. С полученными знаниями вы сможете в духе старого доброго DIY собрать несложный прибор, который позволит вживую послушать сигналы ядер атомов водорода а также измерить величину магнитного поля нашей планеты.
Поехали!
Total votes 150: ↑150 and ↓0+150
Comments68

Что мы используем для анализа Android-приложений

Reading time8 min
Views10K

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

Читать далее
Total votes 26: ↑26 and ↓0+26
Comments4

Почему ваш веб-сайт должен быть меньше 14 КБ

Reading time6 min
Views70K

Чем меньше веб-сайт, тем быстрее он грузится, и это неудивительно.

Удивительно то, что страница на 14 КБ может грузиться гораздо быстрее, чем страница на 15 КБ, даже на 612 мс быстрее, хотя разница между страницами на 15 КБ и 16 КБ минимальна.

Так происходит из-за алгоритма медленного старта TCP. В этой статье я расскажу, что это такое, как оно работает и почему это важно. Но сначала мы вкратце расскажем об основах.
Читать дальше →
Total votes 173: ↑170 and ↓3+167
Comments204

Миллиард операций в базе данных за 0.3 секунды. Не сравнивайте OLTP с OLAP, а QuestDB с PostgreSQL

Reading time8 min
Views11K
Очень часто за свой 15летний опыт работы разработчиком ПО и тимлидом я сталкиваюсь с одним и тем же. Программирование превращается в религию — редко кто пытается внедрять технологии на основе разумного выбора, аргументированно, с учетом ограничений, возможностей переносимости, оценки степени привязки к вендору, реальной цены, перспектив технологии и свободы лицензий. Разработчики ходят на конференции или читают посты — заводятся на хайповость, а их ИТ директоров и менеджеров кормят не только сказками о светлом аджайл будущем на мероприятиях различные визионеры, сейлы и консалтеры. И получается что технологии оказались в проекте не с учетом удобства разработки и внедрения, нефункциональных требований проекта, а потому что это хайпово и google у себя использует, amazon рекомендует(хотя их вакансии говорят что сами не часто используют) или принято высочайшее решение руководства компании внедрять «это».


Но особое веселье — это выбор базы данных. Чем больше объемы хранимой информации, сложнее структуры данных в проекте и их изменения/эволюция, выше требования ко времени отклика или производительности тем дороже стоит ошибка выбора в начале на поздних стадиях проекта.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments7

Яндекс выпускает DivKit — фреймворк для server-driven UI с открытым кодом

Reading time12 min
Views50K
Привет! Сегодня Яндекс выкладывает в опенсорс DivKit — фреймворк для отрисовки интерфейсов из ответа сервера. Серверная вёрстка поможет ускорить разработку: наладить отправку апдейтов от сервера разным версиям приложения, создать прототип или просто написать интерфейс один раз для нескольких платформ.


Фреймворк включает в себя несколько библиотек: клиентскую часть по отрисовке интерфейсов для Android, iOS и веба, а также DSL для формирования ответа сервера на Kotlin, TypeScript и Python. Исходный код опубликован на Гитхабе под лицензией Apache 2.0.

Сейчас DivKit используется в приложении Яндекс, Алисе, Едадиле, Маркете, ТВ и других приложениях. В этом посте я постараюсь вспомнить историю фреймворка, затем мы напишем с его помощью небольшой просмотрщик ленты Хабра, а в конце я покажу ещё несколько простых примеров интеграции.
Читать дальше →
Total votes 124: ↑117 and ↓7+110
Comments49

Модели дженериков и метапрограммирования: Go, Rust, Swift, D и другие

Reading time16 min
Views28K

В некоторых сферах программирования нормально хотеть написать такую структуру данных или алгоритм, которые могут работать с элементами разных типов. Например, список дженериков или алгоритм сортировки, которому нужна только функция сравнения. В разных языках предложены всевозможные способы решения этой задачи: от простого указания программистам на подходящие общие функции (С, Go) до таких мощных систем дженериков, что они стали полными по Тьюрингу (Rust, C++). В этой статье я расскажу о системах дженериков из разных языков и их реализации. Начну с решения задачи в языках без подобной системы (вроде С), а затем покажу, как постепенное добавление расширений приводит к системам из других языков.
Читать дальше →
Total votes 112: ↑110 and ↓2+108
Comments14

Знаете, что больше всего выдает в вас низкоквалифицированного программиста?

Reading time6 min
Views92K

Желание неукоснительно придерживаться ТЗ при недостигнутых задачах бизнеса.

Этот тезис больно ударит по вашему самолюбию, если вы привыкли к уровню обслуживания «нет в ТЗ – идите мимо». Тем не менее, если вы хотя бы чуть-чуть поменяете свое мнение в сторону большей клиентоориентированности, то сможете понять, о чем я.

Знаю-знаю, вы – крутой программист и тут же возразите мне – а что же, я должен предвидеть все, что нужно бизнесу? Должен догадаться, чего хочет заказчик? Бесконечно реализовывать его странные хотелки?

А имеете ли вы моральное право задавать такие вопросы? Проверьте, что из этого списка вы сделали для этого:

Читать далее
Total votes 118: ↑80 and ↓38+42
Comments207

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

Reading time3 min
Views46K
В 2013 году я начал писать конвертер mammoth.js для экспорта вордовских документов в HTML. Это небольшая библиотека на 3000 строк кода. И хотя в ней ничего выдающегося, меня не покидает ощущение, что простенький проект важнее и принёс больше пользы, чем десять лет работы в индустрии программного обеспечения.

Первую версию я написал в пятницу днём на работе, когда обратил внимание, как много времени коллеги тратят на копипаст текста из Word в CMS и последующее форматирование. Такие однотипные действия еженедельно забирают часы рабочего времени. Я написал утилиту для автоматизации этого процесса, с учётом нашей стройной рабочей системы конвертации стилей Word в нужные классы CSS вместо мешанины HTML-тегов, которые выдаёт нативный экспорт Word. Программка получилась не идеальной — коллегам всё равно приходилось что-то поправлять, но ускорила рутинные операции примерно на порядок.
Читать дальше →
Total votes 119: ↑115 and ↓4+111
Comments66

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity