• Как правильно изолировать код блока?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Зависит от кода. И ваш пример не остановит. Просто в случае отсутствия blockEl будет null, и обращение к нему вызовет ошибку. Вариантов решения море.
    //Классика
    var blockEl = document.querySelector('.block');
    if (blockEl) {
      // .....
    }
    
    //Внутри функции
    var blockEl = document.querySelector('.block');
    if (!blockEl) return;
    
    //Обёртка
    try {
      var blockEl = document.querySelector('.block');
      // .....
    } catch(e) {}
    
    //Обманка
    var blockEl = document.querySelector('.block') || {};
    //Хитрые обманки
    var blockEl = document.querySelector('.block') || { querySelector: e=>{} };
    
    // и т.д.
    Ответ написан
    2 комментария
  • Как выполнить одну функцию после завершения другой?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вот вам вариант с промисами:
    function first(){
    	return new Promise(next=>{
    		setTimeout( function(){
    			console.log(1);
    			next('привет');
    		}, 1000 );
    	});
    }
    function second(txt){
    	console.log('После first получили:', txt);
    	console.log(2);
    }
    
    first().then(second); //Сначала first, затем second

    Теорию по промисам можно почитать здесь: https://learn.javascript.ru/promise

    Соответственно, ваш вариант с промисами будет примерно такой:
    spoiler
    function first(e){
    	console.log('start',e);
    	return new Promise(next=>{
    		console.log('promise');
    		setTimeout( function(){
    			console.log('main code... ' + Math.random());
    			next(e);
    		}, 2000 );
    	});
    }
    function second(e){
    	console.log('end '+e);
    }
    
    var arr = ['element_0', 'element_1', 'element_2', 'element_3', 'element_4'];
    
    arr.forEach(e=>first(e).then(second));
    Обратите внимание, что вся суть и работа в итоге записывается в одну строчку в конце. И получается очень красиво и логично. А весь код до этого - чисто подготовка и объявления.
    Ответ написан
    Комментировать
  • Как решить проблему с JS: Uncaught ReferenceError?

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    https://ru.wikipedia.org/wiki/Процент

    x = x * 0.9 //оставить 90%, то есть по сути отнять 10%
    x = x - 0.1 * x //от х отнять 10%

    По-всякому можно. Главное, понимать, что такое проценты по сути.
    Ответ написан
    4 комментария
  • Можно ли написать функцию, которая проверяет существует ли переменная или нет (js)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    function isExist(varName) {
    	let exist = true;
    	try { eval(varName); }
    	catch(e) { exist = false; }
    	if (exist) console.log('она существует!');
    	return exist;
    }
    
    isExist('someVar'); //false
    let someVar = 123;
    isExist('someVar'); //true
    Ответ написан
  • Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если вы имеете в виду написание ОС, исключая написание драйверов, то в обоих случаях взаимодействие с железом никакое. ОС - это набор хитрых алгоритмов для доступа к ресурсам. Игра - по сути то же самое, только подчиняется ОС, у которой власти больше, но обычно ОС предоставляет игре всё, что только можно (кроме системных файлов разве что).

    В системном программировании больше упор на совместимость, баги не допустимы, особенно критические, потому что ставят под удар персональные данные, номера карт и т.д. В геймдеве же упор на скорость, если игра "крутая", как говорится, с переизбытком графики, отдельных объектов и мозгов у npc. Баги считаются нормой (к сожалению) и просто фиксятся по мере накопления жалоб, а порой на них даже забивают.

    Если игра не очень нагруженная, то нет смысла для неё использовать Си. Вообще. Потому что на первый план выступают уже другие вещи, такие как геймплей и контент. А также маркетинг. И это уже тёмная область для программиста, который с геймдевом не имел дела до этого. Это очень обширная область, в которую нужно входить отдельно и с пониманием, что от идеи до реализации - как до луны. Ведь для ОС есть конкретные требования, что она должна уметь (с чем должна быть совместима). А для игры требований нет - полная свобода, что сделаете, то и будет, то есть это искусство. И без опыта надеяться, что игра себя окупит, очень наивно. Игра требует широкого набора навыков, не только в программировании, и не рекомендуется делать в одиночку, потому что не будет профита от разделения труда (т.е. придётся много учиться). А в случае с ОС всё упирается просто во время реализации, которое, очевидно, долгое. В обоих случаях с друзьями веселее, что немаловажно.

    Если дело касается низкоуровневого программирования, то это по сути означает выполнение несвойственной программисту задачи, потому что тонкости оптимизации лучше перенести в написание драйверов. А в начале своего опуса я специально исключил эту тему. Но иногда приходится, да. Собственно, первые игры по сути были основаны на базе самописных движков, после чего и началась вся движуха с ускорением графики. Но сегодня есть всякие directx opengl vulkan, а над ними куча более сложных игровых движков, так что нет смысла изобретать велосипед.

    Насчёт Си в целом я бы усомнился на самом деле. В наши дни очевидны некоторые недостатки Си и С++. Эти языки будут ещё долго существовать, потому что за ними тянется большой багаж, и нужно много чего старого поддерживать. Главная фича С\С++ - это скорость работы готовой программы. Но нынче новые языки метят в лидеры по простоте, удобству, защищенности и скорости компиляции. И некоторым уже несколько лет. То ли еще будет. Думаю, однажды Си даже в НАСА отдаст пальму первенства другому языку.
    Ответ написан
    4 комментария
  • Можно ли как то бороться с одинаковыми по написанию символами латиницы и кириллицы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нужно набрать в гугле "поиск кириллицы".
    Ваш Кэп.

    UPD
    Мда, я думал вам нужно просто в тексте увидеть визуально) Не правильно понял вопрос.

    База - это уже слишком, имхо. Ну т.е. если она не меняется, то ладно, а если каждый раз пополняется, то сегодняшняя и вчерашняя функции могут давать разные результаты, и нужно будет заново перепарсивать старые данные. Разве что нужно исправлять опечатки, но это уже более крутая задача, чем в вопросе.

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

    Тип символов. Каждому символу ставим в соответствие число, которое означает русскость от 0 до 1. Например, Б = 1, i = 0, T = 0.5, то есть три варианта. Хотя я бы сделал исключение для пары символов Р = 0.4 и Х = 0.3. Вряд ли самолёт назовут Х320 (буква ха, хз как это звучать будет). Но это может вызвать казусы, так что решать вам. Хотя можно два массива придумать для разных случаев, но это уже сложно для понимания.

    1) Считаем средний вес символа в слове. Тут всё очевидно. Но если 0.5, то не спешим округлять, а переходим к п.2

    2) Когда вес 0.5, смотрим на предыдущее слово, если вы уверены, что это часть названия. Например, оно с большой буквы (если вы парсите цельный текст). Если у предыдущего слова вес тоже был 0.5, то тогда уже округляете текущее слово в определенную сторону.

    3) Соответственно, если три и более слова в названии, то тоже их учитываете по цепочке.

    4) Если заранее можно выделить название и быть уверенным, что все слова - его части, то можно посчитать среднюю температуру по больнице. И на её основе делать выводы о каждом слове, у которого вес 0.5.
    То есть название
    Аве Maria T100 считаем так: первое слово вес 0.66, второе слово вес 0.3, проблемы нет, а вот третье слово вес 0.5 - проблемка. Считаем среднюю по всему названию, выходит 0.44, то есть вывод, что Т - английская.

    Хотя если присмотреться, то здесь вообще хорошо бы заменить Аве на Ave, но, как писал выше, это уже другая задача. Но напишу немного про неё. Я бы на вашем месте просто делал бы русский вариант и соответствующую ему латиницу и заносил бы в базу и считал. В случае, если оба названия после приведение встречаются по 1 разу, то есть где-то привели как Аве Мария, а где-то Ave Maria, то парсер вам сигналит ошибкой, а вы уже смотрите своими глазами на название и заносите его в исключение, чтобы везде было одинаково. Также есть опечатки типа AirBus - аналогично в базу, только преобразования по регистру, и вариантов больше - все возможные комбинации, из которых для ошибки достаточно накопить два разных варианта.
    Ответ написан
    7 комментариев
  • Прием платежей на сайте в USD/Euro, будучи физ.лицом в России?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    AliExpress
    spoiler
    По итогам сделки совладельцами СП AliExpress Russia станут Alibaba Group (48%), "Мегафон" (24%), Mail.Ru Group (15%) и РФПИ (13%).
    Ответ написан
    Комментировать
  • Использование операторов rest/spread и деструктуризации при передачи параметров в функцию?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    //В лоб проще и короче. Ещё и умную валидацию можно прикрутить при желании
    function anyFunc(options){
      // тут что то делаем обращаясь к параметрам через options.keyName.
      // например:
      const text = anyFormat(options.data, options.format || {});
      anySave((options.path||"./temp") + "/" + (options.file||"plt_temp_data.txt"), text);
    }
    
    //Аналогично
    function anyFormat(data, format) {
      // ...... (format.fixed || 2) ........ (format.space || "  ") ...... и т.п.
    }
    Ответ написан
    3 комментария
  • Как удалить пустые сроки?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    str.replace(/\r?\n[ \t]*(?=\r?\n)/g, '')
    Удаляет пустые строки с пробелами.

    UPD:
    str.replace(/(\r?\n)\s*(?=\r?\n)(?=[^\s]+?|$)/g, '$1');
    Ответ написан
  • Как сделать select из столбца от клетки которая содержит дату в другой ячейке с датой?

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

    Если диапазон переменной длины, и вы хотите, чтобы выпадающий список определял её автоматически, то это сложнее. Решение в лоб такое: нужно выделить отдельный столбец исключительно под пункты списка. Либо выделить достаточно большое место под пункты. Этот отдельный столбец заполняется формулами, которые как бы вырезают кусок данных из исходного столбца между дат. Но формулы получатся громоздкие. Ведь надо найти дату одну, другую, перевести в номера строк, сопоставить с номерами строк в новым столбце, и эта формула должна быть в каждой ячейке нового столбца. Ну а дальше просто указываете новый столбец в свойствах выпадающего списка. Пустые ячейки в списке не появятся.

    Хардкорный вариант - использовать Google Scripts. Сделайте свою функцию на JavaScript, которая ищет даты и возвращает все ячейки между ними. Правда, отдельный столбец всё равно понадобится. Кстати, это самое красивое решение будет. Но при изменении исходных данных, список будет пересчитываться каждый раз 1-2 секунды.
    Ответ написан
    Комментировать
  • Как установить кодировку в JS файле?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Кодировка зависит от редактора, в котором вы создали app.js.

    Обычно в редакторе при сохранении файла можно указать и кодировку. Либо при создании (или во время редактирования) указывается кодировка и становится как бы свойством файла.
    Ответ написан
  • Какие есть игровые движки или библиотеки для разработки игр на Си?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    https://en.wikipedia.org/wiki/List_of_game_engines

    В колонке Primary Programming language указан язык, на котором предполагается разрабатывать игру. Вот это вам и нужно. Если вам нужен чистый Си, то смотрите на значения C/C++ и C.

    В колонке Scripting указан дополнительный язык для скриптов, если есть. Например, для Moai SDK основной язык C++, а вспомогательный для скриптов - Lua. Пример игры на Moai - Don't Starve. Точнее, разработчики игры взяли этот движок за основу, сильно переделали и допилили его под себя (его исходные коды открыты), и потом уже использовали для создания игры. Хотя в процессе создания продолжали допиливать.
    Ответ написан
    Комментировать
  • Найти уравнение по множеству решений?

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

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

    Но даже гений вряд ли придумает уравнение для чего-то подобного:
    spoiler
    5cd4cf247bea9259111395.png
    Ответ написан
  • Как сделать регулярку - 1 или больше символов потом пробел, а потом опять 1 или больше символов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если возможные случайные пробелы чистятся на сервере, то:
    var validateName = /^\s*[a-zA-Zа-яА-ЯёЁ]+\s+[a-zA-Zа-яА-ЯёЁ]+\s*$/;

    \s означает любой пробельный символ (пробел, знак табуляции и т.д.)
    \s+ означает 1 и более пробельных символов.
    \s* означает 0 и более пробельных символов.

    Если есть желание почистить форму от случайных пробелов до отправки, или даже во время редактирования, то ещё это:
    value = value.trim().replace(/\s+/g, ' '); //перед отправкой

    P.S. Рекомендую почитать про некоторые заблуждение, а также продолжение этого опуса, прежде чем рубить с плеча. Валидация формы - дело тонкое ;)
    Ответ написан
  • Почему окно не реагирует на действия?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Боюсь, что вам придётся потерять 6 часов работы. Фатальную ошибку приложения практически никак нельзя исправить без перезагрузки приложения. А вы исправить даже не можете, вы же не разработчик, вам доступен только перезапуск.

    У меня такое иногда бывает в Chrome при загрузке картинки. Как раз открывается окно выбора файла, а дальше браузер просто зависает, ничего нельзя сделать. В самом окне загрузки файла даже не происходит сортировка, хотя обычно она происходит сразу после открытия окна. Только в этом году (2019) такое стало происходить. Раньше не было такого. Похоже, что это болезнь ОС (у меня Windows 7 x64 максимальная). Хотя ещё есть гипотетический вариант, что это вирус, и он у нас с вами одинаковый.

    Вывод и урок: чаще сохраняться, включить автосохранения (есть есть), настроить облако, и вообще быть готовым к тому, что вам в любой момент отключат электричество, аккумулятор ноута взорвется, или комп задымится и его нужно будет выдернуть из розетки.
    Ответ написан
    Комментировать
  • Ошибка Cannot set property 'onclick' of null?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    let selectAllButton = document.querySelector('.btn_done');
    
    if (!selectAllButton) {
    	alert('Реально fuck');
    	alert('Подождём чуть');
    	setTimeout(e=>{
    		let selectAllButton = document.querySelector('.btn_done');
    		if (!selectAllButton) alert('Не, ну я так не играю. Что за нах?');
    		else alert('А щас норм. Странно.');
    	}, 1000);
    } else {
      selectAllButton.onclick = function(){
        alert('Норм');
      };
    }
    Ответ написан
  • Как включить полностью автоматические обновления игр в Steam?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Steam -> Настройки -> Загрузки
    spoiler
    5cd3e161d6c79608185060.png

    Свойства конкретной игры -> Обновления
    spoiler
    5cd3e1a847592749191724.png
    В списке игр будет как-то так выглядеть:
    5cd3e21a8479d747596750.pngИ никогда не обновляться. Ну, пока не запустите.
    Ответ написан
    Комментировать
  • Безопасна ли мобильная точка доступа и как её можно обезопасить?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нет.
    Не безопасна.
    Уязвимости находят периодически, исправляют, но какие-то ещё не нашли, и они продолжают существовать и ждать своего часа.
    Устранить уязвимости полностью практически нельзя в наши дни.
    Правильное решение было бы - использовать качественное ПО. Только где его найти? Пока что с этим проблемы. Думаю, весь 21-й век будет состоять из переработки старого и создания нового ПО на новом уровне, так что программисты не останутся без работы.
    Лайтовое решение - всегда загружать последние обновления для телефона, надёжный пароль и т.д.
    Ответ написан
    Комментировать