Downgrade?

Se alguém disser que possui uma câmera DSLR de 10 megapixels e resolveu comprar uma mais compacta de 4,6 megapixels, outros poderão se assustar. “Mas hoje qualquer compacta tem 10, 12, 14 ou mais megapixels!” Bem, primeiro que ela não é tão compacta assim, pelo menos não cabe no bolso da camisa. Segundo, o sensor dela é bem maior do que o sensor de uma compacta. Terceiro que é um sensor Foveon que difere dos sensores tradicionais que possuem um filtro de bayer e, pixel por pixel são melhores.

Aproveitei que iria fazer uma viagem e comprei uma DP2x. Saiu mais ou menos o preço de uma compacta das mais carinhas por aqui. A câmera não é indicada para qualquer um já que possui uma lente fixa (não possui zoom, nem de 4x das compactas). Parecida com aquelas câmera antigas de filme que existiam antigamente que também não possuiam zoom e o pessoal se virava assim mesmo. O zoom são as pernas. Basta se aproximar ou afastar do assunto (claro que apenas quando é possível). Mas considere que deve ser bom para a saúde.

Gosto de fazer as fotos em RAW para evitar dificuldades de futuras recuperações nas fotos que poderiam ser impossíveis no formato .jpg. Os softwares livres não trabalham com o formato X3F da Sig, felizmente, o programa da Sigma (SPP – Sigma Photo Pro) roda bem no Linux sob wine. Bem, até a versão 4.5. A versão 5.0 (estou com a versão 5.2) possui alguns probleminhas como apresentar uma fonte muito pequena nos botões e outros controles (assim com duplicidade) e uma fonte muito grande na lupa, como podem ser vistos na imagem acima. Não inviabiliza a utilização mas também não é o ideal.  Depois eu verifico se é apenas um problema de fontes. O programa não é super rápido mas, por outro lado, entrega uma imagem quase perfeita já no modo automático.

Possuo uma Pentax K10D que já não pode ser considerada nova no mundo das câmeras onde lançamentos são efetuados praticamente a cada ano. A K10D não é uma câmera das mais rápidas, silenciosas nem tem um ISO alto (máximo 1600) bom. A DP2x também não pode ser considerada super rápida, nem silenciosa nem tem um ISO alto muito bom (vai até 3200).  Em  ISOs mais altos, é melhor optar pelo preto e branco. Não tenho muito o que reclamar da velocidade de foco da DP2x. Achei compatível com as outras câmeras que possuo (ele se quebra um pouco em condições de pouca luminosidade). Em ISO baixo, as imagens são excelentes.

Foi rápido para me acostumar com os controles da câmera e achei bastante simples. Só não gostei dos Qs (Quick Set menus) onde as opções são sequenciais. Se estou usando ISO 800 e quero retornar para ISO 400, por exemplo, sou obrigado a percorrer a sequencia 1600, 3200, auto, 50, 100, 200, 400 (pelo menos não sei se é possível de outra forma mas também não li o manual). Pode parecer enfadonho mas a operação é bem rápida. Xarope e se na pressa você passa do 400. Aí é necessário percorrer todo o caminho novamente. xiti. :-)

A foto do exemplo acima para uma idéia (foco no DP2x da caixa). Clique para ver maior.

Não, não pretendo fazer comparações com a K10D no que se refere a qualidade de imagem. Um exemplo em ISO 1600, processado automaticamente pelo SPP e apenas convertido para PB.

Por enquanto era isso. Agora é aprender mais sobre a danadinha e aprender a fotografar. :-) Se alguém estiver interessado, melhor ler os avisos antes de comprar. Foram (ou serão) lançados novos modelos com mais megapixels (15). Mas considere que o preço será maior assim como os arquivos (chutando uns 40MiB por arquivo RAW já que a DP2x tem geralmente 15MiB e são maiores que os da K10D). Mais espaço para armazenar, mais processador para trabalhar, etc.

Smalltalk – TDD

Como pode ser visto nos artigos anteriores, o ambiente do Smalltak (estou usando o Pharo) é excelente para o desenvolvimento e depuração, permitindo alterações em tempo de execução mantendo o estado dos dados. Nem precisa de TDD.

Mas não é bem assim. Alterações no sistema podem requerer que todos ou uma determinada série de testes sejam refeitas para validar a correção do programa. Quando o programador possui prazos e nao se policia muito bem, os testes impõem um limite tangível. Passou nos testes não é necessário mais nada. Também não é bem assim, mas vamos ignorar por hora.

O “video-tutorial-mudo” mostra como utilizar TDD no desenvolvimento e como o sistema facilita a vida do usuário na criação de classes, métodos e execução dos testes. Foram feitos apenas testes para passar, mas poderiam ser criados testes para os casos onde deve ocorrer falha (divisão por zero por exemplo) e, como sempre, outras coisinhas.

Inicialmente criamos uma classe derivada de TestCase que conterá os métodos correspondentes aos testes a serem efetuados. Existe ainda o método setUp que, se definido, será executado antes de cada teste e o método tearDown que será executado ao final. Colocamos os métodos na categoria testing.

No evento do vídeo abaixo, após a criação do primeiro método para o teste, eu poderia criar a variável ‘c’ na instância da classe e inicializá-la no método setUp. Optei por declará-la como temporária dentro do próprio método. Tudo que o ambiente não reconheceu, tentou criar de uma forma automatizada ou solicitar a confirmação.

Poderemos executar os testes diretamente pelo menu, toda a classe ou os métodos individualmente. Como de praxe, quando um teste falha, o círculo na esquerda fica vermelho. Se passa é mostrado na cor vermelha. Podemos utilizar a janela TestRunner para auxiliar na execução dos testes. Depois fizemos uma pequena refatoração no programa e executamos os testes novamente para confirmar se estava tudo perfeito.

O vídeo baseia-se na imagem salva do artigo anterior.

=-=-=-=-=
Powered by Blogilo

Smalltalk – Imagem e versionamento.

Para continuar lendo esta entrada, é necessário que você tenha lido a anterior. Pausa para ler a anterior……

Ok, então criamos uma classe, seus métodos, agrupamos para uma melhor organização, efetuamos os testes e, ao sair do ambiente, decidimos por salvar a imagem. Quando abrimos o ambiente novamente, ele encontra-se no mesmo estado que estava quando saímos. Podemos inclusive continuar com os testes no Workspace que tudo funcionará normalmente. Aliado ao fato de podermos efetuar alterações no código e continuar trabalhando como se nada tivesse acontecido, certamente são fatores que facilitam a vida do desenvolvedor.

Digamos que eu queira alterar o método resetTo: para que, se for recebido um valor negativo, inicialize o contador com zero. Não tem nenhum problema. Basta alterar o método e continuar com os testes (TDD fica para outra hora). Mas e se…. A sei. Você faz uma cópia do método ou comenta as linhas caso necessite retornar ao código original? Aqui não é necessário. O próprio ambiente se encarrega de fazer o versionamento do programa. A qualquer momento você poderá retornar algo anterior. Mais uma característica do ambiente para facilitar a vida do desenvolvedor.

Se fosse somente pela linguagem, Smalltalk seria apenas mais uma em um ambiente onde se cria uma nova linguagem a cada dia com algumas frescurinhas para diferenciar de outra. Mas como Smalltalk pressupõe a linguagem e o ambiente (já era assim na década de setenta) e o ambiente oferece facilidades não encontradas ou dificilmente encontradas em outros ambientes, aliados a uma linguagem simples e flexível, o seu estudo vale a pena. Se você possui um caixa razoável até poderia pensar em investir em um ambiente comercial (veja alguns casos de sucesso com o VisualWorks; e o JPMorgam não é o que se pode chamar de empresa pequena).

Ok, mais um vídeo mudo.

=-=-=-=-=
Powered by Blogilo

Smalltalk – Criação de classes, métodos e outras coisinhas.

Agora vamos ver como criar classe e métodos no Pharo. Como de praxe, ao final teremos um vídeo mudo. A primeira coisa a fazer é abrir o navegador do sistema para termos acesso a todas as classes e métodos existentes na nossa imagem de trabalho. Da esquerda para a direita temos as categorias das classes, classes, categorias dos métodos e métodos. Na parte inferior temos o código de um determinado método.

Depois falaremos mais sobre imagem. Para não bagunçar o sistema, criarei uma categoria chamada Sandbox onde vou criar classes para demonstração.

Depois crio uma classe Contador. Posteriormente, adiciono diversos métodos ao contador como incremento e decremento. Os métodos serão categorizados para que tudo fique mais ordenado e de fácil localização.

Ao criar o método para a inicialização da classe, foi informada uma variável que conterá o valor atual do contador propositadamente não definida anteriormente para mostrar como o ambiente se comporta nessas situações no momento em que ele compila o método (Accept).

No meio tempo, exploramos algumas possibilidades do ambiente como edit & continue com adição de novos métodos, inspeção do conteúdo de uma classe com o resultado da execução dos métodos.

Ao término iremos fechar a janela e salvar a imagem para uso futuro o que significa, basicamente, salvar o estado atual do ambiente. No próximo artigo veremos melhor o que significa isso.

Abaixo o vídeo-tutorial-mudo. :-)

=-=-=-=-=
Powered by Blogilo