• Автоматическое развёртывание Django из GitLab

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

      Читать дальше →
    • Заметки об объектной системе языка Python ч.3

        Третья часть заметок об объектной системе python'a (первая и вторая части). В статье рассказывается о том, почему c.__call__() не то же самое, что и c(), как реализовать singleton с помощью метаклассов, что такое name mangling и как оно работает.

        Читать дальше →
        • +66
        • 23,7k
        • 7
      • Лабораторная работа: введение в Docker с нуля. Ваш первый микросервис

        • Tutorial
        Привет, хабрапользователь! Сегодня я попробую представить тебе очередную статью о докере. Зачем я это делаю, если таких статей уже множество? Ответов здесь несколько. Во-первых не все они описывают то, что мне самому бы очень пригодилось в самом начале моего пути изучения докера. Во-вторых хотелось бы дать людям к теории немного практики прямо по этой теории. Одна из немаловажных причин — уложить весь накопленный за этот недолгий период изучения докера опыт (я работаю с ним чуть более полугода) в какой-то сформированный формат, до конца разложив для себя все по-полочкам. Ну и в конце-концов излить душу, описывая некоторые грабли на которые я уже наступил (дать советы о них) и вилы, решение которых в докере просто не предусмотрено из коробки и о проблемах которых стоило бы задуматься на этапе когда вас распирает от острого желания перевести весь мир вокруг себя в контейнеры до осознавания что не для всех вещей эта технология годна.

        Что мы будем рассматривать в данной статье?

        В Части 0 (теоретической) я расскажу вам о контейнерах, что это и с чем едят
        В Частях 1-5 будет теория и практическое задание, где мы напишем микросервис на python, работающий с очередью rabbitmq.
        В Части 6 — послесловие
        Читать дальше →
      • Как применять Linux epoll в Python

        • Перевод
        • Tutorial
        В статье описывается:
        • Примеры использования блокирующих сокетов
        • Преимущества асинхронных сокетов и Linux epoll
        • Примеры асинхронного использования сокетов через epoll
        • Вопросы производительности
        • Исходный код
        Читать дальше →
      • Архитектура поиска в Booking.com



          На конференции HighLoad++ 2016 Иван Круглов рассказал про то, как сервис Booking.com развивал свой поиск — одну из центральных функций системы интернет-бронирования отелей.

          Всем привет! Я Ваня, пишу на Perl — можете мне посочувствовать. [Лёгкий смех в зале и со сцены.]

          Ладно. По-серьёзному, меня зовут Иван Круглов, я из компании Booking.com, из города Амстердам. Там я работаю последние 4 года, где последние года полтора я работал в команде, которая делает наш поиск лучше.

          Начать я хочу немного издалека. Вот с этой фразы:
          Читать дальше →
        • Метаклассы в Python

          • Перевод
          Как сказал один из пользователей StackOverflow, «using SO is like doing lookups with a hashtable instead of a linked list». Мы снова обращаемся к этому замечательному ресурсу, на котором попадаются чрезвычайно подробные и понятные ответы на самые различные вопросы.

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

          Читать дальше →
        • Пользовательские атрибуты в Python

          Вы когда нибудь задумывались о том, что происходит, когда вы ставите точку в python? Что скрывает за собой символ str(“\u002E”)? Какие тайны он хранит? Если без мистики, вы знаете как происходит поиск и установка значений пользовательских атрибутов в python? Хотели бы узнать? Тогда… добро пожаловать!
          Читать дальше →
        • Русификация озвучки Xiaomi Robot Vacuum

          • Tutorial
          image

          Приветствую!


          Есть такая замечательная библиотека python-miio, позволяющая управлять многими гаджетами Xiaomi: пылесосом, очистителем/увлажнителем воздуха, лампами и тд. В процессе чтения документации я наткнулся на в целом бесполезную, но занятную возможность заменить стандартную озвучку робота-пылесоса на свою. А поскольку на Гиктаймс мне доселе ничего подобного не попадалось, и бытовые гаджеты Xiaomi пользуются популярностью, я решил, что возможно описание процесса окажется для кого-то полезным.
          Читать дальше →
        • Python: метапрограммирование в продакшене. Часть первая

            Многие считают, что метапрограммирование в Python излишне усложняет код, но если использовать его правильно, то можно быстро и элегантно реализовать сложные паттерны проектирования. Помимо этого, такие известные Python-фреймворки, как Django, DRF и SQLAlchemy, используют метаклассы, чтобы обеспечить легкую расширяемость и простое переиспользование кода.



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

            Читать дальше →
            • +30
            • 15,8k
            • 7
          • Своя криптовалюта на ethereum



              Общая рыночная капитализация глобального рынка криптовалют за последний год выросла с $6 млрд (в январе 2016 года) до $28 млрд (на текущий момент). С начала 2017 года рынок криптовалют вырос примерно в полтора раза. На биржах торгуются уже больше сотни разных криптовалют. Крупные организации объединяются в консорциумы, чтобы выпускать свою валюту. Даже государства делают свои национальные криптовалюты. Технологии блокчейна дошли до такого уровня, что уже почти любой может запустить свою криптовалюту, чем мы в этой статье и займемся. Легче всего создать свои монеты на смарт контрактах на базе ethereum.

              Читать дальше →
            • Визуальные тесты с Galen Framework. Улучшаем читабильность кода

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



                Читабельность — одно из важных свойств любого тест-кода. Один мой сотрудник даже утверждал, что читабельность тестов важнее читабельности основного кода, т.к. именно тест будет входной точкой при попытке разобраться, как работает какой-либо функционал в приложении. Мне эта идея понравилась, и я решил применить ее для визуальных тестов в Galen Framework. Моей целью было написать тест, прочтя который, станет понятно, как должен выглядеть сайт в разных размерах браузера. Давайте взглянем на самые распространенные случаи при тестировании верстки адаптивного сайта и попробуем разобраться, как же улучшить наши тесты.
                Читать дальше →
              • Варианты проектирования БД

                  Все люди, вовлеченные в проектирование различных БД, думаю, нередко задаются вопросом о нужной структуре. На данный момент, есть два варианта хранения данных, каждый из которых, в свою очередь, имеет ряд своих недостатков.

                  1. Объединенное хранение

                  Например, есть таблица типов объектов (ObjectsTypes), таблица самих объектов (Objects) и их свойств (ObjectsFields). По желанию, можно хранить еще и типы полей-свойств, это не принципиально.
                  Связи между таблицами определены однозначно (объект имеет один тип (typeID) и ряд свойств, связанных с родительским объектом полем objectID), между объектами связь осуществляется и с помощью древовидной структуры (родитель ← ребенок) и путем заведения отдельной таблицы (ObjectsRelations) для сетевой структуры, в которой дочерний элемент может иметь несколько родительских.

                  2. Индивидуальное хранение

                  Если представлять эту реализацию на примере, то для хранения блогов нужна таблица Blogs с полями, относящимися к нему, таблица BlogsTopics, хранящая посты и их свойства, таблица BlogsVotes, содержащая все пользовательские голоса и т.д. Можно до бесконечности развивать этот пример — смысл такого хранения в том, что для каждого типа данных создается своя таблица (если нужно, то несколько).

                  Я считаю, что для индивидуальных решений, например, для системы Хабры, идеально подошел бы второй вариант, а первый можно использовать в коммерческих решениях (как, собственно, многие и делают).
                  Хотелось бы услышать неозвученные мной доводы в пользу каждого из методов.
                • Интернет вещей на ESP8266

                    Мы разработали интересное устройство – WI-FI реле МР3500 на 2 канала. Сердцем данного устройства является самый популярный на данный момент чип ESP8266. Первое, о чем вы подумали, это же «Интернет вещей!», да, вы совершенно правы.



                    Чем же так интересен чип ESP8266 или, как его называют, «народный wi-fi»? На фото вы можете его видеть, он синего цвета. Дело в том, что ESP8266 является одним из самых высокоинтегрированных и недорогих решений для работы с Wi-Fi и его можно легко использовать в качестве «мозга» будущего изделия. Основных применений в составе готовых устройств два – это обеспечение Wi-Fi связи и организация логики управления домашними приборами с помощью свободных ресурсов встроенного микроконтроллера.
                    Читать дальше →
                  • Делаем собственное Z-Wave устройство на базе Z-Uno

                    • Tutorial
                    Протокол Z-Wave весьма популярен, и существует огромное множество совместимых устройств. Однако все, кто когда либо автоматизировал своё жилище, сталкивались с тем, что чего-то таки не хватает.

                    Кому-то не хватает датчика давления, кому-то датчика дождя, кому-то хочется устройство на 6 реле в одном корпусе, да ещё и на батарейках. А кому-то просто нужно управлять через Z-Wave пылесосом iRobot Roomba.

                    Но всего этого нет в Z-Wave (да и в других протоколах тоже), и производители не торопятся осуществлять все ваши мечты.

                    Мы услышали вашу боль и создали идеальный комбайн. Встречайте Z-Uno, которая сочетает простоту и универсальность. Z-Uno — это Arduino в мире Z-Wave. На этой плате вы можете собрать все ваши устройства мечты и многое другое.
                    Читать дальше →
                  • Arduino + ESP8266 с нуля на примере Wi-Fi термометра, часть первая

                      Часть 1. Подготовка ESP8266

                      Зачем эта статья? На хабре уже есть ряд статей про использование ESP в разных конфигурациях, но почему-то без подробностей о том, как именно все подключается, прошивается и программируется. Типа «я взял ESP, две пальчиковые батарейки, DHT22, закинул в коробку, потряс часик и термометр готов!». В итоге, получается странно: те, кто уже работают с ESP не видят в сделанном ничего необычного, а те, кто хочет научиться — не понимают с чего начать. Поэтому, я решил написать подробную статью о том, как подключается и прошивается ESP, как его связать с Arduino и внешним миром и какие проблемы мне попадались на этом пути. Ссылки на Aliexpress привожу лишь для представления порядка цен и внешнего вида компонентов.

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


                      Читать дальше →
                    • Создаем «Восхитительный» продукт (Minimum Delightful Product)

                      Minimum Viable Product vs. Minimum Delightful Product




                      Одна из наиболее популярных идей, появившаяся в индустрии разработки в последние годы, это концепция «Minimum Viable Product (MVP)» (Минимально Жизнеспособный Продукт). Концентрируясь на создании MVP вы уменьшаете шансы, что вы создадите продукт, который не нужен потребителю. Вы можете воспринимать ее как основу широкой методологии, которая оказывает влияние на заказчика и исследует пользователя продукта в процессе разработки.

                      На первый взгляд MVP отличная идея, потому, что она обращена к главному антипаттерну в продуктовой разработке: создание слишком большого числа фич, в том числе не востребованных, в результате тратится слишком много времени на разработку без запуска проекта или получения реального фидбека от заказчика и пользователей продукта.
                      Читать дальше →
                    • Никто не хочет пользоваться вашим продуктом

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

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

                      О, дружище, мой продукт будет ошеломительным! Он будет наполнен функционалом, опциями и настройками. Люди будут использовать его каждый день и будут любить пользоваться им!
                      — Дизайнер




                      Вот небольшое откровение. Люди на самом деле не вникают в детали используя ваш продукт. Любое время потраченное пользователем на взаимодействие с интерфейсом, кручение ручек, дёрганье тумблеров или нажатие кнопок — это потерянное время. Скорее, люди более заинтересованы в конечном результате и в достижении этого результата самым быстрым, наименее раздражающим и наиболее эффективным образом. И это две фундаментально различные концепции — использование против результата — которые в конечном итоге различают хороший дизайн продукта от плохого дизайна, или в меньшем масштабе — хорошую фичу от плохой.
                      Читать дальше →
                    • Как реализовать почти мгновенное переключение сайта между площадками, когда одна упала

                        image

                        Бывает, сайты падают из-за отказа площадки хостера, каналов и так далее. Я 7 лет работаю в хостинге, и часто вижу такие проблемы.

                        Пару лет назад я понял, что услуга резервной площадки (без доработки их сайта или сервиса) очень важна клиентам. Теоретически тут всё просто:
                        1. Иметь копию всех данных в другом дата-центре.
                        2. При сбое переключать работу на резервный ДЦ.

                        На практике система пережила 2 полные технические реорганизации (сохранение основных идей со сменой значительной части инструментария), 3 переезда на новое оборудование, 1 переезд между поставщиками услуг (переезд из немецкого дата-центра в два российских). На исследование поведения разных систем в реальных условиях под клиентской нагрузкой ушло 2 года.
                        Читать дальше →
                      • Интернет тест-драйв «Мехатроника и робототехника». Нужна помощь Сообщества

                          Привет, Хабр!

                          Пишу — потому что нужна помощь Сообщества.

                          Меня зовут Александр Лемех. Я являюсь руководителем Лаборатории развития робототехники Механико-машиностроительного института УрФУ. 6 лет назад для меня стало очевидным — что будущее за робототехникой и автоматизацией. С тех пор начал заниматься этим направлением.

                          Вначале мы с друзьями-единомышленниками организовали Клуб по развитию робототехники в Уральском федеральном университете, потом я стал в университете преподавать дисциплину «Промышленные роботы» и другие, 2 года назад удалось основать Лабораторию развития робототехники Механико-машиностроительного института УрФУ.

                          Видео о нашей лаборатории:


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