Задать вопрос
  • Как настроить коммуникацию между двумя Docker Compose проектами на одной машине по HTTP?

    @grinat
    Докер по умолчанию все на один и тот же ip вешает, например на 192.168.99.100 надо просто разные порты в композе прописать и все. Эти же ip с портами в хост файле. Т.е.
    back:
    version: '2'
    services:
    nginx:
    ports:
    - "4001:80"
    front:
    version: '2'
    services:
    nginx:
    image: nginx:stable-alpine
    ports:
    - "4002:80"
    Если есть проблемы, то подыми nginx и там проксируй:
    server {
    client_max_body_size 0;
    listen 80;
    server_name front;

    location / {
    client_max_body_size 0;
    proxy_pass http://192.168.99.100:4001;
    }

    server {
    client_max_body_size 0;
    listen 80;
    server_name back;

    location / {
    client_max_body_size 0;
    proxy_pass http://192.168.99.100:40012;
    }
    Ответ написан
    Комментировать
  • Какую подключить систему миграций на свой самописный сайт?

    @grinat
    Ну дак напиши сам, там всего-то два класса, первый делает запрос к бд и проходит по списку файлов из папки с миграциями. Второй запускает миграцию и в ней выполняет невыполненый файл миграции, если нет эксепшинов либо фальш, откатывает, иначе применяет, возвращает итог первому, тот делает пометку что миграция применилась либо кидает исключение. А в консоле можно запустить любой php скрипт.
    Ответ написан
  • Как написать расширяемый "класс" на javascript?

    @grinat
    Прототипы
    function Hadler(){}
    Handler.prototype = {
    bar: null,
    foo: function(){
    }
    }
    на них в 90% случаев все и делается.
    Jyqery выкинь нахер, это не по уму, это пиздец.
    Ответ написан
  • Как поддерживать и расширять сайт на боевом сервере?

    @grinat
    Все лежит в гите, если нужно что обновить, то выкачивается все из гита, запускаются миграции, происходит сборка и т.п.
    Ответ написан
    Комментировать
  • Как правильно использовать infinite scroll?

    @grinat
    Он ез пагинации не будет работать, в параметр apth нужно наверное передать информацию о странице, а он туда будет прибавлять page=1, page=2 и пожгружать товары.
    Ответ написан
  • Где установить обработчик событий?

    @grinat
    Кинь в конструктор и обработчик будет добавлен при создании класса.
    Ответ написан
    Комментировать
  • На чем обычно пишут информационные системы (с web интерфейсом) для государственных заказчиков?

    @grinat
    Да на чем угодно. Конкретно в той конторе где я работаю, для гос сектора пишут на php(yii2/symfony), js(angular/vue), бд(postgresql). Если нужны какие-то специфичные вещи, на других языках, то нанимают программистов чисто под это на опред проект, после сдачи проекта их увольняют)
    Ответ написан
  • Как правльно организовать RBAC в данной ситуации?

    @grinat
    Да хоть 3002, эт такое слабое воздействие на быстродействие оказывает, что забей. Лучше подумай о том как добавлять новые поля будешь, например массив полей для которых такая проверка доступна, типа:
    const FIELDS = ['field1','filed2'];
    foreach(FIELDS as $field){
          if(!$user->can('manufacturer_order__edit_field_'.$field){
               throw new Error('ffdsf');
          }
    }

    Чтобы ты на клиенте и сервере только в одном месте добавлял новое поле, затем в permission включал разрешение, и вуаля, все работает.
    Ответ написан
  • Как передать значение php переменной в Vuejs?

    @grinat
    Сделай отдельный объект и туда складируй данные и их оттуда вызывай. Ну то есть:
    <script>
    var vueAppParams = {
        dynamicParams: {
    	    page_id: <?=$page->id?>
    	}
    }
    </script>
    <script>
    ...
    axios.post('/books/rating', {
                    rating: 'rating',
                    page_id: window['vueAppParams'].dynamicParams.page_id,
                  })
                  .then(function (response) {
                    console.log(response);
                  })
                  .catch(function (error) {
                    console.log(error);
                  });
                
            }
    ...	
    </script>

    Прост если пойдешь по иному пути, как тут народ предлагает, то в случае решения от maddog670 ты не сможешь сделать бандл, в случае от Arik придется обращаться к свойства контейнера через врезку в beforemount например, что очень медленно, также работа с дата атрибутам очень медленная.
    Ответ написан
    Комментировать
  • Почему по клику на дочернем закрывает родительский элемент?

    @grinat
    Потому что обработчик висит на modal-window, а modal-content это child от modal-window. Вызываются слушатели от child к родителю, там есть параметр, он порядок вызова меняет на от родителя к child. Но в jquery по моему достаточно явно указать селектор вызываемого элемента в on.
    Ответ написан
    Комментировать
  • Как использовать redis с async/await?

    @grinat
    Функция lrange возвращает не promise.
    Ответ написан
  • Кто-то сделал интернет магазины на Angular + Material Design?

    @grinat
    Это хреновая идея, не знаю как сейчас, но полгода назад имел опыт с серверным рендерингом на ангуляре, он работает через universal, плюс нужен доп плагин, который выполнит презагрузку данных через rest. В общем запуск этого всего представлял из себя настоящее шаманство, оно работало только с определенным версиями ангуляра/тайпскрипта.
    Делал тоже самое на vue, там дела чуток получше, но есть проблемы, которые могут быть очень серьезными для уже написанного проекта - презагрузка данных идет через отдельную функцию, которая выполняется до запуска конструктора компонента(т.е. конктест(в общем все функции и данные компонента) в ней недоступен).
    Исходя из этого думаю что есть смысл этим заниматься только если не нужна индексация, оттого решений готовых мало.
    И если планируешь использовать материал, то лучше найди уже готовый набор по типу бутстрапа и вставляй только стили, верстку делай сам. Просто все плагины они построены на базе компонентов, которые вставляются в шаблон, это очень сильно сказывается на быстродействии, особенно в angularе.
    Ответ написан
    2 комментария
  • Как в postgres выполнить сортировку по вычислению разницы даты из разных таблиц при условии, что связь есть?

    @grinat
    1. Заменить jeft join на inner join
    2. Не полнял что нужно, но такто: floor((sum(mc_comments_forums.date_create_stamp - (SELECT m_forums.date_update_stamp order by m_forums.date_update_stamp LIMIT 1) / count(m_forums)) / 3600). Если вообще только для одного коммента это надо, не мучай бд, разбей на два запроса.

    Как по мне любой запрос, внутри которого есть count, полное гуано, когда записей мало, они норм работают, когда много, все, конец. Да и такие запросы если только эт не нужно для сортировки, лучше вообще не использовать, а заменить их на несколько отдельных запросов, тогда их легко кэшировать, сразу видны проблемные места и т.п.
    Ответ написан
    1 комментарий
  • Как создать чат на android при помощи firebase?

    @grinat
    На сервере почти никаких, единственное что нужно это fcmtoken. То есть приложение при первом запуске должно отправить fcmtoken, его сохранить на сервере. Затем когда приходит сообщение, надо определить fcm token получателя и через curl по моему Post запрос на сервер гугла отправить. Если чат общий, то там есть встроенные решения для отправки по группам, по моему просто просто доп параметр надо добавить. В приложении обработка стандартная, стандартный гугловский класс код разбирает. Подводных камней ноль, единственное, там два параметра есть для отправки пуша, первый выводит сообщения в notifications, а второй ничо не делает, а просто передает его в broadcast reciver приложения. И это, в андроиде нет ограничений для объема сообщения, то есть его можно на сервере вообще не хранить, а как есть отправлять, подделать его все равно не выйдет, все пуши подписываются.
    Ответ написан
    Комментировать
  • Как перезаписать куки если они уже имеются?

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

    @grinat
    Вообще \s, но так-то в примере preg_match, а там внизу же указано что регулярка срабатывает для каждой строки. Введи <span>(\s*)(.*?)<\/span> и нажми на preg match all
    Ответ написан
    1 комментарий
  • Какие есть скрипты для настройки хостинга?

    @grinat
    Можно через docker-compose это делать. Ну то есть для каждого пользователя создавать свой compose файл, в котором будут нужные приложения(php,mysql,ssh,ftp и т.д.), гибкость будет 100% и каждому пользователю можно будет настроить нужные ему версии и они не будут друг с другом конфликтовать.
    Ответ написан
  • Как получить непечатный символ через веб-форму?

    @grinat
    Да можно коды снифать на стороне js и как есть передавать на сервер, например через запятую, на сервере их разбирать. Либо перекодировать в другую кодировку, как вариант:
    <script>
    var inputKeys = [];
    function handleStroke(event) {
        inputKeys.push(event.keyCode);
    	onSubmitForm();
    };
    function onSubmitForm(){
    	console.log('Через , =' + inputKeys.join(','));
    	
    	// если надо пееркодировать, закодировать https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder
        var utf8decoder = new TextDecoder('utf8');
        console.log('Пример, в utf8 =' + utf8decoder.decode(new Uint8Array(inputKeys)));
    }
    </script>
    Ответ написан
    6 комментариев
  • Какой фреймворк выбрать для разработки marketplace-платформы?

    @grinat
    Да в россии по умолчанию везде yii2, остальное не сильно популярно, да и если на другом делают, то оно часто до релиза так и не доходит, потому что нет разрабов которые что-то могут. Раз дизайн свой, то если на yii2 будете искать разраба, то важно чтобы у него был опыт адаптации виджетов под другой дизайн, там потому что по умолчанию вшит : bootstrap-3.ru/components.php
    И раз тема фото, то надо чтобы разраб имел опыт обработки фото не через либы, которые часто монструозны и при всем богатстве функций не умеют делать базовые вещи, а напрямую - через встроенные средства языка и unix утилиты. Понимал что такое перцептивный хэш, прогресив jpeg и т.п.
    Ответ написан
    Комментировать
  • Как сделать валидацию формы?

    @grinat
    А какой версии angular? Так то там есть встроенный валидатор. Если он не нужен, то при обработке события отправки, в некую переменную записывать ошибки валидации, и в шаблоне:
    <div *ngIf="validationErrors.myField">{{validationErrors.myField}}</div>
    , в ангуляре, который js правда с таким вариантом возможны проблемы, в связи с тем что переменные в объекты не реактивны, поэтому там лучше так делать:
    <div *ngIf="hasValidationError">{{validationErrors.myField}}</div>
    Ответ написан
    Комментировать