Задать вопрос
  • Как сделать явное применение блокировок на уровне строк?

    petermzg
    @petermzg
    Самый лучший программист
    select for update
    Ответ написан
  • Как получать в переменную значение из консоли и буфера обмена?

    vabka
    @vabka Куратор тега Rust
    Это уже и так из коробки работает в терминале. Не нужно усложнять своё приложение этим.
    Попробуй использовать shift+insert или ctrl+shift+v, если у тебя в терминале на ctrl+v пишется ^V.
    Либо посмотри настройки.
    Ответ написан
    Комментировать
  • Как накинуть условие на длину массива в типе?

    @StiflerProger
    export interface ContextMenuListProps {
        title?: string;
        items: [ContextItemsProps, ...ContextItemsProps[]];
    }


    playground
    Ответ написан
    3 комментария
  • Зачем нужен третий параметр array для обратной функции в forEach, map, filter...?

    @Kostik_1993
    Web Developer
    Когда вы используете только одну функцию то кажется что он не нужен. Но что будет если вы используете цепочку методов? К какому массиву вы будете обращаться например в фильтре после трансформации массива?
    arr.map(mapper).filter(filter).reduce(reducer)
    Ответ написан
    3 комментария
  • Как типизировать router.push(pathname)?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Проверил чистую установку next 13.4.12 - такой проблемы нет.

    Где-то говняет типы роутера. Возможно у тебя отдельно в package.json подключена устаревшая в версия роутера - тогда удали её.
    Иначе тыкни Ctrl+Click на .push и тебе откроет файл с декларацией, если она не\не только в next/dist/shared/lib/app-router-context.d.ts - разбирайся откуда взялась левая.
    Ответ написан
    Комментировать
  • Как отсортировать в алфавитном порядке элементы внутри объекта типа JsonValue?

    vabka
    @vabka Куратор тега Rust
    Можно вот так попробовать, но советую уйти от крейта vkapi, тк он даже нормально не типизирован и нужно работать с json-ами, будто на js.

    let get_albums_response = api.request("video.getAlbums", &mut params).await.unwrap();
    let mut items: Vec<&JsonValue> = get_albums_response["response"]["items"].members().collect();
    items.sort_by(|a, b| a["title"].as_str().cmp(&b["title"].as_str()));

    Нужный результат будет лежать в переменной items.

    В этом плане vkclient будет гораздо удачнее, тк позволяет работать с serde.
    https://crates.io/crates/vkclient

    Да и даже она не очень много бенефитов даёт и я бы навелосипедил вокруг reqwest
    Ответ написан
    Комментировать
  • Есть ли причина по которой файлы с типами имеют в названии .d?

    Узнал через несколько дней что файлы с типами принято называть с окончанием .d.ts.

    Нет, не принято.
    Расширение d.ts имеют файлы с декларациями. Собственно d - это сокращение от declaration.
    И это не "принято", а является стандартом на уровне языка.

    Использовать декларации нужно только в одном случае - если у тебя есть JavaScript код, который нужно прикрутить к проекту на TypeScript не переписывая. Частный случай - если у тебя есть npm-пакет, к которому нужно добавить типы

    Об этом написано в документации, и страницу с этой документацией гугл выдаёт в первой же строке:
    https://www.typescriptlang.org/docs/handbook/decla...
    Ответ написан
    2 комментария
  • Секционирование таблицы по хэшу. В чем принцип?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Как-как. Вызывается некоторая хэш-функция для значений ключа партицирования, её результат делится нацело на modulus, строка попадёт в ту партицию, для которой совпадает remainder.

    create table part (i int) partition by hash (i);
    create table part_0 partition of part FOR VALUES WITH (MODULUS 2, REMAINDER 0);
    create table part_1 partition of part FOR VALUES WITH (MODULUS 2, REMAINDER 1);
    insert into part select generate_series(1,10);
    select * from only part_0;
    select * from only part_1;


    на слишком малых выборках хэш ожидаемо может быть не столь равномерно распределён.
    Ответ написан
    Комментировать
  • Как сортировать объект в алфавитном порядке в js?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    К объектам неприменимо понятие сортировки. Порядок итерирования записей в объекте определяется стандартом: сначала числовые ключи по возрастанию, затем ключи, приводимые с строкам, по возрастанию, затем остальные ключи в порядке создания.
    Ответ написан
    Комментировать
  • Почему не работает функция вызванная в addEventListener?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    code должно быть с большой буквы.
    - if (e.keycode === 13) {
    + if (e.keyCode === 13) {


    Тая Зотова учу javascript
    Одно из важнейших, чему стоит научиться в первую очередь - отладка своего кода.
    https://learn.javascript.ru/debugging-chrome
    Ответ написан
    5 комментариев
  • В каком сервисе/программе ставить задачи себе/сотрудникам?

    xez
    @xez
    TL Junior Roo
    - jira
    - trello
    - YouTrack

    Ну и https://clickup.com/blog/jira-alternatives/
    Ответ написан
    Комментировать
  • Как оформить код?

    @dima20155
    you don't choose c++. It chooses you
    самое простое - используйте typedef или using
    А также можно написать свой класс-обертку для удобства.
    Ответ написан
    3 комментария
  • Сложно ли создать тг бота на c++?


    Сложно ли писать ботов на плюсах?

    Сложно.


    Есть ли видео курсы, литература на эту тему?

    Не видел таких.


    Какие есть библиотеки?

    Google: "C++ HTTP client", "how to create rest API with C++"


    Чем отличается программирование тг ботов на с++ и на других яп, скажем питоне?

    На C++ код в среднем менее приятный получается и чувствуешь, будто из пушки по воробьям стреляешь. Для реализации той же асинхронности нужно сильно больше букв.

    Если это не самоцель и просто хочется сделать телеграм-бота, который потребляет 2мб оперативки и отвечает на запросы за 1мс, то я бы лучше Rust изучил.
    Ответ написан
    1 комментарий
  • Сложно ли создать тг бота на c++?

    @dima20155
    you don't choose c++. It chooses you
    Отличается все прежде всего тем, что написание такого бота потребует чуть больше усилий в отличии от классического бота на python как минимум из-за меньшей популярности С++ в данной сфере. Судя по официальному сайту есть несколько библиотек для С++ для работы с телеграм API (https://core.telegram.org/bots/samples). Хотя вы всегда можете отправлять HTTP запросы напрямую с помощью какой-нибудь либы или совсем без неё.

    Но если вы ищите прежде всего видео о том как написать/воспользоваться той или иной либой на С++, то спешу вас огорчить: все что находится за пределами stl/boost/qt/sfml/sdl и ещё некоторого количества либ/фреймворков требует от вас чтение документации и, иногда, исходников.

    Сама программа (и её разработка) в случае С++ будет отличаться лишь, возможно, большей сложностью.
    Самая первая задачка, с которой вы столкнетесь - это собрать библиотеку и все зависимости. Одна из готовых библиотек использует следующий набор зависимостей:

    CMake
    Boost
    OpenSSL
    ZLib
    Libcurl (optional unless you want to use curl-based http client CurlHttpClient).

    И каждая библиотека за собой может тянуть ещё зависимости.
    Вот, например, installation notes для OpenSSL
    Это не всегда сложно, особенно для популярных библиотек, но требует время, а иногда и настройку/допиливание под свой тулчейн.
    Ответ написан
    Комментировать
  • Как пошагово работает сортировка .sort()?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Открывайте исходники движка и изучайте, как разработчик реализовал сортировку. Даже в пределах одного движка могут быть реализованы несколько разных алгоритмов, в зависимости от размера массива и типа элементов.
    Ответ написан
    Комментировать
  • Как пошагово работает сортировка .sort()?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Поскольку вопрос тегирован алгоритмами - человек пытается ИХ изучать а не контракт array.sort.

    В науке и технике... в качестве алгоритма сортировки любят использовать сортировку Хоара.
    Она-же Quick Sort. Еще в переводной литературе ее называют Быстрая сортировка делением.

    Еще я где-то читал (не помню где! блин) что ядро Linux иногда использует для своих нужд HeapSort.
    Или сортировку Пирамидой. Или пирамидальную. Достаточно быстрая и не требующая дополнительной памяти
    вообще. По месту сортирует.

    Более полное демо по алгоритмам с визуализацией здесь

    https://www.youtube.com/watch?v=kPRA0W1kECg

    Какую под капотом реализует JavaScript sort - чорт его знает. Но возможно одна из самых быстрых.
    Ответ написан
    4 комментария
  • Как изменить структуру кода?

    vabka
    @vabka Куратор тега Rust
    Нет, нельзя. Модули в Rust оперируют функциями/типами/трейтами, но не отдельными кусками кода.
    Ты можешь вынести функции f1 и f2 в отдельные файлы:

    main.rs
    mod m01;
    mod m02;
    mod m03;
    
    fn main() {
        m01::f1();
        m02::f2();
        let (i, p) = m03::f3();
        println!("i = {:?}", i);
        println!("p = {:?}", p);
    }


    m01.rs
    pub fn f1() {
     let num: u8 = 12;
     println!("num = {:?}", num);
    }


    m03.rs
    pub fn f2() {
     let s: String = "abc".to_string();
     println!("s = {:?}", s);
    }


    В случае m03 ты можешь попробовать сделать функцию, которая будет возвращать значения переменных i и p:
    pub fn f3() -> (u8, String) {
      let i: u8 = 88;
      let p: String = "xyz".to_string();
      (i, p)
    }


    PS: Я уже было хотел предложить макрос вида:
    macro_rules! f4 {
      () => {
        let i: u8 = 88;
        let p: String = "xyz".to_string();
      }
    }

    Но он работать не будет, ибо гигиена.

    Но можно сделать так:
    macro_rules! f4 {
      ($a: ident, $b: ident) => {
        let $a: u8 = 88;
        let $b: String = "xyz".to_string();
      }
    }
    
    fn main() {
        f4!(i, p);
        println!("{} {}", i, p);
    }


    PPS: ну и ещё есть макрос include!, который буквально решает твою задачу - вставить кусок кода из файла, но его я не советую использовать.
    Ответ написан
    2 комментария
  • Как присвоить динамическому массиву типа void* значение в Си?

    @res2001
    Developer, ex-admin
    Нельзя выделить память для произвольного типа, т.к. размер произвольного типа - произвольный. Память всегда выделяется конкретного размера.

    В вашем примере вы выделяете память для двух указателей (void*). На всех распространенных платформах указатель, не важно на какой тип он ссылается, имеет один и тот же размер.
    Нельзя сделать разъименование void*, т.к. это указатель с неопределенным типом - компилятор не знает какого типа данные лежат по адресу в указателе, а следовательно не может с ними корректно работать. Для нормальной работы нужно привести указатель к какому-нибудь типу и потом уже можно делать разъименование (ваш 3 пример).

    Ваш пример не корректен для х64 платформы, т.к. sizeof(void*) там 8 байт, а sizeof(int) - 4 байта.
    Вы mallocом выделяете 16 байт памяти (2 указателя), а в 3 присваивании (которое работает) присваиваете значение 10 старшей половине первого указателя. В общем выглядит как бред.
    Для х32 - корректен, т.к. тут sizeof(void*) == sizeof(int)

    Для копирования двух массивов произвольного типа и размера, нужно знать размер массива в байтах (не в элементах). Можно не знать тип, но знать размер необходимо - иначе ничего не поучится. Выделяете память заданного размера, приводите указатель к char* и побайтово копируете (memcpy).
    Приводить к int* и копировать intы в этом случае нельзя, т.к. массив может быть, например 3 байта или 33, тогда при копировании через приведение к int* вы неминуемо выйдете за границу массива.
    Ответ написан
    Комментировать
  • Как реализовать генерацию пар чисел без повторений?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Создаём массив [(10, 10) ... (30, 30)], тасуем его (shuffle), берём из него пары чисел подряд.
    Ответ написан
    2 комментария