Как стать автором
Обновить
1
0
Ghost_nsk @Ghost_nsk

Пользователь

Отправить сообщение

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

Время на прочтение16 мин
Количество просмотров14K

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

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

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

Читать далее
Всего голосов 92: ↑90 и ↓2+88
Комментарии32

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

Время на прочтение9 мин
Количество просмотров27K

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

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

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

Читать далее
Всего голосов 25: ↑25 и ↓0+25
Комментарии18

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

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров11K


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

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

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

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров1.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%.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии7

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

Время на прочтение2 мин
Количество просмотров14K

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

Читать далее
Всего голосов 41: ↑40 и ↓1+39
Комментарии35

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

Время на прочтение15 мин
Количество просмотров23K

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

Читать далее
Всего голосов 37: ↑34 и ↓3+31
Комментарии17

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

Время на прочтение12 мин
Количество просмотров15K

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

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

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


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

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

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

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

Время на прочтение5 мин
Количество просмотров139K

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

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

Читать далее
Всего голосов 291: ↑291 и ↓0+291
Комментарии341

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

Время на прочтение19 мин
Количество просмотров7K

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

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

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

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

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

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

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

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии6

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

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров8.5K

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

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

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

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

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

Читать далее
Всего голосов 40: ↑40 и ↓0+40
Комментарии9

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

Время на прочтение8 мин
Количество просмотров8.3K

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

Подробности под катом
Всего голосов 17: ↑17 и ↓0+17
Комментарии8

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

Время на прочтение18 мин
Количество просмотров19K
image

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

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

Время на прочтение8 мин
Количество просмотров10K

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

Читать далее
Всего голосов 26: ↑26 и ↓0+26
Комментарии4

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

Время на прочтение6 мин
Количество просмотров70K

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

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

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

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

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


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

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

Время на прочтение12 мин
Количество просмотров49K
Привет! Сегодня Яндекс выкладывает в опенсорс DivKit — фреймворк для отрисовки интерфейсов из ответа сервера. Серверная вёрстка поможет ускорить разработку: наладить отправку апдейтов от сервера разным версиям приложения, создать прототип или просто написать интерфейс один раз для нескольких платформ.


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

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

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

Время на прочтение16 мин
Количество просмотров28K

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

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

Время на прочтение6 мин
Количество просмотров92K

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

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

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

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

Читать далее
Всего голосов 118: ↑80 и ↓38+42
Комментарии207

arr[-1] или самые редкие конструкции в С

Время на прочтение13 мин
Количество просмотров21K

Топ 22 самых редких конструкций языка С. От макросов с аргументами до каламбура типов - найдётся применение каждой. tmpfile() вступает в силу!

Читать далее
Всего голосов 54: ↑37 и ↓17+20
Комментарии169

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

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

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

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Дата рождения
Зарегистрирован
Активность