Livros

Desenvolvendo para iPhone e iPad – 5ª edição

Posted by rlecheta on maio 04, 2017
iOS, Livros / No Comments

Finalmente foi lançado a 5ª edição, atualizado para o Swift 3.

https://novatec.com.br/livros/desenvolvendo-para-iphone-ipad-5ed/

 

XCode 8 e Swift 3

Posted by rlecheta on outubro 23, 2016
iOS, Livros / 19 Comments

Olá pessoal

A 4a ed do livro de iOS foi feita utilizando o XCode 7 com Swift 2.
ios
Recentemente foi lançado o Xcode 8 com suporte ao Swift 3.
Para auxiliar os leitores que compraram a 4ed, este post visa explicar algumas das mudanças e também para dizer que atualizei os fontes no github com os exemplos com Swift 3.
Espero que o fonte ajude quem comprar a 4ed e precisar estudar Swift 3.
Para migrar os projetos da 4ed para Swift 3 foi simples. Eu abri cada projeto no Xcode 8 e o próprio Xcode mostrou o wizard para migrar para o Swift 3. Na maioria das vezes deu certo, e quando não funcionou fiz pequenos ajustes.
A figura abaixo mostra o wizard do XCode 8 durante a migração do Swift 2 para o Swift 3. Ele mostra um preview de cada arquivo, portanto eu recomendo que você leia cuidadosamente cada mudança pois é uma ótima maneira de aprender a nova sintaxe.
9-2
Mas o que mudou?
Algumas coisas foram a sintaxe como mostra esse código abaixo.

Swift 2: UIApplication.sharedApplication().openURL(NSURL(string:url)!)

Swift 3: UIApplication.shared.openURL(URL(string:url)!)

Note que a classe NSURL mudou para apenas URL. Isso acontece também com várias outras classes que tinham o prefixo NS.

A seguir temos outro exemplo de código que está diferente:

Swift 2:

self.window = UIWindow(frame: UIScreen.main.bounds)

self.window!.backgroundColor = UIColor.white

Swift 3:

self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

self.window!.backgroundColor = UIColor.whiteColor()

Uma mudança importante foi na forma de declarar os métodos, pois foi adicionado um prefixo “_” opcional no primeiro parâmetro. Digamos que temos uma função soma(n1,n2) com a seguinte declaração.

func soma(n1:Int, n2:Int) -> Int {

   return n1 + n2

}

Par chamar a função você faria algo assim:

let n = soma(n1: 1, n2: 3)

print(n)

Note que é obrigatório informar o primeiro argumento “n1”. Caso você opte por simplificar a chamada e não informar o argumento, basta colocar o “_” antes de declarar o primeiro argumento, assim:

func soma(_ n1:Int, n2:Int) -> Int {

   return n1 + n2

}

Neste caso a chamada ficaria (não precisa informar o n1):

let n = soma(1, n2: 3)

print(n)

Bom, teve várias outras mudanças.. mas o que recomendo é que vocês migrem os projetos de Swift 2 para Swift 3 utilizando este wizard do XCode, pois é um excelente exercício e aprendizado.

Para quem tem a 4ed, recomendo antes estudar no XCode 7, pois assim os exemplos com Swift 2 vão todos funcionar. É possível encontrar versões antigas do XCode procurando no Google por “xcode older versions”. Depois que estudar os códigos do livro com Swift 2, recomendo instalar o XCode 8 e utilizar o wizard de migração para o Swift 3.. Será um bom aprendizado sobre a sintaxe.

É isso pessoal, espero que este rápido post tenha ajudado :-).

Grupo de discussão para os Livros

Posted by rlecheta on maio 04, 2016
Livros, Notícias / No Comments

Olá pessoal,

Como recebo muitos emails, mensagens no facebook, comentário aqui no blog, etc… criei um grupo de discussão para tirar dúvidas sobre meus livros. Peço que perguntem qualquer coisa lá para centralizar as respostas.

https://groups.google.com/forum/#!forum/livros-lecheta

O grupo vai ajudar a responder melhor a dúvida de todos, pois muitas vezes respondo as mesmas perguntas…

Não vou mais responder dúvidas em outro canal, obrigado 🙂

Livro Android Essencial

Posted by rlecheta on março 15, 2016
Android, Livro Android, Livros / 20 Comments

Olá pessoal,

Foi lançado meu livro Android Essencial  :-).

Esse post é para explicar meu objetivo ao escrevê-lo e qual a diferença com o Livro Android 5ª  edição “a bíblia”.

Android Essencial (384 páginas) é um resumo do livro Google Android, 5ª edição (1.072 páginas).

“Para quem tem o Google Android 5ª edição, não precisa ler esse. Como eu falei o essencial é um resumo da 5ª edição.”

capa_android_essencial

Para começar a explicação, vamos ler o texto que está na capa do livro:

O Android é o sistema operacional móvel mais utilizado no mundo, e o objetivo deste livro é apresentar ao leitor os conceitos essenciais do desenvolvimento de aplicativos para Android, por meio de uma explicação simples e prática.

Android Essencial é um resumo do livro Google Android, 5ª edição, com o objetivo de prepará-lo rapidamente para o mercado. É para leitores que não querem rodeios e precisam aprender logo, seja por questões de estudos ou por uma necessidade de trabalho.

Este livro utiliza o Android Studio, é focado nas boas práticas de interface do Google e do Material Design, e oferece uma abordagem prática direcionada ao desenvolvimento de aplicativos. Durante a leitura você vai desenvolver um aplicativo completo, com boa usabilidade de interface e com acesso a web services e banco de dados, além de utilizar recursos de multimídia e mapas.

O livro também apresenta capítulos resumidos dos principais conceitos da arquitetura do Android, como notificações, intents, broadcast receivers, services, alarmes, mensagens de push, câmera e fotos.

Depois de ler o livro Android Essencial você terá um bom entendimento sobre o desenvolvimento de aplicativos para Android.

O que me levou a escrever o livro foram várias coisas:

  1. Eu precisava de uma forma rápida de treinar novos integrantes da Livetouch. Penso que o livro Google Android 5ª edição precisa ser lido por alguém que queira apavorar no desenvolvimento de apps, mas por ter + de 1.000 páginas ele não era um curso relâmpago, como muitas vezes tenho necessidade. O livro Android Essencial surgiu para isso, penso em usá-lo para treinar rapidamente os novos recursos da empresa, assim como usar em cursos pessoais, cursos na Novatec, e até como guia na Pós Graduação de Dispositivos Móveis e Computação em Nuvem que ministro na Universidade Positivo.
  2. Por ser um resumo do Google Android 5ª edição, o livro é essencial para aprender Android rapidamente, pelo menos o básico e pode ser usado como guia em cursos. Também foi uma ideia da editora Novatec.
  3. O livro Android Essencial tem um custo mais baixo, então também tivemos a ideia de oferecer uma opção de custo mais acessível para quem não pode comprar a 5ª edição.
  4. Outro fator que me levou a escrever, foi ter identificado que muitas pessoas, inclusive devs bons de Android não chegam a ler o livro 5ª edição inteiro. Eu fiz capítulos avançados sobre Threads e várias coisas que percebo que muitos devs não chegam a ler. O mesmo acontece com capítulos como Bluetooth, Gestos, Wear, etc.. É o tipo de assunto que o leitor pode ler ou pesquisar quando ele tiver a necessidade (quando for usar na prática).. mas muitas vezes o que acontece é que o leitor precisa aprender o essencial que é: Instalar Android Studio, criar um projeto e executar no Android/Emulador, criar interfaces (formulários, listas), web services, banco de dados, vídeo, mapa, e é isso!
  5. Sabendo esse básico do desenvolvimento já é suficiente para muitos devs, principalmente aqueles que não vão a fundo. Esse é o caso daquela estudante que precisa fazer o TCC correndo, vai estudar Android rápido e talvez nunca mais.

Creio que é isso pessoal.

Em minha opinião, se você quer um livro de custo mais acessível e quer aprender o básico rápido (android studio, criar telas, listas, web services, banco de dados, mapas, GPS, vídeo, foto, push, etc) e dar um tapa nos conceitos principais (intents, services, receiver, notifications), esse livro é um bom ponto de partida.

Depois de ler o livro Android Essencial você terá um bom entendimento sobre o desenvolvimento de aplicativos para Android, e então você decidirá o caminho a seguir!

Se seu objetivo foi aprender o “essencial” e se sentir satisfeito com o conteúdo, ótimo :-). Penso que vai ser o caso de muitos estudantes que precisam fazer o TCC :-). Mas se você for um desenvolvedor que vai trabalhar com Android todos os dias, recomendo ir mais a fundo. Tendo essa necessidade, você poderá complementar a leitura com o livro Google Android 5ª edição, ou a própria documentação oficial.

Lembre-se: O livro Android Essencial (384 páginas) é um resumo do Google Android 5ª edição (1.072 páginas).

Mudanças no iOS 9 e Swift 2.0

Posted by rlecheta on janeiro 18, 2016
iOS, Livros / 11 Comments

Olá pessoal

Este post visa esclarecer algumas coisas que mudaram no Xcode 7 e Swift 2.0.

O objetivo é ajudar os leitores do meu livro de iOS 3a edição que foi feito para iOS 8, Xcode 6 e Swift 1.1, na época.

Com a atualização do iOS 9 e Swift 2, a Apple mudou algumas coisas na sintaxe da linguagem e na assinatura de alguns métodos. Este post visa explicar alguns destes problemas, espero que ajude 🙂

Para deixar claro:

  • livro iphone 3 edição: iOS 8, Xcode 6 e Swift 1.1
  • lirvo iphone 4 edição (quando for lançado): iOS 9, Xcode 7 e Swift 2

Vamos ser rápidos, então bora pro código:

1) Wizard de migração

Se você abrir um projeto no Xcode que utiliza Swift 1, verá este wizard de migração. Recomendo clicar em Convert e ver o resultado. A função print() é uma das mudanças simples que você pode automatizar com este wizard.

Screen Shot 2016-01-10 at 9.04.13 PM

2) Sobrescrevendo o construtor.

A notação a seguir para sobrescrever o construtor:

override init() { … }

Mudou para (não precisa colocar a palavra override):

init() { … }

O construtor que recebe NSCode utiliza a sintaxe init? (failable initializer)

init?(coder aDecoder: NSCoder)

Portanto, caso for sobrescrevê-lo, não esqueça de colocar a ?:

required init?(coder aDecoder: NSCoder) {  super.init(coder: aDecoder) }

3) Função print() virou println().

Essa é simples, é só alterar no código e boa.

4) as, as! e as?

No swift 1.0 somente existia a palavra chave as para fazer cast. Mas no Swift 2.0 foram criadas mais algumas opções.

·       as: utilizado para fazer upcasting (cast para o tipo superior);

·       as?: faz o cast (downcasting) e retorna um tipo opcional ?, portanto você deve utilizar esta maneira se possui alguma dúvida do tipo do objeto. Se o objeto não é do tipo correto é retornado nil.

·       as!: faz o cast (downcasting) quando você tem certeza que é o tipo correto, e já faz o unwrapping da variável. Mas tome cuidado, pois se não for o tipo correto o aplicativo vai travar (crash);

Exemplo de código que mostra o cast com as!:

Screen Shot 2016-01-10 at 4.13.49 PMNeste código, altere a sintaxe do cast de as! para as? para ver a diferença. O compilador vai acusar erro ao utilizar a variável c pois ela é do tipo opcional. Neste caso teria que inicializá-la ou utilizar a sintaxe c!.nome. Ou ainda, se preferir a sintaxe if let como você aprendeu no livro.

Screen Shot 2016-01-10 at 4.13.58 PM

5) var vs let

Você já sabe que var é uma variável e let uma constante. No Xcode 7, o compilador mostra um warning caso você utilize var em uma variável que nunca é alterada, pois nestes casos é recomendado usar let.

Um exemplo deste warning, é a figura abaixo:

Variable ‘url’ was never mutated; consider changing to ‘let’ constant

Screen Shot 2016-01-10 at 11.39.26 AMPara corrigir, troque por let. @Dica, faça isso pelo assistente de código.

Screen Shot 2016-01-10 at 11.39.34 AM

6) Mudança na assinatura dos métodos de vários protocolos.

No cap 8 sobre WebView implementamos logo no início alguns métodos do protocolo UIWebViewDelegate.

A Apple já mudou algumas vezes a assinatura dos métodos. Antes não tinha o ! antes dos parâmetros, depois colocaram o ! e agora resolveram tirar de novo. Mas o compilador te ajuda nestes casos e ele avisa do erro.

Screen Shot 2016-01-10 at 11.32.24 AM

Tirando o ! do parâmetro UIWebView resolve o problema. O mesmo acontece com outros protocolos, como o UITableViewDegate, etc.

Screen Shot 2016-01-10 at 11.32.39 AM

7) HTTP vs HTTPs

A partir do iOS 9, requisições HTTP (mesmo com WebView) são bloqueadas pois não são seguras. A Apple recomenda o uso de HTTPS.

No app dos Carros que mostro no livro, o WebView pode falhar e mostrar o seguinte erro:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file.

Para solucionar este problema no iOS 9, abra o arquivo Info.plist e adicione o item App Transport Security Settings. Dentro deste item adicione um sub-item chamado Allow Arbitrary Loads com o valor YES.

Feito isso a conexão HTTP será permitida e o exemplo com WebView que mostrei no app dos carros vai funcionar. Lembrando que isso é necessário para iOS >=9 .

Screen Shot 2016-01-10 at 5.31.16 PM

8) Método supportedInterfaceOrientations()

Controle de telas na vertical e horizontal foi o assunto do capítulo 10. Na revisão do livro encontrei essa mudança.

Até o iOS 8 o método supportedInterfaceOrientations() utilizado para controlar a orientação (vertical/horizontal) da tela do view controller retornava um Int.

Screen Shot 2016-01-10 at 8.44.29 PM

Agora a função ficou com uma assinatura mais esperta, e retorna direto alguma das constantes da estrutura UIInterfaceOrientationMask:


Screen Shot 2016-01-10 at 8.44.18 PM

9) UILabel, a propriedade text e String vs NString

A propriedade text da classe UILabel é do tipo String.

Screen Shot 2016-01-10 at 9.23.57 PM

No capítulo 10 onde estudamos o acelerômetro, tinha um código que formatava a String utilizando o construtor de NSString.

Para o código compilar foi necessário fazer o cast para String, com a notação (as String).

Isso é preciso pois o NSString é uma classe do Obj-C e a classe String é do Swift. Mas como a classe NSString contém mais métodos que a String, muitas vezes ainda utilizamos elas para fazer algumas tarefas como essa (até você descobrir outro jeito rsrs):

Screen Shot 2016-01-10 at 9.25.20 PM

10) Projeto sem Launch Screen.

Ao revistar alguns projetos para iOS 9, me deparei com algumas telas com a nav bar e tab bar pretas assim:

Screen Shot 2016-01-10 at 9.28.49 PM

Isso acontece porque o projeto não possui um arquivo de Launch Screen. Para solucionar crie o arquivo com o wizard > iOS > User Interface > Launch Screen e associe este arquivo nas propriedades do projeto em Target.

Por mais bizarro que isso pode ser, faça isso que vai resolver :-). Veja resultado abaixo:

Screen Shot 2016-01-10 at 9.29.38 PM

11) Assinatura dos métodos do protocolo NSXMLParserDelegate

No capítulo 11 sobre XML/JSON, teve outra alteração, referente a sintaxe dos métodos do protocolo NSXMLParserDelegate.

Recomendo ver os métodos aqui:

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/NSXMLParserDelegate_Protocol/

Mas basicamente a Apple trocou de ! para ? (opcionais) alguns parâmetros. Então quando o compilador reclamar no Xcode é só trocar. Qualquer dúvida avise.

12) Obter a quantidade de elementos de um array.

No Swift 1.1 tinha a estranha função countElements(array) que agora virou array.count, algo mais comum em linguagens de programação.

Veja como ficou a sintaxe:

//Array<Carro>: array de carros…
let carros = parserXML_SAX(data)

// Swift 1
var count = countElements(carros)

// Swift 2
let count = carros.count

13) Idem com a classe String.

Já que falamos de como obter a quantidade de elementos, com a classe String também mudou.

Antes era countElements(string), depois virou count(string) e agora é string.characters.count.

Basicamente você acessa o array de caracteres dentro da classe String e obtem a quantidade por meio do array.

14) Try/Catch

Na explicação de parser de XML com DOM a classe SMXMLDocument era usada assim:

let document = SMXMLDocument(data: data, error:nil)

O 2º parâmetro era do tipo NSError, que inclusive nem usei no código rsrs. Isso era usado para obter o erro do método que faz o parser .

Mas no Swift 2 apareceu o try/catch e o tratamento de exceções, então o construtor deste método mudou e agora ele lança uma exceção. O Legal é usar a sintaxe try? que abrevia o try/cach e tenta executar o código que pode lançar uma exceção. Se funcionar ele retorna uma variável opcional, senão retorna nulo.

O código atualizado é assim:

let document = try? SMXMLDocument(data: data)
if(document == nil) {
print(“Erro ao ler os dados”);
return carros
}
// Continue usando o document aqui…

Como o retorno é uma variável opcional ‘?’, depois temos que fazer o unwrapping ou usar o document!. Para maiores detalhes veja no livro 🙂

15) Parser de JSON

Ainda no capítulo sobre XML/JSON, o jeito de fazer o parser de JSON com a classe NSJSONSerialization também mudou. Na verdade é porque novamente antes usava o NSError como parâmetro para obter o erro no parser, e agora é usado as exceções com try/catch.

Novamente gosto de usar o try?. Podemos até usar o if let para inicializar o dicionário do json.

Segue código atualizado:

// Faz a leitura do JSON, converte para dictionary
let dictOp = try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
if let dict = dictOp {
// usar o dicionário para ler os dados do carro aqui…
} else {
// erro
}

16) Threads e Web Services

Neste capítulo não encontrei grandes mudanças, então é só para constar.

Tem pequenas coisas de ! e ? na assinatura do método dataTaskWithURLpara variar, mas nada que você não vai conseguir resolver.

17) Estilo do botão na nav bar.

No capítulo de web services, foi adicionado um botão “Atualizar” na navigation bar. Esse botão faz a atualização da lista de carros. No iOS9 o estilo Bordered ficou deprecated. Agora recomenda-se utilizar o estilo Plain.

let btAtualizar = UIBarButtonItem(title: “Atualizar”, style: UIBarButtonItemStyle.Plain,target: self, action: “atualizar”)

self.navigationItem.rightBarButtonItem = btAtualizar

18) Conversão de String para Int

No capítulo de persistência de dados, a classe Prefs tem uma pequena mudança.

let valorInt = valorString.toInt()

Isso mudou para:

let valorInt = Int(valorString)

19) SQLite

Na parte de SQLite teve poucas mudanças. Nada que trocar uns ! por ? e fazer cast com as! não resolva.

Se alguém tiver problemas é só me informar aqui neste post.

20) Mapas

Na parte de mapas não teve grandes mudanças.

Teve esse construtor do UIButton que mudou de:

let btPin = UIButton.buttonWithType(UIButtonType.DetailDisclosure) as UIView

Para:

let btPin = UIButton(type: UIButtonType.DetailDisclosure) as UIView

No exemplo de Geocoding a assinatura do método mudou. Para auxiliar, veja trecho do código atualizado mostrado no livro.

Screen Shot 2016-01-13 at 2.00.58 PM

21) Video

No capítulo de multimídia, a classe VideoUtil teve um problema no iOS9, pois a classe MPMoviePlayerController ficou deprecated. No iOS9, A Apple recomenda usar a AVPlayerViewController.

Para ajudar o pessoal que comprou a 3ª edição, segue classe atualizada 😉

VideoUtil.swift

Como no iOS 9 utiliza-se a classe AVPlayerItem, devemos utilizar as suas constantes de notificação para monitorar os eventos do player de vídeo. No exemplo que mostro para interceptar o evento do fim do vídeo, basta trocar a constante por esta:

NSNotificationCenter.defaultCenter().addObserver(self, selector: “videoFim”,name:”AVPlayerItemDidPlayToEndTimeNotification“, object: nil)

22) Áudio

Novamente devido ao novo tratamento de exceções e o uso de try/catch, temos algumas mudanças em outras classes, pois não é mais usado aquele NSError como parâmetro.

Um exemplo desta alteração, é no exemplo que mostra como tocar e gravar músicas com a  classe AVAudioPlayer.

do {
// Inicializa o player com a URL do arquivo
self.player = try AVAudioPlayer(contentsOfURL: url)
} catch let error as NSError {
self.player = nil
print(“Error \(error)”)
return
}

23) Câmera e galeria de fotos

Na parte da câmera e tirar fotos não teve mudanças.

Mas no exemplo que mostra como acessar a galeria de fotos, os métodos do protocolo UIImagePickerControllerDelegate mudaram um pouco. Segue trecho atualizado:

// Delegate UINavigationControllerDelegate

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

print(“didFinishPickingMediaWithInfo”)

let image = info[UIImagePickerControllerOriginalImage] as! UIImage

self.imageView.image = image

self.imagePicker.dismissViewControllerAnimated(true, completion:nil)

}

func imagePickerControllerDidCancel(picker: UIImagePickerController) {

print(“imagePickerControllerDidCancel”)

self.imagePicker.dismissViewControllerAnimated(true, completion:nil)

}

24) IPad e Popover

No iOS9 mudou a forma de mostrar Popovers.

Para facilitar, criei a classe PopoverUtil.swif.

Para usá-la é simples assim:

PopoverUtil.show(self, viewController: vc, source: view, width: 400, height: 800)

25) Tratamento de eventos de Touch

No capítulos sobre Quartz e Views customizadas, foi mostrado como tratar o evento de touch. Como a assinatura do método mudou, segue aqui o código atualizado:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

if let touch = touches.first {

// Lê a posicão do touch

let point = touch.locationInView(self)

self.x = Int(point.x)

self.y = Int(point.y)

self.setNeedsDisplay()

}

super.touchesBegan(touches , withEvent:event)

}

É isso pessoal 🙂

Espero que este post tenha ajudado os leitores do livro do meu livro de iOS 3a edição. Com estas explicações fica mais fácil migrar para o iOS 9.

 

 

Tags:

Livro AWS vs Livro REST

Posted by rlecheta on novembro 30, 2015
Livros, Web Services / 2 Comments

Olá pessoal, sempre recebo emails sobre dúvidas referente as diferenças do livro de AWS e de REST, então esse post é para explicar. Assim sempre faço o link com esse post para responder 😉

aws         rest

Vamos lá, serei breve nas diferenças.

1) AWS

O livro de AWS fala apenas sobre computação em nuvem e explica com utilizar os serviços da Amazon AWS.

O objetivo é explicar como configurar servidores na internet, para que você seja dono do seu próprio data-center.

O livro explora assuntos básicos como servidores e bancos de dados na nuvem, e até avançados da AWS como: cache de informações, serviços de filas e balanceadores de carga.

Vale lembrar que este livro não fala sobre como desenvolver web services. Não é um livro sobre programação.  O objetivo é ensinar o leitor a configurar um servidor na nuvem utilizando a Amazon como provedor de serviço.

Ele é muito mais avançado do que o do REST no sentido de configurar um servidor, pois fala de balanceamento de carga, etc..

2) REST

O objetivo desse livro é ensinar a criar web services em java.  Esse é um livro sobre programação.

O livro vai desde o básico, como por exemplo: configurar um banco de dados local para desenvolvimento, é feito Hello World de programação web para Java e o assunto sobre web services vai sendo explicado aos poucos.

É feito um desenvolvimento completo de um aplicativo de Carros, com banco de dados e web services. Para testar os web services o livro inclusive possui um pacote de “bônus” com um aplicativo Android e um sistema web em AngularJS. No app Android inclusive você tira uma foto e a envia pelo web service para o servidor. No sistema web você poderá ver toda a lista de carros.

Na segunda parte do livro, ensino como criar um servidor na nuvem do Google para disponibilizar o web service criado no próprio livro. Assim você poderá testar seu web service lá na internet.

@Obs: caso você leia o livro de AWS, pode instalar estes web services lá na Amazon também.

Porém referente a esta parte de configuração de servidor, no livro de REST a explicação é básica, já no livro de AWS essa parte vai mais a fundo.

3) Estou na dúvida de qual comprar, e agora?

Isso depende… vou dar alguns exemplos:

Se você precisa aprender a desenvolver web services em Java ou se seu objetivo é aprender coisas sobre programação, vai de REST.

Se você já sabe programar em alguma linguagem e quer aprender sobre computação em nuvem, vai de AWS. O livro de REST também explica um pouco dessa parte, a diferença é que é mostrada a plataforma do Google ao invés do de AWS.

Mas por mim, leria ambos :-). Quem me dera saber tudo isso à uns 10/15 anos atrás quando eu precisava fazer essas coisas e não sabia rsrs.. No livro está tudo mastigado.

AWS e Google são dois gigantes da internet e computação em nuvem, e ambos os livros vão lhe dar uma boa base para o mercado web.

Caso você esteja no início da faculdade e começando no assunto, vai de REST pois ele é mais simples. O de AWS vai complementar seus estudos e vai lhe dar ideias mais avançadas.

 

Livro Google Android 5ª edição

Posted by rlecheta on novembro 26, 2015
Android, Livro Android, Livros / 109 Comments

Olá pessoal, foi lançado o livro Google Android 5ª edição 🙂

Esta edição foi lançada (5 meses depois do lançamento da 4ª), e este post é só para tranquilizar quem possui a 4ª edição.

Quem acompanhou o processo de escrita do livro sabe, que um livro de +- 1.000 páginas demora bastante para sair do forno, e na reta final do lançamento (2 semanas antes) teve o Google I/O 2015. Neste evento o Google lançou a lib do Material Design.

Então nas últimas 2 semanas do lançamento da 4ª edição, foi uma correria para eu atualizar o livro e felizmente deu tempo de atualizar muita coisa, como por exemplo:

  • Explicações de Material Design
  • Layout com Tabs
  • Floating Action Button (FAB)
  • SnackBar
  • Animações de transições entre activities

Enfim, é a última vez que atualizo antes do Google I/O rsrs..

Mas nessa atualização de última hora, ficaram dois assuntos de fora, pois não tive tempo.

1ª) Navigation Drawer (menu lateral). Na 4ª edição foi explicado um fragment que gerava o menu lateral. Este fragment foi baseado no template que o próprio Android Studio criava na época.

Na 5ª edição foi alterado para usar o NavigationView, que é o novo componente do Google para criar o menu lateral.

Mas não se preocupe, pois esse componente é muito simples e fiz um tutorial para você entender ele aqui. Assim você não perde nada 🙂

NavigationView – A nova view para criar o Navigation Drawer

2ª) A outra alteração na verdade é uma “adição” de conteúdo. No final do capítulo 15 adicionei uma explicação referente a como criar animações na toolbar durante a rolagem da lista (algo bem comum nos aplicativos atualmente).

Estou falando destas animações na toolbar quando você rola a tela para cima e para baixo:

Este item é um conteúdo novo, portanto não descarta nada do que você aprendeu na 4ª edição.

Sobre estas técnicas de rolagem do Material Design, fiz um tutorial passo a passo bem simples que mostra como aplicá-las em uma tela com uma lista de planetas.

Então recomendo você ver esse post abaixo para complementar seus estudos e aprender à criar estes efeitos. Se você leu meu livro deve estar com um conhecimento bom de Android, então vai tirar este tutorial de letra.

GDG DevFest Sul 2015 – Animações na Toolbar


Bom pessoal, não quero me estender muito, pois foi só isso que mudou na 5ª edição.

Quando fui fazer uma revisão para uma nova impressão do livro, acabei escrevendo demais e o número de páginas do livro mudou. O resultado foi que a editora teve que lançar uma nova edição.

Então quem comprou a 4ª edição, podem ficar tranquilos, pelos motivos já explicados acima.

As vezes é complicado acompanhar tantas mudanças, mas fazemos o possível 🙂

E quem tem o livro sabe onde encontrar o código-fonte… Então qualquer dúvida é só dar uma espiada no fonte dos carros da 5ª edição que você vai ver o projeto completo lá 🙂

Qualquer dúvida, estou a disposição como sempre.

abraços

Demo AngularJS do Livro de Web Services

Posted by rlecheta on julho 27, 2015
Livros, Web Services / No Comments

Demo em AngularJS publicada no site:

http://livrowebservices.com.br/

A demo consome os web services RESTful feitos no livro.

Para ver a demo acessar a página index.html.

http://livrowebservices.com.br/index.html

A demo não ficará no ar para sempre.. Vou tirar do ar quando o site do livro entrar.

Screenshot from 2015-07-26 21:31:05

 

Livro Web Services RESTful e Google Cloud Platform

Posted by rlecheta on julho 25, 2015
Livros, Web Services / 3 Comments

Olá pessoal, a previsão de lançamento do livro Web Services RESTful com Java e Google Cloud Platform é para Setembro 🙂

Coloquei alguns web services no site para demonstrar… Seguem o mesmo formato que uso nos livros de mobile.

http://livrowebservices.com.br/

Metade do livro explica como fazer o web service, e a outra metade como instalá-lo no Google Cloud Platform. Tem capítulos de segurança, OAuth cliente e servidor, etc.

Estou nos finalmentes, nos capítulos que explicam como consumir o web service em aplicações web JQuery/AngularJS e Android.

O app Android vai usar estes web services (igual o app dos carros), e inclusive vai salvar/atualizar/excluir os carros online. O app vai até tirar fotos e fazer o upload para o Google Cloud Storage via o web service…

Segue sumário completo: Só falta os caps 18 e 19 pois deixei a parte cliente para o final…

1) Introdução
2) Java Servlets e Web
3) MySQL
4) Java e Banco de Dados (JDBC)
5) Web Services Básico com Servlets (GET,POST,PUT,DELETE)
6) Web Services RESTful (JAX-RS)
7) Maven
8) Spring
9) Hibernate/JPA
10) File Upload – vamos usar no app Android dos carros
11) Google Cloud Platform – instalando o servidor na nuvem
12) Google CloudSQL – banco de dados na nuvem
13) Cloud Storage – as fotos dos carros são salvas na nuvem
14) Google AppEngine
15) Google ComputeEngine – configurando o servidor
16) Google ComputeEngine 2 – instalando a aplicação no servidor
17) Consumindo web services com Java
18) Consumindo web services em Web (AngularJS)
19) Consumindo web services em Android (exemplo de app completo dos carros)
20) Segurança em Web Services (autenticação, oauth, etc)
21) OAuth Client
22) OAuth Server

Livro Amazon Web Services (AWS)

Posted by rlecheta on janeiro 03, 2014
Livros, Web Services / No Comments

Já pensou em criar aplicações na nuvem com alta disponibilidade e escalabilidade?

Você sabe criar aplicações que podem ser acessadas rapidamente no mundo inteiro por milhões de usuários?

Como gerenciar os balanceadores de carga, escalonamento de servidores e banco de dados?

Meu novo livro de Amazon Web Services, visa desvendar a arquitetura deste desenho ! 🙂

arquitetura