• Как добавить SSL сертификат к запросу cURL?

    Попробуйте скачать cacert.pem и запустить curl с параметром --cacert <путь к cacert.pem>. Ну и обновите curl, если есть обновы.
    Ответ написан
    1 комментарий
  • Кто проходил курсы от Otus? Отзывы? Мнения?

    @MaxRokatansky
    Всем привет. Я работаю в компании ОТУС. Тем, кто хочет получить отзывы от реальных студентов, могу посоветовать вступить в наш чат в телеграмме. В чате активно общаются настоящие/бывшие/будущие студенты, а также преподаватели. Атмосфера очень дружелюбная и там можно получить отзывы, так сказать, из первых рук. На всякий случай оставлю ссылку на чат https://t.me/joinchat/AAAAAAo-Vju7cjFSfjZeeg
    Ответ написан
    Комментировать
  • Кто проходил курсы от Otus? Отзывы? Мнения?

    @palkokrut
    Я проходил веб разработка Python. Дает очень много. Скилы, которые вы так просто не приобретете типа celery, jenkins graphana много всего.
    и самое главное - вы делаете задания, потом свой проект и получаете код ревью от топовых разработчиков.
    Своих денег стоит. Приготовьтесь уделять время. Суббота уходит на домашку целиком плюс на буднях еще делать приходится.

    К слову, лично знаю парня, которого после курса разработчик Python (который обычный, не веб) взяли в яндекс.
    Ответ написан
    3 комментария
  • Как пробросить порт с хоста внутрь docker контейнера?

    Qwentor
    @Qwentor Автор вопроса
    Веб-программист
    В общем решение оказалось простым:
    docker run --name 10.1.23-mariadb --net=host -v /opt/test/mariadb:/var/lib/mysql -v /opt/test/mariacnf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=password -d mariadb:10.1.23


    Т.е. как я и предполагал через --net=host - таким образом контейнер работает в сети хоста и нет нужды что-то редиректить. /etc/mysql действительно не пробрвсывается для изменения my.cnf, зато спокойно пробрасывается /etc/mysql/conf.d, а в нем файл mariadb.cnf, в котором и прописывается изменение порта на 3308.

    Проблема решена.
    Ответ написан
    Комментировать
  • Как реализовать фильтрацию товаров на чистом JS?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Данные - вместо объекта сделайте массив, так будет проще работать.

    Когда данные получили - сохраните их (ну типа переменная какая-то, чтобы они у вас всегда были под рукой).

    Сделайте функцию, которая будет выводить список товаров - но не весь, а те, что ей будут переданы.

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

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

    Всё.
    Ответ написан
    8 комментариев
  • Как изменить размер холста под изображение?

    trikono
    @trikono
    Novice publisher
    Меню "Изображение", дальше "Тримминг". Выбираете на основе прозрачных пикселов. Обрезка со всех сторон.
    Ответ написан
    1 комментарий
  • Как убрать свободное пространство у svg?

    copist
    @copist
    Empower people to give
    SVG - это текстовый формат, XML. Отредактируй его руками или с помощью Adobe Illustrator или Inkscape

    Пример "до"
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" viewBox="0 0 48 48">
      <path fill="#CFD8DC" d="M6,29V19h36v10H6z M42,16V6H6v10H42z M42,42V32H6v10H42z"></path>
      <path fill="#8BC34A" d="M6,16V6h10v10H6z M25,42V32H6v10H25z M32,29V19H6v10H32z"></path>
    </svg>


    Пример "после"
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36" fill="#c0392b">
      <path d="M0 23V13h36v10H0zm36-13V0H0v10h36zm0 26V26H0v10h36z" fill="#e0cbdc"/>
      <path d="M0 10V0h10v10H0zm19 26V26H0v10h19zm7-13V13H0v10h26z" fill="#2196f3"/>
    </svg>


    Скриншот из Inkscape
    3196db7f9c4a4e08834aa5ea1b29e38e.png

    Все редакторы вставляют в SVG свои комментарии и дополнительную служебную информацию, поэтому будет полезно "сжать" файл через утилиту svgo (консоль или веб-сервис).

    Link: иконка Tasks от Icons8

    А вообще свободное пространство появляется в результате выравнивания иконок "по плотности изображения среди всех иконок", а также это может быть авторский стиль. Описание: https://icons8.com/articles/windows-10-icons-style/

    Ещё одним способом выравнивания может быть размещение иконки в контейнер с жёсткими размерами без скроллбаров и чуть смещённая иконка внутри контейнера.
    <div style="position: relative; width: WWWpx; height: HHHpx; overflow: hidden;>
       <img src="..." style="width: WWWpx; height: HHHpx; position: absolute; top: -Tpx; left: -Lpx;>
    </div>
    Ответ написан
    Комментировать
  • Как объединить все контуры в inkscape и потом правильно экспортировать?

    Moskus
    @Moskus
    Поблема в том, что все линии на вашей иконке - это линейные объекты, а не замкнутые контуры. Вам сначала нужно все их превратить в контуры через Path -> Stroke to Path, потом - сделать пересечение тех контуров, которые действительно пересекаются, через Path -> Union, а потом уже делать Path -> Combine.
    Ответ написан
    21 комментарий
  • Какая оптимальная ширина макета и рабочей области?

    lukoie
    @lukoie
    Суперлузер? Серьезно?
    Ок, размер рабочей области зависит от предпочтений и фолбеков.
    Например, мое разрешение монитора сейчас как раз 1920, то есть картинка шириной 1920 будет как раз 100% ширины экрана... не учитывая полосу прокрутки и рамки окна. То есть нужны поля. Допустим по 15 пикселей(у меня не ретина, так что мой монитор имеет 72 точки на дюйм). Итого 1920 превращается в 1890, если надо контент делать на всю ширину (section-fluid в бутстраповых классах).
    1920 это сейчас считаем как дефолтный монитор(смотрим по статистике), а на момент создания бутстрапа они зафиксировали 1170 как минимально допстимое разрешение десктопа, потому контент вписывают на такой размер(учитывая поля по 15 пикселей это разрещение 1200*800) как наиболее используемым разрешением.
    Дальше 1280 это популярная ширина в разных разрешениях, как брекпойнт. Но уже без полей.
    960 это из за одноименного фреймворка, где это число используется для фолбека на 1024*968 разрешение плюс поля, округление до нормального делительного числа.
    Число 960(как и остальные перечисленные Вами) выбрано потому что удобно делить на колонки с полями. На 2/4/6/8/10/12/16/24

    Берите ширину в зависимости о того, как будете верстать. А, ну и погодите, если Вы получаете готовый дизайн, то Вам не сильно получится "брать" какую то ширину контента, а придется работать с тем, что дали.
    Опять же, будете ли пользовать фреймворки - тоже ограничит/упростит выбор ширины.
    Забивать не надо. Если забили на ширину контента, то либо просто накалякали какую-то свою ширину, но все равно единую, либо вообще разброс по секциям/блокам. Вы вполне сможете потом свести всё до единой ширины, которую сами выбрали, если заказчик согласен и не требуется пиксель перфект по контентной области(обычно нет, и вполне обьясняется заказчику требованиями "соответствия для старых мониторов" или что то такое, после чего они соглашаются)

    Зависит в основном от этого:
    5c1eb0b2c05c1386821151.png
    Ответ написан
    Комментировать
  • Почему Nginx не кэширует?

    BuriK666
    @BuriK666 Куратор тега Nginx
    Компьютерный псих
    У Вас backend отдает:
    Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Expires:Thu, 19 Nov 1981 08:52:00 GMT
    Pragma:no-cache

    Т.е. явно запрещает кэшировать ответы.
    Ответ написан
  • Где брать бесплатную музыку для видео?

    svfat
    @svfat
    ☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺
    пара ссылочек, которыми пользую лично я:
    https://www.youtube.com/audiolibrary/music - нэту ютуб точно не удалит, но выбор не сказать, что огромный
    https://www.jamendo.com - очень большой выбор, но много шлака. Есть с лицензиями разрешающими коммерческое использование
    Ответ написан
    Комментировать
  • Поле ввода input с выбором?

    <div id=1>
    <div id=2></div><input>
    </div>

    По клику на div id=2 показывать список, в зависимости от выбора - устанавливать нужный текст в input с помощью js.
    Ответ написан
    Комментировать
  • Веб-приложение написано. Что дальше?

    @bromzh
    Drugs-driven development
    .
        _______                         ________
       |       |                       |        |
       |   n   | -> site1.com ->|  |-->| uwsgi1 |-->|   |--> app1 for site1
       |   g   |                |  |   |________|   |   |
    -->|   i   | -> site2.com ->|->|    ________    |-->|--> app2 for site2
       |   n   |                |  |   |        |   |   |
       |   x   | -> site3.com ->|  |-->| uwsgi2 |-->|   |--> app3 for site3
       |_______|                       |________|

    Это примерная общая структура деплоя нескольких питоновских wsgi-приложений.

    1) Nginx ставят вперёд в основном для:
    a) отдачи статики
    b) балансировки нагрузки
    Он быстрый, надёжный, статику отдаёт лучше, чем uwsgi, плюс, можно настроить всякие https. Однако, nginx не умеет запускать питоновские приложения. Для этого он проксирует запрос на wsgi-совместимый сервер.
    2) В wsgi-сервере запускаются все доступные питоновские приложения. Uwsgi можно довольно гибко конфигурировать, посмотри оф доки. Одной из классных штук является emperor-mode: uwsgi может сканировать папку на наличие конфигов и автоматом подхватывать питоновские приложения. Обычно создаётся 1 папка, а каждое wsgi-приложение просто делает симлинк с конфигом в эту папку.
    3) Uwsgi можно запустить как через обычный tcp-сокет, так и через unix-сокет. Что ты выберешь, то и надо будет указывать в конфиге nginx
    4) Uwsgi лучше запускать через supervisord. Он позволяет перезапускать приложение при падении, гибко настраивать запуск похожих демонов, перенаправлять stdout/stderr, настраивать переменные окружения и т.д.. Опять же, смтри доки. В конфиге прописываешь, как у тебя будет запускаться uwsgi и какой конфиг/папку с конфигами uwsgi будет читать.
    5) Если сервер имеет N ядер, то имеет смысл запустить N-1 штук процессов uwsgi на разных портах/с разными sock-файлами. Тогда nginx сможет балансировать нагрузку между ними. Запускать группу процессов можно либо через супервизор, либо задав настройки в конфиге самого Uwsgi, тут как удобнее. Разница будет лишь в том, что в первом варианте при падении одного uwsgi, остальные будут жить, а во втором случае, перезапустятся все процессы uwsgi (скорее всего).
    6) Не надо описывать конфиг каждого uwsgi-сервера в nginx отдельно, для группы есть upstream.
    7) Насколько я понимаю, если питоновское приложение 1, то лучше запустить несколько экземпляров uwsgi через супервизор, если их много - запускать несколько штук uwsgi в emperor-mode.

    Я точно не помню синтаксис конфигов, но должно получиться что-то похожее на такое:
    # Конфиг supervisor:
    [program:uwsgi]
    numprocs = 3 (для 4-х ядерного серва)
    command = uwsgi --emperor /path/to/conf/dir --socket /tmp/uwsgi/uwsgi-%(process_num).sock


    Либо так:
    # Конфиг  uwsgi: /path/to/conf/default.ini
    [uwsgi]
    socket = /tmp/sockets/uwsgi-%(vassal_name).sock
    
    # Конфиг супервизора
    [program:uwsgi]
    command = uwsgi --emperor /path/to/conf/dir ----vassals-include path/to/conf/default.ini


    В любом случае, всё это дело потом легко добавляется в nginx:
    upstream backend {
        server localhost:8001;  #для tcp-сокетов
        server localhost:8002;
    
        server unix:/tmp/uwsgi/uwsgi-1.sock; # для unix-сокетов
        server unix:/tmp/uwsgi/uwsgi-2.sock;
    }
    # А потом просто проксируешь на эту штуку:
    server {
        location / {
            listen       80;
            server_name site1.com;
            proxy_pass http://backend;
        }
    }
    
    server {
        location / {
            listen       80;
            server_name site2.com;
            proxy_pass http://backend;
        }
    }


    PS Возможно, если количество питоновских приложух сопоставимо с количеством процессоров, то может будет лучше настроить так: 1 экземпляр uwsgi на 1 приложение. Но я точно не знаю, имеет ли это смысл, надо читать внимательно доки uwsgi и nginx.
    Ответ написан
    2 комментария
  • Strongswan и клиент Mikrotik как связать?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    IKEv1 с микротиком не заработает в принципе. Нужно использовать IKEv2, если прошивка соответствующая. Если же прошивка, в которой еще нет IKEv2 - обновиться и попробовать. Кроме того, хэш sha256 в микротике как-то через спину сделан - он работает только на соединении микротика с микротиком, при попытке связать микротик со strongswan - не получается нифига.
    Ответ написан
    Комментировать
  • Как переехать с RAID1 на RAID10 ?

    Melkij
    @Melkij
    PostgreSQL DBA
    Вставляете эти два диска.
    Инициализируете raid10 на этих дисках как "диск missing диск missing". RAID10 переживёт пропуск вообще любого диска или до половины дисков, но только в определённых местах (каких - зависит от стиля размещения данных по дискам, их есть несколько, если интересно - в мане описаны).
    Ставите загрузчик на новые диски
    Переносите систему (для lvm - штатными средствами), для других - погуглите.
    Перезагружаетесь с raid10
    Разбираете raid1 и добавляете эти диски в raid10. Ждёте конец ребилда массива, всё.

    Разумеется, с бекапами. Сам процесс довольно простой, чаще угробить всё можно опечаткой.

    Дико извиняюсь, курсивом выделены пункты вам нафиг не нужные, это для случая, если система на этом же рейде.
    И для переноса данных, если нет lvm, то остановки сервисов (а не всей системы) и rsync'а вполне хватит.
    Ответ написан
    3 комментария
  • Аппаратный райд vs Программный?

    nicolnx
    @nicolnx
    с точки зрения надежности — да, лучше внешний аппаратный рейд-контроллер от какого-нибудь известного вендора. но брать лучше пару — чтобы если один умрет можно было оперативно поднять массив а не ждать пока приедет замена. Программныый в этом плане гибче — винты всегда можно поставить в другую машину и собрать его там.
    с точки зрения производительности — разница как правило незаметна — современные процессоры довольно шустро считают.
    еще один довод в пользу аппаратного — если один из винтов помирает, то на аппаратном он как правило спокойно вышибается из массива. с программным же возможны варианты — у меня были случаи когда один винт со сгоревшей электроникой вводил ядро в такую задумчивость, что приходилось тушить машинку. т.е. с горячей заменой на аппаратном все гораздо лучше (если контроллер поддерживает и корзины есть)
    Ответ написан
    Комментировать
  • Аппаратный райд vs Программный?

    @topbanana
    В материнских платах обычно стоит fake-raid, неизвестно как распределяющий данные. В случае если накроется материнская плата или система, восстановить данные будет достаточно проблематично. Я бы выбрал программный. Кроме того не факт, что встроенный рейд фря распознает.
    Ответ написан
    Комментировать
  • Аппаратный райд vs Программный?

    @verwolfdotss
    Для low-end систем лучше использовать программный. Как написал KerLaeda нормальный аппаратный рейд стоит дорого. Надежность же фейк рейда сомнительна. Использую md на двух серверах больше года — полет нормальный. Судя по мануалам восстановление данный достаточно простое и предсказуемое.
    Ответ написан
    Комментировать