Задать вопрос
  • Как безопасно передать информацию используя POST запрос в JS?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Загугли криптографические библиотеки под JS, они есть. Шифруешь тело запроса в браузере, расшифровываешь на сервере. Может пригодится, если используйте http, а вот для https это излишне.
    Ответ написан
    Комментировать
  • Возможно ли получить параметр из Chrome Extension ссылки после установки расширения?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для парсинга ссылок существует специальный конструктор:
    new URL('https://chrome.google.com/webstore/detail/volume-master/jghecgabfgfdldnmbfkhmffcabddioke?click_id=12345').searchParams.get('click_id');
    Ответ написан
    4 комментария
  • Как изменить VOLUMES в Docker Compose на host-mounted?

    Движок wiki.js хранит все данные в Postgresql и в данном случае лучше не париться по поводу volume, а просто сделать дамп с помощью pg_dump и восстановить его на новом сервере до запуска контейнера с движком. То есть сделать docker compose up -d db, восстановить дамп, а потом запустить все - docker compose up -d
    Ответ написан
    1 комментарий
  • На каком языке писать UI для Android?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    На каком языке писать UI

    Вопрос некорректен.
    Пишут либо на xml, либо на java/kotlin/compose. Это неотделимо от андроида
    Ответ написан
    1 комментарий
  • Какие плюсы с перехода на react c vue?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Перейдя на реакт вы будете страдать. Реакт - это тупо даунгрейд. Всё то же самое, но хуже и местами отсутствует. Есть ли в нём хоть какие-то преимущества перед vue? Не знаю таких.
    Что за проблемы у вас с библиотеками?
    Ответ написан
    2 комментария
  • Как запускать typed.js когда у элемента появляется класс?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Если сами добавляете класс, то, очевидно, дёргать метод start в момент добавления. Если не сами, тогда следите за элементом с помощью MutationObserver:

    new MutationObserver((mutations, observer) => {
      if (mutations[0].target.classList.contains('интересующий-вас-класс')) {
        observer.disconnect();
        typed.start();
      }
    }).observe(элементНаличиеКлассаУКоторогоНадоОтследить, { attributes: true });
    Ответ написан
    Комментировать
  • Как реализовать фильтрацию с помощью checkbox?

    0xD34F
    @0xD34F Куратор тега React
    как вернуть к первоначальному состоянию когда unchecked не понимаю

    Очевидно, устанавливать в качестве результата фильтрации не его текущее значение, а полные данные.

    Ну и ещё неплохо бы сделать так, чтобы фильтрация по введённой строке не отменяла фильтрацию по чекбоксу - унесите их в один общий эффект, чтобы они работали совместно:

    function Posts() {
      const [ posts, setPosts ] = useState([]);
      const [ filteredPosts, setFilteredPosts ] = useState([]);
      const [ search, setSearch ] = useState('');
      const [ checkbox, setCheckbox ] = useState(false);
    
      useEffect(() => {
        axios
          .get('https://jsonplaceholder.typicode.com/posts')
          .then(r => setPosts(r.data));
      }, []);
    
      useEffect(() => {
        let filtered = posts;
    
        if (search) {
          const s = search.toLowerCase();
          filtered = filtered.filter(n => n.title.toLowerCase().includes(s));
        }
    
        if (checkbox) {
          filtered = filtered.filter(n => n.userId === 10);
        }
    
        setFilteredPosts(filtered);
      }, [ posts, search, checkbox ]);
    
      return (
        <>
          <input
            type="text"
            placeholder="Search for article..."
            value={search}
            onChange={e => setSearch(e.target.value)}
          />
          <label>
            User Id 10
            <input
              type="checkbox"
              checked={checkbox}
              onChange={e => setCheckbox(e.target.checked)}
            />
          </label>
    
          <ul>
            {filteredPosts.map(n => (
              <li key={n.id}>
                <div>{n.userId}</div>
                <div>{n.title}</div>
                <div>{n.body}</div>
              </li>
            ))}
          </ul>
        </>
      );
    }
    Ответ написан
    1 комментарий
  • Права 777 как скачать файлы?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    http не поддерживает скачивание папок.
    Поэтому простой ответ - никак. Более сложный

    Вариант 1
    Пройтись по всем папкам, получить список всех файлов и скачивать каждый отдельно.

    Вариант 2
    На стороне сервера создать архив со всеми файлами и папками и скачать его

    Вариант 3
    Настроить не web сервер, а что-то другое, ftp/ssh/nfs/samba и воспользоваться клиентом, который умеет работать со структурой директорий (filezilla, rsync, FAR с ftp/ssh плагинами, проводник)
    Ответ написан
    Комментировать
  • Почтовый сервер и клиент для домена, с чего начать?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Тысячи их. Но все почему-то на гмыле и mail.ru сидят. Ну яндекс и рамблером ишшо.
    Ответ написан
    Комментировать
  • Почтовый сервер и клиент для домена, с чего начать?

    edinorog
    @edinorog
    Троллей не кормить!
    Готовых решений тонны. Только одна беда с ними. Коммерческие дорогие. А вся эта фряфриопенсоусщассваяем ... обычно не тянет на уровень "выставим в интернет .. пусть сами регятся и меня не ломанут". Ломанут =). Не ломанут так нагнут. Не нагнут так постучатся. Не постучатся ... так люди поумнели и не будут на левом сервисе своё личное оставлять. Чуть позже ресурсы иссякнут. А потом беда придет в виде "винт погорел". Короче беда с этими почтовиками =)
    Ответ написан
    Комментировать
  • Почтовый сервер и клиент для домена, с чего начать?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    с чего начать?

    На мой взгляд, начать стоит с детального продумывания вопроса о том, как вы будете отправлять почту.
    При использовании даже "чистого" единственного IP вашего сервера очень высока вероятность того, что сервисы наподобие Gmail будут по умолчанию отправлять письма от вас в спам, либо вообще молча дропать. И это при том, что Gmail ещё не самый "привередливый" в этом плане.

    По-хорошему, вам потребуется сеть IP-адресов (релеев), которые вы сначала будете постепенно "прогревать", накапливая репутацию, а затем очень тщательно за той репутацией следить.

    Если сервис, который вы хотите создать, будет бесплатным, я с трудом представляю как это можно будет сделать. Общедоступность же дополнительно усложнит задачу.
    Ответ написан
    6 комментариев
  • Как использовать useLocation хук в storybook?

    Alexandroppolus
    @Alexandroppolus
    кодир
    useLocation работает, если компонент с ним прямо или косвенно находится внутри Router.
    Как известно, Router получает в пропсы экземпляр history, кладет его в контекст, а useLocation достает из контекста.
    Возможно, в сторибуке ты забыл обернуть всё в Router
    Ответ написан
    1 комментарий
  • Хук useParams при тестировании React компонента выдает undefined, как исправить?

    @markak
    Frontend developer
    Вы передаете атрибут path в компонент Router, но нужно передавать этот атрибут в компонент Route

    https://v5.reactrouter.com/web/api/Route - по доке есть атрибут path
    https://v5.reactrouter.com/web/api/Router - по доке нет атрибута path

    также используйте базовый пример из доки:
    https://v5.reactrouter.com/web/example/basic
    Ответ написан
    1 комментарий
  • Как правильно определять тип объекта в Typescript (React)?

    search
    @search
    мама говорит что я особенный
    Тайпскрипт правильно ругается потому что таргет события не обязательно должен быть дом элементом. События могут так же порождаться, например XHR запросами.

    Я бы на вашем месте сделал так называемую type guard функцию, в которой убеждался бы что таргет действительно элемент дом. Все элементы дом наследуются от объекта HTMLElement. Это можно использовать для проверки:

    const isHtmlElement = (v: any): v is HTMLElement => v instanceof HTMLElement;


    далее мы можем использовать эту функцию для проверки нашего таргета:

    const eventHandler = (e: Event) => {
      if (!isHtmlElement(e.target)) {
        return;
      }
      // Вот здесь мы можем смело работать с таргетом как с ДОМ Элементом
      e.target.classList.toggle('active');
    }


    УПД

    Еще информация к размышлению.

    Финальный код, сгенерированный тайпскриптом, не содержит информации о типах. В рантайме нельзя узнать тип интерфейса, выполнив, например `peremennaya instanceof VashInterfeis`. Но всегда можно создать type guard функию, которая будет определять что объект именно нужного типа по каким-то косвенным признакам (например по наличию определённых полей в объекте). Так как код guard функции невозможно провертить статическим анализватором, тайпскрипт не может гарантировать того что ваша guard фунция верна и не пропускает всё подряд. Поэтому, хорошим тоном является писать такой код, который не нуждается в подобных проверках. Это возможно. Код при таком подходе становится стройнее и легче для осмысления.
    Ответ написан
    1 комментарий
  • Какое максимальное количество гигабайт можно загрузить в Telegram?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Разглашать такие ограничения - это было бы стратегической ошибкой со стороны Дурова по ряду причин:
    1. Пока объёмы не создают проблем и укладываются в существующие мощности, создать иллюзию безлимитного изобилия дискового пространства - это хороший PR ход подогревающий интерес к мессенджеру.
    2. Как только лимиты будут четко очерчены, сразу появятся желающие их "пощупать". Таких желающих будет много, и они начнут ныть, когда лимиты придётся урезать из-за этого. Всякие любители нецелевого использования халявы узнав про конкретные лимиты станут плодить и заливать под завязку аккаунты для хранения своего барахла. Очевидно. что от таких паразитов Телеграму только вред, а ныть они будут на весь инет жалуясь, что либо лимиты постоянно урезают и "чего нам теперь ждать дальше", либо что этих паразитов банят за не целевое использование сервиса, а они "просто хотели другу архивы с лабами переслать". Ага.
    3. В лицензии наверняка (я правда не читал, ибо лень) написано, что телегу можно юзать как можно и нельзя как нельзя. Но банить за такое нужно только самых упоротых и по лотерее, чтобы нельзя было вычислить строгий алгоритм и делать всё, чтобы брать максимум халявы, но не попадаться на бан.

    Я понимаю, что вопрос вы задаёте с другой стороны окопа. Я понимаю вашу мотивацию.
    Однако если бы я разрабатывал похожую систему, то постарался бы:
    • максимально расплывчато описать ограничения;
    • максимально обобщенно описать правила (чтобы можно было любого злоупотреблятеля забанить, и нельзя было докопаться, мол, почему вот его не банят, а меня забанили);
    • максимально неочевидными и непостоянными сделать правила блокировок самых неудобных и геморройных пользователей.
    Ответ написан
    1 комментарий
  • Актуальна ли автоматическая конвертация JavaScript в TypeScript?

    @caballero
    Программист
    актуальна но лично я таких тулсов не знаю
    Ответ написан
    Комментировать
  • Как защитить изображения от PrintScreen?

    Решение со сменой кадров - не рационально в двум обстоятельствам:
    - захотят скопировать - скопируют из кеша и соединят, как уже сказали.
    - высокая нагрузка на клиенте, т.е. ваша страница будет лагать на средненьком железе.

    Sratimon правильную наводку дал на счет превью, так же правильную наводку давали на сильное сжатие JPEG.
    Но наводка на перехват PrentScreen, не верна. Можно поиграться:
    $(document).on('keydown','body',function(e) {
    		if (e.which == 44) {
    			console.log('Тырк!');
    		} else {
    			console.log('Не тырк!');
    		}
    	});

    JS напрочь не реагирует на 44 код. А даже если бы и реагировал, легко можно было бы изменить фокус окна браузера.
    Ответ написан
    5 комментариев
  • Как организовать просмотр тысяч фотографий, например, как АйФото или Гугл-фото?

    AngryYumy
    @AngryYumy
    Заплати фрилансеру чеканой монетой
    Согласен задача просто анриал - уровень гугла/яндекса. А если серьезно, просто выводим первые 30-50 фоток дальше просто по скролу догружаем еще через ajax + lazу load и все
    Ответ написан
    4 комментария
  • Мобильный или планшет, как идентифицировать?

    bingumd
    @bingumd
    ...
    Ответ написан
    Комментировать