• Какой простенький менеджер паролей для оффлайна выбрать?

    @TheBigBear
    СтарОдмины мы
    Много лет активно пользую KeePass 2
    Доволен
    Сохраняет историю изменения паролей, комментарии
    Особенно функцией автовведения
    Много полезных функций и способов защиты
    Про остальные менеджеры не скажу - не пробовал
    Ответ написан
    Комментировать
  • Какой простенький менеджер паролей для оффлайна выбрать?

    Francyz
    @Francyz
    Photographer & SysAdmin
    keepass
    Ответ написан
    Комментировать
  • Есть ли учебник по PHP в котором после каждой главы задаются задания?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сейчас выходит книга Джона Дакетта, PHP & Mysql.
    Там после многих примеров даются задания. Они, правда, дурацкие, типа "Упражнение. В шаге 5 в переменную $message добавьте название компании."
    Но они позволяют хотя бы не просто смотреть на готовые примеры, а как-то почувствовать их, заставляют зайти в папку с кодом, который прилагается к книге, и поиграться с ним, посмотреть, что будет, если изменить ту или иную команду.
    Но это не такие глобальные задания, типа "написать что-то своё, на основе полученной в главе информации".

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    иногда на сайте могут возникать ошибки http(404, 401, 500 и т.д.),
    Это абсолютно разные ошибки, и обрабатываться должны по разному.
    404 должна обрабатываться самим движком сайта, отдавать именно запрошенный урл без перенаправления, и отдавать 404 статус, в том числе для того чтобы поисковые роботы вывели страницу из индекса.
    401 скорее всего вообще ошибка настройки серверной части и прав на папки/файлы, редко когда эта ошибка вываливается просто так...
    500 вообще не является конкретной ошибкой, это скорее общее оповещение что на конкретной странице что-то пошло не так или сайт в целом не работает. Упрощенно это любой фатал ерор, скрытый настройками вывода ошибок, + некоторые ошибки системного характера.

    пробывал в htacces:
    ErrorDocument 500 /error?error=500
    Логично что если сайт не работает, то и любое обращение к нему будет вызывать ту же 500 ошибку. Единственный способ что-то отобразить - статика, просто хтмл страничка оформленная в стиле сайта с нужным статичным контентом...
    Ответ написан
    3 комментария
  • Что лучше rtx 3070 или rtx 4060 для ноутбуков?

    @rPman
    Очень неоднозначный выбор, если смотреть на 4к и ультра настройки (когда видеокарта больше влияет) то 3070 лучше (она быстрее в техническом плане, больше шина памяти, больше потоковых процессоров) но если смотреть различные тесты то там все по разному и как я понимаю очень сильно зависит уже от процессора ноутбука. 4060 чуть меньше TDP но там считанные ватты, реальное потребление давно уже не соответствует паспортному.

    И да, питания не хватает и как только куцая система охлаждения перегревается, все уйдет в тротл.

    Это как нужно себя ненавидеть, чтобы играть на ноутбуке (адски дорогой конфиг с кучей неудобств)! Правильный игровой 'ноутбук' - это стационарный компьютер.
    Ответ написан
    Комментировать
  • Как в Swiper слайдере настроить внешний вид пагинации?

    @Anonimmus
    затем когда появится контект у вас появится новая головная боль как убрать 0.
    решение у меня такое

    pagination: {
            el: '.swiper-pagination',
            type: 'fraction',
            formatFractionCurrent: addZero,
            formatFractionTotal: addZero
          },
    
    //где нить ниже 
    
        function addZero(num){
          return (num > 9) ? num : '0' + num;
        }
    Ответ написан
    Комментировать
  • Как сделать функцию debounce?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    timeout = setTimeout( () => fn.apply(this, arguments), debounceTime );
    Ответ написан
    3 комментария
  • Open Server работает очень медленно, как ускорить его работу?

    skapunker
    @skapunker
    Умный
    Столкнулся с такой же проблемой. Решил так: в настройках движка сайта в конфиге для подключения к БД вместо localhost написал 127.0.0.1 и все стало норм.
    Ответ написан
    9 комментариев
  • Где можно найти подробную информацию про шаблонизацию/шаблонизаторы php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В гугле. Всё есть в гугле.
    Перед тем как интересоваться шаблонизаторами, надо научиться пользоваться интернетом.
    Искать информацию, анализировать информацию, усваивать информацию.
    Учиться формулировать вопросы. Как для поисковика, так и на форум.

    В таком общем виде вопросы задают в гугль.
    А на форум пишут уже конкретные вопросы, если что-то непонятно.
    Ответ написан
    Комментировать
  • Как регуляркой извлечь из html-кода элемент с определённым классом?

    @rPman
    так и не понял почему нельзя использовать адекватные инструменты?
    simple_html_dom например?
    Ответ написан
    3 комментария
  • Как исправить ошибку PHP Notice: Undefined variable?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Undefined variable в переводе с английского означает, что такой переменной нет.
    Это значит что ошибка в логике, попытка вывести переменную, которой не было присвоено никакое значение.
    Соответственно, эту логическую ошибку надо исправить - либо присвоить какое-то значение, либо не выводить.
    Ответ написан
    Комментировать
  • Как распарсить такой JSON?

    Immortal_pony
    @Immortal_pony Куратор тега JavaScript
    но я никак не могу с ним работать, я пытался пропускать его через функции нормализации, но ни в какую

    А не надо бездумно совать свою строку какому-то левому коду и ожидать что он всё за тебя сделает.
    Надо проанализировать что ты получаешь и только потом начинать что-то делать.
    В данном случае видно две очевидные проблемы:
    1. В строке отсутствуют все закрывающие символы, которые должны быть в конце строки - кавычки, фигурные скобки, квадратные скобки - всё потеряли. В первую очередь надо найти того кто это написал, ткнуть его носом и громко и чётко произнести: "кто накодил? Кто накодил, а?", после чего посадить его исправлять серверную часть.
    2. Внутренний объект зачем-то закодирован в json второй раз. Тут уже можно не кричать, а дать лёгкого добродушного пинка backend-разработчику, но таким образом чтоб после этого его тело двинулось в сторону клавиатуры, используя которую, он исправит и этот косяк.

    const weirdString  = fetch() // здесь получаешь свою странную и  корявую строку
    const jsonEncoded = weirdString + '\\"}]}]"}' // для примера я вручную посчитал всё закрывающее барахло, но, возможно что для этого надо будет написать отдельную функцию. Ну, тут сам справишься, я думаю
    const decodedOnce = JSON.parse(jsonEncoded) // раскодируем первый раз
    const decodedTwice = JSON.parse(decodedOnce['21']); // раскодируем второй раз внутренний объект.
    Ответ написан
    Комментировать
  • Почему при ajax подгрузке посты получаются в виде Html?

    @zkrvndm
    Софт для автоматизации
    Считается, что так меньше нагрузка на браузер, мол не надо генерировать html-дерево на основе полученных данных, а просто берешь и сразу вставляешь на страницу готовый html-код который прислал сервер. Меньше нагрузка - быстрее отображаться данные, меньше лагов при прокрутке и так далее.
    Ответ написан
    Комментировать
  • Как лучше реализовать корзину для магазина?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    На все эти вопросы легко ответить самостоятельно, если просто немного подумать.
    Никакое знание РНР тут не требуется - только здравый смысл и минимальное понимание принципа работы веб-сайта.

    Обычно для анрегов корзина делается в сессии, а для регов - в базе.
    При логине и наличии корзины в сессии, содержимое мержится с корзиной в базе. То есть такого вопроса "как сделать идентификацию" в принципе не возникает - все делается само собой. Когда юзер авторизовался, у нас есть и его ид, и сессиия. Что тут может быть не ясно?
    Ответ написан
    Комментировать
  • Создания уникального чата: sql, node, socket.io?

    @alexalexes
    Есть роль А И B. Только роль A может начать чат с ролью B

    Роли у пользователей заданы на уровне учетной записи и не меняются от чата к чату или определяются в момент создания чата?
    То есть при создании чата будут определена роль администратора (создателя) которая будет более привилегирована, чем тот, кому он пишет?
    Чат может содержать только 2х лиц

    Вы очень оптимистичны, выставляя такое ограничение. В следующей итерации разработки вам захочется сделать функционал группового чата. Тогда наличие колонок user_id, second_user_id вам встанет боком.
    В таблицу chat лучше добавить такие колонки:
    id - идент. чата
    date_create - дата создания
    id_user_creator - кто создал чат
    title - название чата (в этой итерации разработки можно не вставлять)
    Для участников чата лучше предусмотреть таблицу chat_participant:
    id - идент. участника
    id_chat - идент. чата из таблицы chat
    id_role - роль в чате (если она определяется в момент создания, для группового чата)
    id_user - пользователь чата
    id_last_read_message - идент. последнего прочитанного сообщения (самый простой вариант, как отмечать что прочитано, и потом определять, есть ли новые сообщения)
    date_include - дата вступления в чат (для группового чата)
    date_exclude - дата исключения из чата (для группового чата)
    Для сообщений чата - таблица chat_message:
    id - id сообщения
    id_partic/id_user - автор сообщения (можно реализовать как по ключу от таблицы участника, так и по таблице пользователей)
    date_create - дата создания сообщения
    date_update - дата обновления сообщения (для продвинутого функционала редактирования сообщений)
    date_delete - дата удаления сообщения (для продвинутого функционала редактирования сообщений)
    text_message - текст сообщения
    Если совсем хотите быть продвинуты в функционале редактирования сообщений, то вы захотите хранить историю изменения сообщений в таблице chat_message_history:
    id - идент. истории
    id_next - указатель на следующую запись истории
    id_message - идент. сообщения
    date_change - дата изменения сообщения
    id_user/id_partic - кто изменил
    text_message - состояние текста сообщения
    Ответ написан
    Комментировать
  • Как сделать так, чтобы два объекта хаотично двигались по экрану?

    Griboks
    @Griboks Куратор тега Unity
    Если хаотично, то каждый фрейм устанавливаете случайные координаты.
    Если плавно, то каждый фрейм прибавляете или отнимаете случайное число от вектора рывка (это r'''), а затем интегрируете 3 раза. Чем большего порядка производную вы меняете, тем плавнее траектория.
    Также может двигать объекты через случайно параметризированные кривые Безье.
    И еще много много способов.
    Ответ написан
    1 комментарий
  • Почему PATH_SEPARATOR выдает ':' вместо '/'?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    PATH_SEPARATOR - это разделитель путей в переменной окружения PATH
    Вам нужен DIRECTORY_SEPARATOR

    https://www.php.net/manual/ru/dir.constants.php
    https://stackoverflow.com/questions/9769052/why-is...
    Ответ написан
    Комментировать
  • Почему PATH_SEPARATOR выдает ':' вместо '/'?

    BoShurik
    @BoShurik
    Symfony developer
    https://www.php.net/manual/ru/dir.constants.php

    Путаете PATH_SEPARATOR (тот который в переменной окружения PATH) и DIRECTORY_SEPARATOR
    Ответ написан
    Комментировать