Задать вопрос
  • Как научиться понимать работу js в браузере?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сначала вы учите алфавит, затем учитесь читать и писать по слогам, потом уже можете читать слова целиком. Точнее, как бы воспринимать слова целиком, а не по буквам или по слогам, то есть это переход на новый уровень смысловых единиц. Дальше вы можете быстро читать, целыми предложениями. Хотя если встречается сложносочиненное/сложноподчиненное предложение, то не всегда удаётся ухватить его с первого раза. Ну а спустя годы, освоив скорочтение, вы спокойно читаете по диагонали.

    Профессиональный шахматист смотрит на доску и просто видит ходы. Причем из сотен вариантов он видит 2-3 нормальных и только над ними думает, остальные даже не замечает. И он не то чтобы просчитывал вперед, опять же он просто видит, как будет развиваться ситуация дальше. Использует ли он шахматные инструменты для анализа доски? Нет. Использует ли он какие-то учебники, которые помогают познать тайны шахматных правил? Нет. Правила просты до безобразия и можно выучить за 5 минут. А дальше только практика.

    Мы используем инструменты разработчика, в основном, для отладки. То есть, чтобы проверить ту или иную переменную или посмотреть отладочные сообщения в консоли. Там есть всякие приятные возможности, но основное - это консоль. Она помогает пощупать интерпретатор, познакомиться вплотную. Чему равно 0/0? Или typeof []? Консоль даст ответ на множество подобных вопросов. JS довольно запутанный язык, который тянет за собой кучу исторических особенностей, которые нет смысла помнить все. Но время от времени играть с интерпретатором можно для общего развития.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Делать две версии сайта - мобильную и полную.
    m.habr.com и habr.com - тому пример.
    spoiler
    max-width: 780px;
    Ответ написан
    6 комментариев
  • Возможно ли поставить иконку на сервисные рассылки смс в сообщениях iOS (Apple)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нет, это невозможно в текущей версии iOS.
    Ответ написан
    Комментировать
  • Каким образом парсят json с огромным содержимым?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    С сервера приходит JSON той структуры, которую вы ожидаете. Если это ваш сервер, то вы сами и формируете этот JSON, иначе структура описана в документации.

    Из строки получается так:
    var str = '{"x":123, "y":234, "z": [ 1, 2, 3 ] }';
    var obj = JSON.parse(str);
    obj.z[2]; // 3
    Ответ написан
    2 комментария
  • Как разместить Расширение для браузера в Сhrome.google.com/webstore/?

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

    Нужно 5$ заплатить, и дальше 20 расширений можешь опубликовать и сколько угодно раз их обновлять.

    Тебе нужна панель инструментов разработчика:
    https://chrome.google.com/webstore/developer/dashb...

    Читать доки можно начать сразу с этой странички (обязательный файл для публикации):
    https://developer.chrome.com/apps/manifest
    Ответ написан
    Комментировать
  • Как правильно изолировать код блока?

    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. Рекомендую почитать про некоторые заблуждение, а также продолжение этого опуса, прежде чем рубить с плеча. Валидация формы - дело тонкое ;)
    Ответ написан