The Brink и французы

The Brink продолжает жечь напалмом (почти буквально!):

Dominique, sorry, but the French haven't been relevant since the battle of Dien Bien Phu.

Кто еще не смотрел — рекомендую. Добротно, смешно!

Mastering Web Application Development with AngularJS

Дочитал наконец-то до конца пособие по Ангуляру, Mastering Web Application Development with AngularJS. Неплохой материал, дает основные знания для работы с фреймворком, от примитивных биндингов до директив и анатомии $digest(). Кроме того, автор активно применяет TDD, так что большинству учебных примеров предшествуют соответствующие тесты.

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

В книгах Гугла читать конечно не очень удобно, но если скачать epub, вполне нормально. Интересующимся — рекомендую.

AngularJS, передача аргументов из директивы в контроллер

При написании своих директив в AngularJS легко столкнуться с необходимостью вызвать из директивы функцию контроллера, передав аргументом что-нибудь из scope директивы. Например, если директива представляет собой форму для создания новых элементов — мы можем передать в контроллер введенные пользователем, обработанные и отвалидированные значения.

Пусть у нас в контроллере есть функция:

$scope.alertNewItem = function (item) {
  alert(item.title);
  alert(item.value);
};

Тогда эту функцию мы можем передать в scope директивы, скажем, в атрибуте on-save:

angular.module('myModule').directive('addNewItem', function () {
  return {
    restrict: 'E',
    templateUrl: 'item-add-tpl.html',
    replace: true,
    link: addNewItemLink,
    scope: {
      //коллбэк добавления нового элемента
      saveCallback: '&onSave'
    }
  };
});

Примерно так:
<add-new-item on-save="alertNewItem(item)"></add-new-item>

Теперь мы можем вызвать эту функцию где-нибудь в link-функции нашей директивы:

function addNewItemLink(scope, element) {
  //...
  var myNewItem= {title: 'Новый элемент', value: 1};
  scope.saveCallback(myNewItem);
  //...
};

Однако если мы попробуем обратиться к аргументу item в функции alertNewItem() нашего контроллера, то увидим, что он undefined. Если внимательно (очень внимательно) читать документацию на directive(), можно выяснить, что, оказывается, аргументом в такие коллбэки нужно передавать не сами переменные, а карту (т.е. map) отображения передаваемых аргументов на их названия в вызываемой функции. То есть вот так:
function addNewItemLink(scope, element) {
  //...
  var myNewItem = {title: 'Новый элемент', value: 1};
  scope.saveCallback({item: myNewItem});
  //...
};

Про тестирование

Автоматизированное тестирование программного обеспечения — это хорошо, прекрасно даже. Писать юнит-тесты — как говорить правду: легко и приятно. Одна мелочь только портит идиллию и порождает самые черные помыслы. То, что тесты, иногда, надо отлаживать. Потому что они, иногда, не работают. Сволочи.

Регистрация по инвайтам в Laravel 5

Уже достаточно давно в свободное время внедряю в рабочие процессы фреймворк Laravel 5. Свободного времени обычно очень мало, но дело потихонечку движется. В данной заметке я покажу, как на этом самом Laravel 5 реализовать систему регистрации через инвайты (сиречь приглашения). То есть, когда с инвайтом регистрироваться можно, а без инвайта — нельзя.

Модальное диаложество в AngularJS

Диалоговое окно — важный элемент в интерфейсах многих приложений. В этой заметке мы посмотрим, как в AngularJS вызвать модальный диалог, передать в него данные и получить результат (то есть действие пользователя) на примере бутстрапных диалогов Modal из ui.bootstrap (по ссылке есть примеры).

Drupal Commerce vs Magento

А вот Commerce Guys сравнивают Drupal Commerce с Magento (угадайте, с каким выводом):

The obvious implication of this statement is that both Magento and Drupal Commerce have unique roles in the online commerce ecosystem. They are each geared towards certain types of projects and use cases. Instead of pitting each platform against each other to have a winner based on some arbitrary set of features or architecture, a better approach would be to first establish a clear understanding of customer needs. When the needs of a client are properly applied to the strengths of each platform, one will clearly meet those needs in a way that the other does not. Thus removing the need for a feature comparison.
Comparing Drupal Commerce & Magento

Про фотокарточки

Everybody does that now. We all take pics… you do the same with holiday photos. You record something to look back on it, even though you’re not really there when you’re taking the picture ‘cause you’re too busy recording it — so you retrospectively go to look back on where you weren’t and tell yourself you had a good time.
© Dylan Moran

Модуль социальных кнопок Up to like

Сегодня мы внимательно посмотрим на модуль социальных кнопок Up to like. Модуль не так давно разработал всем известный гражданин Plazik. Он (модуль, а не Plazik) умеет интегрировать на сайт социальные иконки с сервиса Up to like и кое что еще.

Устанавливается модуль как обычно:

drush dl uptolike
drush en uptolike

Из зависимостей у модуля указан только CTools, который у вас скорее всего и так уже есть.

Пройдем на страницу админки (admin/config/system/uptolike) и посмотрим, что там:

Наследство из Африки

- Пенсионерка активно пользуется сетью Интернет. В апреле она получила электронное письмо от неизвестного, который представился адвокатом из Бенина. Мужчина сообщил, что ее дальний родственник вместе со всей семьей в 2011 году погиб в автокатастрофе, и сейчас разыскиваются его наследники, — уточнила детали корреспонденту «РГ» старший референт пресс-службы МВД по РМ Елена Мигачева.
Эта история показалась женщине правдивой — дело в том, что один из родственников ее покойного супруга с середины 60-х годов действительно жил и работал в Африке. Для пущей убедительности иностранец даже прислал «наследнице» копию своего паспорта. При этом пояснил, что 60 процентов от суммы состояния в 27 миллионов долларов он возьмет себе, а оставшееся готов оформить на нее.
Саранская пенсионерка отдала 3 млн за «африканское наследство»

 — Why would someone want to scam me, Jemaine, and on the internet service, one of the trusted things of today's society?
© Полет Конкордов