Как стать автором
Обновить
5
0.1
Отправить сообщение

Ох не соврать бы, вроде enum Singleton были "нормальными" в java 1.4 или 1.5. И я сейчас даже не могу припомнить почему. В 2024 году сам шаблон Singleton основательно потускнел, ну или по крайней мере его смысл поменялся (говорим спасибо облакам, кластерам, докеру). Как верно написал @n43jl сейчас мы мыслим категориями scope (контекст). Контекст, а в 99% случаях это Spring Context, сам определяет кого, сколько и в каких случаях инстанцировать. Даже зная что скоуп по умолчанию в спринге Singleton, при проектировании приложений нам необходимо закладывать множество инстансов приложения запущенных параллельно.

Поправьте аннотации, у вас невалидный код. Должно быть типа:

@Data
public class UserDTO {

    private Long userId;

    @NotNull
    @Length(min = 2, max = 10)
    private String userName;

    @NotNull
    @Length(min = 6, max = 20)
    private String account;

    @NotNull
    @Length(min = 6, max = 20)
    private String password;
}

У меня вопрос финансового характера, статья называется "Как я зарабатывал $10,000 в месяц...", это я так понимаю "в прыжке" и на двоих? А можно увидеть совокупные оборот/доход с ноября 2020 по время закрытия? Хотя бы порядок :)

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

Мне вот интересно, статья написана по делу, на стыке IT технологий и бизнеса. При этом даунвоутов накидали и статье и автору без единого комментария. Я понимаю страх, я понимаю неприятие "буржуев", которые "эксплуатируют" подневольный трудовой класс. Копирайтинг (наряду с Поддержкой) является отраслью на острие конфликта AI-NI и смотреть за ним надо в оба глаза. Среди нас только зубные доктора "в домике".

Сергей Алексашенко хорошо эту тему разобрал
На злобу дня. Цифровой рубль это не денежная реформа, это хуже @evgeny.kiselev - YouTube

Одна из интересных и не особо афишируемых особенностей, на сбережения в виде "цифровых рублей" не начисляются проценты.

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

Заметил что если вопрос сформулирован с "предубеждением" (типа я хочу решить проблему X и хочу для этого использовать инструмент Y) то чат переубеждать не будет если уж не совсем какая-то дичь. Постарается дать ответ исходя из пожеланий оператора. Если же сформулировать вопрос более общим способо (я хочу решить проблему X, посоветуй какие вообще варианты обычно применяются), то качество ответов резко улучшается. У меня порой складывается впечатление что он работает по принципу "спрашивай меня или что делать или как делать, но не оба сразу".

Сколько лет работал с индийцами, столько удивлялся насколько они не умеют работать со сложностью. Поначалу у меня даже складывалось впечатление что их прям предмет такой есть "как сделать простые вещи максимально сложным и кривым способом". Как итог, если их оставить одних, они очень быстро доводят любую систему до состояния когда никто не понимает как это работает и дальше херачат брутфорс подбором кода.

Вы серьезно считаете что статья из мема и видосика на хабре это прям попасть в целевую аудиторию?

За 15 лет привыкаешь что мир программирования это не розовые пони, и часто тратить две недели на рефакторинг куска говна чтоб реализовать хотелку бизнеса слишком долго/дорого. И с чего бы это код вызывал какие-то чувства. Это просто работа.

Ладно если пишешь на одном языке, а если их три и это только повседневные. Типа java, kotlin, typescript. И мучительно вспоминаешь уже завезли в java elvis или все еще страдаем.

Я программирую уже лет 15, примерно с марта оплатил подписку на ChatGPT 4.0. Это просто охрененный инструмент который до сих пор многие недооценивают. Я использую его каждый день на работе и до сих пор нахожу ему все новые и новые применения. Вот лишь небольшой список того, что он умеет делать на уровне "production ready"

  • генерация тестов

  • генерация кода согласно вводных

  • анализ и пояснение написанного кода

  • анализ фрагментов архитектуры

  • обсуждение вариантов реализации с аргументацией за и против

  • составление UML диаграмм

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

ВАЖНО! Чат 3.5 это полнейший шлак, с ним невозможно работать.

Пример

Запрос

можешь пояснить что делает функция

export function enrichObject(object: any, propertyName: string, formula: string, defaultValue?: string) {
    if (formula.trim() === "")
        return

    let evaluation = formula
    let match = evaluation.match("([a-zA-Z][\\w]*)");

    while (match) {
        const value = object[match[1]]
        if (value == null) {
            object[propertyName] = undefined
            return
        }

        evaluation = evaluation.replace(new RegExp("([a-zA-Z]\\w*)"), value)
        console.debug(`${value} - ${evaluation}`)

        match = evaluation.match("([a-zA-Z][\\w]*)");
    }

    try {
        // eslint-disable-next-line no-new-func
        const result: number = Function("\"use strict\";return (" + evaluation + ")")();
        object[propertyName] = Number.isFinite(result) ? result : Number(defaultValue);
    } catch (e) {
        console.warn(`Формула для свойства ${propertyName} задана неверно. Пожалуйста проверьте выражение: ${formula}`)
    }
}

Ответ

Эта функция, `enrichObject`, принимает на вход четыре параметра:

1. `object`: объект для обогащения,

2. `propertyName`: свойство объекта, которое будет обновлено,

3. `formula`: строка, которую мы хотим вычислить и установить в качестве значения свойства объекта,

4. `defaultValue`: необязательное значение по умолчанию, которое будет использоваться, если формула выдаст бесконечное значение.

Функция работает следующим образом:

- Она проверяет, если `formula` является пустой строкой, и если это так, то функция ничего не делает и просто возвращает управление.

- Затем она начинает процесс подстановки значений переменных, найденных в `formula`, используя значения этих переменных из `object`.

- В процессе подстановки, если функция обнаруживает, что какое-то значение равно `null`, то она устанавливает свойство объекта, определенное `propertyName`, в `undefined` и возвращает управление.

- После того как все подстановки выполнены, функция пытается вычислить получившееся выражение. Если вычисление происходит успешно, она устанавливает свойство объекта `propertyName` в вычисленное значение. Если результат вычисления является бесконечностью, то она устанавливает `propertyName` в `defaultValue`. Если при вычислении происходит ошибка, она выводит предупреждение в консоль.

Таким образом, эта функция используется для динамического вычисления выражения, указанного в `formula`, и обновления свойства `propertyName` объекта на основе этого вычисления. Все переменные в `formula` должны существовать в `object`.

Запрос

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

Ответ

Для изменения функции enrichObject таким образом, чтобы источник свойств и объект для обогащения были двумя разными параметрами, вы можете просто добавить еще один параметр функции. Давайте назовем его sourceObject.

Функция тогда будет выглядеть так:

export function enrichObject(object: any, sourceObject: any, propertyName: string, formula: string, defaultValue?: string) {
    if (formula.trim() === "")
        return

    let evaluation = formula
    let match = evaluation.match("([a-zA-Z][\\w]*)");

    while (match) {
        const value = sourceObject[match[1]]
        if (value == null) {
            object[propertyName] = undefined
            return
        }

        evaluation = evaluation.replace(new RegExp("([a-zA-Z]\\w*)"), value)
        console.debug(`${value} - ${evaluation}`)

        match = evaluation.match("([a-zA-Z][\\w]*)");
    }

    try {
        // eslint-disable-next-line no-new-func
        const result: number = Function("\"use strict\";return (" + evaluation + ")")();
        object[propertyName] = Number.isFinite(result) ? result : Number(defaultValue);
    } catch (e) {
        console.warn(`Формула для свойства ${propertyName} задана неверно. Пожалуйста проверьте выражение: ${formula}`)
    }
}

Теперь функция enrichObject принимает два разных объекта: object (объект для обогащения) и sourceObject (источник свойств). Значения переменных для подстановки берутся из sourceObject, а обновленное свойство записывается в object.

Вы можете принести свой код и спокойно пообсуждать его. Какая разница за что "цепляться". По своему опыту такие собеседования очень комфортные как для соискателя так и для собеседующего и дают не меньше информации. Традиционно это выглядит так: "наш джун написал вот такой код, что вы думаете на этот счет".

Удачи вам найти желающих такое задание сделать.

Отлично сказано про "Сеньор мышление", только к сожалению я видел очень мало разработчиков, позиционирующих себя как сеньоры и думающие так. Куда чаще "надо больше оверинжениринга и модных технологий".

Грамотный юрист должен понять задачи и возможные риски каждого участника (не только своего клиента), оценить их и найти тот единственный вариант партнерства, который устроит всех.

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

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

Запрет одновременного воспроизведения с разных устройств например. Digital fingerprint. Ограничение числа переключений между устройствами к примеру 20 раз в сутки.

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

Есть небольшое отличие метров от метров кубических, 1 млн литров = 1000 м3, если 25 метров высота то диаметр чуть больше 7 метров как раз дает озвученный объем

Позже он говорил, что он использовал 103 статьи из советских газет и технических журналов, 4 отчета различных делегаций, 11 отчетов вернувшихся из СССР военнопленных и около 25 фотографий местности. Эти цифры могут быть заниженными, в том смысле, что он, возможно, запрашивал только самые важные сведения, но это показывает, какое огромное количество деталей ему нужно было собрать воедино для достижения цели.

Информация

В рейтинге
3 260-й
Откуда
Longridge, None, Австралия
Дата рождения
Зарегистрирован
Активность