Архив рубрики: Публикации

Функция Lambda в Python

Python — это универсальный и широко используемый в последнее время язык программирования. Однако Python предоставляет множество встроенных функций для выполнения множества конкретных задач. Однако мы можем создавать свои собственные функции для выполнения конкретной задачи. В Python ключевое слово lambda создает анонимную функцию. Функция без имени называется анонимной функцией. Обычно обычная функция в Python создается с использованием ключевого слова def. У него есть название и круглые скобки. В то время как анонимная функция используется с ключевым словом лямбда. Поэтому анонимная функция также известна как лямбда-функция. В этой статье объясняется лямбда-функция Python на примерах.

 

Синтаксис лямбда-функции

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

lambda argument(s) : expression

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

 

Пример 1. Вычислить сумму чисел с помощью лямбда-функции.

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

# программа для создания лямбда-функции

# создание лямбда-функции

sum_val = lambda a,b : a+b

# передача аргументов и печать значения суммы

print(sum_val(5,10))

 

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

# создание нормальной функции

def sum_val(a,b):

return a+b

# передача аргументов и печать значения суммы

print("The sum value is: ",sum_val(5,10))

 

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

 

Пример 2: реализация нескольких лямбда-функций

Реализуем лямбда-функции с другим номером аргумента.

# программа для реализации множества лямбда-функций



# лямбда-функция для вычитания числа

a = lambda a,b,c: a-b-c



# передача аргументов и печать значения разности



print ( "Значение вычитания:" , a (200,10,2) )



# лямбда-функция для умножения двух чисел



b = lambda a,b:a*b



# передача аргументов и печать значения разности



print("Значение умножения:" , b( 10 , 5 ) )



# лямбда-функция для вычисления значения квадрата



c = lambda a:a*a



# передача аргументов и печать значения разности



print("Значение квадрата:" , c(10 ) )



#a lambda функция для вычисления значения куба



c = lambda a:a*a*a



# передача аргументов и печать значения разности



print("Значение куба:" , c(10 ) )



# лямбда-функция для определения четного числа



c = lambda a:(a%2==0)



# передача аргументов и печать значения разницы



print("Данное число четное:" , c(1001 ) )



# лямбда-функция для определения високосного года



c = lambda a:(a%4==0)



# передача аргументов и печать значения разницы



print("Данный год високосный:" , c(2020 ) )


 

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

 

Использование лямбда-функции внутри нормальной функции

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

#a программы для реализации функции лямбды внутри нормальной функции



#объявление нормальной функции

def sum_val(num1):

#объявление функции лямбды внутри функции

return lambda num2: num1+num2

value = sum_val(10)

print("Значение суммы равно: ",value(200))


 

Вывод

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



2020-11-28T14:05:03
Python

Как настроить WireGuard VPN на CentOS 8

WireGuard — это простой и современный VPN (виртуальная частная сеть) с современной криптографией. Это быстрее, проще в настройке и более производительно, чем другие аналогичные решения, такие как IPsec и OpenVPN .

WireGuard является кроссплатформенным и может работать практически где угодно, включая Linux, Windows, Android и macOS. Wireguard — это одноранговая VPN; он не основан на модели клиент-сервер. В зависимости от конфигурации одноранговый узел может действовать как традиционный сервер или клиент. Читать

Шлюз и брандмауэр. В чем разница

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

Что такое шлюз?

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

Что такое брандмауэр?

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

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

В чем разница между шлюзом и межсетевым экраном?

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

Цель

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

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

Функция

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

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

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

 

Принцип работы

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

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

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

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



2020-11-27T11:22:15
Безопасность

Проверка формы Javascript

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

 

Примеры

Прежде всего, мы предполагаем форму с именем «testForm», в которой у нас есть поле ввода с меткой «Имя пользователя», а тип ввода отправляется в наш HTML-файл. В теге формы мы создали событие onsubmit, в котором мы закрываем и возвращаем функцию validateFunc () .

<form action="" method="get" name="testForm" onsubmit="return(validationFunc())">

<label for="name">Имя</label>

<input type="text" name="name"><br><input type="submit" value="Submit">

</form>

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

Итак, чтобы проверить поле имени пользователя. Сначала мы назначаем переменную document.testForm, чтобы код выглядел чистым и понятным. Затем в определении функции мы напишем код для проверки. Мы напишем оператор if, чтобы проверить пустое поле формы. Если поле имени пользователя пусто, мы покажем окно предупреждения, чтобы показать ошибку, снова сфокусируемся на поле имени пользователя и вернем false, чтобы форма не была отправлена. В противном случае, если он пройдет проверку и данные будут проверены, мы вернем true функции.

var theForm = document.testForm;



// Код проверки формы

function validationFunc() {

if (theForm.name.value == "") {

alert( "пустое имя" );

theForm.name.focus();

return false;

}



return (true);

}




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

Как вы можете видеть на скриншоте ниже, в окне предупреждения возникает ошибка.

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

Для этой цели мы сначала предполагаем два поля формы в теге формы с метками «электронная почта» и «пароль» в нашем HTML-файле.

<form action="" method="get" name="testForm" onsubmit="return(validationFunc())">

<label for="name">Имя</label>

<input type="text" name="name"><br><label for="email">Электронная почта</label>

<input type="email" name="email" id=""><br><label for="password">Пароль</label>

<input type="password" name="password" id=""><br><br>



<input type="submit" value="Submit">

</form>




Для проверки в javascript мы снова добавим оператор if для проверки полей формы электронной почты и пароля в определение функции файла сценария. Предположим, мы хотим применить несколько проверок к полю электронной почты, например, поле не должно быть пустым, а его длина не должна быть меньше 10 символов. Итак, мы можем использовать OR «||» в операторе if. Если возникнет какая-либо из этих ошибок, отобразится окно предупреждения с сообщением об ошибке, которое мы хотим показать, сфокусируемся на поле формы электронной почты и вернем false функции. Точно так же, если мы хотим применить проверку длины символа в поле пароля, мы можем это сделать.

var theForm = document.testForm;



// Код проверки формы

function validationFunc() {

if (theForm.name.value == "") {

alert( "пустое имя" );

theForm.name.focus();

return false;

}



if (theForm.email.value == "" || theForm.email.value.length < 10) {

alert( "Пустая почта" );

theForm.email.focus();

return false;

}



if (theForm.password.value.length < 6) {

alert( "Пароль должен быть длиной 6 символов" );

theForm.password.focus();

return false;

}



return (true);

}




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

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

if (/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/.

test(theForm.email.value)) {

alert( "Неправильная почта" );

theForm.email.focus() ;

return false;

}

 

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

 

Вывод

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



2020-11-26T21:47:57
Программирование

Как преобразовать целое число в строку в Python

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

В этой статье объясняется, как преобразовать целое число Python в строку.

 

Функция str() в Python

В Python мы можем преобразовывать целые числа и другие типы данных в строки с помощью встроенной функции str().

Функция str() возвращает строковую версию данного объекта. Он принимает следующие формы:

class str(object='')

class str(object=b'', encoding='utf-8', errors='strict')


  • object — Объект, который нужно преобразовать в строку.

Функция принимает три аргумента, но обычно при преобразовании целого числа в строку вы передаете функции только один аргумент (object).

 

Преобразование целого числа Python в строку

Чтобы преобразовать целое число 23 в строковую версию, просто передайте это число в функцию str():

str(23)

type(days)


'23'

<class 'str'>


 

Кавычки около 23 указывают на то, что число не является целым числом, а является объектом строкового типа. Также функция type() показывает, что объект является строкой.

В Python строки объявляются с использованием одинарных (‘), двойных («) или тройных кавычек («»»).

 

Объединение строк и целых чисел

Попробуем объединить строки и целые числа с помощью оператора + и распечатать результат:

number = 6

lang = "Python"

quote = "Есть " + number + " операторов в " + lang + "."

print(quote)


 

Python выдаст ошибку исключения TypeError, потому что он не может объединить строки и целые числа:

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: can only concatenate str (not "int") to str


 

Чтобы преобразовать целое число в строку, передайте целое число в функцию str():

number = 6

lang = "Python"

quote = "Есть " + str(number) + " операторов в " + lang + "."

print(quote)


Теперь, когда вы запустите код, он будет успешно выполнен:

Есть 6 операторов в Python.


 

Есть и другие способы объединения строк и чисел.

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

number = 6

lang = "Python"

quote = "Есть {} операторов в {}.".format(number, lang)

print(quote)


Есть 6 операторов в Python.


 

В Python 3.6 и новее вы можете использовать f-строки, которые представляют собой буквальные строки с префиксом ‘f’, содержащие выражения в фигурных скобках:

number = 6

lang = "Python"

quote = f"Есть {number} операторов в {lang}."

print(quote)


Есть 6 операторов в Python.


 

Наконец, вы можете использовать старое% -форматирование:

number = 6

lang = "Python"

quote = "Есть %s операторов в %s." % (number, lang)

print(quote)


Есть 6 операторов в Python.


 

Вывод

В Python вы можете преобразовать целое число в строку с помощью функции str().

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.



2020-11-26T12:30:20
Python

Андроид не видит сим-карту, что делать?

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

Вот несколько исправлений для тех случаев, когда ваш телефон Android не может обнаружить SIM-карту.

Если перезагрузка не удалась, выключите телефон

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

Это может решить множество проблем, но в последнее время пользователи сетей Sprint и Verizon сообщали, что перезагрузки недостаточно, чтобы исправить ошибку «Нет SIM-карты», и даже перезагрузка может вызвать ошибку «SIM-карта не обнаружена». Решение заключалось в том, чтобы выключить их телефоны (подождать 30 секунд), а затем снова запустить их.

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

Включите SIM-карту

Еще одно простое решение ошибки SIM-карты в более поздних версиях Android — проверить, действительно ли ваша SIM-карта включена. Для этого перейдите в «Настройки -> Сеть и Интернет -> SIM-карты», затем коснитесь ползунка рядом с вашей SIM-картой, чтобы он был «Вкл.».

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

Измените сетевой режим на автоматический

Вы также можете попробовать изменить сетевой режим на автоматический. Вы можете сделать это, перейдя в «Настройки -> Мобильные сети -> Сетевой режим» и выбрав первый вариант, которым будет LTE/WCDMA/GSM (автоматическое подключение).

Выберите правильного оператора сети

Если ваш сетевой оператор не тот, который выбран в настройках вашего Android-устройства, вы обязательно получите ошибку SIM-карты. Чтобы убедиться, что у вас есть нужный, перейдите в «Настройки -> Мобильные сети -> Операторы сети -> Поисковые сети». Когда ваше устройство Android завершит поиск и отобразит результаты, нажмите на своего оператора.

Введите настройки APN вашей сети вручную

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

На современном устройстве Android (начиная с версии 9.0 Pie) для этого перейдите в «Настройки -> Сеть и Интернет -> Мобильная сеть -> Дополнительно -> Имена точек доступа», а затем нажмите значок «+» в правом верхнем углу.

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

Извлеките SIM-карту и аккумулятор.

Еще одно базовое решение, которое вы можете попробовать, — это извлечь аккумулятор (если он съемный) и SIM-карту из лотка для SIM-карты. Прежде чем сделать это, убедитесь, что вы выключили свое устройство Android. После того, как вы все удалили, подождите примерно одну минуту и ​​снова вставьте все заново.

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

Попробуйте использовать свой телефон в безопасном режиме

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

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

Решение для режима полета

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

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

Исправьте ошибку SIM-карты, очистив кеш

Очистить кеш вашего Android, чтобы попытаться исправить ошибку отсутствия SIM-карты, чрезвычайно просто. Перейдите в «Настройки -> Хранилище -> Внутреннее хранилище -> Кэшированные данные». Когда вы нажмете на кешированные данные, вы увидите всплывающее окно с сообщением, что это очистит кеш для всех приложений на вашем устройстве. Просто нажмите «Удалить», чтобы продолжить.

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



2020-11-26T10:07:41
Вопросы читателей