• Зачем нужен вебпак простым языком?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Вебпак - сборщик. Может взять много файлов и собрать в один. Ну или в несколько, как мы настроим. В js действительно есть модули, которые как бы уже нативно работают в современных браузерах, но есть ряд проблем:

    • Файлов с кодом может быть много. Сотни. Если использовать нативные импорты и загружать сотни файлов в браузер одновременно - накладные расходы будут заметными. Было бы хорошо уменьшить количество файлов. Плюс там могут быть не только скрипты, но и другие файлы, которых тоже может быть много.
    • Большое количество инструментов были написаны еще до появления нативных модулей в JS. Они все еще работают, выполняют свои задачи, но простым словом import их не импортировать. Там очень разные чудеса встречаются. Придумывать для каждого инструмента персональный костыль, как его импортировать, вроде как не хочется.
    • К предыдущему - иногда удобно в скрипты на JS импортировать что-то не на JS из отдельных файлов. В контексте моей работы - шейдеры на GLSL. Их нельзя просто так нативным import загрузить.
    • Часть зависимостей мы ставим с помощью npm. Это удобно. Но мы легко получаем папку node_modules на сотни мегабайт, при том, что в нашем проекте реально используется пара файлов оттуда. Загружать все это целиком на сервер - зачем? Ставить зависимости, а потом копировать нужные файлы откуда-то из глубин node_modules к себе в проект? Можно, но не то, чтобы удобно. Обновлять сложно будет, да и действий лишних что-то много.
    • Не всегда нам нужен полный функционал инструментов, которые мы используем. Часто в пример приводят lodash. Там много готовых функций на разные случаи жизни, но все используются редко. Было бы прям здорово в браузер загружать только то, что там на самом деле будет использоваться. А то, что не используется - не загружать.


    Как-то так. То есть нативные модули - это здорово. Но они далеки от совершенства. Не все проблемы решают. Поэтому сборщики все еще актуальны. И будут актуальны еще долгое время.

    Плюс webpack имеет возможность встроить в процесс сборки дополнительные процессы, которые долго делать руками. Код можно минифицировать. Уменьшит время загрузки страниц. Можно запустить w3c validator, stylelint, eslint, sonar и.т.д. - всякие проверялки, чтобы убедиться, что к пользователям улетит валидный код. Можно какие-то картинки сжать, сконвертировать в другие форматы. Можно typescript превратить в javascript, less, sass и.т.д. - в css. Много чего можно сделать. В целом сборщик сам по себе - это перпендикулярный ко всем этим процессам инструмент. И раньше люди использовали отдельный класс инструментов, чтобы запускать все это - таск раннеры. Grunt, gulp - вы скорее всего про них слышали. Можно писать npm-скрипты или даже по старинке делать makefile под сложную сборку. Но в webpack вроде как есть функционал плагинов, и можно эти процессы запускать и через него тоже. Вроде как он не для этого изначально придуман, но многие люди находят удобным иметь все в одном месте.
    Ответ написан
    Комментировать
  • Какую современную систему стейт-менеджмента лучше выбрать для React-проекта с "нуля"?

    Все сильно зависит от специфики вашего проекта, но по своему опыту могу сказать, что ФП хранилища в проекте с бизнес-логикой - зачастую хуже, чем ООП варианты.
    В своих проектах обычно использую стек из Mobx + tsyringe(DI). С недавних пор добавил в эту схему React-Query. Иногда бывает полезно использовать MST, если ваша бизнес логика требует каких-то сложных моделей данных с собственной логикой, а так же сложной связи между ними. В частности, MST дает немного больше возможностей для проектирования моделей данных, нежели обычные классы с Mobx.
    Поясню за ответственности:
    1. Mobx - отвечает именно за бизнес-логику frontend приложения. Не надо туда пихать геттеры данных с бэкенда, которые нужно просто визуализировать, для это есть React-Query. Поскольку Mobx базируется в первую очередь на классах, для работы с ним мы можем применять ООП и соответствующие паттерны, выстраивая интересно логику из хранилищ и сервисов прямо на frontend. Для лучшего понимания как это правильно варить, рекомендую глянуть на backend.
    2. React-Query - у них на сайте прекрасно описано, зачем они нужны, и этот инструмент в любом случае призван дополнять типичные хранилища состояний, будь то хоть Mobx, хоть Redux, хоть еще что-либо, рекомендую почитать. Отличный инструмент для работы с состоянием приложение в случае тех данных, которые просто нужно взять с бэка и отобразить.
    3. Tsyringe - для меня проверенный и неплохой инструмент для работы с DI на фронте. Это гораздо лучше, чем пробрасывать хранилища внутрь других хранилищ через конструкторы или через глобальные переменные. Аналогично с подключением в эту схему сервисов. Сразу скажу, что есть риск запутаться в конфигурациях сборщика, если используете CRA, ибо и Mobx, и Tsyringe используют в своей основе декораторы, а babel их переваривает с переменным успехом, но если разобраться, настроить можно)

    Опять таки, адепты Redux и ФП могут сказать, что я просто не умею готовить Redux. Действительно, не умею. Несколько раз пытался трогать Redux, но он не нравился ни до того, как узнал про Mobx, ни после. Верю, что разрабатывать на нем можно. Но и ухо можно чесать левой рукой через затылок. Чтобы Redux был производительным и эффективным, нужно понимать как устроены данные и как работает его реактивность. Он может неплохо подойти для менеджмента состояния каких-то простых моделей данных, например, форм. Но зачем нам центральное хранилище для форм?
    Mobx в этом плане сильно проще и при хорошей архитектуре проекта и самого приложения, джуниоры редко могут там что-то вытворить своеобразное, да и производительность там поломать куда сложнее. В общем, Mobx банально удобнее и проще, но при этом не только не ограничивает разработчиков в возможности создавать сложные и элегантные решения, а только помогает в этом.

    Вот такие мысли, надеюсь поможет)
    Ответ написан
    Комментировать
  • Как работает этот сайт?

    @DandyII
    На этом проекте использовали GSAP
    Тут можно посмотреть кейсы.
    Тут можно посмотреть документацию.
    Тут можно посмотреть видео туториалы.
    Тут ссылка на Гигхаб.
    Удачи в освоении.
    Ответ написан
    2 комментария
  • Как составить план проектирования проекта?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Идея/концепция к проектированию не относится, это отдельный предварительный этап. Для проектов побольше, и в общем случае, проектирование включает такие шаги, многие из которых, конечно, можно пропустить или сократить до минимума, если задача не сложная:
    1. Системный анализ и изучение предметной области
    2. Формирование требований к разрабатываемой системе
    3. Архитектуная задача, которая сводится к простой формуле: разделять, называть и связывать подсистемы
    3.1. Декомпозиция сложных задач
    3.2. Слои (построение слоев абстракций)
    3.3. Планирование топологии системы, программной и серверной инфраструктур
    3.4. Решение вопроса интеграции подсистем, программные интерфейсы, контракты и связывание
    3.5. Интеграция с унаследованными приложениями
    3.6. Минимизация изменений, для случаев, когда постоянно происходят изменения в предметной области
    4. Выбор инструментов решения
    4.1. Выбор парадигм программирования и языков
    4.2. Выбор технологий и платформ
    4.3. Выбор моделей данных, алгоритмов и библиотек
    4.4. Выбор топологий и протоколов
    4.5. Выбор паттернов программирования
    5. Предварительные исследования
    5.1. Проверка гипотез, эксперименты
    5.2. Изучение особенностей технологий
    5.3. Прототипирование
    6. Задачи обеспечения надежности
    6.1. Планирование безопасности и защиты от несанкционированного доступа
    6.2. Планирование отказоустойчивости
    6.3. Планирование мер по обслуживанию системы в режиме эксплуатации
    6.4. Задачи высоких нагрузок, балансировки и масштабирования, если таковые предполагаются
    7. Организация процесса разработки
    7.1. Жизненный цикл программной системы
    7.2. Конвенции кода, соглашения и стандарты
    7.3. Оценка необходимых временных и финансовых ресурсов для разработки системы
    7.4. Календарный план
    7.5. Анализ и минимизация рисков, выявление слабых мест технологий и коллектива
    7.6. Закрепление принципов управления процессом разработки и корректировки задания в процессе
    8. Сборка технического задания из результатов всех предыдущих пунктов
    Ответ написан
    2 комментария
  • Синхронный и асинхронный код, почему так называется?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    А сам код синхронным не называется, это его по ошибке или для упрощения так называют. Синхронным и асинхронным называется только API ввода-вывода, т.е. операции, прерывающие исполнение кода и требующие от системы обратиться к внешнему устройству, работающему не синхронно с центральным процессором. Операции ввода-выдвода, каковые есть: работа с дисками, портами, контроллерами, периферийными устройствами, как клава, мыша, тачскрин, разные датчики, вебкамера, сетевые карты, блютузы и другие радиомодули, принтеры, видеокарты и прочее. Все они получают задание от программы, и исполняют его отдельно, своими мощностями. Потом внешние устройства присылают программе сигнал о статусе исполнения и, возможно, полученные данные. Программа все это время может ждать (если у нее синхронное API, т.е. блокирующее) или что-то делать (если асинхронное, т.е. не блокирующее). Если программа ждет, не переходит к выполнению следующего действия, то это синхронный ввод-вывод, потому, что осуществляется процесс синхронизации программы с внешним устройством. Внешне устройство посылает прерывание, которое обрабатывает операционная система и через несколько слоев драйверов оно попадает в программу, обычно в виде колбека или события. Если программа ждала, то вызов API не завершался, она все время слушала, когда придет событие о завершении операции ввода вывода, а получив его API отдает ответ и управление переходит к следующей команде, что и называется, синхронизацией с периферийным устройством. Если программа не ждала, то вызов API сразу завершается и не блокирует поток выполнения программ, это называется асинхронным API, потому, что процесс синхронизации не происходит явно, а ответы возвращаются через события.
    Ответ написан
    3 комментария
  • Что можно написать на Node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js

    Часто применяется для:

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

    2. Серверы
    • Серверы веб-приложений и SPA
    • Серверы и API для мобильных приложений
    • Любые другие веб-API (RPC, JSON, REST)
    • Серверы сообщений и трансляция событий (чаты, игры, интерактив)
    • Заплаты на уже готовые системы, написанные на других языках, для реализации вебсокетов, SSE, лонг-пулинга и т.д., т.е. для затыкания дыр, для решения проблем в узких местах уже работающих систем.

    3. Клиенты
    • Оконные приложения (nw.js, node-webkit)
    • Кравлеры, парсеры и сбор данных

    4. Железо
    • Программирование микроконтроллеров (arduino, espruino, tessel)
    • Промышленная автоматизация

    Редко применяется (но подходит) для:
    • CMS, публикация контента (просто ниша уже занята и в этой задаче нода не дает чего-то принципиально нового или сверх соблазнительного).
    • Массовая электронная коммерция и торговля (не применяется для массовых движков магазинов, но используется отдельными крупными компаниями для торговых и платежных задач в качестве дополнительного средства к уже имеющемуся ПО, по сути закрывает узкие места).

    И плохо подходит:
    • Вычисления и моделирование, со скоростью математических операций нода и JS, как не типизированный язык, не дают хороших показателей
    • Научные приложения (по тем же причинам)
    Ответ написан
    10 комментариев
  • Какие есть advanced книги по Node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Нескромно предложу послушать мою лекцию и почитать статьи, хотябы потому, что они очень отличаются от всего, что Вы найдете про ноду у других авторов.
    1. Архитектура программных систем на Node.js https://youtu.be/Try7lmWikao
    2. Назад, к технологиям верхнего палеолита, от любимых всеми REST, STATEless, CRUD, CGI, FastСGI и MVC habrahabr.ru/post/204958
    3. Метапрограммирование (с примерами на JavaScript) habrahabr.ru/post/227753
    4. Impress Application Server простыми словами habrahabr.ru/post/247543
    Ответ написан
    Комментировать
  • Что, помимо основ JS,необходимо знать и понимать для изучения Node.JS?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Посмотрите план переподготовки с фронтенда на ноду: https://github.com/HowProgrammingWorks/Letters/blo...

    И экзаминационные вопросы по предмету "Архитектура ПО", который я читаю на примерах ноду:
    https://github.com/HowProgrammingWorks/Letters/tre...
    Ответ написан
    3 комментария
  • Стоит ли в 2019 учить mobx?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Да.
    mobx в большинстве случаев лучше чем redux, redux вовремя заехал на волне хайпа.

    Карта не закон, это мнение человека который её нарисовал.

    "необходимости" ни в чем нет - есть возможность и варианты, среди которых можно выбрать то что лучше подходит.
    mobx не имеет отношения к асинхронным запросам, как и redux.
    Но в силу его реактивности с ним можно использовать что угодно- от простого fetch до чего-то навороченного.
    Все что способно поменять значение у поля объекта отлично интегрируется с mobx
    Ответ написан
    Комментировать
  • Как в Mobx State Tree сделать self-reference?

    @OneFive
    React.js <3
    types.array(types.reference(types.late(() => ProductCategory)))
    Ответ написан
    Комментировать
  • Как правильно работать с mobx?

    @supfiger
    Ответ 1:

    1. Импортируешь Provider в файл index.js, чтобы не пробрасывать props через каждый дочерний компонент:
      import { Provider } from "mobx-react";
    2. В файле index.js оборачиваешь компонент рендеринга в Provider:
      ReactDOM.render(<Provider store={store}>
          <App />
        </Provider>, document.getElementById('root'));
    3. Импортируешь inject в нужный компонент, где нужно использовать тебе store:
      import { inject } from "mobx-react";
    4. Если классовый компонент, можешь повесить @inject("store") перед объявлением класса, где значение в скобках — название твоего пропса, который ты передаешь в Provider в index.js:
      import React, { Component } from 'react';
      import { inject } from "mobx-react";
      
      @inject("store")
      class Form extends Component {
        render() {
          return (
            <form className="form">
              <select>
                <option></option>
              </select>
            </form>
          );
        }
      }
      
      export default Form;
    5. Если компонент функциональный, то можно сделать так:
      import React from "react";
      import { inject } from "mobx-react";
      
      const App = () => {
        return <div className="App">Hello World!</div>;
      };
      
      export default inject("store")(App);


    Ответ 2:
    1. Теперь доступ к store есть из любого компонента, который находится в дереве Provider и на котором повешен @inject("store").
      Чтобы вызвать метод из стора, следуй примеру ниже. Допустим, вызовем метод по нажатию кнопки:
      <button onClick={() => this.props.store.getUsers()}></button>
      И, насколько я понимаю, нужно обернуть вызываемую функцию в стрелочную функцию, то есть: () =>, если нужный метод находится за пределами текущего файла. В твоем случае — да.

      Можешь еще сделать деструктуризацию, и обращаться сразу к нужному методу:
      const { getUsers } = this.props.store;
        // какой-то код
      
        return <button onClick={() => getUsers()}></button>;
      };



    Ответ написан
    Комментировать
  • Что такое Virtual DOM?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну вот есть DOM. Он медленный, и дергать его просто так не стоит. А есть виртуальный DOM, что-то типа прослойки между вашим кодом и реальным DOM. Вы можете дергать виртуальный DOM сколько вам душе угодно, а прослойка эта соберет всю инфу о том как вы чего делали, и попробует оптимизировать взаимодействие с реальным DOM что бы вышло как можно меньше действий.

    Пример - задача простая, у вас есть таблица и нужно постоянно обновлять ячейки новым значением. Значение приходят из апишки раз в пару десятков милисекунд (какая-то реалтайм статистика к примеру). Значения эти - просто массив данных.

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

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

    Если же прослойку эту сделать со своим интерфейсом, можно получить слой абстракции для работы с UI. Именно это предлагает тот же React. Слой абстракции над UI. Вы можете работать с реактом, но UI будет отрисовываться не через DOM а скажем... это может быть нативный интерфейс мобильной платформы (гуглить native-react). Ну и т.д.
    Ответ написан
    Комментировать
  • Какое состояние у современного фриланса на конец 2020?

    @Vasiliy_M
    Как всегда ответы на тостере пестрят бредятиной.

    которые зарабатывают на фрилансе
    разработчики зарабатывают на работе. на официальном трудоустройстве. Для этого они открывают hh и ищут работу.

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

    Что бы понять, что такое фриланс надо понять, чем он отличается от работы.
    Фриланс - это когда Петя пишет говнокод Васе за еду без обязательств.
    Фриланс - не является заработком, ибо любая компания работает с подрядчиком - юридическим лицом, будь то ИП или ООО.
    Если компании нужны постоянно услуги айти, то компания нанимает айти на постоянную основу.
    Сл-но, фриланс - это вечные попытки заработать копейку на низкопрофильной работе, аля такси.
    Только хуже в сто раз.
    На фрилансе нет профессионалов. Профи, что выше уровня джуна идут в офис/удаленку и спокойно работают за фиксированный прайс. на конкретной должности, без мозготраха. На фрилансе ты будешь за троих пахать - исполнять роль менеджера, аналитика и разработчика. Как минимум.

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

    Или для начала карьеры лучше найти стабильный офис, постараться выбиться на удалёнку и отыскать опенсорс?
    Смешал все в кучу. Причем тут опенсорс?

    Твоя цель - пойти в офис. Там поработать и понять, что все, что ты тут описал - не более, чем подростковые сопли, которые НИЧЕГО не имеют общего с реальностью.

    Нет и не было никогда никакого фриланса. Деньги зарабатываются только на "официальной" работе, работая на конкретное предприятие, а не удаленного хрен-знает-кого. Ни одно серьезное предприятие никогда не будет работать с фрилансером, разве только по незнанию или неопытности этого процесса. Кто риски несет? Заключается ли договора? Как предприятие должно делать отчисления и как указывать это в налоговых документах? И еще куча вопросов.
    Ответ написан
  • Какой выбрать node.js фреймворк под небольшой проект?

    peterpro
    @peterpro
    Eсли приложение больше чем один эндпоинт на одну табличку в БД, и жить ему больше чем квартал - надо брать нормальный корпоративный фреймворк, с нормальной ORM, в вашем стеке это Nest + TypeORM.

    PS: Я вообще не понимаю людей, которые в 2020 году что-то пишут на голом express/fastify (или называют эти либы - фреймворками). Такое ощущение, что у них после старта очередного проекта всплывает табличка "поздравляю, вы сэкономили 15 минут на развёртывании, вы - восхитительны!"
    Ответ написан
    Комментировать
  • Какой выбрать node.js фреймворк под небольшой проект?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Используйте Express.js это самый простой в освоении фремфорк, под который написано куча библиотек:
    1. авторизация - Passport.js
    2. работа с файлами - multer
    3. ORM - sequelize
    4. сокеты - socket.io
    5. настройка typescript - тут статья
    6. безопасность - helmet


    Плюс у фреймворка есть генератор, который поможет очень быстро поднять приложение без лишних проблем
    Ответ написан
    3 комментария
  • Я использую css grid повсюду. Я болен?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Проверка простая:
    1. Все стандарты соблюдены?
    2. Валидация проходит?
    3. Кросс-браузерно (включая мобильные клиенты) отображается везде корректно?
    4. Оптимизация производительности кода - максимальная?
    5. Работать с кодом/разметкой (при добавлении функционала) - удобно?
    Вы - НЕ больны 100% !

    PS: валидация вёрстки (и не только): тут
    Ответ написан
    3 комментария
  • Используете ли вы React-подход components/containers в проектах?

    TchernyavskD
    @TchernyavskD
    Formoshlep
    Если мы говорим про понятие контейнера в виде реакт - компонента:
    Почитайте Атомик дизайн под Реакт, либо Feature Sliced
    Если совсем проще, то можно достичь, что Реакт будет только для рендера вью, а вся логика уйдет из уровня реакта, либо ее большая часть. Это идеально можно реализовать, например, с effector. Последние полгода нигде нет контейнеров.

    Почему AtomicDesign спасет вашу душу.

    Некоторые считают, что этот подход слишком заморочен. Заставляет много думать о расположении элементов, а при усложнении - перемещать его в другие директории. Если спросить Родионова - найдется ещё несколько причин, почему не надо использовать Atomic Design. В этом посте я хочу рассказать об обратном: как использовать подход Брэда Фроста в React.

    В самом начале необходимо понять - нужен ли вашей команде этот архитектурный дизайн. Достаточно ответить на следующие вопросы:
    - сколько человек будут разрабатывать фронтенд?
    - сколько команд будут использовать ваш код?
    - сколько проектов используют один UI дизайн?
    Если у вас один небольшой проект, в котором всего два фронтендера - вам не нужен AtomicDesign. Если в вашем проекте около 10 фронтендеров и намечается второй проект - нужно задуматься о внедрении AtomicDesign. Тем более если в вашей компании проекты используют общую библиотеку компонентов или планируется внедрение.

    Многие задают мне один и тот же вопрос: "Куда положить компонент X?". Отвечаю сразу для всех компонентов: AtomicDesign - это подход, обеспечивающий вам архитектуру UI компонентов - не более. То есть контейнеры/коннекторы/роутеры вы можете класть в любую директорию, кроме ui. Я всегда рекомендую начать изучение с прочтения книги автора atomicdesign.bradfrost.com, но ниже немного опишу составные части.

    Сразу следует понять, что компоненты AtomicDesign — это бизнес-сущности, это то, чем могут оперировать дизайнеры и разработчики вместе. Не надо включать сюда различные таймеры появления блоков или логику переключения вкладок. Пусть даже они у вас описаны в виде компонентов или HOC'ов.

    Так почему это все спасает души? Чтобы понять ответ, обратимся к ещё одной теме фронтенда: типизированный javascript. Typescript/Flowtype придумали для наложения определенных ограничений на код, чтобы в дальнейшем его было проще поддерживать и читать. AtomicDesign накладывает ограничения на дизайнеров и фронтендеров, обязывая их общаться на одном языке бизнес-сущностей.

    Но необходимо добавить несколько слов о поддержке библиотеки компонентов AtomicKit. В какой-то момент возникает проблема усложнения компонентов, и многие задаются вопросом: "Как же быть, неужели теперь нужно перемещать компонент из атомов в молекулы?" — Нет.
    Перед стартом разработки необходимо тщательно проектировать набор компонентов и не менять его предназначения, пока он существует под таким названием. Если же вам необходимо усложнить компонент, добавить в него какие-то элементы - просто создайте ещё один компонент, который будет добавлять то, что вам нужно. Так вы не сломаете совместимость со всей библиотекой и реализуете необходимую вам фун
    Ответ написан
    1 комментарий
  • Как создать свою команду в Linux?

    NullByte
    @NullByte
    Bad gateway
    для этого создайте постоянный алиас:
    echo 'alias android="cd /opt/android-studio/bin/; ./studio.sh"' >> ~/.bashrc

    эта команда запишет в файл конфига bash ваш постоянный собственный алиас к необходимой команде (или нескольким через знак ";"). т.е. если будете вбивать "android" от имени своего юзера, то автоматом в данном случае будет осуществлен переход в нужную директорию и запускаться Андроид Студио. я думаю это самый простой способ :)
    Ответ написан
    Комментировать
  • Насколько вообще нужны менеджеры состояний?

    @abberati
    frontend-разработчик
    Стейт менеджер нужен для консистентного управления состоянием приложения, внезапно.
    Если вы не пользуетесь менеджером состояния в реакт-приложении, то либо используете контекст (вот хорошее объяснение, почему на проде так делать не нужно), либо пишете заведомо неподдерживаемое приложение. Ну или ваше приложение — это игра в крестики-нолики с двумя полями в стейте корневого компонента.

    Большие приложения нельзя писать без стейт-менеджера — это выльется в огромную неподдерживаемую кучу спагетти.
    Ответ написан
    2 комментария
  • Как стилизовать input range?

    dom1n1k
    @dom1n1k
    Кастомизация ползунка средствами чистого CSS ограничена, но кое-что все-таки возможно:
    https://css-tricks.com/styling-cross-browser-compa...
    Ответ написан
    Комментировать