Задать вопрос
  • Как отправить картинку и текст одним сообщением чтобы фото было снизу?

    shurshur
    @shurshur
    loken99, тогда отдельное сообщение перед фото. Вариант - в фото графически вставить надпись.
  • Как хранить созданный чат-ботом файл в облаке?

    shurshur
    @shurshur
    Поддержу, выглядит как попытка хранить в файле базу данных.
  • Как правильно сделать индексацию базы mysql?

    shurshur
    @shurshur
    Индекс работает в реальном времени, чуть дороже становится вставка, так как кроме собственно вставки строки в таблицу, нужно будет ссылку на эту строку во все задействованные индексы. Чаще всего этим небольшим утяжелением вставки можно пренебречь. Если база на вставке до этого не съедала все ресурсы, то вряд ли она потратит свободный их запас на обновление индексов.

    30к записей в день - это в среднем 1 запись в три секунды. Это вообще не нагрузка. Если вам там не надо вставлять эти 30 тыс. разовой операцией за 0.01 секунды, то вообще не должно быть никаких проблем. Но я бы обратил внимание, что это почти 1 млн в месяц, так что за год таблица вырастет в 12 раз, и к этому надо заранее готовиться (иметь достаточно места).
  • Дан хэш и дан промежуток с 1 до 999999 необходимо найти число которое имеет одинаковый хэш?

    shurshur
    @shurshur
    mboze, то есть надо получить хеш и узнать какое из чисел от одного до миллиона даёт такой хеш?
  • Как получить путь до рабочего стола пользователя Ubuntu?

    shurshur
    @shurshur
    Пользователи эсстоооонской локали смотрят на эту команду с недоумением...
  • Pandas datareader на Python?

    shurshur
    @shurshur
    [Если] [рассудок] [и] [жизнь] [дороги] [вам] [никогда] [не] [используйте] eval.

    Есть же нормальные способы: configreader, json, yaml в конце концов... Да и прочитать текстовый файл построчно можно в две строки:

    with open("имя файла", "r") as f:
        tickers = f.readlines()


    Если уж использовать python-код в конфиге, то его надо включать с помощью import, что часть и делают.
  • Как восстановить пароль к установленной программе в Windows?

    shurshur
    @shurshur
    Hemul GM, на самом деле я б подумал насчёт mitm proxy и посмотрел, не передаётся ли он на самом деле в открытом виде :) Мало ли что там наколхозили эти капча-хакеры?
  • Как восстановить пароль к установленной программе в Windows?

    shurshur
    @shurshur
    annonimus, может лучше спросить у разработчика, может он поможет восстановить на другую почту, как-то по другим сведениям верифицировав старого клиента? Если там проверка по онлайн-аккаунту то "восстановить пароль" скорее всего нельзя, так как он передаётся на сервер и там проверяется.
  • Какие права выставить на файл sqlite базы?

    shurshur
    @shurshur
    mayton2019, не интересовался как, но оно будет писать database is locked, если даже тривиальный select count(*) вызывать без синхронизации с другими участниками SQL-действа...
  • Какие права выставить на файл sqlite базы?

    shurshur
    @shurshur
    сергей кузьмин, я использовал с внешним lock-файлом, сделал многопроцессный клиент для разового прогона вызовов в некоторый API по огромному списку, нормально работало и не надо было переоткрывать базу после каждой операции.
  • Какие права выставить на файл sqlite базы?

    shurshur
    @shurshur
    freeExec, это особенность винды, а не sqlite.
  • Как восстановить пароль к установленной программе в Windows?

    shurshur
    @shurshur
    В общем случае задача не имеет решения, так как у каждой программы может быть свой абсолютно уникальный механизм хранения пароля. А так надо бы называть конкретные программы, может и помогут. Со сферической в вакууме - вряд ли.
  • Как получить путь до рабочего стола пользователя Ubuntu?

    shurshur
    @shurshur
    Alexey Zolotarev, какие есть идеи:

    1. Просто игнорировать по имени:

    if [ $(basename $dir) != "lost+found" ]

    2. Проверять существование пользователя с таким именем (кавычки вокруг BASENAME, так как в имени каталога могут быть пробелы и всякие другие символы):

    BASENAME=$(basename $dir)
    if [ -n "$(getent passwd \"$BASENAME\")" ]


    3. Можно вообще плясать от имён пользователей, фильтруя по uid и можно даже дополнительно по shell (в примере только bash, хотя хорошо бы проверять все из списка в файле /etc/shells) реальных от системных, заодно обрабатывая home в нестандартных расположениях:

    getent passwd|while read line
    do
      USER=$(echo "$line"|cut -d : -f 1)
      USER_ID=$(echo "$line"|cut -d : -f 3)
      HOME=$(echo "$line"|cut -d : -f 6)
      SHELL=$(echo "$line"|cut -d : -f 7)
      ## или так:
      ##IFS=: read USER DUMMY_PASS USER_ID GROUP_ID GECOS HOME SHELL < <(echo "$line")
      if [ $USER_ID -ge 1000 -a $USER_ID -le 2000 -a "$SHELL" = "/bin/bash" ]
      then
        do_something_with_user_and_home $USER $HOME
      fi
    done


    В общем, в bash можно много прикольных вещей делать...
  • Бот проверки подписки в телеграм работает не корректно, как исправить?

    shurshur
    @shurshur
    IllIDan3, да, на кавычки я не обратил внимание. Ещё удивлялся, что по вопросу там 2 сообщения, а не 3. Но надо переделать, ибо всё равно плохо было.
  • Как получить путь до рабочего стола пользователя Ubuntu?

    shurshur
    @shurshur
    lost+found это НЕ пользователь. Это каталог для потерянных файлов, который создаёт mkfs или fsck. И у пользователя может не быть "рабочего стола", если он никогда не совершал графический вход в систему. А также он может называться иначе, если его локаль отличается от русской.

    Правильнее добавлять .desktop-файлы в общее меню через каталог /usr/share/applications (точное расположение может зависеть от дистрибутива). Но это больше для разработчиков пакетов конкретного дистриба. Для всяких скриптиков и самописных инсталляторов лучше добавлять конкретному пользователю через xdg-desktop-menu / xdg-desktop-icon. А если очень хочется получить доступ к правильному локализованному пути к рабочему столу текущего пользователя, то это делается так:

    xdg-user-dir DESKTOP
  • Как сделать из int str?

    shurshur
    @shurshur
    Артём Смирнов, конструкция

    x is y == z

    будет в зависимости от приоритета операторов (я наизусть не помню) разбираться одним из двух способов:

    (x is y) == z
    x is (y == z)

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

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

    True == z
    False == z
    x is True
    x is False

    Поскольку, как я думаю, ни mem, ни adm не являются булевыми значениями, эта проверка будет возвращать False ВСЕГДА. Поэтому неудивительно, что она не работает.
  • Как сделать из int str?

    shurshur
    @shurshur
    Артём Смирнов,
    Что означает эта конструкция?

    if mem is role[2] == adm
  • Что делать дальше?

    shurshur
    @shurshur
    Api tulanof, django достаточно монструозный и предполагает использование ORM. Много где его использование будет сродни покупки дорогого сложного профессионального инструмента для забивания пары гвоздей.
  • Как сделать из int str?

    shurshur
    @shurshur
    Артём Смирнов, у INSERT есть, грубо говоря, два основных синтаксиса:

    INSERT INTO имя_таблицы VALUES (значение1, значение2, значение3...);


    - это вставит значения в таблице по порядку следования колонок в оригинале, то есть если там три поля id, name, birthdate, то три поля в INSERT должны идти в строго таком порядке. И ничего нельзя пропустить - ругнётся.

    INSERT INTO имя_таблицы (колонка1, колонка2, колонка3) VALUES (значение1, значение2, значение3...);


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

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

    Из других способов использования можно делать insert from select. Например, пусть есть таблица vip_users с датой окончания вип-статуса, тогда выдать vip всем пользователям с некоторым условием (в примере - зарегистрировавшимся с 1 мая) можно так:

    INSERT INTO vip_users (user_id, name, vip_end_date) SELECT id, name, '2022-12-31' FROM users WHERE register_date >= '2022-05-01';


    (Это, как всегда, чисто пример. Возможно, вип-статус может быть интереснее хранить непосредственно в основной таблице users, и похожий пример будет чуть ниже)

    Что касается CAST, то его можно использовать так. Пусть у нас простая таблица:

    CREATE TABLE test (x INT, y TEXT);
    INSERT INTO test (1, 2);
    INSERT INTO test (2, 'a');


    Тогда в таком запросе:

    SELECT * FROM test;

    мы получим в своей программе: (1, '2'), (2, 'a') - то есть первое будет числом, второе строкой.

    SELECT CAST(x AS TEXT), y FROM test;

    - оба будут строками: ('1', '2'), ('2', 'a').

    SELECT x, CAST(y AS INT) FROM test;

    - тут первая строка может быть приведена к числам (1, 2), а во второй есть нюанс (тм) который разные движки баз данных могут решить по-разному. Например, sqlite3 (только что проверил) заменит значение на 0 и получится (2, 0). А вот Postgres или Oracle, насколько я помню, грязно ругнутся.

    Так вот, CAST - это приведение типов. И CAST (admin AS TEXT) приводит admin из его основного типа к текстовому. Вопрос в том, где этот admin взять, если его использовать в части ЗНАЧЕНИЙ в INSERT. Там должны быть именно значения, а не отсылки к каким-то другим колонкам, тем более что вставляемая строка новая и никаких значений у неё ещё нет.

    Если надо не новую строку вставить, а изменить существующую, то это делается через UPDATE:

    UPDATE users SET vip_status=1,vip_end_date='2022-12-31'; -- поменяет все строки таблицы
    UPDATE users SET vip_status=1,vip_end_date='2022-12-31' WHERE register_date>='2022-05-01'; -- поменяет строки по указанному условию
    UPDATE users SET vip_status=0 WHERE id IN (SELECT user_id FROM banned_users); -- поменяет для списка id, взятых из запроса по другой таблице


    Я советую всё же отвлечься и почитать по любому наглядному объяснению основы SQL и реляционных баз данных: что такое SELECT/INSERT/UPDATE, как использовать JOIN и чем он отличается от LEFT JOIN и FULL JOIN. Многое станет понятнее. Тем более что знания SQL сами по себе очень полезны.