-Поиск по дневнику

Поиск сообщений в rss_rss_hh_new

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.03.2011
Записей:
Комментариев:
Написано: 51

Habrahabr/New








Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://habrahabr.ru/rss/new/.
Данный дневник сформирован из открытого RSS-источника по адресу http://feeds.feedburner.com/xtmb/hh-new-full, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

AppCode 2017.2: Extract Method и улучшения автодополнения для Swift, поддержка __auto_type в Objective-C и многое другое

Пятница, 04 Августа 2017 г. 16:28 + в цитатник

[Перевод] Pwnie Awards 2017: достижения, ошибки и глупости в сфере информационной безопасности

Пятница, 04 Августа 2017 г. 16:10 + в цитатник
В конце июля, на конференции Black Hat в Лас-Вегасе, вручали премию Pwnie Awards. Дают эту награду либо тем, кто сделал невероятную глупость в области информационной безопасности, отличился некомпетентностью, либо тем, кто что-то красиво, громко и весело взломал, или обнаружил что-то очень интересное. Учитывая специфику премии, вполне ожидаемо то, что далеко не все лауреаты поспешили подняться на сцену за ярко раскрашенной статуэткой пони. Государственные чиновники, представители разведывательных организаций и производители программного обеспечения обычно не склонны признавать свои ошибки.

image

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

Награда за лучшую серверную ошибку досталась Equation Group, группе которую связывают с АНБ. Эксплойты Equation для Windows SMB в этом году попали в сеть после того, как их украли хакеры из Shadow Brokers. Эти инструменты были нацелены на три серьёзные уязвимости (CVE-2017-0143, 0144, 0145), и позже были использованы во вредоносных программах, включая WannaCrypt, для взлома систем по всему миру. Это принудило Microsoft выпустить патчи для устаревших ОС, закрывающие уязвимости.

Представители спецслужб США на церемонии вручения наград не появились, то же самое можно сказать и о делегатах от других государств. Так, награда за самый массовый взлом разделена между Северной Кореей (за создание группы Shadow Brokers) и Россией (за эпидемию WannaCry).

Между тем, премьер-министр Австралии Малкольм Тернбулл удостоился высшей награды в номинации «самый большой провал». Он заявил, что законы Австралии имеют преимущество перед законами математики. Австралийскому лидеру сказали о том, что невозможно обойти системы шифрования для целей борьбы с террористами и не лишить шифрования всех остальных. На это он ответил, что может заверить собеседника в том, что в Австралии преимущество имеют законы Австралии. «Законы математики достойны одобрения, но единственный закон, который имеет силу в Австралии — это закон Австралии», — продолжил Малкольм Тернбулл. За это высказывание он и получил статуэтку пони, хотя соперники у него были очень сильные. Среди них — защищённый (но, на самом деле, содержащий уязвимость) браузер от Лаборатории Касперского для iOS. Кроме того, сюда же попал новостной ресурс The Intercept, после неосторожной публикации которого была задержана Reality Winner, предоставлявшая The Intercept секретную информацию.

Теперь, в двух словах, расскажем о других победителях.

Пони за лучшую ошибку в клиентском ПО получили Райан Хансон, Хайфей Ли, и другие исследователи, за раскрытие уязвимости CVE-2017-0199, называемой ещё уязвимостью Microsoft OLE.

Награду за лучшую уязвимость, приводящую к повышению привилегий, получили Виктор ван дер Вин, Яник Фратантонио, и другие, за создание эксплойта Drammer для rowhammer-атаки на оперативную память.

Приз за лучшую криптографическую атаку ушёл группе SHAttered — Марку Стивенсу и другим.

В номинации «лучший бэкдор» победила компания MeDoc. Её система обновления ПО была взломана и распространяла вирус-вымогатель NotPetya.

Приз за лучший брэндинг достаётся Ghostbutt (CVE-2017-8291).

Награда за наиболее инновационное исследование ушла разработчикам нового способа обхода защиты ASLR.

Премию за жизненные достижения получил хакер FX из Phenoelit.

И, наконец, премия за самую неуклюжую реакцию разработчика досталась Леннарту Поттерингу, ведущему программисту systemd. Всё дело в его неоднозначном отношении к ошибкам в любимой всеми системе инициализации. А именно, речь идёт о следующих ошибках: 5998, 6225, 6214, 5144, и 6237, подробнее о которой можно почитать тут.

Разыменование нулевых указателей, запись за пределы буфера, отсутствие поддержки полных имён доменов, выдача root-привилегий пользователям, имя которых начинается с цифры — всё это не слишком серьёзно. При исправлении подобных незначительных недостатков не нужно указывать присвоенные им CVE-номера, сведения об этом нет смысла включать в журнал изменений или даже в описания коммитов… Собственно говоря, за такое отношение к ошибкам и выдают награды на церемонии Pwnie Awards.

Уважаемые читатели! Кому и за какие заслуги вы вручили бы ярко раскрашенного пони?
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334894/


Метки:  

[Из песочницы] ГДЕ ЛОГИКА? Учимся мыслить системно. Часть 1

Пятница, 04 Августа 2017 г. 15:31 + в цитатник

I ВСТУПЛЕНИЕ


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

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

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

И для этого, я предлагаю Вам вместе со мной в рамках этой статьи, порассуждать над темой общения людей.

Итак, поехали…

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

II О ВЗАИМОПОНИМАНИИ ЛЮДЕЙ


Точка оптического прицела у Вас на лбу – это тоже чья-то точка зрения.
Ли Харви Освальд.
Нередко мы становимся свидетелями ситуаций, когда разные люди, обсуждая между собой свое отношение к какому-либо событию или обстоятельствам, дают им диаметрально противоположные оценки. Грубо говоря, серую простыню одни называют светлой, а другие темной. Кто в данном случае по вашему прав? Если оценивать придирчиво и беспристрастно — никто не прав. Но в жизни такие оценки, как водится, никому не нужны, общественность хочет разобраться: темная она или светлая. Большинство людей в противостоянии демонстрируют крайний максимализм, полумеры в таких ситуациях не воспринимаются. От любого кто вливается в этот спор, всенепременно ждут, четкого обозначения — на чьей он стороне. Но ведь едва ли не всегда есть еще шанс, привести противостоящие лагеря к какой-то общей точке зрения.

1. УСТАНОВИМ ПРОБЛЕМЫ ВЗАИМОПОНИМАНИЯ


Не случайно в своих рассуждениях мы пришли к тезису «точка зрения». Дословно он означает, что, исследуя объект под разными углами, можно его охарактеризовать по разному. Например, если смотреть на цилиндр сверху, он кажется кругом, а если сбоку то прямоугольником. Так и спорят: одни талдычат: это круг, другие крутят пальцем у виска и утверждают, что это прямоугольник. В более широком смысле «точка зрения» означает выбор для оценки фактов и явлений, определенного ассортимента: свойств, качеств, характеристик, приоритетов. Если, в приведенном выше примере с серой простыней, оценивать ее как покрытие, на котором нужно спать после принятия ванны, то она скорее всего темная, а если бросить на грязный пол, чтобы по ней ходить в обуви, то скорее светлая. Очень емкий и изящный пример привел Иммануил Кант, сказав: «Один, глядя в лужу, видит в ней грязь, а другой — отражающиеся в ней звёзды».

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

Из моего личного опыта системного аналитика, еще большим препятствием в осмыслении обсуждаемых проблем, является попытка дать оценку сложному явлению, рассматривая его – как монолит – единое и неделимое целое. Просчет в данном случае заключается в том, что любое явление или событие по сути является составной композицией более простых частей. Следовательно, каждая такая часть, должна быть оценена сама по себе. И эти оценки, могут очень сильно разниться как между собой, так с общей оценкой композиции в целом. По мимо самих оценок каждого компонента следует еще учитывать и весомость оценки данного ингредиента в общем ансамбле. Трудно не согласиться с Марком Туллием Цицероном, который говорил: «Аргументы следует не считать, а взвешивать». Например, выбирая в супермаркете продукт, особенно затейный, Вы в первую очередь оцениваете цельную композицию, то бишь упаковку. Остановив свой взор на одной из них, Вы берете ее и следующим шагом — смотрите состав ингредиентов. И только оценив качество каждого из них, делаете свой выбор: положить упаковку в свою корзинку или обратно на полку. Но самое интересное, что если Вы отказались от какого-то продукта, кто-то идущий за вами может остановить свой выбор именно на нем, хотя он также внимательно прочитал состав. Это не означает, что он глупец или слепой, просто общая оценка продукта в целом у Вас не совпала.

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

Как в анекдоте:
— Как тебе служба пожарным?
— Ой, все замечательно и кормят и одевают и отпуск большой и льготы для всей семьи, Но когда пожар – хоть увольняйся!

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

2. ВЫЯСНИМ ФАКТОРЫ ВЛИЯНИЯ НА ВЗАИМОПОНИМАНИЕ


В упомянутых рассуждениях есть одна “закавыка” – так называемые социальные фильтры. Этот феномен проявляется в том, что большинство людей, под воздействием ближайшего круга общения, воспринимают действительность через призму приоритетов этого окружения. Какие-то факты они считают пустяковыми и не влияющими на принятие своих решений, а какие-то важными и значимыми.

Для различных социальных групп эти приоритеты могут быть диаметрально противоположными и, потому-то, представители этих групп просто не способны адекватно воспринять доводы оппонентов, считая их ничтожными. Именно по этой самой причине, по обыкновению и возникает проблема «Отцов и детей». Во всяком случае, продвигаясь по конвейеру жизни, точка зрения детей приближается ко взглядам своих родителей, еще недавно воспринимаемыми ими в штыки. И вот, когда казалось бы повзрослевшие и прозревшие дети в беседе с родителями используют их же (родителей) риторику и суждения и ждут если не оваций, то уж точно одобрения папы с мамой, они снова наталкиваются на стену непонимания. Шок! «Как же так? вы же еще вчера сами говорили...». А поздно, жизнь идет и они Вам уже не мам, пап, а бабушка и дедушка и вообще: «детей надо воспитывать не в строгости и порядке, а в безграничной любви, потакании их прихотям, а также всячески их баловать и ни в коем случае не наказывать». Занавес! А на бис: сзади всю эту цепочку поколений уже подпирают новые боевые шеренги детей со своими вечно бунтарским мировоззрением.

3. ВСКРОЕМ ВСЮ ПРАВДЫ О ПРАВДЕ


Еще одним важным элементом, влияющим на качество взаимопонимания, является Правдивость, используемой информации. По другому это можно охарактеризовать –как доверительность общения. А как мы уже заметили выше, правда каждой стороны очень сильно зависит от многих факторов и единственно достоверная правда состоит в том, что правды нет! Однако давайте постараемся рассмотреть это понятие с разных точек зрения, чтобы максимально объективно сформировать свое отношение к нему.

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

Это с одной стороны, а с другой, Вы наверное сталкивались с ситуацией, когда при общении, соврать гораздо менее хлопотно, чем сказать правду. Ну вроде бы «долго объяснять» или «чтобы не наломали дров» и тому подобное. И ведь цель благая, да и соврал то по мелочи, ну самую малость, но все это со временем затягивает и становится нормой. Постепенно ложь вскрывается все чаще и чаще, и на тебя уже смотрят как-то жалостливо и воспринимают не серьёзно, даже когда ты говоришь правду. Как говорится: «Ложечка то нашлась, но осадочек остался». Чем может быть чреват такой способ мнимого упрощения общения? Чаще всего в подобных случаях происходит обесценивание места человека в коммуникационной иерархии.

Но это крайности, а в жизни взаимоотношения с некоторыми людьми строятся на правде, а с некоторыми на лжи. Причем в обоих случаях это может быть наилучший способ общения. В каких же ситуациях, какой способ общения предпочтительнее выбирать? Марк Туллий Цицерон говорил: «Враги всегда говорят правду, друзья — никогда». То есть одним из критериев выбора способа общения Правда/Ложь, является наличие и глубина противоречий с оппонентом.
Стоит отметить, что все что мы рассматривали в рамках этого раздела до сих пор, основано на предположении о некой одной – «Истиной» Правде. Но в жизни все сложнее: люди всегда хотят слышать правду и только правду, но при условии, что это ИХ правда.

К тому же человек так устроен, что он устаёт, постоянно слушать чью-то правду, и он вынужден искать новую неправду, но свою, которая постепенно становиться его собственной официальной правдой. Помните, как у Виктора Цоя: «Я не люблю когда мне врут, Но от правды я тоже устал».
Со временем большинство людей выстраивают свою собственную “удобную” для них правду и, спрятавшись за ней как за ширмой, чувствуют себя в общении с другими комфортно и уверенно. Таких декораций может быть несколько, только успевай их менять в зависимости от ситуации и главное не путать в какой момент, какой прикрыться. Но время течет и все изменяется и постепенно, даже самый всеобъемлющий фасад, прикрывает уже далеко не все места, и человек не замечающий этого выглядит по крайней мере забавно. Еще глупее может выглядеть человек, который эту «Ширму правды» позаимствовал у других людей и лишь пробежался по ее пресс-релизу вскользь. Такой ширмой может быть: партийная дисциплина, религиозные учения, корпоративный кодекс и т.п, До поры до времени – эти ката даже срабатывают, пока не встретишь действительно сильного оппонента. Чем более шаблонные взгляды выражает человек, тем он менее интересен для дискуссии и общения.

Еще одну причину появления «полуправды» подметил Федор Михайлович Достоевский. В произведении «Бесы» он писал: «…настоящая правда всегда неправдоподобна… Чтобы сделать правду правдоподобнее, нужно непременно подмешать к ней лжи. Люди всегда так и поступали». Приукрасить правду «спецэффектами» всегда заманчиво и такая правда, к сожалению, куда более востребована обществом. Это становится целой наукой и неплохим бизнесом при профессиональном подходе.

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

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

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

4. ЗАДАДИМ ЦЕЛИ ИССЛЕДОВАНИЯ


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

Что бы не промахнуться с целью исследования, возьмем на прицел мишень покрупнее, а потом, по мере определения ориентиров для ее достижения, подправим мушку. Итак, объявим миссию нашего исследования: «Научиться максимально эффективно коммуницировать с другими людьми, исходя из своих интересов». Вы спросите, как же эта цель сочетается со всеми проблемами, на которые мы указали выше? Объясню. Важно – научиться управлять взаимоотношениями с людьми, а это не обязательно означает заставить противные стороны слышать и понимать друг друга. Например, когда я смотрю различные ток-шоу у меня возникает ощущение, что ведущий точно представляет себе, рассматриваемую проблему целиком, но он не спешит чтобы оппоненты также пришли к общему видению – ведь на этом шоу закончится. Поэтому он управляет общением, то старательно отделяя точки зрения и углубляя непонимание разных групп, то проясняет некоторые моменты, сближая их – «Шоу должно продолжаться!». Посему отмечу, что важно не только уметь управлять взаимоотношениями, но и определять, как с их помощью манипулируют Вами и, при необходимости, противодействовать этому или использовать в своих целях.

5. ПОДОБЬЕМ ИТОГИ


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

Вывод 1: Для того чтобы достичь Консенсуса в общении с людьми, необходимо уметь понять их точку зрения и ее мотивацию. А также быть способным донести до них свою точку зрения.

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

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

Вывод 4: Реальность, воспринимаемая людьми, определяется тем, что они по жизни считают истинным и правильным. Поэтому «Правда» конкретного человека формируется только из тех фактов, которые ему нравятся.

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

Вывод 6: Для общения с разными людьми в разных ситуациях, необходимо уметь выбирать степень доверительности отношений.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334892/


Метки:  

Не пропустите крупнейшее мероприятие Google для разработчиков в Европе

Пятница, 04 Августа 2017 г. 15:21 + в цитатник

Напоминаем, 5 и 6 сентября в польском городе Краков пройдет одно из крупнейших событий для разработчиков Европы — Google Developer Days. Начинающие специалисты и опытные профессионалы смогут поучаствовать в обучающих семинарах и мастер-классах, узнать о последних тенденциях в мире технологий, а также пообщаться с разработчиками и экспертами из разных уголков Европы.


В Центральной и Восточной Европе более миллиона высококвалифицированных разработчиков. Каждый год суммарно в Польше, Украине, Чехии, Словакии и России из университетов выпускаются больше IT-специалистов, чем в США. Именно поэтому, нам кажется, что Краков — идеальный город для европейского Google Developer Days.


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


Более 40 семинаров о технологиях. Большинство из них — в прямом эфире


Google Developer Days начнется во вторник, 5 сентября в 10:00 по местному времени (11:00 по Москве). В самом начале конференции мы познакомим вас со всеми новинкам Google для разработчиков. В течение двух дней участники смогут поучаствовать в семинарах и тренингах, а также узнать об актуальных событиях в отрасли. Например, мы расскажем о машинном обучении TensorFlow, технологиях Progressive Web App, разработке для Google Assistant, использовании Android для интернета вещей, и многом другом. Полный список тем — на этой странице.


Те, кто сможет присутствовать на GDD лично, оценят наши Codelabs, смогут посетить семинары Ask X (беседы с разработчиками Google) или решиться на Review Clinics (просмотр и проверку своих сайтов и мобильных приложений).


Приглашаем всех женщин-разработчиков в Европе





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


Одна из главных задач Google — сделать так, чтобы технологическая отрасль была как можно более разноплановой. Мы хотим, чтобы у женщин было больше возможностей присоединиться к Google Developer Days. Если вы — женщина-разработчик, и мы можем как-то помочь вам посетить нашу конференцию, пишите на gdd-europe@google.com.


И ещё


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


Не забудьте зарегистрироваться. Если вы не можете присутствовать лично, смотрите прямую трансляцию мероприятия на YouTube канале Google Developers и следите за новостями по тегу #GDDEurope в Twitter, Facebook и Google+.


Небольшая анимация с нашим тегом =)


До встречи!

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334890/


Эволюция графики в играх

Пятница, 04 Августа 2017 г. 15:18 + в цитатник

image


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


Spacewar! (1962)


Одна из первых компьютерных графических игр в истории. Она была написана для компьютеров PDP-1. Геймплей был прост: два игрока управляли космическими кораблями, и старались поразить друг друга ракетами. К тому же надо было избегать столкновения со звездой, которая притягивала к себе корабли игроков. Боезапас и топливо для маневрирования были ограничены. Игра пользовалась большой популярностью в 1960-е, и была портирована на различные платформы.


Вот так Spacewar! выглядела на настоящем PDP-1 (да, мониторы были те ещё):





Но если отбросить несовершенство дисплея, то игра выглядела так:





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


Эра аркад


Pong (1972)


Примитивный аркадный симулятор настольного тенниса. Первая игра, созданная Atari, и по совместительству одна из самых популярных видеоигр того времени. Здесь два игрока с помощью вращения ручек управляли «ракетками», стараясь не пропустить мяч. Был и режим одиночной игры. Существовали версии игры для телеприставки и в виде игрового автомата.





Space Race (1973)


Это вторая после Pong игра, разработанная Atari. Для двух или одного игрока. Нужно было лететь на ракетах, уклоняясь от препятствий. Кто не успевал уклониться — проигрывал. Выпускалась в виде телеприставки и игрового автомата.





TV Basketball (1974)


Эта игра была первой сразу в трёх «номинациях»:


  • первая в истории игра про баскетбол;
  • первая игра, в которой использованы спрайты;
  • первая игра, в которой появилось изображение людей.

Цель игры: перемещая «баскетболистов» отбивать мяч так, чтобы он попал в корзину.





Gun Fight (1975)


Игра-вестерн, в которой нужно было победить противника в дуэли на пистолетах. Первая игра, в которой изображено сражение человека с человеком. У каждого игрока было по два джойстика: одним управлялся персонаж, а вторым наводился пистолет. Количество патронов было ограничено — по 6 в барабане.





Death Race (1976)


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





Canyon Bomber (1977)


Один или два игрока увлечённо летали над над неким каньоном, заполненным шарообразными камнями. Их нужно было бомбить, и чем более метким было попадание, тем больше очков ты зарабатывал.





Space Invaders (1978)


Игра-эпоха, снискавшая огромную популярность и портированная на множество платформ. Когда в Японии появились эти игровые автоматы, то изначально даже возник дефицит монет подходящего номинала, настолько много было желающих поиграть в Space Invaders. Цель была простой: надо было отстреливать орды вторгающихся инопланетян, постепенно опускающихся на землю и тоже стреляющих в тебя. При этом пушка игрока двигалась позади ряда из четырёх защитных укрытий, которые постепенно разрушались от попаданий инопланетян. По мере прохождения уровней враги маневрировали и опускались всё быстрее.


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





Становление гоночных симуляторов


Speed Freak (1979)


Одна из первых гоночных игр от первого лица, и первая мире векторная гонка. Цель — доехать до финиша, не врезаясь в препятствия и встречный транспорт, не вылетая с дороги.





Pac-Man (1980)


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


Pac-Man стала основателем нового жанра — «погони в лабиринте». Как позже признавался один из геймдизайнеров Тору Иватани, они хотели сделать юмористическую игру безо всякого насилия, чтобы в неё комфортно было играть как можно более широкой аудитории. Хотя изначально в родной Японии Pac-man — тогда он назывался PUCK MAN — был встречен совершенно равнодушно. Зато в США игра порвала все шаблоны, чарты и рекорды продаж. В результате Pac-Man начала своё победное шествие по миру.





Начинается эра платформеров


Donkey Kong (1981)


Один из ранних представителей жанра платформеров. Персонаж в кепке по имени Марио должен был спасти от агрессивной гориллы Донки Конга некую мамзель по имени Полин. Позднее Марио станет одним популярнейших персонажей видеоигр, если не самым популярным. А начинал он как борец с обезьянами.





Pole Position (1982)


Гонки «Формула 1»: нужно было сначала проехать квалификационный заезд, а потом участвовать в состязаниях. Конфигурация гоночных треков повторяла реальные трассы. Эта игра задала стандарт для отображения гоночных игр на многие годы вперёд: спрайтовая графика, вид от третьего лица.





Tapper (1983)


Симулятор бармена: нужно вовремя метать полные кружки алчущим посетителям, и хватать опустевшие. Если кто-то из недопивших клиентов добирался до конца стойки, то бармена выкидывали в окно. Кстати, оцените надпись на обложке: «Самая инновационная игра для автоматов 1984».





Duck Hunt (1984)


Ещё одна игра-икона. Игровые автоматы Duck Hunt и приставки Nintendo Entertainment System (производилась до 1995) были оснащены пистолетами, работавшими по принципу «светового пера». На экране из зарослей взлетали утки, которых нужно было отстреливать с минимальным количеством промахов. А собака радостно хватала добычу. При желании можно было переключиться в режим стрельбы по тарелкам. По объёмам продаж игра занимает второе место на платформе NES — 28 млн копий.





Super Mario Bros. (1985)


Через четыре года после выхода Donkey Kong, итальянский сантехник, не боящийся злобных приматов, начал покорять мир. В этой аркаде нужно было управлять усатым мужичком-водопроводчиком Марио в комбинезоне и кепке и его братом Луджи. При путешествии по миру нужно было уклоняться от врагов или побеждать их, прыгая им на голову, а также собирать по пути спрятанные монеты. Цель — дойти до конца и спасти принцессу.


Эта игра вошла в Книгу Рекордов Гиннесса как самая продаваемая в истории — 40 млн копий. Собственно, мало какой другой игровой персонаж может конкурировать с Марио по узнаваемости. Эхо войны популярности Марио до сих пор витает в массовой культуре.





The Legend of Zelda (1986)


Эта игра положила начало одноимённой, очень популярной серии игр, выпускавшихся долгие годы. Главный герой — некто Линк — должен спасти королевство от вторгшейся армии принца Тьмы. Он путешествует по миру в поисках волшебного Артефакта, сражается с врагами, прокачивает характеристики и пользуется инвентарём: здравствуй, RPG!





Расцвет файтингов


Street Fighter (1987)


А эта игра породила целую эпоху файтингов — игр, в которых надо было сражаться в рукопашную друг с другом или с врагами. Здесь появились комбо-удары и шестикнопочное управление персонажем. В Street Fighter нужно было побеждать в поединках, каждый раунд длился по 30 секунд (если никого из бойцов не успевали к тому времени нокаутировать, побеждал тот, у кого оставалось больше здоровья).





Galaxy Force (1988)


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





Prince of Persia (1989)


Ещё одна легенда мира игр. Пробираясь по лабиринту подземелий, вы с помощью персидского принца-блондина должны были спасти принцессу. На это у вас был всего один час. В пути подстерегали ловушки, головоломки и враги. Игра была невероятно популярна и портирована на множество платформ. Для технологий того времени у персонажа были удивительно реалистичные движения, а сама игра была очень атмосферной. Версия под MS-DOS вскоре попала в СССР и быстро распространилась по институтам и заводам, нередко парализуя работу целых отделов. Я познакомился с этой игрой в 1993-м, и она произвела на меня неизгладимое впечатление. До сих пор помню, что Shift отвечал за удар мечом.





Castle of Illusion (1990)


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





Sonic The Hedgehog (1991)


В начале 1990-х эта игра была лицом и иконой приставок Sega в постсоветской России. Кусочек игрового процесса демонстрировался в телевизионной рекламе, и это было очень круто и красочно, куда там китайским клонам Dandy. Ещё бы: 16-битная Sega была на голову выше по качеству графики и спецэффектов, чем 8-битная Dandy. Главный герой игры — заряженный невероятным адреналином, реактивный ёж Соник, которым двигала жажда отыскать злодея по имени Dr. Eggman, учёного, который заточил животных внутрь роботов и похитил магические Изумруды Хаоса.





Mortal Kombat (1992)


Это один из лучших в истории файтингов, который фактически задал новую планку качества анимации, разнообразия комбо-ударов, а заодно выливал на игроков тонны крови. Изначально игра разрабатывалась для игровых автоматов, но была портирована и на телеприставки, и персональные компьютеры (там графика была получше). В Mortal Kombat было много игровых персонажей, между которыми происходили схватки. У каждого персонажа были свои хитрые приёмы, свои сильные и слабые стороны. Игра оказалась невероятно зрелищной, играбельной и кровавой. У нас во время поединков выплёскивалось столько адреналина, словно мы сами друг с другом сражались на ринге. Прямо эпическое мочилово, по-другому не скажешь. Превосходное средство расслабления после трудового дня, как и все игры серии Mortal Kombat. Кстати, вы удивитесь, но в этом файтинге даже есть сюжетная линия.





Победное шествие 3D


Doom (1993)


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


По сравнению с Wolfenstein 3D, вышедшей из-под пера той же id Software всего годом ранее, Doom выглядел как дорогая иномарка рядом с неказистым жигулёнком (хотя двадцатилетним обе они покажутся на одно лицо):


Wolfenstein 3D:





Doom:





Tekken (1994)


Яркий представитель японских файтингов, со специфическим дизайном персонажей. Однако в отличие от других файтингов, в Tekken игроки могли управлять каждой рукой и ногой бойца по отдельности. Любопытно, что изначально игра создавалась как внутренний проект компании Namco, предназначенный для тестирования 3D-анимации. Но в конце концов превратилась в полноценный симулятор рукопашных поединков.





Time Crisis (1995)


Шутер от первого лица, в который нужно было играть с пистолетом (который «световое перо»). Игра сама управляла движениями камеры, а игроку нужно было отстреливать всех противников на экране.





Quake (1996)


Наследник Doom, намного превзошедший своего предка. Первый по-настоящему трёхмерный шутер, в котором можно было подойти к трупу врага и рассмотреть с разных сторон — в том же Doom это были просто спрайты, которые отображались на экране одинаково с любого ракурса. Именно с выходом Quake возникло такое понятие, как киберспорт, потому что эта игра вышла на новый уровень реалистичности графики и требовательности к реакции игроков. В народе его ласково называли «квакой». А ещё в Quake появился распрыг! Это когда игрок во время бега подпрыгивал и стрелял себе под ноги из ракетницы, чтобы взрывом его подняло выше и кинуло дальше, пусть и ценой уменьшения здоровья. Так можно было передвигаться гораздо быстрее и запрыгивать на недоступные обычным способом высоты.


Сюжет ещё примитивнее, чем в Doom: вы какой-то абстрактный солдат, уничтожающий монстров, которые куражатся на вашей военной базе. Зато Quake изначально создавался из расчёта на многопользовательский режим. Правда, сначала только в локальных сетях, поскольку в те годы интернет был ещё в диковинку, а модемы и телефонные линии не обеспечивали нужного уровня задержек.





Gran Turismo (1997)


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





Final Fantasy VII (1997)


Фантастическая японская RPG, одна из многочисленных игр очень популярной серии Final Fantasy. К слову, это до сих пор самая продаваемая часть саги.





Первый шутер, в котором история рассказывается на движке игры


Half Life (1998)


Ещё одна эпохальная игра в жанре шутера от первого лица. В ходе неудачного научного эксперимента в сверхсекретном исследовательском комплексе «Чёрная Меса» в наш мир попадают агрессивные инопланетяне. Вы — учёный Гордон Фримен, сотрудник комплекса, начинаете бороться с тварями, в надежде исправить ситуацию.


Игра была инновационной с той точки зрения, что сюжет рассказывался по ходу игры, в разговорах персонажей и других скриптовых сценах, а не посредством видеовставок или текстовых блоков. Half Life стал одной из первых игр, где у игрока по мере прохождения появляются персонажи-союзники. Причём управлявший ими ИИ действовал на удивление толково, что стало одним из прорывов в компьютерных играх. Сюжет и его необычная подача были настолько захватывающими, что Half Life многие считают одной из поворотных игр в истории. Да и сам геймплей был очень бодрым.





Unreal Tournament (1999)


Продолжение игры Unreal, вышедшей в 1998-м. В Unreal Tournament был доведён до ума многопользовательский режим, и на несколько лет эта серия игр стала серьёзным конкурентом серии Quake.





Need for Speed: Porsche Unleashed (2000)


Пожалуй, одна из самых гармоничных с точки зрения играбельности в серии Need For Speed. Также это была первая из NFS, полностью посвящённая машинам одной марки — Porsche.





Первое применение эффекта bullet time


Max Payne (2001)


Шутер от третьего лица. Вы — агент управления по борьбе с наркотиками Макс Пейн, вынужденный скрываться от ареста по ложному обвинению. В этой игре впервые был реализован режим замедления времени (bullet time), что в сочетании со всевозможными трюками в ходе перестрелок создавало этакий кинематографический эффект повествования. К слову, авторы игры не заимствовали фишку с замедлением из «Матрицы», игра начала разрабатываться раньше выхода фильма, и на этом эффекте изначально строился её геймплей.





Mafia: The City of Lost Heaven (2002)


Начало серии игр Mafia. Название говорящее: вы начинаете с самых низов строить карьеру итальянской организованной преступной группировке. Авторы прекрасно передали атмосферу времён Великой Депрессии в США. Благодаря этому, а также прекрасному сюжету и хорошей играбельности, первая Mafia многими до сих пор считается лучшей игрой в серии.





Tom Clancy’s Splinter Cell (2003)


Cтэлс-экшен, пропагандирующий трудное ремесло спецназовца американского АНБ, который должен предотвратить войну между США и Китаем, а также выполнить ещё одно щекотливое задание, связанное с президентом Грузии и каким-то секретным оружием.





Новый уровень симуляции физики


Half Life 2 (2004)


Продолжение первого Half Life. Вы всё тот же Гордон Фримен, борющийся с тоталитарным правительством, назначенным поработившими Землю инопланетянами. Главной особенностью игры был движок Source, обеспечивший невиданную по тем временам реалистичность графики. Также к достоинствам игры относилась превосходная анимация персонажей, мощный ИИ, шейдерный рендеринг. Благодаря физическому движку Havok Physics обеспечивалось очень естественное взаимодействие игрока с миром.





Grand Theft Auto San Andreas (2005)


Продолжение серии игр GTA. По сути, сюжет остаётся прежним — вы играете за некоего персонажа, которого жизненные обстоятельства и/или недостатки характера и воспитания заставляют мотаться по городу и творить всякие непотребства, постоянно нарушая закон. К сильным игры относился огромный открытый игровой мир, наполненный многочисленными NPC, с которыми можно было пообщаться, что шло на пользу атмосферности. Главный герой научился здесь плавать, нырять и лазать через забор. Кроме автомобилей теперь можно было рассекать на велосипедах, тягачах, эвакуаторах, мотоциклах, квадроциклах, самолётах, комбайнах, поезде, и даже с реактивным ранцем. В общем, в San Andreas реализовали около 200 видов транспорта.





Новое поколение графики в RPG


The Elder Scrolls IV: Oblivion (2006)


Эпичное продолжение серии The Elder Scrolls. Действие этой RPG разворачивается в альтернативном мире, где магия и драконы столь же реальны, как мечи и стрелы. Главный герой борется с представителями жестокого культа, который хочет завоевать империю. Одной из сильнейших сторон всей серии The Elder Scrolls оставался полностью открытый мир, по которому можно было свободно перемещаться, выполнять побочные сюжетные линии, вести свободную охоту на монстров и бандитов, обзавестись домами в разных городках, и вообще делать, что в голову взбредёт. При этом игра была могла похвастаться отличным физическим движком, продвинутой системой ИИ и красивой графикой. К примеру, для генерирования ландшафтов использовались обучаемые программы-генераторы, обеспечивавшие больший реализм мира Oblivion.





Halo 3 (2007)


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





Теперь можно поиграть за зомби


Left 4 Dead (2008)


Многопользовательский шутер, в котором была реализована любопытная идея. По сюжету, на Земле возникла пандемия, в ходе которой почти всё население превратилось в Заражённых. Группа из четырёх выживших людей старается пробиться через орды и найти место спасения. Так вот, идея в том, что в мультиплеере случайных игроков собирают в команду четверых, а остальные играют за Заражённых. А благодаря продвинутому ИИ игра подстраивается под тактику и стиль игры, меняя параметры уровней, места респаунов и так далее.





Call of Duty: Modern Warfare 2 (2009)


Серия Call of Duty многие годы конкурирует с серией Battlefield. У каждой из марок есть своя обширная армия поклонников. В кампании Call of Duty: Modern Warfare 2 можно попробовать себя в роли бойцов разных спецподразделений, а в многопользовательском режиме ждёт ураганный экшен, множество видов оружия и военных гаджетов, а также любопытная система перков.





BioShock 2 (2010)


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





The Elder Scrolls V: Skyrim (2011)


Эпохальная и, пожалуй, на сегодняшний день лучшая игра в жанре RPG. Сюжетно она почти не связана с Oblivion, так что в неё можно смело играть новичкам. Игра задала новые высоты с точки зрения реалистичности сгенерированных ландшафтов, графики и физики. Хотя за прошедшие годы она морально устарела, но до сих пор многочисленные фанаты не дают Skyrim пасть в пучину забвения: они наклепали огромное количество апдейтов, благодаря которым игра сегодня продолжает выглядеть очень современно и богато. Собственно, именно фанатские апдейты легли в основу недавнего переиздания Skyrim.





Far Cry 3 (2012)


Продолжение знаменитой серии экшен-игр Far Cry. На этот раз вы играете за американца-туриста, который с друзьями отправился на тропический остров и стал жертвой нападения бандитов. Турист оказался не промах, сбежал и начал заниматься спасением друзей и творить возмездие отморозкам.





Tomb Raider (2013)


Если в предыдущие десятилетия вы умудрились не поиграть в приключения Лары Крофт, то предпоследний Tomb Raider — прекрасный шанс наверстать упущенное, поскольку игра 2013 года является перезапуском серии. Это экшен от третьего лица. Главная героиня — фигуристая молодая антропологиня попадает на корабле со своими коллегами-учёными на уединённый остров, находящийся под властью таинственного и древнего культа. Чтобы спасти себя и своих товарищей, Лара, проявляет чудеса акробатики и владения оружием.





Самый «живой» игровой город


Grand Theft Auto V (2014)


Впервые в одной из самых популярных игр в мире сразу три главных героя, и можно по желанию переключаться между их сюжетными линиями. При этом у каждого персонажа есть свои уникальные возможности: замедление времени при езде, при стрельбе, режим берсерка. Игровой мир GTA V в 3,5 раза больше, чем в GTA San Andreas. Здесь очень детальный подводный мир, который можно изучать с аквалангом или в батискафе, на морском дне можно даже найти НЛО. Разнообразие занятий в городе сильно расширено, появились спортивные заведения и объекты, есть возможность торговать на внутриигровой бирже, посещать развлекательные заведения и так далее. Общий бюджет на разработку игры составил $270 миллионов. Двести семьдесят миллионов долларов, Карл!





Skyforge (2015)


ММОRPG, созданная на движке, разработанном в Mail.Ru Group. Игра пилилась довольно долго, около 5 лет. Здесь вы можете выступать на стороне богов и бессметрных героев, совместными усилиями изничтожая вторгшихся мифических и инопланетных тварей. Одной из главных фишек движка стала огромная дальность отрисовываемого пространства — 40 км: это было необходимо для того, чтобы передать простор мира, "божественные" возможности игроков, размах задач. Сегодня это один из самых "дальнобойных" движков в игровой индустрии.





Horizon Zero Dawn (2017)


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







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

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334876/


Метки:  

Настройка Cisco AnyConnect VPN with 2FA (ActiveDirectory and Certificate) через ASDM

Пятница, 04 Августа 2017 г. 15:16 + в цитатник
Сразу хочу отметить, — не собираюсь устраивать холивар на счет того, что лучше — ASDM or console: на вкус и цвет все фломастеры разные…Я предпочитаю ASDM и настройки такого плана произвожу именно через нее. Поэтому статья будет насыщенна картинками (скринами)

Итак, приступим. Начнем с настройки LDAP сервера (в нашем случае это DC ActiveDirectory), для этого переходим в Configuration > DeviceManagement > Users/AAA > AAA Server Groups и создаем группу, назовем ее OFFICE, Protocol указываем LDAP
image
Configuration Cisco ASA AAA Server Groups


Для того, чтобы добавить сервер в созданную группу, нам необходимо предварительно создать LDAP Atribute Map. Для этого переходим в соответствующий раздел: Configuration > DeviceManagement > Users/AAA >LDAP Attribute Map и создаем новую карту: в нашем случае это Map Name: AD, Mapping of Attribute Name > LDAP Attribute Name: memberOf, Cisco Attribute Name: IETF-Radius-Class
image

LDAP Attribute Map


Теперь можно добавить сервер (настроить подключение к контроллеру домена), указываем интерфейс, через который будем подключаться, IP адрес DC, Server Type: Microsoft, Base DN, Naming Attribute: sAMAccountName, Login DN, Login Password, только что созданную карту LDAP Attribute Map: AD, Group Base DN:

image
AAA Server — Microsoft DC
Add AAA Server


После добавления сервера делаем проверку, проходим аутентификацию учетной записью AD:
image

Test AAA Server — Authentication


Теперь можно добавить сертификат удостоверяющего центра (используется Microsoft CA, в рамках статьи о его настройке рассказывать не буду, единственное о чем следует обязательно помнить: Cisco ASA не воспринимает сертификаты с Signature algorithm RSASSA-PSS, который Microsoft предлагает использовать по умолчанию. мы меняли на sha512RSA):
image

Identity Certificates Signature algorithm RSASSA-PSS — sha512


Переходим Configuration > DeviceManagement >Certificate Management > Identity Certificates и импортируем в формате PKCS12 (*.pfx сертификат + private key):

image
Identity Certificates Signature algorithm sha512RSA (ECDSA 521 bits)


С подготовительными действиями закончили, можно переходить к настройке профилей для AnyConnect VPN. Для примера, будем использовать 2 профиля, у которых будут разные IP Address Pools и соотв. ACL, Dynamic Access Policies, Group Policies и соответственно 2 группы ActiveDirectory. При подключении пользователей по ВПН используем политику «Туннелирование только указанных сетей», так называемый Split Tunneling, чтобы не гнать весь пользовательский траффик через впн. Но это «на любителя», может кому-то, наоборот, такое потребуется — последнее время это очень актуально ;)

Начнем с IP Address Pools, для этого переходим в Configuration > Remote Access VPN > Network (Client) Access > Address Assignment > Address Pools

Создадим пул адресов (сегмент) для администраторов (назовем, например VPN_Admins):

image
Address Assignment — Address Pools


Далее создадим политику (это основная часть настроеек профиля, в которой можно задат: протоколы, которые будут использоваться для туннелей, время доступа, количество одновременных логинов, закрыть доступы к определенным VLAN, выставить таймауты, задать DNS серверы, настроить Split Tunneling, клиентский файерволл и тд и тп) — в общем этой настройке следует уделить особое внимание! Итак, начнем: Configuration > Remote Access VPN > Network (Client) Access > Group Policies, Add Internal Group Policy

Все выставленные параметры сугубо индивидуальны — в нашем случае немного параноидальны Указаны протоколы, которые допускаются для создания туннеля (Tunneling Protocols), временной период для доступа по ВПН (Access Hours), количество одновременных подключений с одной учетной записью (Simultaneous Logins), максимальное время для сеанса и пр.:
image

Configuration > Remote Access VPN > Network (Client) Access > Group Policies > Add Internal Group Policy


Следующая полезная настройка — вкладка Servers, в которой мы можем указать внутр. ДНС серверы, для пользователей ВПН AnyConnect, чтобы они могли обращаться к внутренним ресурсам по имени:

image
Configuration > Remote Access VPN > Network (Client) Access > Group Policies > Edit Internal Group Policy — Servers


Теперь перейдем к еще одной интересной опции — настройке Split Tunneling. Как я уже писал ранее — будем использовать политику «туннелирование только указанных сетей» (мы не заворачиваем в туннель весь траффик пользователей и разрешаем доступ к локальным ресурсам — опция «Local Lan Access» далее будет отдельно рассмотрена):

image
Configuration > Remote Access VPN > Network (Client) Access > Group Policies > Edit Internal Group Policy > Advanced > Split Tunneling >


Ранее мы указали к каким сетям\хостам мы разрешили доступ, теперь ограничим доступ к ним по протоколам\портам (еще один ACL):

image
Configuration > Remote Access VPN > Network (Client) Access > Group Policies > Edit Internal Group Policy > Advanced > AnyConnect Client > Client Firewall > Private Network Rule


В итоге, после подключения к впн AnyConnect клиентом, можно увидеть маршруты в сторону туннеля и правила файерволла:
image

AnyConnect Client > Route Details


image
AnyConnect Client > Firewall


Теперь можно перейти непосредственно к созданию профиля AnyConnect, переходим Configuration > Remote Access VPN > Network (Client) Access > AnyConnect Connection Profiles >, Add AnyConnect Connection Profile

и указываем: Name, Aliases, далее Authentication Method (AAA and certificate), AAA Server Group, Client Address Pools, Group Policy — все созданное ранее!
image

Configuration > Remote Access VPN > Network (Client) Access > AnyConnect Connection Profiles > Add AnyConnect Connection Profile > Basic


И теперь небольшой «лайфхак» — мы из пользовательского сертификата вытащим значение E-mail и с помощью регулярки
(.*)@
отрежем от него
domain.ru
(значение E-mail должно быть
%AD username%@somedomain.ru
) и подставим его в поле Username при подключении.
image

Configuration > Remote Access VPN > Network (Client) Access > AnyConnect Connection Profiles > Add AnyConnect Connection Profile > Advanced > Authentication > Username Mapping from Certificate


Когда профили настроили — мы уже можем подключаться, потому как будет отрабатывать политика по умолчанию DfltAccessPolicy для всех пользователей, прошедших аутентификацию (у нее самый высокий приоритет). Мы же хотим, чтобы для разных групп ActiveDirectory использовался свой профиль и отрабатывала своя групповая политика \ политика доступа. Поэтому, переходим: Configuration > Remote Access VPN > Network (Client) Access > Dynamic Access Policies и запрещаем DfltAccessPolicy (на самом деле не запрещаем, а делаем Terminate с уведомлением пользователя — хорошая диагностика того, что пользователь не включен в требую группу ActiveDirectory):

image
Configuration > Remote Access VPN > Network (Client) Access > Dynamic Access Policies
Terminate connection from users who are not in the access group

После того, как политику по умолчанию запретили, — создадим новую:

Configuration > Remote Access VPN > Network (Client) Access > Dynamic Access Policies > Add Dynamic Access Policy

image
Configuration > Remote Access VPN > Network (Client) Access > Dynamic Access Policies > Add Dynamic Access Policy with AAA Attributes


где g_vpn_level_01 — созданная в ActiveDirectory группа безопасности, куда мы включаем необходимые админские учетки, для подключения по ВПН AnyConnect с профилем VPN-ADMINS:

image
Configuration > Remote Access VPN > Network (Client) Access > Dynamic Access Policies > Add Dynamic Access Policy with AAA Attributes > Get AD Groups


ну и заключительный «штрих» — рекомендую сохранить созданный профиль в файл (полезно, например, для синхронизации профилей для StandBy unit при Failover конфигурации):

image
Configuration > Remote Access VPN > Network (Client) Access > AnyConnect Client Profile

После того, как профиль сохранен — его можно немного «потюнинговать»: помните я говорил про опцию"Local Lan Access"? Она как раз здесь настраивается. А еще здесь же можно настроить выбор хранилища сертификатов, автообновление клиента AnyConnect, разрешить\запретить возможность подключения к компы через рдп, при подключенном впн, указать версию протокола (IPv4 or IPv6 or both, параметры сертификатов и серверов, мобильные политики. В общем есть что «подкрутить» под ваши нужды!
image

Configuration > Remote Access VPN > Network (Client) Access > AnyConnect Client Profile > Edit


Для второй группы — «VPN-USERS» проделываем тоже самое…

P.S. для любителей консоли — выложу конфигурацию позже
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334880/


Метки:  

Левенштейн и подсознательная любовь к DevOps

Пятница, 04 Августа 2017 г. 15:14 + в цитатник
Нас тут частенько обвиняют в том, что мы пишем рекламные статьи, цель которых “опять пропиарить свои курсы”. Поэтому сегодня мы не будем говорить о том, что скоро стартанет курс “DevOps практики и инструменты” — нет.

Сегодня мы хотим поделиться с вами методом розыгрыша, который придумали наши преподаватели — инженеры компании Экспресс 42. Статьи про методы розыгрыша, как показывает статистика, тоже не все любят читать, но ирония судьбы (на последнем розыгрыше мест на курсе “WEB разработчик” оба победителя — читатели Хабра) просто требует, чтобы мы продолжали писать :)

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





Много копий было сломано, в итоге ребята из Экспресс 42 придумали две машины для розыгрыша в виде двух приложений, запускаемых в Docker контейнерах.
Одно приложение более простое: оно будет рандомно выбирать в течение заданного промежутка времени адреса электронной почты участников и показывать их на экране. Два счастливчика, чьи адреса электронной почты останутся на экране по истечении заданного времени, смогут бесплатно обучаться на курсе DevOps. Приложение будет запускаться в Docker контейнере. Использовать Docker мы решили неспроста: работе с этим инструментом отведено особое место на курсе. К тому же, любой у кого установлен Docker на локальной машине, сможет скачать и запустить приложение, используя всего одну команду, так как имидж контейнера будет в доступе на DockerHub. Исходный код приложения будет также доступен в публичном репозитории компании Экспресс 42, который будет называться gilmor (смотрели фильм про счастливчика?).
Довольно просто и без лишних изысков. И это так. Потому что креатив пустили на второй метод: на втором Дне Открытых дверей мы решили угадать среди участников потенциального DevOps эксперта!

Для этого наши преподаватели написали еще одно небольшое приложение, которое опять же упаковали в Docker контейнер. Название тоже подобрали соответствующее: future-devops, под таким названием оно будет доступно у компании Экспресс 42 на GitHub и DockerHub. Как же определить прирожденного DevOps эксперта? Мы думаем, что ценности DevOps проявляются в каждом его начинании, а практики и инструменты сами оказываются у него под рукой. Приложение future-devops способно определить двух участников, в ком больше всего проявляется подсознательная любовь к DevOps :)
На вход подаются два списка — список e-mail участников и список технологий, используемых в курсе. От каждого элемента обоих списков будет посчитана контрольная сумма. С помощью расстояния Левенштейна мы определим наиболее близкие к списку технологий хеши e-mail'ов. Именно эти e-mail и станут победителями! Если в результате будет более 2 адресов, то счастливчики будут выбраны функцией рандом.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334888/


Метки:  

Спасите самолет (задача со звездочкой)

Пятница, 04 Августа 2017 г. 14:36 + в цитатник
В ноябре 2016-го мы задумались о том, как стать необычным партнером отраслевой конференции — чтобы запомниться участникам, но при этом не ограничиваться стендом и раздачей фирменных стикеров и другой сувенирки, ради которых участники обходят выставочную зону на любом мероприятии. Для Highload 2016 мы тогда придумали небольшой интеллектуальный квест — поставили прямо на стенде компьютер, на котором нужно было починить сломанный сервер. Всем понравилось, а мы стали думать дальше. На афтепати Codefest в Новосибирске в апреле мы придумали и провели гикнайт Deadliner — это была альтернативная тусовка, где у участников была важная миссия: команды спасали падающий самолет. Сегодня мы предлагаем спасти его хабрасообществу.

image

Итак, условия задачи:
Самолет терпит бедствие — небольшие неполадки в правом двигателе. Времени мало (горючее кончается), вокруг бегают и шумят пассажиры, обстановка напряженная.
Самолет находится где-то в районе Новосибирска (есть координаты), но cломалась авионика, и не очень понятно, что, где и как. Антенна сломалась, связь в радиусе 10 км GPS не работает. Куда лететь — непонятно, карта карту не показывает. Координаты аэропортов есть только на главной дискете, дискету извлекли, сняли дамп, но там ничего не понятно. Пока есть горючее, нужно срочно расшифровать, куда лететь!

Собрались три крутые команды — из Яндекса, Badoo и СКБ «Контур». Badoo объединились с Костей Осиповым:

image

После нескольких подсказок самолёт спасли ребята из «Контура» (бубен от наших друзей из First VDS был главным призом):

image

Хотите размять мозги — качайте бинарник, попробуйте спасти мир. В комментариях через некоторое время выложим подсказки. Пишите, сколько времени ушло на задачу! А мы пока занимаемся разработкой подобной игры в онлайне — с разными уровнями сложности, рейтингом и так далее.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334884/


Метки:  

История бренда Chupa Chups

Пятница, 04 Августа 2017 г. 14:30 + в цитатник
image
Источник

В конце июля мир потрясла эпатажная новость — усы Сальвадора Дали оказались не тронутыми временем. События развернулись в испанском городе Фигерас, где специалисты эксгумировали тело знаменитого художника. Интерес к личности Дали возрос, но чтобы ознакомиться с творчеством художника, необязательно отправляться в галерею или интернет. Достаточно зайти в магазин, чтобы встретить произведение искусства, знакомое даже маленькому ребенку.


В 1957 году Энрик Бернат стал главой кондитерской фабрики Granja Asturias. Молодой человек был не только потомственным кондитером, но и грамотным бизнесменом.
Кто больше всего любит сладости? Дети! Однако 60 лет назад этот факт не казался столь очевидным. Бернат заплатил за маркетинговое исследование, которое показало, что бОльшую часть продукции фабрики потребляют люди до 16 лет. И пока подрастающее поколение наслаждалось вкусом сладостей, старшее, оставалось недовольным. Сладости, которые был всех цветов и форм, привлекли юных исследователей. Дети вытаскивали конфеты изо рта, рассматривали их. А сахар таял в руках, оставляя липкий след на ладонях и одежде. Это было негигиенично и неряшливо.
Энрик Бернат размышлял. Никто не пачкает руки, когда ест столовыми приборами. Почему бы не попробовать взять леденец вилочкой? Так родилась идея конфет в новом формате — сначала на деревянной, а позже пластмассовой палочке.

Владелец фабрики принял смелое решение и в 1958 году, сняв более 200 видов кондитерского товара с производства, начал выпускать только одну вещь – леденец «с ручкой».
Первоначальное название было ассоциативным: «Гол». Круглый, как мяч. Леденец попадает в рот, как в футбольные ворота.

Но рекламная компания продиктовала свои правила. Динамичную и взрывную песню из рекламного ролика: «Chupa, chupa, chupa Chups», быстро подхватили взрослые и дети.
Прилипчивый мотив дал конфете название — Чупа с созвучным дополнением Чупс. Происходит оно от «Сhupar», что в переводе с испанского означает глагол «сосать». Первый слоган компании гласил «'Es rod'o i dura molt, Chupa Chups», который переводится с каталонского как «Он круглый и долгий».
После того как с ренеймингом было покончено, популярной сладости нужен был логотип. Для решения этой задачи в 1961 году Бернат обращается к своему соотечественнику — скандальному сюрреалисту Сальвадору Дали.

Дали не был лишь художником, как принято считать в широких кругах. Он занимался рекламой: снимался в видеороликах, разрабатывал логотипы, а также рисовал декорации для театров, работал в кинематографе. Пройдет несколько десятков лет, прежде чем подобный вид деятельности получит название «дизайнер» или «PR-менеджер».

image

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

Важным стало решение: размещать рисунок сверху конфеты, а не сбоку, как это делалось раньше. Так форма не искажалась свернутой оберткой, название оставалось читаемым. Ромашка пополнила ряды удачных «вечных логотипов», смотрелась ярко и броско.

image

Логотип претерпел ребрендинг, в 1988 году дизайнеры несколько раз ярко обвели ромашку, оставив общую концепцию гения. Надпись привели к единому стилю.

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

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

Тем временем Чупа Чупс расширял горизонты. Уже в конце 60-х сладость на палочке стала появляться за пределами страны. Ещё через 10 лет, леденцы знали по всему миру: США, Великобритания, Япония, Европа. А в 1991 году Чупа Чупс развернул офис в России, в городе Санкт-Петербург. Компания, начавшаяся в небольшой кондитерской, выросла в корпорацию с годовым оборотом 400 миллионов долларов. А в 1995 году Чупа Чупс стал первой конфеткой, которая полетела в космос.

К концу XX века леденец стал жертвой сексуальной революции, вызывая у людей двусмысленные ассоциации. Создатели рекламной кампании фирмы решили удовлетворить потребителя и выпустили ряд вызывающей и спорной рекламы.

image
Рекламная кампания Chupa-Chups 2002 года
Слоган: Вкус такой возбуждающий, что мы рекомендуем надевать бюстгалтер


image
Рекламная кампания Chupa-Chups 2002 года
Слоган: Единственная вещь на палочке, которую следует лизать.


image
Кампания образца 2004 от DDB Испания под названием “Засос” (Love bite).

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

image

Или

image
Рекламная кампания Chupa-Chups 2005 года
Слоган: Чупа-Чупс без сахара


image
Рекламная кампания Chupa-Chups 2006 года
Слоган: так много фруктов!


Здесь произошел еще один случай, связавший компанию с знаменитостью. Главный тренер футбольного клуба «Барселона» Йохан Кройф не был в списке звезд, рекламирующих леденцы. Столкнувшись с проблемами сердца, он бросил курить. С 1993 года болельщики стали замечать, что вместо сигареты, тренер постоянно занят Чупа Чупсом. С того момента продажи конфет в Испании выросли в 7 раз! С того момента, одно из популярных и масштабных акций Чупа Чупса стала – антитабачная.

image

В конце, маленький интересный факт. Каждый ребенок хоть раз задавал себе вопрос: а зачем в палочке от Чупа Чупса дырочка? В неё свистели, использовали вместо трубочек для сока, но, к счастью, мало кто применял по назначению. Популярность конфет и широкая линейка вкусов привела к возможности возникновения несчастного случая. Малыши настолько увлекались конфетой, что могли заглотить палочку. Отверстие дает возможность дышать, пока врачи окажут первую медицинскую помощь.

image
Источник
Как изменялся логотип Chupa-Chups

Текст подготовила копирайтер Логомашины — Алена Коваленко

Если вам понравилось читать про историю бренда, загляните в нашу предыдущую статью: История бренда Nike
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334882/


Метки:  

Как попытаться сделать пользователю удобно и кое-что запороть в процессе

Пятница, 04 Августа 2017 г. 14:27 + в цитатник
Любое обновления приложений должно нести в себе что-то содержательное. Хотя бы для того, чтобы чейнджлог был информативнее, чем «Мелкие исправления и улучшение стабильности». Ведь раз выкатывается новая итерация приложения, хорошо бы даже поверхностно объяснить пользователю, что именно в нем, собственно, нового.



В 2016-м году мы решили серьезно обновить одну из критичных функций мобильного приложения «Альфа-Мобайл», а именно – авторизацию и регистрацию новых пользователей. Стремления у затеи были самые что ни на есть лучшие – и сделать пользователю удобно, и догнать пару других банков, у которых авторизация проходила по новой схеме.

Итогом же стало падение рейтинга приложения в аппсторе с 4 звезд до 1,5, множество недовольных отзывов и слегка поседевший продакт.

А вот как это было.

Offline -> online


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

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

Технологию новой авторизации мы использовали на нашем другом проекте, Sense, она показала себя неплохо, и мы поняли, что нужно идти в сторону OAuth 2.0 – у клиента должна быть единая точка авторизации во всех приложениях банка. Это позволило бы решить большое количество проблем, как внутренних, так и внешних.

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

Пару месяцев мы дорабатывали сервер авторизации Sense, чтобы приспособить новую авторизацию под мобайл с возможностью масштабирования, сделать правильный flow работы с клиентом и привести все к стандартам OAuth 2.0. Почему выбрали именно OAuth 2.0 – протокол, широко используемый ведущими технологическими компаниями, внутри нее уже проработано множество кейсов. Когда ты выполняешь все предписания стандарта, то уже закрываешь кучу проблем с безопасностью.

Как только мы все это сделали, в декабре 2016-го мы открыли на пользователей новую регистрацию. Общий запуск прошел успешно, метрики радовали глаз, пользователи перестали забивать на регистрацию и становились активными пользователями, а не просто строчкой в БД. Появилась потребность перевести на новую систему авторизации текущих клиентов – целью было масштабировать webview и сделать уже единый мидл для всех каналов.

Конечно, был ряд проблем с консервативными клиентами, которые привыкли к логину, а все иные варианты авторизации считали ересью и вмешательством в личную жизнь. Процесс перехода был сделан очень простым – никакой новой регистрации, достаточно было залогиниться с привычной парой «Логин-пароль», ввести код из SMS и на новой странице вписать желаемый пин-код, который отныне и становился данными для входа.

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

Мы столкнулись с несколькими проблемами: часть пользователей посчитали 4-значный пин небезопасным, поэтому мы ввели возможность использовать пин от 4 до 8 знаков, другая часть пользователей просила возможность входить под разными аккаунтами с одного и того же устройства, были также пользователи с несколькими устройствами, которым неудобно было проходить регистрацию каждый раз на новом устройстве.

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

А вот с iOS возникла проблема.

И началось




Для успешной авторизации с помощью Apple Watch мы шифровали пароль клиента в Keychain, хранилище хорошее, надежное, пока не скомпрометированное. Хеш пароля хранился там, а когда клиент, скажем, с часов пытался проверить баланс счета – мы передавали пароль – авторизовывали юзера – показывали баланс.

И после раскатки новой авторизации на клиентов с iOS случился довольно внезапный факап.

Как все должно было быть в идеале:

  • Юзер регистрируется, вводит свои логин-пароль
  • Попадает на страницу ввода SMS для подтверждения входа
  • Переходит на страницу ввода пина
  • Юзер придумывает пин, он сохраняется, мы сбрасываем пароль
  • Юзер в будущем входит в приложение по пину, все довольны.


Как получилось

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


Происходило такое не у всех пользователей, само собой, но – происходило.

Как результат – ряд не самых позитивных отзывов в AppStore. Да, вишенкой на торте тут еще то, что в то время Apple не давала разработчику возможность ответить на отзыв. То есть видишь ты, что к твоему приложению написан конкретный отзыв о реальной проблеме, но что-то уточнить у юзера ты не можешь. Вообще никак. Остается только читать и желать, чтобы все это побыстрее кончилось.

Что характерно – помогала полная переустановка приложения. Пользователь удалял приложение с устройства, ставил ту же самую версию, и все работало.

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

Мы дебажили. Мы пытались воссоздать разные сценарии на тестовых аккаунтах. Грешили и на старый обработчик Keychain, который для нас писали вендоры, и на сам Keychain (мы нашли у Apple баг, он у них был в Jira, иногда на самом деле информация не сохраняется в Keychain) – все равно не удавалось у себя воспроизвести ситуацию именно так, как это описывали недовольные пользователи.

На тестовых устройствах все пароли были шестизначными, новый же пин на них ставился четырехзначный.

Суть проблемы раскопали не сразу.

Хеш пароля мы сохраняли в Keychain, то же самое с пином (хеш + токен), по токену осуществляли вход в приложение. На бэке не хранятся пароли, и ходят только токены, которые обновляются сильно чаще, чем логин и пароль – один токен протухает раз в сутки, другой живет чуть дольше.

Некоторые клиенты вводили новый пин, который полностью совпадал с их предыдущим паролем. Он не записывался как новый, поэтому система отпинывала юзера на старую страницу входа. Когда мы это отловили (почти через полтора месяца, да), стали выдавать пользователям алерт о том, чтобы новый пин не совпадал со старым паролем. После чего поправили и проблему с неправильным перезаписыванием.

Так что на данный момент в плане авторизации с приложением все ОК. Но все равно остается какой-то процент недовольных новшествами.

Консерваторы. Ну вот не нравится человеку новый вход по пину, хочет он только логин и пароль и все тут.

Семьянины. Есть ситуации, когда муж и жена пользуются для входа в 2 своих аккаунта одним устройством. Если ранее это реализовывалось просто сменой логина и пароля на входе, то после пина теперь такая процедура усложнилась – входить надо заново через карту. Честно, мы не знаем, зачем люди так делают (как минимум, это ставит крест на возможных заначках от жены), но ситуация не самая редкая.

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

Это были довольно увесистые грабли, но они помогли нам сделать правильные выводы и оптимизировать работу команд.

Сейчас мы раскатываем новые версии сначала на 5-10% пользователей, если у них все в порядке – на всех остальных. Обычно это происходит так

  • Раскатка на бета-пользователей
  • На сотрудников Альфа-Лаборатории
  • На всех сотрудников Альфа-Банка (тут уже выборка серьезнее, все-таки 25 000+ человек), можно очень быстро и подробно собрать обратную связь, ведь у всех разные устройства и сценарии использования, которые можно пропустить на тестах.


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

Поэтому мы сейчас активно ищем новых сотрудников – дизайнер интерфейсов / iOS-разработчик / тестировщик / и не только.

Приходите к нам, и будем делать продукты вместе.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334658/


Red Architecture — красная кнопка помощи для сложных и запутанных систем — часть 3 (многопоточность нам в помощь)

Пятница, 04 Августа 2017 г. 13:56 + в цитатник

=^._.^=

Пятница, 04 Августа 2017 г. 13:36 + в цитатник

Метки:  

Крафтовый сайт: каким должно быть портфолио творческого человека

Пятница, 04 Августа 2017 г. 13:02 + в цитатник
Не так давно на глаза попалось интересное высказывание: мы живем в эпоху, когда особо важен персональный бренд. Эта мысль отлично отражает нашу реальность, и вдвойне она верна для творческой работы — графического дизайна, фотографии, музыки, анимации и т.п. Здесь от успеха или неудачи при построении собственного бренда зависит все: от адекватности заказчиков до итогового дохода. И хотя необходимость портфолио у некоторых вызывает сомнения, оно много значит для создания и поддержания личного бренда. А для начинающих именно грамотно составленное портфолио закладывает фундамент будущего успеха. Примеры портфолио, у владельцев которых уже получилось сформировать свое собственное «я» в мире копирования и конкуренции, в изобилии есть в рамках сервиса-конструктора Ucraft. Почему именно Ucraft? Как оценивают эти работы потенциальные работодатели и специалисты, достигшие высот в профессии? Об этом под катом.

https://habrahabr.ru/post/333994/


Метки:  

Как любитель игру писал

Пятница, 04 Августа 2017 г. 12:20 + в цитатник
Пятница, время расслабляющих статей… Я решил написать эту статью благодаря хабровчанину TheShock и благодаря человеку, написавшему в своё время LOOT-RPG.
Как собственно я делал игру, можно прочитать под катом.
Открыв курс по JS на codeacademy, я дошел до простых структур данных и мне наскучило. А что если не выполнить скучные задания, а сделать свою собственную игру с блекджеком и девицами, примерно как в первом примере? Сказано — сделано…
Надо было определиться с жанром. Больше всего на свете я люблю стратегии, чуть меньше — RPG. Значит выбираем стратегии. Что у нас будет? Будет город и его менеджмент. Что-то в духе Townsmen/Travian.
Для начала нам нужен город. Рисуем что-нибудь в духе пустого пейзажа города Heroes или пустого пейзажа неотсроенного города Travian.
Объявляем переменные и инициируем их:
var gold          = 20;
var pop           = 2;
var buildLevelD   = 0;
var buildLevelH   = 0;
var buildLevelTreasury = 0;
var treasuryGuard = 0;
updateResources(); 

Вуаля, в нашем городе начальное население, какая-никакая казна, а также нулевой уровень трех доступных построек и ноль городовых. Поскольку наша игра будет не пошаговой, а в режиме реального времени, то зададим таймер, по которому у нас будет прирост ресурсов:
setInterval(resourcesTimer, 30000);
function resourcesTimer() {
	gold     = gold*1+pop*1;
	if (pop < 2*Math.pow((buildLevelH*1+3),2)) {
		pop      = pop*1+1;
	}
	if (treasuryGuard > 0) {
		if (gold - treasuryGuard * treasuryGuardPricePayroll >= 0) {
			gold = gold - treasuryGuard * treasuryGuardPricePayroll;
		} else {
			treasuryGuard = 0;
			}
	}
	updateResources();
}

Внимательные читатели обратят внимание на updateResources() и вот его код:
	function updateResources() {
		document.getElementById("gold").innerHTML = gold;
		document.getElementById("pop").innerHTML  = pop;
		document.getElementById("treasuryGuard").innerHTML = treasuryGuard;
	}

Давайте уже что-нибудь построим по нажатию кнопки


function Build(Structure) {
		if (Structure==="Wall" || Structure ==="Tower") {
			if (gold >= costWall && buildLevelD == 0) { 
				buildLevelD = buildLevelD*1 + 1;
				gold = gold - costWall;
				redraw   = 1;
				whatDraw = "Wall";
				updateResources();
				return true;
			}
			if (gold >= costTower && buildLevelD == 1) { 
				buildLevelD = buildLevelD*1 + 1;
				gold = gold - costTower;
				redraw   = 1;
				whatDraw = "Tower";
				updateResources();
				return true;
			}
		}
		if (Structure==="Home") {
			if (gold >= Math.pow(costHome,(buildLevelH*1 + 1))) {
				gold = gold - Math.pow(costHome,(buildLevelH*1 + 1));
				redraw   = 1;
				whatDraw = "Home";
				buildLevelH = buildLevelH*1 + 1;
				updateResources();
				return true;
			}
		}
		if (Structure==="Treasury") {
			if (gold >= Math.pow(costTreasury,(buildLevelTreasury*1 + 1))) {
				gold = gold - Math.pow(costTreasury,(buildLevelTreasury*1 + 1));
				redraw   = 1;
				whatDraw = "Treasury";
				buildLevelTreasury = buildLevelTreasury*1 + 1;
				updateResources();
				return true;
			}
		}

}
Отрисовка сделана на Canvas. Это, пожалуй, одна из немногих вещей, которая не пахнет нафталином во всем этом коде. Однако код может многим показаться странным, хоть и неоднократно приведен в разных местах в качестве примера:
function composite() {
			imagesLoaded = imagesLoaded*1 + 1;
			if (imagesLoaded > 1) {
				// composite now
				//ctx.globalAlpha = 1.00;
				ctx.drawImage(img1, 0, 0);   //draw background
				ctx.drawImage(img2, 0, 0);   //draw sawmill
				ctx.drawImage(img3, 10, 40); //draw gold icon
				ctx.drawImage(img4, 10, 80); //draw pop  icon
				ctx.drawImage(img8, 0, 0); //draw wishing well
				if (buildLevelD > 0) {
					// draw back piece of wall
					ctx.drawImage(img6_1, 0, 0);
				}
				if (buildLevelH > 0 && buildLevelH < 10) {
					// draw houses
					ctx.drawImage(img5, 0, 0);
				}
				if (buildLevelH > 10) {
					// draw more houses
					ctx.drawImage(img5_1, 0, 0);
				}
				if (buildLevelD > 1) {
					// draw castle
					ctx.drawImage(img7, 0, 0);
				}
				if (buildLevelD > 0) {
					// draw front piece of wall
					ctx.drawImage(img6_2, 0, 0);
				}
				if (buildLevelTreasury > 0) {
					// draw treasury
					ctx.drawImage(img9, 0, 0);
				}
			}
		}
		
		function loadImage(src, onload) {
			var img = new Image();
			img.onload = onload;
			img.src = src;
			return img;
		}

Сохранения храним в локальном хранилище. Честно, это удобнее, чем работать с куками, но и менее универсально. Хотя с момента, когда я переписал большую часть графика на Canvas, это стало не принципиальным: старые браузеры одинаково не поддерживают и Canvas и localStorage.
function saveGame() {
		localStorage.setItem('gold', gold);
		localStorage.setItem('pop', pop);
		localStorage.setItem('buildLevelD', buildLevelD);
		localStorage.setItem('buildLevelH', buildLevelH);
		localStorage.setItem('treasuryGuard', treasuryGuard);
		localStorage.setItem('buildLevelTreasury', buildLevelTreasury);
	}
	function loadGame() {
		gold = localStorage.getItem('gold');
		pop  = localStorage.getItem('pop');
		buildLevelD   = localStorage.getItem('buildLevelD');
		buildLevelH   = localStorage.getItem('buildLevelH');
		treasuryGuard = localStorage.getItem('treasuryGuard');
		buildLevelTreasury = localStorage.getItem('buildLevelTreasury');
		composite();
		updateResources();
	}

Этой статьей я хотел показать, что если вашей давней мечтой является создание пусть простенькой, но своей игры (и не «3 в ряд»), то всё в ваших руках. Я выбрал JavaScript для этой задачи, потому что браузер есть почти везде, а значит почти везде я смогу играть в свою игру, и мне для этого не потребуется подключение к интернету. Браузер стал универсальной средой исполнения, а не просто программой для отображения контента. Благодаря небольшим переделкам, игру можно стилизовать под те или иные требования, добавить тот или иной функционал, расширить как угодно. Главное — это ваша фантазия, а значит всё в ваших руках. Когда я создавал свой проект, я старался как можно дольше не использовать зависимости, и на текущий момент моя игра пока не использует никаких внешних зависимостей.

P.S.: размещая проект на гитхабе и устанавливая метки (labels), я натолкнулся на проект, где автор кроме того как программирует, еще и обладает художественным вкусом, однако общая идея похожа.

P.P.S.: любые замечания приветствуются)
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334862/


Метки:  

Использования FlyWay для баз данных на примере Maven

Пятница, 04 Августа 2017 г. 12:20 + в цитатник
Привет Хабровчане и Хабровчановки!
Хочу рассказать о очень удобном и полезном инструменте под названием FlyWay. На самом деле статьи уже были на нашем любимом ресурсе, но в последнее время произошли некоторые достаточно существенные изменения, поэтому свежая порция информации не помешает я думаю.

Что же такое FlyWay?
Как говорит официальная страница «Welcome to Flyway, database migrations made easy.», что не может быть неправдой.
Количество поддерживаемых баз довольно приятное:
  • Oracle
  • SQL Server
  • SQL Azure
  • DB2
  • DB2 z/OS
  • MySQL
  • MariaDB
  • PostgreSQL
  • Redshift
  • Vertica
  • EnterpriseDB
  • H2
  • Hsql
  • Derby
  • SQLite
  • SAP HANA
  • solidDB
  • Sybase ASE
  • Phoenix
  • Greenplum
Всего ( мы на данный момент смотрим на использование с Maven, но идеология работы и логика схожи и с другими системами сборки — Ant и Gradle) у нас в запасе есть 6 команд:
  • migrate — migrates the database
  • clean — drops all objects in the configured schemas
  • info — prints the details and status information about all the migrations
  • validate — validates the applied migrations against the ones available on the classpath
  • baseline — baselines an existing database, excluding all migrations up to and including baselineVersion
  • repair — repairs the metadata table

Это собственно описание с официального мануала.
Кроме Sql скриптов так же поддерживает Java-based migrations.
Вкратце пробегусь по личному опыту общения и тактики использования.

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


    org.flywaydb                      // подключили плагин
    flyway-maven-plugin
    4.2.0
    
        UserDB                                   // пользователь
        DBpass                     // пароль базы
        127.0.0.1                                    // адрес базы
        /database/script/            // путь к скриптам - отмечу отдельно, так как по дефолту путь довольно замысловат, скрипты должны лежать в main/src/db/migrte , но это не всегда удобно
    



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

Далее, важно верное именование скриптов. Так как миграции происходят последовательно, необходимо сохранять версионирование. Имена должны иметь вид V1_1__some_text.sql для первого скрипта, далее для второго V1_2__else_text.sql для второго и так далее. Обязательно обратить внимание на двойное подчеркивание перед текстом, это необходимое требование к имени!

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

Приводим скрипты к описанному выше виду, проверяем их на работоспособность ( а как же без этого), далее делаем mvn flyway:clean и получаем чистую базу. Далее используем mvn flyway:migrate и вуаля, получаем ее в том виде, как было до clean.

Затем, по прошествии времени, появляется необходимость добавления данных. Если берем пример выше, у нас к примеру было 2 скрипта, создаем третий с именем V1_3_something.sql и снова проводим mvn flyway:migrate. Flyway определяет, что появился новый скрипт и донакатывает его на нашу базу.

Очень важно обратить внимание, что если были внесены изменения в V1_1 или V1_2, не произведены какие то действия, затем добавлено V1_3 и запущена миграция, то ничего не выйдет. Необходимо соблюдать неизменяемость предыдущих скриптов.

Конечно, в вышеописанной ситуации может помочь repair либо baseline, но не всегда, есть определенные ограничения накладываемые на базу данных, например первая строка официальной документации по repair сообщает нам условие «Remove failed migration entries (only for databases that do NOT support DDL transactions)». Важно обращать на это внимание.

На личном опыте, при использовании OracleBD при ошибке в накатке последнего скрипта помогает baseline.

На данный момент количество скриптов дошло в моем проекте до V3_21, первую цифру меняем в зависимости от проекту, вторую по количеству новых изменений. Проблем не возникает, если необходимо раскатать новое окружение, использую Jenkins, запуск Job и все. Естественно в pom.xml используются профили и их всего несколько — локальный хост, новый хост, обновление старого хоста. Достаточно быстро и удобно.

Вообще, как полагается у хороших людей, официальная документация, довольно подробная, с картинками, наглядно объясняющими что да как, да хорошими примерами, но для того, чтобы сделать первый шаг, описанного в статье будет уже достаточно.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334866/


Метки:  

Поиск лучше места в мире для ветряка

Пятница, 04 Августа 2017 г. 11:36 + в цитатник

Метки:  

Архивируй это: как устроено архивирование файловой системы с помощью Commvault

Пятница, 04 Августа 2017 г. 10:23 + в цитатник

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

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

И сразу дисклеймер: архивирование не равно бэкапу


Как можно было уже догадаться, основной профит от архивирования – в экономии места на хранилке. Квартальные отчеты, которые нужны только при прохождении аудита, фотографии с позапрошлого новогоднего корпоратива – в общем все, что не нужно, переносится в архив, а не лежит балластом на основном хранилище. Так как в итоге файлов меньше, то и объем резервных копий с подуктива сократится, а значит и места под бэкапы нужно меньше.
Как правило, лицензии на архивирование стоят дешевле, чем на резервное копирование.

Пример: лицензия на резервное копирование условно стоит 100 долларов за 1 ТБ, а на архивирование – 70. У клиента есть сервер с 5 ТБ данных, который он полностью бэкапит и платит за это 500 долларов в месяц. После того, как он решил скинуть 4 ТБ в архив, под бэкап осталось 1 ТБ, т.е. 100 долларов в месяц. За архив он платит 4 ТБ х 70 долларов = 280 долларов. В итоге вместо первоначальных 500 долларов клиент платит 380, экономия 120. Умножаем на 12, получается на 1440 долларов меньше ежегодно.

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

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

Что полезного для архивирования есть у Commvault


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

OnePass работает следующим образом:

1. Если уже есть полный и инкрементальные бэкапы файлов, то рекомендуется сделать синтетический бэкап (synthetic full backup). В этом случае файл бэкапа соберется из последнего полного бэкапа и всех последующих инкрементальных и/или дифференциальных копий. Ресурсы исходного сервера при этом задействованы не будут.

2. После завершения бэкапа OnePass определяет файлы, попадающие под политику архивирования (archiving rules), и переносит их в архив (выделенное пространство на СХД или отдельную хранилку для архивов — это как вы решите).

Критерии, по которым OnePass решает отправить файл в архив, следующие:
  • когда начинать удалять файлы в архив (в зависимости от наличия свободного места на диске);
  • когда последний раз открывали файл;
  • когда последний раз редактировали файл;
  • время создания файла;
  • размер файла.


Собственно тут все и настраивается.

3. Файлы, определенные в архив, или удаляются с продуктива совсем, или заменяются на своего рода ярлыки (stubs).
Во втором случае для конечного пользователя мало что изменится. Если бухгалтеру Марье Ивановне понадобится показать аудитору отчет пятилетней давности, то она просто кликнет на ярлык, файл снова переедет на продуктив и откроется как обычно. Небольшие файлы будут восстанавливаться из архива быстро: вордовский файл меньше МБ – несколько секунд. Если это какое-нибудь видео, то времени потребуется больше.
На продуктиве потревоженный файл останется до тех пор, пока снова не попадет под политику архивирования. До этого момента он будет уходить по заданию на бэкап.

Файлики с крестиками и есть те самые ярлыки.

Как и с бэкапом, у администратора есть возможность ограничить количество потоков на восстановление (throttling), чтобы система не прилегла под большим количеством запросов. Можно выставить настройки по количеству файлов на одновременное восстановление, задать интервалы между восстановлениями и пр.

Файлы, которые отправляются в архив, можно зашифровать и хранить их уже в таком виде.
После переноса на архивное хранилище приключения невостребованных файлов не заканчиваются. Для архивного хранилища также можно настроить правила, по которым сами архивы по прошествии времени будут удаляться (retention policy). Например, отчеты отмотали законные три года в архиве, а после автоматически удалились.


На тестовом диске с копиями документов отдела кадров, видео и фото со всяких корпоративов я попробовал применить следующие правила архивирования: файлы старше 0 дней, которые не менялись более 7 дней, размером более 1 МБ. Получилось следующее: до архивации объем данных на продуктиве – 391 ГБ, после – всего 1 ГБ.




Как понять, что отдать в архив


Чтобы определиться с тем, какие именно значения прописать по каждому параметру, в OnePass есть инструмент System Discovery and Archive Analyzer Tool (доступен для пользователей Commvault). Он просканирует файлы по времени последнего изменения, открытия и создания, а также по их размерам. Дальше всю эту сырую статистику можно отправить в Commvault и получить красивые графики и диаграммы, из которых наглядно видно, какие правила архивирования лучше прописать. Не самая удобная схема, признаюсь, но зато будет понятно, в каком направлении копать.

На графике показана статистика по давности изменений в файлах. Скриншот из документации Commvault.


А здесь собрана статистика по дате последнего открытия файла. Скриншот из документации Commvault.

Также делаются отчеты по размерам файлов и их формату. Но самый главный — это File Level Analytics Report. Он предложит правила архивирования, а также покажет, сколько места вы сможете сэкономить, если этими правилами воспользуетесь.

В отчете обещают, что если все файлы больше 10 МБ, не изменяемые больше 90 дней отправлять в архив, то сэкономится 3,85 ТБ. На расчет экономии в деньгах смотреть не стоит: стоимость 1 ГБ на диске почему-то оценивается ими в космические 10 баксов.
Стали бы вы использовать подобное архивирование в собственной практике?

Никто ещё не голосовал. Воздержавшихся нет.

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

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334824/


[Из песочницы] Как использовать Канбан для удобной работы не только менеджеров, но и программистов

Пятница, 04 Августа 2017 г. 10:08 + в цитатник
Канбан — методология управления, которая используется примерно в 10 раз реже, чем Scrum, но от этого не становится менее интересной. В ее основе лежит представление процесса всей организации, как набора взаимосвязанных сервисов, которые в конечном итоге являются сервисом для конечного потребителя.

Канбан особенно легко внедряется начиная с топ-менеджмента и прекрасно комбинируется с теорией ограничений, изложенной в книге «Цель» Элияху Голдрата. Канбан выбирают для себя отделы техподдержки, системные администраторы, и даже менеджеры по персоналу и бухгалтеры, тесно работающие с IT.

Одной из основных отличительных черт являются принципы внедрения Канбана: «Начните с того, что имеете, визуализируйте процесс, договоритесь об эволюционном изменении процессов».

Заметьте, что речь идет не о том, чтобы громогласно объявить о внедрении Канбана, а лишь о том, чтобы эволюционно менять процессы в сторону улучшения. Наверное, вы подумали: «Звучит не страшно. Кто же от такого откажется?». И тем не менее, добиться заметных результатов с точки зрения бизнеса без серьезных изменений не выйдет.

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

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

Выгоды внедрения


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

1) Канбан создан для того, чтобы увеличить прозрачность процессов внутри организации

Как часто происходит, что люди не понимают, как устроены процессы в той части компании, с которой им приходится взаимодействовать, но которая выполняет другую функцию? Например, как много маркетологи знают о работе программистов? А программисты о работе маркетологов?

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

2) Канбан помогает бороться с «многозадачностью» в самых плохих ее проявлениях

Где-то на курсах учат «эффективных менеджеров», которые потом делают сами и советуют другим если задача не превышает 5 минут, отложить то, что ты делаешь прямо сейчас и сделать короткую задачу, чтобы навсегда избавиться от маленького балласта, а потом вернуться к основной, но самые догадливые заказчики начинают представлять каждую задачу как сверхмаленькую и требующую такого приоритетного подхода.

3) Канбан позволяет больше не заниматься оценкой сроков выполнения конкретной задачи

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

Полезные инструменты, делающие Канбан эффективным


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

Канбан-доска


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

Инструкция по внедрению:


1) Определите, через какие состояния реально проходит ваша типичная задача. Вариант «гнев, отчаяние, торг, депрессия, принятие», конечно, не принимается, но звучит поразительно часто.

Например, это могут быть такие столбики для общего IT-процесса(стратегический уровень):
В очереди | В работу | Анализ | Проектирование | Дизайн | Разработка | Тестирование | Выкладка

Или такие(для выделенного подразделения UX-дизайнеров):
В очереди | В работу | Макет | Прототип | Верстка | Передано в разработку

И вторая доска может быть расшифровкой слова «Дизайн» в первой доске, когда одна карточка на большой доске выглядит, как много мелких подзадач на дизайн в технической.

2) Разлинуйте и обустройте физическую или виртуальную доску. На первый этап рекомендуется просто повесить маркерную или пробковую доску на стену и разделить ее линиями, соответственно вашему предполагаемому процессу.

Физическое перемещение карточек по доске вместо электронного варианта дает определенное удовольствие, хотя и доставляет неудобства, особенно распределенным командам. Через 2-3 недели, когда вы поймете, какие именно состояния бывают у ваших работ на самом деле, можно перейти к электронному варианту.

Ограничение на количество работ в процессе. (WIP Limit)


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

Как внедрить:


1) обсудите завалы недоделанных задач(если они есть) и примите решение с ними бороться;

2) введите ограничение на самый заваленный столбец и только на него;

3) как только мы начинаем уделять особенное внимание какой-то части процесса и ликвидируем «завал» в этом месте, то самым узким местом станет другой участок производства, найдите новое самое узкое место и поставьте ограничение и на этот столбик
(даже если для этого вам придется убедить смежное подразделение тоже обзавестись канбан-доской, почему нет);

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

Инициатива по внедрению этой практики лучше всего принимается от самих исполнителей, ее почти невозможно внедрить «сверху», но она того стоит. Коучу достаточно легко подговорить ее использовать людей, показав ее преимущества на игре-симуляции Канбана.

SLA — Service level agreement, или соглашение об уровне сервиса


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

Но, в отличие от статистики, этот уровень может включать небольшой запас при сообщении его внутренним или внешним заказчикам.

Внедрение


1) Подсчитайте статистическими методами, сколько времени в среднем проходит от постановки задачи в очередь заказчиком (внутренним или внешним). А также, в какой временной промежуток уложились наиболее быстрые 10% (назовем его X), и в какой уложились только 90% (назовем его Y). Подсчитайте также время Z для «долгостроев», сколько времени занимали самые длинные задачи.

2) Возьмите Х и прибавьте к нему Y, и вы получите реалистичные сроки выполнения 90% задач, даже если заказчики будут «набегать» со срочными поручениями, которые не могут ждать указанный срок и будут отодвигать ваши задачи. Скажем по секрету, что они наверняка приходят со срочными задачами и сейчас тоже в особом порядке. Автору известны случая «внутренней коррупции», где нарушение приоритетов стоило чашку кофе или шоколадку, некоторые рассказывают о реально заплаченных деньгах.

3) Договоритесь с заказчиком(не имеет значения, внутренним или внешним) о том, что в штатной ситуации задача обрабатывается за время X+Y, и лишь 10% задач могут выполняться крайне долго по тем или иным причинам вплоть до времени Z.

Классы сервисов


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

Как внедрить?


Обсудить эту возможность, написать официальное письмо и добавить разделение строк на доску, оно обычно называется Swimlines, и если в Jira с этим проблем не было в старой версии, то в Asana кажется без дополнительных скриптов это невозможно.

Роль Менеджера запросов(SRM)


В материалах по Канбану авторы изредка честно говорят, что эта роль нужна скорее для того, чтобы не увольнять Product Owner при переходе со скрама, но и в этой позиции (SRM) нет особенной нужды, если нет проблем с получением заданий от заказчика. Эта роль может быть полезна тем командам, которые страдают от отсутствия «единой точки входа» в продуктовых компаниях. Тогда этот человек может устанавливать формальные политики и разбираться с входящей очередью, но это точно не предполагается как работа на полную ставку. Как вариант, можно иметь одного реквест менеджера на несколько команд, и превратить в него бывшего менеджера проектов или руководителя группы разработки(в общем того, кто в новом процессе остался без лишней работы).

Роль Менеджера поставки(SDM)


Service delivery manager — гораздо более сильная роль, и в нее чаще всего ставят именно менеджера проектов, как того, кто нужен изначально, чтобы дела доводились до конца. При наличии деливери менеджера в большинстве случаев роль реквест менеджера практически не нужна, хотя формально они вместе обеспечивают двоевластие, реквест менеджер занимается теми задачами, которые еще не решили, нужно делать или нет, а деливери менеджер теми, которые уже точно нужно делать и доводить до конца.

Каденции. Различные встречи с изменяемой под процесс периодичностью


Таких встреч в канбане много, даже слишком много. Различные встречи от ежедневных до встреч планирования поставок и и планирования наполнения очереди(аналог планирования спринта в скраме).

Ежедневная «летучка» standup


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

Operations Review


Как при работе не уйти в формализм и следование правилам в ущерб продукту?

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

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

Планирование поставки


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

Наполнение бэклога


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

Метрики


Существует стандартный набор метрик продукта: выручка, прибыль, ARPPU(average rate per paying user), чуть более нелюбимая ARPU(average rate per user, которая учитывает выручку в пересчете на всех пользователей, а не только платящих) и другие. Эти метрики очень полезны для любого процесса в продуктовой компании, немного другие, но весьма схожие — для аутсорсной. Но это конечно касается стратегического уровня.

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

Взаимодействие с управлением продуктом


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

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

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

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

Кросс-функциональные команды


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

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

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

И снова про доску, которую многие по ошибке принимают за сам канбан


Как сделать так, чтобы программиста, тестировщика или любого другого инженера больше не дергал менеджер или любой представитель смежных подразделений с вопросом «когда будет готово?»

Достаточно научить людей читать доску и ставить задачи на доску. Ведь в представлении многих канбан = доска, хотя это на самом деле не так.

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

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

Список литературы:

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334860/


Метки:  

«Вредные советы»: Как потерять клиента или 7 лучших прощальных фраз

Пятница, 04 Августа 2017 г. 09:59 + в цитатник
Согласно отчету Customers 2020, к 2020 году клиентский опыт станет ключевым фактором при выборе продукта в секторе B2B и обойдет качество. Грамотный сервис позволяет транслировать корпоративные ценности и увеличивать лояльность клиентов. В некоторых компаниях на этом строится вся культура. Например, Джефф Безос, глава Amazon, требует от своих сотрудников и самого себя посвящать как минимум два дня работе в call-центре ежегодно, чтобы стать ближе к клиенту.

Однако, как говорил Уоррен Баффетт, «потребуется 20 лет, чтобы создать репутацию, и хватит 5 минут, чтобы ее разрушить». Поэтому в этой статье мы собрали 7 опасных фраз сотрудников отдела техподдержки, а также сценарии верного поведения в сложных ситуациях.

/ Flickr / CWCS Managed Hosting / CC

«Сейчас я переключу вас на Игоря — он в этом разбирается»


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

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

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

«Вот увидите — мой начальник скажет вам то же самое»




Существует и обратная ситуация — клиент по какой-то причине может сам попросить переключить его на начальство или же на другой отдел. Есть вероятность, что сотрудник — из страха перед руководством или из-за собственной уверенности — решит задержать заявителя и попытаться объяснить ему свой взгляд на проблему. Результатом такой неуступчивости может стать потеря клиента.

Если сотрудник уверен, что именно он должен решить проблему, следует тактично объяснить, что ситуация находится непосредственно в его компетенции, и он готов ответить на все дополнительные вопросы: «Я здесь, чтобы помочь вам. Не могли бы вы рассказать мне побольше о своей проблеме?» Возможно, иная формулировка или дополнительные факты помогут найти верный подход, но, если по какой-то причине клиенту кажется, что этого недостаточно, следует исполнить его начальную просьбу и перевести звонок.

«Это описано в пункте руководства 74.2»


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

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

«Если вы все знаете, зачем вообще звоните?»


Сотрудник отдела обслуживания однажды может столкнуться с клиентом, который знает больше его или же делает такой вид. Разумеется, это может вывести из себя, поэтому первый пункт разрешения такой ситуации — держать себя в руках. Если клиент всячески показывает свою информированность, прямым текстом утверждает, что он более компетентен, чем сотрудник, и дает указания по ведению дел, психологи советуют признать его подготовленность — «Приятно слышать, что вам известно об этом» — возможно, именно этого ему не хватает.

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

«А, может, проблема в вас?»




Может возникнуть ситуация, когда заявитель будет негодовать и требовать решения, а сотрудник будет придерживаться концепции «лучшая защита — нападение». Безусловно, это в корне неверная реакция, так как клиент никогда не должен чувствовать себя неправым.

В такой ситуации рекомендуется чуткий подход. Для клиента должно создаться впечатление, что сделанная им ошибка — это обычное явление. Чтобы сгладить углы, можно использовать следующую формулировку: «Мы очень благодарны за то, что вы привлекли внимание к этому вопросу. Проблема, похоже, связана с [объяснение ситуации], в которую я сам попадал. Есть хорошая новость: я уже решил проблему. Надеюсь, это поможет! Пожалуйста, дайте мне знать, если у вас остались какие-либо дополнительные вопросы».

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

Если правила компании не предусматривают уступок в этом вопросе, вместо того, чтобы сосредоточиться на ошибке клиента, следует сместить фокус на попытку ему помочь: «Я понимаю вашу ситуацию. Я поговорил со своим руководителем о вашей проблеме. Мне очень жаль, но правила нашей компании не предусматривают работу в этом направлении. Однако мы можем предложить вам следующий вариант…».

«Нет, это невозможно»


Этот ответ поднимает целый пласт проблем, связанных с отрицательными формулировками, губительными для репутации. Авторы книги «Effortless Experience» утверждают, что люди с детства не выносят слова «нет» из уст родителя и реагируют на него тремя способами: обращаются к другому родителю, принимают такой ответ или устраивают истерику. Ни один из этих вариантов не является удачным сценарием развития диалога с клиентом, на запрос которого сотрудник вынужден ответить отрицательно.

Поэтому следует переключиться на положительные формулировки. Вместо «Нет, эта функция доступна только владельцам премиального аккаунта» можно сказать: «Конечно, вы сможете это сделать, как только станете владельцем премиального аккаунта». Хотя суть двух фраз не отличается, воспринимаются они по-разному. Следующий шаг — найти подходящее решение. Вместо «Нет, такую опцию мы не предлагаем» следует сказать: «Пока мы не готовы предложить такую опцию, но у нас есть кое-что, что сможет вас заинтересовать».

«Боюсь, вы не поймете»


Возможно ли такое, что у клиента, который обращается в службу поддержки, нет базового понимания технологии и он звонит снова и снова? Конечно. Чтобы помочь человеку в такой ситуации, нужна выдержка, но бросать его ни в коем случае нельзя. Следует предоставить альтернативные способы достижения конкретной цели. Иногда можно придумать простой пример, чтобы объяснить порядок действий: «Завести второй аккаунт в нашем клиенте можно так же, как в Skype».

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

P.S. А вот еще несколько материалов по теме из нашего блога «ИТ Гильдия»:

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334594/


Метки:  

Пишем бота для Slack на Python

Пятница, 04 Августа 2017 г. 09:44 + в цитатник
Небольшой туториал, как сделать простого слэк-бота на Python, развернуть его на Heroku, подключить Travis CI за двадцать минут и начать делать что-то полезное.

Итак у нас есть бот, который карает людей пишущих в чат «привет», только чтобы отвлечь нас от работы. Как сделать себе такого же, но лучше?


Heroku + Python Web App


Установка хероку прекрасно описана тут нам потребуется всего три файла
- requirements.txt
- Procfile
- runtime.txt
В первом перечисляем все зависимости примерно так
httplib2
slacker
Flask==0.12
можно их сразу не писать, умный PyCharm сам подскажет, что мы что-то пропустили.
Httplib2 понадобится нам чтобы посылать запросы для прохождения авторизации, Slacker — чтобы удобно работать со Slack API, а Flask — для приема запросов, это самый простой и безболезненный веб-фреймворк, требующий нулевой настройки.

В runtime.txt указываем версию пайтона, которая нам нравится.
В Procfile тоже ровно одна строка
web: python app.py

Теперь мы готовы писать свое первое приложение, создаем app.py с таким содержимым
from flask import Flask
from flask import request
from flask import make_response

app = Flask(__name__)

# создали ендпоинт
@app.route('/webhook')
def hello_slack():
    # получили данные из запроса
    request_json = request.get_json(silent=True, force=True)
    # тут ваш код возьмет запрос и вернет в ответ любой dict объект ответа, можно даже пустой
    # примерно так request_json -> response_body_json
    ...
    response_body = json.dumps(response_body_json)
    # упаковали все в корректный респонс
    response = make_response(response_body)
    response.headers['Content-Type'] = 'application/json'
    # и вернули
    return response

if __name__ == '__main__':
    port = int(os.getenv('PORT', 5000))
    app.run(debug=False, port=port, host='0.0.0.0')

Пушим все на гитхаб, заходим на хероку и создаем новое приложение из публичного репозитория. Хероку самостоятельно выкачает коды, поставит зависимости из requirements.txt и запустит приложение согласно Procfile.

Slack


Все, с этого момента у нас есть бекенд по адресу
https://YOUR_APP_NAME.herokuapp.com/webhook
и можно создавать свое слэк приложение, которое будет *делать-что-то-полезное*. Осталось его валидировать для events API (то есть, самого полезного АПИ — АПИ оповещения нас о любых событиях). Слэк сам просто на наш ендпоинт особый challenge-request из которого нужно достать код и положить его в респонс. Теперь уже в настройках слэк-приложения в разделе Event Subscriptions выбираем нужные нам события и все. События будут падать на тот же адрес. Как только сделаете все, что хотите с входящими данными, нужно поддержать авторизацию других пользователей. Для этого нужен будет еще один эндпоинт, например /auth, на который слэк отправит запрос, как только новый пользователь захочет поставить себе ваше приложение. Получив такой запрос, нужно вытащить из него код и выслать POST-ом на slack.com/api/oauth.access вместе с кредами приложения, а на сам запрос ответить любым успешным ответом, или же редиректом на страничку, которую хотите показать пользователю после авторизации.


Travis CI


Бот готов. Осталось убедиться, что он работает. Приложение всегда можно запустить локально и поспамить запросами через curl, но толку от этого мало, поэтому сразу пишем юнит тесты и просим Тревиса следить за репозиторием. Проект в Тревисе создается почти так же интуитивно как в хероку, нужен только адрес репа, все остальное тревис сделает сам если создать еще один файл в корне проекта .travis.yml
language: python
python:
  - "3.6"
script:
  python3 -m unittest discover
В секции script мы сообщаем тревису, что делать, после того как скачана последняя версия исходников. Эта команда (которую стоит почаще запускать локально) сама найдет юнит-тесты в нашем проекте и прогонит их.

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

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

Удачи!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334678/


Метки:  

Поиск сообщений в rss_rss_hh_new
Страницы: 1437 ... 1080 1079 [1078] 1077 1076 ..
.. 1 Календарь