Рубрика «Блог компании Отус»

Java Challengers #4: Сравнение объектов с equals() и hashCode()

В преддверии запуска нового потока по курсу "Разработчик Java" мы продолжаем перевод серии статей Java Challengers, предыдущие части которых можно прочитать по ссылкам ниже:

Поехали!

В этой статье вы узнаете, как связаны между собой методы equals() и hashCode() и как они используются при сравнении объектов.

equals-hashcode

Читать полностью »

(ИЛИ каламбур типизации, неопределенное поведение и выравнивание, о мой Бог!)

Друзья, до запуска нового потока по курсу «Разработчик С++», остается совсем немного времени. Пришло время опубликовать перевод второй части материала, в которой рассказывается о том, что такое каламбур типизации.

Что такое каламбур типизации?

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

Что такое Strict Aliasing и почему нас должно это волновать? Часть 2 - 1

Иногда мы хотим обойти систему типов и интерпретировать объект как другой тип. Переинтерпретация сегмента памяти в качестве другого типа называется каламбуром типизации (type punning). Каламбуры типизации полезны для задач, которым требуется доступ к базовому представлению объекта для просмотра, транспортировки или манипулирования предоставленными данными. Типичные области, в которых мы можем встретить использование каламбуров типизации: компиляторы, сериализация, сетевой код и т.д.Читать полностью »

Друзья, в конце марта мы запускаем новый поток по курсу «Data Scientist». И прямо сейчас начинаем делиться с вами полезным материалом по курсу.

Введение

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

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

Руководство по развертыванию моделей машинного обучения в рабочей среде в качестве API с помощью Flask - 1

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

(из Цикла Историй Тестировщика testerstories.com/2018/11/dont-define-testing-around-bug-finding/#more-3598)

Всем привет. Как вы уже могли заметить, интенсивность запуска курсов в OTUS увеличивается с каждым месяцем, и в марте их особенно много. Сегодняшний материал мы хотим приурочить к запуску курса «Автоматизация веб-тестирования», который стартует уже в середине марта. Приятного прочтения.

Почему тестирование не ограничивается поиском багов - 1

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

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

И снова здравствуйте! Уже завтра у нас стартуют занятия в новой группе по курсу «Реверс-инжиниринг». Традиционно делимся с вами переводом полезного материала по теме. Поехали!

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

Баг

CVE-2015-3077 — проблема путаницы типов в сеттерах фильтров Adobe Flash Button и MovieClip, которая позволяет спутать любой тип фильтра с любым другим. Я сообщила о нем в начале декабря 2015 года, и в мае его пофиксили. Баг происходит из-за того, что взломщик может перезаписать конструктор, используемый для инициализации объекта фильтра. Пример кода, воспроизводящего проблему, представлен ниже:

Идеальный баг: Использование Путаницы Типов в Flash. Часть 1 - 1Читать полностью »

(ИЛИ каламбур типизации, неопределенное поведение и выравнивание, о мой Бог!)

Всем привет, уже через несколько недель мы запускаем новый поток по курсу «Разработчик С++». Этому событию и будет посвящен наш сегодняшний материал

Что такое strict aliasing? Сначала мы опишем, что такое алиасинг (aliasing), а затем мы узнаем, к чему тут строгость (strict).

В C и C ++ алиасинг связан с тем, через какие типы выражений нам разрешен доступ к хранимым значениям. Как в C, так и в C ++ стандарт определяет, какие выражения для именования каких типов допустимы. Компилятору и оптимизатору разрешается предполагать, что мы строго следуем правилам алиасинга, отсюда и термин — правило строгого алиасинга (strict aliasing rule). Если мы пытаемся получить доступ к значению, используя недопустимый тип, оно классифицируется как неопределенное поведение (undefined behavior — UB). Когда у нас неопределенное поведение, все ставки сделаны, результаты нашей программы перестают быть достоверными.

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

Что такое Strict Aliasing и почему нас должно это волновать? - 1

Чтобы лучше понять, почему нас должно это волновать, мы обсудим проблемы, возникающие при нарушении правил строго алиасинга, каламбур типизаций (type punning), так как он часто используется в правилах строгого алиасинга, а также о том, как правильно создавать каламбур, наряду с некоторой возможной помощью C++20, чтобы упростить каламбур и уменьшить вероятность ошибок. Мы подведем итоги обсуждения, рассмотрев некоторые методы выявления нарушений правил строго алиасинга.Читать полностью »

Всем привет! Наступила весна, а это значит, что до запуска курса «Разработчик Python» остается меньше месяца. Именно этому курсу и будет посвящена наша сегодняшняя публикация.

Жизненный цикл кода на Python – модель выполнения CPython - 1

Задачи:
— Узнать о внутреннем устройстве Python;
— Понять принципы построения абстрактного синтаксического дерева (AST);
— Писать более эффективный код по времени и по памяти.

Предварительные рекомендации:
— Базовое понимания работы интерпретатора (AST, токены и т.д.).
— Знание Python.
— Базовое знание С. Читать полностью »

До запуска курса «Сетевой инженер» остаются считанные дни. В связи с этим хотим поделиться с вами первой частью материала по теме «Delta-OMA (D-OMA): новый метод массового множественного доступа в 6G». Поехали.

Аннотация — Новый метод множественного доступа, а именно дельта-ортогональный множественный доступ (D-OMA — delta orthogonal multiple access), представлен для массового доступа в сотовых сетях 6G будущего поколения. D-OMA основан на концепции распределенного большого координированного неортогонального множественного доступа с поддержкой многоадресной передачи (NOMA — non-orthogonal multiple access) с использованием частично перекрывающихся поддиапазонов для кластеров NOMA. Эффективность этой схемы демонстрируется с точки зрения пропускной способности для различных степеней перекрытия поддиапазонов NOMA. D-OMA также может использоваться для обеспечения повышенной безопасности в сетях беспроводного доступа как в восходящей линии связи, так и в нисходящей линии связи. Также обсуждаются вопросы практической реализации и открытые проблемы для оптимизации DOMA.

Delta-OMA (D-OMA): новый метод массового множественного доступа в 6G. Часть 1 - 1
Читать полностью »

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

Недавно мы исследовали вредоносный буткит FinFisher, опубликованный WikiLeaks. Большинство компонентов версии для Windows были достаточно простыми, так что перейдём сразу к драйверу режима ядра и загрузочному коду.

Анализ Буткита FinFisher - 1

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

Всех с пятницей, друзья. Сегодня делимся с вами переводом второй части статьи «Паттерны и анти-паттерны CI/CD», первую часть которой можно прочитать здесь. Напомним, даная серия публикаций приурочена к запуску нового потока по курсу «DevOps практики и инструменты».

1.3 Паттерны и антипаттерны в тестировании

1.3.1 Автоматизация Тестирования

  • Паттерн: Автоматизируйте проверку и валидацию программного обеспечения, включив тестирование юнитов, компонентов, емкости, функционала и развертывания.
  • Анти-паттерны: Ручное тестирование юнитов, компонентов, развертывания и тд.
  • Юнит- Автоматизация тестов без зависимостей.
  • Компонент- Автоматизация тестов с зависимостями от других компонентов, баз данных и файловых систем.
  • Развертывание- Автоматизация тестов для проверки успешности развертывания и настройки. Иногда это называют “smoke”-тестированием.
  • Функционал- Автоматизация тестов для проверки поведения ПО с точки зрения пользователя.
  • Емкость- Автоматизация тестирования нагрузки и производительности в условиях, близких к эксплуатационным.

Паттерны и анти-паттерны CI-CD. Часть 2 - 1Читать полностью »