• Почему поднятый в Docker Postgres может отказывать в соединении?

    @q2digger
    никого не трогаю, починяю примус
    потомуч то вы вешаете его на порт 54320 , а пытаетесь подключится к 5432
    Ответ написан
    3 комментария
  • Как въехать в программирование (ООП, паттерны)?

    @Wentixon
    Шаблоны проектирования с человеческим лицом
    К сожалению, не успел к началу вопроса, многое уже посоветовали, но эту статейку вроде не успели еще кинуть. Недавно нашел ее и просто поразился как просто и доступно это изложено + с примерами кода на php. Просто шикарный перевод великолепной статьи!

    От себя же хочу сказать, что единственный способ понять паттерны - это столкнуться с проблемами которые они решают, ибо паттерны ни что иное как шаблоны решения каких то проблем (и предотвращения). Так что делаем вывод - нет проблем, не может быть и решений (конечно, вы просто не осознаете, что они есть, так как проект растет довольно медленно и чаще это какие то правки или добавление нового функционала, который не зависит от старого). Я очень долго пытался с ними разобраться, пробовал читать все перечисленные книги, но вроде читаешь такой и типа понимаешь, но с другой стороны какбы и нет. Вроде понятно, но где это применять хрен знает. Вообщем, как уже сказали, нужны реальные проблемы и тогда открываешь книгу с решениями этих проблем и думаешь какое решение выбрать. Это как с рецептами.. Хочешь что то приготовить, можешь как бы и сам, но не факт, что вкусно получится, тогда открываешь книгу проверенных рецептов и начинаешь применять все по шагам, опираясь при том на ингридиенты, которые у тебя имеются.

    Так что посоветую 2 варианта изучения.
    1) Тупо работаешь над сложные проектами, только действительно сложными, а не сайтиками на cms. И со временем ты начинаешь встречаться с проблемами. Тогда открываешь паттерны и тебе не придется даже как то их особо понимать, потому что это будет естевственно для тебя. Я думаю ты используешь ide вместо редактора кода. Но к примеру я помню тот момент, когда я пользовался саблаймом и знал, что есть ide, но я писал на тот момент простые вещи и когда мне говорили, почему я не юзаю ide, ведь в ней столько всего, я не понимал их потому что мне и саблайма за глаза хватало. Но пришло время, когда надо было то и се и саблайма стало мало. И тут открываю ide, а там уже есть все необходимое и думаешь в такие моменты, как я раньше этим не пользовался. А дело в том, что раньше и не надо было. Может неудачный пример, но вы поняли ) Конечно, этот вариант изучения не совсем реален, по скольку сложный проект еще найти надо, да еще попасть в команду, которая не говнокодит, так как и крупные проекты бывают достаточно плохо написаны. Но можно как вариант к примеру делать свою cms и применять в ней как можно больше паттернов.

    2) Тупо садитесь и изучаете паттерны (как и делал я). Но не просто изучаете, а к какждому паттерну придумываете как можно больше проблем, которые может у вас были или могут быть, так как паттерны в большинстве случаях любят описывать в метафорах, но чаще это получается слишком абстрактно, поэтому нужно чтобы вы придумали свои конкретные задачи, где бы вы попробовали применить этот паттерн. И второй этап - садитесь и пишите эти задачи. Тупо открываете свой яп и реализовываете паттерн. При чем несколько раз с разными проблемами.

    Также советую четко понять uml диаграммы. Таким образом, чтобы освежить паттерн вы не будете читать примеры, а просто посмотрите диаграмму и сразу вспомните, зачем он нужен и как его можно реализовать.
    Вот пожалуй и все
    Ответ написан
    1 комментарий
  • Как использовать шаблоны проектирования в работе (php + laravel)?

    ivankomolin
    @ivankomolin
    Использование паттернов зависит не от используемого фреймворка или языка программирования, а в большей степени от задач.
    Паттерны позволяют написать более эффективный код того или иного функционала с точки зрения дальнейшей поддержки.
    Есть хороший ресурс, на котором можно ознакомиться с основными встречающимися паттернами, а также разобраться когда их следует применять, а когда нет.
    https://refactoring.guru/ru/design-patterns
    Ответ написан
    Комментировать
  • Кеш Yii2 не работает на высоких нагрузках, что делать?

    @yiiworld
    Тоже столкнулся с проблемой параллельных запросов и на формирование данных при пустом кэше.
    Рабочее решение: (только свои константы подставьте)
    static function getData($waiting_deep = 0)
        {
            //достаем $prts из кэша
            if (!(Yii::$app->cache->exists(self::CACHE_KEY__PRTS) AND is_array($prts = Yii::$app->cache->get(self::CACHE_KEY__PRTS)) AND isset($prts['version']) AND isset($prts['data']) AND is_array($prts['data']))) {
                // данных в кэше нет
                // выполняем процедуру подготовки данных с блокировкой для других процессов - чтобы другой процесс не начал делать тоже самое. В кэш поместить флаг блокировки Yii::$app->cache->set(CACHE_KEY__PRTS_FLAG_LOCK), а после подготовки данных и помещения их в кэш снять этот флаг блокировки. Если другой параллельный запрос не находит данных в кэше и при этом выставлен флаг блокировки Yii::$app->cache->exists(CACHE_KEY__PRTS_FLAG_LOCK), то он будет ожидать несколько(столькол сколько задана максимальная глубина ожидания) раз. Ограничиваем число ожиданий и интервал этих ожиданий.
                if (Yii::$app->cache->exists(self::CACHE_KEY__PRTS_FLAG_LOCK) AND Yii::$app->cache->get(self::CACHE_KEY__PRTS_FLAG_LOCK)) {
                    if ($waiting_deep <= self::PRTS_FIND__WAITING_DEEP_MAX) {
                        usleep(self::PRTS_FIND__INTERVAL_WAITING_NEXT_CHECK_MICROSECONDS);
                        $prts = self::findPromoactionsRuleToShow($waiting_deep++);
                    } else {
                        return false;
                    }
                } else {
                    Yii::$app->cache->set(self::CACHE_KEY__PRTS_FLAG_LOCK, true, 10); //сбросить флаг блокировки через 10 секунд в любом случае. Необходимо на случай ошибок при подготовки правил и следовательно невозможности в штатном режиме сбросить флаг блокировки.
                    if (!($prts = self::prepareData())!==false){
    					// кладем данные в кэш
    					Yii::$app->cache->set(self::DATA_PRTS, $prts);
    				}
    				// Сбрасываем флаг блокировки
    					// Yii::$app->cache->set(self::CACHE_KEY__PRTS_FLAG_LOCK, false);
    				Yii::$app->cache->delete(self::CACHE_KEY__PRTS_FLAG_LOCK);
                }
            }
            return true;
        }
    Ответ написан
    Комментировать
  • Как привести Битрикс до нормального состояния?

    azrail_dev
    @azrail_dev
    Когда мне предложили поработать с битриксом, вежливо отказался. Если такой возможности нет, просто пиши код и наслаждайся моментами, когда придется снова работать с yii.
    Ответ написан
    Комментировать