Проблема с сертификатами Sectigo после 30 мая 2020 года и метод решения

В субботу 30 мая 2020 года возникла не сразу понятная проблема с популярными SSL/TLS сертификатами от вендора Sectigo (бывший Comodo). Сами сертификаты продолжали оставаться в полном порядке, однако «протух» один из промежуточных CA-сертификатов в цепочках, с которыми поставлялись данные сертификаты. Ситуация не сказать, чтобы фатальная, но неприятная: актуальные версии браузеров ничего не заметили, однако большая часть автоматизаций и старых браузеров/ОС оказались не готовыми к такому повороту.

Хабр не стал исключением, поэтому и написан этот ликбез / postmortem.

TL;DR Решение в самом конце.

Опустим базовую теорию про PKI, SSL/TLS, https и прочее. Механика удостоверения сертификатом безопасности домена состоит в построении цепочки из ряда сертификатов до одного из доверенных браузером или операционной системой, которые хранятся в так называемом Trust Store. Этот список распространяется с операционной системой, экосистемой среды исполнения кода или с браузером. Любые сертификаты имеют срок действия, по истечении которого они считаются недоверенными, в том числе сертификаты в trust store. Как выглядела цепочка доверия до наступления рокового дня? Разобраться нам поможет web-утилита SSL Report от компании Qualys.

Итак, одним из самых популярных «коммерческих» сертификатов является Sectigo Positive SSL (ранее разывался Comodo Positive SSL, сертификаты с этим наименованием ещё в ходу), он является так называемым DV-сертификатом. DV — это самый примитивный уровень сертификации, означающий проверку доступа к управлению доменом у выпускающего такой сертификат. Собственно, DV и расшифровывается как «domain validation». Для справки: ещё есть OV (organization validation) и EV (extended validation), а бесплатный сертификат от Let’s Encrypt тоже DV. Для тех, кому по какой-либо причине не устраивает механизм ACME, продукт Positive SSL является самым подходящим по соотношению цена/возможности (однодоменный сертификат стоит около 5-7 долларов за год с суммарным сроком действия сертификата до 2 лет и 3 месяцев).

Типовой сертификат Sectigo DV (RSA) до недавнего времени поставлялся с такой цепочкой промежуточных CA:

Certificate #1:   Data:     Version: 3 (0x2)     Serial Number:       7d:5b:51:26:b4:76:ba:11:db:74:16:0b:bc:53:0d:a7     Signature Algorithm: sha384WithRSAEncryption       Issuer: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority       Validity         Not Before: Nov  2 00:00:00 2018 GMT         Not After : Dec 31 23:59:59 2030 GMT       Subject: C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA Certificate #2:   Data:     Version: 3 (0x2)     Serial Number:       13:ea:28:70:5b:f4:ec:ed:0c:36:63:09:80:61:43:36     Signature Algorithm: sha384WithRSAEncryption       Issuer: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root       Validity         Not Before: May 30 10:48:38 2000 GMT         Not After : May 30 10:48:38 2020 GMT       Subject: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority

Здесь отсутствует «третий сертификат», самоподписной от AddTrust AB, так как в какой-то момент времени стало считаться правилом плохого тона включать в цепочки самоподипсанные корневые сертификаты. Можно обратить внимание, что промежуточный CA, выданный UserTrust от AddTrust имеет срок действия 30 мая 2020 года. Это не спроста, так как для данного CA была запланирована процедура вывода из эксплуатации. Считалось, что к 30 мая 2020 года во всех trust store уже к этому времени появится кросс-подписанный сертификат от UserTrust (под капотом это один и тот же сертификат, вернее публичный ключ) и цепочка, даже с включенным недоверенным уже сертификатом будет иметь альтернативные пути построения и никто этого не заметит. Однако, планы разбились о реальность, а именно пространный термин «legacy systems». Действительно, владельцы актуальных версий браузеров ничего не заметили, однако сломалась гора автоматизаций, построенных на curl и ssl/tls-библиотеках ряда языков программирования и сред исполнения кода. Надо понимать, что многие продукты не руководствуются встроенными в ОС средствами построения цепочек, а «носят» свой trust store с собой. И не всегда они содержат то, что хотело бы видеть CA/Browser Forum. Да и в Linux далеко не всегда обновляются пакеты типа ca-certificates. В итоге всё вроде в порядке, но что-то не работает то там, то здесь.

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

Рисунок 1. График "трафика" на Хабре.
Рисунок 1. График «трафика» на Хабре.

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

Рисунок 2. Цепочка до доверенного сертификата современной версии браузера.
Рисунок 2. Цепочка до доверенного сертификата современной версии браузера.

А вот на рисунке 3 можно заметить, как всё выглядит на самом деле, когда что-то пошло не так и у нас legacy система. В таком случае соединение HTTPS не устанавливается и мы видим ошибку типа «certificate validation failed» или подобную ей.

Рисунок 3. Цепочка инвалидировалась, так как корневой сертификат и подписанный им промежуточный "протухли".
Рисунок 3. Цепочка инвалидировалась, так как корневой сертификат и подписанный им промежуточный «протухли».

На рисунке 4 мы уже видим «решение» для legacy систем: есть ещё один промежуточный сертификат, вернее «кросс-подпись» от иного CA, который как правило предустановлен в legacy системах. Это то, что нужно сделать: найти этот сертификат (который помечен как Extra download) и заменить им «протухший».

Рисунок 4. Альтернативная цепочка для legacy систем.
Рисунок 4. Альтернативная цепочка для legacy систем.

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

Previously they [Sectigo] assured everyone that no issues will be. However, the reality is that some legacy servers/devices are affected.

That is a ridiculous situation. We pointed their attention to the expiring AddTrust RSA/ECC multiple times within a year and each time Sectigo assured us no issues will be.

Я лично задавал вопрос на Stack Overflow на этот счёт месяц назад, но судя по всему, аудитория проекта не очень подходящая для таких вопросов, так что пришлось не него ответить самостоятельно по факту разбора.

Sectigo выпустил на этот счёт FAQ, но он настолько нечитабельный и пространный, что пользоваться им невозможно. Вот цитата, являющаяся квинтэссенцией всей публикации:

What You Need to Do
For most use cases, including certificates serving modern client or server systems, no action is required, whether or not you have issued certificates cross-chained to the AddTrust root.

As of April 30, 2020:  For business processes that depend on very old systems, Sectigo has made available (by default in the certificate bundles) a new legacy root for cross-signing, the “AAA Certificate Services” root. However, please use extreme caution about any process that depends on very old legacy systems. Systems that have not received the updates necessary to support newer roots such as Sectigo’s COMODO root will inevitably be missing other essential security updates and should be considered insecure. If you would still like to cross-sign to the AAA Certificate Services root, please contact Sectigo directly.

Очень нравится тезис «very old», конечно. Например, curl в консоли Ubuntu Linux 18.04 LTS (нашей базовой ОС на данный момент) с последними обновлениями не старше месяца, сложно назвать very old, однако оно не работает.

Большинство дистрибьютеров сертификатов выпустили свои заметки с решениями ближе к вечеру 30 мая. Например, очень годная в техническом плане от NameCheap (с конкретным описанием что делать и с готовыми сборками CA-bundles в zip-архивах, но только RSA):

Рисунок 5. Семь шагов, чтобы быстро всё починить.
Рисунок 5. Семь шагов, чтобы быстро всё починить.

Есть неплохая статья от Redhat, но там всё более Legacy и нужно инсталлировать даже ещё более корневой legacy сертификат от Comodo, чтобы всё работало.

Решение

Стоит продублировать решение ещё и тут. Ниже располагаются два набора цепочек для сертификатов DV Sectigo (не Comodo!), одна для привычных RSA сертификатов, другая для менее привычных ECC (ECDSA) сертификатов (мы используем две цепочки достаточно давно). С ECC было сложнее, так как большинство решений не учитывает наличие таких сертификатов в силу их малой распространённости. В итоге, нужный промежуточный сертификат был найден на crt.sh.

Цепочка для сертификатов, основанных на алгоритме ключа RSA. Сравните со своей цепочкой и обратите внимание, что заменился только нижний сертификат, а верхний остался прежним. Я их отличаю в бытовых условиях по последним трём символам блоков base64 не считая символа «равно» (в данном случае En8= и 1+V):

# Subject: /C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Domain Validation Secure Server CA # Algo: RSA, key size: 2048 # Issuer: /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority # Not valid before: 2018-11-02T00:00:00Z # Not valid after: 2030-12-31T23:59:59Z # SHA-1 Fingerprint: 33:E4:E8:08:07:20:4C:2B:61:82:A3:A1:4B:59:1A:CD:25:B5:F0:DB # SHA-256 Fingerprint: 7F:A4:FF:68:EC:04:A9:9D:75:28:D5:08:5F:94:90:7F:4D:1D:D1:C5:38:1B:AC:DC:83:2E:D5:C9:60:21:46:76 -----BEGIN CERTIFICATE----- MIIGEzCCA/ugAwIBAgIQfVtRJrR2uhHbdBYLvFMNpzANBgkqhkiG9w0BAQwFADCB iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTgx MTAyMDAwMDAwWhcNMzAxMjMxMjM1OTU5WjCBjzELMAkGA1UEBhMCR0IxGzAZBgNV BAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UE ChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQDEy5TZWN0aWdvIFJTQSBEb21haW4g VmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA1nMz1tc8INAA0hdFuNY+B6I/x0HuMjDJsGz99J/LEpgPLT+N TQEMgg8Xf2Iu6bhIefsWg06t1zIlk7cHv7lQP6lMw0Aq6Tn/2YHKHxYyQdqAJrkj eocgHuP/IJo8lURvh3UGkEC0MpMWCRAIIz7S3YcPb11RFGoKacVPAXJpz9OTTG0E oKMbgn6xmrntxZ7FN3ifmgg0+1YuWMQJDgZkW7w33PGfKGioVrCSo1yfu4iYCBsk Haswha6vsC6eep3BwEIc4gLw6uBK0u+QDrTBQBbwb4VCSmT3pDCg/r8uoydajotY uK3DGReEY+1vVv2Dy2A0xHS+5p3b4eTlygxfFQIDAQABo4IBbjCCAWowHwYDVR0j BBgwFoAUU3m/WqorSs9UgOHYm8Cd8rIDZsswHQYDVR0OBBYEFI2MXsRUrYrhd+mb +ZsF4bgBjWHhMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMB0G A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAbBgNVHSAEFDASMAYGBFUdIAAw CAYGZ4EMAQIBMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0 LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDB2Bggr BgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRydXN0LmNv bS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZaHR0cDov L29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAMr9hvQ5Iw0/H ukdN+Jx4GQHcEx2Ab/zDcLRSmjEzmldS+zGea6TvVKqJjUAXaPgREHzSyrHxVYbH 7rM2kYb2OVG/Rr8PoLq0935JxCo2F57kaDl6r5ROVm+yezu/Coa9zcV3HAO4OLGi H19+24rcRki2aArPsrW04jTkZ6k4Zgle0rj8nSg6F0AnwnJOKf0hPHzPE/uWLMUx RP0T7dWbqWlod3zu4f+k+TY4CFM5ooQ0nBnzvg6s1SQ36yOoeNDT5++SR2RiOSLv xvcRviKFxmZEJCaOEDKNyJOuB56DPi/Z+fVGjmO+wea03KbNIaiGCpXZLoUmGv38 sbZXQm2V0TP2ORQGgkE49Y9Y3IBbpNV9lXj9p5v//cWoaasm56ekBYdbqbe4oyAL l6lFhd2zi+WJN44pDfwGF/Y4QA5C5BIG+3vzxhFoYt/jmPQT2BVPi7Fp2RBgvGQq 6jG35LWjOhSbJuMLe/0CjraZwTiXWTb2qHSihrZe68Zk6s+go/lunrotEbaGmAhY LcmsJWTyXnW0OMGuf1pGg+pRyrbxmRE1a6Vqe8YAsOf4vmSyrcjC8azjUeqkk+B5 yOGBQMkKW+ESPMFgKuOXwIlCypTPRpgSabuY0MLTDXJLR27lk8QyKGOHQ+SwMj4K 00u/I5sUKUErmgQfky3xxzlIPK1aEn8= -----END CERTIFICATE-----  # Subject: /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority # Algo: RSA, key size: 4096 # Issuer: /C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=AAA Certificate Services # Not valid before: 2019-03-12T00:00:00Z # Not valid after: 2028-12-31T23:59:59Z # SHA-1 Fingerprint: D8:9E:3B:D4:3D:5D:90:9B:47:A1:89:77:AA:9D:5C:E3:6C:EE:18:4C # SHA-256 Fingerprint: 68:B9:C7:61:21:9A:5B:1F:01:31:78:44:74:66:5D:B6:1B:BD:B1:09:E0:0F:05:CA:9F:74:24:4E:E5:F5:F5:2B -----BEGIN CERTIFICATE----- MIIFgTCCBGmgAwIBAgIQOXJEOvkit1HX02wQ3TE1lTANBgkqhkiG9w0BAQwFADB7 MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UE AwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTE5MDMxMjAwMDAwMFoXDTI4 MTIzMTIzNTk1OVowgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5 MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBO ZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sI s9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnG vDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQ Ijy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfb IWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0 tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97E xwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNV icQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5 D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJ WBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ 5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzG KAgEJTm4Diup8kyXHAc/DVL17e8vgg8CAwEAAaOB8jCB7zAfBgNVHSMEGDAWgBSg EQojPpbxB+zirynvgqV/0DCktDAdBgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rID ZsswDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAG BgRVHSAAMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29t L0FBQUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggr BgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUA A4IBAQAYh1HcdCE9nIrgJ7cz0C7M7PDmy14R3iJvm3WOnnL+5Nb+qh+cli3vA0p+ rvSNb3I8QzvAP+u431yqqcau8vzY7qN7Q/aGNnwU4M309z/+3ri0ivCRlv79Q2R+ /czSAaF9ffgZGclCKxO/WIu6pKJmBHaIkU4MiRTOok3JMrO66BQavHHxW/BBC5gA CiIDEOUMsfnNkjcZ7Tvx5Dq2+UUTJnWvu6rvP3t3O9LEApE9GQDTF1w52z97GA1F zZOFli9d31kWTz9RvdVFGD/tSo7oBmF0Ixa1DVBzJ0RHfxBdiSprhTEUxOipakyA vGp4z7h/jnZymQyd/teRCBaho1+V -----END CERTIFICATE-----

Цепочка для сертификатов, основанных на алгоритме ключа ECC. Аналогично с цепочкой для RSA, заменился только нижний сертификат, а верхний остался прежним (в данном случае fmA== и v/c=):

# Subject: /C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo ECC Domain Validation Secure Server CA # Algo: EC secp256r1, key size: 256 # Issuer: /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust ECC Certification Authority # Not valid before: 2018-11-02T00:00:00Z # Not valid after: 2030-12-31T23:59:59Z # SHA-1 Fingerprint: E8:49:90:CB:9B:F8:E3:AB:0B:CA:E8:A6:49:CB:30:FE:4D:C4:D7:67 # SHA-256 Fingerprint: 61:E9:73:75:E9:F6:DA:98:2F:F5:C1:9E:2F:94:E6:6C:4E:35:B6:83:7C:E3:B9:14:D2:24:5C:7F:5F:65:82:5F -----BEGIN CERTIFICATE----- MIIDqDCCAy6gAwIBAgIRAPNkTmtuAFAjfglGvXvh9R0wCgYIKoZIzj0EAwMwgYgx CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJz ZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQD EyVVU0VSVHJ1c3QgRUNDIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE4MTEw MjAwMDAwMFoXDTMwMTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAkdCMRswGQYDVQQI ExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoT D1NlY3RpZ28gTGltaXRlZDE3MDUGA1UEAxMuU2VjdGlnbyBFQ0MgRG9tYWluIFZh bGlkYXRpb24gU2VjdXJlIFNlcnZlciBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEH A0IABHkYk8qfbZ5sVwAjBTcLXw9YWsTef1Wj6R7W2SUKiKAgSh16TwUwimNJE4xk IQeV/To14UrOkPAY9z2vaKb71EijggFuMIIBajAfBgNVHSMEGDAWgBQ64QmG1M8Z wpZ2dEl23OA1xmNjmjAdBgNVHQ4EFgQU9oUKOxGG4QR9DqoLLNLuzGR7e64wDgYD VR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYIKwYB BQUHAwEGCCsGAQUFBwMCMBsGA1UdIAQUMBIwBgYEVR0gADAIBgZngQwBAgEwUAYD VR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVz dEVDQ0NlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHYGCCsGAQUFBwEBBGowaDA/ BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdEVD Q0FkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1 c3QuY29tMAoGCCqGSM49BAMDA2gAMGUCMEvnx3FcsVwJbZpCYF9z6fDWJtS1UVRs cS0chWBNKPFNpvDKdrdKRe+oAkr2jU+ubgIxAODheSr2XhcA7oz9HmedGdMhlrd9 4ToKFbZl+/OnFFzqnvOhcjHvClECEQcKmc8fmA== -----END CERTIFICATE-----  # Subject: /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust ECC Certification Authority # Algo: EC secp384r1, key size: 384 # Issuer: /C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=AAA Certificate Services # Not valid before: 2019-03-12T00:00:00Z # Not valid after: 2028-12-31T23:59:59Z # SHA-1 Fingerprint: CA:77:88:C3:2D:A1:E4:B7:86:3A:4F:B5:7D:00:B5:5D:DA:CB:C7:F9 # SHA-256 Fingerprint: A6:CF:64:DB:B4:C8:D5:FD:19:CE:48:89:60:68:DB:03:B5:33:A8:D1:33:6C:62:56:A8:7D:00:CB:B3:DE:F3:EA -----BEGIN CERTIFICATE----- MIID0zCCArugAwIBAgIQVmcdBOpPmUxvEIFHWdJ1lDANBgkqhkiG9w0BAQwFADB7 MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UE AwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTE5MDMxMjAwMDAwMFoXDTI4 MTIzMTIzNTk1OVowgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5 MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBO ZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgRUNDIENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEGqxUWqn5aCPnetUkb1PGWthL q8bVttHmc3Gu3ZzWDGH926CJA7gFFOxXzu5dP+Ihs8731Ip54KODfi2X0GHE8Znc JZFjq38wo7Rw4sehM5zzvy5cU7Ffs30yf4o043l5o4HyMIHvMB8GA1UdIwQYMBaA FKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1 xmNjmjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zARBgNVHSAECjAI MAYGBFUdIAAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5j b20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNAYIKwYBBQUHAQEEKDAmMCQG CCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZIhvcNAQEM BQADggEBABns652JLCALBIAdGN5CmXKZFjK9Dpx1WywV4ilAbe7/ctvbq5AfjJXy ij0IckKJUAfiORVsAYfZFhr1wHUrxeZWEQff2Ji8fJ8ZOd+LygBkc7xGEJuTI42+ FsMuCIKchjN0djsoTI0DQoWz4rIjQtUfenVqGtF8qmchxDM6OW1TyaLtYiKou+JV bJlsQ2uRl9EMC5MCHdK8aXdJ5htN978UeAOwproLtOGFfy/cQjutdAFI3tZs4RmY CV4Ks2dH/hzg1cEo70qLRDEmBDeNiXQ2Lu+lIg+DdEmSx/cQwgwp+7e9un/jX9Wf 8qn0dNW44bOwgeThpWOjzOoEeJBuv/c= -----END CERTIFICATE-----

Вот примерно всё так. Спасибо за внимание.

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

FOSS News №18 – обзор новостей свободного и открытого ПО за 25-31 мая 2020 года

Всем привет!

Продолжаем обзоры новостей свободного и открытого ПО, материалов о них и немного железа. Всё самое главное про пингвинов и не только, в России и мире. Open Source инкубатор от Huawei, нелёгкая и противоречивая доля GPL проектов в России, продолжение истории взаимоотношений Microsoft и Open Source, первый ноутбук на AMD компонентах и с предустановленным GNU/Linux и многое другое.

Оглавление

  1. Главные новости
    1. «Каков ты, русский опен сорс?» KaiCode, Open Source инкубатор от Huawei
    2. Об отношениях реестра отечественного ПО и свободного ПО
    3. Как Microsoft убила AppGet и создала свой WinGet
    4. Бывший руководитель Windows подразделения: почему Microsoft вела войну с Open Source?
    5. TUXEDO Computers представила первый в мире AMD-ноутбук с предустановленной ОС Linux
  2. Короткой строкой
    1. Внедрения
    2. Открытие кода и данных
    3. Новости FOSS организаций
    4. Системное
    5. Специальное
    6. Безопасность
    7. Пользовательское
    8. Разное
  3. Релизы
    1. Ядро и дистрибутивы
    2. Системный софт
    3. Для разработчиков
    4. Специальный софт
    5. Пользовательский софт

Главные новости и статьи

«Каков ты, русский опен сорс?» KaiCode, Open Source инкубатор от Huawei

Компания Huawei имеет штат в 80 000 разработчиков по всему миру (для сравнения в Google 27K, а в Oracle 38K) и решила включиться в борьбу за «Open Source территорию», причём ставка сделана на российский рынок, написано в блоге компании на Хабре. В рамках этого процесса объявлено о запуске своего рода инкубатора Open Source проектов: «Процесс запущен, мы сделали первое в своем роде событие: KaiCode. Это что-то вроде инкубатора, но не для стартапов, а для open source продуктов. Работает так: 1) присылаете своей проект через форму, 2) мы выбираем полтора десятка лучших, 3) они приезжают на площадку к нам 5-го сентября (или удаленно) и презентуют себя, 4) жюри выбирает трех лучших и выдает каждому по $5,000 (как подарок). Через год (а может быть и раньше) все это повторяется снова».

Подробности

Об отношениях реестра отечественного ПО и свободного ПО

«Похоже, машинисты локомотива отечественного импортозамещения привели инновационный состав в тупик» – такой вывод делается в статье на Хабре, где автор рассказывает о своём опыте работы с госорганами. Будучи вынужденным искать заказчиков в госсекторе, ему нужно было сперва попасть в Реестр отечественного ПО. Для этого нужно было оформить заявку по правилам из Постановления Правительства №1236, а решение о включении принимает Минкомсвязи. При этом, как оказалось на практике, эксперты министерства руководствуются совершенно иным документом — методическими рекомендациями от ЦКИТ, о существовании которого автор как разработчик даже и не знал. А этот документ прямо запрещает использовать компоненты софта с GPL- и MPL-лицензиями. Парадокс в том, что под GPL издаются основные компоненты Linux, на базе которых построено как минимум 40 отечественных операционных систем.

Подробности

Материал в СМИ на основе этой статьи

Ещё один взгляд

Как Microsoft убила AppGet и создала свой WinGet

Несмотря на раскаяния Microsoft из-за ошибочной позиции в отношении Open Source (писал об этом в прошлом выпуске), похоже их принцип EEE в какой-то форме продолжает жить. Автор AppGet канадский разработчик Кейван Бейги, FOSS менеджера пакетов для Windows, рассказал показательную историю как начиная с 3 июля 2019 года представители Microsoft вели с ним диалог, расспрашивая об устройстве его проекта и недостатках альтернативных решений, а также обсуждая возможную помощь со стороны Microsoft, вплоть до трудоустройства. Всё это вяло длилось до 5 декабря 2019 года, потом были очные переговоры в течение дня в офисе Microsoft, полгода тишины и в мае 2020 года – выпуск WinGet. На странице AppGet на GitHub сделано объявление о закрытии проекта.

Подробности

Статья о выходе первой версии WinGet

Бывший руководитель Windows подразделения: почему Microsoft вела войну с Open Source?

Продолжаем разбор отношений корпорации (не)зла с Open Source. ZDNet приводит слова бывшего руководителя разработки Windows Стивена Синовски, который пытается прояснить контекст старых и новых отношений корпорации с движением. Стивен говорит что война с Open Source была обоснована до массового распространения SaaS решений и была нужна в те времена, но сейчас ставка и в Microsoft делается на облачные технологии, тут без Open Source уже никуда. Также Стивен признаёт что Google обошёл Microsoft, вовремя распознав новый тренд.

Подробности (en)

TUXEDO Computers представила первый в мире AMD-ноутбук с предустановленной ОС Linux

TUXEDO Computers — одна из компаний, делающих ставку на ноутбуки с предустановленными операционными системами на базе Linux. На этой неделе она представила новую модель BA15, которая, как сообщается, будет иметь спецификации, выделяющие устройство на фоне аналогичных решений, пишет 3Dnews.

Основные характеристики:

  1. AMD Ryzen 5 3500U (4 ядра, 8 потоков, частота 2,1–3,7 ГГц, 4 Мбайт кеша и 15 Вт TDP)
  2. интегрированная графика Radeon Vega 8
  3. оперативная память DDR4 объёмом до 32 Гбайт, накопитель объёмом до 2 Тбайт
  4. аккумулятор ёмкостью 91,25 Вт·ч
  5. 15,6-дюймовый IPS экран с разрешением 1920 × 1080, HD-вебкамера
  6. Wi-Fi 6 802.11ax в двух диапазонах, Bluetooth 5.1
  7. два 2-Вт динамика
  8. порт USB-C 3.2 Gen1, два USB 3.2 Gen1, USB 2.0, HDMI 2.0, гигабитный порт Ethernet, 3,5-мм гнездо для наушников и микрофона, адаптер micro-SD
  9. разъём Kensington
  10. клавиатура с фирменной супер-клавишей TUX имеет белую подсветку
  11. предустанавливается с Ubuntu, но есть и другие варианты

Подробности

Короткой строкой

Внедрения

«Горыныч» на «Эльбрусе»: российские рабочие станции на основе «Альта» от «Базальт СПО» придут в школы и вузы [→ 1, 2]

Открытие кода и данных

  1. Google открывает исходный код ИИ для использования табличных данных для задач ответов на вопросы на естественном языке [→ (en)]
  2. Открыт исходный код индийского приложения отслеживания контактов [→ (en)]

Новости FOSS организаций

  1. Создатель Linux впервые за 15 лет перешёл на процессор AMD — 32-ядерный Ryzen Threadripper [→]
  2. Open Source YouTube альтернатива PeerTube просит о поддержке для выпуска 3-й версии [→ (en)]

Системное

  1. Последнее обновление Windows 10 включает ядро Linux [→ 1, 2 (en)]
  2. Systemd изменит то, как работает ваша домашняя директория [→ (en)]
  3. В Linux улучшена поддержка устройств-указателей на некоторых тачпадах [→ (en)]
  4. Среда микросервисов с открытым исходным кодом EdgeX Foundry достигла 5 миллионов загрузок контейнеров [→ (en)]
  5. Red Hat Runtimes добавляет поддержку Kubernetes-native Java стэка Quarkus для построения легковесных микросервисов [→ (en)]
  6. В Reiser5 анонсирована поддержка Burst Buffers (Data Tiering) [→]
  7. Проект по формированию базы поддерживаемого оборудования для BSD-систем [→]

Специальное

  1. Фонд СПО запустил сервис видеоконференций на основе Jitsi Meet [→]
  2. Заметки об отношениях Oracle и Open Source [→ (en)]
  3. Chan Zuckerberg Initiative вложила 3,8 млн долларов в 23 биомедицинских проекта с открытым исходным кодом [→ (en)]
  4. Является ли использование Open Source путём вперёд к программно-определяемой глобальной сети (англ. SD-WAN) [→ (en)]
  5. Представляем k8s-image-availability-exporter для обнаружения пропавших образов в Kubernetes [→]
  6. Полезного пост: Все самые актуальные курсы, трансляции и техтоки от RedHat [→]
  7. Николай Парухин: «OpenStreetMap слишком добр к людям. Он доверяет им…» [→]
  8. Какую нагрузку на серверы создают сетевые механизмы? [→]
  9. Бэкап-хранилище для тысяч виртуальных машин свободными инструментами [→]
  10. Облачно-ориентированный обмен сообщениями на платформе Red Hat OpenShift с использованием Quarkus и AMQ Online [→]
  11. IPSec всемогущий [→]
  12. Изоляция сред разработки с помощью контейнеров LXD [→]
  13. USB over IP в домашних условиях [→]

Безопасность

  1. Исследователи нашли 26 уязвимостей в реализации USB для Windows, macOS, Linux и FreeBSD [→]
  2. 70% проблем с безопасностью в Chromium вызваны ошибками при работе с памятью [→]
  3. Взлом серверов компании Cisco, обслуживающих инфраструктуру VIRL-PE [→]
  4. Вредоносное ПО, поражающее NetBeans для внедрения бэкдоров в собираемые проекты [→]
  5. 25 уязвимостей в RTOS Zephyr, в том числе эксплуатируемые через ICMP-пакет [→]
  6. RangeAmp — серия атак на CDN, манипулирующая HTTP-заголовком Range [→]

Пользовательское

  1. В Chrome 84 по умолчанию включат защиту от назойливых уведомлений [→]
  2. Запускаем несколько терминалов Linux в одном окне [→ 1, 2 (en)]
  3. Лучшие приложения для ведения заметок на GNU/Linux [→ (en)]
  4. Руководство по использованию Nano [→ (en)]
  5. Как отформатировать USB диск в exFAT на GNU/Linux [→ (en)]
  6. FreeFileSync: FOSS инструмент для синхронизации файлов [→ (en)]
  7. Об использовании «apt search» и «apt show» команд для поиска информации о пакетах в Ubuntu [→ (en)]
  8. Как сделать GIF в GIMP [→ (en)]

Разное

Многопользовательский тетрис [→]

Релизы

Ядро и дистрибутивы

  1. Релиз минималистичного дистрибутива Alpine Linux 3.12 [→]
  2. Выпуск Chrome OS 83 [→]
  3. Выпуск BlackArch 2020.06.01, дистрибутива для тестирования безопасности [→]
  4. Выпуск дистрибутива GoboLinux 017 со своеобразной иерархией файловой системы [→]

Системный софт

  1. Релиз Mesa 20.1.0, свободной реализации OpenGL и Vulkan [→]
  2. Релиз OpenSSH 8.3 с устранением уязвимости в scp [→]
  3. Выпуск UDisks 2.9.0 с поддержкой переопределения опций монтирования [→]
  4. Второй бета-выпуск KIO Fuse [→]

Для разработчиков

  1. Выпуск системы управления версиями Apache Subversion 1.14.0 [→]
  2. Выпуск отладчика GDB 9.2 [→]
  3. Вышел GNAT Community 2020 [→]
  4. Среда проектирования игр Godot адаптирована для работы в web-браузере [→]
  5. Релиз фреймворка Qt 5.15 [→]

Специальный софт

  1. Релиз открытой биллинговой системы ABillS 0.83 [→]
  2. Выпуск свободного звукового редактора Ardour 6.0 [→]
  3. Выпуск звукового редактора Audacity 2.4.1 [→]
  4. Guitarix 0.40.0 [→]
  5. KPP 1.2, tubeAmp Designer 1.2, spiceAmp 1.0 [→]
  6. Второй выпуск Monado, платформы для устройств виртуальной реальности [→]
  7. Выпуск nginx 1.19.0 [→]
  8. Релиз СУБД SQLite 3.32. Проект DuckDB развивает вариант SQLite для аналитических запросов [→]
  9. Выпуск распределённой СУБД TiDB 4.0 [→]

Пользовательский софт

  1. Beaker Browser 1.0 Beta [→ (en)]
  2. Chrome/Chromium 83 [→]
  3. Доступен Firefox Preview 5.1 для Android [→]
  4. Выпуск web-браузера NetSurf 3.10 [→]
  5. Выпуск пре-релизной версии Protox 1.5beta_pre, Tox-клиента для мобильных платформ [→]


На этом всё, до следующего воскресенья!

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

Если кто интересуется составлением обзоров и имеет время и возможность помочь – буду рад, пишите по контактам, указанным в моём профиле, или в личные сообщения.

Подписывайтесь на наш Telegram канал или RSS чтобы не пропустить новые выпуски FOSS News.

Предыдущий выпуск

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

Почему Yota — неудобный оператор, и что можно сделать лучше

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


1. Yota — виртуальный оператор

Это означает, что они используют базовые станции «главного» оператора, и есть большая вероятность, что приоритет трафика у виртуального оператора (как голосового, так и данных) будет ниже, чем у главного. О каких-то проблемах у российских операторов я не слышал, а вот в США очень часто пользователи виртуальных операторов жалуются на то, что связь «не очень» по сравнению с главным оператором.

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

2. Выбор номера у Yota устроен не так, как обычно

При оформлении SIM-карты вы получаете болванку, а её активацию и выбор номера нужно выполнить самостоятельно через приложение. То есть при оформлении выбрать номер нельзя, а сделать это нужно после установки SIM-карты и приложения. Тут, кстати, есть еще один бонус — после активации SIM-карты Yota дает 2 часа доступа в интернет, чтобы скачать приложение из маркета. Если не успел — ищи Wi-Fi, чтобы это сделать.

Решение: давать возможность выбрать номер при покупке SIM-карты без необходимости выполнения каких-либо действий со стороны абонента после этого.

3. У Yota нет личного кабинета, как у всех других операторов

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

Решение: сделать личный кабинет, который будет доступен через сайт Yota из любого браузера.

4. Авторизация в приложении возможна только со вставленной SIM-картой

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

  • нельзя авторизоваться с другого устройства, только с того, в которое вставлена SIM-карта;
  • если у вас несколько SIM-карт в разных смартфонах или планшетах, то нельзя сделать вход в несколько аккаунтов сразу;
  • приложение любезно просит отключить Wi-Fi, если Вас разлогинило (а это будет происходить время от времени), и с этим ничего нельзя сделать. То есть вход по паролю или временному коду из SMS невозможен;
  • если вы находитесь в международном роуминге, то для авторизации в приложении обязательно нужно включить роуминг данных. Трафик приложения не учитывается, зато в это время смартфон успеет скачать что-нибудь, и Yota будет рада списать с Вас деньги. Кстати, если Вы вдруг не заплатили за пакет минут и интернета, то мегабайт трафика в роуминге будет стоить от 490 руб.;
  • если по какой-либо причине ваша SIM-карта оказалась в чужом смартфоне, и была проведена авторизация в приложении Yota, то каким-то образом разлогинить этот вход потом нельзя. Через некоторое время после извлечения SIM-карты приложение разлогинится само, но перед этим на таком устройстве можно сделать с номером все, что угодно, например, поменять тариф или сменить номер на другой.

Решение: к текущему варианту автологина добавить возможность входа по паролю или коду из SMS.

5. Любая поддержка у Yota осуществляется только через чат или SMS на определенный номер

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

Решение: сделать поддержку по телефону одним из способов связи.

6. Цена на любой тариф у Yota указана за 30 дней, а не за календарный месяц

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

Решение: сделать тариф с оплатой за месяц без сдвига даты платежа.

7. В приложении Yota нет возможности получить детализацию вызовов

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

Решение: сделать детализацию в приложении с возможностью посмотреть сразу или отправить на почту.

8. Тарифы Yota — ад перфекциониста

Все давно привыкли к пакетным тарифам: за определенные деньги вы получаете минуты, гигабайты и SMS. Yota решила пойти дальше, предлагая пользователю самому выбирать наполняемость тарифа, при этом можно указать любое количество минут с шагом 1 минута и трафика с шагом 1 ГБ. При этом во всех случаях (за очень редким исключением) абонентская плата будет очень «кривым» числом, например 399.57 руб. за 300 минут и 20 Гб.

Не знаю, зачем это было сделано, и почему нельзя было сделать у минут шаг хотя бы 10 (а может даже 50 или 100), но, как мне кажется, это очень неудобно. Так и представляю, что толпа пользователей Yota пытается решить, 326 или 327 минут купить в пакет.

Решение: сделать шаг выбора минут и гигабайт больше 1, возможно даже не линейный, и округлять стоимость услуг до целого рубля (а лучше и до 10 рублей).

9. Если вставить SIM-карту в планшет, модем или роутер, то скорость будет урезана до 64 кбит/с

Грубо говоря — интернета не будет. Я понимаю (хотя и не до конца), когда операторы ставят такое ограничение на тарифах с безлимитным интернетом, но у Yota это ограничение действует всегда, включая пакеты с ограниченным трафиком.

Решение: Если трафик ограничен, то абонент может сам решать, куда ему вставить SIM-карту.

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

Из достоинств хочу отметить, что минуты из пакета расходуются на все номера РФ, а не только на номера своего региона, разговоры внутри сети не тарифицируются, отсутствует роуминг по РФ, выдается «красивый» код региона 999.

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

Почему я не использую SharedViewModel для фрагментов?

Хабр, привет!

Задача организации взаимодействия между фрагментами встречается очень часто. На первый взгляд, ShareViewModel отлично подходит для этого. Мы создаем ViewModel с owner = наша activity, в которой отображаются наши фрагменты, и получаем эту ViewModel внутри каждого фрагмента. Т.к. владелец ViewModel — активити, то фрагменты получают один и тот же экземпляр ViewModel, что и позволяет им обмениваться данными, вызывать методы и т.д. Вот ссылка из документации.

На рисунке ниже представлена схема взаимодействия 3-х фрагментов.

image

Т.е. что мы делаем: в каждом фрагменте мы достаем SharedViewModel тех фрагментов, с которыми нам нужно взаимодействовать…

И это ужасно. Потому что:

  1. Это полностью разрушает паттерн *VM. Мы строим ViewModel для конкретной View. ViewModel содержит разные LiveData, нужные этой View, необходимые методы и т.д. ViewModel не должна использоваться где-то ещё, кроме этой View.
  2. Каждая такая SharedViewModel — это лишняя зависимость для фрагмента. Нам нужно понимать, что в этой SharedViewModel происходит, что там нужно вызвать, чтобы второй фрагмент правильно отработал. И мы попросту можем что-то сломать.
  3. Нам нужно добавить во фрагмент все необходимые SharedViewModel, на которые этот фрагмент влияет или от которых зависит. И если в будущем появится еще фрагмент, с которым тоже надо взаимодействовать, то придется добавить в каждый фрагмент новую связь.

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

SharedViewModel приносит кучу проблем. Начинаешь путаться, все обрастает зависимостями, код усложняется. Гораздо проще работать, когда Fragment+ViewModel — это черный ящик.

Какое решение можно предложить?

Простой сервис, с которым каждый фрагмент взаимодействует по-своему.

image

Этот сервис должен передаваться внутрь каждой ViewModel. Благодаря DI и scope (Dagger, Koin, любые другие) это можно сделать легко и просто. Если сервис должен жить в контексте Activity, создайте его в Scope этой Activity и передайте каждой ViewModel.

Смотрите, что произошло: мы убрали все SharedViewModel из фрагментов. Каждый фрагмент теперь ничего не знает о других фрагментах. Если мы захотим добавить новый фрагмент в эту схему, то нам надо будет только связать viewModel D с нашим сервисом и все. Если фрагмент должен реагировать на изменение некоторого свойства сервиса — просто подписываемся на него. Нам больше не нужно разбираться в чужих ViewModels. И этот сервис будет гораздо проще любой ViewModel, разобраться в сервисе будет легче.

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

Бонус: как я создаю фрагменты?

Вот так: SomeFragment()

А что с параметрами?

С появлением ViewModel я не использую параметры. Я ничего не передаю во фрагмент через bundle (Android Studio до сих пор предлагает создавать фрагмент с аргументами и создавать фрагмент через static метод), я не использую Safety NavArgs для Navigation Component.

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

Я это все убрал во ViewModel. Я использую такой же сервис, через который передаю параметры. Он работает наподобие Safety NavArgs. ViewModel запрашивает параметры у сервиса по типу класса параметров. После успешного извлечения параметра, сервис их удаляет (работает как Push/Pop).

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

Есть также проблема при передачи параметров через bundle — это превышение допустимого объема. Если объем передаваемых данных свыше 500 кб., то приложение может аварийно завершиться из-за возникшего исключения внутри Binder.java. Это привело к созданию разных библиотек, которые передают параметры через SD, что не очень быстро по сравнению с использованием RAM.

В общем, инструменты классные, все гибко, но нужно быть осторожным.

На этом все, спасибо за внимание!

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

ГИС на машинном обучении: магазины в лучших локациях и развитие «последней мили»

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


Автор: Артём Гудов, руководитель управления инвестиций Группы «М.Видео-Эльдорадо»

Группа «М.Видео-Эльдорадо» работает как онлайн-бизнес, модель ONE RETAIL позволяет нам объединить магазины с нашей онлайн-платформой, перевести в интернет все процессы, весь опыт покупателя в любой точке контакта (у себя дома, на работе, в магазине, в дороге). Составной частью перехода в онлайн является автоматизация не только front-процессов, непосредственно связанных с клиентом, но и back-систем, поддерживающих инфраструктуру и эффективность принятия решений. Таким образом, ГИС является одним из элементов цифровизации бизнеса.

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

Как внедряли ГИС

До внедрения ГИС решения об экспансии, то есть, открытии новых магазинов, принимались на основе экспертных оценок бизнес-подразделений. Затем мы внедрили анализ по магазинам-аналогам и начали сравнивать магазины в сопоставимых локациях и смотреть с учётом этого опыта, какой оборот могут дать новые точки.

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

Модуль 1 — Тепловые карты

Тепловая карта — это карта города, разбитая на квадраты 600 × 600 м. Цвет квадрата показывает перспективность локации с точки зрения открытия нового магазина. Зеленые квадраты — самые привлекательные.


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

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


Карта с автомобильным трафиком


Карта с количеством маршрутов общественного транспорта

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

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

Карта с торговыми точками конкурентов и салонов связи

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

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

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

Модуль 2 — Анализ оборотов

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

Карта с доходами домохозяйств

Карта с количеством квартир в домах

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

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

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

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

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

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

Модуль 3 — Открытие магазинов

Третий модуль автоматизирует workflow по открытию магазинов. Он агрегирует информацию по всем этапам и позволяет в режиме «одного окна» контролировать сроки выполнения каждый этапа открытия магазина. Модуль содержит удобные дэшборды с основными картами, прогнозами, финмоделями и фотографиями локации и самого объекта. Так мы систематизировали данные и полностью перевели инвестиционный комитет в онлайн.

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

Новые модули ГИС — анализ ценовых предпочтений покупателей уже открытых точек и потенциал развития магазинов

Мы дорабатываем еще два модуля, которые пока работают в режиме пилота.

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

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

Кроме того, мы сравниваем динамику выручки близких по характеристикам магазинов. Если один из двух похожих по характеристикам магазинов проседает по обороту, мы начинаем анализировать, какие факторы могут влиять на это. Результаты аналитики ложатся в основу изменений в магазине — для раскрытия его «справедливого потенциала».

Новые внутренние заказчики геоаналитики

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

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

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


Карта с пешеходным трафиком

ГИС и COVID-19

В связи с карантином мы значительно изменили свою работу, запустили десятки новых проектов. С апреля 2020 года Группа «М.Видео-Эльдорадо» полностью перешла на онлайн-платформу и трансформировалсь в онлайн-бизнес. При этом магазины оставались неотъемлемой частью наших онлайн-продаж, уникальным преимуществом: это и точки онлайн-продаж и курьерской доставки из магазинов, и место дистрибуции запасов. Их роль меняется, но важность для экосистемы ONE RETAIL остаётся неизменной.

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

  • Аналитика зоны покрытия партнерских пунктов выдачи заказов (ПВЗ).

Группа «М.Видео-Эльдорадо» начала сотрудничать с X5 Retail Group и Почтой России по самовывозу онлайн-заказов «М.Видео» и «Эльдорадо» из магазинов Пятерочки и отделений Почты. ГИС дает возможность проанализировать зоны пешей и автомобильной доступности этих ПВЗ и выбрать те локации, которые наиболее удалены от зон покрытия наших открытых магазинов, повышая эффективность и оперативность «последней мили».

Карта с зонами покрытия ПВЗ

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

Благодаря анализу продаж и товарных остатков Группа планирует улучшить ассортимент магазинов и предоставить клиентам широкий выбор наиболее подходящих товаров. Также с внедрением видеоконсультаций в магазинах у продавцов «М.Видео» и «Эльдорадо» появится возможность показывать находящиеся в магазинах наиболее актуальные позиции, улучшая пользовательский онлайн-путь.

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