Задать вопрос
  • Возможно вставлять php код в шабланизатор handlebars??

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Handlebars шаблон обрабатывается в compile-time
    В run-time будет просто js функция, которая принимает на вход объект контекста и возвращает строку.
    Следовательно никакой php в шаблоне не выполнится
    Ответ написан
    2 комментария
  • Как изменять высоту iframe в зависимости от содержимого?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Никак. Iframe так не умеет.
    Если есть доступ к сайту N - то пусть шлет postMessage родителю со своими размерами на старте и при каждом ресайзе, а родитель уже поменяет высоту iframe.
    Ответ написан
  • Как сделать кнопки в отдельных строках?

    bingo347
    @bingo347
    Crazy on performance...
    Комментировать
  • Почему JS не находит элемент?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Про проблему с next/previous уже написали, но относительное получение элементов вообще чревато проблемами, что будете делать, если завтра верстка изменится?
    label для input лучше искать так:
    function getLabelForInput(input) {
      if(input.id) {
        const label = document.querySelector(`label[for="${input.id}"]`);
        if(label) { return label; }
      }
      for(let parent = input; parent = parent.parentElement;) {
        if(parent.tagName === 'LABEL') { return parent; }
      }
      return null;
    }
    Ответ написан
    9 комментариев
  • Где лучше хранить JWT?

    bingo347
    @bingo347
    Crazy on performance...
    В принципе это относится не только к JWT, но и к любым данным, которые критично не дасть украсть.
    Такие данные лучше всего хранить в secure http-only cookie. С secure думаю понятно, такая кука будет отправляться на сервер только по https, что снизит вероятность угона путем подслушивания трафика. А вот с http-only причина та же, почему не стоит использовать localStorage - не http-only кука доступна из JS, из любого JS загруженного на странице.
    Что в этом плохого? Вы уверены во всех скриптах, подключенных к Вашей странице? А если сторонний сервер был взломан? А если у пользователя стоит вредоносное расширение, подменяющее определенные скрипты на всех сайтах? Соберет такой вредонос из localStorage токены Ваших пользователей, а Вам потом с ними разбираться, почему их взломали.
    Ответ написан
    3 комментария
  • Какой второй язык программирования учить с заделом на будущее?

    bingo347
    @bingo347
    Crazy on performance...
    1. Haskell - вправит мозги на место
    2. Rust - с заделом на будущее самое то
    3. JS - в купе с python'ом проблем найти работу в ближайшие 50 лет не будет
    Ответ написан
    Комментировать
  • Как лучше сохраняться данные с сайта в ClickHouse?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Схема в общем-то рабочая, но стоит все же предусмотреть некоторые нюансы:
    Создаю сервер с nginx и ClickHouse на Ubunta в одном месте
    Вы уверены, что одна единственная машина, нагруженная одновременно и nginx и CH и redis и php/python справится с Вашей нагрузкой?
    Я бы сразу закладывал, что раньше позже CH уедет на отдельную машину (а то и на 2), redis + php/python будут жить в парах на множестве машин, а nginx будет балансировать нагрузку с отдельной машины.
    раз в N секунд скриптом на python/php через cron кладет данные в ClickHouse

    Тут сразу 2 момента:
    Во-первых, при миллиарде записей CH вполне может пересчитывать индексы пару минут. +1000 записей за 10 инсертов конечно лучше, чем +1000 записей за 1000 инсертов... но все же заметно хуже чем +1000 записей за 1 инсерт.
    Во-вторых, при пиковой нагрузке у Вас может закончится память, и redis уйдет на диск, потеряв всю скорость от inMemory работы. Конечно Вы тут еще и упретесь в количество активных потоков под php и начнете его балансировать. Так что одно из решений будет уже описанное выше, что на каждой машине с php/python свой redis. А там как повезет с нагрузкой.
    Но все же я бы сразу делал выгрузку из redis в CH умнее, чем тупо каждые N секунд выгружаем все что есть. Лучше если будет выгрузка и по времени (при этом реже) и по количеству данных для записи.
    Ну и еще, задумайтесь сразу как делить данные в redis по принадлежности к интервалу записи
    Ответ написан
    Комментировать
  • Как подключить websocket?

    bingo347
    @bingo347
    Crazy on performance...
    Что-то мне подсказывает, что тут: $header = socket_read($socket, 1024); нужно читать из $newSocket
    Но соединится не получается, выпадает в 502 ошибку при попытке подключится
    502 обычно говорит, что nginx (или что у Вас в качестве реверс-прокси) не может подключится к бэкенду.

    Проверьте, можно ли подключится telnet'ом к php серверу с машины на которой nginx, может банальный фаервол не пускает.
    Проверьте что правильно прописан конфиг проксирования
    Ответ написан
  • Почему не запускается exe файл игры?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    проблема в параметре cwd (рабочая директория)
    https://nodejs.org/dist/latest-v12.x/docs/api/chil...
    При создании ярлыка проводником windows (и многими другими файл менеджерами) этот параметр прописывается в ярлыке по умолчанию как папка содержащая указанный .exe
    В ноде же по умолчанию этот параметр берется из process.cwd()
    https://nodejs.org/dist/latest-v12.x/docs/api/proc...
    что соответствует рабочей папке Вашего node процесса

    я не до конца понимаю, для чего он нужен в принципе
    он задает "рабочую директорию процесса", все относительные пути используемые в запускаемой программе будут вычислены относительно этой директории
    Ответ написан
    Комментировать
  • Какие области computer science нужно знать full stack веб разработчику?

    bingo347
    @bingo347
    Crazy on performance...
    Веб-разработчику знание computer science не обязательно, но полезно. Помимо общего развития оно позволит писать более производительный и менее ресурсоемкий код.

    Что стоит изучить:
    1. базовое устройство и принцип работы ЦП и ОЗУ, как выполняются команды, как происходит чтение и запись памяти, как работают процессорные кэши, как работают прерывания и для чего они нужны.
    2. базовое понимание ассемблера хотя бы для одной архитектуры (наиболее актуально x86_64)
    3. базовое понимание как работает ОС - системные вызовы, отличие user space от kernel space, отличие микроядерной и монолитной архитектур. Что такое виртуальная память

    Помимо общих тем полезно будет знать более прикладные вещи:
    1. Структуры данных, какие есть, какая для чего нужна и где ее более оптимально использовать
    2. Алгоритмы, алгоритмическая сложность (о-нотация и омега-нотация), знание о наличии распространенных решений и понимание, какое решение будет наиболее оптимально в конкретном случае
    3. Архитектура программного обеспечения
    4. Паттерны проектирования
    5. ООП (наследование, инкапсуляция, полиморфизм подтипов (на наследовании и на интерфейсах), композиция, абстракция)
    6. ФП (функции высшего порядка, замыкания, параметрический полиморфизм, композиция, ассоциативность, контроль побочных эффектов, монады и функторы)

    А еще есть закон протекающих абстракций, согласно которому не лишним будет знать, что и как у нас работает под капотом:
    1. как работает интерпретатор python
    2. как работают интерпретаторы js (на примере v8 хотя бы)
    3. как работают JIT компиляторы, и как это вообще возможно если executable память read-only, а writable память не executable в большинстве популярных ОС
    4. как работает сборка мусора, какие есть алгоритмы, почему большинство сборщиков мусора используют поколения. А конкретно к v8 еще можно задать актуальный для react вопрос: почему иммутабельность и постоянное создание коротко-живущих объектов в js относительно дешево, если аллокация памяти - это дорого?
    5. как работает браузер, как он рисует страницу, как обрабатывает event-loop js

    P.S. большинству работодателей предлагающих работу связанную с разработкой в вебе это все нафик не сдалось от нанимаемого разработчика... большинству работодателей нужно тупое формошлепство на фронте и создание тупых проксей от БД до фронта на бэке... но те немногие работодатели, кому эти знания стоят острой необходимостью, готовы платить практически любые деньги разработчику, который все это знает и умеет применять на практике.
    Ответ написан
    4 комментария
  • Как во Vue добавить класс без $style.название_класса?

    bingo347
    @bingo347
    Crazy on performance...
    Модульный CSS - это не особенность vue, это особенность связки css-loader + vue-loader для webpack. Роль css-loader тут в замене имен классов (а так же имен keyframes и прочих внутренних штук, но не имен тегов и не id) на хэш от пути к файлу и оригинального имени класса, а так же предоставлении объекта с маппингом оригинального имени класса в сопоставленный ему хэш. А роль vue-loader в добавлении миксина с beforeCreate хуком прокидывающим объект маппинга в this.$style
    Из документации css-loader можно узнать, что любой селектор или его часть можно обернуть в конструкцию :global() чтобы указанные имена классов не переименовывались.

    style[scoped]
    да с этим познакомился, но тогда не будет модульности у классов
    Данная штука работает на уровне самого компилятора vue и она дает модульность за счет добавления атрибута вида v-1234567 (где 1234567 - хэш от содержимого файла .vue) ко всем тегам и добавления селектора по атрибуту. Поставленную задачу это действительно решает, оставляя оригинальные классы и работая даже на имена тегов, но ценной более медленных селекторов по атрибуту.
    Почему нельзя было решить эту задачу добавлением доп класса, как это сделано в svelte например, с которого Эван Ю почти полностью своровал дизайн... Это известно лишь самому Эвану, который впрочем очень часто единолично принимает не самые оптимальные по производительности решения, когда не умеет сделать нормально.

    Еще одним решением будет немного покодить. Указанный в вопросе фрагмент шаблона
    <template>
      <div>
        <div :class="test1">test1</div>
        <div :class="test2">test2</div>
      </div>
    </template>
    будет искать поля с ключами test1 и test2 в this, а значит их вполне можно туда переложить в beforeCreate хуке из this.$style, например так:
    const mixin = {
      beforeCreate() {
        const applyClassNames = () => Object.keys(this.$style).forEach(className => {
          this[className] = this.$style[className];
        });
        if(!this.$style) {
          // наш миксин может оказаться раньше миксина лоадера
          Object.defineProperty(this, '$style', {
            enumerable: true,
            configurable: true,
            get() {},
            set: $style => {
              Object.defineProperty(this, '$style', {
                enumerable: true,
                configurable: true,
                writable: true,
                value: $style
              };
              applyClassNames();
            }
          });
          return;
        }
        applyClassNames();
      }
    };
    export default {
      mixins: [mixin],
      // ...
    };
    Правда минусом подхода будет то, что все имена классов окажутся непосредственно в this компонента, что черевато конфликтами.
    Ответ написан
    Комментировать
  • Проблема с GUI WSL?

    bingo347
    @bingo347
    Crazy on performance...
    Вам нужен X server для windows, например Cygwin/X или Xming или VcXsrv
    Ответ написан
  • Как правильно подключить ExtractTextPlugin?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    ExtractTextPlugin устарел и не работает с последними версиями webpack
    используйте: https://www.npmjs.com/package/mini-css-extract-plugin
    Ответ написан
    Комментировать
  • Как реализовать обмен данными между Node js и php?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    На мой взгляд самое правильное - делать из ноды запросы к php-fpm. Он общается по давольно стандартизированному протоколу fast-cgi, для которого на npm можно найти клиент, например вот: https://www.npmjs.com/package/fastcgi-client
    Ответ написан
    Комментировать
  • Как написать Js скрипт для отправки на сервер всех введённых данных?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Можно отправлять данные принудительно при уходе со страницы или закрытии вкладки
    https://developer.mozilla.org/ru/docs/Web/API/Befo...
    https://developer.mozilla.org/ru/docs/Web/API/Navi...
    Ответ написан
    Комментировать
  • Как сделать поле редактирования на Vue?

    bingo347
    @bingo347
    Crazy on performance...
    Используйте отдельные поля data для состояния модалки, а при открытии/закрытии синхронизируйте с основными
    Ответ написан
    Комментировать
  • Как получить числа текущей недели, с понедельника по воскресенье?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    const d = new Date();
    d.setDate(d.getDate() - (d.getDay() || 7) + 1);
    console.log(d);
    Это последний понедельник, остальные дни можно по аналогии найти
    Ответ написан
    Комментировать
  • Как сделать переход между секциями?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ответ написан
    Комментировать
  • Как решить задачу с минимальным использованием памяти?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Готовлюсь к собесу в яндекс
    Рано Вам в Яндекс... задачка то уровня школьных олимпиад...
    Постарайтесь, чтобы решение работало за время k ⋅ log(k) ⋅ n
    А это точно задачка для Яндекса? Она решается за линейное время O(k ⋅ n) если чуть-чуть вникнуть в условия, а логарифмическое решение годно лишь для людей с ЕГЭ головного мозга, там как раз любят решения в стиле "слить все в 1 массив и отсортировать", при использовании qsort/merge-sort как раз будет O(k ⋅ log(k) ⋅ n)

    Если читать из файла по 2 байта, то можно значительно сэкономить память, для формата 1- и 2-значные числа разделенные пробелом этого более чем достаточно.
    Так же выходной массив можно не формировать, а сразу отдавать его на выход.
    P.S. гуглите сортировку подсчетом, а решать задачу за Вас на тостере никто не будет
    Ответ написан
    5 комментариев
  • Клонирование существующего git проекта с последующим сохранением в новом репозитории, как правильно?

    bingo347
    @bingo347
    Crazy on performance...
    например так:
    git clone git@github.com:user-name/base-repo.git project-name
    cd project-name
    git remote remove origin
    git remote add origin git@github.com:user-name/project-name.git
    git push -u origin master
    Ответ написан
    1 комментарий