Moscow Python Meetup №44

20-го апреля в 19:00 в Rambler&Co состоится 44-я встреча MoscowPython

На встрече мы услышим 3 доклада:

Сергей Сундуков (Borlas Consulting Group, Ведущий консультант). Python и исследование операций

Хочу рассказать об успешном опыте применения питона и опен-сорсных библиотек при решении реальных бизнес-задач планирования и оптимизации.

Антон Егоров (Sabaka.io, CTO). Authentication with JWT

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

Павел Петлинский (Rambler&Co). Монады. Экспликация

В докладе мы разберемся, что за зверь такой эта «Монада», и где прекрасный чистый мир математики ломается об особенности языков программирования.

Для участия необходимо зарегистрироваться.
ссылка на оригинал статьи https://habrahabr.ru/post/325378/

Python Junior Meetup #2

13-го апреля в 19:00 cостоится встреча Python Junior Meetup #2. Это – митап для начинающих программистов на Python. Встречу организует команда Python.ru. Митап пройдёт в офисе Rambler&Co, в десяти минутах ходьбы от станции метро Тульская.

На встрече мы услышим три доклада:

Григорий Петров (Voximplant) расскажет, как научиться читать любой код за 30 минут.

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

Никита Соболев (wemake.services) расскажет, как научиться не пайтону, а программированию.

Учиться, как завещали великие, можно всю жизнь. Особенно программированию. В своем докладе я постараюсь внести ясность в процесс обучения. Ответить на вопросы, которые часто возникают у тех, кто учит программированию и учится ему. А еще поговорить на тему «знания» и «не знания» в целом.

Олег Чуркин (Rambler&Co) расскажет про путь от новичка до профессионала.

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

Для участия необходимо зарегистрироваться
ссылка на оригинал статьи https://habrahabr.ru/post/325374/

Не останься в дураках 1го апреля – делай backup

Первого апреля почти весь мир празднует День дурака. В этот день принято разыгрывать и подшучивать над своими друзьями и коллегами, веселиться и при этом никому не верить, чтобы самому не остаться в дураках. Но если у друзей и коллег, да и надеемся, что у вас, относительно безобидные розыгрыши и шутки, то вот у современных киберпреступников очень «своеобразное» чувством юмора. Они, например, могут украсть клиентскую базу данных вашей компании, взломать ваш аккаунт в социальной сети или попросту заблокировать вам доступ к данным с помощью программы-вымогателя.

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

Опрос пользователей проводился по всему миру на платформе Google Survey и показал, что более 34% респондентов хотя бы один раз сталкивались с потерей своих данных. Доля тех, кто активно использует решения для резервного копирования, составляет более 70%, и ключевыми показателями для них являются безопасность, простота в использовании и объем доступного облака.

Прошлый год, по мнению ведущих экспертов в области безопасности, стал годом программ-вымогателей. Да, они появлялись и раньше, но именно в 2016 году их распространение приняло масштаб настоящей эпидемии. Согласно данным исследования Лаборатории Касперского, за минувший год возникло 62 новых семейства программ-вымогателей, а количество их новых модификаций выросло в 11 раз — с 2,9 до 32 тысяч. Число атак с их использованием утроилось, а согласно данным Федерального бюро расследований США, общий ущерб от них перевалил за 1 миллиард долларов. Электронные письма, скаченные из интернета файлы, вложения в сообщениях социальных сетей — вот неполный список методов которыми эти вредоносные программы попадают в наши компьютеры, блокируют наши данные и требую за них выкуп.

Ситуация осложняется тем, что большинство пользователей ничего не знают о программах-вымогателях, и тем более не знают о способах противодействия им. Наше исследование показало, что более 62% респондентов никогда не слышали о подобной угрозе, хотя 67% опрошенных пользователей заявили, что очень дорожат своими данными, которые как раз и являются основной целью подобных программ.

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

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

  • Всегда создавайте резервные копии важных данных. При этом старайтесь одновременно хранить резервные копии и на локальных, и в облачным хранилищах;
  • Регулярно обновляйте вашу операционную систему и программное обеспечение, чтобы оперативно устранить бреши в безопасности, через которые проникают вредоносные программы;
  • Относитесь внимательнее к подозрительным письмам, ссылкам и приложениям, как отмечалось выше, именно так программы-вымогатели проникают в вашу систему;
  • Обязательно устанавливайте современные антивирусы на свой компьютер и включайте его автоматическое обновление.

В заключение, мы хотели бы пожелать всем подготовиться заранее к субботним розыгрышам, сделать бэкап своих данных 31 марта и не остаться первого апреля в дураках!
ссылка на оригинал статьи https://habrahabr.ru/post/325362/

Релиз CLion 2017.1: C++14, C++17, код на дизассемблере в отладчике, Catch, MSVC и многое другое

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

Спешим поделиться радостной новостью – мы выпустили первый в этом году релиз нашей кросс-платформенной IDE для C и C++, CLion 2017.1!

image

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

  • Поддержка C++14 (всё кроме constexpr)
  • Начальная поддержка C++17 (мы начали с самой востребованной возможности – nested namespaces)
  • Возможность конвертировать тип переменной в auto
  • Во время отладки программы, при отсутствии файлов с исходным кодом можно переходить на код на дизассемблере (disassembly view)
  • Поддержка фреймворка для юнит-тестирования Catch
  • Значительное ускорение отклика редактора при печати кода (Zero Latency Typing)
  • И, наконец, экспериментальная поддержка компилятора Microsoft Visual C++!

И это еще не все! Читайте подробности ниже.

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

C++14 и C++17

Уже совсем скоро стандарт C++17 будет официально принят и C++ сообщество примется активно обсуждать и строить планы на C++19/20. Поэтому в версии 2017.1 мы постарались полностью поддержать все текущие (и официально принятые) стандарты современного C++.

Сначала мы закончили с constexpr из C++11, а затем принялись за C++14, а именно поддержали следующие возможности:

  • auto return type,
  • generic lambdas,
  • variable templates, and
  • generalized lambda captures.

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

Типичный пример – использование generalized lambda captures, которое раньше приводило к тому, что весь код лямбды некорректно подсвечивался как неиспользуемый. Теперь, как видите, все хорошо:
image

Еще один пример – это использование auto для возвращаемого типа. В предыдущих версиях CLion не мог корректно вывести тип переменной vec, а значит и предложить корректное автодополнение:
image

Таким образом, из непокрытых возможностей стандарта C++14 остался только constexpr. И уже начата работа в направлении C++17: поддержаны nested namespaces. Полный список поддерживаемых в CLion возможностей современных стандартов C++ можно найти по ссылке.

Make auto

С появлением современных стандартов в C++ произошло много значительных изменений. Код на современном C++ существенно отличается от кода на C++ образца 98-го или даже 2003 года. И чем активнее язык развивается, тем актуальнее встает вопрос преобразования кода “старого” в “новый”. А что как не IDE может помочь справиться с этой задачей? Рефакторинги и другие преобразования кода – это как раз то, что мы в JetBrains очень любим.

Работа в этом направлении только началась, и идей у нас много. А пока что мы добавили возможность конвертации типа переменной в auto:
image

Обратная замена тоже может быть реализована и даже есть в планах (CPP-8555).

PCH

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

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

Теперь CLion так умеет. Относится это как к PCH, так и к заголовочным файлам, передаваемым через опцию компиляции -include. То есть соответствующие классы, функции, и т. п. из таких заголовочных файлов корректно понимаются:
image
Обратите внимание, что для GCC есть небольшие ограничения, связанные с техническими особенностями реализации.

Дизассемблирование в отладчике

Один из самых популярных запросов в нашем трекере – возможность показа ассемблерного кода при отладке. В версии 2017.1 мы реализовали две важные возможности, связанные с этим запросом:

  • Подсветка синтаксиса кода на Ассемблере в редакторе (работает только для диалекта AT&T) для файлов с расширением .s и .asm, или любых других, сконфигурированных в Settings | Editor | File Types | Assembly Language.
  • Показ кода на дизассемблере (disassembly view) во время отладки при переходе на вызов, для которого нет исходных текстов программы.

image

Работает disassembly view пока только для GDB. По коду на дизассемблере можно походить, чтобы лучше понять, что именно делает программа и, возможно, найти проблему, ради которой и запускался отладчик. Поставить точки останова в таком коде пока нельзя.

На будущее запланирована возможность показа кода на дизассемблере даже в том случае, когда исходные коды программы имеются (CPP-9091).

Catch

Для C++ существует огромное множество тестовых фреймворков: Google Test, CppUnit, CppTest, Boost, QtTest и другие. CLion поддерживает Google Test уже довольно давно. А в версии 2017.1 появилась поддержка Catch. Почему именно Catch?

  • Catch очень легко начать использовать. Чтобы подключить Catch к своему проекту, достаточно скачать и добавить в проект один единственный заголовочный файл. Удобно, не правда ли?
  • Тест-кейсы в Catch достаточно гибкие и удобные.
  • Автор фреймворка Catch, Phil Nash, с осени прошлого года работает с нами в компании JetBrains в роли девелопер-адвоката C++ продуктов компании. Так что параллельно с поддержкой Catch в CLion дорабатывался и сам фреймворк. Что, конечно, существенно помогло разработке.

Основное в поддержке – специальное окно с выводом результатов тестов (test runner). Если для запуска используется специальная Run/Debug конфигурация – Catch – то вывод результатов будет осуществляться туда:
image

Помимо удобного представления результатов, в этом окне можно:

  • перезапустить все тесты или только упавшие;
  • сортировать тесты по имени или по длительности прохождения;
  • посмотреть/перейти на код конкретного теста;
  • посмотреть вывод каждого конкретного теста и сообщения об ошибках;
  • перенести результаты текущего запуска тестов в файл;
  • посмотреть предыдущие запуски тестов по истории, которая сохраняется автоматически.

Кстати, в конфигурациях работает автодополнение для тегов, которые используются в тестах. Это помогает быстрее настроить набор тестов, которые надо запускать в рамках конфигурации.

Подробнее об особенностях и преимуществах Catch и его интеграции в CLion можно почитать в нашем англоязычном блоге.

Компилятор Microsoft Visual C++

Вероятно, одна из самых интересных возможностей этой версии. По-крайней мере, для пользователей на Windows. Дело в том, что раньше CLion работал только с GCC/Clang и на Windows приходилось устанавливать MinGW, MinGW-w64 или Cygwin. А они, в свою очередь, не всегда легко и понятно конфигурируются при установке, да и имеют ряд неудобств в целом. Так что пользователи на Windows вполне резонно просили нас поддержать компилятор Microsoft Visual C++. Что мы и сделали в 2017.1, правда пока в экспериментальном режиме.

Чтобы попробовать, надо включить соответствующую опцию в Registry:

  • Откройте диалог Find Action (Shift+Ctrl+A на Linux/Windows, ⇧⌘A на macOS)
  • Введите Registry
  • Выберите и откройте редактор Registry
  • Начните вводить clion.enable.msvc – CLion найдет подходящую опцию в списке
  • Включайте и пользуйтесь MSVC!

image

Теперь в настройках тулчейнов у вас появится возможность выбрать компилятор Microsoft Visual C++:
image

Поддерживаемые версии Visual Studio – 2013, 2015, 2017 – находятся и определяются автоматически.

Тут стоит оговориться, что работает MSVC по-прежнему через CMake (в качестве генератора в котором используется NMake вместе обычных Makefiles). То есть msbuild не поддержан. CLion предоставляет настройки архитектуры, платформы и версии в Build, Execution, Deployment | CMake:
image

Из важных ограничений стоит еще отметить: отсутствие отладчика и отсутствие поддержки специфических расширений языка от Microsoft. В остальном, мы будем рады, если те, кто был заинтересован в поддержке компилятора Microsoft Visual C++, попробуют его и поделятся с нами своими отзывами.

Zero-latency typing

Про zero-latency typing рассказывать можно довольно долго. Но мы лучше предложим читателям ознакомится с детальным исследованием этого вопроса от нашего коллеги.

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

Плагины

Версия CLion 2017.1 включает в себя полезные обновления таких плагинов как Swift, Go, Settings Repository и не только.

Если говорить про Swift, то на изменения стоит обратить внимание тем, кто использует или планирует использовать CLion в качестве Swift IDE на Linux. Благодаря команде AppCode в плагине появились новые возможности:

  • шаблон для создания нового Swift проекта, с предварительно заполненным файлом CMake и Package.swift;
  • ошибки, предупреждения и возможные исправления от анализатора кода на основе SourceKit;
  • возможность генерации типа переменной уже после ее использования.

image

Изменения Go плагина были направлены на приведение его в соответствие с Gogland, отдельно стоящей IDE на базе платформы IntelliJ для этого языка.

А плагин для хранения настроек IDE в репозитории, наконец, был “забандлен” в саму IDE.

И многое другое

В версии 2017.1 произошло еще немало других изменений. Так, например, Find in Path (текстовый поиск по проекту или любому выбранному скоупу) доступен в виде popup-окна с удобным предпросмотром результата:
image

А в окне логов от системы контроля версий (для Git и Mercurial) появилась возможность использовать регулярные выражения и выбирать учитывать ли или наоборот игнорировать регистр.

Вот здесь небольшая демонстрация новых возможностей CLion 2017.1:

Если вам стало интересно, качайте 30-дневную бесплатную пробную версию, а в разделе цен можно узнать о стоимости подписки.

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

Ваша команда JetBrains CLion
The Drive to Develop

ссылка на оригинал статьи https://habrahabr.ru/post/325372/

HTTP/2 Server Push в Go 1.8

Перевод небольшого туториала об использовании HTTP/2 Server Push в стандартной библиотеке Go.

Введение

HTTP/2 был придуман, чтобы решить многие из проблем HTTP/1.x. Современные веб-страницы используют массу дополнительных ресурсов — HTML, скрипты и таблицы стилей, картинки и так далее. В HTTP/1.x каждый из этих ресурсов должен быть запрошен явно отдельным запросом и это может очень замедлять загрузку страницы. Браузер начинает с загрузки HTML, узнаёт про новые необходимые ресурсы по мере разбора страницы. В итоге сервер ожидает пока браузер запросит очередной ресурс и сеть просто простаивает и не используется эффективно.

Чтобы улучшить latency, в HTTP/2 появилась поддержка server push, которая позволяет серверу самому послать ресурсы браузеру ещё до того, как они будут запрошены явно. Часто сервер знает наперёд какие дополнительные ресурсы будут запрошены данной веб-страницей и может начать передавать их вместе с ответом на начальный запрос страницы. Это позволяет серверу максимально эффективно использовать сетевой канал, который бы простаивал в противном случае, и улучшить время загрузки страницы.


На уровне протокола, HTTP/2 server push работает с помощью специального типа фреймов — PUSH_PROMISE. Фрейм PUSH_PROMISE описывает запрос, который, по мнению сервера, будет вскоре запрошен браузером. При получении PUSH_PROMISE, браузер знает, что сервер скоро пришлёт этот ресурс. Есть чуть позже браузер затребует этот ресурс, то будет ожидать сервер закончить push, а не инициировать новый HTTP-запрос. Это уменьшает суммарное время, которое браузер тратит на сеть.

Server Push в пакете net/http

В Go 1.8 появилась поддержка server push для http.Server. Эта функция автоматически доступна, если сервер работке в режиме HTTP/2 и входящее соединение также открыто с помощью HTTP/2 протокола. Дальше дело техники — в любом HTTP обработчике вы проверяете, поддерживает ли переменная типа http.ResponseWriter server push простого приведения типа к интерфейсу http.Pusher..

Например, если сервер знает, что скрипт app.js будет нужен для отрисовки страницы, обработчик может принудительно отправить его с помощью server push, если http.Pusher доступен в данном соединении:

  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {         if pusher, ok := w.(http.Pusher); ok {             // Push поддерживается.             if err := pusher.Push("/app.js", nil); err != nil {                 log.Printf("Failed to push: %v", err)             }         }         // ...     })

Метод Push создает новый запрос к /app.js, собирает его во фрейм PUSH_PROMISE и отправляет обработчик запроса сервера, который сгенерирует необходимый ответ клиенту. Второй аргумент метода содержит дополнительные заголовки, если они необходимы для этого фрейма. Например, если ответ для /app.js должен быть с иным Accept-Endoding, то PUSH_PROMISE должен содержать Accept-Endoding заголовок:

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {         if pusher, ok := w.(http.Pusher); ok {             // Pushп оддерживается             options := &http.PushOptions{                 Header: http.Header{                     "Accept-Encoding": r.Header["Accept-Encoding"],                 },             }             if err := pusher.Push("/app.js", options); err != nil {                 log.Printf("Failed to push: %v", err)             }         }         // ...     })

Полный рабочий пример можно попробовать тут:

$ go get golang.org/x/blog/content/h2push/server

Если вы запустите этот сервер и зайдёте на http://localhost:8080, инспектор сетевых запросов в вашем браузере должен показать, что app.js и style.css были "запушены" сервером.

Делайте push вначале ответа

Есть смысл вызывать метод Push до того, как отправлять что-либо в основном ответе. В противном случае есть вариант нечаянно сгенерировать повторяющиеся ответы. Например, представьте, что в вашем обработчике вы пишете в ответ часть HTML кода:

<html> <head>     <link rel="stylesheet" href="a.css">...

и затем вызываете Push("a.css", nil). Но браузер, возможно, уже успел распарсить этот фрагмент HTML до того, как получил фрейм PUSH_PROMISE, и в этом случае отправит новый запрос для a.css в дополнение к фрейму. Сервер теперь должен обслужить запрос к a.css дважды. Вызов Push перед тем, как отдавать тело ответа клиенту избавляет от этой проблемы.

Когда использовать server push?

Общий ответ тут — тогда, когда сетевое соединение простаивает. Закончили отправлять HTML веб-приложению? Не тратьте время, начинайте отдавать ресурсы, которые заведомо понадобятся. Возможно вы инлайните ресурсы прямо в HTML, чтобы уменьшить latency? Вместо инлайнинга, попробуйте pushing. Также хороший пример — редиректы страниц, которые почти всегда являются лишним запросом от клиента. Есть масса различных сценариев, где server push может быть полезен — мы только начинаем их осваивать.

Было бы упущением не упомянуть подводные камни. Во-первых, с помощью server push вы можете только отдавать ресурсы, которыми владеет ваш сервер — то есть, ресурсы с других сайтов или CDN отдавать не получится. Второе — не отдавайте ресурсы, если вы не уверены, что клиенту они понадобятся, это будет лишняя трата трафика. Как следствие — избегать отдавать ресурсы, которые, скорее всего, уже получены клиентом и закодированы. И третье — наивный подход "запушить все ресурсы" обычно приводит к ухудшению производительности. Как обычно, в случае сомнений — делайте измерения.

Несколько полезных ссылок для более углублённого понимания:

•   HTTP/2 Push: The Details •   Innovating with HTTP/2 Server Push •   Cache-Aware Server Push in H2O •   The PRPL Pattern •   Rules of Thumb for HTTP/2 Push •   Server Push in the HTTP/2 spec

Заключение

В Go 1.8 стандартная библиотека предоставляет функционал HTTP/2 Server Push из коробки, позволяя создавать более эффективные и оптимизированные веб-приложения.

Вы можете посмотреть HTTP/2 Server Push в действии на этой странице.

ссылка на оригинал статьи https://habrahabr.ru/post/325370/