• Как сделать так много разных иконок?

    lastuniverse
    @lastuniverse
    Ankhena, уже не хочу с Вами спорить.
    Будем считать, что эта цитата является образцом выверенного/верного комментария.

    Даже "веб безопасных" цветов 216 штук https://colorscheme.ru/web-safe-colors.html
    Причем тут радуга?
  • Как сделать так много разных иконок?

    lastuniverse
    @lastuniverse
    Ankhena, если смысл Вашего высказывания был в другом, то видимо Вы его высказали не поняв вопроса автора.
  • Какие браузеры и движки js поддерживают именованные скобочные группы в регулярных выражениях?

    lastuniverse
    @lastuniverse Автор вопроса
    подожду еще пару тройку дней, может кто еще скинет инфу по разным браузерам. После - отмечу решением.
  • Как сделать так много разных иконок?

    lastuniverse
    @lastuniverse
    Ankhena, радуга тут видимо притом, что эти 7 цветов различимы глазом без сопоставления (без размещения картинок рядом)
    Если говорить о "веб безопасных" цветах, то имеется ввиду нечто иное, нежели безопасность их перепутать. Взять например эти 2 "веб безопасных" цвета: #6633FF и #6633CC, даже если поместить рядом 2-х слоников нарисованных этими цветами, я их не отличу друг от друга.

    5bee15c564945554599085.png
  • Как на сервере протестировать клиентский js и возвратить результат?

    lastuniverse
    @lastuniverse
    как вариант через eval

    const func = "function sum(a, b) {\
    return a + b;\
    }\
    sum(2, 4)";

    const res = eval(func);
    console.log(res);
    или в песочнице

    Как выполнить javascript-код в песочнице на сервере?
    const vm = require('vm');
    
    const sandbox = { result: ""};
    vm.createContext(sandbox); // Contextify the sandbox.
    
    const code = "function sum(a, b) {\
      return a + b;\
    }\
    result = sum(2, 4)";
    vm.runInContext(code, sandbox);
    
    console.log(sandbox.result);

  • Как расчитать Big O при генерации статистики по значениям?

    lastuniverse
    @lastuniverse
    Производить расчет не раз в секунду а каждый раз при добавлении нового числа. Алгоритм примерно такой:

    1. При инициализации производим расчет статики (вычисляем максимальное число max, минимальное min, среднее значением mx, сколько всего чисел count)
    2. при каждом добавлении нового числа num пересчитываем их так (псевдокод):
    max = max<num?num:max
    min = min>num?num:min
    mx = (mx*count+num)/(count+1)
    count++

    3. при обращении за статикой выдаем рассчитанные max min mx и count
  • Не отображается русский текст в игре, что делать?

    lastuniverse
    @lastuniverse
    Надо перезаписать файл в кодировке, понятной игре. это могут быть win1251, koi8-r или utf8 (наиболее вероятна utf8)
    Так же существует вариант, в котором русские буквы вообще не поддерживаются, в таком случае самым простым вариантом будет использовать транслит.
  • Пользователи оставляют на сайте ложные заявки на покупку, как узнать IP адреса тех кто отправляет заявки?

    lastuniverse
    @lastuniverse
    1. Сделайте капчу с вопросом на который надо ввести ответ.
    2. Сделайте ограничение на количество попыток ваода.
    3. Сделайте определение бот/человек
    Как определить кто выполняет действия Бот или человек?
  • Пользователи оставляют на сайте ложные заявки на покупку, как узнать IP адреса тех кто отправляет заявки?

    lastuniverse
    @lastuniverse
    А зачем гонять ip клиента на клиент и обратно? Не проще ли сразу на сервере добавить к данным заявки ip клиента?
  • Возможно ли решить задачу без циклов?

    lastuniverse
    @lastuniverse
    Владимир Проскурин
    заранее неизвестны вложенность и количество элементов

    Ваш вариант
    [].concat.apply([], array).reduce(function (res, item) { return res + item; })

    немного не доработан:)
    он не верно обработает такой массив:
    let array = [
    	[1, 2],
    	3, 4,
    	[5, [6, 7]],
    	[8, 9, 10]
    ];
  • Как отправить форму в обработчик после ввода пароля?

    lastuniverse
    @lastuniverse
    jwwwe, ответ на этот вопрос потребует рассказать Вам про всю цепочку взаимодействия клиента и сервера. По сути Вы задали очень общий вопрос.

    В самом общем случае действуйте по следующему алгоритму (расписываю очень обобщенно, на каждом из этапов есть множество нюансов):

    1. при обращении, серверный скрипт проверяет наличие идентификатора сессии (обычно передаваемого с помощью cookies) а также наличие переданных логина и пароля
    2. если были переданы правильные логин и пароль, то серверный скрипт создает новый идентификатор сессии, привязывая к нему параметры вошедшего пользователя и отправляет назад (клиенту) страничку с контентом а также в виде cookies этот идентификатор.
    Если же был получен идентификатор сессии, то сервер смотрит есть ли такой, не прошли ли у него сроки годности (если были установлены) и если все ОК, отдает клиенту страничку с контентом
    Если же ни логин с паролем ни сейссия не действительны - отправляет клиенту страничку с просьбой ввести логин и пароль.

    Основные нюансы:
    - пароль в обязательном порядке хранить и сверять в хэшированном виде
    - настоятельно рекомендую с идентификатором сессии использовать так называемую соль/salt
    - настоятельно рекомендую делать одноразовые идентификаторы сессии. но это наложит некоторые ограничения, связанные с отправкой правильного идентификатора в случае если клиент откроет сразу несколько вкладок с вашим сайтом. Ограничения эти можно обойти, но это потребует от Вас более углубленного понимания вопроса.
    - все странички и функционал, доступ к которым не должен производится без авторизации не должны быть доступны без проверки сессии/логинапароля.
    - для сессий желательно устанавливать сроки годности а также запоминать и проверять их на сервере
    - и много чего еще.
  • Для чего var elem = options.elem; и и в чем разница и для чего в 31 строке файла JS change, и "index.html" addEventListener('change')?

    lastuniverse
    @lastuniverse
    olya_097, итак:
    1) почему когда тут меняю на false, то ничего не меняется?
    bubbles: true

    Как сказано тут, если bubbles установленно в true, то событие будет срабатывать на самом глубоко вложенном элементе, затем на его родителе, затем на родителе родителя и так далее.
    При этом у нас слушатель события change установлен только на элементе voter, поэтому меняя значение bubbles поведение не меняется, но если же мы решим добавить свои обработчики события change на дочерние элементы, то при установленом bubbles=false такие обработчики никогда не выполнятся, поэтому, чтобы дать потенциальную возможность усовершенствовать компонент в дальнейшем и перехватывать событие change на дочерних элементах мы ставим bubbles=true

    2) this.setVote = setVote; для того чтобы задать voter.setVote(5); ?

    Нет, тут речь идет о внесении функции setVote в свойства класса function Voter(options) {...}. Это позволяет в последствии обращается к ней через экземпляр класса Voter.
    var voter = new Voter(....);
      voter.setVote(....);

    Это необходимо потому, что setVote объявлена внутри функции function Voter(options) {...} и поэтому сама по себе недоступна вне области видимости этой функции.
    !!! тут имеются "странности" js :) Дело в том что объявление функции function Voter(options) {...} так же является объявлением класса Voter, а ее содержимое конструктором класса Voter.
    elem.onmousedown = function() {
    return false;
    };
    это для того, чтобы не работало выделение?

    Тут, я честно Вам признаюсь, сам не догнал для чего :)
    4) так если выводить var elem = options.elem; alert(elem); то получится div
    почему бы написать var voteElem = querySelector('.voter').querySelector('.vote');
    а не var voteElem = elem.querySelector('.vote');?

    Тут все просто, автор как бы создает "компонент", абстрагируясь от его внутренностей, поэтому в конструктор передается именно ссылка на сам компонент voter
    а уже внутри конструктора ( внутри функции function Voter(options) {...} ) просто запоминаем ссылку на основной элемент компонента var elem = options.elem;, находим ссылку на элемент vote именно этого компонента var voteElem = elem.querySelector('.vote');.
    Так тоже можно было бы сделать
    var voteElem = querySelector('.voter').querySelector('.vote');
    , но это сразу бы превратило компонент voter в одноразовый, т.е. такой компонент мог бы присутствовать на странице только в единственном экземпляре.
  • Алгоритм переворота строки как реализовать?

    lastuniverse
    @lastuniverse
    развелось плагиаторов/копипастеров. удаляюсь со своим ответом:)
  • Не отображается русский текст в игре, что делать?

    lastuniverse
    @lastuniverse
    Константин Китманов, автор увидел json и словил эффект "нашел знакомые буквы" :)
  • Алгоритм переворота строки как реализовать?

    lastuniverse
    @lastuniverse
    Михаил, Так в чем проблема?
    1. split есть во многих языках, а там где нет, к строке как к массиву можно получить доступ другими способами.
    2. на всех языках есть функция reverе для массивов
    3. ну а join тоже либо есть, либо обратное приведение типов

    PS: дабы не вводить людей в заблуждение вы бы вместо тега "javascript" поставили тег "псевдокод"
  • Что может заменить c++?

    lastuniverse
    @lastuniverse
    Денис Загаевский, давай по порядку:
    1. как ты и сказал все компилируется в машинные коды, которые в конечном результате и выполняются процессором.
    2. Сверх быстрая Java - это не что иное как виртуальная машина, которая также является скомпилированной в машинные коды прогой, которая в свою очередь также выполняется процом.
    3. все оптимизации под конкретный проц или архитектуру, которые делают компиляторы не что иное как использование особенностей проца и архитектуры для достижения оптимального результата. То есть, обладая знаниями об особенностях проца и архитектуры вполне можно провести такие оптимизации самому.
    4. остальные виды оптимизаций по большей части относятся к пере использованию ресурсов в широком смысле (это и пере использование произведенных вычислений, выполнение некоторых вычислений с необходимой точностью заранее, например если нам требуется часто считать какие нибудь затратные мат.функции, то можно пред вычислить заранее их значения с необходимой точностью и поместить в таблицу, доставая их потом из нее а не вычисляя каждый раз заново. И еще множество других видов оптимизаций). Особенностью компиляторов является то, что этот вид оптимизаций производится достаточно обобщенно. Компилятору во многих случаях не ведом извращенный ход мыслей программиста, поэтому для таких оптимизаций можно только собрать статистику использования тех или иных данных и для наиболее часто используемых сделать кэши. Программист же способен произвести такие оптимизации сколь угодно глубоко и продуманно, где то экономя память, где то вычислительный ресурс, где то написав алгоритмы предсказания, производящие пред вычисления в параллельных потоках , а также многое другое. Единственная заковырка в том что большинство компиляторов сводят такие оптимизации на нет накладывая свои оптимизации (которые в прочем можно отключить). В случае же asm программист в полной мере может выбирать что как и когда будет работать в его программе, и может добиться гораздо более производительных результатов нежели чем обобщенные оптимизации компиляторов. Тут так же следует отметить что:
    а. это конечно же большой геморр для программиста, зачастую не оправдывающий потраченных усилий
    б. для маленьких программ добиться результатов, серьезно превосходящих результаты получаемые на других ЯП достаточно проблематично.
    Но для больших программ, производящих огромное количество различных вычислений получаемый профит может быть достаточно ощутимым.

    как то так.