Archive for January, 2009

Síndrome de DAO

Saturday, January 17th, 2009

O assunto Repository X DAO já está bem batido, eu sei, mas é impressionante como isso confunde muita gente até hoje… Muitas pessoas já postaram sobre isso mas eu quero dar meus dois centavos.

Com a popularização do Domain-Driven Design ví muita gente simplesmente renomeando seus XptoDAO para XptoRepository achando que assim estariam aplicando DDD porque “chamar um objeto de Repository é mais semântico que DAO”. Esses dias no Twitter ví uma mensagem assim: “Repositório ou DAO ? Eu gosto do nome repositório porque me parece ser uma abstração mais adequada”. Vamos lá, não se trata somente de nomes diferentes para a mesma coisa.

O padrão DAO têm o objetivo de criar uma abstração da infra-estrutura de armazenamento de dados para a aplicação. Uma camada de persistência é útil porque dá a funcionalidade de armazenamento/persistência de dados sem revelar detalhes específicos da infra-estrutura por trás disso. O armazenamento pode ser feito num banco de dados, em vários bancos de dados, em um webservice, em um arquivo texto, tanto faz, mas do ponto de vista da camada de negócios que obtém esses dados, por exemplo, ela está lidando apenas com busca, alteração e gravação de objetos em algum lugar que nem importa.

Já o padrão Repository tem o objetivo de dar apoio ao domain model fornecendo persistência. Ao contrário do DAO, que é um objeto de infra-estrutura da aplicação e faz parte da camada de persistência, o Repository faz parte do domain model que é parte da camada de negócios.

Domain models (modelos de domínio) fazem sentido quando a aplicação tem regras de negócio muito complexas. Isolar as regras de negócio em um domain model torna mais fácil o trabalho de focar e lidar com essas regras complexas. Porém, para que um software possa funcionar fortemente baseado em domain model (que é a proposta de Domain-Driven Design) é necessário dentre outras coisas que haja algum componente que faça parte desse modelo e permita que se faça persistência de dados – e daí veio o Repository.

No ano passado conversei bastante com o pai do DDD – Eric Evans – sobre isso e para ele o problema é que as pessoas confundem esses dois conceitos porque realmente são bem parecidos. Na maioria dos casos você irá precisar dos dois, porque o domain model fará buscas por objetos em um Repository que por sua vez delegará para o DAO, que é quem entende como é a infra-estrutura de armazenamento de dados. Para ele também não importa se o Repositório é uma classe ou uma interface, o que importa é que os objetos do domain model deverão dempre lidar com busca e persistência de objetos usando a interface do Repository, que tem o compromisso de ser mais semântica do que a do DAO.

Livro: Tornando-se um excelente Product Owner

Wednesday, January 7th, 2009

Como já disse em outras ocasiões, o papel do Product Owner é um dos menos abordados em literaturas sobre Scrum – e o papel dele é tão fundamental para o sucesso de um time que é difícil de entender o porque.

Inspirado no livro Scrum and XP from the Trenches do Henrik Kniberg, Robert Galen está escrevendo um novo livro entitulado Becoming a Great Scrum Product Owner, disponível para download em PDF no seu site. O livro ainda é um draft e sua cópia/impressão/distribuição ainda não são permitidos, porém pelo pouco que já li estou percebendo que é um excelente material e que deve preencher um espaço muito importante na literatura de Scrum. E o mais legal é que claramente várias das coisas que estão escritas são fruto da experiência prática do autor e não apenas um monte de teorias.

Recomendo muito muito fortemente a leitura, especialmente se você for um P.O., quiser ter um time de sucesso e quiser ser um profissional de sucesso!

Desbloqueio/Unlock do iPhone 3G com yellowsn0w: seja livre para usar seu iPhone em qualquer operadora!

Friday, January 2nd, 2009

Atenção: este post deixou de ser atualizado no dia 8/janeiro/2009. Certifique-se de que esse método ainda é válido antes de continuar.

No dia 1 de janeiro (conhecido também como “ontem”) o iPhone Dev Team lançou o yellowsn0w, o software que permite que seu iPhone 3G possa ser usado com qualquer chip de qualquer operadora (no meu caso é a TIM). Chega de StealthSIM e UniversalSIM!

O processo de desbloqueio é relativamente simples mas como é muito novo ainda não está bem documentado – principalmente se você nunca desbloqueou ou fez jailbreak num iPhone antes. Passei também por alguns problemas e conseguí me virar graças a informações que estão espahadas em vários lugares, por isso decidí fazer esse guia para facilitar a vida de quem está pretendendo desbloquear o seu iPhone 3G (baseado no guia de desbloqueio do CrunchGear e mais alguns outros, só que mais completo/explicado e em português).

É importante frisar que eu não fiz este processo no Windows. Tudo que está descrito aqui foi feito no Mac OS X versão 10.5.6 com todos os updates possíveis de sistema operacional e iTunes instalados.

Atenção: os softwares usados nesse processo são beta e não há 100% de garantia que o processo vá funcionar. Apesar de haverem vários relatos de sucesso também há alguns relatos de pessoas que tiveram problemas como não receber/fazer ligações corretamente. Comigo funcionou, mas se você quiser fazer é por sua conta e risco! Não me responsabilizo por qualquer tipo de dano ou não funcionamento em seu aparelho.

Se durante o processo você tiver qualquer problema, tome uma cerveja e inicie tudo novamente com mais calma.

Passo 0: retire o SIM do iPhone

Update: Certifique-se de ter retirado o SIM do seu iPhone antes de iniciar o processo, especialmente se você estiver usando algum proxy SIM como o UniversalSIM. Se você já fez o processo com algum SIM inserido, retire-o e comece tudo novamente.

Passo 1: atualizando o baseband para 02.28.00

A primeira coisa a se fazer é atualizar o baseband do iPhone para a versão mais nova, a 02.28.00. Esse baseband faz parte do último firmware lançado pela Apple, o firmware 2.2. Antes acreditava-se que atualizar o baseband tornaria impossível ou difícil o desbloqueio por software mas é justamente o contrário.

Para atualizar o baseband basta apenas fazer o update do iPhone para o firmware 2.2 selecionado a opção “Update” no iTunes. O iTunes irá baixar o firmware 2.2 (que é o último disponível) e atualizar o iPhone, que ficará desativado e travado exatamente como ele vêm de fábrica. Este processo pode demorar de 5 a 15 minutos e você não deve mexer ou rebootar o iPhone manualmente. Deixe que ele termine o processo até aparecer a tela de ativação.

Se você preferir baixar o firmware manualmente, o site ModMyiPhone.com tem o link para baixá-lo – mas isso não é necessário se você não quiser.


* retirado de CrunchGear.com

Passo 2: patch para poder colocar o iPhone em “DFU mode”

Se a sua versão de Mac OS X for 10.5.5 ou inferior pode pular este passo e ir para o próximo.

Se a sua versão de Mac OS X é 10.5.6 como a minha, você não conseguirá colocar o iPhone em DFU mode (Device Firmware Update) porque acredita-se que haja algum bug no driver da USB introduzido na versão 10.5.6. Para corrigí-lo é necessário executar um patch produzido pelo volkspost do Hackint0sh.

O patch pode ser encontrado no site iPhoneHacks.com e é muito simples de ser feito, basta seguir as instruções disponíveis nesta página.

Após o patch seu sistema operacional será reiniciado.

Update: Algumas pessoas reportaram que não conseguiram fazer o iPhone entrar em DFU mode mesmo após o patch do volkspost. Como este problema está relacionado a um bug no driver USB do Mac OS X, uma opção alternativa é fazer o processo de Quickpwn no Windows que não tem este problema. A versão para Windows está disponível no site do Quickpwn.

Passo 3: ativação, jailbreak e instalação do Cydia

Com o baseband atualizado agora é necessário ativar o iPhone, fazer o jailbreak e instalar o Cydia para através dele instalar o yellowsn0w. Para isso vamos instalar no iPhone um novo firmware 2.2 customizado pelo Quickpwn.

Baixe a versão 2.2 do Quickpwn no site deles, instale e execute-o.


* retirado de CrunchGear.com

Na tela acima, seleciona a opção iPhone 3G (o Quickpwn normalmente seleciona esta opção automaticamente quando você conecta o iPhone).


* retirado de CrunchGear.com

Em seguida, o Quickpwn fará um build de um firmware customizado baseado no firmware original 2.2 que você baixou anteriormente pelo iTunes. Esse firmware já está com o sistema ativado, com jailbreak feito e com Cydia e Installer instalados.

Ao terminar de fazer o build, o Quickpwn pedirá que você coloque o iPhone em DFU mode (o modo de atualização de firmware). Se você está com o Mac OS X 10.5.6 certifique-se que você já fez o fix do volkspost para re-habilitar o DFU mode. Se a sua versão é 10.5.5 ou se você já fez o fix, siga em frente sem se preocupar e siga até o final as instruções do Quickpwn.


* retirado de CrunchGear.com

Ele deverá começar a copiar o firmware e alguns arquivos para o seu iPhone…


* retirado de CrunchGear.com

E no final do processo mostrará uma tela como essa abaixo.


* retirado de CrunchGear.com

Se você chegou neste ponto, quando o seu iPhone 3G reiniciar você já estará com ele ativado, com jailbreak feito e com os softwares necessários (Cydia e Installer) instalados. O iPhone está parcialmente funcionando – só não faz ligações ainda.

Passo 4: instalação do yellowsn0w

Instale o yellowsn0w pelo Cydia. Se você nunca usou o Cydia antes, o site AppleiPhoneApps.com tem um bom tutorial de como fazê-lo.

Para fazer com que o yellowsn0w fique disponível na lista de pacotes é necessário adicionar o repositório abaixo. Abra o Cydia, vá na opção “Manage”, selecione “Sources”, depois “Edit”, depois “Add” e digite a URL http://apt9.yellowsn0w.com/ conforme a imagem abaixo:


* retirado de CrunchGear.com

ATENÇÃO, NÃO COLOQUE ESTA URL NO BROWSER conforme alerta o iPhone Dev Team.

Depois de adicionar o repositório no Cydia, procure pelo yellowsn0w entre os pacotes disponíveis e instale-o. No momento que escrevo este tutorial a última versão disponível é a 0.9.4 0.9.5 0.9.6. Vá em “Sections”, selecione “All Packages”, procure pelo yellowsn0w e clique para ir para a tela de instalação:


* retirado de CrunchGear.com

Selecione a opção “Install” e depois “Confirm”.

Quando a instalação terminar, reinicie o iPhone e… TA-DA!!! Agora o iPhone 3G deve pegar sinal e funcionar perfeitamente! Veja a barra de sinal:

Update: Antes era necessário fazer um processo de retirar e colocar o chip toda vez que o iPhone era re-ligado. Com a versão 0.9.6 isso tornou-se desnecessário, bastando apenas reiniciar o iPhone após instalar o yellowsn0w.

Enjoy!

Referências