Задать вопрос
  • Имеет ли postgresql свои средства для сжатия, шифрования, архивирования БД, отправки mail, отправку копий на ftp?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Постгрес этого не умеет.
    Постгрес этого не будет уметь.
    Постгрес этого не должен уметь.

    Он умеет быть БД. Он умеет создать дамп БД, годный для загрузки его в другую инсталляцию. Все остальное прекрасно умеет другой софт - написанный для этого. Это в винде каждый суслик в поле агроном. В линухе БД занимается обработкой данных, а шифрованием, архивированием, передачей по FTP занимаются программы, для этого написанные...
    Ответ написан
    Комментировать
  • Как эффективней отрисовывать много SVG графики?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    По скорости работы, быстрее будет canvas, но он по скорости разработки будет хуже. У меня никаких тормозов на vue+svg нет, по крайней мере, до 500 объектов на холсте. Для оптимизации могу посоветовать некоторые вещи:
    1) Используйте path вместо нескольких разных других фигур.
    2) Для сетки не создавайте кучу линий или фигур, просто используйте pattern. Вот пример из моего проекта (он на React JSX, но не суть)
    <pattern id={"bg-" + this.props.id} patternUnits="userSpaceOnUse" width="100" height="100">
        <rect width="100" height="100" fill={this.props.canvasColor}></rect>
        <g fill={this.props.canvasGridColor} style={{ fillOpacity: 0.34 }}>
            <rect width="100" height="1" y="20"></rect>
            <rect width="100" height="1" y="40"></rect>
            <rect width="100" height="1" y="60"></rect>
            <rect width="100" height="1" y="80"></rect>
            <rect width="1" height="100" x="20"></rect>
            <rect width="1" height="100" x="40"></rect>
            <rect width="1" height="100" x="60"></rect>
            <rect width="1" height="100" x="80"></rect>
        </g>
        <rect width="100" height="100" fill="none" strokeWidth="2" stroke={this.props.canvasGridColor}></rect>
    </pattern>

    вот так заливаю на холст
    <rect style={{ 'fill': `url(#bg-${this.props.id}) #fff` }} ... />

    3) Задавайте для изменяемых объектов атрибут уникальный атрибут key
    4) Цельные объекты кидайте в группу, и на нее назначайте общие стили и позицию.
    UPD: простой пример на 1000 объектов (можно добавить, поменяв константу COUNT_OBJECTS) с drag&drop
    jsfiddle.net/Vlad_IT/81kegmxf
    UPD2: вот тот же пример, только с сеткой jsfiddle.net/Vlad_IT/qt64rouL/1 если делать сетку не заливкой, а элементами, будут ощутимые тормоза.
    Ответ написан
    1 комментарий
  • Радость дизайнера - боль верстальщика. Межбуквенные отступы - кернинг и трекинг. Как рассчитать их значения для css?

    HamSter007
    @HamSter007
    HTML/CSS верстальщик
    body {
    font-family: 'PT Sans Caption', sans-serif;
    font-size: 11px;
    line-height: 120%;
    font-weight: normal;
    text-decoration: underline;
    letter-spacing: 0px;
    font-style:normal;
    }


    Все остальное дизайнер пусть оставит себе.

    Если же это какая-то единичная каллиграфия (1-2 слова), то возможен вариант вставки картинкой (пожалуй отдельная история).
    Ответ написан
  • Почему в php 7.0 работают модификаторы классов?

    DevMan
    @DevMan
    тащемта их завезли ещё в пхп5.
    в 7.1 прост расширили их действие на константы.
    Ответ написан
    Комментировать
  • Как синхронизировать с 1С самописную CMS?

    Kenigan
    @Kenigan
    Веб-программист
    Да, 1С является инициатором синхронизации. Она в заданные промежутки времени (можно раз в день, раз в минуту) посылает запрос на сайт для авторизации и начинает ему передавать данные и запрашивать заказы с сайта, если это необходимо. Можно еще делать единичную синхронизацию и потом вручную, когда необходимо, выполнять синхронизацию с сайтом. В любом из этих случаев порядок действий примерно такой должен быть:

    1. Создавайте папку в корне сайта, например, 1c, в ней должен лежать файл 1c_exchange.php (будет обрабатывать все запросы от 1С) и папка files (сюда будут приходить xml товаров из 1С)
    2. В 1С создать обмен с сайтом и указать путь к файлу, который будет обрабатывать все запросы с 1С. Например, mysite.ru/1c/1c_exchange.php.
    3. Там же вписать пользователя и пароля, который будет проверяться в файле 1c_exchange.php.

    В файле 1c_exchange.php будут выполняться примерно такие шаги:
    // Тут 1C передает всю информацию о товарах на сайт
    if($_GET["mode"] == "checkauth" && $_GET["type"] == "catalog") {
    	// Тут проверить, верный ли логин и пароль заполнен в настройках 1С обмена
    } elseif ($_GET["mode"]=="init" && $_GET["type"] == "catalog") {
    	// Тут передать информацию о сервере (используется ли архивация и какой максимальный размер файла)
    } elseif ($_GET["mode"] == "file" && $_GET["type"] == "catalog") {
    	// Тут принимаем файлы, приходящие из 1С, сохраняем у себя в папке files. 
    	// Файлы могут быть 5-ти типов (может и больше)
    	// информация о разделах каталога (catalog.xml),
    	// информация о товарах (goods.xml),
    	// информация о характеристиках (торговых предложениях) (offers.xml),
    	// информация о ценах (price.xml),
    	// информация об остатках (rests.xml).
    } elseif ($_GET["mode"] == "import" && $_GET["type"] == "catalog") {
    	// Тут отдать успех или неудачу передачи файлов
    } elseif ($_GET["mode"]=="complete" && $_GET["type"] == "catalog") {
    	// При завершении операции импорта парсим все данные и заносим информацию на сайт
    }
    	
    // Тут 1C запрпшивает заказы с сайта
    if($_GET["mode"] == "checkauth" && $_GET["type"] == "sale") {
    	// Тут проверить, верный ли логин и пароль заполнен в настройках 1С обмена
    } elseif ($_GET["mode"]=="init" && $_GET["type"] == "sale") {
    	// Тут передать информацию о сервере (используется ли архивация и какой максимальный размер файла)
    } elseif ($_GET["mode"]=="query" && $_GET["type"] == "sale") {
    	// Если имеются заказы на сайте, которые еще не отправлялись в 1С, отправляем их тут. Формат такой http://v8.1c.ru/edi/edi_stnd/131/from.xml
    } elseif ($_GET["mode"]=="success" && $_GET["type"] == "sale") {
    	// Сообщаем о результате выполнения операции отправки заказов с сайта
    }


    Мне в своё время очень помогла эта ссылка
    Ответ написан
    1 комментарий
  • Как получить муниципальные деления из ФИАС?

    NeiroNx
    @NeiroNx
    Программист
    Это значит что в новой версии адреса связанны по GUID - берем какойнибудь обьект с AOLEVEL=1 (Республики), берем его myid=AOGUID, находим его дочерние объекты PARENTGUID=myid - получим города(AOLEVEL=4) и районы (AOLEVEL=3), потом так же для районов можно получить населенные пункты в них.
    Смысл в том что кладр база не хранит историю адресов а в новой базе можно построить адрес который был в конкретную дату - до переименования. (поля STARTDATE и ENDDATE)
    В большинстве случаев нужен лишь актуальный адрес - поэтому пришлось писать конвертер(который берет лишь актуальные адреса) - иначе база слишком жирная, а если брать для всей страны то вообще жесть. А потом уже обновлять если есть изменения.

    Вообще в документации вроде все понятно расписано...

    P.S. Пишу синхронизацию с ФИАС в корпоративную базу(Электроэнергетика) - пришлось изучить всю стркутуру.
    Ответ написан
  • Есть ли смысл ставить Linux, если локального админа на Винде легко взломать?

    Melkij
    @Melkij
    PostgreSQL DBA
    можно через LiveCD

    Если есть физический доступ - элементарно взламывается всё.
    Например, зачем взламывать вообще, если можно поставить свою систему и скопировать нужные данные. Диск зашифрован? Так если у вас нет пароля - то как вы с системой работали ранее?
    Ответ написан
    Комментировать
  • Как правильно настроить конфиг Nginx?

    @dodo512
    server {
        server_name          www.example.com;
        listen               *:80;
        listen               [::]:80 ipv6only=on;
    
        if ($uri !~* ^/downloads/(.+)$) {
            return 301 https://example.com/downloads/$1;
        }
    
    }

    Тут вместо if лучше использовать location.
    server {
        server_name  example.com  www.example.com;
        listen               *:80;
        listen               [::]:80 ipv6only=on;
    
        location / {
             return 301 https://example.com$request_uri;
        }
        
        location /downloads/ {
            root /var/www/html;
        }
    }
    Ответ написан
    3 комментария
  • Где размещать вспомогательные классы в mvc архитектуре?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Есть несколько вариантов решения это проблемы.

    1) Некоторые могут пропагандировать сервисный слой (design-pattern.ru/patterns/service-layer.html), как следствие: "App/Services/ServiceName" - набор классов, отвечающих за какое-то абстрактное действие. Например: "UserAvatarUploaderService", который отвечает за загрузку аватарки пользователя.

    2) В качестве альтернативы и способ, который предпочитаю я - это создание директории "src" с набором независимых компонентов, включая собственный composer.json. Тот же сервис загрузки аватарки будет выглядеть следующим образом:
    - src/
        - AvatarUploader/
            - README.md
            - composer.json
            - tests/ ...
            - src/
                - AvatarInterface.php
                - FileSystemInterface.php
                - FileSystemUploader.php
                - UploaderInterface.php


    Для подключения этой библиотеки достаточно будет прописать в корневом:
    {
        "repositories": [
            {
                "type": "path",
                "url": "./src/AvatarUploader"
            }
        ],
        "require": {
            "app/avatar-uploader": "*"
        }
    }


    А выглядеть внутренний (т.е. внутри "src/AvatarUploader") composer будет так:
    {
        "name": "app/avatar-uploader",
        "autoload": {
            "psr-4": {
                "AvatarUploader\\": "src/"
            }
        }
    }


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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    IMHO, правильный вариант - менеждер вносит запись на сайт, с сайта периодически выгружается xls, если он ещё нужен.
    Ответ написан
    4 комментария
  • Почему не перехватывается исключение PDO?

    Melkij
    @Melkij
    PostgreSQL DBA
    Версия PHP 5.13

    Не существует такой.

    mysql позволяет соединяться без указания имени базы данных. Имя базы данных можно выбрать позже.
    pdo_mysql не ругается на неизвестные параметры в DSN.
    У всех всё хорошо, а раз никто не кинул exception - то чего тут ловить try catch?

    А ошибку вы получаете где-то дальше.
    Ответ написан
    1 комментарий
  • Как экранировать строку в REGEXP (mysql) средствами PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я думаю, что preg_quote() должна подойти.
    Ответ написан
    1 комментарий
  • Можно ли заменять в SQL запросе ' на "?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Эти функции - какой-то ужас, летящий на крыльях ночи. mysql_real_escape_string - вообще за гранью добра и зла.

    Но главное, что я не могу понять - это какое отношение к mysql и mssql имеет функция xss_clean. Ну то есть я даже представить себе не могу, как можно функцию для защиты от xss применять для любых манипуляций c SQL. Это - я не знаю - как положить деньги в презерватив от грабителей. Он же служит для безопасности. Ну вот деньги и будут в безопасности.

    По теме: ради всего святого, используйте PDO с подготовленными выражениями. Это сделает ненужной всю эту мышиную возню с регулярками. PDO поддерживает как mysql, так и mssql, так что разница будет только в синтаксисе запросов, а сам код работы с запросами будет один и тот же

    $sql = "SELECT TOP 10 * FROM user where mssql.department_id=?";  
    $stmt = $conn->prepare($sql);  
    $stmt->execute([$_GET['department_id']]); 
    $users = $stmt->fetchAll();
    
    $sql = "SELECT * FROM user where mysql.department_id=? LIMIT 10";  
    $stmt = $conn->prepare($sql);  
    $stmt->execute([$_GET['department_id']]); 
    $users = $stmt->fetchAll();


    Как можно заметить, в запросах нет ни одной кавычки вообще, что делает сам вопрос про замену бессмысленным.

    От XSS же надо защищаться совсем в другом месте, и также без всего этого ужаса
    Ответ написан
    1 комментарий
  • Можно ли школьнику лет 12 начинать самому изучать web-программирование?

    SagePtr
    @SagePtr
    Еда - это святое
    Можно и даже нужно (если душа к этому лежит). Это намного полезнее, чем заниматься всякой фигнёй и набивать ММР в Доту-2 (или чем нынешние школьники обычно увлекаются).
    Ответ написан
    Комментировать
  • Можно ли школьнику лет 12 начинать самому изучать web-программирование?

    SmthTo
    @SmthTo
    Все перепёлки мира будут оплакивать мою смерть.
    Да, можно, почему нет?

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

    Вот я в этом возрасте только теребонькал, поэтому потерял много времени, а жаль (на самом деле — не жаль, LOL).
    Ответ написан
    Комментировать
  • Можно ли школьнику лет 12 начинать самому изучать web-программирование?

    greenfox07
    @greenfox07
    Можно, даю добро
    Ответ написан
    Комментировать
  • Может ли эта уязвимость навредить сайту?

    SagePtr
    @SagePtr
    Еда - это святое
    А ещё в пост вставить картинку с котиком, а через некоторое время (когда пост затеряется и шанс модератора наткнуться на него будет минимальным) - заменить картинку с котиком на изображение листа конопли и натравить на него Роскомнадзор.
    В итоге сайт улетает в блокировку, а владельцы некоторое время не понимают, почему кол-во посетителей из России вдруг упало, а найти картинку, к которой РКН придрался, будет весьма сложно, так как факт замены в логах нигде отражён не будет, ибо заменена она будет на стороне стороннего сервера.
    Ответ написан
    1 комментарий
  • Легаси-монстр. Как побеждаете?

    @ijoy14
    https://www.google.com/url?sa=t&source=web&rct=j&u...
    Презентация реальной истории
    Ответ написан
    Комментировать