Задать вопрос
  • Какие вопросы задают на собеседовании?

    andrew-r
    @andrew-r
    Фронтенд-разработчик
    Прошлой осенью ходил по собеседованиям на позицию фронтендера в разные компании (Тинькофф, Иннова, Нетология, Рамблер, Яндекс). Описал свой опыт и привёл примеры задач с собеседований — andrew-r.ru/notes/?go=all/searching-for-job-2016
    Ответ написан
    Комментировать
  • Как сделать генерацию id?

    webinar
    @webinar Куратор тега PHP
    Учим yii: https://youtu.be/-WRMlGHLgRg
    но я не шарю в php

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

    Вы пришли на форум тех кто шарит. Тут принято помогать другим людям начать шарить. И очень не любят людей, которые просто хотят что бы за них бесплатно сделали.
    Ответ написан
    Комментировать
  • Как найти и обернуть в тег нужное слово?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Вот, блин, никогда не думал, что все так сложно =)

    <div id="block4ch">
    	Нужно здесь подчеркнуть каждое слово <b>подчеркнуть</b>.
    </div>
    <script>
    	var block= document.getElementById('block4ch');
    	block.innerHTML= block.innerHTML.replace(/(подчеркнуть)/ig, '<u>$1</u>');
    </script>
    Ответ написан
    7 комментариев
  • ReferenceError: $ is not defined ошибка в WordPress?

    EaGames
    @EaGames
    Front-end developer
    заключите ваш код в:
    (function($) {
    //тут ваш код
    })(jQuery);

    и все заработает
    Ответ написан
    1 комментарий
  • Как правильно использовать IN в SQL-запросе?

    0xD34F
    @0xD34F
    CASE WHEN po.region_id IN (1,2,3,4) THEN true ELSE false END
    Ответ написан
    Комментировать
  • Можно ли как то функцию видеть переменную без global и передачи в параметр?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Можно использовать use, если функция анонимная:
    function ($test) use ($user) {
        echo $user;
    };


    Более полный пример:
    $user = (object)['name'=>"Vasya"];
    
    $func = function ($test) use ($user) {
        echo $test;
        echo $user->name;
    };
    
    $func("test");
    Ответ написан
    Комментировать
  • Почему не работает условие?

    qork
    @qork
    { background: #F00B42 }
    if (filter_var($email, FILTER_VALIDATE_EMAIL)){
       //...
    }
    Ответ написан
    Комментировать
  • Как реализовать пополнение баланса личного кабинета пользователем сайта?

    @D3lphi
    Раз сервис
    Два сервис
    Три сервис
    И еще много других платежных агрегаторов. У них всех есть встроенный API, с помощью которого можно "прикрутить" их к (веб) приложению.
    Ответ написан
    Комментировать
  • Возможно ли понижение сайта в выдаче без cms?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Понижение в выдачи из-за отсутствия cms? Серьезно? Плюньте в лицо тому, кто это сказал.
    Ответ написан
  • Как достать следующий элемент массива?

    0xD34F
    @0xD34F Куратор тега JavaScript
    function* cyclicSequence(items) {
      for (var i = 0; ; i = (i + 1) % items.length) {
        yield items[i];
      }
    }
    
    var color = cyclicSequence([ 'green', 'red', 'blue', 'yellow' ]);
    
    $('#typeProject').click(function() {
      $('.typeProject').css('background-color', color.next().value);
    });
    Ответ написан
    3 комментария
  • Как достать следующий элемент массива?

    Bobert88
    @Bobert88
    Vice President of Javascript, very important guy.
    Можно попробовать так: https://codepen.io/glebez/pen/mMPqbW
    Ответ написан
    1 комментарий
  • Скрипты с вау-эффектом?

    PavelMonro
    @PavelMonro
    Есть Animate css куча эффектов, но надо ли оно, вопрос в этом
    https://daneden.github.io/animate.css/
    Ответ написан
    Комментировать
  • Создание вероятности на php. Можете помочь?

    GeneMoss
    @GeneMoss
    void
    /**
     * Случайная выборка с учетом веса каждого элемента.
     * @param array $data Массив, в котором ищется случайный элемент
     * @param string $column Параметр массива, содержащий «вес» вероятности
     * @return int Индекс найденного элемента в массиве $data 
     */
    function getRandomIndex($data, $column = 'ver') {
      $rand = mt_rand(1, array_sum(array_column($data, $column)));
      $cur = $prev = 0;
      for ($i = 0, $count = count($data); $i < $count; ++$i) {
        $prev += $i != 0 ? $data[$i-1][$column] : 0;
        $cur += $data[$i][$column];
        if ($rand > $prev && $rand <= $cur) {
          return $i;
        }
      }
      return -1;
    }
    
    // Использование
    $games = [
    	['name' => 'Игра 1', 'ver' => 2], // вероятность 2/15
    	['name' => 'Игра 2', 'ver' => 0], // вероятность 0/15
    	['name' => 'Игра 3', 'ver' => 1], // вероятность 1/15
    	['name' => 'Игра 4', 'ver' => 4], // вероятность 4/15
    	['name' => 'Игра 5', 'ver' => 8], // вероятность 8/15
    ];
    $i = getRandomIndex($games);
    echo $games[$i]['name'];

    В параметре массива «ver» задается вероятность выпадения данного элемента таким образом, что вероятность выпадения каждого элемента равна ver/sum, где sum — сумма вероятностей в данном массиве (в примере это: 2 + 0 + 1 + 4 + 8 = 15).

    После миллиона испытаний получено следующее количество выпадений:
    • Игра 1 = 13.3958%
    • Игра 2 = 0%
    • Игра 3 = 6.671%
    • Игра 4 = 26.6124%
    • Игра 5 = 53.3208%

    Что до сотой доли процента совпадает с заданной вероятностью в параметре «ver».

    P. S. Суть алгоритма — имитация случайной выборки из массива, который заполнен элементами, которые дублируются с заданной частотой.
    Ответ написан
    Комментировать
  • Каким должен быть правильный контроллер?

    Deroy
    @Deroy
    Senior Developer, Software Architect
    Отвечу с позиции опыта на больших и средних проектах:

    Как говорят другие ответчики - D3lphi и Александр Шаповал , контроллер должен содержать минимум логики, и нет "единого правильного способа" его реализовать.

    Однако, исходя из своей практики, для обеспечения таких качеств проекта как сопровождаемость, тестируемость и изменяемость, я поступаю следующим образом:

    Контроллер, каким бы он не был и как бы не организовывался - содержит только обработку входных данных (валидация и преобразование) и преобразование выходных данных в нужный формат

    Логика и оркестрация которая в 80% случаев и является предметом спора о том как стоить контроллер (речь всех этих вызовах сервисов, управления потоками данных между ними, последовательности действий и пр), находятся в отдельном классе согласно паттерну Unit of Work - что позволяет легко покрыть все что связано с логикой вменяемыми юниттестами без танцев с бубном.

    Т.е. структура в итоге такая:

    {view} <--> {controller} <---> {unit_of_work} -->>> {{{..lots of services...}}}

    по сути класс семейства UnitOfWork - это полный сценарий обработки входных и выходных данных , с оркестрацией потоков данных и порядком действий, возможно какой то мелкой вспомогательной логикой, эдакий фронтенд над сервисами, заточенный под каждое конкретное действие извне (сам паттерн предполагает что класс создается на каждый отдельных случай и почти один в один описывает UseCase логику как она пришла от бизнеса (заказчика/аналитиков/моей головы/etc).

    Сами классы семейства UnitOfWork (имеется ввиду в одном приложении) могут иметь собственные иерархии наследования и композии - в угоду бизнес логики и дабы не дублировать код - главный критерий - это полная независимость бизнес и сервис слоев от контроллера. - что и является на мой взгляд "каноничным" вариантом реализации композии M и C в MVC.

    У меня, как у человека который не пишет фронты в принципе (имею ввиду сам UX/UI), но постоянно занимается сервисами, рестом, библиотеками - этот подход выработался по одной просто причине:
    взаимодействие с командой, я предоставляю "библиотеку"(не в классическом понятии этого слова) полностью абстрагированную от любых фронтов, оттестированную, полностью функциональную - а люди пишут к ней шаблонные обвязки где только валидация данных и рендер нужного формата под HTTP/Sockets/AMQP/etc типа всяких там CRUD/REST или RPC
    Ответ написан
    Комментировать
  • Как стереть строку до какого-то символа?

    REZ1DENT3
    @REZ1DENT3
    web-developer
    echo dirname('main/users/admin'); // main/users
    echo dirname('main/users/admin/'); // main/users
    
    // php 5+
    echo dirname(dirname('main/users/admin')); // main
    echo dirname(dirname('main/users/admin/')); // main
    
    // php 7+
    echo dirname('main/users/admin', 2); // main
    echo dirname('main/users/admin/', 2); // main
    Ответ написан
    Комментировать
  • Как ускорить работу Apache: отдачу статических файлов и выполнение PHP?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Изучил весь httpd.conf, перекопал кучу гайдов по highload (они старые и с сомнительными советами типа "отключить лишние модули"
    Один из первых модулей, который стоит отключить у Apache'а, для скорости - это поддержку файлов .htaccess, сама эта поддержка производительности не добавляет, а наличие этих файлов - уж и подавно.

    1) Это у всех VPS так называемый "мощный" процессор медленнее, чем на каком-то жалком хостинге, пусть и с VIP-тарифом?
    Нет, возможно это у Вас, персонально, какой-то дрянной VPS-хостер, или того хуже, тариф аки "OpenVZ, мы не перепродаём проданные ресурсы... ну разве что раз 10, но больше не перепродаём"

    2) Поможет ли в такой ситуации FastCGI?
    FastCGI - это режим работы PHP, напрямую, на производительность в значительной степени он не влияет, более того, сама логика работы FCGI (если сравнивать Apache-FCGI и Apache-mod_php) будет медленнее, по тому как для взаимодействия FastCGI будет использоваться сокет ("обычный" или unix-сокет), что подразумевает сетевое взаимодействие, вместо непосредственной работы интерпретатора PHP "внутри" сервера. Думаю, Вам поможет несколько другое (постараюсь описать ниже).

    3) Почему не популярны фишки типа eAccelerator (кеширование AST и т.п.)?
    Понятия не имею, почему они не популярны и откуда у Вас такая статистика... Но, возможно, дело в том, что eAccelerator морально и физически устарел, и если верить например, вот такой банальной статье (нет, я не работаю с такой "шедевральной" CMS как "Битрикс", просто это первое упоминание про eAccelerator, которое пришло мне в голову) - с версиями PHP выше 5.3 не работает.

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

    4) Что еще может помочь?
    Ну так, сходу, по памяти (варианты могут быть не связаны между собой):
    1. Отказ от поддержки .htaccess в Apache или хотя бы сокращение их количества
    2. Установка Nginx в качестве фронтального сервера, для отдачи статики
    3. Полный отказ от Apache вообще и переход на Nginx+FCGI (только не подумайте, я очень люблю Apache за его гибкость в настройке и широкие возможности, другой вопрос, что мало кому эта гибкость фактически нужна и мало кто способен его грамотно, качественно и полноценно настроить... Nginx в этом плане будет куда попроще). Почему FCGI? По тому, что другой приемлемый способ взаимодействия Nginx'а с PHP мне не известен. Настройка FCGI-пула - обязательна.
    4. OpCache - с версии 5.5 встроено "искаропки", к включению и настройке - настоятельно рекомендуется. Я не знаю, как обстоят дела с CMS и используете ли Вы CMS на сайте, но из моей практики, скорость работы PHP-фреймворков возрастает в среднем 8-20 раз.
    5. HHVM, как альтернатива
    6. Проверка:
    а) Того, что дело действительно в PHP. В частности, стоит собрать все логи сервера, например, сколько длились запросы, в БД, их количество и так далее.
    б) Проверка скорости работы дисковой подсистемы... Не буду "тыкать пальцем", но одно время я арендовал довольно большое кол-во VPS'ок у одного популярного хостера, и в какой-то момент, я заметил, что средняя скорость работы дисковой подсистемы - 1.4Кбайт/сек., при этом "отказы" (аки "невозможно записать блок") были примерно в 50% случаев... это продлилось не очень долго, но и через несколько месяцев, у этого же хостера, тарифы с "обычным HDD", почему-то обладали более быстрой дисковой подсистемой, нежели тарифы с "быстрыми SSD"... можно сделать выводы...
    в) Проверить реальную скорость работы процессора, не редко она отличается от завяленной достаточно сильно.

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

    P.P.S. Есть вариант решения проблемы вообще "в лоб", самый наверное сложный и пожалуй самый производительный в ряде случаев. Это Varnish + тонкая настройка оного, позволяет выдавать большую часть страниц из кэша (оперативной памяти) за наносекунды, иногда позволяет обслуживать очень много тысяч запросов в минуту, при этом, это не просто кэширование кода или что-то подобное... это кэширование целиком страниц и/или ответов сервера. Среди прочего - позволяет "не трогать бэкенд вообще", т.е. при запросе страницы, может не быть ни обращений к БД, ни выполнения того же PHP (или любого другого) кода, на стороне сервера. Требует довольно тонкой настройки, не очень подходит для сайтов "на CMS", для сайтов на фреймворках - требует изначально корректного подхода к разработке и продумывания того, что и как будет/должно кэшироваться. При некорректном подходе - наиболее вероятный результат - работать будет, но не так быстро как хотелось бы, а часть сайта вообще может перестать нормально функционировать. Есть так же другие решения, но с учётом довольно общих формулировок вопроса - говорить о них довольно сложно.

    Ах, да, забыл важную деталь... Почему "хостинги" используют Apache и не откажутся от него (совсем)? В большей степени по тому, что Apache позволяет делегировать часть настроек пользователю через .htaccess. При этом, для статики не редко стоит всё тот же Nginx, который, как Вы понимаете, подобным образом делегировать часть настроек пользователю не позволяет, в виду чего для этих задач не подходит и не "буксует" на этом (в отличии от Apache'а). В т.ч. и по этому, мы на 99% отказались от "хостингов" (по причине наличие Apache'а, и невозможности от него избавиться или самостоятельно настроить, и как следствие "тормозов" которые приходят вместе с подобным подходом).
    Ответ написан
    5 комментариев