• Чем бы обработать сканы принтерных документов для улучшения качества?

    ValdikSS
    @ValdikSS
    ScanKromsator — то, что вам нужно.
    Ответ написан
    Комментировать
  • Как сделать скриншот страницы полностью?

    sokoloff-rv
    @sokoloff-rv
    Удивлен, что на айтишном ресурсе никто не рассказал про способ сделать скриншот через консоль разработчика в Google Chrome.
    1. Ctrl-Shift-I - открываем консоль разработчика.
    2. Ctrl-Shift-M - переключаемся в режим эмуляции устройств.
    3. Выбираем в настройках нужный девайс. Если хотим сделать десктопный скриншот, то выбираем в настройках Laptop with MDPI screen или создаем девайс вручную как нам нравится.
    4. Нажимаем теперь на три вертикальные точки "More options" (в верхней горизонтальной панели максимально справа) и выбираем "Capture full size screenshot", после чего готовая картинка скачается в формате PNG.
    Способ прекрасен тем, что создает один скриншот, а не делает несколько, которые склеиваются друг с другом, из-за чего потом фиксированные элементы дублируются по нескольку раз. Ну и плюс не нужно захламлять браузер лишними расширениями.
    Ответ написан
    11 комментариев
  • Как добавить дополнительные реквизиты в 1С Предприятие 8.3 УТ 11.3?

    Надо добавлять в папочку Список заказов клиентов
    Ответ написан
    Комментировать
  • Docker - как его понять новичку?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Docker - это не виртуализация. Это построенная на базе линуксовых namespace и cgroups средство изоляции процессов.
    Под Windows и Mac нет линуксовых namespace и cgroups поэтому приходится запускать контейнеры в виртуальной машине, что и создаёт путаницу.
    Ответ написан
    2 комментария
  • Docker - как его понять новичку?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Docker работает только под Линукс, потому что он работает благодаря namespace и cgroups фич, встроенных в ядро Линукс.
    В винде запускается виртуальная машина с Линукс, в которой уже запускается докер.

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

    Так как разные Линуксы все равно юзают тоже ядро, то в образах и указано что именно установлено в Линукс, и образ PHP обозначает, что там будет образ линукса с установленным PHP
    Ответ написан
    4 комментария
  • 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 комментарий