• Обьясните внятно что такое SRE(обеспечения надежности веб-сервисов)?

    xSkyFoXx
    @xSkyFoXx
    SRE, Site Reliability Engineering, это инженерная профессия, которая ставит себе за цель обеспечение надёжной работы систем. Слово "site" используется в широком смысле и включает в себя обеспечение надёжности всех логических уровней системы.
    SRE, если мне не изменяет память, возникли в Google. Возникли для обеспечения надёжной работы большого количества сервисов.
    "Библией SRE" является книга, изданная Google (бесплатно доступна здесь: https://landing.google.com/sre/book.html Она включает в себя множество практик, приёмов и фолософский утверждений, которые SRE используют в повседневной работе. Сам такой владею и местами перечитываю до наступления понимания.
    Надо понимать, что SRE - это разработчики с глубокими навыками системного администрирования и очень крепкой психикой, потому что именно они находятся на переднем фронте систем и их работа - обеспечивать бесперебойную доступность сервисов по всей планете, 24/7.
    Ответ написан
  • Чем отличаются интеграционное, unit и e2e тестирование на frontend?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как в юнит тестах тестить нажатие на кнопку? Или мы можем тестить только функцию-обработчик?


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

    в интеграционных можно уже потихоньку проверять DOM отдельных компонентов. Просто потому что вы могли опечататься при написании биндингов. Ну то есть цель интеграционных тестов - проверить что в сборке компоненты работают.

    В e2e (end to end) вы загружаете все приложение целиком и имитируете действия пользователей. Причем взаимодействие происходит насквозь. От кнопочки в браузере до запросов в базе данных на сервере (если есть бэкэнд). Это самый медленный вид тестирования и им стоит покрывать только позитивные сценарии.

    Читать про пирамиду тестирования.
    Ответ написан
  • Какие есть курсы для обучения, платный treehouse или альтернативы?

    @maxtrelle
    1. MIT Open Courseware

    MIT’s Open Courseware предлагает 2100 курсов разнообразной тематики, в том числе Electrical Engineering и Computer Science. Бесплатные ресурсы включают онлайн-учебники, экзамены, мультимедийный контент, задания, проекты и примеры — все из фактических курсов MIT последнего десятилетия или около того.

    2. Coursera

    Coursera запущена в апреле и уже преодолела отметку в 1 миллион студентов. Сейчас включает более 200 курсов из 33 университетов. Если вы еще не слышали о Coursera – это стартап в сфере онлайн-образования, основанный профессорами Стенфордского университета, который позволяет пройти полный интерактивный курс университета, который преподается настоящим профессором в одной из лучших школ мира. Бесплатно.

    3. Udacity

    Udacity – бесплатный сервис, в настоящее включает 14 классов, где «Вы обучаетесь, решая сложные проблемы… со всемирно известными преподавателями университетов». Курсы охватывают темы, которые не только учат вас писать код, но и дают хорошие познания в математике, физике и даже в том «Как построить стартап».

    4. Google Code University

    Это Google и это код – достаточно солидный бесплатный ресурс и, очевидно, хороший вариант, если вы заинтересованы в разработке под Андроид. Также специализируется на некоторых продвинутых темах, например, распределенных системах и веб-безопасности.

    5. Mozilla Developer Network

    Mozilla собрала большую коллекцию ресурсов для обучения веб-технологиям.

    6. HTML5 Rocks

    Ресурс включает много бесплатной информации о HTML5, включая статьи и руководства.

    7. The Code Player

    The Code Player – ресурс с пошаговыми видео-руководствами, которые показывают как крутые вещи создаются с нуля. Это возможность смотреть из-за плеча программиста когда он работает. Проект обучает HTML5, CSS3, Javascript и др. Находится в состоянии альфа.

    8. Codecademy

    Codecademy – популярный бесплатный сайт, который вносит игровую составляющую в процесс обучения, если вы обучаетесь вместе с друзьями. Ориентирован на веб-технологии. Codecademy также запустил проект CodeYear.
    Говорят, что ресурс приобрел большую популярность после твита мэра Нью-Йорка в начале это года, где он сообщил, что собирается использовать это сайт для обучения программированию в 2012 году.

    9. Khan Academy

    Khan Academy предлагает множество курсов, которые охватывают не только программирование, но и другие темы. Например, математику (много курсов разных направлений), науку, финансы и экономику, и др.

    10. General Assembly

    General Assembly использует другой подход, предлагая платные livestream-сессии на темы вроде «Быстрое прототипирование: от Каркаса до HTML» – вы покупаете электронный билет, получаете пароль и подключаетесь livestream-у, когда он проходит.

    11. PeepCode

    PeepCode охватывает множество языков программирования, предоставляя загружаемые (платные) скринкасты уроков.

    12. Eloquent JavaScript

    Eloquent JavaScript, на самом деле, – книга, которая предоставляет введение в JavaScript и программирование в целом. Книга существует в 2 форматах. Она опубликована в электронном виде, который включает интерактивные примеры и механизм для взаимодействия с примерами кода (можно запустить код или открыть его в консоли разработчика). Также книгу можно купить в бумажном виде на Амазоне. Есть перевод на французский (бумажная версия) и немецкий (электронная).

    13. Ruby Koans

    The Koans проведет вас по долгому пути к просвещению в изучении Ruby (не Ruby-on-Rails). Целью является изучить язык Ruby, синтаксис, структуры и некоторые распространенные функции и библиотеки.

    14. Learn Code The Hard Way

    Learn Code The Hard Way стартовал как проект для обучения Python в виде онлайн книги-учебника, но вскоре были добавлены материалы для изучения Ruby, C, SQL, Regex.

    15. Stack Overflow

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

    16. Coder Dojo

    Coder Dojos – площадки, где молодые люди собираются вместе учиться программировать. Dojos организовываются добровольцами. Если вы преподаватель или просто хотите поделиться знаниями, вам стоит присмотреться к этому ресурсу.

    17. O’Reilly

    Кроме множества-множества книг, публикуемых O’Reilly, компания также предлагает (платные) онлайн-курсы для разных языков программирования.

    18. Scratch

    Опять же, если вы хотите помочь кому-то в обучении, Scratch – бесплатное ПО, разработанное MIT Media Lab, которое поможет вам в этом.

    19. Apple Developer

    Ресурс для заинтересованных в разработке ПО для продуктов Apple.

    20. Android Developer

    Сайт Google для андроид-разработчиков продолжает улучшаться и содержит множество разделов с рекомендациями для разработчиков и дизайнеров. Также доступно видео с Google I/O.

    21. Mobiletuts+

    Mobiletuts+ – ресурс со статьями и руководствами для разработчиков мобильных приложений. Охватывает разработку нативных приложений c использованием iOS SDK, Android SDK/NDK и Windows Phone 7 SDK, кросс-платформенную разработку при помощи таких инструментов как Titanium Mobile и PhoneGap, техники для построения веб-сайтов, доступных с мобильных устройств, и веб-приложений на HTML 5, CSS, JavaScript.
    Имеет площадку для онлайн-обучения разработчиков и дизайнеров (платно).

    22. Udemy

    Udemy предлагает курсы (некоторые бесплатные, некоторые платные) по самым разнообразным темам. Среди инструкторов – Марк Цукерберг и Марисса Майер.

    23. Code School

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

    24. Bloc

    Bloc обещает сделать из вас «веб-разработчика за 12 недель». За солидное вознаграждение Bloc назначит ментора, который будет обучать вас на протяжении отведенного времени. (Стоимость – $5000 за 12 недель).

    25. Treehouse

    Treehouse насчитывает свыше 600 видео-уроков (по веб-дизайну, веб-разработке и разработке под IOS), которые можно просматривать за ежемесячную плату. Также есть премиум подписки, которые предлагают больше возможностей.

    26. Programr

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

    27. Processing

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

    Язык основан на Java, но использует упрощенный синтаксис и графическую программную модель.

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

    28. Pluralsight

    Pluralsight имеет богатую библиотеку онлайн курсов для .NET разработчиков. Также есть курсы для множества других языков и технологий (всего около 360 курсов). Доступ осуществляется за платной ежемесячной подпиской. Имеется бесплатный триал на 10 дней (правда, до 200 минут видео и с другими ограничениями).

    29. LearnStreet

    LearnStret – ресурс для изучения Javascript, Python, Ruby. Курсы интерактивные – изучение проходит в виде написания кода и немедленного получения результата. Имеются теория, упражнения, подсказки и видео.

    30. codenamecrud.ru
    Ответ написан
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    Все красиво объяснил Nkly777, только в блоке PS merge с rebase перепутаны.
    Добавлю картинок.

    git rebase devel - собачка на молнии - "сшивает" коммиты по дате их создания
    (ветка devel "растворяется" в основной ветке)
    518b8dbce1cd4f96b30de9782ae38fcd.png
    git merge devel - пожарная лестница, все коммиты ветки devel крепятся в конец, образуется пересечение
    (devel остается отдельной веткой, к которой можно вернуться)
    1ba8186d879d46ff85ea7c1e192328e2.png
    git chery-pick idea - забрать коммиты из ветки idea
    2717e3091f644ef2954aa2de4514f446.png
    Ответ написан
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    @Nkly777
    git chery-pick - ты забираешь комиты из одной ветки в другую, это бывает полезно когда изменения сделаные другим разработчиком в его ветке, прямо сейчас нужны тебе в твоей ветке, и что бы не писать этот код заново, ты забираешь его комит себе в ветку

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

    git merge - обычно используется когда у вас 2 и более master ветки (к примеру master и prototype) в этих ветках очень много комитов (и rebase здесь не подходит) и обчно через пару недель, maintainer репозитория наработки из prototype ветки "сливает" в master ветку по средствам этого самого git merge

    P.S. Что бы легче предствить разницу между git merge и git rebase. Представь что merge как собачка на молнии у одежды - "сшивает" комиты по дате их создания.
    В то время как git rebase как пожарная лестница - при применении твои коммиты крепится на конец родительской ветки

    git merge используйте для мержа фич и фиксов в master ветку (как и делает это Github)
    а git rebase используется для своей ветку в которой вы работаете над фичей что бы забрать последние изменения с master ветку (для этого есть очень удобная команда `git pull --rebase origin master`, аналог 3х команд (`git checkout master; git pull origin master; git checkout mybrach; git rebase master`)
    Ответ написан
  • Реализация Telegram API на telethon + ipv6 proxy или другой вариант с поддержкой ipv6?

    heffcodex
    @heffcodex Автор вопроса
    Back-end developer
    Решил вопрос модификацией библиотек. Вроде работает, надо тестить. Мой форк PySocks с поддержкой ipv6 прокси, у которых есть входной ipv4 адрес.
    Ответ написан
  • PUT & POST при написании API

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    POST запрос подразумевает создание записи, результатом ее должены быть пустое тело ответа и заголовок location c uri нового объекта.

    PUT — подмена записей. Тобиш обновить одно какое-то поле у записи нельзя. Опять же, если вы заменили объект — то вы уже имеете на руках все нужные данные, посему ответом может быть опять же заголовок location.

    есть еще метод PATCH, который позволяет именно обновлять запись (конкретное поле или несколько из них). Тут тоже подразумевается возврат только URI. По сути какие либо данные вам может вернуть только GET запрос.

    И есть еще куча заморочек со статус кодами, мол 200 это хорошо только для GET, так как оно имеет тело ответа. А для большинства других нужен 204, который говорит что все хорошо, но есть только заголовки.

    НО… это если по феншую и именно RESTFull, причем это далеко не все. Обычно дальше GET/POST/PUT/DELETE никто не идет… PATCH вообще редко используют, а вот LINK вообще ниразу не видел что бы на реальных проектах применяли…
    Ответ написан
  • PUT & POST при написании API

    MrMig
    @MrMig
    PUT должен быть идемпотентной операцией, т.е. несколько одинаковых последовательных пут-запросов на один урл (и с одинаковыми параметрами) не должны создавать новых объектов.

    POST, в свою очередь, может создавать новые объекты при последовательных запросах на один урл.
    Другими словами, POST нужно использовать для обращения к «производящим фабрикам».

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

    И да, PUT можно сравнить с INSERT… OM DUPLICATE KEY UPDATE.
    POST — это чистый INSERT.
    Ответ написан
  • Как сделать компонент с переиспользованием других компонентов?

    Fragster
    @Fragster Автор вопроса
    помогло? отметь решением!
    Разобрался, правильный компонент такой:

    Vue.component('b-router-link', {
      template: '<li class="nav-item"><router-link :to="to" class="nav-link"><slot/></router-link></li>',
      props: ['to']
    })


    использование:
    <b-router-link to="/phones">Телефоны</b-router-link>
    Ответ написан
  • Объясните простыми словами как работает Redux?

    Laiff
    @Laiff
    Front-end developer
    Отличный мануал от самого Дани https://egghead.io/series/getting-started-with-redux
    Документация переведенная на русский https://github.com/rajdee/redux-in-russian там почти все есть.
    Есть еще приятная статья на хабре чисто по базовым принципам, но в некоторых местах не полная habrahabr.ru/post/269831
    Ответ написан
  • Как правильно организовать разработку (python git тестирование virtualenv)?

    @deliro
    Агрессивное программирование
    Почитай gitflow и TDD with Python и вопросы отпадут сами собой.

    обновлем его каждый раз при добавлении в код новой зависимости

    Да. Иначе как твои тиммейты будут узнавать, что ты обновил джангу с 1.6 до 1.10? Напишешь им каждому в чатик?

    И классы с юнит тестами хранить в том же модуле где и код или отдельно и потом туда их импортировать и запускать через if __name__ ....?

    Нет разницы.
    Ответ написан
  • Как правильно организовать разработку (python git тестирование virtualenv)?

    sim3x
    @sim3x
    tdd flow
    spoiler
    2da3f8ee7a63429484c27297479644a6.png


    У питона есть https://docs.python.org/3/library/unittest.html - не нужно придумывать велосипеды

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

    $cat requirements.txt
    -r requirements/production.txt
    psycopg
    ....
    
    $ cat requirements/dev.txt
    -r requirements/base.txt
    ipython
    ....
    
    $ cat requirements/base.txt
    Django
    ....


    git flow
    spoiler
    b66e7a34e49d43b1a58bd35533659001.png
    Ответ написан
  • Django и React.js как соединить?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вам больше не нужно использовать django, чтобы рендерить html-ки. Этим будет заниматься react. Вам нужен API сервер, и я так понимаю, подойдет что-нибудь такое (ну или гугл).

    Если можете написать API, то значит нет смысла искать видео-уроки/просто уроки по комбинации Ddjango + React, и вам нужно лишь подтянуть знания по react/redux/react-router или подобной связке.

    Если даже в теории ваша задача не разбивается на 2 части (написание API и написание одностраничного приложения), значит django и react.js в данный момент вам никак не соединить.

    p.s. если есть уже существующий сайт, где используется шаблонизатор от django и рендерятся страницы, то можно взять любую из них, где много динамики (например, удаление и добавление строк в таблице, какие-то xhr запросы и т.д.) и переписать для начала только ее на react.
    Ответ написан
  • Django и React.js как соединить?

    @iMrDron
    Да по первой же ссылке: djbook.ru/examples/75
    И темплейт с которым можете сразу начать, поэксперементировать: https://github.com/mbrochh/django-reactjs-boilerplate
    Ответ написан
  • Для чего используется каррирование (карринг) в реальных задачах?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    Предположим есть функция, которая берет много параметров, а первый параметр - имя класса формы (в джанго)
    def cool_staff(form_class, inits, defaults, user, other_param):
        # много строчек кода

    и вы вдруг обнаруживаете что в вашем коде куча вызовов, у которых первый параметр одинаков.
    ...
    res = cool_staff(form_class=MainForm, inits={a:1, b:3}, defaults=[1,2,3], ...)
    ...
    res = cool_staff(form_class=MainForm, inits={a:100500, b:42}, defaults=[3,2,1], ...)
    ...

    Тогда делаете так:
    main_cool_staff = lambda **kwargs: cool_staff(form_class=MainForm, **kwargs)

    и ваши вызовы упрощаются
    ...
    res = main_cool_staff(inits={a:1, b:3}, defaults=[1,2,3], ...)
    ...
    res = main_cool_staff(inits={a:100500, b:42}, defaults=[3,2,1], ...)
    ...

    было в реальном проекте.
    UPD. Такая форма карринга не сработает для неименованных параметров
    main_cool_staff = lambda *args, **kwargs: cool_staff(form_class=MainForm, *args, **kwargs)

    поэтому используйте всегда именованные параметры, это хороший стиль.

    UPD2. Еще подсказали вариант
    import functools
    main_cool_staff = functools.partial(cool_staff, MainForm)

    работает и с неименованными параметрами. Спасибо Андрей Дугин
    Ответ написан
  • Есть ли хорошие туториалы по aiohttp и asyncio?

    nikolay_karelin
    @nikolay_karelin
    Ведущий разработчик, пишу на Python, Tcl, Matlab
    Книжка "Fluent Python" (не знаю, есть ли по русски), видео и блог Андрея Светлова - он Python Core Contributor & aiohttp maintainer ;)
    Ответ написан