Русский
Русский
English
Статистика
Реклама

Лайфхаки для гиков

Девайсы для пентеста. Обзор хакерских девайсов. Часть 3 Wi-Fi Network

28.07.2020 12:21:05 | Автор: admin


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

За последние годы в клирнет вышло огромное количество пентестерских устройств и постоянно появляются новые. Большинство продаётся в разрозненных магазинах по всему миру (и на алиэкспрессе в том числе), и у пентестеров появилась новая головная боль выбирать среди десятков похожих устройств нужное или искать очередное универсальное решение. Наконец, крутой специалист и консультант по информационной безопасности Yago Hansen просто собрал каталог крутых девайсов, железяк и аксессуаров, доказавших свою эффективность. Сейчас каталог второй версии, в нём 177 наименований из 8 категорий. Предлагаем вашему вниманию его адаптацию в виде цикла из 7 постов (некоторые категории будут совмещены или поделены на две статьи из-за разницы в объёме).

Что будет в цикле:




Wi-Fi + Network


1. Alfa AW-US036NHA



Лучшее устройство Wi-Fi 802.11n в 2,4 ГГц

Это самая универсальная карта Wi-Fi на рынке за последние много лет. Она поддерживает режим мониторинга для большинства дистрибутивов Linux, таких как Kali Linux, Debian и другие. Она также поддерживает ОС Windows, позволяя создавать на ней устройства AP с помощью драйвера и утилиты. В Kali поддерживаются все режимы работы (поддельная точка доступа, несколько точек доступа, режим мониторинга, управляемый режим), и её поддерживают практически все хакерские инструменты на рынке. Единственное ограничение этой карты она не поддерживает частоты 5 ГГц.

Характеристики


Цена от 35 евро

2. Alfa AWUS-036ACH



Лучшее устройство Wi-Fi 802.11n в 2,4/5 ГГц

Двухдиапазонный беспроводной USB-адаптер 802.11ac с широким диапазоном AWUS036ACH обеспечивает невероятные расстояния и невероятную скорость для компьютеров Mac или Windows в сети Wi-Fi До 300 Мбит/с для сети 2,4 ГГц и до 867 Мбит/с для сети 5,0 ГГц. AWUS036ACH подключается к компьютеру через USB 3.0 с технологией AC1200 Wi-Fi для обеспечения превосходной производительности. Унаследовав многолетний опыт работы в отрасли беспроводной связи, ALFA AWUS036ACH построен на основе новейших стандартов 802.11ac, а также высокочувствительных двухдиапазонных антенн, что обеспечивает необычайную мощность сигнала и покрытие. Поддержка двухдиапазонного AC1200.

Характеристики


Цена от 55 евро

3. 4 Watt 2.4 GHz amplifier



Wi-Fi/Bluetooth усилитель

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

Характеристики


Цена от 25 евро

4. RF connector adapter kit



Всегда на связи

Широко используется для антенн, радиовещания, радиосвязи, телекоммуникаций, коаксиального кабеля, LMR, видеонаблюдения, микроволновых приложений и т.д. Комплект соединительных адаптеров упрощает жизнь техническим специалистам и инженерам, позволяя подключаться в любом месте за считаные секунды. Комплект включает в себя 20 типов многоразовых коаксиальных разъемов BNC/F/N/SMA/TNC/UHF для охватываемых и охватывающих адаптеров, которые можно использовать в различных комбинациях для большинства задач. Просто прикрутите к разъему или другому устройству, и оно заработает.

Характеристики


Цена от 30 евро

5. 2.4GHz/15dBi yagi antenna



Для больших расстояний

Беспроводная антенна yagi TP512 в большинстве случаев не может быть подключена непосредственно к устройству (маршрутизатор Wi-Fi, усилитель сигнала и т.д) без какого-либо кабеля/преобразователя/адаптера. Эта антенна имеет разъем N-female, поэтому для нее потребуется переходник с N-female на тип разъема вашего устройства, обычно это разъем коаксиального кабеля RP-SMA. А также вы можете установить усилитель сигнала между устройством и антенной.

Характеристики


Цена от 30 евро

6. 2.4 GHz/9 dBi omni antenna



Расширяем горизонты

Эта Wi-Fi-антенна значительно увеличит дальность и силу вашего сигнала Wi-Fi. Поддерживается только для внутреннего использования. Эта всенаправленная антенна является прямой заменой антенны, которая входит в стандартную комплектацию вашего маршрутизатора, точки доступа, устройства VoIP или карты PCI. Антенна всенаправленная, наведение не требуется она может отправлять и получать Wi-Fi во всех направлениях. Эта антенна сильнее, чем менее мощные усилительные антенны, предлагаемые крупными производителями.

Характеристики


Цена от 10 евро

7. Wi-Fi deauther




В то время как глушитель просто создает шум в определенном диапазоне частот (то есть 2,4 ГГц), атака деаутентификации возможна только из-за уязвимости в стандарте Wi-Fi (802.11). Деаутентификатор не вмешивается ни в какие частоты, он просто отправляет несколько пакетов Wi-Fi, которые заставляют определенные устройства отключаться; это позволяет выбирать конкретную цель. Глушитель же просто блокирует все в пределах радиуса и поэтому обычно крайне незаконен. Эта плата разработки на базе ESP8266 оснащена встроенной системой зарядки 18650, OLED-дисплеем и 3-осевым ползунковым переключателем. Он устанавливается с последним программным обеспечением ESP8266 Deauther. С помощью этого устройства вы можете проводить различные атаки для тестирования сетей Wi-Fi. Обратите внимание, что ESP8266 поддерживает только 2,4 ГГц. Подробная информация о ПО тут.

Характеристики


Цена от 8 евро

8. Wi-Fi PCB antenna



8dBi PCB-антенна для 2,4 ГГц/5 ГГц

Это двухдиапазонная (2,4/5 ГГц) антенна, которая подходит для любого Wi-Fi-применения. Она широко используется для таких проектов, как Wi-Fi Deauther, увеличивая диапазон любого стандартного устройства Wi-Fi. Этот вид антенны идеально подходит для использования внутри любого корпусного устройства, чтобы избежать использования внешних антенн в наружных проектах. Внутри любого корпуса из АБС или ПВХ потери будут небольшими, и вы увеличите диапазон Wi-Fi, расширяя зону покрытия.

Характеристики


Цена от 8 евро

9. Gl-Inet AR150



OpenWRT/LEDE роутер на Pineapple

Эти небольшие маршрутизаторы, основанные на операционной системе OpenWRT (теперь называемой LEDE) лучший вариант для тех, кому нужна очень маленькая платформа с низким энергопотреблением, которая работает под управлением Linux. Включенное аппаратное обеспечение основано на Qualcomm SOC, с интерфейсом Wi-Fi, совместимым с режимом мониторинга, который позволяет сканировать точки доступа и станции Wi-Fi. Процессор не впечатляет производительностью, но он подойдёт для небольших проектов, таких как датчики, сканеры, деаутентификаторы, MiTM и т.д. А ещё модель AR150 использует очень схожее оборудование с устройством Hak5 Pineapple Nano, но стоит гораздо меньше. Поэтому хакеры перенесли прошивку Pineapple на это устройство. Вот тут можно прочитать про перенос, а здесь можно скачать саму прошивку.

Характеристики


Цена от 27 евро

10. Gl-Inet AR750S slate



Гигабитный беспроводной роутер

Slate прячет все ваши рабочие места под цифровую крышу с помощью защищенного VPN. Соедините свои глобальные офисы с Slate, чтобы сотрудники из всех мест могли общаться друг с другом удаленно, а все данные передавались безопасно. Slate предназначен для частых путешественников, поэтому он компактен и легок. Его можно засунуть в рюкзак или даже в карман и взять его с собой куда угодно. Он также поставляется с портом USB для подключения USB/3G модема. И конечно же, ОС основана на LEDE/OpenWRT с открытым исходным кодом.

Характеристики


Цена от 70 евро

11. Gl-Inet AR300M shadow



Продвинутый роутер на базе OpenWRT/LEDE

Эти небольшие маршрутизаторы, основанные на операционной системе OpenWRT (теперь называемой LEDE) лучший вариант для тех, кому нужна очень маленькая платформа с низким энергопотреблением, которая работает под управлением Linux. Включенное аппаратное обеспечение основано на Atheros Qualcomm SOC, который включает интерфейс Wi-Fi, совместимый с режимом мониторинга, который позволяет сканировать точки доступа и станции Wi-Fi.

Характеристики


Цена от 27 евро

12. Gl-Inet USB150 Minirouter



Роутеры на базе OpenWRT/LEDE

Эти небольшие маршрутизаторы размером с USB-накопитель основаны на операционной системе OpenWRT (теперь называется LEDE). Это хороший вариант для разработки любого приложения на основе очень маленькой платформы с низким энергопотреблением под управлением Linux. Включенное оборудование основано на Qualcom SOC, который включает в себя интерфейс Wi-Fi, совместимый с режимом мониторинга, который позволяет сканировать точки доступа и станции Wi-Fi. Если вам нужно просто защитить канал до вашего ноутбука, создав еще один слой между интернетом и вами, вы можете использовать эти мини-роутеры для подключения через Tor или VPN таким образом, чтобы никто не мог получить доступ к вашему сетевому трафику.

Характеристики


Цена от 27 евро

13. Gl-Inet Mifi



OpenWRT/LEDE 4G роутер с аккумулятором

Этот небольшой 4G LTE роутер хороший вариант для создания хакерского устройства, с подключением к интернету. Аппаратное обеспечение основано на Atheros SOC, который включает в себя интерфейс Wi-Fi, позволяющий в режиме мониторинга сканировать и захватывать необработанную информацию Wi-Fi. Также есть порты GPIO, UART для подключения GPS или любого другого устройства. Опция подключения 4G основана на внутреннем порте PCIe, в который вставлена карта Quectel EC25 4G WWAN. Все прошивки, SDK и код опенсорсны и доступны на гитхабе. Также есть встроенный аккумулятор и зарядное устройство, поэтому его можно использовать в автономном режиме. Имеются слоты для SIM-карты, и для карты microSD. Также имеется свободный разъем USB-A для подключения дополнительной карты Wi-Fi или других периферийных устройств.

Характеристики


Цена от 109 евро

14. Quectel EC25-EU 4G modem



4G/3G/GSM/GPRS + GPS/GNSS

Quectel EC25 Mini PCIe это серия модулей LTE 4 категории со стандартным форм-фактором PCI Express MiniCard (MiniPCIe). Он оптимизирован специально для приложений M2M и IoT и обеспечивает приём 150 Мбит/с и отдачу 50 Мбит/с. EC25 Mini PCIe содержит 5 вариантов: EC25-J Mini PCIe, EC25-E Mini PCIe, EC25-AU Mini PCIe, EC25-V Mini PCIe и EC25-A Mini PCIe; это делает его обратно совместимым с существующими сетями EDGE и GSM/GPRS, обеспечивая возможность его подключения даже в удаленных районах, где отсутствует покрытие 4G или 3G. EC25 Mini PCIe поддерживает технологию определения местоположения Qualcomm IZat Gen8C Lite (GPS, ГЛОНАСС, Galileo и QZSS). Интегрированная GNSS значительно упрощает проектирование продукта и обеспечивает более быстрое, точное и надежное позиционирование. Большой набор интернет-протоколов, стандартных отраслевых интерфейсов и широких функциональных возможностей (драйверы USB для Windows XP, Vista, 7, 8/8.1, 10, Linux, Android/eCall) расширяют применимость модуля до широкого спектра применений M2M, таких как промышленный маршрутизатор, промышленный КПК, защищенный планшетный ПК, и видеонаблюдение.

Характеристики


Цена от 45 евро

15. Waveshare 4G modem + GPS



4G/3G/2G/GSM/GPRS + GPS/GNSS

Во многих ваших проектах вам понадобится система интернет-коммуникаций IoT, для которой стандартом де-факто стал LTE. По всему миру доступно множество LTE-операторов, а пропускная способность широкополосной передачи данных LTE является более чем приемлемой, предлагая высокоскоростную и широкополосную связь по всему миру. Этот модем может быть легко интегрирован в ваши проекты Raspberry pi в виде расширения, соединяясь с платой, с помощью 40-пинового разъема. Есть слот SIM-карты и множество возможных конфигураций для подключения модема к другим платам. Вы также можете использовать его как обычный внешний модем 4G благодаря разъему USB. Linux его проще всего использовать через wvdial.

Характеристики


Цена от 60 евро

16. LTE PCB Antenna



4G/3G/2G/GSM/GPRS + GPS/GNSS

При разработке собственных хакерских устройств и интеграции технологий на основе мобильных сетей вам нужно будет найти антенну, соответствующую вашим потребностям. Эта маленькая антенна на печатной плате оснащена разъемом UFL, который обычно используется во встроенных устройствах. PCB-антенны вполне подходят для проектов, в которых недостаточно места для использования внешних всенаправленных антенн. Эта антенна будет работать во всех необходимых диапазонах, включая 4G/3G/2G/GSM/GPRS+GPS/GNSS приложения, которые необходимо подключить к той же радиочастотной цепи.

Характеристики


Цена от 12 евро

Следущий раздел RFID & NFC + HID & Keylog

Подробнее..

VPS на Linux с графическим интерфейсом запускаем сервер RDP на Ubuntu 18.04

29.07.2020 12:21:28 | Автор: admin

В предыдущей статье мы разобрали запуск сервера VNC на виртуальной машине любого типа. У этого варианта масса недостатков, основным из которых являются высокие требования к пропускной способности каналов передачи данных. Сегодня мы попробуем подключиться к графическому рабочему столу на Linux по RDP (Remote Desktop Protocol). Система VNC основана на передаче массивов пикселей по протоколу RFB (Remote Framebuffer), а RDP позволяет отправлять более сложные графические примитивы и высокоуровневые команды. Обычно он используется для организации служб удаленных рабочих столов в Windows, но серверы для Linux также доступны.

Оглавление:


Установка графического окружения
Русификация сервера и установка ПО
Установка и настройка сервера RDP
Настройка межсетевого экрана
Подключение к серверу RDP
Менеджер сессий и сеансы пользователей
Переключение раскладок клавиатуры

Установка графического окружения


Мы возьмем виртуальную машину с Ubuntu Server 18.04 LTS с двумя вычислительными ядрами, четырьмя гигабайтами оперативной памяти и жестким диском (HDD) на двадцать гигабайт. Более слабая конфигурация плохо подходит для графического десктопа, хотя это зависит от решаемых задач. Не забывайте использовать промокод Habrahabr10 для получения скидки в 10% при заказе.



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

sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

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

Русификация сервера и установка ПО


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

sudo apt-get install language-pack-ru

Настроим локализацию:

sudo update-locale LANG=ru_RU.UTF-8

Того же эффекта можно достичь, отредактировав вручную файл /etc/default/locale.

Для локализации GNOME и KDE в репозитории есть пакеты language-pack-gnome-ru и language-pack-kde-ru они понадобятся, если вы будете использовать программы из этих сред рабочего стола. В XFCE переводы устанавливаются вместе с приложениями. Дальше можно инсталлировать словари:

# Словари для проверки орфографииsudo apt-get install hunspell hunspell-ru# Тезаурус для LibreOfficesudo apt-get install mythes-ru# Англо-русский словарь в формате DICTsudo apt-get install mueller7-dict

Кроме того, инсталляция переводов может потребоваться для некоторых прикладных программ:

# Браузер Firefoxsudo apt-get install firefox firefox-locale-ru# Почтовый клиент Thunderbirdsudo apt-get install thunderbird thunderbird-locale-ru# Офисный пакет LibreOfficesudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ru

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

Установка и настройка сервера RDP


В репозиториях Ubuntu есть распространяемый свободно сервер Xrdp, которым мы и воспользуемся:

sudo apt-get install xrdp

Если все прошло нормально, сервер должен запуститься автоматически:

sudo systemctl status xrdp



Сервер Xrdp запускается с правами пользователя xrdp и по умолчанию берет ертификат /etc/ssl/private/ssl-cert-snakeoil.key, который можно заменить собственным. Для доступа на чтение файла нужно добавить пользователя в группу ssl-cert:

sudo adduser xrdp ssl-cert

Настройки по умолчанию можно найти в файле /etc/default/xrdp, а все прочие конфигурационные файлы сервера лежат в каталоге /etc/xrdp. Основные параметры находятся в файле xrdp.ini, который можно не менять. Конфиг хорошо документирован, к тому же в комплекте имеется соответствующие manpages:

man xrdp.ini
man xrdp

Осталось только отредактировать скрипт /etc/xrdp/startwm.sh, который исполняется при инициализации пользовательской сессии. Предварительно сделаем резервную копию скрипта из дистрибутива:

sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.bsudo nano /etc/xrdp/startwm.sh

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

#!/bin/shif [ -r /etc/default/locale ]; then. /etc/default/localeexport LANG LANGUAGEfiexec /usr/bin/startxfce4

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

sudo chmod 755 /etc/xrdp/startwm.sh

Перезапускаем сервер:

sudo systemctl restart xrdp

Настройка межсетевого экрана


По умолчанию Xrdp слушает TCP-порт 3389 на всех интерфейсах. В зависимости от конфигурации виртуального сервера может потребоваться настройка межсетевого экрана Netfilter. В Linux это обычно делается с помощью утилиты iptables, но в Ubuntu лучше использовать ufw. Если IP-адрес клиента известен, настройка осуществляется следующей командой:

sudo ufw allow from IP_Address to any port 3389

Разрешить соединения с любого IP можно так:

sudo ufw allow 3389

Протокол RDP поддерживает шифрование, но открывать доступ к серверу Xrdp из сетей общего пользования плохая идея. Если у клиента нет фиксированного IP, для повышения уровня безопасности сервер должен слушать только localhost. Доступ к нему лучше настроить через туннель SSH, который безопасно перенаправит трафик с клиентского компьютера. Аналогичный подход мы использовали в предыдущей статье для сервера VNC.

Подключение к серверу RDP


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

sudo adduser rdpuser



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

sudo gpasswd -a rdpuser sudo

Подключиться к серверу можно с помощью любого клиента RDP, включая встроенный клиент службы удаленных рабочих столов Windows. Если Xrdp слушает внешний интерфейс, никаких дополнительных телодвижений не понадобится. Достаточно указать в настройках соединения IP-адрес VPS, имя пользователя и пароль. После подключения мы увидим примерно такую картину:



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



Если сервер Xrdp слушает только localhost, на клиентском компьютере трафик придется упаковать в туннель SSH (на VPS должен быть запущен sshd). Под Windows можно использовать графический клиент SSH (например, PuTTY), а в UNIX-системах нужна утилита ssh:

ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ip

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

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

С мобильными устройствами сложнее: способные поднять туннель клиенты SSH придется покупать, к тому же в iOS и iPadOS фоновая работа сторонних приложений затруднена из-за слишком хорошей оптимизации энергопотребления. На iPhone и iPad поднять туннель в отдельном приложении не получится потребуется приложение-комбайн, которое само умеет устанавливать соединение RDP через SSH. Такое, например, как Remoter Pro.

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


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

ps aux |grep xrdp



sudo netstat -ap |grep xrdp



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



Автоматический запуск менеджера сессий прописан в файле /etc/default/xrdp, а конфигурация хранится в /etc/xrdp/sesman.ini. По умолчанию выглядит она примерно так:

Globals]ListenAddress=127.0.0.1ListenPort=3350EnableUserWindowManager=trueUserWindowManager=startwm.shDefaultWindowManager=startwm.sh[Security]AllowRootLogin=trueMaxLoginRetry=4TerminalServerUsers=tsusersTerminalServerAdmins=tsadmins; When AlwaysGroupCheck=false access will be permitted; if the group TerminalServerUsers is not defined.AlwaysGroupCheck=false[Sessions]

Здесь можно ничего не менять, стоит только запретить вход с правами root (AllowRootLogin=false). Для каждого авторизовавшегося в системе пользователя запускается отдельный процесс xrdp: если отсоединиться не завершив сеанс, пользовательские процессы по умолчанию продолжат работать. Настройки можно изменить в файле /etc/xrdp/sesman.ini (секция [Sessions]).

Переключение раскладок клавиатуры


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

sudo nano /etc/xrdp/xrdp_keyboard.ini

В конец конфигурационного файла нужно добавить следующие строки:

rdp_keyboard_ru]keyboard_type=4keyboard_type=7keyboard_subtype=1model=pc105options=grp:alt_shift_togglerdp_layouts=default_rdp_layoutslayouts_map=layouts_map_ru[layouts_map_ru]rdp_layout_us=us,rurdp_layout_ru=us,ru

Остается сохранить файл и перезапустить Xrdp:

sudo systemctl restart xrdp

Как видите, поднять сервер RDP на линуксовом VPS несложно, а в предыдущей статье мы уже разобрали настройку VNC. Помимо этих технологий, есть еще один интересный вариант: использующая модифицированный протокол NX 3 система X2Go. С ней мы разберемся в следующей публикации.

Подробнее..

Как расшифровать прошивку автомобиля в неизвестном формате

30.07.2020 12:15:48 | Автор: admin

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

CALIBRATIONXi
attach.att
[Format]
Version=4

[Vehicle]
Number=0
DateOfIssue=2019-08-26
VehicleType=GUN1**
EngineType=1GD-FTV,2GD-FTV
VehicleName=IMV
ModelYear=15-
ContactType=CAN
KindOfECU=0
NumberOfCalibration=1

[CPU01]
CPUImageName=3F0S7300.xxz
FlashCodeName=
NewCID=3F0S7300
LocationID=0002000100070720
CPUType=87
NumberOfTargets=3
01_TargetCalibration=3F0S7200
01_TargetData=3531464734383B3A
02_TargetCalibration=3F0S7100
02_TargetData=3747354537494A39
03_TargetCalibration=3F0S7000
03_TargetData=3732463737463B4A

3F0S7300forIMV.txt Nim5A56001000820EE13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E2030133E2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E2030133E2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E20911381959FAB0EE9000
81C9E03ADE35CEEEEFC5CF8DE9AC0910
38C2E031DE35CEEEEFC8CF87E95C0920
...


Дальше идут строки по 32 шестнадцатеричные цифры.

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

Конкретно для этой прошивки у него имелся дамп содержимого:

0000: 80 07 80 00 00 00 00 00 00 00 00 00 00 00 00 00
0010: 80 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0030: 80 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 80 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050: 80 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070: 80 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080: E0 07 60 01 2A 06 00 FF 00 00 0A 58 EA FF 20 00
0090: FF 57 40 00 EB 51 B2 05 80 07 48 01 E0 FF 20 00
...


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

Повторяющиеся фрагменты


Посмотрим внимательно на те шестнадцатеричные строчки:

5A56001000820EE13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E2030133E2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E2030133E2030133E20301
33E2030133C20EF13FE2030133E20301
33E2030133E20911381959FAB0EE9000
81C9E03ADE35CEEEEFC5CF8DE9AC0910
38C2E031DE35CEEEEFC8CF87E95C0920
...


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

  1. Пять первых байт 5A56001000 это некий заголовок, не влияющий на содержимое дампа;
  2. Дальнейшее содержимое зашифровано блоками по 4 байта, причем одинаковым байтам дампа соответствуют одинаковые байты в файле:
    • E2030133 00000000
    • 820EE13F 80078000
    • C20EF13F 80070000
    • E2091138 E0076001
    • 1959FAB0 2A0600FF
    • EE900081 00000A58
    • C9E03ADE EAFF2000
  3. Видно, что это не XOR-шифрование, а нечто более сложное; но при этом похожим блокам дампа соответствуют похожие блоки в файле например, изменению одного бита 8007800080070000 соответствует изменение одного бита 820EE13FC20EF13F.

Соответствия между блоками


Получим список всех пар (блок файла, блок дампа), и поищем в нем закономерности:

$ xxd -r -p firmware.txt decoded$ python>>> f = open('decoded','rb')>>> data=f.read()>>> words=[data[i:i+4] for i in range(0,4096,4)]>>> f = open('dump','rb')>>> data=f.read()[:4096]>>> reference=[data[i:i+4] for i in range(0,4096,4)]>>> list(zip(words,reference))[:3][(b'\x82\x0e\xe1?', b'\x80\x07\x80\x00'), (b'\xe2\x03\x013', b'\x00\x00\x00\x00'), (b'\xe2\x03\x013', b'\x00\x00\x00\x00')]>>> dict(zip(words,reference)){b'\x82\x0e\xe1?': b'\x80\x07\x80\x00', b'\xe2\x03\x013': b'\x00\x00\x00\x00', b'\xc2\x0e\xf1?': b'\x80\x07\x00\x00', ...}>>> decode=dict(zip((w.hex() for w in words), (r.hex() for r in reference)))>>> decode{'820ee13f': '80078000', 'e2030133': '00000000', 'c20ef13f': '80070000', ...}>>> sorted(decode.items())[('00beb5ff', '4c07a010'), ('02057139', '0000f00f'), ('03ef5ed0', '50ff710f'), ...]

Вот как выглядят первые пары в отсортированном списке:

00beb5ff  4c07a01002057139  0000f00f03ef5ed0  50ff710f \ изменение в бите 24 в дампе меняет биты 8, 10, 24-27 в файле04ef5bd0  51ff710f < 0408ed38  14002d06  \05f92ed7  ffffd087   |0a5d22bb  f602dffe    > изменение в бите 25 в дампе меняет биты 11, 25-27 в файле0a62f9a9  e10f5761   |0acdc6e4  a25d2c06  /0aef53d0  53ff710f <0aef5cd0  52ff710f / изменение в бите 24 в дампе меняет биты 8-11 в файле0bdebd6f  4c57a4100d0c7fec  0064ffff0d0fe57f  18402c570d8fa4d0  bfff88ff0ee882d7  eafd7f001001c5c6  6c570042 \1008d238  42003e06  > изменение в бите 1 в дампе меняет биты 0, 3, 16-19 в файле100ec5cf  6c570040 /109ec58f  6c07005010e1ebdf  62ff600810ec4cdd  dafd4c07119f0f8f  08006d5711c0feee  2c5f0500120ff07e  20420452125ef13e  20f600c8125fc14e  60420032126f02af  02006d671281d09f  400f34881281d19f  400f308812a6d0bb  4007349812a6d1bb  40073098 \12aed0bf  40073490  > изменение в бите 3 в дампе меняет биты 2 и 19 в файле12aed1bf  40073090 /> изменение в бите 10 в дампе меняет бит 8 в файле12c3f1ea  20560001 \12c9f1ea  20560002 /  изменения в битах 0 и 1 в дампе меняет биты 17 и 19 в файле...

Действительно, видны закономерности:

  • Изменения в битах 0-3 в дампе меняют биты 0-3 и 16-19 в файле (маска 000F000F)
  • Изменения в битах 24-25 в дампе меняют биты 8-11 и 24-27 в файле (маска 0F000F00)

Напрашивается гипотеза, что каждые 4 бита в дампе влияют на те же самые 4 бита в каждой 16-битной половине 32-битного блока.

Для проверки отрежем старшие 4 бита в каждом полублоке, и посмотрим, какие пары получатся:

>>> ints=[int.from_bytes(w, 'big') for w in words]>>> [hex(i) for i in ints][:3]['0x820ee13f', '0xe2030133', '0xe2030133']>>> scrambled=[((i & 0xf000f000) >> 12, (i & 0x0f000f00) >> 8, (i & 0x00f000f0) >> 4, (i & 0x000f000f)) for i in ints]>>> scrambled=[tuple(((i >> 16) << 4) | (i & 15) for i in q) for q in scrambled]>>> scrambled[:3][(142, 33, 3, 239), (224, 33, 3, 51), (224, 33, 3, 51)]>>> [tuple(hex(i) for i in q) for q in scrambled][:3][('0x8e', '0x21', '0x3', '0xef'), ('0xe0', '0x21', '0x3', '0x33'), ('0xe0', '0x21', '0x3', '0x33')]>>> [b''.join(bytes([i]) for i in q) for q in scrambled][:3][b'\x8e!\x03\xef', b'\xe0!\x033', b'\xe0!\x033']>>> decode=dict(zip((b''.join(bytes([i]) for i in q).hex() for q in scrambled), (r.hex() for r in reference)))>>> sorted(decode.items())[('025efd97', 'ffffd087'), ('02a25bdb', 'f602dffe'), ('053eedf0', '50ff710f'), ...]>>> decode=dict(zip((b''.join(bytes([i]) for i in q[1:]).hex() for q in scrambled), (r.hex()[1:4]+r.hex()[5:8] for r in reference)))>>> sorted(decode.items())[('018d90', '0f63ff'), ('020388', '200e06'), ('050309', 'c03000'), ...]

После перестановки подблоков по 4 бита в ключе сортировки, соответствия между парами подблоков становятся еще более явными:

018d90  0f63ff020388  200e06    \050309  c03000 \   | блок xx0xxx0x в дампе соответствует блоку xx0xxx3x в файле05030e  c0f000  |  |05036e  c06000  | /050c16  c57042  |050cef  c57040  |05971e  c88007   > блок xCxxx0xx в дампе соответствует блоку x0xxx5xx в файле0598ef  c07050  |05bfef  c07010  |05db59  c9000f  |05ed0e  cff000 <060ecc  264fff  |065ba7  205fff  |0bed1f  2ff008 <|0bfd15  2ff086  |0cedcd  afdc07 <|10f2e7  e06a7e   > блок xxFxxx0x в дампе соответствует блоку xxExxxDx в файле118d5a  9fdfff  | \13032b  40010a  |  > блок xxFxxxFx в дампе соответствует блоку xx8xxxDx в файле148d3d  fff6fc  | /16b333  f00e30  |16ed15  fffe06 /1b63e6  52e8831c98ff  400b57 \1d4d97  aff1b7  | блок xx00xx57 в дампе соответствует блоку xx9Fxx8F в файле1ece0e  c5f500  |1f98ff  800d57 /20032f  00e400 \200398  007401  |2007fe  042452  |2020ef  057490  |206284  067463   > блок x0xxx4xx в дампе соответствует блоку x2xxx0xx в файле20891f  00f488  |20ab6b  007498  | \20abef  007490  | / блок xx0xxx9x в дампе соответствует блоку xxAxxxBx в файле20ed1d  0ff404  |20fb6e  0064c0 /21030e  00f000 \21032a  00b008  |210333  000000  |210349  00c008  |21034b  003007  |210359  00000f  |210388  000006   > блок x00xx00x в дампе соответствует блоку x20xx13x в файле21038b  00300b  |210398  007001  |2103c6  007004  |2103d2  008000  |2103e1  008009  |2103ef  007000 /...

Соответствия между подблоками


В вышеприведенном списке видны такие соответствия:

  • Для маски 0F000F00:
    • x0xxx0xx в дампе x2xxx1xx в файле
    • x0xxx4xx в дампе x2xxx0xx в файле
    • xCxxx0xx в дампе x0xxx5xx в файле
  • Для маски 00F000F0:
    • xx0xxx0x в дампе xx0xxx3x в файле
    • xx0xxx5x в дампе xx9xxx8x в файле
    • xx0xxx9x в дампе xxAxxxBx в файле
    • xxFxxx0x в дампе xxExxxDx в файле
    • xxFxxxFx в дампе xx8xxxDx в файле
  • Для маски 000F000F:
    • xxx0xxx7 в дампе xxxFxxxF в файле
    • xxx7xxx0 в дампе xxxExxxF в файле
    • xxx7xxx1 в дампе xxx9xxx8 в файле

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

>>> ref_ints=[int.from_bytes(w, 'big') for w in reference]>>> ref_scrambled=[((i & 0xf000f000) >> 12, (i & 0x0f000f00) >> 8, (i & 0x00f000f0) >> 4, (i & 0x000f000f)) for i in ref_ints]>>> ref_scrambled=[tuple(((i >> 16) << 4) | (i & 15) for i in q) for q in ref_scrambled]>>> decode=dict(zip((b''.join(bytes([i]) for i in q).hex() for q in scrambled), (b''.join(bytes([i]) for i in q).hex() for q in ref_scrambled)))>>> sorted(decode.items())[('025efd97', 'fdf0f8f7'), ('02a25bdb', 'fd6f0f2e'), ('053eedf0', '5701f0ff'), ...]>>> decode=[dict(zip((bytes([q[byte]]).hex() for q in scrambled), (bytes([q[byte]]).hex() for q in ref_scrambled))) for byte in range(4)]>>> decode[{'8e': '88', 'e0': '00', 'cf': '80', 'e1': 'e6', '1f': '20', 'c3': 'e2', ...}, {'03': '00', '5b': '0f', '98': '05', 'ed': 'f0', 'ce': '50', 'd6': '51', ...}, {'21': '00', '9a': 'a0', 'e0': '0a', '5e': 'f0', '5d': 'b2', 'c0': '08', ...}, {'ef': '70', '33': '00', '98': '71', '90': '6f', '01': '08', '0e': 'f0', ...}]>>> decode=[dict(zip((q[byte] for q in scrambled), (q[byte] for q in ref_scrambled))) for byte in range(4)]>>> decode[{142: 136, 224: 0, 207: 128, 225: 230, 31: 32, 195: 226, 62: 244, 200: 235, ...}, {3: 0, 91: 15, 152: 5, 237: 240, 206: 80, 214: 81, 113: 16, 185: 2, 179: 3, ...}, {33: 0, 154: 160, 224: 10, 94: 240, 93: 178, 192: 8, 135: 2, 62: 1, 120: 26, ...}, {239: 112, 51: 0, 152: 113, 144: 111, 1: 8, 14: 240, 249: 21, 110: 96, 241: 47, ...}]

Когда таблицы соответствия готовы, код расшифровки получается совсем простой:

>>> def _decode(x):...   scrambled = ((x & 0xf000f000) >> 12, (x & 0x0f000f00) >> 8, (x & 0x00f000f0) >> 4, (x & 0x000f000f))...   decoded = tuple(decode[i][((v >> 16) << 4) | (v & 15)] for i, v in enumerate(scrambled))...   unscrambled = tuple(((i >> 4) << 16) | (i & 15) for i in decoded)...   return (unscrambled[0] << 12) | (unscrambled[1] << 8) | (unscrambled[2] << 4) | (unscrambled[3])...>>> hex(_decode(0x00beb5ff))'0x4c07a010'>>> hex(_decode(0x12aed1bf))'0x40073090'

Заголовок прошивки


В самом начале перед зашифрованными данными был пятибайтный заголовок 5A56001000. Первые два байта сигнатура 'ZV' подсказывают, что используется формат LZF; дальше обозначены метод сжатия (0x00 без сжатия) и длина (0x1000 байт).

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

Подробнее..

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

01.08.2020 12:08:37 | Автор: admin


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

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

Делимся с вами расшифровкой эфира.

***



Меня зовут Андрей Чернявский. Я выпускник ВМК МГУ, 2005 года, кафедра квантовой информатики. Преподавал довольно долго там же. Моя жизнь связана с наукой, это моя бесконечная любовь. Я занимаюсь квантовой информатикой, также неврологией в Научном центре неврологии, и, помимо этого анализом данных и разработкой учебных курсов проекта Game Academy, формально CTO данного проекта. Хотел бы рассказать именно о нашем проекте.
Проект посвящен играм, как можно догадаться из названия и из моего фона все, наверно, узнают Fallout, о котором, в том числе, пойдет речь сегодня.

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

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

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

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


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

Замечательный комментарий. Об этом мы очень много думали.

Приведу один пример: в Испании есть компания на базе университета, которая делает приложение по связи игр с навыками. У них есть одна научная статья (правда, у меня к ней довольно много критики). Я попробовал их сервис, в который подключается аккаунт Steam он рассказывает, в какие игры вы играли в последнее время и какие навыки как бы натренировали. Я тогда играл в Fallout 4 (честно признаюсь я не фанат этой части, люблю предыдущие, особенно 1 и 2); мне написали, что, оказывается, я, поиграв часов 10 в Fallout 4, натренировал решение проблем, аналитическое мышление и все такое. Правда, я не понял, как это F4 тренировал мое аналитическое мышление.

То есть, действительно, обычно нельзя четко связать игру с развитием определенного навыка. Во-первых, надо разделить навыки на soft skills и hard skills, как это делается в английском языке.

Четких понятий здесь нет, но все примерно понимают, что это означает. Hard это конкретные навыки: например, играть на гитаре, резать по дереву, бить по мячу сильно в футболе (у меня из этих есть только первый навык). Soft это очень широкое понятие: принятие решений, эмоциональный интеллект, traits, мотивации.

Игры гораздо сильнее относятся именно soft; они очень редко развивают hard-скиллы. Определенные вещи можно тренировать, например, с помощью VR. В Центре неврологии шлемы виртуальной реальности используются для реабилитации после инсультов, это можно причислить к soft, хотя мы говорим не совсем об этом. Если подумать о чем-то более конкретном, например, можно взять EVE Online. Как многие шутят, это симулятор Excel работу с таблицами вполне можно назвать хардскиллом.

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

Какие навыки человек мог развить после 5000 часов в DOTA?


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

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

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

Вот моя кепка VaultTec. На ней есть надпись: HARD WORK IS HAPPY WORK. Я с этим согласен на все 100%. Когда я был безумно счастлив от своей работы? Например, когда я делал свою диссертацию и неделю сидел почти без сна, как псих, над кодом по анализу квантовой запутанности, пытаясь его перевести на первую версию QUDA, которая была жутко неудобна, это было очень сложно, и мне было безумно интересно. Для диссертации это было вообще не важно, и дедлайна не было, но я все равно почти не спал, работал и получал безумное удовольствие.

Я надеюсь, у всех когда-то было что-то подобное в работе. Еще был другой проект по квантовым вычислениям, над которым я сидел две недели и спал по 4 часа максимум; при этом, можно было сделать в три раза меньше того, что сделал я. Или работа над данными в Game Academy. Когда я начинал это делать, это было занятие на уровне я попробую помочь но потом я снова сидел без сна, связывал разные работы, машинное обучение, статистику. Это было очень трудно, но приносило невероятное удовольствие.

К чему я это рассказываю? Многие пишут на тему того, как найти призвание. Важно понять следующее: обычно человек в своей жизни уже делал что-то, что было связано с его призванием. Он уже этим занимался. Часто такие моменты ищут в детстве или еще где-то. Кроме того, человек впадает в поток (хотя я и не люблю слово поток): в таком состоянии ему не нужна внешняя мотивация, он будет неотрывно сидеть и делать. Но ведь именно так мы постоянно играем в игры: вроде бы и спать хочется, и есть, но ты сидишь и играешь, у меня так было много раз с Fallout, Arcanum и другими RPG-играми. То же самое в работе.

Я называют это core motivations вещи, которые сами по себе являются сверхмотивационными для человека, за которыми он будет сидеть без сна.

Что для вас есть хорошие игры?


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

Для меня хорошие игры это игры, в которых есть настоящие трудности, в которых победить сложно. Примеров можно привести множество: например, Stellaris или Europa Universalis 4. Там такие правила, что освоить их будет сложно любому человеку. Или, например, Dark Souls конечно, есть люди с супер-реакцией, и им играть легко, но большинство тратит на нее огромные усилия. Это тоже относится к core motivations.

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

Я стал думать, почему, и нашел очевидный ответ: в моих любимых однопользовательских RPG присутствуют ровно те вещи, которые я люблю в работе. Их две. Во-первых, развитие персонажа: если я дохожу до level cap, я бросаю игру, потому что мне надо постоянно развиваться и в моих научных работах тоже всегда присутствует развитие, обучение, я чувствую, что расту. Во-вторых, охота за сокровищами: в RPG всегда ищешь сундуки, в которых может оказаться новый супер-меч, и в науке, анализе данных, то же самое. Это мой стиль. Я не беру стандартные методы, я беру сложную задачу, пробую её по-всякому и сижу над ней ночи напролет, пока не нарвусь на решение.

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

В соревновательных играх разделяют роли на carrier, support, технических игроков. Вы следите за этими ролями в исследованиях?


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

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

Как зависит уровень интеллекта от жанров, на что показывает высокий и низкий уровень игроков?


Я пытался в анализе данных использовать жанры, но это не работает. Жанр это очень условное разделение. Взять хотя бы мои любимые RPG: тут есть action-RPG, есть сюжетные, есть олдскульные с дико сложной механикой, есть Fallout 4, который и к RPG причисляется условно (даже Fallout 3 гораздо проще в плане механики, чем первые части). Или стратегии: к ним относятся как совсем простенькие игры, так и серии от Paradox.

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

Существует ли строгая статистическая корреляция между профессией и любимыми играми?


Я расскажу, с чего началась моя работа. Основатель проекта, Ирина близкая подруга моей близкой подруги, она позвонила мне, чтобы обсудить его. Я подумал классно, я люблю игры, сам думал об этом, сам давно замечал подобное, было бы здорово заодно посмотреть на современный machine learning (я до этого занимался ML только в 2004-06 годах). Удалось собрать (с использованием открытых старых данных из Steam) довольно большую базу с информацией о том, во что и сколько играли игроки и какие у них профессии. В процессе я попробовал новый machine learning, нейросети, SVM, деревья решений, бустинги.

Профессий, связанных с IT, оказалось не намного больше, но все же больше. Я стал думать, как к этому подойти, обсуждал с людьми. Мне порекомендовали использовать классическую статистику; это, конечно, в разы сложнее, чем ML. Были использованы банальные точные тесты; тут прелесть в том, что можно получить совершенно строгие зависимости и конкретные (а не абстрактные) корреляции. Они были получены, что меня очень порадовало. Когда работаешь с реальными данными, связанными с людьми (например, в неврологии), получить что-то статистически значимое очень тяжело, но здесь удалось.

Удалось получить довольно сильные корреляции между IT-профессиями и определенными играми: например, сложными tower defense. Было забавно потом обсуждать это с людьми: у меня много знакомых программистов, особенно системных программистов, и оказалось, что многие из них играют в Defense Grid (любимая игра, всем отделом играем!). Я её опробовал там действительно требуется алгоритмическое мышление. Попадались и другие головоломки, и есть определенные идеи, как можно расширить и углубить это исследование; в общем, корреляции действительно статистически значимы. Если интересно, можно поговорить об аккуратности результатов.

В другом вопросе упоминалась серия Total War. Второй важный результат нашей работы корреляция между сериями Total War / XCOM и менеджерскими позициями. Это было интересно: мне очень нравятся обе эти серии, но хорошо играть в них у меня никогда не получалось, сколько бы я ни пробовал. Тогда я решил засесть за XCOM на день (не просто так, а для проекта!). У меня опять толком не получилось, но я аккуратно записал, что именно меня напрягает в этой игре и почему мне тяжело играть в нее. Позвонил Ирине она сама менеджер, у неё PhD по менеджменту и описал свои наблюдения. Она ответила: О, ты только что мою жизнь описал.

Например, одна из основ игры в XCOM это работа с рисками. Когда играешь в RPG, тебе обычно не приходится просчитывать риски на уровне более сложном, чем обычный выбор из двух зол. В XCOM всегда существует много вероятностей в том числе глобальных, заметных не сразу и действующих отложенно (а в RPG только взял не тот меч, тебя убили, перезагрузился). Их нужно уметь оценивать. Если вы в XCOM играли, вы знаете, как устроен тактический ход: у каждого юнита есть два действия, которые можно потратить на передвижение; по-хорошему, нужно тратить одно (мало ли, что впереди), но это же нудно! Нужно делать баланс и учитывать мотивацию это довольно менеджерская вещь. Корреляция сильная, и обсуждения с конкретными людьми показали, что она соответствует действительности.

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

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

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

Серьезные работы все же есть. Например, было доказано, что 3D Action (многие в них играют) тренируют то, что называется hand-eye coordination, а также быстрое принятие решений. У меня был курс по принятию решений, и тут важно отметить, что быстрое и медленное принятие решений это два совершенно разных soft skills.

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


Мы анализируем не только по Steam. У нас было уже несколько MVP с разными принципами работы. Сначала мы делали автоматизированную систему, основанную на найденных корреляциях, но она давала мало информации. Потом мы попробовали противоположный подход с аудитом, и это дало нам много инсайтов и повысило понимание. Мы проводили анализ игр и опрашивали самого человека о том, что его ночью держит в играх, о жизненной ситуации и так далее. Основная идея в том, что нельзя на 100% расписать человека по его профилю в Steam, это не работает. Человек должен сам себя анализировать, заглядывать внутрь себя. Я вот до того момента, как меня осенило на тему почему это я не играю во время проекта?, ни разу не задумывался о том, что меня держит в играх то же, что и в работе. Большинство людей, с которыми мы ведем обсуждения, тоже об этом не задумывается.

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

Существует ли строгая статистическая корреляция с профессиями?


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

Как способность играть в сложные игры вроде SpaceChem и Stellaris лучше показывает уровень интеллекта, чем полученное образование?


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

Если взять SpaceChem это еще одна игра, которая сильно коррелируется с IT. В Steam можно найти отзывы на неё, вроде прихожу с работы программистом, снова программирую этот химический завод. А в Stellaris и другие игры от Paradox просто невозможно играть без хорошо развитой рабочей памяти. Там очень много правил, и если их не держать в уме, все рушится. Если в какой-то игре в том же Stellaris, или даже в Skyrim у человека наиграно 500 часов, из этого можно сделать определенные выводы. У Skyrim нет онлайна, все квесты можно переделать часов за 100 значит, человек что-то креативное сам придумывает, проявляет нестандартное мышление. Такие связи тоже есть, и люди, склонные к творческим профессиям, часто играют в определённые игры огромное количество часов, придумывая что-то самостоятельно. К таким можно отнести Stardew Valley или Cities: Skylines я в них играл и просто проходил, но они могут придумывать красивую геометрию города, например, делать свои карты или что-то еще необычное.

Научная сторона: как собираются данные, как анализируются, почему создатели платформы уверены в том, что рассказывают?


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

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


Важный вопрос. Аудитория, с которой мы начали (мы, конечно, будем расширяться в будущем) это довольно трудная аудитория, геймеры. Часто они бывают на низкооплачиваемых профессиях, которые могут быть автоматизированы. Зачастую, когда с человеком общаешься или опрашиваешь его, возникает впечатление, что его основная трудность не в том, что он чего-то не умеет, а в неуверенности. Даже если человек играет в те же игры от Paradox, объективно сложные, он все равно говорит да я ничего не могу, куда мне. Неуверенность это один из ключевых моментов. Сейчас я не могу посоветовать определенные игры, но мы подходим к этому комплексно. Одна из задач нашей платформы помогать людям объективно видеть свои плюсы. Я очень надеюсь, что это получится.

Будете ли анализировать игровых стримеров?


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

Существуют разноплановые слои игровой информации. Самый простой это сами аккаунты XBOX / PS Live / Steam, часы игры, ачивменты, рецензии, и на это сейчас делается упор. Плюс опросы, которые человек заполняет более широко; здесь все чуть сложнее. Следующий слой это внутриигровое поведение человека, тут гораздо сложнее. Мы на это нацелены, но здесь нужны более серьезные подходы. Хотя уже есть примеры например, компания, которая анализирует игроков в DotA и предлагает советы по тренировке.

Расскажите о людях, которые играют в одну игру (например, action), она им надоедает, они идут в следующую (например, гонку), и так далее, они не заканчивают ни одну из них и постепенно возвращаются по кругу.


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

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

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

В RPG я обычно играл за воинов, очень редко за магов (если это фэнтези); все прямолинейно, обычно, типа lawful good. Но я попробовал выйти из этого застарелого паттерна, и в очередную сессию в Enderal (это мод для Skyrim, бесплатный, отличного качества) решил играть максимально неблизким мне персонажем. Я стал играть за ассасина, и это был невероятный экспириенс. Я делал это осознанно, анализируя свои ощущения. Изначально я думал господи, да зачем я его взял, сейчас бы тут все решил за воина. А потом оказалось, что есть много прикольных возможностей, можно проходить различными способами, иногда даже лучше, чем воином.

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

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

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

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

Но нужно помнить, что для того, чтобы совет был действительно полезным, им нужно пользоваться. Он должен войти в привычку, скоррелироваться с бытом. Здесь как раз помогают игры. Если подумать сколько решений мы принимаем в день в жизни? Имеются в виду именно значимые решения, которые заставляют задуматься, а не те, которых мы даже не замечаем (по подсчетам, их может быть 35 тысяч). Их не так много. Но в игре их много например, каждый ход в Civilization это пачка решений. И к каждому из них можно применить совет. По моим наблюдениям, для того, чтобы совет вошел в привычку в жизни, нужна неделя-две, если регулярно пользоваться им, но в играх на это нужно несколько часов. В играх очень высокая плотность решений; кроме того, эмоции вызывают запоминание.

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

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

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

У нас на тему вижна был интересный стрим, кстати. И здесь шикарно помогают RPG. Когда я играл в Fallout: New Vegas, я придумал себе образ персонажа, его предысторию, жизненные принципы и цели и тут внезапно получилось, что решение по генерации персонажа разрешается не за целый день, как обычно бывает у меня, а за пять минут. Каждое решение, встреченное в игре, я принимал с точки зрения целей меня-персонажа и все решения принимались элементарно. Здесь главное то, что мозг это запоминает, и ты привыкаешь думать о целях, когда принимаешь решения; более того, мозг запоминает и то, насколько легче даются решения, если есть цель. Естественно, наша методика обучения не ограничивается играми. Нужно поиграть потом применить в жизни, снова поиграть снова применить. Игры дают привычку, применять в жизни становится легко, и это действительно помогает. Если честно, я очень нервничал, пока не увидел положительные отзывы я всегда стараюсь научить людей, для меня очень важно, чтобы они что-то усваивали. В отзывах люди писали, что им стало веселее играть, они перестали читать спойлеры, они начали придумывать кучу безумных историй внутри игр особенно мне запомнилась одна история из RimWorld. И в жизни наши советы оказались полезны, наши ученики их применяют. Важно не забывать, что без игровой составляющей применение таких советов занимает раз в пять больше времени, и зачастую у людей не хватает терпения применять их.

Игры как опросник сотрудника. Почему опросник легко обмануть, а игру нет?


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

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

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

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

Как работает профориентирование?


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

Первое это интроспекция: помочь через игры, через то, как человек играет, намного лучше разобраться в себе. Поставить вижн, понять, куда хочется прийти, понять core motivations. Я искренне считаю, что, если человек в жизни занимается чем-то, что не относится к его главной мотивации и главному счастью, то это какая-то неправильная жизнь.
Хотя не обязательно, чтобы мотивация лежала именно в его работе. Например, если core motivation лежит в семье человека, то он может работать на ее благо и тоже получать огромное удовольствие от этого.

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

Кстати, нам в проект нужны два человека. Один data scientist; работа абсолютно творческая, огромное поле для деятельности, куча задач, очень много работы. Пример задачи: есть названия профессий и есть базы данных с этими профессиями, но названия не коррелируют (того же программиста могут называть по-всякому программер, кодер, software engineer и так далее). Здесь может помочь обработка описаний профессий и вакансий с помощью NLP. Потом из всего, что есть из инсайтов, данных, надо будет формировать правила, rule-based-систему, которая будет выдавать людям полезную информацию, которую они прочтут. Работы очень много, безумно интересная работа я бы сам дальше занимался ею, но на все времени не хватает. Поэтому нам очень нужен человек, которому интересно работать с данными, ML, статистикой; кстати, мой друг поможет со статистикой, он гуру статистики. И, конечно, наше дополнительное требование любовь к играм, эрудиция в играх, а также общая эрудиция надо понимать, что с чем связано, какие есть профессии, работы. Надо знать Python, иметь опыт и любить данные. Должно быть знакомо это состояние treasure hunting, когда смотришь на табличку с данными и думаешь может, попробовать так, может, здесь будет статистически значимо. Я только сегодня этим занимался, с данными по игрокам в EVE Online. Сначала вроде бы ничего, но потом все-таки нашел значимое.

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

Более того, у меня есть мечта. То гипер-оказуаливание игр с дофаминовыми ямами, которое сейчас происходит, меня очень расстраивает. Я помню мой глубокий шок, когда я узнал, что это есть не только на мобильных платформах. Когда-то мне подарили PlayStation 3 c GTA5 я стал играть, мне нравилось, попалась сложная миссия. Я ее несколько раз провалил, и увидел окошко: нажмите кнопку для пропуска. И как это понимать? Это ведь серия, в которой есть сложные задания, приносящие огромную радость при успехе вспомните миссию с вертолетиком в Vice City. Моя искренняя мечта состоит в том, что Game Academy будет развиваться и сможет доказать пользу игр, и этим повлияет на геймдев вырастет спрос именно на хорошие игры, и их будет больше выходить.

Важный момент состоит в том, что попытки сделать edutainment обычно натыкаются на то, что создатели не могут выдержать баланс: люди, которые преподают, обычно не разбираются в играх, и наоборот, и получается полная каша. Мне приносит безумную радость то, что в нашем курсе, хотя бы, удалось совместить: и в игры интересно играть, и польза есть.
В общем, нам нужен full stack-программист, которому это нравится. Мы сотрудничаем с очень крутым продукт-дизайнером, у нас есть представления, у нас есть wireframe и это нужно реализовывать, с упором на frontend. Дизайн будет, backend по большей части на мне и на data scientist, но совмещать это нужно. Нам нужен человек с опытом законченных проектов чтобы были проекты с deployment и пользователями.

Но, опять же, мы стартап, нас мало, если что задачу можно отдать на аутсорс, и в команду нам нужны люди, которые горят играми и хотят, чтобы игры помогали людям.
Если вы хотите поделиться своим опытом того, как вам удалось что-то развить в себе с помощью игр, пишите на почту Game Academy, или на мою почту. Мы рады любому сотрудничеству: может быть кто-то захочет с нами работать; многим нравятся наши проекты, многие помогают по комьюнити и по другим вещам. Я сам начал с того, что просто хотел помочь этой команде. Любому живому обсуждению про игры мы тоже рады. Особенно интересный момент то, в какие игры вы играете по ночам, что именно держит вас в них и не дает идти спать, и чувствуете ли вы, что по жизни вас держат такие же вещи. Если кому-то будет интересно отписаться о своем опыте, буду очень рад.



Что было ранее


  1. Илона Папава, Senior Software Engineer в Facebook как попасть на стажировку, получить оффер и все о работе в компании
  2. Борис Янгель, ML-инженер Яндекса как не пополнить ряды стремных специалистов, если ты Data Scientist
  3. Александр Калошин, СEO LastBackend как запустить стартап, выйти на рынок Китая и получить 15 млн инвестиций.
  4. Наталья Теплухина, Vue.js core team member, GoogleDevExpret как пройти собеседование в GitLab, попасть в команду разработчиков Vue и стать Staff-engineer.
  5. Ашот Оганесян, основатель и технический директор компании DeviceLock кто ворует и зарабатывает на ваших персональных данных.
  6. Сания Галимова, маркетолог RUVDS как жить и работать с психиатрическим диагнозом. Часть 1. Часть 2.
  7. Илья Кашлаков, руководитель фронтенд-отдела Яндекс.Денег как стать тимлидом фронтендеров и как жить после этого.
  8. Влада Рау, Senior Digital Analyst в McKinsey Digital Labs как попасть на стажировку в Google, уйти в консалтинг и переехать в Лондон.
  9. Ричард Левелорд Грей, создатель игр Duke Nukem 3D, SiN, Blood про личную жизнь, любимые игры и о Москве.
  10. Вячеслав Дреер, гейм-дизайнер и продюсер игр с 12-летним стажем про игры, их жизненный цикл и монетизацию

Подробнее..

Так ли безопасен ваш iPhone? Обзор уязвимостей и тайных ходов в iOS

03.08.2020 12:13:23 | Автор: admin
Пользовательские данные не являются разменной монетой. Компания Apple потратила значительные усилия для того, чтобы заслужить себе репутацию, стойко отбиваясь от ФБР и прочих представителей силовых структур, ищущих возможность произвольного сбора данных владельцев iPhone.

В 2016 г. Apple отказалась ослабить защиту iOS для того, чтобы ФБР могла разблокировать iPhone стрелка из Сан-Бернардино. Завладев смартфоном Сайеда Фарука и промахнувшись десять раз с набором четырехзначного PIN кода, правоохранители тем самым заблокировали смартфон. Тогда в ФБР потребовали, чтобы Apple создала специальную ОС, в которой возможно подобрать код безопасности методом перебора



Поначалу все складывалось не в пользу Apple, окружной суд Соединенных Штатов по Калифорнии встал на сторону силовых ведомств. Apple подала апелляцию, началась волокита, и в итоге заседания судебное разбирательство на этом прекратилось по инициативе ФБР.
В конце концов, федералы добились своего с помощью Cellebrite частной израильской компании, специализирующейся в цифровой криминалистике, заплатив за это дело более миллиона долларов США. К слову, в смартфоне ничего не нашли.
Странным образом четыре года спустя история повторилась почти точь-в-точь. В январе 2019 г. не абы кто, а Генеральный Прокурор США Уильям Барр попросил компанию помочь следователям получить доступ к содержимому двух iPhone, использованных во время стрельбы в военно-морской авиабазе в Пенсаколе, штат Флорида, в декабре 2019 года. Не удивительно, что из Apple последовал очередной отказ.

Стоит подчеркнуть, что в обоих случаях речь шла не об одноразовой передачи информации со стороны Apple. С этим как раз все в порядке, компания передает метаданные, резервные копии с iCloud при официальных и санкционированных запросах правоохранительных органов. Отказ встречают требования создать и предоставить универсальную отмычку, особую прошивку iOS, позволяющей разблокировать конфискованные смартфоны.
Именно это обстоятельство вызывает наибольшее противодействие руководства Apple и лично CEO Тима Кука, которые резонно полагают, что нет и не может быть доброкачественных бэкдоров, и что комплексная защита своей мобильной платформы бывает лишь первой свежести. Отмычка в хороших руках очень скоро становится отмычкой в руках сомнительных, а возможно, она там будет и с самого первого дня.
Итак, мы теперь знаем, что iOS не имеет специальных лазеек, созданных для силовых структур. Означает ли это, что iPhone неуязвим для проникновения и кражи данных?

BootROM уязвимость checkm8


В конце сентября 2019 г. исследователь информационной безопасности с ником axi0mX опубликовал на Github ресурсе код эксплойта практически для всех устройств производства Apple с чипами версий A5 A11. Особенность найденной уязвимости состоит в том, что она находится на аппаратном уровне и никакими обновлениями ПО её невозможно устранить, так как она прячется в самом механизме защиты безопасной загрузки BootROM, a. k. a. SecureROM.


Модель загрузки iOS с презентации Apple на WWDC 2016 г.

В момент холодной загрузки первым из read-only памяти запускается SecureROM, причем это самый доверенный код в Application Processor и поэтому он выполняется без каких-либо проверок. В этом кроется причина того, что патчи iOS тут бессильны. И также крайне важно, что SecureROM отвечает за переход устройства в режим восстановления (Device Firmware Update) через интерфейс USB при нажатии специальной комбинации клавиш.


Переход iOS в режим DFU.

Уязвимость Use-after-Free возникает, когда вы ссылаетесь на память после того, как она была освобождена. Это может привести к неприятным последствиям, таким как сбой программы, непредсказуемые значения, или как в данном случае выполнение стороннего кода.

Для начала, чтобы понять механизм эксплойта, нам нужно понять, как работает системный режим восстановления. При переходе смартфона в режим DFU в момент инициализации выделяется буфер I/O и создается USB-интерфейс для обработки запросов к DFU. Когда установочный пакет 0x21, 1 поступает по USB-интерфейсу на этапе USB Control Transfer, код DFU после определения адреса и размера блока копирует данные буфера I/O в загрузочную область памяти.


Структура USB Control Transfer Setup Packet.

Соединение по USB остается активным до тех пор, пока длится загрузка образа прошивки, после чего оно завершается в штатном режиме. Однако существует и нештатный сценарий выхода из режима DFU, для этого нужно отправить сигнал DFU abort по коду bmRequestType=0x21, bRequest=4. При этом сохраняется глобальный контекст указателя на буфер данных и размер блока, тем самым возникает классическая ситуация уязвимости Use-after-Free.

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


Запуск команды ./ipwndfu -p на MacOS.

В практическом плане все сводится к переводу iPhone в режим DFU и запуску простой команды ./ipwndfu -p. Результат действия Python скрипта состоит в снятии разблокирование с несанкционированным доступом ко всей файловой системе смартфона. Это дает возможность устанавливать ПО для iOS из сторонних источников. Так злоумышленники и правоохранители могут получить доступ ко всему содержимому украденного или изъятого смартфона.

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

iCloud и почти защищенные бэкапы


Выше уже было сказано, что в последнем противостоянии FBI с Apple из-за перестрелки в Пенсаколе, компания отдала в руки правоохранителей, резервные копии iCloud с телефонов подозреваемых. Тот факт, что в ФБР не стали воротить носом говорит о том, что эти данные, в отличие от заблокированного iPhone, были вполне пригодны для исследования.

Наивно полагать, что это единичный случай. Только за первое полугодие 2019 г. следователи 1568 раз получали доступ к почти 6000 полновесных резервных копий iCloud пользователей яблочных смартфонов. В 90% обращений из гос. структур компания предоставляла некоторые данные из iCloud, а таких обращений всего было около 18 тыс. за тот же период.

Это стало возможным после того, как Apple без лишнего шума два года назад свернула проект по обеспечению сквозного шифрования пользовательских резервных копий iCloud. Есть свидетельства в пользу того, что это было сделано после давления со стороны ФБР. Впрочем, есть также основания полагать, что отказ мотивирован желанием избежать ситуации, когда пользователи из-за забытого пароля не могут получить доступ к собственным данным iCloud.

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

  • Домашние данные.
  • Медицинские данные.
  • Связка ключей iCloud (включая сохраненные учетные записи и пароли).
  • Платежные данные.
  • Накопленный словарный запас QuickType Keyboard (необходима iOS v.11).
  • Screen Time.
  • Данные Siri.
  • Пароли Wi-Fi.

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

Новая уязвимость на аппаратном уровне


Китайская команда разработчиков Pangu Team неделю назад сообщила о найденной неустранимой неисправности, на этот раз в чипе SEP (Secure Enclave Processor). В зоне риска находятся все устройства iPhone процессорах А7-А11.

SEP хранит ключевую, в буквальном смысле слова, информацию. К ним относятся криптографические функции, ключи аутентификации, биометрические данные и профиль Apple Pay. Он делит часть оперативной памяти с Application Processor, но другая ее часть (известная, как TZ0) зашифрована.


Последовательность загрузки SEP.

Сам SEP представляет собой стираемое 4MB процессорное ядро AKF (вероятно, Apple Kingfisher), патент 20130308838. Используемая технология аналогична ARM TrustZone / SecurCore, но в отличие от нее содержит проприетарный код для ядер Apple KF в целом и SEP в частности. Он также отвечает за генерацию ключей UID на А9 и более новых чипах, для защиты пользовательских данных в статике.

SEP имеет собственный загрузочный ROM и он так же, как и SecureROM / BootROM защищен от записи. То есть уязвимость в SEPROM будет иметь такие же неприятные и неустранимые последствия. Комбинируя дыру в SEPROM с эксплойтом checkm8, о котором уже выше было сказано, можно изменить регистр отображения I/O для обхода защиты изоляции памяти. В практическом плане это дает возможность злоумышленникам заблокировать телефон без возможности его разблокировать.



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

Известный уже нам исследователь ИБ axi0mX написал в Твиттере, что уязвимостью в SEPROM можно воспользоваться лишь при физическом доступе к смартфону, как и в случае с checkm8. Точнее сама возможность манипуляций с содержимым регистра TZ0 зависит от наличия дыры в SecureROM / BootROM, так как после штатной загрузки iPhone изменить значение регистра TZ0уже нельзя. Новые модели iPhone с SoC A12/A13 не подвержены новой уязвимости.

Использованные материалы



Подробнее..

Притворяемся что пишем на C, но только на Powershell

05.08.2020 12:20:05 | Автор: admin

Powershell удобная API построенная на .net. Powershell позволяет пользователям писать скрипты, не упираясь в программирование, при этом получая схожие результаты. Что происходит на КДВП, автор объяснит позже по тексту. Сейчас нам срочно нужно притвориться, что мы программируем на C#.

TL;DR: Postman не нужен, если есть Powershell. Но сперва нужно зайти издалека.

Делаем простой класс


Автор слышал, что крутые программисты делают все через классы и их методы.
Так как PowerShell это позволяет, давайте автор покажет, как можно сложить 1 + 1 притворившись, что мы программируем.

class ClassName {     [string] Sum ($A, $B) {               $Result = $A + $B        return $Result    }}

Вот наш класс ClassName и его метод Start. Экземпляр класса можно вызвать ровно так же, как в настоящих языках программирования.

$NewClass = [ClassName]::new()$NewClass.Sum(1, 1)

Создаем новый экземпляр класса и вызываем метод, всё просто.

Есть ли Void в Powershell


При написании сложных скриптов этот же вопрос вставал у автора. Как сделать функцию, которая будет Void?

Говорят, что можно сделать так:

Get-Date | Out-Null

Однако, | Out-Null так же глушит весь Verbose, ErrorAction и не работает с Invoke-Command.

Если вам нужна функция с [Void] делайте новый класс, другого выхода нет.

class ClassName {     #Конструктов класса    [void] Start () {        #Создаем экземпляр класса прямо внутри этого же класса.        $q = [ClassName]::new()        $q.GetDate()    }     #Своего рода метод внутри класса    [void] GetDate () {        #А вот тут вызываем еще один метод из .Net  #Просто так, потому что можем        $Result = [DateTime]::UtcNow.ToString()        Write-Host $Result    }}

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

Вот так мы добились того, что не заглушили Verbose, при этом сделали функцию с Void.

Список методов класса


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

Перечислить все методы интересующего класса можно так:

#Делаем любовь, а не класс$Love = [ClassName]::new() #Выбираем члены интересующего нас класса и записываем в массив.foreach ($i in $Love | Get-Member -MemberType Method | Select-Object name) {    [array]$array += $i.Name} #Вызываем члены класса, если нужно.$Array | ForEach-Object {    $Love.$_()}

Отправляем HTTP запросы скриптом (оправдываем КДПВ)


Классами мы можем представлять данные и эти данные конвертировать в разные форматы. К примеру, нам нужно отправить POST запрос на веб сайт в формате JSON.

Сначала мы делаем модель данных и заполним данные в новый экземпляр.

#В качестве модели данных делаем новый классclass DataModel {    $Data    $TimeStamp} #Создаем экземляр класса$i = [DataModel]::new() #Заполняем данные$i.Data = "My Message in string"$i.TimeStamp = Get-Date

Так выглядит экземпляр класса после заполнения:

PS C:\> $i Data                 TimeStamp----                 ---------My Message in string 30.07.2020 5:51:56

Потом этот экземпляр можно конвертировать в XML или JSON или даже SQL запрос. Остановимся на JSON:

#Конвертируем данные в JSON$Request = $i | ConvertTo-Json

Так выглядит JSON после его конвертации:

PS C:\> $Request{  "Data": "My Message in string",  "TimeStamp": "2020-07-30T05:51:56.6588729+03:00"}

И отправляем:

#Отправляем JSONInvoke-WebRequest localhost -Body $Request -Method Post -UseBasicParsing

В случае если нужно отправлять один и тот же JSON файл 24/7, можно сохранить его как файл и отправлять уже из файла. К примеру, возьмем этот же самый $Request.

#Сохраняем данные конвертированные ранее в JSON в файл$Request | Set-Content C:\Users\User\Desktop\YourRequest.json #Отправляем ранее сохраненный в файл JSONInvoke-WebRequest localhost -Body (Get-Content C:\Users\User\Desktop\YourRequest.json) -Method Post -UseBasicParsing

Получаем HTTP запросы скриптом (оправдываем КДПВ 2)


Автор терпеть не может Postman, зачем кому-либо нужен Postman, когда есть руки и PowerShell? (Автор предвзято относится к этой программе и его нелюбовь ничем не обоснована.)
Делать свою альтернативу мы будем это с помощью System.Net.HttpListener, то есть мы сейчас запустим настоящий веб сервер из скрипта.

#Создаем новый экземпляр класса$http = [System.Net.HttpListener]::new() #Добавляем HTTP префиксы. Их может быть сколько угодно$http.Prefixes.Add("http:/localhost/")$http.Prefixes.Add("http://127.0.0.1/") #Запускаем хттп листенер$http.Start()  $http.Close()

Так проходит запуск класса.

Экземпляр класса был создан и его процесс запустился, мы можем слушать от него вывод. Вывод представлен как System.Net.HttpListener.GetContext. В это примере мы принимаем и конвертируем только POST запрос.

while ($http.IsListening) {     #GetContext нужен для получения сырых данных из HttpListener    $context = $http.GetContext()     #Определяем тип запроса с помощью Request.HttpMethod     if ($context.Request.HttpMethod -eq 'POST') {         #Читаем сырые данные из GetContext        #Для каждого отдельного запроса создаем свой конвейер        [System.IO.StreamReader]::new($context.Request.InputStream).ReadToEnd() | ForEach-Object {                        #С помощью System.Web.HttpUtility делаем urlDecore, иначе кириллица превращается в руны            $DecodedContent = [System.Web.HttpUtility]::UrlDecode($_)             #Конвертируем прилетевшие данные в нужный нам формат            $ConvertedForm = $DecodedContent | ConvertFrom-Json -ErrorAction SilentlyContinue             #Cконвертированные данные отображаем таблицой            $ConvertedForm | Format-Table                   }    }} 

Готовый скрипт


С помощью этого скрипта можно принимать запросы:

#Создаем новый экземпляр класса$http = [System.Net.HttpListener]::new() #Добавляем HTTP префиксы. Их может быть сколько угодно$http.Prefixes.Add("http://localhost/")$http.Prefixes.Add("http://127.0.0.1/")#Запускаем веб листенер$http.Start() if ($http.IsListening) {    Write-Host "Скрипт запущен"} while ($http.IsListening) {     #GetContext нужен для получения сырых данных из HttpListener    $context = $http.GetContext()     #Определяем тип запроса с помощью Request.HttpMethod     if ($context.Request.HttpMethod -eq 'POST') {         #Читаем сырые данные из GetContext        #Для каждого отдельного запроса создаем свой конвейер        [System.IO.StreamReader]::new($context.Request.InputStream).ReadToEnd() | ForEach-Object {                        #С помощью System.Web.HttpUtility делаем urlDecore, иначе кириллица превращается в руны            $DecodedContent = [System.Web.HttpUtility]::UrlDecode($_)             #Конвертируем прилетевшие данные в нужный нам формат            $ConvertedForm = $DecodedContent | ConvertFrom-Json -ErrorAction SilentlyContinue             #Cконвертированные данные отображаем таблицей            $ConvertedForm | Format-Table                   }         #Отвечаем клиенту 200 OK и закрываем стрим.        $context.Response.Headers.Add("Content-Type", "text/plain")        $context.Response.StatusCode = 200        $ResponseBuffer = [System.Text.Encoding]::UTF8.GetBytes("")        $context.Response.ContentLength64 = $ResponseBuffer.Length        $context.Response.OutputStream.Write($ResponseBuffer, 0, $ResponseBuffer.Length)        $context.Response.Close()     }    #Cконвертированные данные отображаем таблицей    $http.Close()    break}


Данные будут автоматичеки конвертироваться из JSON и выводиться в терминал.

Автор надеется, что вы выбросите Postman, так же, как и GIT с GUI.

Подробнее..

Заметки Дата Саентиста как измерить время забега марафона лежа на диване

06.08.2020 12:10:31 | Автор: admin


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

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

И сегодня мы займемся важным делом применим Data Science в реальной жизни и ответим на вопрос:

А что нам говорят данные о московском марафоне?

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

TL;DR: Я собрал данные по забегам московского марафона за 2018/2019, проанализиворовал время и показатели участников, а код и данные выложил в открытый доступ.

Сбор данных


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



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

Осталось понять как достать все данные оттуда.



И это, оказывается, несложно, ибо тут есть прямая пагинация и собственно мы итерируем по всему отрезку чисел. Бинго, выкладываю собранные данные за 2019 и 2018 год здесь, если кому-то интересно для последующего анализа, то сами данные можно скачать здесь: здесь и здесь.

С чем тут пришлось повозиться


  • Страница не отдает ошибок если что-то идет не так, никто не посигналит, сайт просто отдает какие-то данные (например, повторяет прошлую страницу с результатами).
  • В какой-то момент сервер решает, что он устал и перестает отдавать данные и виснет проблема решается с помощью поспать и продолжить сбор с прошлой точки.
  • Url-магия сайт что-то мудрит со ссылками, и нельзя просто поменять год в url и получить результаты другой гонки приходится ручками через поиск искать и перепроверять, что мы действительно получаем свежие данные иначе отгружает молча данные последнего года.
  • В какой момент я собирал данные и параметризовал скрипт сбора данных годом запустил и стал собирать через час другой у меня было четыре датасета за 2016, 2017 и оказалось, что страница молча отдавала данные за 2019 год потому что в том месте год вообще игнорировался, что было совершенно неожиданно вывод стоит всегда проверять такие вещами руками, а не только постфактум хотя и постфактум, конечно, надо проверять данные.
  • Здесь есть несколько типов NA: DNF, DQ, "-" придется проводить анализ и перепроверять, и чистить данные, иначе на выходе мусор.
  • Типы данных: время здесь это timedelta, но из-за перезапусков и невалидных значений приходится поработать с фильтрами и очисткой временных значений, чтобы мы оперировали над чистыми временными результатами для подсчета средних значений все результаты здесь это усреднение по тем, кто финишировал и у кого зафиксировано валидное время.

А вот и код спойлера, если кто-то решит продолжить собирать интересные беговые данные.

Код парсера
from bs4 import BeautifulSoupimport requestsfrom tqdm import tqdmdef main():    for year in [2018]:        print(f"processing year: {year}")        crawl_year(year)def crawl_year(year):    outfilename = f"results_{year}.txt"    with open(outfilename, "a") as fout:        print("name,result,place,country,category", file=fout)    # parametorize year    for i in tqdm(range(1, 1100)):        url = f"https://results.runc.run/event/absolute_moscow_marathon_2018/finishers/distance/1/page/{i}/"        html = requests.get(url)        soup = BeautifulSoup(html.text)        names = list(            map(                lambda x: x.text.strip(),                soup.find_all("div", {"class": "results-table__values-item-name"}),            )        )        results = list(            map(                lambda x: x.text.strip(),                soup.find_all("div", {"class": "results-table__col-result"}),            )        )[1:]        categories = list(            map(                lambda x: x.text.strip().replace(" ",""),                soup.find_all("div", {"class": "results-table__values-item-country"}),            )        )        places = list(            map(                lambda x: x.text.strip(),                soup.find_all("div", {"class": "results-table__col-place"}),            )        )[1:]        for name, result, place, category in zip(names, results, places, categories):            with open(outfilename, "a") as fout:                print(name, result, place, category, sep=",", file=fout)if __name__ == "__main__":    main()```

Анализ времени и результатов


Перейдем к анализу данных и собственно результатов забега.
Использовались pandas, numpy, matplotlib и seaborn все по классике.

Помимо средних значений по всем массивам, мы отдельно рассмотрим следующие группы:

  • Мужчины так как я вхожу в эту группу мне интересны именно эти результаты.
  • Женщины для симметрии.
  • Мужчины до 35 это условно одна из самых соревновательных групп и понятно, что сравнивать мне стоит именно с ними так как я в этой группе.
  • Отдельно посмотрим на 2018 и 2019 годы а вдруг что поменялось?.

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





Как мы видим средние показатели за 2018 и 2019 практически не изменились примерно 1.5 минуты стали быстрее бегуны в 2019 году. Разница между интересующими меня группами незначительна.

Перейдем к распределениям целиком. И сначала к общему времени забега.


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

Далее, посмотрим, как в среднем изменилась ситуация за год.



Как мы видим фактически вообще ничего не поменялось распределения выглядят фактически идентичными.

Далее рассмотрим распределения по полу:





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

Отдельно перейдем к самой интересной для меня группе:



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

Изучаем улучшения участников 2018 2019


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

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

  • 14 человек участвовали оба года и ни разу не финишировали
  • 89 человека добежали в 18 м, но не смогли в 19
  • 124 наоборот
  • Те, кто смогли добежать оба раза в среднем улучшили на 4 минуты свой результат

Но тут оказалось довольно интересно все:



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

Выводы


Я сделал для себя следующие выводы из проанализированных данных

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

Подробнее..

VPS на Linux с графическим интерфейсом запускаем сервер X2Go на Ubuntu 18.04

12.08.2020 16:20:14 | Автор: admin

Настройку VNC и RDP на виртуальном сервере мы уже освоили, осталось изучить еще один вариант подключения к виртуальному рабочему столу Linux. Возможности созданного компанией NoMachine протокола NX достаточно интересны, к тому же он хорошо работает через медленные каналы. Фирменные серверные решения стоят дорого (клиентские бесплатны), но существует и свободная реализация, о которой пойдет речь в этой статье система X2Go. Она отпочковалась от проекта с открытым исходным кодом FreeNX, когда NoMachine прекратила его поддерживать и отпустила в свободное плавание.

Оглавление:


Установка графического окружения
Русификация сервера и установка ПО
Установка сервера X2Go
Подключение к рабочему столу
Запуск приложения на удаленном компьютере
Преимущества X2Go

Установка графического окружения


Для виртуального графического десктопа на Linux мощные машины не нужны, пока пользователь не начнет запускать прикладные программы. Для тестов мы возьмем крепкого середнячка с Ubuntu Server 18.04 LTS с двумя вычислительными ядрами, четырьмя гигабайтами оперативной памяти и жестким диском (HDD) на двадцать гигабайт. На RuVDS уже доступны образы Ubuntu Server 20.04 LTS, процесс настройки более свежей версии будет аналогичным. Не забывайте использовать промокод Habrahabr10 для получения скидки в 10% при заказе.



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

sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

Русификация сервера и установка ПО


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

sudo apt-get install language-pack-ru

Настроим локализацию:

sudo update-locale LANG=ru_RU.UTF-8

Того же эффекта можно достичь, отредактировав вручную файл /etc/default/locale.

Для локализации GNOME и KDE в репозитории есть пакеты language-pack-gnome-ru и language-pack-kde-ru они понадобятся, если вы будете использовать программы из этих сред рабочего стола. В XFCE переводы устанавливаются вместе с приложениями. Дальше можно инсталлировать словари:

# Словари для проверки орфографииsudo apt-get install hunspell hunspell-ru# Тезаурус для LibreOfficesudo apt-get install mythes-ru# Англо-русский словарь в формате DICTsudo apt-get install mueller7-dict

Кроме того, инсталляция переводов может потребоваться для некоторых прикладных программ:

# Браузер Firefoxsudo apt-get install firefox firefox-locale-ru# Почтовый клиент Thunderbirdsudo apt-get install thunderbird thunderbird-locale-ru# Офисный пакет LibreOfficesudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ruНа этом подготовка окружения рабочего стола завершена.

Установка сервера X2Go


Стабильные версии сервера и клиента X2Go можно установить из внешнего репозитория PPA (Personal Packages Archive) на Launchpad или из штатных репозиториев актуальных релизов Ubuntu. Мы остановимся на втором варианте, поскольку версии софта в обоих источниках одинаковы, но если вам потребуются дополнительные пакеты, сторонний репозиторий придется подключить. Нам необходимо инсталлировать два пакета:

sudo apt-get install x2goserver x2goserver-xsession

В случае если вы используете окружение MATE или LXDE, дополнительные пакеты потребуются (для XFCE они не нужны):

sudo apt-get install x2gomatebindings # if you use MATE/mubuntusudo apt-get install x2golxdebindings # if you use LXDE/lubuntu

Вишенка на торте: X2Go работает через SSH и в дальнейшей настройке не нуждается. На VPS должен быть запущен sshd и открыт доступ к порту 22 в правилах межсетевого экрана. Поскольку речь идет про виртуальный сервер, это наверняка уже сделано из коробки. На физической машине открыть удаленный доступ по SSH несложно. Остается только проверить статус сервера X2Go:

sudo systemctl status x2goserver



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

sudo adduser desktopuser



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

sudo gpasswd -a desktopuser sudo

Подключение к рабочему столу


Клиентское ПО X2Go для Windows, Linux и OS X можно загрузить на сайте проекта. Клиент под Android находится в стадии разработки, а бесплатные мобильные приложения от NoMachine с сервером X2Go несовместимы. Если на локальном компьютере установлена Ubuntu, достаточно добавить пакет x2goclient:

sudo apt-get install x2goclient

Для сохранения видового разнообразия в этот раз мы возьмем клиент для Windows:



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







Если все сделано правильно, после подключения появится рабочий стол XFCE.



Запуск приложения на удаленном компьютере


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




Браузер запущен на удаленном VPS с Ubuntu

Есть и более экзотические варианты использования X2Go: система позволяет, например, подключиться к сессии пользователя на удаленном компьютере (как в TeamViewer). В этом случае на обеих машинах должны быть установлены и клиентские, и серверные части. Кроме того, задавать профили сессий на каждом клиенте не обязательно: можно установить и настроить x2gobroker, чтобы определить их на сервере. Для этого придется подключить сторонний репозиторий с дополнительными пакетами.

Преимущества X2Go


В отличие от нуждающейся в высокой пропускной способности канала системы VNC, X2Go использует продвинутый протокол NX 3 для минимизации объема передаваемых данных. В системе есть собственный X-сервер, к тому же она практически не требует настроек и отличается продвинутыми возможностями. Мы рассказали только о самых основных, но X2Go умеет намного больше, включая трансляцию клиенту звука и видео с сервера, печать на локальном принтере (на VPS придется установить дополнительные пакеты для настройки виртуального принтера) и общие каталоги. Взаимодействие с сервером идет через надежный и проверенный временем sshd пользователю доступны безопасные механизмы аутентификации, в т.ч. с ключами. X2Go автоматически настраивает среду при входе в систему (держать X-сервер постоянно запущенным не нужно), при этом поддерживается многопользовательская работа и большинство популярных окружений рабочего стола, а сеанс не убивается даже после разрыва соединения.

Подробнее..

Заметки Дата Саентиста маленькие утилиты большая польза

13.08.2020 14:10:01 | Автор: admin


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

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

Tools learn the tools все написанное субъективно и основано исключительно на личном опыте: помогло мне может быть поможет и вам.

Zsh и oh-my-zsh после всех этих лет в Баше!


Как сейчас помню, мне было 17 лет и я установил линукс. Терминал и Баш. И как-то всегда баш был частью процесса и олицетворял для меня собственно работу в терминале. Спустя 12 лет после окончания PhD я попал в компанию, где был вводный документ и мне впервые в руки попался мак и я решил ему следовать.

И о чудо! Удобный переход по папкам, человеческое автодополнение, индикатор git, темы, плагины, поддержка виртуальной среды для python и тд сижу теперь в терминале и не нарадуюсь!



Ставим zsh, как вы обычно ставите все и переходим к oh-my-zsh (по сути это народная сборка рецептов, которые работают из коробки и добавили поддержку плагинов, тем и тд). Взять можно тут. А также можно поставить тему (ну например). Вот тут неплохое демо возможностей. Взято из вот этой статьи.

Pipelines




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

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

| python.py format.py

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

cat data/*groups* | jq .group | uniq | wc -l

Мы подробнее поговорим о каждом из них, но общая идея уже понятна:

  • cat (сокр. от concatenate) печатает содержимое файлов со словом group в названии из папки data/
  • jq выдирает из json поле group
  • uniq оставляет только уникальные группы
  • wc с ключом -l считает строчки, т.е количество групп

И сейчас мы подробнее посмотрим на wc.

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


wc умеет быстро считать слова, строчки, буквы, байты и максимальную длину строчки, и все с помощью простых ключей:

  • bytes
    
  • chars
    
  • words
    
  • lines
    
  • max-line-length
    

Кажется, что это тривиально, но оказывается невероятно часто нужно и удобно.

Повседневное использование, быстро оценим сколько у нас каких данных собрано (тут одна строка одна запись):


Подробнее тут.

Ack/grep


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

Пример: быстренько находим вхождение слова (ключ -w) ga2m (тип модели), без учета регистра (ключ -i) в файлах исходниках питона:



JQ парсим json в командной строке


Документация.

JQ это прямо-таки grep/ack для json (хотя и с оттенком sed и awk о последнем далее) по сути простой парсер json и json line в командной строке, но иногда бывает чрезвычайно удобным как-то пришлось парсить архив wikidata в формате bz2 он весит порядка 100ГБ и где-то 0.5TB uncompressed.

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

bzcat data/latest-all.json.bz2 | jq stream 'select((.[0][1] == "sitelinks" and (.[0][2]=="enwiki" or .[0][2] =="ruwiki") and .[0][3] =="title") or .[0][1] == "id")' | python3 scripts/post_process.py "output.csv"


Это был по сути весь пайплайн, который создавал нужный mapping, как мы видим все работало в режиме потока:

  • bzcat читал часть архива и отдавал jq
  • jq с ключом stream сразу выдавал результат и передавал его постпроцессору (так же как и с самым первым примером) на питоне
  • внутри постпроцессор это простая машина состояний

Итого сложный пайплайн работающий в режиме потока на больших данных (0.5TB), без существенных ресурсов и сделан из простого пайплайна и пары тулзов. Определенно рекомендую глянуть на досуге.

fzf fuzzy finder


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


Ссылка на репозиторий.

AWK


Название происходит от первых букв создателей Aho, Weinberger и Kernighan: по сути скриптовый язык обработки текстово-табличных данных он приминяет шаблоны трансформации к каждой строке файла

Как правило идеально подходит для быстрых разовых трансформаций, например, у нас были собранный руками датасет в виде tsv, а процессор принимал на вход jsonl причем ожидал доп поле theme, которого не было в исходном файле (нужного для некоторых вещей, которые были не критичны для текущих подсчетов) итого, был написан простой однострочник:

cat groups.tsv | awk '{ printf "{\"group\": \"%s\", \"theme\": \"manual\" }\n", $1  }' > group.jsonl


По сути он брал файлик и каждую строчку заворачивал json с нужными полями.

Ссылка с tutorial.

wget универсальный command line downloader


Регулярно скрипты и пайплайн должны что-то откуда-то подтянуть и качнуть и wget не подводит: умеет докачивать, авторизовываться, proxies, cookies да еще и помимо http(s) умеет в ftp.

Швейцарский нож в скачивании.

HSTR поиск по истории команд, с человеческим лицом


Сommand history: hstr

Регулярно мне приходится искать что-то в истории команд:

  • Это уже приходилось делать
  • А с каким ключам запускается Х?
  • А вот этот кусок можно и переиспользовать

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



Полезное, но не вошедшее


В финале я бы упомянул полезными но тянущими на отдельную статью темы полезно глянуть:
  • Связку ssh + tmux + vim (neo, plugins, etc)
  • Базовые знания command line git + git hooks
  • Data pipeline construction make/just
  • Python virtual environments
  • Docker

Подробнее..

Перевод Веб-разработчику 10 полезных инструментов

14.08.2020 14:14:13 | Автор: admin
Статья, перевод которой мы публикуем сегодня, посвящена 10 полезным инструментам, которые предназначены для веб-разработчиков. Автор материала считает, что это как раз такие инструменты, которые позволяют, как говорится, работать с умом, а не до ночи.



1. Website Vulnerability Scanner


Website Vulnerability Scanner это сканер уязвимостей веб-сайтов, разработанный в Pentest-Tools.com. Этому инструменту нужно дать ссылку на сайт, который нужно проверить на уязвимости, после чего будет сформирован отчёт.


Результаты проверки сайта в Website Vulnerability Scanner

2. Nibbler


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


Nibbler даёт высокую оценку сайту dev.to

3. Meta Tags


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


Проверка мета-тегов с помощью Meta Tags

4. Google Lighthouse


Google Lighthouse это опенсорсная автоматизированная система, позволяющая оценивать качество веб-проектов.

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


Анализ сайта в Google Lighthouse

5. Endtest


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

Я автоматизировал Sign In-тест для сайта DEV Community и прогнал этот тест в облачной среде, в браузерах Chrome, Firefox, Edge, Safari и Internet Explorer 11.

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


Результаты тестирования в Chrome


Результаты тестирования в Internet Explorer 11

6. Loom


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

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


Chrome-расширение Loom

7. Pexels


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

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


Сайт Pexels

8. Figma


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


Figma

9. Funkify


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


Funkify

10. PerfectPixel


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


Сравнение страницы и её макета с помощью PerfectPixel

Какие инструменты для веб-разработчиков вы добавили бы в этот список?

Подробнее..

Делаем копию карты-пропуска по фото

11.08.2020 00:10:13 | Автор: admin

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



С чем мы имеем дело


Итак, человек с пропуском находится далеко, считывателя для бесконтактных карт у него с собой конечно же нет, но есть телефон, на который можно сделать фотографию карты.
По фото карта была опознана как EM-Marin, она же EM4100. Эти бесконтактные карты работают на частоте 125 КГц и содержат номер (далее ID) размером 40 бит или 5 байт, который записывается на карту еще на заводе и не может быть изменен. Какой-либо защиты от чтения или копирования в них нет. Для создания дубликатов этих карт используются заготовки T5577 и EM4305, которые свободно продаются.
Перезаписываемые карты-болванки выглядят как обычная пустая пластиковая карта в форм-факторе кредитки, а не перезаписываемые (с прошитым на заводе серийным номером) чуть толще и на лицевой стороне у них нанесен текст, состоящий из нескольких групп десятичных цифр. Встречаются и карты в виде брелков.
Для записи таких карт потребуется соответствующий копировщик. Я использую Proxmark3, но можно взять любой другой, который может работать с T5577 и позволяет ввести ID карты вручную. Или же вовсе использовать эмулятор, тогда можно обойтись без болванок.


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



Как именно передаются данные с карты: сперва идет преамбула из 9 бит 1, затем передается 1 байт Version Number, 2 байта Facility Code и 2 байта уникального номера карты, периодически следуют биты контроля четности. Взято по ссылке, там кстати еще неплохое описание протокола (на английском).


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


Эксперимент


Итак, на карте нанесены некие цифры. Было логично предположить, что это и есть ее ID. Для того, чтобы это выяснить, я взял данные аналогичной карты, получилось следующее:


Цифры на карте: 0013396136 204.26792ID: 4A00CC68A8

После преобразования ID из HEX в DEC, получилось 317840976040, что не похоже на цифры с карты. Спойлер: если бы я сделал наоборот, и конвертировал цифры с карты в шестнадцатеричный формат, то я добился бы успеха сразу, но тогда эта статья была бы не такой содержательной :)


Размышляя над тем, что еще оно может значить, я вспомнил, что Proxmark помимо ID карты показывает еще кое-какие данные:


lf search
proxmark3> lf searchNOTE: some demods output possible binary  if it finds something that looks like a tagFalse Positives ARE possibleChecking for known tags:EM410x pattern found:EM TAG ID      : 4A00CC68A8Possible de-scramble patternsUnique TAG ID  : 5200331615HoneyWell IdentKey {DEZ 8          : 13396136DEZ 10         : 0013396136DEZ 5.5        : 00204.26792DEZ 3.5A       : 074.26792DEZ 3.5B       : 000.26792DEZ 3.5C       : 204.26792DEZ 14/IK2     : 00317840976040DEZ 15/IK3     : 000352190666261DEZ 20/ZK      : 05020000030301060105}Other          : 26792_204_13396136Pattern Paxton : 1256236712 [0x4AE0A6A8]Pattern 1      : 10853441 [0xA59C41]Pattern Sebury : 26792 76 5007528  [0x68A8 0x4C 0x4C68A8]Valid EM410x ID Found!proxmark3>

Ага, 0013396136 и 204.26792 это именно то, что написано на карте!
Но ведь на ней хранится всего лишь 5 байт, значит эти числа должны вычисляться из ID по некому алгоритму ридером или его клиентом. К счастью, Proxmark open-source проект, его исходные коды доступны на гитхабе . Я сделал поиск в репозитории по строке DEZ 10 и нашел функцию cmdlfem4x.c.


Часть кода cmdlfem4x.c:
...    //output 88 bit em id            PrintAndLog("\nEM TAG ID      : %06X%016" PRIX64, hi, id);        } else{            //output 40 bit em id            PrintAndLog("\nEM TAG ID      : %010" PRIX64, id);            PrintAndLog("\nPossible de-scramble patterns");            PrintAndLog("Unique TAG ID  : %010" PRIX64,  id2lo);            PrintAndLog("HoneyWell IdentKey {");            PrintAndLog("DEZ 8          : %08" PRIu64,id & 0xFFFFFF);            PrintAndLog("DEZ 10         : %010" PRIu64,id & 0xFFFFFFFF);            PrintAndLog("DEZ 10         : %010" PRIu64,id & 0xFFFFFFFF);            PrintAndLog("DEZ 5.5        : %05lld.%05" PRIu64,(id>>16LL) & 0xFFFF,(id & 0xFFFF));            PrintAndLog("DEZ 3.5A       : %03lld.%05" PRIu64,(id>>32ll),(id & 0xFFFF));            PrintAndLog("DEZ 3.5B       : %03lld.%05" PRIu64,(id & 0xFF000000) >> 24,(id & 0xFFFF));            PrintAndLog("DEZ 3.5C       : %03lld.%05" PRIu64,(id & 0xFF0000) >> 16,(id & 0xFFFF));...

Из кода выше становится ясно, что эти числа части ID карты:
0013396136 (DEZ 10) первые 4 байта, если считать от младшего к старшему.
204.26792 (DEZ 3.5C) третий байт отдельно (он же Facility Code) и непосредственно 2 байта серийного номера карты.
Таким образом, по цифрам на карте можно восстановить часть ее ID. Но как быть, если известны 4 байта, а требуется 5? И если четвертый байт имел значение 0 на всех считанных мной картах, то пятый байт всегда ненулевой. Перебирать этот байт в конкретном случае не вариант не хочется вызывать подозрения у охраны.


Тут я вспомнил, что СКУД в этом бизнес-центре установлен достаточно давно, поэтому я предположил, что там может использоваться для передачи данных популярный, но устаревший Wiegand-26. Этот протокол предназначен для связи считывателя с контроллером, и позволяет передавать за одну посылку 24 бита данных и 2 бита четности, итого 3 байта. Это означает, что ID карты не передается полностью и неизвестный пятый байт никак в идентификации не участвует и может быть рандомным.
Стоит отметить, что некоторые современные считыватели все же читают и сравнивают старший байт карты, в таком случае придется перебирать 255 комбинаций, но это можно сделать за приемлемое время, особенно если использовать эмулятор.


Ну что же, теперь осталось проверить на практике все изыскания выше. Для создания копии карты я взял заготовку T5577 и записал на нее полученный ID (пятый байт случайный):


Запись карты
proxmark3> lf em 410xwrite 0100CC68A8 1Writing T55x7 tag with UID 0x0100cc68a8 (clock rate: 64)#db# Started writing T55x7 tag ...#db# Clock rate: 64#db# Tag T55x7 written with 0xff80600630c8d23aproxmark3>

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


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


Пост-скриптум


Если вы отвечаете за безопасность, то скорее всего, все описанное в этой статье не будет для вас новостью. В противном случае все же не стоит преждевременно рвать волосы на теле. Проблема кроется в том, что данный формат карт изначально не обеспечивает высокого уровня безопасности. Эти карты не поддерживают каких-либо механизмов аутентификации и шифрования, следовательно могут быть скопированы в любой момент подходящим считывателем. На серьезных объектах, таких как банки, дата-центры и хранилища ядерных боеголовок, вместо EM-Marin применяются более защищенные форматы карт (по крайней мере, хочется в это верить). Например, это семейство MIfare, где карты разделены на сектора с индивидуальными ключами чтения и записи, а некоторые карты этого стандарта поддерживают даже алгоритм шифрования AES. Ну и не стоит забывать про дополнительные методы контроля доступа.
В любом случае, не копируйте чужие карты без согласия их владельцев.

Подробнее..

Управляем офисом с помощью простого telegram-бота

28.07.2020 16:18:22 | Автор: admin
Привет, Хабр! Меня зовут Александр, я работаю в компании FINCH. Мы создаем приложения для крупных брендов вроде Спартака, Столото и Газпром-медиа.

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




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

Как устроен бот


Бот предельно простой: две кнопки для дверей (открыть дверь, открыть калитку) + несколько для камер.



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

Бот экономит время


Бот это удобно. Особенно, когда забыл ключи или когда лень их доставать пока идешь курить. Кажется, что это мелочи ну достань ты связку ключей с брелоком из Парижа или пропуск из кармана и приложи к двери. Но из таких мелочей состоит вся наша жизнь кажется, если каждый день экономить по 10-15 секунд то можно будет наслаждаться реальностью дополнительные 5-10 дней. Посмотрите на эту красивую инфографику о том, куда уходят наши годы жизни.

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


Встреча с курьером после долгих лет странствий

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

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

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

Как бот следит за офисом


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

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



Что внутри бота


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


А это Переславль-Заллеский. Выглядит прекрасно!

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



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

Бот и камеры


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

Говоря хитрую я имею ввиду нестандартный запрос, который вряд ли где-то кроме камер используется. Нужно прям в домене указывать логин и пароль, прям как mailto. Дальше все просто Java обращается к URL, сохраняет файл и загружает в Telegram. Бот не создает новый кадр, а перезаписывает существующий. Ему неинтересно кто во сколько пришел на работу, его интересует только текущее состояние. Каждое изображение весит около 200-300 Кб, о высоких нагрузках речи не идет. Но чтобы никто не смог положить бота, и чтобы бота не забанил Telegram за спам, мы добавили 10-секундный интервал между отправкой запросов.

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

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



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



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

Раньше со скоростью вообще дела шли не очень спасибо блокировке Telegram. Команды, которые должны были выполняться 2-3 миллисекунды, выполнялись секунду. А для всех звеньев, которые используют прокси (получение и отправление) пинг возрастает многократно.

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

Бонус трек: придумываем идеи, что еще можно придумать для офиса. Придумывайте и вы


  1. Заказывать еду в офис. То есть автоматизировать то, что мы обычно делаем в специальных чатах вроде FINCH Еда. Многим нашим сотрудникам, не особо нравится разговаривать с людьми, им нравится тыкать кнопки (Денис, кто создал бота из таких).
  2. Бот мог бы помочь: условно люди подписывались на него, и когда дело доходило до заказа, человеку в личку прилетал вопрос Будешь пиццу? с ответами Да и Нет. При необходимости он выяснял бы детали у человека, кто создал запрос.
  3. Выводить CO2. Вовремя проветриваем помещение, не теряем сознание от углекислого газа. Сейчас это можно посмотреть в Графане, но мы можем сделать так, что и значения и график будут прилетать человеку по нажатию кнопки.
  4. Регулировать свет. Это нужно для тех, кто любит работать в темноте. Мы могли бы подключить бота к диодным лампам, и с помощью бота можно было бы регулировать их яркость. Условно, человек заранее выставляет нужно значение освещения и бот его запоминает. Потом в определенный момент, когда жить со светом уже нельзя человек нажимает кнопку и вуаля атмосфера создана.

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

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

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

Однако мечтать никто не запрещает. Расскажите о самых безумных идеях для Telegam-бота, и авторам самых крутых мы раздадим эксклюзивные майки FINCH. Отправим в любую точку мира

Спасибо!
Подробнее..

Точечная сварка под микроскопом

01.08.2020 22:22:07 | Автор: admin
Хомяки приветствуют вас друзья!

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



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

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



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



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



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

Что касательно самого кабеля, тот тут лучше не экономить и взять вот этого товарища. РКГМ сечением 25 кв. мм. Производство Россия Рыбинсккабель. Это хитрый многожильный провод с изоляцией из кремний-органической резины повышенной твердости, в оплетке из стекловолокна пропитанного эмалью или теплостойким лаком. Он очень тонкий и гибкий. Изоляция провода абсолютно равнодушна к повышенным температурам, пламя зажигалки едва способно вызвать хоть какое-то тление. Длинна термостойкого змея 2.2 метра.

Внутренние отверстия магнитопровода смажем вазелином. Ту же процедуру проводим с кабелем. Несмотря на то, что кабель достаточно тонкий по сравнению со своими более дешевыми собратьями, в трансформатор нужно попытаться вместить 4-5 витка. Но вот незадача. 700 Вт МОТ позволяет вместить в себя только 3 витка. Не беда! На помощь приходит система рычагов и отвёрток. В общем, включив смекалку и мотаем 4 витка в такой небольшой трансформатор.



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

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



Самую простую ручку для контактной сварки можно заказать на алиэкспресс. Но мне приглянулся более продвинутый вариант созданный одним народным умельцем. Зовут его Генадий Збукер. Он сам собирает сварочные аппараты, дополняет их ручками которые сам проектирует и печатает на 3D принтере. Называется такая конструкция держатель электродов точечной сварки ZBU 5.1 с кнопкой и пружинами. 3D модели ранних версий, таких ручек, можно найти на сайте Thingiverse, автор позаботился чтобы при желании каждый мог собственноручно сделать подобный держатель для электродов. Это заслуживает уважения! Так же у него на сайте можно заказать расходные материалы (не реклама, а рекомендация).

Что касаемо ручки для контактной сварки. Выполнена она довольно качественно. Печать корпуса тут осуществляется ABS пластиком. Особенность версии 5.1 в том, что на борту есть два вентилятора, которые способны охлаждать медные шины в процессе непрерывной работы. Питаются они от 5 вольт через разъем micro USB. Ток потребления не более 300 мА.

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



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



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

Функционал контроллера довольно простой. Он выдает два последовательных импульса с паузой между ними. Первый импульс называется присадочным, а второй основным. Он приваривает метал друг к другу. Все переменные времени импульса регулируются с помощью энкодера, включая паузу между ними. Управление силовым трансформатором осуществляется c помощью довольно мощного симистора на 40 А. Он устанавливается по входу первичной обмотки. Маркировка BTA41-600.

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



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

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



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

Размещаем внутри корпуса МОТ, импульсный блок питания на 12 вольт и запихиваем внутрь сетевой провод. Длинна его полтора метра. Распределяем все необходим провода по своим разъемам, и в принципе все. С электроникой разобрались.



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



Для сварки возьмем старый аккумулятор и никелевую ленту толщиной 0.15 мм. Установим время сварки 20 мс для каждого импульса. Это соответствует одному периоду переменного напряжения из сети. Если там 50 Гц, то это одна пятидесятая. В результате испытаний оказалось, что на самых коротких выдержках времени, ленту не то чтобы варит, а прожигает насквозь. Теперь это не аккумулятор, а сплошная вентиляция

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



Причиной прожига аккумуляторов стало время работы силового трансформатора, которое не соответствует установленным значениям. Проблема тут явно программная, так как скечт разработчика неоднократно загружался на другую ардуинку, но результата это не дало. Сейчас по нашим установленным параметрам сигнал на оптопаре должен быть 10 и 60 мс. А по факту это время в несколько раз затянуто, 80 и 125 мс. Естественно этого времени хватает чтобы перегреть никелевую пластину между электродами и в некоторых аккумуляторах прожечь дно.

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



В Китае есть готовые контроллеры для точечной сварки, заказываю и жду. Это одна из самых продвинутых версий плат. Модель NY-DO2X. Кроме того что она дает двойной импульс с паузой, так еще тут есть возможность регулировать мощность. Симистор тут установлен BTA100 рассчитанный на ток в 100 ампер. Рабочее напряжение 1200 В.

Размечаем и выпиливаем отверстия под новую панель управления. На этом этапе не торопимся чтобы не отрезать чего нибудь криво. На плате видим несколько разъемов. На первый слева подается переменное напряжение номиналом в 9 вольт. На второй подключается кнопка от держателя электродов или внешняя педаль. Второй вариант хороший, если у вас ручка без кнопки, или же вам просто нравится работать с педалями. Трансформатор для питания платы можно выковырять из какого-нибудь старого блока питания от домашнего телефона. Тока в 300 мА хватит с головой.

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



Слева направо трансформаторы: 700 Вт, 800 Вт и 900 Вт. Чем больше магнитопровод, тем больше мощность. Тут видно на сколько 900 Вт вариант больше своего предшественника. Размеры: длинна 106 мм, высота 89 мм, ширина 66 мм.

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

Выбиваем провод из сердечника железным стержнем.В общей сложности данная операция занимает 20 минут. Медные косы не выбрасываем, а сдаем на металл и покупаем пиво. Обязательно извлекаем магнитные шунты, которые установлены для мягкой работы магнетрона и зачищаем края отверстий в магнитопроводе как это было показано ранее. В такой большой трансформатор без труда помещается 4 витка. При желании можно вместить и 5-тый, но я не стал переводить вазелин) Последовательно с мощным симистором припаиваем первичную обмотку только что перемотанного МОТ-а. Не жалеем припоя и делаем все как для себя.



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



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

Что означают лампочки над цифрами? Первый светодиод говорит о наличии питания. Второй светодиод горит когда нажата кнопка на ручке. Третий загорается только в момент наличия импульса. В общем первые три красные светодиода чисто информационные. Четвертая зеленая лампочка это счетчик наработки, суммирует каждое нажатие на педаль или концевик внутри сварочной кучки. Сбрасывается счетчик двойным нажатием на красную кнопку. Дальше оранжевый светодиод. Первый устанавливает длительность первого импульса. Выбирается он в периодах. Установим один что будет ровняться 20 мс. Второй светодиод задает мощность импульса. Поставим скажем 35 процентов. Минимум 30 максимум 99.9%. Зеленый светодиод между оранжевыми определяет паузу между импульсами. Так же в периодах. Поставим 2. Последние два оранжевые светодиода так же определяют длительность и мощность, но уже второго импульса. Поставим 2 периода и мощность выкрутим на 100 процентов. Собственно все, теперь можно потыкать в какую-нибудь ленту и посмотреть как происходит сварка, изучить точки, подобрать режимы на контроллере и прочее.



Краткие характеристики получившегося аппарата для точечной сварки. Вес готового устройства вышел 5.7 кг. Переменное напряжение на вторичной обмотке МОТ-а составило 3.8 вольта. Максимальный ток зафиксированный при сварке показал 450 ампер. С этим связан один интересный эффект во время работы аппарата. Магнитное поле у проводов выходит настолько большим, что их разбрасывает друг от друга сантиметров на 20. Магнитопровод при этом довольно сильно притягивает любой рядом лежащий металл, потому тут не рекомендую использовать железный корпус для устройства, при сварке он будет издавать неприятные звуки.

Если накоротко закоротить вторичную обмотку, то даже 700 Вт МОТ способен нагрузить сеть до значений свыше 4 кВт. На сколько больше мне не известно, так как ваттметр уходит в защиту при достижении такой нагрузки. Ток вторичной обмотки при этом зашкаливает за 600 А, свыше предела измерения мультиметра. На входе первичной обмотки максимальный ток зафиксирован 21 ампер, при этом напряжение в сети проседает с 230 до 217 вольт.

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



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

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



Теперь наша задача довольно проста. Нужно приварить ленту для точечной сварки к аккумулятору. Но тут возникает пару вопросов. Какую ленту будем варить и к какому аккумулятору? Помните момент когда у нас сварочник с 700 Вт трансформатором отказывался приваривать никелевую ленту? Идентичная ситуация происходит с новым 900 Вт МОТ-ом.

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

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



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

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



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

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

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

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

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

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



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

Электропроводка в квартире. Специально для фильма был сделан удлинитель с сечением провода в 2.5 квадрата. Даже смотря на это, слабенький 700 Вт МОТ умудрялся просаживать сеть под нагрузкой.

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

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

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

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



Для справки. Съемка этого выпуска заняла чуть больше 2-х месяцев. Когда брался за изучение данной темы, даже подумать не мог что тут окажется так много нюансов. По стоимости бюджет фильма перевалил за предполагаемые границы, так как покупать запчастей пришлось практически на 2 сварочных аппарата. В общей сложности было израсходовано 3 метра никелевой ленты и испорчено 2 хороших аккумулятора. Пущено в расход два десятка плохих.
Ну все, видео озвучил, теперь можно идти бухать и готовится к следующему выпуску.
Как сказал Мастер Йода:
Тебя послушать так сложно все. Слышишь, что сказал я?
Ты должен чувствовать силу, она между тобой, мной и камнем, везде
Да нооо нет



Полное видео проекта на YouTube
Архив с полезностями
Наш Instagram
Подробнее..

Как использовать десктоп без десктопа? Обзор Samsung Dex

01.08.2020 00:22:29 | Автор: admin
Привет Хабр.

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

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



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

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

Разумеется, могут быть разные варианты решения задачи, как обойтись без десктопа. Можно купить fanless-ПК и подключить его параллельно основному компьютеру, но хороший fanless-ПК стоит недешево. Можно купить Chromebox, что по сути тот же ПК, только с ОС от Гугла. Наконец, если ограничиться просмотром видео, можно просто воткнуть в монитор или телевизор Google Chromecast. Но решение со смартфоном оказалось самым удобным, при условии конечно, что уже есть современный смартфон, способный использовать USB-C как HDMI-выход. Не секрет, что современные смартфоны имеют весьма приличную вычислительную мощность несколько ядер, 4-8Гб оперативной памяти, и в большинстве случаев все это практически не используется.

Железо


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

  • Переходник USB-C HDMI, который мы подключим к монитору и смартфону. Я взял специальный адаптер, способный во время работы подавать питание на смартфон, т.к. иначе придется думать о заряде батареи.

  • USB-переключатель, способный разделить USB-мышь и клавиатуру на два устройства ПК и DEX.



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

Собственно, и все. Подключаем вместе все кабели, соединяем адаптер со смартфоном и монитором, и всё работает, мы видим вполне полноценный десктоп:



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

С железом разобрались, перейдем к к софту.

Софт


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

Google Chrome к примеру, выглядит вот так:


Все вполне работает, но вот переключение между открытыми страницами требует нескольких кликов, и это неудобно. В Chrome Beta таки появилась возможность активировать панель табов, для чего достаточно в браузере открыть адрес chrome://flags/#enable-conditional-strip. Табы располагаются только снизу и у них нет подписей, только иконки страниц (см. нижнюю часть скриншота), но это все же лучше чем ничего.

Youtube работает, хотя и выглядит немного странно, например я так и не понял как посмотреть комментарии к видеороликам, они просто не показываются:



Помимо Youtube, нормально работает Spotify, музыку можно слушать фоном, на производительности это никак не сказывается.

Я не пробовал использовать MS Office, однако Google Docs нормально открывает и редактирует документы:


Сложности возникли с редактированием изображений. Большинство Android-редакторов заточены под смартфоны, и среди множества всяких улучшалок фотографий, нанесения рамок и прочей ерунды, я не нашел обычного простого редактора в стиле Paint, где можно было бы изменить размер холста, добавить надписи и сделать прочие несложные вещи. Смешно, но в нескольких редакторах, имеющих в названии слово Pro я не нашел банальной функции Resize Canvas. Пример редактора с незамысловатым названием Photo Editor показан на скриншоте, и несложно видеть, что его UI определенно рассчитан под телефон.


Однако, система может подойти не только для работы с текстами и картинками:


Python 3.8, numpy, git и Slack работают нормально, так что даже поработать с такого ПК в принципе, можно, вопрос лишь в том, удастся ли найти удобную IDE.

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

Заключение


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

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

PS: Для тех, кто хочет посмотреть Samsung Dex вживую, видео под спойлером (не мое).
Видео

Подробнее..

Взять и выспаться в кризис чек-лист на выходные

07.08.2020 20:19:44 | Автор: admin
Рассказываем об аудиотехнологиях, способных наладить сон от белого шума до разработок НАСА.


Фото Dane Deaner / Unsplash

Что-то не спится


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

Китайские ученые опросили более тысячи жителей страны и установили, что 30% из них за время изоляции начали испытывать проблемы со сном это исследование опубликовали в журнале Nature. В American Sleep Association сообщают, что от 50 до 70 млн граждан США страдает от разного рода нарушений сна, а американские фармацевты говорят, что за прошедшие месяцы число посетителей с рецептами на препараты для борьбы с нарушениями сна выросло на 15%.

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


Фото Sean Benesh / Unsplash

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

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

Немного технологий и музыки


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

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


Фото Higor Hanschen / Unsplash

Средством от бессонницы также может служить голос. Нейропсихологи активно изучают феномен под названием ASMR (Autonomous Sensory Meridian Response Автономная сенсорная меридиональная реакция) или что-то вроде покалывающих ощущений в затылке, возникающих в ответ на ряд аудиовизуальных триггеров. Ими могут быть шепот и медленная мягкая речь. По словам некоторых слушателей, ASMR помогает им бороться с бессонницей и тревожностью.

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

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

Чек-лист на выходные


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

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

28.07.2020 18:07:12 | Автор: admin
image

Содержание


Введение. О чем эта статья
Цели и дисклеймеры
Часть 1. Хороший продукт
Часть 2. Пользовательский опыт (UX). Что это?
Часть 3. Архитектура выбора
Часть 4. Архитектор выбора
Часть 5. Когнитивные искажения и Пользовательский опыт
Ссылка на полную версию UX CORE (105 примеров использования когнитивных искажений в менеджменте команд и продуктов)
Часть 6. Наши дни
Часть 7. Не только искажения
Часть 8. Эпилог
Часть 9. Материал, качественно дополняющий эту статью

Введение. О чем эта статья


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

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

В какой-то момент своей жизни я перепрофилировался из технического специалиста в IT-сфере, коим я проработал около 6 лет (LAN/WAN/DevOps/InfoSec), в Product Manager-а. Моей основной деятельностью на этой должности является анализ ожиданий и принятых решений пользователей с целью создания более комфортного и желанного продукта.

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

Цели и дисклеймеры


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

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

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

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

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

Часть 1. Хороший продукт


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

Итак, чуть выше я убрал вопросы про рынки, конкурентов и целесообразность продукта, потому что я исхожу из того, что качественный продукт это, прежде всего, продукт без внутренних противоречий. Такой продукт идеально связан как идеологическими его составляющими (история создания, его миссия, все использованные изображения, текстовые и печатные материалы используемые для его разработки и продвижения и прочее), так и техническими (back end, пользовательский интерфейс, элементы взаимодействия и дизайн, бизнес цвета, инструкции для работы службы поддержки клиентов, tone of voice of the company и много другого).

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

  • неудачный тайминг (изменилась коньюнктура на рынке, люди еще не осознали всю серьезность проблемы, решаемой продуктом и т.п.);
  • человеческий фактор (утечки внутри компании, уборщица, опрокинувшая ведро рядом с серверами в день релиза и т.п.);
  • слабые управленческие навыки руководства (основатели компании слишком поздно начали обсуждать распределение прибыли, что создало конфликты; чрезмерный нажим на команду разработчиков повлек массовые увольнения и сорвал переговоры об инвестировании и пр.)
  • банальное невезение, важность которого повально игнорируется как новичками, так и экспертами в бизнесе (Черные Лебеди Н. Нассима Талеба).

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

Часть 2. Пользовательский Опыт (UX). Что это?


Так как на данный момент понятие UX гораздо чаще относят к UI дизайну, моим оппонентом в обсуждении данного вопроса будет Джо Натоли. Джо ветеран-дизайнер с опытом работы более 30 лет, один из самых популярных в мире IT экспертов по UXD (User Experience Design), автор ряда книг, а также самых популярных видео-курсов по UX на Udemy. Натоли провел более тридцати лет консультируя по вопросам дизайна пользовательского опыта (UXD) компании из списка Fortune 100, 500 и правительственные организации. На своем вебсайте он называет себя User Experience Evangelist, значит, я могу ссылаться на его утверждения, высказанные публично в его книгах и видеоуроках.

В одном из своих уроков, где господин Натоли объясняет понятие User Experience, он ссылается на Питера Мерхольца:

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

Другой UXD эксперт Билл ДэРушэ (Старший продакт менеджер / Workflow Experience Lead at Zendesk). В обсуждении UXD говорит следующее: Для UXD даже не нужен экран. UXD это любое взаимодействие с любым продуктом, любым элементом, любой системой .

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

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

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

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

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

Часть 3. Архитектура Выбора


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

Касс Санстейн со-автор теории подталкивания. После выхода книги Подталкивание президент Обама предложил Санстейну место в Отделе информации и регуляторной политики. Это дало исследователю широкие возможности внедрять идеи психологии и поведенческой экономики в работу правительственных учреждений. 10 сентября 2009 года Санстейн был назначен на пост главы OIRA, которое является частью Административно-бюджетного управления Администрации президента. OIRA осуществляет надзор за реализацией государственной политики и рассматривает проекты нормативных актов. Пост главы OIRA считается одним из наиболее влиятельных, учитывая его возможность влиять на тексты принимаемых законов. СМИ неофициально называют этот пост regulatory czar. OIRA Санстейн возглавлял до 21 августа 2012 года.

В августе 2013 года Санстейн вошел в состав комиссии по надзору за АНБ (англ. Review Group on Intelligence and Communications Technology). Кроме него в комиссии еще два бывших работника Белого Дома: крупейший специалист по контртерроризму и кибервойнам Ричард Алан Кларк и бывший заместитель директора ЦРУ.

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

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

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

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

image

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

Часть 4. Архитектор Выбора


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

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

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

В такой компании несложно понять, кто является архитектором выбора. Это тот, кто занимается организацией контекста, в котором человек (пользователь) принимает решения в приложении, либо просто Product Manager.

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

Часть 5. Когнитивные Искажения и Пользовательский Опыт


Итак, мы дошли до основного материала статьи.

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

Для структурирования материала я использовал Кодекс когнитивных искажений, категоризированный и структурированный Бастером Бэнсоном в 2016м году (по ссылке выше дизайн Джона Манукяна III). Помимо новой формы презентации искажений, к каждому из них я добавил пример использования в разработке программного обеспечения, а в некоторых случаях- в управлении командой. Были учтены самые современные практики по управлению командами и компаниями (PMP, PMI ACP), а также разработке продукта.

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

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

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

  • Работа с большим объемом данных. Когда много информации;
  • Расплывчатость, недостаточность данных. Когда не хватает смысла;
  • Недостаточно времени. Когда быстро реагируем;
  • Разные приоритеты по информации. Когда запоминаем и вспоминаем.

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

#1 Эвристика доступности [P]
Процесс, при котором человек оценивает частоту или вероятность события по легкости, с которой примеры или случаи приходят на ум, т.е. легче вспоминаются.

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

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

Последний пример это то, что я выбрал тему проектирования ПО и блокчейн технологий для описания эвристики доступности. Первая тема очевидна для меня в силу моей профессии (product manager), вторая же тема просто с легкостью пришла мне на ум, когда я задал себе вопрос: Какое направление в IT было полно хайпа, а потом быстро сошло на нет?.

#4 Эффект знакомства с объектом [P]
Психологический феномен выражения симпатии к объекту только на основании имеющегося знакомства с ним. Чем чаще человек видит кого-то, тем приятнее и привлекательнее ему кажется этот человек.

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

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

#6 Забывание без подсказок [P]
Является неспособностью вспомнить воспоминание из-за отсутствия стимулов или сигналов, которые присутствовали во время кодирования памяти.

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

Приведу простой пример на онлайн тотализаторе, где множество пользователей делают ставки. Очевидно, что средний пользователь как выигрывает, так и проигрывает. В интересах бизнеса правильно будет поддержать такого пользователя в тот сложный момент, когда он все проиграл. Так как в сознании игрока, который пережил серию поражений одни поражения, система может напомнить ему о целом ряде побед по некоему паттерну, оживив в нем всю ту серию хороших воспоминаний, которые он испытал. Это может быть сделано ненавязчиво, сообщением типа Уважаемый %username%, мы просто хотели напомнить вам о невероятно успешной серии ваших побед, продлившейся три дня подряд на играх %game_names%. Навязчиво? Возможно. Изменим сообщение на Вы попали в топ 20% наших игроков, благодаря вашей серии побед в %game_name%!. Уже не так навязчиво, это уже статистика . Конечно, делать это не этично с точки зрения морали. Поэтому букмекерские конторы и казино, работающие под лицензиями Malta Gaming Authority (MGA), Кюрасао и других, заранее соглашаются, что не будут подталкивать игроков к острым азартным действиям. В любом случае, приведенный пример наглядно иллюстрирует как можно извлечь пользу для бизнеса, зная о такой простой ошибке нашего мозга.

#11 Ошибка базового процента [P]
Это ошибка в мышлении, когда сталкиваясь с общей информацией о частоте некоторого события (базовый процент) и специфической информацией об этом событии, человек имеет склонность игнорировать первое и фокусироваться на втором. Например: люди верят показаниям теста, сигнализирующем о наличии редкой болезни, сразу, не принимая во внимание, что редкая болезнь, вообще говоря, редкая. Либо другой пример: страх террористов и полетов на самолете. Суть в том, что наш мозг склонен преувеличивать частный случай в ущерб статистике.

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

Вы собираетесь запустить процесс дефрагментации диска. С вероятностью 99% операция пройдет успешно.

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

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

Когда люди видят 15,800 хвалебных отзывов и 50 крайне негативных отзывов в перемешку с ними, они склонны считать продукт менее ценным, непропорционально тому факту, что негативных отзывов меньше 0.1%.

#13 Эффект юмора [P]
Смешные вещи легче запомнить, чем не юмористические, что может быть объяснено увеличенным временем когнитивной обработки, чтобы понять юмор, или эмоциональным возбуждением, вызванным юмором.

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

Здесь очень важно понять, что речь идет о запоминании юморных вещей, но не о позитивном отношении к ним. Так, если в процессе работы над важным действием (заполнение формы, сохранение данных), пользователь попадает на страницу ошибки (500 (Internal server error), 502 (Bad gateway), 503 (Service unavailable), 504 (Gateway timeout) ), то юмор типа Хо хо! Наши пираты работают над ошибкой и скоро все будет восстановлено! будет не к месту. В этом случае юмор будет замечен, запомнен, и, вероятнее всего, вызовет гнев пользователя так, что это событие запомнится лучше. Если подобное событие произойдет несколько раз за месяц, в соответствии с эвристикой доступности, в следующий раз подумав о качестве нашего продукта пользователь с высокой вероятностью даст негативную оценку. Даже если в 99% случаев приложение справлялось с задачей (ошибка базового процента).

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

#21 Ошибка различения [P]
Это тенденция рассматривать два варианта как более отличительные при оценке их одновременно, чем при оценке их отдельно.

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

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

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

К примеру, зная что наши пользователи игнорируют вероятность полной потери данных, мы можем подтолкнуть их к созданию бэкапов сообщением вида Уважаемый %user_name%, в последний раз вы создавали бэкап ваших данных 571 день назад. Мы настоятельно рекомендуем создать бэкап чтобы избежать риска полной безвозвратной потери ваших данных.. Здесь мы ничего не говорим о вероятности потери. Она могла постоянно быть равной 0.1%, но написав сообщение с призывом к эмоциям (полной безвозвратной потери ваших данных) и конвертируя условные 19 месяцев в 571 день, мы с большей вероятностью добьемся действия пользователя (бэкап системы).



Ссылка на полную версию UX CORE (105 примеров использования когнитивных искажений в менеджменте команд и продуктов)


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

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

В завершении, я бы хотел рассказать об ошибке GI JOE задокументированной профессором Лори Сантос буквально несколько лет назад. Ошибка касается широко распространенного утверждения, что знать это уже пол дела, что, однако, не имеет научных оснований и является ложным утверждением. На самом деле, одного лишь знания недостаточно, чтобы изменить модель нашего поведения. Настоящие перемены невозможны без наших целенаправленных действий. Вы можете выучить наизусть все когнитивные искажения и механизм их работы, но, если вы не меняете модель своего поведения под полученными знаниями, ценность ваших знаний снижается. Более того, подобное знание не будет крепким, вам придется регулярно возвращаться к таблице и повторять написанное, чтобы не забыть. Если же вы не только поймете, но и предпримите определенные действия для усвоения материала, изменения вашего образа мыслей, вашей жизни, тогда самые лучшие решения по продукту, удивительным образом станут для вас крайне очевидными.

Часть 6. Наши дни


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

На данный момент, взглянув на рынок и на требования к продакт менеджерам лучших компаний, можно обнаружить описания и опросники, на которые ответит почти каждый, кто прошел PMI-ACP. По сути, отсутствие четкого понимания роли Product Manager-а приводит к тому, что на них вваливаются обязанности Project Managerов, Scrum Master-ов, и других.

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

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

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

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

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

Часть 7. Не только искажения


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

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

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

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

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

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

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

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

Без внимания к деталям, невозможно добиться высокого качества.

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

Часть 8. Эпилог


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

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

Попробую объяснить иначе. Вне зависимости от идеологической составляющей вашей жизни, вашего стиля и публичного образа, вы можете в любой момент записаться на курсы по SCRUM, изучить этот фреймворк, почитать о нескольких других, понять идеи Agile и устроиться работать проект менеджером в какую-то компанию. Вы также можете пройти пару онлайн курсов и подтянуть ваши знания по front-end и back-end программированию, понять принципы работы баз данных, и это займет у вас буквально месяц. Еще за месяц вы можете сами выучить HTML и CSS, поиграть с разметкой, собрать несколько макетов и понять общую идею работы Javascript.

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

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

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

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

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

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

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

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

Большое спасибо за проявленный интерес.

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

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

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

Часть 9. Материал, качественно дополняющий эту статью


  • Даниел Канеман Думай медленно Решай быстро;
  • Николас Нассим Талеб Черный Лебедь;
  • Касс Санстейн и Ричард Талер Подталкивание;
  • Ричард Дэвидсон Как эмоции управляют мозгом;
  • Михай Чиксентмихайи Поток;
  • Джим Коллинз От хорошего к великому;
  • Jesse James Garrett The Elements of User Experience (2nd Edition);
  • William Lidwell Universal Principles of Design;
  • James Clear Atomic Habits;
  • Erin Meyer The Culture Map;
  • Joe Natoli UX Design Fundamentals Udemy Video;
  • Joe Natoli UX & Web Design Master Course: Strategy, Design, Development Udemy Video;

Эта статья была написана в период объявленного карантина из-за пандемии коронавируса (COVID-19) в Армении, г. Ереван. Я очень рад, что статья оказалась полезна многим людям, которые успели ознакомиться с разными частями написанного материала в период моей работы над ней.

Оригинал статьи
Английская версия

По любым вопросам и предложениям пишите, буду рад помочь: alexanyanwolf@gmail.com / www.linkedin.com/in/alexanyan / www.facebook.com/AlexanyanWolf
Подробнее..

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

04.08.2020 10:19:03 | Автор: admin
Чувствуете ли вы азарт, когда обнаруживаете в игре сбой? Когда, наконец, попадаете в скрытую область на карте, не предназначенную для игроков? Которая была заблокирована кажущимися непроходимыми горами и невидимыми стенами? Если ваш ответ да, поздравляем, вы исследователь.

Как исследователя, меня всегда восхищало то, что скрыто от глаз в играх, в которые я играю. До сих пор хорошо помню, как в первый раз попала под Штормград в World of Warcraft. Добраться туда нетрудно, и я, конечно, не была первой. Но когда я спустилась вниз под шумный город, мой восторг было не передать. Прямо надо мной стояли сотни людей: все куда-то спешили, продавали вещи на аукционе или болтали с друзьями, и я была как бы не с ними, но все еще там. С тех пор я всегда искала в играх что-то подобное. Мне все время хочется заглянуть за дым и зеркала и увидеть игру такой, какая она на самом деле. Это привело меня к размышлению о том, как разработчики создают игры для таких людей, как я, исследователей.

image


Кто же такие исследователи?


Если вы опросите тысячу поклонников The Elder Scrolls, что им больше всего нравится в игре, вы получите множество разных ответов. Однако это не будет тысячей разных ответов. Возможно, нам хотелось бы верить, что наши мотивы уникальны, но в действительности они часто следуют определенным схемам и могут быть определены по категориям. Так, в своем исследовании 1996 года Ричард Бартл поделил игроков на четыре психотипа: исследователей, карьеристов, коммуникаторов и киллеров.

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

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

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

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

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




Как игры наказывают исследователей


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

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


Скрытые области


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

Существует три ситуации, когда это действительно должно быть наказуемо:

  • Игрок получает доступ к разрушающим качественный игровой опыт предметам и использует их. Мы могли это наблюдать в 2019 году, когда Bethesda заблокировала аккаунты игроков, получивших доступ в комнату разработчиков Fallout 76, где хранятся абсолютно все игровые предметы, включая броню и оружие.
  • Игрок получил доступ к чему-либо вразрез Пользовательскому соглашению (Terms of Service (ToS)). Обычно это значит, что игрок использовал некий чит-код например, удаляющий невидимые стены, ускоряющий героя или позволяющий ему летать там, где он хочет.
  • Доступ к скрытой области дает игроку явное преимущество над остальными. Такое часто встречается в шутерах от первого лица, где игроки могут попытаться проникнуть в скрытую область карты, откуда удобно убивать ничего не подозревающих противников.

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


Та самая комната разработчиков


Необычное использование игровых механик


Создатель YouTube-канала Archvaldors Warcraft Hacks недавно опубликовал видео под названием Как меня забанили за БОТОВ при отсутствии ботов. В этом видео он объясняет, как его забанили в World of Warcraft по запрету Activision-Blizzard. Этот запрет должен был решить проблему ботов, которая всегда преследовала игру. Единственная проблема заключалась в том, что Арчвальдор не использовал никаких ботов.

Как он думает, кто-то пожаловался на него, как на бота, потому что он пытался получить доступ к области, заблокированной воротами. Чтобы добиться своей цели, он бежал к воротам и пытался применить на них ряд различных способностей, чтобы посмотреть, сработает ли что-то из этого. Гейм-мастер (сотрудник Blizzard, которому поручено решать внутриигровые проблемы) уделил проблеме буквально несколько секунд, а затем исчез. Впоследствии он игнорировал все попытки Арчвальдора выйти на диалог, а спустя три недели тот оказался забанен на полгода без права обжалования после попытки подняться по местности в другой области игры.

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

Это не первый раз, когда Activision подвергается критике за чрезмерный бан. Они также получали негативную реакцию за то, что банили игроков на 10 лет в Call of Duty Mobile буквально ни за что. Похоже, что в попытке сделать игры честными для игроков античит-программы предпочитают избавляться от исследователей наряду с ботами. И если для того, чтобы избавиться от ботов, нужно перебанить и всех исследователей что ж, пусть будет так.


Что исследователи привносят в игры


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

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


Как создавать игры для исследователей


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


The Legend of Zelda: Breath of the Wild всегда поощряла игроков исследовать свой мир


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


Во-первых, разработчики игр должны расширить понятие того, как следует играть в их игры. В последние годы некоторые MMORPG обвинялись в том, что они стали MMO в духе тематических парков. Это означает, что все игроки движутся по одному и тому же игровому сценарию. Свобода игрока уже не столь важна на первый план выходит сюжетно-ориентированная составляющая игрового процесса. Так устроено большинство однопользовательских линейных игр, и этот подход показывает себя очень эффективно. Игроки The Last of Us не жалуются, что не могут исследовать открытый мир. Зачем им это? Они купили игру ради захватывающей истории и развития характеров героев. Но MMO совсем другой жанр, где исследование открытого мира и свобода игроков являются ключевыми понятиями.

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


Сложность


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


Пасхальные яйца


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

Вот пара примеров таких пасхалок:

  • В Doom 2 есть секретная концовка, открывающаяся в случае, если игрок выстрелит боссу в лицо и затем пройдет по нему. В этом случае вы увидите голову геймдизайнера игры Джона Ромеро, насаженную на кол.
  • Если в Saints Row 2 вы отправитесь на скрытый прибрежный остров и побродите по его побережью, но увидите огромного фиолетового кролика, поднимающегося из глубин океана.




Удаляйте контент только в случае необходимости


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

Перевод Как избежать блокировки в WhatsApp для того чтобы

14.08.2020 04:10:43 | Автор: admin


чтобы отправлять сообщения каждые 30 секунд (120 сообщений в час).
Надеюсь что мистер Цукенберг не заходит на этот ресурс :)

WhatsApp самый популярный в мире мессенджер (свыше 1.3 миллиарда пользователей), но почему нельзя общаться с большим количеством пользователей в этом приложении?

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


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

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

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

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

Что можно и чего нельзя делать:

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

2. Добавляйте каждый контакт, которому вы шлете сообщения, в свой контакт лист.

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

4. После отправки первого сообщения используйте рандомный таймаут (от 30 до 60 секунд) перед отправкой следующего сообщения.

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

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

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

9. Используйте какую-нибудь картинку в профиле, это не относится к Whatsapp Bots Catcher, просто люди могут пометить контакт без фото как спам.

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

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

12. У WhatsApp существуют специальные номера для тестов и если вы вышлете сообщение на 00@c.us официальный маркетинговый аккаунт вацапа, то это тоже самое что пытаться продать кокаин полиции.

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

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

15. Не отвечайте мгновенно на сообщение нормальный таймаут ответа 5-10 секунд.

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

17. Очищайте кэш в браузере всякий раз, когда вы открываете Whatsapp Web, да это головная боль каждый раз вводить новый QR код, но без этого ваш бот нормально не перезагрузится.

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

19. Важно: Плохая идея слать сообщения 24/7 без перерыва.
Рандомной задержки недостаточно, шлите разумное количество сообщений например шлите максимум 4 сообщения в час каждому контакту кто ответил вам, затем перерыв на час и затем опять.

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

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

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

23. Избегайте использования префиксов в сообщениях.

24. Не используйте yowsup-cli

25. Ставьте пометку online при отправке сообщения.

Имейте ввиду:

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

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

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

4. Использовать приложения которые дублируют вацап тоже плохая идея вацап это видит и блокирует.

5. Старайтесь вовлекать в чат с собеседника и если сразу вас не пометили как спам, то все ок и можно продолжать. Чем чаще отвечают вам люди тем меньше шансов у вас попасть под бан.

6. Думайте об этом как о балльной системе если вас внесли в список контактов, то вы получили 1 балл, если пометили как спам вы потеряли 1 балл и т.д.

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

8. Виртуальные номера в некоторых странах знакомы вацапу, поэтому вы не сможете там зарегестрироваться, вы получите сообщение Not a valid number for country XX

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

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

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

заблокированы.

Если вас все-таки заблокировали, но вы не хотите сдаваться:

1. Удалите вацап и все что с ним связано.

2. Сделайте сброс к заводским настройкам, если это возможно.

3. Подключитесь с новым IP адресом

4. Скачайте вацап

5. Первые сообщения сделайте с тем номером, который давно имеет вацап например с вашим собственным телефоном.

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

Что будет если вы напишете в суппорт WhatsApp с вопросом о причинах блокировки?

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

Отвечают быстро, но всегда одно и тоже:

## WhatsApp Support ##
Hello,
Thanks for getting in touch with us!
Your WhatsApp account has been disabled because you have violated our Terms of Service when using an unauthorized app or an unsupported device.
Please remove the application and install an authorized version on a compatible device at: www.whatsapp.com/download
Please keep in mind that we do not allow support for unofficial or jailbroken / rooted clients (including emulators) and unsupported devices.
To use WhatsApp on your computer, visit our website from your computer's browser. Then open WhatsApp and scan the QR code using the WhatsApp application on your phone (look for WhatsApp Web in the WhatsApp settings on your device). WhatsApp can only be installed on your computer if you are using Windows operating systems 8.0 and higher or Mac OSX.9 and above. If you are experiencing problems installing WhatsApp on a supported operating system, disable your anti-virus and try again.
You have the option to access WhatsApp through your browser here if you are using non-compatible operating systems.
Your account will be permanently disabled, and without the possibility of appeal if you continue to violate our Terms of Service.Cheers,
Roshan
WhatsApp Support Team
Take a look at our FAQ.

Финальные соображения и заключения.

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

Note: Я не использую API для рассылки спама или маркетинговых предложний и не люблю тех кто это делает.
Я всегда пишу только тем, кто подтвердил желание общаться со мной, но на самом деле WhatsAppу плевать на это.

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

Чем отличается сениор от миддла или как второму стать первым

29.07.2020 18:17:33 | Автор: admin
Разработчиков принято делить на джунов, миддлов и сениоров. С джунами все более-менее понятно. Разница между следующими двумя ступенями, кажется, очевидна. Но в комментариях к статьям и в откликах на наши вакансии то и дело возникают разногласия.

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

image

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

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

Джун. Задать вопрос в любой непонятной ситуации


Итак, специалист начинает свое развитие в любой области с уровня джуна.

В зависимости от знаний и опыта за плечами джун в лучшем случае умеет кодить. Для нормальной работы задачу для него надо максимально декомпозировать и сформулировать как можно прозрачнее. Фактически джун это человек, который нажимает на клавиши, чтобы, например, поддерживать существующие автотесты или написать новые, использовав Ctrl+C / Ctrl+V и кое-что подправив.

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

Миддл. Самостоятельность выше, а вопросы скорее инфраструктурные


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

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

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

Сениор. Не ждите вопросов, просто согласуйте один из готовых вариантов ответа


Сениор умеет не просто решать задачи и анализировать, но и выстраивать процессы.

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

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

В целом хороший сениор нацелен на решение поставленной бизнес-задачи, а не конкретного таска из Jira (о важности такого подхода мы писали около года назад на Хабре: http://personeltest.ru/aways/habr.com/ru/company/maxilect/blog/459294/). И на пути к этому решению он сам находит инструменты и внедряет их, если это необходимо. Техлид со своей стороны видит, что задача в хороших руках, и просто наблюдает за происходящим, корректируя общий курс в соответствии с направлением развития технологического стека в компании.

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

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

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

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

Как добраться до сениора?


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

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

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

Не так давно один из хабровчан парсил вакансии на HeadHunter, чтобы оценить заявленные требования к опыту специалистов. Выяснилось, что со временем требования к опыту работы специалиста, претендующего на уровень сениор, только повышаются (http://personeltest.ru/aways/habr.com/ru/post/442864/).

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

  • Анализируйте ошибки, которые вы совершаете. Старайтесь докопаться до причин возникновения багов или неработоспособности очередной внешней библиотеки. Так вы гарантируете, что не повторите ошибку в будущем, а заодно расширите кругозор.
  • Ищите себе задачи чуть сложнее, чем вы решали до сих пор. Не стоит застревать на одном уровне сложности ходить на конференции для джунов или применять на домашних проектах только самые простые решения.
  • Регулярно уделяйте хотя бы немного времени изучению нового. Пусть это будет open-source, чтение книг о фундаментальных основах по вечерам или технологии, косвенно связанные с рабочим проектом. Даже полчаса в день на длинных промежутках времени дадут результат. Не обходите стороной тему бизнеса и управления сениор должен разбираться и в этом. Если у вас не профильное высшее образование (или его нет), уделите время базе подходам к тестированию, структурам данных, алгоритмам и базовой математике в их основе, архитектуре вычислительной техники и т.п.
  • Если у вас до сих пор нет технического английского, уделите время и этому навыку. Это полезно и в работе, и в дальнейшем обучении большинство хороших книг и статей выходят именно на английском, а на русский переводятся с опозданием.
  • Развивайте эмоциональный интеллект. Мы недавно писали о софт скиллах, которые помогают в ИТ, правда не на Хабре (https://vc.ru/hr/134808-soft-skilly-dlya-it-specialista-rasskazyvaem-na-palcah-i-zhiznennyh-primerah). Рекомендуем почитать на досуге. Параллельно прокачивайте критическое мышление оно не только в работе, но и в повседневной жизни очень полезно.

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

P.S. Мы публикуем наши статьи на нескольких площадках Рунета. Подписывайтесь на наши страницы в VK, FB, Instagram или Telegram-канал, чтобы узнавать обо всех наших публикациях и других новостях компании Maxilect.
Подробнее..

Нескучные инвестиции для гиков

02.08.2020 16:06:23 | Автор: admin

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


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


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


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


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


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




Дисклеймер. Статья из личного опыта автора: скомпилировано все прочитанное + опыт инвестиций. В опыт вошел коронавирусный кризис из которого автор вышел с увеличением портфеля в 2,5 раза. Это не учебник и нет никаких гарантий правильности выводов. Инвестиции чувствительная для всех нас область и мы должны принимать все решения полностью самостоятельно.


Манифест. Да-да, начнем с манифеста.


Цели манифеста


Должен вести к росту нашего портфеля на 100 и более % в год или, в случае неудачи, к росту на 5-10% в год на долгой перспективе.


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


Манифест гика-инвестора


  1. Инвестирование не самоцель и не главная работа. Это может быть прикольной игрой, но если нам нравится больше программировать, изучать мир и себя, то на это мы можем выделить ограниченное время. Например 2-3 часа по выходным. Или 15 минут каждый день. Whatever.
  2. Так как инвестирование касается чувствительных вопросов безопасности и базовых установок социального программирования, то любые удачи могут вести к раздуванию самомнения, а неудачи к нервам и самоуничижению. Поэтому мы заранее медитируем на две аксиомы:
    Никто не может предсказать рынок. Если мы рано продали или поздно купили, то это говорит о том, что у нас есть свое мнение и, что мы реализуем свое виденье. Все остальное побоку. Завидовать тем кто выиграл в лотерею или расстраиваться, что не выиграл заранее глупо.
  3. Свое ментальное состояние мы стабилизируем не только работой с умом, но и работой со стратегией. Мы не инвестируем больше 30% в рискованные активы ни при каких раскладах.
    Ежемесячно инвестируя 10% своего дохода мы не влияем на качество жизни, но создаем базовый оплот своего ментально-материального спокойствия и надежности.
  4. Мы не паримся про учет, экономию и т.п., мы просто безукоснительно выполняем пункт 3., а все остальное тратим на жизнь по собственному желанию.
  5. Мы инвестируем в реальный бизнес который нам нравится и который мы понимаем. Например, сравнивая nvidia и ibm я выберу nvidia. А boeing и ford даже не буду рассматривать. А кто-то поступит ровно наоборот.
  6. (рост 100% в год) Мы не читаем блоги и каналы разных аналитиков, мы читаем технические ресурсы и оцениваем будущее.
  7. (рост 100% в год) Мы не читаем экспертов ( или не верим им, или не расстраиваемся если поверили и надежды не оправдались). Мы смотрим технические каналы и читаем про свои штуки, которые нам и так нужны по стилю жизни. Мне интересно читать про новые процессоры и неинтересно про то, что происходит с золотом или нефтью. Я буду инвестировать в то, что мне интересно.
  8. (надежность) Семьдесят процентов мы инвестируем в акции, которые считаем по надежности выше, чем средний по мировым масштабам банк. Например, акции Apple надежнее сбербанка, дают примерно 2% годовых в долларах, растут примерно в 2 раза раз в 5-10 лет. Могут упасть на 10 лет, но потом скорее всего вырастут. Вероятность потери денег ниже, чем если держать их в любом российском банке или российкой недвижимости.
  9. (надежность) Мы не инвестируем в рублях.
  10. (надежность) Раз в неделю мы проверяем и обновляем страховки (стоп лоссы и т.п.). Это занимает 10 минут и дает нам гарантии безопасности на случай глобальных кризисов.

Практика


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


Итак, допустим я решил начать и у меня или есть Х денег + я хочу ежемесячно откладывать 10%.


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


Практика выбор брокера


Для покупки продажи акций нужен брокер.


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


Поэтому потихоньку я перевожу все активы к ним.


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


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


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


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


Ну и маленькие комиссии позволяют не париться про количество сделок.


Практика портфель


По манифесту, портфель разбит на 2 части.


Надежная часть 70% (на 01.06.2020)


Надежная часть следует пункту манифеста 8. (с учетом всех остальных пунктов)


Мой портфель надежной части по манифесту.


Apple 50%
Nvidia 20%


Почему Apple?


  • Они платят примерно 2% годовых.
  • Я разработчик iOS и я знаю, что Apple выпустит новый процессор для маков. Я знаю, что маки де факто стандарт для разработчиков и с новыми процами их доля будет еще расти.
  • Я знаю что Apple скоро запустит девайсы дополненной и виртуальной реальностей.
  • Поэтому я ожидаю рост в 2-3 раза за 5-10 лет + ежегодно 2% по акциям.

Почему nVidia?


  • Они платят примерно 1% годовых.
  • Я на них майнил :)
  • Машинное обучение.
  • Видеокарты и игровая индустрия.
  • (узнал уже на дату написания статьи после покупки) Делают решения для автономного вождения. Заключили контракт с мерседесом.

Почему не Intel, AMD, IBM, Microsoft?


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


Вот оно веселье! Рискованная часть (на 01.06.2020)


Рискованная часть следует пункту манифеста 7. (с учетом всех остальных пунктов)


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


Пример 1, доход 250% за 3 месяца.


Как приходят гипотезы, которые приносят 250% дохода на относительно коротких промежутках времени?


Личный пример. В мае, читая обзоры про intel, я увидел, что они купили Moovit для усиления своей системы автономного вождения Mobileye (которую тоже купили несколько лет назад за 13 млрд).


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


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


Поэтому я купил Nio на значительную для себя сумму.


Результат на 01.08.2020 акция выросла более чем в 2,5 раза и при последующем падении отработала страховка и она продалась. То есть, вложив, например, в акцию 10 000 долларов я получил бы 25 000 по итогу.


График акций NIO


И вот в этом я вижу интересные инвестиции. Когда мы просто изучая интересные нам вещи, попутно можем создавать подобные гипотезы.


Будущее


Также у меня есть гипотеза 2, которая отработала частично (увеличение в 2 раза). Мое предположение рост в 5-10 раз. Но, также весьма вероятно обратное падение или даже ниже чем было. Но иначе быстрый рост капитала вряд ли возможен. Полное описание гипотезы в канале.


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


Что значит гипотеза появляется сама?


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


Итог


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


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


Спасибо что дочитали! Эта статья написана за несколько часов, не судите строго.


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


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

Подробнее..

Категории

Последние комментарии

© 2006-2020, personeltest.ru