• Как вы освоили шаблоны проектирования?

    27cm
    @27cm
    TODO: Написать статус
    Вот вам 12 маленьких задач на 12 паттернов:
    github.com/zfcampus/zendcon-design-patterns

    1. Открываете папку с паттерном.
    2. Читаете README.md с описание задачи.
    3. Открываете exercise.php и пытаетесь решить задачу, применив соответствующий паттерн.
    4. При необходимости вспоминаете теорию: github.com/domnikl/DesignPatternsPHP
    5. Сверяетесь с решением в solution.php.
    Ответ написан
    7 комментариев
  • Какой выбрать самоучитель по Ruby on Rails?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Комментировать
  • Как в Bootstrap3 Navbar выровнять кнопку с отступом от правого края в 2 столбца?

    m5web
    @m5web
    Python, js
    Замени offset на push
    col-md-push-2
    Если используешь less, то mixin будет выглядеть так:
    .your-class {
        .make-md-column-push(2);
    }


    <div class="col-md-2 col-md-push-2">
      <form class="navbar-form navbar-right">
        <button type="button" class="btn btn-custom">Личный кабинет</button>
      </form>  
    </div>
    Ответ написан
    4 комментария
  • Много DIV по 3 в строку - как таблицой?

    master2016
    @master2016
    Всё нормально.
    Ребятки, ну не извращайтесь. Табличные данные верстайте таблицами.
    Ответ написан
  • AngularJS. Он меня или я его?

    @dixoNich
    frontend developer
    Во-первых: оформите код так, как надо.
    Во-вторых: Вы не понимаете основного принципа JavaScript - асинхронности. Так что вам рано использовать angular.
    В функции run у Вас выполняется запрос на сервер, он асинхронный, и когда инициализируется контроллер, $rootScope.profile не существует.

    Чтобы всё это работало... Сомневаюсь, что вы поймёте, но всё же:
    Если хотите получить данные в контроллере до его загрузки, то у роутинга есть свойство resolve. Почитайте об этом.

    AngularJS прелоад,как запилить?
    Ответ написан
    4 комментария
  • Comet (php + js + mysql). Как реализовать мгновенные сообщения?

    vanilich
    @vanilich Автор вопроса
    Всем спасибо за ответы. Прочитал про node.js и socket.io. Заинтересовало. Скачал, установил, поигрался - понравилось. Думаю для моей задачи в самый раз.
    Если говорить ближе к реализации, то сделаю вот так:
    • id - первичный ключ пользователя из бд
    • socket.id - id клиента, который выдает node.js

    1. При подключении клиента к серверу, буду проверять его сессию и забирать его id из таблицы. Id и socket.id буду запоминать в массиве вида:
    clients[id] = socket.id
    2. Создам обработчик, аля "onClientSendMessage", где буду проверять кому отправляется сообщение.
    3. Если человек, которому принадлежит отправленное сообщение, в данные момент подключен к серверу node.js, то заберу его socket.id из массива clients по ключу "id", и соответственно отправлю ему сообщение.
    io.sockets.socket(socket.id).emit('newMessage', message_data);

    4. Если человек не подключен к серверу, то просто сохраняю сообщение в базе.
    5. Если клиент разорвал соединение, то удалю его из массива clients.
    Вроде так... Всем спасибо.
    Ответ написан
    Комментировать
  • А как подставлять переменную в директиву?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    функция отрабатывает до compile директивы, так что значения еще не интерполированы. Что вы можете сделать, так это воспользоваться директивой ng-include.

    return {
        template: '<ng-include src="templateUrl"></ng-include>',
        scope: {},
        link: function (scope, el, attr) {
            attr.templateUrl.$observe(); // логика изменения переменной.
        }
    }
    Ответ написан
    2 комментария
  • Нужно ли делать фильтр для коллекции в Angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    но тогда у полозователя не будет возможности сделать что-то самому


    Я уже вам написал в комментариях к другому вопросу но продублирую. Когда пользователь выбирает какой-то другой вариант сортировки или фильтрации, мы просто уведомляем контроллер об этом. Тот уже будет просить сервисы что бы тот предоставил данные согласно нашим новым условиям. Сервис все это сделает и вернет нам данные в контроллер. Мы чуть чуть может еще подготовим данные под наше представление и выплюнем во view (по сути данные попадают в $scope). Далее за счет дата биндинга view реагирует на изменение состояния данных и подстраивается под них согласно вашему описанию (все эти ng-repeat и т.д. Не спроста шаблоны в ангуляре называют декларативными).

    Это собвенно и есть MVC, при таком подходе нашему view будет глубоко плевать на реализацию фильтрации, а нашей модели (логике по работе с данными) плевать на то как эти данные выводятся. А контроллер будет лишь посредником который будет знать как эти два слоя связываются друг с дружкой.

    updated

    Решил сделать пример, на который буду ссылаться дальше:

    Пример

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

    Давайте представим что мы мысленно раздели наше приложение на два слоя: слой который работает с данными (M), и слой который занимается отображением этих данных пользователю (V), ну и посовместительству хэндлит взаимодействие пользователя с этим view (формы например).

    Что бы упростить поддержку системы, нам надо снизить связанность этих двух слоев, сделав их максимально независимыми. Что бы изменения в одном слое не вызывали особой необходимости менять что-то в другом. Для этого мы вводим промежуточный слой - контроллеры (С). Это по сути и есть основная идея MVC. Разделяй и властвуй.

    Теперь давайте задумаемся. Вот вы делаете каталог товаров по схеме аля "загружаем все данные на клиент и там все фильтруем". И все идет хорошо, мы быстро все запилили и вот данных становится уже сильно много. Настолько много что приложение начинает пидалить или же просто загрузка всех данных занимает чудовищно много времени. И вот вы приняли решение о том что фильтрация теперь будет происходить на сервере, а вы будете загружать только то что нужно сейчас.

    Если у вас работа с данными уже была разделена сделать это не составит проблем. Мы просто поменяем наш ProductCatalog и заменим там методы на нужные нам. View от этого не поменяется ни сколички. Более того мы можем спокойно покрыть этот функционал быстрыми юнит тестами.

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

    Словом, нужно соблюдать баланс. Иногда такие решения более чем оправданы.

    Но вернемся к реалиям anuglar-а. Дело в том что когда вы используете фильтры в шаблонах, они будут дергаться на КАЖДЫЙ $digest цикл, так работает дата биндинг. То есть при относительно небольшом объеме данных у нас приложение уже будет жутко педалить. Потому использовать фильтры с коллекциями в шаблонах простительно только если вы на 100% уверены что данных пока будет мало, а потом можно будет переделать.

    Как-то так. Поскольку у вас есть возможность использовать ангуляровские фильтры внутри сервисов или контроллеров, "экономный" вариант будет занимать не больше времени разработки и поддерживать такой код будет проще.
    Ответ написан
    8 комментариев
  • Как подойти к серьезной web-разработке будучи специалистом в 1С, SQL (+ немного html, css, js)?

    Phizio
    @Phizio
    Главное - выбрать четкий вектор и не разбрасываться.
    По своему опыту знаю - когда хочется что-то изучить - это получается на "одном дыхании".
    Багаж знаний у вас неплохой, вполне реально с таким базисом зарабатывать стабильные 1000$ в мес. на фрилансе (без преувеличения). Поверьте, фриланс быстро перерастает в 3-5 постоянных крупных клиентов и серьезные заказы. Но всегда параллельно надо учиться, и повышать планку. Устройство в веб-студию принесет вам больше рутины, меньше денег, и (возможно) не будет хватать времени на самообучение в том направлении, в котором хочется (придется в то направление, которое скажут). Тут уже взвешивайте. Я в свое время не пошел в одну студию, сейчас только рад, что принял такое решение. На себя работать лучше: больше свободы, мотивации и развития.
    Ответ написан
    2 комментария
  • Освоение JS. Быстрый старт?

    @Sashjkeee
    f-e
    Да вы издеваетесь? Никак. Какой вам JS, если вы даже поиском пользоваться не умеете?
    За 8 часов уже третий такой вопрос.

    Как изучить JavaScript?
    С чего начать изучение JavaScript?
    Ответ написан
    3 комментария
  • Лучшая IDE для PHP, HTML5, CSS для Mac OS X?

    На macos пользовался phpstorm. Потом работал с ubuntu, сейчас на windows - везде пользуюсь этим замечательным продуктом от jetbrains
    https://www.jetbrains.com/phpstorm/
    Ответ написан
  • Как вы производите запись видео с экрана ПК?

    toxicdream
    @toxicdream
    Дружелюбный и доверчивый социопат
    Open Broadcaster Software
    Но куча настроек и может иногда глючить при неправильных настройках.
    Ответ написан
    1 комментарий
  • PHP+Symfony или Ruby+RoR?

    viktorvsk
    @viktorvsk
    Для обучения у руби и рельс, на мой взгляд, есть неоспоримый плюс.
    Вот то, что называют порогом входа (я, признаться, не особо понимаю это), мне кажется, играет злую штуку. Например, на руби и рельсах Вы не сможете за 2 часа сделать сайт-визитку, отдать ее заказчику, получить деньги и расслабиться, считая себя крутым разработчиком.

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

    Например, что бы начать с ним работать вообще - нужны *nix. Можно, конечно, продолжать юзать виндовс, но пользоваться виртуальными машинами, но это тоже - шаг вперед перед пхп с его денвером и т.д.

    Далее, что б установить интерпретатор, в 95% случаев вы поставите менеджер версий языка (rvm или rbenv), что уже много лучше, чем глобальная установка.

    Что бы запустить свой первый проект, Вам понадобится менеджер пакетов - что лучше, чем качать zip архивы и распаковывать в нужную директорию.

    Что б скачать некоторые пакеты, нужен будет гит, что само по себе очень круто.

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

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

    Вот вы ее сделали, используюя архитектуру рельс и хоть какое-то понимание раздления кода, роутинга, хелперов и т.д.

    Дальше, нужно ж как-то показать заказчику результат? Самым первым вариантом, скорее всего, вы познакомитесь с Хероку - PaaS сервис вещь тоже довольно полезная.

    Но вскоре вы поймете, что он вас не очень устраивает. И попробуете разместить сайт-визитку на хостинге.

    Здесь Вам придется познакомиться с ВПС, базовой настройкой линукса, юникс-сокетами, понятиями работы различных веб-серверов

    Но вот Вы настроили свой сервер. Надо залить туда свой код. В руби Вам будет очень сложно пойти путем "использования ФТП плагинов в редакторе кода" - как-никак, а придется познакомиться с техниками нормального деплоя.

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

    Безусловно, весь этот процесс можно проводить на любом языке - где-то чуть проще, где-то чуть лучше. Но если в пхп можно обойтись без этого и долгое время даже не представлять, что можно деплоить код безопасно, с автоматическим откатом назад, если что-то пошло не так, да еще и с нулевым даунтаймом, то в руби вам придется сделать это сразу.
    Ответ написан
    4 комментария
  • Разработка на Mac?

    @ADOLF88HITLER
    Вот хинт ещё, если будете пользоваться Terminal.app: можно поставить курсор в любое место строки, кликнув с зажатым альтом.
    Ответ написан
    2 комментария