• Всё идёт по плану? Планирование в Битрикс24

      Путешествовать можно налегке, без планов, карт, запасов еды и воды. Обеспечивать себя этим по дороге, тратить время, деньги и нервы, если вдруг сбились с пути. Но с картой и запасами проще, безопаснее и с гораздо меньшими расходами на непредвиденные обстоятельства. А у вашего бизнеса есть карта, запасы ресурсов, распределённая нагрузка? Проще говоря, как у вас с планированием?



      Хаотичное движение к конечной цели всегда отнимает больше сил и времени, чем чётко запланированные шаги. Недаром сегодня ни одна CRM, ERP и даже ни один багтрекер не обходятся без модуля планирования времени, дел и задач. Команда экспертов Битрикс24 собрала краткую историю болезни компаний, живущих вне плана, и разработала методику лечения.
      Читать дальше →
      • +4
      • 14.5k
      • 8
    • Теория ограничений в интерфейсах (кто убил старого графа?)

        Привет, меня зовут Александр Волков, я проектирую интерфейсы в компании Docsvision. Цель этой статьи — помощь разработчикам сложных программных продуктов. Ключевое слово — сложных. Спроектировать сайт-визитку сегодня может даже пятиклассник прямо на своем смартфоне, и при желании можно скачать зип-архив с готовым шаблоном блога или корпоративного сайта. Однако если ваше приложение посложнее обычного интернет-магазина, то, вполне вероятно, строить структуру и определять принципы навигации вам придется самостоятельно, наступая на разбросанные повсюду грабли. Здесь может пригодиться наш опыт. Я опишу один из возможных способов проектирования интерфейсов, который успешно опробован в нашей компании. Это делается легко и просто (практически в полуавтоматическом режиме) при помощи программы FlyingLogic.
        Читать дальше →
      • Опыт Angular + Typescript + Offline SPA проекта через год

        imageХочу поделиться своим небольшом положительном опытом об проекте основанном на Angular + Typescript по прошествии года. Это далеко не новая связка, и я уверен, что уже многие её успешно используют. Конечно, уже многие ждут больше статей об React или Angular 2.0, но мне кажется, и этот опыт будет кому-то полезен.
        Читать дальше →
      • Angular 2 против React: И будет кровь

          (перевод, оригинал статьи)

          Angular 2 достиг беты и имеет все шансы сорвать лавры топового фреймворка в 2016 году. Время разборок. Давайте посмотрим, что он может противопоставить React, душечке из 2015 года.

          Disclaimer: Я работал с первым Angular, но переключился на React в 2015 году. Я опубликовал Полный курс React и Flux. Так что да, я предвзят. Но я буду атаковать обе стороны.

          Хорошо, пора начинать. И будет кровь.


          Читать дальше →
        • Flux в картинках

          • Translation
          • Tutorial
          Нам в Хекслете нравится ReactJS и Flux. Нам кажется, что это правильное направления развития. Мы любим функциональное программирование и чистые функции, и когда сложные архитектуры упрощаются за счет подходов, связанных с ними — это круто. По Реакту уже есть немало ресурсов в интернете, в том числе наш практический курс по React JS. Последний урок в этом курсе называется «Однонаправленное распространение данных», и там мы подходим к интересной теме, которая лежит в основе архитектуры Flux.

          Flux это паттерн распространения даных в приложении. Flux и React выросли в стенах Фейсбука вместе. Многие используют их одновременно, но ничто не мешает использовать их по отдельности. Они были созданы для решения конкретной проблемы в Фейсбуке.

          Мы используем React и Flux в своей браузерной среде разработки Hexlet IDE (она в опен-сорсе), в которой учащиеся выполняют практические задания. Flux одновременно очень популярен и очень непонятен для многих в мире веба. Сегодняшний перевод — попытка объяснить Flux на пальцах (ну, то есть картинках).

          Проблема


          Вначале нужно понять, какую проблему решает Flux.


          Читать дальше →
        • Как я перестал беспокоиться и полюбил React

          Предлагаю читателям «Хабрахабра» перевод статьи «How I learned to stop worrying and love React».

          Если вы спросите меня, что я думал о React два месяца назад, я бы сказал…
          Где мои шаблоны? Что этот сумасшедший HTML делает в моем JavaScript? JSX выглядит странно! Скорее! Сжечь это!



          Это потому, что я его не понял.

          Но я уверяю, React — это определенно правильный путь. Пожалуйста, выслушайте меня.
          Читать дальше →
        • 50+ лучших дополнений к Bootstrap



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

            Для статьи я подобрал наиболее полезные дополнения «на все случаи жизни».
            Читать дальше →
          • SaltStack: Предварительная генерация паролей для использования в сервисах

            • Tutorial
            О чем статья?

            Короткая статейка о том, как сгенерировать пароли необходимые для разнообразных сервисов автоматически устанавливаемых с помощью SaltStack.
            Читать дальше →
          • AngularJS и ReactJS или как сделать ваше приложение быстрее

              Современный мир программирования, а особенно веб и javascript уже давно не тот и имеет очень большое количество инструментов для той или иной задачи. В сегодняшнем посте я хотел бы рассказать как скрестить мощь AngularJS и молниеносность отображения view – Facebook React.

              Всем известно, что когда мы генерируем коллекцию во view через Angular, то каждый элемент этой коллекции становится observable. Я конечно понимаю и знаю что есть определенный набор библиотек и решений как это обойти, но сегодня речь не об этом. Что же дает нам React? Ну одно из его преимуществ, это jsx синтаксис, который есть не что иным как html в javascript. Также есть возможность создавать reusable компоненты, наследовать их и использовать всю мощь что позволяет делать эта библиотека. Что же приступим.
              Читать дальше →
            • WebSocket чат на symfony2 в 100 строк

                Привет Хабр!
                Недавно я разработал чат на вебсокетах для своего сервиса http://internetsms.org/chat.
                При реализации, я столкнулся с тем, что в интернете большинство чатов сделаны с использованием повторяющихся ajax запросов, которые проверяют новые сообщения по заданному промежутку времени. Такой подход для меня был неприемлем, т.к при наплыве пользователей, нагрузка на сервер вырастет экспоненциально. На самом деле, есть более интересные варианты реализации:
                Long polling
                Клиент отправляет на сервер «долгий» запрос, и при наличии изменений, сервер отправляет ответ. Таким образом, число запросов снижается. Кстати, эта технология используется в Gmail.
                Web sockets
                В html5 появилась встроенная возможность использовать WebSocket соединения. Парадигма запрос-ответ здесь вообще не используется. Между клиентом и сервером один раз устанавливается канал связи. На сервере работает один демон, который обрабатывает входящие соединения. Таким образом, нагрузки на сервер практически нет даже при большом количестве пользователей онлайн.
                Читать дальше →
              • Делаем вебсокеты на PHP с нуля

                Некоторое время назад я выбирал библиотеку для работы с вебсокетами. На просторах интернета я натыкался на статьи по интеграции node.js с yii, а почти все статьи о вебсокетах на хабре ограничивались инструкциями к тому, как использовать phpdaemon.

                Я изучал библиотеки phpdaemon и ratchet, они достаточно монструозны (причём используя ratchet для отправки сообщения конкретному пользователю рекомендовано дополнительно использовать wamp). Мне не совсем было понятно для чего использовать таких монстров, которые требуют установку других монстров. Почитав исходники этих, а также других библиотек, я разобрался как всё устроено и мне захотелось написать простой вебсокет-сервер на php самостоятельно. Это помогло мне закрепить изученный материал и наткнуться на некоторые подводные камни, о которых я не имел представления.

                Так я решил написать необходимый для меня функционал с нуля.

                Получившийся код и ссылка на демонстрационный чат в конце статьи.
                Читать дальше →
              • Angular Light. Управляем декларативным биндингом данных в HTML

                  В angular есть 2 инструмента вывода информации в DOM — это директивы и декларативный биндинг данных в HTML {{model}}.
                  В то время когда директивы обладают большими возможностями, декларативный биндинг немного ограничен, он делает $watch на модель с возможностью вызвать фильтры и по большому счету — все. А хотелось бы больше гибкости.

                  Например если посмотреть на библиотеку bindonce для Angular.js, основная идея — это разовый вывод информации без использования $watch.
                  И для того что-б её можно было использовать в любом месте, для любого атрибута, разработчик сделал ряд отдельных директив: bo-text, bo-href-i, bo-href, bo-src-i, bo-src, bo-class, bo-alt, bo-title, bo-id, bo-style, bo-value, bo-attr и bo-attr-foo. Но по сути, все они делают одно и тоже и по логике это должна быть одна директива.
                  Так же это отклоняется от декларативного биндинга данных, задуманного в Angular.js, т.е. вместо
                  <a href="{{link}}">{{name}}</a>
                  
                  нужно писать
                  <a bo-href-i="{{link}}" bo-text="name"></a>
                  
                  Т.е. для чего был придуман декларативный биндинг данных, в этой ситуации не работает.

                  Поэтому появилась идея реализовать директивы для декларативного биндинга данных.
                  Как это работает в Angular Light — просто нужно указать имя директивы и перед этим поставить знак "#", т.е. вместо {{model}} будет {{#directive model}}.
                  Бесполезный, но простой пример счетчика:
                  <div al-app>
                      counter {{#counter model}}
                  </div>
                  
                  Делаем биндинг «model» и подключаем директиву «counter», для простоты я опустил использование «model» в данной директиве:
                  alight.text.counter = function(callback, expression, scope, env) {
                      var n = 0;
                      setInterval(function(){
                          n++;
                          callback(n)  // set result
                          scope.$scan()  // $digest
                      }, 1000);
                  }
                  
                  Читать дальше →
                • Текстовые сообщения SIP/SIMPLE в Asterisk

                  Во время очередной телефонизации очередного офиса я обратил внимание на то, что в выбранном нами софтфоне MicroSIP имеется некий встроенный «чат», который однако же не работает «из коробки».

                  image

                  Для пересылки сообщений эта программа использует метод SIP MESSAGE (RFC 3428), известный также как протокол SIMPLE.

                  В Asterisk его поддержка появилась в версии 10, но документация тут, как это часто бывает, сильно отстала от прогресса. Пришлось сначала долго искать по форумам различные варианты конфигурации, а потом методом проб и ошибок их испытывать.

                  Читать дальше →
                • Яндекс карты для angular.js

                  image

                  Приветствую всех, уважаемые харбажители!
                  В данном посте речь идет о том, как подружить карты яндекса и javascript framework angular.js для их совместной работы. Можно, конечно, использовать и google map, но для стран СНГ их качество оставляет желать лучшего.
                  Немного погуглив, и не найдя готового решения, пришлось писать свое. Кому интересно, добро пожаловать под кат.
                  Читать дальше →
                • Новый PhpStorm 7: за пределами языка

                    PhpStorm 7: за пределами языкаСпешим сообщить о выходе PhpStorm 7 — новой версии IDE для разработки на PHP от JetBrains.

                    PhpStorm 7 позволит вам не отставать от последних изменений в PHP и других языках для веб-разработки. В этом выпуске IDE интегрирован ряд современных инструментов и предусмотрено еще больше возможностей для расширения за счет поддержки основных PHP-фреймворков.

                    В 7-й версии вас ждут многие новые фичи, а также улучшения, коснувшиеся всех подсистем продукта.

                    Давайте посмотрим, что нового в PhpStorm 7!
                    Читать дальше →
                  • Active Record против Data Mapper-а для сохранения данных

                    Эти 2 шаблона проектирования описаны в книге Мартина Фаулера «Шаблоны корпоративных приложений» и представляют собой способы работы с сохранением данных в объектно-ориентированном программировании.

                    Пример шаблона Active Record


                    class Foo
                    {
                        protected $db;
                        public $id;
                        public $bar;
                         
                        public function __construct(PDO $db)
                        {
                            $this->db = $db;
                        }
                     
                        public function do_something()
                        {
                            $this->bar .= uniqid();
                        }
                     
                        public function save()
                        {
                            if ($this->id) {
                                $sql = "UPDATE foo SET bar = :bar WHERE id = :id";
                                $statement = $this->db->prepare($sql);
                                $statement->bindParam("bar", $this->bar);
                                $statement->bindParam("id", $this->id);
                                $statement->execute();
                            }
                            else {
                                $sql = "INSERT INTO foo (bar) VALUES (:bar)";
                                $statement = $this->db->prepare($sql);
                                $statement->bindParam("bar", $this->bar);
                                $statement->execute();
                                $this->id = $this->db->lastInsertId();
                            }
                        }
                    }
                     
                    //Insert
                    $foo = new Foo($db);
                    $foo->bar = 'baz';
                    $foo->save();
                    

                    В этом упрощенном примере, дескриптор базы данных вводится в конструкторе Foo (Использование инъекции зависимостей здесь позволяет тестировать объект без использования реальной базы данных), и Foo использует его, чтобы сохранять свои данные. Do_something — просто метод-заглушка, заменяющий бизнес логику.
                    Читать дальше →
                  • Пример разработки блога на Zend Framework 2. Часть 1. ZendSkeletonApplication

                    • Tutorial
                    В последние несколько лет моя работа связана с использованием CMS Drupal, но на досуге я изучал и just for fun запускал проекты на питоновских фреймворках Django, Flask и Twisted. Сейчас я решил освоить основы двух-трех популярных PHP-фреймфорков и первыми я решил изучить Zend Framework 2 и Yii.

                    В процессе ознакомления с Zend Framework 2 я изучил туториал с официального сайта (http://framework.zend.com/manual/2.2/en/user-guide/overview.html), просмотрел документацию фреймворка (http://framework.zend.com/manual/2.2/en/index.html), прочитал книгу Michael Romer “Web development with Zend Framework 2” и собрал собственное тестовое приложение.

                    Переварив всю эту информацию, я пришел к мысли, что официальный туториал к фреймворку суховат:
                    • в нем не рассказывается о работе с пользователями, сессиями и правами доступа,
                    • лишь вскользь рассматривается такая основополагающая часть фреймворка как ServiceManager,
                    • в качестве интерфейса с базой данных безальтернативно используется паттерн Table Gateway (и соответствующая его реализация в фреймворке),
                    • используется встроенный в фреймворк шаблонизатор, который после питоновского Jinja 2 кажется совершенно неудобным и примитивным,
                    • и т.д.

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

                    В этой статье я хочу привести пример разработки простого блога, в ней будет несколько отличий от официального туториала. В первую очередь я постараюсь заострить внимание на тех вопросах, которые во время изучения показались мне недостаточно раскрытыми в официальном туториале. Кроме того я буду использовать некоторые технологии, альтернативные тем, что используются в Zend фреймворке по умолчанию:
                    • в качестве шаблонизатора будет использоваться Twig,
                    • для работы с БД — Doctrine ORM,
                    • для авторизации/аутентификации и распределения прав доступа я буду использовать существующие модули ZfcUser и BjyAuthorize,
                    • также я рассмотрю вопросы разработки собственных валидаторов форм, View плагинов и другие.

                    За деталями добро пожаловать под кат
                  • Лучшие практики AngularJS

                    • Tutorial
                    По мотивам этой трансляции.

                    Вместо предисловия скажу, что есть такой сайт yeoman.io, где собраны наиболее популярные технологии, автоматизирующие разработку фронтенда (сборку, параметризацию CSS и проч.). Обратите на него внимание в начале работы над проектом.
                    Читать дальше →