...

суббота, 4 февраля 2017 г.

Управление светодиодной лентой WS2801 с использованием Raspberry Pi и iOS

Всем привет!
Эта статья содержит исходники приложения для операционной системы iOS, цель которого управление светодиодной лентой WS2801, подключенной к Raspberry PI.

В качестве базы для этого поста послужила статья pbelov — «Управляем светодиодной лентой при помощи Raspberry Pi и Android» http://ift.tt/2ks3r2g. Если нужно ознакомиться с базовыми принципами подключения лент с чипами WS2801 к Raspberry PI, лучше начать чтение с исходной статьи Павла.

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

Репозиторий проекта http://ift.tt/2ks6ZSe
В корневой папке репозитория находится клиенский iOS проект для XCode, а в папке ledserver проект серверного приложения для IntelliJ IDEA.
В папке ledserver/putty находятся облегчающие жизнь скрипты, написанные для автоматизации заливки и отладки серверного приложения на raspberry.

Клиентская часть

Так выглядит программа целиком.
image

Первая ячейка настраивает цвет всей ленты
image

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

Третья ячейка совмещает в себе две функции: линейную анимацию и анимацию плавного чередования списков цветов, созданных во второй ячейке.
image
Тублер «Включить анимацию» запускает линейную анимацию. Спиннером можно изменять скорость линейной анимации.
С анимациями списков чуть сложнее.
Вначале у вас должно быть сохранено несколько списков цветов во второй ячейке. Затем тапаем на кнопку «Анимация цвета». В нем добавляем нужные списки в той последовательности, в которой хотите, что бы цвета изменялись. Затем возвращаемся из диалога добавления список. Теперь жмем «Сохранить» и вводим имя новой анимации.
Что бы активировать сохраненную анимацию, нажимаем «Загрузить» и выбираем нужную нам анимацию списка цветов

Серверная часть


Запуск сервера происходит командой
java -jar ledserver.jar 50

Где цифра 50 — число диод в ленте.
Сервер слушает UDP порт 8090. UDP был выбран для более простой интеграции сервера в локальную сеть, так как он настроен на прослушивание широковещательного канала, следовательно если ваш iPhone и Raspberry подключены к одному роутеру, даже не придется вводить верный IP-адрес Raspberry в iOS, сервер все равно получит свои сообщения от клиента.

Отладка


Для удобства разработки на Desktopе и отладки на удаленной Raspberry PI, создайте Remote конфигурацию отладки в IDEA.

image
В качестве 'external tool' выберите 'Run External Tool', далее скрипт putty/launch-led-server.bat. Помните, в скрипте launch-led-server.bat следует прописать верные IP-адреса вашей Raspberry. Так же на raspberry должен быть добавлен ssh публичный ключ, что бы putty смогло посредством pagent автоматически авторизоваться для заливки свежего .jar и его использования.

Благодарю за внимание!

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

    Let's block ads! (Why?)

    Исследование связности в мозге на основе электрофизиологических данных. Лекция в Яндексе

    [recovery mode] Дизайн виртуализованного ЦОД

    image

    Введение

    Информационная система с точки зрения пользователя хорошо определяется в ГОСТ РВ 51987 — «автоматизированная система, результатом функционирования которой является представление выходной информации для последующего использования». Если рассматривать внутреннюю структуру, то по сути любая ИС является системой реализованных в коде взаимосвязанных алгоритмов. В широком понимании тезиса Тьюринга-Черча алгоритм (а сл-но ИС) осуществляет трансформацию множества входных данных в множество выходных данных.
    Можно даже сказать, что в трансформации входных данных и есть смысл существования информационной системы. Соответственно ценность ИС и всего комплекса ИС определяется через ценность входных и выходных данных.
    Исходя из этого проектирование должно начинаться и брать за основу данные, подстраивая архитектуру и методы под структуру и значимость данных.

    Хранимые данные
    Ключевым этапом подготовки к проектированию является получение характеристик всех наборов данных, планируемых к обработке и хранению. Эти характеристики включают в себя:
    — Объем данных;
    — Информация о жизненном цикле данных (прирост новых данных, срок жизни, обработка устаревших данных);
    — Классификация данных с т.з. влияния на основной бизнес компании (то триаде конфиденциальность, целостность, доступность) вместе с финансовыми показателями (напр. стоимость утери данных за последний час);
    — География обработки данных (физическое расположение систем обработки);
    — Требования регуляторов по каждому классу данных (напр. ФЗ-152, PCI DSS).

    Информационные системы

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

    Модель угроз

    В обязательном порядке должна быть в наличии формальная модель угроз, от которых планируется защищать данные / сервисы. При этом модель угроз включает в себя не только аспекты конфиденциальности, но и целостности и доступности. Т.е. например:
    — Выход из строя физического сервера;
    — Выход из строя коммутатора top-of-the-rack;
    — Разрыв оптического канала связи между ЦОД;
    — Выход из строя оперативной СХД целиком.
    В некоторых случаях модели угроз пишутся не только для инфраструктурных компонентов, но и для конкретных ИС или их компонентов, как например отказ СУБД с логическим разрушением структуры данных.
    Все решения в рамках проекта по защите против не описанной угрозы являются излишними.

    Требования регуляторов

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

    Целевые показатели RPO / RTO

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

    image

    Разделение на пулы ресурсов

    После сбора всей первичной вводной информации первым шагом является группировка наборов данных и ИС в пулы, исходя из моделей угроз и требований регуляторов. Определяется вид разделения различных пулов – программно на уровне системного ПО или физически.
    Примеры:
    — Контур, обрабатывающий персональные данные, полностью физически отделен от остальных систем;
    — Резервные копии хранятся на отдельной СХД.

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

    Процессорная мощность

    image

    Абстрактные потребности в процессорной мощность виртуализованного ЦОД измеряется в количестве виртуальных процессоров (vCPU) и коэффициенте их консолидации на физических процессорах (pCPU). В данном конкретном случае 1 pCPU = 1 физическое ядро процессора (без учета Hyper-Threading). Количество vCPU суммируется по всем определенным пулам ресурсов (каждый из которых может иметь свой коэффициент консолидации).
    Коэффициент консолидации для нагруженных систем получают эмпирическим путем, исходя из уже существующей инфраструктуры, либо при пилотной установке и нагрузочном тестировании. Для ненагруженных систем применяются «best practice». В частности, VMware называет средним коэффициентом 8:1.

    Оперативная память

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

    Ресурсы хранения

    Требования по ресурсам хранения получаются путем простого суммирования всех пулов по объему и производительности.
    Требования по производительности выражаются в IOPS в сочетании со средним соотношением чтение/запись и при необходимости максимальной задержкой отклика.
    Отдельно должны быть указаны требования по обеспечению качества обслуживания (QoS) для конкретных пулов или систем.

    Ресурсы сети передачи данных

    Требования по сети передачи данных получаются путем простого суммирования всех пулов пропускной способности.
    Отдельно должны быть указаны требования по обеспечению качества обслуживания (QoS) и задержек (RTT) для конкретных пулов или систем.
    В рамках требований к ресурсам сети передачи данных так же указываются требования по изоляции и/или шифрованию сетевого трафика и предпочтительным механизмам (802.1q, IPSec и т.д.)

    Выбор архитектуры

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

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

    Классическая архитектура подразумевает использование интеллектуальных внешних подсистем хранения и передачи данных, в то время как серверы привносят в общий пул физических ресурсов только процессорную мощность и оперативную память. В предельном случае серверы становятся полностью анонимными, не имеющими не только собственных дисков, но даже системного идентификатора. В этом случае используется загрузка ОС или гипервизора с встроенных флэш носителей либо с внешней системы хранения данных (boot from SAN).
    В рамках классической архитектуры выбор между лезвиями (blade) и стоечными (rack) осуществляется прежде всего из следующих принципов:
    — Экономическая эффективность (в среднем стоечные серверы дешевле);
    — Вычислительная плотность (у лезвий выше);
    — Энергопотребление и тепловыделение (у лезвий выше удельное на юнит);
    — Масштабируемость и управляемость (лезвия в целом требует меньше усилий при больших инсталляциях);
    — Использование карт расширения (для лезвий очень ограниченный выбор).
    Конвергентная архитектура (также известная как гиперконвергентная) предполагает совмещение функций обработки и хранения данных, что ведет к использованию локальных дисков серверов и как следствие отказу от форм-фактора классических лезвий. Для конвергентных систем используются либо стоечные серверы, либо кластерные системы, совмещающие в едином корпусе несколько серверов-лезвий и локальные диски.

    CPU / Memory

    Для корректного расчета конфигурации нужно понимать тип нагрузки для среды или каждого из независимых кластеров.
    CPU bound – среда, ограниченная по производительности процессорной мощностью. Добавление оперативной памяти ничего не изменит с точки зрения производительности (количества ВМ на сервер).
    Memory bound – среда, ограниченная оперативной памятью. Большее количество оперативной памяти на сервере позволяет запустить большее количество ВМ на сервер.
    GB / MHz (GB / pCPU) – среднее соотношение потребления данной конкретной нагрузкой оперативной памяти и процессорной мощности. Может использоваться для расчетов необходимого объема памяти при заданной производительности и наоборот.

    Расчет конфигурации сервера

    image

    Для начала необходимо определить все виды нагрузки и принять решение о совмещении или разделении различных вычислительных пулов по различным кластерам.
    Далее для каждого из определенных кластеров определяется соотношение GB / MHz при известной заранее нагрузке. Если нагрузка не известна заранее, но есть примерное понимание уровня загрузки процессорной мощности, можно использовать стандартные коэффициенты vCPU:pCPU для перевода требований пулов в физические.

    Для каждого кластера сумму требований пулов vCPU делим на коэффициент:
    vCPUсумм / vCPU:pCPU = pCPUсумм – требуемое количество физ. ядер
    pCPUсумм / 1.25 = pCPUht – количество ядер с поправкой на Hyper-Threading
    Предположим, что необходимо произвести расчет кластера на 190 ядер / 3.5ТБ ОЗУ. При этом принимаем целевую 50% загрузку процессорной мощности и 75% по оперативной памяти.

    pCPU 190 CPU util 50%
    Mem 3500 Mem util 75%
    Socket Core Srv / CPU Srv Mem Srv / Mem
    2 6 25,3 128 36,5
    2 8 19,0 192 24,3
    2 10 15,2 256 18,2
    2 14 10,9 384 12,2
    2 18 8,4 512 9,1

    В данном случае всегда используем округление до ближайшего целого вверх (=ROUNDUP(A1;0)).
    Из таблицы становится очевидно, что сбалансированными под целевые показатели являются несколько конфигураций серверов:
    — 26 серверов 2*6c / 192 GB
    — 19 серверов 2*10c / 256 GB
    — 10 серверов 2*18c / 512 GB

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

    Особенности выбора конфигурации сервера

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

    Размер домена единичного отказа.

    Выбор размера сервера также осуществляется из принципа минимизации домена единичного отказа. Например, при выборе между:
    — 3 x 4*10c / 512 GB
    — 6 x 2*10c / 256 GB
    При прочих равных необходимо выбирать второй вариант, поскольку при выходе одного сервера из строя (или обслуживании) теряется не 33% ресурсов кластера, а 17%. Точно так же вдвое снижается количество ВМ и ИС, на которых отразилась авария.

    Расчет классической СХД по производительности

    image

    Классическая СХД всегда рассчитывается по худшему варианту (worst case scenario), исключая влияние оперативного кэша и оптимизации операций.
    В качестве базовых показателей производительности принимаем механическую производительность с диска (IOPSdisk):
    — 7.2k – 75 IOPS
    — 10k – 125 IOPS
    — 15k – 175 IOPS

    Далее количество дисков в дисковом пуле рассчитывается по следующей формуле: = TotalIOPS * ( RW + (1 –RW) * RAIDPen) / IOPSdisk. Где:
    TotalIOPS – суммарная требуемая производительность в IOPS с дискового пула
    RW – процентная доля операций чтения
    RAIDpen – RAID penalty для выбранного уровня RAID

    Подробнее об устройстве RAID и RAID Penalty рассказывается здесь - Производительность СХД. Часть первая. и Производительность СХД. Часть вторая. и Производительность СХД. Часть третья

    Исходя из полученного количества дисков рассчитываются возможные варианты, удовлетворяющие требованиям по емкости хранения, включая варианты с многоуровневым хранением.
    Расчет систем с использованием SSD в качестве уровня хранения рассматривается отдельно.
    Особенности расчета систем с Flash Cache

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

    Расчет гибридных систем low-end / mid-range

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

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

    Использование SSD в многоуровневом дисковом пуле

    image

    Использование SSD в многоуровневом дисковом пуле имеет вариации, в зависимости от особенностей реализации алгоритмов флэш кэша у данного производителя.
    Общая практика политики хранения для дискового пула с SSD уровнем — SSD first.
    Read Only Flash Cache. Для флэш кэша только на чтение уровень хранения на SSD появляется при значительной локализации операций записи вне зависимости от кэша.
    Read / Write Flash Cache. В случае с флэш кэшем на запись сначала устанавливается максимальный объем кэша, а уровень хранения на SSD появляется лишь при недостаточности размера кэша для обслуживания всей локализованной нагрузки.
    Расчет производительности SSD и кэша производится каждый раз исходя из рекомендаций производителя, но всегда для наихудшего варианта.

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

      Let's block ads! (Why?)

      Взломаны сервера CD Projekt RED, разработчиков Ведьмака. Утекла база с данными пользователей

      image

      Команда CD Projekt RED 4 февраля 2017 г. в 1:39(GMT +3) разослала своим пользователям email с предупреждением о том, что их сервера были скомпрометированы. Под атакой оказались сервера форума cdprojektred.com. До активного продвижения в Steam, во время выхода первой части серии игр про Ведьмака, многие регистрировались на сервере разработчика. В настоящий момент форум был практически заброшен, однако содержал в своей базе логины, адреса электронной почты и пароли пользователей.

      Факт утечки базы данных был обнаружен только сейчас, однако сам инцидент произошел в марте 2016 года. Большинство пользователей было переведено на сторонние аккаунты GOG.com еще год назад, что сделало аутентификацию двухэтапной. Однако часть пользователей не обновила свои данные. Хорошая новость — пароли были хешироваными и «солеными», что делает невозможным словарную атаку на пароли и сильно затрудняет автоматический перебор базы.

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

      Текст оригинального письма:

      Dear Forum Users,

      Recently it has come to our attention that an obsolete cdprojektred.com forum database was accessed by an unauthorized party sometime in March 2016.

      At the time of the event, the database was not in active use, as almost a year earlier forum members had been asked to create secure GOG.com accounts for login purposes. These accounts are additionally protected by two-step authentication. The forum engine has also been upgraded since then to the newest and most secure version, fixing the vulnerability that allowed said access.

      It is our understanding that the obsolete forum database contained usernames, email addresses and passwords that were hashed and “salted.” Salting is a common practice that involves adding random characters to the password when hashing to increase security. It is this, a “salted hash” of a password, that was stored in the database and that was accessed. Your passwords were not stored in plain text, hence they were not directly accessible by anyone.

      Since you did not connect your account with the GOG.com-powered login system, your account was not migrated to the new forum and no action is required on your end. However, if you used your old forum password for any other services, it is still advisable to change it. We also suggest you never use the same password across multiple services.

      From the time of the event, we’ve conducted additional external security tests, and we will double our efforts to ensure such situations don’t occur in the future.

      We would like to deeply apologize to everyone affected.

      CD PROJEKT RED Forum Staff

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

        Let's block ads! (Why?)

        Arduino на автомойке ч.2

        Продолжаем рассмотрение применения Arduino для автомойки самообслуживания. Рассмотрим работу по сети и общение с купюроприёмником Cashcode.
        Начало см. тут

        Интернет клиент

        Активируем сразу клиент и сервер

        #include <Ethernet.h>
        
        EthernetServer server(80);
        byte mac[] = { 0xDE, 0x23, 0xBE, 0xEF, 0xFE, 0xED };
          IPAddress ip(192, 168, 1, 100);
          Ethernet.begin(mac, ip);
         server.begin();
        
        

        Посылаем на сервер информацию, например о принятой купюре

        int sendInfo(string pay)
        {
        EthernetClient client;
           
          if (client.connect(domenip, 80) )
          {    
            client.println("GET /get_money.php?pay="+pay+" HTTP/1.1");  
            client.println("Host: www.domen.ru");
            client.println("Connection: keep-alive");
            client.println();
          } else  { Serial.println("connection failed"); return 0; }
        
          delay(100);
        
          char c;  
          while (client.available())
          {
            c=client.read();
          }
          client.stop();
          
          return (1);
        }
        

        Сервер

        Активировали в предыдущем разделе. Проверяем наличие запросов.

        for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
            EthernetClient sclient = server.available_(sock);
            myserver(sclient);
          }
        

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

        void myserver(EthernetClient client)
        {
          if (!client) return;
          char clientline[100]; 
          int index = 0;
          while (client.available()) {
              char c = client.read();
              if(index<99) clientline[index] = c;
              index++;
          }
              
          if(strstr(clientline, "water")!=NULL) digitalWrite(2, LOW); //вода
          if(strstr(clientline, "pena")!=NULL) digitalWrite(3, LOW); //пена
          if(strstr(clientline, "vosk")!=NULL) digitalWrite(4, LOW); //воск
        
          client.println("HTTP/1.1 200 OK");  client.println("Content-Type: text/html");  client.println("Connection: close"); client.println();
          client.println("<!DOCTYPE HTML>"); client.println("<html>");
          for (int j = 1; j < 6; j++) {
                 client.print("timer "); client.print(j);  client.print(" is "); client.print(EEPROM.read(j));  client.println("<br />");
                }          
          client.println("</html>");
          delay(100);
          client.stop();  
        }
        

        Купюроприёмник Cashcode


        Работает через последовательный порт на уровнях TTL с помощью библиотеки SoftwareSerial.
        SoftwareSerial mySerial(14, 15); // RX, TX
        uint8_t poll[] = {0x02, 0x03, 0x06, 0x33, 0xDA, 0x81};
        uint8_t ack[] = {0x02, 0x03, 0x06, 0x00, 0x0C2, 0x82};
        
        

        Как уже сказано у меня Cashcode работает по протоколу CCNET. Возможны варианты, надо уточнять у продавца. Суть протокола в том, что система периодически (несколько раз в секунду достаточно) спрашивает у купюроприёмника его состояние (команда POOL). Тот отвечает. Если в ответе есть информация, нужно подтвердить её получение соответствующей командой (ACK).
        Формат команды: SYNC ADR LNG CMD DATA CRC
        SYNC: 1 byte код [02H]
        ADR: 1 byte адрес купюроприёмника
        LNG: 1 byte* длина данных
        CMD: 1 byte команда
        DATA 0 to 250 bytes Данные
        CRC: 2 bytes контрольная сумма
        Посылаем команду.

        void sendCCNET(uint8_t *com)
        {
          for(char i=0; i<com[2]; i++) mySerial.write(com[i]);
        }
        

        Если купюроприёмник прислал нам в ответе команду 0x81, значит он принял купюру. В данных содержится номинал. У меня это: 2=10 рублей, 3=50 рублей, 4=100 рублей, 5=500 рублей, 6=1000 рублей, 7=5000 рублей. Возможны варианты, зависит от прошивки.

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

          Let's block ads! (Why?)

          Powershell и русские символы в консольных приложениях

          пятница, 3 февраля 2017 г.

          MW-Online: мультиплеер для Need for Speed: Most Wanted (2005)

          Security Week 05: вход в Facebook по жетону, уязвимости в роутерах Netgear, сам-себе-DDoS в британском минздраве

          Кибербезопасность — это не обязательно защита от внешних кибератак. Как сообщает британское издание The Register, 14 ноября прошлого года день в британском минздраве (National Health Service) не задался. Утром сотрудница создала новый список рассылки для коллег из собственного небольшого отдела. После создания списка она отправила туда пустое сообщение с темой «Тест».

          Как выяснилось позднее, в системе создания списков рассылки был выбран пункт «только сотрудники моей организации», что на самом деле означало «все сотрудники, вообще все», а их, на минуточку, в отделении NHS в Англии 850 тысяч человек. После того, как тест был отправлен, примерно 80 раздраженных коллег ответили в список рассылки с просьбой исключить их немедленно. И пошло-поехало.

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

          Facebook добавил факторов в систему авторизации, поддерживает аппаратные токены
          Новость. Анонс Facebook.

          Facebook теперь поддерживает аппаратные токены, работающие по стандарту Universal 2nd Factor, такие как YubiKey. В настройках Facebook появилась соответствующая опция, где можно привязать токен к аккаунту и входить в соцсеть даже в том случае, если нет доступа к телефону. До этого основным методом двухфакторной авторизации в Facebook был именно смартфон: достаточно удобная система позволяла авторизоваться на новом устройстве, посмотрев код авторизации на уже залогиненном телефоне, или получив соответствующее SMS.

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

          В роутерах Netgear обнаружили уязвимость, позволяющую обойти пароль
          Новость. Исследование Trustwave. Информация на сайте Netgear.

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

          Оказалось, что уязвимость уже была раскрыта (и возможно пропатчена, но кто вообще обновляет роутеры?): если взять тот самый код из unauth.cgi и скормить его на другой технической веб-странице, то можно добыть пароль. Дальше начались натурные испытания: Саймон нашел других владельцев роутеров Netgear и решил выяснить, какие еще модели подвержены. Так как «эксплуатировать уязвимость» приходилось удаленно, он написал скрипт на питоне.

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

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

          Древности


          «V-5120»

          Нерезидентный неопасный вирус. Стандартно инфицирует .COM- и .EXE-файлы. Начиная с 1992 года при запуске зараженных файлов сообщает «ACCESS Denied» и возвращается в DOS.

          Цитата по книге «Компьютерные вирусы в MS-DOS» Евгения Касперского. 1992 год. Страницa 93.

          Disclaimer: Данная колонка отражает лишь частное мнение ее автора. Оно может совпадать с позицией компании «Лаборатория Касперского», а может и не совпадать. Тут уж как повезет.

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

            Let's block ads! (Why?)

            Триггерные рассылки для вовлечения: как зажечь искру


            Фото Emilio Küffer (Flickr)

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

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

            Этап знакомства


            На этапе подписки приветственное или welcome письмо может определить дальнейшее развитие отношений.

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

            1. Спасибо за подписку

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

            2. Краткое руководство пользования продуктом

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

            Вот несколько советов по составлению письма-руководства:

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

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

            Обратите внимание, что внизу письма также имеется раздел «Обучающие видео».

            3. Письмо с предложением присоединиться в соцсетях

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

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

            Компания Mudpie предлагает первыми узнавать о новинках и скидках из Instagram, Pinterest, Facebook и Twitter.

            4. Письмо со скидкой

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

            Пример от PetsPyjamas.

            5. Просьба заполнить информацией кабинет настроек

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

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

            Этап вовлечения


            1. Подарок в день рождения

            Компания True Citrus, прекрасные рассылки которой мы не устаем ставить в пример, на этапе, когда вы еще ничего не приобрели, отправляет письмо с такой темой: «С днем рождения! Давайте праздновать!»

            Но дело в том, что у вас сегодня не день рождения, и рука так и тянется открыть письмо и посмотреть, в чем же дело. В письме крупным шрифтом написано: «Ой, это не ваш день рождения? – Тогда расскажите нам, когда он, чтобы мы выслали вам подарок». А кто отказывается от подарка?

            Эта рассылка не только растопит лед с подписчиком, но и поможет собрать больше информации для сегментации.

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

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

            • Имя, фамилия;
            • Почтовый индекс;
            • Пол;
            • Возраст;
            • Откуда узнали о продукции True Citrus?
            • В каком продуктовом магазине чаще всего закупаетесь?
            • День рождения;
            • Что желаете получать в email рассылках?

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

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

            2. Письмо с просмотренными товарами

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

            По данным компании Experian, если отправлять такое письмо повторно, процент транзакций по нему возрастает в два раза.

            Вот как это делает компания Bestwatch.ru.

            Этап реанимации

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

            Причин перехода в «спящий режим» множество: от нерелевантности контента до потери интереса к вашему бренду. Разобраться тут поможет реактивационная кампания.

            Реактивационная кампания выполняет сразу несколько задач:

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

            Какие тактики применить в реактивационном письме?

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

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

            3. Предложите выбрать интересующий контент;

            4. Скидка
            Попробуйте слова-крючки: «скидка», «бесплатно», «купон».

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

            Компания Notonthehighstreet в своем реактивационном письме предлагает скидку 10% на заказ, выбрать релевантный контент или отписаться.

            Больше примеров реактивационных писем вы найдете у нас в блоге.

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

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

              Let's block ads! (Why?)

              9 нелепых способов открыть .sketch файл. И один ничего такой

              Итак: требуется открыть .sketch файл, созданный программой Sketch. Той самой, которая есть только на Mac’ах.

              А Mac’a нет. Есть только Windows и этот дурацкий .sketch файл, который кто-то прислал. И у этого кого-то Mac есть. А у тебя нет. Только Windows.

              И что делать? Покупать Mac? Дороговато. Может попросить этого кого-то использовать Photoshop? Не, этот кто-то одержим Sketch'ем. В общем, дело — шляпа… Или нет?

              Все не так плохо. 10 альтернатив покупке Mac’а — самых эффективных, самых действенных и законных (почти во всех странах):

              1. Icons8 Lunacy


              Icons8 Lunacy App .sketch viewer for Windows

              Инструкция: просто открывалка для Винды. Без всяких костылей. Качать тут.

              2. Avocode / Zeplin


              А также Teamviewer или Zoom.
              Инструкция: придется завести друзей-дизайнеров с Mac’ом в каждой часовой зоне. И дальневосточный гектар лучше тогда не брать — этому способу нужен хороший интернет.

              3. Насилие


              Инструкция: выслеживайте хипстеров. У них часто Mac’и, а сами они, как правило, слабые и не дают сдачи.

              4. Секс


              Инструкция: постепенно занижайте свои стандарты. Ваша цель — некрасивые и богатые.

              5. Терпение


              Инструкция: если долго сидеть в Старбаксе, возможно кто-то попросит присмотреть за Mac’ом, когда пойдет в туалет.
              Ваша целевая аудитория — любые девушки. Чем больше сумка, тем больше у вас времени.

              6. Еще больше терпения


              Инструкция: попросите разработчиков Sketch’а добавить поддержку Windows.
              Кстати, у них очень удобный F.A.Q:

              F.A.Q. Sketchapp о поддержке Windows

              7. Сайты знакомств


              Инструкция: на фотографиях игнорируйте лица. Ищите Mac’и.

              8. Хакинтош


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

              9. Работа


              Инструкция: прежде чем украсть Mac у своего работодателя, изучите пособия по безработице в стране. Рекомендуем Норвегию.

              10. Деньги


              Инструкция: если уж совсем прижмет, продайте пару бриллиантов или старых картин. На Маc должно хватить.

              А теперь серьезно: мы “взломали” .sketch формат и разработали программу для его открытия на Windows. Бесплатно.

              Скачать дистрибутив

              Две вещи мы можем сказать наверняка:

              • она очень полезная, есть даже standalone для запуска с флешки
              • она полна багов (версия альфа, релиз 0.000000000001)

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

              Послать глючный .sketch на анализ

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

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

                Let's block ads! (Why?)

                [Перевод] Что разработчики Xamarin должны знать на начало 2017 года

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



                Далее повестовование будет вестись от имени автора.

                Меня очень вдохновил недавний пост Скотта Хансельмана в его блоге о том, что разработчики .NET должны знать на начало 2017 года. И я решил пойти немного дальше этого и написать небольшой путеводитель для разработчиков Xamarin, создающих приложения iOS, Android и macOS в .NET. Так что я связался с Крисом Харди, и мы совместно подготовили обширный список понятий и полезных ресурсов, имеющих отношение к Xamarin. Прежде чем мы начнем, вам непременно стоит посетить замечательный блог Скотта, поскольку он просто переполнен отличной информацией. Кроме того, чтобы сделать этот пост максимально полезным, я разделил его на специальные секции: «непременно нужно знать», «следует знать» и «неплохо бы знать», к тому же я подготовил специальные разделы для iOS и Android.

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

                С чего начать?


                Тем, кто желает много читать, скачивать, изучать и смотреть по теме Xamarin, рекомендуем сразу взять на заметку следующие порталы:
                • Читайте и качайте материалы, связанные с Xamarin!
                • Бесплатное самостоятельное обучение в университете Xamarin.
                • Xamarin Workbooks позволяет разработчикам протестировать API-интерфейсы в интерактивном режиме.
                • xamarinshow.com: Еженедельное шоу на CH9, посвященное разработке и организованное мною.
                • Здесь представлены проекты Xamarin на основе открытого исходного кода.

                Необходимо знать: Xamarin


                Что такое Xamarin? Благодаря платформе Xamarin разработчики могут создавать полностью нативные приложения для iOS, Android и macOS, используя C#, F# или даже VB.NET. При этом в наличие 100% доступ к нативному API и возможность совместного использования логики с другими приложениями .NET.

                У нас есть одна супер-оптимизированная среда выполнения .NET, которая доставляет .NET на iOS, Android, macOS, IoT, Linux, PS4, Xbox и т. д. Она реализует .NET API и приводит в действие .NET Standard, поэтому вам не придется беспокоиться о реализации «под капотом».

                Традиционная Xamarin разработка известная также как нативная Xamarin разработка, она дает разработчикам возможность совместного использования бизнес-логики приложений и создания нативных пользовательских интерфейсов для каждой платформы со 100% доступа к каждому API.

                Xamarin.Forms разработка предлагает разработчикам кросс-платформенный пользовательский интерфейс абстракции для iOS, Android и Windows. Пользовательские интерфейсы могут быть созданы в коде XAML или ином виде, и к тому же нативные элементы управления установлены в среде выполнения для каждой платформы. Кроме того, предлагаются такие функции MVVM (Model-View-ViewModel), как привязка данных и управление ими. Получить доступ к нативным API-интерфейсам можно через платформу проектов и сервисы зависимостей.

                Кросс-платформенное совместное использование кода


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

                • PCL (Portable Class Library). Эта библиотека, также известная как Pickle, дает разработчикам возможность для создания «библиотеки классов», рассчитанной на несколько платформ. Эта библиотека фактически действует в качестве опорного узла, предоставляющего перекрестный API, который доступен на каждой платформе. Чем больше платформ вы выберите, тем меньшая плоскость API будет доступна.
                • Общий проект. Самый простой способ совместного использования кода на разных платформах. Он функционирует как «связывающий файл», разделяя код с целевой платформой. Преимущества, состоят в том, что здесь доступны все целевые API-интерфейсы, так что вы можете производить условную компиляцию. Однако, такой подход может обернуться запутанным кодом, и, кроме того, в этом случае не создается сборка: файлы связываются между собой в проект платформы.
                • .NETStandard или «netstandard». Библиотека netstandard — это следующий этап эволюции, и она вполне может прийти на смену PCL. Разработчики получают по-настоящему кросс-платформенную библиотеку, и она может быть запущена в любой среде выполнения, которая реализует такие API-интерфейсы, как Mono, .NET Framework и .NET Core.

                Источники библиотек


                Существует множество API, доступных в .NET и на каждой платформе, но иногда хочется больше! И здесь их можно получить:
                • NuGet — это менеджер пакетов для платформы разработки Microsoft, включающей .NET. Клиентские инструменты NuGet обеспечивают возможность создания и использования пакетов. Галерея NuGet является центральным хранилищем пакетов, и используется всеми их авторами и пользователями.
                • Component — «магазин компонентов» является специально подобранной галереей библиотек и менеджером платформ Xamarin. Он предлагает платные и бесплатные библиотеки, которые могут быть установлены непосредственно в приложения iOS и Android. Эти библиотеки создаются как разработчиками компонентов Xamarin, так и сторонними девелоперами.
                • Plugin — по правде сказать, плагины для Xamarin и Windows просто превосходные. Они позволяют вам получать доступ к нативным функциям кросс-платформенного API прямо из общего кода! У них открытый исходный код, и здесь доступно немало классных вещей, в том числе для геолокации, возможности подключений и фотографий. Каждый плагин доступен по лицензии MIT и может быть установлен в любую библиотеку iOS, Android, Windows, PCL или .NETStandard Library через NuGet.

                Библиотеки


                Давайте познакомимся с некоторыми по-настоящему классными библиотеками, созданными или поддерживаемыми Xamarin:
                • MonoGame является эффективным, гибким и кросс-платформенным API для разработки игр в 2D и 3D. Он обеспечивает основу для многих кросс-платформенных игровых движков. Однако, он может также использоваться и непосредственно в играх, не будучи обернутым в игровой движок.
                • UrhoSharp является кросс-платформенным движком высокого уровня (3D и 2D), который может быть использован для создания анимированных 3D и 2D игр и сцен в приложениях, использующих геометрические формы, материалы, огни и камеры. UrhoSharp совместим с мобильными и десктопными приложениями, а также с HoloLens и VR.
                • SkiaSharp предлагает богатый и мощный графический API, который можно использовать для визуализации в 2D буферах. Вы можете использовать их для реализации элементов пользовательского интерфейса и 2D-графики, которые могут быть включены в приложение. SkiaSharp является привязкой .NET с библиотекой Skia и наследует функции и силу этой библиотеки.
                • CocosSharp является простой библиотекой для 2D-игр, использующей C# и F#. Это .NET порт популярного движка Cocos2D.

                Необходимо знать: iOS


                Расширения — это виджеты, которые предоставляются iOS в стандартных обстоятельствах, как, например, в «Центре уведомлений», когда пользователь запрашивает клавиатуру или редактирует фотографии. Все расширения устанавливаются в сочетании с приложением Container и активируются с определенной «точки расширения» в приложении Host.

                watchOS — это определенная версия iOS, которая предназначена для устройств Apple Watch.
                tvOS — Apple выпустила 4-е поколение аппаратных средств Apple TV, отличающихся переработанным пультом с поддержкой сенсорного управления и новой операционной системой (основанной на iOS9).

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

                Необходимо знать: Android


                Android Wear — это версия Android, которая предназначена для таких носимых устройств, как умные часы.

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

                Разбор APIs & SDKs — компиляции, минимизация, планирование — всё, что является важным и заслуживает изучения. Ознакомьтесь с коротким видео по теме.

                Необходимо знать: Xamarin


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

                IL — некий промежуточный язык, который создается при компиляции. Как написал Скотт: C# — это яблоки, из которых IL делает яблочный соус, а JIT/АОТ и среда выполнения — яблочный сок.

                AOT — расшифровывается как Ahead of Time Compilation («компиляция на опережение») и принимает IL и компилирует его в машинный код с целью выполнения полученного двоичного файла в нативном виде. Это то, что использует Xamarin.iOS.

                JIT — Расшифровывается как Just in Time Compilation («мгновенная компиляция») и принимает IL и компилирует его, подготавливая для запуска в качестве машинного кода. Это то, что использует Xamarin.Android.

                Следует знать: iOS


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

                XIB — шаблон iOS View XIB, в который можно добавлять автономный файл .xib, который может быть присоединен к определенному обратному классу.

                Регистраторы — код, который выставляет управляемый код на Objective-C. Он достигает этого путем создания списка каждого управляемого класса, унаследованного от NSObject.

                Следует знать: Android


                Dalvik & ART. ART — это среда выполнения Android, которая используется приложениями и некоторыми системными службами на Android. ART и ее предшественник Dalvik изначально были созданы специально для проекта Android.

                Multi-Dex — приложение Android (APK) состоит из исполняемых байткодовых файлов в виде Dalvik Executable (DEX), и они содержат скомпилированный код, используемый для запуска приложения. В спецификациях DalvikExecutable ограничено общее количество методов, на которые можно ссылаться в одном файле DEX до 65,536. Multi-Dex создает несколько файлов DEX для APK, и, таким образом, ограничения можно обойти.

                ABI (Application Binary Interface) — один APK может содержать машинный код для поддержки нескольких различных архитектур. Каждая коллекция архитектурно-зависимого кода связана с бинарным интерфейсом приложения (ABI).

                Android и Managed Callable Wrappers — это то, что позволяет .NET общаться с Java и наоборот.

                Android Virtual Devices — это эмуляторы Android, которые используются для отладки приложений.

                HAXM (Hardware Accelerated Execution Manager) — программное обеспечение от Intel для Windows и macOS, предназначенное для виртуализации, благодаря которому Вы получаете потрясающие AVDs.

                Неплохо бы знать всем


                Xamarin.Forms Roadmap — замечательный стратегический план готовящихся функций и исправлений для Xamarin.Forms.

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

                Model-View-ViewModel (MVVM) — это архитектурный шаблон, который был изобретен с учетом XAML. Шаблон устанавливает разделение пользовательского интерфейса XAML (предоставления) и исходных данных (модели) через класс, который служит посредником между предоставлением и моделью (ViewModel). View и ViewModel часто соединяются через привязки данных, определенных в файле XAML. BindingContext для представления, как правило, является экземпляром ViewModel.

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

                Порталы, которые стоит взять на заметку


                • Releases Blog — будьте в курсе того, что происходит.
                • Xamarin в Twitter — твит и еще раз твит!
                • События Xamarin — все что происходит в мире Xamarin.
                • Xamarin Podcast — в то время, когда вы не слушаете Merge Conflict, я настоятельно рекомендую слушать Xamarin Podcast.
                • Weekly Xamarin — специально подобранные еженедельные материалы в рассылке «все о Xamarin»!

                Благодарим за перевод


                Александр Алексеев — Xamarin-разработчик, фрилансер. Работает с .NET-платформой с 2012 года. Участвовал в разработке системы автоматизации закупок в компании Digamma. C 2015 года ушел во фриланс и перешел на мобильную разработку с использованием Xamarin. В текущее время работает в компании StecPoint над iOS приложением.

                Ведет ресурс XamDev.ru и сообщества «Xamarin Developers» в социальных сетях: VK, Facebook, Telegram.

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

                  Let's block ads! (Why?)

                  К вопросу об истории и роли личности в ней (не по Плеханову)

                  Макс Вэйн, Мистер Хьюлет и дождливый воскресный день.


                  Предисловие переводчика – вот тот, в общем то, не слишком частый случай, когда я испытываю жгучую зависть к автору и досаду от того, что родился не там, где следовало бы и не тогда, когда надо было бы. Надеюсь, многие читатели Хабра испытают, по крайней мере, первую половину этих чувств при прочтении этой поистине восхитительной статьи и будут снисходительны к огрехам перевода. Выложить ссылку на оригинал, как положено для перевода, я, к сожалению, не могу, поскольку статья входит в совершенно потрясающую книгу «Analog Circuit Design: Art, Science, and Personalities», где я ее взял, я Вам не скажу, но надеюсь, Вы догадались, где ее можно найти.

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

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

                  Я пробежал взглядом по нескольким макеткам в различной степени неработоспособности и нескольким недавно купленным мощным транзисторам, которые следовало убрать с глаз долой. Они меня нисколько не вдохновили. Лениво оглядывая окружающее, я обратил внимание на хранилище инструментов. Слева на третьей полке лежал генератор HP серии 200 (настоящая лаборатория невозможна без этого генератора, см. рис. 1).

                  HP200, непосредственно основанный на диссертации со-основателя фирмы HP Вилльяма Р. Хьюлетта, это не только замечательный прибор. И это не просто первый продукт фирмы HP(1). Этот прибор — сама история. Он заложил направление, методы и стандарты, которыми отвечает продукция фирмы НР по сей день. Это фундаментальная честность устройства, чувство надёжности и целостности. Эта небольшая коробка — выдающийся сплав элегантных теоретических идей, продуманной разработки, аккуратного конструирования, тщательного производства и капитализма. Он прекрасно отвечал требованиям рынка. Выгода от него была потрясающей, и в равной степени разделена между фирмой и покупателями. Как говаривала моя мама, НР 200 сделан именно так, как должны делаться вещи — хорошие парни выигрывают и никто не проигрывает.

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

                  Хьюлетт кратко сформулировал цели диссертации (кроме получения степени): «Автор считает, что существует реальная потребность в новом типе генератора, который совместит стабильность LC-генераторов с гибкостью генераторов с переносом частоты, и при этом останется лёгкими, портативными и простыми в конструировании и настройке».

                  Генератор Хьюлетта использовал резонансную RC-цепь, изобретённую Максом Вином в 1891 г. У Вина не было электронных усилительных приборов (Де Форест в 1891 ещё и не задумывался о добавлении сетки в лампу Эдисона) поэтому он не мог создать генератор. В любом случае, Вин занимался другими проблемами и разработал свою схему для мостовых измерений на переменном токе.

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

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

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

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

                  Хьюлетт предлагает элегантное решение:
                  «Последнее требование, устройство ограничения амплитуды, которое не вносит искажений в выходной сигнал, достаточно сложно выполнить. Известно, что усиление усилителя с ООС составляет 1/b, при условии A*b>>1. Следовательно, если сопротивление, значение которого увеличивается при увеличении тока через него, использовать в цепи ООС, усилитель можно спроектировать так, чтобы его усиление уменьшалось при увеличении входного сигнала. Если усилитель такого типа использовать, как часть генератора, его усиление можно настроить таким образом, чтобы генерация только начиналась.

                  Когда амплитуда колебаний станет нарастать, усиление уменьшиться, что приведёт к стабилизации амплитуды колебаний на определённом уровне. Если это значение будет достаточно низким, лампы будут работать в классе А и не вносить больших искажений. Более того, любые искажения из-за нелинейности ВАХ ламп будут уменьшены в A*b раз благодаря действию ООС.
                  В качестве изменяемого сопротивления можно использовать небольшую лампу накаливания. Хорошо известным свойством такой лампы является разогрев нити при повышении тока через нее, что приводит к увеличению сопротивления нити накаливания. На рис.2 показаны зависимости сопротивления лампы 110 вольт 6 ватт от тока через неё.

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

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

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

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

                  Лампа решила сложную проблему полностью, создав условия для построения практичного прибора. Разработка была очень хороша. Генератор перекрывал диапазон от 20 до 20000 циклов (тогда были циклы, а не Герцы) в трех декадах с точностью калибровки в 1%. Лампа накаливания обеспечивала стабильность амплитуды 0.2% на 100 Гц и неравномерность в 1дб в диапазоне от 20 до 20000 циклов. Заглянув внутрь моего НР201, я увидел лампу накаливания именно там, где Хьюлетт или один из его ассистентов ее оставил.

                  Из рис.4 видно, что искажения генератора не превышают 0.5% во всём диапазоне. Этот график привлек моё внимание. По современным стандартам «операционный усилитель» Хьюлетта на лампах 6J7/6F6 имеет весьма плохие параметры 3). Я задумался, насколько хороша будет схема Хьюлетта на современных ОУ?

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

                  Схема совпадает со схемой Хьюлетта, за исключением того, что я использовал 94 монолитными транзистора, резистора и конденсатора вместо двух ламп 4). ( Я думаю, что это и означает прогресс). После подбора резистора 430ом схема выдала симпатичный синус. Подключив мой (HP) измеритель искажений, я с большим удовольствием наблюдал всего лишь 0.0025% искажения. — рис. 6.

                  Затем я пошел дальше и добавил переключение диапазонов рис. 7.

                  Эта схема тоже работала хорошо. Как и предупреждал Хьюлетт, искажения увеличивались при приближении частоты колебания к тепловой постоянной времени лампы. Этот эффект может быть ослаблен за счёт увеличения тепловой постоянной. Саый простой путь сделать это – добавить побольше и покрупнее ламп. Это приводит к увеличению времени стабилизации, но уменьшает искажения в установившемся режиме. График зависимости искажений от частоты это ясно показывает -см. рис 8.

                  Рассматривая этот график, я задался вопросом, насколько можно улучшить цифры искажений, используя гипотезы и результаты Хьюлетта как руководство. Эксперимент с использованием нескольких ламп показал, что рост искажений на нижних частотах почти полность определяется тепловой постоянной времени лампы. Но что вызвало небольшой подьём искажений на участке 15-20кГц? И что ограничивает уменьшение искажений? Выяснение всего этого до конца — вот отличный путь не попасть под дождь. И конечно, я не мог игнорировать тот факт, что нахожусь очень близко к порогу чувствительности моего анализатора 0.0018%. Не стоит волноваться.
                  Следующая схема показана на рис. 7-9.

                  А1, малошумящий широкополосный усилитель — это генератор. Уменьшенный номинал переменника позволяет получить низкий уровень шума за счет уменьшения вклада шума входного тока ОУ. Конденсатор в 10 пФ подавляет паразитную высокочастотную генерацию. А2 и компоненты вокруг него заменяют лампу(лампы) накаливания. А2 сравнивает пиковое напряжение на выходе генератора с опорным напряжением и управляет Q1 для получения нужного усиления. Диод последовательно с опорным напряжением компенсирует падение на выпрямительном диоде. Большой конденсатор в цепи ОС А2 позволяет получить большую постоянную времени, минимизируя выходные пульсации.

                  Когда я включил эту схему, она генерировала, но искажения увеличились до чудовищных 0.15%! Выход анализатора показывал ярко выраженную вторую гармонику (в два раза выше частоты генератора), хотя выход А2 выглядел относительно чисто — см. рис.10.

                  Итак, мне сошла с рук замена 2 лампы на 94 транзистора, конденсатора и резистора, но замена одной лампы накаливания кучей деталек — это совсем другое дело! Я сконфуженно посмотрел на заброшенную лампу накаливания.

                  Что же произошло? Мост Вина остался тем же, и трудно поверить, что А1 настолько плох. На выходе А2 были видны остаточные пульсации выпрямителя, но ничего, что могло бы спровоцировать появление такого монстра.

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

                  Если вы будете смотреть на схему достаточно долго, то увидите, что необходимое лекарство существует в самой схеме и оно (слава Богу) достаточно простое. FET является симметричной структурой, хотя в данной схеме напряжение управления приложено асимметрично от затвора к истоку. Если вы измените схему таким образом, чтобы затвор управлялся сигналом, равным половине напряжения сток-исток, симметрия будет восстановлена. Такое нововведение устраняет все чётные гармоники. Новая схема включения Q1 приведена на рис.11.

                  При подстройке триммера в оптимальное положение, искажения упали до 0.0018% — нижний предел анализатора по спецификации рис.12.

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

                  Я не люблю подстроечники, да и электролит в цепи ООС А2 выглядит слишком большим. Также А2 – это не настоящий интегратор и имеет усиление по шумам с неинвертирующего входа. Это выглядит более раздражающим, чем очевидно важным. Неприятен и тот факт, что если выход A2 будет положительным (например, при включении), то электролит будет обратно смещён. Это не имеет отношения к делу, но является плохими стилем!

                  Следующая итерация схемы — это попытка решить некоторые из этих проблем см. рис.13.
                  Наиболее значимое изменение — Q1 заменён на фоторезистор. Этот прибор не имеет паразитной модуляции сопротивления, что позволяет исключить подстроечник из схемы. А2 запитан от однополярного источника и включен как настоящий интегратор. Номиналы компонентов в цепи ОС интегратора изменены в попытке получить большую временную постоянную и меньшее время установления. Наконец, опорное напряжение интегратора увеличено для увеличения влияния на амплитуду выходного сигнала. Это известный метод грубой силы для увеличения SNR.

                  Этот эксперимент дал полезную информацию — см. рис. 13.

                  Модификация А2 исключила прохождение пульсаций выпрямителя. Фоторезистор на самом деле работал, и я закинул подстроечник в дальний угол. Анализатор показывал 0.0015%, но я не был уверен, что смог воспринять это «улучшение» всерьёз. Интересно, что вторая гармоника искажений выглядела так же, как в предыдущей схеме, возможно менее шумно. Она немного увеличивалась с увеличением частоты и более-менее была пропорциональна выходной амплитуде. Анализатор выдавал цифру на несколько миллионных долей (ppm) ниже при большей выходной амплитуде, но я решил, что это из-за SNR в генераторе, анализаторе или в них обоих.
                  Но стало ясно, что ключ к тому, чтобы выжать из этой схемы всё возможное — понять источник второй гармоники. Схема говорила мне о чём-то, я пытался услышать, но не слышал рис.14.

                  Все ранее сделанное исключало из подозрения петлю АРУ. Оставался мост Вина, А1, и паразитные элементы, не присутствующие на схеме, как основные подозреваемые.

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

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

                  Теперь, когда у меня был ордер на арест А1, ответ быстро стал очевидным. Моя схема нарушила малоизвестный принцип построения прецезионных схем на ОУ: правило Вильямса. Правило Вильямса просто: ВСЕГДА ИНВЕРТИРУЙ (кроме тех случаев, когда совсем не можешь). Это правило, провозглашённое после бесчисленных войн с причудливыми, непостижимыми и трудноустранимыми эффектами в многочисленных схемах, было придумано, чтобы исключить скользкие результаты неидеального подавления синфазного напряжения в ОУ. Эффект, вызванные синфазными напряжениями, часто трудно предсказать и обнаружить, не говоря уж о том, чтобы исправлять. Суммирующая точка с нулевым потенциалом — очень дружественное, очень надёжное место. Она (обычно) предсказуема, математически понятна и неуязвима для коварных драконов синфазного режима.

                  У всех существующих ОУ коэффициент подавления синфазного напряжения (CMRR) падает с ростом частоты, и А1 не исключение. График зависимости CMRR от частоты показан на рис.15.

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

                  Я рассматривал различные странные схемы для решения этой задачи. Один из таких ужасов – развязка моста Вина и входа А1 через трансформатор. Этот подход не просто некрасив, вполне вероятно, что в определенных местах он будет признан непристойным. Я даже не стал рисовать такую схему, чтобы издателя этой книги не смогли вызвать в суд группы фанатов ОУ-фундаменталистов. Даже если бы я заставил эту нескладную схему работать, я просто чувствовал, что так делать нельзя. Я почти слышал, как простая, маленькая элегантная лампочка накаливания Хьюлетта, которая так хорошо работала, смеется надо мной.

                  Где-то в уважаемом руководстве по применению от фирмы Philbrick говорится: «Всегда есть выход». Последняя схема показывает, что он есть – рис.16.

                  Эта схема похожа на предыдущую, за исключением А3, который появился вместе с буфером А4. А3 привязывает не-инвертирующий вход А1 к виртуальной земле за счёт перемещения тех узлов моста Вина и схемы АРУ, которые ранее были привязаны к земле. Этим мы добавляем третьий управляющий контур в исходную схему Хьюлетта (это будет очень занятый генератор — бедная несчастная А1, слуга трех господ), но не оказываем негативного воздействия на его работу. Когда не-инвертирующий вход А1 привязан к виртуальной земле, синфазная составляющая на её входах отсутствует. Схема стала удовлетворять правилу Вильямса, и, скорее всего, должны начаться хорошие вещи.

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

                  На выходе анализатора виден только слабый след первой гармоники и шум. Анализатора показывал значения в два раза меньшие, чем нижний измеряемый порог искажений по спецификации, что доставляло. Хотя и маловероятно, чтобы генератор и анализатор имели компенсирующиеся ошибки, делать выводы было рано. И я решил обратиться к весьма специализированному оборудованию, чтобы узнать истину. Я отнёс генератор на Audio Precision System One, где были измерены искажения и они составили 0.0003% (3ppm или -110дб).
                  Я был очень доволен тем, что нам не удалось обнаружить ничего выше этого уровня.

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

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

                  1) Кроме того, между прочим, их самый долго-живущий продукт. Серия HP2000 продолжала продаваться до середины 80, почти 50 лет.
                  2) Хьюлет заимствовал эту технологию у Meacham, который предложил ее в 1938 году как способ стабилизации кварцевого генератора. Соответствующая работа приведена в ссылке номер пять к диссертации.
                  3) С позиций тех лет, 6J6 и 6F6 это термоэмиссионные FET, разработанные Ли Де Форестом.
                  4) Чтобы быть точным, 50 транзисторов, 40 резисторов и 4 конденсатора в этой схеме.

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

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

                    Let's block ads! (Why?)