"Frameworks e ferramentas da moda"
ou
Pokémons explicam ferramentas
de Front End
DISCLAIMER
Muitos Pokémons
Poucos GIFs
Conceitos no estilo Cookbook, sem aprofundar nos temas
Minha visão, você pode concordar ou discordar e compartilhar seus pontos de vista :)
Links para referência nem sempre expressam minha opinião sobre o tópico
hannelita@gmail.com
Olá!
- H mudo
- Computer Engineer
- Programming
- Electronics
- Math <3 <3
- Physics
- Lego
- Meetups
- Animals
- Coffee
- GIFs
Hanneli (@hannelita)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1527074/cb_16750ae96783c8b6ba983ead7118a873.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747256/OU-Team.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747267/1365036841180.png)
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747256/OU-Team.png)
@hannelita - #webbr2015
Por que Pokémon?
Pessoas curtem ou não tem nada contra
Ótimas analogias
Mais fácil de absorver tanta informação
Diversidade e aceitação: geralmente lidamos bem com treinadores que tem um time diferente do nosso
Também podemos
escolher o 'starter'
no front end
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747272/all_starter_cover_2_by_vyranitar-d5zcppv.png)
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747272/all_starter_cover_2_by_vyranitar-d5zcppv.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747437/Screen_Shot_2015-09-21_at_9.09.20_PM.png)
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747563/Periodic_table__polyatomic_.svg.png)
Futuro?
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747444/65fd961e6f34c65996c05144e8f60206.jpg)
@hannelita - #webbr2015
DISCLAIMER
É comum haver uma composição de
frameworks.
A analogia de apenas 'um starter' não vale tanto aqui.
@hannelita - #webbr2015
Com base em que escolhemos os starters?
@hannelita - #webbr2015
1. Agilidade nas primeiras etapas
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747465/Screen_Shot_2015-09-21_at_9.24.57_PM.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747467/Screen_Shot_2015-09-21_at_9.26.06_PM.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747469/Screen_Shot_2015-09-21_at_9.26.47_PM.png)
@hannelita - #webbr2015
Problem 1: Nem sempre os cenários posteriores serão bem resolvidos
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747476/bulbasaur.jpg)
vs.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747479/250px-149Dragonite.png)
:(
@hannelita - #webbr2015
2. Pensar em cenários futuros
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747485/250px-Blasty.png)
vs.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747479/250px-149Dragonite.png)
( ͡° ͜ʖ ͡°)
BLIZZARD YEAH
@hannelita - #webbr2015
Problem 2: Nem sempre os cenários iniciais serão bem resolvidos
@hannelita - #webbr2015
3. Afinidade com o starter
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747495/large.jpg)
<3
@hannelita - #webbr2015
Problem 3: Nem sempre os cenários iniciais/ do meio/ finais serão bem resolvidos
@hannelita - #webbr2015
4. 'Pra ver qual é a desse'
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747505/Screen_Shot_2015-09-21_at_9.45.33_PM.png)
Problem 4: Não sabe ao certo como manejar a ferramenta/ boas práticas/ early adopter e falta de tutorias/ updates e manutenção
@hannelita - #webbr2015
Outras opções *não* recomendadas!
- Random
- Alguém disse que era bom; nem Googlei e escolhi
- Uso essa opção há 10 anos em todos os cenários
@hannelita - #webbr2015
Tentamos um meio termo entre as opções
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747582/bootpoke.png)
@hannelita - #webbr2015
Sobre o Bootstrap
- Combo: HTML + CSS + JS
- Responsividade
- Built in Grid
- Built in Components
- Built in JS associado aos componentes
- JS para transições, modais, etc
@hannelita - #webbr2015
Bootstrap: The good parts
- Muita coisa pronta. Aquela estratégia do cenário inicial
- Fácil de aprender (iniciantes ou pessoas sem experiência em front end)
- Resultado rápido
- Comunidade ativa; desenvolvimento ativo
- Muito material na internet / tutoriais e palestras
- Atualmente é possível utilizar versões customizadas para que o pacote não fique tão pesado
Ref: http://www.sitepoint.com/11-reasons-to-use-twitter-bootstrap/
@hannelita - #webbr2015
Bootstrap: The bad parts
- Nomenclatura. A semântica de algumas classes pode incomodar algumas pessoas
- Entope o DOM com vários elementos que nem sempre são necessários <div><div><div><div>
- Por mais que seja customizável, ainda é pesado (versão 3.5 - CSS + Fonts + JS = ~1Mb )
- Pode haver colisão de classes e JS se ele for inserido no meio do projeto (ex: estilo para button)
- O estilo pode ficar similar ao de muita gente (a.k.a todo mundo começa com o Charmander)
Ref: http://www.zingdesign.com/5-reasons-not-to-use-twitter-bootstrap/
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747627/250px-143Snorlax.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747628/Screen_Shot_2015-09-21_at_10.48.53_PM.png)
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747635/pokedexesfound.png)
@hannelita - #webbr2015
Sobre o Foundation
- Combo: HTML + CSS + JS
- Responsividade
- Built in Grid
- Built in Components
- Built in JS associado aos componentes
- JS para transições, modais, etc
@hannelita - #webbr2015
Foundation: The good parts
- Mobile-first approach
- Navega entre todos os níveis de desenvolvedores - dos júniors aos mais experientes
- É possível usar o Compass e ter mais controle sobre a camada de apresentação
- Desde o início é bem fácil usar com Rails, Django, etc.
- Comunidade ativa e desenvolvimento ativo
Ref: http://www.zingdesign.com/top-10-reasons-to-use-zurbs-foundation-framework/
@hannelita - #webbr2015
Foundation: The bad parts
- Semântica - embora tenha alguma flexibilidade, não há 100% de domínio sobre nomes de algumas classes, funções, etc.
- O controle do que vai para o DOM ainda não é 100%
- Também não é tão leve- o pacote da versão 5 possui ~700kb
- Pode haver colisão de classes e JS se ele for inserido no meio do projeto (ex: estilo para button)
Ref: http://www.amplificommerce.com/5-reasons-we-chose-bourbonneat-over-foundation-or-bootstrap/
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747673/bourbonpokedex.png)
@hannelita - #webbr2015
Sobre o Bourbon Neat
- Ferramenta de Grid bem enxuta
- Semântica
- Responsividade
@hannelita - #webbr2015
Bourbon Neat: The good parts
- Semântica
- Você só usa o que realmente precisa. Sem pacotes/códigos desnecessários
- SASS Mixins
- Customização. O framework lhe fornece uma base para você construir sua camada de apresentação prezando a semântica
- Comunidade ativa e desenvolvimento ativo
Ref: http://www.amplificommerce.com/5-reasons-we-chose-bourbonneat-over-foundation-or-bootstrap/
@hannelita - #webbr2015
Bourbon Neat: The bad parts
- Não é um pacotão. Muitas vezes requer uso conjunto com outras ferramentas.
- Se o desenvolvedor não tiver experiência nenhuma com front end, pode ter dificuldades
- Cuidado com os Mixins! (http://www.sitepoint.com/avoid-sass-extend/ )
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747749/pokedexangular.png)
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747781/pikooking.gif)
@hannelita - #webbr2015
Sobre o Angular.js
- Framework que promete enriquecer o HTML (Diretivas)
- Permite a implementação de um MVC no Front End
- Data Binding
@hannelita - #webbr2015
Angular.js: The good parts
- Fácil de aprender o básico e começar a desenvolver
- Diretivas - sensação que criamos HTML
- Bem intuivo de usar o modelo MVC
http://www.sitepoint.com/10-reasons-use-angularjs/
@hannelita - #webbr2015
Controller ( JS )
app.controller('PokeCtrl', function($scope){
$scope.starter = "Charmander"
})
HTML
<div ng-controller="PokeCtrl">
{{ starter }}
</div>
@hannelita - #webbr2015
Angular.js: The bad parts
- Muitos data bindings podem deixar o código difícil de ler...
- E eventualmente pouco performático
- Compatibilidade - 1 para o 2
- Debuggar é complicado
Ref: https://medium.com/@mnemon1ck/why-you-should-not-use-angularjs-1df5ddf6fc99
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747846/tangela.jpg)
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747855/emberpokedex.png)
@hannelita - #webbr2015
Sobre o Ember.js
- Framework que utiliza uma template engine (Handlebars) na camada da View para empoderar o HTML
- Permite a implementação de um MVC no Front End
- Data Binding suave
@hannelita - #webbr2015
Ember.js: The good parts
- Fácil de aprender o básico e começar a desenvolver
- Handlebars
- O Data Binding é mais suave
Ref: http://www.talentbuddy.co/blog/top-reasons-why-industry-experts-use-ember-js-and-how-you-can-adopt-it-yourself/
@hannelita - #webbr2015
Ember.js: The bad parts
- Ah, esse data binding
- Debuggar é complicado
- Pesado - 1.7Mb na versão 2 (!!!!11)
Ref: http://aokolish.me/blog/2014/11/16/8-reasons-i-won't-be-choosing-ember.js-for-my-next-app/
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747627/250px-143Snorlax.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747889/Screen_Shot_2015-09-22_at_12.19.18_AM.png)
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747897/reactpokedex.png)
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747915/3310127-mewtwo_render_by_mastergawain-d5x80jy.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747918/4129-pokemon-pokeball.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747918/4129-pokemon-pokeball.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747918/4129-pokemon-pokeball.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747918/4129-pokemon-pokeball.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747918/4129-pokemon-pokeball.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747918/4129-pokemon-pokeball.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747920/cew3.png)
@hannelita - #webbr2015
Sobre o React.js
- *Não* é um MVC completo para front end
- Compreensão rápida de como um componente será renderizado
@hannelita - #webbr2015
React.js: The good parts
- Muita flexibilidade na construção de componentes
- Não há manipulações implícitas de DOM
- Promessas de muita performance
Ref: https://facebook.github.io/react/docs/why-react.html
@hannelita - #webbr2015
React.js
render: function() {
return <header>
{ this.state.trainer ?
this.state.name :
<span>Treinador Pokemon não identificado</span> }
</header>
}
@hannelita - #webbr2015
See also: Relay.js
Relay oferece mais funcionalidades para o React (ex: um sistema de eventos mais elaborado)
@hannelita - #webbr2015
"Coração para
EMER, Jean Carlo. 2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747991/IMG_20150918_182346146.jpg)
@hannelita - #webbr2015
React.js: The bad parts
- Muito novo; a documentação ainda não é tão boa
- Requer algum desenvolvedor com conhecimento mais sólido em HTML e JS
- Evite euforias! "Todo mundo escolhe o Charmander, vou escolher também"
Ref: http://blog.andrewray.me/reactjs-for-stupid-people/
@hannelita - #webbr2015
Conclusão
Analise os vários cenários para escolher bem seu starter! :)
@hannelita - #webbr2015
Conclusão - Principais combos
@hannelita - #webbr2015
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1748883/Ember.js_Logo_and_Mascot.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1748884/AngularJS_logo.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1748885/backbone.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1748889/bootstrap.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1748890/foundation-logo.jpg)
ou
ou
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1748897/Screen_Shot_2015-09-21_at_8.39.46_PM.png)
com qualquer
ou
ou
Conclusão
"Não assumam que o contexto de vocês se aplica para todos os projetos do mundo. "
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1747986/Screen_Shot_2015-09-22_at_12.55.08_AM.png)
ALMEIDA, Vinicius. 2015
@hannelita - #webbr2015
Extras
https://offroadcode.com/blog/1850/reactjs-whats-all-the-fuss/
http://gridgum.com/6-great-responsive-frameworks-for-2014/
@hannelita - #webbr2015
http://hhvm.ovh/entry/facebook-s-relay-and-how-it-relates-to-flux-and-react
https://therealmarv.com/understanding-react-flux-graphql-and-relay-concepts-with-4-videos/
Obrigada! :)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1748013/12052460_963899010319739_1573503546763464994_o__1_.jpg)
@hannelita - #webbr2015
hannelita@gmail.com
![](https://s3.amazonaws.com/media-p.slid.es/uploads/304939/images/1748015/12052460_963899010319739_1573503546763464994_o__1_.jpg)