Digital-мероприятия в Москве cо 9 по 15 сентября

Подборка мероприятий на неделю.

image

Культура праздности и политика бездействия. Рудинг-группа

  • 09 сентября (понедельник)
  • Берсеневская наб 14с5А
  • бесплатно
  • Эволюция «домашней жизни» в архитектуре связана с растущей культурой лени и праздности. Это бездействие, в свою очередь, развивается параллельно культуре участия — рутине, которая существует по определенному протоколу и в ограниченных временных рамках. Так пользователи каждый день совершают практически идентичный набор действий от приготовления завтрака до мытья посуды в постоянно меняющейся инфраструктуре.
    Участие в ридинг-группе поможет участникам сформулировать позицию по отношению к современной социальной жизни и изучить политическую сторону лени. В рамках семинара под социальностью подразумевается результат интенсивной планетарной урбанизации, которая продолжается во всем мире.

Как принимать оплату от зарубежных клиентов: инструкции, кейсы, лайфхаки

  • 10 сентября (вторник)
  • Мясницкая 13с18
  • бесплатно
  • 10 сентября на бизнес-завтраке Go Global Academy в «Акселераторе ФРИИ» подробно разберем, как принимать оплату от зарубежных клиентов — от выбора юрисдикции и платежного провайдера до минимизации юридических рисков.

Meetup: Автоматизируем профилирование Java

  • 10 сентября (вторник)
  • ПрАндропова 18корп2
  • бесплатно
  • Вместе с коллегами будем разбираться как тестировать и оптимизировать производительность микросервисов и узнаем как достать себя из рутины проверки профайлеров для JVM.

Премия «Go Banking Awards»

  • 11 сентября (среда)
  • Кутузовский проспект 12с3
  • от 0 р.
  • Мероприятие состоит из трех частей: доклады экспертов об инсайтах сферы, награждение победителей рейтинга и громкое after-party.
    Выступают:
    ️ Banki.ru “Народный выбор. Что от банков хотят клиенты?”
    ️ Симбирсофт “Интеллектуальный мобильный банкинг: тренды Usability”
    ️ MyTarget “Инсайты о медиабаинге для банковских приложений”
    ️Go Mobile “О первом исследовании: что мы узнали о банках? Методология, цели, планы на будущее”
    Ждут представителей банков, коллег из сферы digital и решения для банков.

ПиР-2019

  • 12 сентября (четверг) — 15 сентября (воскресенье)
  • Клязьма
  • от 16 000 р.
  • Большой ПиР — грандиозное событие (в 2018 году более 1300 участников и 450 мастер-классов). С утра и до вечера Вы включены в круглосуточное общение.

Речевые технологии в сфере розничной торговли

  • 12 сентября (четверг)
  • Льва Толстого 16
  • бесплатно
  • 12 сентября поговорим о том, как речевые технологии помогают оптимизировать бизнес-процессы и повышать продажи розничной торговле.
    Лучшие партнёры Яндекс.Облака, использующие сервис Yandex SpeechKit, детально разберут реальные кейсы внедрения голосовых помощников в ритейле.
    Вы узнаете, как:
    • внедрить автоматизированных тайных покупателей;
    • собрать обратную связь и вовлечь клиентов в программу лояльности с помощью роботов;
    • улучшить работу сотрудников колл-центра с помощью речевой аналитики.

Большой взрыв от маретинга до мартех

  • 12 сентября (четверг)
  • Ленинская слобода 26с15
  • бесплатно
  • CoMagic — главный идеолог МарТех в России. Второй раз мы проводим в Москве главную martech-конференцию страны.
    Почему именно МарТех? Российский рынок маркетинга стремительно меняется и все больше уходит в digital. Появляются новые сервисы автоматизации рекламы, CRM-системы, платформы для аналитики и прочие цифровые решения, призванные упростить работу маркетолога и одновременно повысить ее результативность. Однако наш рынок все еще отстает от западных тенденций в среднем на 3-5 лет. Настоящая революция в маркетинговых технологиях сейчас происходит на западных рынках. Тот, кто овладеет новыми инструментами сегодня, завоюет рынок завтра.

D2C E-commerce died

  • 13 сентября (пятница)
  • Ленинградский просп 151
  • бесплатно
  • 52% розничных покупок граждан США в онлайн-магазинах происходит на Amazon, в Китае около 56% на Alibaba Group, в мире сейчас 80% онлайн покупок совершается на интернет площадках ритейлеров. Согласно исследованиям PWC, в России к 2023 году национальные игроки составят 49% рынка интернет коммерции, при этом максимальный прирост придадут маркетплейсы. В этих реалиях бренды обязаны активно задействовать возможности онлайн-ритейлера. На нашем митапе эксперты и участники рынка поделятся опытом, лучшими кейсами и практическими советами, как присутствуя в онлайн-ритейле завоевать внимание покупателей.

Digital Marketing Conference 2019

  • 13 сентября (пятница)
  • Конференц-зал дома Правительства
  • от 27 500 р.
  • В этом году мы пригласили дюжину самых именитых экспертов со всех частей света. Это не только креативные лидеры мирового рекламного рынка, но и гуру маркетинга, представители брендов и технологических гигантов! 20% скидка: skipskipad

Демодуляция

  • 14 сентября (суббота)
  • Льва Толстого 16
  • бесплатно
  • В начале осени музей Яндекса устроит праздник ретрокомпьютинга «Демодуляция». Это мероприятие для всех — кто глубоко погружён в тему и кто просто интересуется историей технологий.

Хакатон JAVA HACK

  • 14 сентября (суббота) — 15 сентября (воскресенье)
  • Берсеневская наб 6с3
  • бесплатно
  • Райффайзенбанк и компания Deworkacy проводят хакатон JAVA HACK для начинающих Java-разработчиков, дизайнеров, аналитиков и менеджеров digital-продуктов. Призовой фонд составит 600 000 рублей. Лучшие участники смогут присоединиться к IT-команде Райффайзенбанка.

Хакатон ВТБ /more.tech

  • 14 сентября (суббота)
  • ВДНХ павильон «»Умный город»»
  • бесплатно
  • more.tech — хакатон ВТБ, на котором вы проверите, как глубоко готовы нырнуть в разработку. Пока кто-то выбирает коктейли на пляже, вы выбираете Web или Mobile — один из двух треков разработки продукта ВТБ. Пока одни копят деньги на отпуск, вы можете их выиграть: призовой фонд /more.tech составляет 450 000 рублей. Хватит плавать в разработке. Ныряйте в хакатон ВТБ!


ссылка на оригинал статьи https://habr.com/ru/post/466683/

Линейная регрессия и методы её восстановления

image
Источник: xkcd

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

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

О чём речь?

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

$\begin{pmatrix} a_{11} & a_{12} & a_{13} & ... & a_{1n} \\ a_{21} & a_{22} & a_{23} & ... & a_{2n} \\ ... \\ a_{m1} & a_{m2} & a_{m3} & ... & a_{mn} \\ \end{pmatrix} \begin{pmatrix} b_{1} \\ b_{2} \\ ... \\ b_{m} \\ \end{pmatrix}$

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

$x_n$

, а последний столбец матрицы

$A$

содержит единицы):

$ \begin{pmatrix} a_{11} & a_{12} & a_{13} & ... & a_{1n} \\ a_{21} & a_{22} & a_{23} & ... & a_{2n} \\ ... \\ a_{m1} & a_{m2} & a_{m3} & ... & a_{mn} \\ \end{pmatrix} \times \begin{pmatrix} x_{1} \\ x_{2} \\ ... \\ x_{n} \\ \end{pmatrix} = \begin{pmatrix} b_{1} \\ b_{2} \\ ... \\ b_{m} \\ \end{pmatrix} $

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

Это простой пример линейной регрессии, который демонстрирует зависимость одной переменной (по оси

$y$

) от другой переменной (по оси

$x$

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

Метод максимального правдоподобия

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

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

$\mu$

имеющегося нормального распределения. В то же время, вероятность того, что

$\mu$

принимает то или иное значение, при условии наличия наблюдаемых

$x$

, выглядит следующим образом:

$P(\mu \mid X, \sigma^2) = \prod_{x \in X}{\frac{1}{\sigma\sqrt{2\pi}}\; e^{ -\frac{(x-\mu)^2}{2\sigma^2} }}$

Подставим теперь вместо

$\mu$

и

$X$

нужные нам переменные:

$P(x \mid A, B, \sigma^2) = \prod_{i \in [1, m]}{\frac{1}{\sigma\sqrt{2\pi}}\; e^{ -\frac{(b-ax)^2}{2\sigma^2} }}, a_i \in A, b_i \in B$

Осталось только найти вектор

$x$

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

$f(x) = ln(\prod_{i \in [1, m]}{\frac{1}{\sigma\sqrt{2\pi}}\; e^{ -\frac{(b-ax)^2}{2\sigma^2} }})= \sum_{i \in [1, m]}ln\frac{1}{\sigma\sqrt{2\pi}}\; - \sum_{i \in [1, m]}\frac{(b-ax)^2}{2\sigma^2}$

Что, в свою очередь, сводится к минимизации следующей функции:

$f(x) = \sum_{i \in [1, m]} (b-ax)^2$

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

QR разложение

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

$\nabla f(x) = \sum_{i \in [1, m]}2a_i(a_ix - b_i)=0$

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

$A^T A x = A^Tb$

Итак, мы раскладываем матрицу

$A$

на матрицы

$Q$

и

$R$

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

$ \begin{align} & (QR)^T (QR) x = (QR)^Tb; \\ & R^T Q^T Q R x = R^T Q^T b; \\ \end{align} $

Матрица

$Q$

является ортогональной. Это позволяет нам избавиться от произведения

$Q Q^T$

:

$ \begin{align} & R^T R x = R^T Q^T b; \\ & (R^T)^{-1} R^T R x = (R^T)^{-1} R^T Q^T b; \\ & R x = Q^T b. \end{align} $

А если заменить

$Q^T b$

на

$z$

, то получится

$R x = z$

. Учитывая, что

$R$

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

$ \begin{pmatrix} r_{11} & r_{12} & r_{13} & r_{14} & ... & r_{1n} \\ 0 & r_{22} & r_{23} & r_{24} & ... & r_{2n} \\ 0 & 0 & r_{33} & r_{34} & ... & r_{3n} \\ 0 & 0 & 0 & r_{44} & ... & r_{4n} \\ ... \\ 0 & 0 & 0 & 0 & ... & r_{nn} \\ \end{pmatrix} \times \begin{pmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \\ ... \\ x_n \end{pmatrix} = \begin{pmatrix} z_1 \\ z_2 \\ z_3 \\ z_4 \\ ... \\ z_n \end{pmatrix} $

Это можно решать методом подстановки. Элемент

$x_n$

находится как

$z_n / r_{nn}$

, предыдущий элемент

$x_{n-1}$

находится как

$(z_{n-1} - r_{n-1,n}x_n) / r_{n-1,n-1}$

и так далее.

Здесь стоит отметить, что сложность получившегося алгоритма за счет использования QR разложения равна

$O(2mn^2)$

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

Градиентный спуск

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

$\nabla f(x) = \sum_{i \in [1, m]}2a_i(a_ix - b_i)$

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

$i$

с первого до

$k$

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

$k+1$

до

$m$

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

$m$

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

$\nabla f(x) = \sum_{i \in P_1}2a_i(a_ix - b_i) + \sum_{i \in P_2}2a_i(a_ix - b_i) + ... + \sum_{i \in P_k}2a_i(a_ix - b_i)$

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

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

LSQR

LSQR — еще один метод решения поставленной задачи, который подходит как для восстановления линейной регрессии, так и для решения систем линейных уравнений. Его главная особенность заключается в том, что он совмещает в себе преимущества матричных методов и итеративного подхода. Реализации этого метода можно найти как в библиотеки SciPy, так и в MATLAB. Описание данного метода приводиться здесь не будет (его можно найти в статье LSQR: An algorithm for sparse linear equations and sparse least squares). Вместо этого будет продемонстрирован подход, позволяющий адаптировать LSQR к выполнению в распределенной среде.

В основе метода LSQR лежит процедура бидиагонализации. Это итеративная процедура, каждая итерация которой состоит из следующих шагов:
image

Но если исходить из того, что матрица

$A$

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

image

Именно этот подход используется при реализации линейной регрессии в Apache Ignite ML.

Заключение

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


ссылка на оригинал статьи https://habr.com/ru/post/465743/

Let’s Encrypt обслуживает почти 30% доменов

По-прежнему в ходу RC4/3DES/TLS 1.0 и сертификаты на сотни лет. Анализ сотен миллионов SSL-рукопожатий

Если посмотреть на набор данных с 350 млн SSL-соединений, сразу возникает вопросов:

  • кто выдал эти сертификаты
  • какая там криптография
  • каково их время жизни

Let’s Encrypt выдал сертификаты почти для 30% доменов

Наш сервер (leebutterman.com) автоматически получает сертификаты Let’s Encrypt — это самый популярный центр сертификации в интернете! Свыше 47 миллионов доменов защищены сертификатами Let’s Encrypt, то есть почти 30% нашей выборки.

352,3 млн доменов смогли установить 158,7 млн соединений с указанием сертификата и эмитента. Первая десятка:

47,2 млн Let's Encrypt 28,9 млн DigiCert 13,8 млн Comodo 10,1 млн Google 7,2 млн  GoDaddy 7,1 млн  Sectigo 7,0 млн  Cpanel 6,1 млн  GlobalSign 3,4 млн  CloudFlare0 2,5 млн  Amazon 2,1 млн  (анонимная самоподпись) 1,1 млн  Plesk

Более 100 тыс. раз встречается такой совокупный issuer_dn s:

193590544 null 47237383 C=US, O=Let’s Encrypt, CN=Let’s Encrypt Authority X3 13367305 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA 13092572 C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Domain Validation Secure Server CA 10081610 C=US, O=Google Trust Services, CN=Google Internet Authority G3 7048258 C=US, ST=TX, L=Houston, O=cPanel, Inc., CN=cPanel, Inc. Certification Authority 6772537 C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA 4946970 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL RSA CA 2018 3926261 C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO ECC Domain Validation Secure Server CA 2 3727005 C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certs.godaddy.com/repository/, CN=Go Daddy Secure Certificate Authority — G2 3483129 C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., OU=http://certs.starfieldtech.com/repository/, CN=Starfield Secure Certificate Authority — G2 3404488 C=US, ST=CA, L=San Francisco, O=CloudFlare, Inc., CN=CloudFlare Inc ECC CA-2 2523036 C=US, O=Amazon, OU=Server CA 1B, CN=Amazon 2498667 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Thawte TLS RSA CA G1 2431104 C=BE, O=GlobalSign nv-sa, CN=GlobalSign Domain Validation CA — SHA256 — G2 2422131 C=BE, O=GlobalSign nv-sa, CN=AlphaSSL CA — SHA256 — G2 2310140 C=US, O=DigiCert Inc, CN=DigiCert SHA2 Secure Server CA 1791127 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Encryption Everywhere DV TLS CA — G1 1298054 C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Organization Validation Secure Server CA 1019337 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust RSA CA 2018 853367 C=US, O=DigiCert Inc, CN=DigiCert ECC Secure Server CA 842994 C=US, ST=Someprovince, L=Sometown, O=none, OU=none, CN=localhost, emailAddress=webmaster@localhost 828175 C=CH, L=Schaffhausen, O=Plesk, CN=Plesk, emailAddress=info@plesk.com 800601 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Thawte RSA CA 2018 736336 C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA — SHA256 — G2 679798 C=FR, ST=Paris, L=Paris, O=Gandi, CN=Gandi Standard SSL CA 2 648187 OU=Default Web server, CN=www.example.com, emailAddress=postmaster@example.com 572342 C=—, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=server.ab-archive.net, emailAddress=root@server.ab-archive.net 546456 C=DE, ST=Bayern, L=Muenchen, O=ispgateway, CN=webserver.ispgateway.de, emailAddress=hostmaster@ispgateway.de 501592 C=US, ST=Virginia, L=Herndon, O=Parallels, OU=Parallels Panel, CN=Parallels Panel, emailAddress=info@parallels.com 501093 C=US, ST=California, O=DreamHost, CN=sni.dreamhost.com 480468 C=CN, O=TrustAsia Technologies, Inc., OU=Domain Validated SSL, CN=TrustAsia TLS RSA CA 468190 C=BE, O=GlobalSign nv-sa, CN=GlobalSign CloudSSL CA — SHA256 — G3 464242 C=—, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=localhost.localdomain, emailAddress=root@localhost.localdomain 455067 C=PL, O=home.pl SA, CN=Certyfikat SSL 445550 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Encryption Everywhere DV TLS CA — G2 417062 C=PL, O=Unizeto Technologies SA, OU=Certum Certification Authority, CN=Certum Domain Validation CA SHA2 416966 C=JP, ST=Tokyo, L=Chiyoda-ku, O=Gehirn Inc., CN=Gehirn Managed Certification Authority — RSA DV 384480 C=IT, ST=Bergamo, L=Ponte San Pietro, O=Actalis SpA/03358520967, CN=Actalis Organization Validated Server CA G2 368708 C=JP, ST=OSAKA, L=OSAKA, O=SecureCore, CN=SecureCore RSA DV CA 353716 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL TLS RSA CA G1 343034 C=US, O=DigiCert Inc, CN=DigiCert Global CA G2 278170 C=PL, O=nazwa.pl sp. z oo, OU=http://nazwa.pl, CN=nazwaSSL 267784 C=US, ST=Illinois, L=Chicago, O=Trustwave Holdings, Inc., CN=Trustwave Organization Validation SHA256 CA, Level 1, emailAddress=ca@trustwave.com 251987 C=IT, ST=Bergamo, L=Ponte San Pietro, O=Actalis SpA/03358520967, CN=Actalis Domain Validation Server CA G2 244273 C=JP, O=Cybertrust Japan Co., Ltd., CN=Cybertrust Japan Public CA G3 236608 C=US, ST=Washington, L=Seattle, O=Odin, OU=Plesk, CN=Plesk, emailAddress=info@plesk.com 228615 C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Organization Validation Secure Server CA 202529 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust TLS RSA CA G1 184627 C=US, ST=MI, L=Ann Arbor, O=Internet2, OU=InCommon, CN=InCommon RSA Server CA 184276 C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=© 2012 Entrust, Inc. — for authorized use only, CN=Entrust Certification Authority — L1K 177315 C=NL, ST=Noord-Holland, L=Amsterdam, O=TERENA, CN=TERENA SSL CA 3 171469 C=LV, L=Riga, O=GoGetSSL, CN=GoGetSSL RSA DV CA 168933 C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA 150830 C=RU, ST=Moscow, L=Moscow, O=Odin, OU=Odin Automation, CN=odin.com, emailAddress=webmaster@odin.com 122399 C=JP, O=Japan Registry Services Co., Ltd., CN=JPRS Domain Validation Authority — G2 118029 C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo ECC Domain Validation Secure Server CA 109435 C=GB, ST=Berkshire, L=Newbury, O=My Company Ltd 108309 C=US, ST=Washington, L=Redmond, O=Microsoft Corporation, OU=Microsoft IT, CN=Microsoft IT TLS CA 2 108016 C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA — G3 107719 C=—, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=ns546485.ip-158-69-252.net, emailAddress=root@ns546485.ip-158-69-252.net 106164 C=US, ST=DE, L=Wilmington, O=Corporation Service Company, CN=Trusted Secure Certificate Authority DV 104634 CN=localhost

В схеме zgrab это .data.tls.server_certificates.certificate.parsed.issuer_dn, результаты можно воспроизвести с помощью zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_certificates.certificate.parsed.issuer_dn | sort | uniq -c zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_certificates.certificate.parsed.issuer_dn | sort | uniq -c zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_certificates.certificate.parsed.issuer_dn | sort | uniq -c

Срок действия сертификатов Let’s Encrypt составляет три месяца, стимулируя регулярный цикл обновлений, но сегодня в интернете остаётся множество древних методов безопасности.

Почти три миллиона доменов с RC4 или 3DES

Из 160 млн соединений более 150 млн использовали эллиптические кривые, протокол Диффи — Хеллмана и AES. Следующим по популярности набором шифров стал RSA с RC4, а почти 1,8% соединений использовали RC4 или 3DES, и даже DES на шести доменах! (zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_hello.cipher_suite.name | sort | uniq -c zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_hello.cipher_suite.name | sort | uniq -c)

120457325	TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 16750820	TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 13808304	TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 2393679		TLS_RSA_WITH_RC4_128_SHA 1768423		TLS_RSA_WITH_AES_256_CBC_SHA 1653084		TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 1397638		TLS_RSA_WITH_AES_128_CBC_SHA 373383		TLS_ECDHE_RSA_WITH_RC4_128_SHA 157929		TLS_RSA_WITH_3DES_EDE_CBC_SHA 17663		TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 4041		TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 2794		TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 458		TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 205		TLS_RSA_WITH_RC4_128_MD5 115		TLS_DH_RSA_WITH_AES_128_CBC_SHA 28		неизвестный 6		TLS_RSA_WITH_DES_CBC_SHA 1		TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

Обратите внимание, что последний Chrome не может принять RC4, но принимает 3DES (спасибо, badssl.com!)

Более четырёх миллионов доменов с устаревшим TLS

По умолчанию пакет TLS в go не использует TLS 1.3 — кажется, что набор данных собирали с zgrab, который не использует TLS 1.3 (наверное, лучше обновить его к следующим запускам). Серверы большинства доменов использовали TLS 1.2, но более четырёх миллионов работают на TLS 1.0 (zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_hello.version.name | sort | uniq -c zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_hello.version.name | sort | uniq -c).

154500876 TLSv1.2 4263887   TLSv1.0 19352     TLSv1.1 1781      SSLv3

TLS 1.0 до сих пор разрешён в Chrome.

Сотни тысяч сертификатов доменов истекают после 2099 года

В соответствии с лучшими практиками от Let’s Encrypt, срок службы SSL-сертификатов должен быть 90 дней.

Но лучшие практики не запрещают альтернативные практики!


Фото Рика Голдвасера из Флагстаффа, Аризона, США [CC BY 2.0], via Wikimedia Commons

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

Тысячи сертификатов истекают после 3000 года

Более 3000 сертификатов не истекают в этом тысячелетии. Свыше 8000 сертификатов истекают после 2200 года. Более 200 000 сертификатов — после 2100 года (более 1,5 млн — только в 2040-х годах!)

Так, в одном 2117 году истекает срок действия более 100 000 сертификатов, а в 3017-м — более тысячи. Возможно, именно в 2017 году что-то внушало доверие к долгоживущим сертификатам?

Миллионы сертификатов уже истекли

У почти 1,6 млн доменов сертификат истёк недавно (в июле, месяце сканирования). У почти 3,7 млн доменов сертификат истёк в 2019 году. Свыше 9,6 млн доменов работают с сертификатом, срок действия которого вышел в 2010-е годы!

Сотни обслуживаемых сертификатов ещё не действительны

Более того, у более ста тысяч сертификатов срок действия истекает до начала срока их действия!

Исследуйте сами

Дайте знать, что вы думаете! Проанализируйте этот набор данных и поделитесь результатами!


ссылка на оригинал статьи https://habr.com/ru/post/466701/

Vivaldi Beta для Android — Настоящий браузер

Всем привет!

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

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

Первый взгляд

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

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

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

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

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

Вкладки, больше вкладок!

При работе в браузере самый популярный инструмент — это вкладки. Мы уже привыкли открывать несколько страниц одновременно и работать с ними, быстро переключаясь с одной на другую. Для этого в Vivaldi есть своя «кнопка вкладок» — она находится в нижнем правом углу окна браузера и отображает число открытых в данный момент страниц. Нажав на неё можно просмотреть весь список в виде аналогичных экспресс-панели ячеек:

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

Панели инструментов

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

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

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

Заметки

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

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

Также вы можете использовать те же самые заметки, что и на десктопной версии, включив ещё одну важную функцию браузера —

Синхронизация с другими устройствами

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

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

Больше функций, хороших и разных

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

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

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

На этом пока всё. Чтобы попробовать бета-версию браузера Vivaldi для Android, загрузите его из Google Play. Vivaldi поддерживает работу в Android версии 5 и выше. Поддержка планшетов пока находится в работе. Надеемся, что данный релиз вас порадует так же, как он радует нас. И, конечно, мы хотим сказать вам огромное спасибо за помощь в подготовке мобильной версии браузера Vivaldi — без вашей поддержки, без ваших идей и предложений ничего бы не получилось.

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


ссылка на оригинал статьи https://habr.com/ru/company/vivaldi/blog/466705/

Разработка монолитной Unix подобной OS — Библиотека С

В предыдущей статье мы научились запускать Hello World ядро и написали пару функций для работы со строками. Теперь пришло время расширить библиотеку С чтобы можно было реализовать kprintf и другие необходимые функции. Поехали!

Оглавление

1. Система сборки (make, gcc, gas). Первоначальная загрузка (multiboot). Запуск (qemu). Библиотека C (strcpy, memcpy, strext).
2. Библиотека C (sprintf, strcpy, strcmp, strtok, va_list …). Сборка библиотеки в режиме ядра и в режиме пользовательского приложения.
3. Системный журнал ядра. Видеопамять. Вывод на терминал (kprintf, kpanic, kassert).
4. Динамическая память, куча (kmalloc, kfree).
6. Организация памяти и обработка прерываний (GDT, IDT, PIC, syscall). Исключения.
5. Виртуальная память (каталог страниц и таблица страниц).
6. Процесс. Планировщик. Многозадачность. Системные вызовы (kill, exit, ps).
7. Файловая система ядра (initrd), elf и его внутренности. Системные вызовы (exec).
8. Драйверы символьных устройств. Системные вызовы (ioctl, fopen, fread, fwrite). Библиотека C (fopen, fclose, fprintf, fscanf).
9. Оболочка как полноценная программа для ядра.
10. Пользовательский режим защиты (ring3). Сегмент состояния задачи (tss).

Библиотека С

Сначала необходимо реализовать типы с явным указанием размерности.
Поскольку мы будем собирать под одну платформу, пока наши определения и реализации будут верны. Это не универсально, но именно поэтому читаемо и просто. Я придерживаюсь подхода, что иногда лучше сделать что-то не универсальное, но удовлетворяющее текущим требованиям, поскольку поддерживать универсальные решения крайне тяжело.
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned int u_long;

Не помешает и ввести Булевский тип.
#pragma once

/* types */
typedef int bool;

#define true 1
#define false 0
#define null 0

Также не помешает нам и парочка макросов для работы с байтами.
typedef unsigned long size_t;

#define HIGH_WORD(addr) ((addr & 0xffff0000) >> 16)
#define LOW_WORD(addr) ((addr & 0xffff))
#define LOW_BYTE(addr) ((addr & 0x00ff))
#define HIGH_BYTE(addr) ((addr & 0xff00) >> 8)

Для работы с переменным количеством аргументов нужны следующие макросы. Этот подход работает только в том случае если функция следует соглашению вызова языка Си, в котором аргументы функции передаются через стек начиная с последнего.
typedef size_t* va_list;

#define va_start(l, a) (l = (void*)((size_t)&a) + sizeof(a))
#define va_end(l) (l = (void*)0)
#define va_arg(l, s) (*(s*)(l++))

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

Далее, в видеоуроке мы рассмотрим реализацию следующих библиотечных функций. Реализация не претендует на оптимальность и полноту, но на простоту и читаемость думаю претендует. Отмечу только что мы используем потокобезопасную реализацию функции strtok, которая называется strtok_r. А функции strinv и strext мы придумали сами в прошлом уроке. Если ты знаком с языком С, думаю тебе будут знакомы почти все перечисленные ниже функции.
extern int strlen(const char* s);
extern char* strcpy(char* s1, const char* s2);
extern char* strncpy(char* s1, const char* s2, u_int n);
extern void* memcpy(void* buf1, const void* buf2, u_int bytes);
extern void* memset(void* buf1, u8 value, u_int bytes);
extern int strcmp(const char* s1, const char* s2);
extern int strncmp(const char* s1, const char* s2, u_int n);
extern char* strcat(char* s1, const char* s2);
extern char* strext(char* buf, const char* str, char sym);
extern int strspn(char* str, const char* accept);
extern int strcspn(char* str, const char* rejected);
char* strchr(const char* str, char ch);
extern char* strtok_r(char* str, const char* delims, char** save_ptr);
extern char* memext(void* buff_dst, u_int n, const void* buff_src, char sym);
extern char* itoa(unsigned int value, char* str, unsigned int base);
extern unsigned int atou(char* str);
extern char* strinv(char* str);
extern unsigned int sprintf(char* s1, const char* s2, ...);
extern unsigned int snprintf(char* s1, u_int n, const char* s2, ...);
extern unsigned int vsprintf(char* s1, const char* s2, va_list list);
extern unsigned int vsnprintf(char* s1, unsigned int n, const char* s2, va_list list);

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

Ссылки

Разработка монолитной Unix подобной OS — Начало
Видеоурок к этой статье
Исходный код (тебе нужна ветка lesson2)

Список литературы

1. James Molloy. Roll your own toy UNIX-clone OS.
2. Зубков. Ассемблер для DOS, Windows, Unix
3. Калашников. Ассемблер — это просто!
4. Таненбаум. Операционные системы. Реализация и разработка.
5. Роберт Лав. Ядро Linux. Описание процесса разработки.


ссылка на оригинал статьи https://habr.com/ru/post/466709/