• Linux: большое количество файлов в папке - это сколько?

    javenue
    @javenue
    По собственному опыту:
    10 тысяч — вполне нормальное число.
    50 тысяч и больше — стоит подумать о подпапках и иерархичности папок / документов.
    Ответ написан
    Комментировать
  • Как решить проблему ValueError: bad transparency mask в Pillow?

    snaiper04ek
    @snaiper04ek
    Не стреляйте в эникея, он админит как умеет
    судя по всему, у маски не корректный альфа-канал. Возможно, его просто нет, хотя он ожидается.
    попробуй докинуть на накладываемое изображение (оно же "маска") .convert("RGBA") вот так:
    blok = Image.open('ramka1.png').convert("RGBA")

    если не поможет, то в первой строке тоже докинь
    img = Image.open('fon.png').convert("RGBA")
    и в конце возможно понадобится
    img.save("gotov.png", format="png")
    Ответ написан
    Комментировать
  • Как построить запрос к API Яндекс.Метрики с выборкой источников и поисковиков?

    @suicidecoding
    Варианты:
    1. Используй /stat/v1/data вместо bytime и добавь измерение ym:s:datePeriod<...>
    2. Передавай нужные тебе row_ids
    Ответ написан
    3 комментария
  • Haystack+Solr: Как настроить фасетный поиск, чтобы он работал методом "OR"?

    winordie
    @winordie
    Лучшая документация -- исходники
    https://github.com/django-oscar/django-oscar/blob/...
    Посмотрите как тут организовано. Думаю это то что вам надо.
    Если что то не понятно -- спрашивайте.
    Ответ написан
    Комментировать
  • Haystack+Solr: Как настроить фасетный поиск, чтобы он работал методом "OR"?

    @skorpix Автор вопроса
    Решение (вдруг кому пригодится) (у меня здесь еще сделано, что если поисковая строка не задана, то выдаются все результаты):
    from collections import defaultdict
    
    from haystack.forms import FacetedSearchForm
    
    
    class FacetedNotEmptySearchForm(FacetedSearchForm):
    
        def no_query_found(self):
            return self.searchqueryset.all()
    
        @property
        def selected_multi_facets(self):
            selected_multi_facets = defaultdict(list)
            for facet_kv in self.selected_facets:
                if ":" not in facet_kv:
                    continue
                field_name, value = facet_kv.split(':', 1)
                selected_multi_facets[field_name].append(value)
            return selected_multi_facets
    
        def search(self):
            sqs = super(FacetedSearchForm, self).search()
            for field, values in self.selected_multi_facets.items():
                if not values:
                    continue
                clean_values = ['"%s"' % sqs.query.clean(val) for val in values]
                sqs = sqs.narrow(u'%s:(%s)' % (field, " OR ".join(clean_values)))
            return sqs
    Ответ написан
    Комментировать
  • Оптимизация сайта под высокие нагрузки (php,nginx, mysql). Какие критерии доработок? Что необходимо сделать в первую очередь?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Как уже заметили коллеги - первое что нужно выяснить - что тормозит.

    Спойлер: 90% что проблема в запросах к бд, так как сам по себе код в большинстве случаев банально отсылает запросы и принимает их результат, выводя его пользователю в несложных действиях. В редких случаях - запросы идут к внешним тормозящим сервисам, например к фейсбуку или другим СС. И крайне редко тормозит сам код, но тут уже опять же - 90% что это некомпетентность разраба, например, не способного построить нормальный запрос и сортирующий данные от бд в коде...

    Что конкретно надо делать:
    1) Взять за шкирку самого разбирающегося в коде (если таковой существует в проекте), и дать задание описать базовый стек вызовов, если это какой-то самопис, или сразу расставить код замера времени с метками в случае понятной архитектуры. Что то типа такого(класс - древний костыль, но работает, так что матом не ругаться):
    Class Timer.php:
    class Timer {
    
        static $start;
        static $end;
        static $marks = [];
        static $formats = [1=>''];
    
        static function init(){
            if(empty(self::$start)) self::$start = microtime(true);
        }
    
        static function setMark($markName = ''){
            $time = microtime(true);
            if($markName == '')$markName = $time;
            $data['name'] = $markName;
            $data['time'] = $time;
            $res['time'] = $time;
            if(count(self::$marks) > 1)$res['diff'] = $time - self::$marks[count(self::$marks)-2]['time'];
            else $res['diff'] = 0;
            $data['diff'] = $res['diff'];
            self::$marks[] = $data;
            return $res;
        }
    
        static function timeFormat($number,$format = ''){
            if(empty($format)) $format = 3;
            return number_format ($number,$format,'.','');
        }
    
        static function report(){
            self::$end = microtime(true);
            self::$marks['start'] = self::$start;
            self::$marks['end'] = self::$end;
            self::$marks['all_time'] =  self::$end - self::$start;
            if(!empty(self::$marks)) return self::$marks;
        }
    }


    In code:
    \Timer::init()
    //some code block 1
    \Timer::setMark('after block 1');
    //some code block 2
    \Timer::setMark('after block 2');
    ...
    //some code block n
    \Timer::setMark('after block n');
    //near end of code 
    \Timer::setMark('end');
    var_dump(\Timer::report());
    exit;

    2) Смотрите на блоки жрущие время, делите их до атомарных операций путем деления блоков пополам таймерами.
    3) Смотрите что там происходит - оптимизируете*. И так по кругу.
    4) Профит.

    * Оптимизация
    Запросы:
    1) Смотреть план запроса (use explain, Luke!).
    2) Расставить индексы которых явно не хватает
    3) Смотреть не вызывается ли 50 запросов в цикле? Если да - выписать пенделя писавшему, затем переписать в 1 запрос с нормальным джоином.

    Код:
    Иногда запрос сложно оптимизировать, он вытаскивает много данных, хотя эти данные не часто обновляются. Такие запросы нужно кешировать, для чего используют быстрые ин-мемори хранилища типа редис или мемкеш. В крайнем случае в файлах...
    Чаще всего код тормозит на регулярках, хотя "хороший" программист может придумать и более креативные способы погреть процессор.

    Что нужно сделать обязательно кроме тестов и как тогда лучше спрашивать с разработчиков, если они предлагают размытые предложения? Хочется понять в какую сторону копать
    Бить палкой не вариант? Тогда берите других, эти испортились. Если разработчик не знает как выявить узкие места кода - нахрена он нужен? Код написать сегодня любой чат может... Ну, на крайняк дайте им вышеприведенный вариант решения проблемы...

    PS: Кстати, сервер может банально не выдерживать наплыв сетевых соединений, пните адимна, пусть глянет логи.

    PPS:
    достаточно 2000-4000 человек, заходящих в течение 20 минут на сайт
    это равномерные 3-4 рпс, ну или пусть в пике 50 рпс, должно держать даже на несложной конфигурации... Копайте код.
    Ответ написан
    Комментировать
  • Оптимизация сайта под высокие нагрузки (php,nginx, mysql). Какие критерии доработок? Что необходимо сделать в первую очередь?

    @pkokoshnikov
    У вас довольно мощный сервер и его должно хватать на порядок больше нагрузки.
    CDN не сильно поможет, так как нагрузка на чтение ни о чем, все и так должно работать. Nginx точно не узкое место. Поэтому я бы первым делом включил журналирование медленных запросов в mysql и посмотрел бы что там в топе. А так первый комментарий хороший, поможет найти проблему. Но в целом я бы посоветовал завести метрики и графану, и добавить метрики по операциям в коде и бд. Чтобы иметь представление на будущее. Не знаю насколько сложно это делать в php.
    Ответ написан
    Комментировать
  • Есть ли смысл во вложенных location в nginx для оптимизации?

    BuriK666
    @BuriK666 Куратор тега Nginx
    Компьютерный псих
    Сначала проверяются location'ы, заданные не регулярными выражениями,
    то есть, префиксы, точное совпадения (=) и префиксы с запретом
    регулярных выражений (^~).

    Пункт А. Если location найден и у него есть вложенные location'ы, то поиск
    перемещается внутрь. Внутри сначала проверяются location'ы,
    заданные не регулярными выражениями, если найден и у него есть вложенные,
    то переходим в пункт А. Если не найден, то проверяются location'ы
    с регулярными выражениями. Если location найден, то поиск прекращается.
    mailman.nginx.org/pipermail/nginx-ru/2011-October/...

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

    UPD:
    Также будет полезно:
    Как nginx обрабатывает запросы
    Игорь Сысоев: Масштабируемая конфигурация nginx
    Ответ написан
    1 комментарий
  • Сколько нужно number_of_shards в индексе?

    @vitaly_il1
    DevOps Consulting
    Для кластера из одного сервера и большом кол-ве документов - кол-во шардов == кол-ву CPU cores.
    Если есть возможность, разделите индекс на несколько, т.к. для одного сервера это большая база. Если можно как-то поделить данные - по времени, географии, релевантности, то это позволит искать в определенном индексе, а не во всей базе.
    Ответ написан
    2 комментария
  • Где взять вебхук для телеграм бота, работающего на хостинге?

    makag
    @makag
    Его не брать нужно, а устанавливать.
    я не в курсе, что такое node.js, но при размещении бота на php, достаточно просто перейти в браузере по ссылке такого вида:
    https://api.telegram.org:443/bot[токен телеграм бота]/setWebhook?url=[адрес по которому находится ваш php файл]


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

    По сравнению с получением обновлений через getupdates - однозачно вебхуки лучше - не нужен крон, моментальная реакция и всё такое.

    P.S. у меня первый опыт с вебхуками на php - возможно будет полезно - клац
    Ответ написан
    Комментировать
  • Как программно скачать файл с Яндекс.Диск?

    iResource
    @iResource
    Разработчик IR XML2Ozon
    Можно использовать удобную библиотеку, устанавливаемую через Composer
    https://github.com/jack-theripper/yandex

    Пример кода для скачивания файла по публичной ссылке:

    // сначала, естественно, подключаем vendor/autoload.php
    
    $disk = new Arhitector\Yandex\Disk($yandex_disk_oauth_token);
    $publicResource = $disk->getPublishResource($yandex_disk_excel_link);
    $bytes = $publicResource->download(__DIR__.'/ozon.xls', true);
    // $bytes - размер скачанного файла
    Ответ написан
    Комментировать
  • Hetzner. Клонирование серверов?

    Melkij
    @Melkij
    PostgreSQL DBA
    Посмотрите в сторону систем управления конфигурацией - puppet, chef, ansible (порядок упоминания случаен)
    Ответ написан
    Комментировать
  • Вся ли яндекс почта для домена стала платной?

    Iwamoto
    @Iwamoto
    Теперь уже нет этого тарифа бесплатного. Яндекс жадина....((
    Ответ написан
    Комментировать
  • Какой жёсткий диск выбрать: CMR или SMR?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Разумеется CMR.

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

    Вот пост о том, как проверить используется ли в диске SMR.

    На диск буду часто записывать файлы, причём большие

    Посмотрите хотя бы картинки в посте по ссылке выше. Графики в нём наглядно демонстрируют что будет происходить со скоростью на диске, использующем Shingled Magnetic Recording.
    Ответ написан
    Комментировать
  • DNS Hosting Yandex стоит ли?

    vadim_s_sabinich
    @vadim_s_sabinich
    Делаю так, чтобы проблем не возникало
    Уже несколько лет использую почту и домены на Яндексе. Те, кто стесняется говорить своим клиентам про почту на Яндексе, ставлю и настраиваю веб-клиент (roundcube, например), который прозрачно авторизуется к почтовым серверам Яндекса.
    Ответ написан
    4 комментария
  • Nginx: слушать сразу 2 ip?

    WebSpider
    @WebSpider
    Да, вот так будет работать
    server {
      listen 127.0.0.1:80;
      listen 192.168.0.1:80;
      ...
    Ответ написан
    1 комментарий
  • Повременная оплата труда. Как вы организовываете работу под трекером?

    Griboks
    @Griboks
    Обычно утром на заводе проводишь пропуском, и таймер запускается. Потом через 9 часов по дороге домой проходишь кпп, и таймер включается. За это платят обычно 20-40 тысяч в месяц.
    Ответ написан
    Комментировать
  • Где найти api или json списка городов?

    uonick
    @uonick
    Сгибатель бананов
    Можно некоторые справочники здесь найти: https://github.com/hhru/api
    Например https://api.hh.ru/areas
    Ответ написан
    Комментировать
  • Где найти api или json списка городов?

    Ahen
    @Ahen
    Универсальный дилетант
    Не знаю подойдёт ли, но в одном проекте использовал вк апи. Возможно не подойдёт, ибо нужно сначала страну указать.
    https://vk.com/dev/database.getCities

    А так, думаю яндекс/гугл мап умеет в такое.
    Ответ написан
    Комментировать