• Как сгруппировать данные в clickhouse если есть несколько временных меток?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Я бы предложил изменить структуру хранения, если есть такая возможность. По идее, одна table должна отвечать за один event, а уже множество event_table_n хранится в одной database. Если такой возможности нет, то можно выносить разные event в разные materialized view по условию, но при большом количестве mv (и триггеров) может сильно возрасти нагрузка на инстанс ClickHouse. Поэтому лучше разделить таблицы архитектурном уровне и продумать маршрутизацию данных, тогда получится достичь оптимального баланса между записью и чтением данных
    Ответ написан
    Комментировать
  • VS Code. Какие есть сборщики, компиляторы для JS, CSS файлов?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Вы можете работать с удаленным кодом напрямую в VS Code так, будто работаете с локальной папкой. Подробнее в инструкции. Я таким способом работаю внутри локальной сети на двух ноутбуках, работает настолько хорошо, что иногда можно забыть что работаешь через сеть на другой машине. Но сборщики и зависимости должны быть прописаны в проекте, что является общепринятой практикой.
    Ответ написан
    Комментировать
  • Как сделать треугольник?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Для решения подобной задачи у вас несколько вариантов:

    1. Использовать clip-path, но осторожно из-за ограниченной поддержки браузерами; почитать
    2. Использовать mask-image, но также осторожно из-за ограниченной поддержки браузерами; почитать
    3. Использовать SVG masks, у которого лучшая поддержка браузера, но реализация может занять больше времени, чем в остальных случаях; почитать
    4. Создать необходимую фигуру псевдоэлементом, но такой способ работает только для фона залитого одним цветом
    5. Просто добавить картинкой как есть

    Таким образом, при выборе способа необходимо учитывать требования поддержки верстки браузерами, бюджет и сроки проекта. Мой совет: просто добавить порезанную картинку через background-image, если конечно ваша фигура не изменяет внешний вид при взаимодействии. Любой другой способ занимает сильно больше времени, либо заметно уменьшает список поддерживаемых браузеров, что позволяет в большинстве случаев отказаться от интерактивных свойств.
    Ответ написан
    Комментировать
  • Как сделать input количества для айтемов в меню независимым друг для друга в этом JS?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    У вас ошибка доступа к элементу input. По спецификации на весь документ можно использовать только один id, поэтому у вас любое событие меняет только один первый input. Правильней будет получать элементы по классу и на каждый элемент вешать обработчик клика. Но поскольку, вам нужно кликом по одному элементу менять свойства другого элемента, то задача немного усложняется. В моем примере JS сначала читает родительские элемент кнопок и инпута, а потом уже для каждой группы читает атрибуты и вешает обработчики событий
    Ответ написан
    1 комментарий
  • Как сделать такое?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    API Яндекс карт вроде умеют такое, но надо изучать подробное на предмет условий использования
    Ответ написан
    Комментировать
  • Как выполнить действие только после dispatch-а асинхронной функции?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    При работе с React любое изменение в интерфейсе необходимо отражать в state. Если вам необходимо получить данные асинхронно, значит ваш компонент будет иметь минимум 3 состояния: данные при инициализации, ожидание загрузки, данные получены. Также, dispatch всегда синхронный, именно поэтому нам и нужны библиотеки вроде React Thunk, которые выполняют отложенное изменение стейта. Поэтому, писать асинхронные action без вызова dispatch неправильно
    Ответ написан
    Комментировать
  • Как вызвать компонент в функции?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Я думаю, что вам нужно поглубже изучить React и его базовые концепции. Особенно, понять как пользоваться стейтом компонента. Иногда документация кажется сильно сухой, поэтому Youtube в помощь)

    Фрагмент с правками

    import React, { useState } from 'react';
    import Hi from './Hi'
    
    function display(){
        return <Hi/>
    }
    
    export const Main = () => {
        const [isHiVisible, setHiVisible] = useState(false);
        const onClick = () => {
            setHiVisible((prev) => !prev);
        }
        return (
            <div>
                <button onClick={onClick}>отобразить</button>
                {isHiVisible &&
                    <Hi/>
                }
            </div>
        );
    };

    Ответ написан
    2 комментария
  • Как записать это с помощью CSS-модулей?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Советую воспользоваться библиотекой для вашей задачи. В рабочих проектах работает отлично. На будущее советую искать готовое решение, бОльшую часть задач кто-то уже решил до вас и нашел наиболее оптимальный способ
    Ответ написан
    Комментировать
  • Как отключить кэширование браузером index страницы?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Вам нужно добавлять hash в названия файлов. При изменении содержимого будет меняться hash рядом с именем файла скриптов/стилей и после нового релиза пользователи без сброса кэша будут видеть обновления. Совсем отключать кэш нежелательно, т.к. тогда постоянным пользователям нужно будет каждый раз грузить файлы и каждый раз ждать окончание загрузки.
    Для реализации такого подхода нужно настроить Webpack, подробнее можно глянуть в документации или в пример ниже для Webpack 5 с одного из рабочих проектов:

    const path = require('path');
    const htmlPlugin = require('html-webpack-plugin');
    
    const publicPath = path.join(__dirname, 'build');
    
    module.exports = {
        entry: './source/index.tsx',
        output: {
            path: publicPath,
            filename: '[name].[contenthash].js',
            chunkFilename: '[name].[chunkhash].js',
            publicPath: '/',
        },
        devServer: {
            static: publicPath,
            historyApiFallback: true,
            hot: true,
            port: 6790,
        },
        resolve: {
            extensions: ['.ts', '.tsx', '.js', '.jsx', 'ttf'],
        },
        module: {
            rules: [
                {
                    test: /\.(ts|tsx)$/,
                    include: path.resolve(__dirname, 'source'),
                    loader: 'ts-loader',
                    options: {
                        transpileOnly: true,
                    },
                },
            ]
        },
        plugins: [
            new htmlPlugin({
                publicPath: '/',
                template: './source/index.html',
                favicon: './source/assets/images/favicon.png'
            }),
        ],
    };
    Ответ написан
    Комментировать
  • Как преобразовать HTML строку в массив?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Рекомендую почитать что-нибудь про работу с древовидными структурами данных или про парсинг JSON-строки, потому что ваша задача как раз об этом. Могу посоветовать воспользоваться библиотекой htmlparser2, там вы можете контролировать парсинг по необходимых тегам или их атрибутам. В качестве эксперимента можно попробовать вырезать <code>*</code>, но главное не забыть позицию, чтобы потом поставить обратно
    Ответ написан
    Комментировать
  • Как сделать такой круг состоящий из разных дуг сделать с помощью css?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Я думаю, что вам нужно использовать библиотеку для построения графиков, например chart.js. Вкратце, необходимо ввести ваши данные, а библиотека сама отрисует SVG. Возможно настраивать label для фрагментов графика, цвета, размер
    Ответ написан
  • Как реализовать получение ссылки на которую ведет кнопка элемента (puppeteer)?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Сам pupperter вроде не станет выполнят внешний JS на странице, только тот что подключен в HTML. Всё как в настоящем браузере. В данном случае Вам необходимо получить HTML как текст, а уже потом парсить оттуда DOM-дерево с тегами для элементов. Если работаете в среде NodeJS, то рекомендую использовать htmlparser2, простой и один из самых быстрых парсеров DOM-дерева
    Ответ написан
    Комментировать
  • Как поймать ошибку в NodeJS?

    sasha-hohloma
    @sasha-hohloma Автор вопроса
    Fullstack Developer
    Проблема оказалась внутри библиотеки SocksProxyAgent. Уже не помню где читал, но где-то на GitHub писали, что такая ошибка вываливается как uncaught, потому что не висит обработчик на событии ошибки для tls.connect.
    В итоге исправил
    return tls.connect({
        ...omit(opts, 'host', 'hostname', 'path', 'port'),
        socket,
        servername
    });


    На следующий код
    const tlsConnection = tls.connect({
        ...omit(opts, 'host', 'hostname', 'path', 'port'),
        socket,
        servername
    });
    tlsConnection.on('error', () => {
        return null;
    });
    return tlsConnection;


    Возможно имеет смысл ещё покопаться с библиотекой в поисках более изящного решения. Пока что не работает даже если выкидывать ошибку через throw new Error(). Если найду другое решение, отпишу в комменты
    Ответ написан
    Комментировать
  • Как использовать https proxy в node.js?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Тоже столкнулся с такой проблемой, решил проблему использование socks протокола. Но с этой ошибкой пока не смог разобраться
    Ответ написан
    Комментировать
  • Почему не могу использовать where, а только whereRaw?

    sasha-hohloma
    @sasha-hohloma Автор вопроса
    Fullstack Developer
    Ответ оказался довольно прост - нужно внимательней читать документацию
    Проблем заключалась в использовании указанного запроса внутри другого запроса через leftJoin. Взамен необходимо было использовать leftJoinSub
    Ответ написан
    Комментировать
  • С помощью флекса вообще возможно распологать фото с бэкраундами?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Во-первых, с семантическим тэгами нужно работать иначе. В вашем случае нужно менять тег <section> на простой класс section, иначе эффект будет только хуже, не говоря уже про множество <h1>. Подробнее можно почитать тут

    Во-вторых, стрелочки между элементов добавьте в псевдоэлементы, они не нужны в разметке и только путают

    Не совсе понял компот с фоновой картинкой у <img>, масло масляное получается.
    А вообще лучше взять bootstrap 4, и в данном случае обойтись <div> с фоновой картнкой
    Ответ написан
  • Возможно ли через onclick получить id нажимаемого элемента?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Вызов функции в атрибуте элемента - плохая практика. Намного изящнее добавить eventListener

    var elements = document.querySelectorAll('.click');
    for ( var index = 0; index < elements.length; index++ ) {
    	elements[index].addEventListener( 'click', function() {
    		var id = this.id;
    		console.log( id );
    	} )
    }
    Ответ написан
    Комментировать
  • Можно ли сделать такое поведение owl carousel (последний item прижат в правой сторону)?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    Выключаете loop и будет тот же эффект
    Пример
    Ответ написан
    Комментировать
  • Есть ли какие нибудь недочеты по сверстанной странице?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    При первом взгляде неплохо, но есть несколько ошибок:
    1. На кнопках с выпадающими списками нет иконок, которые указывают о наличии выпадалок внутри
    2. Выпадающий список на маленьких экранах не вмещается
    3. На мобилке навигация не листается и выглядит не очень красиво
    4. Вставлять видео вот так в лоб через video тэг - плохая практика
    5. Видео лучше грузить после полной загрузки всех картинок, стилей, скриптов
    6. При ресайзе слайдер сходит с уа в эпилептическом приступе (используйте Slick или Owl)
    7. Почему такая старая версия jQuery?

    Странно что в исходниках расширение файлов SASS, но расставлены точка с запятой и скобки
    Также, если верстаете с БЭМ придерживайтесь всех правил, а именно избегайте вложенности и названий тегов .merits__ring-list div:nth-child(1)
    Также рекомендую изучить циклы в SASS, чтобы не перечислять вручную дочерние элементы
    Ответ написан
    6 комментариев
  • Плагин OnePage-Scroll. Не работает модал скрол в Firefox и Safari. Chrome отрабатывает отлично. Что не так?

    sasha-hohloma
    @sasha-hohloma
    Fullstack Developer
    И при этом в хроме листается вообще всё сразу
    Нужно менять стили блока .main, сейчас он растянут по всей ширине и перехватывает скролл другого блока
    Ответ написан
    Комментировать