• Как реализовать эффект печатающегося текста?

    0xD34F
    @0xD34F Куратор тега React
    Состояние компонента должно содержать три значения - индекс печатаемой строки, количество отображаемых символов, направление печати (печатаем или стираем, т.е., в какую сторону надо изменять количество отображаемых символов, увеличивать или уменьшать). Дальше понятно что - setInterval или рекурсивный setTimeout, изменяем количество отображаемых символов, если дошли до конца строки - меняем направление, дошли до начала - меняем направление и индекс строки. Вот как-то так:

    const defaults = {
      index: 0,
      length: 0,
      step: 1,
    };
    
    function Typewriter({ strings, delay }) {
      const [ state, setState ] = useState(null);
    
      useEffect(() => {
        setState(() => ({...defaults}));
      }, [ strings ]);
    
      useEffect(() => {
        const timeoutId = setTimeout(setState, delay, ({...state}) => {
          state.length += state.step;
          if (state.length === strings[state.index].length) {
            state.step = -1;
          } else if (state.length === 0) {
            state.step = 1;
            state.index = (state.index + 1) % strings.length;
          }
          return state;
        });
    
        return () => clearTimeout(timeoutId);
      });
    
      return <div>{strings?.[state?.index]?.slice(0, state?.length)}</div>;
    }
    Ответ написан
    8 комментариев
  • Почему код не может записать в БД определённое строковое значение?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ошибка, скорее всего, возникает из-за символов в $description, не попадающих в кодировку поля `description`. Такой эффект, например, дают новые эмодзи, требующие utf8mb4.
    Также стоит включить режим выброса исключений для всех ошибок Mysqli, перейти на драйвер mysqlnd, если ещё не сделали этого, и использовать подготовленные выражения.
    Рекомендую прочитать статью: https://habr.com/ru/articles/662523/
    Ответ написан
    Комментировать
  • Как заполнить форму налогоплательщика?

    ZERGE
    @ZERGE
    спрашивай у местних бухгалтеров
    Ответ написан
    1 комментарий
  • Как составить сложную выборку из двух таблиц?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT address, 
           office, 
           t1.fio, 
           t2.counter, 
           CASE t2.counter
               WHEN 'counter1' THEN t1.counter1
               WHEN 'counter2' THEN t1.counter2
               WHEN 'counter3' THEN t1.counter3
               END value,
           t2.num,
           t1.date       
    FROM table1 t1
    JOIN table2 t2 USING (address, office)
    Ответ написан
    2 комментария
  • Персональный гугл, если ли?

    Daemon23RUS
    @Daemon23RUS
    Краулер, который ходит по интернетам и ищет сам, то о чём я его попросил

    Боюсь, что ответ Вашего частного поисковика придется долго ждать. Обратимся к цифрам: сейчас порядка 2 млрд. сайтов ( обратите внимание на то что это сайты, а не страницы, коих на многих сайтах десятки, сотни, тысячи а на части на порядки больше) предположим, что ваш краулер пожирает сайты по 10 шт в секунду (со всеми страницами), так вот ждать ответа придется лет 7.
    И это мы опустили трафик, который сожрет краулер. А там все за гранью не то что домашнего сервера, а не все страны потребляют такой объем.
    P.S. Тут вопрос не в алгоритмах или коде, вопрос в объеме "перевариваемой" информации
    Ответ написан
    3 комментария
  • Как сделать скрипт для вывода массива json форматом?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Делать самостоятельную генерацию json - категорически не правильное решение.
    Вы по любому где-нибудь пропустите экранирование и получите на выходе невалидную структуру.
    Тем более что для абсолютно любого парсера json все эти переносы строк и пробелы не значимы, поэтому я в принципе не понимаю зачем вы хотите это сделать.

    PS
    Если уж очень хочется - можно наколхозить что-нибудь типа
    echo '[' . PHP_EOL;
    $count = count($data);
    $i = 0;
    foreach ($data as $item) {
       $i++;
       echo '    ' . json_encode($item, JSON_UNESCAPED_UNICODE) . ($i < $count ? ',' : '') . PHP_EOL;
    }
    echo ']';

    Но повторюсь, это плохое решение как с точки зрения производительности, так и вообще.
    Ответ написан
    Комментировать
  • Если ли PHP-библиотека для конвертации HTML c CSS Grid в PDF?

    dyuriev
    @dyuriev
    A posteriori
    shell_exec + chromium с флагами headless disable-gpu и print-to-pdf отрисует вам что угодно, что может отобразить chrome.
    у решения есть изъян - на большинстве хостингов даже не пытайтесь запустить, себе дороже, только виртуальные/физические сервера подходят идеально.

    https://github.com/chrome-php/chrome - примерно так
    Ответ написан
    3 комментария
  • Как сделать так, чтобы prettier не переносил каждый метод на новую строчку в JS?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Prettier использует определенную логику для определения ситуаций, когда такие вещи должны быть разделены. Ее нельзя выключить. Этот инструмент в целом имеет очень мало настроек, он изначально очень строгий и нацелен на то, чтобы навязать свой стиль форматирования везде. В этом его философия. Не нужно спорить, как лучше форматировать. Робот все решит за нас.

    Можно игнорировать какие-то конкретные штуки с помощью комментария // prettier-ignore. Но нужно ли?
    Ответ написан
    1 комментарий
  • Возможна ли sql инъекция?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Возможна.

    Почему не стоит использовать mysql_escape_string
    https://www.php.net/mysql_escape_string
    Warning
    This function was deprecated in PHP 4.3.0


    https://www.gosecure.it/blog/art/483/sec/mysql_esc...

    Не хотите SQL-инъекций используйте подготовленные выражения (prepared statements)
    https://www.php.net/manual/en/mysqli.quickstart.pr...

    а был бы с нами FanatPHP он бы ещё дал ссылку почитать https://phpfaq.ru/mysql/slashes
    Ответ написан
    1 комментарий
  • Почему выходит ошибка Each child in a list should have a unique "key" prop?

    Alexandroppolus
    @Alexandroppolus
    кодир
    key надо выставлять не для Crumb, а для фрагмента:
    <React.Fragment key={...}>
        {idx >= 1 && <div> / </div>}
        <Crumb path={crumb.path} title={crumb.title} style={styles.crumbs} />
    </React.Fragment>


    ну и Math.random() для key - худшее, что ты мог придумать. Наверняка у crumb есть какой-нибудь id, вот его и надо использовать. Или, например, path, title, - что-то из них ведь уникальное, не повторяется в массиве crumbs?
    на крайний случай можно idx
    Ответ написан
    8 комментариев
  • На сколько сложно создать офлайн генератор иконок?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Самостоятельно создать - крайне сложно.
    За деньги нанять - легко, но придется выложиться крупно.

    Гораздо выгоднее будет просто купить подписку на freepik
    Ответ написан
    Комментировать
  • Где можно найти бумажную версию книги "C.Petzold - Programming Windows 5th edition"?

    @alexalexes
    С e-bay через посредников заказывать не вариант, т.к. за доставку берут слишком много.

    Добро пожаловать в СССР. Именно так и доставать. Книга не для массового рынка.
    Либо использовать PDF: просто читать с электронной книжки, либо напечатать на принтере, либо иметь знакомого в типографии, который вам самиздатом ее напечатает с минимальными издержками.
    Ответ написан
    4 комментария
  • Как redux определяет, какие компоненты надо обновить?

    Alexandroppolus
    @Alexandroppolus
    кодир
    useSelector внутри себя использует хук useSyncExternalStore (точнее, хук, аналогичный ему)

    вкратце суть работы: из редуксового контекста (того самого, который использован внутри Provider) достается редуксовый же стор. Этот стор постоянный, но в нем есть состояние - объект, ссылка на который меняется при каждом изменении, ибо иммутабельность. Подписываемся на изменение этой ссылки (т.е. по факту на изменение любой части состояния), у стора есть метод subscribe для этого. При срабатывании эвента забираем наши данные селектором, и если результат селектора отличается от предыдущего раза, значит изменились именно наши данные и надо пнуть компонент, чтобы обновился, это уже useSyncExternalStore знает как сделать.
    Ответ написан
    Комментировать
  • Как сказать «ничего не делаем» используя условные операторы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    в случае совпадения, указать "ничего не делаем"

    Реверсируйте условие и ничего не делайте в случае НЕсовпадения, т.е. в ELSE. Которое в этом случае можно вообще не писать.
    Ответ написан
    Комментировать
  • Можно ли в mysql хранить 200 колонок, для 10+млн записей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Смотрим здесь. Получаем для обычного INT 4 байта на одно число, для BIGINT 8 байт.
    200 * 4 * 10'000'000 = 8'000'000'000 или 8Gb.
    200 * 8 * 10'000'000 = 16'000'000'000 или 16Gb.
    По нынешним меркам сущие пустяки.
    Хранить, конечно же, нужно в нормальной форме, иначе суммирование придётся делать в приложении.
    Ответ написан
    3 комментария
  • Как гуглу удаётся работать так быстро? Какая у него память?

    @rPman
    Во первых, количество результатов не гарантирует что это действительно так... это приблизительная оценка, эжто видно особенно когда начинаешь искать редкие вещи, и количество результатов - десятки страниц, уже на пятой результаты заканчиваются.

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

    В третьих, запрос может быть распределенным на несколько машин, т.е. не каждый запрос на свою машину, это само собой, а именно один пользовательский запрос напрягает одновременно целый кластер. Мало того, я почти на 99% уверен что у гугла свое железо используется по полной (с момента как они стали активно использовать ИИ в своих алгоритмах поиска и построения индексов, уже лезт 10 гугл свои TPU пилит, минимум третья итерация, и в задачах ИИ они на пару порядков эффективнее GPU).

    В четвертых, гугл использует SSD, переход на них они начали почти 10 лет назад, на хабре была статья про это, т.е. им не нужно хранить индексы в оперативной памяти.

    Про софт - я не знаю, статей про это не помню, но нисколько не сомневаюсь, что такая компания как гугл могут запилить свой софт, работающий с хранилищем данных немного иначе чем это делают классические linux/win, когда каждый запрос к диску делает чуть ли не два копирования в оперативную память (это еще на уровне posix, затем пользовательский софт сериализацией занимается, это еще копирования), занимая ценный кэш процессора, но физически данные с дисков могут быть прочитаны в нужную область памяти вообще минуя процессор, как минимум nvme это могут штатно, так как висят на pci-e шине, да и sata точно есть механизмы, которые с помощью старого DMA могут копировать данные с указанных портов напрямую в области в памяти, точно читал о таких разработках в linux но до практически потрогать не доходило.

    p.s. первое что нагуглил по теме dma для nvme, обсуждают именно методы реализации инструментария в linux чтобы удобнее и быстрее с этим было работать из userspace (а не уровня драйверов)

    про tensor processing unit у них оказывается уже 5-ая ревизия должна быть (вот сравнение 4-ой ревизии, пишут про 20-кратное понижение carbon emission что бы это не значило)
    Ответ написан
    5 комментариев
  • Как гуглу удаётся работать так быстро? Какая у него память?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    - Многоканальная оперативная память (2, 4, 8 итд. каналов), этот процесс в контексте оперативной памяти обычно связан с такими технологиями и концепциями, как двухканальный (dual-channel), трехканальный (triple-channel) и многоканальный (multi-channel) режимы работы памяти.

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

    - В Linux так же имеется несколько способов организовать параллельное чтение и запись данных с использованием уже с жестких дисков (опять же, по примеру торрентов), чтобы увеличить производительность и надежность системы хранения данных. Эти методы включают в себя RAID-массивы, LVM (Logical Volume Manager) и файловые системы, специально разработанные для работы в распределенных и параллельных средах.
    Ответ написан
    Комментировать
  • Какие необходимые pet-project'ы нужно сделать на каждом этапе roadmap.sh/frontend чтобы стать грамотным девелопером?

    Griboks
    @Griboks
    Каждая технология, каждый инструмент - это результат встречи инженеров с проблемами. Пока вы не увидите в своём проекте эти проблемы, вы не поймёте, зачем эта технология существует.

    Например, https - то результат решения определённой проблемы. Но некоторые разработчики не до конца понимают, зачем там нужна буква s, поэтому очень часто можно увидеть ошибки сертификатов в локальных сетях. Например, gitlab тупо не работает без сертификата даже на localhost.
    Ответ написан
    Комментировать
  • Зачем нужен блок инструкций без управляющей инструкции?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    В изначальных исходниках там TypeScript. Вы смотрите уже скомпилированный код. В исходниках местами все обернуто в разные условия, завязанные на__DEV__:
    export function setExtraStackFrame(stack: null | string): void {
      if (__DEV__) {
        currentExtraStackFrame = stack;
      }
    }

    Когда происходила сборка кода, который вы смотрите, вероятно __DEV__ был true, условие было опущено, т.к. оно всегда выполняется, а скобки остались как артефакт. Скорее всего транспилятор TS не проверяет весь контекст, и чтобы ничего не сломать случайно, оставляет скобки на своих местах.
    Ответ написан
    2 комментария
  • Сколько памяти нужно для cdn?

    @Drno
    Vds??

    Несколько серверных стоек в ДЦ…

    Но по факту зависит от количества юзеров и насколько криво написан софт
    Ответ написан