• Как быть с большими неразделяемыми историями в SCRUM?

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

    "Обучение игре на гитаре" - 1) тренируем пальцы 2) учим основные аккорды 3) учим конкретную мелодию. Ну или совсем банально: урок 1, урок 2, урок 3 (если есть учебник, то там это уже сделано за вас).

    "Похудеть" - аналогично. 1) Сбросить 1.5кг 2) Сбросить 1.5кг 3) Сбросить 1.5кг. Если есть этапы в методике похудения, то использовать их.

    Как сказал выше, можно отказаться от SCRUM. Надеюсь вы понимаете, что его нельзя пихать везде без разбору. Есть кейсы, где SCRUM очень плохо работает, а другой метод заходит на ура. Те же примеры с обучением и голоданием не требуют никакого скарама.

    получить историю запросов пользователей на протяжении четырех месяцев работы приложения

    Наладить сохранение истории запросов пользователей в базу. (1 день)
    Или
    Скачать и проанализировать историю запросов пользователей за последние 4 месяца. (1 день)
    Ответ написан
  • Как работать с массивом?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    https://codepen.io/anon/pen/ororVq
    Дописал к вашему js в конце немного кода.
    Ответ написан
    7 комментариев
  • Как сделать тоже самое через substring?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Легко делается:
    var c = "abcdef";
    var s = "cd";
    
    //Функция вырезает search_text из content
    function removeText(content, search_text) {
    	let found = content.indexOf(search_text); //Ищем позицию текста.
    	if (found === -1) return content; //Текст не найден, без изменений.
    	let part1 = content.substr(0,found); //Берём до совпадения.
    	let part2 = content.substr(found + search_text.length); //Берём после.
    	return part1 + part2;
    }
    
    console.log(removeText(c,s)); // "abef"

    Соответственно, в вашем случае с моей функцией будет так:
    //Вырезаем некоторый текст из content.value
    content.value = removeText(content.value, node.outerHTML);
    Ответ написан
    2 комментария
  • Github можно доверять?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нельзя.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    var arr = [1, 2, 3, 4, 2, 5];
    
    function findDuplicate(arr) {
      var obj = {};
      for(var i=0; i<arr.length; i++) {
        if (obj[arr[i]]) return arr[i];
        obj[arr[i]] = true;
      }
    }
    
    console.log('Повторяющееся число:', findDuplicate(arr));
    Ответ написан
    Комментировать
  • Как найти значение, отсутствующее в одном из массивов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    var arr1 = [1, 2, 3, 4, 5, 6, 7];
    var arr2 = [1, 2, 3,    5, 6, 7];
    
    function analyzeArrays() {
    	arr1=arr1.sort().filter(e=>e===0||e);
    	arr2=arr2.sort().filter(e=>e===0||e);
    	if (Math.abs(arr1.length-arr2.length) != 1) return console.log('Пропущено не одно число!');
    	for(let i=0; i<arr1.length; i++) {
    		if (arr1[i] == arr2[i]) continue;
    		if (arr1[i] == arr2[i+1]) return console.log('Число '+arr2[i]+' пропущено в arr1');
    		if (arr1[i+1] == arr2[i]) return console.log('Число '+arr1[i]+' пропущено в arr2');
    		return console.log('Фигня какая-то');
    	}
    	console.log('Число '+arr2[arr2.length-1]+' пропущено в arr1');
    }
    
    analyzeArrays();
    Ответ написан
    Комментировать
  • Существует ли (формула ,уравнение)для расчета времени жизни игрока?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Будем исходить из того, что серверный FPS равен 10. И все они начинают стрелять одновременно.

    Тогда за кадр игрок (a) сделает 1.17 выстрелов или 5.83 урона.
    А игрок (c), соответственно, сделает 1.67 выстрелов или 5 урона.

    Очевидно, что игрок (a) наносит урон быстрее.
    Таким образом игрок (a) за 18 кадров нанесёт урон 104.94, чтобы снести 100 здоровья игроку (b). Причем, 17 кадров не достаточно, потому что урон будет всего лишь 99.11, что меньше 100.
    За те же 18 кадров игрок (с) нанесёт лишь 90 урона, и не успеет снести все 100 единиц здоровья игрока (a).

    Не всё так просто, зависит от реализации.
    Например, банально, если урон каждый кадр округляется в меньшую сторону, то у обоих урон за кадр будет равен 5.
    Поэтому может получиться так, что все умрут одновременно (кроме игрока (c)).
    Либо придётся учитывать, кто раньше стрелял, ведь мы предполагаем, что оба начали стрелять одновременно, но так редко случается в реальной игре. Так что в формулу, которую вы хотите получить, придется добавить разницу во времени начала стрельбы.
    На сервере также может быть другой FPS, который обычно от 10 до 30, а иногда выходит за эти рамки, и другие правила округления, что внесёт свои правки.
    Есть пинг, лаги, они тоже вносят свои коррективы, в зависимости от, повторюсь, архитектуры и реализации.

    Далее, если у вас сложная механика и точность стрельбы падает при получении урона, то расчет сильно усложняется. Или если у всех разное оружие, которое имеет разный разброс при стрельбе. Или если оружие перегревается и меняет характеристики или просто выходит из строя (до того, как нанесёт 100 урона игроку). Может быть маленькая обойма и время на перезарядку и т.д. и т.п.

    В общем, всё сложно в реальности. А в чистой математике можно, конечно, вывести формулу, но без прочих факторов она мало поможет. Например, в вашем примере DPS практически одинаковый, поэтому всё решает то, кто первый заметит противника (ну и плюс пинг).
    Ответ написан
    Комментировать
  • Сколько можно заработать на мобильном гейм-деве?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Верхний предел заработка не ограничен. Игра может принести даже миллионы (если не миллиард) долларов. Так что ответ - много.

    Но шанс этого мал. Условно шанс, что ваша игра вообще окажется хоть сколько-нибудь прибыльной, а не убыточной - примерно 1%. Немного статистики - каждый день на мобайле публикуются около 200 игр. И это только те, что дошли до релиза и не загнулись на этапе разработки.

    Ну а если окажется, что ваша игра реально хорошая (классный USP), то дальше всё просто: нужно закупать трафик так, чтобы цена покупки пользователя была меньше, чем этот пользователь принесет денег на рекламе (или если решитесь на донат, то и это плюсуйте). И чем больше купите трафика, тем больше будет прибыль.
    Ответ написан
    1 комментарий
  • Как добавить класс элементу из значения переменной?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    element.className += ' ' + burgerClassToggle;

    P.S. Ответ легко гуглится по запросу "javascript add class". В следующий раз постарайтесь хоть немного поискать ответ самостоятельно, прежде чем задавать очевидный вопрос.
    Ответ написан
    1 комментарий
  • Как называется стиль таких картинок?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Клипарт
    Ответ написан
    Комментировать
  • VK API Acces_token, могут ли банить за использование одинаковых токенов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Да, могут.
    Подсказка
    Что случилось однажды, может и не повториться. Но что случилось два раза, наверняка случится и в третий.
    Ответ написан
  • Почему внешний скрипт JavaScript не работает?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что нужно разместить скрипт в конце файла, когда все элементы будут засчитаны:
    .....
        <script src="script.js"></script>
      </body>
    </html>

    Либо в скрипте использовать событие DOMContentLoaded, которое срабатывает в конце загрузки документа:
    Код
    var select, html;
    
    function update(bgColor, textColor) {
      html.style.backgroundColor = bgColor;
      html.style.color = textColor;
    }
    
    window.addEventListener('DOMContentLoaded', e=>{
      select = document.querySelector('select');
      html = document.querySelector('html');
      document.body.style.padding = '10px';
    
      select.onchange = function() {
        ( select.value === 'black' ) ? update('black','white') : update('white','black');
      }
    });
    Ответ написан
    Комментировать
  • Как создать .reg файл (один параметр) для Windows 10 по описанию?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Создайте параметр вручную (в редакторе).
    Потом экспортируйте ветку.
    В готовом файле можете еще раз подправить или удалить, что нужно.
    Ответ написан
    2 комментария
  • Делает ли Front-end разработчик обработчики кнопок?

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

    Ссылка может быть оформлена в виде кнопки по внешнему виду.
    В этом случае обработчика, как такового, нет. Хотя в ссылке могут быть параметры, которые обрабатываются при формировании страницы на сервере. В этом случае можно сказать, что условный обработчик находится на сервере, то есть делает Back-end разработчик.

    Однако часть логики может быть сделана на клиенте. Например, перед отправкой формы (кнопка + переход на дргую страницу) на всякий случай может быть проверка введенных данных. Конечно, на сервере эти данные нужно перепроверить, но чтобы честные пользователи не ждали долго, пока данные гоняются туда-сюда, гораздо быстрее проверить их перед отправкой и сразу выдать ответ. В этом случае обработчик делает Front-end разработчик.
    Ответ написан
    Комментировать
  • Вопрос о фреймах?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Практически не актуально. Но никто не запрещает, если вам так удобно верстать сайты.
    Ответ написан
    Комментировать
  • Можно ли скрыть форму(модальное окно) на чистом css?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Только JS.

    Вообще модальные окна - зло. Это уже не совсем веб-сайт. Если у вас полноценное приложение, с кнопками и прочим, то оно как бы полностью на JS, без вариантов. А если у вас именно сайт (веб-морда какого-то сервиса), то лучше обойтись без модальных окон. Я практически уверен, что функцию вашего модального окна можно вполне реализовать на отдельной странице. За исключением агрессивной рекламы, конечно же (что только подтверждает, что модальные окна - зло).
    Ответ написан
    7 комментариев
  • Нужно ли верстальщику знание canvas? Если да, насколько глубоко?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    А что там знать?

    Если вы хорошо знаете сам язык JavaScript, то любую задачу на canvas можно быстро решить, используя документацию или гугл. То есть можете не знать canvas (разве что вам понадобится на собеседовании). Как только появляется задача - начинаете её делать, параллельно открывая документацию. Там всё просто: линии, фигуры, шрифты, а также цвета и стили всего этого добра. И надо будет без какой-либо разметки считать координаты по придуманному вами алгоритму.
    Ответ написан
    Комментировать
  • Почему JS не выводит i в input?

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

    Вы пишите onclick="add1". Это не работает, потому что при нажатии на кнопку вычисляется выражение в кавычках. А результатом выражения "add1" является функция. Обратите внимание, не вызов функции, а просто ссылка на функцию.
    Следует писать так: onclick="add1()"

    А вообще хочу заметить, что такой способ создания обработчика слегка морально устарел. По сути он приравнивается к использованию функции eval, а это скверно, не стильно и не модно.
    Более правильный вариант убрать атрибут onclick, а в скрипте добавить обработчик примерно так:
    var button = document.querySelector("button"); //как-то получаем указатель
    button.addEventListener("click", add1); //добавляем сам обработчик

    Вторая

    Внутри функции add1 вы увеличивает глобальную переменную на единицу.
    И переменная действительно увеличивается (если первая ошибка уже исправлена).
    Однако это никак не отображается на странице.
    Потому что переменная и значение инпута - не одно и то же.
    Исправлением будет перенос операции копирования внутрь функции:
    function add1(){
      i++;
      inp1.value = i;
    }

    Вот теперь копирование будет происходит при каждом вызове функции, а не только при загрузке страницы.
    Ответ написан
    4 комментария
  • Как заставить исполняться функцию, каждые 500px прокрутки страницы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    var old = 0;
    window.addEventListener("scroll", function() {
      let now = Math.floor(window.pageYOffset / 500);
      if ( now > old ) {
        console.log("Очередные 500", now);
        old = now;
      }
    }, false);
    Ответ написан
    Комментировать
  • Как определить, что запись популярная (будет популярной в будущем)?

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