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

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

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

[Перевод] Как принять закон или обработка данных в распределённых системах понятным языком

Четверг, 08 Июня 2017 г. 10:08 + в цитатник

Бесплатные билеты на In-Memory Computing Summit 2017 – Europe

Четверг, 08 Июня 2017 г. 09:35 + в цитатник
Всем привет!

Возможно, вы знаете, что 20-21 июня в Амстердаме пройдет In-Memory Computing Summit 2017 – Europe. Все детали тут.

Мероприятие, ставшее уже традиционным в США, с этого года также будет ежегодно собирать экспертов из Европы и Азии на новой европейской площадке. На различных секциях конференции выступят представители компаний ING, Intel, Tata Consultancy Services, The Glue, Redis Labs, ScaleOut Software и WSO2.

У меня есть несколько бесплатных билетов, которыми я с удовольствием поделюсь с вами.
Напишите мне на почту mkuznetsov@gridgain.com или в личные сообщения на Хабре.
От вас — ФИО и название компании на английском языке, адрес электронной почты и мобильный телефон.

Приезжайте, будет круто!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330464/


Метки:  

10 правил организации эффективной клиентской поддержки

Четверг, 08 Июня 2017 г. 08:59 + в цитатник
Построить действительно качественную клиентскую поддержку очень сложно. Вы должны точно определить, как учитываются обращения пользователей и как определяются приоритеты обработки их обращений. Также необходимо разобраться, как определяются исполнители и как сотрудники службы поддержки будут учитывать закрытые задачи и отчитываться о проделанной работе. Сформулированные правила на самом деле представляют собой формальные процедуры, реализующие отдельные бизнес-процессы в вашей компании. Их можно описать текстом, в виде диаграмм или в любом другом графическом представлении. Если бизнес-процессы в вашей компании сложны, то каждый процесс можно разбить на модули, и каждый такой модуль подробно детализировать.

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





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


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


1. Клиент всегда прав!


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


2. Всегда уведомляйте клиентов о получении заявки


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




3. Научитесь определять срочность входящих задач


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




4. Сообщайте клиенту о сроках решения его проблемы


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


5. Ответ в течение 24 часов


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


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


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


7. Ответы на вопросы пользователей должны быть лаконичными и без лишних подробностей


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


8. Ответы на заявки должны быть грамотными


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


9. Всегда завершайте общение


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


10. Создавайте базу знаний


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

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

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

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

Большинство стартапов не могут себе позволить такие мощные системы, и поэтому им приходится использовать различные программы для ведения заявок. Или даже обращаться к самым простым веб-сервисам для управления проектами. Мы в Deskun решили не идти обычным путём и разработали свой инструмент для поддержки клиентов на основе почты Gmail. В итоге, получился сервис, который можно развернуть для работы всего за 5 минут. Обучение сотрудников проходит очень быстро, так как Deskun органично встраивается в уже всем знакомый интерфейс почтового сервиса.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330454/


Белый список Роскомнадзора: выводы и убытки

Четверг, 08 Июня 2017 г. 04:21 + в цитатник
Вы наверняка уже читали о «белом списке» (очередном белом, точнее) Роскомнадзора. Кроме Роскомсвободы о нём поведало и издание vc. В нём — более 2000 позиций.

Я изучил сей документ и вот несколько выводов, неутешительных, которыми хочу поделиться:

  1. Яндекс, Вконтакте, ivi, Телеграм — не полный перечень ресурсов, которые страдают из-за непродуманной системы блокировок. Конечно же, особо хочется выделить Wiki, т.к. с ней проблемы явно будут и не раз ещё. К слову, на vc и Роскомсвободе уже пошутили про *.google.* — и это вновь подтверждает данное опасение.
  2. Список очень длинный, но есть в нём одна явная закономерность: отсутствие закономерностей. Россия — не самая большая страна (если брать именно Рунет, а не площадь географии), но при этом домены государственных и муниципальных органов и учреждений настолько разные по формату — что диву даёшься: тут и распиаренные домены в зоне.рф. (например, неудобоваримое — http://мкра.рф/); и домены формата http://mcx-ra.ru/ (в Адыгее вообще любят загадочные домены, не правда ли?) или вот http://szn24.ru/. Догадаться с первого раза — что и о чём это, мягко скажем, сложно. Впрочем — об этом чуть ниже.





Ещё одна деталь, которая сразу же бросается в глаза, это домены с www и без онного: допустим — как на рисунке 1.

Рис. 1



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

Поясню.

Дело в том, что все три пункта доказывают следующее:

  1. Государству (ака публичной власти) много лет было фиолетово на то, как именно наполняется Рунет, как функционирует, а главное — как вообще он развивается с точки зрения взаимодействия самих властных структур и граждан. Появилась необходимость — стали «кпепать» сайты все: министерства, ведомства и прочие структуры организации чиновников. При этом бессистемность такого подхода в итоге привела к тому, что для обычных граждан до сих пор не ясно — точно это сайт государственный (муниципальный) или всё же скам. Не легче ли было ввести одну зону gov.ru и, скажем, region.ru или что-то в этом духе для всех? Есть ли случаи фишинга и других видов мошенничества в этом русле? Да. Но об этом — в следующий раз.
  2. Далее — из-за вот такого, сумбурного, подхода многие коммерческие сайты очень часто и очень много терпят убытков, сами того не замечая. Пример — ниже.
  3. Наконец, белые списки — это кладезь информации для тех, кто любит искать:
  4. аффилированные компании (с кем и почему — пояснять не буду);
  5. сайты, которые можно использовать как дорвеи с пониманием, что их не заблокируют точно;
  6. и много ещё для чего.

Но пока — об убытках.

Не так давно ко мне обратился Хаброжитель — nelsh. Вот его пост о том, как ТТК блокирует сайты, которые блокироваться не должны, — https://habrahabr.ru/post/328768/.

Из комментариев к этой публикации, а также переписки с nelsh пришёл к выводам, что незаконная и необоснованная блокировка происходит по следующим причинам:
  1. Неверная настройка ПО у провайдера
  2. Система «Ревизор», которая в принципе работать правильно на 100% не приучена (чтобы вы понимали, о чём я — почитайте вот этот пост: повторять его нет смысла).
  3. «Адекватных способов противодействия «атаке на DNS заблокированного интернет-ресурса» у Роскомнадзора нет»: РКН уже писал о том, что подход изменит, но воз — и ныне на одном колесе стоит всё там же.


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

Рис. 2


При этом, цитирую: «ТТК на магистральном уровне блочит рандомные не значащиеся в реестре IP (видно как раз потому, что детектят другие IP для заблоченных доменов, и кто-то троллит/или CDN). В итоге не открываются рандомные сайты. Из последних крупных, что были замечены — сайты Uniquiti, служебные домены EVE Online, Ingress — правда все они на CDN сидят. Недавно пара IP Github.com была заблочена, со всеми вытекающими — гитхаб тупо не открывался несколько часов, но это было не сильно массово… Блочится не у всех, кто ходит через ТТК, видимо зависит от особенностей стыка провайдера с ТТК».

Меня же, как юриста, очень беспокоит этот вопрос: ведь рано или поздно, с учётом того, как развивается Рунет, это может коснуться каждого. К тому же сейчас очень много предпосылок для «неправедной борьбы»:
  1. Китай выдавливает АКИТ и иже с ними, а значит — АКИТ всё больнее будет бить… нет, не по Китаю, а по ИП и ООО в Рунете.
  2. Сама по себе блокировка и её механизм — просто кладезь для злоупотреблений.
  3. Кроме того, более-менее крупные игроки (интернет-провайдеры, операторы сотовой связи и т.д.) рады стараться, дабы угодить и это, как видим, всё только портит.


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

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

Безусловно, не последнюю роль в этом играет принятый 10 февраля 2017 года закон № 1102471-6 об изменениях в КоАП РФ в части установления ответственности операторов связи. Звучит она следующим образом (ст. 13.34 в смысле): “неисполнение оператором связи, оказывающим услуги по предоставлению доступа к информационно-телекоммуникационной сети «Интернет», «обязанности» по ограничению или возобновлению доступа к информации, доступ к которой должен быть ограничен или возобновлен на основании сведений, полученных от федерального органа исполнительной власти, осуществляющего функции по контролю и надзору в сфере связи, информационных технологий и массовых коммуникаций”.

Отмечу, что дела показательные по штрафам уже есть, например:

  1. Постановление от 20 апреля 2017 г. по делу № 5-206/2017
  2. Определение от 17 мая 2017 года
  3. Постановление от 19 мая 2017 г. N 06АП-2217/2017

Что можно и нужно использовать для защиты своих прав?

Во-первых, есть ст. 15 ГК РФ — возмещение убытков: реальный ущерб + упущенная выгода. Формула — простая, но на деле доказать реальный ущерб ещё можно (например, если ваши клиенты напишут Вам, что сайт был недоступен в такое-то время и вы докажите, что это было из-за ошибки провайдера/РКН), а вот упущенную выгоду — уже многим сложнее. Скажем, человек хотел купить телефон за 20 000 руб. Вы их потеряли. Кроме того, потеряли ещё закуп на 18 000 и возможную прибыль на 2000 на следующий. И да, если кто-то из юристов скажет вам обратное (что доказать это “проще пареной репы) — не верьте :). Кроме того, можно искать убытки:
  1. в случае, если переходы были по рекламной кампании;
  2. по партнёрским ссылкам;
  3. по другим платным источникам.

Во-вторых, стт. 152 ГК РФ — защита деловой репутации. Здесь с российскими судами всё ещё сложнее, чем со ст. 15 и ей сопутствующими. Но тем не менее, когда провайдер вас незаконно блокирует он тем самым распространяет информацию, что ваш сайт (ресурс в Интернете в принципе) внесён в “чёрный список” и тем самым потенциальные покупатели, а также покупатели постоянные дезинформируются, а в итоге сарафанное радио, особенно, если у вас проект местного разлива или регионального масштаба, может нанести вреда даже больше, чем просто само отсутствие покупок из-за псевдоблока. Чтобы вы понимали серьёзность сего — список с офсайта РКН по блокировкам:
  1. Детская порнография, наркотики, а также информация о суициде
  2. Информации экстремистского характера
  3. Информация порнографического характера (кроме детской порнографии)
  4. Клевета в сети «Интернет»

В-третьих, ст. 1 ГК РФ — не стоит о ней забывать никогда. Например, ещё в Постановлении Президиума ВАС РФ от 23 ноября 2010 г. № 6763/10 по делу N А53-6358/08 (Вестник ВАС РФ. 2011. N 3) было указано: «Произвольное вмешательство кого-либо в частные дела не допускается», кроме того, часто к этому обращаются и арбитражные суды (ходовой пример Решение АС Красноярского края от 03 ноября 2010 г. по делу N А33-12455/2010): «в содержании принципа недопустимости произвольного вмешательства кого-либо в частные дела ключевым является понятие частного дела как деятельности гражданина или юридического лица (как частного лица), основанной на частном интересе в сфере применения частного права». Это будет ещё сложнее, чем п. 1 и п. 2.

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

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

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

Опять же — кому-то эта истина покажется прописной, но, судя по последним веяниям, таковой она, к сожалению, не является.

Пока всё — во второй части попробую разобрать пример с ТТК и обещанные выше — отдельно и в другом ракурсе.

P.S. Мини-подборка материалов по незаконным блокировкам РКН и/или провайдерами:
  1. https://geektimes.ru/post/287714/ — EVE Online
  2. https://rublacklist.net/29059/ — о том, как с этим пробуют бороться
  3. Конечно же — самая лучшая подборка у тех, кто на этом специализируется: моё им личное спасибо за сей труд
  4. Отбойный материал формата “маразм крепчал”
  5. А это — не (совсем, но всё же по) теме, зато красивая статистика.
Белый список усугубит ситуацию для самого Роскомнадзора?

Проголосовало 11 человек. Воздержалось 2 человека.

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

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

https://habrahabr.ru/post/330458/


Метки:  

[Из песочницы] Когда docker-compose не хватает

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

О чем пойдет речь


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


image


Как мы жили до этого


Для начала немного истории. Так сложилось, что по долгу службы, мы в той или иной степени разрабатываем и поддерживаем одновременно несколько проектов. Все они имеют разный возраст, требования и соответственно работают в разном окружении. В связи с этим при развертывании локальной копии возникали некоторые неудобства. Когда ты переключаешься на проект, с которым ранее не работал, приходится возиться с его настройкой, а также с настройкой рабочей среды. И если внутри команды это могло решиться довольно быстро, то с периодически подключаемыми внештатными разработчиками все сложнее. Было принято решение перенести разработку в docker-окружение. Здесь мы не стали ничего выдумывать, а пошли общепринятым путем. Каждый сервис поднимался в отдельном контейнере. Для связки использовали docker-compose.


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


ddk


ddk (Docker Development Kit) — инструмент, призванный упростить настройку окружения и автоматизировать развертывание среды разработки для проектов, работающих в docker-окружении. Звучит, наверное, сильно. На деле же, ddk является некой оберткой над git и docker и предоставляет ряд дополнительных команд для удобного управления пакетами, файлами конфигураций и проектами. В некотором роде, это менеджер зависимостей окружения для проектов и сервисов docker-compose.


Изначально ddk — это набор python-скриптов, но конечный пользователь получает единственный исполняемый файл, с которым и работает. Теперь, помимо установки самого docker'а и docker-compose, разработчику необходимо проинициализоровать ddk, создав конфигурационный файл. Эта задача решается вызовом команды init.


cd /var/projects/ddk
ddk init

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


ddk project get my.project.ru
ddk compose --up

Также, при необходимости, перенаправляем новый домен на localhost.


echo 127.0.0.1 my.project.ddk >> /etc/hosts

Первая команда клонирует проект и выполняет его инициализацию. Вторая генерирует конфигурацию для docker-compose и запускает необходимые сервисы. В процессе выполнения будут загружены все недостающие компоненты. По завершению сборки разработчик получает полностью рабочую локальную копию проекта, которая доступна по адресу my.project.ddk.


Немного о том, как это работает.


При использовании ddk рабочей считается та директория, в которой расположен конфигурационный файл, сгенерированный командой init. Сам же исполняемый файл может располагаться в любом удобном месте. Поиск конфигурации осуществляется, начиная с текущей директории, а затем ddk поднимается по дереву каталогов пока не обнаружит искомый файл или не достигнет корня файловой системы. Схожим образом работают git и docker-compose. После того, как файл конфигурации найден, ddk формирует некоторые каталоги для хранения пакетов и исходного кода проектов, разрешает и устанавливает зависимости. Установка компонентов осуществляется простым клонированием git-репозитория, адрес которого определяется путем конкатенации имени компонента и префикса из конфигурационного файла.


# "project-repo-prefix": ["git@github.com/vendor-name/"]
ddk project get my.project.ru
git clone git@github.com/vendor-name/my.project.ru.git

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


ddk-пакеты


Первое чего хотелось добиться — сделать все окружение максимально модульным. Мы выделили описание каждого сервиса в отдельные конфигурационные файлы и вынесли их в самостоятельные репозитории. Коллега назвал их пакетами. Эти самые пакеты и легли в основу работы нашего инструмента. При сборке docker-compose.yml ddk проходит по всем требуемым пакетам и генерирует на их основе итоговый конфигурационный файл.


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


ddk package install package-name
ddk package update

Теперь о содержимом. В корне всегда находится конфигурационный файл ddk.json, в котором указываются имя контейнера и используемый docker-образ. Ниже приведен пример пакета с минимальной конфигурацией.


{
    "container_name": "memcached.ddk",
    "image": "memcached:latest"
}

Как вы, наверное, заметили, фактически, это часть конфигурации из docker-compose.yml представленная в формате JSON. Такой подход дает возможность установить любые параметры, поддерживаемые docker-compose. Вот пример более сложного пакета, который использует отдельный Dockerfile и монтирует директории.


{
    "build": "${PACKAGE_PATH}",
    "container_name": "nginx.ddk",
    "volumes": [
        "${SHARE_PATH}/var/www:/var/www",
        "${PACKAGE_PATH}/storage/etc/nginx/conf.d:/etc/nginx/conf.d:ro",
        "${PACKAGE_PATH}/storage/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro",
        "${PACKAGE_PATH}/storage/var/log/nginx:/var/log/nginx"
    ]
}

Листинг директории пакета:


storage/
    etc/
        nginx/
            conf.d/
                site.ddk.sample
            nginx.conf
ddk.json
Dockerfile

Ключи, имеющие префикс "ddk-" используются для указания специальных директив. На данный момент единственным поддерживаемым ключом является "ddk-post-install", который хранит список команд, выполняющихся после установки и обновления пакета.


{
    "ddk-post-install": [
        "echo 'Done'"
    ]
}

Один из вариантов использования данной опции приведен в разделе "Соглашения"


Проекты


Теперь рассмотрим, как использовать ddk на примере конкретного проекта. Для того, чтобы развернуть существующий проект достаточно вызвать команду get.


ddk project get project-id

Данная команда клонирует проект в директорию share/var/www, после чего производится поиск конфигурационного файла (по умолчанию в корне проекта), и запускаются все необходимые команды из секции on-init. На этом этапе выполняется настройка индивидуальных параметров проекта (генерация .env, установка прав на файлы, конфигурация базы данных и т.п.).


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


{
    "packages": [
        "mysql5.5",
        "memcached",
        "apache-php5.5"
    ],
    "on-init": [
        "${PROJECT_PATH}/init.sh ${PACKAGES_PATH} ${PROJECT_DIR}"
    ]
}

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


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


{
    "packages": [
        {
            "name": "nginx",
            "depends_on": [
                "php-fpm7.1"
            ],
            "environment": [
                "SOME_VAR=Hello"
            ]
        }
    ]
}

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


Соглашения


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


Во-первых, при монтировании каких-либо файлов и директорий пакета либо проекта, их структура должна совпадать со структурой внутри контейнера. Т.е. package-name/storage соответствует корневой директории контейнера package-name. Директория share также соответствует корневой директории контейнеров. Именно поэтому все проекты располагаются в share/var/www. Данное правило прослеживается и в приведенных выше примерах.


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


{
    "container_name": "php71-fpm.ddk",
    "command": "map-user.sh",
    "env_file": [
        "${PACKAGE_PATH}/env/user.env"
    ],
    "ddk-post-install": [
        "mkdir -p ${PACKAGE_PATH}/env",
        "echo USER_NAME=`whoami` > ${PACKAGE_PATH}/env/user.env",
        "echo USER_ID=`id -u` >> ${PACKAGE_PATH}/env/user.env",
        "echo GROUP_ID=`id -g` >> ${PACKAGE_PATH}/env/user.env"
    ]
}

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


Щепотка магии


Последнее, что требуется сделать это запустить все необходимые сервисы, используя обычный docker-compose. Для генерации параметров запуска предназначена команда compose. При ее вызове, ddk проходит по всем активным проектам, собирает данные о пакетах и их параметрах, объединяет всю полученную информацию с конфигурациями самих пакетов и на основе этих данных генерирует итоговый docker-compose.yml. Данный файл и используется при запуске.


ddk compose
docker-compose up -d

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


ddk compose --up

Hello, world


Желающие увидеть ddk в действии могут развернуть демо-проект.


Качаем последнюю сборку:


wget https://github.com/simbigo/ddk/raw/master/dist/ddk
chmod +x ddk

Настраиваем будущий домен:


echo 127.0.0.1  hello.ddk >> /etc/hosts

Разворачиваем проект:


./ddk init
./ddk project get hello
./ddk compose --up

После успешной сборки всех образов, проект доступен по адресу http://hello.ddk


Заключение


Чего добились:


  1. Модульное окружение.
  2. Формирование конфигурации одной командой.
  3. Отсутствие многоразовой ручной работы.
  4. Минимальное время для включения разработчика в проект.

Над чем стоит поработать:


  1. В ddk практически отсутствует какая-либо обработка ошибок.
  2. Планировали реализовать корректную работу на MacOS, но на данный момент в нашей команде отсутствует маковод, и инструмент в этой системе не тестировался. Скорее всего, всплывут какие-то особенности, и потребуется доработка.
  3. Адреса репозиториев для пакетов и проектов передаются в качестве массива, но по факту работа ведется только с первым элементом. Необходимо реализовать корректную проверку существования репозитория и поиск по множеству адресов.
  4. Удаление лишних контейнеров.
  5. В скриптах инициализации довольно много повторяющегося кода. Может быть, имеет смысл вынести общие функции в ddk.

Для тех, у кого возникнет непреодолимое желание посмотреть, сделать лучше или просто покритиковать код, прилагаю ссылку на github. Будем рады, если инструмент окажется полезным еще кому-то, кроме нас.


Посетить github

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

https://habrahabr.ru/post/330452/


Метки:  

Кровь, пот и слезы дизайнера

Среда, 07 Июня 2017 г. 21:53 + в цитатник

Polybius Bank: самое значительное событие года в мире криптовалют

Среда, 07 Июня 2017 г. 20:26 + в цитатник
Меня зовут Евгений Шумилов, я — один из основателей и лидер проекта Emercoin. И я предлагаю вам мысленный эксперимент: представьте себе, что вы сейчас сидите в Пало-Алто в 1998 году, слушая питч мало кому известного Илона Маска про его проект PayPal на одном из стартап-мероприятий. Вложились ли вы бы в него?

image

Мне кажется, что с ICO банка «Полибиус» сейчас повторяется та же история. Как бы претенциозно не звучал заголовок, я действительно считаю этот проект грандиозным шагом вперёд. Таким же значительным, какой в свое время сделал PayPal. И вот почему.

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

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

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

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

И разумеется, это будет ой как не просто. Не с технической стороны, с этим как раз всё в порядке — и даже, пожалуй, лучше, чем у банков классических и “банков 2.0”. Главные усилия потребуются с юридической стороны.

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

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

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

Немного о технической стороне проекта


Я не буду утомлять вас пересказами white paper проекта и ряда других документов, просто кратко резюмирую своими словами.

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

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

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

Вклад Emercoin в развитие криптобанка


Блокчейн Emercoin будет очень плотно интегрирован в IT-структуру банка. На нём будет построен банковский документооборот. Основой станет технология блокчейна Emercoin NVS, которая позволяет позволяет записывать любую информацию в объёме до 20 килобайт. Эти записи обладают такими важными свойствами, как: уникальность, возможность передачи и однозначного установления её принадлежности.

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

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

ICO Polybius Bank


31 мая была запущена краудфандинговая ICO-кампания банка. Приобрести токены-акции Polybius, являющиеся смарт-контрактами, можно будет в течение до 5 июля.

Токен Polybius, он же доля в блокчейне Polybius, дает право на получение дивидендов в соответствии со своими долями. 20% ежегодной прибыли компании будет распределяться между всеми проданными по итогам ICO токенами.

Этот проект привлек уже более 11 тысяч инвесторов со всего мира. Минимальный план по сборам в $1,5 млн был пройден менее, чем за сутки после начала ICO. Всего за два первых дня было собрано $6 миллионов, гарантирующих становление Polybius как банка. На данный момент, спустя всего неделю после старта, проект уже собрал более половины из максимальной требуемой суммы в $25 млн, что однозначно обещает нам, что он состоится в полной или почти полной комплектации (DigiPass, блокчейн, большие данные, ИИ…)

Прибрести токены ещё можно, но главное сейчас не это. Главное, что, возможно, лет 20 спустя вы сможете рассказывать, что новый PayPal рождался прямо на ваших глазах.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330438/


Метки:  

[recovery mode] Кто владеет Nimses?

Среда, 07 Июня 2017 г. 19:56 + в цитатник


IT Юристы компании Lawboot Lawyers & Consultants провели небольшое исследование набирающий популярности стартап Nimses.

Исходя из данных на вебсайте стартапа, «Администрацией» {термин взят дословно из Terms of Use} мобильного приложения и сайта выступает компания под названием Nimses Inc.


Администрация — NIMSES INC, 1209 N ORANGE ST, WILMINGTON, DE 19801, USA, Tel (650) 288- 1989


Мы поискали эту компанию в официальном и публичном реестре Штата Делавер (США).

Место регистрации: США, Штат Делавер
Регистрационный номер: 6107207
Дата регистрации: 26 июля 2016 года
Тип компании: Корпорация
Регистратор: THE CORPORATION TRUST COMPANY
Адрес регистратора: WILMINGTON, CORPORATION TRUST CENTER 1209 ORANGE ST



Директор и собственник компании Nimses Inc пока не доступен в реестре, возможно потому что компания еще не подавала Annual Report.

Кому принадлежит торговая марка «Nimses»:
(не транслитерируем, чтоб не допустить ошибок)

Владелец: Myronivskyi Davyd Serhiiovych
Страна: Украина
Адрес: vul. Yaroslaviv val, bud. 28, kv. 8, m.Kyiv 01034
Заявка была подана: 25 ноября 2016 года



Результаты мы взяли с официального и общедоступного источника:
WIPO (world international property organisation).
Подробнее по ссылке по ссылке.

Кому принадлежит домен nimses.com:
Владелец домена скрыл свои данные и они не отображаются через «whois»



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

Фактом является то, что Myronivskyi Davyd Serhiiovych владеет торговой маркой Nimses.
Является ли он собственником компании пока остается загадкой…

Следите за новостями от IT юристов LAWBOOT на нашем телеграмм канале
Nimses обречен на успех, или на провал?

Проголосовало 2 человека. Воздержалось 2 человека.

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

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

https://habrahabr.ru/post/330442/


Метки:  

Дзен не позвонит

Среда, 07 Июня 2017 г. 18:03 + в цитатник
image

На дворе 2017 год, а это значит, что я уже как полтора года занимаюсь мазохизмом.
Два года назад я был весел и жизнелюбив, сейчас не хочется ни шутить ни развлекаться. За два года redux сделал меня фаталистом. Моя уверенность в ужасном будущем так называемого “frontend” увеличивается с каждым днём. В конце концов, сбербанк сделал redux основой своего стека, а эти ребята хорошего не выберут. Шутка! Я уверен, там работают замечательные специалисты.

Прошлое


Когда то Ден Абрамов вдохновил тысячи специалистов простой фразой а-ля “Я получаю удовольствие от работы”, просто добавив воды redux. И то что я понял за последние годы, моё удовольствие !== удовольствию Дена.
Зачем был создан redux? Для облегчения жизни разработчика? Для потребностей бизнеса? Нет! Для того, чтобы заработала горячая перезагрузка шаблонов react.
Между тем, в тот момент, абсолютно параллельно от Дена и не зная его работы, я занимался решением похожих проблем, но в другой экосистеме и это не требовало глобально стейта. Экосистема умерла, события не связаны, просто пришло её время…

Ден говорил о фрустрации, о том что он тратит слишком много времени на перезагрузку страницы, но сколько он подарил фрустрации миру после этого, интересно, задумывается ли он сколько человеко часов было и будет потрачено взамен?

Настоящие


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

Как сказал кто-то (может я?): «Ценность инструмента, прямо пропорционально количеству работы, что он упрощает».

И давайте честно ответим на простой вопрос, верно ли это утверждение для redux и иже с ним?

Для примера сравним создание равнозначных компонентов в 2х стеках: redux/react и angular 1 (что был актуален на то время).

compare-table

19 против 7 и это ещё оставляя за скобками настройки store, selectors и тонну вопросов и изменений связанных с проблемами взросления стека.
И так почти во всех аспектах. Прошу поделиться в комментариях обратным опытом, если таковой имеется.

Вообще, я не хочу сказать что redux это что-то плохое, в конце то концов, не может же ошибаться целая индустрия? В своём роде redux сделал революцию, принёс functional programming в массы, так сказать. И даже не важно, хорошо это или плохо.

Да, кому-то и вправду нужна горячая перезагрузка бизнес логики. А где-то логику проще описать процедурно, а не объектно. Для чего-то нужен микроменеджмент состояния.
Но давайте посмотрим правде в глаза, большая часть из нас делает интерфейсы для управления данными: пользователь изменил, мы сохранили на сервере, максимум — как-то отреагировали. Сама по себе эта задача очень проста, с ней мы справлялись на ура ещё с jQuery, а через 5-10 лет нас всех заменят роботы, но пока нам нужно упростить и себе и им жизнь, уменьшить время и стоимость разработки. Загляните в свои reducers, не сводятся ли 95% всех манипуляций к CRUD, а оставшиеся 5% может быть и вовсе оседают в middlewares? Так нужен ли нам специальный reducer на каждый чих?
Возможно пора двигаться дальше, посмотреть как все эти проблемы решали до нас более зрелые стеки?

Будущее


Где-то в глубине моей души теплится надежда, что всё у нас будет хорошо.
Последнии несколько месяцев я занимаюсь исследованиями и поиском форм и методов. Самые ощутимый результат моих творческих экспериментов — www.npmjs.com/package/react-component-redux, хоть он и сильно отстаёт от хода мысли.
Это я не пиарюсь, и пробовать не призываю. Это попыткой представить, как должны выглядеть универсальные приложения. Уверен, у каждого второго из вас, есть что сказать по этому поводу, призываю, выскажитесь!

Главное что я для себя вынес на данный момент — мы должны начать называть вещи своими именами, а не играть в ролевые игры, например:
Компоненты контейнеры — просто компонентами;
Компоненты репрезентации — виджетами;
Store — база данных;
Selectors — ORM. И да, нам нужны не только getters но и setters;

Мы должны перестать подстраиваться под диктовку инструментов, должны сами решать, как нам делать нашу работу быстрее и качественнее, а следовательно и бизнес успешнее.
Должны перестать искать killer features с выросшей на 10% скоростью рендеринга. Нам нужен стандарт, но уже не “frontend”, а Универсального Приложения, работающего везде, от унитаза, до космического корабля?

P.S.


Интересное сравнение производительность из далёкого 2014:
jsperf.com/comparing-performance-of-functional-vs-imperative
Не все поймут, немногие оценят...
image
Почему мы используем redux?

Проголосовало 29 человек. Воздержалось 22 человека.

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

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

https://habrahabr.ru/post/330072/


Метки:  

Дешевый full flash – выдумка или реальность?

Среда, 07 Июня 2017 г. 17:46 + в цитатник
2016 год провозгласили началом эпохи Flash-накопителей: флеш становится дешевле и доступнее. А вслед за снижением стоимости ssd-накопителей производители выпускают массивы, логика которых изначально создана для работы только с быстрыми флешами.  Стоимость таких решений все равно выводит их в корпоративный сегмент рынка, не позволяя небольшим компаниям познать все «прелести» ssd-эпохи. И вот, компания Synology сделала свой ход: встречайте бюджетный full-flash массив Synology FS3017. Что это – маркетинговый ход, или первый бюджетный флеш-массив?

Причины появления флеш-систем (All Flash Array – AFA) достаточно просты — унифицированные гибридные массивы не справляются с огромной производительностью флеш-накопителей, а логика работы основывается на взаимодействии с классическими HDD, увеличивая время отклика системы и износ SSD. Основываясь на этом, можно выделить 3 основных отличия AFA:
  1. Повышенная производительность контроллеров, способная полностью «прокачать» используемые накопители.
  2. Оптимизированная архитектура, снижающая время отклика системы.
  3. Интеллектуальный функционал обработки и записи данных, снижающий износ накопителей.

Именно поэтому, когда коллеги предложили мне протестировать массив Synology FS3017, я очень удивился. Давайте вместе оценим его параметры и определимся, подходит ли он под категорию AFA.

Массив FS3017 имеет стандартное стоечное исполнение: в корпусе высотой 2U помещается 24 SFF накопителя, поддерживаются накопители различных производителей (Intel, OCZ, Seagate и т.д.), что характерно для всей продукции Synology. Но что удивило меня больше всего — так это поддержка классических HDD — это ставит под вопрос принадлежность FS3017 к сегменту AFA. Из положительного — поддерживаются накопители как enterprise-класса с SAS-интерфейсом, так и более бюджетные SATA-накопители.
В качестве процессора используются 2 x Intel Xeon E5-2620 (6-core, 2.4 GHz) v3, объём встроенной памяти составляет 64GB DDR4, и может быть расширен до внушительных 512 Gb.



В качестве сетевых интерфейсов в базовой конфигурации имеются 2 порта 10 GE с поддержкой технологии Link Aggregation, используемых как для управления массивом, так и для передачи данных. Дополнительно можно установить 2 PCI-E (x16 и x8) модуля: сетевой модуль расширения (1GbE / 10GbE / 25GbE / 40GbE) или SAS-модуль для подключения двух дополнительных дисковых полок (RX1217sas на 12 LFF-слота или RX2417sas на 48 SFF-слота).



В качестве операционной системы используется знакомый всем пользователям Synology DiskStation Manager (DSM) версии 6.1. Я ожидал, что для своего AFA Synology выпустит особую версию микрокода, но она соответствует DSM настольных и стоечных моделей. Так что же делает этот массив AFA? Как выяснилось – поддержка технологии RAID F1.
Согласно описанию производителя технология RAID F1 призвана снизить вероятность потери данных, связанной с выходом из строя всей RAID-группы целиком. Так как в отличие от HDD выход из строя SSD-накопителей обусловлен окончанием ресурса накопителя (износом ячеек), то, теоретически, возможна ситуация, когда все накопители одного рейда умрут одновременно. Во избежание такой ситуации был разработан RAID F1. Распределяя блоки данных между накопителями аналогично RAID 5, RAID F1 записывает блок с контрольными суммами дважды на 1 накопитель. Это приводит к тому, что его ресурс тратится быстрее, а значит вероятность выхода из строя всех дисков рейда уменьшается. После завершения ресурса и замены накопителя система автоматически выбирает наиболее изношенный накопитель, и начинает писать дублирующие блоки на него.



Несмотря на все заявления производителей, SSD до сих пор остаются дорогостоящими накопителями, и умышленно снижать их ресурс представляется не самым оправданным решением проблемы с точки зрения бизнеса. В то время как основные игроки AFA-рынка внедряют технологии балансировки и снижения объема записываемых данных для продления срока жизни ssd-накопителей, Synology пошли в противоположную сторону. Насколько оправдан и будет ли признан рынком такой подход покажет время.
В остальном массив FS отличается от линейки RS (стоечные массивы Synology) наличием более мощного процессора (Intel Xeon D Family), второго сокета и поддержки RAID F1. Унаследовал FS3017 и стандартные сценарии использования – список рекомендованных пакетов DSM состоит из сервера облачного хранилища, сервера заметок и видеорегистратора. Ни о какой оптимизации архитектуры и логики для использования ssd речи тут не идет, в пользу чего говорит и наличие функции SSD-кэша. Так как два из трех признаков AFA-систем не соблюдаются, остается проверить насколько массив может прокачивать наши ssd-накопители.

Систему для тестов мне предоставили с расширенной до 128 Gb памятью и 12-ю накопителями Intel SSD DC S3520 Series объемом 480 Gb. Достойные показатели производительности и доступная за счет использование SATA-интерфейса цена делают их наиболее интересными для тех, кто планирует собирать флеш-систему бюджетного класса. Я выделил 1 диск под горячую замену (поддерживается глобальная замена дисков со всех полок) и 11 дисков я объединил в RAID F1. На получившейся RAID-группе я создал iSCSI-том и презентовал его серверу под управлением Windows Server 2016. Спецификация сервера: 2*Intel Xeon E5-2695 V3 2.3 GHz 14-core, 128 Gb RAM, 2-port 10 GE Base-T. По техническим причинам мне пришлось использовать только один порт 10 GE Base-T, что явно сказалось на производительности массива.
Нагрузку я генерировал самой популярной на рынке программой синтетических тестов Iometer. Целью тестов была не производительность дисков, а самого массива, поэтому я решил использовать паттерн 4KiB 100% random.
Начать я решил с «идеальной» нагрузки в 100% read, чтоб проверить посмотреть на «красивую» цифру. FS3017 показал себя достойно, выдав 156k IOPS.



При этом утилизация дисков и вычислительных мощностей системы не достигала 90% — это говорит о том, что узким местом является канал передачи данных. Далее я перешел к «боевым» тестам. Профиль нагрузки я выбрал наиболее распространенный: 67% чтения, 33% записи. Нагрузку генерировало 25 Worker’ов (терминология Iometer) на 5 iSCSI target’ов.
Исходя из личного опыта, указанная конфигурация AFA массива при подобном профиле нагрузки должна генерировать порядка 120-170k IOPS.После запуска цикличных тестов с повышением количества потоков я увидел следующую картину:


 
Как видно из графика, предел был достигнут уже при 4 потоках I/O на нагружаемый Worker и составлял ~94’000 IOPS. При этом нет дальнейшей деградации (которая всегда наступает при достижении «потолка» массива), следовательно,  это значение ограничено пропускной способностью канала. Об этом говорят и показатели утилизации вычислительных ресурсов массива, не превышающие 15%.
Стоит отметить взрывной рост времени задержки при увеличении количества потоков:



При достижении 4 потоков на Worker (что суммарно дает нам 100 потоков на систему) задержка составляла ~1.06 ms, после чего началась резкая деградация в геометрической прогрессии.
В дальнейшем, я планирую подключить сервер двумя портами, чтобы увидеть сколько система может выжать максимума из этих дисков. Но даже достигнутые 94 k IOPS позволяют FS3017 по праву называться AFA-системой

Система FS3017 оставила после себя очень странное впечатление: учитывая достигнутые в тестах показатели производительности, она действительно может позиционироваться как AFA-решение, однако пониженная надежность (из-за отсутствия второго контроллера) и урезанный в сравнении с конкурентами функционал ставит крест на ее использовании в серьезных корпоративных задачах. А именно этот сектор на текущий день является основным и единственным пользователем AFA-систем.
Но несмотря на это, я уверен, что она обязательно найдет свой сегмент рынка. Одним из наиболее очевидных может являться разработка корпоративных приложений и БД со сложным рельефом. В этих задачах мы можем позволить себе положить тестовую копию базы или всю тестовую среду на очень быструю и относительно дешевую FS3017 для дальнейших оперативных задач, не подвергая бизнес угрозе потерять критичные данные.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330434/


[Перевод] Интеллектуальность — новый виток в развитии систем локализации

Среда, 07 Июня 2017 г. 15:56 + в цитатник


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

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

Компания Translationexchange написала о том, как выглядит перевод в такой системе, а мы в Alconost как ее вендор, предоставляющий услуги профессионального перевода, эту статью перевели.

В первую очередь — автоматизация процессов локализации


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

Умные лингвистические технологии


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

Использование переводов, сделанных другими


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

Оперативное взаимодействие


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

Статистика и показатели хода локализации


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

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


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

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

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

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

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

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

https://habrahabr.ru/post/330416/


Метки:  

История одного лендинга

Среда, 07 Июня 2017 г. 15:55 + в цитатник
Здравствуйте, дорогие хабравчане! В этом посте я хочу рассказать о том, как и в какую цену я заказывал сайт у фрилансеров, в какие сроки я получил результат и что из этого сделал сам. Задача была создать “лендинг-магазин”: одностраничный сайт для двух товаров, с возможностью сразу же сделать заказ через полнофункциональную корзину.

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


Техническое задание


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

Я постарался составить максимально подробное ТЗ, разместив всю информацию в виде макета с примерным расположением элементов и комментариями, по какой логике что должно работать. Но даже с таким, достаточно подробным, на мой взгляд, описанием и фактически готовым прототипом, люди умудрялись задавать вопросы, ответы на которые мне казались очевидными. Отсюда вывод — чем детальнее и доступнее вы “разжевываете” то, что хотите донести, чем больше вы формализуете и четко описываете то, каким должен быть результат, тем меньше вопросов получите. Если у вас в голове проскальзывает мысль, что “это итак понятно” — нет, и еще раз нет! Не ленитесь и опишите этот момент, сделайте сноску или пояснение.

Дизайн


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

Всего мне поступило 61 предложение, среди которых было даже “скопировать любой лендинг и поменять в нем любые элементы (фон, картинки, текст, контакты и тд) за 24 часа”. Все предложения можно условно разбить на несколько ценовых категорий (плюс-минус):

  • От 1000 до 3000 — простовато, зачастую не очень профессионально, на мой вкус
  • От 4000 до 8000 — вполне удобоваримое качество, но не всегда стабильное. Большие портфолио, и, думаю, большинство заказчиков останутся довольны результатом.
  • От 9000 до 15000 — часто складывается впечатление слегка завышенной цены, но просматривая портфолио, все таки виден стабильный результат. Эта ценовая категория пользуется популярностью. В основном, лично мне не нравилась стилистика работ. А когда сомневаешься, в таких делах, риск не очень оправдан.
  • Категория 20 и выше — часто зависит от эго дизайнера. Много талантливых художников работает в этой категории — такие сайты впечатляют, но для моей задачи это было лишним. Может быть дополнена проработанным прототипом, что создает впечатление подхода к работе “с головой” и хоть как-то оправдывает дороговизну.

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

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

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

Верстка


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

Разместив заказ, я получил 20 предложений. Самым шокирующим было предложение за 19000 руб. На вопрос, что же я получу за такую цену, потенциальный подрядчик ответил: “Входит качественная верстка, чек-лист для проверки habrahabr.ru/post/114256/, описание логики работы корзины”.

Было несколько предложений за 1500-2000 руб, потом несколько за 6000 руб и еще парочка 10000+ руб.

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

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

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

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

Backend


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

Я использовал Slim Framework, подключив к нему несколько библиотек:
  • Illuminate Database (он же Eloquent — компонент Laravel) — для работы с базой
  • PHP dotenv — для конфигурации в разных окружениях
  • recaptcha — чтобы защититься от спама
  • PHPMailer — для отправки писем

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

Зачем это все?


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

Если у вас есть идея, не откладывайте ее в долгий ящик, а пробуйте реализовать. Я еще год назад собирался приступить, но сделал это только сейчас. Старайтесь делегировать работу по-максимуму, чтобы заниматься именно проектом, а не нюансами реализации. Любую задумку можно воплотить в разумные сроки и суммы, даже если вы сильно загружены основной работой. А готовый результат всегда доставляет приятные эмоции!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330428/


Метки:  

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

Среда, 07 Июня 2017 г. 15:47 + в цитатник

Как все началось


Дело было утром. Я захотел создать что-то на питоне, сложное, но посильное для меня. И тут я понял, что хочу создать язык программирования…

Как я создавал его...


Lexer

Куда же без него! Он требуется для «разделения» всего на токены. Если объяснить зачем он тогда представим: у нас есть код (CoffeScript).

a = true

if a
    console.log('Hello, lexer')

И лексер превращает этот код в это(сокращенная запись):

[IDENTIFIER:"a"]
[ASSIGN:"="]
[BOOLEAN:"true"]
[NEWLINE:"\n"]
[NEWLINE:"\n"]
[KEYWORD:"if"]
[IDENTIFIER:"a"]
[NEWLINE:"\n"]
[INDENT:"    "]
[IDENTIFIER:"console"]
[DOT:"."]
[IDENTIFIER:"log"]
[ROUND_BRAKET_START:"("]
[STRING:"'Hello, lexer'"]
[ROUND_BRAKET_END:")"]
[NEWLINE:"\n"]
[OUTDENT:""]
[EOF:"EOF"]

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

def lexer(code):
    code = code.split(";") # Токенезация
    code = code[0:-1] # Т.к. есть баг, что последний элемент пустой
    return parse(code, number=0) # "Отсылаем" это все парсеру

И код (моего «ЯП»):

printf Test; exit;

Он превратит в читабельное (!):

["printf Test", "exit"]

Парсер


Самое сложное только начинается… Сделать токенезацию легко, а обработать это сложно. В теории мы должны проверять команду, потом ее аргументы. Кажется это легко, но нет! По началу все было примерно так:

number = 0
if code[number].startswith("printf"):
    print(code[number][7:-0]
    number += 1

Но ничего не работало, точнее не печатало текст, потом я попробовал так:

number = 0
if code[number].startswith("printf"):
    print(code[number][7:-1]
    number += 1

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

number = 0
if code[number].startswith("printf"):
    l = len(code[number])
    print(code[number][7:l]
    number += 1

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

if code[number][7] == " ":
    l = len(code[number])
    print(code[number][8:l]
else:
    l = len(code[number])
    print(code[number][7:l]

Но все равно ничего не работало :| и с таким лицом я пытался что-то сделать… Целый час. И спустя около полутора часа я сделал это!


l = len(code[number]) # Получаем длину
if code[number][6] == " ": # Если 6-ой символ это пробел
    print(code[number][7:l]) # Печатаем все с 7-го символа
else: # Иначе
    print(code[number][8:l]) #

Потом полчаса шаманства и… Все работает на ура!

P.S.


  1. Не весь код с комментариями, т.к. он ориентирован на продвинутых программистов.
  2. Код в спойлере, т.к. он длинный и в «главный» текст статьи не входит.
  3. Прошу не ругаться насчет кода, мне 11 лет.
  4. Это моя первая статья на Хабре и вообще.
  5. Код в начале был взят из одной статьи на Хабре.

Код
def parse(code, number=0):
    try:
        # Print function #
        if code[number].startswith("printf") or code[number].startswith(" printf"):
            # Get len
            l = len(code[number])
            # If text starts with space
            if code[number][6] == " ":
                print(code[number][7:l])
            # Else
            else:
                print(code[number][8:l])
            number += 1
            parse(code, number)

        # Input function #
        if code[number].startswith("input") or code[number].startswith(" input"):
            # Get len
            l = len(code[number])
            # If text starts with space
            if code[number][6] == " ":
                input(code[number][7:l])
            # Else
            else:
                input(code[number][8:l])
            number += 1
            parse(code, number)

        # Exit function #
        elif code[number].startswith("exit") or code[number].startswith(" exit"):
            input("\nPress \"Enter\" to exit.")
            exit()
        else:
            cl = len(code[number])
            command = code[number]
            command = command[1:cl]
            print("\n", "=" * 10)
            print("Error!")
            print("Undefined command " + '"' + command + '"' + ".")
            print("=" * 10)
            input("Press \"Enter\" to exit...")
            exit()
    except IndexError:
        input("\n[!] Press \"Enter\" to exit.")
        exit()


def lexer(code):
    code = code.split(";")
    code = code[0:-1]
    return parse(code, number=0)


code = input()
lexer(code)

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

https://habrahabr.ru/post/330430/


Метки:  

Найти дизайнера: миссия (почти) выполнима

Среда, 07 Июня 2017 г. 15:29 + в цитатник
image

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

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

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

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

Подробнее о вакансии и тестовом задании

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

Не хотелось бы никого обидеть, тут вопрос чисто профессиональный, я представлю, для примера, несколько полученных нами «работ»:

image

К сожалению, мы были очень разочарованы таким выполнением задания. Создавалось впечатление, что “специалисты” не владеют даже базовыми знаниями работы в photoshop/illustrator/sketch. Более того, работы были выполнены не по техническому заданию.

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

Выставки. Мы решили принять участие в тематических выставках. Для этого, особенно интересной нам, показалась выставка Дизайна и рекламы – 2017 в Центральном Доме Художника, которая проходила с 11.04.2017 по 14.04.2017. Она привлекла нас своей обширной программой event, где большое место занимала наша тематика веб дизайна.
Нам удалось в короткие сроки договориться с руководителями этой выставки о коротком выступлении, где наша команда познакомила участников со всеми направлениями деятельности своей компании и более детально раскрыла наш процесс разработки дизайна для комплексных проектов. Также, в конце выступления, мы сделали короткое объявление о том, как нам важно найти специалиста для дальнейшего творческого сотрудничества и развития с нами. В этом объявлении мы сделали акцент на все положительные аспекты для потенциального дизайнера, которого мы с радостью готовы принять в наш коллектив. Мы обозначили все перспективы роста, развития и возможности полностью выразить себя для каждого специалиста, работающего в нашей компании.
Уже в конце выступления к нам подошли, в качестве претендентов, шесть специалистов с достойными портфолио. В результате этого общения, мы пригласили на работу одного дизайнера, наиболее “близкого нам по духу”.

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

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

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

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

https://habrahabr.ru/post/330420/


Метки:  

Совместная безопасность в облаке по версии RUVDS, HUAWEI и «Лаборатории Касперского»

Среда, 07 Июня 2017 г. 14:36 + в цитатник
Год спустя предыдущего мероприятия, как и обещано, RUVDS и HUAWEI собрали всех вновь, но уже с «Лабароторией Касперского». В этот раз обсуждали безопасность облачных решений, в том числе и совместную от организаторов мероприятия и их партнеров. На наш взгляд было интересно и многие вещи были представлены впервые в России. Ниже короткий обзор мероприятия для тех, кто пропустил.



Мероприятие прошло в московском отеле ARARAT PARK HYATT 31 мая и, как и год назад, собрало около сотни вендоров, потребителей и прочих заинтересованных лиц. Особый интерес на мероприятии вызвала презентация технологического решения thinclient от компаний RUVDS и HUAWEI. Специализированное оборудование и программное обеспечение позволяет существенно снижать затраты на приобретении персональных компьютеров в пользу комбинированного облачного решения. Но обо всем по порядку.

Одним из самых ярких докладов форума- было выступление гостей из Швейцарии: CEO дата-центра Deltalis Франк Харцхайм и руководитель продаж Лидия Шрейдер-Стрюб, рассказали о своем дата-центре в кантоне Ури в Швейцарии, который считается одним из самых защищенных и  безопасных дата-центров в мире. А с января этого года, данный дата-центр оказался также и в распоряжении клиентов RUVDS.  


На фото: Франк Харцхайм (CEO, Deltalis), Лидия Шрейдер-Стрюб (руководитель продаж, Deltalis)
 
В личной беседе с корреспондентом RUVDS г-н Харцхайм сказал, что «Несмотря на все техническое совершенство и оснащение ЦОДа, который выдержит (в их случае) и электромагнитную бомбу, главным аспектом безопасности является доверие. И Швейцария, является именно тем местом,  где этому уделяют особое внимание». После доклада был представлен короткий видеоролик о дата-центре, который был встречен бурными аплодисментами:





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


На фото слева направо: Станислав Погоржельский (HOSTKEY), Александр Мисюрев (директор по развитию, AIG), Александр Миляр (HUAWEI), Франк Харцхайм (CEO, Deltalis), Лидия Шрейдер-Стрюб (руководитель продаж, Deltalis)
 
Дискуссия получилась насыщенной и очень интересной. Спикеры сошлись во мнении на том, что абсолютную защиту обеспечить невозможно ни на физическом сервере, ни на виртуальном- и тут, как раз кстати пришлось недавнее решение от AIG и RUVDS по страхованию рисков потери данных и утечки конфиденциальной информации. RUVDS стал первым провайдером в России, кто застраховал своих клиентов и ответственность перед ними.


На фото: Александр Мисюрев (деректор по развитию, AIG), Александр Миляр (HUAWEI)
 
Директор отдела развития бизнеса AIG в России Александр Мисюрев заверил, что данный вид страхования не новый для AIG и до текущего момента основными страхователями выступали как крупные корпоративные клиенты, финансовые учреждения, беспокоящиеся о различных угрозах для своих данных и сервисов, так и предприятия малого и среднего бизнеса в сети Интернет. С кейсом RUVDS подтянутся и другие участники рынка уверен он. Ведь помимо всего прочего, это является и более зрелой альтернативой распространенным на рынке SLA-соглашениям. Но в отличии от последних страховой полис позволит получить компенсацию соразмерную с потенциальными потерями, а не со стоимостью услуг провайдера.  


На фото слева направо: Владимир Островерхов (эксперт поддержки корпоративных продаж, «Лаборатория Касперского»), Михаил Сергеев (директор по корпоративным коммуникациям, ГАРС телеком), Никита Цаплин (управляющий партнер, RUVDS)
 
Сегмент СМБ (среднего и малого бизнеса) вообще стал ключевой темой сессии. Спикеры обсуждали запросы от данной аудитории, насколько этот сегмент важен для вендоров. И оказалось, что в этом сегменте спрос активно растет, согласились с Александром Мисюревым (AIG) и вендоры решений безопасности из «Лаборатория Касперского», и проекта Varity- Владимир Островерхов и Данила Чежин. Что касается провайдеров, то как представители RUVDS, так и провайдера HOSTKEY (Никита Цаплин и Станислав Погоржельский) не смогли подтвердить рост клиентов из числа предприятия СМБ, полагая, что многие регистрируют аккаунты на физических лиц. Тем не менее, нельзя не согласиться с Владимиром Островерховым в том, что сегмент СМБ стал более компетентным в технологиях как виртуализации, так и безопасности.


На фото слева направо: Никита Цаплин (управляющий партнер, RUVDS), Данила Чежин (директор по продажам, Variti)

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



Завершили мероприятия два доклада, посвященные технологиям VDI от HUAWEI, а также технологическим тенденциям и актуальным решениям SDN для ЦОД. Первый из которых был логичным продолжением презентации совместного продукта RUVDS-HUAWEI для VDI, которое представляет собой комплекс программных и аппаратных решений для развертывания экономичных VDI-решений на платформе облака RUVDS.


На фото: демонстрационный стенд совместного VDI-решения RUVDS-HUAWEI

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


На фото: Артем Федосеев (управляющий директор, RUVDS)


На фото: Лидия Шрейдер-Стрюб (руководитель продаж, Deltalis),  Франц Харцхайм (CEO, Deltalis), Алексей Хорошилов (генеральный директор, МТ ТЕХНОЛОГИИ), Георгий Хомасуридзе (ведущий специалист сопровождения клиентов, Ultravds)



RUVDS совместно с HUAWEI проводят Форум ежегодно с целью поддержания связи с конечным потребителем и обменом опытом с крупнейшими вендорами ИТ-услуг в России и зарубежом. «Большинство наших клиентов находят нас через Интернет и опыт подобных мероприятий бесценен для нас и всего IAAS сегмента»- говорит Никита Цаплин, управляющий партнер RUVDS.
 



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

https://habrahabr.ru/post/330424/


Метки:  

Поездка на Google I/O: как, зачем и сколько стоит

Среда, 07 Июня 2017 г. 14:27 + в цитатник
В этом году я впервые побывал на Google I/O. По итогу, могу с уверенностью сказать, что было круто! О докладах я рассказал в предыдущей статье, а теперь — о самой поездке. Рекомендую каждому Android-разработчику туда съездить. Под катом — лайфхаки на тот случай, если вы хотите побывать на Google I/O, но не знаете, как это сделать и во сколько вам это обойдётся.



Как достать билет


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

Билет for free

Можно получить билет бесплатно или с большой скидкой (вроде 50%, мы не проверяли), если ваша компания является сертифицированным агентством Google. Так, собственно, я и получил билет, бесплатно и минуя отбор. После получения билета нужно пройти утомительную процедуру регистрации, на это выделяется 30 минут. Держите документы под рукой, вам нужно указать номер заграничного паспорта, телефон для экстренных случаев, где работаете, кем, чем занимается компания, нужно ли приглашение для посольства и ещё много чего. Я уложился в 23 минуты — для первого раза довольно неплохо.

Также на самой конференции есть возможность получить билет на следующий год, проявив себя при выполнении заданий в рамках Codelabs. Всего 80 заданий, направленых на показ новых фич, которые и представляют на текущем Google I/O. Садитесь за компьютер (если найдёте свободный) или воспользуйтесь своим ноутбуком, выполните хотя бы 4 задания. Затем специально обученный человек провряет вашу работу и ставит вам 4 отметки в карточку. Карточку оставляем в указанном месте и надеемся на удачу. Дадут вам билет или нет — узнаете примерно через месяц после конфы.

Виза


Не забываем, что конференция проходит в США, и вам нужна виза. Мне повезло: моя предыдущая виза уже закончилась, но с этого момента прошло менее 9 месяцев. Получить новую визу в таком случае гораздо проще — собеседование в посольстве не требуется, необходимо заплатить пошлину в 10 000 рублей и отправить документы через Pony Express. Вам придётся заполнить длинную и нудную анкету на сайте посольства, без этого никуда. Это уже больше относится к получению визы. Об этом много статей в интернете (например, здесь). Понадобится 3 часа свободного времени для заполнения необходимой информации и немного (много) нервов.

Дорога


Перелёт

Мой маршрут: СПБ — Франкфурт — Сан-Хосе. Пересадка — 2-3 часа. Были варианты с долгими пересадками, с пересадками в Лондоне и Стамбуле. По прибытии в США вас попросят заполнить декларацию о том, что вы ввозите. Ничего особенного, но не вздумайте ввозить мясо. Там с этим вообще какой-то ужас. Я на всякий случай взял гречки. Но она не пригодилась.

Следующий челлендж — добраться до жилья. По сравнению с восточным побережьем люди в Калифорнии, как они сами любят выражаться, ‘slow paced’ (медлительные, размеренные) и очень открытые. Я это почувствовал уже в автобусе, когда мне водитель ответил: «Расслабься, ты доедешь до ж/д станции Santa Clara. Автобус от аэропорта бесплатный». Там же в автобусе разговорился с пассажиром, который ехал как раз на нужную мне станцию San Antonio, он показал, как покупать билеты и сориентировал меня на местности. Не стойте столбом и попросите объяснить и помочь, мне ни разу не отказали. Часто подходили и рассказывали/показывали, как лучше сделать.

Общественный транспорт

В Сан-Франциско есть Muni Metro. Это не подземное метро в нашем обычном понимании, скорее, оно ближе к трамваю. Так же есть Historical line — трамваи с видом под старину, которые идут по тем же рельсам что и Muni Metro. Ещё есть автобусы Bart. Эти автобусы от обычных отличаются лишь тем, что остановок у них ещё меньше, они едут по нарисованным через весь город линиям разного цвета.

В общественном транспорте мало людей. Все передвигаются либо на машинах, либо на велосипедах. Единственным человеком, которых ходил пешком был я. За 7 дней прогулок я встретил порядка 10 пешеходов. И в Сан-Франциско всё обстоит так же, если отбросить туристов.



Связь


Изначально я минут на 10 потерялся. Советую купить ZIP SIM или другую местную симку. Я брал симку на 14 дней за 25$, там был гигабайт интернета. С интернетом в телефоне вам будет намного проще ориентироваться. Поразила скорость интернета и GPS, тут не надо ждать пока определиться твоё местоположение по спутникам, всё просиходит моментально. Сложилось ощущение, что там спутников 40 и все смотрят именно на меня.

Проживание


Я выбирал между двумя вариантами на Airbnb: за 24 000 и 35 000 рублей. В более дорогом варианте была отдельная комната с огромной двухместной кроватью, бассейн во дворе и тренажерный зал. В доме проживал и сам хозяин. В более дешёвом варианте была отдельная комната с небольшой одноместной кроватью, стол и стул. В других комнатах проживали либо туристы, либо студенты Стэнфорда. Кухня была общая.

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



Важно при выборе жилья сразу учесть, как вы будете добираться до конференции. От выбранного мной дома до площадки — 4 километра. В принципе, легко можно и пешком пройти. Но в 10 минутах был отель, от которого была развозка до конференции. Также развозка была от ж/д станции Palo Alto и ещё пары других отелей (безумно дорогих), рекомендованных Google.
Ещё один способ добраться до конференции — взять напрокат велосипед или машину.

Расходы


Перелёт: Билет из Питера в Сан-Хосе с пересадкой во Франкфурте стоил 43 000 рублей.

Жильё: Комната обошлось мне в 24 000 рублей через Airbnb. Конференция проводилась 3 дня, но в США я находился неделю.

Еда: Если покупать обычную еду, которую привык есть дома, то 50$ на неделю будет более чем достаточно. При этом это цена на органическую, очень дорогую, еду. Органической едой закупался в Whole Foods, вкусняхами — в Walmart. При походе в Walmart будьте готовы, что всё продаётся огромными порциями. Сок и молоко — 3 литра, мороженое — 8 сахарных трубочек или сразу ведро. Если планируете питаться в ресторанах и кафе, готовьте 12-15$ за приём пищи.

Транспорт: Транспорт очень дорогой. Поездка на автобусе — 2$, поезд до Сан-Франциско — 7$. При этом, доехав до самого города за наличку, придется купить Clipper Card за 3$ и закинуть на неё деньги. Я закинул 30$, этого хватило на 7 дней. Купить карту можно в Wallgreen’s (сеть аптек). Ей же можно расплачиваться за автобус и поезд.

Получается, минимально необходимая сумма без учёта билета на конференцию — около 80 000 рублей. Я потратил меньше — билет был бесплатный, и так как ехал от компании, то e-Legion компенсировал бОльшую часть расходов.

Участие в конференции


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



Билет Community Partner, который получают представители сертифицированных агентств Google, предполагают Reserved места. То есть у вас есть возможность занять места в самом первом ряду, как можно ближе к сцене. Почему возможность? Потому что все места занимаются в порядке живой очереди.

Чем раньше вы получите свой бэйдж, тем лучше будет ваше место на основном выступлении. Категории мест: Reserved — лучшие места, первые 20 рядов; 101, 102, 103, 104 — 30 рядов следом, 201, 202, 203, 204 — огромное количество мест с видимостью похуже.

Бейдж оснащён NFC и является пропуском на бесплатные автобусы и все мероприятия. На каждый доклад лучше резервировать место заранее через приложение. По NFC будут проверять, зарезервировано ли у вас место на докладе. Зарезервировал — проходи, нет — иди в очередь ожидания. Резервирование мест заканчивается за час до начала мероприятия.

В приложении я составил собственное расписание “My I/O”, и ориентировался по карте внутри него, там отмечено расположение сцен, sandbox’ов, туалетов и прочего.

После составления индивидуального расписания и записи на мероприятия всё просто. Каждый участник хочет проникнуться духом Калифорнии, узнать новые фичи, опробовать новые фичи на деле, задать кучу вопросов ЕСТЬ. Вас, конечно же, покормят. В итоге день выглядит следующим образом: добираемся на автобусе, завтрак, доклады / вопросы / codelabs (ДВС), обед, ДВС, развлекательная программа, автобус обратно.



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



В итоге получаем отлично организованное мероприятие, возможность пообщаться с народом, посмотреть Кремниевую долину, Сан-Франциско, Сан-Хосе, офисы Google и Facebook, университет Stanford. Также стоит обязательно заглянуть на Пирс 39 в Сан-Франциско и посмотреть, как морские львы дерутся друг с другом за места на специально оборудованных пирсах.



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

https://habrahabr.ru/post/330318/


Предварительная программа PyConRu-2017: выступят докладчики из Disney, Facebook, Яндекса, JetBrains, Тинькофф Банка

Среда, 07 Июня 2017 г. 14:08 + в цитатник
Привет! 16-17 июля в 95 км от Москвы пройдет пятая конференция для python-разработчиков PyCon Russia. Видео прошлогодних докладов можно посмотреть на YouTube-канале.

Программа PyCon-2017 получается отличной. На конференции выступят: Paul Hildebrandt (Walt Disney Animation Studios, США), Lukasz Langa (Facebook, США), Nina Zakharenko (Venmo, США), Александр Кошкин (Positive Technologies), Кирилл Борисов (Яндекс), Елизавета Шашкова (JetBrains), Михаил Юматов (ЦИАН), Ольга Сентемова (Тинькофф Банк), Игорь Новиков (Scalr), Олег Чуркин (Rambler&Co) — и это не все. Подробности программы — под катом.



Доклады PyConRu-2017


paul.jpgInside the Hat: Python @ Walt Disney Animation Studios
Paul Hildebrandt, Walt Disney Animation Studios, Лос-Анджелес, США

Первый хедлайнер — старший инженер в Walt Disney Animation Studios Paul Hildebrandt. Пол возглавляет команду, отвечающую за разработку системы управления медиаактивами, медиаплеера, системы ревью текущего съёмочного материала с мобильным интерфейсом и других подобных инструментов. Среди мультфильмов, над которыми он работал — «Холодное сердце», «Рапунцель», «Ральф», «Город героев», «Вольт» и другие.

На конференции Пол расскажет, как в Disney используют Python при создании анимационных фильмов.

paul.jpg Gradual Typing of Production Applications
Lukasz Langa, Facebook, Калифорния, США

Python сore developer с 2010 года, разработчик в Facebook, «хронический перфекционист, пианист, папа» Lukasz Langa выступит с докладом «Gradual Typing of Production Applications».

paul.jpg Elegant Solutions for Everyday Python Problems
Nina Zakharenko, Venmo, Портленд, США

Разработчик в Venmo, ранее — в Reddit and HBO, Нина Захаренко расскажет об общих антипаттернах в программах на python и покажет практические решения на python для улучшения вашего кода с помощью таких инструментов, как Decorators, Context Managers, Mixins и Lambdas.

paul.jpg Python на острие бритвы: PyPy project
Александр Кошкин, Positive Technologies, Санкт-Петербург

Производительность интерпретатора PyPy достигается за счет специализации, как и везде. Senior python developer в компании Positive Technologies Александр Кошкин расскажет, что именно подразумевается под этим и как RPython позволяет строить быстрые интерпретаторы произвольных языков.

paul.jpg Отладка в Python 3.6: быстрее, выше, сильнее
Елизавета Шашкова, JetBrains, Санкт-Петербург

Елизавета Шашкова, разработчик в команде PyCharm IDE в компании JetBrains, расскажет, как работает новый интерфейс для вычисления фреймов в Python 3.6, как он может помочь при создании быстрого отладчика, и почему такой быстрый отладчик невозможно было создать в предыдущих версиях языка Python. Для тех же, кто ещё не принял окончательное решение о переходе на Python 3.6, этот доклад даст несколько дополнительных причин, почему это стоит сделать.

paul.jpg Python of Things
Кирилл Борисов, Яндекс, Москва

Постоянный спикер PyCon Russia Кирилл Борисов рассмотрит в докладе место Python'а в мире IoT, как его применить в общении с различными железяками и на чём его запускают ради великой справедливости.

paul.jpg Тотальный контроль производительности
Михаил Юматов, ЦИАН, Москва

Руководитель разработки в компании ЦИАН Михаил Юматов расскажет, какие есть инструменты для слежения за производительностью веб-приложений. Как с помощью них собирать детальную информацию по всем операциям, быстро обнаруживать проблемы и реагировать на них. Еще Михаил объяснит, что такое статистический анализ и как его использовать для детального исследования производительности частей приложения.

paul.jpg Write once run anywhere — почём опиум для народа?
Игорь Новиков, Scalr, Харьков-Львов

Хотя разработка на Python сместилась в сторону серверного сегмента, десктопные приложения на Python все ещё остаются актуальными. Более того, с ростом производительности процессоров, python-приложения стали возможностью сократить финансовые, людские и временные затраты на выпуск десктопных версий. И наиболее интересным моментом в этом становится мультиплатформенность таких приложений. Игорь Новиков расскажет про мультиплатформенный питон, тулкиты и проблемы, связанные с ними.

paul.jpg Микросервисы наносят ответный удар!
Олег Чуркин, Rambler&Co, Москва

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

paul.jpg Как написать свой debugger
Артём Малышев, независимый разработчик, Нижний Новгород

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

paul.jpg (Без)опасный Python
Иван Цыганов, Positive Technologies, Санкт-Петербург

В этом году Open Web Application Security Project (OWASP) опубликовал очередной TOP-10 наиболее критических уязвимостей веб-приложений. Иван расскажет, что это за TOP-10 и что изменилось за последние 4 года с момента публикации предыдущей версии. Объяснит, какие типы уязвимостей находятся в зоне ответственности разработчика, а на какие они напрямую повлиять не могут. Покажет, как популярные фреймворки помогают разрабатывать безопасные приложения, и в каких ситуациях фреймворк ничем не сможет помочь.

paul.jpg Gevent — быть или не быть?
Александр Мокров, Positive Technologies, Нижний Новгород

Ведущий программист Positive Technologies Александр Мокров расскажет, что под капотом у библиотеки gevent и для чего она может быть полезной. Приведет архитектурные решения по построению асинхронного RPC на основе gevent, и расскажет о проблемах, с которыми можно столкнуться при её использовании. В завершение Александр покажет, как то же самое можно реализовать стандартными средствами современного Python (библиотека asyncio), и сравнит эти подходы.

Еще готовят доклады Ольга Сентемова (Тинькофф Банк) и Андрей Власовских (JetBrains), а Андрей Степанов проведёт мастер-класс «Как написать свой text to speech».

Полные тезисы всех докладов — на сайте конференции.



Хочу выступить


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

Скидка для студентов


Для студентов у нас действует специальная фиксированная цена — 9000 рублей. Чтобы купить билет по спец.цене, пришлите скан студенческого на om@it-people.ru, в ответ мы вышлем промокод.

Расскажите об этом студентам-питонистам, вдруг, они не знают.

Регистрация


Регистрируйтесь здесь. До 30 июня билет стоит 15 500 рублей. Потом стоимость повышается.

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

Приезжайте на PyCon с близкими — им тоже будет, чем заняться. На территории отеля есть бассейн, фитнес-центр, боулинг, бильярд, караоке, спа-центр и даже 5D-кинотеатр. Для детей есть детская площадка, комната с аттракционами и батут.

Билет для тех, кто едет с вами, стоит 6000 рублей. Он включает все, что и билет участника, кроме посещения докладов.

Регистрация и подробности на сайте конференции.



Присоединяйтесь к боту @PyconRu_bot, подписывайтесь на наш канал, на страницу в Фейсбуке и вы первыми будете узнавать новости про конференцию.

До встречи на PyConRu!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330408/


Метки:  

[Из песочницы] Redux: попытка избавиться от потребности думать во время запросов к API

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

И в чем же проблема?


Я начал изучать React и Redux не так давно, но он уже успел изрядно потрепать мне нервы. Буквально над каждым действием приходится задумываться — почти никакие изменения в коде невозможны без того, чтоб что-то оторвать. Чтоб просто получить список постов по API и вывести их, надо, пожалуй, написать не меньше сотни строк кода — создать корневой контейнер, создать store, добавить action для запроса к API, для успешного результата запроса, для неудачного результата запроса, создать action-creators, сматчить action-creators и props, сматчить dispatch и props, написать reducer на каждый action… Ух, продолжать не хочется. И все это мы должны делать заново для каждого веб-приложения — крайне нерациональная трата сил программиста.


Да, можно сказать новичку: "Смотри, тут десяток пакетов, которые могут сделать каждое действие из этого списка вместо тебя. Выбирай и пользуйся!" Но проблема в том, что надо разобраться в настройке и воспользоваться десятком пакетов, позаботившись о том, чтоб они совпадали с версией, которая описана в документации и не вступали друг с другом в конфликты… Слишком сложно. Хочется чего-то проще, такого же простого, как в мире Django, из которого я пришел. Какой-то один пакет, после установки которого в store сами по волшебству складываются все нужные данные — бери и пользуйся.


Ну, я и решил — если такого решения нет, напишу-ка я его сам.


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


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


  1. Делать асинхронный GET-запрос к REST API.
  2. Анализировать полученные данные и данные, лежащие в store, и, если там не хватает связанных по foreign key данных, делать еще запросы.
  3. Складывать полученные данные в store и следить за актуальностью хранящихся данных.

По описанию выходит, что состоять пакет будет из action creator'а, middleware и reducer'а.


Инструменты


К счастью, как было сказано в первом абзаце, очень многие вещи на JS уже давно написаны, и писать их заново не придется. Например, ходить в API мы будем с помощью redux-api-middleware, следить за неизменяемостью данных будем с помощью react-addons-update, а нормализовать данные (куда же без этого?) будем с помощью normalizr.


Конфигурация


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


1. Опишем схему данных со связанными сущностями на примере постов и юзеров:


    const schema = {
        users: {},
        posts: {
            author: "users"
        }
    };

Что-то напоминает, правда? Похоже на schema.Entity из normalizr. да, можно было использовать сразу классы из normalizr, но я считаю, что это пойдет во вред удобству конфига. В normalizr ключ должен ссылаться не просто на строку, как в нашем конфиге, а на объект entity, и конфиг превратился бы в это:


    import {schema} from 'normalizr';
    const user = new schema.Entity("users", {});
    const post = new schema.Entity("posts", {author: user});
    const normalizrSchema = {
        users: user,
        posts: post,
    }

И это намного менее красиво и удобно, чем первый вариант.


2. Точки входа и actions для API.


Тут мы будем следовать обратной логике — если есть удобный способ конфигурации, написанный ком-то до нас, зачем его менять? Сформируем конфиг с параметрами, которые передаются в action в redux-api-middleware, и получится довольно удобно:


    const api = {
        users: {
            endpoint: "mysite.com/api/users/",
            types: ['USERS_GET', 'USERS_SUCCESS', 'USERS_FAILURE'],
        },
        posts: {
            endpoint: "mysite.com/api/posts/",
            types: ['POSTS_GET', 'POSTS_SUCCESS', 'POSTS_FAILURE'],
        }
    };

Конечно, все типы action можно объявить отдельными переменными, а не строками — тут это сделано исключительно для простоты. Реализуем мы только GET-запросы, поэтому нет нужды в поле method.


3. "Время жизни" данных в store.


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


    const lifetime = {
        users: 20000,
        posts: 100000
    };

Соберем все части конфига воедино:


    const config = {schema, api, lifetime};

Таким образом, все довольно просто — юзеры "живут" в store 20 секунд, а посты — 100 секунд. Как только время жизни выйдет, мы должны будем идти за данными, даже если они уже хранятся в store, значит, нужно будет запоминать время прихода данных. И это нас подводит к следующему пункту — планированию store.


Планирование store


В этом пункте все довольно просто — нам нужно хранить данные и время их прихода. Заведем два ключа в store — entities и timestamp. Для уже знакомых с normalizr сразу становится понятно — в entities мы будем хранить наши сущности, и выглядеть он будет как-то так:


     const entities = {
         posts: {1: {id: 1, content: "content", author: 1}, 2: {id: 2, content: "not content", author: 2}},
         users: {1: {id: 1, username: "one"}, 2: {id: 2, username: "two"}}
     };

То есть, это словарь с ключами-сущностями, каждая из которых, в свою очередь, словарь с ключами-id моделей.


timestamp же будет выглядеть очень похоже, но по id мы будем получать не данные, а момент доставки данных клиенту — Date.now().


     const timestamp = {
         posts: {1: 1496618924981, 2: 1496618924981},
         users: {1: 1496618924983, 2: 1496618924983}
     };

На этом, в общем-то, пока все. В следующей части будет описан процесс разработки самих компонентов.

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

https://habrahabr.ru/post/330422/


Метки:  

Выстраиваем процесс разработки и CI pipeline, или Как разработчику стать DevOps для QA

Среда, 07 Июня 2017 г. 13:55 + в цитатник
Дано:

  1. крупный проект на Java с фронтом на Angular,
  2. разрабатываемый небольшой командой (~15 человек),
  3. с использованием кучи (порядка 40 штук параллельно) фич-бранчей,
  4. в git-репозитории;
  5. несколько виртуальных серверов в приватном амазоновском облаке, которые можно использовать под задачи разработки;
  6. разработчик, который немного подустал от Java, и хочет сделать что-нибудь по-настоящему полезное для постановки процессов.

Требуется:

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


Консоль управления космическим кораблёмQA стендом

Вот приходишь ты работать в маленький стартап с американскими корнями…

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

И поначалу, пока команда разработчиков совсем крошечная (до 10 человек), разработка кодовой базы ведётся в общем репозитории на GitHub Enterprise, с быстрым выделением мелких фич, бранчеванием от master, и быстрыми же циклами релизов с мержем фич-бранчей напрямую в тот же мастер. Лид команды пока что способен отследить, кто чего накоммитил, и каждый коммит не только прочитать, но и понять, правильно ли оно, или не очень. Таким образом, пулл реквесты открываются, и быстро мержатся самим же разработчиком с устного одобрения лида (или отклоняются им).

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

Процесс выглядит как-то так:

КОММИТЫ » ТЕСТЫ ВРУЧНУЮ » РЕЛИЗ

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

И тут случаются два факапа, буквально один за другим.

Сначала один из бэкэндеров случайно делает push force в master (бедняга простыл, затемпературил, голова не соображала), после чего две недели работы всей команды приходится восстанавливать по коммитику из чудом уцелевших локальных копий — все давно уже привыкли первым делом, придя на работу, сделать себе pull.

Потом одна из крупных фич, разрабатываемая фронтерами примерно пару месяцев в отдельной ветке, и зелёная по всем UI тестам, после мержа в master резко окрашивает его в красный, и чуть-чуть не обрушивает работу всего продукта. Прошляпили breaking изменения в собственном API. И тесты никак не помогли их отловить. Бывает. Но непорядок.

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

Вот мы и пришли к пункту «Дано:».

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

Что ж, приступим.

Сначала настроим в амазоновском облаке головной инстанс TC (+ два бесплатных агента), повесим их слушать коммиты в гихабовском репозитории (на каждый PR гитхаб делает виртуальный HEAD — слушать изменения ну очень просто), и автоматические сборки с прогоном юнит-тестов пойдут практически сами собой. Как коммитнет кто-нибудь, так через пять минут и сборка в очередь становится. Удобно.

КОММИТЫ » ПУЛЛ РЕКВЕСТ » БИЛД + ТЕСТЫ » РЕЛИЗ

Но недостаточно.

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

По счастью, у Atlassian есть подобное решение, называется оно BitBucket Server, а в то время ещё звалось Stash. Как раз позволяет делать всю такую интеграционную магию с другими атлассиановскими продуктами, и очень удобно для ревью кода. Решили смигрировать.

Вот только этот чудесный продукт, в отличие от гитхаба, виртуальных HEAD на каждый PR не создаёт, и тимсити после миграции стало нечего слушать. С post-commit hooks дело тоже не пошло по причине отсутствия у всех времени хорошенько с ними разобраться.

Поэтому, попервоначалу интеграция стэша с TeamCity была сделана через кривоватый костыль. Намаявшись с хуками, заокеанский коллега вместо того, чтобы использовать встроенное REST API для просмотра пулл реквестов, в отчаянии накропал на скорую руку на bash парсинг лога, который вечно крутится вокруг его tail -f, отыскивает грепом изменения нужного вида, и потом дёргает уже REST API TC. Не самый логичный подход, и некоторые билды начали задваиваться, но что поделаешь, некогда.

Забегая вперёд — когда время появилось, мне удалось переписать stash-watcher.sh по-человечески, забирая изменения через штатный REST, распарсивая JSON-ответ при помощи великой и могучей утилиты jq, — мега-вещь для любого девопса, делающего интеграцию тулзовин! — и дёргая TeamCity только тогда, когда это на самом деле надо. Ну, ещё заодно прописал скрипт системным демоном, чтобы он стартовал при перезагрузке сам. Амазоновские инстансы изредка надо бывает перестартовать.

Вот, сложилось два кусочка головоломки.

КОММИТЫ » ПУЛЛ РЕКВЕСТ » РЕВЬЮ КОДА || БИЛДЫ + ТЕСТЫ » РЕЛИЗ

За это время в команде возникли QA инженеры.

Бедненькие! За день переключаться локально между пятью фич-бранчами, собирать и запускать их вручную!? Да врагу такого не пожелаешь!!!

Признаюсь честно: я искренне люблю QA инженеров (особенно девушек). И, в общем-то, не я один. Даже коллеги из НЙ, изначально свято веровавшие в юнит-тесты, как оказалось, их любят. Только они об этом ещё не догадывались, когда расплывчато сформулировали задачку «надо как-нибудь исследовать такой вопрос, чтобы можно было автоматом запускать где-то у нас в облаке по экземпляру приложения на каждый бранч, ну, типа, чтобы бизнесу можно было глазами посмотреть, что конкретно там сейчас с разрабатываемой фичей происходит. Would you?»

— Окей, — сказал я (ну а кто ещё? Кто однажды вляпался в DevOps, тот и крайний), — Вот и пункт «Требуется:» прибыл.

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

Тут ещё надо сказать, что приложение представляет собой несколько WAR-контейнеров, которые запускаются под Apache Tomcat. WAR же, как известно, это обычный архив ZIP с особенной структурой директорий и манифестом внутри. И при сборке приложения его конфигурация (путь к базе, пути к REST endpoints других WAR, и всё такое прочее) зашивается куда-то внутрь ресурсов. А чтобы скормить WAR томкэту, надо прописать в конфигах, откудова его брать, по какому url, и на каком порту его развёртывать.

А если мы хотим запустить сразу много экземпляров одного и того же WAR? Конфигурить томкэт на лету, чтобы раскидывать их по разным портам или url-ам? И что делать с конфигами, зашитыми внутрь ресурсов WAR?

Какая-то дурная постановка вопроса.

Значит, мы пойдём другим путём. Например, IDEA при запуске WAR в отладчике скармливает томкэту через ключ командной строки -Dcatalina.base путь к копии директории $TOMCAT_PATH/conf, и запускает WAR не единым куском, а в exploded виде, то есть, разархивированным, — чтобы на лету можно было файлы с байткодом подменять.

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

Поднимаем там nginx — потому что в nginx довольно просто завести правило перенаправления запросов HTTP к адресу #####.dev.стартап.ком/путь/до/REST/endpoint на localhost:#####/путь/до/REST/endpoint и обратно. ##### — это уже конкретный номер порта, который конфигурируется в томкэтовых конфигах. Да, нечего пытаться даже запустить все фич-бранчи под одним томкэтом, вместо этого, для каждого из них будем заводить отдельную директорию $TOMCAT_PATH/conf, и запускать свой томкэт. Это в разы проще и надёжнее, и проблем с параллельностью нет.

Думаем, откуда взять циферки, чтобы они для разных экземпляров не совпадали. Номер билда? Нет, в таком случае QA запутаются, к какой фиче какой экземпляр относится. Номер гитовой ревизии отпадает по той же причине. Ну, делать нечего, заставляем всех разработчиков именовать ветки так, чтобы они обязательно включали в себя номер таски из Джиры по образцу feature-#####-что-нибудь или bugfix-#####-что-нибудь. Вот последние три цифры номера и будут входить в номер порта. А ещё это красиво.

В билды на тимсити, которые собирают WAR, добавляем дополнительный шаг сборки, который по SSH перекидывает их на тот жирный амазоновский инстанс, и также по SSH дёргает скрипт на bash, делающий следующее:

  1. распаковку WAR-ов в директорию /deployments/d###,
  2. копию из /deployments/skel директории conf для томкэта,
  3. вызывающий накатку отдельного экземпляра БД из дампа (дамп БД лежит в дереве исходников, так что он тоже под рукой),
  4. при помощи awk, sed, grep, find, и такой-то матери исправляющий конфиги томкэта из копии conf, а также конфиги в ресурсах распакованных WAR таким образом, чтобы в них были правильные порты, пути до базы, REST endpoints, и всего прочего.

После чего остаётся только запустить томкэт с ключом -Dcatalina.base=/deployments/d###, и готово.

КОММИТЫ » ПУЛЛ РЕКВЕСТ » РЕВЬЮ КОДА || БИЛДЫ + ТЕСТЫ » РАЗВЁРТЫВАНИЕ QA ЭКЗЕМПЛЯРА » QA ИНЖЕНЕРЫ ЕГО МУЧАЮТ » РЕЛИЗ

Так, минуточку, а наши любимые QA инженеры что, вручную будут, что ли, в облако по SSH ходить, томкэт из командной строки запускать? Как-то не супер. Можно бы автоматически его поднимать, но неудобно, так как фич-бранчей уже под 60, и память даже на самом жирном инстансе всё-таки не резиновая. Тормозить будет.

Думай, голова, шапку куплю. А! Так можно же написать консольку для управления задеплоенными инстансами, коли всё валяется в /deployments/d###. Пройти по поддиректориям, выплюнуть для каждой ссылки на старт/стоп, например.

nginx у нас уже поднят, настроить в нём classic CGI — как два байта об файерволл. А что такое classic CGI? Это когда на стандартный вход какого-то бинарника подаётся HTTP-запрос со всеми заголовками, и ставятся некоторые переменные окружения, а со стандартного выхода забирается HTTP-ответ, также со всеми заголовками. Тоже проще пареной репы, всё это можно буквально руками сделать.

Руками? Так не написать ли мне обработчик директории /deployments на bash? Потому что, наверное, могу. Как напишу, да как выложу на list.dev.стартап.ком (доступен будет только из внутренней сети стартапа, как и все экземпляры)… Иногда хочется чего-нибудь не только полезного, но и слегка ненормального. Такого, как минимальный обработчик HTTP-запросов на bash.

Вот и написал. Реально, скрипт на bash, который при помощи awk, sed, grep, find, и такой-то матери пробегается по поддиректориям /deployments, и выцепляет, где в какой что лежит. Номер билда, номер гитовой ревизии, имя фич-бранча — вся эта фигня и так на всякий случай уже передавалась из TC вместе с WAR-ником.

Заработало с полпинка. Один недостаток — парсить входные команды вида list.dev.стартап.ком/refresh?start=d### при помощи регулярок bash и никсовых утилит всё же не очень удобно. Но это уже я сам виноват — придумал глобальные слэш-команды и знак-вопроса-действия для экземпляров. Да, и вызывались внешние утилиты там для 60 поддиректорий много сотен раз, отчего консолька работала небыстро.

С другой стороны, определить, запущен ли конкретный экземпляр, можно из вывода стандартного ps (тот же греп в помощь), а также можно вызвать, к примеру, netstat или mysql -e "SHOW DATABASES" не отходя от кассы, и сунуть это в стандартный вывод, слегка подредактировав седом или авком для читаемости. Для диагностики очень хорошо, удобно.

А ещё аппетит приходит во время еды, так что вскоре в консольке появляются команды для killall -9 java (иногда хочется начать неделю с чистого листа), uptime, и несколько других полезностей. Самая главная — это возможность удалить экземпляр приложения вместе с базой. По крону, конечно, директория /deployments через две недели почистится (изначально было предусмотрено), но иногда хочется задеплоенную копию билда реджектнутого лидом PR убрать с глаз долой, чтобы не мозолила.

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

Добавляем возможность сделать моментальный снимок для задеплоенного экземпляра. Его привязываем уже к номеру гитовой ревизии (там циферки, по результатов экспериментов, вполне уникальные), и складываем в /deployments/s### (другая буква префикса, чтобы у экземпляров и снимков были разные пространства имён). Деплоим примерно тем же скриптом, что и с тимсити, только базу копируем не из дампа, а существующую.

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

КОММИТЫ » ПУЛЛ РЕКВЕСТ » РЕВЬЮ КОДА || БИЛДЫ + ТЕСТЫ » РАЗВЁРТЫВАНИЕ QA ЭКЗЕМПЛЯРА || СНИМОК QA ЭКЗЕМПЛЯРА » QA ИНЖЕНЕРЫ ЕГО МУЧАЮТ » РЕЛИЗ

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

Стоит только разработчику создать PR, как процесс деплоймента тестового экземпляра уже, считай, запущен, и буквально через час (если повезёт — число параллельных фич-бранчей с ростом команды вскоре возросло до сотни, пришлось поднимать аж семь инстансов под TC) у QA будет готовая к тестированию фича. Гоняй хоть вручную, хоть скриптами через REST API, а если надо, то диагностируй её и разбирайся с багами при помощи консоли управления тестовыми экземплярами.

Ну а дальше уже лирика. Через некоторое время тормоза консоли всем надоели, и мне пришлось вспоминать молодость, переписав её с bash (жаль, вся ненормальность этого маленького проекта разом потерялась) на обычный скучный PHP (впрочем, не на Java же такие задачи делать, в самом деле), а один из фронтеров сподобился переделать UI из олдскульного plain HTML на вполне современное ангуляровское приложение. Впрочем, я настоял на сохранении интерфейса а-ля девяностые, просто по приколу. Добавилась возможность просмотра stdout и stderr у томкэта. Сделали специальный CLI интерфейс для вызова REST API прямо на месте, ну и ещё немножко маленьких полезняшек.

Жутко удобная штука получилась.*


Вы только посмотрите, какие счастливые лица у команды QA инженеров!

* Хотите такую?
Напишите мне. С удовольствием рассмотрю предложения о работе в местах, где нужны матёрые (больше 10 лет опыта) специалисты с Primary Skill == Java, и возможностью иногда позаниматься подобного рода ненормальным программированием. Или процессами порулить. Можно всё сразу.

Только в Москву переехать не смогу. А вот поработать удалённо — с удовольствием.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330366/


[recovery mode] Создание простого аудиоредактора

Среда, 07 Июня 2017 г. 13:53 + в цитатник
Предлагаем вниманию читателей продолжение статьи от наших партнеров, Music Paradise. В прошлый раз команда представила туториал по извлечению аудиоданных из wav-файлов; сегодня речь пойдет о том, как использовать этот функционал в более широком контексте — при разработке полноценного аудиоредактора со стандартным набором функций.


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

https://habrahabr.ru/post/330418/


Метки:  

Поиск сообщений в rss_rss_hh_new
Страницы: 1437 ... 997 996 [995] 994 993 ..
.. 1 Календарь