Как стать автором
Обновить
702.5

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Динамическое создание UDF в Apache Spark из строк кода: проблемы и решение («костыль»)

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

В данной статье рассматривается подход к созданию пользовательских функций (UDF) в Scala, специфически в контексте использования в Apache Spark. Автор исследует проблему динамической генерации и передачи лямбда-выражений через JSON, обсуждая ограничения сериализации функций в Spark и возможные решения с использованием типа Any для универсальной обработки различного числа аргументов. Статья призывает к дискуссии и поиску альтернативных подходов, не претендуя на единственно верное решение, и представляет предложенный метод лишь как один из возможных вариантов решения задачи.

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

Новости

Чистый код: Данные

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

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

Неизменяемым называется объект (англ. immutable object), состояние которого не может быть изменено после создания(1). Это понятие не так широко используется в различной литературе, поэтому начну с более подробного разбора этого понятия и обоснования, почему стоит применять этот шаблон.

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

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

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

Микросервисы с Go-Micro на примере

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров847

Микросервисная архитектура представляет из себя подход, в котором каждый сервис отвечает за конкретную функциональность и может быть развернут, обновлен и масштабирован независимо от других. Go-Micro — это фреймворк, который упрощает создание таких микросервисов на Golang.

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

Почему модель не работает?

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

Было у вас когда‑нибудь такое: вы обучали модель, которую считали хорошей, а потом, на реальных данных, эта модель с треском проваливалась? Если так — это значит, что вы совсем не одиноки. Машинное обучение наполнено сложными процессами, управляя которыми очень легко сделать что‑то такое, совсем неочевидное, что приведёт к переобучению модели. Я работаю в сфере машинного обучения около 20 лет. Я видел много примеров вышеописанной ситуации, что подтолкнуло меня к написанию материала «Как избежать „подводных камней“ машинного обучения: руководство для академических исследователей». Этот материал был попыткой уберечь других людей от известных мне проблем машинного обучения.

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

Истории

Квест на Node.js — борьба с утечкой памяти. От диагностики до решения

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

Всем привет! Меня зовут Артём и я backend-разработчик компании SimbirSoft. На протяжении восьми лет я работаю на Node.js. Сегодня хочу поделиться опытом поиска утечек памяти при gRPC-вызовах в Node.js + Nest.js. В частности, речь пойдет об отладке утечки памяти при взаимодействии между микросервисами. Статья будет полезна backend-разработчикам, которые работают с Node.js и gRPC.

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

Одной из задач, которую ставил перед нами клиент,  был поиск и устранение утечки памяти при работе микросервисов. Задача была открыта уже давно, но не было четкого понимания, как ее решать. Судя по описанию, было несколько API, при вызове которых отделы DevOps и QA наблюдали сильный рост памяти при мониторинге системы и тестировании соответственно. В дополнении к REST API присутствовали gRPC-методы.

Читать далее
Всего голосов 12: ↑11 и ↓1+13
Комментарии0

Нереальная локализация

Уровень сложностиСложный
Время на прочтение25 мин
Количество просмотров2.3K

Давно хотелось раскрыть интересную тему локализации ПО, но так чтобы не повторяться и не цитировать прописные истины.

Поэтому рассказываю как локализовать обычное корпоративное Java-приложение на..  несуществующие фантастические языки: Клингонский и Р’льех.

Погрузиться
Всего голосов 16: ↑16 и ↓0+19
Комментарии20

Деплой .NET приложений для самых маленьких. Часть 1. Jenkins

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

В прошлой статье мы рассмотрели способы запуска наших проектов на удаленном VPS. Для этого мы арендовали хостинг, создали шаблонное приложение, перенесли его на хостинг через простое копирование через ssh и через git clone, запустили через dotnet run / dotnet publish, а также развернули приложение в докере.

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

Читать далее
Всего голосов 13: ↑12 и ↓1+16
Комментарии6

Забытый порт 3c0, или видят ли камеры иллюзии

Уровень сложностиСложный
Время на прочтение3 мин
Количество просмотров3.7K
Вы видите желто и синих цвета? Но у меня черно-белые изображение. Сам монитор черно-белые. Монохромное изображение — чёрно-белые компьютер монитор. У меня он был! Нет у меня желто и синих цвета.
А они есть в глазу! Но не только. Они есть в фотоапарата! Фотоапарат решил что желтый и синий цвета.
Снимок от фотоапарата.



Но нужно по порядку. 2004 год, 20 лет назад! Я читаю программирование видеоадаптеров.
Читать дальше →
Всего голосов 28: ↑22 и ↓6+25
Комментарии15

Книжная полка разработчика в эпоху интернета и искусственного интеллекта

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

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

Однако, на мой взгляд, книги всё ещё остаются важным и незаменимым инструментом для изучения программирования, особенно для новичков. В этой статье я, Бартенев Евгений, автор и техлид курсов «Python-разработчик» в Яндекс Практикуме, расскажу, почему я так считаю. А также поделюсь своей подборкой книг как для начинающих разработчиков, так и для тех, кто уже пишет код не первый день.

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

Кратко про библиотеку gevent в Python: высокопроизводительная асинхронная библиотека

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров2.1K

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

Gevent — это высокопроизводительная асинхронная библиотека для Python, которая решает проблемы многозадачности с помощью корутин, известных как "зеленые потоки" или Greenlets. Зеленые потоки — легковесные корутины, которые позволяют выполнять задачи одновременно без затрат ресурсов, связанных с традиционными потоками.

Также Gevent преуспевает в неблокирующих операциях ввода/вывода и имеется встроенная техника под названием "monkey patching", которая модифицирует некоторые модули стандартной библиотеки, делая их кооперативными. Так можно преобразовывать блокирующие вызовы в неблокирующие в рамках среды Gevent.

Читать далее
Всего голосов 4: ↑1 и ↓3-1
Комментарии2

Как я автоматизировал свое утро с помощью Python

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров28K

Приходилось ли вам по утрам смотреть в потолок в ужасе от горы предстоящей рутины? А я вот часто так делал. Пока однажды не сорвался. Я решил автоматизировать все свои утренние дела при помощи Python, и результат оказался поистине потрясающим.

Читать далее
Всего голосов 46: ↑27 и ↓19+10
Комментарии76

Сериализация данных в C++ с библиотекой Cereal

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.1K

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

Сегодня рассмотрим библиотеку Cereal в C++, которая позволяет сохранять и загружать состояние объектов, не теряя производительности.

Cereal — это заголовочная библиотека для C++, предназначенная для сериализации данных. Она поддерживает XML и JSON. Помимо этого поддерживает практически все стандартные типы данных в C++ и имеет инструменты для работы с пользовательскими типами. В отличие от, например, библиотек Boost, Cereal не требует сложных настроек и имеет интуитивно понятный синтаксис, знакомый юзерам Boost.

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

Строим свой SSO. Часть 5: Итоговый SSO, Защита от XSS/CSRF, Custom Grant Type

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

Всем привет! Мы продолжаем нашу серию статей по созданию собственного SSO. В этой статье мы увидим итоговый проект и разберём самые интересные решения из него. Подумаем над безопасностью приложения и настроим защиту от XSS и CSRF атак, а также изучим разные Security Headers. В заключение статьи мы создадим собственый Grant Type.

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

Ближайшие события

AdIndex City Conference 2024
Дата26 июня
Время09:30
Место
Москва
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Разработка ядра – API для прошивки

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

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

Читать далее
Всего голосов 19: ↑17 и ↓2+22
Комментарии4

Netmiko: упрощение сетевой автоматизации на Python

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.3K

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

Сегодня рассажем о модуле, который упрощает автоматизацию сетевых устройств — Netmiko. Если вы, как и мы, когда-то пытались автоматизировать конфигурации и управление сетью через SSH, то вы знаете, насколько это может быть сложным процессом. И тут на сцену помогает Netmiko.

Netmiko — это обертка над библиотекой Paramiko, разработанная для сетевых инженеров. Она упрощает работу с SSH-соединениями и добавляет ряд методов и интерфейсов для взаимодействия с сетевыми устройствами.

Этот модуль поддерживает большой спектр сетевых устройств — от Cisco и Juniper до Arista и HP. Всё, что нужно, это определить параметры устройства в виде словаря, и Netmiko позаботится обо всем остальном.

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

Базы данных не существует

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

Если вы не читали мою предыдущую статью, то и не читайте. Статья получилась короткая, скомканная, и, самое главное, не отвечала на вопрос, как именно ORM может помочь в повседневной работе программиста.

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

Если позволите, начну с небольшого исторического экскурса на 30 секунд, о том, как эта система появилась.

Нам ваш ORM совсем не нужон!
Всего голосов 18: ↑10 и ↓8+5
Комментарии74

История переформатирования 100 000+ файлов Google в 2012 году

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

В сентябре далёкого 2012 года я трудился начинающим инженером в Google, занимаясь разработкой Bazel (инструмент сборки, внутри компании также известный под именем Blaze). Однажды мне на почту пришло загадочное приглашение из Google Календаря. Его прислали два инженера из США, пригласив на встречу меня и моего тимлида.

Я сразу узнал имена отправителей — это были Роб Пайк и Расс Кокс. И хотя работать мне с ними не доводилось, я был о них наслышан. Расса Кокса я знал по его блогу, который любил читать, а Роба Пайка просто, потому что он известен. В ходе встречи они поделились с нами своим амбициозным планом: переформатировать каждый BUILD-файл Bazel в кодовой базе Google с помощью автоматизированного скрипта.
Читать дальше →
Всего голосов 32: ↑26 и ↓6+34
Комментарии6

Python logging — вывод лога на QTextWidget (PyQt6)

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

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

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

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

Введение в Advanced Views Framework

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров991

Advanced Views — это специализированный WordPress фреймворк, который предлагает улучшенный способ запроса и отображения контента. Его основная цель - ускорить и упростить создание качественного фронтенда для WordPress.

Если вы привыкли думать, что WordPress - это только про page builders и что быстрое создание качественного фронтенда здесь априори невозможно, то Advanced Views вас приятно удивит: модульный подход, Twig шаблоны, Just-in-Time assets, BEM из коробки, поддержка Tailwind и WordPress Interactivity API - в общем все что нужно для того, чтобы быстро и качественно отобразить контент на любом WordPress сайте.

Читать далее
Всего голосов 2: ↑1 и ↓10
Комментарии0

Кликер на Unity с использованием нейросети для генерации графики

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

Разработка кликера на Unity под ПК/Андроид и быстрое создание графики при помощи пиксель-арт нейросети.

Ну типа... Читать
Всего голосов 8: ↑3 и ↓50
Комментарии38
1
23 ...

Вклад авторов