Задать вопрос
  • Как сделать такое приложение?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    А в чем проблема? Как Вы пытались решить эту проблему(написать в интернете "Решите мне задача" не считается)?

    Разделите конечную цель на маленькие:
    1. Создаете/рисуете точки
    2. Добавляете обработчик движения мыши
    3. Определяете дистанцию от мышки до точки ( теорема Пифагора )
    4. Увеличиваете/уменьшаете значение радиуса точки в зависимости от положения мыши

    Все! Самое сложное это теорема Пифагора(5-6 класс).
    Остается все разбросать по методам....

    Вот "наговнокодил" пример на коленках(использовал class поэтому поддержку браузера смотрите сами): https://codepen.io/janeRivas/full/NMGBvG/ (если лагает у Вас, то удалите функцию на строке 116 и 120 или поменяйте кол. точек на строке 18 )

    Если нужно уместить все точки в какой-то фигуре(букве), то поменяйте функцию Rand, добавив в нее новые условия.

    ps если как-то по-другому надо соединить линии между собой, то у нас на каждом кадре есть координаты точек this.pos.x и this.pos.y. Ну и меняй метод lineTo как тебе надо...

    psps наверно начинать надо с простого, но если делать нормально, то я бы делал на three.js или pixi.js. Логика точно такая же, только перфоманс будет в разы лучше + сможем избежать кучу проблем с картинками и тп...
    Ответ написан
    1 комментарий
  • Как получить доступ к данным из соседнего окна браузера?

    @BorisKorobkov
    Web developer
    Нестандартная задача.
    Нужно получить доступ к данным соседнего окна в браузере, в котором открыт сторонний сайт. Сайт этот против, чтобы его показывали по фреймах и запрещает доступ через JavaScript, выдает такие ошибки...
    Брать его через Curl тоже не получается, так как там капча.
    Самое обидное, что я его открываю и вижу на экране своего компа. Мне просто нужно как-то программно прочитать его контент.
    Должно же быть какое-то решение, в т.ч самое кривое.


    Нестандартная задача.
    Нужно получить доступ к банковскому хранилищу, которое находится в соседнем здании. Банк этот против, чтобы его взламывали, и запрещает несанкционированный доступ, включается сигнализация.
    Брать его через подкоп тоже не получается, так как там армированная бетонная плита.
    Самое обидное, что я его открываю свое окно и вижу на улице вход в банк. Мне просто нужно как-то попасть в сейф.
    Должно же быть какое-то решение, в т.ч самое кривое.
    Ответ написан
    Комментировать
  • Посадка верстки на WP?

    За оснуву темы использую underscores.me

    ACF не использую, т.к. предпочитаю чтобы конфигурация настроек для шаблонов, и общих настроек сайта производилась в файлах.
    Для этого использую carbonfields.net, он бесплатный, но в нем есть все что нужно, смотрите документацию и раздел на wp-kama(он по старой версии, но часть еще актуальна).
    Он не такой популярный, но со своей задачей справляется отлично.
    Возможно в нем есть свои минусы, но для небольших сайтов отлично подходит.

    Как второй вариант можно использовать Meta Box, но за некоторые фишки в нем прийдется заплатить.
    Например общая страница настроек сайта создается с помощью платного расширения плагина
    Ответ написан
    9 комментариев
  • Какой php фреймворк можно понять / разобрать полностью?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Прямо для вас, не пропустите...!

    PRS-7 фреймворк
    В серии видео полностью разбирается создание фреймворка,
    такого «универсала» по современым стандартам, последняя серия будет изо дня в день, все с тестами и плавно из одного решения в другое, смотреть на скорости 1.25


    Кишки фрейма:
    1. HTTP Response/Request PSR-7 (и компоненты для работы с ним)
    2. Построение контроллеров и роутинга (с переходом на Aura Router)
    3. Middlewear и Pipeline (а-ля Laravel, Slim, Symfony)
    4. DI контейнер (все фреймворки)
    5. Шаблонизаторы (+ пример на Twig из Symfony)
    6. ORM не точно
    Ответ написан
    8 комментариев
  • Как сверстать 12 блоков во всю высоту экрана мобильного устройства?

    А что если 100% вместо 100vh попробовать задать для body?
    Либо есть еще 1 вариант, пробовать добавлять заранее к высоте, высоту сайдбара:
    height: calc(100vh + 60px); 60px - /*примерная высота панели навигации, точно посмотрите сами*/
    Ответ написан
    1 комментарий
  • Как заменить switch case паттерном стратегия?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Switch
    public enum DamageType { Melee, Range, Magic }
    public class Monster
    {
        public double Health { get; private set; }
        public double MeleeDamage { get; private set; }
        public double RangeDamage { get; private set; }
        public double MagicDamage { get; private set; }
        public DamageType FavoriteDamageType { get; private set; }
    
        public Monster(double health, double meleeDamage, double rangeDamage, double magicDamage, DamageType favoriteDamageType)
        {
            Health = health;
            MeleeDamage = meleeDamage;
            RangeDamage = rangeDamage;
            MagicDamage = magicDamage;
            FavoriteDamageType = favoriteDamageType;
        }
    
        public void AttackTo(Monster monster, DamageType damageType)
        {
            switch (damageType) // используется switch
            {
                case MonsterType.Melee: monster.Health -= MeleeDamage; break;
                case MonsterType.Range: monster.Health -= RangeDamage; break;
                case MonsterType.Magic: monster.Health -= MagicDamage; break;
            }
        }
    
        public void AttackTo(Monster monster)
        {
            AttackTo(monster, FavoriteDamageType);
        }
    }


    То же самое, но со стратегией
    public class Monster
    {
        public double Health { get; set; }
        public double MeleeDamage { get; private set; }
        public double RangeDamage { get; private set; }
        public double MagicDamage { get; private set; }
        public IDamageStrategy FavoriteDamageStrategy { get; private set; }
    
        public Monster(double health, double meleeDamage, double rangeDamage, double magicDamage, IDamageStrategy favoriteDamageStrategy)
        {
            Health = health;
            MeleeDamage = meleeDamage;
            RangeDamage = rangeDamage;
            MagicDamage = magicDamage;
            FavoriteDamageStrategy = favoriteDamageStrategy;
        }
    
        public void AttackTo(Monster monster, IDamageStrategy damageStrategy)
        {
            damageStrategy.Attack(this, monster); // не используется switch
        }
    
        public void AttackTo(Monster monster)
        {
            AttackTo(monster, FavoriteDamageStrategy);
        }
    }
    
    
    public interface IDamageStrategy
    {
        void Attack(Monster attacker, Monster defender);
    }
    public class MeleeDamageStrategy : IDamageStrategy 
    {
        public void Attack(Monster attacker, Monster defender)
        {
            defender.Health -= attacker.MeleeDamage;
        }
    }
    public class RangeDamageStrategy : IDamageStrategy 
    {
        public void Attack(Monster attacker, Monster defender)
        {
            defender.Health -= attacker.RangeDamage;
        }
    }
    public class MagicDamageStrategy : IDamageStrategy 
    {
        public void Attack(Monster attacker, Monster defender)
        {
            defender.Health -= attacker.MagicDamage;
        }
    }

    Отличие класса Monster только в коде первого метода AttackTo. Ну и свойства FavoriteDamageType или FavoriteDamageStrategy.

    Стратегия может быть полезна, если код атаки, в зависимости от типа, сильно отличается, используя внешние данные (не из класса монстра), например, день или ночь, ясно/дождь и пр. Использование стратегии переносит часть кода из класса монстра (и так сложного класса) в несколько простых классов.
    Ответ написан
    1 комментарий
  • C каких PHP фреймворков лучше начинать изучение?

    Laravel
    Ответ написан
    Комментировать
  • Как въехать в программирование (ООП, паттерны)?

    GTRxShock
    @GTRxShock
    SA
    если программируете на php 2-3 года, то пора бы перед сном почитать РНР: объекты, шаблоны и методики программирования (Зандстра) желательно в бумажном варианте.

    + Паттерны проектирования (Фримен) для общего/наглядного понимания паттернов
    + www.phptherightway.com основные тезисы
    + Рефакторинг: улучшение проекта существующего кода (Фаулер) & https://refactoring.guru/ru на будущее, к чему стремиться :)
    Ответ написан
    4 комментария
  • Насколько у меня правильный код ООП php?

    @D3lphi
    Здесь плохо всё, к сожалению.

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

    Класс SearchOrder у вас не только выполняет запросы, но еще и работает с данными, хранит состояние этих самых данных, фильтрует данные (strip_tags()). Непорядок. Это все нужно разделять. У вас вообще получаются какие-то богообъекты, которые умеют во все.

    Вы каждый раз повторяете строки с подготовкой запроса, биндингом параметров, отправкой запроса и тд. Не думали, что неплохо бы было написать какую-нибудь обертку и выполнять запросы как-нибудь так:
    $result = $wrapper->select("SELECT * FROM `tablename` WHERE `id` = :id", ['id' => 5]);

    ?

    Вы вызываете connect() в методах. То есть, каждый вызов этого метода будет приводить к установке нового соединения с базой данных, даже если оно уже было установлено. Соединение с базой данных это достаточно дорогостоящая операция.

    Зачем вы используете свойства, если можно обойтись обычными локальными переменными:
    $this->orderID = (int) strip_tags($orderID);
    $this->column = (string) strip_tags($column);
    $this->value = (string) strip_tags($value);

    ?

    Почему вы стриппите тэги у идентификатора? вы настолько не уверены в том, что влетает в функцию:
    strip_tags($orderID);
    ?

    Если вы не используете php 7 и, как следствие, скалярный тайпхинтинг, то должны делать проверки на тип входящего аргумента. Если что-то не так с типом, бросаем исключение (А не приводим его к нужному)! Например:
    if (!is_string($arg)) {
        throw new InvalidArgumentTypeException('string', $arg);
    }

    Это в идеале. Вы не обязаны это делать, конечно же. Но вот такие проверки делают приложение безопаснее. Хотя, опять же, повторюсь, в 2017 нужно начинать новые проекты на php 7.1+.

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

    Кроме всего прочего, почитайте про стандарты оформления кода. Вы им не следуете.

    Вам пока рано писать такие велосипеды. Судя по всему, у вас нет опыта вообще. Посмотрите готовые решения: фреймворки, ORM, изучите их, хотя бы поверхностно разберитесь, как оно работает и уже потом пробуйте что-то сделать, исходя из полученных знаний.

    Желаю успехов!
    Ответ написан
    1 комментарий
  • Для чего создали jQuery?

    @archelon
    1. для удобства
    2. для кроссбраузерности
    Ответ написан
    Комментировать
  • Что необходимо чтобы развернуть своей почты?

    Для начала 3 полезных сайта: 24whois.ru для проверки записей, если не хочется возиться с nslookup, mxtoolbox.com для проверки настроек smtp сервера и pdd.yandex.ru бесплатный DNS сервер.
    Предположим, у Вас есть белый IP 50.100.150.200, по которому доступен будущий почтовый сервер и домен homepage.ru.

    1. Создайте A запись для данного IP адреса. Например, это может быть так:
    Хост: mail.homepage.ru
    Тип: A
    Значение: 50.100.150.200

    2. Создайте для @ MX запись с меньшим приоритетом, чем уже существующие (например, для серверов с приоритетом 10 и 20 основным будет 10) и впишите в неё созданный поддомен:
    Хост: @
    Тип: MX
    Значение: mail.homepage.ru
    Приоритет: 5

    На этом этапе уже можно принимать и отправлять почту, но доверия к Вашему почтовому серверу не будет - ищите все тестовые письма среди спама.

    3. Обратитесь к хостеру, у которого стоит сервер или провайдеру, если сервер дома, чтобы он сделал следующую PTR запись (IP должен быть "перевёрнут"):
    200.150.100.50.in-addr.arpa IN PTR mail.homepage.ru

    4. Настройте SPF на DNS сервере. Например, если у Вас 1 IP - можно указать только его, а почту с остальных объявить недоверенной (~all) или вообще советовать сразу отклонять её (-all).
    Хост: @
    Тип: TXT
    Значение: v=spf1 ip4:50.100.150.200 ~all

    Вот как это выглядит у яндекса: 24whois.ru/?data=_spf.yandex.ru&t=nslookup&dns_type=txt и с раскрытыми IP адресами: 24whois.ru/?data=_spf-ipv4.yandex.ru&t=nslookup&dn...

    5. При помощи mxtoolbox или другого сайта проверьте свой IP на нахождение в чёрных списках и подайте заявки на исключения из них. Вы 99,9% будете хотя бы в одном списке, как минимум надо проверить spamhaus - им многие пользуются.

    6. Желательно на сервере настроить правильный ответ HELO/EHLO: mail.homepage.ru
    Ответ написан
    3 комментария
  • Как учить assembler под linux?

    x67
    @x67
    А с каких пор ассемблер стал зависеть от ОС?
    Выберите для себя удобную IDE на удобной системе. Вот есть кроссплатформенная IDE, к примеру, не понравится - сами найдите с помощью запроса в гугле "asm IDE linux" и учите. Собственно как язык, ассемблер изучать незачем, он прост как три копейки, а вот физическое понимание, как оно там работает нужно. И на восприятие этого понимания IDE никак не повлияет. Я в свое время изучал ассемблер для древних микроконтроллеров фуджитсу, родная IDE там почти ничем не отличалась от блокнота с нескучным отладчиком.

    Другой вопрос в том, зачем вам ассемблер? Для прикладных задач навряд ли он вам пригодится. Как хобби - не самый рациональный выбор, так как есть множество более интересных вариантов. Как что-то крутое, стоящее у основ мироздания, чтобы гордиться собою - опять мимо, ассемблер, он конечно стоит где-то у основ, но в современном мире без понимания сферы его прикладного использования он вреден - мозг грузите, тепло вырабатываете, а пользы от этого никакой, соответственно в его "крутости" 0 (ноль) крутости. Лучше тогда С/C++ изучить. Хотя бы сможете написать что угодно для чего угодно, если вдруг захочется.
    Ответ написан
    2 комментария
  • Как сформировать 1 запрос UPDATE с тысячей значений?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Как сформировать 1 запрос UPDATE с тысячей значений?


    Вот так, и так до 1000 (или сколько Вам будет нужно):
    UPDATE table1
    	SET val = CASE
    		WHEN id = 1 THEN 10
    		WHEN id = 2 THEN 20
    		WHEN id = 3 THEN 30
    	END
      -- тут ещё можно дописать условие, типа WHERE id IN (1,2,3)


    По одному запросу посылать не вариант.
    По моему, Вы пытаетесь вывернуть бедного дельфина наизнанку через за... Можно посылать много запросов за 1 раз, разделяя их ";" (точкой с запятой). Более того, их так же можно обернуть в транзакцию (как много запросов по одному, так и много запросов через ";").

    P.S. Пример таблицы над которой проводились эксперименты: 078858d3885a4c2399df731018ed03e3.png (на всякий случай)
    Ответ написан
    Комментировать
  • Как сделать одностраничную навигацию в laravel?

    @IceJOKER
    Web/Android developer
    Какая разница laravel это или любой другой фреймворк?
    Это обычная постраничная навигация, при нажатии на "Загрузить еще", вы просто отправляете запрос на получение следующей страницы и полученные элементы добавляете к текущей куче.
    Ответ написан
    Комментировать
  • Как реализовать "теги" в laravel?

    @alvery
    Backend Developer
    Ответ на ваш вопрос находится в базовом курсе laracasts fundamentals. Все коротко и по делу:
    Many to Many Relations (With Tags)
    Ответ написан
    Комментировать
  • WordPress или MODx Revolution для корпоративного сайта?

    Realetive
    @Realetive
    MODX Ambassador России, самозванный БЭМ-евангелист
    Лучше та, которую знаешь. Вашу задачу можно одинаково решить на любой CMS (или вообще без оной, на статическом генераторе), вопрос лишь в освоении новых навыков.
    Ответ написан
    1 комментарий
  • Как избежать пожара и проблем при работе электрооборудования в домашних условиях без надзора?

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

    Вообще исправное железо - компьютеры, мониторы практически не загораются.
    Максимум сгорает силовая часть с небольшим выделением дыма.

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

    Практический совет - вынесите файлопомойку в кладовку в железный шкаф.
    А на рабочем компьютере настройте автоматический сон.

    В итоге постоянно под нагрузкой будет только сервер в шкафу, а рабочий компьютер будете с него будить по мере необходимости.
    Ответ написан
    2 комментария
  • Возможно ли в Laravel 5.4 с получить (вывести) название по ID из другого столбца?

    riot26
    @riot26
    <:З )~~
    В модельке App\User:
    public function country()
    {
        return $this->belongsTo('App\Country', 'country_id');
    }

    Должна быть моделька App\Country и потом:
    echo $user->country()->name;
    За ответ не ручаюсь, пока нет возможности проверить.
    Ответ написан
    1 комментарий
  • Как развить навык проектирования приложения или как стать Senior?

    devspec
    @devspec
    Помогло? Отметь решением
    Вам помогут только время и большое количество реализованных проектов. Всё приходит с опытом.
    Я, например, каждые полгода делаю ревью собственного кода за предыдущие полгода и ужасаюсь - как я мог так писать? А ведь полгода назад я мнил себя профессионалом... и так каждые полгода ))
    Ответ написан
    2 комментария