• Какая free cms менее уязвима для взломов?

    @nirvimel
    Какой же странный этот ваш PHP-мир. Самописные фреймфорки у вас безопаснее, развиваемых годами, ведущих open source проектов, на которых стоят миллионы сайтов. Я даже не знаю, это больше комплимент в сторону смелых и отважных разработчиков собственных фреймфорков, которым приходится повторять нелегкий путь, пройденный до них тысячами таких же борцов за безопасность, или это комплимент в сторону безгранично доверчивых клиентов, которые смело полагаются на безопасность ведущих в отрасли решений на основании того, что этими же решениями пользуются тысячи других контор с серьезными именами.
    Ответ написан
    Комментировать
  • Rails - где в проекте создать свой класс и как подключить его к контролеру?

    Dem1
    @Dem1 Куратор тега Ruby on Rails
    Ruby on Rails developer
    app/services
    Ответ написан
    Комментировать
  • Почему код php выдаёт такой результат?

    @holfza
    facepalm.jpg
    Ответ написан
    Комментировать
  • Как реализовать множество условий?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Итак... возьмем ваш код

    if (!preg_match("/^[a-zA-Z0-9_]+$/", $username)) die("Bad login");
            if (
            $type != 'voice' and $type != 'balance1' and $type != 'balance2' and $type != 'absvoice' and $type != 'passhash' and
            $type != 'paytime' and $type != 'white1' and $type != 'exp1' and $type != 'white2' and $type != 'voice2' and
            $type != 'exp2') die("Wrong type");
            if ($action != 'set' and $action != 'get' and $action != 'add') die("Wrong action");
            if ($action == 'set' and !(preg_match("/^[0-9-.]+$/", $value)) and $type != 'passhash') die("Wrong value");
            if (($action == 'set' or $action == 'add') and ($type == 'paytime' OR $type == 'absvoice')) die("paytime/absvoice read only");
            if (($action == 'add') and ($type == 'passhash' or $type == 'white1' or $type == 'white2')) die("add not available for this");


    первое что мы можем тут увидеть - дублирование условий, у нас много примерно одинаковых условий. Давайте упростим все используя in_array

    if (!preg_match("/^[a-zA-Z0-9_]+$/", $username)) die("Bad login");
    
    $availableTypes = ['voice', 'balance1', 'balance2', 'absvoice', 'passhash', 'paytime', 'white1', 'exp1', 'white2', 'voice2', 'exp2'];
    if (!in_array($type, $availableTypes)) {
        die("Wrong type");
    }
    
    if (!in_array($action, ['set', 'get', 'add'])) {
        die("Wrong action");
    }
    if ($action == 'set' and !(preg_match("/^[0-9-.]+$/", $value)) and $type != 'passhash') {
        die("Wrong value");
    }
    if (($action == 'set' or $action == 'add') and in_array($type, ['paytime', 'absvoice'])) {
        die("paytime/absvoice read only");
    }
    if (($action == 'add') and (in_array($type, ['passhash', 'white1', 'white2']))) {
        die("add not available for this");
    }


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

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

    updated: избавляемся от всех ифов (точнее заменяем на один)
    $constraints = [
        'unsupportedTypes' => !in_array($type, $availableTypes),
        'unsupportedAction' => !in_array($action, ['set', 'get', 'add']),
        'expectedNumericValue' => $action == 'set' && is_numeric($value),
        'readOnlyType' => 'get' !== $action && in_array($type, ['paytime', 'absvoice']),
        'disallowedTypes' => 'add' === $action && in_array($type, ['passhash', 'white1', 'white2']),
    ];
    
    $constraintsMessages = [
        'unsupportedTypes' => 'Type "<type>" is not supported',
        'unsupportedAction' => 'Action "<action>" is not supported',
        'expectedNumericValue' => 'Wrong value, expected numeric',
        'readOnlyType' => '<type> is read only',
        'disallowedTypes' => 'Type "<type>" is not supported for action "<action>"'
    ];
    
    $errors = array_keys(array_filter($constraints));
    if (!empty($errors)) {
    
        die(str_replace(
            ['<type>', '<action>'],
            [$type, $action],
            $constraintsMessages[reset($errors)]
        ));
    }


    это дело можно еще упростить и соорудить нормальные правила валидации + отдельную функцию которая будет проверять все это дело.
    Ответ написан
    2 комментария
  • Как вы думаете обман?

    tech22
    @tech22
    Лидер проекта http://th22.info
    Какой милый лохотрон. Утащу в свою коллекцию.
    Ответ написан
    Комментировать
  • Дизайн сайта готов что дальше?

    Amstor
    @Amstor
    Работаю в wap-e
    Лучше по отдельности нанимать исполнителя. И для начала программиста, а уже после него звать верстальщика.
    Ответ написан
    1 комментарий
  • Действительно ли Ruby сложнее PHP/Python? Если да, то почему?

    @eoffsock
    Кодер (Rails)
    Я пришел в разработку на Rails четыре года назад, не зная решительно ничего. Учился на ходу. Попутно осваивал SQL в режиме «вот процедура на PL/SQL длиной в шесть экранов, нужно чтобы работало вчера»
    С тех пор вакансий меньше не стало.

    Другое дело, что знать Rails мало. Нужен фронт, хотя бы немного. Slim/HAML.
    В среде RoR фетиш на тесты, значит как минимум RSpec, Capybara. Как минимум один гем для работы с фоном — delayed_job, Sidekiq.
    К этому прибавить умение разворачивать все это дело и стартовать в production — Capistrano/Mina, unicorn.
    Ценится видеть хоть раз в жизни Devise и Cancan.
    Остальное обычно зависит от проекта.

    Дальше — правила хорошего тона.
    https://github.com/bbatsov/rubocop
    https://github.com/railsbp/rails_best_practices
    https://github.com/bbatsov/rails-style-guide

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

    UPD: Да, в целом стоит начинать с Ruby/Rails. Но мое мнение предвзято — я не люблю PHP, хотя с уважением отношусь к NodeJS.
    Ответ написан
    Комментировать
  • Как сделлать нормальный проект без хороших знаний?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как сделлать нормальный проект без хороших знаний?

    Никак.

    Есть друг у которого есть бизнес и так он знает что я занимаюсь разработкой сайтов и с деньгами щас у меня туго , он сказал мне сделать интернет магазин небольшой за очень хорошую сумму.

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

    Прошу подсказать cms для такого уровня знаний чтобы можно было сделать магазин более менее нормальный.

    Prestashop
    Ответ написан
    Комментировать
  • Каковы Возрастные ограничения в программировании?

    hronik87
    @hronik87
    Обитаю в 1С-Bitrix
    Раз в день стабильно появляется похожий вопрос. Мне 28, год назад ничего не знал ни о HTML, ни о CSS, ни о JavaScript, ни о PHP. Сегодня работаю в хорошей компании, верстка у меня на твердую 4, JavaScript на 3+(библиотека JQuery в основном, но могу и на чистом написать что-нибудь полезное), PHP начал осваивать месяц назад, но уже есть довольно неплохие результаты. Было ли мне сложно в самом начале? Да! Я не знал ничего об этой сфере. Спал по 4 часа в сутки прямо возле компьютера, шаблон разрывало и я начал уже вслух разговаривать с собой. У меня не стояло выбора поучить сегодня или нет. У меня стоял выбор пойти поссать и дальше учить или все же потерпеть, а потом уже сходить когда невмоготу будет. И я сейчас в той сфере которая мне нравится, я постоянно учусь и я не остановлюсь. Так что если ты уверен, что это твое, то любыми правдами и неправдами учи, старайся, вникай. И все получится)
    Ответ написан
    14 комментариев
  • Какие разделы английского стоит выучить для фриланса?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    If you understand the meaning of this text without an interpreter - so you can work on the english-speaking freelance
    Если ты нихрена не понял в тексте выше. Скачай учебник Английский язык 5 класс
    Ответ написан
    17 комментариев
  • Какое посоветуете легкое IDE для PHP под Linux?

    @sanex3339
    PhpStorm, не пойму, чем он вас смущает. Лучше него ничего нет.
    Ответ написан
    3 комментария
  • Какое посоветуете легкое IDE для PHP под Linux?

    copist
    @copist
    Empower people to give
    phpStorm - слишком монструозный и навязчивый, как будто для проектирования самолета;

    Не стесняйся признаться, что ты всегда мечтал сконструировать ракету. Слезть с phpStorm будет сложно, особенно после взлёта твоей ракеты.
    Ответ написан
    Комментировать
  • Jquery. Как понять частный случай выбора по селектору?

    Stalker_RED
    @Stalker_RED
    Это не устаревший синтаксис. Почитать можно в документации, например
    jQuery( selector [, context ] )


    Это контекст для поиска. Запись $(this).find('.myClass') равна $('.myClass', this)
    Ответ написан
    Комментировать
  • Принципиальные отличия платной цмс от бесплатной (кроме того, что за одну платить а за другую нет)?

    2ball
    @2ball
    Хардкор кодер
    1) 10 студентов в саппорте, вместо сообщества по всему миру например...
    2) Зачастую, качество кода (Bitrix, Netcat смотрел сам, это жесть)
    3) Скорость и частота обновления
    4) Отсутствие специфики в настройке сервера
    5) Количество готовых решений опять же

    И чтобы сразу немного приглушить звон сторонников платных... Был у меня один случай с одной желтой двухсимвольной CSM, российского производства, которая себя еще и фреймворком именует, название не буду называть. Так вот там был модуль интернет-магазина, который накручивался на базовый движок по очень ржавой резьбе. И вот захотелось title на главной сделать независимым от title всего магазина... У меня не вышло, у саппорта тоже, у саппорта саппорта как-то тоже не сложилось. Через год, когда проблема снова актуализировалась - со стороны платного движка проблема так и не решалась. Вписал костыль в логику и только так смогли победить проблему в продукте стоимостью несколько сот килорублей.
    Ответ написан
    6 комментариев
  • Стоит ли идти в 1С программисты?

    @FoxInSox
    1C - колхоз. Будете сидеть в потном офисе с 40-50 летними женщинами бухгалтерами за древним компьютером с CRT монитором. А если лет через пять 1С платформа помрет или заменится чем-то более современным, то ваши 5 лет пойдут коту под хвост.

    ps переезжайте в Питер или Москву.
    Ответ написан
    4 комментария
  • Стоит ли идти в 1С программисты?

    AMar4enko
    @AMar4enko
    50% работы 1С-программиста - бухгалтерия.
    Без уверенного знания бухучета делать там нечего - либо знать, либо быть готовым учиться (и быть способным доказывать свою точку зрения теткам под 50).
    Если нравится бухучет - то идите. А в целом не советую.
    Также важный нюанс - с уверенным знанием любой из перечисленных вами технологий вы сможете фрилансить на заграницу. А с 1С вы будете навсегда привязаны к российскому заказчику.
    Не ищите работы в городе, попробуйте найти ментора на любую из ваших технологий и пробуйте свои силы на Upwork.
    Ответ написан
    3 комментария
  • Используете ли вы витамины для "мозга"?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Модные витамины разводняк на деньги не ведитесь.

    Прирацетам (ноотропил - улучшает мембранное питание у нейронов, эффект минимум через месяц) + магний ( в основном бобовые, гречка, пшено Продукты богатые на Mg ) + комплекс витаминов B (Ундевит - лучший выбор, дешево и сердито). Можно "Магне-В6" если денег не жалко - но правильное питание им не заменишь.

    P.S. "Снековая диета" - к которой частые рецедивы у ИТишников сама по себе ВЕЛИЧАЙШЕЕ ЗЛО всех времен и народов.
    Ответ написан
    5 комментариев
  • Как правильно синхронизировать проект на GIT?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ммм... git pull --rebase (или без rebase если хотите merge)

    Почитайте книжечку "Pro Git" (есть на русском).
    Ответ написан
    6 комментариев
  • Как правильно понять этот сложный код?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Учи матчасть...

    /* Функция асинхронной загрузки хеадера */
    function getHeader() {
      $.post('modules/constructor.php',     /* Аппелируем к серверному скрипту по указаному адресу */
          { 'action': "header", 'lang': lang },   /* Передаем параметры на сервер */
           function(data) {                            /* Callback - параметр анонимня функция. Вызывается при удачном запросе */
              $('div#header')                          /* Выбираем #header - но правильнее $('#header'), ибо 2 блока с одним id не правильно */
                 .empty().append(data);           /* Очищает выбраный блок и дописывает к нему полученные данные */
           	}
          ).done(function() {                         /* Событие выполняется после удачного выполнения запроса */
            getFooter()                                 /* Вызов запроса Fotter */
          })
    }
    
    /* далее аналогично но для footer */
     
    function getFooter() {
      $.post('modules/constructor.php',    
          { 'action': "footer", 'lang': lang },    
           function(data) {                            
              $('#footer').empty().append(data); 
           	}
          ).done(function() {
            getScriptHandF();              /* Здесь была синтаксическая ошибка: отсутствие замыкающего ";" */
            getContent(content)
          })
    }
    function getContent(cont) {
      $.post('modules/constructor.php', 
          { 'content': cont, 'lang': lang, 'device': devi },
           function(data) { 
              $('#content-wrapper').empty().append(data); 
           	}
          ).done(function() {
    
    /* Далее человек питался сделать прелоадинг картинок. НО! */
    /* Картинки уже начались загружатся после  выполнения
     колбеков из загрузок getContent, getHeader, getFoоter */
            var paths  = [];                  /* Готовим массив для прелоадинга картинок */
            var images = $('body').find('img');    /* Выбираем все картинки */
            images.each(function() {                  /* Пробегаемся по всем картинкам */
              paths.push($(this).attr('src'));          /* Записываем ссылку на картинку в масив */
            });
             
            preloadImages(paths, function () {   /* Вызывает preloadImages Описания процедуры нет */
              $("html,body").animate({"scrollTop":0},200);  /* Анимирует скроллинг если страница прокручена на верх страницы */
              $('#preload').fadeOut(1000);   /* Анимирует прозрачность кроющего блока #preload */
              getScript();                              /* Вызывает getScript */
              if (cont=="home") getSlider(); /* Вызывает getSlider если страница домашняя */
            });
          })
    }
    Ответ написан
    2 комментария
  • Как всё успевать и не быть роботом?

    opium
    @opium
    Просто люблю качественно работать
    Время переезжать в Тайланд, это решит большую часть ваших бытовых проблем, как еда, климат и спортзал.
    pumainthailand.com
    Ответ написан