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

Пользователь

Отправить сообщение

Потоки Redis как чистая структура данных

Время на прочтение6 мин
Количество просмотров14K
Новая структура данных Redis 5 под названием «потоки» (streams) вызвала живой интерес в сообществе. Как-нибудь я поговорю с теми, кто использует потоки в продакшне, и напишу об этом. Но сейчас хочу рассмотреть немного другую тему. Мне начинает казаться, что многие представляют потоки неким сюрреалистичным инструментом для решения ужасно трудных задач. Действительно, эта структура данных *также* осуществляет обмен сообщениями, но будет невероятным упрощением считать, что функциональность Redis Streams ограничена только этим.

Потоки — потрясающий шаблон и «ментальная модель», которую можно с большим успехом применить в проектировании систем, но на самом деле потоки, как и большинство структур данных Redis, являются более общей структурой и могут использоваться для кучи других задач. В этой статье мы представим потоки как чистую структуру данных, полностью игнорируя блокирующие операции, группы получателей и всю остальную функциональность обмена сообщениями.
Читать дальше →
Всего голосов 41: ↑40 и ↓1+39
Комментарии6

Подробное руководство по инверсии зависимостей. Часть 1

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

Инверсия зависимостей - один из принципов SOLID, который лежит в основе построения гексагональной архитектуры приложения. Существует множество статей, которые раскрывают суть принципа и объясняют как его применять. И, возможно, читатель уже знаком с ними. Но в рамках данной статьи будет продемонстрирован подробный разбор "тактических" приемов для успешного использования инверсии зависимостей и, возможно, в этом смысле даже искушенный читатель сможет найти для себя что-то новое. Примеры представлены на языке программирования Java с соответствующим окружением, но при этом для чтения достаточно понимания похожих языков программирования.

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

Запросы в PostgreSQL: 7. Сортировка и слияние

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

В предыдущих статьях я писал про этапы выполнения запросов, про статистику, про два основных вида доступа к данным — последовательное сканирование и индексное сканирование, — и успел рассказать о двух способах соединения — вложенном цикле и соединении хешированием.

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

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

Как быстро усвоить материал? Практические советы для разработчиков и не только

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

Эффективное обучение крайне важно для разработчика программного обеспечения, ведь постижение нового — значительная часть его работы. Умение быстро осваивать новые языки/фреймворки/инструменты сделает вас намного продуктивнее. Это своего рода суперспособность.

Как ее приобрести? Читайте в тексте Джоша Комо, эксперта с многолетним опытом в разработке ПО, ИТ-блогера и автора обучающего курса «CSS для разработчиков JavaScript». В статье Джош описывает практики и рекомендации, которые помогут начинающим специалистам (например, студентам и тем, кто переходит в разработку из какой-либо другой области) в развитии их профессиональных навыков.

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

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

Оптимизация: Настройка веб-сервера Nginx для улучшения показателей RPS в HTTP API

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

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

Мы столкнулись с указанной выше проблемой, когда наша развернутая система ежедневно использовалась миллионом пользователей, которые подключались всплесками время от времени. Это значит, что развертывание нескольких серверов или их масштабирование не будет в данной ситуации оптимальным решением.
Читать дальше →
Всего голосов 10: ↑5 и ↓5+4
Комментарии5

Первые шаги в aiohttp

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

Привет, меня зовут Артём. Я работаю бэкендером в KTS и веду курсы по разработке в KTS Metaclass. Заметил, что труднее всего студентам даются темы по асинхронному программированию.

Основываясь на своём преподавательском опыте, я написал туториал, рассказывающий о создании базового aiohttp-сервиса с нуля и затрагивающий самые сложные для студентов вопросы: как сделать асинхронное python-приложение, как работать с базой данных и как разложить свой проект в интернете.

Это первая статья цикла, в ней мы напишем небольшое веб-приложение на aiohttp  — стену с отзывами, где каждый может оставить свое мнение о каком-то продукте.

Погнали!
Всего голосов 2: ↑2 и ↓0+2
Комментарии6

11 проектов, которые нужно сделать, чтобы стать мастером фронтенда

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

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

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

Читать далее
Всего голосов 17: ↑10 и ↓7+5
Комментарии20

Сложно избежать рубцов, но можно значительно их уменьшить

Время на прочтение11 мин
Количество просмотров32K
«Сшей красное с красным, жёлтое с жёлтым, белое с белым. Наверняка будет хорошо».
Шани, декан кафедры медицины Оксенфуртского университета.

image
Пирсинг — не самая редкая причина образования грубых рубцов. Хотя в данном случае девушке повезло с генетикой.

Рубец — это вариант аварийной заплатки для организма. Причём он может быть не только на коже, но и, например, на миокарде после перенесённого инфаркта. По сути, это грубая фиброзная соединительная ткань, которой организм судорожно заделывает образовавшиеся дефекты, чтобы хоть как-то функционировать. Часть кардиомиоцитов погибла из-за оторвавшегося тромба коронарной артерии? Давайте залепим по-быстрому фиброзной тканью, пока через дырку не начала течь кровь. Саблезубый бобромедведь прокусил ногу? Давайте затянем дефекты фиброзной тканью, чтобы закрыть дырки в коже и как-то стянуть рану.

Поэтому сегодня будем говорить о шрамах и рубцах:

  1. Почему образуются рубцы и какие они бывают.
  2. Что такое первичная хирургическая обработка раны и почему лучше сразу отрезать лишние куски.
  3. Как зашить человека после операции. Зачем нужен внутрикожный шов и почему он эстетичнее узлового.
  4. Как в домашних условиях наложить швы ребёнку, не проткнув кожу.
  5. Как ускорить регенерацию тканей, и что там с пирсингом и татуировками.
Читать дальше →
Всего голосов 62: ↑56 и ↓6+72
Комментарии23

Эффективный поиск XSS-уязвимостей

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


Про XSS-уязвимости известно давным-давно — казалось бы, нужен ли миру ещё один материал о них? Но когда Иван Румак, занимающийся тестированием безопасности, поделился методологией их поиска на нашей конференции Heisenbug, реакция зрителей оказалась очень положительной.


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


Под катом — и текст, и видео. Далее повествование идет от лица Ивана.

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

Как работают Django Class-based views

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

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

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

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

Нулевой даунтайм API на ElasticSearch

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

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

Столкнулась наша команда с двумя из описанных выше проблем: ускорение наполнения и обеспечение минимального даунтайма ответа API. Все это случилось довольно быстро, когда количество потенциальных документов для индексации стало превышать 1 млн записей. До этого момента проблема решалась оптимизацией кода и запросов в БД. Конечно, подготовка такого объема данных и формирование индекса занимает не один час. Усложнило задачу то, что индекс использовался в нескольких ключевых API системы, которыми пользуется мобильное приложение, компании, имеющие интеграцию с нашим сервисом, внутренние инструменты технической поддержки. Над индексом постоянно выполняются CRUD-операции.

В статье будут приводиться команды для управления индексами на примере версии ElasticSearch 5.6. В целом описанный подход не ограничивается версиями, но приведенные curl запросы могут отличаться в зависимости от версии.

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

Реализация словаря в Python 2.7

Время на прочтение15 мин
Количество просмотров115K
В этой статье пойдёт речь о том, как реализован словарь в Python. Я постараюсь ответить на вопрос, почему элементы словаря не упорядочены, описать, каким образом словари хранят, добавляют и удаляют свои элементы. Надеюсь, что статья будет полезна не только людям, изучающим Python, но и всем, кто интересуется внутренним устройством и организацией структур данных.
Читать дальше →
Всего голосов 65: ↑64 и ↓1+63
Комментарии37

Немного внутренностей словарей в CPython (и PyPy)

Время на прочтение9 мин
Количество просмотров58K
Внутреннее устройство словарей в Python не ограничивается одними лишь бакетами и закрытым хешированием. Это удивительный мир разделяемых ключей, кеширования хешей, DKIX_DUMMY и быстрого сравнения, которое можно сделать ещё быстрее (ценой бага с примерной вероятностью в 2^-64).

Если вы не знаете количество элементов в только что созданном словаре, сколько памяти расходуется на каждый элемент, почему теперь (CPython 3.6 и далее) словарь реализован двумя массивами и как это связано с сохранением порядка вставки, или просто не смотрели презентацию Raymond Hettinger «Modern Python Dictionaries A confluence of a dozen great ideas». Тогда добро пожаловать.


Впрочем, люди знакомые с лекцией, тоже могут найти немного подробностей и свежей информации, и для совсем новичков, не знакомых с бакетами и закрытым хешированием, статья тоже будет интересна.
Всего голосов 24: ↑24 и ↓0+24
Комментарии7

Nginx. О чем не пишут в книгах

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

Эта статья родилась случайно. Слоняясь по книжному фестивалю и наблюдая, как дочка пытает консультантов, заставляя их искать Иэна Стюарта, мой глаз зацепился за знакомые буквы на обложке: "Nginx".

Надо же, на полках нашлось целых три книги - не полистать их было бы преступлением. Первая, вторая, третья... Ощущение, будто что-то не так. Ну вроде страниц много, текст связный, но каково содержание? Установка nginx, список переменных и модулей, а дальше docker, ansible. Открываем вторую: wget, лимиты запросов и памяти, балансировка, kubernetes, AWS. Третья: GeoIP, авторизация, потоковое вещание, puppet, Azure. Ребята, а где про то, как вообще работает nginx? На кого рассчитаны ваши книги? На состоявшегося админа, который и так знает архитектуру этого веб-сервера? Да он вроде с базовыми настройками и сам справится. На новичка, который не знает как пользоваться wget? Вы уверены, что ему знание о существовании ngx_http_degradation_module и тем паче "облака" важнее порядка прохождения запроса?

Итак. О чем не пишут в книгах.
(здесь и дальше мы говорим только о NGX_HTTP_)

Фазы обработки запроса
Всего голосов 86: ↑86 и ↓0+86
Комментарии11

Как написать расширение для GNOME Shell: режим «Do Not Disturb»

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

Началось все с переезда на новую версию одного дистрибутива Linux, а там — скандально известный GNOME Shell (GH для краткости), на Javascript. Ну ок, на JS так на JS, работает — и ладно.


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


Что делать? Решение написать расширение "Не беспокоить" пришло не сразу, очень не хотелось писать велосипед и/или увязнуть в разработке/коде/тоннах ошибок, но решился, и вот хочу поделиться с Хабром своим опытом.1


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

Как я чуть не выкинул 150к на ветер или история установки приточной вентиляции в квартире

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

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


Читать дальше →
Всего голосов 285: ↑280 и ↓5+365
Комментарии595

Как попасть в состояние потока?

Время на прочтение4 мин
Количество просмотров24K
Для меня попадание в состояние потока является единственным способом продуктивной работы над сложными программными проектами. И я полагаю, что разработчик может так организовать свою жизнь, чтобы как можно сильнее удлинить время, которое он каждый день может проводить в этом состоянии. Тут я хочу рассказать о том, что лично я пытаюсь делать для того, чтобы чаще попадать в состояние потока.

По полочкам:
Всего голосов 63: ↑45 и ↓18+44
Комментарии64

Когда код это данные

Время на прочтение8 мин
Количество просмотров11K
«Представь, что люди как бы находятся в подземном жилище наподобие пещеры, где во всю её длину тянется широкий просвет. С малых лет у них на ногах и на шее оковы, так что людям не двинуться с места, и видят они только то, что у них прямо перед глазами, ибо повернуть голову они не могут из-за этих оков.»

© Платон «Государство», книга 7: Миф О Пещере
Время от времени мне пишут с просьбой помочь в написании кода, который меняет код (далее кодмод, от слов код и модификация - изменение) и сегодня я расскажу об этом нехитром процессе в новом формате, вдохновлённом диалогами Платона, он будет содержать вопросы обратившегося ко мне человека по поводу линтера нового поколения, и мои развёрнутые ответы.

Забегая вперед скажу, что результатом общения стал loader ESTrace, который при запуске может показать что-то вроде:


Но об этом позже, а сейчас:
Следим за функциями
Всего голосов 40: ↑35 и ↓5+49
Комментарии2

Найти подстроку в строке

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

Алгоритм поиска строки Бойера — Мура — алгоритм общего назначения, предназначенный для поиска подстроки в строке.

Давайте попробуем найти вхождение подстроки в строку.

Подготовка к собеседованию
Всего голосов 14: ↑12 и ↓2+18
Комментарии12

Оптимизация платежей в Dropbox при помощи машинного обучения

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

Представьте ситуацию: вам нужно воспользоваться оплаченным (как вы думаете) сервисом — и вдруг оказывается, что он отключен за неуплату. Такая неприятность портит впечатление от бренда, снижая поток прибыли, а внезапно отключенный клиент может не вернуться к сервису. К старту курса о глубоком и машинном обучении делимся переводом о том, как эту проблему решили в Dropbox, где обнаружили, что внедрение ML в обработку клиентских платежей помогает пользователям оставаться довольными и работает лучше внедрённых за 14 лет политик биллинга.

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

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность