• Только у меня проблема с установкой Visual Studio 2022?

    @mshsfrnv
    Так же в РТ столкнулся с этой проблемой, смог установить Installer через vpn. Саму IDE пока установить не смог из за слабого vpn соединения
    P.S. уже получается установить без VPN))
    Ответ написан
    Комментировать
  • Только у меня проблема с установкой Visual Studio 2022?

    Adler_lug
    @Adler_lug
    Пробуйте через ВПН. Уже не раз замечал за последние месяцы, что или вообще не качается обновление или какой-то конкретный пакет не скачивается посреди скачивания. При чем рандомно, может все обновиться, а в другой раз нет. Включение ВПН с IP в центральной Европе обычно решает проблему.
    Ответ написан
    Комментировать
  • Насколько большую роль в IT-карьере играют связи?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Очень большую роль играют нейронные связи в мозгу. Чем их больше, тем лучше соображается, а в кодинге без этого никак. Остальные связи особого значения не имеют.
    Ответ написан
    4 комментария
  • Как можно сократить этот код?

    0xD34F
    @0xD34F Куратор тега React
    const SORT = [
      [ 'без сортировки' ],
      [ 'цена, по возрастанию',         (a, b) => a.price - b.price ],
      [ 'цена, по убыванию',            (a, b) => b.price - a.price ],
      [ 'год создания, по возрастанию', (a, b) => a.formed_in - b.formed_in ],
      [ 'год создания, по убыванию',    (a, b) => b.formed_in - a.formed_in ],
    ];

    const [ sortType, setSortType ] = useState(0);
    
    const data = useMemo(() => {
      const sortFunc = SORT[sortType][1];
      return sortFunc ? [...bands].sort(sortFunc) : bands;
    }, [ bands, sortType ]);

    <select value={sortType} onChange={e => setSortType(e.target.value)}>
      {SORT.map((n, i) => <option value={i}>{n[0]}</option>)}
    </select>
    Ответ написан
    Комментировать
  • Как сделать слушатель на enter React?

    Safort
    @Safort
    Не совсем понял в чём именно проблема.
    Вы не понимаете как поставить обработчик на Enter? В целом это обычный слушатель на событие keypress, например с проверкой свойства key (event.key === "Enter").

    Или не ясно как в этом обработчике дальше логику строить?

    также будет имитироваться клик на кнопку которая отправляет сообщение

    Вам не нужно пытаться имитировать клик по кнопке, это усложнит код. Обработкой нажатия на enter и клика по кнопке отправки должен заниматься один обработчик. Т.е. у вас есть два слушателя (на enter и на клик по кнопке), но они должны вызывать одну функцию/метод который уже и отправляет сообщение.
    Ответ написан
    2 комментария
  • Типы сигнатур функций в TypeScript это почти как делегаты в C#?

    Делегат в шарпе - это объект с методом Invoke, который наследуется от базового Delegate.
    Да, это способ безопасно сделать ссылку на функцию/метод или работать с анонимными методами/функциями.
    И оно, очевидно, находится в плоскости значений, а не типов. (Вернее Func - из области типов, а экземпляр - из области значений)

    В TS что-то похожее, но уже с экземплярами function
    Ответ написан
    Комментировать
  • Актуальна ли книга Макдональда по WPF 4.5?

    Фундаментально WPF ничем не изменился. WPF в .NET 6 почти ничем не отличается от WPF в 4.8
    Какие-то проблемы от несовместимости могут быть, но их точечно можно порешать.
    Ну и ещё будут проблемы с тем, как идёт работа с проектом, тк проект в .NET Core отличается от проектов в .NET Framework, но это тоже легко можно загуглить.
    Ответ написан
    4 комментария
  • Как называется такой паттерн обработки исключений?

    includedlibrary
    @includedlibrary
    Возможно так - pokemon exception handling
    Ответ написан
    Комментировать
  • Как называется такой паттерн обработки исключений?

    Никакого названия у такого паттерна нет.

    В целом это то, как обычно идёт обработка исключений в C# и Java.
    Ответ написан
    4 комментария
  • Какой впн-софт посоветуете для линукс?

    CityCat4
    @CityCat4 Куратор тега VPN
    //COPY01 EXEC PGM=IEBGENER
    Нетрадиционными бывают только отношения.

    Вычисляется VPN вовсе не по "традиционности" и блокируется он вне зависимости от нее. Не думайте, что если Вы используете какой-то протокол - то его кроме Вас никто не знает, security through obscurity сама по себе работает скверно.

    Для линуха хорошо работает либо openvpn, либо чистый IPSec. IPSec настроить не так уж чтобы и просто - понимание требуется, но там все взаимодействие на уровне ядра, а если микротик еще и с аппаратным шифрованием - то вообще шикарно.
    Ответ написан
    Комментировать
  • Не является ли создание глобального контекста антипаттерном?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Да, такой подход считается антипаттерном.

    Истинный путь - вот он
    Ответ написан
    Комментировать
  • Не является ли создание глобального контекста антипаттерном?

    Maksclub
    @Maksclub
    maksfedorov.ru
    в Golang, например, контекст есть на уровне стандартной библиотеки (нужен для управления конкурентными сущностями (закрытие как правило)), а на уровне http роутеров — контекст используют как контейнер для значений почти все реализации, тк через жизненный цикл запроса протаскивать значения — типовая задача роутера

    в целом, вам нужно минимизировать такое явление. Если http-контекст остается только в http слое, то ваша задумка покушается на бизнес-логику. В бизнес-логике никакого контекста быть не может, если у вас есть конфиги или что-то такое — это часть контракта, просто его вы задаете в конфиге и инжектите ту часть контракта, что нужна
    Ответ написан
    1 комментарий
  • Почему хром не отображает SVG, созданный через JS?

    Rst0
    @Rst0
    const openedEye = 'M8 1.488c-5.302 0-8 5.21-8 6.512 0 1.302 2.791 6.512 8 6.512S16 9.302 16 8c0-1.302-2.698-6.512-8-6.512zm0 10.233A3.731 3.731 0 014.279 8 3.731 3.731 0 018 4.279 3.731 3.731 0 0111.721 8 3.731 3.731 0 018 11.721zM8 6c1.143 0 2 .953 2 2 0 1.143-.952 2-2 2-1.143 0-2-.952-2-2 0-1.142.857-2 2-2z';
    
    var el = document.querySelector('body'); <!-- не html, а body --->
    const xmlns = "http://www.w3.org/2000/svg";
    const toggleContainer = document.createElement('div');
    toggleContainer.classList.add('_toggle');
    el.append(toggleContainer);
    
    // svg
    const svgEl = document.createElementNS(xmlns, 'svg');
    
    svgEl.setAttribute('width', '16');
    svgEl.setAttribute('height', '16');
    svgEl.setAttribute('viewBox', '0 0 16 16');
    toggleContainer.append(svgEl);
    
    // path
    
    const pathEl = document.createElementNS(xmlns, "path"); <!-- path тоже NameSpace-->
    pathEl.setAttribute('fill-rule', 'evenodd');
    pathEl.setAttribute('d', openedEye);
    svgEl.append(pathEl);
    Ответ написан
    Комментировать
  • Какой подход использовать?

    @Akela_wolf
    Extreme Programmer
    Нотификации - в реальном мире это очень сложная тема, с большим количеством подводных граблей и регулярно меняющимися требованиями. Давайте посмотрим какие сущности у нас тут есть с точки зрения принципа единственной ответственности (SRP):

    1. Канал уведомления (NotificationChannel). Вот это то самое: Email, SMS, Telegram, Slack, VK и т.д. Его ответственностью является отсылка сообщения определенным способом (определенный текст в определенный адрес). Я бы написал его интерфейс так:
    interface NotificationChannel {
      void send(String to, String text);
    }


    2. Уведомлятель (Notifier). Его ответственностью является формирование уведомления. И тут тоже возможны варианты, поскольку разных пользователей нужно уведомлять о разных событиях и разным образом. Его ответственостью является сформировать текст сообщения и отправить через определенный канал. Интерфейс выглядит примерно так:
    interface Notifier {
      void notify(User user, Event event);
    }


    3. Дальше возможны варианты. В частности формирование текста сообщения можно выделить в отдельную ответственность, создав класс (или интерфейс) NotificationFormatter. Если предусматривается настройка каналов уведомления для каждого пользователя, то может потребоваться какой-нибудь NotificationChannelManager и т.д. Погружаться в эту кроличью нору можно очень глубоко. Все зависит от того насколько детально вы хотите разложить подсистему на объекты.

    Лично я бы начал как минимум с интерфейса Notifier, который позволяет "закрыть" подробности реализации подсистемы уведомлений от вызывающего кода. Эта граница, на мой взгляд, лишней не будет. А затем уже, по желанию или при необходимости, раскладывал его реализацию на отдельные, несвязанные классы.
    Ответ написан
    3 комментария
  • Какие есть альтернативы codepen для работы с CSS?

    ZerdoX-x
    @ZerdoX-x
    Frontend developer influenced by web, a11y, crypto
    Отвечая на вопрос в названии: часто встречаю JSFiddle, repl.it и codesandbox, можете попробовать их.

    Дебаггер для css этим сервисам и не нужен, для этого есть инструменты разработчика в браузере, которым вы пользуетесь. Если вам нужны какие-то анализаторы для кода (валидаторы, форматтеры, и тд) -- это совсем другая история.

    UPDATE: Глянул сейчас. JSFiddle подсвечивает синтаксические ошибки в стилях. Если конечно это то, что вы ищете.

    А вообще советую попробовать visual studio code или другие редакторы кода. Я подобные песочницы использую только когда нужно быстро поделиться кодом с кем-то
    Ответ написан
    Комментировать
  • Можно ли сделать этот SVG адаптивным?

    LenovoId
    @LenovoId Куратор тега SVG
    svg, css,js
    Не совсем понял я, что это значит "сделать svg адаптивным" ?
    SVG можно сделать резиновым то есть что бы оно занимало всё пространство по ширине
    В вашем svg надо было просто исправить viewBox: https://codepen.io/topicstarter/pen/ZEJLbem
    Ответ написан
    Комментировать
  • Как реализовать RSA авторизацию на сайте?

    @tusklozeleniy
    Front-end разработчик
    Если кто-нибудь получает доступ к LocalStorage извне - он получает доступ и к полу password, что равно - "уведет акк". То есть поле password тоже надо бы отключить :D Если нужно более безопасное место для хранения - пиши плагины к браузерам. Вроде единственный выход.
    А вообще проще купить сертификат SSL. Или бесплатный китайский взять)
    Ответ написан
    Комментировать
  • Возможно ли задать timeout для fetch?

    ruddy22
    @ruddy22
    Спасение утопающих — дело рук самих утопающих
    Самый простой вариант
    const get = timeout => url => 
      Promise.race([
        fetch(url),
        new Promise((resolve, reject) =>
          setTimeout(() => reject(new Error('timeout')), timeout)
        )
      ]);

    Вариант с AbortController
    Ответ написан
    4 комментария
  • Как выполнить POST-запрос через fetch() на localhost?

    @Konf
    Редактирую ответы на 2 + 2 по 4 раза
    Для отображения JSON нужно сперва пропустить запрос через body-parser middleware
    Подробнее тут и тут.

    Рабочий пример


    index.html
    <script>
      fetch('users/', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json;charset=utf-8'
        },
        body: JSON.stringify({ name: 'qwerty', id: 123 })
      })
    </script>


    app.js
    const express = require('express');
    const bodyParser = require('body-parser');
    const path = require('path');
    
    const jsonParser = bodyParser.json();
    const app = express();
    const port = 3000;
    
    app.get('/', (req, res) => {
      res.sendFile(path.join(__dirname + '/index.html'));
    });
    
    app.post('/users', jsonParser, (req, res) => {
      if (!req.body) return res.sendStatus(400);
    
      console.log(req.body);
    
      res.end();
    });
    
    app.listen(port, () => {
      console.log(`Example app listening at http://localhost:${port}`);
    });


    607399ab27689738726389.png
    Ответ написан
    2 комментария