Задать вопрос
  • Docker - как его понять новичку?

    > Почему в образах с неким софтом не указывается какая нужна ОС
    Потому что сам образ строится на основе ОС.
    Т.е. для этого "некоего софта" может быть несколько образов, на базе Ubuntu, Debian или (если образ правильный : ) на Alpine.
    Только ОС в контейнере, как правило, сильно обрезанная. И да, ядро используется хостовой машины.

    > если у меня на хосте Windows а в докере я хочу Ubuntu
    Соответственно, берите абсолютно любой образ на основе Ubuntu.

    > если у меня на хосте Windows
    только имейте в виду, что (как минимум, до недавнего времени) Docker под Windows работал настолько через ..., что я, например, для работы с Docker-контейнерами, сидя под Win 10, таки поднимаю виртуалку с Alpine, и там уже поднимаю Docker.
    Ответ написан
  • Как оптимизировать постраничный вывод из большого объема данных?

    aprenoir
    @aprenoir Автор вопроса
    программный архитектор
    В итоге пришел к решению на уровне логики приложения. В основной базе постоянно содержится 0.5-1 млн наиболее свежих записей, а остальные выносятся в архивную. Скрипт-архиватор раз в сутки переносит старые записи в архив. Первоначально пользователям выдаются только наиболее свежие данные из основной базы (99% запросов), а если их недостаточно, то производится поиск в архивной.

    P.S. В дополнение, если пользователь начал листать ленту - сделал вывод не 10, а 50 записей. При скроллинге клиент 1 раз выдает данные из запроса, а остальные 4 пакета помещает в массив и выдает по мере необходимости. Когда данные клиента заканчиваются, делается новый запрос. Сразу 50 не вывожу, чтобы не тормозить браузер (там много графики). Что-то подобное встречается в vk и ряде других крупных сайтов.

    P.P.S. Итоговое решение на уровне MySQL получилось следующим. Провел вручную тестирование с выборками на основе жестко прописанного (use index) простого или составного индекса. Наилучшим по производительности оказалось использование составного индекса (например, (type, update)), использование которого жестко прописано в коде приложения в зависимости от конкретного типа выборки (по-умолчанию, в ряде случает MySQL выбирает не самый производительный индекс). Удивило расхождение данных, выдаваемых EXPLAIN с реальными показателями производительности. Так, простой индекс (EXPLAIN показывает rows 10) работал в сотни раз медленнее составного с rows в несколько млн. записей.

    P.P.P.S. В общем, проблема была в неправильном выборе движком MySQL индекса по которому проводился поиск (в некоторых случаях использовался только простой индекс, когда лучше было использовать составной, а в некоторых поиск проводился сразу по 2-м индексам с объединением результатов). При прописывании USE INDEX вручную (на каждый конкретный случай) производительность многократно возросла.
    Ответ написан
    Комментировать
  • Что означаете знак амперсанда (&) в селекторе css?

    @skazi_premiere
    Верстаем как умеем ;) HTML/CSS/JS
    & - это элемент родитель к которому применяеться псевдокласс, можно так же писать и полное имя родителя.
    Вот пример с хабра.
    .parent {
        position: absolute;  
        &:before {
            height: 100%;
            display: inline-block;
            vertical-align: middle;
            content: '';
        }
    }

    Он же без &, а с полным именем родителя.
    .parent {
        position: absolute;  
    }
    .parent:before {
            height: 100%;
            display: inline-block;
            vertical-align: middle;
            content: '';
    }
    Ответ написан
    Комментировать
  • Как передать массив методом post с помощью ajax?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    $('#tablePaySave').click(function() {
      var test = [];
      var month = 1;
      var year = $('#tablePayYear').val();
      $('.table').find(':input').each(function(i, input) {
        var cell = {};
        cell['id'] = input.id;
        cell['type'] = $(this).data('type');
        cell['value'] = input.value;
        cell['month'] = month;
        month++;
        if (month > 12) {
          month = 1;
        };
        cell['year'] = year;
        test.push(cell);
      });
    
      $.ajax({
        type: "POST",
        url: "/accounting/save",
        data: {test: test},
        dataType: "json",
        success: function(data) {
          console.log('success');
        },
        error: function(data) {
          console.log('error');
        }
      });
    });


    var cell = {};
    ...
    data: {test: test},
    Ответ написан
    1 комментарий
  • Как установить composer и как им пользоваться под windows?

    K-2
    @K-2 Автор вопроса
    Постараюсь подвести первые итоги.

    Composer можно пользоваться в 2х вариантах.
    Глобально(установив программу) и Локально(ничего не устонавливая)
    И тот и тот способы работают только из командной строки. (Пуск->Стандартные->Командная строка)
    Для того чтобы что-то скопировать в командную строку ctrl+v не работает! Пользуемся правой кнопкой мышки->вставить

    ЛОКАЛЬНО пошагово
    1. Создаем папку, в которой будет проект на компьютере.
    2. В Командной строке пишем команду cd и путь к папке с проектом:
    cd C:\xampp\htdocs\test_composer
    3. Т.к. программа не установлена, нужен загрузочный файл(мини-программа composer), для его загрузки в Командной строке пишем команду:
    php -r "readfile('https://getcomposer.org/installer');" | php
    теперь в директории появился загрузочный файл
    4. Запускаем команду загрузки фреймворка(у каждого свой), в Командной строке пишем:
    php composer.phar require silex/silex ~1.1 (для фреймворка silex)

    В Командной строке, команды запускаются по разному при локальной и глобальной загрузках:
    Локально: php composer.phar require silex/silex ~1.1
    Глобально: composer require silex/silex ~1.1
    php composer.phar меняется на composer
    Еще при локальной загрузке нужно каждый раз закачивать установочный файл(это не сложно и описано в шаге 3):php -r "readfile('https://getcomposer.org/installer');" | php
    При глобальной загрузке этот файл не нужен.

    ГЛОБАЛЬНО пошагово
    1. Скачиваем программу composer https://getcomposer.org/Composer-Setup.exe
    2. Запускаем. При запросе файла php указываем путь к локальному хостингу -> папку php
    3. Теперь делаем все тоже самое что и при локальной загрузке, но пропускаем шаг 3, и изменяем запросы из Командной строки(вместо php composer.phar пишем composer). Пример:
    было так: php composer.phar require silex/silex ~1.1
    стало так: composer require silex/silex ~1.1

    О других отличиях между глобальной и локальной загрузками пока-что тут ничего не ответили!
    Ответ написан
    1 комментарий
  • Как найти номер и количество слайдов в карусели owl carousel 2?

    @ligisayan Автор вопроса
    почти получилось вот так, единственно что при переходе с последнего слайда на первый отображает порядковый номер 8, а затем 2,3 и т.д.
    acc6bf82cb81.png
    Ответ написан
    Комментировать
  • Что за ошибки при загрузке сайта (this.root.createShadowRoot is not a function)?

    @Ovilon
    Если ещё актуально, то disk-button.min.js это скрипт Яндекс Диска, а точнее расширения Хрома, установленного у вас. Притом вываливает свою ошибку this.host.createShadowRoot is not a function даже на сайте Яндекса)))
    Ответ написан
    Комментировать
  • Как избавиться от спама formit + AjaxForm modx?

    an-tar
    @an-tar Куратор тега MODX
    Full stack web developer
    Обычно для Formit один или комбинация из нескольких вариантов:
    1.Google Recaptcha V2
    2. Math hook
    3. Spam hook (проверка по пустоте скрытого поля)
    4. Проверка по спам-базам

    Несколько полезных линков:
    Раз
    Два
    Три
    Четыре
    Также косвенно полезно отправлять почту черeз smtp, иметь MX записи на своем домене, корректно настроить SPF и DKIM заголовки сервера.
    Ответ написан
    Комментировать
  • Как отследить http запросы отправляемые приложениями (android)?

    atetc
    @atetc
    Админ Android dev-s чата: https://goo.gl/8JKF1f
    Packet Capture

    даже рут не нужен
    Ответ написан
    Комментировать
  • Как парсить json с чужого сервера?

    @remzalp
    Программер чего попало на чем попало
    Просто по запросу ссылки отдаётся html страница, в ней JS код, который проверяет наличие куки c нужным именем и IP адресом, если нету - устанавливает её и перезагружает страницу
    Фрагмент установки: setCookie('Y...6', '1.2.3.4', 10);

    Для того, чтобы выяснить минимальный набор заголовков, который надо передавать - используйте Chrome, инструменты разработчика, вкладка Network, правым кликом на запросе - "Copy as Curl (cmd)".

    Для тестирования скачать curl for windows, крутить запрошенный текст в командной строке, по одному убирая параметры -H

    Еще будет полезен ключик -k, чтобы не ругалось на сертификаты:
    curl -k "https://...." .....

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

    Соответственно вся логика - запрашивается страница с нужными заголовками, если отдали html, то проанализировать значение куки, поправить в запросе и переслать заново. Для совсем первого запроса запрашивать без куки, для следующих - сохранять.
    Ответ написан
    2 комментария
  • Расскажите подробно про php://input, как пользоваться?

    artem90
    @artem90
    TeamLead, Developer
    var_dump(file_get_contents("php://input"));
    Ответ написан
    Комментировать
  • Расскажите подробно про php://input, как пользоваться?

    php://input возвращает все необработанные данные после HTTP-заголовков запроса, независимо от типа контента.

    Данные, могут быть:
    • application/x-www-form-urlencoded ( application/x-www-form-urlencoded тип application/x-www-form-urlencoded для простых форм- application/x-www-form-urlencoded ) или
    • multipart/form-data-encoded (в основном multipart/form-data-encoded для загрузки файлов)

    Это связано с тем, что это единственные типы контента, которые должны поддерживаться браузерами. Поэтому сервер и PHP традиционно не ожидают получения какого-либо другого типа контента (что не означает, что они не могли бы).

    Если вы просто отправляете POST-ом обычную HTML-форму, запрос выглядит примерно так:
    POST /page.php HTTP/1.1
    key1=value1&key2=value2&key3=value3

    Но если вы много работаете с Ajax, может понадобиться обмен более сложными данными с типами (строка, int, bool) и структурами (массивы, объекты), поэтому в большинстве случаев JSON является лучшим выбором. Но запрос с JSON-полезной нагрузкой выглядел бы примерно так:
    POST /page.php HTTP/1.1
    {"key1":"value1","key2":"value2","key3":"value3"}

    Теперь содержимое будет application/json (или, по крайней мере, ни один из вышеперечисленных), так что $_POST -wrapper из PHP не знает, как с этим справиться (пока).

    Данные всё еще там, вы просто не можете получить к нему доступ через $_POST. Поэтому вам нужно получить его с "сыром" виде помощью file_get_contents('php://input') (если он не закодирован в формате multipart/form-data).

    Это также способ доступа к XML-данным или любому другому нестандартному типу контента.
    Ответ написан
    Комментировать
  • Почему в jQuery событие scroll не работает при body margin: 0;?

    @FRiMN
    У меня перестаёт работать при
    html, body {
        height: 100%;
    }
    Ответ написан
    1 комментарий
  • Реально на Котлин создать "нормальную" программу для Windows с "адекватным Gui?

    @oldd
    Программист, архитектор, тимлидер
    Очень реально. Котлин+TornadoFX+Exposed, как раз сейчас пишу .
    Ответ написан
    Комментировать
  • Incorrect datetime value: '0000-00-00 00:00:00'. Как исправить?

    @Vitalionus
    SET SQL_MODE='ALLOW_INVALID_DATES'
    Ответ написан
    Комментировать
  • Как правильно расставить индексы в БД?

    @Vampiro
    В общем случае, принципы построения индексов достаточно просты: индекс (кроме первичного) строится для ускорения запросов. Причем если есть WHERE по двум полям, то будет взят индекс, содержащий оба этих поля (если есть) и не важно сколько их там еще.

    Другими словами, один индекс по полям «A, B, C» будет более «полезен» для запроса, содержащего некие условия по полям A и B, чем два отдельных индекса по полям «A» и «B».

    Фактически, индексы A,B,C и A,C,D будут одинаковы в части поиска по полю «А». При поиске по полям А,B будет взят первый индекс. При поиске по полям A, C — второй.

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

    Не бойтесь добавлять слово EXPLAN в тело запроса и смотрите какие индексы он использует. Порой оптимизатор использует fullscan даже при наличии индексов.
    Ответ написан
    Комментировать
  • Что означает конструкция (function($){$(function(){ })})($)?

    GeneMoss
    @GeneMoss
    void
    $(function(){}) — это мы запускаем действие в момент загрузки страницы. А оборачиваем в анонимную функцию (function($){ })($);, чтобы избежать конфликта имен с $.

    Автор плагина предусмотрел случай, когда доллар занят под другую библиотеку/функцию/переменную. Чтобы избежать конфликта имен, достаточно будет заменить доллар на jQuery, вот так (хотя сразу так и нужно было писать):
    (function($){$(function(){
        $('select').styleThis();
    })})(jQuery);


    Т.е. передав один раз нужный параметр, нам нет нужды переписывать весь плагин.
    Ответ написан
    1 комментарий
  • Кто знает SVG редактор?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    inkscape.org - халявно и именно под svg
    adobe illustrator - дорого, но есть поддержка svg

    Я бы рекомендовал именно inkscape - он волшебный. Для новичка может показатся сложным и непонятным, но чем глубже понимаешь структуру и возможности svg тем больше понимаешь, что кроме inkscape нет альтернатив вообще.
    Ответ написан
    1 комментарий
  • Какие шансы устроиться программистом 1С в Москве?

    @Dementor
    программист, архитектор, аналитик
    Программисты 1С - это не американские актеры, которые со всех штатов едут в Голливуд в надежде, что их заметят и дадут работу! У нас намного больше возможностей.

    Работаете во франче? Отлично, как минимум во франч вас уже возьмут.

    Не знаю как в Москве, но в Киеве есть штатные ставки на заводах, где можно печатную форму дня два пилить, а остальное время общаться с пользователями, которые что-то не то нажали - работа "не бей лежачего", а платят как за настоящего разработчика. Верно заметил Saboteur - всегда будут те, кого вы будут поражать ваши познания не зависимо от их объема.

    Но я рекомендую обратить внимание на фриланс. Обычно постоянные клиенты франчей начинают предлагать подработку напрямую за наличку, которая меньше чем они платят франчу, но больше чем 30%, которыми франч делится с сотрудниками. Или можно брать подработки в интернете. В какой-то момент мои вечерние "шабашки" (по всему СНГ) стали приносить больше денег чем работа во франче и я полностью ушел на самозанятость. А уже на фрилансе не имеет значения - ты за Уралом, в Москве, на Бали или в открытом космосе - главное иметь стабильный интернет. Сейчас во время всеобщего карантина тема работы через интернет только сильнее развивается.
    Ответ написан
    Комментировать