Задать вопрос
  • Как исправить отличающийся символ в названии файла на macos и windows?

    fenrir1121
    @fenrir1121
    Начни с документации
    В linux и macos все кодировки по-умолчанию совпадают с UTF-8, а windows с ее cp1251 и cp866 для любителей острых ощущений.
    Что касается нормализации, есть 4 вида: NFC, NFD, NFKC и NFKD
    В разницу композиции и декомпозиции углубляться не буду, для этого есть документация и W3C, но отмечу что NFKC и NFKD могут приводить к потере данных, поэтому лучше использовать NFC, а остальные использовать если ее недостаточно.

    from unicodedata import normalize
    
    def eq_nfc(str1, str2):
        return normalize('NFC', str1) == normalize('NFC', str2)
    Ответ написан
    Комментировать
  • В чем отличие реляционных от нереляционных БД?

    hint000
    @hint000
    у админа три руки
    ...потому что везде акцент на то, как хранятся данные - структурированно в таблицах

    ...как уже сказал, везде акцент на таблицы, не на связи
    Как же так? Я вот отрыл вики, и там сразу акцент на связи (отношения), даже явно говорится, что делать акцент на таблицах - это неправильно:
    https://ru.wikipedia.org/wiki/Реляционная_модель_данных
    Термин «реляционный» означает, что теория основана на математическом понятии отношение (relation). В качестве неформального синонима термину «отношение» часто встречается слово таблица. Необходимо помнить, что «таблица» есть понятие нестрогое и неформальное и часто означает не «отношение» как абстрактное понятие, а визуальное представление отношения на бумаге или экране. Некорректное и нестрогое использование термина «таблица» вместо термина «отношение» нередко приводит к недопониманию. Наиболее частая ошибка состоит в рассуждениях о том, что РМД имеет дело с «плоскими», или «двумерными» таблицами, тогда как таковыми могут быть только визуальные представления таблиц. Отношения же являются абстракциями и не могут быть ни «плоскими», ни «неплоскими».

    Для лучшего понимания РМД следует отметить три важных обстоятельства:

    • модель является логической, то есть отношения являются логическими (абстрактными), а не физическими (хранимыми) структурами;
    • для реляционных баз данных верен информационный принцип: всё информационное наполнение базы данных представлено одним и только одним способом, а именно — явным заданием значений атрибутов в кортежах отношений; в частности, нет никаких указателей (адресов), связывающих одно значение с другим;
    • наличие реляционной алгебры позволяет реализовать декларативное программирование и декларативное описание ограничений целостности, в дополнение к навигационному (процедурному) программированию и процедурной проверке условий.
    Ответ написан
    2 комментария
  • В чем отличие реляционных от нереляционных БД?

    @vism
    Реляционные - те, где можно установить отношения между таблицами, у них статичные поля. И можно связать таблицы по полю.
    Они статичные, как каркас.

    А нереляционные - подвижны, там не сделать связь обычно или сделать можно искуственно кодом, но не в самой БД.
    У них даже разные записи одной "таблицы" могут содержать разный набор полей.

    Как мог по простому описал:)
    Ответ написан
    Комментировать
  • В чем отличие реляционных от нереляционных БД?

    Секунда факт-чекинга:

    Кассандра хранит данные не в таблицах, а в семействах столбцов aka в разреженной матрице.
    + В ней нельзя просто так заджоинить или отфлитровать по какому-нибудь полю.
    + Соответственно нет никакой гарантии целостности на уровне ссылок на сущности из другой таблицы.

    А NoSQL это не только реляционное/нереляционное, но и про нарушение ACID и использование самого по себе SQL
    Ответ написан
  • В чем отличие реляционных от нереляционных БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я думаю что главное отличие - это способность осуществлять соединения (JOINS) по любому полю.

    Попробуйте сджойнить две таблицы Cassandra по любому полю. Хрен вам. Это считается неверным дизайном. С точки зрения идеологии Cassandra вы должны были дизайнить модель так чтобы таких джойнов (или таких мыслей) у вас никогда не возникало. Грубо говоря - хотите какую-то выборку - подготовьте ее заранее на уровне архитектуры. Типа мат-вью.

    Да что там джойн. Там даже выбрать по предложению WHERE не всегда можно. Тоже считается антипаттерн. В базовом SQL синтаксисе это не сработает. Надо добавлять опцию allow filtering что как-бы говорит нам - что мы вышли за рамки обычного запроса. Захотели птичьего молока...

    А вот для Oracle/PG/Mysql/MSSQL - получить джойн по любому полю с любым - сущий пустяк. Хотя дать смысл этому джойну будет сложнее. Джойнить величины с величинами.

    Хотя в последнее время различия между реляционными и прочими - стираются. Это как парадигмы в ЯП. Лет 20 назад все говорили о парадигмах. Сейчас - многие языки считаются мультипарадигменными. Тоесть спор сам по себе закрыт на уровне определения.
    Ответ написан
    Комментировать
  • Привязаны ли номера портов к протоколам транспортного и прикладного уровня?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нет. Не привязаны. Но есть традиции. Традиционно FTP сервер поднимается на 21 порту если отдельно мы не указали в подключении другое. Есть конфликты портов когда 2 приложения хотят поднять листенеры на 8081 к примеру. В этом случае успел тот кто первый.

    Можешь использовать любой свободный номер порта при создании листенера. Только первые 1000 номеров зарезервированы для системных процессов ОС. Для прикландых - доступны все остальные от 1000 и выше.
    Ответ написан
    8 комментариев
  • Привязаны ли номера портов к протоколам транспортного и прикладного уровня?

    @pfg21
    ex-турист
    протоколы не привязаны к портам.
    но есть официальные "дефолтные" рекомендации Список портов TCP и UDP.

    да. на любой порт, это просто номер квартиры где обитает конкретный сервис.
    к примеру, в давние времена слабых машин обычно на 80 порту работал многофункциональный апач, ворочавший php скриптами. а на порту 8080 висел какойнить легкий lighthttpd который быстро отдавал статические файлы (картинки).

    для tcp/udp "номер порта" это просто число в заголовке их пакета.
    tcp/udp , в принципе, формируют само понятие порта для более высших по стеку протоколов. так скажем, находятся на уровень "выше" чем порты.
    порты значимы лишь для протоколов, работающих через tcp/udp.
    другие протоколы, не завязанные на tcp/udp, вообще не будут ничего знать о портах. у них будут другие системы разграничений потоков данных.
    Ответ написан
    Комментировать
  • Привязаны ли номера портов к протоколам транспортного и прикладного уровня?

    hint000
    @hint000
    у админа три руки
    и где обычно это все указывается?
    В Linux есть справочный файл /etc/services, в котором перечислены порты tcp/udp, по умолчанию назначенные (но не привязанные намертво) различным протоколам прикладного уровня.
    В Windows тоже есть аналогичный файл: C:\Windows\System32\drivers\etc\services.
    Ответ написан
    Комментировать
  • Как правильно настроить локальную сеть между виртуалками windows и ubuntu в vmware?

    fruworg
    @fruworg
    Поставьте айпишник бубунты в шлюз виндоуса, а айпишник виндоуса в шлюз бубунты.
    Ответ написан
  • В чем отличие цифровых, электронных и виртуальных денег?

    Zoominger
    @Zoominger
    System Integrator
    в гугле не могу найти определения этих 3 понятий,

    Потому что твёрдого определения этих терминов (кроме эл. денег) нет.

    Электронные деньги - это деньги, на которые можно что-то купить и получить за это чек. Счёт в онлайн-банке, например.

    Определение цифровых и виртуальных денег даёт тот источник, в котором эти баззворды используются.
    Обычно под виртуальными подразумевается валюта, на которую вы что-то реальное купить не можете. Например, голда в онлайн-игре.
    Ответ написан
    1 комментарий
  • В чем отличие цифровых, электронных и виртуальных денег?

    @rPman
    стандартного/официального определения этим терминам нет.

    Термин - 'цифровые деньги', появился примерно в 2011г (digital money в 2008) что совпадает с появлением и популяризацией криптовалюты bitcoin, именно тогда заговорили о криптовалютах как о цифровых деньгах. Поэтому можно считать что этот термин лучше использовать исключительно для криптовалют.

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

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

    p.s. очевидно что скоро два термина 'цифровые' и 'электронные' сольются в одно понятие
    Ответ написан
    Комментировать
  • Можно ли от имени бота написать другому боту?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    насколько я понял, токен и работа с апи в телеграм доступны только ботам

    У телеграмм два API:
    1. API ботов
    2. Клиентский API

    возможно ли от имени бота написать сообщение не в канал, не в лс пользователю, а другому боту

    Нет, нельзя
    https://core.telegram.org/bots/faq#why-doesn-39t-m...

    Хотите писать другим ботам - используйте клиентский api. Для удобства есть Pyrogram, Telethon
    Ответ написан
    Комментировать
  • Откуда появляется бесконечный цикл?

    Melkij
    @Melkij
    PostgreSQL DBA
    Давайте вы лучше расскажете почему вы считаете, что здесь рекурсии нет.

    Вы делаете
    INSTEAD OF DELETE ON all_abonents

    и в этом триггере DELETE FROM all_abonents WHERE - почему же это не должно уходить в бесконечную рекурсию?

    Чем налагать спорные ограничения на действия из триггеров, postgresql будет послушно выполнять рекурсивные вызовы до исчерпания стека, а предоставлять условия выхода из рекурсии - задача разработчика.
    Ответ написан
    1 комментарий
  • Как правильно использовать аргументы в функции?

    @galaxy
    CREATE USER user_name PASSWORD (SELECT random_string((SELECT random_int_between(5,15))));

    Не думаю, что такое извращение возможно. По крайнер мере документация по CREATE ROLE явно допуская только PASSWORD NULL или PASSWORD 'qwerty', без выражений или тем более SQL запросов.

    Далее
    Non-optimizable SQL commands (also called utility commands) are not capable of accepting query parameters. So automatic substitution of PL/pgSQL variables does not work in such commands. To include non-constant text in a utility command executed from PL/pgSQL, you must build the utility command as a string and then EXECUTE it, as discussed in Section 43.5.4.

    https://www.postgresql.org/docs/current/plpgsql-st...

    Т.е. вы не можете в команду CREATE USER вставить переменную plpgsql. Ваша команда просто интерпетируется как будто вы хотите создать юзера с именем user_name. Аналогично ведет себя GRANT.
    Пароль лучше сгенерить в переменную, а эти команды надо выполнять через EXECUTE, примерно так:
    SELECT random_string(SELECT random_int_between(5,15)) INTO pass;
    EXECUTE format('CREATE USER %I PASSWORD %L', user_name, pass);
    EXECUTE format('GRANT %I TO %I', role_name, user_name);
    Ответ написан
    1 комментарий
  • В каком госте указана обязанность использовать гос. алгоритм шифрования?

    Документ, которым вы интересуетесь, называется письмо ФСБ России № 149/7/1/3-58 от 31.01. 2014 г. «О порядке перехода к использованию новых стандартов ЭЦП и функции хэширования».
    Оно и "запустило камень с горы". Согласно ПП №313 от 16 апреля 2012 г. оно обязательно к исполнению для лицензированных разрабов СКЗИ и т.д.
    Минцифры, тогда еще Минсвязь, выпустила соотв. НПА для АУЦ (аккредитованных удостоверяющих центров) и пошло-поехало, закрутились шестеренки гос. машины.
    Ответ написан
    Комментировать
  • Почему не работает коммит через апи?

    Рекомендация soremix корректная. Удачный запрос:
    import requests
    url = 'https://gitlab.com/api/v4/projects/123/repository/commits'
    data = {"branch": "main", "commit_message": "create", "actions": [{"action": "create", "file_path": "1.json", "content": "test"}]}
    headers={'PRIVATE-TOKEN': 'token'}
    
    res = requests.post(url, headers=headers, json=data)


    Важный момент - action create возвращает 400 если файл уже существует в репозитории
    Ответ написан
    4 комментария
  • Можно ли пушить через API?

    Можно изменять и загружать отдельные файлы https://docs.gitlab.com/ee/api/repository_files.html

    Можно выполнять отдельный коммит с набором файлов и действий https://docs.gitlab.com/ee/api/commits.html#create...

    А полноценно пушить - нет. Это вы вообще как себе представить смогли?
    Ответ написан
    7 комментариев
  • Как сделать группировку по 2 столбцам раздельно?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Согласитесь, что вы хотите странного, но даже для странных вещей можно найти решение. Например row_number и full join
    SELECT 
    	orugie, sum_cena_orugie, pos, sum_cena_pos
    FROM (
      	SELECT row_number() over (order by id_orugie_p) orugie_rn,  id_orugie_p orugie, SUM(cena) sum_cena_orugie
    	FROM test
    	GROUP BY id_orugie_p
    ) t_orugie
    FULL JOIN (
    	SELECT row_number() over (order by id_pos_p) pos_rn,  id_pos_p pos, SUM(cena) sum_cena_pos
    	FROM test
    	GROUP BY id_pos_p
    ) t_pos on orugie_rn = pos_rn;


    Test MS SQL queries online
    Ответ написан
    Комментировать
  • Как обрабатывать неподходящую кодировку для БД?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    \xF0\x9F\x8C\x88 - это символ радуги ???? (\u1F308). Для его хранения в MySQL нужно поле с типом utf8mb4. Или же можно удалять из строки символы с кодами больше /uFFFF.
    Ответ написан
    2 комментария
  • Программа "Python" не работает. Возникшая проблема привела к прекращению работы программы. Краш ntdll.dll. Куда копать?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    ну вообще в логи винлдоус

    чисто умозрительно - вот те 200 потоков, провайдеры не очень любят такое число одновременных (как ни странно, их столько и не бывает, если без торрентов) , они могут виснуть и винда убивает источник проблемы

    или без прова - виснут на мертвых прокси

    вручную без логов начни с 20-50-100 и смотри на реакцию
    Ответ написан