• Есть ли бесплатный аналог mandrill?

    Ответ написан
    Комментировать
  • Что почитать по архитектуре приложения?

    Читай DDD от Эрика Эванса и паттерны корпоративные от Мартина Фаулера.

    Переходи с Yii на ZF2 или SF2 чтобы писать реально что-то сложное.
    Ответ написан
    Комментировать
  • Деградация производительности PostgreSQL 9.1 -> 9.5?

    Сколько новых фич было добавлено в 9.5? Например без upsert я уже не представляю как жил раньше, без ранее добаленного jsonb формата и прочее.
    Вы хотите новые фичи в приложении без деградации производительности? :)
    Ответ написан
    4 комментария
  • Выбор фреймворка?

    Zend Framework 2 + Doctrine 2
    Ответ написан
    Комментировать
  • Когда изучать npm, grunt, bower, git и т.д?

    Просто берешь и делаешь. По ходу читаешь доки и маны.
    Ответ написан
    Комментировать
  • Вы работаете со своими проектами на локалке или удаленно?

    Подключаться к проекту удаленно по FTP или SSH даже с IDE это ад.
    Даже используя линуксы и монтируя папку - все равно ад.
    Более того - править код на сервере напрямую - это основная причина ада, а не возможные разрывы, когда правки не сохраняются вообще.

    Только Git, только deploy комитов и никак иначе.
    Разработка только на локалке, система должна быть легко разворачиваема с тестовыми данными.
    Ответ написан
    Комментировать
  • Книги, дающие базу по программированию в целом и ООП?

    Все давно отвечено тут

    stackoverflow.com/questions/1711/what-is-the-singl...
    Ответ написан
    Комментировать
  • Обучение Java - какие курсы лучше (СПб)?

    Советую Школу Программирования.

    Дороговато может, но качественно.
    Ответ написан
    Комментировать
  • Как быть дальше с обучением веб-разработке?

    ZendFramework2 + Doctrine2 - сейчас пишу
    Spring + Hibernate - хочу попробовать

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

    seyfer
    @seyfer Автор вопроса
    php
    Решение:

    Делаю обход массива, создаю хеш таблицу. По ходу обхода ищу в хеш таблице по хешу элемент, если не нашел то добавляю его как уникальный.
    Если нашел, то сравниваю с найденным и по результату либо иду дальше, либо заменяю найденный на текущий.

    profit

    Для решения задачи после всех советов я пошел следующим путем.
    Если принять H за таблицу хешей, а h() - ф-ю создающую хеш, то мой итоговой алгоритм выглядит так.

    Замечу еще, что структура несколько сложнее, чем просто элементы в массиве.

    someMethod(array) {
    
    finalResult = [];
    H = [];
    //итерируюсь по элементам.
    foreach (array as resultKey => resultElement) {
       resultArray = resultElement['result'];
       resultInfo = resultElement['request'];
       
       //тут проверки на корректность
       ...
    
       //далее итерируюсь по внутреннему массиву
       foreach(resultArray as currentElement) {
       
       currentHash = h(currentElement);
    
       if (!H[currentHash]) {
           //нету в таблице
           //добавляю в рез-т
           currentUniqueId = currentElement['unique'];
           finalResult[resultKey]['result'][currentUnique] = currentElement;
           
           //запоминаю, чтобы можно было удалить в будущем
           currentElement['resultKey'] = resultKey;
           //добавяю в хеш таблицу
           H[currentHash] = currentElement;
       } else {
           //уже есть в таблице
           hashedElement = H[currentHash];
           currentUniqueId = currentElement['unique'];
           hashedUniqueId = hashedElement['unique'];
     
          //не сравниваем сам с собой
          if (compareUnique(currentUniqueId, hashedUniqueId)) {
             continue;
           }
    
           //дальше сравнение
           if (compareBigger(currentElement, hashedElement)) {
                //текущий больше, ничего не делаем
           } else if (compareSmaller(currentElement, hashedElement)) {
               //не буду приводить код, просто действия
               /*
               1. Удалить текущий из рез-та fullResult
               2. Сохранить currentElement в fullResult
               3. Обновить H[currentHash] на текущий элемент
    
              */
           }       
       }
       }
    }
    
    return fullResult;
    }


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

    javascript.ru/tutorial/Object

    Я отсюда изучал. Отсюда же написал по примерам свои решения для наследования и полностью разобрался с прототипами.
    Ответ написан
    Комментировать
  • Как лучше изучать Zend 2?

    Есть еще курс от Специалист. Но он такой же как книга, упомянутая выше, если не хуже.
    Ответ написан
    Комментировать
  • Как организовать структуру приложения на Zend Framework 2 для создания AJAX REST API?

    Используйте Apigility
    Ответ написан
    Комментировать
  • Почему не получается сохранить параметры запроса в Kohana ORM?

    Пример

    $posts = ORM::factory("post") -> reset(false); /// Вот оно!
    $posts = $posts -> where("published","=",1);
    // Дальше накручиваем фильтров
    if(......){
       $posts = $posts->where( ..........);
    }
    .........................
     
    $count = $posts - >count_all();
     
    // Теперь ничего не теряется
    $posts = $posts -> limit(10)->offset(30)-> find_all();
    Ответ написан
    1 комментарий
  • Что переместить в модель Kohana?

    Учитывая, что в приведенном выше коде не используется query builder ни от Database ни от ORM (что одно и то же с точки зрения query builder, практически), то в модель ORM, которая наследуется от ORM - перемещать нечего.

    Проблема глубже - она в вашем понимании.
    Модель в бизнес логике это не только ORM и прочие способы доступа к БД и харнилищам, это полное описание бизнес логики.
    По сути classes в Кохане можно использовать для хранения иерархии просто классов, а папку Model для простых и ORM моделей.
    Вам надо логику перемещать в простые классы, которые следует создавать по соображениям сущности, которую реализует класс. Тогда будет иерархия классов, взаимодействие объектов, а в контроллере просто их вызов.

    Еще раз, главный посыл - модель это не только доступ в БД. :)

    В модели БД можно выносить кастомные sql запросы или какую-то пред или пост обработку данных.

    Почитайте про ООП и Паттерны.

    UPD.

    Отрефакторил код. Написал бы как-то так. У вас запутно все. У меня проще.
    <?php
    
    defined('SYSPATH') or die('No direct script access.');
    
    class Controller_Products extends Controller_Base
    {
    
        public function action_index()
        {
            // пагинация
            $count      = ORM::factory('product')->count_all();
            $pagination = Pagination::factory(array('total_items' => $count));
            $products   = ORM::factory('product')
                    ->limit($pagination->items_per_page)
                    ->offset($pagination->offset)
                    ->find_all();
    
            $content = View::factory('prodAll')
                    ->set('products', $products);
    
            //используется в шаблоне?
            $content->pagination = $pagination;
    
            $this->template->title       = 'Все товары';
            $this->template->description = 'Список всех товаров';
            $this->template->content     = $content;
        }
    
        public function action_cart()
        {
    
            $content = View::factory('cartView');
    
            $content->inCart = FALSE;
            $content->inCart = $this->session->get('product2');
    
            $this->template->title       = 'Корзина покупок';
            $this->template->description = 'Список ваших товаров';
            $this->template->content     = $content;
        }
    
        public function action_product()
        {
            //узнаем id материала
            $id   = $this->request->param('id');
            $post = $this->request->post();
    
            // получаем данные из таблицы "products"
            $product = ORM::factory('product', $id);
            $content = View::factory('prodView')
                    ->set('product', $product);
    
            $this->template->title   = $product->title;
            $this->template->content = $content;
            $content->inCart         = FALSE;
    
            if (isset($post['Submit'])) {
                $this->processOrder($post, $product);
    
                Controller::redirect('main/ordered');
            }
    
            if (isset($post['InCart'])) {
                $this->session->set('product2', $product->name);
            }
        }
    
        /**
         * 
         * @param array $post
         * @param Model_Product $product
         */
        protected function processOrder($post, $product)
        {
            $clientName   = Arr::get($post, 'Name', '');
            $clientPhone  = Arr::get($post, 'Phone', '');
            $clientAdress = Arr::get($post, 'Adress', '');
            $orderNumber  = Arr::get($post, 'Number', '');
    
            $post = array(
                'name'          => $product->name,
                'number'        => $orderNumber,
                'url'           => $product->url,
                'client_name'   => $clientName,
                'client_phone'  => $clientPhone,
                'client_adress' => $clientAdress
            );
    
            ORM::factory('order')
                    ->values($post)
                    ->save();
        }
    
    }
    Ответ написан
    7 комментариев
  • Что почитать или посмотреть на предмет логики программирования?

    Книги:

    PHP. Объекты, шаблоны и методики программирования 2-е издание — Мэтт Зандстра
    PHP. Объекты, шаблоны и методики программирования 3-е издание — Мэтт Зандстра
    Приемы объектно-ориентированного проектирования. Паттерны проектирования -
    Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
    Рефакторинг. Улучшение существующего кода — Мартин Фаулер
    Человеческий фактор: успешные проекты и команды — Том Демарко, Тимоти Листер
    Мифический человеко-месяц или Как создаются программные системы — Фредерик Брукс
    Факты и заблуждения профессионального программирования — Гласс Роберт
    Чистый код. Создание, анализ и рефакторинг — Роберт Мартин
    Zend Framework 2.0. Разработка веб-приложений — Кришна Шасанкар


    Читаю сейчас:
    Применение UML 2.0 и шаблонов проектирования. Введение в объектно-ориентированный анализ, проектирование и итеративную разработку — Крэг Ларман
    Совершенный код — Стив Макконнелл

    seyferseed.ru/life/projdennye-kursy-i-prochitannye...
    Ответ написан
    Комментировать
  • Что почитать по общей концепции программирования?

    Книги:

    PHP. Объекты, шаблоны и методики программирования 2-е издание — Мэтт Зандстра
    PHP. Объекты, шаблоны и методики программирования 3-е издание — Мэтт Зандстра
    Приемы объектно-ориентированного проектирования. Паттерны проектирования -
    Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
    Рефакторинг. Улучшение существующего кода — Мартин Фаулер
    Человеческий фактор: успешные проекты и команды — Том Демарко, Тимоти Листер
    Мифический человеко-месяц или Как создаются программные системы — Фредерик Брукс
    Факты и заблуждения профессионального программирования — Гласс Роберт
    Чистый код. Создание, анализ и рефакторинг — Роберт Мартин
    Zend Framework 2.0. Разработка веб-приложений — Кришна Шасанкар


    Читаю сейчас:
    Применение UML 2.0 и шаблонов проектирования. Введение в объектно-ориентированный анализ, проектирование и итеративную разработку — Крэг Ларман
    Совершенный код — Стив Макконнелл

    seyferseed.ru/life/projdennye-kursy-i-prochitannye...
    Ответ написан
    Комментировать