• Как выполнять задачу каждые 10 секунд в PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Кажется вы ставите телегу впереди лошади, впрочем как и многие новички, пытающиеся решить задачу с оповещениями/изменениями через крон/интервал.

    присылать уведомление, если цена изменилась более чем на 2%
    Во первых откуда берутся изменения? Если у вас они происходят программно - проще во время обновления в бд проверить расхождение с предыдущей ценой, и в случае разницы в эн процентов оповещать всех подписанных на событие клиентов по сокету.
    Во первых обновления будут приходить сразу, а не каждые 10 секунд,
    во вторых не придется выбирать ВСЕ товары и сверять с каким-то хранимым массивом (его еще и хранить где-то надо чтобы разницу считать),
    и в третьих нагрузка при этом на порядки ниже, так как у вас на руках сразу все изменения, и ничего дополнительно выбирать не надо.
    Ответ написан
    2 комментария
  • Как спроектировать страницу авторизации с точки зрения паттерна MVC на PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Или же я вообще пишу глупость

    В целом да. Но

    вся эта логика прекрасно будет в index.php лежать?

    - это гораздо большая глупость.
    Ну то есть лежать-то будет, но к MVC уже никакого отношения не будет иметь.

    По пунктам

    Юзер не должен принимать в конструкторе логин и пароль.
    Вот сейчас эта страница отображает мне двух юзеров помимо меня. Их обоих надо создавать с логином и паролем, серьёзно?

    Что такое AuthPage вообще непонятно. Модель, контроллер? По базе проверяет модель, куки пишет контроллер. А здесь какой-то кадавр.

    Перед тем как писать авторизацию "в стиле MVC", надо сначала разобраться, что такое модель, что такое контроллер, и что такое вью.

    Модель - это вся логика приложения.
    Контроллер - это интерфейс для общения модели с браузером. Делает всё, связанное с обработкой НТТР запросов.
    Вью - отображение.

    Как правильно.

    Соответственно в модели должен быть класс User с методом auth(), который принимает логин и пароль и возвращает инстанс класса Юзер.
    В конторе делается экшен: отдельный метод, который
    - проверяет, если был запрос методом ПОСТ, то берет из него логин и пароль,
    - валидирует их, если валидация не прошла, то создает ошибку, которую надо показать юзеру
    - если прошла, то вызывает метод auth() модели User, передавая в него логин и пароль
    - если совпали, то пишет в сессию ид юзера, и делает редирект куда-нибудь
    - если не совпали, то создает ошибку, которую надо показать юзеру
    - вызывает вью с формой для логина и пароля

    Для регистрации делается еще один экшен, который
    - проверяет, если был запрос методом ПОСТ, то берет из него данные для регистрации,
    - валидирует их, если валидация не прошла, то создает ошибку, которую надо показать юзеру
    - если прошла, то то заполняет класс User данными и выполняет метод save() и делает редирект куда-нибудь
    - вызывает вью с формой для регистрации

    Для личного кабинета делается третий экшен, который берет из сессии ид юзера, обращается к методу read() модели User и через View показывает личный кабинет

    Варианты реализации

    Самый простой вариант реализации контроллера - это папочка с отдельными файлами-экшенами. Ничего плохого в такой архитектуре нет, этот этап надо пройти, если раньше так не делали.

    То есть папка user в которой есть, скажем, файл index.php который является экшеном личного кабинета.
    Он проверяет юзера в сессии, и если нету, то перекидывает на auth.php
    в auth.php есть форма и ссылочка на register.php
    Все три файла инклюдят в себя файл user.php из папки model, в котором есть функции auth(), register() и profile()

    Но в более классическом варианта к трем буквам MVC добавляется ещё одна - R, роутер. Специальный сервис, который разбирает адресную строку, и видя, например, что к сайту обратились по адресу /user/register, создаёт экземпляр класса UserController и вызывает его метод register()
    Ответ написан
    4 комментария
  • Что можно изучить после того как изучил Yii2?

    Sanes
    @Sanes
    Что разработчики делают потом?

    Работают.
    Ответ написан
    Комментировать
  • Как собрать программу (несколько вопросов)?

    @acwartz
    Тут должна быть ваша реклама.
    Имя файла это имя проекта, можно изменить в менеджере проектов:
    5f896f9c34249105669309.png

    Расположение выходного файла меняется в настройках проекта,
    обратите внимание на наличие вагона конфигураций:
    5f896fb08365a536392909.png

    Я для output directory для all values - all platforms указываю ..\bin\, там и плодятся все бинарники.
    Но это у меня т.к. структура проектов всегда такая:
    ./prjects//bin/.exe
    ./prjects//source/DCU/{Platform}/{BuildMode}/
    ./prjects//source/.dproj
    3) В настройках проекта указал лого и иконку(почему то у exe'шника и в трее они не меняются) - их(иконки) нужно так же около exe файла держать?

    С лого и прочим тоже самое, для каждого конфига нужны свои настройки.
    Иконка в трее берется из соотв. свойства компонента.

    4)Еще такой вопрос - как лучше хранить настройки по умолчанию?(сейчас они просто прописаны в коде) Была мысль - ini файл рядом с exe положить, но среди настроек есть некоторые "секретные", поэтому нужно, чтобы обычный пользователь их не трогал и не видел - нормальное ли решение будет добавить dll в котором прописать функцию устанавливающую эти настройки(например логин, пароль, адрес сервера куда отправляются запросы)
    обычные настройки(автозапуск, горячие клавиши) записываю в реестр.

    Вдумайтесь, настройки по-умолчанию это те настройки которые есть всегда вне зависимости от доступности реестра/файлов. Они должны быть внутри самого exe, т.е. прямо в коде прописаны либо модулем с константами/функциями. И не надо городить ни в ресурсах ни рядом ни в dll ничего, никаких конф. файлов. Это лишняя и пустая трата времени, в 95% случаев вы туда только в первый раз полезете и всё.

    5) Нужно ли сжимать exe файл с помощью upx?

    И зачем это нужно делать? Чтобы лишний раз панику пользователю развести на пустом месте из ничего?
    Если задаётесь этим вопросом, ответ - НЕ НУЖНО. Соберите Release и всё.

    6) С помощью чего создать инсталлятор? сильно ли критичный вариант создать sfx-архив с exeшником, файлом реестра и dll файлам?.

    А точно нужен этот инсталлятор?
    Батника Uninstall с командой start /wait yourapp.exe --uninstall недостаточно? Программа запустится, найдет аргумент вычистит все свои данные, и завершится. Батник грохнет свою папку и себя. Всё.

    Инсталлятор нужен когда приложение очень много файлов ставит в т.ч. в систему (системные библиотеки, масса записей в ресстр). Если очень хочется модно/молодёжно, то создавайте при помощи InnoSetup.
    Ответ написан
    Комментировать
  • Composer не видит переменную PATH?

    @Dimon-zmey
    Все дело в использовании Open Server в котором уже установлен composer. Зайдите в \OpenServer\modules\php\ выберите версию php которую вы используете и удалите файлы composer.bat и composer.phar. После перезагрузки сервера команда composer сразу заработает.
    Ответ написан
    4 комментария
  • Как и где взять список сайтов работающих на HTTP?

    Взять – у поисковиков! В Google есть поисковый оператор inurl:

    поисковый запрос авто -inurl:https
    найдёт сайты по ключевому слову «авто», в адресе которых отсутствует "https", т.е. которые работают без HTTPS.

    Попробовать

    Почему-то из документации по поиску упоминания этого и других поисковых операторов уже выпилили. Остались упоминания на сторонних сайтах.
    Ответ написан
    Комментировать
  • Какой язык программирования изучать в свободное время?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Кто скажет, что Delphi/Pascal умер, пусть живёт в тесной конкуренции.
    Кто иного мнения - пусть зарабатывает.

    Автору: Восстановите знания pascal и изучайте Delphi, продолжайте развивать свои накопленные знания.
    Ответ написан
    Комментировать
  • Как гарантировать неизменность данных во время получения данных?

    sarapinit
    @sarapinit
    Точу водой камень
    Вам подойдет уровень изоляции SNAPSHOT.

    Specifies that data read by any statement in a transaction will be the transactionally consistent version of the data that existed at the start of the transaction. The transaction can only recognize data modifications that were committed before the start of the transaction. Data modifications made by other transactions after the start of the current transaction are not visible to statements executing in the current transaction. The effect is as if the statements in a transaction get a snapshot of the committed data as it existed at the start of the transaction.


    https://docs.microsoft.com/en-us/sql/t-sql/stateme...
    Ответ написан
    3 комментария
  • Почему медленно работает HDD?

    @feanor7
    Системный администратор
    Прогнать тест Victoria полный.
    Вы забыли упомянуть в качестве какого диска работает старичок. Системный, файловый.

    Не лишним будет заменить SATA шлейф.
    Так-то если тест будет успешным и медленных секторов мало, то сбросить данные на другой хард,этот отформатировать.
    Ответ написан
    4 комментария
  • Как бороться со стрессом на работе?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    5db85903dd69c045216024.jpeg
    У джунов в системной разработке мозги кипят на порядки больше.
    Ответ написан
    Комментировать
  • Литературу или курсы по алгоритмам?

    sgjurano
    @sgjurano
    Разработчик
    Попроще — Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих
    www.ozon.ru/context/detail/id/147945774/?from=shar...

    Посложнее — Алгоритмы. Построение и анализ
    www.ozon.ru/context/detail/id/33769775/?from=share...
    Ответ написан
    Комментировать
  • Как отрисовывать в буфер с прозрачным фоном GDI+?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Ты можешь использовать 32 битный bitmap как буфер и рисовать на нём любые фрагменты без фона.
    32-х битный bitmap это как png без сжатия.
    Вот пример. Я рисую на GlassFrame иконки и текст.
    5d819ab98dcea452184807.png
    Ответ написан
    1 комментарий
  • Как эффективно работать с массивами в PHP?

    @Radmin
    Для поточной обработки больших объёмов данных в условиях ограниченной памяти люди используют генераторы.

    В этой статье показано, как, с помощью XMLReader можно распарсить большой xml-файл, не вычитывая его полностью в память.

    Для понимания, как устроено хранение переменных в памяти, следует почитать PHP Internals.

    По сабжу, в сухом остатке: используйте типизированные классы, чтобы было удобнее работать с данными.
    Ответ написан
    Комментировать
  • Как ПРАВИЛЬНО сравнить 3 числа на Pascal?

    Zoominger
    @Zoominger
    System Integrator
    А почему бы не взять и не отсортировать массив?
    Ответ написан
    3 комментария
  • Почему не убавляется свойство объекта?

    В строке ошибка
    this.conut = this.conut - count;
    Нужно
    this.count = this.count - count;
    Ответ написан
    4 комментария
  • Как определить источник изменения размера окна?

    longclaps
    @longclaps
    Наверное, мой юный друг, ты можешь, вызывая событие WMSIZE в своём коде, так же взводить какой-то флаг, а сбрасывать его в своём обработчике.
    Ответ написан
    1 комментарий
  • Как корректно вычислить ширину текста?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    function TCustomCanvas.TextWidth(const Text: string): Integer;
    begin
      Result := TextExtent(Text).cX;
    end;
    function TCanvas.TextExtent(const Text: string): TSize;
    begin
      RequiredState([csHandleValid, csFontValid]);
      Result.cX := 0;
      Result.cY := 0;
      Winapi.Windows.GetTextExtentPoint32(FHandle, Text, Length(Text), Result);
    end;
    Ответ написан
    Комментировать
  • Почему игнорируются VCL-стили для компонента TMainMenu?

    @kalapanga
    Проблема известная. Вариант обхода описан например здесь: https://stackoverflow.com/questions/17687078/delph... Или переходите на более новую версию delphi. Сейчас попробовал, в 10-й delphi TMainMenu уже правильно стили воспринимает.
    Ответ написан
    1 комментарий