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

Поиск сообщений в 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 ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

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

Как ритейл-компании оценивают эффективность внедрения систем лояльности в России и за рубежом

Среда, 28 Июня 2017 г. 11:40 + в цитатник


Изображение: sekihan, CC BY 2.0

Программы лояльности стали очень популярным инструментом привлечения клиентов в сфере ритейла. Это неудивительно, ведь по результатам исследований до 87% покупателей хотят пользоваться такими программами, а для 83% наличие программы лояльности является серьёзным мотивирующим фактором для продолжения взаимодействия с компанией.

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

Как это работает за рубежом


Разработчики систем лояльности компании FiveStars опубликовали в своём блоге список из четырёх способов оценки качества их работы.

Интернет-опросы


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


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


Установка «пункта сбора мнений» в магазине


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

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

Сбор обратной связи на клиентских мероприятиях


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

Старая школа: фокус-группы


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

Опросы — наше все, или что работает в России


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

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

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

Как еще оценивают программы лояльности


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

  • Показатель возвращаемости покупателей — он позволяет понять, насколько долго клиенты остаются с компанией. Чем больше участников программы лояльности, тем средний показатель должен быть выше. По данным автора книги «Эффект лояльности» (Loyalty Effect) Фреда Рехельда (Fred Reichheld), прирост показателя возвращаемости на 5% выливается в 25-100% рост прибыли компании.
  • Отрицательный отток — это метрика, которая описывает клиентов, которые наоборот купили дополнительные товары и услуги или перешли на более дорогой тарифный план. Эти цифры помогают понять реальное положение вещей и компенсировать показатели естественного оттока, которого нельзя избежать в любом бизнесе. Эта метрика важна для оценки эффективности многоуровневых программ лояльности.
  • Индекс потребительской лояльности NPS — он показывает уровень удовлетворенности пользователей по шкале от 1 до 10 — это степень вероятности того, что человек порекомендует компанию кому-то еще. Индекс высчитывается путем вычитания процента критиков бренда (detractors — тех, кто не стал бы рекомендовать компанию) из процента сторонников (promoters — люди, которые готовы ее рекомендовать).
  • Оценка усилий клиента (CES, Customer Effort Score) — позволяет понять, насколько трудно им было решить свою задачу с помощью компании.

Подробнее о технической стороне организации систем лояльности мы рассказывали в этом материале: «Почему не взлетает «облако»: как работают системы лояльности в магазинах».
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331624/


Метки:  

[Перевод] Одинарная или двойная точность?

Среда, 28 Июня 2017 г. 11:31 + в цитатник

Метки:  

«Проект Ironman». Как подготовиться к «Железному человеку» за 500 часов, используя скиллы PM’а

Среда, 28 Июня 2017 г. 11:18 + в цитатник
Привет, Хабр. С вами Владимир Разуваев. В Softline я руковожу департаментом бизнес-консалтинга и практически все свое свободное время я посвящаю спорту. В этом посте я расскажу о своем опыте подготовки к соревнованиям Ironman. В процессе мне сильно помогли навыки проектного менеджмента. Благодаря им я разложил казавшуюся недостижимой суперцель на задачи, нашел тренера и сам стал для него заказчиком и исполнителем, полностью перенастроил свою жизнь под будущее спортивное достижение, при этом не остался без семьи, но полностью провалил ту часть подготовки, которая была связана с бюджетом. Если для вас это звучит достаточно драматично – прошу под кат.



Начало


Начну немного издалека. Несколько лет назад я решил начать вести здоровый образ жизни. Не с понедельника и не с 1 января. Однажды я обувался, чтобы пойти на работу, и распрямился с багровым лицом и ужасающей одышкой. Я представил, какой жалкий вид имеет эта сцена со стороны. Вечером того же дня я купил кроссовки и на следующее утро отправился в свой первый короткий забег. Первые полгода ЗОЖа были сплошным преодолением: я привыкал к нагрузкам, собрал целую коллекцию травм, но еще через шесть месяцев финишировал в своем первом марафоне. Я почувствовал взрыв эмоций, решил продолжать забеги ради улучшения результатов, чтобы посмотреть мир и познакомиться с интересными людьми – марафоны проводятся в разных странах и на разных континентах, а среди бегунов много действительно выдающихся личностей. Но с каждым новым финишем эмоции притуплялись. Мне нужен был новый вызов. На YouTube на глаза попался красочный мотивирующий ролик про Ironman. Я пересмотрел его несколько раз и понял, что “Железный человек” вполне годится в качестве следующей личной цели.

На следующее утро, когда я «переспал» с мыслью об Ironman, воодушевления существенно поубавилось. Я понял, какая масштабная цель стоит передо мной и насколько скуден набор средств для ее достижения. За 10 с лишним лет карьеры в Softline столь же высокую цель, средства для достижения которой были не вполне ясны, передо мной ставили только однажды: в рамках одного большого проекта пришлось заняться управлением разработкой программного обеспечения. Дело было 10 лет назад, я тогда был молод, не придал значения специфике проекта и согласился его реализовать. А чего бы и не взяться, ведь инструментарий проектного менеджера, как я на тот момент думал, «прокатит» и для той области, где у тебя нет даже базовых знаний. В итоге проект по моей вине почти потерпел фиаско. Спасибо коллегам, которые вовремя оказались на подхвате и занялись этой темой с гораздо большим успехом.

К чему это я? Да к тому, что затея с Ironman вполне могла бы стать способом реабилитации за давний факап. Я смахнул пыль с увесистого тома PM Body of Knowledge, освежил в памяти ряд очень важных рекомендаций из этой книги и решил идти на “проект Ironman” с намерением на этот раз сделать все правильно и вдобавок к спортивным целям закрыть гештальт 10-летней давности.

Про устав «проекта Ironman»


За один вечер я набросал устав проекта, причем постарался это сделать максимально близко к тому, как написано в «библии всех PM’ов». Устав стал основным моим документом для реализации «проекта Ironman».

  1. Обоснование «проекта Ironman»:
    • Обрести новый смысл моей спортивной жизни.
    • Доказать себе, что урок из фиаско 10-летней давности извлечен.

  2. Измеримые цели проекта и соответствующие критерии успеха:
    • Пройти всю дистанцию не более, чем за 17 часов.
    • Уложить всю подготовку в девять месяцев – именно столько оставалось до соревнований, участие в которых я наметил.
    • Завершить состязание во вменяемом состоянии (не под капельницей в карете скорой помощи).

  3. Высокоуровневые тербования:
    • Организовать непосредственное участие моей семьи в процессе тренировок и восстановления.
    • Совместить работу с занятиями спортом без ущерба для выполнения рабочих задач.

  4. Допущения проекта:
    • Скорее всего, на трассе первого Ironman будет существенно теплее, чем в Москве во время основной фазы подготовки к соревнованиям.
    • Удаленная работа с тренером может быть неэффективной, и мне нужно где-то искать реального (не удаленного) наставника, поиски которого могут растянуться.

  5. Ограничения проекта:
    • Мне предстоит на время перестроить свою жизнь так, чтобы подчинить ее ритм целям проекта.
    • Время на подготовку – девять месяцев с 500 часами чистого тренировочного времени.
    • Среднее количество тренировочного времени в день – 2 часа.
    • Бюджет на подготовку — 500 тыс. рублей, включая все накладные расходы, связанные непосредственно с соревнованием.
    • Привязка к конкретной дате: старт отодвинуть нельзя.

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

  7. Требования к одобрению проекта:
    • Дистанция пройдена менее чем за 17 часов.
    • После финиша мне не требуется медицинская помощь.
    • Подготовка к финишу в Ironman заняла 9 месяцев.


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

Про внешнего консультанта


Поскольку перед стартом «проекта Ironman» я дал себе обещание не повторять ошибок, для следующего этапа – составления плана работ – я решил нанять внешнего подрядчика. Им стал опытный «железный человек» — сам действующий триатлет, финишировавший в полном Ironman более 60 раз. То ли у моего инструктора также был бэкграунд в области управления проектами (среди триатлетов много действующих и бывших «топов» разных компаний), то ли в триатлоне по-другому хороших результатов не достичь, но мой консультант начал диалог с правильных вопросов. Первое, о чем спросил меня тренер, — для чего мне вообще финиш в «Железном человеке»? Ответ его устроил, и мы перешли к более конкретным вещам.

Затем внешний консультант приступил в обзору имеющихся ресурсов. Он обрадовался, когда узнал, что мой первый Ironman состоится через девять месяцев, и что я готов уделять достаточно времени тренировкам. У триатлетов есть эмпирическое правило: чтобы вписаться в установленные регламентом Ironman 17 часов на все три этапа соревнования, на подготовку к состязаниям следует потратить 500 часов чистого тренировочного времени. Поскольку в нашем распоряжении чуть меньше 300 дней, эти 500 часов можно достаточно комфортно распределить по всему периоду; в сутки получится около двух часов на спорт. Тренер похвалил мой беговой опыт, а в недостатки записал две других дисциплины триатлона – велоспорт и плавание. На шоссейном велосипеде я не катался ни разу, а плавал к своим 33 годам так себе — мог с трудом переплыть 25-метровый бассейн. Поставить технику педалирования и научиться плыть в открытой воде мне предстояло с привлечением «субподрядчиков».

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

Самый главный для меня как для исполнителя документ – карту тренировок – тренер составил сам. Для этого он использовал сервис TrainingPeaks. Сначала план формировался достаточно крупными мазками. После того, как тренер впервые прислал мне план, я увидел только четыре больших этапа подготовки — базовый период, период строительства, выход на пиковую форму и предсоревновательный период. С началом занятий, когда тренер примерно понял, чего от меня можно ожидать, план стал обрастать деталями, но мой консультант все равно не заглядывал слишком далеко. Планирование конкретного набора занятий на неделю осуществляется с горизонтом 7-10 дней, и это нормально. Такой подход помогает практически без ошибок распределять главный в моих условиях ресурс – время — на конкретные виды активностей.



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

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



В моем случае распределение тренировочной активности (без учета занятий с железом и ОФП в зале) имело следующий вид:
40% — плавание
30% — велосипед
30% — бег

А вот так мы с тренером распланировали все активности в рамках подготовки к Ironman в целом.



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

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

Про тренировочное время


Как и в ИТ-проектах, время в «проекте Ironman» я бы назвал одним из главных ресурсов. Еще на этапе формирования устава проекта я прекрасно понимал, что время на тренировки само собой не образуется, и что его нужно будет где-то брать. Мне предстояло почти на год существенно перекроить распорядок собственной жизни и вместо work/life balance изобрести work/life/sport balance.

Сразу скажу, что под натиском work/life/sport balance первыми пали посиделки с приятелями за кружкой пива, долгие и ненужные поездки по пробкам и лежание на диване перед телевизором. Для меня триатлон – увлечение с очень высоким приоритетом, поэтому о том, что в моей жизни больше нет такого вида досуга, я не жалею.

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

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

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

Про семью


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

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

Про деньги


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

Вторая статья расходов – это оплата услуг тренера. Услуги титулованного консультанта, который полностью руководил «проектом Ironman», стоили мне в общей сложности $1 тыс. Еще примерно $500 я потратил на дополнительные занятия с тренерами по плаванию и велоспорту в Москве.

Теперь о выездах на сами соревнования. Я всегда стараюсь делать так, чтобы на состязания со мной летала вся семья – это оправданная инвестиция и хорошая возможность провести вместе несколько дней. Когда всем лететь не получается, со мной летит супруга. Про стоимость билетов и отелей говорить не будем – тут каждый решает для себя, так ли ему нужно лететь бизнес-классом и жить в пятизвездочной гостинице. А вот на чем сэкономить точно не выйдет, так это на организационных сборах. На соревнования Ironman они немаленькие и составляют $500-600. Сюда же необходимо приплюсовать такую неочевидную трату, как спецпитание во время гонки, одна порция которого стоит 150 руб. Порций на всю трассу надо 10-15.

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

Про итоги проекта


Почти годовая работа над «проектом Ironman» принесла результаты – трасса покорилась мне с первого раза. В принципе, «генеральный прогон» дистанции, который случился за пару недель до официального старта, уже показал, что целей проекта я достиг. Этот факт настроил меня на боевой лад. Я не только финишировал за 11 часов 45 минут — у меня остались силы потусоваться с другими участниками после завершения дистанции, спокойно вернуться в отель и поужинать с семьей. Следующий день я посвятил пассивному отдыху, в ходе которого мне удалось поразмыслить над итогами проекта.

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

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

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

Ironman, который в самом начале испугал меня масштабом задачи, помог существенно перестроить образ мышления. Теперь я знаю, что с правильной методологией и при грамотной реализации реален даже самый сложный проект – хоть личный, хоть профессиональный. Главное – чтобы такой проект содержал в себе разумный градус риска. Каждый раз, когда мне как начальнику департамента «заряжают» амбициозный план по продажам на очередной финансовый период, я мысленно возвращаюсь на несколько лет назад — к моменту, когда загорелся идеей пройти Ironman. И начинаю думать, какие есть возможности для реализации плана – что я могу сделать сам и как я могу помочь своей команде, чтобы этот план был выполнен. На мой взгляд, такая профессиональная деформация, которая произошла под влиянием личной цели, определенно стоит каждой капли пота, которым обильно полита моя дистанция Ironman.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331806/


Метки:  

[Перевод] Как превратить увлечение программированием в работу

Среда, 28 Июня 2017 г. 10:40 + в цитатник


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

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

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

Переведено в Alconost

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

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

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

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

Поэтому я всерьез занялся веб-разработкой.

Не мешкая, я начал собирать реальное портфолио и описывать свои навыки.

Меня уже можно было заметить на таких площадках, как Stack Overflow.

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

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

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

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

Я остался в этой компании на два с половиной года, а затем устроился веб-разработчиком в городе, где живу.

Жизнь как постоянное обучение


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

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

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

Хемингуэй сказал об этом лучше меня:
«Мы все ученики в ремесле, в котором никто никогда не становится мастером».

Он говорил о писателях, но это относится и к разработке.

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

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

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

Из любителя — в профессионалы


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

1. Осознайте, что это осуществимо.


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

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

Если всегда считать, что вам что-то либо дано, либо нет, то очень легко разочароваться и опустить руки.

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

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

Если сможете погрузиться в работу, пережить трудное время и упорно трудиться — вы добьетесь своего.

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

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

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

Но что такое удача?

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

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

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

2. Стремитесь в своем ремесле к совершенству


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

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



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

И это относится вообще ко всему.

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

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

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

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

Мало что может сравниться с неумолимым стремлением овладеть ремеслом.

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

Майк Роу (Mike Rowe) любит говорить, что не нужно начинать с поиска своего призвания.

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

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

3. Начинайте сразу же писать код


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

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

У вас бывало так, что вы дочитали книгу по программированию и отправились сделать что-то самостоятельно — а в итоге поняли, что понятия не имеете, как это сделать? Тогда вы знаете, о чем я.

Решение здесь — простое, но совсем не легкое…

Начните писать код.

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

Сделайте что-нибудь забавы ради.

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

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

Придется столкнуться со сложными задачами и приложить усилия. И это хорошо: такое обучение — самое эффективное.

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

4. Обозначьте себя в Интернете


Начав программировать, вы захотите обозначить свое присутствие в Интернете. Учетная запись GitHub — отличное начало.

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

  1. Он станет для работодателей доступным источником сведений о вас.
  2. На нем можно будет представить свои работы (чтобы не только GitHub знал о них).
  3. Он будет платформой для самовыражения и профессиональной деятельности.

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

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

Сайт должен служить очень конкретной цели.

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

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

Предлагаю разбить сайт на 4 основных раздела:

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

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

2. Статьи
Здесь будет обитать ваш блог и написанные вами руководства. Пишите так много, как только можете — и не бойтесь раздавать ссылки на свои статьи.

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

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

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

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

Не забудьте также форму для связи — чтобы вам могли написать.

Начинайте писать не только для собственного сайта — предлагайте статьи крупным площадкам. Потом можно будет поставить на такие статьи ссылки в разделе «о себе».

5. Учите других всему, что знаете сами


Натан Барри (Nathan Barry) — большой поклонник подхода «учите всему, что знаете». Вот что он рассказывает о сайте CSS Tricks, основанном Крисом Койером (Chris Coyier).

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

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

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

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

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

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

Я предпочитаю использовать термин «публичное обучение».

Многие с этого и начинали — учились публично: они изучали ремесло и описывали ход своего обучения.

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

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

6. Решайте конкретные задачи


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

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

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

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

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

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

Общаясь с потенциальными работодателями (или клиентами), наполняя свой сайт материалами, думайте не о функциях, а о преимуществах.

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



7. Не прекращайте учиться


В тот день, когда вы решите, что освоили что-либо, вы перестанете учиться.

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

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

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

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

В мире веб-разработки мы постоянно каким-либо образом находимся в Интернете, поэтому такие отношения могут принимать разные формы.

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

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

Именно отсюда начинается настоящее обучение, именно с этого момента ваши знания начинают расти.

8. Научитесь сотрудничать


Одно из главных отличий любительского программирования от профессиональной разработки — это необходимость сотрудничать с другими.

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

Поэтому важно научиться эффективно сотрудничать.

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

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

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

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

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

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

Начать можно с этого сайта.

Вперед — зарабатывайте на жизнь


Веб-разработка — это сложно. Это постоянное обучение и приспосабливание к новым технологиям. Идя по этому пути, нужно не только знать технологии, но также понимать деловые процессы и уметь общаться.

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

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

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

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

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


О переводчике

Перевод статьи выполнен в Alconost.

Alconost занимается локализацией приложений, игр и сайтов на 68 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов, перевод технических текстов.

Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.

Подробнее: https://alconost.com

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

https://habrahabr.ru/post/331812/


[Перевод] Осознанные ошибки: как добавить глупость в код ИИ

Среда, 28 Июня 2017 г. 10:13 + в цитатник

Метки:  

Обзор основных секций конференции PG Day'17 Russia

Среда, 28 Июня 2017 г. 09:41 + в цитатник
Друзья, конференция PG Day'17 Russia, которую мы проводим уже в четвертый раз в Санкт-Петербурге, состоится совсем скоро, 5-7 июля. С каждым годом мы растем и расширяемся. В этом году мы сделали событие, посвященное базам данных в широком смысле этого слова.

Неделю назад было опубликовано полное расписание конференции. Мероприятие ожидается очень насыщенным: учебный день, включающий себя 11 мастер-классов; Greenplum Day — бесплатное мероприятие, посвященное одноименной аналитической платформе, от наших партнеров Dell/EMC и Pivotal; два дня докладов — свыше 60 выступлений в шести секциях.

В преддверии конференции совместно с hydrobiont мы составили для вас подборку самых ярких и запоминающихся выступлений.



Интересных докладов хватит на всех. Разработчикам придутся по вкусу выступления экспертов из Data Egret. Макс Богук — специалист уникального уровня, ему не требуется база данных, чтобы прикинуть, как будет работать оптимизатор. Своими сверхспособностями Макс поделится в докладе "Неклассические техники оптимизации запросов в PostgreSQL, или как научить слона танцевать рок-н-ролл". Чтобы понять, что именно ждет вас на докладе Макса, приглашаю посмотреть презентацию 2014 года, с которой Макс выступил на одном из наших митапов под названием PG Master.

Алексей Ермаков, напарник Макса по Data Egret, обладает не менее пугающим объемом знаний по внутренному устройству механизмов PostgreSQL. Глубоко технические доклады Леши пользовались огромным спросом на прошлых PG Day. В этом году Алексей привезет интересный технический доклад про внутреннее устройство планировщика запросов PostgreSQL. Чтобы оценить глубину погружения Алексеем в технические детали, приглашаю ознакомиться с транскрипцией его доклада на одном из прошлых PG Day.

Специально, чтобы порадовать всех админов и девопс, к нам приезжает звездный десант из Zalando: Александр Кукушкин, Алексей Клюкин и Мурат Кабилов. В рамках двух докладов коллеги поделятся успешным опытом эксплуатации PostgreSQL в качестве облачной платформы. Каждый день перед Zalando стоит уникальное испытание: как объединить десятки разрозненных команд, работающих над разработкой многочисленных компонентов огромного бизнеса, без необходимости требовать от каждой из них один и тот же стек технологий. Ответ: единая платформа для хранения данных. Не секрет, что разработчики любят облака за отсутствие необходимости осущесвлять ручное управление базой данных. Специалисты из Zalando решили не плыть против течения, приняли потребность в наличии эффективной облачной платформы и написали несколько своих инструментов, способствующие эффективной экплуатации Посгреса в Amazon AWS. Своим опытом ребята поделятся в рамках двух докладов: "PostgreSQL “в кубе”: Kubernetes для высокодоступных баз данных в Zalando" и "PostgreSQL on AWS: Tips & Tricks (and horror stories)".

Компания Ispirer Systems представит очень любопытный доклад, который будет интересен всем. Коллеги из Ispirer Systems утверждают, что эффективная автоматизация миграции SQL и кода приложений возможна! На PG Day специалисты компании представят решение, которое позволяет автоматически конвертировать бизнес-логику, как SQL объекты, так и код приложений. Приходите послушать и подискутировать :-)

Пик тренда на импортозамещение пришел и ушел. Утихли продолжительные споры, а все заинтересованные компании, вынужденно или по собственному желанию, тихо двигаются в новом для них направлении. Приходилось ли вам задумываться, каково нынче Посгресу живется в кровавом энтерпрайзе? Ровно об этом поведает Антон Бушмелев в одноименном докладе "Кровавый энтерпрайз, или как мы приручили слона". Компания РТ Лабс, подразделение Ростелекома, уже второй год успешно применяет PostgreSQL в новых проектах. Опытом внедрения посгреса Антон поделится на PG Day.

Экстремальные нагрузки на СУБД — штатная ситуация в жизни разработчиков и администраторов из команды Avito. Опытом эксплуатации приедет поделиться Виктор Ягофаров, DBA компании. В докладе вас ждет рассказ про внутреннее устройство и секреты pgBouncer, тюнинг под высокие нагрузки, обеспечение отказоустойчивости и многие другие секреты одного из самых популярных connection pooler'ов в мире PostgreSQL.



В этом году мы расширили тематику конференции и пригласили на мероприятие профессионалов, работающих с популярными коммерческими и открытыми СУБД. Немного расскажем вам про самые интересные выступления, посвященные Oracle и MS SQL Server, которые стоит посетить как посгресистам, так и коллегам из мира Enterprise.

Самый важный доклад в этой секции представит Виктор Егоров, DBA из компании Data Egret. Опираясь на свой стаж работы как с PostgreSQL, так и с Oracle, Виктор проведет сравнительный обзор архитектуры обеих баз. Доклад будет поделен на несколько секций, посвященных конкретным архитектурным решениям: работе с памятью, процессам, версионности и хранению данных. Доклад будет интересен многим. Пользователи PostgreSQL смогут взглянуть на другую СУБД, её особенности и возможности, некоторые из которых можно реализовать и в PostgreSQL. У разработчиков PostgreSQL могут появиться идеи о дальнейшем направлении развития Посгреса. С другой стороны, все пользователи Oracle смогут оценить возможности открытой СУБД. Особенно актуально это для представителей организаций, размышляющих о миграции.

Всех любителей «хардкора» нам тоже есть чем порадовать. Эксперты из технологического центра Deutsche Bank готовят целых три крутых технических доклада. Дмитрий Ремизов преподаст урок по анатомии курсора, Николай Кудинов расскажет о трассировке пользовательских процессов и минимизации ожиданий, а Александр Халухин проведет практический мастер-класс по диагностике производительности Oracle Database.

Не оставили мы без внимания и специалистов по MS SQL Server. Независимый консультант Илья Вербицкий на примере системы безопасности SQL Server 2016 расскажет о наболевшем: как ограничивать доступ к данным и создавать безопасное окружение для функционирования вашего бизнеса. Для всех специалистов, желающих повысить свой уровень владения MS SQL Server, Константин Таранов, специалист одного из подразделений Газпром, проведет интенсивный crash-курс "SQL Server за один день", призванный помочь вам научиться эффективно эксплуатировать этот продукт.

В ходе мастер-класса будут рассмотрены следующие вопросы:
  • сравнение функциональных возможностей SQL Server с Oracle и PostgreSQL;
  • выбор версии и выпуска SQL Server с учетом решаемых вами задач;
  • конфигурация и настройка SQL Server;
  • TSQL — проверенные практики при написании хорошего кода;
  • средства разработки и администрирования для SQL Server — бесплатные и платные инструменты.



В этом году на конференции PG Day Russia также впервые пройдет секция открытых баз данных, отличных от PostgreSQL. Отбор докладов в эту секцию в Программном комитете конференции курировал генеральный директор “Перконы” Пётр Зайцев. Что интересного ждет вас на этой секции?

Прежде всего, это три серьезных технических доклада от «Перконы» про внутреннее устройство MySQL и MongoDB:

Удивительный use-case привезли коллеги их ИТ-департамента МТС. Оказывается, решение для централизованной системы управления балансами, счётчиками, акумуляторами абонентов в режиме реального времени, построенное на базе MySQL Cluster, уже около года находится в эксплуатации компании МТС и продолжает развиваться. Любопытно? И нам тоже, приходите послушать вместе :-)

На PG Day, вы сможете из первых рук узнать нюансы устройства ElasticSearch и MongoDB. К нам в гости приедут Philipp Krenn и Henrik Ingo, эксперты компаний Elastic и MongoDB. Во время конференции коллеги проведут мастер-классы, доклады и семинары, посвященные разработкам своих компаний. Доклад и семинар Philipp'а будут посвящены внутренней организации и примерам организации полнотекстового поиска с помощью Elasticsearch. Henrik поведает про архитектуру нового механизма репликации и преподаст несколько уроков эффективной организации приложений с помощью MongoDB.

Не обошли мы стороной и отечественные разработки. Вас ждут подробные рассказы про Clickhouse от Алексея Миловидова и Tarantool от Василия Сошникова. Хотим отметить, что выступление Василия будет отдельным мастер-классом, в рамках которого вы научитесь строить эффективную микросервисную архитектуру, рассчитанную на высокие нагрузки, подобно тому, что уже существует и функционирует в «продакшене» крупных компаний: Beeline, Avito, Mail.ru и др.

Ну и напоследок, у вас появится прекрасная возможность сравнить NoSQL-фичи в PostgreSQL и MySQL, о которых расскажут Олег Бартунов и Пётр Зайцев соответственно!



Открывает секцию впечатляющий доклад о разработке новой системы хранения аттачей из писем почты Mail.Ru. Как правильно принимать, хранить и не терять 80 000 файлов в минуту, расскажет Андрей Сумин, технический директор сервиса.

Николай Сивко, экс-руководитель эксплуатации в HeadHunter и сооснователь отечественного мониторинга OKMeter, расскажет, как диагностировать различные «бытовые» проблемы эксплуатации постгреса в «продакшене». Практический взгляд на тему мониторинга предлагает Антон Шалимов, разработчик компании Aviasales. Антон прилетает из солнечного Таиланда специально чтобы поделиться с вами опытом построения платформы для сбора, хранения и мониторинга на базе СУБД InfluxDB.



Для всех участников PG Day'17 Russia команда конференции совместно с компаниями Pivotal и Dell/EMC организует бесплатный Greenplum Day, посвященный Greenplum — платформе с открытым исходным кодом для аналитики и Data Warehousing на базе PostgreSQL. Крупные компании, такие как Ростелеком и Тинькофф Банк, поделятся своим опытом эксплуатации.

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

Мероприятие пройдет 5-го июля, с 10:00 до 19:00, в день мастер-классов. Для регистрации на Greenplum Day достаточно записаться, воспользовавшись формой на странице https://pgday.ru/ru/greenplumday. Вход для всех зарегистрировашихся участников бесплатный.

Мы приглашаем всех принять участие! Регистрация будет открыта до старта мероприятия.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331636/


Метки:  

Как защитить корпоративный NAS от вирусов RansomWare

Среда, 28 Июня 2017 г. 08:54 + в цитатник
Вирусы шифровальщики не первый год сотрясают ИТ общественность последствиями своей подпольной работы. Скрываясь за ссылкой в email или в JavaScript коде на странице веб сайта, они молчаливо инсталлируются на рабочие компьютеры или сервера и начинают тихо зашифровывать всю информацию. После окончания шифрования, некоторые просто удаляют ключ шифрования, а не которые требуют выкуп, но далеко не все заплатившие выкуп получают ключ шифрования. Как же с ними можно бороться? Самое главное средство борьбы – быть подготовленным к борьбе.





Системы хранения NetApp FAS/ONTAP


Имеют не только множество интеграций с множеством софта для резервного копирования, антивирусными системами и другими инфраструктурными системами, но также обеспечивает высокую доступность для NAS (NFS, CIFS/SMB) и SAN (iSCSI, FC, FCoE). Унифицированное хранилище позволяет обеспечивать прозрачную миграцию данных между нодами кластера, который может состоять из 24 узлов, а также позволяет задействовать одновременно все ноды кластера для обслуживания NAS и SAN для повышения производительности. Таким образом можно полностью отказаться от подверженных уязвимостям Windows Server и не покупать лицензии и не строить кластеров для высокой доступности, ведь весь функционал уже есть в NetApp ONTAP.

Резервное копирование


Как в самых больших, так и в маленьких организациях рабочие файлы располагают на общедоступном файловом хранилище, чтобы все могли ими пользоваться. Централизация хранения даёт удобство для совместной работы нескольким людям над одними и теми же файлами, но это налаживает и ответственность по защите такой информации. Естественно для борьбы с вирусами-шифровальщиками необходимо регулярно выполнять резервное копирование по схеме 3-2-1. Резервные копии важно хранить отдельно от основной системы.
Системы хранения NetApp FAS/ONTAP имеет в своём арсенале снэпшоты не влияющие на производительность и репликацию на базе этих снэпшотов, которые позволяют интегрироваться с широким списком систем резервного копирования использующие технологии системы хранения данных NetApp:
  • Veeam Backup & Replication
  • CommVault Simpana
  • NetApp SnapManager/SnapCenter.
  • NetApp SnapCreator (бесплатный фреймворк)
  • Veritas NetBackup
  • Veritas BackupExec
  • SyncSort
  • Acronis
  • IBM Tivoli
  • EMC Networker
  • HP Data Protector
  • И другие


Давайте рассмотрим одну из таких систем резервного копирования, Veeam Backup & Replication, которая завоевала доверие и уважение благодаря лёгкости и простоте интерфейса управления. Но это далеко не все преимущества этого продукта, который не только умеет управлять снэпшотами и репликами между системами NetApp FAS, ONTAP Select, ONTAP Cloud и AltaVault, но также позволяет ещё средствами СХД клонировать данные на одной из площадок для тестирования работоспособности и восстанавливаемости из таких бэкапов. Клонирование как и снэпшоты на система NetApp FAS/ONTAP, это очень удобная технология, которая также не влияет на производительность и в начальный момент снятия снэпшота практически не занимает пространство на хранилище создаваясь меньше чем за секунду, в не зависимости от величины клонируемых данных.

Снэпшоты для спасения


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

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

Есть отдельный документ как бороться с вирусами-шифровальшиками используя системы NetApp.

Как снэпшоты не должны работать


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

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

Снэпшоты в операционной системе ONTAP для хранилищ NetApp так не работают. Они были впервые реализованы в операционной системе ONTAP, как часть файловой системы WAFL в 1993 году, эти технологии апробированы временим и сотнями тысяч компаний по всему миру. Кстати само слово «снэпшот» (Snapshot ™) является зарегистрированной торговой маркой компании NetApp, а эта технология снэпшотирования запатентована. Чтобы удостовериться в том, как работают снэпшоты WAFL можно бесплатно скачать на тестовый период виртуальную машину с образом хранилища ONTAP.

mysupport.netapp.com/NOW/cgi-bin/software/?product=ONTAP+Select&platform=Deploy+Install

Автоматизация восстановления


Интеграция снэпшотов хранилища с операционными системами позволит снять рутину с администратора хранилища по восстановлению отдельных файлов. Чтобы пользователи сами могли восстанавливать свои файлы из снэпшотов прямо из своего компьютера стандартными срадствами ОС.


Репликация снэпшотов


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

WORM


Технология Wright Once Read Many или WORM, таже известна и под другими коммерческими названиями, к примеру NetApp SnapLock построенная на базе снэпшотирования, позволяет залочить данные на длительный срок от изменений, в том числе и пользователей системы хранения с повышенными привилегиями. Так можно хранить прошивки, конфиги от разнообразных устройств, к примеру свичей, роутеров и прочее. Подобного рода файлы редко если вообще меняются в течении жизни устройства, а харнилища с поддержкой WORM надежное место для расположения важных файлов-настроек для инфраструктуры, которые нельзя менять, но можно читать. Это свойство можно использовать для того, чтобы загружать конфигурации и прошивки для ключевых компонент вашей инфраструктуры.

Антивирусная защита NAS


Ну и конечно же возможность проверки файлов на стороне хранилища тоже будет не лишней. Системы NetApp FAS/ONTAP интегрируются с широким списком антивирусных систем которые будут выполнять проверку корпоративных данных на NAS хранилище. Поддерживаются самые известные системы резервного копирования:
  • Symantec
  • Trend Micro
  • Computer Associates
  • McAfee
  • Sophos
  • Kaspersky


Снэпшоты как индикатор заражения RansomWare


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


Файл-Скрининг Fpolicy


Fpolicy и ONTAP directory-security API это механизмы которые позволяют анализировать файл, и в зависимости от натсроенных политик разрешать или не разрешать, записывать его или работать с ним. Анализ файла можно проводить на основе расширения файла (встроенный функционал Fpolicy в ONTAP) или по содержимому, тогда нужно специализированное ПО.

Free Cleondis SnapGuard Light Edition

Бесплатный продукт Cleondis SnapGuard Light Edition (SGLE) не только для детекции, но и для восстановления после вирусов-шифровальщиков при помощи снэпшотов на платформе NetApp ONTAP. SGLE способен распознавать паттерны вредоносной работы вирусов шифровальщиков, которые начинают шифровать ваши файлы и остановить клиенты которые зарежены от дальшейшего нанесения вреда и полностью совместим с существующими антивирусными системами.

Free Prolion DataAnalyzer-light

Бесплатный продукт Prolion DataAnalyzer-light предоставляет возможности детекции вирусов-шифровальщиков на платформе NetApp ONTAP.

SMB1 и WannaCry


Вирус WannaCry использует уязвимость в протоколе SMB1 на Windows машинах, этой уязвимости нет в системах NetApp ONTAP. Но попав на Windows он может зашифровать файлы расположенные на NAS хранилище. Компания NetApp рекомендует отключить SMB1 и перейти на более новые версии протоколов SMB v2 или v3 на клиентских Windows Workstation, чтобы избежать заражения.
Более новые версии вируса способны выключать теневое копирование VSS на Windows хостах, но так как расписание снэпшотов на NAS хранилище NetApp настраиваются, включаются и выключаются на самом СХД, то выключенный VSS никак не повлияет на работу снэпшотов.

PS
Также обратите внимание на документ описывающий настройки безопасности ONTAP для усиления защиты (Security Hardening Guide for NetApp ONTAP 9).

Вывод


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

Сообщения по ошибкам в тексте прошу направлять в ЛС. Замечания, дополнения и вопросы по статье напротив, прошу в комментарии.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331808/


«Теперь он и тебя сосчитал» или Наука о данных с нуля (Data Science from Scratch)

Среда, 28 Июня 2017 г. 01:01 + в цитатник
Не так давно я рассказывал о том, как случайно познакомился с понятием Data Science, благодаря курсам от Cognitive Class. Кратко резюмируя ту статью скажу, что по результатам курса я толком ничему не научился, но мне стало любопытно, поэтому спустя какое-то время я побежал в магазин и купил книгу, которой и посвящён данный материал.

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



Часть 1. «Я — это раз» — немного о навыках


Надо сказать, что до прочтения данной книги, мое представление о пользе Data Science не далеко ушло от заглавной картинки, позаимствованной из любимого мультфильма.
Для того, чтобы заглянувший сюда читатель мог спроецировать мой опыт на себя, придется мне немного поведать о своих стартовых навыках. Итак, как и в прошлый раз, досье осталось практически без изменений:
  1. В связах с мат. анализом и статистикой замечен не был;
  2. Навыками программирования на Python не владеет;
  3. Владеет знанием о существовании Data Science, практических навыков не имеет.
  4. Характер стойкий нордический, не женат.

Собственно, почему я решил изучить эту книгу, и поделится впечатлениями о ней?
Просто после курсов Cognitive Class, я решил заглянуть на Kaggle и понял, что даже в туториале по решению задачи про Титаник, я сути почти всех приемов и определений не понимаю.

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

Часть 2. «Два — это Телёнок» — общие сведения о книге



Книга «Data Science. Наука о данных с нуля» — на отечественном рынке похоже появилась совсем недавно, о чем как минимум свидетельствует, то что её электронную версию мне не удалось ни скачать, ни купить. Сам же оригинал был выпущен в 2015 г. Само собой за 2 года в мире IT много чего меняется, например, выходят новые версии библиотек для анализа данных в Python. И тут надо отдать должное автору (Джоэл Грас) и локализатору книги. Изначально, книга писалась с расчетом на Python 2, но автор не оставил свое детище и адаптировал исходные тексты программ, для Python 3 (и кстати выложил это на GitHub), ну а переводчик слава богу разместил в книге уже адаптированные тексты программ (похоже, что с небольшими корректировками).

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

И так начнём повествование о книге. На обороте обложки размещена цитата, действительно четко описывающая размещенный в ней материал: «Джоэл проведет для вас экскурсию по науке о данных. В результате вы перейдете от простого любопытства к глубокому пониманию насущных алгоритмов, которые должен знать любой аналитик данных.» — Роит Шивапрасад. Ну по крайней мере первая часть этой цитаты на 100% верна, книга действительно напоминает экскурсию, когда вам надо за 2 часа осмотреть Эрмитаж и все, что вы успеваете это бежать за экскурсоводом, ловя краткую справку о каждом шедевре. Как ни странно, не могу сказать, что это плохо, по крайней мере книгу успеваешь прочесть раньше, чем она надоест.

Надо отметить, что кого-то, как и меня может ввести в заблуждение название книги.
Важно отметить, что в данном случае «с нуля» подразумевает не с нуля знаний до какого-то практического уровня, а то, что все примеры функций для анализа и визуализации будут написаны в процессе изложения материала. Это напоминает аналогию с книгой «Linux from scratch», которая направлена не на то, чтобы вы прям вот сразу начали пользоваться каким-нибудь дистрибутивом Linux «с интересными обоями», а планомерно, собрали, свою систему с нуля (даже если вы ей потом не будете пользоваться).

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

Итак, как пишут в рапортах представители силовых структур: «по существу вопроса, докладываю следующее:»

Часть 3. «Три — это Python» — содержание и общий подход.



Надо сказать, что с форматом «экскурсии» книга действительно справляется. В ней кратко изложены, наверное, почти все базовые концепции, которые можно встретить в иных курсах по Data Science (например, на той же Coursera). У краткости есть достоинства и недостатки, с одной стороны прочитать книгу при желании можно за 2-3 дня и она не успевает надоесть, с другой стороны материала реально мало и читая «по диагонали» можно, что-то пропустить, в таком случае чтобы что-то понять придется возвращаться и перечитывать главу еще раз.

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

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

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

После вводной части и азов Python, остальные направления книги можно поделить на 3 части:
  1. Очень краткие основы мат. анализа и статистики;
  2. Сбор, обработка, хранение данных;
  3. Машинное обучение (математические модели и алгоритмы для обработки данных и предсказания);

Фрагмент книги и оглавление можно посмотреть на Ozon (не реклама), там как раз содержание и первая глава.

От текстовой части перейдем к практической, выше по тексту была ссылка на страничку автора на GitHub, где размещен код представленный в книге и необходимые данные.

В локализованной версии книги есть ссылка на архив с адаптированной (русифицированной) версией кода, чтобы не нарушать ни чьи права, воздержусь от ее размещения.
Весь код представлен в виде исходников на Python 2 и 3, а также в виде блокнотов для Jupyter notebook. Надо сказать, большое спасибо этой книге, потому что благодаря ей я открыл для себя Anaconda (удобная вещь). На мой взгляд удобней всего экспериментировать с кодом, представленным в книге именно в версии блокнотов Jupyter (который по умолчанию установлен в Анакодне). Хотя с другой стороны по сути в записной книжке весь код вбит в одну ячейку без разбивки и без отдельных текстовых вставок, так что это скорее вопрос вкуса, чем явного преимущества. Кстати если вдруг вас не устроит корневая директорию откуда Jupyter «видит» файлы, то вот действительно рабочий совет (есть варианты и для Windows и для Linux)

Надо отметить, что блокноты идут с заранее подготовленными результатами, чтобы вы могли посмотреть их без запуска кода, а вот после перезапуска расчётов в некоторых местах могут потребоваться маленькие «пляски с бубном» в виде установки библиотек или еще каких-то мелочей (например, подключение к API сервисов).

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

# -*- coding: utf-8 -*-
# linear_algebra.py

import re, math, random # regexes, math functions, random numbers
import matplotlib.pyplot as plt # pyplot
from collections import defaultdict, Counter
from functools import partial, reduce

#
# functions for working with vectors
#

def vector_add(v, w):
    """adds two vectors componentwise"""
    return [v_i + w_i for v_i, w_i in zip(v,w)]

def vector_subtract(v, w):
    """subtracts two vectors componentwise"""
    return [v_i - w_i for v_i, w_i in zip(v,w)]

def vector_sum(vectors):
    return reduce(vector_add, vectors)

def scalar_multiply(c, v):
    return [c * v_i for v_i in v]

def vector_mean(vectors):
    """compute the vector whose i-th element is the mean of the
    i-th elements of the input vectors"""
    n = len(vectors)
    return scalar_multiply(1/n, vector_sum(vectors))

def dot(v, w):
    """v_1 * w_1 + ... + v_n * w_n"""
    return sum(v_i * w_i for v_i, w_i in zip(v, w))

def sum_of_squares(v):
    """v_1 * v_1 + ... + v_n * v_n"""
    return dot(v, v)

def magnitude(v):
    return math.sqrt(sum_of_squares(v))

def squared_distance(v, w):
    return sum_of_squares(vector_subtract(v, w))

def distance(v, w):
   return math.sqrt(squared_distance(v, w))

#
# functions for working with matrices
#

def shape(A):
    num_rows = len(A)
    num_cols = len(A[0]) if A else 0
    return num_rows, num_cols

def get_row(A, i):
    return A[i]

def get_column(A, j):
    return [A_i[j] for A_i in A]

def make_matrix(num_rows, num_cols, entry_fn):
    """returns a num_rows x num_cols matrix
    whose (i,j)-th entry is entry_fn(i, j)"""
    return [[entry_fn(i, j) for j in range(num_cols)]
            for i in range(num_rows)]

def is_diagonal(i, j):
    """1's on the 'diagonal', 0's everywhere else"""
    return 1 if i == j else 0

identity_matrix = make_matrix(5, 5, is_diagonal)

#          user 0  1  2  3  4  5  6  7  8  9
#
friendships = [[0, 1, 1, 0, 0, 0, 0, 0, 0, 0], # user 0
               [1, 0, 1, 1, 0, 0, 0, 0, 0, 0], # user 1
               [1, 1, 0, 1, 0, 0, 0, 0, 0, 0], # user 2
               [0, 1, 1, 0, 1, 0, 0, 0, 0, 0], # user 3
               [0, 0, 0, 1, 0, 1, 0, 0, 0, 0], # user 4
               [0, 0, 0, 0, 1, 0, 1, 1, 0, 0], # user 5
               [0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 6
               [0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 7
               [0, 0, 0, 0, 0, 0, 1, 1, 0, 1], # user 8
               [0, 0, 0, 0, 0, 0, 0, 0, 1, 0]] # user 9


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

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

Часть 4. «Ура козлёнку!» — Заключение.



Итак, что у нас в сухом остатке?

Поскольку на текущий момент все мои знания о Data Science ограничиваются этой книгой и курсами от Cognitive class (СС), то для начала с ними и сравню.

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

Сможет ли полный новичок, что-то понять об основных подходах в области науки о данных? Скорее да, чем нет. Сможет ли он по окончанию книги сразу сделать что-то путное, скорее нет, чем да. Все же, наверное, будет плохой практикой применять для постоянной работы те примеры, что указаны в книге, а значит необходимо выучить основные библиотеки для анализа данных (сам автор тоже об этом говорит по ходу изложения материала). Причем могу предположить, что будет полезно однажды вернуться к примерам «с нуля», когда уже набьется рука на готовых библиотеках.

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

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

Стоит ли в итоге 550 рублей книга из 300 с небольшим страниц, напечатанных на газетной бумаге, решать вам. Могу сказать одно, данная книга вселила в меня уверенность, что теперь я смогу худо-бедно решить задачку про Титаник на kaggle, думаю как раз об этом и будет следующий мой материал.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331794/


Метки:  

IT&City Android хакатон в Нижнем Новгороде

Вторник, 27 Июня 2017 г. 23:04 + в цитатник

1-2 июля в Нижнем Новгороде пройдет хакатон для андроид разработчиков IT&City hackathon. Специально для его организации комьюнити Google Developers Group Nizhny Novgorod впервые объединило свои усилия с Yandex. Приглашаем Android-разработчиков и дизайнеров из Нижнего Новгорода и других городов попробовать свои силы в создании приложений, которые могут быть полезны городу, его жителям и представителям местных IT-сообществ.


image


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


Помогать участникам будут эксперты из Яндекса и GDG Nizhny Novgorod,. Какие именно технологии использовать в приложении — решать разработчикам. Главное, чтобы была реализована изначальная идея.


На хакатоне не будет ни лекций, ни докладов. А принять участие могут все желающие, знакомые с разработкой под андроид – как опытные разработчики, так и начинающие специалисты. Главное требование — взять с собой ноутбук ;)
Можно участвовать самостоятельно, подать командную заявку или объединиться с другими участниками на месте. В команде может быть от одного до четырех человек.


Хакатон пройдет в нижегородском офисе Яндекса. В субботу участники будут работать над проектами, а в воскресенье презентовать свои решения. Созданные участниками приложения будут оцениваться в номинациях:
• Самый полезный проект
• Лучший UX
• Самый фановый проект
• Самый инновационный проект (за использование новейших технологий)
• Приз зрительских симпатий


Победители получат памятные сувениры от Яндекса и GDG.
Подробнее ознакомиться с мероприятием и оставить заявку на участие можно на сайте.
Будем рады видеть вас! До встречи!


image

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

https://habrahabr.ru/post/331792/


Метки:  

Petya.A, Petya.C, PetrWrap или PetyaCry? Новая вирусная угроза для компаний России и Украины

Вторник, 27 Июня 2017 г. 20:06 + в цитатник
Не так давно мы выпустили статью по комплексной проактивной защите от направленных атак и вирусов-шифровальщиков, которая содержала в том числе последние крупные вирусные заражения вредоносным ПО типа Ransomware, в копилку можно добавить еще один пример.
Сегодня, 27 июня 2017 г., зарегистрирована масштабная хакерская атака на серверы и рабочие станции сетей крупных российских, украинских компаний, к которым относятся:
  • «Роснефть»
  • НПЗ «Роснефть» Рязань
  • «Башнефть»
  • НПЗ «Башнефть»
  • «Башнефть — добыча»
  • Хоум кредит
  • Damco (российские и европейские подразделения)
  • Аэропорт «Борисполь»
  • Запорожьеоблэнерго
  • Днепроэнерго
  • Днепровская электроэнергетическая система
  • ХарьковГаз
  • Ощадбанк
  • ПриватБанк
  • Новая Почта
  • Киевский метрополитен
  • Чернобыльская АЭС
  • Ашан
  • Киевстар
  • LifeCell
  • УкрТелеКом
  • Nivea
  • Mars
  • Mondelez International
  • Maersk

Этот перечень пополняется непрерывно, в соцсетях появляется все больше подобных фотографий:


Вирусом является модификация нашумевшего в 2016 году шифровальщика-вымогателя Petya.A/Petya.C. Распространяется новый вирус Petya.C несколькими способами:
  • путем эксплуатации уязвимости в SMB MS17-010 (аналогично майскому Wanna Cry);
  • путем направленной отправки вредоносного ПО по электронной почте
  • использующаяся уязвимость для исполнения вредоносного кода: CVE-2017-0199 (https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-0199)
  • использующаяся уязвимость для распространения и заражения: CVE-2017-0144, он же EternalBlue (https://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0144)

При открытии пользователем вложенного в электронное письмо вредоносного ПО, замаскированного под документ (это могут быть файлы Order-20062017.doc (или другая дата), myguy.xls или модификации), компьютер обращается по адресу 84.200.16[.]242, загружая вредоносный файл Myguy.xls в корень диска С:\. После загрузки происходят следующие операции:
  • открытие вредоносного файла с помощью утилиты С:\Windows\System32\mshta.exe;
  • загрузка шифровальщика по адресу french-cooking[.]com;
  • на компьютере появляются файлы: C:\Windows\perfc.dat, C:\myguy.xls.hta
  • подключение зараженного компьютера к адресам 111.90.139[.]247, coffeeinoffice[.]xyz;
  • распространение вируса по сети по портам TCP: 1024-1035, 135, 445 с помощью уязвимости CVE-2017-0144;
  • заражение MBR (главной загрузочной записи Windows). В случае, если заражение MBR произошло успешно (для этого вирусу необходимо получить привилегии локального администратора, что позволяет реализовать известная уязвимость в SMB), компьютер выдает «синий экран смерти» Windows и перезагружается, при перезагрузке загружается шифровальщик и начинается шифрование всего жесткого диска, пользователю при этом отображается экран со стандартной процедурой по анализу жесткого диска в Windows в случае непредвиденного сбоя — Check Disk.

    В случае, если вирусу не удается получить права локального администратора и заразить раздел MBR, он запускает утилиту шифрования файлов на диске, за исключением системной директории Windows, а также папок, содержащих файлы браузеров (в отличие от WannaCry, который сканировал систему и шифровал файлы определенных форматов), аналогично поведению старого вымогателя Mischa — данное поведение было замечено в лабораторных исследованиях, подавляющее большинство жертв подвергались полному шифрованию диска и блокированию доступа в систему после перезагрузки.

После перезагрузки пользователю отображается окно с требованием выплаты $300 в эквиваленте Bitcoin на кошелек 1Mz7153HMuxXTuR2R1t78mGSdzaAtNbBWX. На момент 23:30 на счет злоумышленникам уже перевели 3.277 BTC (заплатили 31 человек), по текущему курсу (на момент публикации 1 BTC эквивалентен $2409) это $7894.

Как защититься от шифрования данных?


Первым делом необходимо обновить сигнатуры антивирусного ПО на серверах и рабочих станциях (в случае наличия антивирусного ПО) — база сигнатур должна быть обновлена 28.06.2017 не ранее 20:00 (первые упоминания о добавлении Petya.C в базу сигнатур начали поступать в 19ч). Вот перечень вредоносных файлов и их хеш-значений:
  • файл Order-20062017.doc, размер 6215 байт, SHA1: 101CC1CB56C407D5B9149F2C3B8523350D23BA84, MD5: 415FE69BF
  • 32634CA98FA07633F4118E1, SHA256: FE2E5D0543B4C8769E401EC216D78A5A3547DFD426FD47E097DF04A5F7D6D206;
  • файл myguy.xls, размер 13893 байт, SHA1: 736752744122A0B5EE4B95DDAD634DD225DC0F73, MD5: 0487382A4DAF8EB9660F1C67E30F8B25, EE29B9C01318A1E23836B949942DB14D4811246FDAE2F41DF9F0DCD922C63BC6;
  • файл BCA9D6.exe, размер 275968 байт, SHA1: 9288FB8E96D419586FC8C595DD95353D48E8A060, MD5: A1D5895F85751DFE67D19CCCB51B051A, SHA256: 17DACEDB6F0379A65160D73C0AE3AA1F03465AE75CB6AE754C7DCB3017AF1FBD.

На уже зараженных системах указанные файлы располагаются в файловой системе в следующих папках:
  • C:\Windows\perfc.dat
  • C:\myguy.xls.hta
  • %APPDATA%\10807.exe

В коде вредоносного ПО специалисты обнаружили интересную возможность защититься от Petya.C путем ручного создания файла C:\Windows\perfc.dll с помощью стандартного Блокнота.

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


Что делать по факту заражения?


Ни в коем случае не переводите деньги на счет злоумышленников, их электронная почта заблокирована, и вы в любом случае не сможете таким образом восстановить данные.
При заражении рабочей станции / сервера в сети необходимо принять соответствующие меры по устранению вредоносного ПО:
  • Отключить зараженную машину от локальной сети;
  • При заражении MBR в отдельных случаях удается восстановиться с помощью bootrec /RebuildBcd, bootrec /fixMbr, bootrec /fixboot;
  • В случае отсутствия резервной копии сделать резервную копию зашифрованного диска (в случае появления дешифратора, данные можно будет восстановить. Надежду вселяет история с предыдущей крупномасштабной атакой на территории Украины вредоносного вымогательского ПО XData — создатель вируса опубликовал ключи шифрования через несколько дней после распространения вируса, оперативно появилось ПО для дешифрования данных);
  • Загрузиться с загрузочного диска / флешки, установить систему, полностью отформатировав зашифрованный жесткий диск;
  • Установить актуальные обновления безопасности Windows (обязательна установка KB4013389, technet.microsoft.com/en-us/library/security/ms17-010.aspx);
  • Установить антивирусное ПО, обновить базу данных сигнатур;
  • Восстановить данные из резервной копии (в случае наличия резервной копии незашифрованных данных, до заражения).

Данные с жестких дисков, зашифрованных старым вирусом Petya, восстанавливались следующим образом: www.bleepingcomputer.com/news/security/petya-ransomwares-encryption-defeated-and-password-generator-released
Сам дешифратор для старой версии Petya был опубликован на Github: github.com/leo-stone/hack-petya
Дешифратора для новой версии Petya.C еще нет.

Обнаружение распространения вируса по сети


В ходе распространения по сети, предположительно, используется разновидность инструмента от Microsoft Windows Sysinternals — PsExec.
Существует SIGMA-правило для обнаружения использования PsExec, оно может быть автоматически сконвертировано в запрос Splunk и ElasticSearch:
title: PsExec tool execution on destination host
status: experimental
description: Detects PsExec service installation and execution events (service and Sysmon)
author: Thomas Patzke
reference: www.jpcert.or.jp/english/pub/sr/ir_research.html
logsource:
product: windows
detection:
service_installation:
EventID: 7045
ServiceName: 'PSEXESVC'
ServiceFileName: '*\PSEXESVC.exe'
service_execution:
EventID: 7036
ServiceName: 'PSEXESVC'
sysmon_processcreation:
EventID: 1
Image: '*\PSEXESVC.exe'
User: 'NT AUTHORITY\SYSTEM'
condition: service_installation or service_execution or sysmon_processcreation
falsepositives:
— unknown
level: low

Снова эпидемия?


Причиной широкого распространения вируса является невыполнение базовых необходимых мероприятий по защите от направленных атак подобного рода:
  • своевременное обновление системного ПО;
  • повышение осведомленности сотрудников в области ИБ и формирование принципов безопасной работы с электронной почтой.

Организационные мероприятия не могут обеспечить надежной и эффективной защиты от направленных атак и вымогательского ПО, поэтому требуется выполнение комплекса технических мероприятий, о которых мы рассказали в нашей предыдущей статье.
Автор: Евгений Бородулин, главный архитектор компании «Информзащита»
e.borodulin@infosec.ru
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331788/


Как мы писали стратегический кликер на хакатон ReactRiot

Вторник, 27 Июня 2017 г. 18:12 + в цитатник

Привет. Не так давно мы с rjericho увидели статью Как я участвовал в хакатоне Angular Attack, и что из этого вышло. У нас в Барнауле хакатоны начали проводиться всего год назад. При этом они больше были ориентированы на быстрый старт IT-стартапа. Поэтому на них не получалось насладиться использованием всяких прикольных хипстерских библиотек, а приходилось пилить продукт на старых добрых PHP или Java. Однако нам давно хотелось поучаствовать в каком-нибудь фановом мероприятии, где можно просто запилить то, что душе угодно и не придумывать, как это монетизировать.


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


Скриншот интерфейса получившейся игры


За неделю до хакатона


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


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


Для стилизации компонентов был взят glamorous и сам glamor. Понравилось, что весь код одного компонента может быть в одном файле, а не раскидан по папкам css и js и не влияет на другие компоненты.


За два дня до хакатона


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


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


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


Если вкратце:


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

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


И тут бы возникла ещё одна проблема команды из двух программистов — графическая составляющая проекта. Однако по примеру stickytape подходящие иконки юнитов, ресурсов и зданий были взяты из твиттер-пака эмодзи (Кроме лого топора. Оказывается его нет в юникоде и соответственно в эмодзи. Поэтому подходящий по стилистике топор пришлось искать в другом месте).


Пример иконок юнитов


За час до хакатона


Час до хакатона — самое время начать думать об архитектуре проекта :). Однако успели только придумать структуру папок.


Структура папок проекта


В components находятся jsx компоненты реакта. В logic — модели — стейты MobX.
В static собирался бандл вебпака, были вставлены сторонние css, шрифты и картинки.
В styles.js были некоторые общие стили, которые использовались в нескольких компонентах, вроде такого:


import { css } from 'glamor'

export const boldBorder = css({
  border: '3px solid'
})

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


Первый день


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


Компоненты


После чего был сверстан основной трёхколоночный вид и добавлены ещё пара компонентов. Тут хорошо помогли библиотеки react-bootstrap и react-rangeslider.


В итоге получилось вот так:


Общий вид


Затем был написан компонент отображения сетки юнитов и зданий и добавлены некоторые иконки.


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


Обновление игры у нас идёт по тикам: основные тики — по одной секунде. Также были введены более мелкие тики обучения для более плавного отображения прогресса обучения. При клике на юнита начиналась анимация его постройки и если с одним юнитом всё было ещё хорошо, то при клике сразу на нескольких начинались лаги. Даже не так — ЛАГИ. Всё начинало так дико тормозить, что я уже думал просто убрать эту анимацию. Однако время было уже позднее и, решив что утро вечера мудренее, мы пошли спать.


Второй день


Утро второго дня началось с осознания нашей главной ошибки: мы неправильно готовим MobX. Наши минимальные компоненты, отображающие основную информацию не являются observer'ами, а тупо принимают информацию о том, что показывать через props. А это в корне противоречит методу работы MobX.


Было:


> this.props.onTrain(unit)} />

После исправления данной ошибки, скорость приложения стабилизировалась.


Стало:


> this.props.onTrain(unit)} />

Также в процессе исправления данного просчёта было обнаружено, что динамически использовать glamor.css внутри render() это не очень хорошо. На каждое изменение стиля, используемого при анимации он создавал новое правило в таблице стилей, что возможно тоже просаживало производительность.


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


Сетка постройки зданий


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


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


Пример уведомления


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


Итоги


В процессе хакатона были, хоть и на начальном уровне, но изучены реакт и MobX. Самостоятельно были опробованы некоторые грабли :). Один из главных наших выводов: архитектуру лучше всё таки хоть немного продумать заранее. Так конечно получается больше рофлов, но на второй день код сменил цвет на коричневый и некоторые вещи делались ужасными костылями. Код можно найти здесь. Потыкать саму игру можно по адресу town.surge.sh

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

https://habrahabr.ru/post/331778/


SD-WAN «на пальцах»: плюсы, минусы, подводные камни

Вторник, 27 Июня 2017 г. 18:10 + в цитатник
Несколько дней назад меня в очередной раз спросили: «SD-WAN — это чистой воды маркетинг или реально эффективная технология?». Недоверие понятно: ко всему новому — а технологии всего пара лет — рынок присматривается с подозрением.

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


Что это и для чего


Когда мы говорим про SD-WAN — программно-определяемые распределенные сети — мы подразумеваем решения для управления сетью и передачи данных между центром и филиалами.

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

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

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

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

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



Для чего еще это нужно


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

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

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

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

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

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

Кому это нужно


Любой организации с большим количеством филиалов. Когда инфраструктура филиалов усложняется и есть проблемы со стабильностью работы каналов связи — решением может стать SD-WAN

В чем преимущества технологии


Основное преимущество, на мой взгляд — возможность объединения нескольких каналов связи в один логический. И, соответственно, интеллектуальное перераспределение трафика в зависимости от типа приложения между этими каналами.

Минусы и подводные камни


Для компании, которая собирается обновлять парк своего филиального сетевого оборудования, я минусов не вижу. SD-WAN — самое современное решение по управлению работой филиалов, по распределению трафика. Противопоказаний, как таковых, нет. Но если вы уже успели закупить классическое оборудование — то увы. Резкие перемены повлекут за собой определенные сложности. Что, впрочем, зависит только от бюджета организации.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331776/


Метки:  

Кассовые аппараты выходят онлайн: налоговая России открыла новый рынок для разработчиков приложений

Вторник, 27 Июня 2017 г. 18:06 + в цитатник
Для среднего хабравчанина, возраст которого, по точным вычислениям НЛО, составляет 31 год, мир сейчас совсем не тот, каким был, когда он появился в нём на свет. Телефоны-автоматы с кольцом набора номера, домашние телефоны и телеграф сменили мобильные телефоны. Очереди в кассы сменились временами падающими от перегрузок сайтами. Рыбалку заменили покемоны. Но кассирши как сидели за своими кассами в 1986 году, пробивая чеки, так и сидят. Они обросли терминалами, мы — бесконтактными платежами, но суть не поменялась. Рутина, не менявшаяся более ста лет. Пока не настал XXI век.

image

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

Вступление 1. Главное изобретение Apple


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

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

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

Вступление 2. Налоговая — как главный европеец России


Замечали ли вы, как меняется к лучшему наша налоговая? В принципе, это утверждение будет малость не в тренде, и понятно, почему — даже если взаимоотношения гражданина с государством меняются в лучшую сторону, то не всегда это происходит гладко, быстро и просто грамотно. Тем не менее, налоговая служба в Российской Федерации, развивая цифровые и онлайн-сервисы, максимально развернулась к гражданину лицом. Никакой лирики: просто какой орган, как ни налоговая, заинтересован в нас, гражданах, сильнее? Им нужны наши деньги — это самый сильный стимул развивать удобство процесса их получения. В общем, ничего удивительного, если вдуматься, что ФНС РФ пошла вопреки всем последним трендам в отношениях государства с интернетом, и сделала один из тех самых шагов, который изменит значительную часть наших жизней, как когда-то сделала Apple, создав App Store.

Вступление 3. Закон 54. Кассы выходят в интернет


Уже действующий Федеральный закон №54 предписывает, что прямо с этой субботы, 1 июля 2017 года, все кассы в Российской Федерации должны подключаться к интернету и отправлять электронные версии чеков в налоговую. У кассы вместо привычной ЭКЛЗ должен быть фискальный накопитель, информация с которого будет отправляться в налоговую через посредника — оператора фискальных данных.

Если вы подумали, что гуру местной ша(у/ве)рмы Ашота, кухня которого только по слепоте мишленовской комиссии до сих пор не получила ни единой звезды, это не коснётся так же, как не коснулись платежи картами, PayPass и Apple Pay, то вы ошибаетесь. Никакого больше чёрного нала — по крайней мере, легально. Если у Ашота есть касса — то она тоже будет выходить в интернет и гуглить способы маринования кошачьего мяса.

В следующем году реформа затронет и тех, кто до сих пор обходился без кассы. Онлайн-кассы установят все: бизнесмены, которые оказывают услуги и проводят работы; владеют интернет-магазином, торговым автоматом или платежным терминалом; работают по ЕНВД или патентной системе. Впрочем, Большой брат милостив к совсем малым формам малого бизнеса: закон 54 оставил возможность работать без кассы некоторым организациям и ИП. Например, без кассы можно чинить обувь, продавать мороженое и арбузы, торговать кокошниками на ярмарках и таскать багаж на вокзале. Полный список исключений — в статье 2 закона о ККТ.

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

Как это изменит нашу жизнь


Очень сильно. Ну, допустим, жабры для дыхания под водой это нам не добавит, а пробки мы всё-таки же будем объезжать, а не облетать (по крайней мере, пока), но всё же покупки — старые добрые оффлайновые покупки до сих пор остаются важной и неотъемлемой частью нашей повседневности.

Сейчас закон описывает новые возможности скупо: скажем, если покупатель попросит, продавец обязан отправить ему электронный чек на почту или в смс. Но только «если есть техническая возможность». Оба чека имеют юридическую силу. Это, конечно, прекрасно — но где тут life-changing experience?

Обязав практически все кассовые аппараты подключаться к интернету, ФНС фактически принудила рынок розничной торговли к тотальному обновлению своих кассовых аппаратов. На кассовые аппараты, подключаемые к интернету. Закону важно, чтобы они выполняли пару определённых функций и соответствовали некоторым определённым стандартам. А дальше — что законом не запрещено, то разрешено. Например, ничего не мешает превратить кассовый терминал в смарт-гаджет, открыв для разработчиков API для разработки приложений для них.

Так поступила компания «Эвотор». Российский производитель новых касс с выходом в интернет («смарт-терминалов», как они их называют), следуя заветам Джобса, добавили к своему железу то, что оказывается важнее всего железа: экосистему. Точнее, инструментарий для её создания, который компания презентует завтра, 28 июня, на конференции Change в московском Yota Space.

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

В распоряжении разработчиков будут не только сами кассы «Эвотор», но и варианты периферии, подключаемой к ним: весы, принтеры чеков, сканеры штрихкодов, денежные ящики (то, что в простонародье и называется кассой — куда кассиршами укладываются наши кровно заработанные), банковские терминалы.

Уже реализованным проектам для касс «Эвотор» можно распределить по следующим категориям разработки:

  • интеграция товарного учёта (МойСклад, 1С)
  • софт для периферии (драйвера для конкретных устройств)
  • интеграция с веб-сервисами вроде Яндекс-Справочника
  • экспорт информации — например, телеграм-бот, через который отслеживается вся кассовая активность
  • маркетинг — например, приложение, которое может узнавать покупателей по предварительному профилю (например, на основе предыдущих покупок постоянного клитента) и предлагать кассиру подсказки с рекомендациями для конкретного покупателя.

И так далее. Прелесть такого формата в том, что мы никогда не знаем, как рынок, новые возможности и реакция на спрос клиентов повернут применение даже такого, казалось бы, утилитарного механизма, как кассовый аппа… простите, смарт-терминал. В конце концов, вряд ли Стив Джобс, срывая покрывало со свежезапущенного App Store мог знать, что однажды в нём появится приложение, имитирующее звук удара хлыстом (Вжухщ! — незаменимая вещь для начальства с тягой к древнеегипетскому стилю руководства и амбициями к строительству пирамид, кстати)?

Но то, что это изменит то, как мы хотим в магазин — однозначно. Возможно, кому-то не очень понравится, что касса ему напоминает взять молоко, которое он берёт обычно (Got milk?) — но и сейчас хватает людей, которые не в восторге от постоянно записывающих их местоположение карманных шпионов, ощерившихся всеми видами считывающих и записывающих инструментами. Но в большинстве люди ценят удобство, простоту, скорость и предупредительность современных гаджетов. Наверняка мы оценим и то, как новые кассы помогают нам делать быт проще.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331772/


Метки:  

МФТИ запустил первую в России онлайн-магистратуру по технологическому предпринимательству

Вторник, 27 Июня 2017 г. 17:17 + в цитатник


Московский физико-технический институт открыл набор в онлайн-магистратуру по технологическому предпринимательству. Это первая программа такого формата, позволяющая получить полный объем знаний по проектированию, разработке и выводу на рынок высокотехнологичных продуктов. О том, чему будут учить в онлайн-магистратуре Физтеха, рассказывает руководитель проекта, научный руководитель Межвузовской программы подготовки инженеров в сфере высоких технологий, заместитель заведующего кафедрой технологического предпринимательства МФТИ-РОСНАНО Вячеслав Чикин.

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

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

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

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

Мы рассчитываем, что на эту программу придут не вчерашние бакалавры, а те, кто уже имеет от 5 до 10 лет опыта работы, кто уже достиг определённых успехов и понял, что хочет большего.

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

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

Этому мы как раз будем учить наших студентов – умению находить возможности.

О магистратуре:
Магистратура «Технологическое предпринимательство» МФТИ реализуется в партнерстве с компанией еНано (группа РОСНАНО). Программа основана на модели кафедры технологического предпринимательства МФТИ-РОСНАНО, успешно развивающейся с 2013 года как Межвузовская программа подготовки инженеров в сфере высоких технологий и объединяющей ведущие московские вузы МФТИ, МИСиС, МИФИ и РАНХиГС. В ходе обучения слушатели работают над собственным бизнес-проектом под руководством тьютора и ментора программы. По итогам обучения выдается магистерский диплом МФТИ государственного образца.

Преподаватели магистратуры – практики и лидеры в своих областях:
Григорий Ципес (главный консультант компании IBS), Владимир Антонец (международный эксперт в области коммерциализации результатов научных исследований и разработок), Анатолий Левенчук (президент Русского отделения международного совета по системной инженерии INCOSE), Алексей Николаев (руководитель программы развития инноваций Intell Россия) и многие другие.

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


Слушатели магистратуры изучают следующие курсы:
  • Стратегии коммерциализации результатов НИР и НИОКР
  • Основы финансового моделирования
  • Системное мышление и инженерия требований
  • Экономика для технологических предпринимателей
  • Методические инструменты анализа и развития технических систем (ТРИЗ + Дизайн-мышление)
  • Agile методы управления проектами, процессами, задачами
  • Архитектура предприятия
  • Управление проектами и инновационными программами
  • Финансы & Инвестиции
  • Маркетинг инновационных продуктов
  • Управление разработками новых продуктов
  • Лидерство. Формирование и управление эффективной командой


Стоимость обучения — 250 тысяч рублей в год, возможно получение образовательного кредита, оплата в рассрочку и поэтапно.
Длительность обучения – два года, начало обучения – осень 2017.

Подробная информация на сайте онлайн-магистратуры
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331768/


Метки:  

[Из песочницы] Плагин jQuery — jdDialog. Принцип «транзитных вызовов»

Вторник, 27 Июня 2017 г. 17:11 + в цитатник

Постановка задачи


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

Поэтому принято решение выполнить косметическую операцию.

Итак, сформулированы следующие требования:

  • реализовывать на jQuery 1.9,
  • вызов аналогично стандартным окнам для быстрой замены кода,
  • вложенность диалоговых окон 2-3 уровня,
  • заменить диалоговые окна типов confirm и alert.

Первым делом обратился к поиску в Google. Имеющиеся разработки мне не подошли, т.к. хотелось по максимум сохранить синтаксис вызова…

if(confirm('') ) {...}

или предлагали дописывать достаточно объёмные фрагменты кода в виде дополнительные функций, описывающих что именно будет происходить после того или иного выбора в окне (например Dialog UI).

В процессе разбора задачи выявил основные проблемы:

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

Главный вопрос — как вернуться на то место в коде, которое уже проскочил?

Задача стала выглядит следующим образом:

  • Остановить выполнение функции.
  • Сформировать диалоговое окно.
  • Дождаться выбора пользователя (при этом неизвестно когда это произойдёт).
  • Обработать вызов пользователя.
  • Продолжить выполнение с точки вызова.

Реализовать такое на jQuery, по крайней мере для меня, выглядит довольно затруднительной задачей.

Принцип решения


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

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

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

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

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

Напоминает рекурсию, но отличается тем, что:

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

Результаты выбора удобно сохранять в привязке к элементу DOM, инициировавшему вызов диалога в виде атрибутов data-, нестандартных атрибутов или в виде именованных данных с помощью функции .data().

Данному принципу присвоил рабочее название «транзитно-диалоговых» или «транзитных» вызовов.

В моём примере реализовано в виде плагина jQuery.
Код плагина с примером вызовов выложен здесь.

По мере разработки столкнулся со следующими проблемами:

Проблема №1)

Т.к. диалоговые окна могут быть вложенными, придётся сохранять состояние каждого окна. Для этого необходимо ввести идентификатор окна.

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

Ответы сохраняются для каждой кнопки-инициализатора диалога, так что мы получаем некое «транзитное пространство имён», благодаря чему можем в каждой функции использовать повторяющиеся id окон. Я использую 1,2, и так далее.

Проблема №2)

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

Решение:

Для этой цели введён флаг (у меня jdReclick). Параметр присваивается кнопке перед каждым повторным вызовом и удаляется сразу же после обработки повторного вызова. Ориентируясь на данную метку, удаляем все-данные «транзитной сессии» если:

  1. было обработано-последнее окно в функции,
  2. в одном из окон была выбрана отмена

Проблема №3)

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

Препятствия:

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

Варианты решения:

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

Теперь детально о реализации в моём примере


Событие на элементе запускает функцию-инициатор «транзитно-диалоговой» цепочки:

$('#test').click(function() { ...

Собственно запуск диалогового окна выглядит так:

$(this).jdDialogs('confirm',1,['Текст?','Заголовок'],fncname)

Для привязки данных к элементу, необходимо передать в плагин селектор this,
в атрибутах передаём:

1 — тип окна (имя метода плагина),
2 — id окна
3 — текстовые параметры окна
4 — функция обратного вызова

Обработка результатов можно реализовать несколькими способами:


if(! $(this).jdDialogs('confirm',1,['Текст?','Заголовок']) ) return;

if( $(this).jdDialogs('confirm',1,['Текст?','Заголовок']) ) {
...
}

switch( $(this).jdDialogs('confirm',1,['Текст?','Заголовок']) ) {
 case 1: ...;
 default: return;
}

Если после вызова Alert есть выполняющийся кода, придётся использовать return, если нет — return можно опустить.


$(this).jdDialogs('alert',0,['Сделано!','Project'])


if(! $(this).jdDialogs('alert',0,['Сделано!',project]) ) return;
alert('Код выполнен');

В плагине предусмотрены стандартные методы confirm, alert, их краткие алиасы cnf, al для сокращения записи. Можно дописать собственные вызовы.

Все вызовы запускают универсальный метод jdDialog, в котором:

  • распознаётся клик клиента или повторный «транзитный» вызов
  • для «транзитного» вызовы возвращается сохранённое значение выбора
  • если окно запускается впервые — запускается генерация самого окна jdGetWin
  • генерируется id элемента управления если не было указано — метод jdCheckId

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

Клик на кнопки обрабатывают привязанные события. Для alert предложено 2 варианта закрывающей кнопки — jdClose0 с отменой и jdClose1 — с подтверждением. Какую выставить настраивается в jdGetWin в switch case.

Событие переадресовывается на метод jdSetAnswer. В методе распознаётся id текущего окна и id элемента управления-инициатора запуска диалогового окна. Зная id кнопки, можем сохранить результат выбора с ключом по id окна в «транзитную сессию».

$(id).data(fname,value);

Далее уничтожаем окно с помощью .detach() с анимационным эффектом например fadeIn 10

$('.jdModalBg').detach().fadeIn(10,function() {	

В функции обратного вызова проверяем: если отмена — сбрасываем «транзитную сессию». В этом методе если при вызове диалогового окна 4-м параметром была передано имя функции, функция вызывается.

if(!!fncdo) window[fncdo]();

Затем запускается транзитный вызов. Передаём ID элемента управления — инициатора для повторного клика по нему. Т.е. эмулируется клик по элементу управлению — инициатору диалога.

methods.jdReclick(id);

В моём примере довольно просто дописать произвольные конструкции с вызовом и обработкой окон.

Пример реализации трёх-кнопочного окна


1. В вызове в data добавляем ещё 2 параметра: надписи на двух кнопках вместо «Ок».

$(this).jdDialogs('confirm2bttn',0,['Мы на перепутье','Действие шаг 3','Идти налево','Идти направо'])

Использование массива с текстами позволяет гибко управлять количеством параметров — здесь нужно просто дописать ещё два параметра в массив.

2. Подключаем вызов:

	confirm2bttn : function(fid,data,fname) {
		return methods.jdDialog('Confirm2bttn',fid,data,$(this),fname);
		}	

3. Подключаем обработку вызова. Сам шаблон оставляем старый, меняем только кнопки:

case 'Confirm2bttn':
	var bttntext1 = data[2];
	var bttntext2 = data[3];
	jdBttns = ''+
			 ''+
			 '';
	clClass = 'jdClose0';
break;

4. Добавляем событие на кнопку Ok2 чтобы различать нажатие кнопок — транзитный вызов при нажатии на .jdOk2 теперь будет возвращать значение 2:

	.on('click','.jdOk2', function() {			
		methods.jdSetAnswer(2,$(this));
		})

5. Возвращаемся в скрипт-инициатор и прописываем условия для разных кнопок:

switch($(this).jdDialogs('confirm2bttn',0,['Мы на перепутье','Действие шаг 3','Идти налево','Идти направо'])) {
	case 0: return;
	case 1:
		alert('Идём налево');
	break;
	case 2:
		alert('Идём направо');
	break;
	default:

6. Ну и можно присвоить элементам нового окна новый стиль, например сделать зелёным с жёлтым текстом. Как-то так:

.jdDialogConfirm2bttn {
	min-width:380px;
	max-width:450px;
	}
.jdDialogConfirm2bttn .jdText {
	min-height:60px;
	}	
.jdDialogConfirm2bttn .jdHeader{
	background-color: hsl(115,63%,15%);
	color:#F0C800;
	}
.jdDialogConfirm2bttn .jdHeader .jdClose{
	background-color: hsl(114,58%,22%);
	color:#F5DA50;
	}

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

https://habrahabr.ru/post/331770/


Метки:  

[Перевод] ArrayBuffer и SharedArrayBuffer в JavaScript, часть 2: знакомство с новыми объектами языка

Вторник, 27 Июня 2017 г. 17:03 + в цитатник
В прошлый раз мы, в качестве подготовки к разговору об ArrayBuffer и SharedArrayBuffer, рассмотрели разные подходы к управлению памятью. Как вы, должно быть, помните, JS-движок играет роль посредника при работе с памятью, однако, новые объекты дают программисту некоторые ручные инструменты. Для чего это может понадобиться?

image

JavaScript и управление памятью


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


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

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

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

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

Однако, в тех случаях, когда в приоритете — скорость работы программы, имеет смысл взглянуть в сторону ArrayBuffer и SharedArrayBuffer.


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

Как работает ArrayBuffer


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


Обычный массив, слева, может содержать числа, объекты, строки, и так далее. ArrayBuffer может содержать лишь байты

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

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


ArrayBuffer как последовательность нулей и единиц

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

Например, в качестве обёртки можно использовать массив типа Int8Array, что приведёт к тому, что то, что хранится в ArrayBuffer, будет разбито на 8-битные фрагменты.


Последовательность нулей и единиц разбита на блоки по 8 бит

Если применить в подобной ситуации типизированный массив Uint16Array, это приведёт к тому, что содержимое ArrayBuffer будет разбито на фрагменты по 16 бит, и к тому, что восприниматься эти данные будут как беззнаковые целые числа.


Последовательность нулей и единиц разбита на блоки по 16 бит

Один и тот же ArrayBuffer может служить основой для нескольких обёрток. При таком подходе одни и те же операции над ним дадут разные результаты.

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


Доступ к одному и тому же ArrayBuffer с использованием разных обёрток

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

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

Что такое SharedArrayBuffer


Для того, чтобы говорить о том, что такое SharedArrayBuffer, сначала надо разобраться с тем, как в JavaScript осуществляется параллельное выполнение кода.

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

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

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


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

Однако, иногда снизить объём работы главного потока недостаточно. Случается так, что главному потоку нужен помощник.

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

В JavaScript подобное реализуется с помощью Web Workers API. В частности, речь идёт об объекте типа worker, представляющего собой средство для работы с фоновыми задачами. Фоновые задачи в JS слегка отличаются от потоков и процессов из других языков. В частности, по умолчанию у них нет общей памяти.


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

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

Функция postMessage сериализует передаваемые ей объекты, передаёт в фоновую задачу, которой они предназначены, там они десериализуются и записываются в память.


Функция postMessage позволяет организовать обмен данными между потоками

Передача данных между потоками таким способом — процесс довольно медленный.

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


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

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

Именно эту возможность и даёт JS-разработчикам SharedArrayBuffer.


У двух потоков имеется общий участок памяти, с которым может работать каждый из них

Благодаря SharedArrayBuffer оба потока, обе фоновых задачи, представленные объектами worker, могут читать и писать данные в одну и ту же область памяти.

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

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


Гонка потоков, имеющих доступ к одному и тому же участку памяти

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

Поддержка SharedArrayBuffer


Известно, что в ближайшее время самые популярные браузеры будут оснащены поддержкой SharedArrayBuffer.


Браузеры приветствуют SharedArrayBuffer

Поддержка SharedArrayBuffer уже имеется в Safari (10.1). На очереди — Firefox и Chrome. Они, предположительно,  обзаведутся поддержкой этого нового объекта к концу лета. В Edge, вероятнее всего, SharedArrayBuffer появится осенью.

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

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

Кроме того, так как объект SharedArrayBuffer — это полноправная часть платформы, его можно будет задействовать в WebAssembly для реализации поддержки потоков. Когда это произойдёт, JS-программисты получат возможность использовать абстракции параллелизма, напоминающие таковые в других языках, вроде Rust, который известен надёжной и удобной организацией многопоточности.

Итоги


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

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

Уважаемые читатели! Какие варианты применения в своих проектах ArrayBuffer и SharedArrayBuffer вы видите?
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331760/


Метки:  

О чем говорили на Avito.iOS? Отчет, отзывы гостей и видеозаписи

Вторник, 27 Июня 2017 г. 16:54 + в цитатник
Интерфейсы, тестирование, метрики… Если вам интересно узнать, о чем ещё говорили на регулярном мероприятии Avito для профессионалов iOS-разработки, смотрите видеозаписи под катом. Докладчики — представители ведущих российских интернет-сервисов Mail.Ru, Yandex и, конечно, Avito. Также к нам присоединился спецгость из Минска, тимлид проекта Juno — Сергей Анищенко.



Работа с дизайном в Avito


Спикеры: Артём Разинов и Инесса Воронина (Avito)


Как делать консистентный дизайн быстро, без дублирования в коде и макетах, работая в команде, в которой более двадцати разработчиков и три дизайнера? Ответ на этот вопрос есть в нашем видео. Кроме того, спикеры говорили о необходимых точках синхронизации, показали, как приложение Avito делится на компоненты, и как в этом помогает кодогенерация. Из доклада вы узнаете, на какие детали стоит обратить особое внимание при реализации собственной дизайн-системы. Обзор темы был дан на все 360°, так как доклад сделали совместно разработчик и дизайнер.



Отзывы:
Было интересно и смотреть, и слушать, и иногда смеяться.

Измерение энергопотребления мобильных приложений


Спикеры: Алексей Лавренюк и Тимур Торубаров (Yandex)


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



Отзывы:
Это главный доклад, ради которого я шёл на митап.


Очень интересная тема, люблю такие проекты. Фактически — вот вам и инновационный проект!

Тип Property в реактивных интерфейсах


Спикер: Сергей Анищенко (Juno)


Принимая во внимание все положительные стороны ФРП, почему бы не начать использовать реактивные компоненты в приложении повсеместно? Сергей Анищенко делится опытом применения такого подхода, фокусируясь на примитиве из ReactiveSwift под названием Property, рассказывает, почему он оказался полезным при разработке приложения Juno, и демонстрирует паттерны применения типа Property и несколько переиспользуемых компонентов, построенных на его основе.



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

Back-end driven UI


Спикер: Алексей Шпирко (Avito)


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



Отзывы:
Надеюсь увидеть доклад во снах!


Классный доклад, тема актуальная. Наша команда тоже столкнулась с этой проблемой, примерно так же пытаемся её решить.

Автотесты в iOS


Спикеры: Александр Смирнов и Никита Анисимов (Mail.ru)


В своем докладе Александр Смирнов и Никита Анисимов рассказывают о процессе разработки мобильных приложений iOS Почты Mail.Ru & myMail и системе для автоматизации проверок приложения. Показывают, как стабильно выполнять более 500 UI-тестов на каждое изменение в проекте, а также обращают внимание слушателей на необычные векторы для дополнительных проверок.




Отзывы:
Много важной, открытой информации.

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


Спикер: Виктор Брыксин (Yandex)


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



Отзывы:
Неожиданно был очарован манерой доклада. Предмет актуальный и доложен шикарно. Так держать! Отлично!

Все материалы можно посмотреть в плейлисте на youtube. Фотоотчет — на странице AvitoTech в Facebook. В заключение хотим поблагодарить спонсоров этого мероприятия: Sketch, SwiftTalks, objc.io и наших информационных партнеров — iOS Good Reads и iOS Development Course. Выражаем особую признательность Самвелу Меджлумяну за разработку викторины, которую мы провели на встрече. Благодарим гостей мероприятия за полезный фидбэк и высокие оценки, которые были даны докладам.

Следите за нашими обновлениями на TimePad и приходите на следующие встречи Avito.iOS. Будет еще интереснее! А если вы хотите выступить на мероприятии Avito с докладом, напишите на нашу почту.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331508/


Метки:  

Построение систем управления приложениями в распределенной кластерной инфраструктуре на базе технологии MESOS

Вторник, 27 Июня 2017 г. 16:37 + в цитатник
В наше время термин “BIG DATA” у всех на слуху. После появления в сети и в прессе многочисленных публикаций, связанных с обработкой «больших данных», интерес к этой теме постоянно растет. Все более широким спросом пользуются системы управления базами данных с
использованием технологии NoSQL. Всем понятно, что для построения систем “BIG DATA” необходимо располагать внушительными аппаратными ресурсами. Еще более важно уметь оптимально использовать вычислительные ресурсы системы и эффективно их масштабировать. Это неизбежно меняет подходы к построению систем обработки данных. Если раньше системы строились по принципу централизации хранилища данных, с которым работает набор мощных вычислительных серверов, то сейчас такой подход постепенно отходит на второй план. Появляется все больше систем, построенных на базе кластера из большого количества стандартных серверов средней мощности. Централизованного хранилища в такой системе нет. Для работы с данными внутри кластера используется модульная распределенная система хранения с использованием локальных дисковых ресурсов каждого сервера. Если раньше масштабирование осуществлялось за счет добавления дисков в централизованную систему хранения и модернизации вычислительных серверов, то сейчас эти же вопросы решаются просто добавлением стандартных узлов в кластер. Этот подход получает все большее распространение.

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

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

  1. Обеспечивать возможность объединить вычислительные ресурсы отдельных серверов в общий набор.
  2. Обеспечивать возможность запускать произвольное приложение на произвольном узле кластера.
  3. Обеспечивать возможность выделять вычислительные ресурсы из общего набора каждой задаче в отдельности в определенном объеме.

Идея создания системы управления кластером с обобщенными вычислительными ресурсами некоторое время назад была реализована силами Apache Foundation в продукте под названием MESOS. Этот продукт позволяет как раз обеспечить выполнение первого условия – объединить вычислительные ресурсы нескольких аппаратных серверов в один распределенный набор ресурсов, организовав кластерную вычислительную систему.



В двух словах как это устроено: на каждом узле кластера запускается сервис MESOS, причем он может работать в двух режимах – mesos-master и mesos-slave. Таким образом, каждый узел кластера получает или роль mesos-slave, или роль mesos-master, или обе роли в месте, что тоже возможно. Mesos-slave узлы предназначены для запуска приложений по команде, получаемой от узла mesos-master. Узлы mesos-master управляют процессом запуска приложений на узлах кластера, обеспечивая, таким образом, выполнение и второго условия – позволяют запустить произвольное приложение на произвольном узле кластера. Mesos-master узлов обычно 2 или 3 для обеспечения отказоустойчивости. Поскольку по умолчанию на узле запускаются обе роли одновременно, на большинстве узлов роль mesos-master целесообразно отключать. Взаимодействие mesos-slave и mesos-master узлов осуществляется средствами Apache Zookeeper. Функциональность системы Apache MESOS возможно гибко расширять, встраивая в MESOS сторонние приложения в качестве framework’ов.

Ключевой подход Apache MESOS заключается в том, что mesos-slave узлы учитывают существующие на них свободные аппаратные ресурсы – CPU и RAM – сообщая mesos-master узлам об их количестве. В результате mesos-master владеет полной информацией о доступных на узлах mesos-slave вычислительных ресурсах. При этом он не только выдает команду slave узлу на запуск приложения, но и способен принудительно задать количество вычислительных ресурсов, которыми это приложение может располагать. Эта задача решается при помощи механизма контейнеризации приложений. Процесс запускается в т. н. контейнере – замкнутой операционной среде. Основа контейнера – файл-образ, в котором установлено ядро ОС, развернуты корневая FS, все необходимые системные библиотеки и так далее. При старте контейнера запускается ядро системы из образа. После этого запускается само приложение в выделенном, заранее подготовленном для него операционном окружении. Получается некое подобие виртуальной машины для одного процесса. Здесь важно то, что применение контейнеризации позволяет выделять для каждого контейнера фиксированный объем ОЗУ и фиксированное количество ядер CPU (в том числе и дробное, меньшее 1 – 0,5 ядра, например).



Таким образом, мы можем обеспечить выполнение и третьего условия – реализуем возможность выделять каждой задаче определенный объем вычислительных ресурсов из общего набора. Следует отметить, что изначально Apache MESOS решал озвученные задачи с использованием своих собственных алгоритмов контейнеризации приложений, однако после появления на рынке продукта docker последний полностью заместил встроенные средства контейнеризации Apache MESOS. Так или иначе, на текущий момент интеграция docker в решения с Apache MESOS получила широкое распространение и является стандартом де-факто. Позиции docker в этой сфере еще больше упрочились благодаря сервису docker hub – системе бесплатного распространения контейнеризованных приложений, по идеологии чем-то схожей с известным сервисом git-hub. Используя этот сервис, разработчики могут публиковать свои приложения в формате готовых контейнеров docker, чем многие, кстати, активно пользуются в последнее время.

Теперь, если на каком-нибудь mesos-slave узле ресурсы исчерпываются, это сразу «становится известно» mesos-master узлу, и он не может запустить приложение на таком slave-узле. В этом случае mesos-master будет вынужден искать другой, менее нагруженный mesos-slave. Это приводит к тому, что более требовательные к наличию вычислительных ресурсов задачи будут «вымещаться» на менее нагруженные узлы кластера. Таким образом, мы получаем полноценный кластер с обобщенными ресурсами, который может задавать определенное количество ресурсов, выделяемых приложению для работы.

К сожалению, очевидным недостатком решений на базе Apache MESOS является ориентированность на единовременный запуск одной копии приложения на отдельном узле кластера, без контроля состояния приложения и без поддержания его работоспособности на долговременной основе. Однако эта проблема не так давно была решена компанией MESOSPHERE. На рынок были выведены продукты MARATHON и CHRONOS. Эти продукты позволяют управлять запуском приложений в среде Apache MESOS. Взаимодействуя через Apache zookeeper с mesos-master, они встраиваются в его структуры в качестве framework’ов, обеспечивая системе новые функциональные возможности. MARATHON предназначен для запуска приложений, которые должны работать долгое время в непрерывном режиме. Он осуществляет возможности масшта¬би¬ро¬ва¬ния и мониторинга работоспособности запущенных с его помощью приложений. В набор стандартных функций MARATHON входят возможности одновременного запуска экземпляра приложения на всех узлах кластера, запуск приложения на определенной части узлов кластера, регулирование количества копий приложения, запускаемых на одном узле кластера и проч. CHRONOS, в свою очередь, обладая сходной функциональностью, ориентирован на запуск разовых задач по расписанию.



Оба из перечисленных приложений снабжены своим собственным интерфейсом управления, которое осуществляется с использованием протокола HTTP и технологии REST API. Фактически MARATHON встает между пользователем и mesos-master, принимая запрос на запуск приложения по REST API в формате JSON. В запросе пользователь, помимо прочего, может сконфигурировать общее количество экземпляров запускаемого приложения в масштабе кластера, количество экземпляров приложения на один узел, количество системных ресурсов, выдаваемых каждому экземпляру приложения и т. д.

Как уже упоминалось выше, многие разработчики начинают распространять свои приложения в виде docker-контейнеров. В частности компания MESOSPHERE успешно использует данный подход, в результате чего рассмотренные в этой статье приложения MARATHON и CHRONOS в настоящий момент доступны в виде готовых контейнеров. Их использование упрощает процесс обслуживания этих подсистем, позволяет без труда перемещать их между узлами кластера, существенно ускоряет процесс обновления версий и так далее. Опыт собственных разработок, а также опыт сторонних компаний дает возможность считать этот подход наиболее вероятной тенденцией развития технологий в данной отрасли.

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

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

Более детально технологии, рассмотренные в данной статье, описаны здесь.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331766/


Закрытый хакатон по технологиям машинного обучения от Microsoft

Вторник, 27 Июня 2017 г. 16:31 + в цитатник
Друзья! На этой неделе Микрософт для своих самых ближайших технологический партнеров- стартапов проводит закрытый 3-х дневный хакатон по технологиям машинного обучения и искусственному интеллекту. У нас в команде TheQuestion по счастливой случайности есть несколько мест для тех, кому интересна эта тема и кто хотел бы эти 3 дня поработать бок о бок с гуру.

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

Заодно немного заглянем под капот TheQuestion — как там все построено на Golang и Docker.
Что нужно иметь/установить:
— Anaconda 4.4.0 + Python 3.6 (64bit)
— Visual Studio Build Tools
— корпус данных (с нас)

Старт — завтра в 10:00. Москва, м. Охотный Ряд, ул. Охотный Ряд, д. 2, 9-й подьезд, 5 этаж. «Meeting Point».
С собой нужен паспорт (и ваши ФИО, чтобы выписать пропуск).
И все — бесплатно.

Если заинтересовало — пишите мне, кратко черкните почему эта тема вам интересна, отлично, если есть профиль на гитхаб или еще где, может статьи по близким тематикам. Кол-во мест ограничено, отбор волюнтаристский :)

Пишите мне на: el@thequestion.ru
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331764/


Метки:  

Украина подверглась самой крупной в истории кибератаки вирусом Petya

Вторник, 27 Июня 2017 г. 16:29 + в цитатник
image

Сегодня утром ко мне обратились мои клиенты с паническим криком «Никита, у нас все зашифровано. Как это произошло?». Это была крупная компания 1000+ машин, с последними обновлениями лицензионного Windows, настроенным файрволом, порезанными правами для юзеров и антифишинг фильтрами для почтовиков.

Спустя час позвонили представители другой крупной компании, у них тоже все зашифровано, под 2000 машин. Атака началась с крупных бизнес структур и уже час или два спустя я узнал, что «Ощадбанк», «УкрПочта» и «ПриватБанк» тоже под атакой.

Что случилось? И о развитии ситуации под катом.

То, о чем все кибер эксперты, включая меня, говорили днями и ночами! Украина не защищена от кибератак, но сейчас не об этом.

Украинский кибер сегмент подвергся очередной атаке, на этот раз Ransomware шифровальщики Petya и Misha стали шифровать компьютер крупных украинских предприятий, включая критические объекты инфраструктуры, такие как «Київенерго» и «Укренерго», думаю, по факту, их в тысячи раз больше, но чиновники как обычно будут об этом молчать, пока у вас не погаснет свет.

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

Теперь о технических деталях

Пока что известно, что #Petya шифрует MBR загрузочный сектор диска и заменяет его своим собственным, что является новинкой в мире Ransomware, егу друг #Misha, который прибывает чуть позже, шифрует уже все файлы на диске. Петя и Миша не новы, но такого глобального распространения не было ранее. Пострадали и довольно хорошо защищенные компании.

В интренете уже начали появляться попытки написания дешифровщиков: github.com/leo-stone/hack-petya (UPD: подходит только для старых версий шифровальщиков до 26.06.17)

Однако, их работоспособность не подтверждена.

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

Из действующих рекомендаций по состоянию на 17 часов 27 июня, я бы посоветовал НЕ ВЫКЛЮЧАТЬ компьютер, если обнаружили шифровальщика, а переводить его в режим гибернации, с отключением от интернета.

Личные предположения:

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

Инструменты:

На сайте мы создадим раздел Petya and Misha Decrypt, где будем выкладывать все найденные инструменты для дешифровки, которые самостоятельно проверять не успеваем. Просим остальных экспертов и специалистов в области информационной безопасности присылать информацию в личные сообщения для эффективной коммуникации. Так же смотрите UPD №6


UPD1: Дешифровальщиков пока нет, те что выложены в интернете, подходят только к старым версиям.

UPD2: Сайт министерства внутренних дел Украины отключен. Силовики переходят в экстренный режим.

image
UPD3: Прошу не считать за рекламу, кто пострадал от атаки, пришлите образцы зашифрованных файлов или самого шифровальщика на почту info@protectmaster.org для разработки дешифровальщика. Мы в свою очередь готовы предоставить информацию любым ИБ компаниям по данному кейсу.

UPD4: Крупные супермаркеты харькова тоже подверглись шифрованию, фото супермаркета «РОСТ» очереди на кассе из за шифровальщика. (Фото из соц сетей):

image

UPD5: Список сайтов и структур, подвергшихся кибератаке:

Банки:
Ощадбанк, Сбербанк, ТАСКомерцбанк, Укргазбанк, Пивденный, ОТР банк, Кредобанк.

Транспорт:
Аэропорт «Борисполь», Киевский метрополитен, Укрзализныця

СМИ:
Радио Эра-FM, Football.ua, СТБ, Интер, Первый национальный, Телеканал 24, Радио «Люкс», Радио «Максимум», «КП в Украине», Телеканал АТР, «Корреспондент.нет»

Крупные компании: «Новая почта», «Киевэнерго», «Нафтогаз Украины», ДТЭК, «Днепрэнерго», «Киевводоканал», «Новус»,
«Эпицентра», «Арселлор Миттал», «Укртелеком», «Укрпочта»,

Мобильные операторы: Lifecell, Киевстар, Vodafone Украина,

Медицина:
«Фармак», клиника Борис, больница Феофания, корпорация Артериум,

Автозаправки:
Shell, WOG, Klo, ТНК

UPD 6 :

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

C: \ Windows \ perfc.dat

1. В зависимости от версии ОС Windows установить патч с ресурса technet.microsoft.com/ru-ru/library/security/ms17-010.aspx, а именно:

— для Windows XP — download.windowsupdate.com/d/csa/csa/secu/2017/02/windowsxp-kb4012598-x86-custom-rus_84397f9eeea668b975c0c2cf9aaf0e2312f50077.exe

— для Windows Vista 32 bit -http://download.windowsupdate.com/d/msdownload/update/software/secu/2017/02/windows6.0-kb4012598-x86_13e9b3d77ba5599764c296075a796c16a85c745c.msu

-для Windows Vista 64 bit -http://download.windowsupdate.com/d/msdownload/update/software/secu/2017/02/windows6.0-kb4012598-x64_6a186ba2b2b98b2144b50f88baf33a5fa53b5d76.msu

— для Windows 7 32 bit -http://download.windowsupdate.com/d/msdownload/update/software/secu/2017/02/windows6.1-kb4012212-x86_6bb04d3971bb58ae4bac44219e7169812914df3f.msu

— для Windows 7 64 bit -http://download.windowsupdate.com/d/msdownload/update/software/secu/2017/02/windows6.1-kb4012212-x64_2decefaa02e2058dcd965702509a992d8c4e92b3.msu

— для Windows 8 32 bit -http://download.windowsupdate.com/c/msdownload/update/software/secu/2017/05/windows8-rt-kb4012598-x86_a0f1c953a24dd042acc540c59b339f55fb18f594.msu

— для Windows 8 64 bit -http://download.windowsupdate.com/c/msdownload/update/software/secu/2017/05/ Windows8-rt-kb4012598-x64_f05841d2e94197c2dca4457f1b895e8f632b7f8e.msu

— для Windows 10 32 bit -http://download.windowsupdate.com/c/msdownload/update/software/secu/2017/03/windows10.0-kb4012606-x86_8c19e23de2ff92919d3fac069619e4a8e8d3492e.msu

— для Windows 10 64 bit -http://download.windowsupdate.com/c/msdownload/update/software/secu/2017/03/windows10.0-kb4012606-x64_e805b81ee08c3bb0a8ab2c5ce6be5b35127f8773.msu

Найти ссылки на загрузку соответствующих патчей для других (менее распространенных и серверных версий) OC Windows можно по адресу:

technet.microsoft.com/ru-ru/library/security/ms17-010.aspx
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331762/


Метки:  

Поиск сообщений в rss_rss_hh_new
Страницы: 1437 ... 1026 1025 [1024] 1023 1022 ..
.. 1 Календарь