quinta-feira, 28 de abril de 2011

Primeiros passos com Objective-C e iOS Development

[Update: excelente material sobre ObjectiveC: http://www.astro.iag.usp.br/~algol/computacao/ObjCtutorial.html. Dá até pra programar usando MinGW no Windows!]

Pois é, cá estou me aventurando com MacBook, Objective-C e iOS, visando aprender a desenvolver aplicações para iPhone. A iniciativa surgiu da necessidade de ter mais independência em um projeto que estou desenvolvendo. Fiz o backend da aplicação, em Java, e agora estou começando a estudar o frontend da aplicação, uma app iPhone.

A primeira dificuldade em que esbarrei foi a sintaxe da linguagem. Ter programado muito em C/C++ durante a graduação (minha Iniciação Científica e meu TCC foram um escrito em C++) me ajudou a não ter medo da sintaxe. Porém Objective-C possui construções bastante diferentes, e o artigo "Learning Objective-C: a Primer"  foi fundamental para dar o primeiro passo, que será seguido de um Hello World para iPhone e de "The Objective-C Programming Language".

Desta primeira leitura, tentando fazer um paralelo entre ObjectiveC e Java (se é que isto é possível):
  • Classes Java (atributos + métodos): Em ObjectiveC, classes são divididas em @interfaces (.h) (declarações de atributos e métodos) e @implementations (.m), onde os métodos são efetivamente implementados.
  • Métodos de Acesso (getters e setters): são declarados como @property na @interface e @synthesize na @implementation.
  • Interfaces Java: no sentido que definem contratos a serem implementados, se assemelham aos Protocolos Objective-C (um .h especial, onde são declarados apenas métodos do protocolo, sem atributos nem propriedades).
  • @end encerra a declaração de classes, interfaces e protocolos.
  • @implementations baseadas em protocolos usam uma declaração semelhante aos generics Java (<Protocolo1, Protocolo2, ...>), mas uma coisa não tem nada - absolutamente nada - a ver com a outra.
  • Modificador de Tipo (-): método de instância; (+): método estático.
  • Assinatura de métodos: achei interessante, parece permitir a criação de fluent interfaces de acordo com os argumentos de um método.
  • Chamadas de métodos: têm uma sintaxe bastante particular, entre colchetes, denominada mensagem.
Por agora, são as primeiras impressões. Claro que a percepção vai mudar muito (ainda estou a caminho de implementar um hello world), e vai ser interessante documentar esse aprendizado.

segunda-feira, 4 de abril de 2011

Agendamento de tarefas com o Spring 3

Com relativa freqüência, nos deparamos com a necessidade de agendar tarefas:
  • De tempos em tempos, executar uma regra de negócio e enviar o resultado para um e-mail.
  • Escanear periodicamente um determinado diretório, para verificar se existem novos arquivos
  • Disparar newsletters
  • etc
A simplicidade de criar tarefas agendadas no Spring 3 impressiona. Basta configurar o namespace <task> e anotar métodos de negócio com @Schedule ou @Async:

beans.xml


Tarefa anotada com @Component e @Scheduled


O @Schedule pode ser usado, passando como argumento uma expressão Cron, em intervalos fixos (fixedRate), ou com um delay entre chamadas (fixedDelay).
OBS: fixedDelay é o tempo entre o término da última execução e o início da próxima execução; fixedRate é o tempo o início de cada execução; portanto o primeiro pode ocorrer em intervalos variáveis.