Дайджест продуктового дизайна, ноябрь 2018

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

Читать дальше →
Дайджест продуктового дизайна, ноябрь 2018
Source: habrahabr

Как мы улучшали конверсию платежной формы

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

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

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

Под катом — о конверсии, мотивации пользователей, нашем протоколе, благотворительности и open source.
Читать дальше →
Как мы улучшали конверсию платежной формы
Source: habrahabr

[Перевод] Imba: JavaScript-совместимый язык для быстрой работы с DOM

Imba — это опенсорсный язык программирования, созданный компанией Scrimba специально для разработки веб-приложений. Он компилируется в JavaScript и способен работать внутри существующей JS-экосистемы. Речь идёт, например, о Node.js, об npm, о Webpack.

Основная сильная сторона Imba заключается в том, что этот язык позволят создавать гораздо более быстрые приложения, чем те, которые основаны на библиотеках, применяющих технологию Virtual DOM, наподобие React и Vue. Рост производительности приложений достигается за счёт того, как Imba работает с обновлениями DOM. Подробности об этом можно почитать здесь.

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

Этот материал представляет собой руководство по Imba для начинающих, освоение которого позволит приступить к созданию простых приложений. Сначала здесь будут раскрыты основы языка, потом будет рассмотрена разработка пользовательских интерфейсов с его помощью. Тут же будет показана настройка среды разработки для программирования на Imba.
Читать дальше →
[Перевод] Imba: JavaScript-совместимый язык для быстрой работы с DOM
Source: habrahabr

Обзор САПР на геометрическом ядре C3D

В предыдущих статьях о геометрическом ядре C3D мы разбирали его внутреннее устройство (структура ядра, модуль визуализации) и объясняли, чем оно отличается от API CAD-системы (статья). Проявить свои качества ядро, как инструмент разработчика САПР, может только в продуктах, написанных на его основе.

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


Читать дальше →
Обзор САПР на геометрическом ядре C3D
Source: habrahabr

Как мы устраивали соревнование смен между рабочими производства (как в СССР)

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

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

Итак, есть линия упаковки продуктов. Это цепочка из специальных станков, в которых полно движущихся деталей. В эти станки «приезжает» много-много продуктов, которые потом выстреливаются, как из пулемёта, в герметичной упаковке. Оператор нужен, чтобы делать часть работы по упаковке и в целом наблюдать за линией. Таких линий не одна и даже не десять.
Читать дальше →
Как мы устраивали соревнование смен между рабочими производства (как в СССР)
Source: habrahabr

Полное руководство по CMake. Часть вторая: Система сборки

Введение

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

Читать дальше →
Полное руководство по CMake. Часть вторая: Система сборки
Source: habrahabr

Неприятные ошибки при написании юнит тестов

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

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

Читать дальше →
Неприятные ошибки при написании юнит тестов
Source: habrahabr

Подержанное авто в кредит за 1 минуту

Вместо введения

Как и все интересные истории, эта началась достаточно давно и неожиданно. Однажды наш банк-партнер пришел к нам и сказал: “Ребята, мы научились делать скоринг в нашей системе за одну минуту. Как насчет того, чтобы объединить наши усилия и интегрировать проекты? С нас – решение и кредит, с вас – машины”. Сказать, что мы воодушевились, – ничего не сказать! Мы имели все шансы стать первыми чуть ли не в мире, кто может дать кредит онлайн на подержанное авто за одну минуту (ОДНУ МИНУТУ, КАРЛ)! Ниже я расскажу, что из этого получилось, но для начала расскажу вам, кто такие, собственно, МЫ.

Читать дальше →
Подержанное авто в кредит за 1 минуту
Source: habrahabr

[Перевод] Высокая доступность MySQL в GitHub

GitHub использует MySQL в качестве основного хранилища данных для всего, что не связано с git, поэтому доступность MySQL имеет ключевое значение для нормальной работы GitHub. Сам сайт, интерфейс API на GitHub, система аутентификации и многие другие функции требуют доступа к базам данных. Мы используем несколько кластеров MySQL для обработки различных служб и задач. Они настроены по классической схеме с одним главным узлом, доступным для записи, и его репликами. Реплики (остальные узлы кластера) асинхронно воспроизводят изменения главного узла и обеспечивают доступ для чтения.

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

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

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

Читать дальше →
[Перевод] Высокая доступность MySQL в GitHub
Source: habrahabr

Трафик в конце туннеля или DNS в пентесте

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

Читать дальше →
Трафик в конце туннеля или DNS в пентесте
Source: habrahabr