Задать вопрос
  • Какой формат (с изменениями) эффективнее хранится в Git?

    Хочется, чтобы при небольших изменениях контента в Git-репозитории тоже были небольшие (по размеру) изменения.

    Атомарная единица версионирования в Git - это файл. Изменения в разных файлах никогда не приводят к конфликту на уровне Git (это может быть конфликт на уровне структуры самого приложения, но Гита это вообще никак не касается). Изменения в одном и том же файле в разных ветках приводят к конфликту в момент слияния, который Гит может иногда разрулить сам, например если файл текстовый и изменения далеко друг от друга, а может и не разрулить.

    Если вы хотите какие-то элементы данных рассматривать независимо (например страницы Вики), кладите их в разные файлы, желательно текстовые.

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

    Хорошо, допустим, я подключил один пк к порту 3000, а что если пк 2, 4, 100, 500 000?

    А кто вам вообще сказал, что для нового подключения нужен новый порт?
    Поучите матчасть, ну хотя бы тут.
    Вот выдержка - ответ на ваш вопрос:
    Connections are uniquely identified by the OS by the following 5-tuple: (local-IP, local-port, remote-IP, remote-port, protocol). If any element in the tuple is different, then this is a completely independent connection.

    When a client connects to a server, it picks a random, unused high-order source port. This way, a single client can have up to ~64k connections to the server for the same destination port.


    Переводя на русский, за счёт того что КЛИЕНТ при подключении выбирает рандомный порт-источник, каждый клиент может поднять около 64к соединений (по количеству свободных портов на КЛИЕНТЕ) на ОДНУ И ТУ ЖЕ пару ip:порт.

    Проблемы, которую вы выдумали, не существует.
    Ответ написан
  • Как осуществить ленивую загрузку js файлов?

    Для этого придумали динамический import. Либо пользуйтесь им нативно (если ваша среда исполнения это позволяет), либо пропускайте это через бандлер. Пример для вебпака.
    Ответ написан
    Комментировать
  • Как правильно находить готовые коды, плагины на разных языках?

    Ответ на ваше уточнение.
    а соединять куски программ или целеком в зависимости от ТЗ уже кем то написаные?

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

    я думаю должно быть достаточно много хорошего кода... в открытом доступе.

    Ну да, его много. Это всё - библиотеки.

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

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

    Существует много готовых кодов, частей программ или целиком

    Вам нужно понять, что фрагмент готового кода, особенно если он достаточно крупный (не 10 строк, а, допустим, 10 тысяч строк) ценен тогда, когда у него есть хорошо описанный интерфейс (API) и хорошо поставленные требования к нему, который этот код выполняет. Это всё и есть часть определения понятия "библиотека".
    А если у вас в распоряжении трёхстраничный gist на гитхабе, то фиг вы его куда прикрутите, пока не разберётесь, что там написано. А с учётом того, что идеально этот кусок кода всё равно вам не подойдёт, то ещё и выяснится, что проще с нуля написать.
    Ответ написан
    1 комментарий
  • Почему npm i устанавливает ненужные пакеты?

    Вы про транзитивные зависимости что-нибудь слышали?
    А конкретно у вас транзитивно устанавливается node-sass, который написан на C++ , и мало ли что там ему нужно для сборки.

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

    Вам бы сначала выяснить с помощью npm list --depth=10, кто к вам притащил node-sass, т.к. он вроде задиприкейчен уже.
    Ответ написан
    2 комментария
  • Почему при выводе массива в консоль пишется что-то странное?

    Nipheris
    @Nipheris Куратор тега C++
    Array-to-pointer decay.
    There is an implicit conversion from lvalues and rvalues of array type to rvalues of pointer type: it constructs a pointer to the first element of an array. This conversion is used whenever arrays appear in context where arrays are not expected, but pointers are:
    ...

    Ваш массив неявно сконвертился к указателю на int, т.к. оператор << класса std::ostream массивы выводить не умеет, а вот указатели - вполне себе.
    Ответ написан
    Комментировать
  • Как исправить проблему с неоднозначностью?

    Nipheris
    @Nipheris Куратор тега C++
    Virtual inheritance
    struct IInitSystem : virtual IEcsSystem {
      virtual void Init(void) { std::cout << "Init" << std::endl; }
    };
    
    struct IRunSystem : virtual IEcsSystem {
      virtual void Run(void) { std::cout << "Run" << std::endl; }
    };
    Ответ написан
    Комментировать
  • Зачем мне универсальный класс, если в методе я могу указать родительский класс?

    Nipheris
    @Nipheris Куратор тега C#
    Если под "универсальным классом" вы имеете в виду класс-дженерик, то почитайте про параметрический полиморфизм и полиморфизм через подтипы. Параметрический полиморфизм в контексте C# это про дженерики, полиморфизм через подтипы - это о вашем "указать родительский класс".

    Это сильно разные механизмы, и чтобы понять разницу, попробуйте реализовать какой-нибудь List или Dictionary без использования дженериков, как предлагает вам Василий Банников , и как было в .NET 1.1 (о боги, это было как будто позавчера), до появления обобщённых типов. И увидите, как теряется типобезопасность и сколько нужно кастить туда-сюда.
    Ответ написан
    Комментировать
  • Как сделать push от своего аккаунта Git так, чтобы было видно имя другого пользователя?

    Какая разница с какого аккаунта вы делаете пуш? Вы можете закоммитить от одного пользователя, а запушить совершенно от другого. Собственно при коммите вы указываете почту и своё имя (можно даже отдельно указать имя и почту автора от имени и почты коммитера), а как эти почта связаны с акком на гитхабе, это вы настраиваете на самом гитхабе. При пуше вы аутентифицируетесь в гитхабе, поэтому и указываете акк гитхаба. Но запушить вы можете коммиты хоть с сотней разных почт/имён.
    Ответ написан
    Комментировать
  • Как отслеживать время у объектов в базе данных?

    node-schedule
    При запуске сервиса просто взводите все джобы, которые у вас есть в базе. Если их очень много, группируйте по времени срабатывания. Ну или можно действительно делать выборку только за сегодняшний день, каждые несколько часов, нужно подобрать параметры в зависимости от задачи и нагрузки.

    Или вот ещё планировщик есть: Bree
    Ответ написан
    Комментировать
  • Как корректно воспользоваться регулярным выражением?

    Nipheris
    @Nipheris Куратор тега C#
    using System;
    using System.Text.RegularExpressions;
    					
    public class Program
    {
    	public static void Main()
    	{
    		string data = "some text *text* ok *text* hello **world*";
    		// Надо, чтобы стало "some text **text** ok **text** hello ***world**"
    		string pattern = @"(?:[*])([^*].*?)(?:[*])";
    		var regex = new Regex(pattern);
    		var result = regex.Replace(data, m => $"*{m.Value}*");
    		Console.WriteLine(result);
    	}
    }

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

    Nipheris
    @Nipheris Куратор тега C++
    Если скобки бывают разного вида, то понадобится стек: https://www.geeksforgeeks.org/check-for-balanced-p...
    Ответ написан
    Комментировать
  • Как сделать бесшовный деплой с помощью github actions?

    Начните с концепции сине-зелёного деплоя. В принципе идея достаточно прозрачна, один из простейших вариантов реализации вам уже предложил VoidVolker . Достаточно ли вам такого варианта - зависит от приложения. Если у вас будет какой-то более-менее сложный бэк - нужно будет проработать более комплексное переключение. Хотя бы роутинг между двумя контейнерами с разными запущенными версиями сервиса (старой и новой).
    Ответ написан
    Комментировать
  • Как конвертировать все найденные unicode последовательности чтобы он отображался в терминале?

    Если есть 100%-ная уверенность, что во входной строке не будет НЕзаэкранированного юникода, и вообще все символы будут в Latin-1, то можно так:
    print(s.encode('latin-1').decode('unicode_escape'))
    Ответ написан
    Комментировать
  • Почему программа вообще заходит в цикл и почему тут же завершается при присваивании?

    Ответ для C++
    Не указав инициализатора при объявлении переменной num, вы используете default initialization. Почему? Смотрим по ссылке:
    Default initialization is performed in three situations:
    1) when a variable with automatic, static, or thread-local storage duration is declared with no initializer;

    Это как раз ваш случай.

    Далее:
    The effects of default initialization are:
    ......
    otherwise, no initialization is performed: the objects with automatic storage duration (and their subobjects) contain indeterminate values.

    Итого, согласно третьему описанному случаю, ваша переменная num содержит неопределённое значение (indeterminate value).

    Читаем далее:
    Use of an indeterminate value obtained by default-initializing a non-class variable of any type is undefined behavior (in particular, it may be a trap representation), except in the following cases:
    ...

    Ваш случай не попадает под исключения, следовательно вы схлопотали undefined behavior.

    Что такое undefined behavior? Это значит, что компилятор что хочет, то и генерирует на выходе:
    Compilers are not required to diagnose undefined behavior (although many simple situations are diagnosed), and the compiled program is not required to do anything meaningful.

    Вывод: не делать так, чтобы в программе был undefined behavior.

    Ответ для C
    Не указав инициализатора при объявлении переменной num, вы используете implicit initialization. Смотрим по ссылке:
    If an initializer is not provided:
    - objects with automatic storage duration are initialized to indeterminate values (which may be trap representations)
    ...

    Это как раз ваш случай.

    Читаем далее:
    If an indeterminate value is used as an argument to any standard library call, the behavior is undefined. Otherwise, the result of any expression involving indeterminate values is an indeterminate value (e.g. int n;, n may not compare equal to itself and it may appear to change its value on subsequent reads)

    Итого, у вас либо неопределённое поведение, либо неопределённое значение выражения, если там используется num. Значение в num может даже самопроизвольно меняться между операциями чтения из этой переменной.

    Вывод: не делать так, чтобы в программе встречалось использование indeterminate values.
    Ответ написан
    3 комментария
  • Как правильно импортировать nanoid?

    Так как вы компилируете ваш код (в частности модуль user.model.ts) в формат модуля CommonJS, то в JS-выхлопе после компиляции будут вызовы require. Судя по чейнджлогу для версии 4.0 Ситник выпилил нафиг поддержку CommonJS в 4-й версии, однако она остаётся в версии 3 и будет некоторое время поддерживаться. Вы не можете взять и из CommonJS-модуля сделать require ES-модуля (а в пакете версии 4 только ES-модули и остались).

    Следовательно, в зависимости от того, что у вас в проекте и насколько он большой:
    • вы можете задуматься о переходе в своём проекте на использование ES-модулей. Для этого нужно поменять опцию module в tsconfig.json на es2015/es2020/es2022. Это самый предподчтительный вариант, но все остальные ваши инструменты и библиотеки должны быть готовы работать с ES-модулями
    • вы можете откатиться на nanoid третьей версии
    • вы можете использовать динамический импорт, как вам и предлагают, но мне кажется вам проще взять версию 3
    Ответ написан
    Комментировать
  • Тестирование CI/CD пайплайна gitlab?

    Ещё есть git commit --amend и git push -f, они не такие страшные, если полчасика потратить на изучение.
    Ответ написан
    Комментировать
  • Как правильно обращаться?

    Прям вот не нашли?
    CommonJS
    ES modules
    И ещё про ES modules

    И таких материалов более девяти тысяч.
    Ответ написан
    2 комментария