• Кто-нибудь может подсказать хорошие курсы по системному администрированию?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Системный администратор должен уметь находить и читать документацию.
    Любую, какая понадобится.
    Это всё.

    В остальном, чем больше общий багаж ИТ, тем лучше, даже программирование зайдёт. Хотя основное, конечно, это сети.
    Ответ написан
    Комментировать
  • Почему многие отвечают в комментариях под вопросом, вместо написания отдельного ответа?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Отвечающие сомневаются в своих высказываниях или вообще не считают их за ответ.

    Можно копнуть глубже и подумать о том, что, возможно, отвечающий получит какой-то негатив, если его ответ не будет отмечен решением. А написать в секции комментариев как бы безопасно и не так обидно. Но это отдельная сложная тема.
    Ответ написан
    5 комментариев
  • Как научиться понимать английский язык на слух? Это вообще возможно?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Практика.

    Если письмо освоено, то слушайте фильмы с английскими субтитрами, и со временем разовьётся навык понимания на слух.
    Ответ написан
    Комментировать
  • Как заменить символы в Json при помощи JS?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Хранить в БД числа, а не строки.

    P.S. В JavaScript можно конвертировать разными способами. Например, так:
    arr[0].min -= 0;
    arr[1].min -= 0;
    Ответ написан
    Комментировать
  • Почему код возвращает пустой объект?

    dollar
    @dollar Автор вопроса
    Делай добро и бросай его в воду.
    у оператора доступа к свойству приоритет выше
    Ответ написан
    Комментировать
  • Что такое синхронный и асинхронный код?

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

    Асинхронный код делает паузу и передает управление дальше, но точка останова запоминается и управление к ней возвращается в будущем при каком-то условии. Например, таймер или событие. Таким образом, процесс не висит. Более того, ниже могут быть инициализированы какие-то переменные, которые нужны для выполнения асинхронного кода, а пока этот код нельзя выполнять.
    Ответ написан
  • Как можно из получившейся строки вырезать слово (например)“легким”, в этом же слове заменить 2 последние буквы на букву “о”?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Из получившейся строки вырезать слово “легким”, в этом же слове заменить 2 последние буквы на букву “о”

    Странное задание.
    var str = 'урок-3-был слишком легким';
    var word = 'легким';
    str = str.replace(word, ''); // 'урок-3-был слишком '
    word = word.replace(/.{2}$/, 'о'); // 'легко'
    Ответ написан
    1 комментарий
  • Как решить проблему с GitHub чего делать?

    dollar
    @dollar Куратор тега Lua
    Делай добро и бросай его в воду.
    Залейте через веб-интерфейс.
    Или заранее переведите в UTF-8.
    Ответ написан
  • Как понять трактовку задания?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Способ хранения такой есть.

    https://ru.wikipedia.org/wiki/Двоичное_дерево_поиска

    Где-то в задании у вас должно быть пояснение, зачем вам это надо. То есть другие пукнты задания - это поиск и сортировка.
    Ответ написан
    3 комментария
  • Память расширения растёт. Куда копать?

    dollar
    @dollar Автор вопроса
    Делай добро и бросай его в воду.
    А ларчик просто открывался.
    Решение

    С расширением всё нормально. Но самом деле потребление прыгает, но оно всегда не выше 50МБ.
    Проблема была в том, что инструменты разработчика кэшируют всё, что только можно - вывод консоли, сетевые соединения, тела принятых ответов с сервера через ajax и прочее. И вот эти тела и составляли основную как бы "утечку" памяти.
    То есть нужно закрыть консоль, перезагрузить расширение, - и нет проблем с якобы утечкой.
    Ответ написан
    Комментировать
  • Как сделать чтобы посетитель мог отправить заявку с сайта только один раз?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если пользователь анонимный, то куки. Можно ещё всякие отпечатки браузера использовать.

    Если авторизованный, то нужно сделать отдельное поле в базе данных, где и помечать, что пользователь уже отправил форму, а точнее дату отправки, чтобы сравнивать её с текущей каждый раз.
    Ответ написан
    Комментировать
  • Как разложить js массив состоящий из ID на индексы, индексы засунуть в input в блок относящийся к ID?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сложность именно в написании вложенных циклов который пройдётся по массиву соберёт индексы, следующим циклом переберёт элементы сопоставит с результатом первого цикла if 132=132 и запишет в инпут index у которого родитель с id 132

    Думаю, всё решается в два этапа.

    Первый этап - массив с индексами превращаем в объект с ключами. Ведь каждый раз искать элемент в массиве не красиво. А поиск по ключу (или хешу) - наше всё. Ну, можно ещё массив с индексами сделать, но это дело вкуса.
    var obj = {};
    sort_id.forEach(id=>{
      obj[id] = true;
    });


    Второй этап - перебираем все li и проверяем условия. Применяем какой-нибудь селектор - и дело в шляпе.
    var arr = document.querySelectorAll('li[data-id]');
    arr.forEach(li=>{
      let id = li.dataset.id;
      if (obj[id]) { //Нашли id в массиве sort_id
        //Что-то делаем. У нас есть всё: id и соответствующий li. Что ещё надо?
      }
    });

    3 дня вожусь с этим.

    Ответ написан за 10 минут. :)
    Ответ написан
    9 комментариев
  • Какую библиотеку использовать для парсинга url со стороны клиента?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Регулярные выражения вам вполне подойдут. Никакой библиотеки не надо.
    Ответ написан
    Комментировать
  • В чём заключается утечка памяти в коде?

    dollar
    @dollar Автор вопроса
    Делай добро и бросай его в воду.
    Проблема оказалась гораздо глубже. А именно - в движке V8.
    То есть она касается только Chrome и Node js.
    Копать пришлось долго. И проблема ещё не решена, предстоит изучить этот баг и обойти его во всех местах программы (а их очень много).

    В вопросе мало данных, за это прошу прощения.

    И профилировщиком сложно пользоваться, так как GC чистит память с большими задержками. Графикам нельзя верить.
    Ответ написан
  • Как научиться адаптировать сайты с позиции дизайна? Что почитать по этому поводу?

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

    Или берите деньги за мобильный макет, и делайте его сами.

    Или можно вообще не заморачиваться, ведь смартфон вполне скушает десктопный сайт. Ну, придется позумить немного, но что поделать, если на мобильную версию средств не выделили.
    Ответ написан
    Комментировать
  • Как организовать select для JSON?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не делать циклических ссылок
    var data = {
    	types: {
    		type_1: {
    			max_speed: 300
    		},
    		type_2: {
    			max_speed: 260
    		}
    	},
    	TC: {
    		transport_1: {
    			color: "red",
    			type: "type_2"
    		},
    		transport_2: {
    			color: "blue",
    			type: "type_1"
    		}
    	}
    }
    
    var tc = data.TC.transport_1;
    console.log("Car:", tc.color); //red
    console.log("Speed:", data.types[tc.type].max_speed); //260
    Тогда и в JSON проблем не будем
    {
    	"types": {
    		"type_1": {
    			"max_speed": 300
    		},
    		"type_2": {
    			"max_speed": 260
    		}
    	},
    	"TC": {
    		"transport_1": {
    			"color": "red",
    			"type": "type_2"
    		},
    		"transport_2": {
    			"color": "blue",
    			"type": "type_1"
    		}
    	}
    }
    Равно как и в PHP при работе с JSON
    Ответ написан
    3 комментария
  • Как отобразить таблицу в 1000 строк как можно быстрее?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    1) Сначала перевести данные из таблицы в переменные JS.
    2) Саму исходную таблицу убрать.
    3) Формировать на основе данных всё, что вам нужно - пагинацию, поиск, сортировку.
    4) Любой осмысленный клик сопровождается перерисовкой 25 строк таблицы.

    Вообще странно, что вся таблица сразу подгружается. Обычно аяксом по частям. Ну хотя 1000 строк - не так уж и много.
    Ответ написан
    Комментировать
  • Как происходит создание переменных в Си?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    По классике локальные переменные создаются на стеке. То есть там же, куда кладутся параметры функции. А после выхода из функции указатель стека возвращается на прежнее место, как бы освобождая память. Но это не настоящее выделение памяти, то есть она выделяется не из кучи, а гораздо быстрее. И также быстро освобождается.

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

    Всякую там оптимизацию и отладочную информацию обычно можно настраивать.
    Ответ написан
    Комментировать
  • Возможно ли поймать событие загрузки элемента?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Примерно так:
    let style = document.createElement('style');
    style.innerHTML = `
    div {
    	animation-name: nodeReady;
    	animation-duration: 0.001s;
    }
    
    @keyframes nodeReady {  
    	from { clip: rect(1px, auto, auto, auto); }
    	to { clip: rect(0px, auto, auto, auto); }  
    }
    `;
    document.head.appendChild(style);
    
    document.addEventListener("animationstart", function(e) {
    	if (e.animationName == "nodeReady") {
    		if (e.target.innerHTML.trim() == 'привет') e.target.innerHTML = 'Пока';
    	}
    }, false);

    По стилям там сами смотрите. Если у вас есть class, например, можно вместо div его указать:
    .mydiv {
    	animation-name: nodeReady;
    	animation-duration: 0.001s;
    }

    Если вы инжектитесь из расширения, то у вас не будет ни элемента head, ни body. Придётся использовать какой-то такой костыль:
    document.children[0].appendChild(style);
    Ответ написан
    Комментировать
  • Актуален ли IE11 в 2019м?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Это примерно 3-5% пользователей.
    Они вам критичны?

    Полная кроссплатформенность быть не может, потому что придется учесть все старые браузеры вплоть до прошлого века. Определитесь, кем вы готовы пожертвовать, то есть начиная с каких версий текущих браузеров вам нужна поддержка.

    В любом случае вы можете сделать небольшую проверку в начале (отдельным скриптом):
    try{ eval("let x"); alert("ES6+"); } catch(e) { alert("ES5-"); }

    Естественно, вместо alert'ов нужны ваши варианты действий. Например, редирект с просьбой проапгрейдиться.
    Ответ написан