• Как реализуется enum в JS из Typescript?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Потому что enum в typescript может мержиться:
    Валидный код:
    enum Membership {
      Simple,
      Standart,
      Premium
    }
    
    enum Membership {
      SimpleX = 99
    }

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

    snaiper04ek
    @snaiper04ek
    Не стреляйте в эникея, он админит как умеет
    парень. Всё равно ты будешь использовать ту терминологию, которую используют на работе. Если там под замыканием подразумевается замыкание с инкапсуляцией, то после того как тебе сказали что "твой код - говно", было два варианта: 1)поговорить о терминах либо со ссылкой на официальную документацию, либо вместо с собеседником вывести определение исходя из смысла понятия, не прибегая к авторитетам вообще. 2) Сказать о том, что прочитал такое определение у %авторитет%, и сказать, что готов использовать то, которым пользуетесь вы на работе.

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

    Есть второй вариант: собеседник тебе говорит: "Ахтунг! Замыкание используется не просто для того, чтобы спасти переменную от удаления! Это ещё и способ сокрытия данных: замыканием можно использовать локальную глобальную переменную, вместо того чтобы использовать просто глобальную переменную, или же городить отдельный класс."
    В этом случае всё твое определение идёт в пешее эротическое, и ты соглашаешься, что для этого придётся обернуть функцию в функцию, чтобы у тебя была функция с локальными переменными, которые будут глобальными для этой функции в функции.
    Ответ написан
    13 комментариев
  • Как решать задачу используя динамическое программирование?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Какой-то идиот задачу составлял.
    Во-первых, для N<60 ответ помещается в 64-битный целочисленный тип, который есть сейчас практически во всех языках программирования. Тут не надо ничего придумывать для избегания переполнения.
    Во-вторых, чтобы избежать переполнения, в таких задачах обычно просят выдать ответ по какому-то большому модулю. И последнее, как ответ может получиться нецелым - это просто загадка. Пример решения явно неверен.

    А так, динамическое программирование тут простое: Пусть F(N,K) - сколько существует невзрывоопасных стопок длины N, таких что в конце есть ровно K опасных контейнеров (очевидно, 0 <= K < 4). Это не совсем прям то, что вам нужно в задаче, но количество опасных стопок - это количество всех стопок (2^N) минус количество невзрывоопасных, поэтому это ДП нам подходит.

    Пересчет очень прост:

    F(N,K>0) = F(N-K,0)
    F(N,0) = F(N-1,0)+F(N-1,1)+F(N-1,2)+F(N-1,3)


    Если на конце K плохих контейнеров, то до этого точно должен быть хороший контейнер. Если на конце стоит хороший контейнер - то до него может быть 0..3 плохих контейнера.

    База: F(0,0) = 1, F(0, K>0) = 0

    Ответ: 2^N - F(N,0)-F(N,1)-F(N,2)-F(N,3)
    Ответ написан
    2 комментария
  • Как с помощью js запрещать доступ к странице?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Непонятно, в чём проблема.
    При активации подписки в БД заносим время завершения подписки, например `subscriptionEndTime` = NOW() + INTERVAL 30 DAY.
    При проверке просто сравниваем текущее время и сохранённое,
    `subscriptionEndTime` > NOW() AS `isSubscriptionActive`
    .
    А попытка переложить проверку на клиента заведомо неправильная. Никто не мешает пользователю слегка поправить код и просто игнорировать проверку.
    Ответ написан
    Комментировать
  • Как игнорировать предпочтительный язык системы, браузера при запросе API?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    RTFM.
    https://nominatim.org/release-docs/develop/api/Reverse/
    Language of results
    accept-language=<browser language string>
    Preferred language order for showing search results, overrides the value specified in the "Accept-Language" HTTP header. Either use a standard RFC2616 accept-language string or a simple comma-separated list of language codes.
    Ответ написан
    Комментировать
  • Лучший клиент git ( unity )?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Лучший клиент git
    Лучший клиент git - это консольный.

    Лучший клиент git - это дело вкуса каждого. Нравится вам TortoiseGit, так используйте его. Не нравится - ищите что-то лучшее.

    А что имеете в виду
    но есть что-нибудь лучше?
    Ответ написан
    Комментировать
  • В чем тут подвох?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Да, это давно всем известный развод лохов (лично я знаю про него уже лет 20).
    Вас таких жертв называют "дрОпами" в этой схеме.
    Ты даёшь в пользование свой комп и с него совершаются преступные действия.
    За которые будешь нести ответственность лично ты.
    Там возможно всё - наёмничество, детское порно, продажа наркотиков, заказные убийства, торговля девушками, детскими внутренними органами и прочее.
    Первое, что ты должен сделать - не спускать всё на тормозах, а написать заявление в полицию об этом
    Ответ написан
  • Как проксировать веб сокет?

    @q2digger
    никого не трогаю, починяю примус
    Для начала покажите код из конфига nginx относящийся к location который вы пробрасывали.

    Дока на сайте nginx - https://www.nginx.com/blog/websocket-nginx/
    Ответ написан
    Комментировать
  • Какой язык программирования наиболее универсален?

    insighter
    @insighter
    -First time? - Huh? (C#, React, JS)
    Самое забавное то, что можно выучиться хорошо программировать на десятке топ языков сразу. Но невозможно стать настоящим спецом и возьмем на том же C# уметь и в бэкенд и в игры и в десктоп и мобилки и ещё фронтенд (на blazor который).

    А язык это просто. На все языки три парадигмы программирования.
    Ответ написан
    Комментировать
  • Какой язык программирования наиболее универсален?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Однозначно Delphi! Без вариантов!

    P.S.
    Ну а если серьезно: это компилируемый язык, собирается под все основные платформы (Windows, Linux, MacOS, Android, iOS). Его вариации собираются под почти все существующие платформы Nintendo DS, GB, HAIKU, Raspberry и прочие платформы для мини пк (UNIX-подобные, DOS, OS/2, Novell Netware, AmigaOS, AmigaOS 4, AROS, MorphOS, Arduino (Visuino) ...).
    Создает нативный код, позволяет писать низкоуровневые вещи (например, драйвера для винды), легко работает с нагруженными частями, позволяет даже писать для фронта сайтов через интерпретатор в JS. Т.е. можно написать полностью весь веб-сервис исключительно на нём, включая сервер, бэкенд, фронт. Сам язык мультипарадигменный. Т.е. можно использовать как ООП, так и ФП. Нет принудительного сборщика мусора. Памятью можно управлять самостоятельно. Но, можно использовать механизмы подсчета ссылок и не заботится о ручном освобождении. Язык используется и для десктопа и для мобилок. Для майнинга или машинного обучения. Для создания игр и утилит. Для крупного коммерческого и внутреннего софта.
    Язык удобен и для скриптинга (есть инлайн объявление, анонимные функции, вывод типов, дженерики). Нет нагромождения примитивными типами. Строки всегда строки, их можно модифицировать без переаллокации.
    Есть кроссплатформенный фреймворк для создания графический приложений (с графикой на GPU и возможностями сравнимыми с CSS стилизацией). Сам фреймворк чрезвычайно удобный и гибкий. И нет необходимости писать всё и вся кодом.
    Ответ написан
    3 комментария
  • Что писать в резюме чтобы были шансы куда-то попасть без опыта?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Нормально что с первого захода вас нигде не взяли. Таких как вы тысячи, рекруту реально сложно понять - вы вайтишник или реально хотите посвятить этому жизнь и будете перспективным работником, а не свинтите после первой недели в конторе, потому что "тут оказывается работать надо!". Давайте резюме чаще и не стесняйтесь подавать на более "серьезные" позиции по описанию, часто в требованиях много скилов завышают, просто "на всякий случай, чтобы было", указывайте в письме что "это и это пока не умею, но готов учиться". Чаще всего "мелькающих" рано или поздно пристраивают в конторы.
    Ответ написан
    Комментировать
  • Что писать в резюме чтобы были шансы куда-то попасть без опыта?

    @FedorWK
    1) Нужно больше откликаться (еще больше)
    2) Проекты, которые есть - описать повкуснее. Добавить строчку опыта "частная практика", в которой проекты описать подробнее.
    3) Сесть за более сложный проект, довести хотябы до MVP, задеплоить, чтобы рекрутер смог сам "потыкаться". Как вариант - бот для Телеграма чтобы не писать фронтенд. Также описать в опыте работы.
    4) Участвовать в хайринг ивентах для джунов от конкретных компаний.

    Это все не гарантирует трудоустройство, но шансы должно повысить
    Ответ написан
    1 комментарий
  • Правильно ли я понял принцип инверсии зависимостей?

    @Akela_wolf
    Extreme Programmer
    Главная идея принципа инверсии зависимостей "детали зависят от абстракций, но не абстракции от деталей".
    В приведенном вами примере класс Main зависит от всего: от интерфейса INumberOperation и от обоих классов NumberOperation1, NumberOperation2. То есть тут принцип инверсии зависимостей вообще не работает. Никак.

    Проявляется же он в следующем примере. Пусть у меня есть некая абстрактная логика "прочитай число, выполни над ним операцию, запиши результат". Эта абстрактная логика (потому она и абстрактная) ничего не должна знать ни откуда она читает число, ни какую операцию над ним выполняет, ни куда и как записывает результат. Таким образом, у нас есть модуль, состоящий из
    interface NumberInput {
      int read();
    }
    interface NumberProcessor {
      int process(int a);
    }
    interface NumberOutput {
      void write(int a);
    }
    class Processor {
      private final NumberInput input;  
      private final NumberProcessor processor;
      private final NumberOutput output;
    
      public Processor(NumberInput input, NumberProcessor processor, NumberOutput output) {
        this.input = input;
        this.processor = processor;
        this.output = output;
      }
    
      void process() {
        output.write(processor.process(input.read()));
      }
    }

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

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

    Этот принцип очень хорошо объяснен в книге Р.Мартина "Чистая архитектура", по крайней мере у меня все встало на свои места именно после прочтения этой книги.
    Ответ написан
    1 комментарий
  • Есть ли жизнь на Java (Бекенд) кроме Финтеха?

    Jacen11
    @Jacen11
    копание в легаси без намека на светлое будущее
    а вы значение слова легаси точно понимаете? не существует проектов без легаси в принципе

    Востребован ли стек на новые проекты?
    да

    И есть ли топовые (вплане зп) вакансии не в финтех?
    ну как бы да, но скорее нет. Изредка пара жирных вакансий на два десятка из финтеха

    Причем везде идет Java 8, иногда Java 11
    еще бывает java 4. Если вам не понятно почему нет 9, 10 версии и новее 11, то у меня большие вопросы к вашей компетенции

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

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    let op = [];
    for(let i = 0; i < 10; i++){
      op[i] = "blabla";
    }
    
    alert(op[2]);
    Ответ написан
    Комментировать
  • Как исправить ошибку "To run this application, you must install .NET Core"?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист
    Есть несколько вариантов:
    1. Использовать .net 6 - он умеет тащить за собой не весь рантайм, а только то что нужно для работы.
    По крайней мере Hello World в 12мб получалось уместить (single file + self contained + assembly trimming)
    2. Поставлять программу вместе со скриптом, который проверит, установлен ли .net runtime и установит его сам, скачав из интернета
    3. Забить и оставить как есть (засунуть в архив)
    4. Использовать .NET Framework, который идёт на винде из коробки, но имхо - это шаг назад по всем параметрам, и так делать не стоит.

    UPD: Hello world таки весит 12 мегабайт
    Ответ написан
    6 комментариев
  • Для каких примерно целей программисту нужен computer science?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    читайте уже best practices
    это спасет от глупых ошибок и позволит подумать а почему так сделано.
    Когда поймете сможете находить баланс между супер быстрым говнокодом и тормозом но понятным для всех.
    Ответ написан
    Комментировать
  • Как типизировать такой объект данных?

    Zraza
    @Zraza
    Помог ответ? Отметь решением!
    Нет, обобщенные типы можно использовать не только в функциях
    type SomeData<Data = any> = {
        data: Data[];
    }
    const a: SomeData<number> = {data: [1,2,3]};
    Ответ написан
    Комментировать
  • Зачем писать .to_string() при объявлении строки?

    vabka
    @vabka
    Токсичный шарпист
    Есть хорошая статья: https://habr.com/ru/post/274485/

    У строковых литералов тип &'static str. Тоесть это заимствованная ссылка на объект с неограниченным временем жизни.
    А to_string возвращает уже owned строку типа std::string::String

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

    Если ты хочешь получить именно String из строкового литерала, то есть сразу несколько вариантов, включая показанный:
    let a: String = String::from("a");
    let b: String = "b".to_string();
    let c: String = "c".into(); // или "c".into::<String>(), если не указывать тип явно.
    let d: String = "d".to_owned();
    Ответ написан
    Комментировать