Выбираем язык программирования: что нужно знать о python

Содержание:

#1: Автоматизация нудных дел

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

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

Сравнения

Операторы сравнения используются для сравнения двух значений. Результатом всегда является логическое значение — или .

Список операторов сравнения:

  • ==: возвращает True, если оба значения равны.
  • ! =: возвращает True, если оба операнда не равны.
  • >: возвращает True, если левый операнд больше правого.
  • <: возвращает True, если левый операнд меньше правого.
  • > =: возвращает True, если левое значение больше или равно правому.
  • <=: возвращает True, если левое значение меньше или равно правому значению.

Давайте посмотрим на пример.

x = 10
y = 20

print(f'equals = {x == y}')
print(f'not equals = {x != y}')
print(f'greater than = {x > y}')
print(f'less than = {x < y}')
print(f'greater than or equal to = {x >= y}')
print(f'less than or equal to = {x <= y}')

Вывод:

Эти операторы работают и со строками. Строка считается большей, чем другая строка, если она идет после нее лексикографически. Например, «Привет» больше, чем «Привет» при лексикографическом сравнении.

FreeSpacer – очистка компьютера и дисков от мусора

Dropbox

Эта облачная система хранения использует Python в своем клиенте для ПК. Если у вас есть какие-либо сомнения по поводу того, как Dropbox вложился в Python, представьте, что в 2012 году им удалось убедить Гвидо ван Россума, создателя Python, покинуть Google и уйти в Dropbox.

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

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

Минусы языка программирования Python

Несмотря на множество плюсов (простота, лаконичность, универсальность), у языка есть и минусы.
1. Программы на Python считают недостаточно быстрыми. Для сравнения: софт для iOS, написанный на языке Swift, может работать в 8 раз быстрее, чем на Python. Также Python — не очень подходящее решение для задач, которые требуют большого объёма памяти, — такие задачи лучше решать с помощью C либо C++.
2. Высокий уровень зависимости от системных библиотек. В результате затрудняется перенос на другие системы. Да, проблема решается посредством Virtualenv, однако у этого инструмента свои недостатки: костыли, избыточность полных методов изоляции, дублирование системных библиотек.
3. Global Interpreter Lock не даёт возможности одновременно исполнять несколько потоков Python в реализации CPython. Но GIL мы можем на какое-то время отключить, как это реализовано в математическом пакете NumPy.

Что если вашей идеи нет в этом списке?

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

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

Плюсы и минусы профессии программиста Python

Язык широко востребован, но хороших разработчиков, владеющих его технологиями, немного. Так что есть шанс стать золотым специалистом. В Питоне код простой и логичный – мечта перфекциониста. Создание программ занимает немного времени. У новичков редко возникают проблемы с тем, как начать программировать на Python. Его синтаксис легко понять и усвоить. Особенно, если записаться на .

Система универсальна, применяется в разных направлениях, от бэкенда до десктопных приложений. Практически в каждой крупной компании есть команда, которая разрабатывает на “змеином языке”.

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

Но есть у Питона и недостатки.

  1. Низкая скорость выполнения (в сравнении с C/C++, Java и другими статиками).

  2. Сложная отслеживаемость кода в больших проектах (из-за динамической типизации).

Industrial Light and Magic

Industrial Light and Magic (ILM) — студия спецэффектов, которая была основана Джорджем Лукасом в 1975 году для создания FX для Star Wars. С тех пор аббревиатура ILM считается синонимом FX, получив множество наград за свою работу в кино и рекламе.

В первые годы ILM фокусировались на настоящих эффектах, но вскоре поняли, что компьютерные эффекты — это будущее FX в целом. Их отдел CGI был основан в 1979 году, и их первым эффектом была последовательность взрывов проекта Genesis в Star Trek II: Гнев Хана.

Первоначально в CGI студии ILM использовалась оболочка Unix, но она занималась сравнительно небольшим объемом работы. Поскольку студия предвидела будущее CGI, они начали искать систему, которая могла бы справиться с агрессивным масштабированием, которое они видели в будущем.

ILM выбрал Python 1.4 вместо Perl и Tcl, объяснив это тем, что его было намного проще интегрировать в существующую инфраструктуру. Благодаря простой совместимости Python с C и C++, ILM легко импортировала Python в свое проприетарное программное обеспечение (являющееся частной собственностью авторов или правообладателей) для создания освещения. Это позволило им использовать Python в большем количестве сценариев, используя его для свертывания программных компонентов, и расширить свои стандартные графические приложения.

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

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

Аргументы и параметры

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

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

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

Выходит, что в следующем примере допущена ошибка:

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

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

А этот вызов некорректен:

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

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

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

Второй аргумент можно пропустить:

Чтобы обойти эту проблему, можно использовать словарь:

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

Еще один пример изменяемого объекта, значение которого поменялось при вызове:

Дабы не допустить изменения оригинальной последовательности, нужно передать копию изменяемого объекта:

Позиционные аргументы

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

При вызове функции нужно вводить команду следующим образом:

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

Вот так:

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

Произвольное количество аргументов-ключевых слов

Как и в случае с позиционными аргументами можно определять произвольное количество аргументов-ключевых слов следующим образом (в сочетании с произвольным числом необязательных аргументов из прошлого раздела):

При вызове функции нужно писать так:

Python обрабатывает аргументы-ключевые слова следующим образом: подставляет обычные позиционные аргументы слева направо, а затем помещает другие позиционные аргументы в кортеж (*args), который можно использовать в функции (см. предыдущий раздел). В конце концов, он добавляет все лишние аргументы в словарь (**kwargs), который сможет использовать функция.

Есть функция:

Важно, что пользователь также может использовать словарь, но перед ним нужно ставить две звездочки (**):

Порядок вывода также не определен, потому что словарь не отсортирован.

Строгая динамическая типизация

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

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

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

Может показаться, что это неудобно, но на самом деле это защищает от прорвы ошибок. Чтобы понять о чём
речь, достаточно посмотреть на JavaScript, язык со слабой типизацией:

Профессиональные навыки

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

Лучше займитесь Python. Он доступен, но сразу погружает вас в мир настоящего программирования.

Интеграция Python с другими языками? Нет проблем. Дополнительные решения? Да, имеется много вариантов. Jython – это Java с включенным Python, IronPython – это .NET c включенным Python.

Почему выбирают Python

«Python – это новая Java»,– прочитала я недавно, и это высказывание крепко застряло в моей голове (особенно потому, что я не совсем поняла, что имел в виду автор). Почему Java? Почему не новый C++ или новый PHP – скриптовый язык, работающий в интерпретирующем режиме?

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

Считается, что Java годится всегда и для всего. Но Python – главный соперник Java в соревновании на лучший программный язык широкого применения. Почему Python? Имеется 10 причин, почему стоит изучать Python.

См. по теме — Курс «Arduino плюс Python».

Где используется язык Python?

Мировой размах применения обусловлен не только синтаксисом и мощью, но и философией языка. Принципы Python доступны каждому – достаточно ввести в любом интерпретаторе код и узнать основные положения, которые лежат в основе «Питона».

Возможности Python опробованы десятками организаций.

Python используют в крупные мировые бренды

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

  • – скраппинг поиска и улучшение работы YouTube;
  • Netflix – анализ данных на серверной стороне, аллертинг;
  • BitTorrent – реализация сетей peer-to-peer;
  • Pixar, Industrial Light & Magic, Disney – анимационные фильмы;
  • Intel, Cisco, IBM – тестирование;
  • JPMorgan, UBS, Citadel – прогнозирование финансовых рынков;
  • iRobot – создание роботизированных устройств.

Как видно, возможности Python используются в решении разносторонних задач. Рядовые пользователи Всемирной сети обожают YouTube, который частично написан на языке Python, в то время как гиганты информационных технологий Intel или IBM активно используют «змею» для тестирования и исследований.

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

Возможности Python активно внедряются и в отечественны проекты. Mail.ru и Яндекс используют алгоритмы, которые написаны на данном языке программирования.

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

#5: Создание микроблога с помощью Flask

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

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

История возникновения языка Python

История развития языка Python начинается с1990 года. Разрабатывать новый язык начал Гвидо ван Россум, который на тот момент работал в нидерландском институте CWI. В этом институте велась разработка языка ABC. Язык ABC должен был заменить Basic и предназначался для обучения студентов программированию.

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

Для разработки языка Гвидо заимствовал идеи из множества других языков программирования. Но в основные идеи были заимствованы из языков программирования C и ABC.

Свое название язык получил в честь известного в 1970-х годах английского телевизионного шоу «Летающий цирк Монти Пайтона». Ван Россум являлся большим поклонником этого комедийного сериала.

Одиночные проверки

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

x = 4; y = True; z = False
if(x): print("x = ", x, " дает true")
if(not ): print("0 дает false")
if("0"): print("строка 0 дает true")
if(not ""): print("пустая строка дает false")
if(y): print("y = true дает true")
if(not z): print("z = false дает false")

Вот этот оператор
not – это отрицание
– НЕ, то есть, чтобы проверить, что 0 – это false мы
преобразовываем его в противоположное состояние с помощью оператора отрицания
НЕ в true и условие
срабатывает. Аналогично и с переменной z, которая равна false.

Из этих примеров
можно сделать такие выводы:

  1. Любое число,
    отличное от нуля, дает True. Число 0 преобразуется в False.

  2. Пустая строка –
    это False, любая другая
    строка с символами – это True.

  3. С помощью
    оператора not можно менять
    условие на противоположное (в частности, False превращать в True).

Итак, в условиях
мы можем использовать три оператора: and, or и not. Самый высокий
приоритет у операции not, следующий приоритет имеет операция and и самый
маленький приоритет у операции or. Вот так работает оператор if в Python.

Видео по теме

Python 3 #1: установка и запуск интерпретатора языка

Python 3 #2: переменные, оператор присваивания, типы данных

Python 3 #3: функции input и print ввода/вывода

Python 3 #4: арифметические операторы: сложение, вычитание, умножение, деление, степень

Python 3 #5: условный оператор if, составные условия с and, or, not

Python 3 #6: операторы циклов while и for, операторы break и continue

Python 3 #7: строки — сравнения, срезы строк, базовые функции str, len, ord, in

Python 3 #8: методы строк — upper, split, join, find, strip, isalpha, isdigit и другие

Python 3 #9: списки list и функции len, min, max, sum, sorted

Python 3 #10: списки — срезы и методы: append, insert, pop, sort, index, count, reverse, clear

Python 3 #11: списки — инструмент list comprehensions, сортировка методом выбора

Python 3 #12: словарь, методы словарей: len, clear, get, setdefault, pop

Python 3 #13: кортежи (tuple) и операции с ними: len, del, count, index

Python 3 #14: функции (def) — объявление и вызов

Python 3 #15: делаем «Сапер», проектирование программ «сверху-вниз»

Python 3 #16: рекурсивные и лямбда-функции, функции с произвольным числом аргументов

Python 3 #17: алгоритм Евклида, принцип тестирования программ

Python 3 #18: области видимости переменных — global, nonlocal

Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнение

Python 3 #20: итераторы, выражения-генераторы, функции-генераторы, оператор yield

Python 3 #21: функции map, filter, zip

Python 3 #22: сортировка sort() и sorted(), сортировка по ключам

Python 3 #23: обработка исключений: try, except, finally, else

Python 3 #24: файлы — чтение и запись: open, read, write, seek, readline, dump, load, pickle

Python 3 #25: форматирование строк: метод format и F-строки

Python 3 #26: создание и импорт модулей — import, from, as, dir, reload

Python 3 #27: пакеты (package) — создание, импорт, установка (менеджер pip)

Python 3 #28: декораторы функций и замыкания

Python 3 #29: установка и порядок работы в PyCharm

Python 3 #30: функция enumerate, примеры использования

Наука о данных и машинное обучение

Python хорошо подходит для манипулирования данными, анализа и реализации сложных алгоритмов. Синтаксический анализ и визуализация данных обычно представляют собой простые функции или несколько строк кода с библиотеками Python, такими как NumPy, scipy, scikit-learn и т.д.

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

  • NumPy
  • Pandas
  • Matplotlib
  • seaborn

Есть много инструментов глубокого обучения, которые поддерживают Python. Некоторые популярные библиотеки и фреймворки:

  • TensorFlow
  • PyTorch
  • Keras

Еще одна причина, по которой Python популярна, заключается в том, что даже сложные модели машинного обучения могут быть реализованы с помощью 20-40 строк кода.

С помощью какой команды можно на слайд вставить таблицу из файла MS Excel?

Циклы

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

Итерация «iteration» – однократное повторение тела цикла. Итерируемый объект – повторяемый объект «iterable». Он отдает один результат за итерацию. «Iterator» итератор – это объект, который позволяет получить следующий элемент цикла.

В Python можно использовать два цикла while и for.

Цикл while записывается как:

while <условие>:        <блок кода>

Блок кода выделяется табуляцией, которая обычно составляет 4 пробела. В цикле могут быть опции «else», «elif» принудительная остановка, пропуск остатка цикла «continue». Цикл может быть бесконечным.

Цикл «for» записывается как

for <переменная> in <список>:     <блок кода>

В цикле «for» происходит поочередный перебор последовательности нужное количество раз. Все операторы «else», «break», «continue» аналогичны операторам в цикле «while». Для исполнения скрипта определенное количество раз используется функция «range».

Почему для решения проблемы был выбран именно GIL?

Итак, почему же это не очень «хорошее» решение используется в Python? Насколько для разработчиков это решение критично?

По словам Larry Hastings, архитектурное решение GIL — это одна из тех вещей, которые сделали Python популярным.

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

Много расширений, в которых нуждался Python, было написано для уже существующих библиотек на C. Для предотвращения несогласованных изменений, язык C требовал потокобезопасного управления памятью, которое смог предоставить GIL.

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

Те библиотеки на C, которые не были потокобезопасными, стало легче интегрировать. Эти расширения на C стали одной из причин, почему Python-сообщество стало расширяться.

Как можно понять, GIL — фактическое решение проблемы, с которой столкнулись разработчики CPython в начале жизни Python.

Анализ данных и визуализация в Python

Одной из самых популярных библиотек для визуализации данных является Matplotlib.

Эта библиотека станет отличным выбором для вас:

  • Вы сможете легко и достаточно быстро ее освоить
  • На ее основе построены многие другие библиотеки, например seaborn. Изучив Matplotlib, в будущем вам будет легче разобраться с другими библиотеками на его основе.

Как мне следует начать анализировать данные с помощью Python?

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

Также я создал свой собственный курс по этой теме на Pluralsight, который вы можете пройти бесплатно, подписавшись на их 10-дневную бесплатную пробную версию.

Я бы рекомендовал вам посмотреть и то и другое.

Изучив основы анализа и визуализации данных, вам будет полезно также изучить основы статистики с таких сайтов, как Coursera и Khan Academy.

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

При желании можно отследить человека по номеру телефона. Это очень удобно, когда хочется узнать местоположение определённого абонента. Такие услуги предоставляют российские операторы большой четвёрки – Билайн, МТС, МегаФон, Теле2. При подключении такой услуги на смартфон абонента приходит смс-сообщение с запросом, относительно функции отслеживания. Следить за человеком можно только в том случае, если он даст согласие на слежку.

Билайн

Чтобы активировать услугу отслеживания мобильного телефона, следует отправить смс-сообщение на номер 684 с текстом «L». Такая функция подключается всего на один раз, при этом каждый раз требуется согласие абонента на слежку.

Можно позвонить по номеру 068 499 24. Стоимость услуги отслеживания номера телефона от 2,5 до 5 рублей. Отследить абонента можно только во время звонка.

Тарифная услуга «Билайн-Координаты» позволяет сразу подключить до 5 абонентов, но только с их согласия. Активировать услугу можно бесплатно самостоятельно или же в фирменном салоне связи. Для подключения отправляют пустое смс-сообщение на номер 4770 или звонят по короткому номеру 0665. Первую неделю можно пользоваться сервисом бесплатно, далее абонплата составляет 1,7 рубля в сутки.

МТС

Тут услуга называется «Ребёнок под присмотром». Ею пользуются родители, чтобы знать, где находятся их дети. Чтобы активировать услугу, необходимо на номер 7788 отправить слово МАМА или ПАПА. Первые дни этой услугой можно пользоваться бесплатно, потом стоимость составляет 50 рублей в месяц.

После запроса приходит уникальный код, который нужнее для идентификации. Чтобы зарегистрировать нужный телефон в системе, следует на номер 7788 отправить сообщение такого содержания РЕБЕНОК <ИМЯ> <КОД СЕМЬИ>.

МегаФон

Этот мобильный оператор предлагает своим клиентам несколько сервисов, которые позволяют отслеживать телефоны по номерам. Услуга под названием Радар поможет следить за абонентами не только внутри сети. После активации данной опции можно следить за абонентами МТС, Билайна и Теле2. Для начала нужно установить зону слежения, сделать это можно на сайте radar.megafon.ru. Данные о передвижениях объекта хранятся на сайте три месяца.

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

Теле2

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

Чтобы активировать программу, отправляют USSD-запрос *119*01#. Подключение нужного номера делают через команду *199*номер телефона#. Следить за смартфоном можно только с согласия его владельца. Ему предварительно отправляется запрос на подключение.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector