Задать вопрос
  • Стоит ли Vim своего внимания для frontend-разработчика?

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    1. Финансы:
    • ИП, ОКВЭД - разработка ПО и БД
    • Налогообложение - УСН плюс патент в какой-нибудь области где-нибудь в регионах (есть небольшой шанс, что могут проверить - случаи есть, хоть и мало, поэтому лучше где-нибудь рядом с местом жительства)
    • Квалифицированная электронная подпись - токен и криптопро либо виртуалка с триалом криптопро (втб раздаёт токен бесплатно - тыц, оформить, a на следующий день или через несколько закрыть счёт - с самим банком не связываться)
    • Адекватный интернет-банк с онлайн-бухгалтерией - точка или модуль, в сторону попсы типа т-, а-, сб- и прочих лучше даже не смотреть - сэкономите километры нервов и литры сока и других бодрящих веществ
    • Компания-прокси - Solar Staff, Easy Staff для получения оплаты, договор-оферта с прокси в России (как с фриланс-биржами раньше), работодателю выставляется стандартный инвойс/инвойс-договор из прокси, он его оплачивает, а на ваш счет в банке приходит перевод за вычетом комиссии прокси со счета в Российском банке - никакого валютного контроля

    Для налоговой всё прозрачно и никаких проблем. Любые вопросы и непонятки решаются с онлайн-бухгалтерией.

    Оформление со стороны работодателя - как договоритесь и зависит от местных законов. В большинстве случаев достаточно простого счёта-договора: "оплата счёта подтверждает, что работа сделана и принята".

    Если открывать ООО - это 50-100к в месяц расходов только за одного сотрудника (генерального директора), примерно 50% от ЗП в налоги и другие взносы уйдёт, прибыль с ООО выводится через родственников-ИП или дивиденты. Там вообще очень много всяких нюансов и прочего - гугл в помощь. Бухгалтерия - в интернет банке или что-то типа "Моё дело". Если не хочется самостоятельно заниматься бухгалтерией - в деле есть тариф "Премиум" с личным помощником. Либо нанять знакомого бухгалтера, который будет тыкать кнопочки в этом самом моём деле и у которого есть с ним опыт (нанимать бухгалтера со стороны - всегда риск). В сторону варианта "сэкономить на интернет бухгалтерии" не то что смотреть, даже думать не стоит.

    А вот легально получать оплату в крипте простым и прозрачным способом на текущий момент невозможно (разве что через мутные схемы с соответствующими рисками). На текущий момент только через криптоэквайринг. Росбанк уже умеет, но пока только для крупных клиентов (точно не помню, но вроде от 100 лямов оборота - узнавал у них в 23 году). Работает он через b-crypto (новость). Есть еще несколько посредников, кто тоже занимается криптоэквайрингом: например битбанкер.

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

    2. Да, свой сервер для VPN обязателен - часть международного интернета только через VPN, рунет - без него (наши тоже полмира забанили)

    3. Созвоны работают отлично - там трафик вообще ни о чём.

    4. Только избранные ООО:
    Ответ написан
    4 комментария
  • Можно ли создать оригинальную веб-игру без кодинга?

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

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

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

    ЗЫ:
    Геймплейно это буквально монополия, так что ссылку прикреплять было не обязательно и ничего оригинального в ней нет, кроме картинок и названий клеток
    Ответ написан
    Комментировать
  • Как сделать модальное окно на nextjs с помощью параллельных роутов, которое не закрывается при перезагрузке?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    How to Create Modals with Unique Routes in Next.js...
    Parallel Routes - Modals
    Parallel route modal using Next.js
    Так же, можно писать в состояние->localStorage isOpenModal, если при загрузки страницы оно true - сразу показываем окно.
    Ответ написан
    3 комментария
  • Чем отличается функция от конструктора и где применять то или это?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    зачем нужны конструкторы если можно пользоваться функциями и реализовать тот или иной код с помощью функции без надобности вызова его через new

    Да, можем. Точно так же можем записать всю программу в один файл и в одну функцию, в которой использовать простой goto. Вместо продуманной структуры классов. Как и не использовать фреймворки, стандартную библиотеку или можно для скорости работы программы писать её на ассемблере или даже машинных кодах сразу. Вместо простого и понятного кода в несколько слоёв абстракций, который понятен, легко сопровождается и позволяет не писать очередной велосипед в миллионный раз. Аналогично и с new Foo() - это просто всем понятная абстракция, говорящая "эта инструкция создаст объект такого-то класса и выполнит все необходимые инструкции для инициализации объекта". Думаю, мысль вполне ясна и детального объяснения не требует?
    Ответ написан
    Комментировать
  • Ошибка Error: EACCES: permission denied, stat '/root/.config/postcss' при сборке?

    JastaFly
    @JastaFly Автор вопроса
    Проблему решить помогло смена версий пакетов:
    "postcss": "^8.4.32",
        "postcss-loader": "^7.3.4",
        "postcss-preset-env": "^9.3.0",

    Спасибо szQocks за совет)
    Ответ написан
    Комментировать
  • Как найти циклы в массиве?

    0xD34F
    @0xD34F
    Вот говнокод:

    $result = [];
    
    foreach ($arr as $n) {
      for ($visited = []; array_key_exists($n, $arr); $visited[] = $n, $n = $arr[$n]) {
        if (($i = array_search($n, $visited)) !== false) {
          $loop = array_slice($visited, $i);
          if (empty(array_intersect(array_column($result, 0), $loop))) {
            $result[] = $loop;
          }
          break;
        }
      }
    }

    или

    $result = [];
    $visited = [];
    $iLoop = -1;
    
    foreach ($arr as $n) {
      for ($iLoop++; isset($arr[$n]); $visited[$n] = $iLoop, $n = $arr[$n]) {
        if (isset($visited[$n])) {
          if ($visited[$n] === $iLoop) {
            for ($loop = [ $m = $n ]; ($m = $arr[$m]) !== $n; $loop[] = $m) ;
            $result[] = $loop;
          }
          break;
        }
      }
    }
    Ответ написан
    Комментировать
  • Как сгруппировать массив объектов по значениям одного из свойств?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const group = (arr, key) =>
      arr.reduce((acc, n) => {
        const k = n[key];
        (acc[k] = acc[k] || []).push(n);
        return acc;
      }, {});
    
    
    const result = Object.values(group(array, 'prop'));

    UPD. Код немного осовременим (на момент публикации ответа оператор ??= отсутствовал); пусть группировать можно будет не только массивы, а любые итерируемые объекты; также добавим возможность задавать имя группы через функцию (на тот случай, если в качестве имён групп должны будут выступать значения вложенных свойств, или не непосредственно значения свойства, а производные от них - например, есть свойство, представляющее дату, а нужен месяц; или есть имя, а нужна его первая буква и т.п.); ну и ещё в качестве значений групп пусть можно будет брать не исходные значения, а что-то другое:

    function group(data, key, val = n => n) {
      const getKey = key instanceof Function ? key : n => n[key];
      const getVal = val instanceof Function ? val : n => n[val];
      const grouped = {};
    
      for (const n of data) {
        (grouped[getKey(n)] ??= []).push(getVal(n));
      }
    
      return grouped;
    }

    Теперь можно делать так:

    const groupedBySign = group([ 0, 1, 2, 3, -10, -20, -30, 0 ], Math.sign);

    Или так:

    const groupedByParity = group(Array(10).keys(), n => [ 'чётные', 'нечётные' ][n & 1]);

    Или так:

    const chars = group(
      'ABC123?!+',
      n =>
        n.toLowerCase() !== n.toUpperCase() ? 'буква' :
        Number.isInteger(+n)                ? 'цифра' :
                                              'другое'
    );

    И даже так тоже можно:

    <input name="xxx" value="69">
    <input name="xxx" value="187">
    <input name="xxx" value="666">
    <input name="yyy" value="0">

    const values = group(document.querySelectorAll('input'), 'name', 'value');

    UPD. Наконец-то дождались, и пяти лет не прошло:

    const result = Object.values(Object.groupBy(array, n => n.prop));
    Ответ написан
    1 комментарий
  • Как соединить локальный порт с сервером?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Использовать SSH туннель.
    Ответ написан
  • Как отслеживать подключение пользователей к сайту?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Какие есть способы отслеживания подключений, как это делают соцсети?
    Магии не существует. «Соцсети» просто держат флаг активности ещё несколько секунд после разрыва соединения, чтобы обработать ситуацию «обновления страницы».
    Ответ написан
    5 комментариев
  • Как сделать разные характеристики для разных категорий?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Навскидку, варианта 2:
    1. Использовать EAV;
    2. Если есть возможность переехать на Postgresql - jsonb;
    Ответ написан
    7 комментариев
  • Какой скрипт выбора страны в input для поля телефона?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    International Telephone Input, Vanilla JS, React, Vue, 7к звиздецов и последнее обновление 3 часа назад, думаю достойный вариант.
    Ответ написан
    Комментировать
  • Как убрать/запретить выделение картинки?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    не актуально
    Если картинка вообще не должна реагировать на указатель, то явно напишите это

    .your-image {
      pointer-events: none;
    }


    Или запретить выделение

    .your-image {
      user-select: none;
    }


    Или вообще полностью запретить выделение на странице

    body {
      user-select: none;
    }


    UPD. На мобилках это не выделение, а подсветка тапа.
    Обычно добавляют в стили такое правило, чтобы сделать ее прозрачной
    body {
      -webkit-tap-highlight-color: transparent;
    }
    Ответ написан
    4 комментария
  • При анимации списка сбрасывается background-attachment: fixed, как исправить?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Это вполне ожидаемое поведение. Пофиксить его, вероятно не получится (мне такие методы неизвестны). Остается два варианта.
    1. Не использовать трансформации, как предложили в комментариях. Задать position:relative и анимировать свойство top, вместо transform.
    2. Указать фон для родителя, а промежутки между сообщениями устанавливать бордером.
    Вот так:

    Ответ написан
    1 комментарий
  • Как зациклить эффект печати?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Строки сложить в массив. Завести два индекса - текущей строки и её последнего отображаемого символа. Если при увеличении количества отображаемых символов выходим за границу строки - переключаемся на следующую строку и сбрасываем счётчик символов.

    Куда, что и с какой задержкой будем печатать:

    const el = document.querySelector('p');
    const strings = [ 'hello, world!!', 'fuck the world', 'fuck everything' ];
    const delay = 100;

    Печатаем:

    function Typewriter(el, strings, delay) {
      let i = 0;
      let length = 0;
    
      return setInterval(() => {
        if (++length > strings[i].length) {
          i = -~i % strings.length;
          length = 0;
        }
    
        el.textContent = strings[i].slice(0, length);
      }, delay);
    }
    
    
    const intervalId = Typewriter(el, strings, delay);
    // хотим остановить, делаем так: clearInterval(intervalId);

    или

    function Typewriter(el, strings, delay) {
      let timeoutId = null;
    
      (function step(i, length) {
        length = -~length % -~strings[i].length;
        i = (i + !length) % strings.length;
        el.innerText = strings[i].substring(0, length);
        timeoutId = setTimeout(step, delay, i, length);
      })(0, 0);
    
      return () => clearTimeout(timeoutId);
    }
    
    
    const stop = Typewriter(el, strings, delay);
    // хотим остановить, делаем так: stop();
    Ответ написан
    1 комментарий
  • Как удалить лишнее с БД mysql имея более 7000 id, которые удалять не надо?

    @rPman
    Тебе все ответили, тут два варианта - создавать в базе inmemory таблицу с одной колонкой и без индексов, и на ее основе уже делать
    DELETE FROM A WHERE A.id NOT IN (SELECT id FROM B);


    Либо написать скрипт, который выгрузит все id из базы, сравнит их (пока чисел не миллионы, это вообще не проблема) и сформирует список id которые нужно удалить (если всего 10к то их будет всего 3к), когда на десяток строк в любом языке программирования. Так как удаляются конкретные id то такой запрос будет работать быстрее чем delete where not in и возможно быстрее использования временной таблицы. Особых ограничений на количество id в where id in (...) я не нашел, если они есть то это проблема драйвера подключения к бд.

    Есть еще третий вариант, который потребует изменения всего проекта, но заложит неплохие возможности. В базе данных нужно определить флаг - deleted (boolean), который устанавливать true если запись нужно удалить, это может быть дополнительное поле в каждой таблице где это имеет смысл, либо отдельная таблица (это эффективнее, если удаленные записи долго не нужно хранить) с единственным полем id, куда будут складываться идентификаторы записей на удаление. Естественно все запросы проекта нужно будет модифицировать с учетом этого поля/таблицы, чтобы пропускались записи, помеченные на удаление. Реальное же удаление проводить в момент наименьшей нагрузки на сервер или по другому критерию (например удаленные записи можно хранить для использования, к примеру отчетности). У метода есть подводные камни - например уникальные индексы/ограничения на другие поля нужно так же переделывать на сдвоенные с флагом удаленности, чтобы допускались записи с тем же значением что и удаленные.
    Ответ написан
    1 комментарий
  • Какие курсы по 1с программированию лучше выбрать?

    @Dementor
    программист, архитектор, аналитик
    Могу дать ответ как бывший преподаватель 1С ЦСО на сертифицированных курсах по программированию и по использованию УТ и БП.

    1. Любые курсы - это всего лишь обзоры возможностей. Это как аттракционы, чтобы быстро и сразу показать красочный результат. Если нужны фундаментальные знания, то тут только самостоятельная работа поможет. При чем нельзя верить ни ИТС, ни синтаксис-помощнику в конфигураторе - все нужно лично перепроверять! Правильный выбор курса позволит получить ускорение только на первых 10% пути.

    2. Курс - это лишь план для преподавателя. Толковый преподаватель - это залог понимания материала! Когда я сам только пришел в 1С в 2006 году, то у меня был достаточно бестолковый учитель с минимальным опытом, который плавал в терминологии и "читал по книжке" (вероятно его отправили в учителя, чтобы он смог из мидлов выйти в сеньоры). Помня про него, я свои лекции всегда насыщал множеством примеров из практики. Некоторые коммерческие курсы делают завлекающие вебинары с преподавателями, а у учебных центров 1С есть каналы на Ютубе - можно посмотреть на лекторов, на их стиль преподавания.

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

    0xD34F
    @0xD34F Куратор тега CSS
    Дефолтная ширина блока половина, а для :nth-child(odd):last-child полная. Типа так.
    Ответ написан
    Комментировать