Подготовка сервера RED OS 7.3 к установке Битрикс «Управление сайтом»

Дальнейший ход установки предполагает, что у вас уже установлена RED OS в конфигурации программ «Сервер минимальный», без выбора ПО (т.е. php, apache и т.д. будем ставить позже и сами!)

Отключим SELinux:

Настроим отправку почты из консоли:

Для проверки работы:

Установим PHP 8.1

Если вдруг необходима версия PHP 7.4, которая идёт по умолчанию, то соответственно первая строчка не нужна

Установим Apache и Ngnix

Установим MariaDB

Установим Redis

Настройка Ngnix

Создадим папку /var/www/html/bx-site, присвоим ей пользователя и группу:

Далее качаем этот архив, и содержимое папки /redos/nginx переписываем поверх в /etc/nginx. Кроме того нужно в /etc/hosts добавить строчку:

В случае необходимости включить сразу ssl, добавим в файл /etc/ngnix/sites-available/default.conf секцию вида:

Если необходима (а она скорее всего необходима) переадрессация с http на https, то в секцию c 80 портом, добавляем строчки:

Запустим сервис:

Настройка PHP

В папке /etc/php.d необходимо отредактировать настройки модулей:

opcache

bitrix.ini

Настройка Apache

  • Добавить в /etc/httpd/conf.d файл default.conf из архива выше
  • в httpd.conf заменить Listen 80 на Listen 8090
  • заменить файл /etc/httpd/conf.modules/00-mpm.conf на файл из архива выше

Запустить httpd:

На этом моменте файл index.php размещенный в /var/www/html/bx-site уже должен отображаться адекватно

Настройка MariaDB

В файле /etc/my.cnf.d/mariadb-server.cnf внутри тега [mysqld] необходимо добавить/изменить строки:

Запуск сервиса:

Заходим в консоль сервера mysql, создаём пользователя и даём ему права:

Настройка Redis

В папке /etc/redis необходимо заменить файл redis.conf из архива выше, и выполнить в консоли:

На этом в принципе и всё. Сервер подготовлен для развертывания битрикса в папке /var/www/html/bx-site. По идее далее кидаем туда дистрибутив (ну или бекап, если сайт переносите как я) и начинаем установку из браузера

Создаём нейросеть на Python

Ну вот реально, очень мало в интернете статей на тему использования нейросетей. Теоретической информации — полно. «Напишем нейросеть в 9 строчек» — полно. А вот практических примеров с разжевыванием — единицы. Одна из хороших статей тут на хабре. Начало отличное, конец скомканный и до конца не раскрытый. Кроме того код во многих статьях датируемых до 20г уже не рабочий, т.к. используют Tensorflow версии меньше 2. Или ранние 2 версии. Посему на написание живого примера потратил довольно таки много времени.

Итак поставим себе задачу: узнать по фото, лето или зима отображены на ней.

» Читать далее

Python: пишем игру «успей нажать клавишу»

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

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

Итак, для написания понадобится знать что такое циклы, массивы, случайные числа. Использовать будем модули keyboard, random и time

  • keyboard — для получения нажатий клавиш на клавиатуре
  • random — для получения случайных числел
  • time — для расчета времени реакции

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

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

Что делает этот код? Бесконечно выводит в консоль сообщение о том, что нужно нажать случайно выбранную кнопку. Давайте теперь чуть переделаем код, чтобы случайно выбиралась не только клавиша которую нужноно нажать игроку, но и время за которое ему нужно её нажать:

Что дальше? А дальше нам нужно объявить еще один цикл и ждать пока не истечет время отведенное для того чтобы игрок нажал кнопку. Для этого, перед началом цикла запомним время начала игры, и внутри цикла постоянно будем проверять, на сколько оно отличается от текущего времени:

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

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

Ход игры:

Перенос работающего сайта WordPress с Mysql на PostgreeSQL

Задача: перенести рабочий, наполненный постами, сайт на движке WordPress с БД MySQL на PostgreeSQL

Инструментарий:

1) pgloader — утилита для переноса данных из баз данных MySQL в PostgreeSQL

Особенности о которые спотыкался:

  • для успешного переноса необходимо чтобы пользователь в терминале под которым осуществляется перенос имел максимальные права в БД и имел доступ «без пароля» для входа в консоль pgsql
  • при переносе создается схема с именем БД, а не заливается по умолчанию в схему public. Что в принципе для нашей ситуации даже будет плюсом.
  • Перед переносом, БД уже должна быть создана в PostgreeSQL

Синтаксис:

2) Плагин PG4WP который на «лету» исправляет запросы к MySQL на PostgreeSQL

Особенности:

  • работает только при «чистой» установке. Т.е. WordPress должен быть штатно проинсталлирован с нуля
  • Инсталляция корректно работает только до версии WordPress 5.9
  • Плагин заброшен, последнее обновление — 3 года назад

Итак, общий алгоритм переноса рабочего WordPress получается такой:

  1. Переносим при помощи pgloader БД в отдельную схему
  2. Заново устанавливаем WordPress 5.9 с плагином PG4WP
  3. Удаляем из схемы public wp_posts (это если только статьи переносим) и переносим её из схемы созданной pgloader в public
  4. Пробуем обновить штатно WordPress

Точно понадобится:

Удаление всех таблиц в схеме:

Поменять схему всех таблиц:

В принципе пока вполне рабочая схема

Flutter: Push уведомления firebase

С PUSH уведомлениями, во Flutter, вроде бы всё и просто, но вот я провозился три дня, чтобы заставить приложение стабильно их показывать. Большая часть проблем вытекает из-за постоянно развивающейся кодовой базы Flutter, в результате чего большая часть примеров в сети — уже не рабочие.

Проблема №1

Пакет flutter_webview_plugin_ios_android, который оказался не совместим с вызовом FirebaseMessaging.onBackgroundMessage, после инициализации которого, перестали работать кэлбеки webview на переходы на другие url (GitHub Issue).

Выход: не бросаться на простой в использовании пакет, а использовать максимально популярный webview_flutter. Хотя и оный у меня заработал, только в самой последней версии — до этого были проблемы с отображением некоторых сайтов с не понятными SSL сертификатами.

Проблема №2

Вызов ensureInitialized:

который у «всех работает а у меня не работает». И вызывает ошибку

Пришлось обернуть в:

Проблема №3

Подобрать комбинацию пакетов Flutter и окружение Android Studion, чтобы «всё заработало». В итоге удовлетворительно заработало при используемых версия пакетов Flutter:

firebase_messaging: ^14.4.0
flutter_local_notifications: ^13.0.0

И зависимостей build.grade для Android Studio:

\android\app\build.gradle:

\android\build.gradle:

Итак, вот текущая минимальная обвязка для работы с PUSH уведомлениями получилась:

1 2 3 4 5 9