Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
toxicmt

Kirill Mokevnin

CTO at hexlet.io
  • 148
    вклад
  • 2
    вопроса
  • 99
    ответов
  • 21%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Какой способ учения PHP самый лучший и эффективный?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Как вам выше заметили, обучение это не чтение и не просмотр. В первую очередь стоит отталкиваться от прикладных (не обязательно сложных) задач, под которые вы уже подстраиваетесь. Только в этом случае будет и мотивация и направленность в обучении. Идеи для подобных проектов можно взять из большого списка тестовых заданий: https://github.com/Hexlet/ru-test-assignments

    Я когда-то написал интерактивный учебник, в котором как раз все крутиться вокруг практики прямо в браузере (чтобы легко было начать). Попробуйте ощутить разницу по сравнению с простым чтением: ru.code-basics.com/languages/php
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Почему React разработчики не пишут циклы for, while?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Если очень узко, то функция `map` в отличие от цикла "отображает" набор, то есть обрабатывает каждый элемент и возвращает новую коллекцию. Именно это нужно делать когда мы работаем с JSX. А циклы это не функции, которые могут возвращать значения, это конструкция языка с помощью которой, например, можно собирать переменные. Из-за того что JSX это декларативная штука (мы описываем ее как есть, а не получаем в результате вычислений), циклы туда просто не встроить.

    Циклы это пример императивного программирования, в то время как функции высшего порядка (filter, map, reduce) – декларативного (функциональный подход). Второй подход в js более канонический (ближе к функциональным языкам) и позволяет писать гораздо более понятный и лаконичный код. При условии, конечно, что вы знакомы с этой парадигмой.

    Кстати в декларативном коде не используют переменные (если писать правильно), они там просто не нужны. Только константы.

    Вот посмотрите код из бекенд проекта в котором нет ни одного цикла: https://github.com/Hexlet/hexlet-exercise-kit/blob...
    Ответ написан более трёх лет назад
    5 комментариев
    5 комментариев
  • Как добавить элементы из хеша в массив?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    row = {lk: {id: 181, name: "Client_name"}, lpp: {id: 123, name: "Client_name2" }}
    row.map{ |k, v| v[:id] }


    Функции высшего порядка всему голова. https://ruby-doc.org/core-2.6.3/Enumerable.html
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Можно ли на PHP поднять свой HTTP сервер, и надо ли это?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Когда задают этот вопрос, в первую очередь имеют ввиду режим работы FastCGI. При таком подходе, одного Nginx недостаточно (тут нужно понимать про неблокирующую модель работы nginx). Для этого нужно чтобы само приложение стартовало как часть веб-сервера, написанного на самом PHP (именно загружалось в память один раз, а не на каждый запрос!). Такое реализовано в некоторых проектах, но на PHP не прижилось (пока). А вот во всех остальных языках общего назначения, всегда поднимается сервер самого языка.

    p.s. Кто-то может сказать "но ведь fastcgi есть, php уже работает с nginx". На самом деле это эмуляция, реального fastcgi там нет и оно невозможно просто так, php не так то легко загнать в эту модель (внутрь языка вшито слишком много всего, что заточено под одноразовый запуск).

    p.s.s Встроенный сервер PHP тоже обманка. Он подходит только для девелопмента и там нет загрузки кода в память. Он также читает код с диска на каждый запрос.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • На каких технологиях разрабатывать чат?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Так как это риалтайм, то у вас обязательно будут вебсокеты на клиенте, а на сервере событийный фреймворк или рантайм. Мой личный выбор либо socket.io + fastify (nodejs), либо phoenixframework.
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Как описать приготовление яичницы в терминах MVC?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Про бизнес-процессы сказали правильно. Я добавлю что существует два MVC, один для толстых клиентов (фронтенд), другой для клиент-серверной архитектуры, то что в рамках http. Они сильно отличаются и каждая из этих версий опирается на особенности среды, в рамках которой используется: в клиентах событийная модель, в бекенде клиент-серверная.

    Но и там и там M - это ваша предметная область, то что не зависит от того где и как используется. Процесс заказа яичницы это бизнес-процесс, будет абсолютно идентичным, с алгоритмической точки зрения, где бы вы его не реализовывали.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как вывести массив в определенном порядке?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Вот:

    <?php
    
    function convert($number)
    {
        $map = ['ч' => 0, 'л' => 9, 'в' => 1, 'к' => 8, 'е' => 5, 'о' => 2];
        $digits = str_split($number);
        $chars = [];
        foreach ($digits as $digit) {
            $chars[] = array_search($digit, $map);
        }
        return implode('', $chars);
    }
    
    echo convert('0592158');
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Какой bash-скрипт вы используете для быстрого развертывания стека LAMP на Ubuntu 18.04?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Для быстрого развертывания сейчас используются три инструмента:

    1. Terraform - управление облачной инфраструктурой. Через терраформ поднимаются сервера, настраивается DNS и многое другое. Кластер поднял, кластер опустил. Работает со всеми облачными провайдерами и ключевыми хостингами.
    1. ansible - управление конфигурацией локальной машины или удаленных серверов. Мастхев инструмент для каждого разработчика. Живой пример https://github.com/hexlet-basics/hexlet_basics/blo... Через него можно и деплоить https://docs.ansible.com/ansible/latest/modules/de... тоже одной кнопкой
    1. Docker - следующий шаг после ansible. Используется либо совместно с Ansible, либо с системами оркестрации, например, kubernetes.

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

    p.s. Посмотрите что еще кроме разворачивания одной кнопкой, хорошо бы сделать https://guides.hexlet.io/check-list-of-engineering...
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Преобразование в PHP массив?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Сначала парсите php.net/manual/fa/function.http-parse-headers.php затем преобразуете к нужной структуре и json_encode
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Существует ли библиотека для Nested sets?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Все эти решения делаются под конкретные ORM. Например для ноды это https://github.com/typeorm/typeorm/blob/master/doc... Можно еще посмотреть для секвалайзера.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • В чем смысл mock-функций в Jest?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    > Насколько я понимаю, смысл mock-функций в jest - это заглушки для функций, чтобы не тащить код всего модуля и не замедлять процесс тестирования.

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

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

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

    Темы для самостоятельного изучения:

    Побочные эффекты
    Детерминированность
    Чистые функции
    https://martinfowler.com/articles/mocksArentStubs.html
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Кто знает простые альтернативы JQuery?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    > чтобы было удобнее удобнее ванильного JS, но наименьшего веса.

    Современный ванильный дом вполне удобен. Местами он лучше чем jquery. Достаточно подключить https://polyfill.io/v2/docs/ и можно использовать все современные фишечки.
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Import в nodejs 10.11.0 - как заставить работать?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Лучше всего использовать https://babeljs.io/ и не париться, что для бекенда что для фронтенда. Во-первых не придется ничего менять (типа расширения для использования mjs), с другой стороны сейчас это стандарт де-факто в js мире, в-третьих во фронте без него вообще никак.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Литература для понимания программирования?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Как уже упоминали выше, самая фундаментальная книга СИКП. На нашем проекте есть подборка именно таких книг ru.hexlet.io/pages/recommended-books. Они затрагивают почти все необходимые аспекты и часть из них пересекается с тем что здесь рекомендуют и по указанным ссылкам.

    Если вы начинаете обучаться прямо совсем с нуля, то рекомендую нашу бесплатную систему http://code-basics.ru, питона там правда нет пока, но мы в процессе его добавления. Главная фишка в том что кроме теории есть и практика, которая выполняется тут же онлайн.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Что делать после todo?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Вот сборник тестовых заданий от разных компаний https://github.com/Hexlet/ru-test-assignments
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Правильный подход к тестированию в приложениях на php?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    coverage говорит о покрытии тестами конкретных строк. Если во время прогона тестов не были затронуты какие-то строки исходного кода, то coverage будет менее 100%. В среднем считается что хорошее покрытие это > 80%. 100% достичь слишком трудно и дорого (и не нужно).

    > И если я напишу еще 1000 такого типа тестов это лишь будет гарантировать, что всё хорошо на этих 1000 наборах данных, а вдруг ошибка как раз в другом, 1001-м наборе?

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

    Из интересного:

    * property-based testing https://en.wikipedia.org/wiki/QuickCheck
    * bdd behat.org/en/latest/guides.html
    * browser tests https://codeception.com/
    * как писать тесты (концептуальная история) https://ru.hexlet.io/blog/posts/how-to-test-code
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Как изучить JS?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Попробуйте программировать лифты ;) https://play.elevatorsaga.com/
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Курсы/книги/видео по администрированию веб серверов - какие порекомендуете?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Эта тема, в первую очередь, связана со знанием операционных систем. Читайте соответствующие книги

    Если говорить про конкретные инструменты и их использование, начните с автоматизации деплоя и развертывания инфраструктуры используя инструменты ansible и terraform. Далее переведите локальную разработку на docker-composer. Затем можно будет тащить докер в продакшен (используя в примитивном случае тот же ansible). Про докер можно почитать здесь https://guides.hexlet.io/docker/
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • В какой последовательности читать книги по JavaScript?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    Книга которая учит не только синтаксису, но и тому как писать кот грамотно https://github.com/MostlyAdequate/mostly-adequate-...
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Какую выбрать систему оркестрации для докера?

    toxicmt
    Kirill Mokevnin @toxicmt
    CTO at hexlet.io
    В такой ситуации вам не нужна оркестрация. Берете ansible (управления конфигурацией) и деплоите. В докере есть свой супервизор, который поднимет сервис если он упадет.

    p.s. здесь можно подсмотреть уже рабочее решение https://github.com/hexlet-basics/hexlet_basics/blo...
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • Следующие →
Самые активные сегодня
  • Drno
    • 6 ответов
    • 1 вопрос
  • vabka
    Василий Банников
    • 6 ответов
    • 0 вопросов
  • rPman
    • 6 ответов
    • 0 вопросов
  • simplylinux
    • 2 ответа
    • 2 вопроса
  • saboteur_kiev
    Saboteur
    • 3 ответа
    • 0 вопросов
  • SoreMix
    soremix
    • 3 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации