Задать вопрос
  • Что должен знать middle PHP разработчик?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Мидл должен знать все, что знает Junior + опыт работы хотя бы 1-2 года.
    Ответ написан
    Комментировать
  • Как составить регулярное выражение для проверки правильного формата денежной суммы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Здесь, кстати, хорошо видны два подхода, которые четко делят людей на пользователей и программистов:
    Пользователь хочет "подборку готовых кодов на все случаи жизни" - желание заведомо невыполнимое.
    Программиста же никогда не смущает отсутствие готового решения - на то он и программист. Которому не нужна таблица, в которой можно посмотреть, сколько будет 5х5. Потому что он может это вычислить!
    Ответ написан
    2 комментария
  • Как сменить внешний вид?

    @igoravr
    Никак. Стандартный input всё равно будет выглядеть по-разному в разных браузерах и ОС.

    Можно использовать библиотеки, которые заменяют input. Например, jQuery File Upload
    Ответ написан
    Комментировать
  • Актуален ли в данной ситуации апгрейд?

    Jump
    @Jump
    Системный администратор со стажем.
    Ноутбуки не апгрейдят а выкидывают и покупают новые.
    Все что можно сделать с этим железом - поставить SSD.
    Всех проблем не решит, но работать станет приятней, интерфейс более отзывчивый будет.
    Ответ написан
    1 комментарий
  • Как настроить фокус при съемке фотоаппаратом?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Не смог удержаться, простите.
    tumblr_nkkjrxdTAN1u9ap42o1_400.gif
    Ответ написан
    4 комментария
  • Как сделать адаптивный бэкграунд?

    thewind
    @thewind
    php программист, front / backend developer
    "адаптивный" и "не меняло размера"? это же не адаптивный, а ровно наоборот...

    судя по тому, что вы используете свойство "background-size : contain" вам как раз необходимо адаптивно сжимать-разжимать background. А для этого есть отличный плагин backstretch
    Ответ написан
    Комментировать
  • Что это за шрифт в консольном приложении Borland C++?

    @DISaccount
    1) Правой кнопкой мыши тыркаем по верхней рамке окна консоли и выбираем в меню "Свойства".
    2) Ищем вкладку "Шрифт".
    3) Смотрим там на выбранный шрифт.
    4) Profit.
    Ответ написан
    1 комментарий
  • Почему ошибки в логах крона (задач нет)?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Как насчет почитать мануал? Это утилита от хостера.
    Ответ написан
    Комментировать
  • Что должен уметь backend-разработчик на сегодняшний день?

    sayber
    @sayber Куратор тега PHP
    Да, я программирую на PHP и еще асинхронно!
    Хотелось бы бой между любителями PHP & Node.js

    Или исправите срочно, или ... Ну вы читали правила.

    По теме:
    backend - должен уметь его делать. Какой язык, какие технологи и т.д., выбирает исключительно он сам.
    PHP и Node, это совершенно разные вещи, но раз вы задаете вопрос про них, значит вам это не нужно.
    Ответ написан
    Комментировать
  • Как оформить уровни вложенности в условии?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ничего не могу ответить - при взгляде на этот код мои глаза стали кровоточить.

    Но похожий случай был на Оклахомщине
    Ты, я так понимаю, из операторов сравнения знаешь только "равно" и "не равно" ? Когда проходили "больше"-"меньше" ты болел?
    Ответ написан
    9 комментариев
  • Форма отправки данных, В чем проблема?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Аналогичный случай был в Одессе
    Ответ написан
    Комментировать
  • Где найти самое простое объяснение Dependency Injection паттерна?

    iximiuz
    @iximiuz
    Мартин Фаулер круто пишет обо всех паттернах. Про DI можно почитать тут. Вообще у него отличный блог. И он же автор книги P of EAA. Правда русский ее перевод крайне не рекомендую читать, можно только запутаться, так что читайте в оригинале.

    Если хотите разобраться с паттернами, то самая простая (и при этом дельная!) книга - это Фриман&Фриман. Ее можно читать и на русском.

    Применительно к PHP - вот лучшая книга про шаблоны (и не только), которую я видел PHP. Объекты, шаблоны и методики программирования от Мэт Зандстра.

    Порядок прочтения рекомендую следующий: Фриман&Фриман, затем Мэт Зандстра, и на десерт Фаулера P of EAA.

    UPD:
    Важно отличать паттерн Dependency Injection от Dependency Injection Container.
    Простейший пример внедрения зависимости:
    interface IEngine {}
     
    class V8Engine implements IEngine {}
     
    class Car {
      public function __constructor(IEngine $engine) {
        $this->engine = $engine;
      }
    }
     
    $car = new Car(new V8Engine());

    Простейший пример игнорирования явного внедрения (для такого кода трудно писать unit-тесты, его труднее понимать и править):
    class V8Engine {}
    
    class Car {
      public function __constructor() {
        $this->engine = new V8Engine();
      }
    }
    
    $car = new Car();

    Отличный (и легковесный) пример DIC - это pimple:
    // define some services
    $container['session_storage'] = function ($c) {
        return new SessionStorage('SESSION_ID');
    };
    
    $container['session'] = function ($c) {
        return new Session($c['session_storage']);
    };

    Советую прочитать и понять его исходники, чтобы убедиться, что в DIC (во всяком случае для PHP) нет никакой магии. Первая версия была всего ~100 строк. Необходимо также отметить, что класс Session использует шаблон Dependency Injection, явно определяя свою зависимость от SessionStorage. А контейнер делает лишь правильную связку.

    И да, контейнер сам по себе можно использовать как service locator, если к нему, например, есть глобальный доступ. Но это очень плохая практика, потому что если что-то обращается к сервис локатору, то формально оно начинает зависеть сразу от всех компонентов системы.
    Ответ написан
    4 комментария
  • Full stack (emberjs, nodejs, mongodb)?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Привет.
    https://github.com/mgenev/nodember ? На discuss.emberjs.com время от времени появляются вопросы какой backend для Ember лучше. Чаще всего фавориты ROR || Sinatra, Django Rest Framework, Sails.js.

    PHP никто не упоминал, но думаю Laravel 4-5 хорошо подойдут. Symfony 2 точно нет.

    Все дело в том что ember-data организовывает REST API по принципам описанным в jsonapi.org и вроде как нет смысла эти принципы переопределять, там все довольно продумано и гармонично. На сайте есть раздел со списком библиотек поддерживающих jsonapi.

    Мои ИМХО что будущее крупных веб-приложений все же за websokets, а не за http, поэтому я потихоньку посматриваю в сторону GO, но про него сказать ничего не могу.

    Update: 07.03.2015

    Нашел sanestack.com, Ember.js + Sails.js
    Ответ написан
    2 комментария
  • Как извлечь из MySQL данные по нескольким критериям силами PHP?

    viktorvsk
    @viktorvsk
    Серьезно. Вот Вы потратили 5, 10, 20, 100 часов что б реализовать вот это. Потом - время на написание вопроса. В конце еще написали
    Собственно вопрос: есть ли красивый выход из ситуации?

    То есть, в такой формулировке, вы предполагаете, что возможен вариант, что красивого выхода не существует (хотя, мне и сложно представить, каким бы был мир в таком случае)... И Вы даже не решили сначала, как это любят говорить менеджеры в наше время, проинвестигейтить этот вопрос? Действительно, Вам кажется, что может быть вариант, что, например, Ebay - имеет у себя пару петабайт регулярных выражений?

    Я просто оставлю это здесь:
    en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%...
    zlob.in/2013/03/fasetnaya-poisk-v-internet-magazine
    Ответ написан
    7 комментариев
  • Как реализовать работу с BitCoin на сайте?

    shaks
    @shaks
    https://blockchain.info/ru/api/api_receive
    делаешь запрос на апи, указывая колбек урл свой, получаешь кошель. как на кошель поступает какаято денюшка, блокчейн отстукивает на указанный колбек урл. В мануале все подробно описано. Незачто )
    Ответ написан
    Комментировать
  • Зачем нужны отдельные классы для работы с БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На самом деле это интересный вопрос. А, точнее, два: зачем нужен такой класс, и зачем их пишут.
    Ответ на первый становится очевиден, когда начинаешь не смотреть на код, а писать его ;)
    Практически все библиотеки, представленные в РНР, представляют в пользование программиста довольно низкоуровневые функции, которые позволяют, с одной стороны, довольно гибко управлять процессом, но с другой - делают этот процесс ну очень многословным. Самый яркий пример - CURL. Никто, находясь в здравом уме, не будет писать все время эти бесконечные curlopt. Надо пилить библиотеку, которая реализует стандартные методы пост, гет за один вызов, и только для исключительных случаев позволяет задать кастомные параметры.

    То же самое касается и работы с БД. К примеру, очень часто нам бывает нужно получить из БД массив. Сколько строк нужно написать для этого? Классическим говнокодом - 5:
    $ret = array();
    $res = mysql_query();
    while ($row = mysql_fetch_assoc($res)) {
        $ret[] = $row;
    }

    И такой код надо написать раз 15-20 за приложение. У программиста сразу руки зачешутся уничтожить этот повторяющийся код и написать функцию, которой передаешь запрос, а получаешь массив. За 1 вызов. Вот для этого библиотеки и пишут.

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

    Возьмем для примера код примера из мануала. Даже выкинув из него очевидные глупости, мы получаем пол-дюжины строк кода. Это на ОДИН запрос.
    if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
        $stmt->bind_param("s", $city);
        $stmt->execute();
        $stmt->bind_result($district);
        $stmt->fetch();
    }

    И это все - чтобы получить единственную строчку!

    В то время как с помощью (нормальной) библиотеки вся работа с БД сведется к 1 (одной) строчке, а все необходимые телодвижения будут выполнены библиотекой автоматически:
    $distr = $db->getOne("SELECT District FROM City WHERE Name=?", $city);

    Теперь перейдем ко второму вопрос - зачем их пишут.
    Самый основной мотив - "шоб було!" "У всех есть - значит, и у меня будет!". При этом, подходя к написанию библиотеки, новички наступают на одни и те же грабли.
    Чаще всего, из-за недостатка опыта авторов, код сокращается только для самых примитивных запросов. Но при этом работа с нестандартными запросами превращается в ад. Но самое ужасное - практически никогда такие самописные библиотеки не поддерживают работу с подготовленными выражениями. А это должно быть их главной фичей, без которых ценность сразу стремится к нулю. А точнее, даже к минусу, потому что инъекции. Ну и по мелочи: к примеру, если в коде действительно написано $db->FetchArray(); - то это ужас, летящий на крыльях ночи, потраченной на отлов неочевидных ошибок .
    Ответ написан
  • Как искать интересные проекты на GitHub?

    Evgin
    @Evgin
    Пробовали в https://github.com/explore искать? Более-менее каталогизированная свалка =)

    upd забыл упомянуть о вкладке trending на странице explore
    Ответ написан
    3 комментария
  • Что будет после heroku run rake --trace db:migrate VERSION=20150207160609 ????

    viktorvsk
    @viktorvsk
    База данных синхронизируется с локальной(данные на сервере не пропадут а будут добавлены новые)

    Нет
    или данные на удаленном сервере пропадут?

    Нет


    Что будет после
    heroku run rake --trace db:migrate VERSION=20081118092504



    На сервере выполнится команда
    rake db:migrate
    С ключами trace - подробный лог
    И установленной переменной окружения VERSION в значение 20081118092504 (старенький вас проект, однако)

    Что будет после этого? В общем случае, миграции не [должны] затрагивают данные. Просто применится (выполнится код в методе change/up) миграция с версией 20081118092504.
    Ответ написан
    Комментировать