Задать вопрос
  • Как прервать if() в ф-ции?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Есть два пути:
    1. Улучшить проверку: сейчас у вас переменная $result не определена в случае первой ошибки, что приравнивается к false. Можно проверять так: if (isset($result) && !$result)
    2. Использовать return, это стандартный способ прерывания работы функции.

    Вообще, функция не должна ничего выводить, она должна только возвращать результат.
    Вот так:
    function checkLogin($str) {
        if (!$str) {
            throw new InvalidLoginException('Вы не ввели имя пользователя');
        }
    
        $pattern='/^[-_.a-z\d]{4,16}$/i';
        $result=preg_match($pattern,$str);
    
        if (!$result) {
            throw new InvalidLoginException('Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)');
        }
    }
    
    try {
        checkLogin("");
    } catch (InvalidLoginException $e) {
        echo $e->getMessage();
    }


    Или, на худой конец, так:
    function checkLogin($str) {
        if (!$str) {
            return 'Вы не ввели имя пользователя';
        }
    
        if (!preg_match('/^[-_.a-z\d]{4,16}$/i',$str)) {
            return 'Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)';
        }
    
        return true;
    }
    
    $status = checkLogin("");
    
    if ($status !== true) {
        echo $status;
    }
    Ответ написан
    1 комментарий
  • Как правильно организовать продажу знаний?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Пфф, легко!

    Делаете канал на ютубе, записываете там базовый материал, распространяете бесплатно. Если человекам понравится - не вопрос, вот доступ на платный контент + консультации по скайпу + вэбинары. Пиаритесь в соц сетях + подключаете "сарафанное радио".

    Можете сделать небольшую акцию в школах: учу на халяву, но при условии, что потом отработаете N месяцев (возможно с доплатой).

    На счет "некоторых навыков по программированию" - обычно спецы так не говорят)). Я искренне надеюсь, что вы не являетесь жертвой эффекта Даннига-Крюгера
    Ответ написан
    Комментировать
  • Кто должен думать над внешним видом адаптации сайта под мобильные устройства?

    Denormalization
    @Denormalization
    Это риторический вопрос.
    Его уже неоднократно задавали тут.

    Если нету макетов под меньшие разрешения - придумываем сами как адаптировать. Ну и просим за это деньги.
    Ответ написан
    Комментировать
  • Срабатывание автозаполнения полей на других формах в Chrome и Safari

    smurov
    @smurov
    Не понятно кто я
    Случайно напоролся на ваш вопрос, когда сам искал на него ответ.
    Решение простое :)

    <form autocomplete="off">
       <input name="name" type="text">
       <input name="password" type="password" autocomplete="new-password"> // autocomplete="new-password" это решение для хрома
    </form>
    Ответ написан
    1 комментарий
  • Заказчик постоянно все меняет?

    Denormalization
    @Denormalization
    Работа есть, оплачивается, в чем проблема? Это работа, а не десткий сад.
    Нравится\Не нравится - это дело десятое.

    но я не хочу постоянно переделывать, я хочу сделать - сдать -и на новый уйти

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

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

    такое возможно только если у заказчика есть четкое понимание всех хотелок которые реализовал дизайнер

    Это надо в сказку переехать. В реальности такое бывает в 0.00001% случаев. Если заказчик не просит что-то переделать - значит его просто жаба давит платить еще. И жаба сильнее чем дискомфорт от "недоделки".
    Ответ написан
    8 комментариев
  • Где хранить бесконечность записей (111 * 10^29)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Это что вы такое собрались хранить?
    95*111*1029 байт ≈ 1034 байт ≈ 1022 терабайт
    Значит покупаете тысячу миллионов миллионов миллионов винчестеров на 10 Tb и получаете своё хранилище.
    Ответ написан
    12 комментариев
  • Сколько исследователи тратят времени на поиск уязвимости и написание эксплойта подобного рода(в описании)?

    Не знаю, где вы читали эту новость, но по этим двум источникам выходит, что большую часть написанного в вопросе вы сами придумали, и все намного проще:
    gtlaunch.ru/hakeryi-iz-anonsec-ugnali-u-nasa-bespi...
    https://xakep.ru/2016/02/02/anonsec-nasa-leak/

    Итак, смотрим:
    Так как к трояну Gozi группа отношения не имеет, хакеры пишут, что они попросту купили доступ к зараженному серверу у автора Gozi, и сервер стал отправной точкой входа.

    Ну т.е. они даже эксплоит не покупали. Даже если б купили - ну приватный эксплоит, обычное дело.
    Безопасность НАСА действительно оставляла желать лучшего: запустив обычный брутфорс, хакеры нашли первое сочетание логина и пароля root:root через 0,32 секунды.

    Закрепились на одной машине, стали сканить с неё все доступные во внутренней сети - простое и логичное действие. root:root это конечно полный фэйл, и можно сказать удача для AnonSec, но в принципе не так уж удивительно и невероятно.
    Хакеры смогли получить полный доступ к сетевым хранилищам данных (NAS) на которых хранились копии всех планов полетов беспилотников

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

    Получили доступ к NAS (снова root:root, или зашли с доверенной машины, или насобирали паролей разных юзеров и какой-то подошел к NAS), смогли заливать свои файлы. Вот и залили.

    Я не говорю, что со всем этим справился бы школьник, но где вы тут видите что-либо про взлом прошивки? И да, про "закрытые данные":
    взломать внутреннюю сеть НАСА и провести в ней несколько месяцев, а в качестве доказательства они опубликовали архив объёмом 276 ГБ

    Несколько месяцев, Карл! Даже если серьезные документы хранятся в другой сети с более защищенным периметром, за это время они могли проскочить на чьих-то рабочих машинах или на внутренних серверах.

    И под каждый беспилотник никто новую ОС писать не будет. И для серверов НАСА тоже никто новую ОС писать не будет. В беспилотнике будет какой нибудь embedded-дистрибутив, на серверах ну допустим какой-нибудь олдскульный UNIX (AIX/HP-UX/etc), а на новых будет Линух.

    даже софт для управления этим беспилотником

    Ну софт не найдешь, а вот gpx формат известен весьма широко.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1-ый вариант. Не усложняйте на ровном месте.
    Ответ написан
    2 комментария
  • Уровень ошибок php?

    DevMan
    @DevMan
    > Какой уровень ошибок вы выставляете при разработке?
    максимальный.

    > Есть ли смысл фиксить ошибки типа "Undefined index"
    имеет смысл фиксить все. ибо на генерацию ошибок уходит время и засирается лог.
    Ответ написан
    2 комментария
  • Amphp, использует ли кто в production?

    nazarpc
    @nazarpc
    Open Source enthusiast
    но в блокирующем режиме это все не так интересно

    С чего бы это? Часто большие накладные расходы имеет именно bootstrap приложения.
    Запустите под blackfire сервер, прогоните несколько сотен тысяч запросов, посмотрите реально ли у вас I/O причина задержек, или, может, вы упираетесь в CPU.

    Дальше смотрите что именно вас не устраивает: общая производительность или скорость обработки одного запроса. Если первое и есть запас памяти - гораздо проще увеличить количество воркеров.

    Вот если вы упираетесь жестко в I/O && ограничены сильно по памяти && критичным является скорость обработки одного запроса - тогда стоит смотреть серьезно в сторону асинхронного I/O, в противном случае вы излишне усложняете систему не получая существенной практической пользы.
    Ответ написан
    2 комментария
  • В чем моя причина провала тестового задания Яндекса?

    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 комментариев
  • Как плавно перейти в более высокие частоты?

    kopcap_va
    @kopcap_va
    SEO Consultant
    А вы "старое" ядро дополняйте и делайте для новых групп запросов отдельные посадочные страницы.
    Ответ написан
    2 комментария
  • Как преодолеть барьер перехода от теории к практике?

    trevoga_su
    @trevoga_su
    забудь об фреймворках, МВС и OOP
    не засоряй себе сейчас мозги этим
    тебе до понимания этих вещей как до китая пешком
    пиши свой гвнокод и все
    ты сам ко всему этому потом прийдешь

    желание пропадает
    а это уже тревожный звоночек. может не твое?
    Ответ написан
    Комментировать
  • Что значит оборачивание функции в скобки (function() { ... })?

    copist
    @copist
    Empower people to give
    Короткий ответ
    (function() { ... })()
    Это определение анонимной функции без параметров и непосредственный вызов её, так же, без параметров

    Длинный ответ
    Зачем оборачивать значение в круглые скобки?

    Оборачивание функции в скобки, так же как и оборачивание константы в скобки - это просто способ показать интерпретатору, что это значение внутри скобок может быть использовано как возвращаемое значение.
    var var_a = 5
    (var_a) /* или */ (5) // не является ошибкой, возвращает значение переменной или выражения
    function func_b() { }
    (func_b) /* или */ (function func_b() { }) // не является ошибкой, возвращает ссылку на функцию
    var var_c = { key: "val" }
    (var_c) /* или */ ({ key: "val" }) // не является ошибкой, возвращает объект
    var var_d = [ "one", "two" ]
    (var_d) /* или */ ([ "one", "two" ]) // не является ошибкой, возвращает массив


    Ну а раз (func_b) - это ссылка на функцию func_b, то значит её можно сразу же вызвать.
    A если (var_c) - это объект, то значит можно сразу же использовать его
    Аналогично (var_d) - это массив, то значит можно сразу же использовать его

    (func_b)() или (function func_b() { })() вызвать функцию
    (var_c).key или ({ "key": "val" }).key использовать объект
    (var_d)[0] или ([ "one", "two" ])[0] использовать массив

    Синтаксической ошибкой было бы использование функции, массива, объекта без скобок ( )
    function func_b() { }() ошибка "Unexpected token )"

    Хотя нет ошибки, по крайней мере в Google Chrome
    { key: "val" }["key"]
    ["one", "two"][0]

    Для чего вообще придумали самовызывающиеся функции?
    Для того, чтобы изолировать переменные и функции, чтобы они не попадали в глобальную область видимости.

    Сравни
    var a = "test"
    alert(a)

    по завершении этого блока переменная a болтается в глобальной области видимости

    и
    (function(){
        var a = "test"
    })()
    
    alert(a) // недоступно, потому что она была локальной переменной внутри анонимной функции


    Почему скобки ( ) пустые?
    В данном случае у функции function() { ... }нет формальных параметров, значит и вызывать можно без параметров.

    Но вообще в самовызывающуюся функцию можно передавать параметры. Это общая практика передачи ссылок на глобальные объекты:

    (function (w, d, $) {
       // некоторым нравится сокращать код путём использования коротких имён переменных
       w['fizz'] = "buzz" // вот так можно принудительно зарегистрировать
                           // глобальную переменную fizz
       $('body').css({background: 'red'}) // вот так можно работать с jQuery через привычную $
                           // даже если библиотека была загружена в режиме noСonflict
    }(window, document, jQuery))


    Некоторым не нравится длинный вариант проверки на undefined и они специально предусматривают лишний параметр, который не инициализируют

    (function (message1, message2, empty) {
        // это и есть проверка на undefined
        if (message1 === empty)
            alert('message1 is undefined')
        else
            alert('message1 = ' + message1)
    
        if (message2 === empty)
            alert('message2 is undefined')
        else
            alert('message2 = ' + message2)
    })("test") // вызвана только с одним параметром, значит второй по имени message2
    //  будет пустой, а третий empty специально ввели в качестве образца
    //  данных с типом "undefined", для служебного использования

    Зачем функция анонимная?
    Аналогично - чтобы не регистрировать её имя в глобальной области видимости, если она нужна один раз.
    Ответ написан
    7 комментариев
  • Плагиат сайта - как быть, если конкурент тупо украл дизайн, верстку, код сайта?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    1) можно подать иск о нарушении авторских и смежных прав (долго и мутно).
    2) Необходимо связаться с региональным представительством Гугл и Яндекс, указать проблему и попросить о блокировке выдачи. Это работает и гораздо быстрее и эффективнее чем все прочие методы. Прецеденты были.

    UPD: для всех кто интересуется - вот как человек боролся и поборл систему
    Ответ написан
    4 комментария
  • Нужно ли из ноутбука снимать батарею?

    Jump
    @Jump
    Системный администратор со стажем.
    Для батареи лучше, но это банально неудобно.
    Идеальные условия для хранения литиевых батарей - заряд в районе 40-60% и температура немного выше ноля градусов.
    При сильном нагреве литиевые аккумуляторы быстро деградируют. А ноутбук при работе сильно нагревается.
    Так же они бояться сильного заряда - но в этом плане все нормально, контроллер заряда за этим следит.
    Ответ написан
    1 комментарий
  • Кто стащил деньги Скрилл или Альфа-банк?

    @chebyster
    Выводил деньги из Skrill на счет в Альфа Банк около 2х лет, комиссию брал только Skrill. Например за перевод до 1K зелени комиссия была в пределах 5 баксов. Эту комиссию скрилл явно показывает при совершении операции вывода бабла. На альфу всегда приходила та сумма, которая была указана в транзакции Skrill. Платеж приходил либо на следующий день либо через один.
    Но около месяца-двух назад платежи стали идти 3 банковских дня и сумма, которая стала приходить на счет в альфу, как раз меньше выводимой где то на 25-35 баксов.
    Думаю что то поменялось в Skrill и халява закончилась. В следующий раз попробую привязать Сбер и вывести туда.
    Ответ написан
    3 комментария
  • Какие туториалы можно почитать о создании социального сервиса?

    @maxyc_webber
    Web-программист
    нет такого. каждый сам из своих нужд ruhighload.com вот тут почитай.
    напиши в скайп вопросы
    Ответ написан
    Комментировать
  • Стоит ли открывать ИП при работе в Upwork или остаться физиком?

    buttersmai
    @buttersmai
    Вы не можете легально подавать декларацию 13% и оставаться физ.лицом в вышеописанной ситуации: только ИП(ООО), если хотите не быть в тени.
    Ответ написан
    1 комментарий
  • Какую ОС выбрать для локальной разработки на php?

    kentuck1213
    @kentuck1213
    Для винды строго OpenServer. В Ubuntu LAMP. Про денвер забудьте это уже не модно.
    Локальный сервер от боевого не чем не отличается в принципе. Просто нужно узнать какую версию PHP поддерживает ваш боевой сервер ( phpinfo() ) и установить почти токуюжи на свою локалку.
    Лично у меня на ноуте стоят две OC - WINDOWS 10( для игр _)) ) и Ubuntu 15.10( для программирования).
    Ответ написан