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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Переодически может появиться очень крупная задача вида "нужно то не знай что". Мне приходится с ней разбираться и если с первым этапом - конкретизация требований все более-менее понятно, то с дальнейшими действиями все совсем плохо.

    Ситуация - знакомая. Во первых это - не задача. Это issue типа investigation. Его результатом должен быть не финальный продукт а просто новый сет issues. Оценивать время можно как угодно. Можно писать 1 день для начала. Все равно никто не сможет оспорить вашу оценку.

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

    Это - риски и их просто надо заранее проговорить на митингах. Просто сообщайте заказчику что задача - рисковая и если что-то не так пойдет - то время надо будет сдвинуть.
    Ответ написан
    Комментировать
  • Как научиться декомпозировать задачи?

    Adamos
    @Adamos
    Дробить задачу еще на более мелкие совсем не охота

    Ну и зря. Вообще-то технологиям планирования совместной работы уже не первый век, и важнейший этап - как раз выделение тех участков работы, которые критичны для начала работы на других участках, и подтягивание их на диаграмме Ганта как можно раньше, чтобы уменьшить простой. Потом уже менее критичные задачи ложатся на свободные участки и параллелятся относительно друг друга.
    Так, например, нас учили делать генплан строительства еще 30 лет назад. До популяризации в РФ всяких там Скрамов и Канбанов.
    Ответ написан
    8 комментариев
  • Какое пояснение битовым операциям?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Почему код выводит конкретно 4 и 3, а не 1 и 1?

    Какое пояснение битовым операциям?

    Пояснение простое - потому что это не битовые операции

    Битовые операции это к примеру вот:
    print(bin(0b0110 | 0b0001))
    # 0b111
    print(bin(0b0111 ^ 0b0001))
    # 0b110
    print(bin(0b0101 & 0b0001))
    # 0b1
    Ответ написан
    Комментировать
  • Как из функции вывести данные циклом?

    sswwssww
    @sswwssww
    def cicle_funct():
        i = 0
        while i < 10:
            i += 1
            yield i
    
    
    c = cicle_funct()
    while True:
        print(next(c))


    А "лучше":
    def cicle_funct():
        i = 0
        while i < 10:
            i += 1
            yield i
    
    
    cc = cicle_funct()
    for c in cc:
        print(c)
    Ответ написан
    Комментировать
  • Как выглядит ID сообщения в телеграмме?

    botermain
    @botermain
    ID выглядит правильно, вопрос в том, правильный ли вы подставляете, давайте лучше получим ID отправленного нами сообщения и изменим его по нему, а не тыкая пальцем в небо. Расскажу на примере Telethon(Самая простая библиотека по моему мнению):

    Во первых, отправим сообщение и запишем его в переменную
    message = client.send_message(chat_id, text)

    После чего мы можем достать из переменной ID отправленного нами сообщения:
    message = client.send_message(chat_id, text)
    print("ID сообщения: ", message.id)


    И вот только теперь отредактируем его с помощью ID, который получили, вот пример рабочего кода:
    message = client.send_message(chat_id, text)
    client.edit_message(chat_id,message.id,text)


    Надеюсь, что объяснил понятно
    Ответ написан
    3 комментария
  • Почему могут необрабатываться некоторые ответы для инлайн кнопок в Telegram боте?

    @pr0l
    вы все колбеки пытаетесь обработать 2 раза. оно попадает в первый и дальше уже не обрабатывается.
    @bot.callback_query_handler(func=lambda call: True)
    В первом он не находит вариантов обработки вот и ничего не делает.
    Нужно разделить callback
    @bot.callback_query_handler(func=lambda call: call.data == 'yea1')
    
    @bot.callback_query_handler(func=lambda call: call.data == 'yea2’)
    
    @bot.callback_query_handler(func=lambda call: call.data == 'nope1')
    
    @bot.callback_query_handler(func=lambda call: call.data == 'nope2’)

    и не используйте глобальные переменные, есть классы.

    class Info:
        def __init__(self, phname):
            self.phname = phname
            self.rndnumber = None
            self.tdn = None


    А потом вызывай и присваивай
    Info.tnumber1 = message.text

    создай сначала все кнопки, а потом скопом добавь, лишний код:
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            watch_balance = types.KeyboardButton(' Посмотреть баланс ')
            send_money_button = types.KeyboardButton(' Перевести на кошелек ')
            edit_data = types.KeyboardButton('️ Изменить данные ️')
            markup.add(watch_balance, send_money_button, edit_data) # <------
            bot.send_message(message.chat.id, ' Выберите, что делать ', reply_markup=markup)


    вместо отправки просто сообщения, используй реплай, типа ответ на запрос.
    bot.reply_to(message, ' Выберите, что делать ', reply_markup=markup)
    Ответ написан
    Комментировать
  • Как найти программистов и сделать свой штат программистов?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Очевидно, что проблема в том единственном твоём любимом программисте. Наверное, он не терпит конкуренции более сильных разработчиков и тогда надо гнать его в шею.
    Варианта два: уволить его, либо воспользоваться услугами профессиональных нанимателей, HR
    Ответ написан
  • Есть ли единый сервис синхронизации бронирования отелей?

    @Drno
    Нет общей системы. Каждый отель сам решает с каким сервисом общаться и сколько номеров ему «отдавать»
    Ответ написан
    Комментировать
  • Python: как оставить в текстовом файле строки определенного формата?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    На самом деле этот файл представляет из себя json, который и надо разбирать как json, не занимаясь разбиением на строки и прочей ерундой:

    import json
    
    json_text = '''{"total":20,"rows":[
    {"id":123,"mark":null,"Status":2,"MessageNumber":123456789,"text":"Привет"},
    {"id":1234,"mark":null,"Status":1,"MessageNumber":23456789,"text":"Пока"},
    {"id":12345,"mark":null,"Status":2,"MessageNumber":345678, "text":"Ало"}]
    }'''
    
    data = json.loads(json_text)
    
    numbers = [x["MessageNumber"] for x in data["rows"]]
    print (numbers)
    with open("output.txt", "w") as f:
       print (", ".join(str(x) for x in numbers), file=f)
    Ответ написан
    Комментировать
  • Пишу код для Telegram Бота, как не делать тупые ошибки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сначала надо изучить язык программирования, потом освоить нужную библиотеку и уже тогда писать бота. А то это как выехать на трассу, купив водительсике права, но не изучив азы вождения.
    Ответ написан
    Комментировать
  • Бот не сохраняет заданные переменные Telebot. Как сохранить переменные telebot?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    1. Код следует оформлять специальной кнопкой в редакторе
    2. Вы никакие переменные не передавали в функцию, поэтому они и остались где-то там
    3. bot.register_next_step_handler(sent, answer) и bot.register_next_step_handler(sent, deanswer) не нужны, насколько я понимаю Вашу логику

    Ключи вы получили в этой же функции, поэтому передаем их дальше
    bot.register_next_step_handler(sent, get_text, keys)


    Функцию get_text нужно будет доработать, чтобы она принимала ключи
    def get_text(message, keys):

    и так же их нужно будет передать дальше:
    bot.register_next_step_handler(sent, crypto, keys )# с encrypto по аналогии

    + конечно
    def crypto(message, keys): # с encrypto по аналогии


    Злесь уже есть ключи из первого шага в переменной keys, и зашифрованный текст в crypted_text. Что-то делаем с ним, и печатаем пользователю. Без дальнейших register_next_step_handler
    def crypto(message, keys):
        crypted_text = message.text.upper
        result = magic(crypted_text, keys)
        bot.send_message(message.chat.id, f'ваш код {result}')
    Ответ написан
    Комментировать
  • Как обновить записи в sql?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    В SQL записи обновляются запросом UPDATE.
    Ответ написан
    6 комментариев
  • Почему не выходит таблица умножения в 1С?

    @zibinskyY Автор вопроса
    Сам разобрался ))) В сообщении вместо Шаг нужно было указать Число2
    Ответ написан
    Комментировать
  • Как уменьшить количество таблиц-справочников с тремя-четырьмя строками?

    @rPman
    тут несколько подходов, я трогал каждый из них и все они имеют право на существования
    1. оставь как есть, я рекомендую, пусть будет 100500 таблиц справочников (если проблем с именами нет ну и отлично), fk-индексы все это свяжут а инструменты анализа базы данных помогут с этим работать (автоматические query builder с мышевозекательным интерфейсом) и база будет сама следить за тем что идентификаторы справочников не противоречивы
    недостатков я не могу придумать, кроме может быть сильно разросшейся структуры, когда то давно я слышал что некоторые базы данных при увеличении количества таблиц начинают хуже работать но как я понимаю это если их будет десятки тысяч а не десятки и сотни.. может быть резервное копирование такой базы или ее репликация будет проходить чуть медленнее или еще хуже, организационно репликация может быть настроена на не рассылку ddl модификаций, в этом случае создание нового справочника будет задавать работу еще и админам, что нежелательно.

    2. противоположный, использование одной таблицы key-value для нескольких разнородных справочников (id, value, table_name), в 99% случаев можно использовать один сиквенс (одну последовательность идентификаторов), вам же не обязательно чтобы разные справочники начинали счет своих строк с одного и того же числа 1.
    Недостаток - база данных теперь не сможет контролировать что вы используете непротиворечивый идентификатор (можно в запись одного справочника указать номер из другого), хотя несуществующий так же нельзя будет указать (и будут работать delete cascade), так же удобной автогенерации sql не будет. Структура будет проще, так же интерфейс редактирования таких справочников может быть один вместо кучи форм и добавлять новые справочники будет сильно проще (хотя с точки зрения разработки нет особой разницы, один insert ты написал или create table перед этим)

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

    Лично я третьим подходом в чистом виде не пользовался, но у меня был набор скриптов, которые из справочников в базе данных формировали код с инициализацией констант и их именами для приложения (сами справочники приложением редактироваться не могли) и был соблазн перевести эту часть базы из 'оперативной' в 'для разработчика', так как справочник это что то - отвечающее за отображение информации, но не за бизнеспроцессы (ну примерно как языковые файлы для приложения, не хранить же переводы строк интерфейса тоже в базе, ну так и справочники смогут работать как часть этого интерйфейса и тоже может требовать перевода).
    Ответ написан
    4 комментария
  • Как просуммировать значения из списка типа "1+1"?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Если только суммирование в инпуте:
    sum(map(int, "4+5+3+2+3".split('+')))
    # 17


    с sympy:
    from sympy import sympify
    sympify("4+5+3+2+3")
    # 17
    Ответ написан
    Комментировать
  • Как сделать так, чтобы бот в телеграме был для каждого отдельно?

    ketovv
    @ketovv
    Питонист
    Использовать Базу Данных и хранить значение для каждого пользователя отдельно (условно, по telegram ID)
    Можете воспользоваться SQLite для этого. Как ORM предлагаю выбрать ormar (по моему оптимальная orm сегодня).
    Ответ написан
    1 комментарий
  • Корзина из баз данных в телеграм боте?

    Vindicar
    @Vindicar
    RTFM!
    Ну если есть актуальная таблица товаров, то корзиной будет таблица вида "ID пользователя - ID товара - Количество". Тогда при выборе товара вписываете ID пользователя, который отправил сообщение. Ну а чтобы показать корзину пользователя, просто фильтруете по ID пользователя, от которого пришел запрос.
    Ответ написан
    Комментировать
  • Как скачать видео с YouTube?

    @rPman
    почему youtube замаскирован звездочками? это стало ругательством?

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

    точно знаю были врапперы для c# (гугл выдает старый код, может заработает) если надо именно библиотеку
    Ответ написан
    Комментировать
  • Есть ли обработка для 1С, чтобы искать по номерам сотовых контрагентов?

    fosihas
    @fosihas
    Автоматизации учета на 1С.
    1С открытый код, даже если этого нет. Это можно реализовать, с вероятностью 99,999%
    Ответ написан
    3 комментария
  • Стоит ли разделять проект?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    В этом и заключается ваша работа - принимать такие решения на основе детального понимания проекта и планов его развития.
    Дяди и тёти из интернета за вас её сделать не могут, потому что детального понимания проекта у них нет и планов развития они не знают. Дяди и тёти из интернета могут только сказать абстрактные плюсы и минусы разделения или неразделения абстрактного проекта, но эта информация плохо транслируется на реальные проекты.
    Ответ написан
    Комментировать