• Подборка бесплатных инструментов для разработчиков

    • Перевод
    Сегодня мы представляем вашему вниманию адаптированную подборку инструментов (в том числе облачных) для разработчиков, которые позволяют создавать по-настоящему качественные проекты. Здесь представлены исключительно SaaS, PaaS и IaaS сервисы, предоставляющие бесплатные пакеты для разработчиков инфраструктурного ПО.

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

    Предисловие


    По историческому призванию я SQL-щик. Однако судьба занесла меня на BigData и после этого понесла кривая — я освоил и Java, и Python, и функциональное программирование (изучение Scala стоит в списке). Собственно на одном из кусков проекта встала необходимость тестирования кода на Python. Ребята из QA посоветовали для этих целей PyTest, но даже они затруднились толком ответить чем этот зверь хорош. К сожалению, в русскоязычном сегменте информации по данному вопросу не так уж и много: как это используют в Yandex да и все по-хорошему. При этом описанное в этой статье выглядит достаточно сложно для человека начинающего путешествие по этой стезе. Не говоря уже об официальной документации — она приобрела для меня смысл лишь после того, как я разобрался с самим модулем по другим источникам. Не спорю, там написаны интересные вещи, но, к сожалению, совсем не для старта.

    Юнит-тестирование Python


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

    Вводная по необходимым знаниям


    На описываемый момент знания Python у меня были достаточно поверхностны — я писал кое-какие несложные модули и знал стандартные вещи. Но при столкновении с PyTest мне пришлось пополнять багаж знаний декораторами тут и тут и конструкцией yield.

    Преимущества и недостатки PyTest


    1) Независимость от API (no boilerplate). Как код выглядит в том же unittest:

    Код
    import unittest
    
    class TestUtilDate(unittest.TestCase):
        def setUp(self):
            #init_something()
            pass
            
        def tearDown(self):
            #teardown_something()
            pass
            
        def test_upper(self):
            self.assertEqual('foo'.upper(), 'FOO')
            
        def test_isupper(self):
            self.assertTrue('FOO'.isupper())
            
        def test_failed_upper(self):
            self.assertEqual('foo'.upper(), 'FOo')
            
    if __name__ == '__main__':
        suite = unittest.TestLoader().loadTestsFromTestCase(TestUtilDate)
        unittest.TextTestRunner(verbosity=2).run(suite)
    


    То же самое в PyTest:

    Код
    import pytest
    
    def setup_module(module):
        #init_something()
        pass
    
    def teardown_module(module):
        #teardown_something()
        pass
    
    def test_upper():
        assert 'foo'.upper() == 'FOO'
        
    def test_isupper():
        assert 'FOO'.isupper()
        
    def test_failed_upper():
        assert 'foo'.upper() == 'FOo'
    


    2) Подробный отчет. В том числе выгрузка в JUnitXML (для интеграции с Jenkins). Сам вид отчета может изменяться (включая цвета) дополнительными модулями (о них будет позднее отдельно). Ну и вообще цветной отчет в консоли выглядит удобнее — красные FAILED видны сразу.

    image

    3) Удобный assert (стандартный из Python). Не приходится держать в голове всю кучу различных assert'ов.

    4) Динамические фикстуры всех уровней, которые могут вызываться как автоматически, так и для конкретных тестов.

    5) Дополнительные возможности фикстур (возвращаемое значение, финализаторы, область видимости, объект request, автоиспользование, вложенные фикстуры)

    6) Параметризация тестов, то есть запуск одного и того же теста с разными наборами параметров. Вообще это относится к пункту 5 «Дополнительные возможности фикстур», но возможность настолько хороша, что достойна отдельного пункта.

    7) Метки (marks), позволяющие пропустить любой тест, пометить тест, как падающий (и это его ожидаемое поведение, что полезно при разработке) или просто именовать набор тестов, чтобы можно было запускать только его по имени.

    8) Плагины. Данный модуль имеет достаточно большой список дополнительных модулей, которые можно установить отдельно.

    9) Возможность запуска тестов написанных на unittest и nose, то есть полная обратная совместимость с ними.

    Про недостатки, пусть их и не много, могу сказать следующее:

    1) Отсутствие дополнительного уровня вложенности: Для модулей, классов, методов, функций в тестах есть соответствующий уровень. Но логика требует наличие дополнительного уровня testcase, когда та же одна функция может иметь несколько testcase'ов (например, проверка возращаемых значений и ошибок). Это частично компенсируется дополнительным модулем (плагином) pytest-describe, но там встает проблема отсутствия соответствующего уровня фикстуры (scope = “describe”). С этим конечно можно жить, но в некоторых ситуациях может нарушать главный принцип PyTest — «все для простоты и удобства».

    2) Необходимость отдельной установки модуля, в том числе в продакшене. Все-таки unittest и doctest входят в базовый инструментарий Python и не требуют дополнительных телодвижений.

    3) Для использования PyTest требуется немного больше знаний Python, чем для того же unittest (см. «Вводная по необходимым знаниям»).

    Подробное описание модуля и его возможностей под катом.
    Читать дальше →
    • +20
    • 51,8k
    • 9
  • Ruby: cheatsheet для изучения. Часть 1

    • Tutorial
    Еще когда учился в школе, и интересовался языками, я считал, что нужно покупать две книги по любому языку: первую — «для чайников» и вторую — «мастер». В первой нужно было прочитать все hints — а остальное пролистать, а вторая — настольная (сейчас ее заменил Google). И подход вполне работал. Теперь, с развитием интернета, такой формат куда-то улетучился, и при самостоятельном изучении нужно по крупицам собирать данные — все материалы либо уже «pro», либо наоборот — азы, без «самого сока» и многих на практике важных вещей, или же — все сразу и в кучу на >9999 страницах.

    Это — статья-roadmap-cheatsheet для изучающих Ruby и Rails (Rails и Gems запланированы на вторую часть). Вместо того, чтобы рассказывать очередной how-to я постараюсь расписать все те вещи, которые, на мой взгляд, можно изложить кратко и емко, с упором на то, что программисту пришедшему с других языков и платформ может показаться не очевидным, антипоисковым и просто затратным по времени на изучение без подсказок — на остальное просто дам ссылки (и есть Google — но ведь не всегда, особенно в начале пути, очевидно что у него нужно спрашивать). Не смотря на то, что в природе существует множество туториалов/кастов/книг/чего угодно по чему угодно — именно такого формата мне самому всегда не хватает. И по сути, это те вещи, которые чаще всего рассказываю при вопросах «а как оно вообще?», «с чего начать?», «а как делается такая вот штука?», «а какой gem лучше?» — теперь буду кидать ссылку сюда) Кстати, пока работал над этой статьей на Хабре появилась похожая про Python — видимо, идея витает в воздухе.
    Читать дальше →
  • Twitter Bootstrap и SharePoint. Как заставить Bootstrap корректно работать под SP

    Зачем использовать Bootstrap?


    Разрабатывая и дорабатывая решения на основе SharePoint, я всё больше стал сталкиваться с повышенными ожиданиями пользователей от стандартных форм создания и редактирования элементов. Всех окружают такие удобные и привычные Яндекс, Gmail, Facebook, VK и другие. Симпатичные, быстрые и понятные интерфейсы стали нормой. Многие ожидают интерфейсы подобного уровня и в корпоративных системах.
    Читать дальше →
  • oDesk (Upwork). Мой опыт за полтора года

      Вот уже полтора года я зарабатываю фрилансом на бирже oDesk. За это время у меня накопилось много материалов по данной теме. В данном топике я собрал все в одну статью и адаптировал для аудитории хабра.
      image
      Читать дальше →
    • Скринкаст по Node.JS

      • Tutorial
      Всем привет!

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

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

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



      Читать дальше →
    • Советы Google по кодированию на языке Python. Часть первая: советы по программированию


      Хай, Хабр!
      Сегодня я хочу представить, дорогому хабрасообществу свой первый хабраперевод. Программировать на языке Python — подобно песне. Но еще лучше, когда Ваш код читаем и понятен, а значит чуть более поэтичен, чем обычно бывает производстве. У каждого свои правила и свои стереотипы относительно написания и оформления исходного кода, на каком бы языке он ни был написан. Множество копий сломано о щиты на форумах, но, как ни крути, нельзя не считаться с мнением авторитетных товарищей. Так что сейчас будет представлен перевод первой части стайл-гайда для языка Python от Google. Коснется он именно постулатов написания кода (вторая часть тоже скоро появится, а посвящена она будет форматированию исходного кода). Сразу предупреждаю: тут много (если не большая часть) прописных истин, которые все знают уже давно. Но я искренне надеюсь, что Вы сможете найти тут что-то новое или хотя бы вспомнить старое. Приступим под катом. И pdf тут как тут.
      Читать дальше →
    • Прощай, Zen Coding. Привет, Emmet!

      • Перевод

      Еще в 2009 году, image Сергей Чикуёнок опубликовал статью, в которой представил новый способ написания HTML и CSS кода. Этот революционный плагин, назывался Zen Coding, он помогал многим разработчикам на протяжении многих лет и в настоящее время вышлел на новый уровень.

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

      Для тех, кто предпочитает смотреть, а не читать, вот видео любимых трюков автора.

      Читать дальше →
    • Django workflow — от создания до развёртки (деплоя)

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

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

      Эта тема не новая и уже достаточно освещена в разных аспектах, я лишь покажу свой вариант.
      Для комфортной разработки нам понадобится: PyCharm (ну или какой другой редактор), Python (куда без него), fabric, virtualenv, git и pip.

      Читать дальше →
    • jQuery изнутри — введение

      • Tutorial
      По работе мне несколько раз приходилось участвовать в собеседовании кандидатов на должность клиент-сайдера у нас в компании, смотреть на их познания в Javascript. Удивительно что никто из них не знал толком как же работает jQuery изнутри, даже те, кто отметил свои знания jQuery уровнем «отлично», увы.

      У jQuery очень низкий порог вхождения, о нем часто пишут и используют всюду, где только можно (и даже там, где, в общем-то, не нужно), поэтому некоторые даже не смотрят на чистый Javascript. Зачем, мол, его знать, когда есть jQuery, а по нему — тонны примеров и готовых плагинов? Даже на Хабре видел статью про рисование на Canvas, где автор подключил jQuery и использовал его только один раз — для того, чтобы получить доступ к Canvas по его идентификатору. И не считал это чем-то ненормальным.

      Извините, отвлекся. Суть поста и следующих частей серии в том, чтобы рассказать о том, как же работает библиотека изнутри и что же в ней происходит по мере выполнения каких-то методов.
      Готов и хочу читать дальше
      • +129
      • 93,3k
      • 80