Задать вопрос
  • Куда пропадает оперативная память?

    Jump
    @Jump Куратор тега Windows
    Системный администратор со стажем.
    Куда пропадает оперативная память?
    Никуда не пропадает, ее использует компьютер.
    6гб по нынешним меркам мало, она будет всегда под завязку забита.
    У вас довольно нормальная ситуация в диспетчере - используется 4,8гб
    Память использованная приложениями пользователя 1,7Гб
    Кэш 1,1Гб

    Память используется -
    1)Системой
    2)Прикладными программами.
    3)Кэшированием.

    Подробно можно посмотреть в мониторе ресурсов.
    Диспетчер задач- производительность - открыть монитор ресурсов - вкладка "память"
    Ответ написан
    1 комментарий
  • Что быстрее отдать на клиент готовый html или json?

    @karminski
    Senior React.JS Developer
    Давайте разберем на примере:

    Если вам нужно обновить поля веб-формы, гораздо проще/быстрее/правильнее отдать JSON. Если же вы хотите подгрузить кусок страницы и вставить его, скажем, в разворачивающемся блоке (collapse) - проще/быстрее/правильнее отдать готовый HTML.

    Как говорится, всё зависит от задач.
    Ответ написан
    1 комментарий
  • Как с помощью bat добавить адрес в hosts?

    @XanMark
    ECHO %NEWLINE%^11.11.11.11 ya.ru>>%WINDIR%\System32\drivers\etc\hosts
    ECHO %NEWLINE%^22.22.22.22 google.ru>>%WINDIR%\System32\drivers\etc\hosts

    Запускать, понятное дело, с админ правами.
    Ответ написан
    7 комментариев
  • Можно ли восстановить данные после форматирования диска?

    opium
    @opium
    Просто люблю качественно работать
    Вам в компанию по восстановлению данных, возможно их частично можно идентифицировать и восстановить по метаданным, услуга очень дорогая
    Ответ написан
    1 комментарий
  • Почему системы в VirtualBox тормозят?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    8 Гб - это мало даже для работы, не говоря уж о VB
    2 Гб - это годится только для консольного сервера, но никак не для графики - разумеется она будет тормозить
    Ответ написан
    3 комментария
  • Если на виндовс нажать сочетание клавиш вин + R, откроется окошко "Выполнить", но что можно в него вводить?

    15432
    @15432
    Системный программист ^_^
    Любые исполняемые файлы из PATH
    Например, cmd, explorer, msconfig, regedit, calc, gpedit.msc...
    И это только то что я обычно использую.
    Ответ написан
    1 комментарий
  • Как сделать обновление информации на сайте в режиме реального времени?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Node.js не получится установить на классический shared хостинг
    понадобится свой сервер, благо сейчас виртуалки, как правило, дешевле шаред хостинга
    правда в этом случае придется настроить все самому

    насчет порта, да любой свободный используйте, главное чтоб был открыт наружу, правда лучше через nginx проксю прокинуть

    насчет Socket.io - дичь жуткая, хоть и распиареная, но тормозная, с утечками памяти, и вообще хороший пример, как не надо писать... При том что в 99% случаев достаточно модуля ws на котором он основан, ну или на крайняк возьмите ws-api если нужна высокоуровневая абстракция
    Ответ написан
    1 комментарий
  • Как задать любую последовательность в поисковике?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    никак

    подобные запросы сильно перегружают индекс
    Ответ написан
    Комментировать
  • Пагинация в Гугл и Яндекс?

    RotgarSett
    @RotgarSett
    SEO Эксперт
    Что пишет Яндекс:
    2. Что делать со страницами пагинации и сортировки товаров?

    Если в какой-либо категории на вашем сайте находится большое количество товаров, могут появиться страницы пагинации (порядковой нумерации страниц), на которых собраны все товары данной категории. Если на такие страницы нет трафика из поисковых систем и их контент во многом идентичен, то советую настраивать атрибут rel="canonical" тега на подобных страницах и делать страницы второй, третьей и дальнейшей нумерации неканоническими, а в качестве канонического (главного) адреса указывать первую страницу каталога, только она будет участвовать в результатах поиска.
    Например, страница сайт.рф/ромашки/1 - каноническая, с неё начинается каталог, а страницы вида сайт.рф/ромашки/2 и сайт.рф/ромашки/3 - неканонические, в поиск их можно не включать. Это не только предотвратит возможное дублирование контента, но и позволит указать роботу, какая именно страница должна находиться в выдаче по запросам. При этом ссылки на товары, которые находятся на неканонических страницах, также будут известны индексирующему роботу.
    Часто вместо пагинации сайты используют динамическую прокрутку, когда для посетителя, пролиставшего каталог до определённого момента, с помощью JavaScripts загружаются другие товары в данной категории. В такой ситуации необходимо проследить, чтобы весь контент таких страниц отдавался индексирующему роботу (например, с помощью инструмента в Яндекс.Вебмастере), либо чтобы роботу становилась доступна статическая пагинация товаров.


    Что пишет Google:
    Если ваш контент, который должен отображаться в результатах поиска, разбит на страницы, рекомендуем использовать один из способов, описанных ниже.

    1- Оставьте все как есть. Поскольку разбиение на страницы используется очень часто, алгоритмы Google возвращают контент, наиболее соответствующий запросам пользователей, независимо от того, на скольких страницах он расположен.
    2- Добавьте страницу "Показать все". Пользователи часто предпочитают просматривать всю статью или категорию на одной странице. Если Google считает, что пользователь ищет именно такой вариант, то предпринимает попытку показать в результатах поиска страницу "Показать все". Вы можете добавить атрибут rel="canonical" для отдельных страниц, чтобы сообщить, что в результатах поиска должна показываться именно страница "Показать все".
    3- Используйте атрибуты rel="next" и rel="prev" в ссылках или заголовках, чтобы указать связь между несколькими URL. Благодаря этой разметке Google может определить, что содержание данных страниц связано в логической последовательности, и направить пользователя на начальную страницу.


    Итого:
    Яндекс
    1- оставить все как есть (Если на страницы пагинации есть трафик и они не очень похожи по контенту)
    2- сделать каноничной только первую страницу пагинации
    3- подгружать все предложения на одной странице с помощью JavaScript (проверить что все индексируется!)

    Google
    1- оставить все как есть, он сам разберется
    2- сделать страницу "показать все" и сделать ее каноничной
    3- rel prev next

    На мой взгляд появляется два универсальных решения, для двух случаев.

    Случай один - страницы не сильно похожи по контенту и на них идет траф.
    Согласно первым пунктам для обоих поисковиков будет все отлично.

    Случай два - если контент страниц дублируется или вы просто параноик.
    Согласно третьему пункту Яндекса и второму пункту Google, делаем первую страницу пагинации с возможностью "Показать все" (реализуем на JavaScript) и делаем ее каноничной. Вуаля! Даже параноики довольны.
    Ответ написан
    Комментировать
  • Оперативная память работает на низкой частоте, разве так и должно быть?

    DevMan
    @DevMan
    Это нормально: 800 - реальная частота, 1600 - эффективная.

    https://ru.m.wikipedia.org/wiki/DDR_SDRAM
    Ответ написан
    Комментировать
  • Как еще можно оптимизировать js код?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Исправил синтаксические ошибки.

    Ага, на пять с плюсом.

    • Пропущен if или условие лишнее:

      } else (date.getDay() == 0) {

      } else (a < 1) {

    • Лишнее : после ?:

      this.updateTime.getMonth() > 9 ? : '0'

    • Перед методом renderItems стоит лишняя фигурная скобка, а после метода createPeriod такой скобки не хватает.


    И это только синтаксические. Есть ещё ворох иных.

    • Имена свойств, содержащих обработчики событий, состоят из букв только в нижнем регистре, тут должно было быть input.onchange:

      this.input.onChange = this.onChange;

    • Какое там первое слово в имени базового класса должно быть - date или data? Вы бы определились:

      class dateInput {

      class dateRange extends dataInput {

    • В конструкторе dateRange отсутствует вызов конструктора базового класса - не хватает super(); перед this.container = ...:

      constructor() {
       this.container = document.querySelector('.containerForLastUpdateRecordAndPeriodItems');

    • Это ещё что за на хрен:

      period = `${date.toLocaleDateString()} - {date.setHours(168).toLocaleDateString()}`;

      Во-первых - не указан индекс, и вместо собираемого массива используется объект, переданный в функцию, вместо period должно быть periods[i].
      Во-вторых- метод setHours возвращает число, а не объект даты, так вызвать toLocaleDateString не получится.
      В-третьих - отсутствует $ перед фигурной скобкой при подстановке второй даты.

    • Присваивание значений необъявленным переменным:

      b = false;

      element = document.createElement('div')

      Никогда так больше не делайте. Ну и бегом гуглить, почему это плохо.

    • Неправильно пытаетесь вызывать метод renderItems - не хватает this.:

      onChange() {
       renderItems(this.createItems(this.createPeriod(this.inputValue)));

      Кроме того, this тут будет вовсе не экземпляром класса - надо привязывать контекст при установке этого метода в качестве обработчика события (this.onChange.bind(this) - это в конструкторе dateInput). А ещё, поскольку метод переопределён, надо не забыть вызвать метод базового класса, иначе не будет установлено значение свойства inputValue:

      onChange(e) {
        super.onChange(e);
        this.renderItems(...

    • Можете хоть из кожи вон вылезти, но константа своего значения не изменит, а вот TypeError при попытке выполнить хотя бы одну итерацию подобного цикла получите обязательно:

      for (const i = 0; i < n-a; i++) {

    • Что принимает document.createElement в качестве параметров? Откройте документацию и разберитесь, чтобы такую чушь больше не сочинять:

      const element = document.createElement('div', {textContent: item});

    • Опять проблемы со значением this:

      this.container.appendChild(element);

      Поскольку данная строка находится внутри коллбека forEach, который представлен обычной функцией, то экземпляр класса оказывается недоступен. Или замените обычную функцию на стрелочную, или передайте this в forEach третьим параметром.

    • Это ещё что за на хрен №2:

      createPeriod(date) {
       var newDate = date;
        newDate.year = newDate.year + 1;

      Во-первых - в метод передаётся строка, а не дата.
      Во-вторых - будь там дата, скопировать с помощью оператора присваивания её бы не получилось, для объектов копируются ссылки, а не значения.
      В-третьих - год получается и устанавливается совсем не так, для этого есть методы:

      createPeriod(dateStr) {
        const start = new Date(dateStr);
        const end = new Date(dateStr);
        end.setFullYear(end.getFullYear() + 1);
        return { start, end };
      }

    • Это ещё что за на хрен №3:

      const range = Object.create(dateRange.prototype); 
      range.constructor = range.constructor.bind(range); 
      range.constructor();

      Во-первых, без new конструктор вызывать нельзя.
      Во-вторых - к чему такие сложности? - достаточно new dateRange;.


    А уж что касается общей логики данного кода и насколько он соответствует поставленной задаче (о которой вы почему-то решили умолчать, так что здесь можно было бы говорить только в предположительном ключе), то я даже пытаться думать в эту сторону не буду. Хотя несомненно, что и тут всё очень-очень плохо - раз уж вы при написании кода накосячили как только можно и как нельзя, то почему на этапе проектирования должно было быть что-то принципиально иное?

    Подскажите, как еще можно оптимизировать(зарефакторить) данный js код?

    А зачем? Лучшее, что тут можно сделать - выбросить всё на хрен и попробовать написать заново, предварительно подумав, на этот раз головой вместо задницы. Не стыдно подобный мусор показывать?

    Но окей, окей - метод createItems, например:

    • Странные непонятные числа, встречающиеся в коде - такого не надо, определяем константы, имена которых будут указывать, что это за значения:

      const MS_IN_HOUR = 3600000;
      const HOURS = 168;

    • Вместо двух циклов сделайте один - промежуточный массив dates не нужен:

      for (let i = +period.start; i < +period.end; i += MS_IN_HOUR * HOURS) {
        const date = new Date(i);

    • "Оптимизируйте" if-else-if-... - складываем нижние значения часов в массив (тоже бы неплохо определить его отдельно, дав осмысленное имя), извлекаем их используя день недели как индекс, верхнее значение получаем добавляя сколько там надо (я так понял, разница везде одинаковая между нижним и верхним):

      const hours = [ -120, 0, -24, -48, -48, -72, -96 ][date.getDay()];
      periods.push([ hours, hours + HOURS ]
        .map(n => (date.setHours(n), date.toLocaleDateString()))
        .join(' - ')
      );

    • Для обмена значениями дополнительная переменная не нужна:

      [ periods[i + a], periods[i] ] = [ periods[i], periods[i + a] ];



    Или, renderItems:

    Четыре обращения к свойству updateTime - как-то многовато, достаточно одного, чтобы запомнить значение под коротким именем:

    const ut = this.updateTime;

    Вместо отдельных элементов можно вставлять разметку:

    this.container.insertAdjacentHTML('beforeend',
      `<div>Последнее изменение: ${ut.getDate()}.${`${ut.getMonth()}`.padStart(2, 0)}</div>` +
      items.map(n => `<div>${n}</div>`).join('')
    );
    Ответ написан
    3 комментария
  • Как защититься от подменяемых http заголовков?

    Если вы отправляете на сервер какой-либо собственный заголовок, то к нему добавляется префикс HTTP_. Для примера, если вы отправляете заголовок REMOTE_ADDR, то во всех скриптах на вашем сайте этот заголовок будет доступен как $_SERVER['HTTP_REMOTE_ADDR']

    Скриншот с примером собственного заголовка с IP
    5b7d2f3810d07631980845.jpeg
    Это вывод ключей и значений массива $_SERVER. Как видно, переданный мной IP был записан в $_SERVER['HTTP_REMOTE_ADDR'], а настоящий IP записан, как полагается, в $_SERVER['REMOTE_ADDR']
    Ответ написан
    Комментировать
  • Как защититься от подменяемых http заголовков?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    читать IP не из заголовков...
    Отправить можно все что угодно.

    $_SERVER['REMOTE_ADDR'] не из заголовков берется.
    Ответ написан
    Комментировать
  • Как скрыть номер карты или счета в форме?

    @dmitryKovalskiy
    программист средней руки
    По соображениям безопасности ваши реквизиты не нужны клиенту от слова "никак".
    1) Вы подключаетесь к некому платежному сервису, сообщая ему реквизиты, на которые будут поступать деньги.
    2) Вы направляете клиента в этот платежный сервис с нужными входными параметрами.
    3) Клиент передает свои деньги платежному сервису.
    4) Платежный сервис передает деньги вам, забрав свою долю.

    На какой их этих шагов вы хотите засунуть свой номер карты или счета?
    Ответ написан
    2 комментария
  • Что не так с php?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    В первом случае не сравнение, а присваивание. В итоге в условии используется значение переменной a, которое равно 1, которое приводится к true.

    Во втором случае в первой строке вы производите сравнение, а не присваивание значения. Поэтому во второй строке у переменной $a нет значения, то есть она точно не равна 1.

    С php всё ок, проблема с вашим кодом.
    Ответ написан
    1 комментарий
  • Как оптимизировать работу PHP скриптов?

    DevMan
    @DevMan
    очевидно же: не обрабатывать данные сразу.
    получили данные -> сохранили их в файл или базу -> написали юзеру "спасибо" -> начали обрабатывать данные.
    Ответ написан
    4 комментария
  • Где добывать заказы на разработку сайтов вне фриланс-биржи?

    @Stalinko Куратор тега Фриланс
    PHP'шник и фрилансер до мозга костей
    Учите английский и учитесь уважать себя.

    1. На зарубежных биржах платят очень хорошо тем, кто реально по уровню выше среднего.
    2. Забейте на Вась, готовых работать за еду. Вы ведь лучше них (если нет, то на этом стоит прекратить обсуждение)? Состоятельные клиенты гонятся за качеством, а не низкой ценой, и отметают всех "индусов" на первом же этапе. Смело ставьте себе ставку повыше. Вполне возможно это улучшит ваши результаты.
    3. Реальная тема LinkedIn. Просто зарегайте профиль, добавьте в друзья всех своих коллег и знакомых, кто там зареган, заполните всю инфу про свои умения, и вы удивитесь как к вам сами начнут стучаться HR'ы. Иногда с довольно вкусными предложениями.
    4. StackOverflow Jobs, remote work.
    Ответ написан
  • Как отловить процесс, нагружающий систему?

    Moskus
    @Moskus
    Воспользуйтесь Process Explorer, там есть графики загрузки с историей.
    Ответ написан
    3 комментария