AngularJS: Services, Factories and Providers

Services

Syntax: module.service( ‘serviceName’, function );

Result: When declaring serviceName as an injectable argument you will be provided the actual function reference passed to module.service.

Usage: Could be useful for sharing utility functions that are useful to invoke by simply appending () to the injected function reference. Could also be run with injectedArg.call( this ) or similar.

Factories

Syntax: module.factory( ‘factoryName’, function );

Result: When declaring factoryName as an injectable argument you will be provided the value that is returned by invoking the function reference passed to module.factory.

Usage: Could be useful for returning a ‘class’ function that can then be new’ed to create instances.

Providers

Syntax: module.provider( ‘providerName’, function );

Result: When declaring providerName as an injectable argument you will be provided the value that is returned by invoking the $get method of the function reference passed to module.provider.

Usage: Could be useful for returning a ‘class’ function that can then be new’ed to create instances but that requires some sort of configuration before being injected. Perhaps useful for classes that are reusable across projects? Still kind of hazy on this one.

 

Live Example

Source

 

Concepts of imperative, procedural and declarative programming

In computer science, imperative programming is a programming paradigm that uses statements that change a program’s state. In much the same way that the imperative mood in natural languages expresses commands, an imperative program consists of commands for the computer to perform. Imperative programming focuses on describing how a program operates.

Procedural programming is a type of imperative programming in which the program is built from one or more procedures (also termed subroutines or functions). The terms are often used as synonyms, but the use of procedures has a dramatic effect on how imperative programs appear and how they are constructed. Heavily-procedural programming, in which state changes are localized to procedures or restricted to explicit arguments and returns from procedures, is termed structured programming. From the 1960s onwards, structured programming and modular programming in general have been promoted as techniques to improve the maintainability and overall quality of imperative programs. Object-oriented programming extends this approach.[1]

Procedural programming could be considered a step towards declarative programming. A programmer can often tell, simply by looking at the names, arguments, and return types of procedures (and related comments), what a particular procedure is supposed to do, without necessarily looking at the details of how it achieves its result. At the same time, a complete program is still imperative since it fixes the statements to be executed and their order of execution to a large extent.

Contrasting with imperative and procedural programming is declarative programming, a non-imperative programming style in which programs describe their desired results without explicitly listing commands or steps that must be performed.

The hardware implementation of almost all computers is imperative.[note 1] Nearly all computer hardware is designed to execute machine code, which is native to the computer, written in the imperative style.

From this low-level perspective, the program state is defined by the contents of memory, and the statements are instructions in the native machine language of the computer. Higher-level imperative languages use variables and more complex statements, but still follow the same paradigm.

The earliest imperative languages were the machine languages of the original computers. In these languages, instructions were very simple, which made hardware implementation easier, but hindered the creation of complex programs. FORTRAN, developed by John Backus at International Business Machines (IBM) starting in 1954, was the first major programming language to remove the obstacles presented by machine code in the creation of complex programs. FORTRAN was a compiled language that allowed named variables, complex expressions, subprograms, and many other features now common in imperative languages.

From this Source.

 

Angular.js alternatives JavaScript frameworks

code

Ember.js

A JavaScript framework for creating ambitious web applications http://www.emberjs.com

Knockout.js

Simplify dynamic JavaScript UIs with the Model-View-View Model (MVVM) pattern
http://knockoutjs.com/

React.js

A JavaScript library for building user interfaces
http://facebook.github.io/react/

Flux

Application architecture for building user interfaces
https://facebook.github.io/flux/

Mithril

A Javascript Framework for Building Brilliant Applications
http://mithril.js.org/

Vue.js

Vue.js is a library for building modern web interfaces.
It provides data-reactive components with a simple and flexible API.
http://vuejs.org/

Backbone Marionette.js

The Backbone Framework Backbone Marionette simplifies your application code with robust views and architecture solutions.
http://marionettejs.com/

Nadeshiko

Package nadeshiko routes Built in Router and Server.Nadeshiko comes with own very simple router, and own server.
http://godoc.org/github.com/kirillrdy/nadeshiko

Ampersandjs.com

A highly modular, loosely coupled, non-frameworky framework for building advanced JavaScript apps.
http://ampersandjs.com/

Espresso.js

Super minimal MVC library
https://github.com/techlayer/espresso.js/tree/master

Meteor

The JavaScript App Platform to build apps that are a delight to use, faster than you ever thought possible
https://www.meteor.com/

Express

Fast, unopinionated, minimalist web framework for Node.js
http://expressjs.com/

Hack CSS prático para Safari excluindo Chrome

Existem dezenas de maneiras de fazer isto, mas um jeito prático de escrever Hacks CSS apenas para Safari é exemplificado abaixo.
Vale lembrar que Safari e Chrome são identificados pelo menos User-Agent, no caso o Webkit, e por isso, às vezes, é difícil você aplicar um hack para Safari sem que ele não deixe de funcionar em Chrome.
Por exemplo, a função (calc) do CSS3 não funciona em muitas versões do Safari, é um jeito para contornar este problema é declarar a dimensão por completo, sem fazer o cálculo. Porém, isso pode quebrar por completo seu cálculo válido para o Chrome.
Veja como resolver:

@media screen and (-webkit-min-device-pixel-ratio:0) { 
 /* Safari and Chrome */
 .myClass {
 height: -webkit-calc(100% - 50px);  /* para Chrome */
 }
/* Safari only override */
::i-block-chrome,.myClass {
height: 95%;
}
}

 

Conferência CSS Brasil

A Conferência CSS Brasil

Já fui em muitos eventos de Internet, de tecnologia, mas sempre tive a sensação que estava ali procurando por algo que eu não entendia muito bem.

Eventos de Social Media são repletos de atendimentos júnior de agências pequenas, que ficam perguntando como administrar a página do Facebook da lojinha de roupas da Dona Ana. Um porre.

Eventos de tecnologia, na maioria das vezes, são voltados para programadores, seja sua linguagem PHP, C# ou Ruby, os caras são muito técnicos e eu sempre fiquei boiando.

Os eventos que eu mais me interessava eram os de Javascript, mas hoje, depois do Angular e da invenção do NodeJs, é possível construir um foguete só usando Javascript. Muito avançado. E quando a abordagem é mais voltada para o front-end, as dúvidas nunca fogem dos tópicos: Sublime, Gulp, Grunt, Backbone ou qualquer outra parafernália usada pela linguagem. Até curto, respeito, mas chega uma hora que cansa, ainda mais para um cara que como eu, programa em um ambiente Microsoft .NET e tem que usar Visual Studio impreterivelmente.

Até que um grupo de front-enders perceberam a carência de um evento especializado em CSS, e criaram a primeira Conferência voltada unicamente para desenvolvedores que como eu, trabalham com CSS desde o início.

Foi muita bacana ver nomes como Eduardo Shiota, Bernard de Luna, Diego Eis e conhecer a inteligente argentina Lou Montano da R/GA Buenos Aires falando sobre Sass, Flexbox, Backgrounds e Tipografia Web.

Você pode conferir um resumo das talks nos links aqui abaixo.

Mais informações na página da Conferência CSS.

E eu ainda ganhei uma camiseta do Javascript! Sim, nunca vamos escapar disso, o que é bom, mas repito as palavras do Daniel Filho: bata no peito e diga: eu gosto de CSS! Sou front-end e quero fazer tudo só usando CSS!






Rotas Angular JS

Uma vez que AngularJS está rodando, ele intercepta todas as solicitações de navegação url (tags <a>) e impede a páginado navegador de uma inteira de atualização.

Como isso acontece?

  • Começa com o usuário navegando na página inicial da aplicação (como http: // localhost /home). Este é uma requisição HTML padrão, que recebe dados de uma view do servidor.
  • O navegador, em seguida, carrega o html e scripts necessários e configura o que foi definido como parâmetros do AngularJS.
  • A navegação do AngularJS (serviço de localização) entra em ação, e sucessivamente chama os pedidos que são enviadas, carregando vistas parciais em uma seção da página específica (as ng-view ou ng-include).