The AngularJs Promise Pattern

Или давайте наконец-то уже писать promises «человеческим» языком!

Асинхронные взаимодействия в AngularJS построены на promise. Я не хочу рассматривать в данной записи подробно теорию promise, так что, рассмотрим лучше их применение.

Все чаще в коде разработчиков встречаются использование promise. Но увы, использование оставляет желать лучшего. Не представляю от куда зародился такой «анти-паттерн», но он усердно прорастает почти в каждом коде разработчика.

Собственно, пример ниже,

Прежде чем раздуть holy war, вы конечно можете спросить — «что же тут не верно? «, собственно «почти» все верно и даже может быть приемлемо в некоторых случаях. Как видно из кода, мы стараемся разделить обработчики, абстрактные обратные вызовы и код более менее чистый. Однако, при таком подходе использования promise, мы столкнемся с некоторыми проблемами. Собственно, давайте обсудим все по порядку.

День первый: Initial code

В один пятничный день, сидя на работе и попивая чай, к Вам вдруг подбегает менеджер со словами — «Нам нужна страничка, которая сохраняет элемент, а затем переходит в другой раздел (другую страницу)».

Нет проблем, мы ведь гуру программирования и за пару минут пишем примерно вот такой код,

И вуаля, код для нашей страницы готов! Все работает как и было задуманно. Я почти уверен, что большая часть разработчиков написали бы именно такой код (не лукавте, все, хотя бы один раз именно так и писали) .

Continue reading “The AngularJs Promise Pattern” »

Производительность мобильных JS приложений

Очень часто сталкиваюсь с высказываниями людей — «у веб-приложений не оправданно плохая репутация низкой производительности, они могут работать столь быстро/хорошо, как их нативные аналоги!»

Например, в блоге Mozzila (https://hacks.mozilla.org/2012/11/html5-mythbusting/), есть публикации под заголовками «аппаратное ускорение CSS / WebGL решает все проблемы». Или публикация от Sencha (http://www.sencha.com/blog/the-making-of-fastbook-an-html5-love-story), которая была направленна на «критику» Facebook, за переход от веб-приложения к нативному.

Я не буду в даваться в демагогии откуда берутся такие посты и для чего?! Ниже сравнения SunSpider JS Perfomance (чем «меньше» тем производительнее)

AMR-js

Как Вам картинка ?

А теперь давайте вспомним, что по мимо V8 от Google, у Apple есть свой движок JS Nitro — попробуем его отключить ? Кстати, Apple так и не разрешил Google включить Nitro в браузер Chrome на мобильных устройствах.

AMR-not-nitro

 

Хотя, если Вы подразумеваете что веб-приложение это сайт с двумя кнопками, то можно не делать benchmarkов и продолжать жить далее в этом «минимальном мире». Но, если вы подразумеваете, что веб-приложение это — работа с изображениями, использование local storage, анимация, анимация между экранами и т.д., надеюсь, Вы задумаетесь, делать ли такое веб-приложение на базе ARM.

Я не буду спорить, что можно, можно сделать оптимизированное/производительную версию веб-приложения для мобильных устройств, если —, если есть хорошие специалисты. Но, стоит ли тратить силы/время/деньги таких специалистов?

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

python virtualenv, Virtualenvwrapper & other

Pip & Virtualenv

  • изолирование
    • системных пакетов от пакетов используемых в данном проекте
    • проекта от других проектов
  • нет необходимости в sudo, в отличие от sys python

стандартизация PEP — http://www.python.org/dev/peps/pep-0405/

Установка

Что же в итоге ?

И набор wrapper’ов,

  • mkvirtualenv
  • rmvirtualenv
  • workon
  • add2virtualenv
  • cdsitepackages
  • cdvirtualenv
  • deactivate

И еще немного упростим процедуру создания окружения, заглянув сюда — virtualenv-burrito