Pull to refresh
42
-7
Ремнева Мария @Aconitum_napellus

Senior Backend Developer

Send message

Создание расширения браузера Google Chrome для извлечения всех изображений web-страницы. Часть 1

Reading time15 min
Views68K

Расширения браузера это web-приложения, которые устанавливаются в web-браузер чтобы расширить его возможности. Обычно для того чтобы воспользоваться расширением, пользователю нужно найти его в Chrome Web Store и установить.

В этой статье я покажу как создать расширение для браузера Google Chrome с нуля. Это расширение будет использовать API браузера для того чтобы получить доступ к содержимому web-страницы любой открытой вкладки. С помощью этих API можно не только читать информацию с открытых web-сайтов, но и взаимодействовать с этими страницами, например, переходить по ссылкам или нажимать на кнопки. Таким образом расширения браузера могут использоваться для широкого круга задач автоматизации на стороне клиента, таких как web-scrape или даже автоматизированное тестирование фронтенда.

Мы создадим расширение, которое называется Image Grabber, которое будет содержать интерфейс для подключения к web-странице и для извлечения из нее информации о всех изображениях. Далее, при нажатии на кнопку "GRAB NOW" список абсолютных URL этих изображений будет скопирован в буфер обмена. В этом процессе вы познакомитесь с фундаментальными строительными блоками, которые в дальнейшем можно будет использовать для создания других расширений.

Расширения, создаваемые таким образом для браузера Chrome совместимы с другими браузерами, основанными на движке Chromium и могут быть установлены, например, в Yandex-браузер или Opera.

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

Читать далее
Total votes 13: ↑12 and ↓1+11
Comments16

Своё кастомное межсервисное взаимодействие с блекджеком и gRPC

Level of difficultyMedium
Reading time30 min
Views13K

Привет, Хабр! Меня зовут Ильяс. Мы с командой делаем собственный Service Mesh в Ozon Tech, и в этой статье я расскажу, как можно за вечер реализовать свое супер кастомное межсервисное взаимодействие. К концу статьи мы с вами напишем современные алгоритмы балансировки, настроим канареечные деплои, а также узнаем, как реализовать кучу других супернеобычных механизмов межсервисного взаимодействия на основе, не поверите, библиотеки gRPC :D И да, мы с моей командой уже раскатили это на весь Ozon Tech, состоящий из более чем 4500 сервисов. Пристегнитесь — мы начинаем… :-)

Читать далее
Total votes 36: ↑35 and ↓1+34
Comments13

Как попасть в Программный комитет классной конференции, и зачем это нужно

Reading time5 min
Views4.2K
Программный комитет — это двигатель любой конференции. Именно благодаря его работе вы видите на сцене крутых ребят с интересными докладами. Верно и обратное — если выступления спикеров явно сырые, то вина за это тоже ложится на ПК.

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

Важное замечание: обо всем я рассказываю на примере ПК AppsConf, но это более-менее верно и для многих других конференций.
Читать дальше →
Total votes 24: ↑21 and ↓3+18
Comments6

Мапы в Go: уровень Pro

Reading time16 min
Views21K

Подробный туториал по процессам записи и чтения данных в мапах Go. Объясняем проблемы переполнения, эвакуации элементов; важность передачи количества элементов при создании мапы. Рассказываем, почему в Go нельзя обращаться к ключу или значению по адресу.

Читать далее
Total votes 19: ↑17 and ↓2+15
Comments10

«Чистый» код, ужасная производительность

Reading time16 min
Views64K
Один из самых часто повторяемых советов программистам, особенно начинающим — это рекомендация писать «чистый» код. Она сопровождается длинным списком правил, сообщающих, что нужно делать, чтобы код был «чистым».

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

Если посмотреть на список правил «чистого» кода и вытащить из него правила, которые действительно влияют на структуру кода, то мы получим следующее:

  • Отдавайте предпочтение полиморфизму, а не «if/else» и «switch»
  • Код не должен знать о внутреннем устройстве объектов, с которыми он работает
  • Функции должны быть маленькими
  • Каждая функция должна выполнять одну задачу
  • Принцип «DRY» — Don’t Repeat Yourself («не повторяйся»)

Эти правила достаточно чётко формулируют то, как должен создаваться конкретный фрагмент кода, чтобы быть «чистым». Но я задам такой вопрос: если мы создадим фрагмент кода, соответствующий этим правилам, какова будет его производительность?
Читать дальше →
Total votes 221: ↑185 and ↓36+149
Comments368

Как департамент утилизации CPU превратился в департамент экономии железа, выдерживающий нагрузку в 1 млн RPS

Level of difficultyEasy
Reading time26 min
Views33K

Привет, меня зовут Мария, когда-то я работала на шахте, потом на заводе, а 3.5 года назад пришла в Ozon Tech. Сейчас я старший Golang-разработчик в команде product-facade. Это самый высоконагруженный сервис маркетплейса, но так было не всегда.

Хотите узнать, что скрывается под витриной маркетплейса? Что держит нагрузку в 1 миллион запросов в секунду? Толстые кэши или нечто большее? Про то, как устроено наше кэширование и как мы к этому пришли, — рассказываю в статье.

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

«Человеческое, слишком человеческое». Не станем ли мы заложниками нашего разума, реализуя универсальный ИИ?

Reading time5 min
Views22K


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

А нужен ли вообще нам искусственный разум? Нужен. Увы, «голый» интеллект решает слишком узкий класс проблем, причём порой весьма неэффективно. Более того – «голый» интеллект не способен сам сформулировать проблему! Например, возьмём игру в шахматы, – машина решает проблему не творчески, затрачивая немалые ресурсы и используя различные алгоритмы, заложенные в неё инженерами. Человек решает проблему творчески – он генерирует новые решения, причём используя намного меньшие ресурсы!
Читать дальше →
Total votes 31: ↑25 and ↓6+19
Comments136

Cucumber 3 + Java

Reading time6 min
Views19K
Несколько месяцев назад состоялся релиз Cucumber JVM 3.0.0. Новая версия призвана сделать работу с данным BDD фреймвоком более очевидной и гибкой. В данной статье я расскажу об изменениях и новых фичах, а также приведу примеры их использования.
Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments5

REST-assured: полезные советы

Reading time4 min
Views105K
В данной статье я собрал полезные советы по использованию REST-assured, одной из самых распространенных Java-библиотек для автоматизации тестирования REST-API.

Все примеры жизненные, они собраны из моей практики проведения code-review в более чем 50 проектах с автотестами.
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments14

Как организовать CI/CD на проекте: от постановки задач до настройки конвейера развертывания

Reading time5 min
Views15K
В чем залог успешной настройки Continuous Delivery на проектах? Слаженная работа команд разработки, тестирования и инженеров по инфраструктуре. Спасибо, кэп, как говорится :) Но как это реализовать на практике? В этой статье поделимся нашими наработками, как это всё организовать и воплотить в жизнь.

Мы обобщили базовые основы в одну шпаргалку для себя и делимся с вами:


Опытные инженеры вряд ли узнают из статьи что-то новое, но надеемся, что начинающим специалистам эта информация пригодится.


Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments10

Information

Rating
Does not participate
Works in
Registered
Activity

Specialization

Backend Developer
Senior
Golang
gRPC
High-loaded systems
Linux