• Правильный способ хранения текста и HTML-кода в базе MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ на вопрос из заголовка:
    Никак особенно не хранить. Хранить абсолютно так же, как и любые данные, - как есть. То есть, НИКАК их не модифицируя для хранения.

    Решение конкретно твоей проблемы:
    mysql_set_charset('utf8'); после коннекта
    +
    плюс таблицы должны иметь кодировку utf8
    Подробнее: phpfaq.ru/charset

    Разбор вопроса:
    везде совет для записи в базу использовать mysql_real_escape_string(),

    Это информация устарела и не соответствует действительности.
    Единственно правильным вариантом добавления данных в запрос являются подготовленные выражения.

    Как я понимаю необходимо обрабатывать текст вот так перед вставкой:

    Неправильно понимаешь.
    Перед вставкой текст обрабатывать не надо вообще никак.
    Для корректной работы SQL, как я уже писал выше, должны использоваться подготовленные выражения.
    HTML же к SQL не имеет ни малейшего отношения. и никакая HTML функция, разумеется, при сохранении в БД использоваться не должна.

    К примеру "⇔" при записи в базу превращается в "?"

    Вот с этого и надо было начинать. У тебя проблема с кодировками.
    Ответ написан
    2 комментария
  • Что такое LF, CLRF и как с этим бороться?

    Adobe
    @Adobe
    php developer
    Я когда первый раз брался за это дело, тоже без мата не получалось. Времени кучу убил на все разбирательства.
    Это директивы перевода строк. Чтобы не было косяков между винды/юниксы/маки и прочих в переносах строк.
    Я себе в конфиге сделал autocrlf = false и больше меня не мучил этот вопрос.
    Ответ написан
    7 комментариев
  • Как создать объект ключ которого приходит из аргумента функции?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Квадратные скобки добавьте:

    const data = {
      [name]: value,
    };
    Ответ написан
    Комментировать
  • Подкиньте литературы по IoT?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Internet of Things with Python

    Raspberry Pi IoT Projects
    Building Arduino Projects for the Internet of Things
    Security and Privacy in Internet of Things (IoTs)
    Learning IoT with Particle Photon and Electron
    MySQL for the Internet of Things
    Ответ написан
    Комментировать
  • Когда использовать useCallback, useMemo и useEffect?

    @LEXA_JA
    useEffect - это хук, который позволяет использовать сайд эффект. В классах его аналогом было использование componentDidMount, componentDidUpdate и componentWillUnmount. В нем можно делать подписки, отправлять запросы управлять анимацией и т. д.
    const [data, setData] = useState(null);
    
    useEffect(() => {
      const controller = new AbortController()
      fetchData(controller.signal).then(setData)
    
      return () => controller.abort()
    }, [fetchData, setData])


    useCallback и useMemo предназначены для оптимизации. useCallback получает на функцию и массив аргументов, и возвращает одну и туже функцию, до тех пор, пока аргументы не изменились. useMemo отличается тем, что он возвращает не саму функцию, а результат её выполнения. По большому счету они являются взаимозаменямыми.
    Таким образом, useMemo используется для сохранения результатов тяжёлых вычислений, например обработка массива.
    const data = useMemo(() => array.map(mapper).filter(predicate).reduce(reducer), [array])

    А useCallback используется, когда важна постоянность ссылок на функцию. Например, когда мы передаём ссылку в компонент, который использует React.PureComponent или React.memo, или, когда функция используется в качестве аргумента в других хуках
    const handler = useCallback(() => {
      // что-то сделать 
    }, [])
    
    useEffect(() => {
      handler(value)
      // если не использовать useCallback, эффект будет срабатывать постоянно 
    }, [handler, value])
    Ответ написан
    1 комментарий
  • Что делать и как относиться к npm WARN-предупреждениям при установке пакетов?

    littleguga
    @littleguga
    Не стыдно не знать, а стыдно не интересоваться.
    0. По поводу npm WARN engine, там четким текстом написана просьба обновить движок node, как минимум до 5.0.0. Обновите node.

    1. Про deprecated - это не Ваша проблема, это проблема в зависимостях проекта(соответственно это проблема разработчика пакета). У Вас есть 2 пути: забить, ибо ничего принципиально страшного в этом нет. Вычислить в каком именно пакете устаревшая зависимость, найти пакет на github/npm сделать пулл-реквест с обновлением зависимостей/попинать разработчика.
    Подробнее смотрите:
    stackoverflow.com/questions/35491905/npm-warn-depr...
    stackoverflow.com/questions/33974189/npm-warn-depr...
    stackoverflow.com/questions/34840153/npm-deprecate...

    2. Про sudo - дает права на выполнение команды от суперюзера. Почитайте про sudo. Конкретно про npm и sudo, смотрите:
    https://github.com/sindresorhus/guides/blob/master...
    stackoverflow.com/questions/16151018/npm-throws-er...
    Ответ написан
    Комментировать
  • Ошибка Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    А вы откройте в консоли (Ctrl+Shift+G в Chrome) вкладку "Network", найдите ваш запрос, и посмотрите что там приходит во вкладке "Response".

    5e736588b215e932457830.png
    Подсказка: приходит не JSON.
    Ответ написан
    Комментировать
  • Как сделать страницу 404 в VUE.js?

    dosya97
    @dosya97
    Fullstack web-developer
    const routes = [
    ...
      { 
    		path: '/404', 
    		name: '404', 
    		component: NotFound, 
    	}, { 
    		path: '*', 
    		redirect: '/404' 
    	}
    ]
    Ответ написан
    4 комментария
  • Как сделать страницу 404 в VUE.js?

    @serg127
    Здравствуйте.
    А чем плох подход из официальной документации, о котором уже писали выше?
    guide
    const routes: [
        ...
        { path: "*", component: PageNotFound }
    ]
    Ответ написан
    Комментировать
  • Где необходимо применение ООП на Javascript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    модели, контроллеры, сервисный слой реализуются как классы (если можно так сказать, ибо в js нету классов, есть прототипное наследование у объектов)

    посмотрите проекты реализованные на backbone.js например. Но по сути вам будет проще вооружиться angular, где хотя бы вам не дадут разгуляться в плане написания своей системы классов и прочих велосипедов, который по сути в js и не нужны.
    Ответ написан
    Комментировать
  • Ревью ТЗ, по которому отказ. Какие грубые ошибки совершил?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    Может быть она уже нашли специалиста и проводить ваше code review уже было накладно.
    60ebe969797eb243490749.png

    Например стучится на эту вакансию 100+ человек, каждый высылает по тестовому заданию.

    Факторы: скорость выполнения, адекватность собеседника, личные предпочтения. Какой-то фактор сыграл не в вашу пользу, и скорее всего вы отсеялись на уровне - "так, тех. задание выполнил, но Вася Пупкин из саратова сделал на 2 часа быстрее, + понравился HR или тех. лиду".

    Итог: не расстраивайтесь, выполнять code review каждому потенциальному кандидату - это деньги, и время. Не все компании готовы выливать излишек.

    PS: у нас на позицию джуна в прошлом месяце пришло 320 резюме + тех.задание, на 150м резюме мы остановились, условно мы нашли всех кандидатов, остальные 170 остались в недоумении скорее всего. Таков бизнес :)
    Ответ написан
    1 комментарий
  • Как правильно подключить локальные шрифты в vue?

    delphinpro
    @delphinpro
    frontend developer
    в каждый url путь подставьте
    сейчас вы только eot подключили

    И уж, коли на Vue пилите, а значит более или менее современные браузеры, то подключайте только woff и woff2 — покроют всё.

    @font-face {
      font-family: 'Geometria';
      src: local('Geometria Thin'), local('Geometria-Thin'),
        url('~@/assets/fonts/geometria/Geometria-Thin.woff2') format('woff2'),
        url('~@/assets/fonts/geometria/Geometria-Thin.woff') format('woff');
      font-weight: 100;
      font-style: normal;
    }
    Ответ написан
    Комментировать
  • Что делает $emit во Vue.js?

    @Nolan81
    программист
    Просто генерирует событие, на которое может подписаться его родительский компонент.
    Заметьте что такие события не "всплывают" как события в js, это только для общения между двумя компонентами. Что на практике будет означать что если куда то дальше надо передать то надо снова эмитеть, что не совсем удобно.
    Но это не сильно надо, т.к. все равно все хранят данные во vuex, а не гоняют данные туда сюда
    Ответ написан
    Комментировать
  • Как в Vue правильно отобразить дату и время?

    Kozack
    @Kozack Куратор тега Vue.js
    Thinking about a11y
    Вот как это делать согласно лучших практик:
    <template>
    <div>
        <!-- В шаблоне не вызывают какие-либо функций. Только выводят готовые значения -->
        {{localeDate}}
    </div>
    </template>
    
    <script>
    {
        data: () => ({
            // Дата хранится в виде числа. Не обязательно в state компонента. Но и в других местах тоже
            date: 1580558031264,
        }),
        
        computed: {
            localeDate() {
                // Конвертируем число в строку. Для этого существуют специальные методы
                // toLocaleDateString() или toLocaleString() или toLocaleTimeString()
                // Итоговая строка будет зависеть от локализации системы пользователя. 
                // Для русской локали это будет "01.02.2020", 
                // для американской "2/1/2020", 
                // для немецкой — "1.2.2020"
                // Вы НЕ должны устанавливать формат даты самостоятельно
                return (new Date(this.date)).toLocaleDateString() 
            },
        },
    
        // Если нужно изменять дату в реальном времени вешаем таймер
        created() {
            this.intervalId = setInterval(() => this.date = Date.now(), 1000); // Обновляем значения не чаще раза в секунду. А то и реже.
        },
    
        // Если повесили таймер, то его нужно отключать
        beforeDestroy() {
            if (this.intervalId) clearInterval(this.intervalId)
        },
    }
    </script>
    Ответ написан
    2 комментария
  • ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO): что делать?

    @lexadef
    Это может быть, если пароль не был задан при установке.

    Порядок действий для установки/смены пароля root в mysql следующий:

    1. Остановить mysql:
    sudo service mysql stop

    2. Запустить сервис со следующими параметрами:
    sudo mysqld --skip-grant-tables --user=root

    Если выдал ошибку то в файле /etc/mysql/mysql.conf.d/mysqld.cnf в секцию [mysqld] добавить строчкуskip-grant-tables и выполнить sudo service mysql restart

    3. После этого подключиться к mysql командой:
    mysql -u root

    4. Обновить пароль root'a:
    UPDATE mysql.user SET authentication_string=PASSWORD('<новый пароль>'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';    
    FLUSH PRIVILEGES;


    5. И перезапустить сервис:
    sudo service mysql restart
    Если на шаге 2 вы добавляли skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf - удалить эту строчку.


    Подробнее в Русскоязычной документации Ubuntu
    Ответ написан
    3 комментария
  • Как исправить кракозябры в сообщениях об ошибке в pyodbc/pymssql?

    @korifey13
    Вопрос задан более двух лет назад, и тем не менее сегодня я тоже получил кракозябрами описание ошибки от виндового MSSQL сервера. Проблема решилась энкодингом и декодингом строки:
    try:
        conn = pyodbc.connect(...)
    except Exception as err:
        print(err.args[1].encode("cp1252").decode("cp1251"))

    Откуда я взял cp1252 и cp1251? Скопировал кракозябры из консоли и расшифровал Декодером.
    Ответ написан
    Комментировать
  • Как убрать браузерную обводку у кнопок (появляющуюся в состоянии :focus) в Chrome и Firefox?

    wprivalov
    @wprivalov
    Разрабатываю на Yii2
    для bootstrap 4 (100% рабочий вариант):

    a.active.focus,
    a.active:focus,
    a.focus,
    a:active.focus,
    a:active:focus,
    a:focus,
    button.active.focus,
    button.active:focus,
    button.focus,
    button:active.focus,
    button:active:focus,
    button:focus,
    .btn.active.focus,
    .btn.active:focus,
    .btn.focus,
    .btn:active.focus,
    .btn:active:focus,
    .btn:focus {
    outline: 0!important;
    outline-color: transparent!important;
    outline-width: 0!important;
    outline-style: none!important;
    box-shadow: 0 0 0 0 rgba(0,123,255,0)!important;
    }
    Ответ написан
    4 комментария
  • Как убрать браузерную обводку у кнопок (появляющуюся в состоянии :focus) в Chrome и Firefox?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    jsfiddle.net/r4mef13v/3
    Про FF и рамки.

    button:active, button:focus {
    	outline: none;
    }
    button::-moz-focus-inner {
    	border: 0;
    }
    Ответ написан
    Комментировать
  • Как вывести список всех таблиц MySQL и количество строк в каждой из них впри помощи PHP?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    SHOW TABLES FROM database_name прекрасно работает когда база не выбрана. Здесь мы показываем таблицы в базе, а не в $db_table. Исходя из вашего нейминга, вы просите таблицу показать ее таблицы, что абсурдно само по себе. Обращайтесь к базе. Или, если вы базу предварительно уже выбрали, то достаточно SHOW TABLES.

    Далее, для SELECT * FROM table_name уже сначала нужно выбрать базу данных (которую вы опрашивали на предмет таблиц в первом запросе), или же обращаться к таблице в формате database_name.table_name.

    Ну и, вместо того чтобы делать выборку всех строк со всеми колонками, спросите сразу SELECT COUNT(*) FROM database_name.table_name.

    Еще проще и быстрее это сделать с помощью такого запроса:

    SELECT table_name, table_rows
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'your_database_name';


    Результат этого запроса:

    +-----------------------+------------+
    | table_name            | table_rows |
    +-----------------------+------------+
    | wp_terms              |         10 |
    | wp_yoast_seo_meta     |         61 |
    | wp_yoast_seo_links    |         33 |
    | wp_commentmeta        |          0 |
    | wp_term_taxonomy      |         10 |
    | wp_ewwwio_queue       |        352 |
    | wp_usermeta           |        114 |
    | wp_options            |        281 |
    | wp_users              |          5 |
    | wp_term_relationships |         49 |
    | wp_ewwwio_images      |       1048 |
    | wp_links              |          0 |
    | wp_postmeta           |      21408 |
    | wp_termmeta           |          0 |
    | wp_comments           |          0 |
    | wp_posts              |        738 |
    +-----------------------+------------+


    Единственное, что нужно учесть - если таблицы у вас InnoDB, то данные цифры будут более-менее точными, но не совсем. В силу механизмов оптимизации. Так что если нужно "приблизительно" понимать - используйте данный метод. Если нужно с точностью до одной строки - тогда COUNT.

    Ну и еще можно сделать SHOW TABLE STATUS, находять в выбранной базе данных. Точность подсчета количества строк на InnoDB такая же, как и предыдущем методе, но зато здесь будет еще много полезной информации. Например - avg_row_length, data_length, index_length и другое.
    Ответ написан
    4 комментария