• Каким образом узнать ImageId Ubuntu 20.04?

    @mureevms
    aws ec2 describe-images \
        --filters \
           "Name=owner-id,Values=099720109477" \
           "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-*-20.04-*-server-*"  \
           "Name=architecture,Values=x86_64" \
           "Name=creation-date,Values=2023-*" \
        --query 'Images[*].[CreationDate, ImageId]' \
        --region us-east-1 \
        --output table \
        | sort

    Последняя строка в выводе - искомый AMI
    Обратите внимание на параметр region. В разных регионах будет разный image-id.
    owner-id = 099720109477 это Canonical

    Вспомнил о сервисе поиска AMI на сайте ubuntu, там можно отфильтровать по параметрам, в качестве результата выводится последний созданный образ https://cloud-images.ubuntu.com/locator/ec2/
    Ответ написан
    Комментировать
  • Как подключить PostgreSQL к react-app вебсайту?

    @aleksey_savin
    Подключать приложение на React напрямую к базе данных - очень плохая идея. Код вашего сайта доступен для любого, кто откроет его в браузере. Соответственно, любые учётные данные, в данном случае от вашей базы данных, можно там же и подсмотреть. Выше верно написали: нужен бэкенд, например, на node.js, к нему будут отправляться API-запросы, например, через fetch или axios, и уже этот бэкенд будет связываться с базой данных.
    Ответ написан
    1 комментарий
  • Как подключить PostgreSQL к react-app вебсайту?

    Суть вопроса, как мне делать INSERT и SELECT запросы в вебсайте?

    Никак. Эти запросы должен делать бэкенд.
    А сайт должен делать http запросы к нему, например, при помощи функции fetch
    Ответ написан
    Комментировать
  • Можно ли заставить Node 18 использовать скомпилированную версию библиотеки?

    MvcBox
    @MvcBox
    Software Engineer [C/C++/JS(for Node.js)/etc]
    При запуске ноды в переменной окружения LD_LIBRARY_PATH можете задать свои пути поиска библиотек.
    LD_LIBRARY_PATH="тут_ваши_пути_поиска" node ./index.js
    Ответ написан
    2 комментария
  • Есть ли смысл учить Golang если уже хорошо знаешь .NET?

    GavriKos
    @GavriKos
    В том что если завтра вас уволят, то сможете отзываться на более широкий пул вакансий.
    Ну и общий кругозор расширите конечно
    Ответ написан
    2 комментария
  • Есть ли смысл учить Golang если уже хорошо знаешь .NET?

    1. Из коробки компилируется в единственный, сравнительно компактный, бинарь без зависимостей от рантайма и окружения.
    (и без подводных, в отличие от full aot и assembly trimming)

    2. Сможешь рассматривать вакансии, где требуется Golang, если собираешься искать работу.
    3. Сможешь нанимать go-шников со всеми вытекающими, если будешь искать разрабов в свой проект.
    4. Если твой проект должен будет активно взаимодействовать, например, с kubernetes и прочими devops-штуками, то Go может быть чуть удобнее, тк практически все эти инструменты написаны на Go и для работы с ними имеются готовые библиотеки, которые, вероятно, будут лучше, чем их альтернативы для .NET.
    Ответ написан
    3 комментария
  • Должны ли все асинхронные методы вызываться с ключом async?

    petermzg
    @petermzg
    Самый лучший программист
    Calculate не является асинхронной функцией поэтому async не нужен. И очень плохо вызывать в асинхронном коде Thread.Sleep, для асинхронного кода есть Task.Delay.

    async преобразует код в конечный автомат (State Machine)
    Ответ написан
    3 комментария
  • Можете посоветовать книги, статьи, видио уроки по JavaScript, jQuery и по PHP?

    @Kirill-Gorelov
    С ума с IT
    Если не хочешь после обучения оставаться голодным, то не изучай вордпрес...
    Изучай фреймворки. Джунов берут за хорошие деньги со знанием одного из фреймворка laravel/symphony, с ВП либо фриланс, либо средненькая веб студия....
    Ответ написан
    3 комментария
  • Какие навыки требуются Junior программисту микроконтроллеров?

    @dima20155
    you don't choose c++. It chooses you
    1. Прежде всего, нужно знание схемотехники, но в вашем случае этот этап можно вычеркнуть.
    2. Естественно, знание основ С и С++ (синтаксиса, базовых конструкций). Советую вам использовать в своих проектах С++, поскольку зачастую вы сможете писать в стиле С без каких-либо проблем, а при необходимости воспользоваться фичами/библиотеками для С++.
    3. Навыки hardware и software отладки. Здесь просто нужна практика с любимой IDE.
    4. Понимание указателей, типов памяти (статическая, динамическая, автоматическая, регистровая). Как память выделяяется и прочее.
    5. Знание базовых структур данных. Это немного скользкий пункт, поскольку С++ предоставляет хорошую (хотя и весьма минималистичную) стандартную библиотеку STL, в которой есть большинство из необходимых структур данных, но они используют довольно много дополнительной аллокации памяти, поэтому если пишете под что-то 8битное, то имейте это ввиду.
    6. Знание git на базовом уровне сейчас важно для джуна любой IT специализации.
    7. Неплохо бы иметь базовое представление о том как устроен микроконтроллер и его архитектура.
    8. Неплохо бы понимать RTOS (FreeRTOS - классика жанра), а главное зачем он нужен, а когда он не нужен или вреден.
    9. Лично мне всегда в работе пригождается python, но это всегда сторонние задачи/автоматизация.

    P.S. Нашел ещё вот такой RoadMap.
    P.S.S. Получилось довольно объемно. Но пункты 2-5 по сути можно объединить в один. Все это можно изучить написав парочку проектов для классической STM32 + HAL.
    P.S.S.S. Сам начинал как hardware разработчик. Путь embedded разработчика начального уровня не был сложным для меня и занял не очень много времени.
    Ответ написан
    Комментировать
  • Как найти COM порт оптимально?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, ардуино (ну как минимум китайские клоны) отдают определённый VID/PID USB устройства. Этим можно пользоваться для сужения диапазона поиска. Эту инфу можно узнать из реестра Windows.
    Во-вторых, если ты контролируешь прошивку ардуинки, можешь заставить её отправлять какой-то хэндшейк (заранее известный пакет) при подключении к порту (обычно арудино перезагружается при коннекте к порту). Тогда достаточно подождать совсем чуть-чуть, отправка данных не потребуется. Также меньше шансов что-то поломать, отправив левые данные в неизвестное устройство.
    В-третьих, просто сделай два последовательных цикла - один создаёт и запускает потоки, а второй их дожидается. Тогда ожидание будет параллельным.
    Ответ написан
    2 комментария
  • Нужен ли антивирус на linux server?

    @nApoBo3
    Антивирус нужен везде где вы имеете дело в не контролируемыми данными. Все.
    Если в вашу систему могут попасть или пройти через нее данные от не доверенных систем и антивирус умеет с данным типом данных работать, то он нужен.
    Например
    1) у вас есть NTP сервер, вы получаете время из не доверенной системы и раздаете его не доверенным системам. Но антивирус не умеет работать с NTP протоколом. Значит не нужен.
    2) у вас FTP, вы получаете файлы от не доверенных систем и отдаете, антивирус умеет работать с файлами, значит нужен.
    3) у вас прокси, он стоит за другим прокси управляемым вами, вы вышестоящий прокси считаете доверенной системой, антивирус на нижестоящем прокси не нужен.

    Этот вопрос никак не связан с ОС сервера, ответ одинаков для любой операционной системы.
    Ответ написан
    Комментировать
  • Как называется такая практика и является ли она приемлемой?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Такая практика называется вандализмом и не является приемлемой.

    Создать коммит Х2, который отменит все новые изменения master можно например так
    # Вредоносные действия делаем в своей ветке, 
    # так как не можем коммитить напрямую в master
    git switch feature
    # Якобы подтягиваем изменения из master, но по факту отменяем.
    git merge --ff $(git commit-tree -p master -p feature1 -m "X2" feature1^{tree})
    # Отправляем Pull Request обратно в master
    Но зачем? Практика перезатирания чужих правок ненормальна, если только это не исправление ошибок.

    Чтобы бороться с вандализмом используется рецензирование, когда Pull Request не вливается в основную ветку пока другие люди не просмотрят изменения и не одобрят.
    Ответ написан
    4 комментария
  • Как работает asyncio.sleep?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Есть такой системный вызов select (а также подобные ему poll, epoll итд), суть которого - передать массив файловых дескрипторов (частный случай - сетевых соединений) и затем при получении событий ввода-вывода получить список тех дескрипторов, в которых произошёл ввод-вывод. Важно понимать, что при это программа "засыпает", передаёт управление ОС и не тратит ресурсов. ОС сама разбудит программу при наступлении нужных событий (записался файл, пришли новые сетевые байтики итд). Высокопроизводительные сетевые приложения (типа nginx, haproxy итд) используют подобный подход для того, чтобы эффективно обрабатывать большое количество сетевого трафика одновременно.

    asyncio работает как раз примерно по тому же принципу. Когда случается ввод-вывод, нужная функция "засыпает", а управление передаётся потоку событий. Соответственно, он либо находит задачу, которая ожидает выполнения и передаёт ей управление, либо видит, что все задачи уже одидают какого-нибудь ввода-вывода и запускает select на все ожидающие дескрипторы (возможно, в реальности используется не select, а какой-то из его аналогов, но это для нас сейчас непринципиально). Как только приходит событие, программа просыпается, поток событий находит нужное событие и передаёт управление соответствующей задаче, которая его ожидала. Это позволяет очень эффективно в один поток работать с задачами, которые много ожидают ввода-вывода, но мало выполняют реальной процессорной работы.

    Обычный ввод/вывод является блокирующим: пока не будет выполнена операция (чтение/запись/передача/приём), программа приостанавливает свою работу в ожидании. В asyncio весь ввод-вывод является неблокирующим: операции ввода-вывода не приостанавливают работу программы, а позволяют перейти к другим ожидающим задачам.

    Обычный вызов sleep приводит к приостановке и засыпанию программы на указанное время (с передачей управления ОС), и в ней в это время ничего не выполняется. Как только время истечёт, ОС вернёт управление программе. Всё это время программа не работает, события ввода-вывода не обрабатывает.

    В то же время asyncio.sleep возвращает управление потоку событий, а не ОС, что позволяет переключиться на выполнение других задач, обработать новые события итд итп. Программа не останавливается и управление ОС не передаёт (ну, кроме сна в процессе исполнения select), поэтому asyncio.sleep приводит к неблокирующему засыпанию, не мешающему выполнять задачи, которым ждать окончания сна одной конкретной задачи не нужно. Когда истечёт не менее чем указанное в asyncio.sleep время, поток событий вернёт управление приостановленной задаче.

    Важно отметить, что и sleep, и asyncio.sleep не гарантируют, что функция возобновит работу через указанное число секунд, а не позже, но при этом sleep делает это значительно точнее. Потому что возврат в вызвавшую asyncio.sleep функцию может произойти только из потока событий и только при условии, что поток событий не вернёт управление какой-то другой задаче.

    Например, пусть есть функция, которая делает asyncio.sleep(1), затем три секунды работает числомолотилка без ввода-вывода. Тогда если у нас выполняются подряд с интервалами 0.1 с три таких функции, то первая задержит на 2.9 секунд возврат управления второй, а вторая - на 5.8 с третьей.

    Это общий принцип, разумеется, там много нюансов и особенностей реализации.
    Ответ написан
    Комментировать
  • Как работает asyncio.sleep?

    Vindicar
    @Vindicar
    RTFM!
    Идея простая.
    Асинхронные приложения - это набор пар "операция - обработчик", где операция - это некоторый длительный процесс (скажем, вводы/вывод), который не требует постоянного внимания со стороны кода. Когда операция завершается, выполняется её обработчик. Этот обработчик может планировать другие операции, и так далее.

    Корутины - это такие функции, которые умеют сохранять своё состояние, и восстанавливать его. Т.е. когда корутина делает await-вызов, она начинает длительную операцию, а обработчик этой операции просто восстанавливает контекст корутины и продолжает её выполнение.

    Соответственно, await-вызов сохраняет текущий контекст корутины, и планирует новую длительную операцию. Какую - зависит от того, что идёт после await. Эта операция представлена тем или иными awiatable значением (Future, Task и т.п.).

    Рабочий цикл (loop, его также называют реактор) просто проверяет текущие операции. Как только одна из них завершилась, он выполняет её обработчик. А потом продолжает проверять остальные активные операции.

    Ключевой момент - выполняет обработчик, а только потом проверяет остальные операции. Т.е. если обработчик планирует операцию через await - это не проблема, она будет выполняться наравне с остальными. А вот если обработчик просто делает что-то длительное, он не возвращает управление циклу, и не даёт выполняться остальным операциям.

    asyncio.sleep() планирует ничего не делающую операцию, которая завершится успехом через заданное время. Поэтому её выполнение не мешает циклу-реактору. Просто ещё один await вызов, который приостанавливает текущую корутину и возвращает управление реактору.

    time.sleep() ничего не знает о реакторе и асинхронных операциях. Она приостанавливает выполнение обработчика, не прерывая его и не отдавая контроль реактору. Поэтому на время time.sleep() (или любой длительной синхронной операции) спит вся программа.
    Ответ написан
    5 комментариев
  • Как называется такая практика и является ли она приемлемой?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Является ли нормальной практикой для девелопера создать ветку feature1 от не последнего коммита мастера, то бишь не от "g"

    Да. В частности это стандартная практика разработчиков ядра linux: фичи должны расти от релизов или релиз-кандидатов, а не от каких-то случайных коммитов.

    и потом смерджить feature1 с коммитом X2 затирая изменения f и g?

    Из вопроса непонятно, это требование -- затирать, или это побочный эффект которого хочется избежать?
    Если делать обычный git merge, то никакого затирания не будет. Будут конфликты, если изменения касаются одних и тех же мест, иначе будет объединение изменений ветки и мастера.
    Чтобы затирать изменения можно делать git merge --strategy=ours -- в результате мёржа изменения сделанные в ветке которая мёржится будут потеряны.
    Ответ написан
  • Как называется такая практика и является ли она приемлемой?

    @Vitsliputsli
    Последний коммит в ветке сегодня, завтра уже может и не быть таковым.
    Merge коммиты не "затирает" - пишите команды, которые используете.
    Ответ написан
    2 комментария
  • Как вынести поддомен в отдельную зону и управлять ею с помощью другого менеджера DNS?

    @mureevms
    В принципе все просто
    - Создать зону api.company.com на втором DNS сервере
    - На первом DNS cоздать NS записи для этого домена, в качестве хоста указать api, в качестве значения NS сервера второго хостера
    Должно выглядеть примерно так
    $ dig company.com NS
    ...
    ;; ANSWER SECTION:
    company.com.		900	IN	NS	dns2.yandex.net.
    company.com.		900	IN	NS	dns1.yandex.net.
    ...
    
    $ dig api.company.com NS
    ...
    ;; ANSWER SECTION:
    api.company.com.	3600	IN	NS	ns1.dns.npdc.ru.
    api.company.com.	3600	IN	NS	ns2.dns.npdc.ru.
    ...
    Ответ написан
    1 комментарий
  • Как venv ищет библиотеки?

    @igor6130
    Также можете для удобства работать через PyCharm, чтобы не беспокоиться о создании виртуальных окружений. IDE сделает это за вас.
    Ответ написан
    Комментировать
  • Можно ли упростить выражение sql, чтобы избежать такой вложенности?

    iMedved2009
    @iMedved2009
    Не люблю людей
    with t as(SELECT table_name, column_name, data_type, ROW_NUMBER() OVER (PARTITION BY table_name ORDER BY column_name) as num
      FROM information_schema.columns
      WHERE table_schema = 'public')
    select json_agg(json_build_object(num, json_build_object(column_name, data_type))) from t group by table_name;
    Ответ написан
    2 комментария
  • С чего начать изучение ML, AI и т. д. чтобы успеть к сроку?

    @dmshar
    А тему курсовой работы мы должны угадать?
    А что такое "чуть больше" чем азы Python - т.е. до операторов цикла и условных операторов вы уже дошли?
    А учитесь вы на математическом факультете московского университета, или на танцевально-астрономическом факультете мухосранского мелиоративного колледжа?
    А по какому предмету курсовая должна угадать система искусственного интеллекта, которую мы подключим, что-бы понять, чего-же тут хотел сказать интеллект естественный?
    Впрочем изучить ИИ "до 10-ых чисел мая" - это, конечно, лучше и реальнее, чем "профессионал по ИИ за 7 дней".

    Но если вы решили эту информацию засекретить, то вот вам универсальный список:

    https://ru.stackoverflow.com/questions/Книги-и-уче...
    и
    https://www.cyberforum.ru/ai/thread2010374.html
    Ответ написан
    Комментировать