• За счет чего такая скорость?

    rockon404
    @rockon404
    Frontend Developer
    Это SPA на React с server side rendering. Приложение рендерится и получает данные на стороне сервера. При переключении поста, срабатывает роутер, рендерится нужный пост, а из интернета подтягиваются только картинки. Скорость node тут не причем. Такие SPA принято называть изоморфными.
    Ответ написан
    Комментировать
  • Redux и MobX - плюсы и минусы, когда лучше что использовать?

    vahe_2000
    @vahe_2000
    4 причины использовать MobX
    1. 1 Легко научиться и использовать
    2. Меньше кода писать
    3. Полная поддержка объектно-ориентированного программирования
    4. Работе с вложенными данными легко
    2 Причины не использовать MobX
    1. Слишком много свободы
    2. Трудно отлаживать


    Я использую MobX сейчас, потому что я могу писать код в 3 раза быстрее, чем с Redux.

    Редукс в значительной степени зависит от принципов функционального программирования:
    На мобкс влияет объектно-ориентированное программирование и принципы реактивного программирования:
    Ответ написан
    Комментировать
  • React Render Performance?

    vahe_2000
    @vahe_2000
    https://github.com/nitin42/react-perf-devtool/ новый для React Fiber
    Ответ написан
    Комментировать
  • React Render Performance?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Можно так:
    function withLog(WrappedComponent) {
      return class extends React.Component {
        displayName = WrappedComponent.displayName || WrappedComponent.name;
        
        componentDidMount() {
          console.log(`[${this.displayName}]: componentDidMount`);
        }
    
        ...
    
        render() {
          console.log(`[${this.displayName}]: render`);
          return <WrappedComponent {...this.props} />;
        }
      }
    }
    
    class MyComp extends React.Component {
      ...
    }
    
    const MyCompWithLog = withLog(MyComp);

    Демо: https://jsfiddle.net/qg0cvjjs/
    Ответ написан
    4 комментария
  • Как реализовать роутинг для WebSocketServer?

    @kttotto
    пофиг на чем писать
    Не совсем понятно зачем Вам нужна цепочка обязонностей, если для каждого типа сообщения выполняется строго один хендлер.
    Как только Вы находите первый подходящий, Вы выходите из цикла
    if (handler.CanHandle(socket, messageType, server))
    {
    	handler.Handle(socket, webSocketMessage, server);
    	return;
    }

    Цепочка обязанностей, это по сути конвеер, по которому пройдет сообщение. Этот патерн хорош, что легко можно добавить новое условие обработчика для каких то поступающих данных. Например, первый хендлер расшифровать, второй отформатировать, третий залогировать и т.д. Для этого в каждом Вашем хендлере должен быть список разрешенных для обработки типов сообщений (чтобы каждый хендлер в конвеере знал какие ему нужно типы сообщений обработать) или в самом сообщении должно быть указано какими хендлерами его обрабатывать. Первый вариант получше.
    Но у вас в каждом хендлере указано строго для одного типа. Поэтому можно было обойтись обычным свитчом.
    public BaseHandler HandlerFactory(messageType)
    	switch(messageType)
    	{
    		case ChatMessage.Type:
    			retun new ChatHandler();
    			break;
    		case AuthMessage.Type:
    			retun new AuthHandler();
    			break;
    		...
    	}
    }
    
    var handler = Successor.HandlerFactory(messageType);
    handler.Handle(socket, webSocketMessage, server);

    Ну или на крайняк без этого фора
    var handler = Handlers.FirstOdefault(x => x.CanHandle(socket, messageType, server));
    if(handle != null)
    	handler.Handle(socket, webSocketMessage, server);

    Или сделайте из списка хендлеров дикшинари
    Handlers[messageType].Handle(socket, webSocketMessage, server);

    Лично я бы использовал фабрику, только в данном случае без лишних созданий экземпляров, это выглядит проще и понятнее, добавить в нее еще один хендлер - это две строки кода.
    Если Вас смущает статический класс, сделайте синглтон. По факту фабрики обычно и делают синглтонами.
    Если везде смущает три параметра в конструкторе (socket, messageType, server), оберните их в фасад
    class HandlerParam
    {
    	public IWebSocketConnection socket { get; set; }
    	public string webSocketMessage { get; set; }
    	public IServer server { get; set; }
    }
    
    var handlerParam = new HandlerParam
    {
    	...
    }
    
    handler.Handle(handlerParam);
    Ответ написан
    Комментировать
  • Как запушить элемент в массив объекта?

    rockon404
    @rockon404
    Frontend Developer
    Можно так:
    this.items.forEach((item) => {
       this.teams.forEach((team) => {
          if (item.team_id === team.id) {
              if (team.items) {
                team.items.push(item);
              } else {
                team.items = [item];
              }
          }
      });
    });

    Либо предварительно:
    this.teams.forEach(team => {
      team.items = [];
    });

    Предварительно определить будет хорошо, если массив обязательно должен быть, даже пустой.
    Ответ написан
    Комментировать
  • Структура для юнит-тестов?

    freeek
    @freeek
    Я бы выбрал первый вариант, а вопрос с интеграционными тестами решил бы разделением на сьюты (можно их в разные папки положить.

    Т.е. будет так:
    MainProject/Program.cs

    и тесты на этот класс будут
    MainProject.Tests/Unit/ProgramTest.cs
    MainProject.Tests/Integration/ProgramTest.robot
    Ответ написан
    1 комментарий
  • Как заинтересовать человека(студента) в IT?

    sim3x
    @sim3x
    Не надо нам тут лишних людей
    Ответ написан
    Комментировать
  • Как заинтересовать человека(студента) в IT?

    edli007
    @edli007
    full stack, team lead
    Сам не захочет, не начнет. Программирование это ад для обычного человека.
    Ответ написан
    Комментировать
  • Что означает выражение "работает из коробки"?

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

    Так вот, это ситуация когда "НЕ работает из коробки".
    Ответ написан
    Комментировать
  • Зачем нужен интерфейс ICloneable, если есть конструктор копирования?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Интерфейс ICloneable - это маркерный интерфейс, говорящий другим элементам программы о том, что объекты класса, реализующего этот интерфейс, можно клонировать.

    Вызывающий код может не знать, есть ли в этом классе конструктор копирования, а в наличии метода Clone() для экземпляра IClonable можно не сомневаться.
    Ответ написан
    2 комментария
  • Что такое и зачем нужен новый тип данный Symbol в ES15?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Что такое

    Новый тип данных symbol - это попытка ввести уникальные идентификаторы. Все крутится вокруг функции Symbol. Это не конструктор в полном смысле слова, с new ее использовать не получится. Это скорее маленькая фабрика. Она просто возвращает новый символ каждый раз. Это важно. Каждый раз новый. В качестве аргумента можно передать строку, но она используется только для отладки.
    Symbol() === Symbol() // false

    Что такое глобальный символ? Какой еще реестр?

    Есть Symbol.for(), это еще один метод, который не просто возвращает символ, но и сохраняет информацию о том, для какого параметра он создавался. Внешне логика работы напоминает хеширование - для разных параметров символы получаются разные, а для одинаковых - одинаковые.
    Symbol.for('my-string') === Symbol.for('my-string') // true
    Symbol.for('my-string') === Symbol.for('another-string') // false


    Зачем это надо?

    Применение этого типа данных - предмет для споров. Большая часть кейсов из интернета - это попытки поиспользовать новую фишку только ради того, чтобы ее поиспользовать. Самые популярные и практически применимые варианты:
    • В качестве ключа для доступа к свойству объекта. Грубо говоря вместо obj[key] использовать obj[some-magic-unique-key]. Позволяет избежать коллизии этих самых ключей если вы расширяете существующий объект из сторонней библиотеки. На практике встречается не очень часто, особенно в небольших проектах, но по всей видимости это - причина появления символов в языке.
    • Некоторая иллюзия приватных свойств. Символы по-своему работают с циклами и многими методами, связанными со свойствами объекта, становясь невидимыми для них. В результате можно разделить "все свойства с обычными ключами" и "все свойства с ключами-символами". А еще можно запутать код до безобразия.
    • Также, пользуясь предыдущей мыслью, можно сделать что-то вроде метаданных для любого объекта, которые опять же не сломают существующий код, но могут быть использованы для хранения какой-то информации и мередачи ее между отдельными модулями. Штука довольно интересная.
    Ответ написан
    Комментировать
  • Как обработать исключение при разрыве соединения?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Походу я вас очень удивлю, попробуйте блок try - catch.
    https://docs.microsoft.com/ru-ru/dotnet/csharp/lan...
    Ответ написан
    6 комментариев
  • Как всё успевать и не быть роботом?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    > Минимум 8 часов, чтобы были деньги.

    Работать нужно не 8 часов, а головой.
    Ответ написан
    11 комментариев
  • Как правильно читать книги по программированию?

    saboteur_kiev
    @saboteur_kiev Куратор тега Книги
    software engineer
    сперва были вопросы "как стать программистом"
    затем вопросы "что читать"
    теперь уже "как читать"
    может скоро будет "как учить алфавит, а то за меня родители пишут на тостере".

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

    Добавлю еще момент:
    Почитайте статью megamozg.ru/post/10126
    Там очень понятно указано, что профессиональный навык и боль программиста - гиперконцентрация, которая необходима, чтобы освоить понятия и вещи для профессиональной работы. 40 минут это как-то несерьезно.
    Ответ написан
    3 комментария
  • Программа на C#, которая выполняет("возможно интерпретирует") другую программу. Возможно ли?

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

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

    А вы сами не знаете? Читать файл, разбирать на слова, в зависимости от слов выполнять команды.

    А если хочется возможность прикрутить плагины к своей программе, то смотрите в сторону динамической загрузки сборок. Опишите интерфейсами как должны выглядеть плагины и какие сервисы вы предоставляете плагинам. Удачи.
    Ответ написан
    3 комментария
  • Программа на C#, которая выполняет("возможно интерпретирует") другую программу. Возможно ли?

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

    lua - это уже готовое решение для того, чтобы вставить в свою программу движок, которые будет выполнять lua скрипты. Зависит от того, что вы хотите - чтобы ваша программа умела выполнять lua, или умела выполнять ваш собственный набор инструкций.
    Ответ написан
    4 комментария
  • В чём суть паттерна мост(Bridge)?

    Xapu3ma-NN
    @Xapu3ma-NN
    Да, отделяем абстракцию от реализации.
    Ответ написан
    Комментировать