• Ищем свободное парковочное место с Python

    • Translation
    image

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

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

    image

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

    Поэтому давайте немного развлечёмся и напишем точную систему уведомлений о свободной парковке с помощью Python и глубокого обучения
    Читать дальше →
  • Как мы делали облачный FaaS внутри Kubernetes и побеждали в Тинькофф-хакатоне


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

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

      Задача нетривиальная и может быть решена множеством способов, в чем мы убедились на демонстрации финальных презентаций проектов участников. На хакатоне было 6 команд по 5 человек, у всех участников были хорошие проекты, но наша платформа оказалась наиболее конкурентоспособной. У нас получился очень интересный проект, о котором я хотел бы рассказать в данной статье.
      Читать дальше →
      • +14
      • 3.3k
      • 2
    • Знакомьтесь, Apache BookKeeper — реплицируемый сервис журналов


        По роду своей деятельности мне достаточно часто приходится участвовать в проектах, в которых создаются высокодоступные, высокопроизводительные системы для различных рынков — реклама, финтех, сервисы классов SaaS, PaaS. В таких системах применяется вполне устоявшийся набор архитектур и компонентов, которые позволяют эффективно обеспечить соответствие продукта требованиям, например, lambda-архитектура для поточной обработки данных, масштабируемый микросервисный дизайн программного обеспечения, ориентированный на горизонтальное масштабирование, noSQL СУБД (Redis, Aerospike, Cassandra, MongoDB), брокеры сообщений (Kafka, RabbitMQ), распределенные серверы координации и обнаружения (Apache Zookeeper, Consul). Такие базовые инфраструктурные блоки чаще всего позволяют успешно решить большую часть задач и команда разработки не сталкивается с задачами разработки компонентов среднего уровня (middleware), которые, в свою очередь, будут использованы бизнес-ориентированной частью разрабатываемой системы.

        Читать дальше →
      • Удивительно простой обмен сообщениями с Spring Cloud Stream

        Привет, Хабр! Представляю вашему вниманию перевод статьи "Surprisingly simple messaging with Spring Cloud Stream" автора Richard Seroter.

        Существует множество вариантов взаимодействия микросервисов. Вы можете использовать обнаружение сервисов (Service Discovery, например, Spring Cloud Discovery Server/Client в реализации Netflix Eureka) и совершать прямые вызовы. Или можете использовать общую базу данных для обмена результами работы. Но брокеры сообщений продолжают оставаться популярным выбором.

        Они варьируются от простых движков вроде Amazon SQS или RabbitMQ до событийных потоковых процессоров вроде Azure Event Hubs или Apache Kafka и вплоть до служебных шин вроде Microsoft BizTalk Server. Когда разработчики выбирают один из движков, они критически нуждаются в знаниях об их эффективности. Как вы можете повысить производительность разработчиков? Для Java разработчиков Spring Cloud Stream предлагает ценную абстракцию.

        Spring Cloud Stream предлагает интерфейс для разработчиков, которым не требуются нюансы базового брокера. Этот брокер, Apache Kafka или RabbitMQ, настраивается самим Spring Cloud Stream. Связь с брокером и обратно от брокера осуществляется также через библиотеку Stream.

        Что меня волнует, так это то, что все брокеры обрабатываются одинаково. Spring Cloud Stream нормализует поведение, даже если оно не является родным для брокера. Например, хотите создать конкурирующую модель консюмера для своих клиентов или секционировать обработку? Эти концепции ведут себя по-разному в RabbitMQ и Kafka. Нет проблем. Spring Cloud Stream делает работу одинаково прозрачной. Давайте фактически попробуем оба этих сценария.
        Читать дальше →
        • +12
        • 10.6k
        • 3
      • Монады с точки зрения программистов (и немного теории категорий)

          Введение


          Как узнать, что человек понял, что такое монады? Он сам вам об этом расскажет в первые 5 минут общения и обязательно попробует объяснить. А ещё напишет об этом текст и по возможности где-нибудь его опубликует, чтобы все остальные тоже поняли, что такое монады.


          Среди функциональных программистов, особенно на Haskell, монады стали чем-то вроде локального мема. Их часто пытаются объяснить, отталкиваясь от частных случаев и сразу приводя примеры использования. Из-за этого слушатель может не уловить основную суть понятия, а монады так и останутся чёрной магией, ну или просто средством костылизации побочных эффектов в чисто функциональных языках.


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


          Моё изложение во многом основывается на книге Бартоша Милевски "Теория категорий для программистов", которая создавалась как серия блогпостов, доступна в PDF, а недавно вышла в бумаге.


          Примеры приводятся на Haskell, предполагается, что читатель знаком с синтаксисом и основными понятиями языка. В упомянутой книге есть примеры и на С++, можете сравнить чистоту и понятность кода.


          Читать дальше →
        • Kubernetes: поразительно доступное решение для персональных проектов

          • Translation
          Здравствуйте, коллеги!

          В январе у нас наконец-то выходит долгожданная книга по Kubernetes. Речь о «Mastering Kubernetes 2nd edition» Джиджи Сайфана:


          Мы не решились издавать книгу по Kubernetes около года назад, так как на тот момент технология определенно напоминала дредноут для суперкорпораций. Однако, ситуация меняется, в подтверждение чего мы предлагаем почитать большую статью Калеба Докси (Caleb Doxsey), написавшего, кстати, книгу о языке Go. Аргументы господина Докси очень интересны, и мы надеемся, что после ознакомления с ними вам действительно захочется попробовать Kubernetes на практике.
          Читать дальше →
        • Вся правда о linux epoll

            Ну или почти вся...



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


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


            Anyone can wield an axe, but it takes a true warrior to make it sing melees melody.

            Я предполагаю, что читатель знаком с epoll, по крайней мере прочел страницу man. О epoll, poll, select написано достаточно много, чтобы каждый кто разрабатывал под Linux, хоть раз о нем слышал.

            Читать дальше →
          • Шизотипическое расстройство: взгляд изнутри


              На Хабре уже писали о различных расстройствах, но как-то так получается, что тема шизотипического расстройства остается не раскрытой. Да и в сети сложно найти информацию для широкого круга людей по этой теме. Часто можно встретить много раз скопированные копирайтерами тексты со множеством неточностей и откровенными мифами, а еще чаще — полную противоположность, заумные тексты, написанные врачами для врачей. Так, согласно DSM, шизотипическое расстройство — это демонстрация пациентом первазивной модели социального и межличностного дефицита, отмеченного острым дискомфортом и сниженной способностью к формированию близких отношений, который испытывает когнитивное и перцептивное искажение, а также проявляет эксцентричность в поведении, начинающеюся с ранней юности и представленную в различных контекстах. Если вы ни слова из этого не поняли — добро пожаловать под кат. Сегодня мы посмотрим, как все это выглядит изнутри.

              Читать дальше →
            • Как освоить иностранный язык без преподавателя. Часть 2. «Пошаговая стратегия»

                Languages are not taught, they are learnt!


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


                Примечание: Материалы статьи опираются на исследования Е.Д. Авериной, Д.Б. Никуличевой, Э.В. Гуннемарка и П.Нейшна, пропущенные через призму моего восприятия и опыт изучения 3 иностранных языков.

                Читать дальше →
              • Как освоить иностранный язык без преподавателя. Часть 1. «Мой опыт»

                  Примечание: статья в целом актуальна для любого европейского языка, в том числе для английского.


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


                  таблица-вертушка неправильных глаголов


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

                  Читать дальше →
                • 8 учебных проектов

                  • Translation
                  «Мастер совершает больше ошибок, чем новичок — попыток»

                  Предлагаем 8 вариантов проектов, которые можно сделать «по фану», дабы получить реальный опыт разработки.

                  Проект 1. Клон Trello


                  image


                  Клон Trello от Indrek Lasn .

                  Что вы освоите:

                  • Организация маршрутов обработки запросов (Routing).
                  • Drag and drop.
                  • Как создавать новые объекты (доски, списки, карточки).
                  • Обработка и проверка входных данных.
                  • Со стороны клиента: как использовать локальное хранилище, как сохранять данные в локальном хранилище, как читать данные из локального хранилища.
                  • Со стороны сервера: как использовать базы данных, как сохранять данных в базе, как читать данные из базы.

                  Тут пример репозитория, сделанного на React+Redux.
                  Читать дальше →
                • Dive into ICO


                    В статье мы рассмотрим технические аспекты подготовки и проведения ICO. Это продолжение статьи моего коллеги «Технические особенности проведения ICO. Начало», и здесь мы поговорим подробнее о некоторых технических вопросах, связанных со смарт-контрактами сети Ethereum.

                    Читать дальше →
                  • Работа со смарт-контрактами через Ethereum RPC API

                    • Tutorial


                    Всем привет. В этой статье мы рассмотрим основные приемы по публикации смарт-контрактов и взаимодействию с ними с использованием Ethereum RPC API. Обсуждаемые методы API позволяют решать такие задачи:

                    1. Создание счёта.
                    2. Создание корректного смарт-контракта.
                    3. Получение информации со смарт-контракта.
                    4. Изменение состояния смарт-контракта.

                    Читать дальше →
                  • Внутренние механизмы ТСР, влияющие на скорость загрузки: часть 2

                    • Translation


                    В первой части мы разобрали «тройное рукопожатие» TCP и некоторые технологии — TCP Fast Open, контроль потока и перегрузкой и масштабирование окна. Во второй части узнаем, что такое TCP Slow Start, как оптимизировать скорость передачи данных и увеличить начальное окно, а также соберем все рекомендации по оптимизации TCP/IP стека воедино.
                    Читать дальше →
                    • +14
                    • 19.2k
                    • 6
                  • Профилирование и оптимизация веб-приложений на Go

                    • Translation

                    enter image description here


                    Привет, меня зовут Павел Мурзаков, я – разработчик в команде Features в Badoo. Нам важно, чтобы наши сервисы потребляли как можно меньше ресурсов, поскольку каждый дополнительный сервер стоит денег. Поэтому мы часто профилируем и оптимизируем код. Часть наших демонов написана на Go, с оптимизацией кода на котором мне пришлось работать в последнее время. Благо в стандартной библиотеке Go есть множество готовых инструментов для этого.


                    Недавно мне попалась эта статья, в которой собрана информация о многих инструментах и на конкретном примере показано, как начать ими пользоваться. Кроме того, в ней есть несколько хороших рецептов по написанию эффективного кода. Эта информация будет полезна любому начинающему Go-разработчику (более продвинутые тоже смогут найти что-то для себя), поэтому я сделал для вас перевод. Enjoy!

                    Читать дальше →
                    • +62
                    • 24.4k
                    • 5
                  • 10 мифов о Docker, которые пугают разработчиков

                    • Translation

                    Источник: 'Nova typis transacta navigatio' (Linz: s.n., 1621), p.12 (British Library, G.7237).


                    Часто во время разговоров о Docker я слышу мнения, с которыми не совсем согласен.


                    «Docker по своей сути предназначен для крупных компаний»

                    «под OSx у него экспериментальная поддержка, под Windows работает еле-еле»

                    «Я не уверен, что смогу быстро развернуть его локально»

                    … и еще много всякого.

                    В этих утверждениях есть доля истины (см. ниже мифы 3 и 5), но она мала, и по большей части реальная картина получается искаженной.


                    А есть еще и наполненные жаргоном статьи о том, как при использовании немалого количества фреймворков обрабатывать 10к миллионов запросов в секунду. И это с помощью всего лишь 30к контейнеров при автоматизации 5к микросервисов, размещенных на шести сотнях облачных виртуальных машин…


                    Что ж, нетрудно догадаться, почему Docker окружен таким количеством мифов.


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


                    Давайте поговорим о самых распространенных мифах – тех, с которыми я сталкивался и в которые верил, – и попробуем найти в них истину, а также решения, если таковые имеются.

                    Читать дальше →
                  • Интересные алгоритмы кластеризации, часть вторая: DBSCAN

                      Часть первая — Affinity Propagation
                      Часть вторая — DBSCAN
                      Часть третья — кластеризация временных рядов
                      Часть четвёртая — Self-Organizing Maps (SOM)
                      Часть пятая — Growing Neural Gas (GNG)

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


                      Читать дальше →
                      • +24
                      • 35k
                      • 4
                    • Особенности разработки Telegram бота с Google API в Docker

                        Коротко о боте: получает список YouTube-каналов пользователя и уведомляет о новых видео с возможностью напомнить о нем позже.

                        В статье расскажу об особенностях написания этого бота и взаимодействия с Google API. Я люблю краткость, поэтому в статье будет мало «воды».

                        На какие вопросы ответит статья:

                        • Где взять внешний адрес сайта для Webhook
                        • Где взять HTTPS-сертификат как его использовать, чтобы Telegram ему доверял
                        • Как передавать данные и обрабатывать нажатия на Inline-кнопки
                        • Как получить вечный OAuth токен для Google API
                        • Как передать данные пользователя через OAuth callback url
                        • Как получить бесплатный домен 3 уровня

                        Стэк:

                        1. Back-end: Node.js + Express.js
                        2. БД: Mongo.js + mongoose
                        3. Пакетный менеджер: Yarn (он действительно быстрый)
                        4. Telegram-бот фреймворк: Telegraf
                        5. Продакшн: Docker + Docker Compose + Vscale.io
                        Читать дальше →
                      • Автоматическое развёртывание Django из GitLab

                          В этой статье я опишу настройку автоматического развёртывания веб-приложения на стеке Django + uWSGI + PostgreSQL + Nginx из репозитория на сервисе GitLab.com. Изложенное также применимо к кастомной инсталляции GitLab. Предполагается, что читатель располагает опытом в создании веб-приложений на Django, а так же опытом администрирования Linux-систем.

                          Читать дальше →