• Форма отправки данных, В чем проблема?

    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.
    Ответ написан
    Комментировать
  • Есть ли альтернатива PHP?

    vshemarov
    @vshemarov
    Если Вам просто "надоел PHP", то стопудов чрез какое-то время так же надоест и другой язык.
    Ответ написан
    Комментировать
  • Есть ли альтернатива PHP?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Основная претензия к PHP - огромное количество школьников которые прочитали полторы статьи, посмотрели 3 видео курса, собрали бложег на вордпресс и считают себя программистами.
    Есть некоторые шероховатости и нелогичности, но с каждым релизом их меньше и меньше.
    Я не вижу каких то принципиальных преимуществ у других скриптовых языков.
    Ответ написан
    1 комментарий
  • Как влияет и на что ключевое слово?

    mlnkv
    @mlnkv
    JavaScript Developer
    это так же критично, как и ваше нежелание учить js
    Ответ написан
    1 комментарий
  • Как удалиться из DigitalOcean (DO) или почему они воруют мои деньги?

    bit_rainbow
    @bit_rainbow
    Типичный консьюмер-истеричка с пост СССР пространства.
    Ответ написан
    2 комментария
  • Как в php заменить все вхождения по шаблону на массив значений?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    $url  = 'posts/%s/%s_%s.html'; 
    $args = array ('user',123,456);
    echo vsprintf($url, $args);
    Ответ написан
    Комментировать
  • Как выбрать оптимальный язык программирования и вообще стек технологий под проект?

    saboteur_kiev
    @saboteur_kiev Куратор тега Веб-разработка
    software engineer
    > Вот, собственно, и вопрос - как выбрать под проект?
    А где вопрос? В упор не вижу, потому что ваш похож на "как выбрать ботинки под ноги". Ни размера, ни женские или мужские, ни зимние или летние.

    Чтобы выбрать что-либо под проект, нужно описать проект, как можно более детально. И уже под его характеристики можно будет что-то искать. Так что перестаньте задавать вопросы без вопроса.
    Ответ написан
    Комментировать
  • Почему использование !important крайне не желательно?

    YardalGedal
    @YardalGedal
    yeah boy
    На хабре есть отличная статья про "грязный" css и в том числе там упоминается !important. Всё довольно таки не плохо разжевано.
    Ответ написан
    Комментировать
  • Как настроить локальний сервер python на mac OS X?

    sumej
    @sumej
    DevOps
    Нужно узнать ип вашего компьютера и зайти по нему. Вроде бы по умолчанию ваш сервер будет на всех ип:
    #python -m SimpleHTTPServer 8000
    Serving HTTP on 0.0.0.0 port 8000 ...
    Mac OS X (10.4) - Finding the IP address and MAC a...
    Mac OS X (10.5.x, 10.6.x, 10.7.x, 10.8.x, 10.9.x, ...
    Ответ написан
    1 комментарий
  • Почему приложение на OS X на Swift такое медленное?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Открываем профайлер и запускаем на 5000.
    Видим, что из 26 секунд, необходимых программе на выполнение функции, почти все они уходят на завершение редактирования NSTextView.
    pikucha.ru/iedeV

    Теперь делаем финт ушами и выводим создание строки отдельно, отображение для неё отдельно. (Заранее извиняюсь за какие-то ошибки в коде, это мой первый раз на свифте)
    @IBAction func TextGenGo(sender: AnyObject) {
            var i:int_least32_t;
            var string = outcomeText.string;
            for (i=1;i<=textCount.intValue;i++) {
                string = string! + String(i) + " ";
            }
            outcomeText.string = string;
        }

    Теперь выполнение 20000 заняло пол секунды.
    Ответ написан
    3 комментария
  • Как написать консольную программу?

    winordie
    @winordie
    Лучшая документация -- исходники
    Комментировать
  • Примеры (с исходниками) enterprise проектов на go?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Groupcache написана Brad Fitzpatrick автором memcached для dl.google.com
    Ответ написан
    Комментировать