Задать вопрос
  • Rust как подключить внешний файл в модуле?

    bingo347
    @bingo347
    Crazy on performance...
    Структура модулей в крейте с точностью повторяет структуру файлов на диске, даже если модуль объявлен внутри модуля не вынесеного в отдельный файл.
    То есть одно и то же объявление mod db;будет искать файл в разных местах, в зависимости от того, где оно написано:
    • если написать в корне src/lib.rs то будет искать src/db.rs или src/db/mod.rs
    • если написать в модуле cmd внутри src/lib.rs то будет искать src/cmd/db.rs или src/cmd/db/mod.rs

    Но у меня большое подозрение, что Вы вообще не понимаете, как работает ключевое слово mod, ибо напихали его где только можно, включая сам db.rs (там будет искать src/db/db.rs кстати). Ключевое слово mod подключает модуль как дочерний того модуля, где оно написано. А для импорта имён нужно использовать use.

    И как верно подметил fenrir, если бы Вы внимательно прочитали растбук, то Вы бы это поняли.
    Ответ написан
    2 комментария
  • Rust как подключить внешний файл в модуле?

    fenrir1121
    @fenrir1121
    Начни с документации
    Я уже 3ч маучаюсь с этой ошибкой...
    А мог за 15 минут прочитать 7 главу растбука, где все разобрано.
    Ответ написан
    5 комментариев
  • Как перевести vanilla js класс в react среду?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    «Некоторую информацию» нужно хранить в стейте или менеджерах, «работать с DOM» нужно средствами Реакта, а для истории использовать соответствующие библиотеки. И вот от класса ничего не осталось, можно его удалить.
    Ответ написан
    Комментировать
  • Совместима ли материнка и этот блок питания?

    @apppostol
    Совместимы.

    ps.
    Вообще конечно про совместимость надо думать ДО покупки)
    И там в компе есть еще другие штуки, которые тоже требуют внимания касаемо совместимости.
    Ответ написан
    8 комментариев
  • Почему именно такой порядок вывода в консоль?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Исследования в первоначальной версии ответа (ниже) натолкнули на поведение, которое смог объяснить Jonas Wilms в ответе на SO.

    Возврат промиса из C1 then() создаёт ТРИ последовательных микротаска:
    1. NewPromiseResolveThenableJob, который вызывает then() на том уже отресолвленном промисе, что вернули в C1. И т.к. этот промис уже отресолвлен, сразу же в очередь вставляется следующий микротаск:
    2. NewPromiseReactionJob этого уже разрешенного промиса, и этот, в свою очередь, добавляет третью микрозадачу:
    3. ещё одну NewPromiseReactionJob, которая уже выводит в лог "2".


    Если возвращать не промис (и не thenable объект), а "простое" значение или undefined, то добавляется всего один микротаск.

    Раньше подобная задержка в три шага была и для await, но потом её оптимизировали в движке V8. А вот про then() забыли.

    Подробнее стоит посмотреть ответ на SO, ссылка в начале.

    [первая версия ответа]

    Интересный вопрос! Больше экспериментов.
    Вспомогательная функция для читаемости:
    const log = (value, returnPromise) => () => {
      console.log(value);
      if (returnPromise) return Promise.resolve();
    };
    Возвращает функцию, которая обычный console.log() с переданным значением. И если второй аргумент трушный, то вернёт отрезолвленный промис.

    Эксперимент 1. «Застёжка-молния»
    Promise.resolve()
      .then(log('a1'))
      .then(log('a2'))
      .then(log('a3'))
      .then(log('a4'))
      .then(log('a5'))
      .then(log('a6'))
    ;
    
    Promise.resolve()
      .then(log('b1'))
      .then(log('b2'))
      .then(log('b3'))
      .then(log('b4'))
      .then(log('b5'))
      .then(log('b6'))
    ;
    Выводит поочередные a1 b1 a2 b2 a3 b3 ...
    Эксперимент 2. «Отстаём на 2»

    Единственное отличие: в первом А возвращаем отресолвленный промис.
    Promise.resolve()
      .then(log('a1', true))
      .then(log('a2'))
      .then(log('a3'))
      .then(log('a4'))
      .then(log('a5'))
      .then(log('a6'))
    ;
    
    Promise.resolve()
      .then(log('b1'))
      .then(log('b2'))
      .then(log('b3'))
      .then(log('b4'))
      .then(log('b5'))
      .then(log('b6'))
    ;

    Выводит
    a1 b1 b2 b3 a2 b4 a3 b5 a4 b6 a5 a6
    А-шки после 1-й отстают на 2, пропустив вперёд b2 и b3.

    Очередь микрозадач работает как FIFO буфер: первый пришёл, первый ушёл.

    Цепочка из then() выполняется асинхронно. После выполнения очередного, создаётся следующий microtask. Несколько цепочек, как видно из 1-го эксперимента, выполняются параллельно-пошагово, «молнией».

    Возврат созданного выполненного промиса, и ожидание его разрешения вызывает задержку в очереди микрозадач на 1 микротаск + «перемещение» цепочки "А" в конец (меняется порядок a-b => b-a):
    "молния"
    a1 b1 ; a2 b2 ; a3 b3 ; a4 b4 ; a5 b5 ; a6 b6
    
    с промисом в А1
    a1 b1 ; b2 ; b3 a2 ; b4 a3 ; b5 a4 ; b6 a5 ; a6


    Подробнее с тремя цепочками

    На этот раз три цепочки промисов "a", "b", "c". Цепочка "А" вернёт промис на 1-м шаге, "С" — на 4-м. Код эксперимента:
    const output = [];
    
    const makeChain = (key, n = 5, trueStep = false) => {
      let p = Promise.resolve();
      const arrow = isArrow => isArrow ? '->' : '';
      for (let i = 1; i <= n; i++) {
        const returnPromise = trueStep === i;
        const afterPromise = trueStep === i - 1;
        p = p.then(() => {
          output.push(`${arrow(afterPromise)}${key}${i}${arrow(returnPromise)}`);
          if (returnPromise) return Promise.resolve();      
        });
      }
      return p.catch(console.error);
    };
    
    const n = 7;
    makeChain('a', n, 1),
    makeChain('b', n),
    makeChain('c', n, 4),
    
    // мАкрозадача выполнится после всех мИкрозадач:
    setTimeout(() => console.log(output.join(' ')));

    Результат c вручную добавленными разбивками:
    a1-> b1 c1 ; b2 c2 ; b3 c3 ->a2 ; b4 c4-> a3 ; b5 a4 ; b6 a5 ; b7 ->c5 a6 c6 ; a7 c7
    Тут всё ещё не вполне мне понятен порядок после возврата промиса из C4.
    Ответ написан
  • Как загрузится с установочной флешки Arm Debian на M1?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никак. Mac arm официально поддерживает только MacOS и не поддерживает другие ОС. Есть один полусырой проект линукса - что-то там даже работает, в целом же вообще не юзабельная система. Название не помню, но легко гуглится. Поэтому если хотите запустить арм линукс на маковской арм платформе - используйте докер, VirtualBox, UtmApp или qemu.
    Ответ написан
    Комментировать
  • Как выбрать телевизор чтобы использовать его как монитор?

    VoidVolker
    @VoidVolker Куратор тега Железо
    Dark side eye. А у нас печеньки! А у вас?
    Как выбрать телевизор чтобы использовать его как монитор?

    Купить монитор, а не телевизор.

    очень важно чтобы глазам было комфортно
    чтобы не уставали

    • Брать монитор на матрице IPS (есть хорошие варианты на OLED - но я его не юзал, так что ничего конкретного про него не скажу)
    • Желательно изогнутый - ибо уже на сорока трёх дюймах искажения в углах заметны, если конечно монитор на столе, а не на стене в трёх метрах
    • Разместить монитор в правильном положении на правильном расстоянии от глаз
    • Организовать правильное освещение рабочего места
    • Использовать приложения типа f.lux
    • Делать регулярно перерывы между работой
    • Делать регулярно физические упражнения для глаз, шеи, спины и прочих частей тела и не раз в неделю, а каждый день или даже несколько раз в день (главное соблюдать нагрузку и регулярность - тут не тяжёлая атлетика нужна)
    Ответ написан
    8 комментариев
  • Как реализовать стартап и сохранить авторское право?

    @rPman
    Идеи стоят мало, если идея ценная - патентуй, как минимум в ее защите тебе поможет государство, но только на территории своей страны,и глобально защиту искать получится очень дорого, только очень ценные идеи этого стоят, что очень редко. Чаще патентуют идеи не для того что бы идею не украли, а что бы защититься от мошенников, которые возьмут вашу идею, запатентую быстрее вас и призовут государство что бы вас 'наказать' (и это очень 'хорошо' работает, к сожалению).

    Для создания чего либо нужен тот кто найдет, организует, проконтролирует... будьте тем кто этим займется, ну а без этого идея не взлетит.

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

    p.s. не ищите 'специалиста по ИИ', лучший способ вас обмануть, ведь если что то не получится, это 'не человек виноват а ИИ несовершенен'. Ищите специалиста для решения конкретной задачи.

    p.p.s. вам придется сделать ставку, либо своими деньгами, либо своим временем и 'уникальной идеей', вам придется пойти на риск.
    ----

    Есть замечательная техника, проверенная временем - 'разделяй и властвуй'. Не говорите никому всю информацию целиком, разделяйте ее, каждому сообщайте ровно столько, сколько нужно для решения задачи.
    Ответ написан
    21 комментарий
  • Как в Windows 11 на рабочем столе переименовать файлы без перемещения?

    MaximFoxWevo
    @MaximFoxWevo
    Нажми "ПКМ" по Рабочему Столу, выбери "Персонализация", дальше "Пуск" и отключи "Показывать рекомендуемые файлы в меню "Пуск", недавние файлы в проводнике и элементы в списках переходов". Мне лично помогло [Windows 11 24H2]
    67ada15684af6576262663.png
    Ответ написан
    1 комментарий
  • Можно ли оживить флешку?

    VoidVolker
    @VoidVolker Куратор тега Железо
    Dark side eye. А у нас печеньки! А у вас?
    Брак или подделка - вернуть в магазин.
    Ответ написан
    Комментировать
  • Как полностью удалить Ред ОС с компьютера?

    CityCat4
    @CityCat4
    В больнице с переломом ноги
    Сейчас все в основном с EFI, так что просто в BIOS переключаете загрузку на винду, потом заходите в винду и форматируете "неизвестный" раздел. Это можно и не делать, просто место пропадать будет :)
    Ответ написан
    Комментировать
  • ИИ на стадии обучения программированию. Стоит ли?

    ИИ не позволяет тебе научиться двум очень важным навыкам:
    1. Поиск и фактчекинг информации
    2. Дебаггинг, самостоятельный поиск и решение проблем.

    "Ломание головы, почему код не работает" - это важная часть учёбы.

    Любая LLM - это не всезнающий джин и у всех есть свои неприятные ограничения с которыми ты рано или поздно столкнёшься.

    И RAG, всякие MoE, подключение поисковика не всегда могут помочь.

    Без навыков самостоятельного поиска ты даже не поймёшь, что нейронка тебе нагаллюцинировала ересь.

    Я не говорю, что тебе нужно срочно отказываться и прекращать использовать chatgpt. Это точно такой же инструмент, как и поисковик, всякие QnA, stackoverfloe и тд, со своими ограничениями и нишами, где он хорошо работает.
    Ответ написан
    Комментировать
  • Как в корпоративном секторе ведётся учёт времени на задачу?

    "Думал" - это такая же часть реализации, как и "писал", так что выделять отдельно её нет никакого смысла.

    Другое дело, что если задача большая и непонятная, то её декомпозируют на "исследование", "проектирование", "мониторинг после деплоя" и т.п. И каждый такой этап - это, по сути, отдельная (атомарная) задача.

    У нас при этом принято каждый день отмечать потраченное время в задачу и оставлять комментарий, если это время ушло на что-то необычное ("не работал сервер", "пошёл не по тому пути" и т.п.). Системно за этим никто не следит, но иногда такие комментарии помогают на ретроспективах/постмортемах или клиенту доказать, что перерасход по задаче был не по нашей вине (а потому что требования в процессе они меняли три раза и не могли два месяца выделить ресурсы) и его придётся оплатить.
    Ответ написан
    5 комментариев
  • Обьясните в чём суть инкапсуляции?

    Инкапсуляция защищает не от хакеров, а от неправильного использования объектов.
    Как пример - у тебя может быть класс "Заказ" и у него может быть какой-то статус (оплачен/ждёт оплаты/отменён итд).
    При этом у тебя могут быть правила типа: уже оплаченный заказ не может стать вдруг неоплаченным, а отменённый заказ нельзя взять обратно в работу.
    Тогда логично будет сделать поле статуса приватным (не доступным для изменения извне напрямую), а менять его только через методы, где будет происходить вся валидация.
    (В некоторых языках такие правила принято описывать на уровне типов, чтобы даже валидаций никаких было делать не нужно)

    Приватные поля объекта - это его состояние.
    Методы объекта - это способы его использования.

    Если у тебя в объекте появляется поле x и методы getX / setX (или авто геттеры/сеттеры в C#), то значит, что у тебя и нет явных причин делать это поле приватным, кроме соблюдения общепринятых соглашений.
    Ответ написан
    15 комментариев
  • Как выгрузить больше 100 постов через VK API?

    @WaterSmith
    Android-разработчик. Java, Kotlin
    Можно ли как то обойти ограничение?

    Можно, выгружайте по частям, по 100 за раз.
    Ограничение в АПИ сделано не просто так, а для уменьшения нагрузки на сервера.
    Ответ написан
    Комментировать
  • С чего начать изучать системное администрирование?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    software engineer
    Настрой что-нибудь.

    Поставь на линуксе веб сервер. Прикрути к нему php и mysql, поставь wordpress, убедись что все работает. Вот уже что-то есть. Сделай бэкап всего, поломай и восстанови из бэкапа.

    Подними мониторинг, который будет что-нибудь мониторить, свободное место, нагрузку на CPU.

    Настрой уведомления от твоего мониторинга на почту или в телеграм.

    Ну вот уже для начала что-то будет.
    Потом можно будет почитать как єто все делается другими инструментами. Или все тоже самое но в докере.
    Ответ написан
    Комментировать
  • Как декомпозировать задачи, с которыми ты впервые сталкиваешься?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Искать, читать, анализировать, исследовать, делать выводы. Какие тут еще могут быть варианты-то? Ну, кроме варианта напрячь кого-то, а самому пойти пить чай/кофе с пончиками. Логика плюс научный метод в помощь.
    В целом же, касательно задачи именно декомпозиции есть следующие основные подходы: сверху вниз, снизу вверх и совмещённый - часть делается сверху, часть снизу. Берёте листочек бумаги и рисуете на нём все элементы вашей задачи и вообще всё, что по ней известно. Ваша задача - это ведь не просто одно слово какое-то или фраза какая-то, а что-то типа "если на входе А - то на выходе Б, если В - то Г". Далее рисуете связи между ними - что, к чему, куда и как. Вот вам и готов первый уровень декомпозиции. Если что-то неизвестно или висит в воздухе - ничего страшного, значит надо просто изучить вопрос глубже, собрать дополнительные данные и прочее. И далее повторяете в таком же духе. Берёте один элемент и делите его на составляющие таким же способом.
    Еще один тоже достаточно неплохой подход: слева рисуете исходные данные - то, что у вас есть, а справа результат - то, что должно получиться в итоге. Вот где-то между ними и есть решение. Рисуем стрелочку слева направо и думаем - что это за стрелочка? Как она работает? Что она делает такого, чтобы получился нужный результат? В центре рисуем известные части/элементы сей головоломки и потихоньку создаём между ними связи в процессе размышлений и исследований.
    Реальные примеры декомпозиции:

    Киоск для онлайн-магазина
    Ответ написан
    8 комментариев
  • Как посчитать количество пересечений с помощью метода filter?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Решим задачу в общем виде - сделаем функцию, находящую количество совпадающих элементов у любых итерируемых объектов. Причём под совпадением будем понимать не обязательно непосредственное равенство (оставим это как вариант по умолчанию), а равенство некоторых производных значений. Так что к чёрту filter (а ещё Safari - говорят, яблочные уроды пока не реализовали поддержку методов итераторов; впрочем, сделать обычный for...of вместо reduce не проблема):

    function countIntersections(data1, data2, key = n => n) {
      const getKey = key instanceof Function ? key : n => n[key];
      const keys = new Set(Array.from(data2, getKey));
      return data1[Symbol.iterator]().reduce((acc, n) => acc + keys.has(getKey(n)), 0);
    }

    В вашем случае применять так: const result = countIntersections(newWord, glas);.

    Другие примеры использования:

    countIntersections(Array(7).keys(), Array(4).keys()) // 4
    countIntersections('abCdE', 'ACe', n => n.toLowerCase()) // 3
    countIntersections([ { id: 1 }, { id: 2 }, { id: 3 } ], [ { id: 3 } ], 'id') // 1
    Ответ написан
    Комментировать