Я всё ещё жду, когда прикрутят параметр "вероятность галлюцинации" в ответе. Уже были исследования, которые позволяли определелить ответ был сгенерирован из известных "токенов" или просто выдуман без опору на "факты".
версионируйте API так, чтобы v2 жил рядом с v1, не мешая ему гнить в покое
Несколько историй про ГИС:
в первой ГИС сразу заложили v1 и v2. Документация к v1 почти отсутствала, да этот и не нужно, ведь есть v2! Пока в один день разработчики не решили расширить объекты api, добавив новые обязательные поля. И при этом решив сохранить совместимость. Правильная реализация: создать v3 и поставить нужные валидаторы на входе, а v2 же недостающие поля заполнять каким-то значением по умолчанию или ничего не делать. Но разработчки пошли по своему пути: для v2 расширили количество полей, но сделать поля обязательными не смогли из-за нарушения обратной совместимости, поэтому полезность "нового" api стало стремиться к нулю, так как у разработчиков нет рычага давления на пользователей, чтобы те переходили на "новое" api;
в другой ГИС просто каждый год выходит новая версия с номером v1. Полностью не совместимая со старым api. На следующий год уже анонсировали, что уберут множество методов для api, единственная альтернатива - вносить данные руками через их веб-интерфейс;
и немного шедевральное, одна и та же функция, которая принимает ДВА разных типов объектов (часть полей совпадает). Внутри функция по "лишним" полям догадаывается, какой именно объект её передали, а потом конвертирует json в… excel. Ну а что, отлаженный парсер excel у разработчиков уже был (раньше система принимала только excel, потом быра расширена до json). Причём в json должны обязательно содержаться все ключи объекта, а если null, то его необходимо записать как пустую строку.
То же самое на расте (Result для обработки ошибок и стирание типов при компиляции, в рантайме работает так же быстро, как если бы использовался обычный usize):
use std::ops::{Add, Mul, Sub};
#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord)]
pub struct Weight(usize);
impl Weight {
#[allow(clippy::unwrap_used)]
pub fn from_grams(grams: i32) -> Result<Self, String> {
if grams < 0 {
Err(format!("Weight cannot be negative: {} g", grams))
} else {
Ok(Self(grams.try_into().unwrap()))
}
}
pub fn from_kilograms(kilograms: i32) -> Result<Self, String> {
Self::from_grams(kilograms * 1000)
}
/// Получить вес в граммах
#[must_use]
pub fn inner(self) -> usize {
self.0
}
#[must_use]
pub fn is_between(self, first: Self, second: Self) -> bool {
let min = first.min(second);
let max = first.max(second);
min <= self && self <= max
}
#[must_use]
pub fn is_empty(self) -> bool {
self.0 == 0
}
}
impl Add for Weight {
type Output = Self;
fn add(self, rhs: Self) -> Self::Output {
Self(self.0 + rhs.0)
}
}
impl Sub for Weight {
type Output = Result<Self, String>;
fn sub(self, rhs: Self) -> Self::Output {
if rhs > self {
Err(format!("Weight cannot be negative: -{} g", rhs.0 - self.0))
} else {
Ok(Self(self.0 - rhs.0))
}
}
}
impl Mul<usize> for Weight {
type Output = Self;
fn mul(self, rhs: usize) -> Self::Output {
Self(self.0 * rhs)
}
}
Возможно, код большинства программ визуально выглядел бы более «словесным». Например, вместо for (int i=0; i<10; i++) { ... } писали что-то вроде FOR i = 0 TO 9 ... NEXT i. Сохранилась бы и традиция нечувствительных к регистру ключевых слов: Begin, BEGIN или begin— неважно.
Тем временем PL/SQL:
declare
l_result number;
begin
for i in reverse 1..10 loop
l_result := i * i;
if i = 5 then
l_result := l_result - 1;
end if;
dbms_output.put_line(i || ': ' || l_result);
end loop;
end;
На одном крупном сайте зарегистрировался с ником admin. В комментарии к посту пришли настоящие админы и долго возмущались занятым мной ником (который оставался свободным всё 10+ лет существования сайта).
Выше приведён пример с
#[group(required = true, multiple = true)].Внематочная беременность.
Для первой попытки неплохо, убрать ещё варнинги из кода и прогнать clippy.
clap - довольно мощный инструмент, вместо кастомной валидации лучше сделать так:
Тут нужен тег "Ненормальное программирование".
Надеюсь, это всё отключается флагами условной компиляции и не попадает в релизную прошивку?
Ага, робот, с операционкой ROS.
Мне рассказывали о человеке, который не знал, как печатать на компьютерной клавиатуре. А на смартфонной клавиатуре - ок.
Нет, не он, это входной параметр, а не выходной.
Я всё ещё жду, когда прикрутят параметр "вероятность галлюцинации" в ответе. Уже были исследования, которые позволяли определелить ответ был сгенерирован из известных "токенов" или просто выдуман без опору на "факты".
Так наоборот: автоматический выключатель на 16 ампер дешевле, чем 6.
Несколько историй про ГИС:
в первой ГИС сразу заложили v1 и v2. Документация к v1 почти отсутствала, да этот и не нужно, ведь есть v2! Пока в один день разработчики не решили расширить объекты api, добавив новые обязательные поля. И при этом решив сохранить совместимость. Правильная реализация: создать v3 и поставить нужные валидаторы на входе, а v2 же недостающие поля заполнять каким-то значением по умолчанию или ничего не делать. Но разработчки пошли по своему пути: для v2 расширили количество полей, но сделать поля обязательными не смогли из-за нарушения обратной совместимости, поэтому полезность "нового" api стало стремиться к нулю, так как у разработчиков нет рычага давления на пользователей, чтобы те переходили на "новое" api;
в другой ГИС просто каждый год выходит новая версия с номером v1. Полностью не совместимая со старым api. На следующий год уже анонсировали, что уберут множество методов для api, единственная альтернатива - вносить данные руками через их веб-интерфейс;
и немного шедевральное, одна и та же функция, которая принимает ДВА разных типов объектов (часть полей совпадает). Внутри функция по "лишним" полям догадаывается, какой именно объект её передали, а потом конвертирует json в… excel. Ну а что, отлаженный парсер excel у разработчиков уже был (раньше система принимала только excel, потом быра расширена до json). Причём в json должны обязательно содержаться все ключи объекта, а если null, то его необходимо записать как пустую строку.
А что не так с "автоматом на 15 ампер на холодильник"? Какой был автомат - такой и поставили, стоимость копейки по сравнению с работой.
Тогда квадроберы.
То же самое на расте (Result для обработки ошибок и стирание типов при компиляции, в рантайме работает так же быстро, как если бы использовался обычный usize):
В репозитории дебиана ж.
Тем временем PL/SQL:
На одном крупном сайте зарегистрировался с ником admin. В комментарии к посту пришли настоящие админы и долго возмущались занятым мной ником (который оставался свободным всё 10+ лет существования сайта).
Или если отчёт нужен ен в режиме онлайн, то можно просто пересчитывать раз в час.
Я почти уверен, что автор рассылал свой вирус одноклассникам/одногруппникам.