Обновить
81
0
Виктор Супрун@POPSuL

Разработчик

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

Понимание алгоритма БПФ

Время на прочтение7 мин
Охват и читатели155K
Здравствуйте, друзья. Уже завтра стартует курс «Алгоритмы для разработчиков», а у нас остался один неопубликованный перевод. Собственно исправляемся и делимся с вами материалом. Поехали.

Быстрое преобразование Фурье (БПФ — англ. FFT) является одним из важнейших алгоритмов обработки сигналов и анализа данных. Я пользовался им годами, не имея формальных знаний в области компьютерных наук. Но на этой неделе мне пришло в голову, что я никогда не задавался вопросом, как БПФ так быстро вычисляет дискретное преобразование Фурье. Я стряхнул пыль со старой книги по алгоритмам, открыл ее, и с удовольствием прочитал об обманчиво простой вычислительной уловке, которую Дж. В. Кули и Джон Тьюки описали в своей классической работе 1965 года, посвященной этой теме.



Цель этого поста — окунуться в алгоритм БПФ Кули-Тьюки, объясняя симметрии, которые к нему приводят, и показать несколько простых реализаций на Python, применяющих теорию на практике. Я надеюсь, что это исследование даст специалистам по анализу данных, таким как я, более полную картину того, что происходит под капотом используемых нами алгоритмов.
Читать дальше →

5 способов деплоя PHP-кода в условиях хайлоада

Время на прочтение14 мин
Охват и читатели23K
Если бы хайлоад преподавали в школе, в учебнике по этому предмету была бы такая задача. «У соцсети N есть 2 000 серверов, на которых 150 000 файлов объемом по 900 Мб PHP-кода и стейджинг-кластер на 50 машин. На серверы код деплоится 2 раза в день, на стейджинг-кластере код обновляется раз в несколько минут, а еще дополнительно есть „хотфиксы“ — небольшие наборы файлов, которые выкладываются вне очереди на все или на выделенную часть серверов, не дожидаясь полной выкладки. Вопрос: считаются ли такие условия хайлоадом и как в них деплоить? Напишите не менее 5 вариантов деплоя». Про задачник по хайлоаду можем только мечтать, но уже сейчас мы знаем, что Юрий Насретдинов (youROCK) точно бы решил эту задачу и получил «пятерку».


На простом решении Юрий не остановился, а дополнительно провел доклад, в котором раскрыл тему понятия «деплой кода», рассказал про классические и альтернативные решения масштабного деплоя кода на PHP, проанализировал их производительность и презентовал самописную систему деплоя MDK.

Как развлечь себя с помощью vk api

Время на прочтение4 мин
Охват и читатели51K
В какой-то момент моей жизни я понял, что для счастья мне нужно создать 10 страниц-копий самого себя во Вконтакте и добавиться одновременно всеми в друзья к людям из френдлиста моей основной страницы. Для подробностей реализации идеи — прошу под кат.

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

Нужно ли чистить строки в JavaScript?

Время на прочтение6 мин
Охват и читатели80K
Что? Строки могут быть «грязными»?

Да, могут.

//.....Какой-то код
console.log(typeof str); // string
console.log(str.length); // 15
console.log(str); // "ччччччччччччччч"

Вы думаете, в этом примере строка занимает 30 байт?

А вот и нет! Она занимает 30 мегабайт!
Читать дальше →

Умные часы с Бейсиком на физическом 6502

Время на прочтение4 мин
Охват и читатели18K

Процессор 6502 существует более 40 лет и до сих пор используется в ряде встроенных систем. Компания WDC продолжает выпускать 65C02 и периферийные микросхемы серии 65Cxx. Автор обнаружил, что теперь они доступны и в корпусах PLCC и QFP, но эти варианты микросхем используются редко. Микросхемы же в DIP-корпусах более недоступны, поскольку спрос со стороны одних лишь самодельщиков слишком мал. Автор решил сделать самый маленький одноплатник на 6502, какой только сможет. Не исключено, что самый маленький из известных самодельных одноплатников на этом процессоре (несамодельные бывают и меньше, например, Тамагочи). В результате получилось устройство, к которому можно при желании разработать наручный корпус с ремешком. Дисплей взят от Nokia 5110, написана оболочка с красивым интерфейсом, и получились, возможно, единственные смарт-часы на 6502.

В часах установлены: процессор 65C02 с тактовой частотой в 8 МГц, микросхема 65C22, управляющая ЖКИ и опрашивающая кнопки на плате и внешнюю клавиатуру, дисплей от Nokia 5110 (84х48 пикселей), 32 кБ статического ОЗУ, 16 кБ ПЗУ в адресном пространстве. Напряжение питания — 3,3 В.

И самое главное: в качестве док-станции к разъёму на плате можно подключать матрицу клавиатуры от Commodore 64, получая что-то похожее на Seiko UC-2000 (обзор на Хабре):

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

Самый худший UI управления громкостью звука

Время на прочтение1 мин
Охват и читатели217K
Группа разработчиков и дизайнеров решила начать флешмоб на реддите, чтобы выяснить у кого получится сделать самый худший интерфейс управления звуком в мире.



Осторожно! Много картинок и трафика!


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

Виртуальные файловые системы в Linux: зачем они нужны и как они работают? Часть 2

Время на прочтение6 мин
Охват и читатели15K
Всем привет, делимся с вами второй частью публикации «Виртуальные файловые системы в Linux: зачем они нужны и как они работают?» Первую часть можно прочитать тут. Напомним, данная серия публикаций приурочена к запуску нового потока по курсу «Администратор Linux», который стартует уже совсем скоро.

Как наблюдать за VFS с помощью инструментов eBPF и bcc

Самый простой способ понять, как ядро оперирует файлами sysfs – это посмотреть за этим на практике, а самый простой способ понаблюдать за ARM64 – это использовать eBPF. eBPF (сокращение от Berkeley Packet Filter) состоит из виртуальной машины, запущенной в ядре, которую привилегированные пользователи могут запрашивать (query) из командной строки. Исходники ядра сообщают читателю, что может сделать ядро; запуск инструментов eBPF в загруженной системе показывает, что на самом деле делает ядро.

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

Виртуальные файловые системы в Linux: зачем они нужны и как они работают? Часть 1

Время на прочтение6 мин
Охват и читатели59K
Всем привет! Мы продолжаем запуски новых потоков по уже полюбившимся вам курсам и сейчас спешим сообщить о том, что у нас стартует новый набор по курсу «Администратор Linux», который запустится в конце апреля. К этому событию и будет приурочена новая публикация. С оригиналом материала можно ознакомиться тут.

Виртуальные файловые системы выполняют роль некой волшебной абстракции, которая позволяет философии Linux говорить, что «всё является файлом».



Что такое файловая система? Опираясь на слова одного из первых контрибьюторов и авторов Linux Робера Лава, «Файловая система – это иерархическое хранилище данных, собранное в соответствии с определенной структурой». Как бы то ни было, это определение в равной мере хорошо подходит для VFAT (Virtual File Allocation Table), Git и Cassandra (база данных NoSQL). Так что именно определяет такое понятие, как «файловая система»?
Читать дальше →

Эксперт: обновление софта не поможет браку в планере «Боинга»

Время на прочтение5 мин
Охват и читатели117K

Чтобы разместить на самолёте более новые и крупные двигатели, в Боинг решили подвинуть их вперёд. Это изменило и аэродинамику самолёта. Для компенсации этого в Боинг добавили один датчик и обновление для ПО: MCAS.

Сага с Боингом модели 737 MAX служит достойным для изучения примером как инженерной некомпетентности, так и инженерной этики – точнее, её отсутствия.

Появились новые детали того, какую конкурентную нагрузку испытывали инженеры Боинг 737 из-за того, что производитель пытался воспрепятствовать уходу крупнейших авиакомпаний США к своему конкуренту Airbus. В европейском консорциуме конкуренцию флагманскому продукту Боинга составляла новая модель от Airbus, A320neo. Американские авиаперевозчики, например, American Airlines, готовились переходить на модель от Airbus с большей дальностью полёта.
Читать дальше →

Как мы сделали PHP 7 в два раза быстрее PHP 5. Часть 2: оптимизация байт-кода в PHP 7.1

Время на прочтение7 мин
Охват и читатели14K
В первой части рассказа по мотивам выступления Дмитрия Стогова из Zend Technologies на HighLoad++ мы разбирались во внутреннем устройстве PHP. Детально и из первых уст узнали, какие изменениях в базовых структурах данных позволили ускорить PHP 7 более чем в два раза. На этом можно было бы и остановиться, но уже в версии 7.1 разработчики пошли существенно дальше, так как идей по оптимизации у них было еще много.

Накопленный опыт работы над JIT до семёрки теперь можно интерпретировать, смотря на результаты в 7.0 без JIT и на результаты HHVM с JIT. В PHP 7.1 было решено c JIT не работать, а опять обратиться к интерпретатору. Если раньше оптимизации касались интрепретатора, то в этой статье посмотрим на оптимизацию байт-кода, с использованием вывода типов, который реализовали для нашего JIT.



Под катом Дмитрий Стогов покажет, как это все работает, на простом примере.
Читать дальше →

На что способен формат Mini PCI-e

Время на прочтение2 мин
Охват и читатели198K


Мне очень нравится формат Mini PCI-e. Это крохотный форм-фактор, служащий базовым для mSATA и M.2, но в основном он используется для подключения карт WiFi и Bluetooth в ноутбуках или маленьких ПК. Но по сути это просто PCI-e, поэтому с его помощью можно сделать гораздо больше.

Вот, к примеру, обычная беспроводная карта, используемая с его помощью:

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

Строительство линии связи Сахалин – Курилы. Экскурсия на Segero — судно-кабелеукладчик

Время на прочтение11 мин
Охват и читатели13K
Возрадуемся, товарищи!

10 лет назад мы радовались тому, что оптические линии связи пересекли Татарский пролив, три года назад мы восхищались тем что закончили прокладку оптики на Магадан, а пару лет назад на Камчатку.

И вот наступил черед Южных Курил.

Этой осенью, оптика пришла на три Курильских острова. Итуруп, Кунашир и Шикотан.

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

Мне удалось по приглашению Ростелекома посетить корабль, который вел работы по укладке кабеля.

Заказчиком выступило государство в лице Ростелекома, исполнителем как и в прошлый раз стала компания Хуавэй.

А вот судно кабелеукладчик было уже другое.

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

Корейский Segero 1998 года выпуска.



Спецификация судна на сайте.

Кому интересны другие корабли-кабелеукладчики — вот вам для любования прекрасная подборка.

Разбор адресов «нечёткими регулярными выражениями»

Время на прочтение7 мин
Охват и читатели32K
Краткое содержание: о библиотеке написанной мною для сопоставления с заданным словарём выражений на естественном языке — в частности, городских адресов.

На деревню дедушке


Сколько существует способов написать адрес — в смысле, географический?

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

Возьмём простой пример:
улица Цветочная — может быть обозначена с сокращением, как «ул. Цветочная» и «Цветочная ул.» — кроме того «ул.» можно пропустить (если Цветочной площади в городе нет), а «Цветочная» можно написать с ошибками «Цвяточная» или «Цвиточная», равно как и «Цветошная» — всё это будет выглядеть недурно!

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

Другие интересные примеры связаны с именами «ул. Матроса Железняка» (или просто «Железняка»?), «пр. Мориса Тореза» (или «Мариса Тереза»?) а также совсем эпические случаи «ул. 3-я линия второй половины», «дорога на деревню Рыбацкое», «ул. Левый берег реки Ижоры» — прошу простить если и сам я их не осилил написать правильно по памяти.
Читать дальше →

PHP-Дайджест № 149 (28 января – 11 февраля 2019)

Время на прочтение4 мин
Охват и читатели15K

Свежая подборка со ссылками на новости и материалы. В выпуске: PHPUnit 8 и другие релизы, PSR-14 и PSR-12 в стадии ревью, JIT для PHP, стартовала работа над PHP 8, пачка свежих RFC из PHP Internals, порция полезных инструментов, и многое другое.

Приятного чтения!


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

Julia. Генераторы отчётов и документации

Время на прочтение13 мин
Охват и читатели12K


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


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

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

UTF-8 кодировка в названиях и паролях Wi-Fi (Emoji)

Время на прочтение4 мин
Охват и читатели52K
В 2012 году появилась возможность использовать в названии сети Wi-Fi символы UTF-8. Первое, что приходит на ум — выделиться из серой массы и использовать в названии сети смайлики Emoji. А еще, можно сделать Emoji пароль, тогда друзьям можно смело сообщать: «Подключись к Wi-Fi сети бесплатный сыр, пароль: кружка пива и печенька».

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

Работа с часовыми поясами в JavaScript

Время на прочтение16 мин
Охват и читатели106K


Недавно я работал над задачей добавления часовых поясов в JS-библиотеку календаря, которую ведёт моя команда. Мне было хорошо известно о никудышной поддержке часовых поясов в JavaScript, но я надеялся, что абстрагирование имеющихся объектов данных позволит легко решить большинство трудностей.

Однако мои мечты пошли прахом. Когда я углубился в задачу, то понял, что в этом языке действительно трудно работать с часовыми поясами. Реализовать что-то сложнее простого форматирования отображения времени и вычисления даты с помощью комплексных операций (функции календаря) было чрезвычайно трудным делом. Я получил ценный опыт решения этой проблемы, и это повлекло за собой новые затруднения.

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

Изучая go: пишем p2p мессенджер со сквозным шифрованием

Время на прочтение9 мин
Охват и читатели51K

Yet another P2P Messenger


Читать отзывы и документацию о языке не достаточно, чтобы научиться на нем писать более менее полезные приложения.


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


Пример UI чата на ReactJs


Статья ориентирована на новичков интересующихся языком go и пиринговыми сетями.
И для профессионалов, умеющих предлагать разумные идеи или конструктивно критиковать.

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

Делаем рейтинг городов России по качеству дорог

Время на прочтение9 мин
Охват и читатели20K


В очередной раз проезжая на машине по родному городу и объезжая очередную яму я подумал: а везде ли в нашей стране такие «хорошие» дороги и решил — надо объективно оценить ситуацию с качеством дорог в нашей стране.
Читать дальше →

Сравниваем PHP FPM, PHP PPM, Nginx Unit, React PHP и RoadRunner

Время на прочтение10 мин
Охват и читатели54K


Тестирование производилось с помощью Yandex Tank.
В качестве приложения использовались Symfony 4 и PHP 7.2.
Целью являлось сравнение характеристик сервисов при разных нагрузках и нахождение оптимального варианта.
Для удобства все собрано в docker-контейнеры и поднимается с помощью docker-compose.
Под катом много таблиц и графиков.
Читать дальше →

Информация

В рейтинге
6 708-й
Откуда
Южно-Сахалинск, Сахалин, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, DevOps-инженер
Старший
От 3 500 $
Git
PHP
Nginx
Golang
Linux