segunda-feira, 22 de junho de 2009

.Net, as coisas estranhas

Bem, tenho desenvolvido ultimamente em .Net, não vou negar, e a cada dia eu me deparo com uma coisa pior que a outra. Resolvi escreve-las aqui, não para icitar brigas, mas para documenta-las. Vamos as coisas mais estranhas do .Net.


1) Serialização de Objetos: Existe uma classe chamada XmlSerializer, muito útil, mas quando você vai serializar um objeto que se relaciona com outros você precisa criar uma instancia do XmlSerializer informando todas as classes que o seu objeto depende, ele não consegue inferir via reflexão.

é mais iu menios assim:


XmlSerializer ser = new XmlSerializer(
typeof(AClasseQueVaiSerializar), new Type[] {
typeof(todas), typeof(as), typeof(classes),
typeof(que), typeof(depende), });


Se houver outra forma e alguem souber, por favor, me avise.

2) Falta de comportamento padrão: Precisei criar um controle para exibir algumas informações para o usuário, para deixar a coisa mais bonita coloquei as bordas arredondas seguindo algumas dicas que achei na internet. Como a caria da coisa ficou legal, gerei a partir do controle uma imagem e salvei, para fazer um estilo de live preview quando o usuário selecionasse o arquivo depois de salvo. Ai é que veio a surpresa, cade os cantos arredondados????

Só para clarear, segue o trecho de código:

// Função do windows que deixa com os cantos arredondados.
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn(
int nLeftRect, // x-coordinate of upper-left corner
int nTopRect, // y-coordinate of upper-left corner
int nRightRect, // x-coordinate of lower-right corner
int nBottomRect, // y-coordinate of lower-right corner
int nWidthEllipse, // height of ellipse
int nHeightEllipse // width of ellipse
);
...
Region = System.Drawing.Region.FromHrgn(
CreateRoundRectRgn(0, 0, Width, Height, 20, 20));


E para salvar a imagem, simplesmente...


Bitmap bitmap = new Bitmap(Width_controle, Height_controle);
panel2.DrawToBitmap(bitmap, new Rectangle(0,0,
Width_controle, Height_controle) );


3) Emuns: Bem, são realmente simples enumerações numéricas, bem diferente do Java.

quarta-feira, 20 de maio de 2009

Minha CG 77

Esses dias bateu a nostalgia, começei a procurar fotos das motos que tive. Foi muito difícil achar a foto da primeirona, não foi bem da minha, mas é o modelo.

Minha CG 77, a primeira. Segue a maior viagem feita com essa motoca.

CG125_1

CG125_5

quarta-feira, 1 de abril de 2009

Pequeno Review: Design Emocional


Estou lendo vários livros que estavam enfileirados na minha lista. Dentre eles estão dois livros que trata de alguns termos que a maioria dos desenvolvedores e arquitetos de software só sabem que existe por causa da reclamação que fazem, os usuários. Os livros são Design Emocional e Abou Face 3.

Acabei semana passada de ler o Design Emocional e posso dizer que é um livro muito bom. No final o autor começa a falar um pouco sobre robotica e foge da realidade da maioria de nos, mas é muito interessante.

Resumindo o livro, o autor fala de três níveis de percepção emocional das coisas e como ela interferem na usabilidade e "desejabilidade" do software. Os níveis são o viceral, que trata das coisas que gostamos a primeira vista, o comportamental, que fala sobre como a usuabilidade interfere na iteração do software, e o reflexivo, que trata coisas como conhecimento passado e como ele afeta nas coisas do hoje.

Se você quer entender o usuário e como melhorar sua iteração para conseguir que o seu produto se encaixe melhor no seguimento que atua você deve ler esse livro. Eu já estou colocando em prática algumas coisas aprendidas nesse livro e é interessante ver a cara do seu usuário, um verdadeiro 8-).




terça-feira, 30 de setembro de 2008

Sun Tech Days

Estive lá, e apesar de não ter participado em nenhuma sessão anterior, achai um pouco fraco. Não que os palestrantes não tenham potencial, mas perece que a coisa foi feita um pouco na correria.

Do mas assisti aos Key Notes do Jim Parkinson e do Bob Porras (QUE NOME) e deu para perceber algumas diferenças, os dois são Vice Presidentes da Sun e são programadores, pelo menos pelo que eles disseram, e são muito empolgados sobre tecnologia.

As demais sessões foram uma repassagem dos tutoriais e materiais que estão disponíveis na web e acabaram não agregando muito. Acredito que para os que não ficam googlando por ai deve ter havido alguma novidade.

A sessão mais interessante foi a "Plataforma Java O que há de novo?". Foi bom ouvir da Sun o que eles estão pensando em fazer com a linguagem. Algumas coisas, particularmente eu já sabia, mas outas como JAM (JavA Module) tenho que repensar mais um pouco.

terça-feira, 29 de julho de 2008

Mercurial



O mercurial é realmente ótimo. Como desenvolvemos para windows, estamos usando o TortoiseHG para como interface do Mercurial. Segue um screenshot de uma das telas do TortoiseHG.

Explicando melhor, cada bolinha é um commit. Todas as sequencias são locais, as uniões entre os caminhos marcam os pontos em que os fontes foram unidos e equalizados, apontando quem fez as uniões e quais foram os arquivos unidos. Uma coisa muito interessante é a representação do ponto em comum. No exemplo da imagem, houve um ponto em comun onde duas pessoas começaram desenvolvimentos diferentes e como tudo foi unido um pouco mas adiante.

Não consigo ver uma maneira mais fácil de rastrear as mudançãs que essa. Depois de alguns anos trabalhando e administrando repositórios CVSs e apanhar de suas limitações e dificuldades de traking de informações, branching work e etc, acho que estou usando uma das melhores ferramentas para controle de versão, o Mercurial (HG).

terça-feira, 22 de julho de 2008

Sistema de Controle de Versão (Mercurial)


Todos já ouviram falar do CVS, sistema de controle de versão. Tenho tido alguns problemas com ele ultimamente em um projeto com vários desenvolvedores trabalhando pararelo. O processo de merge e tracking das alterações é um bocado complicado. Tentando acabar com esses problemas fiz um estudo com algumas opções e no final das contas estamos usando o Mercurial.

Olhamos o GIT, Mercurial(HG) e Subversion. O git é ótimo mas o modelo que é usado para armazenar o histórico pode corromper e precisa ser reindexado periodicamente. O subversion é muito bom, mas ainda não chega aos pés do tracking 
de alterações suportadas pelo GIT e o Mercurial.

Iniciamos a utilização em um projeto que já estava no CVS, conseguimos importar o histórico para o Mercurial sem muito problemas, precisamos de um linux para isso, uma vez que precisamos do PCVS. O Mercurial só aceita conexão segura para commit dos dados no repositório central e traz o conceito de Sistema de Controle de Versão Distribuído, que é outro assunto. Basicamente o commit é feito local e unido com os outros commits através de siscronismo, um pouco complicado no início, mas depois que pega o jeito fica fácil.

Há distribuições para quase todas as plataformas, no ambiente que montamos usamos o TortoiseHG, bem windows like. 

Quem estiver pensando em trocar seu atual sistema de controle de versão vale a pena dar uma olhada. Qualquer dúvida, estamos aqui.

terça-feira, 24 de junho de 2008

XCode, OpenGL e OpenCV


Estou estudando ultimamente sobre Inteligência artificial, não um assunto muito fácil, mas é muito gratificante quando se consegue ler uma série de páginas em inglês sobre o assunto e entender tudo, pode ser que esteja na parte fácil.

Uma das bibliotecas que é muito utilizadas é a OpenCV. Como estou no mac resolvi tentar juntar essa biblioteca, com OpenGL desenvolvendo em Object-C. A coisa realmente não é tão fácil, mas depois de algum tempo sai.... :-).

Bem, ainda estou no começo, brincando de desenhar uma imagem adquirida pela OpenCV. O projeto ainda está bem simples, mas vamos ver até onde conseguimos ir. O xcode é bem diferente para quem está acostumando com java, gasta-se um tempo para entender onde estão as coisa e como conectar a interface com a camada de controle.