...

суббота, 26 ноября 2016 г.

CTFzone write-ups – Going 300, going 500, OSINT sold

image


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


Судя по количеству решенных заданий, данное направление оказалось довольно сложным и требовало проявления максимума изобретательности. Примечателен тот факт, что задание на 500 решили всего два человека, а с таском на 1000 справился только один участник. Поэтому в этой статье мы опубликуем решения только на два задания – на 300 и на 500 очков, а райтап на 1000 будет несколько позже в отдельном посте. Следите за обновлениями ;)



OSINT_300. Son of the Law


A.U.R.O.R.A.: Lieutenant, I have found a diary of your predecessor – Lieutenant Scott. He is back on Earth now so he won't notice us reading his memoirs. Do you want me to read it outloud? This part of Scott's diary is about Captain Picards’s friend.
Scott's memoirs. December 5, 2047.
"Seems like one of Captain Picards's friends has some problems with law and he needs a lawyer. There used to be one in the Earth Headquarters but he quit half a year ago and his contacts were deleted from the database. I have to find him but Captain remembers only his nickname – the01awson. Well, let’s see..".


Решение:


Итак, в этом задании, как и в OSINT_100, (которое, кстати, очень здорово описано вот в этом посте) надо снова кому-то помочь и кого-то найти. На сей раз это адрес электронной почты некоего господина. Поиск по "стандартным" соц.сетям ничего не давал, как и поиск в Google, даже при помощи всяких разных дорков и ухищрений. Это задание довольно долго не могли решить, поэтому мы решили вбросить хинт: "google --> username check".


image


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


image


Ура! На about.me все же есть страница пользователя с таким никнеймом.


image


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


image


Никакого репозитория тут нет, придется "дирбастить" в поисках нужной директории.


image


Ага, dirb нашел то, что мы искали. Следует заметить, что в биографии пользователя было слово "repo", и можно было бы найти репозиторий сразу. Но этот ход не очевиден ;) Перейдя по найденному пути, мы действительно видим очень большой репозиторий документов.


image


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


image


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


Ответ: ctfzone{theol@the01awson.me}.


P.S. Не все знают, что dead.letter — это особый (почти стандартный) файл, в котором хранится письмо, недоставленное (неотправленное) по тем или иным причинам. Такой файл можно найти на многих серверах, главное знать, где и как искать. Подробнее об этом файле можно прочитать вот тут.




OSINT_500. Elusive memory


A.U.R.O.R.A.: Lieutenant, it's time for another memoir. Are you ready? This part of Scott's diary is about Captain Picard's best friend.
Scott's memoirs. February 28, 2047.
"Captain Picard has just called me and asked for help. Captain's best friend is a speedcuber and he has something very significant for Captain Picard. His nickname is "pestovs". Unfortunately, nobody knows where to find him and Captain asks me to take matters in my own hands. The only clue he has given me is this link: http://ift.tt/2grBfte. Captain says that this link was in his best friend's favourites. Hopefully, it will be helpful.." I'm curious, what's behind this link?


Решение:


В этом задании мы ищем друга Капитана с никнеймом "pestovs". Стоит обратить внимание на то, что он спидкубер. Так же к заданию прилагается ссылочка на OwnCloud: http://ift.tt/2grBfte. Переходим по ссылке и обнаруживаем, что там требуется пароль.


image


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


Проверим, есть ли в телеграме пользователь с никнеймом "pestovs". Та-дам! Такой пользователь есть, он заходил несколько дней назад, и на его аватарке стоит кубик-рубика — помните, в задании говорилось, что он спидкубер?


image


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


image


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


image


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


image


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


image


Отлично! Мы спасены, у нас есть кредсы, и теперь мы постараемся попасть внутрь OwnCloud. Логин и пароль подошли, так что мы попадаем внутрь хранилища, которое не наполнено ничем интересным, разве что мемом с Марио, где сказано, что его принцесса снова не в этом замке. Но что это? В левом верхнем углу мы видим ID пользователя и его настоящее имя — Sergio Pestov. Вот и зацепка.


image


Больше ничего примечательного в хранилище нет. Все возможности урезаны, разве что можно поменять пароль, но он ежеминутно сбрасывается, и это нам ничего не дает. Приступим к поиску по найденному имени пользователя и попросим Гугл нам помочь. Находим ссылку на человека с таким же именем в Twitter Pics, но сразу из содержимого страницы видно, что это не он. Пробежимся по "стандартным" соц.сетям и попробуем найти человека с таким же именем. Удача настигает нас в твиттере — там есть пользователь с таким именем и у него всего 2 твита. В одном из них мы встречаем уже знакомого нам персонажа из игры про итальянского сантехника, который пытается спрятать от нас принцессу в замке. Кажется, мы на верном пути!


image


Всматриваемся во второй твит и видим между слов "битую" ссылку на bit.ly. Быстро чиним ссылку, переходим по ней и вуаля! — попадаем на хостинг картинок, где нас и ждет наш флаг.


Ответ: ctfzone{On3_PaSSworD_mAn}.


image


Один из разработчиков BI.ZONE: "Наблюдая за тем, как это задание решали мои коллеги, я понял, что самым трудным было понять то, что искать надо в телеграме. Большинство пользователей думают, что задания по OSINT/CI ограничиваются фейсбуком, линкедин, вк и твиттером. Причем такая ситуация случается не только на CTF, но и в жизни: "Да че там, погуглил, и все!". А ведь все не так просто.


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


В нашем чате вы спрашивали, какие еще есть CTF – у нас есть предложение получше. На https://tasks.bi.zone задания не только приближены к реальности, но и доступны вплоть до 15 декабря. Но лучше поторопиться ;)

Комментарии (0)

    Let's block ads! (Why?)

    Сказка о бэкенде, ruby и rails

    Security Week 47: закладки в Android, безопасность Wi-Fi, уязвимость NTP

    О том почему «открытые данные Сбербанка» это не открытые данные и что нам с этим делать

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


    Действительно ли Сбербанк совершил нечто невероятное? Рядовое ли это явление и является ли то что сделал Сбербанк сейчас открытыми данными? Вот о чем далее пойдет речь.


    В качестве вступления


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


    1-е официальное определение из закона 112-ФЗ (это поправки к 8-ФЗ)


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


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


    3-е из хартии открытых данных
    Open data is digital data that is made available with the technical and legal characteristics necessary for it to be freely used, reused, and redistributed by anyone, anytime, anywhere.
    или на сумбурном русском
    Открытые данные — это цифровые данные сделанные общедоступными с техническими и юридическими характеристиками обязательными для того чтобы они свободно использовались, использовались повторно и распространялись кем угодно, когда угодно и где угодно


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


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

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


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


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


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


    Пиар. Обязательства или Выгода


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


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


    Пиар

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


    Вопросы технологий и данных остаются в стороне. Вопросы посещаемости, медийного охвата, число статей с упоминанием — выходят на первое место.


    Живой пример — это портал открытых данных Москвы — власти города распространяют новости о публикациях даже если там размещен какой-нибудь бессмысленный набор данных из 28 строк.


    Обязательства

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


    Например, Центробанк собирает с банков формы отчетности и раскрывает в специальном разделе на сайте — это нормативно закрепленные обязательство банков и ЦБ.


    Другой пример — упоминавшийся выше 112-ФЗ и 8-ФЗ. Органы власти обязаны раскрывать базовые наборы данных и публикуют их именно как их обязательства за неисполнение которых они несут ответственность перед законом.


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


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


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


    Выгода

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


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


    Или почему Федеральное Казначейство распространяет вот уже много лет данные с портала госзакупок через FTP сервер (еще до историй с открытыми данными) — потому что это проще и дешевле при распространении базы данных необходимой сотням контрагентов в субъектах федерации.


    Какие-то компании организуют хакатоны и ищут себе сотрудников. Другие публикуют открытые данные для поддержания репутации в сообществе, как это делает Google в их Transparency Report


    Так что же Сбербанк?


    Если Вы снова посмотрите на раздел открытых данных Сбербанка, то обнаружите следующие особенности:


    Нет свободных лицензий

    Вместо свободы использования и распространения там только отказ от ответственности звучащий как


    Представленная информация — результат анализа данных ПАО Сбербанк, 4 квартал, 2016 год. Данные не являются управленческой, бухгалтерской, финансовой отчетностью. При использовании ссылок на указанную информацию упоминание ПАО Сбербанк обязательно. Не является рекламой.


    Что не имеет даже близкого отношения к свободным лицензиям


    Нет наборов данных

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


    Все данные, по факту, хранятся в 13 Javascript файлах начиная с http://ift.tt/2gr92CK и до http://ift.tt/2fjHcwa


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


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

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


    Продажа услуг и смешение с большими данными

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


    Выводы


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

    Комментарии (0)

      Let's block ads! (Why?)

      пятница, 25 ноября 2016 г.

      [Из песочницы] Поднимаем собственный репозиторий пакетов для Ubuntu (Debian)

      Что означает ноябрьское обновление Steam для инди-разработчиков?

      Привет!

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

      8 Ноября в Steam было представлено Steam Discovery Update 2.0. Главная страница поменяла структуру, у игроков стало больше возможностей получить рекомендации и многое другое было представлено в апдейте, новость о котором имеет говорящий за себя url Новый магазин 2016 (http://ift.tt/2ftrjAa)

      Изменился и порядок публикации игр. Рассмотрим ключевые для инди-разработчиков изменения:

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

      Факт: у вас есть около суток, чтобы набрать стартовую аудиторию из органики. Если не получится попасть в популярное – игра утонет в новинках за 2-3 дня.

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

      Факт: у вас не будет органического трафика, кроме стартового.

      3. Главная страница
      На главной странице появилось много новых разделов – она просто пестрит списками, рекомендациями и скидками. И даже если ваша игра показывается в одном из этих списков, надо понимать, что рядом с ней всегда ещё десятки баннеров.
      Факт: CTR показов на главной странице уменьшился.

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

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

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

      5. Отзывы
      Ещё до ноябрьского обновления валв изменили политику отзывов: от людей, получивших игру бесплатно (по ключу), отзывы перестали учитываться в общем рейтинге и вообще чтобы их увидеть пользователю нужно постараться – нажать какие-то кнопки, посмотреть какие-то списки, в общем никто этого делать не будет. Была история с публикацией списка игр, у которых после этого сильно в худшую сторону изменился рейтинг, с намёком на то, что он был получен не вполне честным путём.
      Однако сейчас у любого отзыва (даже на полученную бесплатно игру) есть шанс появится в самом большом баннере на главной странице у всех друзей игрока, который сделал этот отзыв. Хорошие новости, если у вас было 300 бета-тестеров и 40 из них захотели написать хорошее ревью.
      Факт: социальные взаимодействия в стиме – то, на что стоит обратить внимание.

      6. Кураторы
      Наравне с отзывами от друзей, в большом модном баннере на главной появляются последние рекомендации от кураторов. К сожалению, если просматривать список ТОП кураторов, то обнаружится, что половина из них делала последний обзор в сентябре 2014, часть из оставшихся – известные ютуберы, до которых достучаться довольно проблематично, другая часть делает обзоры только на игры про японских девочек (а ваша игра, как назло, про пластилиновых гомункулов), но все оставшиеся открыты для диалога!
      Факт: предложить написать обзор всем кураторам кажется хорошей идеей.

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

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

      Резюме
      Скорее всего, станет видно меньше шлака. Играм, на честном слове прошедшие гринлайт с расчётом продасться по 30 рублей за копию органике стима, отбив полтора месяца разработки, станет тяжело жить. Механика «чем больше игроков, тем больше продаж» должна работать сильнее, чем раньше. Другие выводы можете сделать сами.

      Спасибо за внимание!

      Комментарии (0)

        Let's block ads! (Why?)

        Релиз DataGrip 2016.3

        [Перевод] Стратегическое эссе Пола Грэма: Рефрагментация (часть 1)

        image

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

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

        Этими двумя силами были война (в основном вторая мировая) и рост крупных корпораций.

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

        Последствия второй мировой войны носили как экономический, так и социальный характер. С точки зрения экономики снизилась разница в доходах. Как и все современные вооруженные силы, американские военные структуры, в экономическом плане, играли роль социалиста: от каждого по возможностям, каждому по потребностям. В той или иной степени. Высокопоставленные военные деятели получают больше (как и всегда для членов социалистического общества, занимающих высокие посты), но то, что им причиталось, было четко регламентировано. Эффект выравнивания не ограничивался участниками военных действий, потому что экономика США тоже состояла «на службе». В период с 1942 по 1945 год размеры всех окладов определялись Национальным советом по труду в военной промышленности. Как и в случае с военными, было принято решение сделать оклад равным для всех. И эта атмосфера национальной стандартизации окладов настолько пропитала собой общество, что ее воздействие все еще можно ощутить спустя годы после окончания войны. [1]

        Никто даже и не предполагал, что у предпринимателей получится зарабатывать. Франклин Рузвельт отметил: «политика предотвратит появление «миллионеров, наживающихся на войне». Для воплощения данного плана, любое превышение прибыли компании над довоенным уровнем облагалось налогом в 85%. А когда то, что оставалось после выплаты налогов на прибыль компании, доходило до отдельных людей, то снова облагалось налогом по ставке 93%. [2]

        В социальном плане война должна была снизить колебания зарплат. Более 16 млн. людей из разных мест и различных условий собрали вместе, чтобы они вели в буквальном смысле унифицированный образ жизни. Норма обслуживания для мужчин, рожденных в начале 20-х годов, приблизилась к 80%. А работа во благо общей цели, часто в стрессовых ситуациях, еще больше сплотила их.

        Хоть для США вторая мировая, строго говоря, и длилась менее четырех лет, ее последствия обладали более длительным эффектом. Войны позволяют центральному правительству усилить свое влияние, а вторая мировая довела это до крайности. В США, как и во всех других странах-союзниках, федеральное правительство с трудом отказывалось от приобретенных им новых рычагов влияния. Конечно, в некотором отношении война закончилась не в 1945; враг только что переключился на Советский Союз. По налоговым ставкам, федеральной власти, оборонным затратам, призывной кампании, а также уровню национализма, даже десятилетия спустя после окончания войны ситуация больше напоминала военный, нежели довоенный, период. [3] Также продолжал действовать и социальный эффект. Ребенок, которого вытащили прямо из стада мулов в Западной Вирджинии и засунули в армию, уже не мог просто вернуться на ферму. Его поджидало кое-что еще, что-то, сильно напоминающее армию.

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

        XX век был веком крупных, национальных корпораций: General Electric, General Foods, General Motors. События в сфере финансов, коммуникаций, транспорта и производства дали толчок к появлению нового типа компаний, чьей целью было, прежде всего, увеличение масштабов производства. Первую версию такого мира можно было сравнить с Lego Duplo, т.к. он состоял из очень крупных, массивных блоков, где существует всего несколько крупных фирм, у каждой из которых приличная доля в рынке сбыта. [5]

        На рубеже XIX и XX веков получил свое развитие процесс консолидации, основанный, в основном, Джоном Морганом (J. P. Morgan). Тысячи компаний, возглавляемых своими основателями, были объединены в пару сотен гигантских структур под управлением профессиональных менеджеров. Тогда всем заправляла экстенсивная экономика. В то время людям казалось, что это было конечной стадией развития событий. В 1880 Джон Рокфеллер объявил, что день объединения настал. Индивидуализм ушел, и не вернется никогда. Он ошибался, но в течение последующей сотни лет никто не ставил под сомнение его слова.

        Консолидация началась в конце XIX века и продолжалась большую часть ХХ века. К концу второй мировой, как писал Майкл Линд (Michael Lind), «главные экономические секторы либо выступали как картели с правительственной поддержкой, либо контролировались несколькими корпорациями-олигополистами».

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

        Хорошо иллюстрирует данную ситуацию то, что творилось на телевидении, где было только 3 варианта: NBC, CBS, и ABC. Ну и еще общественные каналы для интеллектуалов и заядлых коммунистов. Программы, предлагаемые этими тремя каналами, было сложно отличить друг от друга. На самом деле, давление шло с трех сторон. Если бы одна передача попыталась показать что-то незаурядное, местные филиалы традиционного рынка вынудили бы ее создателей прекратить это дело. Плюс ко всему, в связи с тем, что телевидение было удовольствием не из дешевых, семьи смотрели одни и те же передачи в полном составе, поэтому они (передачи) должны подходить всем.

        Но информация не только подавалась всем в одинаковом виде, но и в одно время. Сейчас это сложно представить, но каждую ночь десятки миллионов семей садились перед телевизором, и смотрели то же самое шоу, в то же самое время, что и их соседи. То, что сейчас происходит во время финальных матчей Суперкубка (Super Bowl), тогда происходило каждый вечер. Мы в буквальном смысле были синхронизированы. [6]

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

        Я знаю, насколько пропитывающей была общепринятая культура, потому что я пытался отстраниться от нее, и было практически невозможно найти альтернативу. Когда мне было 13, я осознал, больше исходя из собственных рассуждений, чем из каких-либо внешних источников, что все те идеи, которыми нас кормят по ТВ, попросту чушь собачья, и я перестал смотреть телевизор. [7] Но дело было не только в нем. Казалось, что все вокруг меня было сущей ересью. Все политики говорят одно и то же, бренды создают практически идентичную продукцию, налепляя разные этикетки, чтобы выделиться, дома с деревянным балочным каркасом, являющие собой примеры псевдоколониального архитектурного стиля, автомобили с метрами бесплатных металлических полос на каждой стороне, которые начинали отваливаться спустя 2 года, «красные спелые» яблоки, которые хоть и были красными, но только назывались яблоками. Оглядываясь в прошлое, все это и было чепухой. [8]

        Но когда я продолжил поиски альтернатив, чтобы заполнить пустоту, мне практически ничего не удалось найти. Тогда не было сети Интернет. Единственным местом поиска была сеть книжных магазинов в местном торговом центре. [9] Там я нашел выпуск журнала The Atlantic. Жаль, что я не могу сказать, что это стало окном в новый мир, а напротив, оказалось делом скучным и малопонятным. Словно ребенок, впервые попробовавший виски и делающий вид, будто ему понравилось, я трепетно хранил этот журнал, словно книгу. Уверен, он до сих пор где-то у меня лежит. Но, хотя и было очевидно, что где-то существует мир без спелых красных плодов, мне так и не удалось познакомиться с ним до поступления в колледж.

        Крупные фирмы не только сделали из нас идентичных потребителей, они превратили нас и в одинаковых работников. Внутри компаний находятся мощные силы, вынуждающие людей действовать в соответствии с единой моделью поведения. Особенно IBM была этим известна, но она впадала в крайности всего чуть-чуть по сравнению с другими крупными «игроками» на рынке. А модели поведения в разных корпорациях не особо отличались, подразумевая, что от каждого в этом мире ждут, что он будет более или менее похож на других. И не только от тех, что связаны с корпоративной сферой, но также и от всех, кто стремится в нее попасть, что, в середине ХХ века, включало в основном людей, уже покинувших ее территорию. Большую часть ХХ века люди рабочего класса упорно старались походить на средний класс. Это видно на старых фотографиях. Мало кто в 1950 году старался выглядеть рисково.

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

        Наряду с гигантскими национальными компаниями, нам достались крупные национальные профсоюзы. А в середине ХХ века корпорации заключали сделки с теми профсоюзами, в которых они выплачивали заработные платы выше рыночных показателей. Частично из-за того, что союзы являлись монополистами. [10] И частично из-за того, что, являясь частью системы олигополии, корпорации знали, что можно спокойно перенести затраты на своих покупателей, т.к. их соперникам пришлось бы сделать то же самое. А также, отчасти из-за того, что в 50-е годы большинство крупных фирм все еще были сконцентрированы на поиске новых способов выжать максимум из экстенсивной экономики. Прямо как в ситуации, когда стартапы исправно доплачивают AWS сверх стоимости поддержки своих серверов, что позволяет им сфокусироваться на своем развитии. Многие крупные государственные корпорации предпочли бы побольше доплачивать за труд. [11]

        Наряду с поднятием уровня доходов с нижней границы из-за переплат профсоюзам, крупные фирмы ХХ века также снижали доходы в вышестоящих кругах, недоплачивая своим топ-менеджерам. В 1967 году экономист Гелбрейт (J. K. Galbraith) писал, что «Всего было несколько компаний, в которых предложили бы поддерживать зарплаты руководителей на максимальном уровне». [12]

        В некотором роде это была иллюзия. Большая часть фактических выплат руководству никогда не отражалась в налоговых декларациях о доходах, т.к. она была представлена в виде льгот. Чем выше ставка подоходного налога, тем больше вынуждены были платить вышестоящим сотрудникам по ранее указанной статье расходов. (В Великобритании, где налоги были еще выше, чем в США, фирмы даже оплачивали обучение детей работников в частных школах.) Самым ценным, что предоставляли своим подчиненным крупные фирмы середины ХХ века, была гарантия занятости, что также не отражалось ни в налоговых декларациях, ни в статистике по доходам. Таким образом, сама суть найма в этих организациях привела к ошибочно заниженным показателям экономического неравенства. Но, даже учитывая все вышесказанное, труд своих лучших работников крупные фирмы оплачивали ниже рыночного уровня. Рынка, как такового, тогда не было и подразумевалось, что вы будете десятилетиями, если не всю жизнь, работать на одну и ту же компанию. [13]

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

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

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

        К 1970 году, все продолжали удивляться, откуда вообще взялись эти крупные престижные фирмы. Казалось, что они существовали всегда, как химические элементы. И действительно, между честолюбивыми детьми ХХ века и основателями крупных компаний существовала разница. Многие крупные фирмы были своего рода «самоделками», у которых не было определенных основателей. А когда таковые появлялись, то они отличались от нас. Почти ни у кого из них не было образования в том смысле, что они не учились в колледжах. Таких людей Шекспир называл грубыми ремесленниками. Колледж учил быть членом общества специалистов. И никто не думал, что выпускники начнут выполнять какую-то грязную черную работу как Эндрю Карнеги или Генри Форд. [15]

        А в ХХ веке количество выпускников колледжей становилось все больше и больше. Их число возросло с примерно 2% от населения 1900 года до почти 25% в 2000. В 50-х годах в ходе слияния двух наших мощных лагерей стал закон GI Bill, в соответствии с которым 2.2 млн человек, служивших во время второй мировой войны, отправили учиться в колледж. Мало кто воспринимал это в таком ключе, но в результате попыток придать колледжу каноничный образ возникает мир, в котором было вполне приемлемо работать на Генри Форда, но не быть как он. [16]

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

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

        Если представить Моргана как ось х, то Генри Форд будет осью y. Он все хотел делать самостоятельно. На вход гигантского завода, который он построил на River Rouge в период с 1917 по 1928, в буквальном смысле поступала железная руда, а на выходе получались автомобили. Там работало 100 000 людей. В те времена именно так выглядело будущее. Но автомобильные компании сегодня функционируют совсем иначе. Теперь огромная часть проектных и производственных процессов происходит внутри длинной логистической цепи, результаты работ которой автокомпании в конечном счете собирают и продают. Причина, по которой автоконцерны действуют именно так, кроется в том, что при таком сценарии все работает лучше. Каждая фирма в логистической цепи фокусируется на том, что она знает лучше всего. И каждая из этих фирм должна хорошо выполнять свою работу, иначе ей просто найдут замену.

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

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

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

        Продолжение следует
        (Кто хочет помочь с переводом второй части — пишите в личку.)

        Примечания


        [1] Лестер Туроу (Lester Thurow), в своих записях 1975 года, говорил, что разница в оплате труда, преобладающая в конце второй мировой войны, была настолько «вмурована» в систему, что «воспринималась как «обоснованная» даже после того, как уравнительное давление второй мировой войны прекратилось. В принципе, та же самая разница в оплате труда сохранилась и по сей день, спустя 30 лет». Но Клаудия Голдин и Роберт Марго полагают, что рыночные отношения в послевоенный период также способствовали сохранению тенденции к сокращению заработных выплат, как и во время военный действий, когда специально повысили спрос на неквалифицированных и увеличили переизбыток образованных работников.

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

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

        После войны федеральные налоговые поступления в процентном соотношении от ВВП держались на том же уровне, что и сегодня. В действительности, на протяжении всего периода с начала войны объем налоговых поступлений оставался близким к 18% от ВВП, несмотря на значительные изменения налоговых ставок. Наименьшая сумма выплат произошла тогда, когда ставки подоходного налога были самыми высокими: 14.1% в 1950 году. С такими данными сложно не прийти к выводу, что налоговые ставки почти не влияли на фактические выплаты гражданами.

        [3] Хотя, на самом деле, за 10 лет до войны была эпоха неограниченной власти в ответ на Великую депрессию. И это не просто совпадение, т.к. Великая депрессия являлась одной из причин войны. Во многих смыслах «Новый курс» был своего рода генеральной репетицией перед мерами, которые предприняли федеральные власти в военный период. Хотя, версии (этих мер) военного периода были гораздо радикальнее и оказали большее влияние. Как писал Энтони Бэджер, «для многих американцев значительные изменения в их жизни произошли не во время действия «Нового курса», а во время второй мировой войны».

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

        [5] Точнее экономика основывалась на двух вершинах. Выражаясь словами Гэлбрейта (Galbraith), это был «мир динамично развивающихся технически, максимально нацеленных на выгоду высокоорганизованных корпораций, с одной стороны, и сотни тысяч мелких фирм и собственников в традиционном понимании с другой». Деньги, престиж и власть были сконцентрированы у первых, и говорить о равных возможностях не приходилось.

        [6] Интересно, насколько впоследствии снизилось количество семей, обедающих вместе, из-за уменьшения количества семей, смотрящих вместе телевизор.

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

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

        [9] Торговый центр Monroeville Mall по завершению строительства в 1969 был самым крупным в стране. В конце 1970-х годов там снимали фильм «Рассвет мертвецов» (Dawn of the Dead). Конечно, магазин был не только съемочной площадкой, но и вдохновил на написание сценария к фильму, т.к. толпы покупателей, разгуливающих по огромному зданию центра, напомнали режиссеру Джорджу Ромеро зомби. А я на своей первой работе стоял на раздаче мороженого в «Баскин Роббинс».

        Январь 2016

        Перевод: Щекотова Яна

        Комментарии (0)

          Let's block ads! (Why?)

          Как мы придумали и сделали свою первую игру на Android. Часть 2: Уровни

          Как стать продакт-менеджером. Часть 1

          В этом блоге мы много пишем про разработку и продвижение приложений. Настало время для взгляда с другой стороны. В середине ноября наши друзья из Sports.ru запустили курс по продакт-менеджменту мобильных приложений. Среди лекторов – сотрудники Sports.ru, AppFollow, Aviasales, Uber и другие классные ребята. Весь декабрь студент курса kirillkobelev будет рассказывать, как проходит обучение и что же нужно знать юному продакт-менеджеру, чтобы создать лучшее мобильное приложение. Передаем слово автору:

          «Проджект-менеджер – это тот, кому больше всех надо» (народная мудрость)

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

          После десяти лет работы проджект-менеджером я придумал, что для родителей я «организатор» (полшага от массовика-затейника). А потом сменил работу, и снова начал мучительный поиск формулировки. Конечно, спасает фраза, вынесенная в эпиграф, но сейчас у меня большие надежды на интенсив Product Degree. Это почти некоммерческий проект, в модном формате обмена опытом между первыми среди равных. Натурально — 12 лекций об управлении мобильными продуктами читают спикеры в диапазоне от визионера-ньюбиза до инвестора. Каждое занятие длится 3 часа, и еще не хватает. Product Degree ставит перед собой, извините за штамп, амбициозную цель — дать нам возможность попробовать себя в новой роли и задуматься о том, чтобы в ней остаться. В ближайших шести статьях я расскажу все, что узнаю о продакт-менеджерах, – такие знания должны быть доступными. Текста будет много, картинок мало.

          Лекция первая. Зачем нужны продакт-менеджеры?


          Лекцию вел Михаил Калашников, продакт-менеджер Sports.ru и создатель блога Mediaskunk. Если вам лень читать текст ниже и хочется разобраться во всем самостоятельно – вот презентация Михаила.

          Запускать продукт нужно, пока за него еще немного стыдно


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

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

          Есть классическая схема «четырех пэ»:

          • Product,
          • Price,
          • Place,
          • Promotion.

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

          … и где они обитают?


          Про Толстого (а иногда Достоевского) ходит байка, что на первой же странице рукописей, принесенных ему молодыми творцами он писал красным (!) карандашом (!!) единственное слово: «Зачем?».

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

          За себя и за того парня


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

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

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

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

          Step by step (пока от монитора не ослеп ;)


          Если вы уже были менеджером (то есть руководителем, а не просто жертвой косноязычности отдела кадров), вы, возможно, сталкивались с необходимостью правильной постановки задач. Это важно для продакт-менеджера – ему приходится все придумывать самому. Примерный путь работы с продуктом можно описать так:
          1. Гипотезы. Что будет, если сделать А и В? А если не сделать? Правильно сформулированная гипотеза задает верное направление всему процессу.
          2. Постановка задач. Мало самому понять, что нужно, необходимо еще смочь объяснить это команде, притом каждому на его языке и по нескольку раз. Вероятно, вы сто раз объясните, уже и сами поймете, а дизайнер (разраб, тестировщик, инвестор) опять нет.
          3. Выставление приоритетов. Это как в хорошей игре: нужно правильно выбирать, что прокачивать, — только без сохранений.
          4. Коммуникация. Я уже говорил про важность общения — и еще скажу.
          5. Исследование. Гипотеза должна строиться на накопленных данных. Запомните, вы не ваша целевая аудитория, какими бы обманчиво близкими вам ни казались ее параметры. Редкий продукт делается «для своих», да и своих мы знаем хуже, чем кажется.
          6. Тестирование и адаптация. Мало что бывает сделано так, как изначально задумано.
          7. Обратная связь. Помните, я обещал вернуться к теме общения?

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

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

          1. для кого ваш продукт?
          2. какую боль он снимает? (вульгарный, но меткий американизм).
          3. когда им пользоваться?
          4. как люди узнают об этом продукте?
          5. чем он отличается от аналогов? Серьезно, не пропускайте этот пункт.
          6. кто платит?

          Отвечая хотя бы мысленно на эти вопросы, вы можете двигаться по одному из двух путей:
          — minimal viable product (минимальный возможный продукт),
          — minimal desirable product (минимальный желаемый продукт).

          Лекция вторая. Дизайн мобильных интерфейсов.


          Лекцию читала Мария Михальчук, продакт-дизайнер в Kixx.

          Сначала было слово


          И пусть это слово будет кратким и ясным, и опишет базовые пользовательские сценарии так, чтобы все 12 колен (и Разрабманы, и Тестировичи) вас поняли однозначно. Это, конечно, неловкая шовинистская шутка, но серьезно — пользовательские истории «рулят». Придумайте конкретного пользователя Гошу, и пусть вся его жизнь сводится к взаимодействию с вашим продуктом.

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

          Футбол, политика и дизайн


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

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

          Еще один важный момент – существование пользовательских сценариев во времени. Задумайтесь, кто ваш примерный Гоша:

          • спринтер (есть конкретная цель, мало времени – ему нужны монофункциональные приложения)
          • стайер (есть абстрактная цель, а времени много – ему подойдут новости, соцмедиа и тому подобное).

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

          А судьи кто?


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

          Android использует material design с небольшой глубиной пространства, простыми геометрическими формами и активным использованием floating action button. Вопреки распространенному мнению, приложения на нем не обязательно должны быть выполнены в кислотной палитре, можно сделать и в спокойной гамме. iOS много внимания уделяет глубине пространства, контенту, простоте, анимации. В последних версиях активно используют размытие. Снова даем бой стереотипам – не обязательно делать iOS-приложение в стиле светлого минимализма. Скрытый бонус – приложения, следующие платформенным стандартам дизайна, охотнее продвигаются самими сторами.

          Re: Re: Re: Re: Re: The last & final design v121.3


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

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

          Подумайте, в частности, вот над чем:

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

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

          Что еще важно учесть, или Третий полезный список


          Постоянно помните про образцового Гошу. После проработки основных и второстепенных экранов можно заняться пустыми экранами, вводными экранами, эмоциональным вовлечением пользователя, реферами социальных медиа, call-to-action-элементами.
          • Пустые экраны (Empty states). Экраны без данных тоже важны: они должны сообщить, что данных нет, дать возможность это исправить, предложить другие пути.
          • Микровзаимодействие и отклики интерфейса. Отклик описывает взаимодействие пользователя с приложением: подумайте о кликах, подтверждениях нажатия, подтверждении инициации действия.
          • Анимация должна быть ненавязчивой, скромной, стильной. Важно помнить про стилистику продукта и бренда.
          • Обязательно нужно проработать экраны ошибок. Показывать их необходимо сразу, сообщение должно быть простым и рассказывать о следующих шагах. Важно, чтобы пользователь продолжал чувствовать себя комфортно.
          • Упрощение взаимодействия. Используйте автозаполнение и подсказки. Раскладка должна соответствовать типам данным. Валидация должна происходить в реальном времени. Элементы управления не должны перекрывать содержимое приложения.

          Заключение


          Помните, продакт-менеджер представляет интересы пользователя. Ему необходимо держать в голове все сказанное выше, но при этом все равно готовиться к худшему. На этой радостной ноте, пожалуй, я возьму паузу и пообещаю вознаграждение: в следующий раз я попробую пересказать длинное и бессвязное выступление директора по продажам компании Aviasales (так оно и было нам анонсировано) – потому что «все, что угодно, можно упростить в два раза».

          Спасибо образовательному проекту Product Degree и лично Марку Тену, а также добрякам из Appodeal, пустившим меня в свой блог. Еще увидимся.

          Комментарии (0)

            Let's block ads! (Why?)

            Linux WiFi из командной строки с wpa_supplicant

            В этой статье я расскажу, как можно настроить WiFi с помощью wpa_supplicant, без всяких Xorg/X11 утилит. Это необходимо для того, чтобы базовые службы ОС исправно работали с минимальным набором технических средств удаленного доступа. Программа будет исполняться как служба, настройки сделаны правкой конфиг файлов.


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


            [root@home ~]$ wpa_cli
            > add_network
            > set_network 0 ssid "MYSSID"
            > set_network 0 key_mgmt NONE
            > enable_network 0
            

            Если же надо всерьез и надолго, то прошу внутрь.


            Общие сведения о wpa_supplicant


            Что из себя представляет wpa_supplicant?


            • Кросс-платформенная открытая реализация стандарта IEEE 802.11 для Linux, *BSD, Windows, Mac OS X и прочих систем.
            • Полная поддержка WPA2, WPA и более старых протоколов безопасности беспроводной LAN сети.
            • Приложение пользовательского пространства, выполняющее функции саппликанта и SME оператора, исполняющего MLME инструкции.

            Wpa_supplicant поддерживает


            • WPA и полностью IEEE 802.11i/RSN/WPA2.
            • WPA-PSK и WPA2-PSK (pre-shared key) ("WPA-Personal").
            • WPA вместе с EAP (т.е., сервером аутентификации RADIUS) ("WPA-Enterprise") управление ключами CCMP, TKIP, WEP (104/128 и 40/64 бит).
            • Кэширование RSN, PMKSA: предварительную аутентификацию.




            Как wpa_supplicant устанавливает связь с точкой доступа?


            • Cетевой интерфейс должен исправно функционировать с установленным драйвером, прежде чем wpa_supplicant запустится.
            • Wpa_supplicant запрашивает драйвер ядра сканировать доступные Basic Service Set (BSS).
            • Wpa_supplicant производит выбор BSS в соответствии с настройками.
            • Wpa_supplicant запрашивает драйвер ядра установить соединение с выбранной BSS.
            • Для WPA-EAP: аутентификацию EAP производит встроенный IEEE 802.1X Supplicant, либо же внешний Xsupplicant с сервером аутентификации.
            • Для WPA-EAP: получен мастер-ключ от IEEE 802.1X Supplicant.
            • Для WPA-PSK wpa_supplicant использует пароль PSK в качестве мастер-ключа сессии.
            • Wpa_supplicant производит с аутентификатором точки доступа 4-х этапное согласование[1] и групповое согласование ключей.
            • Wpa_supplicant производит шифрование однонаправленных и широковещательных пакетов[2], после чего начинается обычный обмен данными.

            Главный и большой плюс wpa_supplicant — его юниксвейность, то есть соответствие принципу Unix Way, когда программа делает что-то одно, но делает это хорошо. В каком-то смысле wpa_supplicant также Gentoo Way. Она требует некоторого внимания и терпения вначале, но затем о ней можно напрочь забыть. После того как программа настроена и пущена в дело, она полностью выпадает из потока событий, превращаясь в пару строк из ps -ef. Она не сверкает и не мигает в системном трее, не оповещает о разведанных, подключенных и отключенных беспроводных сетях. Ее просто нет, пока вы сами ее не поищите.


            Из минусов — сложность настройки и конфигурации. Много возни по сравнению с тырк-тырк-тырк в окне Network Manager, не говоря уже о WiFi подключении с любого Андроид устройства. Если вы собираетесь в поездку с Linux ноутбуком, то наверняка предпочтете более дружественный фронтенд настройки беспроводной сети, чтобы быстро подключаться к бесплатным точкам доступа WiFi в аэропорту, гостинице или в рабочей обстановке. Для домашнего же беспроводного интернета — самое то.


            Установка


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


            (5:562)$ equery uses wpa_supplicant
            [ Legend : U - final flag setting for installation]
            [        : I - package is installed with flag     ]
            [ Colors : set, unset                             ]
             * Found these USE flags for net-wireless/wpa_supplicant-2.6:
             U I
             - - ap                 : Add support for access point mode
             + + dbus               : Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc)
             - - eap-sim            : Add support for EAP-SIM authentication algorithm
             - - fasteap            : Add support for FAST-EAP authentication algorithm
             - - gnutls             : Add support for net-libs/gnutls (TLS 1.0 and SSL 3.0 support)
             + + hs2-0              : Add support for 802.11u and Passpoint for HotSpot 2.0
             - - p2p                : Add support for Wi-Fi Direct mode
             - - qt4                : Add support for the Qt GUI/Application Toolkit version 4.x
             - - qt5                : Add support for the Qt 5 application and UI framework
             + + readline           : Enable support for libreadline, a GNU line-editing library that almost everyone wants
             - - smartcard          : Add support for smartcards
             + + ssl                : Add support for Secure Socket Layer connections
             - - tdls               : Add support for Tunneled Direct Link Setup (802.11z)
             - - uncommon-eap-types : Add support for GPSK, SAKE, GPSK_SHA256, IKEV2 and EKE
             - - wps                : Add support for Wi-Fi Protected Setup
            

            Устанавливаем.


            • emerge -av wpa_supplicant #Gentoo
            • aptiture install wpasupplicant #Debian
            • yum install wpa_supplicant #Redhat
            • pacman -S wpa_supplicant #Arch

            Подключение без конфиг файла


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


            Пример для открытой сети был показан в самом начале. Для закрытой WPA сети быстрое подключение выгладит так:


            В начале надо запустить саму программу wpa_supplicant и сопутствующую wpa_cli.


            [root@home ~]$ wpa_supplicant -Dnl80211 -iwlan0 -C/var/run -u &
            [root@home ~]$ wpa_cli -p/var/run
            

            Затем настройка из интерактивного интерфейса wpa_cli.


            > add_network
            > set_network 0 ssid "name of AP"
            > set_network 0 key_mgmt WPA-PSK
            > set_network 0 pairwise TKIP
            > set_network 0 psk "key"
            > enable_network 0
            

            Для закрытой WPA2 сети:


            > add_network
            > set_network 0 ssid "name of AP"
            > set_network 0 key_mgmt WPA-PSK
            > set_network 0 pairwise CCMP
            > set_network 0 psk "key"
            > enable_network 0
            

            В конце необходимо вручную запустить демон DHCP.


            [root@home ~]$ dhcpcd wlan0
            

            Подключение к Ad-Hoc сети


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


            > add_network
            > set_network 0 ssid "adhoc-ssid"
            > set_network 0 mode 1
            > set_network 0 frequency 2412
            > set_network 0 key_mgmt NONE
            > enable_network 0
            

            То же самое с помощью iw.


            > iw dev wlan0 del
            > iw phy phy0 interface add wlan0 type ibss
            > ifconfig wlan0 up
            > iw dev wlan0 scan                                            
            > iw dev wlan0 ibss join AdHocNetworkName 2412 
            

            Настройка для домашней сети


            Теперь самое интересное — настройка. Этот процесс задокументирован для Arch Wiki, Debian Wiki и Gentoo Wiki, но всех деталей там естественно нет.


            Программа обычно ставится в директорию /etc/wpa_supplicant/, и наша задача — правильно настроить конфигурационный файл wpa_supplicant.conf, и привязать его к автозапуску беспроводного сетевого интерфейса.


            Начнем с wpa_supplicant.conf. Если вы подключаетесь из дома к WPA/WPA2, то скорее всего используете пароль для WiFi соединения, что соответствует режиму WPA-PSK ("WPA-Personal"). Мы не будет рассматривать варианты с WEP шифрованием, так как оно ненамного лучше открытой сети.


            Возьмем типовой конфиг из документации. Например такой.


            ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
            #
            # home network; allow all valid ciphers
                network={
                ssid="home"
                scan_ssid=1
                key_mgmt=WPA-PSK
                psk="very secret passphrase"
             }
            

            Первая строка необходима, без ctrl_interface программа даже не запустится. GROUP=wheel нужно для того, чтобы запускать из под обычного пользователя в графическом интерфейсе wpa_gui, но это не наш путь. Поэтому меняем на рутовый GROUP=0.


            ctrl_interface_group=0
            ctrl_interface=/var/run/wpa_supplicant
            ap_scan=1
            

            Каждой сети в файле настроек должен соответствовать блок network {}. Покопавшись в исходниках, обнаружил нашел годное писание переменной ap_scan в файле config.h, а в мануале и руководстве пользователя ее описание очень скудное.


            ap_scan=0 #драйвер сканирует точку доступа
            ap_scan=1 #wpa_supplicant сканирует точку доступа, используется по-умолчанию
            ap_scan=2 #как 0, но еще учитывает политики безопасности и SSID, работает с ndiswrapper
            

            Полное описание

            ap_scan — AP scanning/selection


            By default, wpa_supplicant requests driver to perform AP scanning and then uses the scan results to select a suitable AP. Another alternative is to allow the driver to take care of AP scanning and selection and use wpa_supplicant just to process EAPOL frames based on IEEE 802.11 association information from the driver.


            1: wpa_supplicant initiates scanning and AP selection (default).
            0: Driver takes care of scanning, AP selection, and IEEE 802.11 association parameters (e.g., WPA IE generation); this mode can also be used with non-WPA drivers when using IEEE 802.1X mode;
            do not try to associate with APs (i.e., external program needs to control association). This mode must also be used when using wired Ethernet drivers.


            2: like 0, but associate with APs using security policy and SSID (but not BSSID); this can be used, e.g., with ndiswrapper and NDIS drivers to enable operation with hidden SSIDs and optimized roaming;
            in this mode, the network blocks in the configuration are tried one by one until the driver reports successful association; each network block should have explicit security policy (i.e., only one
            option in the lists) for key_mgmt, pairwise, group, proto variables.


            Note: ap_scan=2 should not be used with the nl80211 driver interface (the current Linux interface). ap_scan=1 is optimized work working with nl80211. For finding networks using hidden SSID, scan_ssid=1 in the network block can be used with nl80211.


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


            • bssid — The Basic Service Set Identifier (BSSID), физический адрес точки доступа.
            • key_mgmt — Протоколы аутентификации.
            • pairwise — Для WPA2 укажите CCMP, а для WPA — TKIP.
            • proto — WPA/WPA2.
            • psk — Хэш пароля PreShared Key.

            руководство по настройкам

            group: list of accepted group (broadcast/multicast) ciphers for WPA
            CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
            TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
            WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key
            WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key [IEEE 802.11]
            If not set, this defaults to: CCMP TKIP WEP104 WEP40


            pairwise: list of accepted pairwise (unicast) ciphers for WPA
            CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
            TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
            NONE = Use only Group Keys (deprecated, should not be included if APs support pairwise keys)


            proto: list of accepted protocols
            WPA = WPA/IEEE 802.11i/D3.0
            RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN)
            If not set, this defaults to: WPA RSN


            key_mgmt: list of accepted authenticated key management protocols
            WPA-PSK = WPA pre-shared key (this requires 'psk' field)
            WPA-EAP = WPA using EAP authentication (this can use an external program, e.g., Xsupplicant, for IEEE 802.1X EAP Authentication
            IEEE8021X = IEEE 802.1X using EAP authentication and (optionally) dynamically generated WEP keys
            NONE = WPA is not used; plaintext or static WEP could be used
            If not set, this defaults to: WPA-PSK WPA-EAP


            Создаем хэш пароля для psk:


            $ wpa_passphrase MYSSID passphrase
            

            Все готово, чтобы создать конфиг сети. Итоговый файл должен выглядеть как-то так.


            ctrl_interface_group=0
            ap_scan=1
            ctrl_interface=/var/run/wpa_supplicant
            network={
                proto=WPA2
                pairwise=CCMP
                key_mgmt=WPA-PSK
                priority=5
                ssid="MYSSID"
                bssid=44:b0:51:dc:ba:f8
                psk=ce55977186ae1df2dffeb571acee8dacd92f49edddbdef53623132e3c24567ae
            }
            

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


            [root@home ~]$ iwlist <wlan_interface> scan
            

            Команда iwlist из набора Wireless Tools устарела, вместо нее сейчас iw.


            [root@home ~]$ iw dev <wlan_interface> scan
            

            Настройка 802.1X для офиса


            Стандарт IEEE 802.1X определяет более строгую модель подключения к WiFi сети. Вместо psk пароля необходимо предъявить серверный сертификат.


            • ca_cert — Абсолютный путь к CA-сертификату в формате PEM или DER, необходим для возможности подтверждения сертификата сервера.
            • ca_path — Абсолютный путь к директории, где хранятся файлы CA-сертификатов (в формате PEM), которые вы хотите добавить в список доверенных.
            • client_cert — Абсолютный путь к клиентскому сертификату в формате PEM или DER.
            • eap — Разделенный пробелами список поддерживаемых методов EAP: MD5, MSCHAPV2, OTP, GTC, TLS, PEAP, или TTLS.
            • identity — Идентификации EAP, например имя пользователя.
            • password — Пароль EAP.

            Так может выглядеть блок, настроенный для подключения к сети в режиме WPA-Enterprise с аутентификацией 802.1X PEAP, в котором требуется ввод данных учетной записи пользователя:


            network = {
            ssid="Company WPA2 EAP"
            key_mgmt=WPA-EAP
            pairwise=TKIP
            group=TKIP
            eap=PEAP
            identity="username@domain"
            password="your_passphrase"
            ca_cert="/etc/cert/ca.pem"
            phase1="peapver=0"
            phase2="MSCHAPV2"
            }
            

            А это пример блока, настроенного для подключения к сети в режиме WPA-Enterprise с аутентификацией 802.1X EAP-TLS, в котором требуются серверный и клиентский сертификаты:


            network = {
            ssid="Company WPA2 TLS"
            key_mgmt=WPA-EAP
            pairwise=CCMP
            group=CCMP
            eap=TLS
            ca_cert="/etc/cert/ca.pem"
            private_key="/etc/cert/privkey.p12"
            private_key_passwd="your_passphrase PKCS#12"
            }
            

            Привязка wpa_supplicant к сетевой карте


            Для Gentoo Linux надо добавить 2 строки в /etc/conf.d/net.


            modules=( "wpa_supplicant" )
            wpa_supplicant_wlan0="-Dnl80211"
            

            Список поддерживаемых -D<driver> драйверов. Для современных чипов и версий ядра подойдет nl80211. На старом железе может взлететь wext.


            • nl80211 — New driver.
            • wext — Linux wireless extensions (generic).
            • wired — wpa_supplicant wired Ethernet driver.
            • roboswitch — wpa_supplicant Broadcom switch driver.
            • bsd — BSD 802.11 support (Atheros, etc.).
            • ndis — Windows NDIS driver.

            Сетевая карта wlan0 должна быть залинкована с lo0.


            lrwxrwxrwx 1 root root 6 ноя 29  2014 /etc/init.d/net.wlan0 -> net.lo
            

            Следует также добавить wpa_supplicant в автозапуск.


             [root@home ~]$ rc-update add wpa_supplicant default
            

            Пользователи Debian добавляют запись в файл /etc/network/interfaces.


            auto wlan0
            iface wlan0 inet dhcp
                wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
            

            Пользователи RedHat добавляют в /etc/sysconfig/wpa_supplicant


            INTERFACES="-iwlan0"
            

            а в файл /etc/sysconfig/network-scripts/ifcfg-wlan0


            ESSID="home"
            NAME=wlan0
            MODE=Managed
            KEY_MGMT=WPA-PSK
            TYPE=Wireless
            BOOTPROTO=dhcp
            DEFROUTE=yes
            ONBOOT=yes
            HWADDR=aa:bb:cc:dd:ee
            IPV6INIT=yes
            IPV6_AUTOCONF=yes
            

            Отладка


            После того как wpa_supplicant успешно подключилась к точке доступа, в dmesg можно увидеть протокол установки соединения.


            [243960.587] cfg80211: World regulatory domain updated:
            [243960.587] cfg80211: DFS Master region: unset
            [243960.587] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)
            [243960.587] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A)
            [243960.587] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz, 92000 KHz AUTO), (2000 mBm), (N/A)
            [243960.587] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (N/A, 2000 mBm), (N/A)
            [243960.587] cfg80211: (5170000 KHz - 5250000 KHz @ 80000 KHz, 160000 KHz AUTO), (2000 mBm), (N/A)
            [243960.587] cfg80211: (5250000 KHz - 5330000 KHz @ 80000 KHz, 160000 KHz AUTO), (2000 mBm), (0 s)
            [243960.587] cfg80211: (5490000 KHz - 5730000 KHz @ 160000 KHz), (N/A, 2000 mBm), (0 s)
            [243960.587] cfg80211: (5735000 KHz - 5835000 KHz @ 80000 KHz), (N/A, 2000 mBm), 
            [243960.587] cfg80211: (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 0 mBm),
            [243963.070] wlan0: authenticate with aa:bb:cc:dd:ee
            [243963.075] wlan0: send auth to aa:bb:cc:dd:ee (try 1/3)
            [243963.077] wlan0: authenticated
            [243963.084] wlan0: associate with aa:bb:cc:dd:ee (try 1/3)
            [243963.088] wlan0: RX AssocResp from aa:bb:cc:dd:ee (capab=0x411 status=0 aid=3)
            [243963.090] wlan0: associated
            

            Если же вместо этого вы увидите ошибку:


            Successfully initialized wpa_supplicant
            nl80211: Driver does not support authentication/association or connect commands
            wlan0: Failed to initialize driver interface
            

            то скорее всего, надо использовать драйвер wext вместо nl80211. А с ошибкой:


            WEXT: Driver did not support SIOCSIWAUTH for AUTH_ALG, trying SIOCSIWENCODE
            

            наоборот, вместо wext надо подставить nl80211.
            В ситуации, когда вы не можете определить ошибку, запустите wpa_supllicant напрямую с ключем -dd.


            [root@home ~]$ wpa_supplicant -Dnl80211 -iwlan0 -C/var/run/wpa_supplicant/ -c/etc/wpa_supplicant/wpa_supplicant.conf -dd
            

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





            1. 4-way handshake
            2. Unicast and broadcast

            Комментарии (0)

              Let's block ads! (Why?)

              [Из песочницы] Мониторинг состояния своего ресурса при помощи Telegram-бота

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

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

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

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

              Аналитика


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

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

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

              Бот


              Python и django идеально подходят для работы с telegram ботом. Что такое бот? В этом контексте, бот — это интерфейс взаимодействия между вашим приложением и клиентом telegram. Этот интерфейс позволит отправлять сообщения в зависимости от бизнес логики вашего приложения.
              Я не буду расписывать здесь весь процесс создания и настройки веб приложения на django — врят ли у меня получится сделать это лучше чем у создателей официальной докумментации. Скажу только, что это не должно занять у вас больше десяти минут, если вы уже работали с этим фреймворком.

              Хочется сказать спасибо Павлу Дурову и его команде — благодаря возможности установки webHook, работать с ботом стало максимально просто и удобно. Все что необходимо это:

              • Создать своего бота при помощи интерфейса BotFather в клиенте телеграм и настроить его, следуя инструкциям папы бота
              • Установить webHook, используя свой token, который папа бот поможет вам получить. Для этого переходим по url: api.telegram.org/bot/setWebhook?url=, где token — ваше кольцо аутентификации, а url — это ссылка, запрос на которую обрабатывает контроллер вашего телеграм бота. Отмечу так же, что использоваться может только https протокол, т.е. необходим SSL.
              • Создать контроллер, обрабатывающий url из пункта 2, создать бизнес логику для вашего бота. Привязать контроллер к обработчику url. В часть url необходимо так же добавить свой token чтобы обеспечить другие люди не могли слать запросы на этот адрес.
              • Добавить бота в свой список контактов. Это можно сделать через поиск в клиенте telegram или используя ссылку @

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

              /requests и /stop_requests. Первая команда добавит в базу подписку на рассылку информации о запросах на сайт, вторая команда — удалит эту подписку. Далее необходимо создать свой context processor — это можно сделать в большинстве современных MVC фреймворков. В его коде необходимо обработать подписки на рассылку и далее отправить сообщения в чат с указанными id, который мы предварительно сохранили в базу, когда нам пришел запрос на наш webHook url. Так же мы можем оформлять подписки на абсолютно любые события на своем сайте: регистрации пользователя (удобно реализовывать через сигналы), комментарии, ошибки. Простор для творчества просто бездонный. На своем ресурсе born2fish, где можно редактировать информацию о реках и озерах Мира, я использовал бота для получения информации о том, когда сущность водоема кто-то изменял. Это помогает оперативно получать сообщения о водоемах, требующих проверки модератором.

              Сама отправка сообщения зависит от реализации. На python она выглядит так:

              def _send_msg(bot, chat_id, message):
                  bot.sendMessage(chat_id=chat_id, text=message)
              

              А вот так может выглядеть функция обработки подписок и отправки информации о запросе:
              def send_requests_subscriptions(request, city):
                  """ send Telegram messages to subscribed users """
                  bot_message = request.META['HTTP_USER_AGENT'] + " request from " + get_client_ip(
                      request) + " (" + str(city['city']) + ") url = [" + request.path_info + "]"
                  subscriptions = RequestsSubscription.objects.all()
                  for subscr in subscriptions:
                      _send_msg(bot=bot, chat_id=subscr.chat_id, message=bot_message)
              
              

              Этот метод позволяет отобразить пользователю помощь, которая считывается из файла help.md:
              def _display_help():
                  return render_to_string('help.md')
              

              Вместо заключения


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

              Что еще может пригодится? Не всегда информация в профиле пользователя telegram заполнена полностью, так что следует проверять значения на None перед сохранением в базу, чтобы не получить IndexError.

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

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

              Комментарии (0)

                Let's block ads! (Why?)

                [Из песочницы] Ambient Occlusion Volumes для прожженных самоваров

                Скитаясь по интернету в поисках алгоритмом освещения, которые бы удовлетворили мои потребности, я наткнулся на весьма новый алгоритм, разработанный компанией NVIDIA, название которого AOV (Ambient Occlusion Volumes). Имея в своём распоряжении тёмные осенние ночи и несколько чашек горячего кофе, я решился изучить данный алгоритм, следствием чего является данная статья. Прежде чем я начну, хотелось бы отметить своё удивление по поводу того, что данный алгоритм имеет незаслуженно малую популярность в кругах разработчиков игр, в отличии от всеми знакомого нам SSAO. Содержание данной статьи будет, по большей мере, состоять из теории.

                Введение


                В июне 2010 года Morgan McGuire, исследователь и разработчик компании NVIDIA, разработал алгоритм освещения, который носит название Ambient Occlusion Volumes. При разработке данного алгоритма, M. McGuire, ставил себе в цель добиться более высокой производительности и качества освещения. Производительность алгоритма, по словам разработчика, во многом независима от сложности моделей, а по качеству освещения не уступает Ray Tracing'у.

                Немного об Ambient Occlusion


                AO(Ambient Occlusion) является приближённым к GI(Global Illumination) алгоритмом, призванным к затенению пространств, на которых, фактически, не падают лучи света по причине того, что данные пространства условно перекрываются другими объектами, делая недоступным попадания лучей света к этому пространству. Сам алгоритм работает путём вычисления лучей, исходящих из точки, затенение которой мы проверяем, с последующей проверкой на пересечение объекта лучом. Если луч проходит без препятствий, то данная точка освещена, иначе — затенена.
                image

                Но при расчете таким алгоритмом возникают некие трудности. Через некоторое время на замену старому алгоритму пришёл SSAO(Screen Space Ambient Occlusion) от разработчиков компании Crytek. Сам алгоритм работал по такому принципу, что определяется некая сфера и в диапазоне этой сферы случайно отбираются точки после чего идёт проверка глубин(прежде записанных в буффер глубин) этих точек с той, для которой мы вычисляем затенение. Если глубина последней больше за глубину случайной точки, то она — затенена, а иначе, соответственно, освещена. Выполняется несколько таких проверок, после чего их результаты суммируются и вычисляется коэффициент затенения. Выглядит оно, примерно, так:

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

                Далее мне бы хотелось рассмотреть еще одну немаловажную тему перед тем как будет описан AOV метод.

                Radiosity


                Многие из тех, кто знаком с названым методом нахмурились бы услышав данный метод в контексте Amient Occlsuion. В действительности, эти методы тесно связаны друг с другом.

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

                Метод radiosity, так же известный как метод излучательности, является одним из методов GI, который опирается на расчёт форм-факторов(form-factors), которые, в свою очередь, описывают обмен энергией между парами плоскостей в окружающей среде.

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


                Вычисляется форм-фактор таким образом:

                где θi,j — угол между нормалью плоскости и Ri,j,, dA1,2 — дифференциальная область плоскости, Ri,j — вектор расстояния между dA1,2. В данном уравнении HID равно единице, если dA1,2 видимы друг для друга и ноль, если наоборот.

                На расцвете данного метода использовались два подхода: Full Matrix Radiosity и Progressive Refinement Radiosity.

                Full Matrix Radiosity


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

                Интенсивность света, который излучает плоскость вычисляем таким способом:


                где pi -коэффициент отражения плоскости i; Fij — форм-фактор из плоскости i к плоскости j; Ii — raidosity плоскости i; Iei — интенсивность излучения плоскости i; N — количество плоскостей которые находятся в окружении.

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

                Форм-фактор от патча к патчу вычисляется так:


                где Ei — количество элементов в патче, Fej — форм-фактор от элемента e к патчу j, Ai,e — области патча и элемента.

                Progressive Refinement Radiosity


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

                где Ii — уже просчитанное значение излучательности.

                Проблемой данных подходов является сложность расчётов даже при простых формах объектов. Чтобы вычислить форм-фактор плоскости нам нужно произвести два раза интегрирование, не говоря уже об лишних расчётах. На решение этой проблемы пришёл Hemi-Cube Radiosity.

                Hemi-Cube Radiosity


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

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


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

                Ambient Occlusion Volume


                Во время разработки метода radiosity, Baum D.R. предложил такой метод вычисления форм-фактора:

                где Gi — набор граней плоскости, Nj — нормаль дифференциальной плоскости j, Гg — величина равная углу гамма и направлению полученного при векторном произведении Rg и R(g+1), как показано на рисунку снизу:

                M. McGuire вдохновился данным подходом и на основе последнего придумал AO алгоритм. Описывал он его так:

                Пусть X будет очень маленьким патчем гладкого многообразия. Центроид X будет в точке, которая является началом нормали n. Полигоном P будет полигон с вершинами {p0,...,pk−1}, который полностью расположен на позитивной части плоскости, при условии p*n > 0. Таким образом, преграждение лучей света, создаваемое полигоном P, будет равно форм-фактору излучательной способности между P и X.


                где j = (i+1) mod k.

                Реализация AOV's


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

                Рассмотрим выпуклый полигон P с вершинами {p0,...,pk−1}, которые при любой комбинации из 3-х вершин не создают коллинеарности. Сперва, нам нужно рассчитать затухающую функцию, которая нам понадобиться чтобы добиться плавности при переходах от near- к far-field освещению. Вычисляется она таким образом:


                где а — 1 для твёрдых плоскостей, m(i<k) — нормали к граням полигона P, mk — отрицательная нормаль к полигону P:

                Выглядит оно таким образом:


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

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

                Вектор смещения мы получаем таким образом:


                где δ является тем самым obescurance на максимальной дистанции.

                Для наглядности:


                И последним нашим шагом будет произведение затухающей функции( g ) на перекрытие полигоном P ( AOp(n) ). Так же, после всех операций следует применить т.н. blending.

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

                image

                image

                Для сравнения с Ray Tracing'ом:

                image

                Заключение


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

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

                Демо от NVIDIA

                Литература


                Мной было прочитано достаточное количество источников, но основной упор я делал именно на эти паперы:

                — M. McGuire «Ambient Occlusion Volumes»
                — «Improving radiosity solutions through the use of analytically determined form-factors»

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

                Комментарии (0)

                  Let's block ads! (Why?)