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

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

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

Unit тесты на практике

Время на прочтение12 мин
Количество просмотров146K
В последнее время появилось и продолжает появляться достаточно много публикаций на тему разработки через тестирование. Тема достаточно интересная и стоит того, чтобы посвятить её исследованию какую-то часть своего времени. В нашей команде мы используем модульное тестирование уже на протяжении года. В этой статье я хочу рассказать о том, что получилось и какой опыт в итоге мы приобрели.

Сразу оговорюсь, что примеры приводятся применительно к языку C# и платформе .NET. Соответственно, в других языках/платформах подходы и реализации могут отличаться.

Итак…
Читать дальше →
Всего голосов 34: ↑31 и ↓3+28
Комментарии56

Как стоит и как не стоит использовать HttpClient в .NET

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

Всем привет! Меня зовут Андрей Федотов, я бэкенд-разработчик в одной из команд платформы интернета вещей ZIIoT Oil&Gas. В этой статье я рассказываю, что нужно знать и как работать с HttpClient в .NET, чтобы не получить трудноподдерживаемый и сложный код и не нарваться на глобальный рефакторинг.

Читать далее
Всего голосов 12: ↑8 и ↓4+7
Комментарии17

Трейсим .NET микросервисы через OpenTelemetry

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

Трейсинг (возможность отслеживания пути запроса между сервисами в микросервисной архитектуре) - критический важное требование функционирования более-менее крупных систем.

У Uber - тысячи микросервисов. А у Netflix - несколько тысяч

В каком сервисе возникла ошибка? Сервис упал или просто ошибка сети? Что за ошибка возникла?

Стоп!
Рим не за один день был построен

Поэтому начнем с малого и подключим трейсинг к обычной микросервисной системе на ASP.NET Core.

Поможет нам в этом OpenTelemetry

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

Алгоритм пересечения полигонов

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

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

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

Мы хотим, чтобы серверы падали одновременно

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

К нам обратился заказчик из сфера развлекательного видеостриминга с интересной проблемой - у него сервера падали не одновременно. А очень хотелось бы добиться синхронности.

Сервера, которые смущали заказчика работали в роли бэкенда для хранения видеофайлов. По сути, это было множество узлов, содержащих десятки терабайт видеофайлов, которые предварительно были нарезаны в разном разрешении конвертерами. Затем, все эти миллионы файлов отдавались во внешний мир с помощью nginx + kaltura, что позволяло перепаковывать на лету mp4 в сегменты DASH/HLS. Это позволяло хорошо переносить даже высокие нагрузки, отдавая плеером только нужные сегменты без резких всплесков.

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

Читать далее
Всего голосов 41: ↑39 и ↓2+56
Комментарии36

Век поиска кратчайшего решения задачи о кратчайшем пути

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

TL;DR Очень подробный разбор алгоритмов решения задачи о кратчайшем пути от классики до двунаправленного А* и ALT с кодом и примерами на OSM

Люди пытались найти более быстрые способы передвижения на протяжении всей своей истории. Появление качественной дорожной системы в римской империи в своё время привело к её расцвету, но со временем выяснилось, что и в продуманных дорожных системах бывают забавные изъяны, как например в небезызвестной задаче о кёнигсбергских мостах, считающейся отправной точкой возникновения теории графов. Неудивительно и то, что с развитием вычислительной техники логистические задачи стали одними из первых, над которыми трудились первопроходцы компьютерных наук. Задача о кратчайшем пути -- одна из них, звучит достаточно просто: есть несколько городов и дорог, соединяющих пару городов между собой, мы хотим попасть из города А в город Б пройдя при этом минимальное расстояние. Первый системный подход к этой задаче был описан в работе Эгервари в 1931г., спустя 25 лет Эдсгер Дейкстра придумал алгоритм, который сейчас является частью любого уважающего себя базового курса алгоритмов на графах. На нём же, будем честны, заканчиваются знания о кратчайших путях у большинства профессиональных разработчиков, ибо сценариев, где реализации с википедии/stackoverflow будет не хватать, крайне мало.

Может показаться, что на самом деле просто не было существенного прогресса с 60х годов, так как Дейкстра предоставил почти асимптотически оптимальный алгоритм решения задачи. На самом деле нет, прогресс был и придумали много чего интересного, хоть и действительно с того времени фокус сместился на другие задачи. Приглашаю под кат если интересно узнать что такого напридумывали, что используется в современных логистических системах, почему меня огорчает отсутствие учёта флага единства в HOMM3 при расчёте пути, ну и наконец, что за мужики на картинке выше рядом с Дейкстрой?

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

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

Время на прочтение15 мин
Количество просмотров108K
Пользуетесь ли вы структурами данных и алгоритмами в повседневной работе? Я обратил внимание на то, что всё больше и больше людей считает алгоритмы чем-то таким, чем, без особой связи с реальностью, технические компании, лишь по собственной прихоти, интересуются на собеседованиях. Многие жалуются на то, что задачи на алгоритмы — это нечто из области теории, имеющей слабое отношение к настоящей работе. Такой взгляд на вещи, определённо, распространился после того, как Макс Хауэлл, автор Homebrew, опубликовал твит о том, что произошло с ним на собеседовании в Google:

Google: 90% наших инженеров пользуются программой, которую вы написали (Homebrew), но вы не можете инвертировать бинарное дерево на доске, поэтому — прощайте.

Хотя и у меня никогда не возникало нужды в инверсии бинарного дерева, я сталкивался с примерами реального использования структур данных и алгоритмов в повседневной работе, когда трудился в Skype/Microsoft, Skyscanner и Uber. Сюда входило написание кода и принятие решений, основанное на особенностях структур данных и алгоритмов. Но соответствующие знания я, по большей части, использовал для того чтобы понять то, как созданы некие системы, и то, почему они созданы именно так. Знание соответствующих концепций упрощает понимание архитектуры и реализации систем, в которых эти концепции используются.



В эту статью я включил рассказы о ситуациях, в которых структуры данных, вроде деревьев и графов, а так же различные алгоритмы, были использованы в реальных проектах. Здесь я надеюсь показать читателю то, что базовые знания структур данных и алгоритмов — это не бесполезная теория, нужная только для собеседований, а что-то такое, что, весьма вероятно, по-настоящему понадобится тому, кто работает в быстрорастущих инновационных технологических компаниях.
Читать дальше →
Всего голосов 54: ↑52 и ↓2+67
Комментарии53

Удивительный мир бинов банковских карт

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

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

Разобраться
Всего голосов 26: ↑23 и ↓3+35
Комментарии5

Как это устроено: видеоконференции ВКонтакте на безлимитное число участников

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

Сервисы для онлайн-общения и всевозможная доставка — наверное, самые востребованные и активно развивающиеся отрасли 2020–21-го. Мы ВКонтакте тоже не остались в стороне: работая удалённо с первых месяцев пандемии, запустили групповые видеозвонки. Сперва они вмещали одновременно 128 человек, а теперь мы полностью сняли лимиты на число участников.

В этой статье рассказываем, с какими трудностями сталкивается большинство сервисов звонков. И показываем, что нам понадобилось сделать и изобрести, чтобы преодолеть ограничения по числу участников. Попутно отвечаем на вопросы, которые прилетали со всех сторон на волне интереса к технологиям real-time коммуникации: как устроены Zoom и Clubhouse, что взять для своего сервиса звонков из open source, как встроить звонки в приложение. Про эффективную доставку тоже будет — но не еды, а данных, аудио и видео.

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

11 худших особенностей Windows 11, и как их исправить

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


Windows 11 вызывает смешанные чувства. С одной стороны, многие люди с удовольствием остались бы и на Windows 10. С другой стороны, есть вполне достойные причины обновиться до 11-й версии – улучшенное переключение между окнами, улучшенный контроль над виртуальными рабочими столами, свежие дизайнерские штучки – типа закруглённых уголков у окон.

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

Предлагаем вашему вниманию худшие особенности Windows 11 и пути их исправления – или, по крайней мере, смягчения.
Читать дальше →
Всего голосов 80: ↑69 и ↓11+78
Комментарии343

Опасные «вкусняшки». Ядовитые лесные ягоды. Памятка для детей и взрослых

Время на прочтение14 мин
Количество просмотров74K
Почитали читатели мои статьи про ядовитые растения и внезапно озаботились дикорастущими ягодами. Ведь ухватить растение желающих намного меньше, чем попробовать незнакомую ягоду яркой расцветки. Я решил отреагировать, и представить вашему вниманию шорт-лист ядовитых лесных ягод (исчерпывающий?). По всем вопросам, в т.ч. с фотографиями незнакомых растений — обращаться в тг-канал LAB-66

Красна ягодкА, да на вкус горькА
Всего голосов 47: ↑42 и ↓5+51
Комментарии142

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

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

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

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

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

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

Как работает single sign-on (технология единого входа)?

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

Что такое single sign-on?


Технология единого входа (Single sign-on SSO) — метод аутентификации, который позволяет пользователям безопасно аутентифицироваться сразу в нескольких приложениях и сайтах, используя один набор учетных данных.


Как работает SSO?


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

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

Как Airbnb скрывает преступления при помощи тайной команды «чистильщиков»

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

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

Журналисты Bloomberg выяснили, что компания постоянно сталкивается с преступлениями в арендованных квартирах и разбирается с этими случаями особая команда численностью в 100 человек, многие из которых раньше служили в армии или работали в полиции. Когда во время пребывания в арендованной квартире что-то идёт не так, как надо, в дело вступают эти парни, чтобы убрать трупы успокоить гостей и хозяев, замыть кровь помочь семьям и предотвратить PR-катастрофу.

Читать далее
Всего голосов 54: ↑40 и ↓14+46
Комментарии141

Линус Торвальдс остался недоволен рядом моментов в использовании Rust для Linux

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

В прошлом году разработчики ядра Linux предложили использовать Rust для нового встроенного кода. В марте 2021 года эта идея была частично реализована — в состав ветки linux-next, на которой будет базироваться Linux 5.13, включили начальный набор компонентов для разработки драйверов устройств на Rust.

Тогда же была опубликована документация по использованию Rust в ядре Linux с практическими примерами. Изначально Торвальдс не выступал резко против нововведений (не делает этого он и сейчас). Заявил лишь, что нужно проверить, как все эти новинки работают на практике. Сейчас Линус Торвальдс провел рецензирование патчей с реализацией возможности создания драйверов на Rust для Linux и высказал ряд критических замечаний.
Читать дальше →
Всего голосов 76: ↑63 и ↓13+73
Комментарии140

C++20: удивить линкер четырьмя строчками кода

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

Представьте себе, что вы студент, изучающий современные фичи C++. И вам дали задачу по теме concepts/constraints. У преподавателя, конечно, есть референсное решение "как правильно", но для вас оно неочевидно, и вы навертели гору довольно запутанного кода, который всё равно не работает. (И вы дописываете и дописываете всё новые перегрузки и специализации шаблонов, покрывая всё новые и новые претензии компилятора).

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

Сперва преподаватель (то есть, я) минимизировал код вот до такого: https://gcc.godbolt.org/z/TaMTWqc1T

Читать далее
Всего голосов 24: ↑23 и ↓1+34
Комментарии28

Откручивание SSL пиннинга в Android приложениях

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

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

В наше время для взаимодействия компонентов веб-приложений используется протокол HTTPS, в основе которого лежат протоколы HTTP и TLS. Просто так перехватить трафик приложения не выйдет, т.к. он зашифрован. Можно, конечно, использовать прокси сервер, который с помощью своего сертификата сможет расшифровать трафик приложения и увидеть все запросы. Однако и средства защиты приложений не стоят на месте. Многие мобильные приложения используют SSL Pinning.

SSL Pinning – это внедрение SSL сертификата, который используется на сервере в код мобильного приложения. Таким образом, приложение не использует хранилище сертификатов устройства и не будет работать с сертификатом, который мы ему подсунули.

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

Вычислительные устройства, которые опередили своё время

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

В наши дни скорость работы процессора измеряется в гигагерцах, а объём оперативной памяти – в гигабайтах. Современные компьютеры работают в тысячу раз быстрее тех, что начали появляться в домах несколько десятилетий назад. Нетрудно заметить, что вычислительный процесс в последнее время продвинулся далеко вперёд и стал приобретать промышленные масштабы. Но, быть может, на самом деле мы ушли не так далеко, как нам кажется?

От аналоговых и механических вычислений до ранних цифровых снимков другой планеты; от первых мультимедийных средств до изобретения интернета ещё до того, как он стал так называться – история знает много примеров технологий высокого уровня, которые по тем или иным причинам не пользовались популярностью. В этой статье мы расскажем о достижениях вычислительной техники, которые казались невероятными для своего времени. Мы рассмотрим несколько примеров вычислительных устройств до прихода цифровой эпохи, взглянем на опережавшие своё время технологии 20-го века и уделим особое внимание самой безумной в плане технологических экспериментов декаде —80-ым.



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

Адаптивная балансировка нагрузки или как повысить надёжность микросервиса

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

Привет, меня зовут Геннадий, я работаю в Ozon, занимаюсь разработкой backend-сервисов.

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

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

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

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

Ожидания vs реальность: 3 мифа о запуске маркетинга на рынке США

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

Вот уже почти пять лет я занимаюсь маркетингом на рынке США, два из них развиваю собственный SaaS-стартап. За это время я, с одной стороны, протестировал множество инструментов продвижения на рынке США, а с другой — в рамках работы в своем агентстве пообщался с десятками основателей проектов из постсоветских стран. Такое общение позволило мне понять ожидания, которые есть у русскоязычных фаундеров при старте маркетинга в США, а работа над своим проектом помогла узнать, как всё работает на самом деле.

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

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

Информация

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