Pull to refresh
-2
0
Bombus @Bombus

User

Send message

Искусство ETL. Пишем собственный движок SQL на Spark [часть 6]

Level of difficultyMedium
Reading time23 min
Views1.3K

НЬЮ!


В предыдущих сериях (FAQ 1 2 3 4 5 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных.

В данной части поговорим о том, как добавить в выражения SQL поддержку функций. Например,


SELECT
    MAX(score1, score2, score3, score4, score5) AS max_score,
    MIN(score1, score2, score3, score4, score5) AS min_score,
    MEDIAN(score1, score2, score3, score4, score5) AS median_score,
    score1 + score2 + score3 + score4 + score5 AS score_sum
FROM raw_scores INTO final_scores
WHERE ABS(score1 + score2 + score3 + score4 + score5) > $score_margin;

— тут у нас функции MAX, MIN и MEDIAN принимают любое количество аргументов типа Double и возвращают Double, а ABS только один такой аргумент.


Вообще, кроме общей математики, в любом уважающем себя диалекте SQL как минимум должны быть функции для манипуляций с датой/временем, работы со строками и массивами. Их мы тоже обязательно добавим. В classpath, чтобы движок мог их оттуда подгружать. До кучи, ещё и операторы типа >= или LIKE, которые у нас уже были реализованы, но хардкодом, сделаем такими же подключаемыми.


Предупреждение о сложности материала

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

Читать дальше →
Total votes 2: ↑2 and ↓0+2
Comments5

Организация кода это важно и легко на основе Layer Architecture

Level of difficultyEasy
Reading time6 min
Views3.8K

Всем привет! Думаю многие читали кучу книжек по поводу Hexagonal, Onion, Clean, Layer Architecture и у вас могли остаться спорные вопросы как в сложности понимания материала, так и в реализации данных подходов в ваших проектах. Сегодня я хочу затронуть тему “Организации кода” и показать насколько это важно и легко одновременно на примере Layer Architecture (Слоистая архитектура).

Читать далее
Total votes 6: ↑4 and ↓2+2
Comments7

Простейшая нейронная сеть, мой опыт и выводы

Level of difficultyEasy
Reading time6 min
Views6.2K

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

Читать далее
Total votes 11: ↑10.5 and ↓0.5+10
Comments14

Безопасность в Docker: от правильной настройки хоста до демона

Reading time12 min
Views9.4K

Привет, Хабр! Меня зовут Эллада, я специалист по информационной безопасности в Selectel. Помогаю клиентам обеспечивать защиту инфраструктуры и участвую в разработке новых решений компании в сфере ИБ. И сейчас я начала больше погружаться в тему разработки и изучать лучшие практики по обеспечению безопасности приложений.

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

Сегодня сложно представить современное приложение без технологий контейнеризации. Поэтому я решила подробно изучить вопросы безопасности в этом направлении и собрала рекомендации, как лучше подойти к работе с Docker-платформой. Подробности под катом!
Читать дальше →
Total votes 48: ↑51.5 and ↓-3.5+55
Comments2

Локальный веб-сервер для разработки с помощью Docker

Level of difficultyMedium
Reading time10 min
Views8.9K


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

Если это Senior Full Stack разработчик с опытом администрирования Linux, то установка и настройка конфигов Nginx, PHP-fpm, MariaDB для него не будут проблемой (а может и с Docker даже знаком?). 

Разработчик Middle уровня (особенно без опыта с backend) возможно пользуется одним из готовых решений под Windows/MacOS.

Junior верстальщик, в свою очередь, раньше не запускал приложение работающее на PHP на своем компьютере вообще, и вот-вот попробует в первый раз.

Было такое? У меня было. Случалось даже поздним вечером помогать новичку с установкой или решением проблемы, возникшей в ходе установки.

А потом, еще через некоторое время, из-за разных конфигов или окружения возникали и новые проблемы из разряда “на моем компьютере же все работает”, которые в том числе могут появиться из-за разных настроек готовых сборок.

Читать далее
Total votes 11: ↑9.5 and ↓1.5+8
Comments9

Firefox остаётся самым быстрым браузером

Level of difficultyMedium
Reading time6 min
Views34K


Почти год назад случилось знаковое событие: впервые в истории Firefox обошёл Chrome по скорости работы.

Многие помнят, что с момента выхода в 2008 году Chrome отличался высокой производительностью, а Firefox на его фоне выглядел тяжеловесным и страдал от утечек памяти. Но постепенно Mozilla исправила ситуацию, так что в 2023 году браузеры наконец поменялись местами.

Единственное сомнение может вызвать объективность тех тестов, всё-таки Speedometer 2.0 — довольно старый набор 2018 года. Может, он не соответствует современному разжиревшему вебу? Что ж, теперь увидела свет новая версия Speedometer 3.0, поэтому взглянем на более достоверную и объективную картину: какой браузер быстрее на самом деле?
Читать дальше →
Total votes 89: ↑96 and ↓-7+103
Comments121

CPU планировщики в Linux

Level of difficultyMedium
Reading time9 min
Views7.1K

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

Читать далее
Total votes 17: ↑19 and ↓-2+21
Comments0

Как я делаю и продаю камни на маркетплейсах на 1,35 млн в месяц

Level of difficultyEasy
Reading time7 min
Views163K

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

В 2016-м году я встретил женщину. И вон он я с ипотекой, кредитом на бытовую технику и зарплатой в 25 000 ₽. Чтобы как-то сводить концы с концами я, версии 2017-го, решил взять ещё один кредит на бизнес по производству декоративных камней. Их используют для внутренней отделки помещений.

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

Читать далее
Total votes 143: ↑123.5 and ↓19.5+104
Comments279

Способы обхода GIL для повышения производительности

Level of difficultyEasy
Reading time5 min
Views6K

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

Global Interpreter Lock в Питоне предотвращающает одновременное выполнение нескольких потоков в одном процессе интерпретатора Python. Т.е даже на многоядерном процессоре многопоточные Python‑приложения будут выполняться только в одном потоке за раз. Это было введено для некой потокобезопасности при работе с объектами Python, упрощая тем самым разработку на уровне интерпретатора.

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

В этой статье рассмотрим способы обхода GIL и первый способ — использование многопроцессности вместо многопоточности.

Читать далее
Total votes 20: ↑13 and ↓7+6
Comments4

Tcpdump на разных уровнях

Reading time4 min
Views8.8K

Утилита Tcpdump знакома любому сетевому администратору, с ее помощью мы собираем трафик для последующего анализа. Типичная история – собираем траффик, приходящий на нужный интерфейс и затем уже анализируем его Wireshark. Подход практичный, ведь Wireshark Действительно очень мощный и полезный инструмент и о нем мы напишем еще не одну статью, но сегодня речь пойдет про Tcpdump. Не секрет, что утилита Tcpdump не интерпретирует протоколы прикладного уровня, ограничиваясь работой с транспортным уровнем. Однако, в этой статье мы рассмотрим различные варианты использования утилиты Tcpdump для более глубокой фильтрации трафика.

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

Читать далее
Total votes 20: ↑19 and ↓1+18
Comments4

Решение систем линейных уравнений с помощью Python

Reading time7 min
Views6.8K

Как‑то я наткнулась на статью, где говорилось о SymPy, а именно о возможности решения систем уравнений с ее помощью. Если кратко, то это бесплатная библиотека для символьных вычислений на языке Python. В символьных вычислениях компьютер работает с уравнениями и выражениями как с последовательностью символов, тогда как в численных оперирует приближёнными числовыми значениями.

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

Приятного прочтения )

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

Как я стал специалистом по машинному обучению. Open AI и Dota 2

Level of difficultyEasy
Reading time7 min
Views7.7K

Грег Брокман - американский предприниматель, инвестор и разработчик ПО, один из основателей и президент компании OpenAI. Начал свою карьеру в компании Stripe в 2010 году и стал ее CTO в 2013 году. Покинул Stripe в 2015 году, чтобы стать соучредителем OpenAI, где он также взял на себя роль технического директора.

Первые три года существования OpenAI я мечтал стать экспертом в области машинного обучения, но мало продвигался к этой цели. За последние девять месяцев я наконец-то перешел к практической работе в области машинного обучения. Это было трудно, но не невозможно, и я думаю, что большинство людей, которые хорошо программируют и знают (или готовы изучать) математику, тоже могут это сделать. Существует множество онлайн-курсов для самостоятельного изучения технической стороны (тык, тык, тык и тык), и то, что оказалось моим самым большим препятствием, было ментальным барьером - смириться с тем, что я снова новичок.

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments4

9 полезных крейтов в Rust

Level of difficultyEasy
Reading time11 min
Views5.7K

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

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

Крейты в Rust – это пакеты, которые можно использовать для расширения функциональности проектов.

Читать далее
Total votes 21: ↑16 and ↓5+11
Comments15

Мы опубликовали датасет для детекции речи размером более 150 тысяч часов на 6000+ языках

Level of difficultyEasy
Reading time2 min
Views2.3K

Мы выложили в публичный доступ гигантский датасет для детекции речи (voice activity detection).

Датасет содержит порядка 150 тысяч часов аудио более чем на 6,000 языках. Количество уникальных ISO-кодов данного датасета не совпадает с фактическим количеством языков, так как близкие языки могут кодироваться одним и тем же кодом.

Данные были размечены для задачи детекции голоса при временной дискретизации примерно в 30 миллисекунд (или 512 семплов при частоте дискретизации 16 килогерц).

Данный датасет распространяется под лицензией CC BY-NC-SA 4.0.

Давайте смотреть датасет
Total votes 17: ↑17.5 and ↓-0.5+18
Comments13

Индуктивная статистика: доверительные интервалы, предельные ошибки, размер выборки и проверка гипотез

Level of difficultyMedium
Reading time15 min
Views5.5K

Одной из самых распространённых задач аналитики является формирование суждений о большой совокупности (например, о миллионах пользователей приложения), опираясь на данные лишь небольшой части этой совокупности - выборке. Можно ли сделать вывод о миллионной аудитории крупного мобильного приложения, собрав данные 100 пользователей? Или стоит собрать данные о 1000 пользователях? Какую вероятность ошибиться при анализе мы можем допустить: 5% или 1%? Относятся ли две выборки к одной совокупности, или между ними есть ощутимая значимая разница и они относятся к разным совокупностям? Точность прогноза и вероятность ошибки при ответе на эти и другие вопросы поддаются вполне конкретным расчётам и могут корректироваться в зависимости от потребностей продукта и бизнеса на этапе планирования и подготовки эксперимента. Рассмотрим подробнее, как параметры эксперимента и статистические критерии оказывают влияние на результаты анализа и выводы обо всей совокупности, а для этого смоделируем тысячу A/A, A/B и A/B/C/D тестов.

Читать далее
Total votes 18: ↑21 and ↓-3+24
Comments13

Python streaming (spark+kafka)

Level of difficultyEasy
Reading time4 min
Views4.3K

В этой статье, посвященной Python streaming с использованием Spark и Kafka мы рассмотрим основные шаги по настройке окружения и запуску первых простых программ

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

Создание генератора объектов в редакторе Unreal Engine

Level of difficultyMedium
Reading time7 min
Views1.4K

Представим ситуацию: Мы создаем в Unreal Engine 4 (или UE5) сцену пещеры, в которой живут пещерные люди. Модель нарисована, основные объекты размещены, но не хватает иллюзии того что тут действительно живут, не хватает хаоса. Чтобы это исправить необходимо по пещере разбросать камушки, палки, остатки от трапез наших неандертальцев. Первый вариант это разместить руками. Вариант хороший, потом можно отметить что все размещено вручную, каждый камешек положен на «свое» место. Но я человек ленивый любящий все автоматизировать, и мне захотелось такие процессы повесить на плечи «роботов». Первое что приходит в голову это подключить к проекту Houdini Engine и с его помощью разместить нужные объекты, но как быть если к проекту нет возможности подключить Houdini Engine (ответ почему, выходит за рамки этой статьи, просто примем это как вводные данные). Можно изобрести свой интерфейс, используя Python, скажем так, создать свой Houdini Engine на минималках .

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

Числа и байты: как работает память в Linux?

Level of difficultyHard
Reading time27 min
Views10K
image

Часть первая: физическая память


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

Также память включает в себя оперативное запоминающее устройство (ОЗУ) или RAM, где можно записывать и считывать информацию. Существует статическая ОЗУ (SRAM) и динамическая ОЗУ (DRAM), различающиеся в том, как хранится информация. В SRAM информация сохраняется до выключения питания, в то время как в DRAM используются транзисторы и конденсаторы, что позволяет хранить данные, но требует их периодического обновления. Разные типы ОЗУ имеют свои преимущества и недостатки, и выбор зависит от конкретных потребностей.

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

Но что такое физическая память, как она работает в Linux? Что такое сегментация, утечки памяти и некие «страницы»?

Все, что вы хотели знать, но боялись спросить о памяти пингвина — читайте здесь и сейчас!
Читать дальше →
Total votes 24: ↑28 and ↓-4+32
Comments15

Умный дом на openHAB+MQTT+Arduino. Часть 2: Датчики, релюшки

Level of difficultyMedium
Reading time11 min
Views4.8K

Продолжаем разговор за бюджетный умный дом, в этой статье мы соберем простой модуль на Arduino Nano. Предыдущая статья, посвященная настройке кластера openHAB, находится тут.

Читать далее
Total votes 5: ↑6 and ↓-1+7
Comments18
1
23 ...

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity