tag:blogger.com,1999:blog-89285852456559033182024-03-14T07:32:27.142-07:00David JardimO intuito deste Blog é mostrar algum do trabalho que tem vindo a ser desenvolvido por mim ao longo destes anos de vida de estudante.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.comBlogger33125tag:blogger.com,1999:blog-8928585245655903318.post-31634116053024836042011-05-13T14:53:00.000-07:002011-05-13T14:53:48.269-07:00Bike Me - XNA<iframe allowfullscreen="" frameborder="0" height="320" src="http://www.youtube.com/embed/Pil1AE_wFK0" width="480"></iframe><br />
<br />
Continuando com a minha senda com o XNA, decidi criar um jogo que me parece ter potencial, embora necessite de muito trabalho. Seguindo o conceito do Little Big Planet, o utilizador cria os níveis do jogo e tem a possibilidade de os partilhar e de fazer download de níveis criados por outros utilizadores.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-14601602374449891602011-05-13T14:49:00.000-07:002011-05-13T14:50:42.977-07:00Iphone Bricker Game<iframe allowfullscreen="" frameborder="0" height="320" src="http://www.youtube.com/embed/Q3tZdoWgggE" width="480"></iframe><br />
<br />
Desenvolver aplicações para o Iphone está na moda :), sendo assim isto é a minha primeira aplicação, desenvolvida no Xcode programando em ObjectiveC. Para quem está habituado a Java e C# é um pouco diferente, mas penso que seja uma questão de hábito, já que o paradigma é o mesmo.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-11040083642769021972010-10-13T13:40:00.000-07:002010-10-13T13:40:11.131-07:00Hierarchical Reinforcement Learning: Learning Sub-goals and State-Abstraction<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;">Ao fim de 1 ano de trabalho este é o resultado final da minha dissertação de Mestrado. </span><span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;">Coloquei-a no SlideShare para que seja possível a sua pré-visualização. Foi escrita em <a href="http://www.latex-project.org/">LateX</a> utilizando o <a href="http://pages.uoregon.edu/koch/texshop/">TeXShop</a>.</span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"><div id="__ss_5431182" style="width: 477px;"><strong style="display: block; margin: 12px 0 4px;"><a href="http://www.slideshare.net/DavidJardim/hrl-learning-subgoals-and-state-abstraction" title="HRL: Learning Subgoals and State Abstraction">HRL: Learning Subgoals and State Abstraction</a></strong><object height="510" id="__sse5431182" width="477"><param name="movie" value="http://static.slidesharecdn.com/swf/doc_player.swf?doc=thesis-101013041241-phpapp01&stripped_title=hrl-learning-subgoals-and-state-abstraction&userName=DavidJardim" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5431182" src="http://static.slidesharecdn.com/swf/doc_player.swf?doc=thesis-101013041241-phpapp01&stripped_title=hrl-learning-subgoals-and-state-abstraction&userName=DavidJardim" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"></embed></object><div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">documents</a> from <a href="http://www.slideshare.net/DavidJardim">David Jardim</a>.</div></div></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;">Podem efectuar o download da versão PDF aqui (</span><a href="http://drp.ly/c0Pe"><span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;">Dissertação</span></a><span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;">). De seguida um excerto do Resumo.</span><br />
<blockquote>Neste trabalho, apresentamos um novo método que permite a um agente descobrir e criar abstracções temporais de forma autónoma. Essas abstracções são baseadas na framework das Options. O nosso método é baseado no conceito de que para alcançar o objectivo, o agente deve passar por determinados estados. Ao longo do tempo estes estados vão começar a diferenciar-se dos restantes, e serão identificados como sub-objectivos úteis. Poderão ser utilizados pelo agente para criar novas abstracções temporais, cujo objectivo é ajudar a atingir esses objectivos secundários. Para detectar sub-objectivos, o nosso método cria intersecções entre os vários caminhos que levam ao objectivo principal.</blockquote>David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-36830341096087385142010-09-20T10:26:00.000-07:002011-01-15T05:35:27.434-08:00Math4Kids - Apresentação SAPO Codebits<object height="385" width="480"><param name="movie" value="http://www.youtube.com/v/HqRt8eki1go?fs=1&hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HqRt8eki1go?fs=1&hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
<br />
Esta foi a nossa apresentação do Math4Kids no concurso de programação decorrido no SAPO Codebits. Para quem não conhece o formato do concurso, em 24 horas cada equipa tinha que desenvolver um projecto, e apresenta-lo em 90 segundos. No fim desse curto prazo, os restantes concorrentes podiam efectuar votações positivas ou negativas de modo a escolher os vencedores do concurso.<br />
<br />
Os restantes projectos podem ser visualizados no site do <a href="http://codebits.eu/s/presentations/-2009">Codebits</a>.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-77223899206891507132010-07-02T08:15:00.000-07:002010-07-02T08:15:30.125-07:00Radial Colorz<object height="385" width="480"><param name="movie" value="http://www.youtube.com/v/I7Ym_nMhkKI&hl=en_US&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/I7Ym_nMhkKI&hl=en_US&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
<br />
O meu último projecto é um widget para testar a memória e a velocidade de reacção. O objectivo é memorizar a sequência de esferas coloridas que surge no ínicio de cada nível e recriá-la.<br />
<br />
Para fazer isso basta clicar numa das esferas que é enviada para a caixa ao centro do ecrã. Ao enviares as esferas para o centro tenta apanhar os power-ups que vão surgindo, alinha a esfera que vais colocar na caixa com o power-up que pretendes apanhar rodando o círculo das esferas.<br />
<br />
Foi desenvolvido para a plataforma Nokia WRT utilizando JavaScript, HTML e CSS. Está disponível para download gratuito na plataforma de <a href="http://widgets.sapo.pt/">Widgets da Sapo</a>. Os ícones Orbz são da autoria do designer Miloš Mirković que amavelmente os disponibilizou.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-36611752592047781322010-06-03T05:23:00.000-07:002010-06-03T05:23:34.148-07:00Realidade Aumentada - Shake Menus<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/nieGNVNq1BI&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/nieGNVNq1BI&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
<br />
Aplicação desenvolvida em C++ utilizando OpenGL e um algoritmo de seguimento de uma marca, onde um gesto de agitar é utilizado para despoletar eventos como activar um menu e selecionar um item. Um trabalho desenvolvido na área de Realidade Aumentada.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-29540668320832747922010-05-25T08:36:00.001-07:002011-01-15T05:35:27.464-08:00Apresentação Artech 2010 Math4Kids<div id="__ss_4290530" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a href="http://www.slideshare.net/DavidJardim/math4-kids-artech-final" title="Math4 Kids Artech Final">Math4 Kids Artech Final</a></strong><object height="355" id="__sse4290530" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=math4kidsartechfinal-100525091806-phpapp01&stripped_title=math4-kids-artech-final" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4290530" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=math4kidsartechfinal-100525091806-phpapp01&stripped_title=math4-kids-artech-final" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><br />
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/DavidJardim">David Jardim</a>.</div></div>David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-25632897852822365892010-05-14T04:11:00.000-07:002010-05-14T04:11:43.912-07:00Lego MindStorms with Q-Learning<object height="385" width="480"><param name="movie" value="http://www.youtube.com/v/5whVKppLVM8&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/5whVKppLVM8&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
<br />
Projecto desenvolvido na cadeira de Robótica em que o objectivo é fazer com que o robô aprenda de uma forma autónoma como chegar ao rectângulo cor-de-rosa.<br />
<br />
Foi utilizado o algoritmo de Aprendizagem por Reforço, <a href="http://en.wikipedia.org/wiki/Q-learning">Q-Learning</a>.<br />
<br />
Inicialmente programado num Simulador (<a href="http://simbad.sourceforge.net/">Simbad</a>) para simplificar a fase de testes e mais tarde transferimos o código desenvolvido em Java e a aprendizagem obtida <i>off-line</i> para o robô.<br />
<br />
Verificamos que realmente aprendeu ;)<br />
<br />
O robô possui os seguintes sensores:<br />
<br />
<ul><li>2 Sensores para detectar a cor do chão.</li>
<li>1 Bússola para saber a orientação do robô.</li>
<li>1 Sensor ultra-sónico para detectar a existência de obstáculos. </li>
</ul><div>E dois motores, um para cada roda.</div><br />
<br />
Foi um desafio muito interessante lidar com os vários problemas que advém da imprecisão de alguns sensores e das condições de teste do cenário.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com2tag:blogger.com,1999:blog-8928585245655903318.post-54270391439638991542010-04-12T05:16:00.000-07:002011-01-15T05:35:27.530-08:00Math4KidsNeste projecto iremos descrever uma abordagem ao conceito de aprender a brincar, mais especificamente, facultar simples conceitos matemáticos para crianças numa faixa etária dos 5 aos 7 anos através da interacção com um jogo de computador. Pretende-se fundir o factor de divertimento com a aprendizagem de uma forma inovadora de modo a ilustrar o potencial pedagógico dos jogos ao desenvolver uma aplicação que funcione como uma ferramenta auxiliar no ensino e na aprendizagem da matemática durante a Educação Pré-Escolar de forma interactiva estimulando na criança múltiplas competências.<br />
<br />
Ficam aqui algumas imagens do jogo:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLPiQnxL4srBU95w0qJPd8IbGVWKW-U2FKUZduEw0VKbZk1qBRV0y0XJMl_9lHbKi9kKU47gepZqXQBWdS_Jq1TI3TRP237XcuRBQ_xhNajytGFRhbAKPETTUdU5jm1eTZUSb3VUr80HRT/s1600/Jogo+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLPiQnxL4srBU95w0qJPd8IbGVWKW-U2FKUZduEw0VKbZk1qBRV0y0XJMl_9lHbKi9kKU47gepZqXQBWdS_Jq1TI3TRP237XcuRBQ_xhNajytGFRhbAKPETTUdU5jm1eTZUSb3VUr80HRT/s320/Jogo+1.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhWk6A9XX3zyHymEVhE82PTumv7FchPSz6VxpcB6SZ4TbOQI1Y2Pn7zbrSymfL17Nki7DdzmGTjN__4hL6Dy_wd5us_uJ7wgCuWDtI9Oc7WynWM-kVcufQd_CeudiarWy0qnZ-eP5dOXwi/s1600/Jogo+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhWk6A9XX3zyHymEVhE82PTumv7FchPSz6VxpcB6SZ4TbOQI1Y2Pn7zbrSymfL17Nki7DdzmGTjN__4hL6Dy_wd5us_uJ7wgCuWDtI9Oc7WynWM-kVcufQd_CeudiarWy0qnZ-eP5dOXwi/s320/Jogo+3.png" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVGVP_tfT6zIrHeBYEH-01Plx6RCuvDYUaUz9zqkhhE_FBW4CylN4-4zNlbVXK6TJEo0VzcgMA11wtCFYhBa3RshU1jZkGw0vwURvEto7GBA83NRi8cZFHpPMcmed5ZkAn6otPOH-1tunP/s1600/Jogo+6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVGVP_tfT6zIrHeBYEH-01Plx6RCuvDYUaUz9zqkhhE_FBW4CylN4-4zNlbVXK6TJEo0VzcgMA11wtCFYhBa3RshU1jZkGw0vwURvEto7GBA83NRi8cZFHpPMcmed5ZkAn6otPOH-1tunP/s320/Jogo+6.png" /></a></div><br />
Podemos afirmar que os jogos possuem um potencial de educação tremendo, já que permitem às crianças explorarem ideias em mundos virtuais, acumularem experiência e ficarem absorvidas por disciplinas que no contexto normal das aulas, no ensino como o conhecemos, não representam uma área de interesse nem de lazer.<br />
<br />
Podem efectuar o download do jogo em <a href="http://drp.ly/TRO6t">Math4Kids</a> depois basta extrair o ficheiro e iniciar a instalação apenas para o sistema operativo Windows.<br />
No seguimento deste projecto foi criado um artigo disponível em (<a href="http://drp.ly/NCBcN">Aprender Conceitos de Matemática Brincando</a>) submetido na conferência <a href="http://www.artech-international.com/artech2010/index.php">Artech 2010</a> na qual vou fazer uma pequena apresentação no dia 23 de Abril.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-69588196564014576432010-03-20T09:42:00.000-07:002010-03-20T09:42:15.192-07:00Lego MindStorms<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/qrdnpbSXq9Y&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/qrdnpbSXq9Y&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
<br />
Versão inicial do robô utilizado na cadeira de robótica que vai ter o objectivo de procurar um objecto, após encontrar o objecto deve pegar no mesmo e leva-lo a uma localização específica. <br />
<br />
Utiliza sensores ultra-sónicos e sensores de cores.<br />
<br />
Deve aprender a fazer isto tudo de forma autónoma através de aprendizagem por reforço.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-26032498609206745082010-02-09T03:13:00.000-08:002010-02-09T03:13:54.151-08:00Hierarchical Reinforcement Learning<span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"><span class="Apple-style-span" style="font-size: 11px;"><br />
</span></span><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><span class="Apple-style-span" style="font-size: 10px; white-space: pre;"><br />
</span></span><br />
<br />
<br />
<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/BSVWYQ3-IJ8&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/BSVWYQ3-IJ8&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br />
Apresentação efectuada para demonstrar o tema da minha dissertação.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-32425841017475457582009-12-15T16:44:00.000-08:002009-12-15T16:44:15.028-08:00Sapo Codebits 2009Parabéns à organização pelo excelente evento, recomendo vivamente, já que existiram palestras muito interessantes.<br />
<br />
Nesta edição de 2009, participei com o meu colega Ricardo Carvalho, e sem estarmos à espera conseguimos ficar no 2º lugar do concurso de programação.<br />
<br />
Tinhamos um jogo em XNA que comunicava com um sistema da Lego, e que de uma forma muito simples, possuia duas alavancas cada uma com uma bandeira.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOdfceLJsxmFcf4DHBcuILwNu6uCh4TIHiDrtpRcTMWL3f26z24ergn0DPMctVizBbUf0X6sxWjMdfDFttWD421CZxvQLqw9414knAlUoFqmGnr9I92iZ0ESSDRcXurGVhuBV8nvwef-sQ/s1600-h/09-12-05-145.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOdfceLJsxmFcf4DHBcuILwNu6uCh4TIHiDrtpRcTMWL3f26z24ergn0DPMctVizBbUf0X6sxWjMdfDFttWD421CZxvQLqw9414knAlUoFqmGnr9I92iZ0ESSDRcXurGVhuBV8nvwef-sQ/s400/09-12-05-145.JPG" /></a><br />
</div><br />
Consoante a acção do jogador no jogo, ocorria uma comunicação atráves de sockets entre o jogo e uma aplicação chamada Scratch que servia de middleware na nossa aplicação e que mandava o sistema Lego levantar a bandeira adequada.<br />
<br />
Quando a apresentação for colocada online, venho cá e actualizo o post. David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-13265867558249243132009-10-09T13:59:00.000-07:002009-10-09T14:04:33.444-07:00HeadBanger Slug<object width="445" height="364"><param name="movie" value="http://www.youtube.com/v/TTfdL4sxN0g&hl=pt-br&fs=1&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/TTfdL4sxN0g&hl=pt-br&fs=1&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"></embed></object><br /><br />Este projecto foi desenvolvido utilizando o excelente programa de modelação e animação 3D Blender que ainda por cima é FREE!!!<br /><br />Foi para a cadeira de Animação por Computador.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com1tag:blogger.com,1999:blog-8928585245655903318.post-26556664793650477822009-10-08T06:43:00.000-07:002009-10-08T07:00:16.956-07:00QLearning Robot Java<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjp7kEDD9sR-nsQD47FNhNHRCuEn0-I-zm8eUt6PgY2AT6j6DcIePzhsB2fyFnR9Vf2E9Vx5ZGijnKNYR9XGY-fWtKW_teyEuGN8o3yEQcVvwilWh2GtQJiwE6b7WPQ8iZDPiCCD7A0CAw/s1600-h/slide0006_image024.png"><img style="cursor:pointer; cursor:hand;width: 110px; height: 85px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjp7kEDD9sR-nsQD47FNhNHRCuEn0-I-zm8eUt6PgY2AT6j6DcIePzhsB2fyFnR9Vf2E9Vx5ZGijnKNYR9XGY-fWtKW_teyEuGN8o3yEQcVvwilWh2GtQJiwE6b7WPQ8iZDPiCCD7A0CAw/s320/slide0006_image024.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5390225206051661090" /></a><br /><br /><span style="font-weight:bold;">Simular um robô móvel que:</span><br /><br />Actue como um agente que possua aprendizagem.<br />Desloque-se num ambiente desconhecido, efectuando a detecção de obstáculos.<br />Obtenha informação sobre o ambiente, através de um sistema sensorial.<br />Defina estados consoante a informação obtida.<br /><br />O agente tenta obter uma política que maximize a recompensa obtida ao longo do tempo, isso é feito através da seguinte equação.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIz6yrtPsfV1wvBjlrkWV-nL69h7RfSmLXPxKR09_yIWE-stjId7YTWUyMbByWyxTzBZdvBwp2pSi_ouixmKlwIVp0BzugAvlQ4f6Lmz9tpm5tLmSk3pDk8xgt2FX_FPLD9Pn3f8UVklRu/s1600-h/formula.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 30px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIz6yrtPsfV1wvBjlrkWV-nL69h7RfSmLXPxKR09_yIWE-stjId7YTWUyMbByWyxTzBZdvBwp2pSi_ouixmKlwIVp0BzugAvlQ4f6Lmz9tpm5tLmSk3pDk8xgt2FX_FPLD9Pn3f8UVklRu/s320/formula.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5390227109595994786" /></a><br /><br />Podemos verificar um cenário possível onde o robô vai aprender o caminho para chegar ao farol de forma automática.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfqt-mhkUb5m0nJuwShRLt5jvqa0SeAa4diEmB_J343PGgA1GUBse-Iohm7N4KCbITNSPiGc6z41YM0kEv3GG__HcBAajDuyMfDu_yf5f3mzyKvh_Ewp-KZOeJr8H4flILeJJY57hJTclO/s1600-h/full.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfqt-mhkUb5m0nJuwShRLt5jvqa0SeAa4diEmB_J343PGgA1GUBse-Iohm7N4KCbITNSPiGc6z41YM0kEv3GG__HcBAajDuyMfDu_yf5f3mzyKvh_Ewp-KZOeJr8H4flILeJJY57hJTclO/s320/full.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5390228180674119650" /></a><br /><br /><br />Ao longo do tempo verifica-se que o robô efectua cada vez menos passos para atingir o seu objectivo.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ9_VF5UnSjUDTI2YY5xyWWU7bS8DhvYbGPeDhH4HF-_uz7_08lIAM0U2oQRoVrx7MFCAO5c4g7F4FQ5NVlbkImL8jkoZBihNfu0kmyTml5QcZzroRHKJiRWW9u5V30amZO9nQ4RdTJ1_v/s1600-h/image001.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 131px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ9_VF5UnSjUDTI2YY5xyWWU7bS8DhvYbGPeDhH4HF-_uz7_08lIAM0U2oQRoVrx7MFCAO5c4g7F4FQ5NVlbkImL8jkoZBihNfu0kmyTml5QcZzroRHKJiRWW9u5V30amZO9nQ4RdTJ1_v/s320/image001.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5390225954546931362" /></a><br /><br />E que a qualidade das acções também aumenta ao longo do tempo.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoNR6LiyZzUnaeon0Niki6ztQRft-V7lR80xOpILU4CvQy5AGC50QpEEsZYdMdlKz6mvSj7Ai1kckZB88J5vdC2DEWvwtZvrDjtjxH0D0oH42ub4AdKbSGxZ1WfiG8jXmzkxQpHPRuk4Ki/s1600-h/image003.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 147px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoNR6LiyZzUnaeon0Niki6ztQRft-V7lR80xOpILU4CvQy5AGC50QpEEsZYdMdlKz6mvSj7Ai1kckZB88J5vdC2DEWvwtZvrDjtjxH0D0oH42ub4AdKbSGxZ1WfiG8jXmzkxQpHPRuk4Ki/s320/image003.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5390225959599077554" /></a><br /><br /><br />Os resultados obtidos demonstraram a capacidade do agente de navegar pelo cenário efectuando uma aprendizagem contínua ao longo das acções efectuadas.<br />Verificou-se que quanto mais complexo o cenário, mais iterações eram necessárias para o robô obter a solução óptima para alcançar o farol.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-25498392957850304942009-10-08T05:05:00.000-07:002009-10-09T14:39:52.420-07:00Rastreabilidade com Programação Orientada por Aspectos - AspectJNeste projecto, desenvolveu-se a base de uma aplicação com base em aspectos (AspectJ) que tem como objectivo facilitar a depuração e a rastreabilidade de qualquer aplicação Java.<br /><br />A programação orientada por aspectos tem como principal objectivo resolver as limitação dos métodos de programação actuais, como o espalhamento de código (scattering) ou o emaranhamento (tangling) ou ambos, que tornam o código cada vez mais confuso e de difícil evolução e manutenção.<br /><br />De seguida temos o Ecrã Principal do Programa (Vista Hierárquica):<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQDlGFfTVVbmz3hmylyGevnquCfrougyxnems9R4c1PxSERkzLvq0iJTLFd0DEyZfbHFNLHln4zBtckMDLS0jQDs5fEPHFEoCEgnGdzPM8DpIg1XUrar9V0Sh9Szx2rsVm4wYnlnLLSgFO/s1600-h/trace1.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 241px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQDlGFfTVVbmz3hmylyGevnquCfrougyxnems9R4c1PxSERkzLvq0iJTLFd0DEyZfbHFNLHln4zBtckMDLS0jQDs5fEPHFEoCEgnGdzPM8DpIg1XUrar9V0Sh9Szx2rsVm4wYnlnLLSgFO/s320/trace1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5390201623432548146" /></a><br /><br />E podemos observar a execução de um constructor-call, isto é, da chamada de um construtor da classe Test(), na execução da instrução Test lolx = new Test();<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio_KNobhdXvAe1z0N9Czu4_QBN-e1bTqHYIDBlPhByb5lrhUJ64GVCQzvU41URVsCO_TYfbMNcnTJRdZaIGzo6ElxF6nLxwneZXIv7C-LEPN-Mq_fGypfQ9emLhE5NK-c_7fH7xB2lFlt8/s1600-h/trace2.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 273px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio_KNobhdXvAe1z0N9Czu4_QBN-e1bTqHYIDBlPhByb5lrhUJ64GVCQzvU41URVsCO_TYfbMNcnTJRdZaIGzo6ElxF6nLxwneZXIv7C-LEPN-Mq_fGypfQ9emLhE5NK-c_7fH7xB2lFlt8/s320/trace2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5390201730873616258" /></a><br /><br />Nesta imagem podemos observar o segundo ecrã do programa, com uma funcionalidade interessante. No painel inferior do ecrã do programa, à qual demos o nome de “Object View”, estão disponíveis duas listas. A lista do lado esquerdo ilustra todas as instâncias de classes (objectos) diferentes capturados pela nossa aplicação.<br /><br />Foi desenvolvido em conjunto com 2 colegas meus :<br /><br />Jairo Avelar<br />Ricardo CarvalhoDavid Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-33383716155460956882009-10-08T04:57:00.000-07:002010-04-12T11:48:01.128-07:00Simulating SARS - NetLogoEste projecto visa a implementação de um modelo small-world network que conjuga cellular automata com o conceito de mirror identities sociais simulando o contacto diário entre os cidadãos, com o propósito de efectuar simulações epidemiológicas.<br />
<br />
Utilizando o seguinte modelo:<br />
<br />
<span style="font-weight: bold;">Cellular Automata with Social Mirror Identities Model (CASMIM)</span><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEIQrmGzrYoIa1T8F24rWctSozVMlbZ0CyYBctsZUZafryOnswFXR5XwfWaNqj20Y1xTpsqC2PtE1Hqlv1TwiWdvJ4eJMd_2Xbj7wvoykgU6CJYUxn4hpZgKutaMyk6Av2pIEORUkMjILK/s1600-h/main.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390197374331932098" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEIQrmGzrYoIa1T8F24rWctSozVMlbZ0CyYBctsZUZafryOnswFXR5XwfWaNqj20Y1xTpsqC2PtE1Hqlv1TwiWdvJ4eJMd_2Xbj7wvoykgU6CJYUxn4hpZgKutaMyk6Av2pIEORUkMjILK/s320/main.jpg" style="cursor: hand; cursor: pointer; height: 248px; width: 320px;" /></a><br />
<br />
Os estados dos agentes da camada superior são alterados simultaneamente com os estados da mirror identity da camada inferior em cada iteração.<br />
Através de um conjunto de regras de interacção os atributos de um agente são alterados, desde o estado epidemiológico até o estado da sua mobilidade social.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvSWWIrI1gX7OkROkL2ocRfaqVw-yLwy-tmZCrH2f42LOIR6hzPPBOFoE5I61gaTU7ggjzj8sFPda1UxZFq4IM4A8G9x0p7v-yDMYR9d41CK7q658J5O1ttoXzNqk7s0gM6KbBT-IgfFqa/s1600-h/state.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390197938929269506" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvSWWIrI1gX7OkROkL2ocRfaqVw-yLwy-tmZCrH2f42LOIR6hzPPBOFoE5I61gaTU7ggjzj8sFPda1UxZFq4IM4A8G9x0p7v-yDMYR9d41CK7q658J5O1ttoXzNqk7s0gM6KbBT-IgfFqa/s320/state.jpg" style="cursor: hand; cursor: pointer; height: 320px; width: 281px;" /></a><br />
<br />
Este é o mundo do nosso simulador, como já foi referido cada quadrado corresponde a uma mirror identity de um agente, onde cada agente tem uma ou mais. Através da cor é possível identificar o estado epidemiológico dos agentes.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwdP9ywKYkSc5QYfwA7mCvzOjpmhuVY-WhxqBqnowSEQy8WQgGS5_9gqNcfpoCKqDIhCZr89iEUwcI_jcnR1uw97NCzhwtsc4icwiFE7RtbRO_m3FIGl3sGrTRSe4qO2gRJ2TIEP2F3sOn/s1600-h/world.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390198327567035330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwdP9ywKYkSc5QYfwA7mCvzOjpmhuVY-WhxqBqnowSEQy8WQgGS5_9gqNcfpoCKqDIhCZr89iEUwcI_jcnR1uw97NCzhwtsc4icwiFE7RtbRO_m3FIGl3sGrTRSe4qO2gRJ2TIEP2F3sOn/s320/world.jpg" style="cursor: hand; cursor: pointer; height: 320px; width: 303px;" /></a>David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com1tag:blogger.com,1999:blog-8928585245655903318.post-39332139496205054402009-10-08T04:46:00.000-07:002009-10-08T04:53:46.745-07:00Programação 3D - CaveH Flight - C++Este projecto foi desenvolvido na cadeira de programação 3D para a criação de uma aplicação interactiva virtual, tendo em vista o ambiente imersivo do tipo C.A.V.E. (Cave Automatic Virtual Environment). <br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhJaUPwZE8_OZatg8bNKUXYYJ7-tD_lI2ogJx5y_PqYW_FX0vkgG639gOcYg-98x-sdds6FnZbJllej4SxScL4PFsUSUElWmr2DMXS0qVcFloTq7N-R6R03Kq2Lx_C5COkeH_twnypiCgW/s1600-h/cave.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 271px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhJaUPwZE8_OZatg8bNKUXYYJ7-tD_lI2ogJx5y_PqYW_FX0vkgG639gOcYg-98x-sdds6FnZbJllej4SxScL4PFsUSUElWmr2DMXS0qVcFloTq7N-R6R03Kq2Lx_C5COkeH_twnypiCgW/s320/cave.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5390194902742108658" /></a><br /><br />Inicialmente o desenvolvimento foi efectuado como uma aplicação stand-alone de forma a simplificar a aprendizagem, ou seja foi criado um projecto OSG de raiz em C++, e implementou-se o projecto, mas não era uma aplicação distribuída.<br />A classe AirplaneControllerGadget é responsável por controlar o gadget correspondente ao avião, que por si é manipulado pela classe HandleMotion, ao aplicar as rotações e translações necessárias ao modelo <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZW990SwUSiiT2LuBEq89YWEPGB8_0q9pFe72mgEnpxgfNzVxpoaKYHOrejo7h0xmfyzsr79J-jqB-1DjNNn18JfHvgeSS_lRB91LN1nObOMMB-v42a_DPOKWwU64GsaPx8ou9Ra3Z0h0c/s1600-h/code.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 184px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZW990SwUSiiT2LuBEq89YWEPGB8_0q9pFe72mgEnpxgfNzVxpoaKYHOrejo7h0xmfyzsr79J-jqB-1DjNNn18JfHvgeSS_lRB91LN1nObOMMB-v42a_DPOKWwU64GsaPx8ou9Ra3Z0h0c/s320/code.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5390195562967235810" /></a><br /><br />Obteve-se uma aplicação que permite ao utilizador controlar um avião utilizando o Wiimote de forma satisfatória e podemos verificar pela imagem o resultado final.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRcSY3esgMINVu8yCdmcmhCwQgMCGK1DtNBwwALiZ5ObitdMIdoLAwCDUcEEi_LQBzAwNwPI_yoE4wMdYns4u9YpSDROVFCiHpf8c_rGi4cx_3LaiyZWO06jktfxP23Ie_wJjUem36Te3e/s1600-h/plain.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 205px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRcSY3esgMINVu8yCdmcmhCwQgMCGK1DtNBwwALiZ5ObitdMIdoLAwCDUcEEi_LQBzAwNwPI_yoE4wMdYns4u9YpSDROVFCiHpf8c_rGi4cx_3LaiyZWO06jktfxP23Ie_wJjUem36Te3e/s320/plain.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5390195972666060962" /></a>David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-1699718055026718072009-10-08T04:38:00.000-07:002009-10-08T04:41:39.212-07:00Projecto Som e Vídeo para Multimédia<span style="font-weight:bold;">Time</span><br /><br /><object width="445" height="364"><param name="movie" value="http://www.youtube.com/v/wDrVs5es0TM&hl=pt-br&fs=1&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wDrVs5es0TM&hl=pt-br&fs=1&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"></embed></object><br /><br />Com o desenvolvimento deste projecto adquiri as bases de edição e montagem de vídeo e som, utilizando o Adobe Prémiere, After Effects e o Audition.<br /><br />Foi muito interessante.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-51993904327792265632008-11-29T04:29:00.000-08:002008-11-29T04:53:50.986-08:00QLearning JavaO objectivo deste trabalho é implementar uma técnica de aprendizagem por reforço denominada por QLearning, que consiste num tipo de aprendizagem não supervisionada, onde o "robô" anda a explorar o cenário, evitando os obstáculos até conseguir chegar à saída.<br /><br />De cada vez que consegue sair, atribui uma recompensa à casa anterior à saída, e assim sucessivamente, até obter um caminho com várias recompensas.<br /><br /><br />Inicialmente o cenário é composto por células pretas(obstáculos) e brancas (caminho livre).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUOskNOktIfj7jfrgtJeTGjoiMk1_pG_13BbTrILqHVw_74p6yQ6CqwqzrMTesByj_bd5JjEfcAPGYIOST9gq46-2crZ9ZsZDT9iYjhaKfX3mGtooLqykC4I0xT7Wk-cxu0lk5GybPmJoU/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUOskNOktIfj7jfrgtJeTGjoiMk1_pG_13BbTrILqHVw_74p6yQ6CqwqzrMTesByj_bd5JjEfcAPGYIOST9gq46-2crZ9ZsZDT9iYjhaKfX3mGtooLqykC4I0xT7Wk-cxu0lk5GybPmJoU/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5274056897479476130" /></a><br /><br />Posteriormente as casas que possuem uma recompensa, são marcadas com a cor azul, onde a tonalidade da cor é relevante, quanto mais escura, maior é a recompensa, logo está mais próximo da saída.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYzhzwgSSRRCijHAr3IzHPqliUnYjBJFjx9a4g82u9TGEXG_W5r6ozisCnHR5gTrJGTOM6cT9XPj9elh9ONli-r6ZtJW3j1Hxsd7H3gT-Rrbhm9P1zIsll0PTg8BUBFWuYjialmhratnPD/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 181px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYzhzwgSSRRCijHAr3IzHPqliUnYjBJFjx9a4g82u9TGEXG_W5r6ozisCnHR5gTrJGTOM6cT9XPj9elh9ONli-r6ZtJW3j1Hxsd7H3gT-Rrbhm9P1zIsll0PTg8BUBFWuYjialmhratnPD/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5274057764209407666" /></a><br /><br />Neste exemplo já foi encontrado o caminho, ou seja a solução já convergiu.<br />A casa representada a vermelho consiste na posição actual do robô.<br /><br /><a href="http://en.wikipedia.org/wiki/Q-learning">Q-Learning</a><br /><br />Finalmente um pequeno vídeo para demonstrar, espero que gostem.<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/tovrpoUkzYU&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/tovrpoUkzYU&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-36093862677646053572008-11-28T20:56:00.000-08:002008-11-28T20:58:59.080-08:00Aprendizagem Competitiva JavaApós ter processado um ficheiro de texto com o Text Processor, verificou-se a existência de duas classes, então os representantes dessas classes <span style="font-weight:bold;">convergem </span>para a média das distribuições dos dados.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3wyqkilZn33yIEkvZA79OgL-Hv25FjZQpmFR7fVaGgXRzdcoYgj-ijXd5LSPaneFmfQiBHArWZS7INSb4_jfrtMf4sxaV-mwdWXCrCIkFbbDmLqpW94o0RmbQjyFc7P3fuODamfvHL6YP/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 263px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3wyqkilZn33yIEkvZA79OgL-Hv25FjZQpmFR7fVaGgXRzdcoYgj-ijXd5LSPaneFmfQiBHArWZS7INSb4_jfrtMf4sxaV-mwdWXCrCIkFbbDmLqpW94o0RmbQjyFc7P3fuODamfvHL6YP/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5273939501624662162" /></a><br /><br />Representantes: Pontos Brancos.<br />Classe: Nuvem azul (2).David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-89025079296540800242008-11-28T20:45:00.000-08:002008-11-28T20:51:27.103-08:00Text Processor Java<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHxBxDPwWrMEttrzRanmU3iUxL8dXCbV1A-7cHeWuJhp-2P6LjW95Ro5Zb0NWhnzrDn47WtbL0yU91jTCez6pX7mc_FJ9llGXtAXeH1lOPE6UPFSx0Kd_r10zYgO44jKAEXp8mL8YTUL2A/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 292px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHxBxDPwWrMEttrzRanmU3iUxL8dXCbV1A-7cHeWuJhp-2P6LjW95Ro5Zb0NWhnzrDn47WtbL0yU91jTCez6pX7mc_FJ9llGXtAXeH1lOPE6UPFSx0Kd_r10zYgO44jKAEXp8mL8YTUL2A/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5273937550602543458" /></a><br />Esta aplicação permite a leitura de conjuntos de dados, onde a leitura é efectuada por parametrização adequada e posteriormente divide os dados em classes.<br /><br />Todos os dados são gravados num formato único, preferencialmente com espaços entre atributos e fim-de-linha no fim de cada exemplo.<br /><br />Pré-processa os dados gerando ficheiros que contenham apenas escalares.<br /><br />Isto foi utilizado na cadeira de Machine Learning, para efectuar pré-processamento de dados para serem manipulados pelos algorítmos de aprendizagem.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-82974083504209378642008-11-28T20:19:00.000-08:002008-11-28T20:22:02.383-08:00Super Mario Shotgun C# XNA<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNsqfegpzPNtkfS_OQ-YxyIJySq7nDSy6aRvanMFppZpS3FHWA34ZmsWYV_vUG-DvvRaBajZ8m1m8kADXpxHZ23ipGjDEn5rTVwcq9KxdzGphM_CcxbAl_ENXQp0Hz-9mms9TQVu41n07o/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 250px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNsqfegpzPNtkfS_OQ-YxyIJySq7nDSy6aRvanMFppZpS3FHWA34ZmsWYV_vUG-DvvRaBajZ8m1m8kADXpxHZ23ipGjDEn5rTVwcq9KxdzGphM_CcxbAl_ENXQp0Hz-9mms9TQVu41n07o/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5273929962952484530" /></a><br />Apenas uma brincadeira para pôr o Super Mario a matar cogumelos de caçadeira, LOL.<br /><br />Foi implementado em C#, utilizando a plataforma XNA da Microsoft.<br />Um projecto a continuar no futuro...David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-55032723103761910352008-11-28T19:25:00.000-08:002008-11-28T19:28:51.790-08:00Pong Move - Processing<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqmRAkJWwgq1MiHQEIi3Vkih9trpwiaDL9zW03WZDiYONtJzUVUnbybZjfFfNjECAsvX2u5-qBa1Vr7MO7Qn72gqNBXP7JYT2IwBxnRtO0hy0Dwpnpb5oMTd6BuO4tiePMfkrec0o0hR99/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqmRAkJWwgq1MiHQEIi3Vkih9trpwiaDL9zW03WZDiYONtJzUVUnbybZjfFfNjECAsvX2u5-qBa1Vr7MO7Qn72gqNBXP7JYT2IwBxnRtO0hy0Dwpnpb5oMTd6BuO4tiePMfkrec0o0hR99/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5273916244444194866" /></a><br /><br /><br /><br />Com o Processing implementei esta aplicação tipo o Pong, mas com a diferença de o "paddle" ser movido pelo movimento do jogador, por exemplo com a mão a frente da câmara, é claro que isto não passou de um protótipo.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-19632977611393152012008-11-28T19:22:00.000-08:002008-11-28T19:24:42.584-08:00Bubbles Processing - Java<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG_cF_WzH918siK85DIA1ktCCMArXY597Z61iUAtaTkxNleuqfRLaAsOmZ8HcQRZLwwtqdf8oWW3hKAKduu1yw70RD0RGPHObcwhzC75SJduyK5mu82QZwVO7CTMnfovvCwQaNMvLCcoG4/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 253px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG_cF_WzH918siK85DIA1ktCCMArXY597Z61iUAtaTkxNleuqfRLaAsOmZ8HcQRZLwwtqdf8oWW3hKAKduu1yw70RD0RGPHObcwhzC75SJduyK5mu82QZwVO7CTMnfovvCwQaNMvLCcoG4/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5273915195049895762" /></a><br />Utilizando o Processing, e a brincar com os números aleatórios, criei umas 300 bolhas, com tamanhos e cores aleatórias, que colidem com a margem da janela, fica um efeito engraçado, lol.David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0tag:blogger.com,1999:blog-8928585245655903318.post-46595294456100480762008-11-28T19:04:00.000-08:002008-11-28T19:16:41.453-08:00OpenFaceMote JavaAs principais funcionalidades desta aplicação são o reconhecimento do discurso do utilizador, que pode ser usado, por exemplo, para efectuar cliques; <br /><br />o controlo do cursor do rato no sistema operativo, que pode ser efectuado de duas formas diferentes (Incremental e Precision), e ainda a obtenção de oito direcções básicas, relativas ao movimento do utilizador. <br /><br />Isto é conseguido através da captura de som pelo microfone e pela detecção de faces na imagem, que é capturada pela câmara.<br /><br />Temos o "Loading Screen"...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIhO-v70GYKErfIXXkbn97ZeVqOxZO-CDm2zSO6sAFoLYCIycMNyVGjxOSqs7Emg_SwT1_ug6tcyyLxwW0lSCU0rriillcVU61ps5t90Omww3dcJj-tUiQZWiD7lTFRGnow3X9kTrdo6Kc/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIhO-v70GYKErfIXXkbn97ZeVqOxZO-CDm2zSO6sAFoLYCIycMNyVGjxOSqs7Emg_SwT1_ug6tcyyLxwW0lSCU0rriillcVU61ps5t90Omww3dcJj-tUiQZWiD7lTFRGnow3X9kTrdo6Kc/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5273911011528333042" /></a><br /><br />Então temos os seguintes modos :<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6oLpCeSiWVxDafTgx9X9Oz0LBcdPLYFANE4rcHQEQpcqO0cIebmhZ-_VZRvHmFP4HONX4kSqMHGbroLqG9S0dr0Y93-cRpZl2AgZmpJ_5BivgOejpH7xTxkBMGYvOi1G90V7AZ10lfkaV/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 301px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6oLpCeSiWVxDafTgx9X9Oz0LBcdPLYFANE4rcHQEQpcqO0cIebmhZ-_VZRvHmFP4HONX4kSqMHGbroLqG9S0dr0Y93-cRpZl2AgZmpJ_5BivgOejpH7xTxkBMGYvOi1G90V7AZ10lfkaV/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5273911702055089410" /></a><br /><br />Modo Learning, é o estado inicial da aplicação, neste estado o objectivo como o próprio nome indica, é de aprendizagem da localização do utilizador e da sua capacidade de movimento.<br /><br /><br /><br />Estado Incremental<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjakTRfI7LEyJIdhNUQckHJAkzCUtO68LStw13M7rSsYdikUDW1gV7K5Tq78_VNqixfL-OjkUAvQZUZ90dlSSupx0-gybivm_UKf6MZAA83nKmGpOrmtKqQ2LbgQrkesUu1TuObDIyBnQX/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 301px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjakTRfI7LEyJIdhNUQckHJAkzCUtO68LStw13M7rSsYdikUDW1gV7K5Tq78_VNqixfL-OjkUAvQZUZ90dlSSupx0-gybivm_UKf6MZAA83nKmGpOrmtKqQ2LbgQrkesUu1TuObDIyBnQX/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5273912222893058338" /></a><br /><br /><br /> O movimento do rato e as direcções são obtidas quando o utilizador move a cabeça numa determinada direcção, ultrapassando a barreira definida pelas linhas de cor verde. Se o utilizador se mantiver no centro, então está parado.<br /><br />Estado Precision<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR1KpWWpfS4rgkAJO1itLOnX8VasYNE8MlrJgM7ASZ6R99ac5Mh_aOqkT1MUsUOaBwpn2fgEObOCx87pzISoBJbEhfeZHKbTPjDAwY4clpLo04_z6e44O-0-CgiObv8KjFkUw50d-yESui/s1600-h/Sem+t%C3%ADtulo.jpg"><img style="cursor:pointer; cursor:hand;width: 301px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR1KpWWpfS4rgkAJO1itLOnX8VasYNE8MlrJgM7ASZ6R99ac5Mh_aOqkT1MUsUOaBwpn2fgEObOCx87pzISoBJbEhfeZHKbTPjDAwY4clpLo04_z6e44O-0-CgiObv8KjFkUw50d-yESui/s320/Sem+t%C3%ADtulo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5273912589104788594" /></a><br /><br /><br /><br />Neste estado a área definida anteriormente na fase de aprendizagem, que aqui é representada pelo rectângulo vermelho, consiste na área de movimento do utilizador. Ou seja, o centro da face é representado pelo ponto amarelo, e esse vai ser o nosso cursor. <br /><br />Como qualquer aplicação, a OpenFaceMote não está isente de limitações, no entanto com algumas afinações e com mais tempo para trabalhar no projecto, seria possível obter algo pronto para o "mercado".David Jardimhttp://www.blogger.com/profile/05669293974193423369noreply@blogger.com0