Ох не соврать бы, вроде enum Singleton были "нормальными" в java 1.4 или 1.5. И я сейчас даже не могу припомнить почему. В 2024 году сам шаблон Singleton основательно потускнел, ну или по крайней мере его смысл поменялся (говорим спасибо облакам, кластерам, докеру). Как верно написал @n43jl сейчас мы мыслим категориями scope (контекст). Контекст, а в 99% случаях это Spring Context, сам определяет кого, сколько и в каких случаях инстанцировать. Даже зная что скоуп по умолчанию в спринге Singleton, при проектировании приложений нам необходимо закладывать множество инстансов приложения запущенных параллельно.
У меня вопрос финансового характера, статья называется "Как я зарабатывал $10,000 в месяц...", это я так понимаю "в прыжке" и на двоих? А можно увидеть совокупные оборот/доход с ноября 2020 по время закрытия? Хотя бы порядок :)
Самая жопа что выгоду от кроилова получают люди, которые успевают спрыгнуть с поезда попадалова. И через это схема воспроизводит себя постоянно без угроз и издержек "кроителям".
Мне вот интересно, статья написана по делу, на стыке IT технологий и бизнеса. При этом даунвоутов накидали и статье и автору без единого комментария. Я понимаю страх, я понимаю неприятие "буржуев", которые "эксплуатируют" подневольный трудовой класс. Копирайтинг (наряду с Поддержкой) является отраслью на острие конфликта AI-NI и смотреть за ним надо в оба глаза. Среди нас только зубные доктора "в домике".
Да все как обычно с учеными и журналистами. По личному опыту качество ответа именно в ответах по программированию очень сильно зависит от постановки вопроса. От того, насколько хорошо предоставлен контекст проблемы и критерии качества.
Заметил что если вопрос сформулирован с "предубеждением" (типа я хочу решить проблему 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 фотографий местности. Эти цифры могут быть заниженными, в том смысле, что он, возможно, запрашивал только самые важные сведения, но это показывает, какое огромное количество деталей ему нужно было собрать воедино для достижения цели.
Ох не соврать бы, вроде enum Singleton были "нормальными" в java 1.4 или 1.5. И я сейчас даже не могу припомнить почему. В 2024 году сам шаблон Singleton основательно потускнел, ну или по крайней мере его смысл поменялся (говорим спасибо облакам, кластерам, докеру). Как верно написал @n43jl сейчас мы мыслим категориями scope (контекст). Контекст, а в 99% случаях это Spring Context, сам определяет кого, сколько и в каких случаях инстанцировать. Даже зная что скоуп по умолчанию в спринге Singleton, при проектировании приложений нам необходимо закладывать множество инстансов приложения запущенных параллельно.
Поправьте аннотации, у вас невалидный код. Должно быть типа:
У меня вопрос финансового характера, статья называется "Как я зарабатывал $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 это полнейший шлак, с ним невозможно работать.
Пример
Запрос
можешь пояснить что делает функция
Ответ
Эта функция, `enrichObject`, принимает на вход четыре параметра:
1. `object`: объект для обогащения,
2. `propertyName`: свойство объекта, которое будет обновлено,
3. `formula`: строка, которую мы хотим вычислить и установить в качестве значения свойства объекта,
4. `defaultValue`: необязательное значение по умолчанию, которое будет использоваться, если формула выдаст бесконечное значение.
Функция работает следующим образом:
- Она проверяет, если `formula` является пустой строкой, и если это так, то функция ничего не делает и просто возвращает управление.
- Затем она начинает процесс подстановки значений переменных, найденных в `formula`, используя значения этих переменных из `object`.
- В процессе подстановки, если функция обнаруживает, что какое-то значение равно `null`, то она устанавливает свойство объекта, определенное `propertyName`, в `undefined` и возвращает управление.
- После того как все подстановки выполнены, функция пытается вычислить получившееся выражение. Если вычисление происходит успешно, она устанавливает свойство объекта `propertyName` в вычисленное значение. Если результат вычисления является бесконечностью, то она устанавливает `propertyName` в `defaultValue`. Если при вычислении происходит ошибка, она выводит предупреждение в консоль.
Таким образом, эта функция используется для динамического вычисления выражения, указанного в `formula`, и обновления свойства `propertyName` объекта на основе этого вычисления. Все переменные в `formula` должны существовать в `object`.
Запрос
я хочу изменить эту функцию таким образом, чтобы источник свойств и объект для обогащения были двумя разными параметрами
Ответ
Для изменения функции enrichObject таким образом, чтобы источник свойств и объект для обогащения были двумя разными параметрами, вы можете просто добавить еще один параметр функции. Давайте назовем его sourceObject.
Функция тогда будет выглядеть так:
Теперь функция enrichObject принимает два разных объекта: object (объект для обогащения) и sourceObject (источник свойств). Значения переменных для подстановки берутся из sourceObject, а обновленное свойство записывается в object.
Вы можете принести свой код и спокойно пообсуждать его. Какая разница за что "цепляться". По своему опыту такие собеседования очень комфортные как для соискателя так и для собеседующего и дают не меньше информации. Традиционно это выглядит так: "наш джун написал вот такой код, что вы думаете на этот счет".
Удачи вам найти желающих такое задание сделать.
Отлично сказано про "Сеньор мышление", только к сожалению я видел очень мало разработчиков, позиционирующих себя как сеньоры и думающие так. Куда чаще "надо больше оверинжениринга и модных технологий".
Как правило существует много больше одного варианта партнерства, приемлемого для сторон. И уж точно юрист одной стороны не является царем и богом чтобы за "всех" решать.
Ровно это в статье и написано. Хотят бороться давно но боятся оттока клиентов. Похоже сейчас математика прогнозов складывается им в плюс ну или кому-то из топов надо закрыть KPI
Запрет одновременного воспроизведения с разных устройств например. Digital fingerprint. Ограничение числа переключений между устройствами к примеру 20 раз в сутки.
Тут же нет цели поймать всех, просто сделать современное использование настолько неудобным чтобы платили за отдельный аккаунт.
Есть небольшое отличие метров от метров кубических, 1 млн литров = 1000 м3, если 25 метров высота то диаметр чуть больше 7 метров как раз дает озвученный объем
Позже он говорил, что он использовал 103 статьи из советских газет и технических журналов, 4 отчета различных делегаций, 11 отчетов вернувшихся из СССР военнопленных и около 25 фотографий местности. Эти цифры могут быть заниженными, в том смысле, что он, возможно, запрашивал только самые важные сведения, но это показывает, какое огромное количество деталей ему нужно было собрать воедино для достижения цели.