07 setembro 2015

#2.(1/2) - Como baixar o projeto da vídeo-aula usando o GIT



Criei um tutorial disponível no meu outro blog (medium) como as explicações detalhadas:


Tutorial: como baixar o projeto da vídeo-aula usando o GIT

30 agosto 2015

Nova série no Youtube

"Criei uma nova série no meu canal do Youtube: Tutorial Rápido — como fazer. A ideia é produzir vídeos com simplicidade e melhor qualidade. Para isso, vou testar um novo formato, que ainda estou avaliando, mas que me parece interessante para quem assiste e para quem produz. Vou comentar um pouco sobre essa ideia e minha experiência de produtor de conteúdo para Youtube."




O texto na íntegra pode ser lido na página que vai carregar abaixo.

Nova série no Youtube

Caso não carregue, o link pode ser acessado aqui:
https://medium.com/@douglasddf/nova-s%C3%A9rie-no-youtube-fac05c7fbb82

27 agosto 2015

projeto iOS: Language Localization


Aplicativos estão cada vez mais aptos a serem utilizados globalmente. No entanto, para alcançar esse mercado, os envolvidos na produção do software precisam se atentar à necessidade de internacionalizar os textos que aparecerão na interface. A proposta deste tutorial é demonstrar uma solução que tenho adotado em projetos iOS.

Você poderá ler o artigo completo acessando o link abaixo.

Language Localization em projetos iOS

Originalmente publicado aqui.

06 agosto 2015

Criando um projeto open-source: iOS-Check-Permission

No dia a dia do programador é bastante comum trabalhar com diversos algoritmos para resolver problemas específicos da empresa ou do cliente. Muitos dos programas as vezes ficam esquecidos quando o projeto acaba. Uma forma de preservar as soluções de código desenvolvidos é criar um ou mais componentes e publicá-los em comunidades abertas. Vou descrever uma experiência de publicar um componente no Github.com.

O componente iOS-Check-Permission

Criei um componente para permitir as aplicações em iOS solicitarem a permissão de uso dos seguintes recursos nativos do celular de forma transparente a o mais simples possível:

  • Calendar (permitir acessar o calendário do usuário para marcar eventos)
  • Reminder (permitir usar o recurso de agendamentos de lembretes)
  • Gallery (ter acesso as fotos ou vídeos da galeria do aparelho)
  • Location (para usar o GPS obtendo a localização atual)

iOS-Check-Permission [1]

Ouça também o podcast:



Por que criar um componente/biblioteca?

Havia necessidade de escrever um código para ter acesso a galeria de imagens do usuário usando a tecnologia do iOS, bem como, a necessidade de obter a permissão da Câmera do celular para tirar fotos com o iPhone. Um código inicial foi escrito para fazer isso funcionar usando a linguagem Objective-C. Porém, percebi que poderíamos reusar essa solução em outros projetos, caso isso fosse necessário.

No início, havia uma classe utilitária para ser usada dentro do projeto, com a solução de código que permitia reusar o recurso para usar a câmera nativa sempre que fosse necessária. Esse recurso requer solicitar autorização do usuário para poder ser utilizado no aparelho. Com o andar do projeto, algumas outras permissões foram sendo necessárias, pois a medida que novos recursos foram sendo requisitados, tais como uso da galeria de imagens do iPhone e do recurso de lembretes (Reminders), também precisei de uma solução parecida com o que já tinha feito.

Então venho a ideia de componentizar a atual classe utilitária para se tornar um componente reusável. Embora essa ideia não tenha nada de sofisticado, para se tornar um componente na prática é preciso decidir onde vai colocar isso. Poderia ser, por exemplo, no próprio repositório do projeto, dentro da empresa que você trabalha.
Mas será que outras pessoas iriam encontrar?
Será que os próprios colegas da empresa em questão saberiam que isso está ali disponível?

A prática mostra que não. E que seria preciso colocar o componente em outro repositório, preferencialmente que seja popular e conhecido entre a comunidade de usuários de desenvolvedores. Assim, pensei e resolvi colocar no repositório Github, cujo nome do componente se tornou

  iOS-Check-Permission - https://github.com/douglasddf/iOS-Check-Permission 
O resultado foi que encontrei um pretexto para continuar fazendo o que mais gosto: programar. 

Após alguns resultados positivos, surgiu a necessidade de fazer um exemplo de uso para demonstrar as funcionalidades básicas do componente, bem como, já servir de base para outros entenderem como poderia ser usado. O vídeo abaixo foi feito para ilustrar sem que o desenvolvedor precise instalar as ferramentas Xcode.



Para colocar no GITHUB foi necessária criar uma conta e ler os guias para entender como enviar o código para lá. Como o próprio nome diz, GIT + HUB se baseia na ferramenta do GIT {já escrevi outro post aqui sobre ele}. Outros conhecimentos foram necessários, como escrever um pequeno texto em English para descrever o que o componente faz. Afinal, se não explicar, como os outros vão saber para que serve?

Outro ponto que posso destacar é que no processo de estar fazendo, surgiu a demanda de fazer a biblioteca suportar o recurso de Localização (Location). No entanto, para minha surpresa, a forma de fazer isso funcionar não se parecia em nada com a abordagem dos outros recursos. Ou seja, surge um novo desafio pessoal. :)

Além disso, após já ter publicada a biblioteca no repositório e ter avisado os colegas, vem aquele amigo e diz que ainda não está bom o suficiente, precisa suportar o COCOAPOD. Mais um desafio que surge e que você não previu antes, mas que passou a ser importante para que o componente possa ter maior alcance.

Então você percebe que não tem tempo. O que você faz?

A relação do tempo têm haver com a priorização que queremos dar as tarefas diárias. Programar é muito bom quando se faz com prazer, logo, posso arrumar tempo para isso no dia a dia. Pois quanto maior for o desafio, maior será o seu aprendizado. Mas não se sabe ou não se aprende somente na teoria, mas na prática e gerando resultados que vai prover as lições para nos mostrar as respostas.

Resultados só vem após tentar, fazer e conseguir. 

Compartilhar uma solução na comunidade de open-source, tal como o github, faz com que haja uma preocupação extra com a qualidade do código final. Mas para mim, o mais legal é ter o sentimento de contribuir com a comunidade e porque não: contribuir com a humanidade, do seu jeito, da sua forma, com seu esforço.

Pode não ter dinheiro envolvido, mas tem a causa de contribuir que essa, de uma forma desconhecida, há de se ter um benefício a longo prazo a você e a muitos outros.  


01 julho 2015

Memory Leak / vazamento de memória na programação


Recentemente me deparei com problemas de memory leak no desenvolvimento de uma aplicação para iOS (iPhone/iPad) e foi difícil de resolver e achar a causa do problema. Comentarei um pouco sobre isso.


Memória é um recurso excelente para fazer nossos aplicativos rodarem de acordo com o esperado. Porém, quando falta memória o aplicativo pode fechar inesperadamente. Também conhecido como CRASH.

Em aplicações iOS, que são baseados em linguagem C, trabalhamos com as linguagens Objective-c ou Swift, que normalmente fazem uso de ponteiros e acesso a endereços de memória. Qualquer "vacilada" ou descuido durante a programação, levamos a erros que geram CRASHs.

Memory leak é um tipo de erro muito indesejado e são problemas de memória alocada, mas que na prática, não liberada, ficando acumulada e retida (presa). Assim, se deixar vazamento de memória em algum ponto do programa, o acesso consecutivo a esse ponto vai gerar acúmulo de recursos de memória. O problema ocorre porque o SO não consegue desalocar esse recurso porque ficou retido.

Há várias possíveis razões:

  • variáveis alocadas ficam referenciadas em algum ponto durante a  execução do algoritmo;
  • recursos que consomem mais memória podem ficar retidos em processos Zombis;
  • componentes da plataforma consomem recursos e não são fortemente liberados (ex. UIImagePickerController - iOS / manipular a câmera que tira as fotos possui memory leak);
  • uso de propriedades de componentes visuais com tipo "strong" pode reter memória (em iOS/MacOS...);
  • uso de bibliotecas ou modificações nesses componentes sem analisar essa questão, etc.


Como evitar vazamento de memória


Uma forma interessante é utilizar ferramentas de Profiling. No iOS temos o "instruments", que é um conjunto de ferramentas que podem ser usadas para analisar a execução do programa para avaliar graficamente e os dados estatísticos, onde estão os pontos errados. Identificar esses pontos permitirá avaliar o código melhor e tomar decisões para corrigir as falhas.

Uma forma eficiente que aprendi, quando temos leaks identificados, mas sem saber a causa, pode-se ir comentando funcionalidades chaves e rodar novamente o Profiling. Se ocorrer mudanças significativas para melhor, significa que o provável memory leak está no ponto comentado, caso contrário, continue comentando códigos e rodando o analisador novamente até que encontre o "vilão".

30 maio 2015

GitHub.com e o GIT

GitHub é um serviço de hospedagem de código público ou privado, que usa a tecnologia do GIT para a gestão dos códigos fontes. A tecnologia GIT é um sistema de controle de versão distribuído. Oferecer a infraestrutura do GIT como um serviço transparente aos desenvolvedores, de nível de escala mundial, através de um modelo de negócio pago ou gratuito, foi, ao meu ver, a grande sacada que tornou o GITHUB.com, um dos mais populares serviços oferecidos aos programadores.


Gravei um podcast para falar dele. Ouça se tiver interesse:



Durante o podcast, não pude explicar como usar o GIT, apenas citei alguns exemplos básicos. Vou sugerir que você procure um tutorial na internet. Eu indico o meu tutorial preferido logo abaixo, mas estou ciente que para aprender a usar o GIT, você precisará ir mais afundo.


Veja mais:

11 março 2015

Algoritmos e Lógica de programação: conhecimento essencial!

As linguagens de programação são excelentes formas de aprender a programar. Mas para se aventurar na programação é preciso do conhecimento básico e essencial: ALGORITMO.

Neste podcast falo sobre os Algoritmos e as suas formas de representações. Além do entendimento dos 4 comandos básicos essenciais: Entrada de dados; Saída de Dados; Processamento e Decisão.

E para não esquecer de nada: o que a lógica de programação tem haver com algoritmos e a programação?




Além disso, comentamos, em linhas gerais, sobre como as Linguagens de Programação fazem para converter os Algoritmos em linguagem de máquina, através das ferramentas Compiladores.

06 março 2015

Dicas sobre programação para dispositivos móveis + podcast

Algumas dicas pessoais sobre o mercado de desenvolvimento de aplicativos móveis para #Android #iOS e#WindowsPhone

Como começar, vantagens e desvantagens de cada tecnologia. Além disso, um relato pessoal e verdadeiro, de onde está o custo principal envolvido hoje em dia: 

na construção da experiência de uso do aplicativo ou game e menos no esforço da codificação em si.





Links relacionados: