Пишу про разработку вообще и в частности про: JavaScript, HTML5, CSS3, AngularJS, ReactJS, Agile, Bitcoins

Быстрое создание REST API сервера на Slim фреймворк

Не буду объяснять причину необходимости API сервера, тем более что если вам знакомы такие слова как REST и Slim фреймворк, то вы абсолютно точно знаете зачем вам API.

Slim – это микро фреймворк позволяющий, однако, выполнять все основные задачи. “Микро” в первую очередь означает, что фреймворк дает базовые инструменты, вся кастомизация уже зависит от разработчика. Никакой работы с базами данных, никаких обработчиков форм, никакой встроенной аутентификации, только запросы и только ответ. Вот список возможностей фреймворка:

  • Powerful router
  • Template rendering with custom views
  • Flash messages
  • Secure cookies with AES-256 encryption
  • HTTP caching
  • Logging with custom log writers
  • Error handling and debugging
  • Middleware and hook architecture
  • Simple configuration

При этом разумеется, что все недостающие модули можно будет прикрутить позже. Я только хотел сказать, что они не входят в стандартную коробку Slim.

Если вам нужно более комплексное решение, то настоятельно рекомендую посмотреть в сторону laravel framework – это потрясающий фреймворк, который удобен практически во всем. Мне он очень нравится и я определенно буду о нем еще не раз писать.

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

Важно – проверьте, что у вас установлен и работает rewrite_mod, без него будет не то.

Основные элементы файла index.php, который запускает фреймворк:

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

  1. Принимать код верификации со стороны клиента, проверять его и выдавать ответ.
  2. Выдавать список товаров для отображения в приложении.
  3. Выдавать ответ открыта ли еще сессия.
  4. Принимать заказанные товары и выдавать ответ обработан ли заказ.

В этой статье я не буду уделять внимание верификации запроса, уделим этому внимание в следующий раз.

Вот и все – серверная часть готова к тестированию.

Ссылки по теме:
http://www.slimframework.com/
REpresentational State Transfer
Status Code Definitions

Поделиться:

Проблема картинок в мобильных веб приложениях.

Практика показала, что использование картинок в мобильных веб приложениях чревато неожиданными проблемами. Дело прежде всего в том, что мобильные смартфоны имеют настолько разные экраны, что просто хоть стой хоть падай. Разрешение варьируется от 320 до 1300 пикселей по горизонтали и это порой не предел. Из этого вытекают сложности с подбором картинок. Слишком маленькие картинки на больших экранах будут ужасно смотреться, а слишком большие будут “кушать” лишний траффик.

Тут хоть статистический анализ проводи. На каких экранах больше показывается, под тех и подстраиваемся. 🙂

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

Слева PNG картинка в разрешении 320 пикселей справа та же картинка, как она бы выглядела в более высоком разрешении.

SVG-example-png SVG-example-png-bad

Как вариант решения – можно использовать векторный формат SVG. SVG – это векторный формат, который умеют отображать браузеры. Поскольку речь идет о векторе, то с этим связанно его очевидное преимущество – он не теряет качества при изменении размера. Подводные камни (как же без них) тут следующие – старые версии андроида не поддерживают этот формат в полной мере. Подробнее можно ознакомиться вот тут:

SVG-support-2014-Aug-29

Однако, насколько, показала практика простые векторные фигуры рендеряться без проблем. То есть если не экспериментировать с анимацией, а просто работать с графикой для интерфейсов, то это может быть прекрасной заменой для картинок.

Ссылки по теме:
SVG support on Android, current status

Поделиться:

В каких проектах использовать Angular?

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

Задачи делать полностью респонсивный интерфейс не стояло. То есть мобильные телефоны можно было оставить в покое. С одной стороны жаль – комплексные задачи, они зачастую интереснее обычных. Однако, и багов в них побольше может оказаться.

В целом дизайн основного экрана должен был иметь вот такие основные элементы:

main-screen-angular-app

Мы решили в этом проекте использовать Ангулар. Прежде всего его решение по связке данных облегчает жизнь просто невероятным образом. Выдача списка продуктов и привязка его к тем, что клиенты уже выбрал может быть достаточно болезненным. Ошибки и их отладка потом может съесть огромное количество времени.

Или ваши программисты не совершают ошибок и их код потом легко читается? Если да, то я с удовольствием отправлю к вам несколько своих знакомых на мастер-класс 🙂

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

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

Но вернемся к нашему приложению.

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

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

Поделиться:

Геометрические фигуры при помощи CSS

При помощи CSS можно создавать интересные геометрические фигуры, это уже давно не только инструмент оформления. Если с практической точки зрения сложно придумать назначение для этих приемов, то с визуальной это достаточно интересно.

В любом случае стоит обратить внимание, что работа с CSS зачастую связанна с геометрическими объектами и как следствие с матиматическими вычислениями. Если кого-то это пугает, то он можно продолжить заниматься простыми оформлениями сайтов. Не то что бы я имею что-то против таких сайтов – просто на мой взгляд веб разработка это нечто большее.

Итак геометрические фигуры при помощи CSS

Круг

See the Pen CSS shapes – circle by Artem Demo (@artemdemo) on CodePen.

Шести-лучевая звезда

See the Pen BtFuA by Artem Demo (@artemdemo) on CodePen.

Пяти-лучевая звезда

See the Pen CSS shapes – star 5 points by Artem Demo (@artemdemo) on CodePen.

Сердце

See the Pen CSS shape – heart by Artem Demo (@artemdemo) on CodePen.

Инь Янь

See the Pen CSS shapes – yin-yang by Artem Demo (@artemdemo) on CodePen.

Увеличительное стекло

See the Pen CSS shapes – Magnifying Glass by Artem Demo (@artemdemo) on CodePen.

Зачастую наши возможности ограничиваются только нашей фантазией 🙂

Поделиться:

Google Chrome хранит кэш как зеницу ока

Google Chrome хранить кэш как зеницу ока – он расстанется с ним только в самом принудительном порядке. Это особенно касается всего что связанно с изменением в файле .htaccess – Если что-то никак не включается или не выключается, то вполне возможно что вы простой забули почистить кэш!

Особенно обиден тот факт, что понимаешь это только по истечении часа (или нескольких часов?) копания в интернете и перезагрузок сервера (ну чем черт не шутит)

Обидно? Да не то слово 🙂 Но в этом и есть наверное суть работо программиста – нэ отчаиваться и идти дальше. Ну и конечно делать бэкапы! )

Поделиться:

Разница между библиотеками раутинга route и ui-route в ангулар

Сразу предупреждаю, что этот материал не совсем для новичков, но, как говорится “не може молчать” 🙂 Вопрос раутинга важен и особенно остро стоит, когда не понятно почему есть две популярные библиотеки с сильно отличающимся подходом. При том что в Ionic по умолчанию встроена именно нестандартная библиотека. Не будут же эти ребята заниматься глупостями? значит нужно разбираться.

В ангулар есть 2 библиотеки дающие инструменты для управления раутингом – проще говоря переходом между страницами вашего приложения. Первая библиотека это Route, она идет в стандартном пакете ангулара и ее можно скачать с официального сайта. Вторая библотека это ui-route – она разрабатывается сторонними энтузиастами и не входит в официальный пакет, что не мешает ей быть популярной.

Основное понятие, которым оперирует ui-route это State, у route это Route.

States Routes
State оперирует конкретным местом в приложении
Иерархическая зависимость – у любого состояния могут быть “дети”
Каждому state дается имя, по которому к нему можно будет обратиться
Навигация по имени или по URL
Множество отображений контента ui-view
Route оперирует адресом URL
Одноуровневая зависимость
Имя route это его URL
Навигация только по URL
Только одно отображение ng-view

 
Если вы только начинаете работать с ангулар, то разумеется что самым правильным решением будет изучить стандартную библиотеку route. С ней вы все-таки будете сталкиваться чаще, а в свободное время экспериментов можно посмотреть в сторонy ui-route.

В конечном итоге для себя я решил, что стоит попробовать и то и другое и работать с тем что удобнее 🙂

Ссылки по теме:
https://docs.angularjs.org/api/ngRoute/service/$route
http://angular-ui.github.io/ui-router/site/
Tim Kindberg on Angular UI-Router

Поделиться:

Как группировать стили в CSS

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

Приведу живой пример. Скажем у вас есть несколько стилей, которые так или иначе отвечают за цвет объекта. Все они начинаются со слова “color-“, например color-header, color-footer.

Теперь если вам необходимо добавить всем этим стилям так же тень, то нет необходимости объединать их в одну группу, вы можете просто добавить стиль по маске имени класса:

Стоит отметить что существует так же новые возможности по выбору элементов относительно аттрибутов тега: href, type, data-* и т.п. Лично мне этот подход не очнь нравится такъ как атрибуты предназначрно больше для передачи инфорамации, а не для определения оформления элемента. Однако, вы впоне можете использовать лживой удобный для вас метод.

Поделиться:

В чем разница между сервисом и фактори в ангулар – Service vs Factory in AngularJS

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

Однако, стоит упомянуть несколько моментов.

Пример factory из официальной документации ангулар:

Ссылки по теме:
AngularJS Factory vs. Service (видео)(англ.)
Confused about service vs factory (англ.)
Angular.js: service vs provider vs factory? (англ.)

Поделиться:

Введение в обещания в ангулар – promises в AngularJS

Эта статья написана под впечатлением и на основе вот этого видео (англ.) Настоятельно рекомендую посмотреть всем. А тут я приведу выжимку информации – только самое ценное.

Обещания в ангулар (лично я предпочитаю использовать слово promise) это очень эффективная методика для того чтобы связать в одну цепочку результаты разных, но зависящих друг от друга запросов.

Например:

Обещание всегда возвращает что-то – это может быть либо значение, либо состояние (например испешен ли былъ запрос, либо провален).

Как Angular использует обещания:

Как объявить свое обещание в ангуларе

Еще один пример объявления своего обещания

Promise API – цепочка обещаний

Одна из прекрасных возможностей функции then() это то что она сама возвращает обещание. Это значит, что если у нас есть несколько функций, которые должны будут вызваны после ответа от стороннего API. То это можно сделать следующим образом:

Если упростить, то цепочка будет выглядеть вот так:

step1.
then(step2).
then(step3).
then(step4)

Либо вот так:

as1 = step1();
as2 = as1.then(step2);
as3 = as2.then(step3);
as4 = as3.then(step4);

Если подойти к вопросу абстрактно, то о promise можно думать как о письме, которое должно быть доставлено. В этом случае deferred – это почтальон, который занимается доставкой вашего письма.

Пример factory, которая содержит все перечесленное раннее:

https://gist.github.com/blin86/10933410#file-promise-sample-js

Сайлки по теме:
http://www.slideshare.net/xmlilley/postal-for-promises-20-min

Поделиться:

Иконочные шрифты

Никогда не было так просто достать иконочные шрифты как сейчас. Есть огрмоное количество дизайнеров, которые не жалеют своих сил и таланта для того чтобы выпускать абсолютно бесплатные и доступные для всех шрифты. Если слова “абсолютно доступные” наводят на мысль, что цена на них невысока, то это не так – все гораздо лучше, эти шрифты абсолютно бусплатные.

Glyphicons как часть Bootstrap

http://getbootstrap.com/components/
http://glyphicons.com/

Очень распространенный (главным образом засчет популярности bootstrap) шрифт. Приятный, хоть и небольшой набор иконок. На вкус и цвет товарищей нет, поэтому говорить о том насколько он подходит для разных проектов сложно. Хотя добавлю от себя что у иконок достаточно много острых углов, что мне не очень нравится.

bootstrap-icons

 

Font Awesome

http://fontawesome.io/icons/

Один из самых богатых шрифтов, которые мне приходилось видеть. Есть почти все – от иконок соц сетей, до типографических и топографических знаков 🙂 Удовлетворяет самым изысканным запросам. В последних версиях включает так же вращающиеся иконки, вроде ожидания и т.п., что с распространением CSS3 становаится все актуальнее.

font-awesome

 

ionicons

http://ionicons.com/

Очень интересный набор легких (с точки зрения дизайна и внешнего вида) иконок в стиле последнего дизайна iOS. Это первый шрифт в котором я встретил вращающийеся иконки, хотя вполне возможно и не они первые стали это массово применять.

ionicons

 

Fontello

http://fontello.com/

Ну и на последок – самое интересное – микшер. Мощный инструмент, который позволяет выбрать нужные иконки из разных шрифтов и объединить их в ожном файле, а не отправлять пользователю каждый раз несколько файлов со шрифтами, в которых в любом случае используется только часть. Пользователю в принципе без разницы, но зачем бессмысленно увеличивать размер запросов и передаваемых файлов?

Поделиться: