Задать вопрос
  • Как развернуть проект django на сервере без git?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    github не нужен чтобы воспользоваться гитом. GIT вполне работает через ssh
    https://githowto.com/ru
    github - это всего лишь централлизованный сервис для хранения, публикации репозиториев и социальщины вокруг них. Все операции с репозиторием происходят с помощью программы git.
    GIT - это распределенная система контроля версий. Каждый клон репозитория в ней равноправен по отношению к остальным.
    Клонировать, отправлять и принимать изменения можно из любого в любой клон.
    можно даже локально в одной файловой системе в соседних каталогах сделать клоны репозитория и переносить между ними коммиты.
    Ответ написан
  • Как выбрать все значения с нескольких таблиц?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Автор вопроса сам не понимает что ему нужно сделать. Это значит, что результат не важен и мы тоже можем не париться, не углубляться и не гадать как экстрасенсы что же это действительно нужно было тому, кто сформулировал для автора эту задачу.
    Склорее всего решение не нужно ни автору ни тому кто задачу сформулировал -- никому.
    Оно также не нужно, как если бы автор вопроса спросил тут как вырезать аппендицит.
    Из вопроса не ясно есть ли в таблицах данные, какие там есть столбцы, какой диалект SQL, есть ли между данными из таблиц логическая связь. Автору скорее всего пофигу на все это. У него, наверно, есть задание и мы тут это задание должны решить заглянув в астрал и проявив чудеса предусмотрителности.

    SELECT 
      t1.f1 AS t1_f1, t1.f2 AS t1_f2, /*...*/ t1.fn AS t1_fn
     ,null  AS t2_f1, null  AS t2_f2, /*...*/ null  AS t2_fn
      /*...*/
     ,null  AS t7_f1, null  AS t7_f2, /*...*/ null  AS t7_fn
    FROM table1 t1
    UNION
    SELECT 
      null  AS t1_f1, null  AS t1_f2, /*...*/ null  AS t1_fn
      t2.f1 AS t2_f1, t2.f2 AS t2_f2, /*...*/ t2.fn AS t2_fn
      /*...*/
     ,null  AS t7_f1, null  AS t7_f2, /*...*/ null  AS t7_fn
    FROM table2 t2
    UNION
    /*...*/
    SELECT 
      null  AS t1_f1, null  AS t1_f2, /*...*/ null  AS t1_fn
     ,null  AS t2_f1, null  AS t2_f2, /*...*/ null  AS t2_fn
      /*...*/
     ,t7.f1 AS t7_f1, t7.f2 AS t7_f2, /*...*/ t7.fn AS t7_fn
    FROM tablen t7

    Формально требования выполнены.
    Ответ написан
    2 комментария
  • Как закрасить зоны на карте России?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Можно воспользоваться overpass-turbo.eu/, чтобы отфильтровать из данных OSM то, что вам нужною Вот рассмотрены примеры запросов. Там есть экспорт в kml, geojson и другие форматы.
    Подрисовать что-то и наглядно поредактировать можно в онлайн-редакторе GeoJSON. Этот формат позволяет раскрашивать полигоны и линии, делать маркеры. Примеры гуглятся легко. Кроме того, geojson легко обрабатывать программно.
    Что-то более сложное имеет смысл делать в QGIS.
    Ответ написан
    Комментировать
  • Как заменить символ строки на индекс этого символа в массиве?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    alpha_map = {c: str(i) for i, c in enumerate(alpha, 1)}
    word = input()
    new_word = ''.join(f'{idx} ' if idx else orig for idx, orig in ((alpha_map.get(c), c)  for c in word))
    print(new_word)
    Ответ написан
    Комментировать
  • Для чего нужен полиморфизм?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Полиморфизм - это широкое понятие.
    Идея его в том, чтобы скрыть лишние детали реализации и сделать код более универсальным.
    К примеру у вас есть абстрактный класс Фигура, у него есть абстрактный метод нарисовать(куда: Канва). Этот метод нельзя запускать, он абстрактный. Не понятно как рисовать абстрактную фигуру.
    Зато у фигуры есть потомки: Круг(Фигура) и Квадрат(Фигура). У них метод "нарисовать" перекрыт конкретной реализацией. Это виртуальный метод (есть такой термин в некоторых ЯП).
    За счет полиморфизма мы можем нарисовать любую фигуру не зная как она рисуется. Мы знаем только как с ней общаться на уровне ее интерфейса.
    Ответ написан
    4 комментария
  • Повтор сообщения Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ну да, вы ж его в цикле отправляете. А цикл по списку. А в списке два элемента. Два раза и отправляет.
    Вы чего хотели-то?
    Имеется в виду негативная ветка внутри цикла. Если оба значения i не равны mes, то будет дважды выполнена ветка else
    Ответ написан
    Комментировать
  • Группировка с выборкой?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Делайте вместо
    COUNT(*)
    подзапрос.
    SELECT
      case when id in (1,2,3,4) then 'Начальная школа'
              when id in (5,6,7,8,9) then 'Средняя школа'
              when id in (10,11) then 'Старшая школа'
              end AS Class_type,
      (
        SELECT COUNT(*) 
        FROM class cc 
        WHERE (
          case when сс.id in (1,2,3,4,5) then 'Начальная школа'
          when cc.id in (6,7,8,9) then 'Средняя школа'
          when cc.id in (10,11) then 'Старшая школа'
        ) = (
          case when c.id in (1,2,3,4) then 'Начальная школа'
          when c.id in (5,6,7,8,9) then 'Средняя школа'
          when c.id in (10,11) then 'Старшая школа'
        )
      ), 
      SUM(case when s.ocenka>4 then 1 end) AS 'Отличники' 
    FROM class c
    GROUP BY Class_type

    Как-то так через задницу. Запутано. Не проверял, нет файрбёрда под рукой
    Ответ написан
    Комментировать
  • Pyhton PIL почему не работает нормально?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    from PIL import Image
    
    q = input("Название картинки: ")
    img = Image.open(q)
    img = img.convert("RGB")
    (w,h) = img.size
    print(w*h)
    with open("img.txt","w") as file:
        for y in range(h):
            for x in range(w):
                r, g, b = img.getpixel((x,y))
                file.write("#" if (r, g, b) == (0, 0, 0) else "_")
            file.write("\n")
    
    print(img.getpixel((0,0)))
    input("Enter что-бы завершить: ")
    Ответ написан
    5 комментариев
  • Как отправить запрос, содержащий русские буквы pymysql?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    1. Используйте уже третий питон.
    2. Используйте utf-8 в коде.
    3. Если уж приспичило, используйте юникодные строки.
    4. Не пользуйтесь виндой. Там-поди до сих пор зоопарк из cp866, сз1251 и utf-8 в консолях, шелл скриптах и везде...
    5. Приспичила винда, да и вообще, примите за правило: на входе люьой текст приводите к юникоду, на выходе выводите в целевую кодировку.
    Из какой и в какую кодировку - читайте в параметрах потокв ввода/ывода. Если там не указано, попробуйте различить связан ли поток с файлом или с терминалом. В файл можно писать любую кодировку, главное правильно сконвертировать и не смешивать. В терминал писать нужно либо в юникоде (если указана кодировка в параметрах потока, то питон сам преобразует), либо в целевой кодировке, которую можно настроить/угадать, предположить и подобрать с нескольких попыток.

    Но лучше всего пользуйтесь третьим питоном. Там с юникодом все гораздо проще и однозначнее, чем во втором.
    Ответ написан
    Комментировать
  • Подзапрос вернул более одного значения, как исправить?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Да, вопрос непонятный нифига.
    Но чего именно вы хотите?
    Вы можете лимитировать количество выдаваемых значений:
    SELECT price
    FROM Laptop
    LIMIT 1

    Можно агрегировать получив, скажем, минимальную цену:
    SELECT min(price)
    FROM Laptop

    Или можно сделать join:
    SELECT DISTINCT model, price
    FROM PC p
    JOIN  Laptop l ON l.price = p.price

    Но это тупо и бесполезно. Вы, как бы, сопоставляете ноуты с десктопами по цене и показываете рядом...
    SELECT DISTINCT p.model, p.price, l.model
    FROM PC p
    JOIN  Laptop l ON l.price = p.price

    Я бы в таком случае не разделял на отдельные таблицы эти товары, а хранил бы в одной и сделал бы джойн с самой сообой. А сравнивал бы в некоторых рамках, иначе вы требуете точного совпадения цены.
    Ответ написан
  • Как можно get запрос превратить в POST?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Плохая идея.
    Но вы можете сделать любой, в том числе и POST запрос с помощью CURL.
    Ответ написан
  • Почему не сохраняются коммиты в git?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    И из всего описания не ясно делаете вы push или нет.
    Сделайте изменения и покажите команда за командой (вместе с их выхлопом) как вы отправляете изменения на сервер.
    Ответ написан
    6 комментариев
  • Не работает telegram бот на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Для себя я решил эту проблему забавным и простым образом.
    У меня есть VDS для хостинга сайта. С неё телеграм доступен и не блокируется. Я превратил этот сервер в собственный прокси для апи телеграма простым конфигом для nginx:
    server {
        listen tg.my_own_domain.net:8079;
        server_name tg.my_own_domain.net;
        access_log /var/log/nginx/tg.my_own_domain.net-access.log;
        error_log /var/log/nginx/tg.my_own_domain.net-error.log;
        location / {
    	proxy_set_header X-Forwarded-Host $host;
    	proxy_set_header X-Forwarded-Server $host;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_pass https://api.telegram.org/;
    	client_max_body_size 100M;
        }
    }

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

    Для желающих более правильно решить этот вопрос могу посоветовать найти на docker hub готовый образ с телеграммовским прокси или вообще универсальным прокси.

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

    Кстати, чтобы вообще ничего не менять в коде бота и его конфигурации, можно на машине, где будет работать бот прописать в hosts ip зеркала телеграммовского API на домен api.telegram.org.

    Чужим непроверенным зеркалам API я бы не особо доверял, кстати.
    Ответ написан
    Комментировать
  • Почему в python вылетает ошибка list index out of range?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы вот здесь делаете присвоение.
    n = h
    n.remove(n[j])
    if h[j] not in n:
        print(h[j])

    В питоне переменные работают не так как в других языках программирования. n и h - это после присвоения два имени одного и того же объекта (списка). Удаляя из него элемент вы тут же его пытаетесь получить в этом же объекте из под другого имени.
    Вместо присвоения такого, делайте так:
    n = h[:]
    Это скопирует список, а не создаст еще одно имя старому.
    Ответ написан
    3 комментария
  • Как определить входит ли определённый отрезок времени в другой?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы можете сравнивать даты целиком на больше и меньше не приводя к строке:
    current_date >= start_date and current_date <= end_date

    А еще можно воспользоваться спорным фирменным питоновским синтаксисом:
    start_date <= current_date <= end_date
    Если все эти переменные типа datetime, то всё будет как надо.
    Ответ написан
    Комментировать
  • Как вытащить из ссылки слово REGEX?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вот так?
    Я вас видимо не очень понял. Вот такой вот вариант еще ловите: https://regex101.com/r/5FoQLB/4
    Ответ написан
  • ПО для реализация показа рекламы в транспорте?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    У нас в городе (Белгород) в автобусах стоят такие моники. Там картинка в картинке. В нижней части прогресс-бар сближайшими остановками, указана следующая.
    В верхней части крутится плейлист из рекламы, всяких прикольных видосиков, новостей.
    Этот же телевизор, если не ошибаюсь, говорит какая остановка, какая следующая, и напоминает, что нужно присматривать за подозрительными оставленными вещами и уступать место бабушкам и дедушкам.
    Контекстной рекламы, как вы упомянули, мест, которые проезжаем нет, думаю пока нет. Мониторы появились недавно, локальные рекламодетели не вкурили еще потенциальных плюшек от такой рекламы. А можно, ведь, сделать её очень интерактивной. Можно фигачить QR-коды со скидками, делать конкурсы, викторины и заманивать прям людей толпами.

    Технически вашу задачку я бы делал, особенно если на скорую руку, так:
    • Бэкенд
      • Сервер телеметрии - Rest API на AsyncIO с хендлерами для приёма статусов, событий и треков от фронта.
      • Контент-сервер - я бы его сделал вообще каталогом с синхронизацией через rsync на фронтовые машины. Для каждого маршрута свой каталог, причем в нескольких ревизиях, чтобы можно было поправить видеоряд и настройки, а потом откатав на тестовом стенде и пробной машине переключить на всех. Возможно, что на маршрутах окажется немного разное оборудование, и какое-то не будет тянуть, скажем, видео в хай-рес, а на каком-то, возможно сломался GPS и нужно временно крутить там контент без привязки к геоданным. Просто делаются отдельные ревизии для таких клиентов.

    • Фронтенд
      • На бортовом компе (какой нибудь Raspbery или Orange Pi) крутится "локальный бэкенд" и развёрнутый на весь экран браузер, смотрящий на локалхост.
      • "Локальный бэкенд" тривиальный, на Flask или чем-то таком. Нужен для упрощения и стандартизации доступа к контенту. Своего рода слой изоляции. Один из хендлеров - веб-сокет, читающий очередь гео-событий и предоставляющий данные гео-виджету. Можно и аяксом, кстат, без всяких веб-сокетов обновлять навигационный виджет. Тут как быстрее в рамках MVP.
      • Rsync демон - синхронизирует каталог с ресурсами маршрута. Можно по ssh даже. Его задача держать все ревизии контентных папок идентичными серверу.
      • Сервис телеметрии - подключается к северу телеметрии на бэкенде и шлёт туда текущие куски трека, кидает в локальную очередь гео-события для бэкенда.
      • Сервис обновления - по расписанию проверяет хеш-сумму контентных каталогов, отправляет уведомление на API бэка о статусе загрузки новой ревизии контента. Получает в ответ сигнал о переключении на новую ревизию и перезапускает локальный бэкенд из нового каталога.
      • Фронтенд - просто хромиум или любой другой браузер, развёрнутый на полный экран и подключенный к веб-серверу на локалхосте.
      • На бэке крутится маленький локальный сайт с медиаплеером, навигационным виджетом и чем угодно вообще. Это лучше нативного прилжения, поскольку программистов и дизайнеров для веба кругом навалом, js-программистов тоже, всё это отлаженные и понятные технологии. Куда лучше, чем пилить свою балалайку со своим рендером контента. К тому же это более-менее изолированная повторяемая среда, показ можно тестировать на десктопе.


    Не сказал про плейлист.
    Все ролики-то у нас лежат в локальном доступе на БК. В связи с этим можно избавиться от локального "бэкенда" просто открывая браузером статику. Локальный веб-сервис нужен разве что для подачи данных навигационному виджету, но если будет поджимать время, то в рамках МВП можно и через статические файлы прокидывать гео-события. Маршрутка летит не со скоростью света - интерактивности хватит. Если жалко флешку убивать перезаписями, можно примонтировать маленький рам-драйв под это дело.
    Плейлист - это json-файл, в котором фактически расписание аудио и видеоряда по времени старта и остановки. Можно сделать прогрев кэша браузера вперёд по плейлисту, чтобы не фризило, но то, что можно смонтировать в монолитные ролики - нужно монтировать. Тем более браузерный плеер отлично понимает когда ему говорят откуда что играть и слушается команд из js.
    Ответ написан
    4 комментария
  • Как спарсить и скачать все картинки с сайта?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Посмотрите в сторону консольной утилиты wget. Ее вполне можно поставить и под виндой. Она (утилита) уже умеет скачивать сайт целиком вместе с картинами следуя по ссылкам со страницы на страницу.
    Прочитайте ее документацию.
    Там есть опция рекурсивной загрузки -r.
    Ответ написан
    Комментировать
  • Как реализовать fifo из списков в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Не используйте такой некорректный способ удаления:
    bue.remove(bue[0])
    Метод remove удаляет элемент по значению, а не по индексу.
    Используйте bue.pop(0) для извлечения первого элемента и, если надо bue.pop(-1) для извлечения последнего. Метод возвращает извлеченный элемент.
    FIFO - означает First In First Out - это классическая очередь. Первый вошедший элемент выйдет первым. Своеобразная модель ЖКТ здорового человека. ЖКТ алкоголика - это так называемый Дек, извлекать элементы из которого допустимо с двух сторон. Почему вы тут используете слово FIFO я не понимаю.

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

    Дерзайте.
    Однако мне кажется, что вам еще рано решать такую задачу. Стоит почитать любую книгу про обучение программированию. Не важно даже, чтобы именно на питоне. Или вот есть неплохой онлайн курс за рубль.
    Ответ написан
    1 комментарий
  • Что нужно знать, чтобы решить эти две задачки на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Нужно примерно следующее:
    • Что такое умножение.
    • Что такое таблица.
    • Что такое таблица умножения, зачем она бывает нужна и как устроена.
    • Надо понимать основы алгоритмизации: что такое алгоритм, какие есть базовые алгоритмические структуры (последовательное выполнение, ветвление, цикл) и для чего они нужны.
    • Нужно понимать синтаксис питона хотя бы на базовом начальном уровне. Можно почерпнуть из практически любой книги Марка Лутца про питон. Можно поискать вообще любую книга а-ля питон для чайников - этого будет достаточно для решения вашей задачи.
    • Нужно понимать концепцию цикла, вложенных циклов.
    • Нужно понимать базовую арифметику.


    Для постижения всех этих премудростей нужно планомерно и прилежно заниматься или иметь достаточно усидчивости, чтобы прочитать несколько статей википедии и книгу по питону.
    Судя по тому, что с этим вопросом вы пришли на этот ресурс, у вас всего этого нет. Это плохие новости. Предлагаю вам разозлиться на меня, на себя и на весь этот сложный мир, психануть и сидя на карантине освоить всё выше перечисленное и погрузиться в удивительный мир, где для производства чего-то стоящего и работающего не нужно ни тяжелых дорогих машин, ни станков, ни сложного оборудования, ни долгих лет учебы, а лишь компьютер и толика энтузиазма.
    Ответ написан
    Комментировать