Установка PHP 7.4 с компиляцией модуля v8js на ubuntu 22

В README файлах официальных репозиториях V8 и V8JS достаточно информации по установке/компиляции компонентов для PHP 8+, но эти инструкции не работают для PHP 7.4.

Ниже, проверенная инструкция для установки из исходников V8 и компиляция модуля V8JS для PHP 7.4 на операционной системе Ubuntu 22

Получаем рут права:

sudo su

Обновляем компоненты ОС ubuntu 22, чтобы работать с самыми актуальными версиями пакетов :

apt-get update -y --fix-missing && apt-get upgrade -y;

Добавляем репозитория для установки PHP и модулей (так как в стандартных репозитория нету PHP 7.4):

add-apt-repository ppa:ondrej/php

Устанавливаем PHP 7.4 с стандартными модулями:

apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-mysql php7.4-mbstring php7.4-zip php7.4-curl php7.4-gd php7.4-xml php7.4-dev

Далее, устанавливаем инструмент для сборки программного обеспечения (V8)

apt install ninja-build

И другие, необходимые для сборки проекта V8, инструменты:

apt-get install -y --no-install-recommends \
    libtinfo5 libtinfo-dev \
    build-essential \
    curl \
    git \
    libglib2.0-dev \
    libxml2 \
    python2 \
    patchelf \
    && sudo ln -sf /usr/bin/python2.7 /usr/bin/python \
    && cd /tmp \
    \
    && git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --progress --verbose \
    && export PATH="$PATH:/tmp/depot_tools" \
    \
    && fetch v8 \
    && cd v8 \
    && git checkout 8.9.255.25 \
    && gclient sync \
    \
    && tools/dev/v8gen.py -vv x64.release -- is_component_build=true use_custom_libcxx=false

В том числе Depot tools — набор утилит Гугла для сборки проектов (V8).

Из важного — используется не последняя версия V8 из репозитория, а версия 8.9.255.25

Процесс сборки представлен ниже:

export PATH="$PATH:/tmp/depot_tools" \
    && cd /tmp/v8 \
    && ninja -C out.gn/x64.release/ \
    && mkdir -p /opt/v8/lib && mkdir -p /opt/v8/include \
    && cp out.gn/x64.release/lib*.so out.gn/x64.release/*_blob.bin out.gn/x64.release/icudtl.dat /opt/v8/lib/ \
    && cp -R include/* /opt/v8/include/ \
    && apt-get install patchelf \
    && for A in /opt/v8/lib/*.so; do patchelf --set-rpath '$ORIGIN' $A;done

После этого, можем скачивать и компилировать модуль V8Js:

cd /tmp \
    && git clone https://github.com/phpv8/v8js.git \
    && cd v8js \
    && git reset --hard e648f43 \
    && git checkout  e648f43 \
    && phpize \
    && ./configure --with-v8js=/opt/v8 LDFLAGS="-lstdc++" CPPFLAGS="-DV8_COMPRESS_POINTERS" \
    && make \
    && make install

В результате успешного выполнения всех процедур будет файл v8js.so в папке /usr/lib/php/20190902

Необходимо добавить его в конфиги ini PHP:

cd /etc/php/7.4/cli/conf.d/

Создаем новый ini файл. Можно использовать любой редактор. В примере ниже используется nano:

nano 50-v8js.ini

Вводим всего одну строчку в свежем файле:

extension=v8js.so

И сохраняет этот файл.

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

cd /tmp
nano test_v8js.php

В который вставляем следующий PHP код, задействующий V8Js :

<?php
$v8js = new V8Js();
$JS = <<< EOT
  var s = 'Hello world';
  s;
EOT;
$r = $v8js->executeString($JS);
var_dump($r);

Сохраняем файл и запускаем:

php test_v8js.php

В случае успеха увидим вывод в консоли:

string(11) "Hello world"

Установка PHP 7.4 с компиляцией модуля v8js на ubuntu 20

В официальных репозиториях V8 и V8JS достаточно информации по PHP 8+, но инструкции не работают для PHP 7.4. Поэтому пришлось самому экспериментировать, чтобы добиться положительных результатов.

Ниже, инструкция для установки из источников V8 и компиляция модуля V8JS для PHP 7.4 на операционной системе Ubuntu 20

Получаем рут права:

sudo su

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

apt-get update -y --fix-missing && apt-get upgrade -y;

Устанавливаем PHP 7.4 с самыми типовыми, необходимыми модулями:

apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-mysql php7.4-mbstring php7.4-zip php7.4-curl php7.4-gd php7.4-xml php7.4-dev

Далее, устанавливаем инструмент для сборки программного обеспечения (V8)

apt install ninja-build

И другие, необходимые для сборки проекта V8, инструменты:

apt-get install -y --no-install-recommends \
    libtinfo5 libtinfo-dev \
    build-essential \
    curl \
    git \
    libglib2.0-dev \
    libxml2 \
    python \
    patchelf \
    && cd /tmp \
    \
    && git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --progress --verbose \
    && export PATH="$PATH:/tmp/depot_tools" \
    \
    && fetch v8 \
    && cd v8 \
    && git checkout 8.9.255.25 \
    && gclient sync \
    \
    && tools/dev/v8gen.py -vv x64.release -- is_component_build=true use_custom_libcxx=false

В том числе Depot tools — набор утилит Гугла для сборки проектов (V8).

Из важного — используется не последняя версия V8 из репозитория, а версия 8.9.255.25

Процесс сборки представлен ниже:

export PATH="$PATH:/tmp/depot_tools" \
    && cd /tmp/v8 \
    && ninja -C out.gn/x64.release/ \
    && mkdir -p /opt/v8/lib && mkdir -p /opt/v8/include \
    && cp out.gn/x64.release/lib*.so out.gn/x64.release/*_blob.bin out.gn/x64.release/icudtl.dat /opt/v8/lib/ \
    && cp -R include/* /opt/v8/include/ \
    && apt-get install patchelf \
    && for A in /opt/v8/lib/*.so; do patchelf --set-rpath '$ORIGIN' $A;done

После этого, можем скачивать и компилировать модуль V8Js:

cd /tmp \
    && git clone https://github.com/phpv8/v8js.git \
    && cd v8js \
    && git reset --hard e648f43 \
    && git checkout  e648f43 \
    && phpize \
    && ./configure --with-v8js=/opt/v8 LDFLAGS="-lstdc++" CPPFLAGS="-DV8_COMPRESS_POINTERS" \
    && make \
    && make install

В результате успешного выполнения всех процедур будет файл v8js.so в папке /usr/lib/php/20190902

Необходимо добавить его в конфиги ini PHP:

cd /etc/php/7.4/cli/conf.d/

Создаем новый ini файл. Можно использовать любой редактор. В примере ниже используется nano:

nano 50-v8js.ini

Вводим всего одну строчку в свежем файле:

extension=v8js.so

И сохраняет этот файл.

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

cd /tmp
nano test_v8js.php

В который вставляем следующий PHP код, задействующий V8Js :

<?php
$v8js = new V8Js();
$JS = <<< EOT
  var s = 'Hello world';
  s;
EOT;
$r = $v8js->executeString($JS);
var_dump($r);

Сохраняем файл и запускаем:

php test_v8js.php

В случае успеха увидим вывод в консоли:

string(11) "Hello world"

Оптимизация долгого запроса к большой таблице с фильтром по датам и времени

оптимизация sql запроса

Общеизвестно, что чем больше таблицы, тем дольше выполняются запросы к ним.

Под прицелом у нас очень большая таблица (десятки или сотни гигабайт) и запрос с фильтром по датам. Нужно понимать, что индексы на даты ставят очень редко. Так что подобные запросы могут выполняться десятки секунд или минут.

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

Исходные данные для нашего примера:

  1. huge_table — наша целевая таблица размером 100 гигабайт
  2. join_table1, join_table2 — второстепенные таблицы из которые получаем дополнительные данные. Небольшие (гигабайт или около того)

Запрос выглядит так

SELECT huge_table.*
FROM huge_table
LEFT JOIN join_table1 on huge_table.column1 = join_table1.id
LEFT JOIN join_table2 on huge_table.column2 = join_table2.id
WHERE huge_table.date BETWEEN "2023-01-01 00:00:00" AND "2024-01-01 00:00:00";

Т.е. забираем данные по таблице huge_table за 2023й год

так как таблицы join_table1, join_table2 по условия небольшие, для оптимизации, мы можем рассмотреть упрощенный запрос примерно с тем же временем выполнения:

SELECT *
FROM huge_table
WHERE date BETWEEN "2023-01-01 00:00:00" AND "2024-01-01 00:00:00";

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

Теперь, представим, что нам нужно найти id первой записи за 2023й год и первой записи за 2024й в той же таблице. Оптимальные запросы будут такие:

SELECT id FROM huge_table WHERE date >= "2023-01-01 00:00:00" ORDER BY id ASC LIMIT 1;

SELECT id FROM huge_table WHERE date <= "2024-01-01 00:00:00" ORDER BY id DESC LIMIT 1;

Оба запроса в сумме выполняются до 5-10 секунд

Теперь понятно что делать с нашим исходным запросом:

SELECT *
FROM huge_table
WHERE date BETWEEN 
     (SELECT id FROM huge_table WHERE date >= "2023-01-01 00:00:00" ORDER BY id ASC LIMIT 1) 
AND 
     (SELECT id FROM huge_table WHERE date <= "2024-01-01 00:00:00" ORDER BY id DESC LIMIT 1);

выполняется на 2 порядка быстрее чем исходный запрос, в итоге.

Система грейдов разработчиков — теоретический материал — книги

developer and books

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

  • Первое, самое главное, это Обмен опытом. Книги могут служить основой для обсуждений и обмена опытом в команде. Это помогает создать общий язык и поддерживать единое видение разработки. 
  • Обновление технических знаний. Развивающиеся технологии требуют от нас постоянного обучения. Чтение книг по новым языкам программирования, фреймворкам и подходам помогает нам оставаться в курсе последних тенденций и инноваций.
  • Улучшение навыков разработки. Книги о лучших практиках, паттернах проектирования и оптимизации кода могут предложить ценные уроки и инсайты, которые могут привести к улучшению качества нашего программного продукта. 
  • Понимание процессов разработки. Книги, посвященные методологиям разработки, таким как Agile, Scrum, DevOps, помогут нам лучше понимать и организовывать процессы в команде. Это способствует более эффективной работе, управлению временем и улучшению коммуникации
  • Развитие лидерских навыков. Книги о личном развитии и мотивации могут помочь в преодолении трудностей, укреплении самодисциплины и достижении личных и профессиональных целей

У каждого опытного разработчика, тим-лида и дехдира есть свой собственный субъективный список книг, поскольку невозможно охватить все литературные произведения. Ниже я хочу поделиться своим опытом и классификацией книг по уровням грейдов, учитывая необходимость конкретных произведений на каждом из этих уровней. Книги с более сложными темами предполагает наличие более глубокого опыта и высоких навыков (уровней).

  • Грейды фул-стек разработчика (PHP + MySQL + JS)
Джуниор+Джуниор++МидлМидл+Мидл++
Сеньор
Сеньор+ (тимлид)
из раздела «Разработка»Программирование без дураков – Катрин Пассиг,  Йоханнес ЯндерPHP 7 в подлиннике – Дмитрий КотеровMySQL по максимуму. 3-е издание — Шварц Б.Чистый код — Роберт МартинСовершенный код. Мастер-класс – Стив Макконнелл

Первый среди равных — Майстер, Маккейн


Чистая архитектура — Роберт Мартин

из раздела «Личностный рост»Постигая Agile — Дженнифер ГринПрограммист-фанатик – Чед ФаулерRemote. Офис не обязателен — Джейсон ФарйдПиши, сокращай — Максим Ильяхов7 навыков высокоэффективных людей — Стивен КовиЧистый Agile — Роберт МартинПуть программиста – Джон Сонмез
Грейды фул-стек разработчика
  • Грейды бэк-енд разработчика (PHP + Laravel + Codeigniter + MySQL)
Джуниор+Джуниор++МидлМидл+Мидл++
Сеньор
Сеньор+ (тимлид)Сеньор++
из раздела «Разработка»Программирование без дураков – Катрин Пассиг,  Йоханнес ЯндерPHP 7 в подлиннике – Дмитрий КотеровMySQL по максимуму. 3-е издание — Шварц Б.Чистый код — Роберт МартинСовершенный код. Мастер-класс – Стив Макконнелл

Первый среди равных — Майстер, Маккейн


Чистая архитектура — Роберт Мартин

От нуля к единице —
Питер Тиль, Блейк Мастерс
из раздела «Личностный рост»Постигая Agile — Дженнифер ГринПрограммист-фанатик – Чед ФаулерRemote. Офис не обязателен — Джейсон ФарйдПиши, сокращай — Максим Ильяхов7 навыков высокоэффективных людей — Стивен КовиЧистый Agile — Роберт МартинПуть программиста – Джон Сонмез
Грейды бэк-енд разработчика
  • Грейды фронт-енд разработчика (JS + React)
Джуниор+Джуниор++МидлМидл+Мидл++
Сеньор
Сеньор+ (тимлид)
из раздела «Разработка»Программирование без дураков – Катрин Пассиг,  Йоханнес ЯндерСовременный учебник JavaScript (https://learn.javascript.ru)JavaScript для профессиональный веб разработчиков — Н. Закас,
ECMAScript 6 для разработчиков — Н. Закас
Чистый код — Роберт МартинСовершенный код. Мастер-класс – Стив Макконнелл

Первый среди равных — Майстер, Маккейн


Чистая архитектура — Роберт Мартин

из раздела «Личностный рост»Постигая Agile — Дженнифер ГринПрограммист-фанатик – Чед ФаулерRemote. Офис не обязателен — Джейсон ФарйдПиши, сокращай — Максим Ильяхов7 навыков высокоэффективных людей — Стивен КовиЧистый Agile — Роберт МартинПуть программиста – Джон Сонмез
Грейды фронт-енд разработчика
  • Грейды android разработчика
Джуниор+Джуниор++МидлМидл+Мидл++
Сеньор
Сеньор+ (тимлид)
из раздела «Разработка»Программирование без дураков – Катрин Пассиг,  Йоханнес ЯндерAndroid Programming: The Big Nerd Ranch Guide, 5th Edition ENG
Или на русском
Android. Программирование для профессионалов. 4-е издание
Android UI Development with Jetpack Compose — Thomas Kunneth
Или на русском
Kotlin в действии, Исакова Светлана, Жемеров Дмитрий
Чистый код — Роберт МартинСовершенный код. Мастер-класс – Стив Макконнелл

Первый среди равных — Майстер, Маккейн


Чистая архитектура — Роберт Мартин

из раздела «Личностный рост»Постигая Agile — Дженнифер ГринПрограммист-фанатик – Чед ФаулерRemote. Офис не обязателен — Джейсон ФарйдПиши, сокращай — Максим Ильяхов7 навыков высокоэффективных людей — Стивен КовиЧистый Agile — Роберт МартинПуть программиста – Джон Сонмез
Грейды андроид разработчика

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

Обновление MySQL 5.7 до 8.0: Как использовать Update Checker для безопасного перехода

mysql update

Обновление MySQL с версии 5.7 до 8.0 — важный этап, который требует внимательного планирования и грамотного выполнения. В этой статье мы рассмотрим процесс обновления, используя встроенный инструмент MySQL Shell — util.checkForServerUpgrade(). Данный инструмент поможет вам диагностировать проблемы совместимости и обеспечит плавный переход на новую версию.

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

Шаг 1: Установка MySQL Shell

На Linux

$ sudo apt-get update 
$ sudo apt-get install mysql-shell

На macOS

$ brew install mysql-shell

На Windows

  1. Скачайте установщик MySQL Shell с официального сайта MySQL.
  2. Запустите установщик и следуйте инструкциям.

Шаг 2: Запуск MySQL Shell

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

$ mysqlsh

Шаг 3: Проверка совместимости обновления

Инициируете соединение с базой данных (будь то локальная или удаленная база):

JS> \connect --mysql {user_name}@{my_sql_server}:3306

где {user_name} — ваш пользователь с базе данных с максимальными правами, {my_sql_server} — сервер базы данных. Потребуется ввод пароля пользователя

Используйте команду util.checkForServerUpgrade() для анализа текущей конфигурации и схемы базы данных:

JS> util.checkForServerUpgrade()

Вывод результатов будет примерно таким:

mysql update checker

Шаг 4: Подготовка к обновлению

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

Шаг 5: Фактическое обновление

Выполните фактическое обновление MySQL с использованием команды util.upgrade.applyUpgrade().

Следуйте указаниям, предоставляемым MySQL Shell, и дождитесь завершения обновления.

Шаг 6: Проверка стабильности

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

Обновление MySQL c 5.7 до 8.0 — нюансы структур и данных

mysql data tables

Обновление MySQL с версии 5.7 до 8.0 может включать в себя изменения в структуре таблиц и формате данных. Вот несколько нюансов, которые следует учитывать при обновлении:

  • Совместимость с типами данных:

В MySQL 8.0 улучшена обработка данных JSON, и формат хранения JSON может отличаться от формата в MySQL 5.7. Например, в MySQL 8.0 допускается более широкий спектр значений JSON и более глубокие вложенности.

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

  • Устаревшие и удаленные функции:

Вот несколько советов и примеров по обработке устаревших и удаленных функций:

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

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'your_database' AND ROUTINE_COMMENT LIKE '%deprecated%';

Где ‘your_database’ замените на имя вашей базы данных.

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

Примеры изменений:

Группировка результатов GROUP_CONCAT:
У функции GROUP_CONCAT в MySQL 8.0 появились новые опции и ограничения. Например, вместо использования:

SELECT GROUP_CONCAT(column_name) FROM your_table;

Вы можете использовать:

SELECT GROUP_CONCAT(column_name ORDER BY some_column SEPARATOR ', ') FROM your_table;

Использование директивы ONLY_FULL_GROUP_BY:

В MySQL 8.0 строже соблюдается директива ONLY_FULL_GROUP_BY, что означает, что все столбцы в SELECT, кроме агрегированных или включенных в GROUP BY, должны быть включены в GROUP BY. Это может потребовать пересмотра запросов.

  • Новые возможности

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

  • Обработка NULL-значений

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

  • Ограничения на длину индексов

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

  • Системные переменные и конфигурационные параметры

Некоторые параметры конфигурации могут быть переименованы или изменены. Обновите свой файл конфигурации с учетом новых параметров.

  • Поведение с SQL-запросами

Некоторые запросы могут начать возвращать различные результаты или вызывать ошибки из-за изменений в синтаксисе SQL или оптимизаторе запросов. Пересмотрите свои запросы и приведите их в соответствие с новой версией.

  • Поддержка времени выполнения

MySQL 8.0 внес изменения в обработку времени выполнения. Убедитесь, что ваше приложение корректно обрабатывает новые требования.

  • Аутентификация и безопасность

Внесены изменения в системы аутентификации и безопасности. Проанализируйте изменения в этой области и примените соответствующие настройки.

  • Тестирование

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

Обновление mySQL с версии 5.7 до 8.0

update mysql
  1. Сперва стоит ознакомиться с нюансами, которые следует учитывать при обновлении с версии 5.7 до 8.0
  2. Так же, стоит воспользоваться инструментом для проверки готовности обновления базы данных — Update Checker

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

  • Создаем резервную копию данных

Создание резервной копии данных в MySQL можно выполнить с использованием инструмента mysqldump, который поставляется вместе с MySQL. Этот инструмент позволяет экспортировать базу данных или выбранные таблицы в файл SQL, который затем можно использовать для восстановления данных. Вот примеры использования mysqldump:

mysqldump -u username -p --all-databases > backup.sql

Где:

  • -u username: указывает имя пользователя базы данных.
  • -p: запрашивает пароль пользователя (вас попросят ввести пароль после выполнения команды).
  • --all-databases: указывает, что нужно создать резервную копию всех баз данных.

Создание резервной копии конкретной базы данных:

mysqldump -u username -p database_name > backup.sql

Где database_name — это имя вашей базы данных.

Создание резервной копии конкретных таблиц:

mysqldump -u username -p database_name table1 table2 > backup.sql

Где table1 и table2 — это имена таблиц.

Восстановление из резервной копии:

mysql -u username -p database_name < backup.sql

Где database_name — это имя базы данных, а backup.sql — ваш файл резервной копии.

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

  • Убеждаемся в наличии резервной копии конфигурационных файлов

Cохраняем резервные копии конфигурационных файлов MySQL, таких как my.cnf или my.ini.

  • Устанавливаем новую версию MySQL

Установка MySQL 8.0 на Linux (Ubuntu):

Обновите информацию о доступных пакетах:

sudo apt-get update

Установите MySQL Server:

sudo apt-get install mysql-server

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

sudo systemctl start mysql

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

sudo mysql_secure_installation

В процессе выполнения вы будете отвечать на вопросы и устанавливать пароль для пользователя root MySQL.

Установка MySQL 8.0 на Windows:
— Перейдите на официальный сайт MySQL и загрузите установочный файл для Windows: https://dev.mysql.com/downloads/installer/
— Запустите установщик и следуйте инструкциям. Выберите «Developer Default» для установки сервера MySQL, а также других инструментов, таких как MySQL Workbench.
— В процессе установки вам могут быть предложены параметры конфигурации сервера. Убедитесь, что вы запомнили пароль для пользователя root MySQL.
— Завершите установку, следуя указаниям установщика.
— MySQL Server должен автоматически запуститься после установки. Если нет, вы можете запустить его с помощью MySQL Notifier или службы Windows.

  • Используем MySQL Shell для обновления схемы

MySQL 8.0 включает в себя MySQL Shell, который предоставляет утилиту mysqlsh. Запустите его и введите следующие команды:

mysqlsh 
\sql
\source path/to/mysql-upgrade.sql

Вместо path/to/mysql-upgrade.sql укажите путь к скрипту обновления, который предоставляется в составе дистрибутива MySQL.

  • Обновление и анализ данных

После обновления схемы MySQL, переносим данные из старой версии в новую, используя утилиты, такие как mysqldump или mysql_upgrade.

  • Настраиваем конфигурацию

Анализируем и адаптируем конфигурационные файлы (например, my.cnf или my.ini) для новой версии MySQL.

  • Перезапустите MySQL после завершения обновления и настройки.
  • Проверяем работоспособность вашего приложения и базы данных, чтобы убедиться, что все работает корректно.

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

Система грейдов разработчиков — программист на android

android developer

Ранее рассмотренные темы: грейды общими словами, хард-скиллы, грейды full-stack и back-end разработчиков, грейды front-end программистов

Взглянем на последний пример: грейды android разработчика с языками: Java, Kotlin

Итак, с разбивкой по уровням

  1. Джуниор

Комментарии: принимаем на этот уровень новичков без значимого опыта. На этот уровень не подымаются по системе грейдов.

  1. Джуниор+
  • Средний уровень знания в следующих технологиях  и инструментах: Kotlin  / Git / Android SDK
  • Базовое понимание Activity, Service, Broadcast Receiver, Content Provider

Комментарии: по сути, это основы. С чего начинают android разработчики приложений.

  1. Джуниор++
  • Разбирается в основном проекте
  • Начальные знания языка Java
  • Сильная экспертиза в следующих технологиях  и инструментах:
  • REST API, Firebase, ViewModel, Lifecycle, coroutines, Retrofit, Okhttp, Room, Flow / RxJava, xml

Комментарии: чтобы подняться на этот уровень, начинаем углубляться в android разработку. Разбираемся в самых необходимых библиотеках и подходах. Изучаем Java (уже считается легаси)

  1. Мидл
  • Разбирается в основном проекте на уровне, что может пояснять бизнес процессы коллегам
  • Помощь менеджерам в формировании более полных требований с технической точки зрения  
  • Уверенное знание Java и Kotlin
  • Сильная экспертиза в следующих технологиях  и инструментах: Dagger 2, Hilt, MVI, MVC / MVP / MVVM
  • Базовое понимание Compose
  • Создание модулей Dagger 2 или Hilt,
  • Создание архитектурных компонентов в связке ViewModel + View или Presenter + View

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

  1. Мидл+
  • Приличная экспертиза по непрофильным android проектам. Уверенное выполнение задач
  • Сильная экспертиза в следующих технологиях  и инструментах: Android Jetpack, Gradle 
  • Уверенное знание Compose, Recomposition, State
  • Созданы оптимизированные сборки приложений, с использованием инструментария обфускации ProGuard
  • Знание и применение Unit тестов
  • Придерживается принципов программирования: YAGNI (You Ain’t Gonna Need It)

Комментарии: Еще глубже погружаемся в разработку. Работаем с пакетными менеджерами и сборками. Экспертиза мидлов не ограничивается кодированием, т.е. активно применяет общепринятые принципы программирования и чистого кода

  1. Мидл++
  • Разбираться в бизнес-процессах одного из непрофильных продуктов на уровне чтобы передать знания
  • Сильная экспертиза в следующих технологиях  и инструментах: Android runtime (art) and dalvik, Application security, Memory Management
  • Умение использовать функционал Window Manager, Package Manager, Telephony Manager и Native C/C++ Libraries
  • Необходимо выполнить одно из условий: «Написать таск с использованием HWAddressSanitizer» ИЛИ «Создать сервис по анализу и оптимизации расхода памяти» ИЛИ «Провести оптимизация приложения с использованием garbage collection»
  • Выполненное условие должно привести к количественной оптимизациии в минимум 20%. Например, сервис оптимизирует количество запросов за одную сессию, уменьшив их на 20%. Или количество используемой оперативной памяти снижено на 20%.
  • Придерживается принципам программирования: KISS (Keep It Simple, Stupid)

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

  1. Сеньор
  • Не менее 5 лет работы в программировании (включая предыдущий опыт)
  • Сильная экспертиза в следующих технологиях  и инструментах: Graphics architecture (Canvas, Custom View)
  • Написан новый крупный компонет или приложение. Или сделан рефакторинг крупного приложения.
  • Наставничество: ученик был повышен с Джуна+ или Джуна++ до Мидла
  • Придерживается принципам программирования: DRY (Don’t Repeat Yourself)

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

  1. Сеньор+
  • Сильная экспертиза в следующих технологиях и инструментах: Multi-module architecture, HIDL
  • Создан модульный компонент приложения
  • Написана статья об этом компоненте на общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Занимается релизами в проекте над которым работают 2+ человек
  • Наставник 2+ человек, делает код ревью их кода
  • Придерживается принципам программирования: SOLID

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

  1. Сеньор++
  • Сильная экспертиза в следующих технологиях и инструментах: Hardware abstraction layer, AIDL
  • Создана полезная для проекта библиотека для Java/Kotlin приложений, опубликована на GitHub или аналогичном ресурсе
  • Написана статья об этой библиотеке на общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Наставничество: ученик был повышен с Мидла до Мидла++

Комментарии: еще больше взаимной пользы. И программисту и компании

Система грейдов разработчиков — front-end программист

front-end developer

Посмотреть наши предыдущие статьи по рейдам можно тут: грейды общими словами, хард-скиллы, грейды full-stack и back-end разработчиков

Тут мы рассмотрим грейды фронт-энд разработчика со стеком технологий:

  • Javascript, Sass, React, Redux, Chromium браузерные расширения

А теперь — подробнее и с различением по уровням

  1. Джуниор

Комментарии: принимаем на этот уровень новичков без значимого опыта. На этот уровень не подымаются по системе грейдов.

  1. Джуниор+
  • Сильная экспертиза в следующих технологиях и инструментах: html, css
  • отличное владение функционалом препроцессора sass, использование css Variables
  • Верстка: респонсивная, адаптивная, кроссбраузерная, pixel-perfect верстка
  • базовое знание css анимаций, понимание принципа «mobile first»
  • Средний уровень знания в следующих технологиях  и инструментах: JavaScript, bootstrap, jQuery

Комментарии: по сути, это основы. С чего начинают фронт-енд разработчики веб-сайтов. Хорошая и эффективная верстка

  1. Джуниор++
  • Разбирается в основном проекте
  • Сильная экспертиза в следующих технологиях и инструментах: JavaScript (знание особенностей работы в браузером окружении, работа с DOM) , Redux, Git
  • Понимание следующих терминов/концепций: Иммутабельность, Чистая функция, Рекурсия, Замыкание
  • Уверенная работа с инструментами разработчика в браузере (dev-tools)
  • Средний уровень знания в следующих технологиях  и инструментах: React, webpack, gulp (на уровне настройки существующей сборки)

Комментарии: чтобы подняться на этот уровень, начинаем углубляться в front-end. Конфигурация сборок проекта

  1. Мидл
  • Разбирается в основном проекте на уровне, что может пояснять бизнес процессы коллегам
  • Помощь менеджерам в формировании более полных требований с технической точки зрения.
  • Понимание устройства и работы браузерных расширений. 
  • Создание React Component-ов, рефакторинг существующих компонентов.
  • Продвинутая работа с состоянием приложений: написаны состояние и экшены для целой страницы или крупной фичи. 
  • Сильная экспертиза в следующих технологиях  и инструментах: React (классовые/функциональные компоненты, жизненный цикл компонентов, использование возможностей стандартных хуков библиотеки react), redux-thunk, webext-redux

Комментарии: Мидл разработчик подразумевает более высокие компетенции, чем Джуниор. Он может принимать «решения». Например, разрабатывать архитектуру небольших приложений или «фичи». Так же, он более самостоятелен в работе и, постепенно, становится экспертом в своей области. И владеет более сложными технологиями. Значительно углубляемся в основную технологию — React. Причем, с практической точки зрения.

  1. Мидл+
  • Приличная экспертиза в Frontend части одного из проектов из экосистемы (наряду с основным проектом), уверенное выполнение задач
  • Написать кастомный React Hook, который используется в проекте.
  • Написана статья в Confluence об используемых ранее технологиях (разбор типичных ошибок, практики хорошего кода)
  • Сильная экспертиза в следующих технологиях и инструментах: React Hooks (написание кастомных хуков, оптимизация рендера компонентов — ускорение загрузки, уменьшение вычислительных затрат), 
  • webpack, gulp (на уровне самостоятельной разработки сборки проекта и автоматизации процессов), babel
  • Придерживается принципам программирования: YAGNI (You Ain’t Gonna Need It)

Комментарии: Еще глубже погружаемся в фронт-энд. Документируем опыт. Работаем с пакетными менеджерами и сборками. Экспертиза мидлов не ограничивается кодированием, т.е. активно применяет общепринятые принципы программирования и чистого кода

  1. Мидл++
  • Разбираться в бизнес-процессах одного из эко-системных продуктов на уровне чтобы передать знания
  • Опыт в оптимизации загрузки страниц сервиса. Понимание SSR & CSR в контексте оптимизации загрузки. 
  • Оптимизирована скорость загрузки (уменьшена в 1.5-2 раза) одной из ключевых точек проекта (страница).
  • Продвинутая работа с css/js анимациями. 
  • Сильная экспертиза в следующих технологиях и инструментах: Vue.js, Service Worker, Web Worker 
  • Придерживается принципам программирования: KISS (Keep It Simple, Stupid)

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

  1. Сеньор
  • Не менее 5 лет работы в программировании (включая предыдущий опыт)
  • Написан новый крупный компонент (соизмеримый с проектом из микро-сервисной архитектуры) или проект, или сделан рефакторинг крупного компонента
  • Наставничество: ученик был повышен на 2 грейда
  • Сильная экспертиза в следующих технологиях и инструментах: SSR, CSR, SSG (знание плюсов, минусов, умение правильно выбрать подход для конкретного случая)
  • Понимание работы разных сетевых протоколов (HTTP, WebSocket)
  • Придерживается принципам программирования: DRY (Don’t Repeat Yourself)

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

  1. Сеньор+
  • Сильная экспертиза в следующих технологиях  и инструментах: Node.js, Создание npm пакетов
  • Создан полезный для проекта npm-пакет, который используется в нашем проекте.
  • Написана статья об этом компоненте или того же уровня в общедоступном айти ресурсе с большой аудиторией (habr или что-то подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Занимается релизами в проекте над которым работают 2+ человек
  • Наставник 2+ человек, делает код ревью их кода
  • Придерживается принципам программирования: SOLID

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

  1. Сеньор++
  • Наставничество: ученик был повышен с Мидла до Мидла++
  • Создано несколько полезных для проекта npm-пакетов, которые используются в нескольких проектах из микро-сервисной архитектуры
  • Сильная экспертиза следующих технологиях и инструментах: Node.js, koajs, mySQL, Jenkins

Комментарии: еще больше взаимной пользы. И программисту и компании

Система грейдов разработчиков — back-end программист

back-end developer

Ранее, мы исследовали грейды в общем, порассуждали про хард скиллы и рассмотрели пример грейдов фулл-стек программиста.

В этой статье, нас интересуют грейды бэк-енд разработчика

Пример основного стека:

  • язык: PHP, Laravel, Codeigniter (язык программирования и фреймворки на нем: новый, современный и старый, легаси)
  • Основная база данных: MySQL, дополнительные: Sphinx, Redis
  • Сервера Linux, Nginx, PHP-FPM, Docker

А теперь — подробнее и с различением по уровням:

  1. Джуниор

Комментарии: принимаем на этот уровень новичков без значимого опыта. На этот уровень не подымаются по системе грейдов.

  1. Джуниор+
  • Базовые знания composer и фрейворк Laravel (на примере оформления цикла жизни http запроса)
  • знание git, gitflow, 
  • навыки работы с консолью linux

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

  1. Джуниор++
  • Продвинутые знания Laravel: джобы, гейты, политики, посредники, composer пакеты, продвинутые знания в ОРМ в части родительских и полиморфных связей), 
  • знание Codeigniter на примере цикла жизни http запроса, включая основы безопастности передачи данных
  • понимание принципов юнит тестирования, архитектуры тонких контроллеров, принципов проектирования rest api

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

  1. Мидл
  • Разбирается в основном проекте на уровне, что может пояснять бизнес процессы коллегам
  • Принимать архитектурные решения. Связка 2 и больше таблиц для решения поставленных требовании
  • Нереляционная база данных, кеширование, Redis
  • юнит тестирование
  • понимание значения индексов MySQL, умение писать оптимальные сырые запросы (без ORM)

Комментарии: программист на уровне Мидл должен быть выше Джуна принципиально. Он может принимать «решения». Например, разрабатывать архитектуру небольших приложений или «фичи». Так же, он более самостоятелен в работе и, постепенно, становится экспертом в своей области. И владеет более сложными технологиями. Так как на этом грейде, речь была про архитектуру, добавляем хорошее знание баз данных.

  1. Мидл+
  • Приличная экспертиза в одном из проектов из экосистемы (наряду с основным проектом), уверенное выполнение задач
  • грамотное применение паттернов проектирования, 
  • работа с Docker, Docker-compose
  • хорошая база знаний чистого php (не в рамках фреймворков)
  • Придерживается принципов программирования: YAGNI (You Ain’t Gonna Need It)

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

  1. Мидл++
  • Разбираться в бизнес-процессах одного из эко-системных продуктов на уровне чтобы передать знания
  • описание и дополнение статей  лучших практик в рамках проектов компаний
  • знание Manticore (Sphinx)
  • Jenkins (сборка проектов)
  • Придерживается принципам программирования: KISS (Keep It Simple, Stupid)

Комментарии: еще больше полезных и сложные технологии бэкенда, которые увеличивают гибкость реализации задач. Так же подымаются вопросы сборок, релизов, CI/CD

  1. Сеньор
  • Не менее 5 лет работы в программировании (включая предыдущий опыт)
  • Сильная экспертиза в следующих технологиях  и инструментах:
  • Linux server console / Nginx config
  • Написан новый крупный компонент (соизмеримый с проектом из микро-сервисной архитектуры) или проект, или сделан рефакторинг крупного компонента
  • Наставничество: ученик был повышен с Джуна+ или Джуна++ до Мидла
  • Придерживается принципам программирования: DRY (Don’t Repeat Yourself)

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

  1. Сеньор+
  • Сильная экспертиза в следующих технологиях  и инструментах: создание Composer-пакетов
  • Написан необходимый Composer-пакет для одного из наших модулей (или блока, который необходимо выделить в модуль). Подключение в нашем проекте
  • Написана статья об этом компоненте или того же уровня в общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Занимается релизами в проекте над которым работают 2+ человек
  • Наставник 2+ человек, делает код ревью их кода
  • Придерживается принципам программирования: SOLID

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

  1. Сеньор++
  • Знание работы ядер фреймворков, задействованных в компании
  • Сильная экспертиза в CI/CD. Внедрение промывных процессов в разработке
  • Наставничество: ученик был повышен с Мидла до Мидла++
  • Выступление на айти конференции от лица компании по актуальной теме, на этом грейде или ранее

Комментарии: Уровень «бог программирования». Лидер мнений в компании и айти сфере. Еще больше взаимной пользы: и программисту, и компании