• Доход от мобильных приложений для одиночки?

    DMGarikk
    @DMGarikk
    Lead Software Developer
    Не совсем понятно что вы хотите
    Если имеется в виду приложение по типу 'стакан с пивом на ios' году в 2008 , то да, такие времена прошли, когда типа запрограммировал софтину, откинулся на спинку кресла и получаешь 100500килобаксов в секунду и ни о чем не думаешь

    остается только ' какие-то единичные случаи, когда кто-то написал приложение, оно вдруг стало популярным и человек заработал миллионы," -- это всегда было и будет актуальным

    Или время одиночек уже ушло и заработать нормальные деньги на приложении можно только хорошей командой?

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

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    и человек заработал миллионы, в интернете не так уж много информации именно о обычных разработчиках, не топ счастливчиках

    Такие счастливчики не пишут о своих успехах и своих доходах. Деньги любят тишину.
    Ответ написан
    Комментировать
  • Как создать фильтр для значения с массивом?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const filter = (arr, conditions) =>
      arr.filter(function(item) {
        return this.every(([ k, v ]) => (Array.isArray(v) ? v : [ v ]).some(n => n.includes(item[k])));
      }, Object.entries(conditions));
    Ответ написан
    8 комментариев
  • Как оптимизировать reduce?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Массив дат можно вынести наружу, что
    1) не будет пересоздавать переменную каждый раз.
    2) сделает решение более гибким
    let a =  [
       {
          "code":"CL",
          "tnved10":"7318158100",
          "2019":"33",
          "2020":"0.00",
          "2021":"0.00"
       },
       {
          "code":"CN",
          "tnved10":"7318158100",
          "2019":"7540001.66",
          "2020":"8164813.34",
          "2021":"20980774.64"
       }]
    let b = a.reduce((acc, current) => {
      [2019, 2020, 2021].forEach(i => acc[i] += Number(current[i]))
      return acc
    }, {'2019': 0, '2020': 0, '2021': 0});
    console.log(b)


    Типа так:
    const years = [2019, 2020, 2021]
    let b = a.reduce((acc, current) => {
      years.forEach(i => acc[i] += Number(current[i]))
      return acc
    }, {'2019': 0, '2020': 0, '2021': 0});


    Можно ещё сократить, но уже в ущерб читаемости.
    Или можно убрать инициализацию начального значения аккумулятора, перенеся проверку ключа на то, что это год внутрь. Правда это несколько увеличит код внутри reduce, но сделает более гибким код.
    Ответ написан
    Комментировать
  • Как убрать последнее вхождение replace?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Точка в регулярном выражении – один из специальных символов – означает «любой 1 символ». Чтобы буквально обозначить обычную точку, надо её экранировать обратным слешем: \.

    В задаче, наверное, вовсе не нужны регулярки, тут же простая замена подстроки:
    const str = '1 августа 2022 г.';
    str.replace(' г.', '')  // "1 августа 2022"

    Если замен несколько, то вместо replace() использовать метод replaceAll()
    Ответ написан
    Комментировать
  • Как грамотно использовать this в данном коде?

    0xD34F
    @0xD34F Куратор тега JavaScript
    А лучше всего просто объяснить что бы я в итоге допер сам!

    Объясняю: включаешь голову, думаешь, гуглишь, ещё думаешь, делаешь. Вот так всё просто.
    Ответ написан
    4 комментария
  • Почему появляются теги a?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Теги не закрыты
    6309f84d0ea01054577471.png

    Если бы вы писали код нормально, а не через ж (это я про html в строках), то IDE вам бы указала на эти опечатки.

    6309fa2c3aebc861365597.png
    Ответ написан
    2 комментария
  • Почему возникает TypeError: Illegal invocation при вызове drawImage у canvas'а?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const { drawImage } = canvas.getContext('2d') as CanvasRenderingContext2D;
    
    drawImage(
      ...

    Откуда вы взяли, что методы контекста можно вызывать в отрыве от, м-м-м, КОНТЕКСТА?

    Что у вас происходит, поясняю на пальцах:

    const obj = {
      fucking_value: 666,
      fucking_method() {
        if (!this.hasOwnProperty('fucking_value')) {
          throw 'FUCK OFF';
        }
    
        console.log(this.fucking_value);
      },
    };
    
    const { fucking_method } = obj;
    fucking_method();

    Если вдруг не поняли, то...
    ...вот бы узнать - а какого хрена вы взялись за react (кстати, а при чём он здесь? да не при чём, как и ts), обладая нулевыми знаниями js?

    Ключевое слово this - бегом гуглить, разбираться, что это, зачем, к каким значениям в каких случаях даёт доступ.
    Ответ написан
    4 комментария
  • Как пишут обмен данными (сетевой движок) для компьютерных игр?

    twobomb
    @twobomb
    Какие известны хитрости, чтобы передавать меньше данных, не рискуя рассинхроном?

    Чем меньше тик рейт сервера, тем меньше данных. Одно дело динамичный шутер(батла на 130 человек), а другое дело кооп игра на 4 человек. В одних случая критичен высокий тик рейт в других нет. Хотя... умереть в батле через секунду после того как ты забежал за стену благое дело...
    Какие рассинхроны не критичны?

    Опять зависит от игры.
    В каком порядке происходит проигрывание на сервере того, что на клиенте было сделано, и как клиенты-друзья воспроизводят действия?

    Ну почитайте какие нибудь статьи вот например на хабре
    Мультиплеер в быстрых играх (части I, II)
    Мультиплеер в быстрых играх (Часть III: появление ...
    Мультиплеер в быстрых играх (Часть IV: Хэдшот! Пут...

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

    делал как-то движок для не-экшн механики. Команд было мало: нужно успеть сделать правильный выбор за ограниченное время. Консолидировать результаты.

    Сервер принимает сообщения от игроков. Некоторые тут же форвардит остальным подключённым к нему. Некоторые вызывают серверное событие, и уже оно рассылает всем какое-то сообщение.

    Т.к. один серв держит ограниченное число подключений (около 30 тыс в нашем случае), серверов несколько. Каждый напрямую отвечает за подключённых к нему игроков. И идёт меж-нодовая коммуникация: каждая нода шлёт остальным, например, сообщение для всех подключённых игроков. Или в конце консолидируется счёт и рейтинг.

    С зажатой клавишей, наверное, достаточно события нажатия, и события снятия. Вычисление позиции на карте при таком управлении не тяжёлая вычислительная задача – можно параллельно считать на сервере, наверное. Раз в пару секунд синхронизируя координаты между сервером и игроком.

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

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

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Дело в том, что ТЗ нет ;( Говорят, не успели составить, делай как хочешь, мы тебе доверяем

    serge_lutens, ну удачи, что-ли. Ну и терпения выслушивать реплики вроде:
    • Чет мне не очень нравится компоновка/цветовая гамма/что-угодно, можешь поменять?
    • Я тут к конкурентам зашел, у них в мобильной версии такой прикольный слайдер, которым можно свайпами управлять, может добавишь?
    • А может вообще мобильное приложение написать?

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Какой-то странный ответ выбран решением.
    По количеству "фич" SQLite может поспорить со многими "настоящими" базами данных. Я уверен, что автор этого заявления не знает и 5% фич что Sqlite, что Postgres, что mysql.
    Непонятно, за счёт чего "Postgresql конечно будет сложнее". Запросы практически те же самые, код тоже особо не изменится. Понятно, что надо будет собственно установить постгрес или там mysql, но это разовое действие, а сама работа с Postgresql ничуть не сложнее чем с sqlite.

    Главное отличие sqlite от "нормальных" баз данных не в какой-то воображаемой "простоте", а в том что она встроенная. То есть запускается вместе со скриптом, и вместе с ним же умирает. И памяти ей доступно ровно столько, сколько скрипту. Из чего следует, что индексы, хотя и могут помочь, но их приходится заново считывать в память при каждом запуске скрипта.

    В то время как классические DBMS являются постоянно висящими в памяти демонами. У которых все индексы, соответственно, тоже висят в памяти. То есть при обработке запроса система может не сделать вообще ни одного обращения к диску. За счет чего достигается огромный прирост производительности. Надо только следить за тем, чтобы хватало памяти, выделенной для индексов.
    Ответ написан
    2 комментария
  • Как написать бота отслеживающего скидки на маркетплейсах?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну что вы как дети?
    Каждый раз этот вечнозелёный вопрос обрастает гроздьями любопытных.
    Спарсить весь интернет мы хочем, а научиться пользоваться одним поисковым сервисом - не можем.
    Ответ написан
    Комментировать
  • Как сделать прозрачный фон?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    разделить блок на 2 части по строкам.
    верхний блок покрасить в желтый, а у нижнего сделать бордер желтый
    Ответ написан
    1 комментарий
  • Как вывести на фронт вёрстку из массива с первым элементом по умолчанию?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вместо невидимого элемента лучше обернуть заготовку разметки в тег <template> — из него можно забирать готовый DocumentFragment, который клонировать и наполнять данными.
    Класс невидимости убрать за ненадобностью.
    Ответ написан
    Комментировать
  • Существует ли нативный способ разделения чисел на разряды?

    REZ1DENT3
    @REZ1DENT3
    web-developer
    https://developer.mozilla.org/en-US/docs/Web/JavaS...
    // Demonstrate selected international locales
    var locales = [
      undefined,  // Your own browser
      'en-US',    // United States
      'de-DE',    // Germany
      'ru-RU',    // Russia
      'hi-IN',    // India
      'de-CH',    // Switzerland
    ];
    var n = 100000;
    var opts = { minimumFractionDigits: 2 };
    for (var i = 0; i < locales.length; i++) {
      console.log(locales[i], n.toLocaleString(locales[i], opts));
    }


    результат
    undefined '100 000,00'
    en-US 100,000.00
    de-DE 100.000,00
    ru-RU 100 000,00
    hi-IN 1,00,000.00
    de-CH 100’000.00
    Ответ написан
    Комментировать
  • Существует ли нативный способ разделения чисел на разряды?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Intl.NumberFormat

    const number = 123456.789;
    
    new Intl.NumberFormat('ru-RU').format(number);
    // "123 456,789"
    по умолчанию { style: 'decimal' }

    Но..
    new Intl.NumberFormat('ru-RU', { minimumFractionDigits: 6 })
      .format(123456.789012345);
    // "123 456,789012" - после запятой не разделяет
    Ответ написан
    Комментировать
  • Как подставить данные из динамического элемента в динамический элемент с помощью JQuery?

    0xD34F
    @0xD34F Куратор тега JavaScript
    document.querySelector('.form').addEventListener('input', e => {
      const data = Array.from(
        e.currentTarget.children,
        n => Array.from(n.querySelectorAll('input'), m => m.value)
      );
    
      document.querySelector('.total').innerText = Array
        .from(document.querySelectorAll('.row'))
        .reduce((acc, n, i) => {
          data[i].forEach((m, j) => n.children[j + 1].innerText = m);
          return acc + (data[i].at(-1) | 0);
        }, 0);
    });
    Ответ написан
    4 комментария
  • Как извлечь парные теги с помощью регулярных выражений?

    Alexandroppolus
    @Alexandroppolus
    кодир
    На исходной строке твоя регуляра дает неправильный результат - выхватывает
    <span aria-hidden="true" class="line-numbers-rows"><span></span>

    , а match.group(1) будет при этом равен <span>.
    Произвольно вложенные теги ты не обработаешь регексом при всём желании.

    Ну и помимо этого есть всякие маленькие приятности с открывающим/закрывающим тегом - он может оказаться внутри комментария, внутри значения атрибута, в CDATA, в теге script, и т.д. Эти мелочи можно закрыть регексом (очень большим регексом). А вот вложенные теги - нет.
    Ответ написан
    1 комментарий