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

Как добавить в начало списка в Python

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

  1. Функция List.Insert
  2. Метод оператора сложения
  3. Метод нарезки
  4. Итеративный метод распаковки

Итак, давайте подробно обсудим каждый метод.

 

Метод 1. Использование функции list.insert

Первый метод, который мы собираемся обсудить, — это функция вставки. Эта функция принимает два параметра: index_position и значение. В приведенном ниже коде мы вставляем переменную val в позицию индекса 0:

#python list_insert_method.py



if __name__ == '__main__':



lst = [12, 33, 45, 56,47]

val = 1



lst.insert(0, val)

print(lst)  



# prints [1, 12, 33, 45, 56, 47]

 

Вывод: python list_insert_method.py

[ 1 , 12 , 33 , 45 , 56 , 47 ]

 

Строка 5: Мы создали список целых чисел (lst).

Строка 6: Мы создали переменную val и присвоили ей значение 1, которое мы хотим вставить в начало списка.

Строка 8: Теперь мы вызываем метод insert и передаем два параметра (index_position, value). Первый параметр — это index_position, куда мы хотим вставить значение, поэтому мы оставляем его 0. Другой параметр — это значение, которое мы хотим вставить в index_position 0.

Строка 9: Оператор печати показывает, что наш val успешно вставлен в начало списка.

 

Метод 2: использование метода оператора сложения (+)

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

#python addition_operator_method.py



if __name__ == '__main__':



lst = [12, 33, 45, 56,47]

val = 1



lst = [val] + lst

print(lst)  # prints [1, 12, 33, 45, 56, 47]

 

Вывод: python addition_operator _method.py

[ 1 , 12 , 33 , 45 , 56 , 47 ]

 

Строка 8: Мы преобразуем значение в список, а затем с помощью оператора сложения добавляем первый список перед вторым.

Строка 9: Оператор печати показывает, что наш val успешно вставлен в начало списка.

 

Метод 3: использование метода среза

Другой метод, который мы собираемся обсудить, — это метод среза. Как мы знаем, list[: 1] напечатает элемент в позиции индекса 0, а list[: 2] напечатает два значения в позиции индекса 0 и 1. Поэтому любое значение, которое мы передаем в список слайсов [: n], будет print (n -1) элементов. Итак, если мы передадим список [: 0], он будет отображаться как пустой, потому что в списке нет такого значения индекса. Если мы вставим элемент в этот конкретный индекс, он добавится в начало списка, как показано в следующей программе:

# python slice_method.py



if __name__ == '__main__':



lst = [12, 33, 45, 56,47]

val = 1

print(lst[:0])

lst[:0] = [val]

print(lst)  # prints [1, 12, 33, 45, 56, 47]

 

Вывод: python slice_method.py

[ ]

[ 1 , 12 , 33 , 45 , 56 , 47 ]

 

Строка 7 : Мы печатаем lst[: 0], чтобы проверить, какие значения мы получим. По выходным данным print[] мы можем ясно сказать, что это пустой список.

Строка 8 : Мы присвоили список val пустому списку, как описано выше.

Строка 9 : Оператор печати показывает, что наш val успешно вставлен в начало списка.

 

Метод 4: Использование итеративного метода распаковки

Последний метод, который мы собираемся обсудить, — это оператор звездочки (*). Это итеративный метод, и он также вставляет значение в начало списка.

# python unpacking_operator_method.py



if __name__ == '__main__':



lst = [12, 33, 45, 56,47]

val = 1

print(*lst)

lst = [val, *lst]

print(lst)  # prints [1, 12, 33, 45, 56, 47]

 

Вывод: python unpacking_operator_method.py

12 33 45 56 47

[ 1 , 12 , 33 , 45 , 56 , 47 ]

 

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

Строка 8: Мы сохранили val и * list вместе в списке, а затем назначили его другому списку.

Строка 9: Оператор печати показывает, что наш val успешно вставлен в начало списка.

 

Заключение

Мы показали вам различные методы добавления элемента в начало списка. Мы видели разные методы, такие как Insert, Addition(+) Operator, Slice и Unpacking Asterisk. Все методы очень просты в использовании, но вместе с тем мы должны заботиться о времени обработки. Потому что, если данных меньше, нас это может не волновать. Однако, если у нас есть миллиарды данных, это может иметь значение. Исходя из этого, лучшим методом обработки является метод вставки.



2021-09-27T23:01:55
Python

Новое в информационной безопасности: подробный взгляд на ISO 27001 и 27002

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

ISO 27001 — это международный стандарт управления информационной безопасностью Международной организации по стандартизации. В настоящее время используются определения из документов 2013 года с обновлениями в 2014 и 2015 годах, это центральная структура для требований внедрения в СМИБ (Система управления информационной безопасностью). Организации могут пройти сертификацию по ISO 27001, используя стандарт управления для достижения соответствия. Новое третье издание стандарта ISO 27002, выпущенное в 2021 году, вводит свод правил для контроля безопасности, который соответствует требованиям ISO 27001.

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

Чтобы было ясно, ISO 27001 — это стандарт, по которому организации сертифицированы. ISO 27002 предоставляет дополнительные сведения для выбора, внедрения и управления средствами контроля информационной безопасности.

Различия указывают на новые и обновленные способы, которыми организация должна заниматься и управлять информационной безопасностью, чтобы в ближайшем будущем получить сертификат ISO 27001. Организации должны проходить повторную сертификацию каждые три года с ежегодным надзорным аудитом, с учетом периода конверсии при выпуске нового стандарта. Если ISO 27002 приведет к новому процессу повторной сертификации в 2021 или 2022 году, у организаций будет возможность повторно пройти сертификацию в соответствии со старым стандартом 2013 года, что даст время для обновления связанных процессов в соответствии с новыми элементами управления ISO 27002. К 2024 или 2025 году все организации будут использовать новый стандарт, но те, кто хочет его обновить, сделают это гораздо раньше.

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

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

Но достаточно контекста и самих элементов управления — что изменилось?

Средства управления информационной безопасностью теперь разделены на 4 категории:

  • Раздел 5. Организационный контроль
  • Раздел 6. Управление персоналом
  • Раздел 7. Физический контроль
  • Раздел 8. Технологический контроль

 

Это значительно сокращает текущие 14 категорий и, как отмечалось выше, обеспечивает большую согласованность и общность с другими стандартами ISO.

Общее количество элементов управления в ISO 27002 уменьшилось со 114 до 93, а шестнадцать устаревших элементов управления были удалены.

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

  • Разведка угроз
  • Информационная безопасность при использовании облачных сервисов
  • Предотвращение утечки данных
  • Удаление информации и запутывание или маскирование данных в целях конфиденциальности
  • Готовность к непрерывности бизнеса
  • Управление идентификацией
  • Мониторинг физической безопасности
  • Безопасность конечных точек для пользовательских устройств
  • Управление конфигурацией
  • Веб-фильтрация
  • Безопасное кодирование

 

В рамках дальнейшего развития свойств безопасности конфиденциальности, целостности и доступности новый ISO 27001 детализирует новые атрибуты, упрощающие классификацию и управление. Контролям присваивается такой тип, как Превентивный, Детективный, Корректирующий, со свойствами информационной безопасности CIA, как и раньше.

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



2021-09-27T21:39:37
Безопасность

Как уменьшить влияние рекламы Google Adsense на показатели PageSpeed Insights

После моей публикации обзора VDSina один комментатор справедливо заметил, что не совсем корректно приводить в статье показатели PageSpeed Insights для пустого сайта. И приложил скриншот значений для этого блога. Которые, конечно, были далеки от идеала. Читать

Как настроить mod_jk на HTTP-сервере Apache

Mod_jk — это модуль или коннектор Apache, который соединяет контейнер сервлетов Apache Tomcat с веб-серверами, такими как Apache, IIS и другими. Mod_jk — это полная замена старого модуля mod_jser, который обрабатывает связь между Tomcat и HTTP-серверами с использованием протокола Apache JServ.

Мы не будем углубляться в работу модуля mod_jk, поскольку это выходит за рамки данной статьи. Вместо этого мы сосредоточимся на том, как интегрировать его с HTTP-сервером Apache.

Узнайте больше о том, как работает mod_jk.

Примечание
В этой статье мы предполагаем, что у вас установлены и настроены серверы Apache Tomcat и Apache HTTPD. Если нет, просмотрите наши руководства по темам.

 

Шаг 1. Загрузите и установите mod_jk

Первым шагом является загрузка модуля mod_jk для Linux и его сборка для веб-сервера Apache. Если вы работаете в Windows, вы найдете предварительно созданный двоичный файл для настройки mod_jk.

Откройте терминал и введите команду:

wget https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz

 

После загрузки пакета распакуйте его как:

tar xvf tomcat-connectors-1.2.48-src.tar.gz

 

Затем перейдите в извлеченный каталог /native как:

cd tomcat-connectors-1.2.48-src/native/

 

Находясь в собственном каталоге, выполните команду:

./configure -with-apxs=/usr/bin/apxs

 

Приведенная выше команда устанавливает путь к инструментам apxs для HTTP-сервера Apache. Если вы не знаете расположение инструментов apxs, используйте команду which как:

which apxs

/usr/bin/apxs

 

Если вы получили пустой результат, вам необходимо установить пакет apache dev с помощью команды:

sudo apt install apache2-dev

# или

yum install httpd-devel

 

Следующим шагом является создание системного объектного файла для модуля mod_jk.

Используйте команду make в собственном каталоге.

make

 

После успешного завершения вы должны увидеть каталог apache-2.0, созданный в собственном каталоге.

Вы должны увидеть в каталоге файл mod_jk.so.

Скопируйте файл mod_jk.so в каталог модулей apache. Он должен находиться в /usr/lib/apache2/modules или /etc/httpd/modules.

sudo cp mod_jk.so /usr/lib/apache2/modules/

 

Шаг 2: Загрузите модуль mod_jk

После того, как мы добавили модуль mod_jk в каталог модулей Apache HTTPD, нам нужно загрузить его, отредактировав файл httpd.conf.

В каталоге conf отредактируйте файл httpd.conf с помощью вашего любимого текстового редактора? например Vim.

vim /etc/apache2/apache2.conf

 

Затем нам нужно добавить директиву include в файл конфигурации apache для загрузки модуля. Вы можете узнать, как загрузить модули, с помощью grep.

grep -i ^Include /etc/apache2/apache2.conf

 

Приведенная выше команда выдаст такой результат, как показано:

IncludeOptional mods-enabled/*.load

IncludeOptional mods-enabled/*.conf

Include ports.conf

IncludeOptional conf-enabled/*.conf

IncludeOptional sites-enabled/*.conf

 

Из файла конфигурации выше, модули расположены в каталоге с поддержкой модов.

Перейдите в каталог /etc/apache2/mods-enabled и создайте файл mod_jk.conf.

cd /etc/apache2/mods-enabled/ && sudo touch mods_jk.conf

 

Внутри файла добавьте следующие записи.

LoadModule jk_module "/usr/lib/apache2/modules/mod_jk.so"

JkWorkersFile /etc/apache2/conf-enabled/workers.properties

JkShmFile     /etc/apache2/logs/mod_jk.shm

JkLogFile /etc/apache2/logs/mod_jk.log

JkLogLev JkMount  /stat/*  stat

JkMount  /*  balancer el debug

JkLogOptions +forwardKeySize +ForwardURICompat -ForwardDirectories

 

В JkWorkersFile мы определяем информацию об узле.

JkLogFile определяет расположение файла журнала.

JkLogLevel устанавливает уровень журнала для отладки

 

Шаг 3: Настройка файла рабочих

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

Вот пример конфигурации:

worker.list=stat

worker.jk-status.type=status

worker.jk-status.read_only=true



worker.tomcat_1.type=ajp13

worker.tomcat_1.port=9001

worker.tomcat_1.host=127.0.0.1



worker.tomcat_2.type=ajp13

worker.tomcat_2.port=9002

worker.tomcat_2.host=127.0.0.1



worker.tomcat_3.type=ajp13

worker.tomcat_3.port=9003

worker.tomcat_3.host=1270.0.0.1



worker.list=balancer

worker.balancer.type=lb

worker.balancer.balance_workers=tomcat_1,tomcat_2,tomcat_3

 

После этого у вас должен быть установлен и готов к работе модуль mod_jk на сервере Apache.

 

Заключение

В этой статье показано, как настроить и использовать модуль mod_jk на сервере HTTPD Apache. Вы можете узнать больше из официальных документов.



2021-09-26T22:08:14
Apache

Как включить ведение журнала отладки в Apache

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

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

Из этой статьи вы узнаете, как собрать подробную информацию о службе Apache Tomcat, включив режим DEBUG.

Примечание
В этой статье мы не рассматриваем установку Apache Tomcat. Ознакомьтесь с нашими руководствами по этой теме, чтобы узнать больше.

 

Как включить ведение журнала отладки Apache Tomcat в Linux

Чтобы включить ведение журнала отладки для Apache Tomcat в Linux, отредактируйте файл logging.properties. Файл находится в каталоге conf корневой установки Apache Tomcat.

Например:

vim /opt/tomcat/conf/logging.properties.

 

Найдите следующую запись:

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE

 

Измените значение с FINE на ALL.

Последняя запись должна быть:

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = ALL

 

Сохраните файл и закройте. Вам нужно будет перезапустить Tomcat Service, чтобы включить уровни журнала.

Если вам не нужны все сообщения журнала от Tomcat, вы можете установить различные уровни, используя уровни журнала JULI, как:

  • SEVERE — Сообщения о серьезных сбоях
  • WARNING — возможные ошибки
  • INFO — Информационные журналы
  • FINE — Журналы трассировки
  • CONFIG — статические журналы конфигурации
  • FINEST — подробные журналы трассировки
  • FINER — подробные журналы трассировки
  • ALL — все сообщения (режим отладки)

 

Вы также можете включить ведение журнала для внутренних компонентов Apache Tomcat, изменив следующие значения на all:

org.apache.catalina.session.level=FINE

java.util.logging.ConsoleHandler.level=FINE

 

на:

org.apache.catalina.session.level=ALL

java.util.logging.ConsoleHandler.level=ALL

Как включить журнал отладки Apache Tomcat в Windows

Предположим, вы запускаете Apache Tomcat на машине с Windows. Вы можете использовать предоставленный интерфейс конфигурации для управления уровнями журнала.

Откройте меню «Пуск» и найдите «Настроить Tomcat».

Запустите приложение и перейдите на вкладку ведения журнала. Выберите уровень журнала и установите его на DEBUG.

Затем нажмите «Применить» и перейдите на вкладку «Общие». Наконец, нажмите «Остановить», а затем «Пуск», чтобы перезапустить службу Apache.

 

Заключение

В этой статье показано, как включить ведение журнала отладки для Apache Tomcat в системах Windows и Linux.

Спасибо за чтение.



2021-09-26T15:17:57
Apache

Настройка репликации PostgreSQL в контейнерах Docker

Мы рассмотрим процесс поднятия двух контейнеров с PostgreSQL и настройки репликации данных между ними. Использовать будем систему на базе Linux, однако, сам процесс настройки Docker и репликации не зависит от операционной системы.




Подготовка компьютера




На компьютере, где мы будем запускать наш кластер баз данных должен быть установлен Docker. Также мы сразу рассмотрим развертывание нужной нам инфраструктуры в docker-compose. Для установки необходимой одноименной платформы смотрим инструкцию Установка Docker на Linux.




После мы можем переходить к поднятию контейнеров.




Запуск контейнеров с СУБД




Как говорилось выше, мы будем поднимать наши контейнеры с помощью docker-compose.




Создадим каталог, в котором будем работать:




mkdir -p /opt/docker/postgresql




Переходим в него:




cd /opt/docker/postgresql




Создаем файл для docker-compose:




vi docker-compose.yml




---



services:



  postgresql_01:

    image: postgres

    container_name: postgresql_01

    restart: always

    volumes:

      - /data/postgresql_01:/var/lib/postgresql/data

    environment:

      POSTGRES_PASSWORD: postgres024



  postgresql_02:

    image: postgres

    container_name: postgresql_02

    restart: always

    volumes:

      - /data/postgresql_02/:/var/lib/postgresql/data

    environment:

      POSTGRES_PASSWORD: postgres024




* рассмотрим некоторый опции подробнее:







Запускаем наши контейнеры:




docker-compose up -d




Мы должны увидеть:




Creating postgresql_02 ... done

Creating postgresql_01 ... done




А если вывести список контейнеров:




docker ps




… мы должны увидеть наши два.




Теперь можно переходить к настройке репликации.




Настройка репликации




Условимся, что первичный сервер или master будет в контейнере с названием postgresql_01. Вторичный — postgresql_02. Мы будем настраивать потоковую (streaming) асинхронную репликацию.




Настройка на мастере




Подключаемся к контейнеру docker:




docker exec -it postgresql_01 bash




Заходим под пользователем postgres:




su - postgres




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




createuser --replication -P repluser




* в данном примере будет создаваться учетная запись repluser с правами репликации.




Система потребует ввода пароля. Придумываем его и набираем дважды.




Выходим из-под пользователя postgres:




exit




Выходим из контейнера:




exit




Открываем конфигурационный файл postgresql.conf:




vi /data/postgresql_01/postgresql.conf




Приводим к следующием виду некоторые параметры:




wal_level = replica

max_wal_senders = 2

max_replication_slots = 2

hot_standby = on

hot_standby_feedback = on




* где







Посмотрим подсеть, которая используется для контейнеров с postgresql:




docker network inspect postgresql_default | grep Subnet




В моем случае, ответ был:




"Subnet": "172.19.0.0/16",




Теперь открываем файл:




vi /data/postgresql_01/pg_hba.conf




И добавляем строку после остальных «host    replication»:




host    replication     all             172.19.0.0/16           md5




* в данном примере мы разрешили подключение пользователю replication из подсети 172.19.0.0/16 с проверкой подлинности по паролю.




Перезапустим докер контейнер:




docker restart postgresql_01




Настройка на слейве




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




rm -r /data/postgresql_02/*




* в данном примере мы удалим все содержимое каталога /data/postgresql_02.




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




Заходим внутрь контейнера postgresql_02:




docker exec -it postgresql_02 bash




Выполняем команду:




su - postgres -c "pg_basebackup --host=postgresql_01 --username=repluser --pgdata=/var/lib/postgresql/data --wal-method=stream --write-recovery-conf"




* где postgresql_01 — наш мастер; /var/lib/postgresql/data — путь до каталога с данными слейва.




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




Проверка




Смотрим статус работы мастера:




docker exec -it postgresql_01 su - postgres -c "psql -c 'select * from pg_stat_replication;'"




Смотрим статус работы слейва:




docker exec -it postgresql_02 su - postgres -c "psql -c 'select * from pg_stat_wal_receiver;'"




Источник: https://www.dmosk.ru/miniinstruktions.php?mini=postgresql-replication-docker