Обновить
22

Пользователь

0,1
Рейтинг
1
Подписчики
Отправить сообщение

Обновления на http://mirror.yandex.ru/debian ещё не успели доползти.

Оптимальный уровень мошенничества — выше нуля: https://habr.com/ru/companies/ruvds/articles/952226/

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

накатать тысячу строк bash с идемпотентным wizard’ом

Может, я чего-то не понимаю, но например… ansible.

Я правильно понимаю, что всё “приложение” находится в одном файле на 1кк+ строк и просто кидается в бесплатные чаты LLM одним файлом? Вайбкодинг, который мы заслужили.

500 руб/мес - интересно, если сделать полный клон этого приложения и продавать за 5 руб/месяц, то будет ли больше пользователей?

Так и предаствляю владельца бизнеса: всё было хорошо, пришёл какой-то программист, стало плохо, переписал всё, теперь стало ещё хуже и никто не понимает написанный код. true story

Вы слишком опоздали со статьёй к 1 апреля.

Выше приведён пример с #[group(required = true, multiple = true)].

Для первой попытки неплохо, убрать ещё варнинги из кода и прогнать clippy.

clap - довольно мощный инструмент, вместо кастомной валидации лучше сделать так:

use clap::{Args, Parser};

#[derive(Parser)]
#[command(
    name = "pgdr",
    version = "1.0", 
    about = "High-performance cryptographically secure password generator"
)]
pub struct Cli {
    #[command(flatten)]
    charset: Charset,

    /// Total number of characters to generate
    #[arg(short = 'l', long, default_value_t = 16, value_name = "INT")]
    pub length: usize,

    /// IO buffer size in bytes for reading and writing
    #[arg(short = 'b', long, default_value_t = 8192, value_name = "BYTES")]
    pub buffer_size: usize,

    /// Use /dev/random (blocking) instead of /dev/urandom (non-blocking)
    #[arg(short = 'r', long)]
    pub random_source: bool,
}

#[derive(Args)]
#[group(required = true, multiple = true)]
pub struct Charset {
    /// Include lowercase letters (a-z)
    #[arg(short = 'L', long)]
    pub lowercase: bool,

    /// Include uppercase letters (A-Z)
    #[arg(short = 'U', long)]
    pub uppercase: bool,

    /// Include digits (0-9)
    #[arg(short = 'N', long)]
    pub numbers: bool,

    /// Include special symbols (!@#$%^&*()_+-=)
    #[arg(short = 'S', long)]
    pub symbols: bool,
}

fn main() -> io::Result<()> {
    let cli = Cli::parse();
    let mut charset: Vec<u8> = Vec::new();
    if cli.charset.lowercase {
        charset.extend(b'a'..=b'z');
    }
//…

Тут нужен тег "Ненормальное программирование".

Надеюсь, это всё отключается флагами условной компиляции и не попадает в релизную прошивку?

Ага, робот, с операционкой ROS.

Мне рассказывали о человеке, который не знал, как печатать на компьютерной клавиатуре. А на смартфонной клавиатуре - ок.

Нет, не он, это входной параметр, а не выходной.

Я всё ещё жду, когда прикрутят параметр "вероятность галлюцинации" в ответе. Уже были исследования, которые позволяли определелить ответ был сгенерирован из известных "токенов" или просто выдуман без опору на "факты".

Так наоборот: автоматический выключатель на 16 ампер дешевле, чем 6.

версионируйте API так, чтобы v2 жил рядом с v1, не мешая ему гнить в покое

Несколько историй про ГИС:

  • в первой ГИС сразу заложили v1 и v2. Документация к v1 почти отсутствала, да этот и не нужно, ведь есть v2! Пока в один день разработчики не решили расширить объекты api, добавив новые обязательные поля. И при этом решив сохранить совместимость. Правильная реализация: создать v3 и поставить нужные валидаторы на входе, а v2 же недостающие поля заполнять каким-то значением по умолчанию или ничего не делать. Но разработчки пошли по своему пути: для v2 расширили количество полей, но сделать поля обязательными не смогли из-за нарушения обратной совместимости, поэтому полезность "нового" api стало стремиться к нулю, так как у разработчиков нет рычага давления на пользователей, чтобы те переходили на "новое" api;

  • в другой ГИС просто каждый год выходит новая версия с номером v1. Полностью не совместимая со старым api. На следующий год уже анонсировали, что уберут множество методов для api, единственная альтернатива - вносить данные руками через их веб-интерфейс;

  • и немного шедевральное, одна и та же функция, которая принимает ДВА разных типов объектов (часть полей совпадает). Внутри функция по "лишним" полям догадаывается, какой именно объект её передали, а потом конвертирует json в… excel. Ну а что, отлаженный парсер excel у разработчиков уже был (раньше система принимала только excel, потом быра расширена до json). Причём в json должны обязательно содержаться все ключи объекта, а если null, то его необходимо записать как пустую строку.

1
23 ...

Информация

В рейтинге
3 790-й
Зарегистрирован
Активность