<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2498135047706386219</id><updated>2011-11-30T00:58:01.198-02:00</updated><category term='Flex'/><category term='Java'/><category term='Web 2.0'/><category term='RIA'/><category term='Silverlight'/><category term='ExtJS'/><category term='.NET'/><title type='text'>Artefatos de T.I.</title><subtitle type='html'>Projetos em andamento, discussões sobre Tecnologia da Informação, coisas estranhas e sem-contexto e por ai vai...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-3871159901655318738</id><published>2011-11-28T19:34:00.001-02:00</published><updated>2011-11-28T19:42:13.311-02:00</updated><title type='text'>Playing with Script#</title><content type='html'>Pesquisando novas tecnologias para o desenvolvimento Web, eu reencontrei o Script# (&lt;a href="http://projects.nikhilk.net/ScriptSharp"&gt;http://projects.nikhilk.net/ScriptSharp&lt;/a&gt;). E como a curiosidade foi grande, resolvi dar uma "brincada" com o projeto. &lt;br /&gt;&lt;br /&gt;O Script# é basicamente um compilador para código em C#, algo próximo da especificação do C# 2.0. Então ao invés de gerar bytecode CIL, gera Javascript. E tenho que falar, gostei da maneira como funciona.&lt;br /&gt;&lt;br /&gt;Irei postar mais informações e um exemplo em breve. &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-3871159901655318738?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/3871159901655318738/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=3871159901655318738&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/3871159901655318738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/3871159901655318738'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2011/11/playing-with-script.html' title='Playing with Script#'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-3706545533734827584</id><published>2011-02-25T00:35:00.000-03:00</published><updated>2011-02-25T00:35:09.717-03:00</updated><title type='text'>Dicas de Inglês</title><content type='html'>Encontrei o seguinte site (http://www.englishexperts.com.br/category/curso-avancado-gramatica/), por acaso. Esse site trás dicas sobre a escrita correta (grafia) da língua inglesa. Gostei muito do conteúdo, assim como das explicações.&lt;br /&gt;&lt;br /&gt;Fica a dica! Aproveitem!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-3706545533734827584?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.englishexperts.com.br/category/curso-avancado-gramatica/' title='Dicas de Inglês'/><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/3706545533734827584/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=3706545533734827584&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/3706545533734827584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/3706545533734827584'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2011/02/dicas-de-ingles.html' title='Dicas de Inglês'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-9179258436036020948</id><published>2011-02-24T02:01:00.001-03:00</published><updated>2011-02-24T02:18:59.925-03:00</updated><title type='text'>.NET C++ Wrapper, Mixed Managed C++, C#, Mono, OGRE... e SWIG!</title><content type='html'>Como parte do meu projeto do mestrado, eu tenho que escolher uma game engine para o desenvolvimento de um protótipo de um framework adaptável de um jogo. Depois de feita algumas análises, eu optei por trabalhar com a OGRE3D, uma excelente engine de renderização 3D, escrita em C++, e completar o resto das funcionalidades com outras bibliotecas.&lt;br /&gt;&lt;br /&gt;O projeto é escrito em C# 4, visando o MS .NET Runtime e o Projeto Mono como máquina virtual, e como a biblioteca OGRE3D é escrita em C++, as funcionalidades não podem ser acessadas diretamente, sendo necessária a utilização de um wrapper para a interoperabilidade.&amp;nbsp;Assim sendo, existem duas escolhas a disposição para dar acesso a tais bibliotecas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MOGRE - Um wrapper feito em Mixed Managed C++, com excelente desempenho, e;&lt;/li&gt;&lt;li&gt;OGRE.NET - Outro wrapper, que realiza as chamadas através de P/INVOKE, sendo gerado através do SWIG.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Acontece que a MOGRE, apesar de ser uma ótima biblioteca, somente provê suporte para o sistema operacional Windows, justamente por ter sido escrita utilizando código misto.&amp;nbsp;Assemblies em Mixed Managed C++ são basicamente uma mistura de código nativo em C/C++ (x86 ou x86-64) com código gerenciável (managed code ou CIL). Como o código nativo é específico da plataforma que foi compilado, o Mono não consegue executá-lo, pois chamadas a funções do Windows estão presentes somente no Windows (bom isso é uma das limitações).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Uma alternativa seria utilizar compilação condicional, assim como é feito em C++ para portar uma biblioteca para diversas plataformas (a OGRE faz isso!). Ainda, assim, seria necessário que o GCC emitisse CIL e que gerasse um assembly em Mixed Code que fosse suportado pelo Mono, o que não é possível no momento.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;O projeto requer que este o seja portável entre várias plataformas, afinal existem várias universidades, cada uma com sua escolha de sistema operacional (Windows, Linux, MacOSX). Sendo assim, a MOGRE passa a ser uma escolha limitada. Desse forma, resta analisar a biblioteca OGRE.NET.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Por sua vez, a OGRE.NET é um projeto que aparenta estar morto. A última biblioteca criada somente dá suporte a versão 1.4 da OGRE, que já se encontra na versão 1.7.2. Sendo assim, não é interessante utilizá-la.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Se ambas propostas não são aceitáveis ao projeto, só resta criar uma alternativa, criar uma nova biblioteca que faça o trabalho. Tal biblioteca deve ser baseada em P/INVOKE que nada mais é do que um modo de se acessar bibliotecas dinâmicas (.dll, .so, .dylib etc) presentes no sistema operacional, através de chamadas a métodos estáticos externos.&lt;br /&gt;&lt;br /&gt;Criar tal wrapper para uma biblioteca como a OGRE é um trabalho extremamente penoso (e como é!!), pois toda a funcionalidade dessa deve ser exposta como chamadas de função em C, imagine então portar todos os métodos de cada classe da OGRE; um grande trabalho, com certeza! Além disso, existem algumas situações onde é necessário manter o polimorfismo entre as classes e não somente criar Proxies (criação de Directors, como definida pelo SWIG).&lt;br /&gt;&lt;br /&gt;Uma alternativa para se realizar tal tarefa é utilizar o SWIG, um gerador que pode ler o código em C++ (headers no caso) e gerar os wrappers necessários em C++ e C# automaticamente. E realmente, pra boa parte do trabalho, o SWIG consegue prover bons resultados, gerando um bom código.&lt;br /&gt;&lt;br /&gt;Como em tudo existe um porém, o SWIG visa portar a biblioteca para a linguagem de destino (nesse caso, C#), mas não se preocupa muito em como tal biblioteca irá parecer perante os olhos de um programador acostumado a plataforma de destino. Surgem algumas construções estranhas na linguagem final; tipos com nomes estranhos, exposição de funcionalidades que parecem com as providas pelo framework mas que não o são, sendo incompatíveis algumas vezes, como em Listas, Dicionários etc.&lt;br /&gt;&lt;br /&gt;Adicionalmente, o SWIG aparenta não suportar a criação de tipos de valor (structs) em C#, tudo é gerado como uma classe (uma das maiores limitações, em minha opinião). Isso provoca um efeito negativo alto no desempenho final da aplicação, que já está prejudicada pela utilização de P/INVOKE. Afinal, cada chamada a um método externo requer de 10 a 30 instruções somente para tal invocação; um constante desperdício de tempo de processamento para cada chamada externa.&lt;br /&gt;&lt;br /&gt;Dessa forma, a construção de código manualmente, apesar de ser extremamente trabalhosa, é a melhor alternativa no momento para realizar tal tarefa. Uma possível alternativa, seria gerar com o SWIG o máximo possível de funcionalidades e deixar somente as mais problemáticas sendo realizadas manualmente. Mas o código do SWIG nem sempre é compatível com tal situação, ainda assim é um teste que irei realizar.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-9179258436036020948?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/9179258436036020948/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=9179258436036020948&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/9179258436036020948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/9179258436036020948'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2011/02/net-c-wrapper-mixed-managed-c-c-mono.html' title='.NET C++ Wrapper, Mixed Managed C++, C#, Mono, OGRE... e SWIG!'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-4967902900159135111</id><published>2010-12-09T15:07:00.001-02:00</published><updated>2011-02-24T02:22:26.926-03:00</updated><title type='text'>Férias chegando?!</title><content type='html'>Dificilmente... tenho que terminar a minha dissertação até &lt;s&gt;Fevereiro&lt;/s&gt; maio (consegui a prorrogação!!)... sendo assim, é botar fogo nos dedos enquanto digitando heheh...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Área de pesquisa:&lt;/b&gt; Sistemas de Informação&lt;br /&gt;&lt;b&gt;Subárea:&lt;/b&gt; Jogos&lt;br /&gt;&lt;b&gt;Tema:&lt;/b&gt; Jogos na educação&lt;br /&gt;&lt;b&gt;Título:&lt;/b&gt; Um framework para construção de jogos educacionais.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Square, EA, GameLoft vamos trabalhar juntos?! heheh ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-4967902900159135111?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/4967902900159135111/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=4967902900159135111&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/4967902900159135111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/4967902900159135111'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2010/12/ferias-chegando.html' title='Férias chegando?!'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-7606464037372255545</id><published>2010-12-09T15:03:00.000-02:00</published><updated>2010-12-09T15:03:03.921-02:00</updated><title type='text'>Aulas de multimídia</title><content type='html'>E as aulas acabaram... agradeço aos alunos que participaram até o final pela oportunidade.&lt;br /&gt;&lt;br /&gt;Ainda assim,&amp;nbsp; como sempre acontece, pessoas levaram na brincadeira ou privilegiaram outras disciplinas pelo fato de ser um "aluno" ou "amigo" que estava dando as aulas... bom, o negócio não acabou muito bem pra esses.&lt;br /&gt;&lt;br /&gt;Ao final, somente 10 pessoas tiverem notas, pois entregaram os trabalhos. Engraçado que depois do prazo final, entrega de notas, sempre tem alguém correndo atrás do prejuízo. Várias chances foram dadas, agora acho que já não posso fazer muita coisa ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-7606464037372255545?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/7606464037372255545/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=7606464037372255545&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/7606464037372255545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/7606464037372255545'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2010/12/aulas-de-multimidia.html' title='Aulas de multimídia'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-4310296339228920675</id><published>2010-09-28T00:39:00.002-03:00</published><updated>2010-09-28T00:39:25.593-03:00</updated><title type='text'>Mãe me empresta o carro?!</title><content type='html'>&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/g_gAxKmzQfE?fs=1&amp;amp;hl=pt_BR"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/g_gAxKmzQfE?fs=1&amp;amp;hl=pt_BR" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-4310296339228920675?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/4310296339228920675/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=4310296339228920675&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/4310296339228920675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/4310296339228920675'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2010/09/mae-me-empresta-o-carro.html' title='Mãe me empresta o carro?!'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-894386686177891675</id><published>2010-09-28T00:12:00.000-03:00</published><updated>2010-09-28T00:12:55.542-03:00</updated><title type='text'>Aulas de multimídia</title><content type='html'>Pessoal,&lt;br /&gt;&lt;br /&gt;Estou organizando o material para as aulas de Multimídia que darei do final de outubro até começo de dezembro no INF/UFG.&lt;br /&gt;&lt;br /&gt;Tava pensando em seguir um lado mais prático, botar o pessoal pra soltar a imaginação e dar forma a criação. Sendo assim, trabalharemos com computação gráfica, efeitos sonoros, vídeos... resumindo, jogos!!! ;)&lt;br /&gt;&lt;br /&gt;A ideia é estudar os componentes envolvidos na criação dos jogos, entendo como eles funcionam e como são aplicados. Lembrando que esse conhecimento pode ser reutilizado em outras aplicações multimídia.&lt;br /&gt;&lt;br /&gt;Se der ainda poderemos trabalhar com tópicos de I.A., apesar de não ser um tópico diretamente ligado a área de multimídia é algo extremamente necessário em jogos &amp;nbsp;e como um jogo é uma aplicação multimídia... :D Talvez brincaremos com a mente de alguns agentes virtuais por ai. :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-894386686177891675?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/894386686177891675/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=894386686177891675&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/894386686177891675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/894386686177891675'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2010/09/aulas-de-multimidia.html' title='Aulas de multimídia'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-2303700023573218398</id><published>2010-06-02T15:18:00.001-03:00</published><updated>2010-06-02T15:18:15.536-03:00</updated><title type='text'>Multimídia - UFG - 2010/2</title><content type='html'>Pessoal,&lt;br /&gt;&lt;br /&gt;Possivelmente eu lecionarei parte das aulas de multimidia no semestre que vem (a proposito, cade os meus acentos blogger? ... Agora tá ok! :P ). Então, voltando ao assunto, ainda está em fase de planejamento e definição do que será dado em disciplina e o que serão meus afazeres, mas preparem-se para ter seu amiguinho de blogger em sala de aula heheh... Mas podem ficar tranquilos, não irei ferrar todo mundo, bom, quem sabe... heheh :P&lt;br /&gt;&lt;br /&gt;Ainda estou organizando o conteúdo, mas parte será bem semelhante ao que o Prof. Eduardo Simões lecionava, entretanto, estou pensando em alterar outras pra explorar tecnologias mais recentes, mas que caibam dentro do prazo apertado de 6 meses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-2303700023573218398?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/2303700023573218398/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=2303700023573218398&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/2303700023573218398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/2303700023573218398'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2010/06/multimidia-ufg-20102.html' title='Multimídia - UFG - 2010/2'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-5131104202615172268</id><published>2010-02-14T01:36:00.004-02:00</published><updated>2010-02-14T02:31:49.397-02:00</updated><title type='text'>Mac OSX + Opengl 3</title><content type='html'>Bom, apesar de ser fã dos produtos da Apple, e ter um MacBook, eu venho demonstrar minha insatisfação com relação ao suporte dos novos padrões para computação gráfica. Falei difícil, mas foi só pra ganhar espaço (heheh), estou aqui falando da falta de suporte da API OpenGL 3, mesmo no Snow Leopard.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;É perfeitamente possível criar jogos com gráficos bons utilizando a API do OpenGL 2, então por que reclamar que o OSX não possui suporte para a versão 3?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Quem trabalha com jogos, geralmente gosta de estar na vanguarda das tecnologias. Isso porque nós "precisamos" consumir e utilizar do máximo de poder do hardware que for possível, e não ficar para trás, pois esse mercado anda muito rápido.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Por mais que as alterações da versão 2 para a 3, sejam basicamente um novo paradigma de programação, existem recursos novos que são bastante úteis, além de melhorias de desempenho. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Em minha opinião, a empresa que se diz estar na frente das inovações tecnológicas, também deveria permitir e acompanhá-las. Existem várias pessoas, gamers, que gostariam de ter, trabalhar ou jogar num Mac, mas que não vão pela falta de suporte para jogos e aplicações.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nós sabemos que já existem várias aplicações suprindo parte dessa necessidade, mas e os jogos?! São muito poucos jogos presentes no OSX até o momento. Eu gostaria de aproveitar os recursos do meu sistema, a capacidade do meu hardware, as boas APIs presentes no OSX e utilizá-las em aplicações que usam realmente do hardware, isso é, os jogos, sentir o desempenho que a plataforma é capaz de propor diretamente na taxa de frames em minha tela.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Como gamer eu quero ter a possibilidade de obter os últimos jogos e utilizar das últimas tecnologias, pra tirar o máximo de proveito desses jogos. Como desenvolvedor, eu quero as tecnologias pra garantir a satisfação do jogador, provendo qualidades visuais e funcionais. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O que me frusta é saber que mesmo num sistema onde visual, simplicidade e desempenho são as palavras chaves, existe um descaso com quem realmente curte e utiliza dos gráficos e o hardware do sistema.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Não tenho o que reclamar do S.O., que considero excelente, funcionando muito bem, mas se a Apple está com medo de abrir o sistema por uma possível baixa na qualidade do produto perante o usuário, então está na hora de conversar com as outras empresas provedoras de tecnologias, tais como NVidia, ATI, para que essas publiquem suas atualizações e ainda garantam a qualidade do sistema.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nós já estamos na versão 3.2 e mesmo com o Snow Leopard, a versão do OpenGL suportada é a 2.1. Se estivéssemos falando do Windows, onde a Microsoft possui tanto uma versão do OpenGL quanto uma do DirectX que é seu principal produto, até poderíamos entender o porque de um atraso numa versão do OpenGL, mas no OSX nós só temos o OpenGL basicamente.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tudo bem que o Windows possui uma comunidade forte de gamers, mas será que o OSX não poderia ter uma quantidade maior de jogadores?! Vejam o sucesso do IPhone, a grande quantidade de jogos presentes nele. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Também sei que a falta de jogos no OSX não é culpa da Apple, mas das empresas desenvolvedoras, entretanto a falta do suporte gráfico adequado pode ser justamente o que impede essas produtoras de quererem publicar seus títulos na plataforma. Existem tantas engines, APIs, e ferramentas no Windows, que muitas vezes é mais prático simplesmente continuar lá, afinal o maior mercado nessa área já está lá, por pura comodidade.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Acho que com um pouco de incentivo e demonstração de interesse pela Apple, o mercado de jogos no Mac poderia se tornar muito maior, mesmo que não fossem títulos exclusivos para a plataforma.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pra finalizar, gostaria de dizer que isso é mais um desabafo com relação a esses detalhes tecnológicos em específico. Eu possuo um Mac e posso falar que o sistema é muito bom, excelente por dizer, e existem muitas inovações presentes num Mac, que vão desde o núcleo do sistema operacional até a interface, mas ainda pode-se mais...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-5131104202615172268?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/5131104202615172268/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=5131104202615172268&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/5131104202615172268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/5131104202615172268'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2010/02/mac-osx-opengl-3.html' title='Mac OSX + Opengl 3'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-1663545085964298480</id><published>2009-09-06T17:20:00.003-03:00</published><updated>2011-01-04T04:40:06.346-02:00</updated><title type='text'>Linguagens C# vs Java</title><content type='html'>Como todos sabem eu conheço as duas linguagens, mas reconhecidamente aprecio mais a linguagem C# do que a Java.&lt;br /&gt;&lt;br /&gt;Estou falando das linguagens e não das plataformas (.NET e Java).&lt;br /&gt;&lt;br /&gt;Eu reconheço claramente que o mundo Java possui &lt;strike&gt;inúmeras plataformas&lt;/strike&gt; vários frameworks e bibliotecas que fazem inveja ao mundo .NET, além da famosa portabilidade das aplicações, apesar que essa barreira vem sendo derrubada com o Mono, mas ainda temos um longo caminho a frente.&lt;br /&gt;&lt;br /&gt;Voltando a diferença entre as linguagens, nesse artigo (&lt;a href="http://www.25hoursaday.com/CsharpVsJava.html"&gt;http://www.25hoursaday.com/CsharpVsJava.htm&lt;/a&gt;l) Bare Obasanjo faz uma comparação entre os recursos da linguagem C# em sua versão 2.0 e a linguagem Java 6.&lt;br /&gt;&lt;br /&gt;Cabe ressaltar que a conclusão do autor vale ainda hoje. Já estamos caminhando para a versão 4 do C#, que de longe vai se distanciando, em recursos, da linguagem Java.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-1663545085964298480?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/1663545085964298480/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=1663545085964298480&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/1663545085964298480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/1663545085964298480'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2009/09/linguagens-c-vs-java.html' title='Linguagens C# vs Java'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-6707062494627694276</id><published>2009-07-02T13:09:00.011-03:00</published><updated>2009-07-02T14:33:33.662-03:00</updated><title type='text'>Problema da Loteria</title><content type='html'>Um problema difícil de resolver e que já tomou algumas horas de sono dos computeiros, inclusive minha nessa semana, é o problema da loteria.&lt;br /&gt;&lt;br /&gt;A ideia (nova regra diz que não tem acento, certo?!) é selecionar dentre tickets de jogos possíveis, quais, em quantidade mínima, deve-se jogar para se ganhar na loteria. Infelizmente, você não irá ficar rico dessa vez, pois é muito difícil criar um algoritmo que ache um resultado ótimo, além de que, geralmente, esse resultado ultrapassa e muito o valor que você poderia ganhar, jogando.&lt;br /&gt;&lt;br /&gt;O problema é descrito assim: dado um conjunto T de tamanho n, qual é o subconjunto mínimo de tickets de T, onde cada ticket possui tamanho k, e garante cobrir p números no resultado final.&lt;br /&gt;&lt;br /&gt;Exemplificando, se n = 5, k = 3 e p = 2, temos as seguintes possíveis combinações:&lt;br /&gt;&lt;br /&gt;1 2 3&lt;br /&gt;1 2 4&lt;br /&gt;1 2 5&lt;br /&gt;1 3 4&lt;br /&gt;1 3 5&lt;br /&gt;1 4 5&lt;br /&gt;2 3 4&lt;br /&gt;2 3 5&lt;br /&gt;2 4 5&lt;br /&gt;3 4 5&lt;br /&gt;&lt;br /&gt;Sendo que uma solução seria: (1, 2, 3) e (3, 4, 5), dois conjuntos distintos que garantem a vitória, para um jogo nessa configuração. Mas de que forma eles garantem, você pode estar se perguntando? Bom, precisamos acertar dois números, no mínimo, então:&lt;br /&gt;&lt;br /&gt;1 2 3 (X)&lt;br /&gt;1 2 4 - (a seleção já possui 1 e 2)&lt;br /&gt;1 2 5 - (a seleção já possui 1 e 2)&lt;br /&gt;1 3 4 - (a seleção já possui 1 e 3)&lt;br /&gt;1 3 5 - (a seleção já possui 1 e 3)&lt;br /&gt;1 4 5 - (a seleção (de baixo) possui 4 e 5)&lt;br /&gt;2 3 4 - (a seleção possui 3 e 4)&lt;br /&gt;2 3 5 - (a seleção possui 2 e 3)&lt;br /&gt;2 4 5 - (a seleção possui 4 e 5)&lt;br /&gt;3 4 5 (X)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Ahhh, legal, vou jogar!"&lt;/span&gt; heheh... &lt;span style="font-weight: bold;"&gt;cuidado!&lt;/span&gt; Para adaptar o problema para obter uma solução da mega-sena, teríamos: n = 60, k = 6, p = 4 (quadra).&lt;br /&gt;&lt;br /&gt;Se combinarmos todas as possibilidades de agrupamentos de 60 números em 6 casas, teríamos a pequena quantia de 50.063.860 tickets possíveis. Ok, pode ser até fácil de gerar utilizando dos computadores atuais, mas para calcular a quantidade mínima de tickets é outra coisa...&lt;br /&gt;&lt;br /&gt;Existem vários algoritmos, mas não lembro de nenhum ótimo no momento. Por acaso, eu inventei um olhando os resultados, coisa besta, nem sempre ótima, mas funciona. Chamei ele de BlockBreaker, então se esse algoritmo realmente existe peço desculpas pela frase, mas eu não o conhecia.&lt;br /&gt;&lt;br /&gt;Assimindo que todos os tickets são um bloco, temos o bloco massisso, com 3 colunas de números:&lt;br /&gt;&lt;br /&gt;1 2 3&lt;br /&gt;1 2 4&lt;br /&gt;1 2 5&lt;br /&gt;1 3 4&lt;br /&gt;1 3 5&lt;br /&gt;1 4 5&lt;br /&gt;2 3 4&lt;br /&gt;2 3 5&lt;br /&gt;2 4 5&lt;br /&gt;3 4 5&lt;br /&gt;&lt;br /&gt;Seguimos na primeira coluna de cima pra baixo, até que o valor muda com relação ao ticket anterior, quando isso acontecer quebramos o bloco:&lt;br /&gt;&lt;br /&gt;Bloco gerado 1 - coluna 1:&lt;br /&gt;1 2 3&lt;br /&gt;1 2 4&lt;br /&gt;1 2 5&lt;br /&gt;1 3 4&lt;br /&gt;1 3 5&lt;br /&gt;1 4 5&lt;br /&gt;&lt;br /&gt;2 3 4&lt;br /&gt;2 3 5&lt;br /&gt;2 4 5&lt;br /&gt;3 4 5&lt;br /&gt;&lt;br /&gt;Analisamos o bloco recém criado da seguinte forma: se o bloco possui tamanho 1 e não conflita em pelo menos de p unidades com os já selecionados, selecionados o ticket do bloco (marcando X). Nesse caso, não temos nada nessas condições, seguimos adiante:&lt;br /&gt;&lt;br /&gt;Bloco gerado 2 - coluna 1:&lt;br /&gt;1 2 3&lt;br /&gt;1 2 4&lt;br /&gt;1 2 5&lt;br /&gt;1 3 4&lt;br /&gt;1 3 5&lt;br /&gt;1 4 5&lt;br /&gt;&lt;br /&gt;2 3 4&lt;br /&gt;2 3 5&lt;br /&gt;2 4 5&lt;br /&gt;&lt;br /&gt;3 4 5&lt;br /&gt;&lt;br /&gt;O bloco recém criado não possui, mas o último bloco possui tamanho 1, como não temos nenhum marcado ainda, marcamos ele e seguimos da mesma forma na segunda coluna.&lt;br /&gt;&lt;br /&gt;Bloco gerado 1 - coluna 2:&lt;br /&gt;1 2 3&lt;br /&gt;1 2 4&lt;br /&gt;1 2 5&lt;br /&gt;&lt;br /&gt;1 3 4&lt;br /&gt;1 3 5&lt;br /&gt;1 4 5&lt;br /&gt;&lt;br /&gt;2 3 4&lt;br /&gt;2 3 5&lt;br /&gt;2 4 5&lt;br /&gt;&lt;br /&gt;3 4 5 (X)&lt;br /&gt;&lt;br /&gt;Bloco gerado 2 - coluna 2:&lt;br /&gt;1 2 3&lt;br /&gt;1 2 4&lt;br /&gt;1 2 5&lt;br /&gt;&lt;br /&gt;1 3 4&lt;br /&gt;1 3 5&lt;br /&gt;&lt;br /&gt;1 4 5 - (conflita em 2 números, 2 &gt;= p)&lt;br /&gt;&lt;br /&gt;2 3 4&lt;br /&gt;2 3 5&lt;br /&gt;2 4 5&lt;br /&gt;&lt;br /&gt;3 4 5 (X)&lt;br /&gt;&lt;br /&gt;Bloco gerado 3 - coluna 2:&lt;br /&gt;1 2 3&lt;br /&gt;1 2 4&lt;br /&gt;1 2 5&lt;br /&gt;&lt;br /&gt;1 3 4&lt;br /&gt;1 3 5&lt;br /&gt;&lt;br /&gt;1 4 5 -&lt;br /&gt;&lt;br /&gt;2 3 4&lt;br /&gt;2 3 5&lt;br /&gt;&lt;br /&gt;2 4 5 -&lt;br /&gt;&lt;br /&gt;3 4 5 (X)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bloco gerado 4 - coluna 2:&lt;br /&gt;1 2 3&lt;br /&gt;1 2 4&lt;br /&gt;1 2 5&lt;br /&gt;&lt;br /&gt;1 3 4&lt;br /&gt;1 3 5&lt;br /&gt;&lt;br /&gt;1 4 5 -&lt;br /&gt;&lt;br /&gt;2 3 4&lt;br /&gt;2 3 5&lt;br /&gt;&lt;br /&gt;2 4 5 -&lt;br /&gt;&lt;br /&gt;3 4 5 (X)&lt;br /&gt;&lt;br /&gt;Seguimos para a última coluna:&lt;br /&gt;&lt;br /&gt;Bloco gerado 1 - coluna 3:&lt;br /&gt;1 2 3 (X)&lt;br /&gt;&lt;br /&gt;1 2 4&lt;br /&gt;1 2 5&lt;br /&gt;&lt;br /&gt;1 3 4&lt;br /&gt;1 3 5&lt;br /&gt;&lt;br /&gt;1 4 5 -&lt;br /&gt;&lt;br /&gt;2 3 4&lt;br /&gt;2 3 5&lt;br /&gt;&lt;br /&gt;2 4 5 -&lt;br /&gt;&lt;br /&gt;3 4 5 (X)&lt;br /&gt;&lt;br /&gt;Até que no final temos:&lt;br /&gt;&lt;br /&gt;1 2 3 (X)&lt;br /&gt;&lt;br /&gt;1 2 4 -&lt;br /&gt;&lt;br /&gt;1 2 5 -&lt;br /&gt;&lt;br /&gt;1 3 4 -&lt;br /&gt;&lt;br /&gt;1 3 5 -&lt;br /&gt;&lt;br /&gt;1 4 5 -&lt;br /&gt;&lt;br /&gt;2 3 4 -&lt;br /&gt;&lt;br /&gt;2 3 5 -&lt;br /&gt;&lt;br /&gt;2 4 5 -&lt;br /&gt;&lt;br /&gt;3 4 5 (X)&lt;br /&gt;&lt;br /&gt;O algoritmo é besta e bem fácil de entender, implementar tb, e achou a solução ótima para essa situação, mas infelizmente não garante sempre a solução ótima.&lt;br /&gt;&lt;br /&gt;Outro detalhe interessante é com relação a geração dos números dos tickets, se você conhece o algoritmo de enumeração por ordem lexicográfica, vai ver que o conjunto de todos os tickets é dado pela geração de todos os subconjuntos de tamanho k, dentre os subconjuntos possíveis de n. Olhem só:&lt;br /&gt;&lt;br /&gt;1&lt;br /&gt;12&lt;br /&gt;123 (1)&lt;br /&gt;1234&lt;br /&gt;12345&lt;br /&gt;1235&lt;br /&gt;124 (2)&lt;br /&gt;1245&lt;br /&gt;125 (3)&lt;br /&gt;13&lt;br /&gt;134 (4)&lt;br /&gt;1345&lt;br /&gt;135 (5)&lt;br /&gt;14&lt;br /&gt;145 (6)&lt;br /&gt;15&lt;br /&gt;2&lt;br /&gt;23&lt;br /&gt;234 (7)&lt;br /&gt;2345&lt;br /&gt;235 (8)&lt;br /&gt;24&lt;br /&gt;245 (9)&lt;br /&gt;25&lt;br /&gt;3&lt;br /&gt;34&lt;br /&gt;345 (10)&lt;br /&gt;35&lt;br /&gt;4&lt;br /&gt;45&lt;br /&gt;5&lt;br /&gt;&lt;br /&gt;Exatamente os 10 tickets possíveis, ;) !! Lógico que essa é a ordem original, que poderia ser melhorada afim de gerar somente os tickets que você quer, mas tá ai a dica!&lt;br /&gt;&lt;br /&gt;Vou postar o programa com os algoritmos que fizemos essa semana para quem quiser... Criei a conta no github, mas só posso colocar os arquivos mais tarde, visto que tem um bloqueio besta aqui na faculdade até para portas do git.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-6707062494627694276?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/6707062494627694276/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=6707062494627694276&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/6707062494627694276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/6707062494627694276'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2009/07/problema-da-loteria.html' title='Problema da Loteria'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-8131443635855266706</id><published>2008-10-25T17:48:00.002-02:00</published><updated>2008-10-25T18:01:09.080-02:00</updated><title type='text'>Spec#</title><content type='html'>Alguém já ouviu falar em Spec#? Essa linguagem foi construída durante o desenvolvimento do sistema operacional singularity da Microsoft, esse sistema foi desenvolvido somente para testes e desenvolvimento de novas tecnologias e aprimoramento de compiladores. Tal linguagem contem recursos interessantes para que o compilador cheque em tempo de execução e de compilação erros comuns de programação.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A Spec# é um superconjunto de C#, isto é, espande os recursos da linguagem C# 2.0 adicionando a ela novas estruturas para construir estruturas orientadas a contrato. Um pequeno exemplo segue abaixo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;public int Dividir(int a, int b)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;requires b &gt; 0 otherwise ArgumentException;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;return a / b;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Agora é esperar que eles encorporem esses recursos da Spec# dentro da C# 4.0 que está a caminho... heheh...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-8131443635855266706?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://geekswithblogs.net/Podwysocki/archive/2007/12/10/117542.aspx' title='Spec#'/><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/8131443635855266706/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=8131443635855266706&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/8131443635855266706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/8131443635855266706'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2008/10/spec.html' title='Spec#'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-9108862905090308128</id><published>2008-09-29T00:53:00.004-03:00</published><updated>2008-09-29T01:03:28.898-03:00</updated><title type='text'>private or not private, that's the question!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_cFgOo2BjIp8/SOBTSnYAdmI/AAAAAAAAAsE/zCfowt2criU/s1600-h/to_be_or_not_to_be.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_cFgOo2BjIp8/SOBTSnYAdmI/AAAAAAAAAsE/zCfowt2criU/s320/to_be_or_not_to_be.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5251288744786425442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Lendo os blogs da galera do Mono e do Miguel, deparei com o seguinte: usar ou não a palavra private para declarar métodos ou variáveis no código, sendo que o padrão de C# é definir como private qualquer membro sem acesso explicitamente definido?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A discussão é meio grande, alguns dizem que deve ser usado para deixar o código mais legível, outros dizem que você deve conhecer da linguagem que usa (eu mesmo disse isso), então não seria necessário...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ambos lados tem pontos positivos e negativos... Se você é um cara preocupado com Engenharia de Software, deve ter ouvido as palavras Legibilidade várias vezes, mas nesse caso, o que seria legível, colocar ou não?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eu reconheço que eu uso a palavra private, simplesmente para padronizar o código, deixar todos os membros definidos da mesma forma, mas acho que vou tentar seguir a opinião do Miguel e tentar não utilizá-la, afinal ele não foi o primeiro a dizer tal coisa...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Quem quiser conferir e dar uma olhada na discussão entre aqui http://tirania.org/blog/archive/2008/Sep-28.html.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-9108862905090308128?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tirania.org/blog/archive/2008/Sep-28.html' title='private or not private, that&apos;s the question!'/><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/9108862905090308128/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=9108862905090308128&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/9108862905090308128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/9108862905090308128'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2008/09/private-or-not-private-thats-question.html' title='private or not private, that&apos;s the question!'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_cFgOo2BjIp8/SOBTSnYAdmI/AAAAAAAAAsE/zCfowt2criU/s72-c/to_be_or_not_to_be.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-7969011357275564909</id><published>2008-09-26T10:02:00.000-03:00</published><updated>2008-09-26T10:14:24.552-03:00</updated><title type='text'>Flex 3, Date, DateInput</title><content type='html'>Aparentemente é um problema que foi resolvido, mas tive até que postar o bug na Adobe.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Apparently, it is a problem that don't occurs by now, but I had to publish it in the Adobe bug forum.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Anteriormente, quando se tentava utilizar a data 04/04/2004 em algum componente de data ou num objeto Date, esse valor era ignorado, dando um problema que simplesmente mudava a data para nulo hehhe...&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Previously (on supernatural!!), when you try to set the date 04/04/2004 on date components or in one Date object, this value was ignored, so the value is just changed to null or indefined hehehe...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-7969011357275564909?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/7969011357275564909/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=7969011357275564909&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/7969011357275564909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/7969011357275564909'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2008/09/flex-3-date-dateinput.html' title='Flex 3, Date, DateInput'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-7482599319812190688</id><published>2008-08-11T17:59:00.000-03:00</published><updated>2008-08-11T18:15:00.596-03:00</updated><title type='text'>Interfaces de uma classe pela hierarquia em C#</title><content type='html'>Algumas vezes é necessário por reflexão obter as interfaces de uma determinada classe, o que pode ser feito facilmente com o método Type.GetInterfaces(). Entretanto, e se tivermos o seguinte cenário abaixo?&lt;br /&gt;&lt;br /&gt;interface IA {}&lt;br /&gt;interface IB : IA {}&lt;br /&gt;interface IC : IA {}&lt;br /&gt;&lt;br /&gt;class A : IA {}&lt;br /&gt;class B : A, IB {}&lt;br /&gt;class C : A, IC {}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Uma herança relativamente comum, mas se pedirmos a lista de interfaces do tipo C pelo método descrito acima, esse irá retornar: IA, IC. Mas pera aí, a interface IC herda da IA, sendo assim somente a interface IC seria suficiente... Pra resolver esse problema, é necessário realizar uma combinação dentre as interfaces do tipo e as desejadas.&lt;br /&gt;&lt;br /&gt;Criei o seguinte algoritmo, como método de extensão, que resolve o problema e ainda filtra as interfaces pra um determinado tipo desejado:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;public static IEnumerable&lt;type&gt; GetInterfaces&lt;t&gt;(this Type type)&lt;br /&gt;        {&lt;br /&gt;            Type[] interfaces = type.GetInterfaces().Where(typeof(T).IsAssignableFrom).ToArray();&lt;br /&gt;            var aux = new Type[interfaces.Length];&lt;br /&gt;            int auxIndex = 0;&lt;br /&gt;&lt;br /&gt;            for (int i = 0; i &lt; interfaces.Length; i++)&lt;br /&gt;            {&lt;br /&gt;                if (interfaces[i] == null)&lt;br /&gt;                    continue;&lt;br /&gt;&lt;br /&gt;                if (aux[auxIndex] == null)&lt;br /&gt;                {&lt;br /&gt;                    aux[auxIndex] = interfaces[i];&lt;br /&gt;                    interfaces[i++] = null;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                for (int j = i; j &lt; interfaces.Length; j++)&lt;br /&gt;                {&lt;br /&gt;                    if (interfaces[j] == null)&lt;br /&gt;                        continue;&lt;br /&gt;&lt;br /&gt;                    if (!aux[auxIndex].IsAssignableFrom(interfaces[j]))&lt;br /&gt;                        continue;&lt;br /&gt;&lt;br /&gt;                    aux[auxIndex] = interfaces[j];&lt;br /&gt;                    interfaces[j] = null;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                auxIndex++;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            for (int i = 0; i &lt; aux.Length; i++)&lt;br /&gt;            {&lt;br /&gt;                if (aux[i] != null)&lt;br /&gt;                    yield return aux[i];&lt;br /&gt;            }&lt;br /&gt;        }&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Não está 100%, algumas melhorias poderiam ser realizadas, mas funciona muito bem para o problema. :P&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Obs.: Se alguém souber como eu coloco esse código formatado dá uma dica ai heheh...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-7482599319812190688?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/7482599319812190688/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=7482599319812190688&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/7482599319812190688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/7482599319812190688'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2008/08/interfaces-de-uma-classe-pela.html' title='Interfaces de uma classe pela hierarquia em C#'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-5258782069191196366</id><published>2008-07-15T08:33:00.000-03:00</published><updated>2008-07-15T08:58:05.653-03:00</updated><title type='text'>NHibernate hbm</title><content type='html'>Antes de continuar os artigos, que a propósito estão bem atrasados, gostaria de fazer uma proposta a comunidade open-source.&lt;br /&gt;&lt;br /&gt;Se analisarmos o comportamento e as dificuldades para se utilizar o NHibernate, a maior delas se chama "mapeamento objeto-relacional", isto é, &lt;span style="font-style: italic;"&gt;los malditos ".hbm". &lt;/span&gt;Por mais que a estratégia os hbm seja interessante, por externalizar ao modelo de domínio detalhes da persistência, ela é muito trabalhosa.&lt;br /&gt;&lt;br /&gt;Ao refatorarmos certa classe ou alterarmos o banco de dados, teremos problemas se não for checado manualmente esses arquivos.&lt;br /&gt;&lt;br /&gt;Existem alternativas como o &lt;span style="font-style: italic;"&gt;NHibernate Mapping Attributes, &lt;/span&gt;mas apesar do trabalho interessante dos desenvolvedores que trabalham nele, não acho uma boa abordagem, devido aos atributos não se organizarem, isto é, atributos que são aglomerados terão que ser definidos com índices para manterem sua ordem. É possível realizar a mesma implementação, com um pouco mais de trabalho, eliminando tal problema.&lt;br /&gt;&lt;br /&gt;Analisando o comportamento e funcionamento do db4o, a idéia por trás desse é muito interessante, por permitir que eu persista qualquer tipo. Penso eu, se não seria possível adotar tal abordagem no nhibernate, como uma extensão ou uma camada acima, mas que não esconde-se detalhes do próprio. Seria algo como o seguinte:&lt;br /&gt;&lt;br /&gt;Dado a classe abaixo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public class MyClass {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    public string FirstName { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    public string LastName { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;usaríamos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;var container = ObjectContainerFactory.GetContainer();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;var myObj = new MyClass();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;container.Save(myObj);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;container.Flush();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;e isso seria o suficiente para se criar uma tabela relacional contendo os dados do objeto no banco de dados, assim como o seu devido mapeamento, transparentemente...&lt;br /&gt;&lt;br /&gt;Vou pensar e melhorar a idéia, continuo depois.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-5258782069191196366?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/5258782069191196366/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=5258782069191196366&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/5258782069191196366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/5258782069191196366'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2008/07/nhibernate-hbm.html' title='NHibernate hbm'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-2705635661242441836</id><published>2008-06-19T10:18:00.000-03:00</published><updated>2008-06-19T11:00:50.153-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJS'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><title type='text'>Web 2.0, Aplicações RIA, Silverlight, Flex e EXTJS</title><content type='html'>&lt;div style="text-align: justify;"&gt;Atualmente ouve-se muito sobre aplicações RIA (Rich Internet Applications), mas o que realmente vêem a ser isso?&lt;br /&gt;&lt;br /&gt;Com o passar do tempo, o aumento no processamento dos computadores e da velocidade de acesso a internet, surgiu a necessidade de criar aplicações para empresas e/ou  sites com conteúdo interativo. Inúmeras empresas começaram a utilizar a internet como forma de transferência de dados, comunicação e negócios, surgiram, então, o que nós chamamos de Aplicações ou Sistemas Web, que são sites onde é possível utilizar de um determinado serviço.&lt;br /&gt;&lt;br /&gt;No início todos esses sistemas apresentavam um formulário ao usuário, este preenchia o mesmo e então ao clicar num botão de confirmar, todo o conteúdo da página era enviado para o servidor, incluindo os dados do formulário para o processamento. A interface era pobre em relação à integração usuário-computador.&lt;br /&gt;&lt;br /&gt;Surgiram então bibliotecas em Javascript que utilizavam de um recurso chamado request-response para realizarem comunicações com o servidor, de tal forma que não fosse preciso o usuário recarregar a página e melhorar um pouco a interação com o mesmo. Atualmente essa tecnologia evolui e deu origem ao AJAX, facilitando muito para os desenvolvedores realizar a integração com o servidor e obter serviços remotos.&lt;br /&gt;&lt;br /&gt;Após isso, o foco da Web mudou, os desenvolvedores, antes preocupados somente em prover serviços, agora se preocupam também em como esses serviços serão apresentados e como o usuário irá interagir com eles, surge a Web 2.0.&lt;br /&gt;&lt;br /&gt;Os desenvolvedores ganharam ferramentas poderosas para criar conteúdos dinâmicos e interativos para a Web, além do famoso Flash, mas que permitem ao usuário de uma aplicação web ter quase a mesma sensação de estar executando um programa em seu próprio computador.&lt;br /&gt;&lt;br /&gt;Dentre as tecnologias que surgiram temos o destaque para três: &lt;span style="font-style: italic;"&gt;&lt;/span&gt;Silverlight, Flex e ExtJS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Silverlight&lt;/span&gt;&lt;br /&gt;Uma iniciativa da Microsoft na tentativa de romper com o domínio do Flash sobre a internet. O Silverlight utiliza .NET por baixo, o que só isso já é uma grande vantagem e o deixa sobre o interesse de vários desenvolvedores. Entretanto, como surgiu a pouco tempo, existem poucos controles (widgets) prontos e aparenta não estar muito maduro, até mesmo com relação ao consumo de serviços, comparado com o seu principal concorrente, o Flex.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Flex&lt;/span&gt;&lt;br /&gt;O Flex, da Adobe, integrou XML e ActionScript em cima do famoso arquivo swf do Flash e de uma forma muito interessante. Como hoje em dia quase todos os browsers possuem plugin para o Flash, isso já o tornou portável a inúmeros sistemas operacionais e browsers. Sua interface e seus controles são muito bonitos e permitem grande poder para realizar interações com o usuário. Nativamente, possui suporte para realizar comunicações com servidores de serviços de várias formas, XML, SOAP, HTML request e ainda possui protocolos próprios como o AMF e o RTMP.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* ExtJS&lt;/span&gt;&lt;br /&gt;Eis a opção para aqueles que não querem depender de um plugin para o browser como o Flash e o Silverlight para executar aplicações RIA. Toda a API do ExtJS é criada em cima de Javascript e de uma forma fácil de trabalhar. Possui vários controles também e suporte dentre as possibilidades de comunicação com o suporte o protocolo JSON. As interfaces geradas pelo ExtJS também são muito bonitas.&lt;br /&gt;&lt;br /&gt;Bom, dentre as 3 opções, pessoalmente, eu escolhi e prefiro trabalhar com Flex, pelo fato de ser portável, fácil de se trabalhar e criar novos componentes. O Silverlight, por utilizar .NET me deixa muito interessado, mas ainda está imaturo quanto aos recursos de comunicação, quantidade de controles (mesmo na versão 2.0) e portabilidade (apesar do Mono estar com o Moonlight para tentar resolver o problema). O ExtJS parece ser muito bom, mas não sei quanto a manutenibilidade do código gerado, e como criei algumas ferramentas para gerar códigos para o flex, preferi não utilizá-lo.&lt;br /&gt;&lt;br /&gt;A minha única queixa é a integração com serviços .NET, mas o FluorineFX está resolvendo bem o problema até o momento, apesar de termos opções melhores hoje para a plataforma Java, o GraniteDS e o BlazeDS.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-2705635661242441836?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/2705635661242441836/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=2705635661242441836&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/2705635661242441836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/2705635661242441836'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2008/06/web-20-aplicaes-ria-silverlight-flex-e.html' title='Web 2.0, Aplicações RIA, Silverlight, Flex e EXTJS'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-1208626398861493682</id><published>2008-05-26T09:33:00.000-03:00</published><updated>2008-05-26T11:14:12.151-03:00</updated><title type='text'>Lado a lado: NHibernate e db4o. Parte 1 - Informações.</title><content type='html'>&lt;div style="text-align: justify;"&gt;Inicialmente vou discutir sobre algumas tecnologias que estão consolidadas entre os desenvolvedores de software que utilizam .NET, o &lt;span style="font-weight: bold;"&gt;NHibernate &lt;/span&gt;e o &lt;span style="font-weight: bold;"&gt;db4o&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;O db4o para quem não conhece é um banco de dados orientado a objetos que promete desenvolvimento fácil e rápido, visto que o desenvolvedor não precisará realizar os famosos mapeamentos objeto-relacional, nem criar tabelas em banco de dados relacionais, e pode focar diretamente no desenvolvimento dos objetos de negócios. Pode ser utilizado tanto para aplicações embarcadas quanto para sistemas de qualquer tamanho.&lt;br /&gt;&lt;br /&gt;Sua abordagem é simplista, uma vez aberto o container de objetos o desenvolvedor poderá salvar e manipular objetos de qualquer tipo, desde que o objeto possua sua classe visível ao escopo do banco de dados. Lembrando que, nesse caso, o escopo do banco de dados se refere a todas as classes visíveis dentro biblioteca que abre o container, incluindo classes carregadas dinamicamente.&lt;br /&gt;&lt;br /&gt;Quando utilizando o db4o, o desenvolvedor não se preocupa com a criação de tabelas,  o banco de dados se "adapta" ao formato e definições de cada classe, seus relacionamentos, etc. Desenvolvedores que utilizam o db4o possuem sempre a mesma impressão: "Essa é melhor coisa do mundo!!", "Que negócio massa!!", "Doido d+++!!!!!!!"...&lt;br /&gt;&lt;br /&gt;No entanto, nem tudo são flores. Mesmo com o db4o existem algumas complicações. A primeira decorre da transição de bancos de dados relacionais para um orientado a objetos. No "mundo relacional" cada entidade equivale a uma tabela, equivalente a uma classe no "mundo OO", e cada tupla dessa tabela ou registro equivale a instância dessa classe. Até aqui tudo bem, o problema são as famosas e necessárias chaves primárias, que no db4o não existem, ou melhor, não devem ser utilizadas da mesma forma que num banco relacional.&lt;br /&gt;&lt;br /&gt;Cada objeto no contexto do db4o possui sua própria identificação única que é gerada pelo próprio container de objetos do banco, isso poder acarretar num problema de adaptação para o desenvolvedor, mas nada muito problemático.&lt;br /&gt;&lt;br /&gt;O segundo problema, talvez seja "o grande problema". Cada objeto do db4o ao ser atualizado deve ser reconhecido dentro do contexto de um container, isto é, caso o usuário abra um container, obtenha um objeto e feche o container, o objeto é considerado um novo objeto, pois não será reconhecido por outro container aberto posteriormente e se armazenado será duplicado no banco de dados, isto requer um tratamento especial ao se trabalhar com objetos desconectados do container. Esse problema, apesar se ser contornável com algumas estratégias, pode ainda ser agravado quando o objeto mantém dependências de outros objetos, pois a manutenção das referências deve ser realizada manualmente pelo desenvolvedor, isto é, ao se fazer um update em cascata, ou o desenvolvedor atualiza o objeto da referência ou deve removê-lo e então adicionar o novo, para evitar as famosas duplicações e objetos fantasmas, aqueles que o desenvolvedor achou que teria sido substituído, mas continuam armazenados.&lt;br /&gt;&lt;br /&gt;Fora esses trabalhos a API do db4o é excelente, assim como o seu desempenho, quem trabalhar com o mesmo ficará apaixonado pelo seu modo de uso, as várias maneiras de se fazer as queries, inclusive o suporte ao &lt;span style="font-style: italic; font-weight: bold;"&gt;Linq&lt;/span&gt;, que pessoalmente achei que ficou bem interessante.&lt;br /&gt;&lt;br /&gt;Agora falaremos rapidamente sobre o &lt;span style="font-weight: bold;"&gt;NHibernate&lt;/span&gt;, que tenta amortizar a transição de um banco de dados relacional e seu uso num contexto orientado a objetos.&lt;br /&gt;&lt;br /&gt;O NHibernate sem dúvidas é uma ferramenta excelente, um pouco trabalhosa, pois o usuário deve manter um arquivo XML, que contém o mapeamento das propriedades e campos da classe para os campos de uma tabela ou view num banco de dados relacional.&lt;br /&gt;&lt;br /&gt;Possui um mecanismo de configuração que permite ao desenvolvedor construir o software independente do banco de dados que utilizará. Permite que o bancos de dados sejam mapeados mesmo depois de existentes ou seja criado um novo esquema para a representação do modelo.&lt;br /&gt;&lt;br /&gt;O mecanismo de query do NHibernate seja via Critérios ou HQL é muito poderoso. É possível realizar queries complexas que serão devidamente traduzidas para cada banco de dados especificamente. Existem também uma implementação que permite que o NHibernate seja utilizado com o Linq e tal biblioteca virá junto com a versão 2.0 do mesmo.&lt;br /&gt;&lt;br /&gt;O grande problema do NHibernate são os famosos mapeamentos, pois durante o ciclo de vida de qualquer software alterações acontecem, e podem ocasionar em mudanças no modelo, o que acarretam em mudanças nas classes e nos mapeamentos. Manter esses dois últimos sincronizados talvez seja a tarefa mais penosa pra quem utiliza o NHibernate.&lt;br /&gt;&lt;br /&gt;Apesar de utilizar um mecanismo de sessão, ele não sofre do mesmo mal do db4o quanto a duplicação de dados, afinal temos um banco relacional que tratará desse problema da forma que estamos acostumados.&lt;br /&gt;&lt;br /&gt;Para demonstrar mais sobre as diferenças desses dois bancos, irei publicar nas próximas postagens uma espécie de prova de conceito, onde para resolver um mesmo problema utilizarei ambos os bancos, mostrando as diferenças de cada na prática.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-1208626398861493682?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/1208626398861493682/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=1208626398861493682&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/1208626398861493682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/1208626398861493682'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2008/05/lado-lado-nhibernate-e-db4o-parte-1.html' title='Lado a lado: NHibernate e db4o. Parte 1 - Informações.'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2498135047706386219.post-8143796213948665940</id><published>2006-08-24T18:41:00.000-03:00</published><updated>2006-08-24T18:43:57.053-03:00</updated><title type='text'>Oi pra galera</title><content type='html'>Meu "primeiro" post nesse blog. Bom, na verdade não é o primeiro mas como eu não consigo recuperar a senha do antigo desisti e criei outro :P!&lt;br /&gt;&lt;br /&gt;Irei postar aqui informações sobre meu framework de desenvolvimento de jogos (atualmente um auxiliar de desenvolvimento).&lt;br /&gt;&lt;br /&gt;Até a próxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2498135047706386219-8143796213948665940?l=danfma.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://danfma.blogspot.com/feeds/8143796213948665940/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2498135047706386219&amp;postID=8143796213948665940&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/8143796213948665940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2498135047706386219/posts/default/8143796213948665940'/><link rel='alternate' type='text/html' href='http://danfma.blogspot.com/2006/08/oi-pra-galera.html' title='Oi pra galera'/><author><name>Daniel Ferreira Monteiro Alves</name><uri>http://www.blogger.com/profile/03186658891344967956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-E1Wm2watT3E/Tavrp2-6RAI/AAAAAAAACYI/QsM9wBKHBFo/s220/avatar3.jpg'/></author><thr:total>0</thr:total></entry></feed>
