Цикл while в Python

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

В Python есть две основные конструкции цикла: цикл for и while .

В этом руководстве рассматриваются основы циклов while в Python. Мы также покажем вам, как использовать предложение else и операторы break и continue .

Python while Loop

В while цикл выполняет свои операторы неизвестное число раз до тех пор , как данное условие имеет значение true .

Python во while цикла имеет следующий вид:

while EXPRESSION:

    STATEMENT(S)


Оператор while начинается с ключевого слова while , за которым следует условное выражение.

EXPRESSION оценивается перед выполнением операторов. Если условие true , выполняется STATEMENT(S) . В противном случае, если условие оценивается как false , цикл завершается, и управление программой передается следующей инструкции.

Блок STATEMENT(S) начинается с отступа и заканчивается первой строкой без отступа. Большинство людей предпочитают использовать отступы с четырьмя или двумя пробелами. Официальное руководство по стилю для кода Python рекомендует использовать 4 пробела для каждого уровня отступа и избегать смешивания использования табуляции и пробелов для отступа.

Давайте посмотрим на следующий пример кода, который увеличивает и печатает текущее значение переменной i если оно меньше пяти:

i=0

while i < 5:

    i += 1

    print('number:', i)


Цикл вторника повторяется, пока i меньше или равно пяти. Он выдаст следующий результат:

number: 1

number: 2

number: 3

number: 4

number: 5


Python поддерживает стандартные операции сравнения:

  • a == b — Истинно, если a и b равны.
  • a != b — Верно, если a и b не равны.
  • a > b — Истинно, если a больше b .
  • a >= b — Истинно, если a равно или больше b .
  • a < b — Истинно, если a меньше b .
  • a <= b — Истинно, если a равно или меньше b .

Чтобы отрицать условное выражение, используйте логический оператор not :

i=0

while not i >= 5:

    i += 1

    print('number:', i)


break и continue утверждения

break и continue заявления позволяют контролировать while выполнение цикла.

Оператор break завершает текущий цикл и передает управление программой оператору, который следует за завершенным циклом. Наиболее распространенная ситуация — использовать break для завершения цикла при выполнении определенного условия.

В следующем примере выполнение цикла прерывается, когда текущий повторяемый элемент равен 2 .

i=0

while i < 5:

    i += 1

    if i == 2:

        break

    print('number:', i)


Number: 1


Оператор continue завершает текущую итерацию цикла и передает управление программой следующей итерации цикла.

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

i=0

while i < 5:

    i += 1

    if i == 2:

        continue

    print('number:', i)


number: 1

number: 3

number: 4

number: 5


else пункт

В отличие от других языков, в Python, то в while петля имеет опциональный else условие:

while EXPRESSION:

    STATEMENT(S)

else:

    STATEMENT(S)


Операторы внутри предложения else выполняются только тогда, когда выражение EXPRESSION значение false . Если возникает исключение или цикл завершается оператором break , оно не выполняется.

Вот пример:

i=0

while i < 5:

    i += 1

    print('number:', i)

else:

    print('Loop completed.')


number: 1

number: 2

number: 3

number: 4

number: 5

Loop completed.


Теперь Лью посмотрим , что происходит , когда вы break из петли:

i=0

while i < 5:

    i += 1

    if i == 2:

        break

    print('number:', i)

else:

    print('Loop completed.')


Оператор внутри предложения else не выполняется, потому что выражение не имеет значения false :

Number: 1


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

Бесконечный цикл while

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

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

Вот пример бесконечного в while цикл , который будет продолжать предложит ввести «Да»:

while True:

    i = input('Please enter 'Yes': ')

    if i.strip() == 'Yes':

        break


В while цикл выше будет работать , пока вы не введете «Да»:

Please enter 'Yes': 3

Please enter 'Yes': l

Please enter 'Yes': lin

Please enter 'Yes': No

Please enter 'Yes': Yes


Другой способ прервать бесконечный цикл — нажать CTRL+C

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

Выводы

В while цикл многократно выполняет свои заявления до тех пор , данное условие имеет значение true .

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



2020-10-11T21:45:14
Python

Linux. Кто сидит на портах?

Контроль всех входов и выходов — это основа безопасности. Поэтому для определения уровня защищённости машины стоит первым делом проверить наличие открытых портов. Если они есть, то определить какие именно программы открывают эти порты. Попробуем это сделать. Читать

Сканирование сетевых портов в Linux – команда nmap

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


Установка nmap на Linux

По умолчанию nmap не установлен в операционною систему Линукс, поэтому его нужно установить.

Centos  8:

dnf install nmap

Для Дебиан / Убунту:

# apt update

# apt install nmap

Centos  7 / Redhat /Fedora

yum install nmap

Синтаксис

Сканирование портовСинтаксис команды nmap выглядит следующим образом:

nmap опции адрес

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

Если утилита nmap отсутствует на компьютере, необходимо заняться её установкой. Это легко сделать при помощи терминала:

$ sudo apt-get install nmap

Примеры

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

$ ip addr show

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

$ nmap -sL 192.168.1.1/24

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

$ nmap -sn 192.168.1.1/24

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

# nmap 192.168.1.1

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

# nmap -sV 192.168.1.1

Для осуществления проверки конкретного порта понадобится команда в виде:

# nmap -sC 192.168.56.102 -p 21

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

# find /usr/share/nmap/scripts/ -name '*.nse' | grep ftp

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

# nmap -A 192.168.1.1

Заключение

Утилита Network Mapper – отличный инструмент для мониторинга сетевого окружения в устройствах, функционирующих на операционной системе Linux (и не только). При этом нельзя забывать о возможных проделах мошенников, которые не брезгуют изучать чужие системы и сети с помощью функциональной программы. Но не стоит паниковать! Организуйте качественное и своевременное администрирование системы, чтобы повысить уровень её безопасности.



2020-10-09T21:14:05
Безопасность

How to Separate MikroTik Hotspot and DHCP IP Pool

MikroTik default Hotspot Setup comes with a DHCP Server (which uses same IP Pool of Hotspot Server) to provide IP address and other network information to a connected device. Using this automatic IP address connected device can access Hotspot login page. After successfully login, a one to one NAT IP address is also assigned for the device and this process happens internally in Hotspot Server. User device cannot know this one to one NAT IP assigning. However, Hotspot Server actually occupies two IP address for a successfully logged in user. For this, sometimes Hotspot IP Pool gets congested and new user cannot be able to connect to Hotspot network and hence Hotspot network get hampered. To overcome this situation we can configure DHCP IP Pool and Hotspot IP Pool separately. If we do so, DHCP will provide IP address from its own IP pool and Hotspot will also assign one to NAT IP address from its own IP Pool. For using two different IP Pools, there will be no IP shortage and Hotspot network can run smoothly.  To configure separate IP Pool for DHCP and Hotspot network, we need to apply some tricks and in this article I will discuss how to configure Hotspot and DHCP servers’ IP Pool separately using Winbox.




Configuring Separate IP Pool for Hotspot and DHCP Server  




MikroTik Hotspot Server has some complex configuration and doing any mistake on default configuration can shutdown Hotspot network. So, we have to be careful before doing any new configuration. Following the below three steps we can easily separate Hotspot and DHCP Server IP Pool.






  • Assigning a new gateway for Hotspot
  • Creating a new IP Pool for Hotspot
  • Assigning new IP Pool in Hotspot user profile
  • Creating new NAT rule for the New IP Block.




Step 1: Assigning a new gateway on Hotspot Interface




MikroTik Hotspot default setup configures same gateway IP address for both DHCP Server and Hotspot Server. So, at first we have to set different gateway for Hotspot Server. The following steps will show how to assign different gateway IP for Hotspot Server.




  • Login MikroTik Router with Winbox software using full permission user.
  • Go to IP > Addresses menu item. Address List window will appear.
  • Click on PLUS SIGN (+) to add a new gateway IP address. New Address window will appear.
  • Put new gateway IP address (example: 192.168.30.1/24) in Address input field.
  • Choose interface (example: ether2) on which Hotspot Server was installed from Interface dropdown menu.
  • Click Apply and OK button.




New IP Assigning for Hotspot Server
New IP Assigning for Hotspot Server




Step 2: Creating a New IP Pool for Hotspot




After creating a new gateway, we will now create a new IP Pool for Hotspot. Hotspot one to one NAT IP will be assigned from this IP Pool. The following steps will show how to create a new IP Pool for Hotspot Server.




  • Go to IP > Pool menu item. IP Pool window will appear.
  • Click on PLUS SIGN (+). New IP Pool window will appear.
  • Put a Pool name (example: Hotspot Pool) in Name input field.
  • Now put IP range (example: 192.168.30.2-192.168.30.254) in Addresses input field.  
  • Click Apply and OK button.




New IP Pool for Hotspot Server
New IP Pool for Hotspot Server




Step 3: Assigning Created IP Pool in Hotspot User Profile




After creating new IP Pool for Hotspot Server, we will now assign this pool in Hotspot user profile so that connected user can get one to one NAT IP from this IP Pool. The following steps will show how to assign IP Pool in Hotspot user profile.






  • Go to IP > Hotspot menu item. Hotspot window will appear now.
  • Click on User Profiles tab and then click on a created user profile where you want to assign this new IP Pool. Hotspot User Profile edit window will appear.
  • Under General tab, choose newly created IP Pool from Address Pool drop down menu.
  • Click Apply and OK button.
  • Do the above steps to all your remaining user profiles.




Assigning Hotspot Users' one to one NAT IP Pool.PNG
Assigning Hotspot Users’ one to one NAT IP Pool




Now one to one NAT IP will be assigned from this IP Pool. But at this moment user will not get internet because we have not yet configured NAT for this IP Block. So, in the next section we will do NATing for this IP Block.




Step 4: Creating New NAT Rule for the New IP Block




At last stage we enable NATing for this new IP Block so that these IP addresses can be NATed and user can get internet access. The following steps will show how to create new NAT rule in MikroTik Firewall.




  • Go to IP > Firewall menu item. Firewall window will appear.
  • Click on NAT tab and then click on PLUS SIGN (+). New NAT Rule window will appear.
  • Under General tab, choose srcnat from Chain dropdown menu.
  • Put new IP block (example: 192.168.30.0/24) in Src. Address input filed.
  • Now click on Action tab and choose masquerade from Action dropdown menu.
  • Click Apply and OK button.




New NAT Rule Hotspot IP Block
New NAT Rule Hotspot IP Block




Our Hotspot and DHCP Server IP block is now separated and we have plenty of IP addresses to assign new Hotspot user. If we wish we can setup more IP Blocks (following the above steps) for our Hotspot Server also.




How to separate Hotspot and DHCP server IP Block has been discussed in this article. I hope you will now be able to create new IP Block for your Hotspot Server. However, if you face any confusion, feel free to discuss in comment or contact me from Contact page. I will try my best to stay with you. 



2020-10-09T19:59:29
MikroTik Hotspot Tutorials & Guides

Можно ли сделать откат обновлений Windows?

Microsoft предлагает несколько способов удаления стабильного обновления в Windows 10. Вы также можете откатить обновления Windows, включая обновления функций и накопительные обновления. Если вы используете Windows Insider, то вы также можете откатить и удалить последнюю версию установленной сборки Windows Insider.

Мы обсудим все три сценария один за другим.

  • Откатить основное обновление Windows
  • Откат сборки Windows Insider Preview
  • Удалите накопительные или незначительные обновления Windows

Действия по откату основного обновления Windows и Windows Insider одинаковы.

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

Откат основного обновления Windows (включая откат сборки Windows Insider)

Если вы недавно установили крупное обновление функций (скоро появится Windows 10 версии 20H2) и оно не работает в вашей системе, вы можете понизить или откатить обновление в течение первых 10 дней после установки.

Чтобы откатить обновление Windows:

  1. Откройте настройки Windows (клавиша Windows + i)
  2. Выберите Обновление и безопасность.
  3. В левом меню выберите Recovery.
  4. В разделе « Вернуться к предыдущей версии Windows 10» нажмите «Приступить к работе».

  5. Во всплывающем диалоговом окне выберите причину отката и нажмите Далее.

  6. В окне Проверить наличие обновлений нажмите Нет, спасибо.

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

  8. На экране «Не блокировать» убедитесь, что у вас есть пароль на случай, если предыдущая сборка заблокирована паролем, а затем нажмите «Далее».

  9. На следующем экране нажмите Вернуться к предыдущей сборке.

  10. Теперь ваша система перезагрузится и начнет откат. Этот шаг может занять несколько минут.

Как только компьютер снова загрузится, вы можете проверить, что устройство теперь откатилось к своей предыдущей сборке, введя winver в Run.

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

Вы также можете вручную удалить предыдущую папку установки Windows, чтобы сэкономить место на жестком диске.

Поскольку этот метод может вернуть вас только к ранее установленной сборке, вы не можете вернуться к более старым сборкам/версиям. Для этого вам нужно будет полностью восстановить вашу систему или выполнить новую установку Windows.

Удалите незначительное или накопительное обновление Windows

Есть два способа удалить накопительное или незначительное обновление из Windows 10:

Использование настроек Windows

  1. Откройте настройки Windows (клавиша Windows + i)
  2. Выберите Обновление и безопасность.
  3. Выберите Центр обновления Windows на левой панели.
  4. На правой панели нажмите «Просмотр истории обновлений».
  5. Выберите Удалить обновления.
  6. Выберите обновление, которое вы хотите удалить, например, Обновление для Microsoft Windows (KB4578846),  и нажмите кнопку «Удалить».

Использование командной строки

  1. Откройте командную строку , введя cmd в Выполнить.
  2. Введите следующую команду:

    wmic qfe list brief /format:table
  3. Это покажет все обновления, установленные на компьютере. Убедитесь, что обновление, которое вы хотите удалить, есть в списке.
  4. Чтобы удалить обновление, выполните следующую команду

    wusa /uninstall /kb:4578846
  5. После удаления обновления перезагрузите компьютер.

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



2020-10-09T18:51:37
Вопросы читателей

Можно ли исправить «Windows не может связаться с устройством или ресурсом»

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

Если вы получили это сообщение, не нужно паниковать. Мы объясним, что именно означает эта ошибка, и как ее исправить.

Что такое ошибка «Windows не может связаться с устройством или ресурсом»?

Обычно вы видите ошибку «Windows не может связаться с устройством или ресурсом», когда не можете подключиться к Интернету, и запускаете диагностику сети.

Когда вы сталкиваетесь с этой ошибкой, это означает, что ваш компьютер не может подключиться к телефонной книге в Интернете, также известной как система доменных имен (DNS). Эта система автоматически переводит имена веб-сайтов в IP-адреса, что позволяет с легкостью просматривать веб-страницы.

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

Если вы не можете устранить ошибку «Windows 10 не может связаться с устройством или ресурсом», вот несколько исправлений, которые могут помочь.

1. Убедитесь, что ваши клиенты DNS и DHCP работают

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

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

Включите DNS и DHCP, дважды щелкнув каждую из служб. Если служба остановлена, просто выберите  Пуск. Вам также следует убедиться, что вы выбрали  Автоматически в раскрывающемся меню «Тип запуска».

Когда это будет сделано, нажмите  Применить > ОК.

2. Удалите и повторно установите сетевое устройство

Устаревшие или неправильные драйверы иногда могут вызывать ошибку «Windows не может связаться с устройством или ресурсом». В этом случае лучше очистить планшет и удалить сетевое устройство.

Чтобы получить доступ к своим сетевым устройствам, нажмите Windows + X, чтобы открыть меню быстрой ссылки. Выберите Диспетчер устройств из списка, и нажмите на кнопку N etwork адаптеров.

Выберите свое сетевое устройство и нажмите «Удалить устройство». Когда это будет сделано, щелкните правой кнопкой мыши Сетевые адаптеры и  выберите  Сканировать на предмет изменений оборудования.

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

3. Обновите сетевые драйверы вручную

Хотя сетевые драйверы обычно обновляются в Windows 10 автоматически, все равно не помешает попробовать обновить сетевые драйверы вручную. Для этого нажмите Windows + X > Диспетчер устройств > Сетевые адаптеры.

Найдите свое сетевое устройство в раскрывающемся меню, щелкните его правой кнопкой мыши и нажмите «Обновить драйвер».

Теперь Windows предоставит вам два способа найти новые драйверы. Выберите вариант с надписью « Автоматический поиск обновленного программного обеспечения драйвера».

Отсюда Windows будет искать на вашем компьютере и в Интернете любые обновления. Если есть новые драйверы, обязательно их установите.

4. Очистите кеш DNS

Поврежденный кеш DNS также может вызывать сообщения об ошибках. Чтобы исправить это, вам придется очистить кеш DNS.

Для начала введите «Командная строка» в строку поиска Windows 10. Щелкните правой кнопкой мыши Командную строку  в результатах поиска и выберите  Запуск от имени администратора.

Как только программа появится, введите одну за другой следующие строки кода:

ipconfig /flushdns

ipconfig /registerdns

ipconfig /release

ipconfig /renew

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

5. Настройте параметры адаптера

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

После этого выберите «Изменить настройки адаптера» в меню в левой части экрана.

Щелкните правой кнопкой мыши свое соединение и выберите «Свойства».

Убедитесь, что флажок рядом с Интернет-протоколом версии 4 (TCP/IPv4) снят. Отсюда дважды щелкните параметр IPv4.

Заливка в пузыри рядом с  автоматически Получить IP — адрес и  Получить адрес DNS — сервера автообновления LY. Когда вы закончите, нажмите ОК.

Чтобы сделать это исправление более эффективным, вы также можете повторить те же шаги с элементом, который читает Интернет-протокол версии 6 (TCP/IPv6).

6. Переключитесь на публичный DNS

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

Для начала вам нужно будет получить доступ к настройкам сети, используя тот же метод, который описан на предыдущем шаге. Просто откройте панель управления, перейдите к Просмотр состояния и задач сети > Изменить настройки адаптера. Щелкните соединение правой кнопкой мыши и выберите «Свойства».

Еще раз дважды щелкните Internet Protocol Version 4 (TCP/IPv4). На этот раз вам нужно заполнить кружок рядом с  надписью Использовать следующие адреса DNS-серверов.

Теперь введите адрес DNS-сервера Google. В полях ниже введите эти числа:

  • Предпочтительный DNS-сервер: 8.8.8.8
  • Альтернативный DNS-сервер: 8.8.4.4

После нажатия  ОК перезагрузите компьютер, чтобы проверить, восстановится ли подключение к Интернету.

Устранение ошибок Windows 10 и выход в Интернет

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

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



2020-10-08T13:19:20
Вопросы читателей