Задать вопрос
  • Какой таймтрекер юзать для trello?

    MegaMufa
    @MegaMufa
    https://toggl.com/
    И расширение в браузере ставишь для него Toggl Button: Productivity & Time Tracker (в настройках надо будет дать доступ к сайту сайту трелло).

    Теперь в карточке появится кнопка для начала отсчета времени.

    Мне бесплатного тарифа хватате. Трекалка, отчеты. Я в конце месяца делаю отчет, экспортирую в пдф и начальнику отправляю. Удобно.

    Пользуюь уже больше 5 лет, всем доволен.
    Ответ написан
    Комментировать
  • Ссылки в PHP (&$var1), переменные переменых ($$var2) и их практическое применение?

    MegaMufa
    @MegaMufa
    По ссылке передаются в метод данные, которые должны быть изменены внутри метода. Иногда это избавляет от лишнего кода. Плюс расход памяти в некоторых случаях ниже.

    По поводу переменных переменных. Используются при написании обобщенного кода. Вот пример. Это поведение Yii2 для хранения деревьев в БД. Поведение - это фича фреймворка - что-то вроде трейта или миксина.

    В общем его можно подсключить к модели и она сама будет заполнять служебные поля при перемещении узлов. Для гибкости, при подключении можно указать поле таблицы, по которому надо сортировать данные. MaterializedPathBehavior::$positionAttribute. Это поле используется в коде для построения запросов:
    $position = $this->node->{$this->positionAttribute}


    Таким образом достигается гибкость. Тому, кто будет использовать это поведение не придется подгонять схему своей БД под него. Он сможет указать поля, с которыми надо работать.

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

    UPD.

    Еще немного о переменных переменных. Вообще вместо них можно добавить абстрактных методов вроде getPositionAttribute() и заставить пользователя переопределить их. Это будет более правильно идеалогически. Но, используя переменные, появляется возможность настройки без написания лишних классов.
    Ответ написан
    Комментировать
  • Где взять много данных для обработки?

    MegaMufa
    @MegaMufa
    https://www.brentozar.com/archive/2015/10/how-to-d...
    Торрент файл с дампом базы данных stackoverfow - 70Gb, думаю будет достаточно.
    Ответ написан
    Комментировать
  • Как вызвать контроллер в контроллере Yii2&?

    MegaMufa
    @MegaMufa
    Вам нужен метод runAction()

    Пишите: \Yii::$app->runAction("controllerId/actionId") Или людой нужный вам route используете.
    Ответ написан
    Комментировать
  • Есть ли смысл в нативных связях в БД, если relation в active record их дублируют?

    MegaMufa
    @MegaMufa
    Если вы не проставите внешние ключи, то данные можно будет менять только через ваше приложение. Если вдруг вам понадобится что-то поменять в обход описанных алгоритмов, то вы рискуете потерять целостность данных. А такие ситуации бывают довольно часто.

    Если же вы выставите ключи, то бд сама будет следить за целостностью. Она не даст вам записать неконсистентные данные и при удалении каскадно удалит все "осиротевшие" записи (если ключ этого требует).

    Плюс каскадное удаление бд сделает быстрее, чем ваш код. Вы например удаляете пользователя и надо удалить все его записи. Вам для этого сначала придется выбрать все его записи. Удалить их. А уже потом удалить пользщователя. А в внешними ключами вы просто удаляете пользователя, а бд сама подчистит все зависимые записи.
    Ответ написан
    5 комментариев
  • Почему не доступно поле из модели?

    MegaMufa
    @MegaMufa
    load() работает только с теми полями, которые вы указали для текущего сценария. Если вы не указали сценарий явно, то используются только те поля, для которых указаны правила валидации. Вот почитать про сценарии: www.yiiframework.com/doc-2.0/guide-structure-model...
    Ответ написан
  • Какое название папки выбрать для стилей/скриптов?

    MegaMufa
    @MegaMufa
    Стайлгайды в подавляющем большинстве случаев определяются не языком, а фреймворком/библиотекой на которых вы пишите. Есть, конечно, самые распространенные соглашения об именовании в язке, но обычно соглашения, принятые в экосистеме вашей основы, либо совпадают либо имеют приоритет.

    Вы бы хоть указали, о каком языке/фреймворке идет речь. Если говорить о компилируемых эссет файлах, то директория должна (но не обязана) называться соответсвенно assets, а внутри биться по версиям (хешам). Но если говорить об обычных публичных файлах, то, как я уже сказал, смотрите в своем ферймворке. Чаще всего это public. А там, как вам захочется. Главное: чтобы понятно было.
    Ответ написан
    5 комментариев
  • Yii2, activerecord минусы asArray()?

    MegaMufa
    @MegaMufa
    Использовать asArray() означает похерить псе плюшки ООП. Не забывайте, что кроме полей в моднлях еще и логика. У вас даже автокомплит не будер таботать.
    Ответ написан
    4 комментария
  • Как обратиться к функции класса, если есть только его key?

    MegaMufa
    @MegaMufa
    Вы все правильно думаете. Только надо использовать не квадратные, а фигурные скобки.
    $a->{$func}();
    Вообще, можно и без скобочек, но с ними наглядней получается.
    $a->$func();
    И еще, у вас перед a пропущен знак $
    Ответ написан
    1 комментарий
  • Что такое абстракция для http, Request и Response в mvc framework?

    MegaMufa
    @MegaMufa
    Честно говоря первый раз слышу про этот фреймворк. Да и фреймворком это назвать сложно. Посмотрел немного исходники (это они?). Сделано, мягко говоря, через одно место. Да и ничего там практически нет. Если хотите разобраться с MVC, посковыряйте тот же Yii например.

    Касательно конкретно вашего вопроса. Response и Request используют для того, чтобы абстрагироваться от работы с потоком ввода-вывода. Response например за вас выставит необходимые заголовки. Request даст удобную обертку для доступа к $_POST и $_GET запросам. Это естестенно не все.

    Суть в том, чтобы вам не пришлось работать с низкоуровневыми штуками напрямую. Вы получаете к ним доступ через абстракцию, которая так же предоставляет кучу разных удобных плюшек. Плюс вы работаете не с глобальными данными, а с конкретным объектом, который получили в метод.

    Почему рендерит через echo - хз. В yii это например так происходит:
    public function renderPhpFile($_file_, $_params_ = [])
    {
        ob_start();
        ob_implicit_flush(false);
        extract($_params_, EXTR_OVERWRITE);
        require($_file_);
        return ob_get_clean();
    }
    Ответ написан
    4 комментария
  • ООП PHP не работает класс?

    MegaMufa
    @MegaMufa
    1. Включите вывод всех ошибок и тогда интерпретатор сам вам будет говорить, почему не работает.

    2. Вы объявляете свойства устаревшим способом. Очень-очень устаревшем (еще в 4 версии атк делали). Надо так:
    public $firstname;
    public $lastname;


    3. В конструкторе у вас неправильно обращение к переменным. Уберите второй знак доллара:
    public function __construct($firstname, $lastname) {
        $this->firstname = $firstname;
        $this->lastname = $lastname;
      }


    Должно получиться вот так:
    <?php
    class Info {
        public $firstname;
        public $lastname;
    
        public function __construct($firstname, $lastname) {
            $this->firstname = $firstname;
            $this->lastname = $lastname;
        }
    
        public function GetInfo() {
            $n = $this->firstname.' '.$this->lastname;
            return $n;
        }
    }
    
    $a = new Info('Ivan', 'Pupkin');
    echo $a->GetInfo();


    И вам надо сменить учебник, по которому вы это делаете. Он очень устарел и больше вреден, чем полезен.
    Ответ написан
    Комментировать
  • Давать или не давать доступ клиенту в git?

    MegaMufa
    @MegaMufa
    Даю readonly доступ к репе только в том случает, если клиент проверенный или в случае полной предоплаты. В других случаях не даю в виду описаных вами причин.

    Если вы работаете поэтапно с отдельной оплатой каждого этапа, то можно сделать так: завести отдельную ветку и дать доступ к ней. И сливать в нее новый код, после оплаты. Получается, клиент отлатил, скажем, личный кабинет - слили его в эту ветку. И так для каждой итерации.

    Полный доступ, я бы поостерегся давать.
    Ответ написан
    Комментировать
  • Зачем нужны события в yii2?

    MegaMufa
    @MegaMufa
    Событийная модель помогает строить слабосвязанную систему. Пример из жизни. Я сейчас работаю над SAAS платформой. Компания покупает учетку и выбирает за какие модули платить. Есть модули учета, проверок, для кадровиков и т.д. Модули должны взаимодействовать между собой, но любого модуля может не быть.

    Например при создании сотрудника в модуле "кадррезерв", его автоматически надо добавить в модуль "учета". Я не могу напрямую дергать метод из другого модуля т.к. заранее не известно, будет он куплен или нет.

    Вместо этого я бросаю событие типа user.created, а в модуле учета в обработчике этого события заношу пользователя в нужные списки. Получается, если модуля нет, то событие просто выброситься в холостую, а если есть, то запустится обработчик.

    Это на самом деле очень удобно. Но есть и негативная сторона: из-за слабой связаности усложняется навигация по коду. Что бы узнать, где есть обработчики приходится пользоваться поиском по имени события. Но это малая цена за гибкость, которую дают события.
    Ответ написан
    9 комментариев
  • Где остальные relation в yii2?

    MegaMufa
    @MegaMufa
    В Yii2 их нет. Вмето belongsTo() используется hasOne(), а вместо manyToMany() - hasMany() вместе с viaTable()
    www.yiiframework.com/doc-2.0/guide-db-active-recor...
    Ответ написан
    3 комментария
  • Как оптимизировать сервер под 1000 запросов каждую минуту?

    MegaMufa
    @MegaMufa
    Запуск скрипта относительно трудоемкая штука. Попробуйте передавать в скрипты id-шники не по одному, а пачками, а в скрипте обрабатывать их в цикле.

    Но тут надо смотреть по логике, что именно делает скрипт и как можно оптимизировать его логику работы. Например кешировать рещультаты выборки из бд. Записывать результаты один раз в конце запроса, а не по одному (если это возможно). Какая версия PHP стоит, включен ли кеш байт кода?
    Ответ написан
    5 комментариев
  • Как оптимизировать работу сайта на yii?

    MegaMufa
    @MegaMufa
    На оф сайте статья есть, гуглить элементарно:
    www.yiiframework.com/doc/guide/1.1/ru/topics.perfo...
    Ответ написан
    Комментировать
  • Yii2 как сделать связь один к одному?

    MegaMufa
    @MegaMufa
    В таблице пользователя прописываете связь:
    public function getProfile() {
      return $this->hasOne(Profile::class,['id'=>'id']);
    }


    И профиль становится доступным через свойство.
    $user = User::find()->andWhere(['username'=>$login])->one();
    $user->name; // своятво пользователя
    $user->profile->id // свойство профиля


    Если хотите одним запросом, то при выборке укажите модель, которую тянуть
    $user = User::find()->with('profile')->andWhere(['username'=>$login])->one();
    Ответ написан
    Комментировать
  • Покритикуйте верстку, какие в ней есть ошибки?

    MegaMufa
    @MegaMufa
    Здорово у вас получилось.
    Вот тут заметил, что текст наезжает на стрелочки: take.ms/W0T40
    Ответ написан
    1 комментарий
  • Скорость получения данных через ORM, как быстрее?

    MegaMufa
    @MegaMufa
    Вообще надо использовать все варианты.
    Те запросы, чьи результаты не требуют реалтайм проверки можно кешировать. Для сложных ситуаций можно и руками написать. Еще рекомендую поискать, как в вашей ORM делается жадная выборка. Такая фича позволяет большинство (не все, но очень многие) запросов не дергать по одному, а объединить в один большой.

    Тут нет серебряной пули. Берете профилировщик, находите самые медленные места и думаете, какой из этих подходов подходит тут чуше всего. Реализуете его. И так дальше по списку.
    Ответ написан
    Комментировать
  • Postgresql: один уникальный индекс для нескольких таблиц?

    MegaMufa
    @MegaMufa Автор вопроса
    Если у кому-то интересно решил это так: создал sequence "hash_seq" и для этих полей прописал дефолтное значение nextval('hash_seq'). Уникальность гарантирована, если нигде не вписывать это значение вручную.

    Но такой способ действует только в том случае, если нужна уникальность значений, но не обязательно самому указывать значения.
    Ответ написан