Freelance Январь 2025 – Декабрь 2025

Покинув свою последнюю постоянную работу, я решил полностью сосредоточиться на работе во freelance, так как по опыту прошлых лет видел здесь перспективы и свободу выбора проектов и их разнообразие. Основным направлением своей проектной деятельности я выбрал WordPress, так как мне он очень нравился, он был затребован и у меня был приличный опыт работы с ним.
Я работал с двумя биржами freelance: fl.ru (там у меня было несколько удачных проектов несколько лет назад) и kwork.ru (тут я был новичком). За этот год я выполнил несколько проектов о наиболее интересных их них я рассказываю ниже.

Этот сайт, проект на WordPress

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

  • Поддержка русского и английского языка на уровне сайта и административной панели, корректное переключение локализаций
  • Переключение между двумя разными схемами WordPress на лету
  • Создание shortcodes
  • Доработка платной схемы Wellow
  • Подробно об этих разработках я рассказываю в разделах блока “Решения” на боковой панели сайта.

    Изначально этот сайт был задуман как небольшое портфолио, которое я иногда использовал при поиске работы. Чтобы не заниматься плагиатом, я создал с нуля простую схему, на нее и сейчас можно посмотреть, она оставлена как пример для демонстрации переключения WordPress на лету на разные темы. Затем у меня появились небольшие проекты на зарубежном фрилансе и возникла потребность в англоязычной копии портфолио. Я решил не делать второй сайт и не стал использовать для этой цели какие-то плагины, сделал по-простому, объединив русскую и английскую версию в одном месте, заключив их в шорткоды. В самом начале я переключал языки с помощью cookies, но затем подумал, что английскую версию не будут индексировать поисковые системы и начал искать решение для передачи языка через адресную строку. Были опробованы несколько вариантов, сначала я хотел сделать через редиректы веб-сервера, подключая query vars, но изучив форумы пришел к выводу, что это лучше делать средствами WordPress, в итоге я остановился на использовании endpoints.

    Телеграм чат-бот

    Цель проекта: изучить базовые возможности чат-ботов телеграм.
    Реализованные функции:

    • Создание меню команд
    • Создание inline-клавиатуры
    • Передача сообщений в бот
    • Получение сообщений, команд и callbacks
    • Создание опросников и получение графических результатов
    • Фиксация всей деятельности в базе данных
    • Удаление сообщенний из бота
    • Запуск веб-приложения телеграм
    • Коммуникация с веб-приложением

    Бот доступен по ссылке
    Использовались библиотеки: irazasyed (базовая для работы с telegram), jpgraph (для создания графика), web application сделано в виде обычной HTML-страницы, в нее добавлены библиотеки JQuery и JQuery UI.
    Бот обслуживается программой на PHP, которая работает у меня на хостинге в окне (screen) операционной системы. Запрос сообщений на сервере происходит раз в 5 секунд. Я решил сделать пока только один этот вариант, чтобы не терять сообщения при сбоях программы или связи. Работает следующая общая схема:

    Проект MUSICALION (Германия)

    Проект представляет собой коммерческий музыкальный сервис, члены которого могут публиковать свои произведения, а также произведения других авторов в собственном исполнении и/или оранжировке. Я работал над проектом с июля 2019 года по июнь 2021 года в качестве программиста. К моему большому сожалению за это время я выполнил все поставленные передо мной задачи и работать стало не с чем, эпидемия ковида также добавила негатива в этот бизнес, что привело к его сильному сокращению и отмене изветсных музыкальных конкурсов для которых проект являлся организатором.
    В связи с тем, что я связан с моими бывшими работодателями соглашением NDA (Confidentiality Agreement), я не могу подробно остановиться на задачах, которые выполнялись мной в рамках этого проекта и технологиях на которых это было выполнено. Вы можете посмотреть на часть сайта проекта, которая есть в открытом доступе, это довольно большой его кусок, по роду своей деятельности я так или иначе принимал участие в модификации практически всех страниц а часть модулей и функций создал с нуля, в проекте их не было.
    Вкратце можно перечислить следующие направления моей деятельности:

    Проекты выполненные мной в составе колл-центра “Фронт Лайн” (Москва)

    Я работал в качестве программиста в колл-центре “Фронт Лайн” (Москва, Зеленоград) с августа 2016 года по июль 2019 года. Работы там было очень много, но можно выделить несколько основных направлений.

  • Оперативная текущая работа, которая заключалась в коррекции существующих телекоммуникационных проектов в соответствии с требованиями заказчиков. Проекты представляли собой обычные сайты написанные на HTML и Javascript на стороне броузера и на PHP на стороне сервера, база данных mySQL. При создании нового проекта обычно за основу брался какой-то существующий похожий проект и модифицировался в соответствии с техническим заданием.
  • Текущая работа по созданию отчетов для проектов. Первоначально все отчеты были написаны на PHP и их было несколько сотен. В дальнейшем мне разрешили использовать Microsoft SSRS и я начал новые отчеты по своим проектам делать на этой технологии, всего мне удалось написать таких отчетов около 50, а также обучить своих коллег пользоваться SSRS.
  • Разработка систем интеграции с внешними проектами. На начальном этапе таких интеграций было немного, я могу припомнить только обновление базы знаний ДИТ, но в дальнейшем этот сегмент сильно вырос. Я занимался реализацией интеграций со следующими компаниями и организациями: “DPD”, “Нау такси”, “Командир такси”, “СПСР” (вошла в состав DPD), “ДИТ” и пр.
  • С моим приходом в компанию возобновились работы по созданию систем контроля качества для нескольких проектов, которые до этого момента создать не получалось. Мне удалось реализовать три таких системы: для проекта ДИТ 7Х7, проекта ДИТ ЕДЦ и проекта для обслуживания чата на сайте МПГУ. Эти проекты использовали одну базу данных, но на клиентской части сильно отличались технологиями реализации: на начальном этапе для интерфейса контроля я использовал обычный HTML и Javascript, в следующих двух проектах я работал уже с ExtJS. Кроме этого проекты кардинально отличались алгоритмами отбора звонков и диалогов, а также содержимым чек-листов для анализа разговоров, также у проектов были разные отчеты, которые я делал на SSRS.
  • При обслуживании проектов компании было очень много ручной рутинной работы, руководство поощряло мою проектную деятельность и потому я постоянно развивал наш внутренний производственный проект. В рамках этого проекта я реализовал множество задач: управление адресами получателей отчетов, универсальный редактор справочников НСИ, управление интерфейсами проектов, управление универсальыми базами знаний и т.д.
  • Проект OMS

    [+]
    Более подробно о моем участии в проекте для российских работодателей …

    OMS (Offer Management System) система для создания каталогов товаров в формате для печати (Adobe InDesign).
    Разработан в виде двух клиентских приложений для броузера и издательского продукта Adobe InDesign, и двух обслуживающих их серверных частей: базы данных mySQL (взаимодействие через PHP) и сервера Adobe InDesign (взаимодействие через SOAP и Adobe JavaScript).

    Включает в себя:

  • Графический редактор, позволяющий создавать презентации, состоящие из изображений, текстовых блоков, внутренних переменных и других презентаций.
  • Базу данных (mySQL) для хранения предложений (offers) и товаров, входящих в них, которая обновляется из базы данных CRM-системы компании (Oracle). Также в базе данных хранятся сведения о каталогах и презентациях.
  • Систему построения шаблонов каталогов и сами каталоги, которые могут быть реплицированы на сервер Adobe InDesign с помощью технологии SOAP (PHP – Adobe JavaScript).
  • Набор скриптов для клиентских программ Adobe InDesign (Adobe JavaScript), которые позволяют подключаться к базе данных товаров и производить обновление цен и описаний с помощью внутренних переменных.
  • Проект InfoHelp

    [+]
    Более подробно о моем участии в проекте для российских работодателей …

    Проект для CALL-центров, работающих с CRM компании.

    Краткое описание:

  • Основная область применения: информационная поддержка рекламных акций компании (акции, каталоги, товары)
  • Наличие административной и клиентской систем
  • Обслуживание рекламных предложений
  • Обслуживание каталогов товаров
  • Поддержка скриптов для общения с клиентами
  • Поддержка новостей
  • Поддержка форумов.

    Цель проекта: обеспечение CALL-центров, работающих с CRM-системой компании, подробными сведениями о рекламных акциях, товарных предложениях, товарах и прочей информацией, касающейся процесса продаж. Кроме этого проект имеет систему обратной связи (форумы) специалистов CALL-центров с департаментом маркетинга. Дополнительной возможностью, предоставляемой проектом, является публикация разного рода инструкций, касающихся CRM-системы и процесса общения операторов CALL-центров с клиентами (скрипты-сценарии).

  • Многоязыковая поддержка WordPress


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

    Недостатки:

    • Всегда должны быть русская и английская версия текста во всех местах.
    • В административной панели заголовки выглядят нечитабельно.
    • Нельзя использовать такую разметку для категорий и тегов, если планируется их прямой вывод через функции wp_list_[…] и им подобные.
    • При использовании текста в дополнительном коде PHP всегда необходимо вызывать функцию-транслятор.
    • Поисковики будут всегда получать текст для языка по умолчанию.

    Данный подход является очень упрощенным и годится для несложных сайтов.

    Использование в постах и страницах:

    • [ru]Русский текст[/ru]
    • [en]English text[/en]

    Использование в коде PHP:

    <?php 
    //-- echo --
    stringTranslate('[en]English text[/en][ru]Русский текст[/ru]'); 
    //-- value --
    $text = stringTranslate('[en]English text[/en][ru]Русский текст[/ru]', false); 
    ?>
    

    Реализация:

    common.js (файл javascript с вашим кодом):

    function changeLanguage(ob) {
      if (ob == "ru") {
        if (!confirm("Please, confirm changing language interface to English.")) {
          return;
        }
        document.cookie = "lang=en";
      }
      else {
        if (!confirm("Подтвердите, пожалуйста, смену языка интерфейса на Русский.")) {
          return;
        }
        document.cookie = "lang=ru";
      }
      location.reload();
    }
    


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

    index.php:

    //.... HTML markup before
    <img src="<?php bloginfo('template_url'); ?>/images/en.png" 
      <?php echo (($lang == "en")?("title='English language is setting now.'"):
      ("style='opacity: 0.2; cursor: pointer;' onclick='changeLanguage(\"ru\");' 
      title='Set English as interface language.'")); ?>/>
    <img src="<?php bloginfo('template_url'); ?>/images/ru.png" 
      <?php echo (($lang == "ru")?("title='Русский язык интерфейса сейчас установлен.'"):
      ("style='opacity: 0.2; cursor: pointer;' onclick='changeLanguage(\"en\");' 
      title='Установить русский язык интерфейса.'")); ?>/>
    // HTML markup after ...
    


    functions.php:

    add_filter( 'the_content', 'content_translate' );
    
    function content_translate ($content) {
      return stringTranslate($content, false);
    }
    
    function stringTranslate($str, $isEcho = true) {
      $rez = $str;
      if ($_COOKIE['lang']) {
        $lang = $_COOKIE['lang'];
      }
      else {
        $lang = 'en';
      }
      $rStr = 'ru';
      if ($lang == 'ru') {
        $rStr = 'en';
      }
      $am = 0;
      while (true) {
        $pos1 = strpos($rez,"[".$rStr."]");
        if ($pos1 === false) {
          break;
        }
        $pos2 = strpos($rez,"[/".$rStr."]");
        if ($pos2 === false) {
          $pos2 = strpos($rez,"[".$lang."]",$pos1);
          if (!$pos2) {
            $pos2 = strlen($rez);
          }
        }
        else {
          $pos2 += strlen("{/".$rStr."}");
        }
        $rez = str_replace(substr($rez, $pos1, $pos2 - $pos1), "", $rez);
        //-- decline endless cycle --
        $am++;
        if ($am > 100) {
          return "Cycle error!";
        }
      }
      if ($isEcho) {
        echo str_replace('[/'.$lang.']', "", str_replace('['.$lang.']', "", $rez));  
      }
      else {
        return str_replace('[/'.$lang.']', "", str_replace('['.$lang.']', "", $rez));      
      }
    }
    


    Вот собственно и все, желаю всем удачи.

    Система управления производственным процессом лаборатории “EuroTest” (русскоязычный)

    Заказчик: ООО “Евро Тест”
    Тип проекта: Внутренний корпоративный проект
    Моя позиция в проекте:
  • Системный аналитик
  • Программист
  • Базы данных: mySQL
    Языки: PHP, HTML, JavaScript
    Технологии: jQuery, PHPExcel library
    Среды разработки: Netbeans 8, mySQL Workbench

    Назначение проекта: обеспечение процесса лабораторного анализа биофизического материала.

    Лаборатория “Евро Тест” выполняет исследования биофизического материала для нескольких крупных медицинских компаний. Проект обеспечивает регистрацию образцов, подготовку плана исследований, назначение исполнителей для исследований, хранение результатов и отсылку их заказчикам. Отсылка результатов производится через email (формат MS Excel) и вебсервисы (формат XML). Сайт проекта является закрытым, но заказчики имеют доступ к своим результатам через интернет.

    Плаврук (русскоязычный)

    Заказчик: Частный предприниматель
    Тип проекта: Коммерческий интернет-проект
    Моя позиция в проекте: Программист
    Языки: PHP, HTML, JavaScript
    Технологии: WordPress
    Интеграция с платежными системами: Яндекс-деньги
    Среда разработки: Netbeans 8

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