Каждый из нас знакомился с новомодными библиотеками, фреймворками, инструментами по getting started статьям из документации. В них всё складывается как по полочкам, в пёстрых красках показывается как всё просто и легко. Однако зачастую картина меняется, когда в Ваш новорожденный проект требуется подключить не одну условную библиотеку, а набор. Getting started осложняются появлением инородных элементов, и в процесс приходится подключать инстинкты. Когда за плечами многолетний опыт разработки и не один поднятый с колен проект, такая задача не видится проблемной. Однако, когда Вы делаете это в первый раз, инстинкты подводят. Впоследствии оглядываясь назад, мы жалеем о том, что в начале у нас не было опыта, который есть сейчас. Да и откуда было бы его получить? Ведь в getting started о таком не пишут, а проекты, в которых мы работаем не с самого начала, уже прошли этап становления.
Новости
Снижение аллокации при замыкании (closure)
Недавно у меня появилась задача по снижению аллокации в очень горячем месте кода. Там происходит тривиальное: запускаются Task'и в которых заранее известным набором handler'ов обрабатываются объекты. Вооружившись профайлером, я с удивлением обнаружил, что много памяти (и много времени GC) затрачивается на удаление объектов-замыканий.
Главный цикл в пошаговых играх
Теперь, когда мой рогалик, написанный на Dart, имеет открытый исходный код, мне хотелось бы поговорить о том, на что было потрачено большое количество времени. На самом деле я вложил даже слишком много усилий в некоторые элементы этой игры и может когда-нибудь напишу и о них. Однако сейчас я хотел бы начать с того места, где стартует любая игра: главный цикл.
Лояльность покупателей — гигантская ответственность, а не просто технологии
Всем привет. Я Игорь, тимлид в команде, которая занимается системой лояльности в CSI. Расскажу, как работают и устроены системы лояльности в ритейле, о том, как мы создали новую архитектуру системы Set Loyalty, что применяем из фреймворков и инструментов.
Как IoT-технологии и эксперты по оборудованию помогают внедрять предиктивную аналитику: опыт Factory5
Всем привет, на связи Алексей Ершов и Максим Зотов, эксперты Factory5. Сейчас наша компания разрабатывает ПО для анализа промышленных данных, а начинали когда-то с предиктивной аналитики промышленного оборудования. В этой статье расскажем о том, как IoT-технологии и эксперты по оборудованию помогают внедрять её на предприятиях.
Как рендерить данные через fetch
Метод Fetch API - это интерфейс JavaScript для работы с запросами и ответами HTTP. Если ранее подобный функционал можно было достигнуть, использую XMLHttpRequest, то сейчас Fetch API использует Promises. Здесь рассмотрим простой пример работы с ним для получения и обработки данных.
Как устроена разработка ReactOS, зачем в неё контрибьютить и почему она уже 20 лет в альфе
Виктор Перевёрткин, cистемный разработчик в «Лаборатории Касперского» и активный участник комьюнити разработчиков ReactOS — о том, как устроена и кем создаётся ReactOS и работают ли в ней HOMM III. Статья написана на основе выпуска подкаста «Люди и код» от Skillbox Media (март 2022 года).
Как мы построили систему онбординга для аналитиков-новичков: подводные камни и полезные приёмы
Привет, я Галина Вакулина, лидер аналитиков в Точке.
В новой компании аналитик тратит много времени на изучение данных, с которыми ему предстоит работать. В этой статье я рассказываю, как мы построили процесс онбординга, чтобы погружение новичка проходило эффективно и безболезненно.
Flutter на Python
Приветствую вас, дорогие любители и знатоки Python! Знали ли вы, что можно разрабатывать кросплатформенные приложения, используя всю мощь и выразительность своего любимого змеиного языка в связке с ныне популярным фреймворком Flutter? Оказывается, такая возможность есть! Всех заинтересовавшихся прошу под кат за деталями.
Модульные роботы: проекты, за которыми стоит следить
Модульными называются роботы, структура которых может изменяться с помощью добавления узлов, самостоятельных по отдельности. Они могут быть полезны в разных областях — от разработки игр до медицины и космонавтики.
Под катом собрали перспективные проекты модульных роботов. Как они работают, каких бывают форм и какие у них проблемы в реализации — рассказываем в подборке.
Производительность: нюансы против очевидностей. JDK edition
Привет, это продолжение статьи, в которой я разбирал разные неочевидные вещи из мира производительности. В этот раз будем копать ещё глубже, хоть и начнём с относительно простых примеров. И да, в этой статье будет много интересного про строки. Да, несмотря на "Катехихис j.l.String", "The Lord of the Strings: Two Scours" и несколько моих статей (раз, два, три, четыре) там всё ещё есть куда копать :)
Предсказание временных рядов с помощью Keras
Привет, Хабр!
Сегодня хотелось бы поговорить о задаче предсказания временных рядов методами машинного обучения. В каком виде зачастую используются данные для задачи предсказания? Что такое LSTM-архитектура рекуррентных нейронных сетей? Как справляются модели RNN и CNN c поставленной задачей?
Промышленный мониторинг качества данных в Feature Store. Предпосылки и реализация
Привет, Хабр! Меня зовут Алексей Лямзин, я работаю аналитиком в финтех направлении Big Data МТС. Мы с коллегами разрабатываем предиктивные модели на данных крупнейшего телеком-оператора и сегодня я расскажу вам о том, как мы строили автоматизированный контроль за качеством данных в нашем Feature Store.
Добро пожаловать под кат!
А слабо сделать нормального чат-бота для банка? — challenge accepted
Сначала оказалось, что простые эвристики не работают. Ну вот совсем. То есть тупой чат-бот, который умеет распознавать с десяток жёстких тематик или показывать клавиатуру вроде «Нажмите 1, чтобы узнать свой баланс», несильно экономит время контакт-центру. Люди как не читали инструкции, так и не читают, а при виде такого сразу стремятся выйти на живого оператора.
То есть бот должен быть реально полезным. Таким, чтобы пользователь чувствовал, что диалог с ним — это не конкурс «обойти железного идиота», а что-то всё же даёт.
Здесь ждут следующие грабли: предположим, вы собрали всю базу диалогов контакт-центра с 2002 года. Разметили её и даже обучили на ней бота. Дальше произойдёт следующее:
- Либо актуальность этого обучения будет падать, и так же будет падать процент автоматизации. С каждым месяцем меняются тематики и запросы.
- Либо же вы можете переобучить модели слишком подробными выборками, которые имеют пересечения по категориям.
Речь идёт про то, что если обучать базу на всех диалогах без исключения так, как это подразумевает философия полной автоматизации, то очень быстро база начнёт забиваться откровенным мусором, снижающим точность классификации. Про это вендоры вам не скажут, но нужно либо постоянно что-то подкручивать, либо чистить выборку для обучения, либо обучать не на всех диалогах, которые закончились каким-то удовлетворительным ответом. Иначе очень быстро у вас перепутаются ответы для кредитных и дебетовых карт, например, потому, что клиенты либо путают их в своих стартовых запросах тоже, либо вообще не видят между ними разницы.
Ниже я хочу рассказать про те не совсем очевидные вещи в поддержке чат-бота, которые могут очень сильно уронить качество его работы. Ну или не дать до этого качества дорасти вообще, если архитектура не совсем правильная.
Сложности подключения SD карты к ESP8266
Сложности подключения SD карты к ESP8266.
Как поучиться cybersecurity за половину цены от курса OSCP
В сентябре 2021 года я решил лучше изучить область "offensive cybersecurity". Задача стояла именно в получении реальных знаний, без какой-то последующей привязки к сертификации. Изучая рынок предложений я нашёл, что крайне большой популярностью пользуется курс от сайта offensive-security.com, однако он жёстко привязан именно к получению сертификата OSCP. Курс на тот момент стоил порядка $700 (сейчас он, кстати, стоит уже $1500) и представлял из себя один длинный PDF, набор хороших (по отзывам) лабораторных работ и возможность прохождения сертификации OSCP.
И тут я нашёл информацию, что кроме OSCP есть ещё один достаточно популярный источник знаний - elearnsecurity.com. Как оказалось, на тот момент этот ресурс был куплен компанией INE (ine.com), и INE предлагал крайне выгодные условия обучения - те же $700 (https://ine.com/pricing), но только за годичный неограниченный доступ к около 1000 различных курсов, 42 "learning paths", множеству лабораторных работ (более 185), а также 50% скидку на любой сертификат от eLearnSecurity. На данной платформе есть как курсы по cybersecurity, так и по Cisco (CCNP, CCNA, CCIE), Azure, basic networking и многое другое. Также кому-то будет интересно, что INE недавно купила ресурс Pentester Academy (www.pentesteracademy.com) и на платформе INE появились дополнительные 45 курсов от Pentester Academy. В данной статье я приведу дополнительную информацию и свой личный опыт обучения на данной платформе.
Итак, для начала приведу скриншоты с цифрами по количеству и категориям существующих курсов:
NAS взломали. Как трояны проникают в сетевые хранилища и как от этого защититься
На днях мне позвонил старый приятель, и в панике сообщил, что у него что-то случилось с домашним файлохранилищем NAS QNAP. При обращении к девайсу на экране демонстрируется вот такая вот забавная картинка, вынесенная в заглавие этого поста, а файлы на дисках теперь имеют расширение .encrypt. Вердикт, в общем-то, был очевиден и неутешителен: NAS подвергся атаке трояна-шифровальщика. Несмотря на то, что большинство подобных устройств используют в качестве операционной системы одну из реализаций Linux, вредоносы проникают с завидной регулярностью и туда. И этот случай — лишь один из многих, с которыми мне, так или иначе, доводилось сталкиваться. Как вообще происходят подобные заражения? Возможны несколько вариантов.
Go vs Rust. Что же лучше в конкуретности?
Стало мне как-то интересно, кто из языков Go или Rust лучше работает с конкурентными задачами. С одной стороны, особый механизм конкурентности в Go является чуть ли основополагающей фичей. С другой стороны сам по себе Rust является более производительным языком, и в глазах некоторых программистов даже является "убийцей" C и C++. Поэтому я решил провести небольшое тестирование и написать собственный бенчмарк для этого.
Для упрощения я буду горутины в Go и асинхронные задачи в Rust называть корутинами. Для проверки различные тесты запускались на количестве корутин 101, 102, ..., 106. Смысл тестирования заключается в том, чтобы определить, какой из языков решит задачу наиболее быстро. По затраченному времени на выполнение задачи можно судить не только о скорости работы языка, но и том, насколько он страдает от большого количества конкуретных задач. Также в каждом тесте записывалась потребляемая память.
Предупреждения помогают писать лаконичный код
Некоторые предупреждения анализатора или компилятора сложно однозначно классифицировать как ложное срабатывание или указание на настоящую ошибку. Бывает, что формально анализатор/компилятор прав, но и код работает правильно. Что делать? Возможно, это повод упростить код.