Обновить
42
0
Валерий Дмитриев@rotor

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

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

Стратификация, или как научиться доверять данным

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

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




Меж тем, именно левый график получен при помощи «честного» генератора случайных чисел. Правый график тоже содержит сплошь случайные точки; но эти точки сгенерированы так, чтобы все маленькие квадраты содержали равное количество точек.


Стратификация — метод выбора подмножества объектов из генеральной совокупности, разбитой на подмножества (страты). При стратификации объекты выбираются таким образом, чтобы итоговая выборка сохраняла соотношения размеров страт (либо контролируемо нарушала эти соотношения, см. пункт 3). Скажем, в рассмотренном примере генеральная совокупность — точки внутри единичного квадрата; стратами являются наборы точек внутри квадратов меньшего размера.


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

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

Оценка качества кластеризации: свойства, метрики, код на GitHub

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

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


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


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



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

Что внутри у .wasm-файла? Знакомство с wasm-decompile

Время на прочтение7 мин
Охват и читатели13K
В нашем распоряжении имеется множество компиляторов и других инструментов, позволяющих создавать .wasm-файлы и работать с ними. Количество этих инструментов постоянно растёт. Иногда нужно заглянуть в .wasm-файл и разобраться с тем, что у него внутри. Может быть, вы — разработчик одного из Wasm-инструментов, или, возможно, вы — программист, который пишет код, рассчитанный на преобразование в Wasm, и интересующийся тем, как выглядит то, во что превратится его код. Такой интерес может быть вызван, например, соображениями производительности.



Проблема заключается в том, что в .wasm-файлах содержится довольно-таки низкоуровневый код, который сильно похож на настоящий ассемблерный код. В частности, в отличие, например, от JVM, все структуры данных компилируются в наборы операций load/store, а не в нечто такое, в чём имеются понятные имена классов и полей. Компиляторы, вроде LLVM, могут так изменить входной код, что то, что у них получается, и близко на него не похоже. 

Как быть тому, кто хочет, взяв .wasm-файл, узнать о том, что в нём происходит?
Читать дальше →

Сервисы на базе нейросетей для дизайнеров

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

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

Обнаружение аномалий в данных сетевого мониторинга методами статистики

Время на прочтение9 мин
Охват и читатели34K
Когда наблюдаемых метрик становится слишком много, отслеживание всех графиков самостоятельно становится невозможным. Обычно в этом случае для менее значимых метрик используют проверки на достижение критичных значений. Но даже если значения подобраны хорошо, часть проблем остается незамеченной. Какие это проблемы и как их обнаруживать — под катом.


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

Как стартапы в США умирают из-за коронавируса

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


Десятки стартапов увольняют тысячи сотрудников, урезают затраты и даже полностью меняют бизнес-модели, пытаясь выжить в мире коронавируса. Кремниевая долина проходит через очень серьезные метаморфозы.
Читать дальше →

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

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

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

Яблоки и апельсины


Бабуля Смит и Флорида — совладелицы овощного магазина. Чтобы добиться максимальной эффективности, каждая заботится о своих полках в магазине. Например, бабуля Смит гордится своим выбором яблок, а Флорида часами раскладывает апельсины, добиваясь их идеального расположения. Обе настолько уверены в себе, что согласились на сделку: прибыль от продажи яблок пойдет на долю бабули Смит, прибыль от продажи апельсинов — на долю Флориды.
Читать дальше →

С++, метапрограммирование и регистры микроконтроллера

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

Привет, Хабр!


Вот уже несколько лет все свои проекты для линейки микроконтроллеров stm32 я делаю на C++.


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


Во избежание лишних вопросов: я использую связку QtCreator+gcc+gdb+openocd. Как с ней работать, описано многократно, поэтому не буду на этом останавливаться, а вот о своих подходах к работе с микроконтроллерами расскажу подробнее.


На нижнем уровне проекта, как правило, находятся драйвера периферии. С них и начнём.

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

Автоматные рекурсивные вычисления

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

1. Введение


Влияние подпрограмм (англ. subroutine) на программирование без преувеличения огромно. Введенные на заре программирования они не теряют своей актуальности и поныне. Без них практическое программирование представить просто невозможно. Хотя с формальной точки зрения они не так уж и нужны, т.к. чистую теорию интересуют больше свойства алгоритма, чем его размеры.

В теории автоматов понятие вложенных автоматов, на базе которых строилась бы практика автоматных подпрограмм (АПП), обсуждается редко. Подобная (вложенная) иерархическая организация автоматов, если и рассматривается, то весьма поверхностно. Одной из причин подобного отношения может служить сложность реализации вложенной иерархии на аппаратном уровне [1, 2].

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

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

13 инструментов для обработки текста в командной оболочке

Время на прочтение17 мин
Охват и читатели140K
Здесь представлен фрагмент будущей книги «Основные инструменты и практики для начинающего разработчика программного обеспечения» Бальтазара Рубероля и Этьена Броду. Книга должна помочь образованию подрастающего поколения разработчиков. Она охватит такие темы, как освоение консоли, настройка и эффективная работа в командной оболочке, управление версиями кода с помощью git, основы SQL, инструменты вроде Make, jq и регулярные выражения, основы сетевого взаимодействия, а также лучшие практики разработки программного обеспечения и совместной работы. В настоящее время авторы упорно работают над этим проектом и приглашают всех поучаствовать в списке рассылки.

Содержание


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

Безопасность через ограничение пользователей или как создать уязвимость

Время на прочтение12 мин
Охват и читатели6.9K
В 2019 году выявили уязвимость CPDoS Cache Poisoned Denial of Service) на сети CDN, которая позволяет отравить HTTP кэш CDN провайдера и вызвать отказ в обслуживании. Много хайпа уязвимость пока не собрала, так как не была замечена в реальных атаках. Но об одном из способов отравления кэша хочется поговорить отдельно. HTTP Method Override.


Если другие варианты эксплуатации уязвимости так или иначе опираются на баги или особенности модификации запросов посредником, то в основе варианта Method Override лежит одноименная тактика, которая не является частью стандарта HTTP, несет вместе с собой дополнительные проблемы, и которая возникла и распространилась из-за небрежного отношения к безопасности. Вот ее мы и рассмотрим.
Читать дальше →

Общий финансовый анализ на Python (Часть 1)

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

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

Подробно о корутинах в C++

Время на прочтение10 мин
Охват и читатели43K
Здравствуйте, коллеги.

В рамках проработки темы С++20 нам в свое время попалась уже довольно старенькая (сентябрь 2018) статья из хаброблога «Яндекса», которая называется "Готовимся к С++20. Coroutines TS на реальном примере". Заканчивается она следующей весьма выразительной голосовалкой:



«Почему бы и нет», — решили мы и перевели статью Давида Пиларски (Dawid Pilarski) под названием «Coroutines introduction». Статья вышла чуть более года назад, но, надеемся, все равно покажется вам очень интересной.
Читать дальше →

Законы программирования

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

Законы, теории, принципы и закономерности, полезные для разработчиков


Введение


Перевод репозитория github.com/dwmkerr/hacker-laws

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

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

Законы


Закон Амдала


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

Помоги компилятору помочь тебе

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

Предисловие


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


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


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

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

Расстановка точек над датчиками газа серии MQ – глубокое понимание даташита и настройка

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

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

Перегрузка в C++. Часть I. Перегрузка функций и шаблонов

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

C++ сложный и интересный язык, совершенствоваться в нем можно чуть ли не всю жизнь. В какой-то момент мне захотелось изучать его следующим образом: взять какой-то аспект языка, возможно довольно узкий, и разобраться с ним максимально глубоко и подробно. Такой подход в значительной степени был стимулирован замечательными книгами Скотта Мейерса, Герба Саттера и Стефана Дьюхэрста. Когда накопилось определенное количество материалов, решил познакомить с ними Хабровчан. Так появилась эта серия, которую я назвал «C++, копаем вглубь». Серия помечена как Tutorial, но ориентирована она все-таки не на начинающих, а скорее на intermediate уровень. Первая тема — это перегрузка в C++. Тема оказалась очень обширной и получилось три статьи. Первая статья посвящена перегрузке функций и шаблонов, вторая перегрузке операторов и третья перегрузке операторов new/delete. Итак, начнем копать.


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

Аналог ambilight из LED ленты WS2812, arduino и киндер-сюрприза

Время на прочтение9 мин
Охват и читатели202K
Ambilight — разработанная Philips технология боковой подсветки пространства за телеящиком, которая, по мнению создателей, помогает зрителю еще больше погружаться в происходящее на экране.

В сети можно найти довольно много упоминаний о DIY Ambilight-like проектах, известны также коммерческие реализации подобного функционала в продуктах сторонних производителей / opensource-проектах, например, Lightpack.

Около года назад я практически случайно приобрел LED ленту на базе управляемых RGB диодов WS2812, рассчитывая задействовать её в каком-нибудь Arduino-проекте. Нехватка времени и противоречивая информация о возможности совместной работы с AVR контроллерами (сиречь Arduino) привела к тому, что реализация отодвинулась почти на год. Каково же было мое удивление, когда весь мини-проект по созданию Ambilight и организации его совместной работы с XBMC занял всего два вечера, т.е. 5-6 часов, включая поиск рабочего решения, написание скетча для arduino и конфигурационного скрипта к boblight, отладку их совместной работы, резку, пайку и монтаж ленты, а также прокладку 8м кабеля от arduino к телевизору.
Цель данного топика — поделиться с сообществом опытом и удивлением по поводу того, насколько все было просто, и задать направление желающим повторить это у себя дома. Мне кажется, что при наличии необходимых компонентов, повторение моего опыта «на столе» займет не более получаса.
А причем здесь киндер-сюрприз?

Умная дача #1. Модули Sonoff от ITEAD

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


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

С тех пор утекло много воды. Разработка диммера так и не дошла до финала. Не получилось устранить все проблемы с питанием — wi-fi модуль довольно прожорлив и недостаточно стабильно работает в нашей схеме включения. Пока разработка вяло текла, рынок заполнился светодиодными лампами, не диммируемыми в своем большинстве. Изменилось моё понимание умного дома. Вроде бы диммер в том его формате, как мной задумывался, не очень-то и нужен. Ибо «умный дом» должен работать сам, без выключателей. Изменился курс доллара, что осложнило разработку любого электронного проекта, а разработку диммера осложнило значительно. Устройство у него не простое, себестоимость высокая и зависит она от доллара практически напрямую. Поэтому проект диммера пока на паузе. До лучших времен. Или насовсем.

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

Дж. Х. Рейнвотер «Как пасти котов»: не надо так, или негативные паттерны в руководстве

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


Мы подходим к заключительным частям цикла статей по книге Рейнвотера для разработчиков, мутирующих в руководителей отдела. До сих пор речь шла о том, как все должно быть в идеальном мире; теперь пришло время обратить взгляд на то, как обстоят дела в прозаической реальности. Рейнвотер посвящает целую главу разбору порочных, разрушительных стратегий, которые лидеры-новички часто выбирают по наитию – почему они появляются, чем чреваты и, как собственно, действовать, если уже встал на кривую дорожку.
Читать дальше →

Информация

В рейтинге
6 708-й
Откуда
Уфа, Башкортостан(Башкирия), Россия
Дата рождения
Зарегистрирован
Активность