<?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-6243877953240735013</id><updated>2011-11-27T21:27:15.747-02:00</updated><category term='Python'/><category term='MatLab'/><category term='Programação'/><category term='Código-fonte'/><category term='Exatas'/><category term='Lógica'/><category term='Práticas'/><category term='Literatura'/><category term='Relações Humanas'/><category term='C/C++'/><category term='Gerência Projetos'/><category term='Misc'/><category term='e-Books'/><category term='Threads'/><category term='Windows API'/><category term='Ajax'/><category term='Torres Hanoi'/><category term='C#'/><category term='Webservices'/><category term='Música'/><category term='Linden Scripting Language'/><category term='Critério Routh'/><category term='second life'/><category term='Games'/><category term='Latim'/><category term='recursividade'/><category term='IA'/><category term='Cultura'/><category term='metaversos'/><category term='Links'/><category term='pérolas'/><category term='Criptografia'/><category term='Uru'/><title type='text'>Communicare (((vs)))</title><subtitle type='html'>Uruense por excelência, torno públicos interesses pessoais e profissionais. Um brinde à todos!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-1465100698071046769</id><published>2009-03-24T23:52:00.005-03:00</published><updated>2009-03-25T01:16:00.065-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Asp.net Timer (C#)</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Este é um exemplo simples de como atualizar automaticamente o conteúdo de um UpdatePanel através de um controle Timer do ASP.NET - nada muito diferente.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Talvez a única observação interessante a acrescentar seja que o timer é definido como sendo um gatilho (trigger) externo ao UpdatePanel. Dessa maneira, o conteúdo do painel é atualizado automaticamente a cada ciclo do timer, sem que o restante da página seja afetado.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;‹%@ Page Language="C#" AutoEventWireup="true"&lt;br /&gt;CodeFile="Default.aspx.cs" Inherits="_Default" %›&lt;br /&gt;&lt;br /&gt;‹!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"&lt;br /&gt;"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"›&lt;br /&gt;‹html xmlns="http://www.w3.org/1999/xhtml"›&lt;br /&gt;‹head runat="server"›&lt;br /&gt;  ‹title›Exemplo: ASP.NET Timer‹/title›&lt;br /&gt;‹/head›&lt;br /&gt;‹body›&lt;br /&gt;  ‹form id="form1" runat="server"›&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;‹!-- necessário para ajax.net --›&lt;/span&gt;&lt;br /&gt;     ‹asp:ScriptManager ID="ScriptManager1" runat="server" /›&lt;br /&gt;     ‹div›&lt;br /&gt;         &lt;span style="color: rgb(0, 153, 0);"&gt;‹!-- timer que atualiza o updatepanel --›&lt;/span&gt;&lt;br /&gt;         ‹asp:Timer ID="timer" runat="server" Interval="1000"&lt;br /&gt;         Enabled="true" OnTick="timer_Tick"›‹/asp:Timer›&lt;br /&gt;&lt;br /&gt;         &lt;span style="color: rgb(0, 153, 0);"&gt;‹!-- região a ser atualizada --›&lt;/span&gt;&lt;br /&gt;         ‹asp:UpdatePanel ID="UpdatePanel1"&lt;br /&gt;         runat="server" UpdateMode="Conditional"›&lt;br /&gt;            ‹Triggers›&lt;br /&gt;               ‹asp:AsyncPostBackTrigger ControlID="timer"/›&lt;br /&gt;            ‹/Triggers›&lt;br /&gt;            ‹ContentTemplate›&lt;br /&gt;               &lt;span style="color: rgb(0, 153, 0);"&gt;‹!-- controles afetados --›&lt;/span&gt;&lt;br /&gt;               ‹asp:Label ID="Label1" runat="server"›&lt;br /&gt;               ‹/asp:Label›&lt;br /&gt;            ‹/ContentTemplate›&lt;br /&gt;        ‹/asp:UpdatePanel›&lt;br /&gt;     ‹/div›&lt;br /&gt;  ‹/form›&lt;br /&gt;‹/body›&lt;br /&gt;‹/html›&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Também é interessante observar que, numa situação mais específica como, por exemplo, UpdatePanels aninhados, alguns comportamentos esdrúxulos podem aparecer. Neste caso, talvez ajude incluir a propriedade &lt;span style="color: rgb(255, 0, 0);"&gt;RenderMode="Inline"&lt;/span&gt; na declaração do UpdatePanel.&lt;br /&gt;&lt;br /&gt;E o code behind da página:&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;&lt;br /&gt;public partial class _Default : System.Web.UI.Page&lt;br /&gt;{&lt;br /&gt;  protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;  {&lt;br /&gt;     if (!IsPostBack)&lt;br /&gt;        timer.Tick += new EventHandler‹EventArgs›(timer_Tick);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void timer_Tick(object sender, EventArgs e)&lt;br /&gt;  {&lt;br /&gt;     Label1.Text = DateTime.Now.ToString();&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Como o ambiente é naturalmente lento, a frequência de atualização deve ser estimada com cuidado.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-1465100698071046769?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/1465100698071046769/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=1465100698071046769&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1465100698071046769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1465100698071046769'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2009/03/aspnet-timer-c.html' title='Asp.net Timer (C#)'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-894501963623151879</id><published>2009-03-13T23:03:00.002-03:00</published><updated>2009-03-13T23:08:48.547-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Links Python</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;a style="font-family: arial;" href="http://www.python.org/"&gt;Python&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: arial;" href="http://www.pythonchallenge.com/"&gt;The Python Challenge&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: arial;" href="http://pygame.org/"&gt;PyGame&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-894501963623151879?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/894501963623151879/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=894501963623151879&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/894501963623151879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/894501963623151879'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2009/03/links-python.html' title='Links Python'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-5858679657482918913</id><published>2008-12-11T20:33:00.004-02:00</published><updated>2008-12-12T00:46:29.885-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Threads'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Custom Events em C#</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Segue um exemplo sobre como criar eventos personalizados em C# e usá-los para realizar ações assim que um processamento mais demorado for concluído, deixando a thread principal da aplicação livre para outros trabalhos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(This is a sample application written in C# that demonstrates how to trigger some action when an expensive function finishes its job.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para testar, basta criar uma aplicação do tipo console com o código abaixo:&lt;/span&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Threading;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;namespace &lt;/span&gt;ConsoleApplication1&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: rgb(51, 51, 255);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Program&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;      &lt;span style="color: rgb(51, 51, 255);"&gt;static void&lt;/span&gt; Main(&lt;span style="color: rgb(51, 51, 255);"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;      {&lt;br /&gt;          &lt;span style="color: rgb(51, 51, 255);"&gt;for &lt;/span&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;int &lt;/span&gt;myNum = 0; myNum ‹ 5; myNum++)&lt;br /&gt;          {&lt;br /&gt;              &lt;span style="color: rgb(0, 153, 0);"&gt;// Objeto de teste&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(51, 153, 153);"&gt;CTest &lt;/span&gt;ct = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;CTest&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;              &lt;span style="color: rgb(0, 153, 0);"&gt;// Método que será executado após o&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;                // término do processamento demorado.&lt;/span&gt;&lt;br /&gt;              ct.TestCompleted += &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;CTest&lt;/span&gt;.&lt;span style="color: rgb(51, 153, 153);"&gt;TestEventHandler&lt;/span&gt;(&lt;br /&gt;                  ct_TestCompleted);&lt;br /&gt;&lt;br /&gt;              &lt;span style="color: rgb(0, 153, 0);"&gt;// Roda o método demorado, liberando&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;                // a aplicação principal.&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Thread&lt;/span&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;ParameterizedThreadStart&lt;/span&gt;(&lt;br /&gt;                  ct.Test)).Start(myNum);&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 153, 0);"&gt;// Sinaliza o término da tarefa.&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(51, 51, 255);"&gt;static void&lt;/span&gt; ct_TestCompleted(&lt;br /&gt;          &lt;span style="color: rgb(51, 51, 255);"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(51, 153, 153);"&gt;CTest&lt;/span&gt;.&lt;span style="color: rgb(51, 153, 153);"&gt;TestEventArgs &lt;/span&gt;e)&lt;br /&gt;      {&lt;br /&gt;          &lt;span style="color: rgb(0, 153, 0);"&gt;// Os parâmetros estarão no objeto (e)&lt;/span&gt;&lt;br /&gt;          Console.WriteLine("Completed: " + e.j);&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: rgb(51, 51, 255);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;CTest&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;      &lt;span style="color: rgb(0, 153, 0);"&gt;// Este é o método demorado.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        // "myNum" Apenas identifica as threads.&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(51, 51, 255);"&gt;public void&lt;/span&gt; Test(&lt;span style="color: rgb(51, 51, 255);"&gt;object &lt;/span&gt;myNum)&lt;br /&gt;      {&lt;br /&gt;          &lt;span style="color: rgb(0, 153, 0);"&gt;// Sinaliza o início da tarefa&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(204, 0, 0);"&gt;"Starting: "&lt;/span&gt; + myNum);&lt;br /&gt;&lt;br /&gt;          &lt;span style="color: rgb(0, 153, 0);"&gt;// Simula um processamento demorado&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: rgb(51, 153, 153);"&gt;Thread&lt;/span&gt;.Sleep(3000);&lt;br /&gt;        &lt;br /&gt;          &lt;span style="color: rgb(0, 153, 0);"&gt;// Dispara o evento ao terminar&lt;/span&gt;&lt;br /&gt;          RaiseTestCompleted((&lt;span style="color: rgb(51, 51, 255);"&gt;int&lt;/span&gt;)myNum);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 153, 0);"&gt;// Nesta classe são definidos&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        // objetos para uso posterior.&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(51, 51, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;TestEventArgs &lt;/span&gt;: System.&lt;span style="color: rgb(51, 153, 153);"&gt;EventArgs&lt;/span&gt;&lt;br /&gt;      {&lt;br /&gt;          &lt;span style="color: rgb(51, 51, 255);"&gt;public int&lt;/span&gt; j; &lt;span style="color: rgb(0, 153, 0);"&gt;// um exemplo&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: rgb(51, 51, 255);"&gt;public &lt;/span&gt;TestEventArgs(&lt;span style="color: rgb(51, 51, 255);"&gt;int &lt;/span&gt;j)&lt;br /&gt;          {&lt;br /&gt;              &lt;span style="color: rgb(51, 51, 255);"&gt;this&lt;/span&gt;.j = j;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 153, 0);"&gt;// Declaração de um delegate&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        // e um evento auxiliares&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(51, 51, 255);"&gt;public delegate void&lt;/span&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;TestEventHandler&lt;/span&gt;(&lt;br /&gt;          &lt;span style="color: rgb(51, 51, 255);"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(51, 153, 153);"&gt;TestEventArgs &lt;/span&gt;e);&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: rgb(51, 51, 255);"&gt;public event&lt;/span&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;TestEventHandler &lt;/span&gt;TestCompleted;&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 153, 0);"&gt;// Este método prepara os parâmetros&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        // e dispara o evento assíncrono.&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(51, 51, 255);"&gt;private void&lt;/span&gt; RaiseTestCompleted(&lt;span style="color: rgb(51, 51, 255);"&gt;int &lt;/span&gt;j)&lt;br /&gt;      {&lt;br /&gt;          &lt;span style="color: rgb(51, 153, 153);"&gt;TestEventArgs &lt;/span&gt;args = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;TestEventArgs&lt;/span&gt;(j);&lt;br /&gt;          OnTest(&lt;span style="color: rgb(51, 51, 255);"&gt;this&lt;/span&gt;, args);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: rgb(51, 51, 255);"&gt;protected virtual void&lt;/span&gt; OnTest(&lt;br /&gt;          &lt;span style="color: rgb(51, 51, 255);"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(51, 153, 153);"&gt;TestEventArgs &lt;/span&gt;e)&lt;br /&gt;      {&lt;br /&gt;          &lt;span style="color: rgb(51, 51, 255);"&gt;if &lt;/span&gt;(TestCompleted != &lt;span style="color: rgb(51, 51, 255);"&gt;null&lt;/span&gt;)&lt;br /&gt;              TestCompleted(&lt;span style="color: rgb(51, 51, 255);"&gt;this&lt;/span&gt;, e);&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Em passos gerais, é criada uma classe &lt;span style="color: rgb(51, 153, 153);"&gt;TestEventArgs &lt;/span&gt;com os objetos que serão expostos via argumentos da função executada logo após o término do processamento demorado.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Neste exemplo, disparo 5 threads que demoram alguns segundos. Note que, devido à concorrência do sistema, ocasionalmente elas podem finalizar fora de ordem.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Talvez um pouco confuso à primeira vista, mas muito útil em diversas aplicações.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-5858679657482918913?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/5858679657482918913/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=5858679657482918913&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5858679657482918913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5858679657482918913'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/12/custom-events-em-c.html' title='Custom Events em C#'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-8147579355270615576</id><published>2008-12-04T01:28:00.013-02:00</published><updated>2009-01-12T20:40:19.621-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cultura'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Deserto Verde</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Relato de uma viagem a serviço de São Carlos/SP a Aracruz/ES, com uma esticada até Teixeira de Freitas/BA - uma brincadeira de &lt;a href="http://uruensepelomundo.blogspot.com/2008/12/deserto-verde.html" target="_blank"&gt;3.600km pelo deserto verde&lt;/a&gt;, ou Aracruz Celulose, como preferir.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-8147579355270615576?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/8147579355270615576/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=8147579355270615576&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/8147579355270615576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/8147579355270615576'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/12/deserto-verde.html' title='Deserto Verde'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-6403786317400241505</id><published>2008-11-20T21:04:00.006-02:00</published><updated>2008-12-04T21:31:35.110-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cultura'/><category scheme='http://www.blogger.com/atom/ns#' term='Relações Humanas'/><title type='text'>Eu de Volta</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Limpando as teias das aranhas que andam por aqui...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Resumindo, desde minha evolução da Kaizen Games para a &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.agx.com.br/" target="_blank"&gt;AGX Tecnologia&lt;/a&gt;&lt;span style="font-family:arial;"&gt; em julho/2008, tenho estado bem ocupado e deixei este blog às traças (não que fosse muito útil).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Saí de Sampa para São Carlos City e me envolvi com sistemas &lt;/span&gt;&lt;a style="font-family: arial;" href="http://pt.wikipedia.org/wiki/Sistema_de_informa%C3%A7%C3%A3o_geogr%C3%A1fica" target="_blank"&gt;georreferenciados&lt;/a&gt;&lt;span style="font-family:arial;"&gt; e sistemas embarcados. Tenho usado &lt;/span&gt;&lt;a style="font-family: arial;" href="http://mapserver.gis.umn.edu/" target="_blank"&gt;MapServer&lt;/a&gt;&lt;span style="font-family:arial;"&gt; e &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.postgresql.org/" target="_blank"&gt;PostgreSQL&lt;/a&gt;&lt;span style="font-family:arial;"&gt;/&lt;/span&gt;&lt;a style="font-family: arial;" href="http://postgis.refractions.net/" target="_blank"&gt;PostGIS&lt;/a&gt;&lt;span style="font-family:arial;"&gt; com C# (sim, é &lt;/span&gt;&lt;a style="font-family: arial;" href="http://pgfoundry.org/projects/npgsql/" target="_blank"&gt;possível&lt;/a&gt;&lt;span style="font-family:arial;"&gt;), microcontroladores &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.microchip.com/" target="_blank"&gt;PIC&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, MPLAB, linguagem C, meus velhos amigos Delphi e Visual Studio, e outras coisas open source.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Quando possível, ainda tento brincar com &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.libsdl.org/" target="_blank"&gt;SDL&lt;/a&gt;&lt;span style="font-family:arial;"&gt; em C++ e Python (&lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.pygame.org/" target="_blank"&gt;PyGame&lt;/a&gt;&lt;span style="font-family:arial;"&gt;), estudar &lt;/span&gt;&lt;a style="font-family: arial;" href="http://pt.wikipedia.org/wiki/Rede_neural" target="_blank"&gt;redes neurais&lt;/a&gt;&lt;span style="font-family:arial;"&gt; artificiais, ler &lt;/span&gt;&lt;a style="font-family: arial;" href="http://pt.wikipedia.org/wiki/Friedrich_Nietzsche" target="_blank"&gt;Nietzsche&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, &lt;/span&gt;&lt;a style="font-family: arial;" href="http://pt.wikipedia.org/wiki/Bertrand_Russell" target="_blank"&gt;Bertrand Russell&lt;/a&gt;&lt;span style="font-family:arial;"&gt; e &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www2.uol.com.br/glauco/geraldao.shtml" target="_blank"&gt;Geraldão&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, assistir &lt;/span&gt;&lt;a style="font-family: arial;" href="http://pt.wikipedia.org/wiki/Fud%C3%AAncio_e_Seus_Amigos" target="_blank"&gt;Fudêncio&lt;/a&gt;&lt;span style="font-family:arial;"&gt; e passar um tempo no Ubuntu.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Continuo ouvindo Clannad, Joy Division, &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.haggard.de/" target="_blank"&gt;Haggard&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.eluveitie.ch/" target="_blank"&gt;Eluveitie&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, Los Orishas e Raul Seixas, obviamente.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Enfim, pretendo voltar a compartilhar algumas coisas que aprender - porém daqui alguns dias - neste final de semana devo viajar a serviço para &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.google.com/maps?f=q&amp;amp;hl=pt-BR&amp;amp;geocode=&amp;amp;q=aracruz,+es&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=59.512696,113.203125&amp;amp;ie=UTF8&amp;amp;ll=-19.747317,-40.274506&amp;amp;spn=0.560956,0.884399&amp;amp;t=h&amp;amp;z=10&amp;amp;g=aracruz,+es&amp;amp;iwloc=addr" target="_blank"&gt;Aracruz&lt;/a&gt;&lt;span style="font-family:arial;"&gt;/ES. A proprósito: a 20km de uma praia de nudismo... hehehe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;E os churras continuam os mesmos - ou melhores.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-6403786317400241505?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/6403786317400241505/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=6403786317400241505&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6403786317400241505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6403786317400241505'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/11/eu-de-volta.html' title='Eu de Volta'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-7702635746649739670</id><published>2008-06-01T13:37:00.004-03:00</published><updated>2008-06-01T13:45:19.380-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='second life'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Linden Scripting Language'/><title type='text'>Novos Blogs de Programação</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: arial;"&gt;Enfim tomei coragem (e juízo) para iniciar um novo blog, especializado em programação para Second Life. Chamei-o de &lt;/span&gt;&lt;a style="font-family: arial;" href="http://helloavatar.blogspot.com/" target="_blank"&gt;Hello, Avatar!&lt;/a&gt;&lt;span style="font-family: arial;"&gt; por motivos óbvios e é outro blog apenas por organização, pois os demais tópicos varzeados em geral vão continuar por aqui.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;Também pretendo, muito em breve, iniciar um outro voltado para a programação de jogos, que chemei de &lt;/span&gt;&lt;a style="font-family: arial;" href="http://avemunde.blogspot.com/" target="_blank"&gt;AVE MVNDE&lt;/a&gt;&lt;span style="font-family: arial;"&gt; (advinhe por quê). Porém, como meus conhecimentos e experiência nesta área ainda são bem limitados, este outro blog será populado com as evoluções dos meus estudos, mas já iniciará com algum conteúdo prático como C++ e SDL, sprites, simulação de física e detecção de colisões. Mais à frente, pretendo abordar também sobre C# e XNA.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-7702635746649739670?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/7702635746649739670/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=7702635746649739670&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7702635746649739670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7702635746649739670'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/06/novos-blogs-de-programao.html' title='Novos Blogs de Programação'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-2629439420683875676</id><published>2008-05-27T21:38:00.006-03:00</published><updated>2008-05-27T22:12:57.914-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Cultura'/><title type='text'>A Era dos Videogames</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Já faz um bom tempo que o Discovery Channel disponibilizou uma série sobre a história dos videogames, mas ainda há um link para uma versão interativa do documentário, chamado de &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.discoverybrasil.com/videogame/" target="_blank"&gt;A Era do Videogame&lt;/a&gt;&lt;span style="font-family:arial;"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YK-I1cKIr2o/SDyuaswxoLI/AAAAAAAAAIg/FapXzVtZAh4/s1600-h/eradosgames.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_YK-I1cKIr2o/SDyuaswxoLI/AAAAAAAAAIg/FapXzVtZAh4/s200/eradosgames.jpg" alt="" id="BLOGGER_PHOTO_ID_5205227043049021618" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;É um trabalho interessante, à altura do Discovery Channel, e divertido, pois o leitor obtém as informações conforme progride em pequenos games. O material abrange desde os primórdios na década de 70 até os dias atuais. Vale ver.&lt;br /&gt;&lt;br /&gt;Aproveitando o link, tem um joguinho legal brazuca de corrida com ótimos gráficos: &lt;a href="http://www.buckingfuggy.com/" target="_blank"&gt;Bucking Fuggy&lt;/a&gt;. E para quem quiser relembrar um crássico, aqui tem o &lt;a href="http://www.oestemania.com.br/jogos/31.htm" target="_blank"&gt;Prince Of Persia&lt;/a&gt; rodando direto no browser.&lt;br /&gt;&lt;br /&gt;Cumprida a obrigação, agora vem a diversão: se der cara, C# (libsecondlife). Se der coroa, C++ (SDL). Coroa venceu.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-2629439420683875676?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/2629439420683875676/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=2629439420683875676&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2629439420683875676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2629439420683875676'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/05/era-dos-videogames.html' title='A Era dos Videogames'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YK-I1cKIr2o/SDyuaswxoLI/AAAAAAAAAIg/FapXzVtZAh4/s72-c/eradosgames.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-1602482343704926952</id><published>2008-05-27T21:29:00.004-03:00</published><updated>2008-12-04T21:33:19.192-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Literatura'/><title type='text'>José Saramago</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"Quero recordar-lhes que, sem vaidade, eu também nasci num lugar pobre, de analfabetos. Em minha infância não tive livros, nem televisão, internet ou playstation, mas quem não tem nada sempre inventa algo. Jamais se aborrece."&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;a style="font-family: arial;" href="http://pt.wikipedia.org/wiki/Jos%C3%A9_Saramago" target="_blank"&gt;José Saramago&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-1602482343704926952?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/1602482343704926952/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=1602482343704926952&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1602482343704926952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1602482343704926952'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/05/jos-saramago.html' title='José Saramago'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-4188229020179730452</id><published>2008-05-15T18:31:00.001-03:00</published><updated>2008-05-15T18:41:21.702-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>The Fódest Game</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: arial;"&gt;Mais um joguinho para descontrair: &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.onemorelevel.com/game/the_worlds_hardest_game" target="_blank"&gt;The World's Hardest Game&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: arial;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YK-I1cKIr2o/SCyt5AQQEJI/AAAAAAAAAIY/cNFm1fAdOws/s1600-h/hardestgame.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YK-I1cKIr2o/SCyt5AQQEJI/AAAAAAAAAIY/cNFm1fAdOws/s200/hardestgame.JPG" alt="" id="BLOGGER_PHOTO_ID_5200722864538390674" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: arial;"&gt;Não é novidade, mas é legal.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-4188229020179730452?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/4188229020179730452/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=4188229020179730452&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4188229020179730452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4188229020179730452'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/05/fdest-game.html' title='The Fódest Game'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YK-I1cKIr2o/SCyt5AQQEJI/AAAAAAAAAIY/cNFm1fAdOws/s72-c/hardestgame.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-6536581683171321242</id><published>2008-05-08T00:09:00.014-03:00</published><updated>2008-05-21T00:51:47.218-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='metaversos'/><category scheme='http://www.blogger.com/atom/ns#' term='second life'/><category scheme='http://www.blogger.com/atom/ns#' term='Relações Humanas'/><title type='text'>Second Life and the Public Good</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Uma parceria entre a USP e a Kaizen Games resultou em mais uma ilha incluída na Mainland Brasil, destinada a um projeto de e-learning chamado &lt;a href="http://slurl.com/secondlife/MLBR%20Cidade%20Conhecimento/128/127/22" target="_blank"&gt;Cidade do Conhecimento&lt;/a&gt;. Até aí nada impressionante, embora seja uma boa notícia e de interesse público. Começa a melhorar quando me foi delegada a nobre tarefa de entrar em contato com Tori Horton, da University of Southern California (USC), e conseguir uma cópia de um auditório para o projeto.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Após alguns e-mails, recados na secretária eletrônica, mensagens off-line e outros desencontros como o fuso horário, finalmente nos encontramos in-world. Na ocasião, ela teria um evento iniciando em precisos 7 minutos e não poderia tratar sobre o anfiteatro naquele momento, mas me convidou para participar.&lt;br /&gt;&lt;br /&gt;Teletransportei-me então para a &lt;/span&gt;&lt;a style="font-family: arial;" href="http://slurl.com/secondlife/International%20Island/124/25/26" target="_blank"&gt;International Island&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, onde Cory Ondrejka, uma das pessoas mais importantes para o desenvolvimento do Second Life na Linden Lab até o ano passado (ao lado do ex-CEO Phillip Rosedale), e Douglas Thomas, professor associado na Annenberg School for Communication da USC, convidavam os residentes a imaginar meios pelos quais os ambientes virtuais como o próprio Second Life poderiam contribuir para com o bem-estar geral da população. Os melhores trabalhos ainda poderão ser patrocinados, como descrito no &lt;/span&gt;&lt;a style="font-family: arial;" href="http://networkculture.usc.edu/index.php?option=com_content&amp;amp;view=article&amp;amp;id=35" target="_blank"&gt;site do projeto&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, pela própria Tori Horton, que foi muito atenciosa.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Ao final do evento, ao acionar por descuido meu microfone e despertar interesse em alguns residentes pelo idioma "não identificado", em particular &lt;/span&gt;&lt;a style="font-family: arial;" href="http://whymysl.blogspot.com/" target="_blank"&gt;Rhiannon Chatnoir&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, integrante do &lt;a href="http://www.thevesuviusgroup.com/" target="_blank"&gt;The Vesuvius Group&lt;/a&gt;, mais um novo e interessante contato estava feito.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Depois disso tudo, alguém ainda poderia perguntar:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;- Por quê usar Second Life?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;e eu poderia responder simplesmente:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;- Porque SL é um ambiente virtual em três dimensões interativo e em tempo real que possui uma infra-estrutura sofisticada, ampla e relativamente simples de aprender e usar. Permite, através de pequenos scripts em alto nível, o uso de recursos como simulação de física ou comunicação web via requisições http.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;mas esta experiência me mostrou que o ambiente virtual é realmente intangível e pode ir muito além dessa resposta superficial.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-6536581683171321242?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/6536581683171321242/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=6536581683171321242&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6536581683171321242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6536581683171321242'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/05/sl-and-public-good.html' title='Second Life and the Public Good'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-779401502562229106</id><published>2008-05-06T22:04:00.006-03:00</published><updated>2008-05-27T00:04:57.833-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows API'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Win32 API Tutorial</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Segue um excelente tutorial online (em inglês) sobre programação para Windows. O texto começa pela criação de uma simples janela, passa pelo tratamento de mensagens (message handling) e evolui até demonstrar os controles visuais mais comuns (como button e textbox).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: arial;" href="http://www.winprog.org/tutorial/" target="_blank"&gt;theForger's Win32 API Tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;O site tráz também várias outras informações para complementar o tutorial básico e aprofundar os conhecimentos do leitor (criação de uma aplicação simples, interface de dispositivos gráficos, ferramentas e documentação, apêndices).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Para testes rápidos, tenho usado o &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.bloodshed.net/dev/devcpp.html" target="_blank"&gt;Bloodshed Dev-C++&lt;/a&gt;&lt;span style="font-family:arial;"&gt; e até o momento ele tem atendido bem as espectativas.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-779401502562229106?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/779401502562229106/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=779401502562229106&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/779401502562229106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/779401502562229106'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/05/win32-api-tutorial.html' title='Win32 API Tutorial'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-7212466589265343874</id><published>2008-05-05T23:32:00.008-03:00</published><updated>2008-05-27T00:05:10.514-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e-Books'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>C++ Beginner's Guide</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Livro &lt;span style="font-style: italic;"&gt;C++ Beginner's Guide&lt;/span&gt;, de Herbert Schildt, disponibilizado para &lt;a href="http://www.zshare.net/download/106035225fbe1b19/" target="_blank"&gt;download (17MB)&lt;/a&gt; em formato PDF pela Microsoft. Para facilitar, coloquei um zip no &lt;a href="http://www.zshare.net/" target="_blank"&gt;zshare&lt;/a&gt;. Capítulos do livro:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;01 - C++ Fundamentals&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;02 - Introducing Data Types and Operators&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;03 - Program Control Statements&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;04 - Arrays, Strings, and Pointers&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;05 - Introducing Functions&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;06 - A Closer Look at Functions&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;07 - More Data Types and Operators&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;08 - Classes and Objects&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;09 - A Closer Look at Classes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;10 - Inheritance, Virtual Functions, and Polymorphism&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;11 - The C++ I/O System&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;12 - Exceptions, Templates, and Other Advanced Topics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Em inglês, com linguagem bem clara e acessível.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-7212466589265343874?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/7212466589265343874/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=7212466589265343874&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7212466589265343874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7212466589265343874'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/05/c-beginners-guide.html' title='C++ Beginner&apos;s Guide'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-5343450506252878137</id><published>2008-04-07T23:16:00.005-03:00</published><updated>2008-04-08T00:03:05.030-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Detecção de Eventos no Windows</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: arial;"&gt;Demonstração em C# de como detectar a ocorrência de eventos do sistema através dos recursos de instrumentação do Windows. Embora este exemplo identifique a abertura ou fechamento de uma aplicação qualquer, os eventos __InstanceCreationEvent e __InstanceDeletionEvent também podem identificar a criação ou exclusão de arquivos, unidades de discos, entre outras coisas.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Management;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    Desc.: Captura eventos do sistema.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    Prog.: vagnercsousa@yahoo.com.br&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    Data.: 2008/04/07/23:00, Osasco&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Referência:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;http://msdn2.microsoft.com/en-us/library/aa393250(VS.85).aspx&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;namespace &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;EventosDoSistema&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Program&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;   &lt;span style="color: rgb(51, 51, 255);"&gt;static void&lt;/span&gt; Main(&lt;span style="color: rgb(51, 51, 255);"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;   {&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;MonitoraçãoEventos&lt;/span&gt;.Monitorar(&lt;span style="color: rgb(153, 0, 0);"&gt;"calc.exe"&lt;/span&gt;,&lt;br /&gt;       &lt;span style="color: rgb(51, 153, 153);"&gt;MonitoraçãoEventos&lt;/span&gt;.&lt;span style="color: rgb(51, 153, 153);"&gt;TipoEvento&lt;/span&gt;.Encerrar);&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.Read(); &lt;span style="color: rgb(0, 153, 0);"&gt;// aguarda&lt;/span&gt;&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;MonitoraçãoEventos&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;   &lt;span style="color: rgb(51, 51, 255);"&gt;static &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;ManagementEventWatcher &lt;/span&gt;watcher;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(51, 51, 255);"&gt;public static void&lt;/span&gt; Monitorar&lt;br /&gt;     (&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;nmProcesso, &lt;span style="color: rgb(51, 153, 153);"&gt;TipoEvento &lt;/span&gt;tpEvento)&lt;br /&gt;   {&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// qdo aplicação inicia ou encerra&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;evento = (tpEvento == &lt;span style="color: rgb(51, 153, 153);"&gt;TipoEvento&lt;/span&gt;.Iniciar) ?&lt;br /&gt;       &lt;span style="color: rgb(153, 0, 0);"&gt;"__InstanceCreationEvent"&lt;/span&gt; : &lt;span style="color: rgb(153, 0, 0);"&gt;"__InstanceDeletionEvent"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// procuro o fechamento de uma aplicação específica&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;condicao = &lt;span style="color: rgb(153, 0, 0);"&gt;"TargetInstance ISA \"Win32_Process\""&lt;/span&gt;&lt;br /&gt;       + &lt;span style="color: rgb(153, 0, 0);"&gt;" AND TargetInstance.Name = \""&lt;/span&gt; + nmProcesso + &lt;span style="color: rgb(153, 0, 0);"&gt;"\""&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// qdo não há provider de eventos explícito&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;TimeSpan &lt;/span&gt;intervalo = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;TimeSpan&lt;/span&gt;(0, 0, 1);&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// estrutura a consulta&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;WqlEventQuery &lt;/span&gt;query = &lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt;&lt;br /&gt;       &lt;span style="color: rgb(51, 153, 153);"&gt;WqlEventQuery&lt;/span&gt;(evento, intervalo, condicao);&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// prepara o objeto que fará a detecção&lt;/span&gt;&lt;br /&gt;     watcher = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;ManagementEventWatcher&lt;/span&gt;(query);&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// método para tratar ocorrências do evento&lt;/span&gt;&lt;br /&gt;     watcher.EventArrived += &lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt;&lt;br /&gt;       &lt;span style="color: rgb(51, 153, 153);"&gt;EventArrivedEventHandler&lt;/span&gt;(watcher_EventArrived);&lt;br /&gt;          &lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// inicia monitoração&lt;/span&gt;&lt;br /&gt;     watcher.Start();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(51, 51, 255);"&gt;static void&lt;/span&gt; watcher_EventArrived&lt;br /&gt;     (&lt;span style="color: rgb(51, 51, 255);"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(51, 153, 153);"&gt;EventArrivedEventArgs &lt;/span&gt;e)&lt;br /&gt;   {&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// suspende monitoração&lt;/span&gt;&lt;br /&gt;     ((&lt;span style="color: rgb(51, 153, 153);"&gt;ManagementEventWatcher&lt;/span&gt;)sender).Stop();&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(e.NewEvent);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(51, 51, 255);"&gt;public enum&lt;/span&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;TipoEvento&lt;/span&gt;&lt;br /&gt;   {&lt;br /&gt;     Iniciar, Encerrar&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-5343450506252878137?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/5343450506252878137/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=5343450506252878137&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5343450506252878137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5343450506252878137'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/04/deteco-de-eventos-no-windows.html' title='Detecção de Eventos no Windows'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-2810552221971562687</id><published>2008-04-07T22:41:00.012-03:00</published><updated>2008-05-27T00:05:19.671-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Streets Of Rage e Quake II</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Download do &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.bombergames.net/sorr_project/" target="_blank"&gt;Streets Of Rage&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, game de ação clássico para consoles Sega, em um remake não-oficial e freeware para PC. Totalmente excelente! &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.zshare.net/download/276008719a6594/" target="_blank"&gt;Download&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YK-I1cKIr2o/R_rQOj60rII/AAAAAAAAAG8/ml4gZn6ANpQ/s1600-h/sor.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YK-I1cKIr2o/R_rQOj60rII/AAAAAAAAAG8/ml4gZn6ANpQ/s200/sor.png" alt="" id="BLOGGER_PHOTO_ID_5186686869449256066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Como de costume, economizando posts, segue o link para a versão demo do game &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.vertigo.com/quake2.htm" target="_blank"&gt;Quake II&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, com códigos-fontes nativo e  gerenciado em C++ incluídos.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-2810552221971562687?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/2810552221971562687/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=2810552221971562687&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2810552221971562687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2810552221971562687'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/04/sor-e-quake.html' title='Streets Of Rage e Quake II'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YK-I1cKIr2o/R_rQOj60rII/AAAAAAAAAG8/ml4gZn6ANpQ/s72-c/sor.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-423497086646161401</id><published>2008-03-29T01:06:00.008-03:00</published><updated>2008-05-05T21:41:45.458-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows API'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Ajustar Data-Hora em C#</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Exemplo em C# que demonstra como atualizar a data e hora do sistema utilizando chamadas à API do Windows. Para isso, basta dizer à aplicação que existe uma função externa pronta, onde encontrá-la (a DLL), quais parâmetros recebe e seu tipo de retorno.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Runtime.InteropServices; &lt;span style="color: rgb(0, 153, 0);"&gt;// DllImport()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;Microsoft.Win32; &lt;span style="color: rgb(0, 153, 0);"&gt;// evento TimeChanged()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    Desc.: Ajusta data e hora do sistema.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    Prog.: vagnercsousa@yahoo.com.br&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    Data.: 2008/03/29/00:00, Osasco&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Referências:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// SetSystemTime Function&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;http://msdn2.microsoft.com/en-us/library/ms724942(VS.85).aspx&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// struct SYSTEMTIME&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;http://msdn2.microsoft.com/en-us/library/ms724950(VS.85).aspx&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// exemplo Windows API&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;http://vsousa.blogspot.com/2008/03/bringtofront.html&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;namespace &lt;/span&gt;SystemFunctionsTeste&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Program&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;static void&lt;/span&gt; Main(&lt;span style="color: rgb(51, 51, 255);"&gt;string&lt;/span&gt;[] args)&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;SystemTime&lt;/span&gt;.Testar();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;SystemTime&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;/* Estrutura (unmanaged) no arquivo WinBase.h:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        typedef struct _SYSTEMTIME {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;            WORD wYear;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;            WORD wMonth;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;            WORD wDayOfWeek;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;            WORD wDay;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;            WORD wHour;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;            WORD wMinute;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;            WORD wSecond;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;            WORD wMilliseconds;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;   // Declaração da estrutura necessária&lt;/span&gt;&lt;br /&gt; [&lt;span style="color: rgb(51, 153, 153);"&gt;StructLayout&lt;/span&gt;(&lt;span style="color: rgb(51, 153, 153);"&gt;LayoutKind&lt;/span&gt;.Sequential)]&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;public struct&lt;/span&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;SYSTEMTIME&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;public ushort&lt;/span&gt; wYear;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;public ushort&lt;/span&gt; wMonth;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;public ushort&lt;/span&gt; wDayOfWeek;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;public ushort&lt;/span&gt; wDay;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;public ushort&lt;/span&gt; wHour;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;public ushort&lt;/span&gt; wMinute;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;public ushort&lt;/span&gt; wSecond;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;public ushort&lt;/span&gt; wMilliseconds;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; [&lt;span style="color: rgb(51, 153, 153);"&gt;DllImport&lt;/span&gt;(&lt;span style="color: rgb(153, 0, 0);"&gt;"Kernel32.dll"&lt;/span&gt;)]&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;static extern bool&lt;/span&gt; SetSystemTime(&lt;span style="color: rgb(51, 51, 255);"&gt;ref &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;SYSTEMTIME &lt;/span&gt;pST);&lt;br /&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;// BOOL WINAPI SetSystemTime&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;   //     (__in const SYSTEMTIME* lpSystemTime);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; [&lt;span style="color: rgb(51, 153, 153);"&gt;DllImport&lt;/span&gt;(&lt;span style="color: rgb(153, 0, 0);"&gt;"Kernel32.dll"&lt;/span&gt;)]&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;static extern void&lt;/span&gt; GetSystemTime(&lt;span style="color: rgb(51, 51, 255);"&gt;ref &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;SYSTEMTIME &lt;/span&gt;pST);&lt;br /&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;// void WINAPI GetSystemTime&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;   //     (__out LPSYSTEMTIME lpSystemTime);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;   // Objeto do tipo da estrutura criada&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;static &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;SYSTEMTIME &lt;/span&gt;pST = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;SYSTEMTIME&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;public static void&lt;/span&gt; Testar()&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// handler para evento (usar tecla TAB)&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;SystemEvents&lt;/span&gt;.TimeChanged += &lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt;&lt;br /&gt;         &lt;span style="color: rgb(51, 153, 153);"&gt;EventHandler&lt;/span&gt;(SystemEvents_TimeChanged);&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// Função externa que obtém dados&lt;/span&gt;&lt;br /&gt;     GetSystemTime(&lt;span style="color: rgb(51, 51, 255);"&gt;ref &lt;/span&gt;pST);&lt;br /&gt;&lt;br /&gt;     Exibe(pST); &lt;span style="color: rgb(0, 153, 0);"&gt;// apenas lista&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     pST.wDay = 13;&lt;span style="color: rgb(0, 153, 0);"&gt; // alteração de exemplo&lt;/span&gt;&lt;br /&gt;     pST.wMonth = 6;&lt;br /&gt;     pST.wYear = 2009;&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// Função externa que atualiza&lt;/span&gt;&lt;br /&gt;     SetSystemTime(&lt;span style="color: rgb(51, 51, 255);"&gt;ref &lt;/span&gt;pST);&lt;br /&gt;&lt;br /&gt;     Exibe(pST); &lt;span style="color: rgb(0, 153, 0);"&gt;// lista novamente&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(0, 153, 0);"&gt;// Aguarda evento TimeChanged&lt;/span&gt;&lt;br /&gt;     System.Threading.&lt;span style="color: rgb(51, 153, 153);"&gt;Thread&lt;/span&gt;.Sleep(1000);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;static void&lt;/span&gt; Exibe(&lt;span style="color: rgb(51, 153, 153);"&gt;SYSTEMTIME &lt;/span&gt;pST)&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(153, 0, 0);"&gt;"wDay "&lt;/span&gt; + pST.wDay);&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(153, 0, 0);"&gt;"wDayOfWeek "&lt;/span&gt; + pST.wDayOfWeek);&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(153, 0, 0);"&gt;"wHour "&lt;/span&gt; + pST.wHour);&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(153, 0, 0);"&gt;"wMillisec "&lt;/span&gt; + pST.wMilliseconds);&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(153, 0, 0);"&gt;"wMinute "&lt;/span&gt; + pST.wMinute);&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(153, 0, 0);"&gt;"wMonth "&lt;/span&gt; + pST.wMonth);&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(153, 0, 0);"&gt;"wSecond "&lt;/span&gt; + pST.wSecond);&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(153, 0, 0);"&gt;"wYear "&lt;/span&gt; + pST.wYear);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;static void&lt;/span&gt; SystemEvents_TimeChanged&lt;br /&gt;     (&lt;span style="color: rgb(51, 51, 255);"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(51, 153, 153);"&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(153, 0, 0);"&gt;"Data atualizada."&lt;/span&gt;);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Um detalhe que merece atenção especial é o tipo de dados na declaração dos membros da estrutura (WORD neste exemplo) que representa um valor de 16 bits e, por isso, os membros da estrutura gerenciada foram declarados como &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:arial;" &gt;uint&lt;/span&gt;&lt;span style="font-family:arial;"&gt;, também de capacidade igual 16 bits. Da mesma forma, caso houvesse algum membro declarado como DWORD (32 bits), usaríamos o tipo gerenciado &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:arial;" &gt;int&lt;/span&gt;&lt;span style="font-family:arial;"&gt; de 32 bits. Isto garante que a exportação do código gerenciado para o não-gerenciado seja coerente e não gere resultados inesperados.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-423497086646161401?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/423497086646161401/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=423497086646161401&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/423497086646161401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/423497086646161401'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/03/setsystemtime.html' title='Ajustar Data-Hora em C#'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-6441418666638302623</id><published>2008-03-25T22:54:00.006-03:00</published><updated>2008-03-29T03:01:03.704-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Relações Humanas'/><category scheme='http://www.blogger.com/atom/ns#' term='pérolas'/><title type='text'>Leis de Murphy</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"If something can go wrong, it will."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Algumas leis militares de Murphy:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"A coisa mais perigosa na zona de combate é um oficial com um mapa."&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"O problema em usar a saída mais fácil é que ela já foi minada pelo inimigo."&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"O companheirismo é essencial à sobrevivência. Ele dá ao inimigo outra pessoa em quem atirar."&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Algumas leis de Murphy para a Programação:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"Todo programa, quando acabado, estará obsoleto."&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"Se um programa é útil, ele deve ser modificado."&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"Se um programa é inútil, ele deve ser documentado."&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"A complexidade de um programa cresce até exceder a capacidade do programador que deve mantê-lo."&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Variantes relativas a projetos:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"As falhas de projetos andam sempre em grupos."&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"Errar é humano, mas para fazer coisas realmente idiotas é necessário um computador."&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Consultores são pessoas místicas que perguntam algo à empresa e depois dizem a mesma coisa de volta para ela."&lt;/span&gt; Lei de MacDonald&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Se os engenheiros construíssem prédios como os programadores escrevem programas, um único picapau seria capaz de destruir a civilização."&lt;/span&gt; Lei de Weinberg&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Nada é impossível para o homem que não tem que fazer por conta própria."&lt;/span&gt; Lei de Weiler&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Nunca programe e beba cerveja ao mesmo tempo."&lt;/span&gt; Lei de Woltman&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Sempre existe mais um bug."&lt;/span&gt; Lei de Lubersky da Entomologia Cibernética&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Variantes diversas:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Para cada ação existe uma crítica igual e no sentido contrário."&lt;/span&gt; Postulado de Harrison&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Se um objeto está em movimento, ele está indo na direção errada. Se um objeto está parado, ele está no lugar errado."&lt;/span&gt; Lei de Gerrold das dinâmicas infernais&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Um contrato verbal é aquele que não vale o papel em que seria escrito."&lt;/span&gt; Lei dos contratos de Goldwin&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"É um erro deixar qualquer objeto mecânico perceber que você está com pressa."&lt;/span&gt; Observação de Ralph&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Um contribuinte é alguém que não tem que fazer um concurso para trabalhar para o governo."&lt;/span&gt; Observação de Krueger&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;"Tudo depende."&lt;/span&gt; Lei de Langsam&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Trechos (selecionados e reordenados) de documento de autoria desconhecida (2002, traduzido por José Barreto Júnior), obtido no site eBooksBrasil.com no formato Rocket eBook alguns anos atrás (velhos arquivos-fantasmas assombrando meu sussego).&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-6441418666638302623?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/6441418666638302623/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=6441418666638302623&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6441418666638302623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6441418666638302623'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/03/leis-de-murphy.html' title='Leis de Murphy'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-1693432575065741617</id><published>2008-03-19T22:59:00.009-03:00</published><updated>2008-05-05T21:43:19.483-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Threads'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Envio de KeyStrokes em C#</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;No post anterior, minha extensão da classe &lt;span style="font-style: italic;"&gt;System.Diagnostics.Process&lt;/span&gt; implementou um método capaz de trazer a janela associada a um processo qualquer para o primeiro plano da área de trabalho. Neste post, segue a implementação que efetivamente envia keystrokes para a aplicação, como se as teclas fossem normalmente digitadas pelo teclado. O que fazer com isso? Lembra do bambú? Bom... e&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;nvia por keystrokes!&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;Criei uma nova classe chamada Stroker com um método público responsável por dar uma "cutucada" na aplicação. Este estímulo será enviado somente aos processos que, dentre a listas de todos os processos em execução, correspondam ao especificado pelo parâmetro formal do método.&lt;br /&gt;&lt;br /&gt;O estímulo à aplicação que se tornou a janela ativa é realizado por uma thread parametrizada, empregada para garantir um certo grau de isolamento entre o funcionamento geral da ferramenta e o envio de uma série de keystrokes específica. É minha solução atual e possivelmente será aperfeiçoada (mas funfa muito bem).&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Windows.Forms;&lt;span style="color: rgb(0, 153, 0);"&gt; // para SendKeys&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Diagnostics;&lt;span style="color: rgb(0, 153, 0);"&gt; // para processos&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Threading;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;namespace &lt;/span&gt;KeyStroker&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Stroker&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;static public void &lt;/span&gt;Cutucada(&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;processo)&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Process&lt;/span&gt;[] processos = &lt;span style="color: rgb(51, 153, 153);"&gt;Process&lt;/span&gt;.GetProcesses();&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;foreach &lt;/span&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;Process &lt;/span&gt;p in processos)&lt;br /&gt;     {&lt;br /&gt;         &lt;span style="color: rgb(0, 153, 0);"&gt;// cada programa em execução&lt;/span&gt;&lt;br /&gt;         &lt;span style="color: rgb(51, 51, 255);"&gt;if &lt;/span&gt;(p.ProcessName.IndexOf(processo) != -1)&lt;br /&gt;         {&lt;br /&gt;             &lt;span style="color: rgb(0, 153, 0);"&gt;// DLL do post anterior&lt;/span&gt;&lt;br /&gt;             Processo.&lt;span style="color: rgb(51, 153, 153);"&gt;Processo&lt;/span&gt;.Mostrar(p);&lt;br /&gt;&lt;br /&gt;             Cutucar(&lt;span style="color: rgb(153, 0, 0);"&gt;"A"&lt;/span&gt;);&lt;span style="color: rgb(0, 153, 0);"&gt; // teclas a enviar&lt;/span&gt;&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;private static void &lt;/span&gt;Cutucar(&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;param)&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Thread &lt;/span&gt;t = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Thread&lt;/span&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt;&lt;br /&gt;         &lt;span style="color: rgb(51, 153, 153);"&gt;ParameterizedThreadStart&lt;/span&gt;(bg_SendKey));&lt;br /&gt;&lt;br /&gt;     t.Start(param);&lt;br /&gt;     t.Join(&lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;TimeSpan&lt;/span&gt;(0, 0, 4));&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(51, 51, 255);"&gt;if &lt;/span&gt;(t.IsAlive)&lt;br /&gt;         t.Abort();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;static void &lt;/span&gt;bg_SendKey(&lt;span style="color: rgb(51, 51, 255);"&gt;object &lt;/span&gt;param)&lt;br /&gt; {&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;Thread&lt;/span&gt;.Sleep(&lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;TimeSpan&lt;/span&gt;(0, 0, 2));&lt;br /&gt;     &lt;span style="color: rgb(51, 153, 153);"&gt;SendKeys&lt;/span&gt;.SendWait((&lt;span style="color: rgb(51, 51, 255);"&gt;string&lt;/span&gt;)param);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;A thread leva como parâmetro real a tecla "pressionada" e, após disparada, paralisa a thread principal da ferramenta (através do método &lt;span style="font-style: italic;"&gt;Thread.Join()&lt;/span&gt;) até que seu trabalho seja concluído ou o tempo limite especificado exceda em caso de algum problema. Neste caso, a thread será forçada a abortar sua execução.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Finalizando, a thread "filha" aguarda algum tempo (2 segundos no exemplo) para garantir que a janela já tenha se tornado ativa, e efetivamente envia o keystroke fornecido pelo parâmetro.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Obs.1: nesta implementação, a classe percorre todos os processos que atendam ao nome fornecido, alternando entre as janelas e enviando os keystrokes para cada uma delas.&lt;br /&gt;&lt;br /&gt;Obs.2: O exemplo ainda não está completo, falta uma aplicação qualquer que "use" a classe criada, mas postar isso já seria demais.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Útil? Para mim foi...&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-1693432575065741617?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/1693432575065741617/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=1693432575065741617&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1693432575065741617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1693432575065741617'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/03/e-o-bambu.html' title='Envio de KeyStrokes em C#'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-2409061920205231307</id><published>2008-03-19T01:35:00.011-03:00</published><updated>2008-05-05T21:44:01.764-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows API'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Process.BringToFront() em C#</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Após algum tempo de dedicação quase que exclusiva ao metaverso &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.forterrainc.com/" target="_blank"&gt;Forterra OLIVE&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, surgiu a necessidade de criar uma ferramenta capaz de enviar key strokes para uma aplicação específica que pode, inclusive, ter várias instâncias simultâneas.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Simples, basta obter uma lista de processos, executar algum método BringToFront() e então aplicar os key strokes. Fudéos! Não há um método mágico destes (que eu conheça), mas há uma gambiarra salvadora. Os key strokes ficarão para a próxima, focarei no método ausente.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;A idéia é relativamente simples. Não há o método mágico que traz uma aplicação para primeiro plano, mas há a propriedade &lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;IntPtr Process&lt;/span&gt;&lt;span style="font-style: italic;"&gt;.MainWindowHandle&lt;/span&gt;, que retorna um número identificador para a janela principal associada ao processo (ou zero se o processo não possuir GUI - interface gráfica).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Com este identificador (handle) em mãos, podemos apelar para o velho Windão e suas magníficas bibliotecas dinâmicas (DLL's). Neste caso, foram usadas as funções &lt;span style="font-style: italic;"&gt;SetForegroundWindow()&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;ShowWindow()&lt;/span&gt;, ambas implementadas na DLL User32.dll, daí o atributo &lt;span style="font-style: italic;"&gt;System.Runtime.InteropServices.DllImport()&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Agora basta juntar estas tralhas, especificar a ação que a janela executará (detalhes no arquivo-cabeçalho &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.woodmann.com/fravia/sources/WINUSER.H" target="_blank"&gt;winuser.h&lt;/a&gt;&lt;span style="font-family:arial;"&gt;), e está pronto.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Um pulo-do-gato interessante é extender a classe &lt;span style="font-style: italic;"&gt;System.Diagnostics.Process&lt;/span&gt; num projeto do tipo class library (em que o assembly produzido é uma DLL) e incluir esta brincadeira, como fiz no exemplo a seguir.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Diagnostics; // classe Process&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Runtime.InteropServices; // atributo DllImport&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Desc.: Biblioteca para complementar classe Process&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Prog.: vagnercsousa@yahoo.com.br&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Data.: 2008/03/18/23:00, Osasco&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;namespace &lt;/span&gt;Processo&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Processo &lt;/span&gt;: &lt;span style="color: rgb(51, 153, 153);"&gt;Process&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;[&lt;span style="color: rgb(51, 153, 153);"&gt;DllImport&lt;/span&gt;(&lt;span style="color: rgb(153, 0, 0);"&gt;"User32.dll"&lt;/span&gt;)]&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;static extern IntPtr &lt;/span&gt;SetForegroundWindow(&lt;span style="color: rgb(51, 51, 255);"&gt;IntPtr &lt;/span&gt;hWnd);&lt;br /&gt;&lt;br /&gt;[&lt;span style="color: rgb(51, 153, 153);"&gt;DllImport&lt;/span&gt;(&lt;span style="color: rgb(153, 0, 0);"&gt;"User32.dll"&lt;/span&gt;)]&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;static extern IntPtr &lt;/span&gt;ShowWindow&lt;br /&gt; (&lt;span style="color: rgb(51, 51, 255);"&gt;IntPtr &lt;/span&gt;hWnd, &lt;span style="color: rgb(51, 51, 255);"&gt;int &lt;/span&gt;nCmdShow);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public void &lt;/span&gt;Mostrar()&lt;br /&gt;{&lt;br /&gt;   Mostrar(&lt;span style="color: rgb(51, 51, 255);"&gt;this&lt;/span&gt;, SW_Modos.SW_RESTORE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public void &lt;/span&gt;Mostrar(SW_Modos sw)&lt;br /&gt;{&lt;br /&gt;   Mostrar(&lt;span style="color: rgb(51, 51, 255);"&gt;this&lt;/span&gt;, sw);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public static void &lt;/span&gt;Mostrar(&lt;span style="color: rgb(51, 153, 153);"&gt;Process &lt;/span&gt;p)&lt;br /&gt;{&lt;br /&gt;   Mostrar(p, SW_Modos.SW_RESTORE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public static void &lt;/span&gt;Mostrar(&lt;span style="color: rgb(51, 153, 153);"&gt;Process &lt;/span&gt;p, SW_Modos sw)&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color: rgb(51, 51, 255);"&gt;IntPtr &lt;/span&gt;wptr = p.MainWindowHandle;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(51, 51, 255);"&gt;if &lt;/span&gt;((&lt;span style="color: rgb(51, 51, 255);"&gt;int&lt;/span&gt;)wptr != 0) &lt;span style="color: rgb(0, 153, 0);"&gt;// 0 se não possui GUI&lt;/span&gt;&lt;br /&gt;   {&lt;br /&gt;       SetForegroundWindow(wptr);&lt;br /&gt;       ShowWindow(wptr, (&lt;span style="color: rgb(51, 51, 255);"&gt;int&lt;/span&gt;)sw);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public enum &lt;/span&gt;SW_Modos&lt;br /&gt;{&lt;br /&gt;   SW_HIDE = 0,&lt;br /&gt;   SW_SHOWNORMAL = 1,&lt;br /&gt;   SW_NORMAL = 1,&lt;br /&gt;   SW_SHOWMINIMIZED = 2,&lt;br /&gt;   SW_SHOWMAXIMIZED = 3,&lt;br /&gt;   SW_MAXIMIZE = 3,&lt;br /&gt;   SW_SHOWNOACTIVATE = 4,&lt;br /&gt;   SW_SHOW = 5,&lt;br /&gt;   SW_MINIMIZE = 6,&lt;br /&gt;   SW_SHOWMINNOACTIVE = 7,&lt;br /&gt;   SW_SHOWNA = 8,&lt;br /&gt;   SW_RESTORE = 9,&lt;br /&gt;   SW_SHOWDEFAULT = 10,&lt;br /&gt;   SW_FORCEMINIMIZE = 11,&lt;br /&gt;   SW_MAX = 11&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Pronto. Agora sempre que precisar trazer uma aplicação para primeiro plano, basta referenciar a DLL gerada, usar a nova classe Processo e executar o método Mostrar() conforme as regras de negócio do projeto. Em execução:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YK-I1cKIr2o/R-EUsokI3HI/AAAAAAAAAFw/zTnJm2s99b0/s1600-h/KeyStroker.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_YK-I1cKIr2o/R-EUsokI3HI/AAAAAAAAAFw/zTnJm2s99b0/s200/KeyStroker.JPG" alt="" id="BLOGGER_PHOTO_ID_5179443803488574578" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-2409061920205231307?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/2409061920205231307/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=2409061920205231307&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2409061920205231307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2409061920205231307'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/03/bringtofront.html' title='Process.BringToFront() em C#'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YK-I1cKIr2o/R-EUsokI3HI/AAAAAAAAAFw/zTnJm2s99b0/s72-c/KeyStroker.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-1589347745823061289</id><published>2008-03-05T17:56:00.009-03:00</published><updated>2008-04-05T15:33:43.794-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pérolas'/><title type='text'>[OFF] Geraldão</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Quem se lembra do Geraldão, personagem clássico do Glauco? Para relembrar os bãos tempos:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YK-I1cKIr2o/R88LDc8htLI/AAAAAAAAAFc/_98VEeVYSC8/s1600-h/Geraldao.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YK-I1cKIr2o/R88LDc8htLI/AAAAAAAAAFc/_98VEeVYSC8/s200/Geraldao.JPG" alt="" id="BLOGGER_PHOTO_ID_5174366650809562290" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Aproveitando o post, o show do Iron Maiden em SP foi espetacular&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YK-I1cKIr2o/R_fF6b78wSI/AAAAAAAAAG0/ryHtNNjBSLY/s1600-h/ironmaidensp.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YK-I1cKIr2o/R_fF6b78wSI/AAAAAAAAAG0/ryHtNNjBSLY/s200/ironmaidensp.jpg" alt="" id="BLOGGER_PHOTO_ID_5185831103662702882" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Algumas &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.orkut.com/Album.aspx?uid=16881449102771698194&amp;amp;aid=1204524437" target="_blank"&gt;(péssimas) fotos&lt;/a&gt;&lt;span style="font-family:arial;"&gt;. Up the Irons!!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-1589347745823061289?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/1589347745823061289/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=1589347745823061289&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1589347745823061289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1589347745823061289'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/03/off-topic.html' title='[OFF] Geraldão'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_YK-I1cKIr2o/R88LDc8htLI/AAAAAAAAAFc/_98VEeVYSC8/s72-c/Geraldao.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-4461588363366738271</id><published>2008-02-18T15:31:00.003-03:00</published><updated>2008-03-29T02:43:33.681-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gerência Projetos'/><title type='text'>Project Management Intro</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Não costumo repassar notícias ou artigos, mas alguns são relevantes.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"(...)IT projects fail at the beginning — not the end — due to a lack of sufficient planning. An IT organization must consider the resources it needs to devote to a project, the skills required and the people who need to be involved, and realistically consider the time it will take to create, test and implement the project deliverables. Otherwise, the project will be a mess. The IT organization will never complete it on time, on budget or with the required functionality, which are three common factors for project success.(...)"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://www.cio.com/article/40342" target="_blank"&gt;An Introduction to IT Project Management&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-4461588363366738271?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/4461588363366738271/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=4461588363366738271&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4461588363366738271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4461588363366738271'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/02/project-management-intro.html' title='Project Management Intro'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-5164249987434718092</id><published>2008-01-28T10:21:00.004-02:00</published><updated>2008-05-05T21:45:16.669-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='second life'/><category scheme='http://www.blogger.com/atom/ns#' term='Lógica'/><category scheme='http://www.blogger.com/atom/ns#' term='Linden Scripting Language'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Jogo de Lógica em LSL e C#</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Aí está. Deu trampo, mas saiu.&lt;br /&gt;&lt;br /&gt;Minha versão em LSL de um jogo de raciocínio citado no livro "Dominando Visual Studio .net com C#", do Fábio Camara.&lt;br /&gt;&lt;br /&gt;Por pura preguiça, não vou postar o exemplo todo aqui, apenas o &lt;a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=1660"&gt;link para o artigo&lt;/a&gt;, que saiu no &lt;a href="http://www.linhadecodigo.com.br/"&gt;Linha de Código&lt;/a&gt;. Aí estão umas imagens do meu cenário para o jogo.&lt;br /&gt;&lt;br /&gt;Imagem 1:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YK-I1cKIr2o/R53QaYa4rAI/AAAAAAAAAFM/cnMlV2nA36A/s1600-h/JogoLogica01.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YK-I1cKIr2o/R53QaYa4rAI/AAAAAAAAAFM/cnMlV2nA36A/s200/JogoLogica01.jpg" alt="" id="BLOGGER_PHOTO_ID_5160509899686849538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Imagem 2:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YK-I1cKIr2o/R53QiYa4rBI/AAAAAAAAAFU/XIvWX7-RFwk/s1600-h/JogoLogica02.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YK-I1cKIr2o/R53QiYa4rBI/AAAAAAAAAFU/XIvWX7-RFwk/s200/JogoLogica02.JPG" alt="" id="BLOGGER_PHOTO_ID_5160510037125803026" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Bem sugestivo.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-5164249987434718092?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/5164249987434718092/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=5164249987434718092&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5164249987434718092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5164249987434718092'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/01/jogo-de-lgica.html' title='Jogo de Lógica em LSL e C#'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_YK-I1cKIr2o/R53QaYa4rAI/AAAAAAAAAFM/cnMlV2nA36A/s72-c/JogoLogica01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-3868820677947229466</id><published>2008-01-07T09:38:00.006-02:00</published><updated>2008-03-29T03:05:53.461-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recursividade'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='pérolas'/><title type='text'>AlcoholicException</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Decidi disponibilizar o código-fonte que rege aproximadamente 98% do meu comportamento.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;// vagner's main behaviour&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;void&lt;/span&gt; Main(&lt;span style="color: rgb(0, 204, 204);"&gt;Cerva &lt;/span&gt;c)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  try&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;    while &lt;/span&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;true&lt;/span&gt;) { ++c.bebe; }&lt;br /&gt; }&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  catch &lt;/span&gt;(&lt;span style="color: rgb(0, 204, 204);"&gt;AlcoholicException &lt;/span&gt;e)&lt;br /&gt; {&lt;br /&gt;   myFígado.Dispose();&lt;br /&gt; }&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  finally&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt;   Main(&lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(0, 204, 204);"&gt;Cerva&lt;/span&gt;(-4.5));&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Desconsiderando algumas inicializações de rotina, isso roda que é uma beleza. Inclusive, acho que vou fazer uma versão 2.0 multi-thread, empregando também a classe &lt;span style="color: rgb(0, 204, 204);"&gt;Whisky&lt;/span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-3868820677947229466?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/3868820677947229466/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=3868820677947229466&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3868820677947229466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3868820677947229466'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/01/alcoholicexception.html' title='AlcoholicException'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-172252846599150079</id><published>2008-01-04T18:51:00.000-02:00</published><updated>2008-01-04T18:56:55.433-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='metaversos'/><category scheme='http://www.blogger.com/atom/ns#' term='second life'/><title type='text'>Rumo Aos Metaversos</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Os metaversos serão, nos próximos anos, o que a internet representa hoje. O que começou como uma ferramenta militar, tornou-se um meio de comunicação acessível e cotidiano. Ela passou do modo texto para o conteúdo estático e então evoluiu para o dinâmico.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Mas nossa ambição não pára por aí. Do que era a foto de um produto num site qualquer, agora podemos tocá-lo e realizar interações como se aquilo estivesse em nossas mãos. Definitivamente, isto não é uma moda passageira e sim a direção pela qual o futuro vem se aproximando. Segue o que assim me faz acreditar.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;É claro que os passos são tímidos, e devem ser cautelosos, embora os números apontem os brasileiros como a segunda maior comunidade de "secondlifeanos" no mundo. No entanto, ainda temos uma participação pouco ativa. Este cenário torna-se paradoxal ao considerar que o envolvimento com o mundo virtual não impõe custo algum aos seus residentes e que investe apenas:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;1. Quem desejar (preferencialmente com uma boa estratégia na agulha, assim como em qualquer negócio).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Redobrando a característica pessoal deste texto, acredito que devemos deslocar nosso espectro de costumes usuais e pensar como habitantes de um metaverso. Em outras palavras, imagine entrar em uma casa virtual e, ao invés de móveis convencionais, ela lhe propiciar experiências limitadas no mundo real. Esta "casa" pode ser qualquer espaço e as experiências podem ser tanto profissionais como de entretenimento. Particularmente, eu adoraria ver a Chapada Diamantina em tempo real numa parede e ler Bertrand Russell em outra, enquanto participo de uma conferência com o avatar do meu chefe.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Indo ainda mais longe, talvez até demais e além do que o Second Life pode oferecer atualmente, esta mesma conferência virtual poderia ser transmitida dentro do metaverso por uma espécie de holograma. Isto já seria um mundo virtual elevado ao quadrado, mas evitaria transpor uma limitação física humana para o avatar. Confuso, mas da mesma forma que uma pessoa não é capaz de se teletransportar no mundo real (por enquanto e desconsiderando a possibilidade de conversão de massa em energia à velocidade da luz como defendido por Einstein na Teoria da Relatividade), impor que um avatar deva fazê-lo no virtual para interagir com outro torna-se contraditório. Mas isso já é viajar longe em uma bola de neve.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;O fato é que os metaversos são a tendência para a web que conhecemos, além de fascinantes, e estão aí para serem desbravados. Coragem, homens!&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-172252846599150079?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/172252846599150079/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=172252846599150079&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/172252846599150079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/172252846599150079'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/01/rumo-aos-metaversos.html' title='Rumo Aos Metaversos'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-1652176023053236674</id><published>2008-01-03T17:21:00.004-02:00</published><updated>2008-05-05T21:46:39.226-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Práticas'/><category scheme='http://www.blogger.com/atom/ns#' term='Gerência Projetos'/><title type='text'>Game Design Documents</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;(Esse é sério, não outra &lt;a href="http://vsousa.blogspot.com/2007/11/design-document.html"&gt;tira&lt;/a&gt;!)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Seguem alguns links para design documents aplicados a jogos:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: arial;" href="http://www.vancouver.wsu.edu/fac/peabody/game-book/ACGD.pdf"&gt;The Art of Computer Game Design&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, Chris Crawford&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: arial;" href="http://www.engin.umd.umich.edu/CIS/course.des/cis587/design-tx/game.html"&gt;2D Game Design Documents&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, Vários documentos/autores&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: arial;" href="http://www.sloperama.com/advice.html"&gt;Game Biz Advice&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, Tom Sloper&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: arial;" href="http://kb.lutherlink.de/Introducao_GameDesign.pdf"&gt;Introdução ao Game Design&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, Ricardo Vladimiro&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;É isso.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-1652176023053236674?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/1652176023053236674/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=1652176023053236674&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1652176023053236674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1652176023053236674'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2008/01/game-design.html' title='Game Design Documents'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-3375164883454796689</id><published>2007-12-19T20:51:00.005-02:00</published><updated>2008-05-05T21:47:05.260-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='second life'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Linden Scripting Language'/><title type='text'>Prims Rezzing em LSL</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Segue um rápido exemplo sobre programação para Second Life em Linden Scripting Language.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Trata-se de uma demonstração simples e interessante sobre como criar novas instâncias de objetos via código, além de obter um efeito visualmente interessante.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Para este exemplo e utilizando uma primitiva com dimensões de, digamos, 10 x 2 x 0.1 metros, teremos o seguinte resultado:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: arial;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YK-I1cKIr2o/R2mmAhOLjRI/AAAAAAAAAE0/keplaVJ1WhU/s1600-h/rez04.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YK-I1cKIr2o/R2mmAhOLjRI/AAAAAAAAAE0/keplaVJ1WhU/s200/rez04.JPG" alt="" id="BLOGGER_PHOTO_ID_5145826577095560466" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Para tanto, é necessário apenas que o script a seguir e uma cópia do objeto a ser replicado sejam colocados no inventário da primitiva principal. Esta mesma primitiva fará cópias do objeto, sendo que as novas instâncias são posicionadas estrategicamente, resultando numa forma mais atraente regida por um padrão de comportamento específico.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Neste caso, as cópias terão um deslocamento vertical para cima composto com uma pequena rotação em torno do eixo Z, de maneira que a altura da figura como um todo não ultrapasse 10 metros e que a resultante desses incrementos de rotação complete uma volta de giro.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Na verdade, o código é mais simples do que a explicação, mas, de qualquer forma, o que nos interessa é, principalmente, as equações para determinar a posição e a rotação.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;- Para a posição, basta acrescentar à altura do último objeto o incremento desejado, que neste exemplo é a relação entre a altura máxima pretendida o número total de objetos. Outra maneira, mais conveniente em termos de programação, é acrescentar à posição da primitiva principal o produto entre o número da cópia atual e o incremento, resultando também no offset desejado. Por fim, a posição será dada por, simplesmente,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;llGetPos() + &lt;0,&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;- Para a rotação, um raciocínio análogo é aplicado. Desejamos que cada objeto tenha uma pequena rotação em relação ao anterior, mas que entre o primeiro e o último objeto, tenhamos completado uma volta de giro. Como uma volta completa são 360 graus ou 2*PI radianos, nosso incremento angular será dado pela razão entre 360º e o número total de objetos. Em relação à primitiva root, o offset angular para cada objeto será dado por, também simplesmente e utilizando a notação de Euler,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;0,&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Daí, o restante do código apenas executa as iterações necessárias para criação das cópias, como pode ser visto completamentamente a seguir:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;default&lt;br /&gt;{&lt;br /&gt; state_entry()&lt;br /&gt; {&lt;br /&gt;   llSay(0, "Ola, avatar! " +&lt;br /&gt;     "Toque no objeto para ver o resultado.");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; touch_start(integer total_number)&lt;br /&gt; {&lt;br /&gt;   integer objetos = 30;&lt;br /&gt;   integer atual;&lt;br /&gt;&lt;br /&gt;   for (atual = 1; atual &lt;= objetos; ++atual)     {       float incremento = 10.0 / objetos;       vector pos = llGetPos() + &lt;0,&gt;;&lt;br /&gt;&lt;br /&gt;     float incAngular = atual * TWO_PI / objetos;&lt;br /&gt;     rotation rot = llEuler2Rot(&lt;0,&gt;);&lt;br /&gt;&lt;br /&gt;     llRezObject("Object", pos, ZERO_VECTOR, rot, 0);&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Como sempre, a matemática nos ajudando. Daí para uma auto-montável-árvore de natal basta um pulo. E o objeto inicial era apenas uma tábua de madeira:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YK-I1cKIr2o/R2mp4ROLjSI/AAAAAAAAAE8/w8caQ_gL8sY/s1600-h/rez03.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YK-I1cKIr2o/R2mp4ROLjSI/AAAAAAAAAE8/w8caQ_gL8sY/s200/rez03.JPG" alt="" id="BLOGGER_PHOTO_ID_5145830833408150818" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-3375164883454796689?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/3375164883454796689/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=3375164883454796689&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3375164883454796689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3375164883454796689'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/12/prims-rezzing.html' title='Prims Rezzing em LSL'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_YK-I1cKIr2o/R2mmAhOLjRI/AAAAAAAAAE0/keplaVJ1WhU/s72-c/rez04.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-5882433633130183500</id><published>2007-12-18T18:34:00.002-02:00</published><updated>2008-03-29T02:37:38.403-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recursividade'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>FileSystemWatcher Síncrono</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Exemplo prático de recursividade utilizando a classe FileSystemWatcher de maneira síncrona.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;O contexto é, superficialmente, uma aplicação que deve identificar o recebimento de um arquivo específico dentro de um determinado prazo. Sem muita conversa, segue o código:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.Text;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;using &lt;/span&gt;System.IO;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;namespace &lt;/span&gt;FSWRecursivo&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;class &lt;/span&gt;FSWRecursivo&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: rgb(51, 51, 255);"&gt;static &lt;/span&gt;FileSystemWatcher fsw =&lt;br /&gt;        new FileSystemWatcher(@"C:\Teste", "*.*");&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(51, 51, 255);"&gt;public static void &lt;/span&gt;Main()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;nomeArquivo =&lt;br /&gt;            "Novo(a) Documento de texto (2).txt";&lt;br /&gt;&lt;br /&gt;        esperar(nomeArquivo, 30000);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(51, 51, 255);"&gt;static void &lt;/span&gt;esperar(&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;arqEsperado, &lt;span style="color: rgb(51, 51, 255);"&gt;int &lt;/span&gt;mstimeout)&lt;br /&gt;    {&lt;br /&gt;        TimeSpan t = DateTime.Now.TimeOfDay;&lt;br /&gt;&lt;br /&gt;        WaitForChangedResult cr =&lt;br /&gt;            fsw.WaitForChanged(&lt;br /&gt;              WatcherChangeTypes.Created, mstimeout);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: rgb(51, 51, 255);"&gt;if &lt;/span&gt;(!cr.TimedOut)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(51, 51, 255);"&gt;if &lt;/span&gt;(cr.Name == arqEsperado)&lt;br /&gt;            {&lt;br /&gt;                resposta(arqEsperado);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: rgb(51, 51, 255);"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                mstimeout =&lt;br /&gt;                    (int)DateTime.Now.TimeOfDay.Subtract(&lt;br /&gt;                      t).TotalMilliseconds;&lt;br /&gt;&lt;br /&gt;                esperar(arqEsperado, mstimeout);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: rgb(51, 51, 255);"&gt;else&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            semResposta(arqEsperado);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(51, 51, 255);"&gt;static void &lt;/span&gt;resposta(&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;arqEsperado)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine&lt;br /&gt;            ("Arquivo esperado recebido.");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(51, 51, 255);"&gt;static void &lt;/span&gt;semResposta(&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;arqEsperado)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine&lt;br /&gt;            ("Arquivo esperado não recebido no prazo.");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Resumindo, a lógica é a seguinte: ao receber um arquivo, a aplicação verifica se é o esperado. Caso não seja, contabiliza o tempo restante e continua esperando, até que o arquivo esperado seja recebido ou o tempo-limite seja excedido.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-5882433633130183500?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/5882433633130183500/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=5882433633130183500&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5882433633130183500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5882433633130183500'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/12/filesystemwatcher-sncrono.html' title='FileSystemWatcher Síncrono'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-4894567943452856573</id><published>2007-11-30T10:50:00.001-02:00</published><updated>2008-05-05T21:47:34.938-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Práticas'/><category scheme='http://www.blogger.com/atom/ns#' term='pérolas'/><title type='text'>Design Document (Tira)</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Essa merece...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Achei num fórum tuga de desenvolvimento de jogos.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YK-I1cKIr2o/R1AJIzxKwSI/AAAAAAAAAEM/Gy-H1ElH3P8/s1600-R/work.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YK-I1cKIr2o/R1AJIzxKwSI/AAAAAAAAAEM/w78qM31WvaU/s400/work.JPG" alt="" id="BLOGGER_PHOTO_ID_5138617221769773346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Dispensa qualquer comentário.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-4894567943452856573?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/4894567943452856573/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=4894567943452856573&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4894567943452856573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4894567943452856573'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/11/design-document.html' title='Design Document (Tira)'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_YK-I1cKIr2o/R1AJIzxKwSI/AAAAAAAAAEM/w78qM31WvaU/s72-c/work.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-829824545409857549</id><published>2007-11-30T09:36:00.001-02:00</published><updated>2008-03-29T02:49:45.514-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='second life'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='IA'/><title type='text'>Personagens Autônomos</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Há alguns dias, enquanto programava os peixes da ilha &lt;span style="color: rgb(51, 102, 255);"&gt;&lt;a href="http://www.mainlandbrasil.com.br/"&gt;MLBR&lt;/a&gt;&lt;/span&gt; Portal e conversava com o Emiliano (diretor de marketing da &lt;span style="color: rgb(51, 102, 255);"&gt;&lt;a href="http://www.kaizengames.com.br/"&gt;Kaizen Games&lt;/a&gt;&lt;/span&gt;), ele me passou um link muito interessante. Trata-se de soluções para movimentação de personagens autônomos, dotados de um certo grau de "inteligência", como nos jogos.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;a href="http://www.red3d.com/cwr/steer/"&gt;Steering Behaviors For Autonomous Characters&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Isso no Second Life possibilita novas maneiras de popular ilhas com objetos mais atraentes. Permite, por exemplo,  simular o comportamente de animais em grupo, um cardume de peixes em movimento, etc.&lt;br /&gt;&lt;br /&gt;Link interessante, merece ser visto por programadores.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-829824545409857549?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/829824545409857549/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=829824545409857549&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/829824545409857549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/829824545409857549'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/11/personagens-autnomos.html' title='Personagens Autônomos'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-2034259486317520790</id><published>2007-11-13T13:30:00.002-02:00</published><updated>2008-03-29T02:25:54.558-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='second life'/><category scheme='http://www.blogger.com/atom/ns#' term='Linden Scripting Language'/><title type='text'>LSL Brasil</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Hoje, 13/11/07, criei o grupo de discussão &lt;/span&gt;&lt;a style="font-family: arial;" href="http://br.groups.yahoo.com/group/lslbr"&gt;LSL Brasil&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, com o seguinte propósito:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt;"LSL, ou Linden Scripting Language, é a linguagem de programação do metaverso Second Life. Esta comunidade pretende divulgar, discutir, informar, relatar problemas conhecidos e suas soluções.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:arial;" &gt; O objetivo é suprir a falta de documentação técnica de qualidade, principalmente em língua portuguesa, contribuindo assim para o aperfeiçoamento das produções brasileiras no escopo da interatividade."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;e convido a todos os programadores, profissionais ou hobbistas, que têm prazer em compartilhar conhecimento, a participar.&lt;/span&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://br.groups.yahoo.com/group/lslbr/join"&gt;&lt;br /&gt;&lt;img src="http://us.i1.yimg.com/us.yimg.com/i/yg/img/i/br/ui/join.gif" border="0" /&gt;&lt;br /&gt;Clique para entrar no grupo LSL Brasil&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-2034259486317520790?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/2034259486317520790/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=2034259486317520790&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2034259486317520790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2034259486317520790'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/11/lsl-brasil.html' title='LSL Brasil'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-8789068827529799691</id><published>2007-11-06T10:03:00.002-02:00</published><updated>2008-03-29T02:34:08.165-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Fontes ROTT e Duke3D</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Já faz um bom tempo desde 20 de dezembro de 2002, mas vale lembrar que a 3D Realms disponibilizou o código-fonte do game de tiro em primeira pessoa Rise Of The Triad, sob a GNU General Public License.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YK-I1cKIr2o/RzBdVFO-VoI/AAAAAAAAAD8/OlLw0t2tLC8/s1600-h/rott.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YK-I1cKIr2o/RzBdVFO-VoI/AAAAAAAAAD8/OlLw0t2tLC8/s320/rott.JPG" alt="" id="BLOGGER_PHOTO_ID_5129702592338613890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Isto foi de certa forma uma homenagem a William Scarboro, um dos primeiros programadores, que morreu em dezembro do mesmo ano, como comentado por Joe Siegler neste trecho publicado no readme.txt:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;"&lt;span style="font-style: italic;"&gt;Furthermore, the release of the Rise of the Triad source&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-style: italic;"&gt; code is d&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-style: italic;"&gt;edicated to our late friend and cohort, William Scarboro.  William was one of the original Rise of the Triad programmers, and he unfortunately died of an asthma attack on August 9, 2002.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;&lt;a href="ftp://ftp.3drealms.com/source/rottsource.zip"&gt;Rise of the Triad Source Code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;O demo para quem quiser conhecer o game: &lt;a href="ftp://ftp.3drealms.com/share/1rott13.zip"&gt;Rise of the Triad Shareware Episode&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;E de quebra, em abril de 2003 a 3D Realms também divulgou o código-fonte do Duke Nukem 3D.&lt;br /&gt;&lt;br /&gt;&lt;a href="ftp://ftp.3drealms.com/source/duke3dsource.zip"&gt;Duke Nukem 3D Atomic Edition Source Code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;E o demo: &lt;a href="ftp://ftp.3drealms.com/share/3dduke13.zip"&gt;Duke Nukem 3D Shareware Episode&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dá para se divertir por horas.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-8789068827529799691?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/8789068827529799691/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=8789068827529799691&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/8789068827529799691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/8789068827529799691'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/11/fontes-rott-e-duke3d.html' title='Fontes ROTT e Duke3D'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_YK-I1cKIr2o/RzBdVFO-VoI/AAAAAAAAAD8/OlLw0t2tLC8/s72-c/rott.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-3614353659057853821</id><published>2007-10-18T10:29:00.000-02:00</published><updated>2007-12-14T10:28:38.359-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='metaversos'/><category scheme='http://www.blogger.com/atom/ns#' term='second life'/><title type='text'>Bolha Second Life</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Muito se fala, muitos especulam, e por fim milhares fazem assombrosos comentários sobre um possível "recesso" no famoso metaverso Second Life. Há afirmações de que o mundo virtual da Linden Lab está estagnado, sendo abandonado e tendo seu lugar tomado por outros universos digitais. Eis aqui minha análise e opinião pessoal.&lt;br /&gt;&lt;br /&gt;Primeiramente, SL não é um jogo e sim um metaverso. Em segundo lugar, o que fazer nele, seja você uma pessoa, uma empresa ou um animal de estimação super-dotado (e por quê não, afinal o cachorro do Jim Carrey no filme &lt;span style="font-style: italic;"&gt;Todo Poderoso&lt;/span&gt; lia no banheiro)?&lt;br /&gt;&lt;br /&gt;Pessoas geralmente estão à procura de diversão. Conhecer outros avatares, visitar lugares, participar de eventos ou até fazer sexo virtual - sou particularmente conservador, prefiro à moda antiga.&lt;br /&gt;&lt;br /&gt;Empresas buscam lucros. Querem vender, sejam produtos ou serviços.&lt;br /&gt;&lt;br /&gt;Há uma incompatibilidade de interesses nesta história. É claro que o Second Life possibilita grandes oportunidades de negócios, mas são necessárias estratégias consistentes e adequadas às suas peculiaridades. Investir para apenas "estar" no SL como estão fazendo muitas empresas, é fracasso certo.&lt;br /&gt;&lt;br /&gt;Obviamente existem interesses comuns à ambas as partes. Para quem busca informação e bom conteúdo, há muitos lugares para conhecer. Por exemplo a Cidade do Conhecimento, com parceria da Kaizen Games. SEBRAE, Vestibular Brasil, Bradesco, Porto Portugal, e por aí vai. Opções não faltam, basta procurar. Aproveite e dê uma passada também pelo Morro do Canta Bala, a primeira favela do Second Life, ou conheça a réplica do grande navio Titanic.&lt;br /&gt;&lt;br /&gt;Para justificar melhor: uma matéria foi publicada no Los Angeles Times, comentada no jornal Estadão por Lucas Pretti em 17/07/2007 e então transcrita por Paulo Ferraz em seu livro &lt;i&gt;Second Life para Empreendedores&lt;/i&gt;, de onde extraí o trecho que segue (ufa!):&lt;br /&gt;&lt;br /&gt;"O SL deveria ser o paraíso do consumismo. Mas com o tempo percebeu-se que é tão difícil vender produtos lá quanto em qualquer outro lugar."&lt;br /&gt;&lt;br /&gt;É lógico. Até a Pantera Cor-de-rosa já deveria ter desconfiado disso, afinal, a tão falada moeda virtual Linden Dollar é obtida de Reais, Dólares, Euros, Yens ou de algumas outras moedas convencionais. Portanto, ninguém vai sair pelo Second Life torrando centenas de milhares de lindens se isto custa alguns milhares de reais.&lt;br /&gt;&lt;br /&gt;O comércio virtual existe e é promissor, mas como no tradicional, nada cai do céu. Uma boa estratégia é fundamental para qualquer que seja o modelo de negócio adotado. Por enquanto, minha sugestão é que as empresas tentem aproveitar o SL não apenas para obter lucros diretos, mas também como uma forma de contornar limitações do mundo real e, quem sabe, até reduzir custos. Enquanto isso ganham tempo e fôlego para definir exatamente como pretendem atuar no mundo virtual.&lt;br /&gt;&lt;br /&gt;Para finalizar, uma coisa é certa. Os mundos virtuais em 3D são a tendência para a web que conhecemos. Neles, além de textos e imagens, há mais imersão e interação. Tudo é presencial e as possibilidades são infinitas.&lt;br /&gt;&lt;br /&gt;E para não perder o costume: se algo não vai bem no SL, já que este não age por si só, nós é que precisamos pensar melhor sobre o que e como fazer por lá. Se um conteúdo não é bom no SL, ele também não será bom em metaverso algum. A web tradicional também passou por esse período de cabeçadas na parede no final da década de 90 e então amadureceu para o que vemos hoje. O Second Life também passará por este período de amadurecimento.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-3614353659057853821?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/3614353659057853821/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=3614353659057853821&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3614353659057853821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3614353659057853821'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/10/bolha-second-life.html' title='Bolha Second Life'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-7608735640328823969</id><published>2007-10-05T09:09:00.003-03:00</published><updated>2008-03-29T02:54:26.915-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Literatura'/><category scheme='http://www.blogger.com/atom/ns#' term='Lógica'/><category scheme='http://www.blogger.com/atom/ns#' term='Exatas'/><title type='text'>How To Solve It, G. Polya</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YK-I1cKIr2o/RwwFZq3UP-I/AAAAAAAAADs/D_IY1qTZWiA/s1600-h/GeorgePolya1973.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_YK-I1cKIr2o/RwwFZq3UP-I/AAAAAAAAADs/D_IY1qTZWiA/s320/GeorgePolya1973.jpg" alt="" id="BLOGGER_PHOTO_ID_5119472814974582754" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Para variar um pouco, segue uma excelente indicação de leitura.&lt;br /&gt;&lt;br /&gt;Na minha opinição, um dos melhores livros já escritos. Trata-se do "A arte de resolver problemas" de &lt;a href="http://en.wikipedia.org/wiki/George_P%C3%B3lya"&gt;George Polya&lt;/a&gt;, publicado em 1945 sob o título "&lt;a href="http://en.wikipedia.org/wiki/How_to_Solve_It"&gt;How to solve it&lt;/a&gt;". E é impressionante como ainda se manterá atual por séculos.&lt;br /&gt;&lt;br /&gt;Nele, Polya descreve formas de organizar o raciocínio para facilitar e otimizar a solução de problemas. Trás por exemplo, simulações de diálogos professor-aluno que induzem o leitor a encontrar caminhos para solucionar um problema qualquer por si só.&lt;br /&gt;&lt;br /&gt;Ensina como analisar o problema e encará-lo como uma variação de outro caso já conhecido ou análogo. Também lista passos para identificar e relacionar todas as variáveis e informações fornecidas no enunciado, e então traçar um plano para atingir o resultado esperado.&lt;br /&gt;&lt;br /&gt;Simplesmente excelente. Para adoradores das exatas é imperdível. São 40 pratas muito bem investidas.&lt;br /&gt;&lt;br /&gt;Esse vale a pena conferir.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-7608735640328823969?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/7608735640328823969/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=7608735640328823969&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7608735640328823969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7608735640328823969'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/10/how-to-solte-it.html' title='How To Solve It, G. Polya'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_YK-I1cKIr2o/RwwFZq3UP-I/AAAAAAAAADs/D_IY1qTZWiA/s72-c/GeorgePolya1973.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-2810764241988501867</id><published>2007-06-22T18:40:00.001-03:00</published><updated>2008-03-29T02:41:01.955-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Figuras sobrepostas por Texto</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Um  rápido exemplo de como gerar figuras sobrepostas por caracteres em C#.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Pode ser usado para fazer as famosas confirmações de que o usuário é uma pessoa e não um web-robô cadastrando-se automaticamente em algum site.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Drawing.Text;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;protected void&lt;/span&gt; Page_Load(&lt;span style="color: rgb(51, 51, 255);"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(51, 102, 102);"&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;Bitmap &lt;/span&gt;imgBmp = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;Bitmap&lt;/span&gt;(600, 100);&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;Graphics &lt;/span&gt;superfDesen = &lt;span style="color: rgb(51, 102, 102);"&gt;Graphics&lt;/span&gt;.FromImage(imgBmp);&lt;br /&gt;&lt;br /&gt;superfDesen.Clear(Color.DarkBlue);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;Font &lt;/span&gt;fonte = new &lt;span style="color: rgb(51, 102, 102);"&gt;Font&lt;/span&gt;("Verdana", 20);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;txt = &lt;span style="color: rgb(153, 0, 0);"&gt;"Título com AntiAlias"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;superfDesen.TextRenderingHint =&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;TextRenderingHint&lt;/span&gt;.AntiAlias;&lt;br /&gt;&lt;br /&gt;superfDesen.DrawString&lt;br /&gt;(txt, fonte, &lt;span style="color: rgb(51, 102, 102);"&gt;Brushes&lt;/span&gt;.White, 10, 10);&lt;br /&gt;&lt;br /&gt;txt = &lt;span style="color: rgb(153, 0, 0);"&gt;"Breve descrição com System.Default"&lt;/span&gt;;&lt;br /&gt;superfDesen.TextRenderingHint =&lt;br /&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;TextRenderingHint&lt;/span&gt;.SystemDefault;&lt;br /&gt;&lt;br /&gt;superfDesen.DrawString&lt;br /&gt;(txt, new &lt;span style="color: rgb(51, 102, 102);"&gt;Font&lt;/span&gt;("Times", 14), &lt;span style="color: rgb(51, 102, 102);"&gt;Brushes&lt;/span&gt;.Cyan, 20, 60);&lt;br /&gt;&lt;br /&gt;imgBmp.Save(&lt;span style="color: rgb(51, 102, 102);"&gt;Response&lt;/span&gt;.OutputStream, &lt;span style="color: rgb(51, 102, 102);"&gt;ImageFormat&lt;/span&gt;.Jpeg);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Resumindo, é isso.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-2810764241988501867?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/2810764241988501867/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=2810764241988501867&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2810764241988501867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2810764241988501867'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/06/figuras-sobrepostas-por-texto.html' title='Figuras sobrepostas por Texto'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-5170393820177263097</id><published>2007-05-17T20:15:00.000-03:00</published><updated>2008-03-29T03:05:53.462-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recursividade'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Torres Hanoi'/><title type='text'>Recursividade com Torres de Hanoi</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;A recursividade é um artifício capaz de simplificar a solução de muitos problemas através de funções definidas em termos de um caso mais simples de si mesmas.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Por exemplo, o fatorial de um número inteiro positivo n é definido como o produto de todos os inteiros entre n e 1, conforme o código a seguir:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; fatorial (&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; n)&lt;br /&gt;{&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;  int&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-size:85%;"&gt; p = 1;&lt;br /&gt;&lt;/span&gt;  for (&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;int&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; x = n; x &gt; 0; x--)&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-size:85%;"&gt;    p *= x;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Note que a função fatorial de n pode ser definida em termos de si me&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;sma, pois é igual a n * (n - 1)! para todo n &gt; 0. Como 0! é definido como 1, uma função fatorial poderá chamar a si mesma juntamente com um valor n - 1 até que n = 0. Esta será uma solução recursiva para calcular n!.&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;i&lt;span style="font-size:100%;"&gt;nt&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:130%;"  &gt; fatorial (&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:130%;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:130%;"  &gt; n)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:130%;color:blue;"   &gt;    return&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; n == 0 ? 1 : n * fatorial (n – 1);&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:130%;"  &gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;b style="font-family: arial;"&gt;As Torres de Hanoi&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;O problema das Torres de Hanoi consiste de três estacas onde podem ser colocados n discos de diferentes tamanhos, empilhados, de modo que um disco menor sempre esteja sobre um disco maior. O objetivo é mover todos os discos, um por vez, para uma estaca destino usando outra estaca como auxiliar, sem que um disco maior seja colocado por cima de outro menor.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:85%;"&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YK-I1cKIr2o/Rkz7ediYnUI/AAAAAAAAADc/LN74iVBqL50/s1600-h/imagem.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YK-I1cKIr2o/Rkz7ediYnUI/AAAAAAAAADc/LN74iVBqL50/s200/imagem.JPG" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Supondo que para n discos podemos obter uma solução para n - 1 discos, temos uma solução recursiva, pois subtraindo 1 continuamente até que n = 1, teremos apenas um disco na torre, bastando movê-lo para outra. Podemos, então, definir uma estratégia para mover os discos de uma torre A para outra torre C, usando B como auxiliar.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1. Se n = 1, desloque o disco de A para C e pare&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2. Desloque os n - 1 primeiros discos de A para B usando C como auxiliar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;3. Desloque o último disco de A para C&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;4. Mova os n - 1 discos de B para C, usando A como auxiliar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Observe que nas chamadas recursivas, os discos serão movidos de A para B usado C (passo 2) ou de B para C usando A (passo 4). Devemos, então, incluir mais três parâmetros na função, além do número de discos n. Os parâmetros correspondem às estacas de onde tiramos os discos, para qual ele será movido e a estaca auxiliar, respectivamente. Observe que os parâmetros de uma função sempre devem ter correspondência exata em relação a tipo, número e ordem.&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;static &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;void&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; torres_hanoi(&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; n, &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;char&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; Origem, &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;char&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; Destino, &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;char&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; Auxiliar)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;  if&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; (n == 1)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:teal;"   &gt;    Console&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;.WriteLine(&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:maroon;"   &gt;"Mover o disco 1 da estaca "&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; + Origem +&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:maroon;"   &gt;    " para a estaca "&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; + Destino);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:blue;"   &gt;    return&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:green;"   &gt;  //move os n-1 primeiros discos de A para B usando C&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;torres_hanoi(n - 1, Origem, Auxiliar, Destino);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:green;"   &gt;  //move o último disco de A para C&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:teal;"   &gt;  Console&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;.WriteLine(&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:maroon;"   &gt;"Mover o disco "&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; + (n - 1) +&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:maroon;"   &gt;  " da estaca "&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; + Origem + &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:maroon;"   &gt;" para "&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; + Destino);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;color:green;"   &gt;  //move n - 1 discos de B para C usando A&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;  torres_hanoi(n - 1, Auxiliar, Destino, Origem);&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Finalizando, a quantidade mínima de movimentos será dada por 2 elevado ao número de discos, menos um.&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);font-family:courier new;" &gt;    &lt;span style="font-size:100%;"&gt;número de movimentos necessários = 2^n - 1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-5170393820177263097?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/5170393820177263097/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=5170393820177263097&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5170393820177263097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5170393820177263097'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/05/recursividade-com-torres-de-hanoi.html' title='Recursividade com Torres de Hanoi'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_YK-I1cKIr2o/Rkz7ediYnUI/AAAAAAAAADc/LN74iVBqL50/s72-c/imagem.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-3177205453366915299</id><published>2007-04-26T01:38:00.001-03:00</published><updated>2008-03-29T02:53:26.393-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MatLab'/><category scheme='http://www.blogger.com/atom/ns#' term='Exatas'/><category scheme='http://www.blogger.com/atom/ns#' term='Critério Routh'/><title type='text'>Estabilidade de Sistemas Lineares em Matlab</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Agora sim, diversão de verdade. Vamos comprovar a brincadeira anterior (e serve de introdução ao Matlab).&lt;br /&gt;&lt;br /&gt;O Matlab, cuja versão para estudo pode ser obtida no site da &lt;a href="http://www.mathworks.com/"&gt;MathWorks&lt;/a&gt;, permite a simulação de muitos tipos de sistemas.&lt;br /&gt;&lt;br /&gt;Ao iniciá-lo, criar um novo projeto em &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;File&lt;/span&gt;, &lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;New&lt;/span&gt;, &lt;span style="color: rgb(51, 204, 0);"&gt;Model&lt;/span&gt;. A área de trabalho e a biblioteca de componentes para simulação serão apresentados.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YK-I1cKIr2o/RjAtxdxfx7I/AAAAAAAAACs/oFRGx7Z0vko/s1600-h/NewModel.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YK-I1cKIr2o/RjAtxdxfx7I/AAAAAAAAACs/oFRGx7Z0vko/s200/NewModel.gif" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para a demonstração, serão necessários os seguintes componentes da biblioteca Simulink:&lt;br /&gt;&lt;br /&gt;- Da categoria &lt;span style="color: rgb(255, 102, 0);"&gt;Sources&lt;/span&gt;, uma entrada em degrau (&lt;span style="color: rgb(51, 204, 0);"&gt;Step&lt;/span&gt;) e um temporizador (&lt;span style="color: rgb(51, 204, 0);"&gt;Clock&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;Esta entrada em degrau será a excitação do nosso sistema, podendo representar por exemplo, uma chave liga/desliga de 0/220V, como um interruptor.&lt;br /&gt;&lt;br /&gt;O clock servirá para levar o tempo da simulação para o gráfico de resposta, no eixo x, já que o comportamento (saída) do sistema depende (é função) do tempo t.&lt;br /&gt;&lt;br /&gt;- Da &lt;span style="color: rgb(255, 102, 0);"&gt;Math&lt;/span&gt;, um somador (&lt;span style="color: rgb(51, 204, 0);"&gt;Sum&lt;/span&gt;) e um Ganho (&lt;span style="color: rgb(51, 204, 0);"&gt;Gain&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;O somador compõe o sinal de referência (entrada do sistema em degrau) com o sinal de realimentação proveniente da saída do sistema. Isto caracteriza um sistema em Malha Fechada, já que o sinal de saída retorna e influencia no comportamento do sistema.&lt;br /&gt;&lt;br /&gt;O ganho será o ajuste 'manual' do controlador, que definirá a forma da resposta em regime permanente, podendo tornar o sistema estável ou instável, dependendo do valor adotado. Este é o &lt;span style="color: rgb(255, 102, 0);"&gt;K&lt;/span&gt; determinado pelo critério de Routh.&lt;br /&gt;&lt;br /&gt;- Da &lt;span style="color: rgb(255, 102, 0);"&gt;Continous&lt;/span&gt;, um integrador (&lt;span style="color: rgb(51, 204, 0);"&gt;Integrator&lt;/span&gt;) e duas funções de transferência (&lt;span style="color: rgb(51, 204, 0);"&gt;Transfer fcn&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;O integrador é o tipo de controlador escolhido para "buscar" o valor de referência. É característico o erro nulo em regime permanente, porém com resposta lenta.&lt;br /&gt;&lt;br /&gt;A função de transferência é a relação matemática que relaciona a saída com a entrada de um sistema. Conhecendo-se a FT do sistema, para qualquer entrada é possível determinar a saída.&lt;br /&gt;&lt;br /&gt;- Da &lt;span style="color: rgb(255, 102, 0);"&gt;Signals &amp;amp; Systems&lt;/span&gt;, um multiplexador (&lt;span style="color: rgb(51, 204, 0);"&gt;Mux&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;O multiplexador irá sobrepor os sinais de entrada e saída, para que sejam visualizados no gráfico da forma de resposta do sistema.&lt;br /&gt;&lt;br /&gt;- Da &lt;span style="color: rgb(255, 102, 0);"&gt;Sinks&lt;/span&gt;, um osciloscópio (&lt;span style="color: rgb(51, 204, 0);"&gt;Scope&lt;/span&gt;) e dois blocos (&lt;span style="color: rgb(51, 204, 0);"&gt;To Workspace&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;O osciloscópio irá plotar a saída correspondente à entrada em função do tempo, descrevendo graficamente o comportamento do sistema.&lt;br /&gt;&lt;br /&gt;Os blocos To Workspace tornam os dados da simulação disponíveis no workspace principal do Matlab.&lt;br /&gt;&lt;br /&gt;Em seguida, ligar os blocos conforme a figura, dando especial atenção aos polinômios da função de transferência. Notar a realimentação unitária do sistema H(s) = 1.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YK-I1cKIr2o/RjAuNdxfx8I/AAAAAAAAAC0/RZr-6ERD1JU/s1600-h/SistemaCompleto.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YK-I1cKIr2o/RjAuNdxfx8I/AAAAAAAAAC0/RZr-6ERD1JU/s200/SistemaCompleto.gif" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Editar os parâmetros onde necessário, conforme valores dados no problema anterior. Por exemplo, para a função da planta do sistema G2(s) = 1/((s+2)*(s^2 + 2s + 2)), abrir a caixa 'Block parameters' do bloco 'Transfer fcn' e informar apenas os coeficientes dos polinômios do numerador e do denominador.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YK-I1cKIr2o/RjAuidxfx9I/AAAAAAAAAC8/z72oXccWUSo/s1600-h/BlockParameters.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YK-I1cKIr2o/RjAuidxfx9I/AAAAAAAAAC8/z72oXccWUSo/s200/BlockParameters.gif" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;No menu Simulation, Parameters, ajustar o Stop time para 30 segundos. Daí já é possível simular o sistema de controle. Basta clicar em Start Simulation e, com um clique duplo sobre o scope, abrir o gráfico da resposta. Clicar em Autoscale (um binóculo).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YK-I1cKIr2o/RjAu39xfx-I/AAAAAAAAADE/VkfIZ8GcQrw/s1600-h/SaidaGanhoZero.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YK-I1cKIr2o/RjAu39xfx-I/AAAAAAAAADE/VkfIZ8GcQrw/s200/SaidaGanhoZero.gif" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Note que, para o ganho integral zero, a resposta para uma entrada em degrau de por exemplo, 20V, é constante e zero. Claro, afinal a função  do controlador G1(s) = k/s, em que k = 0, multiplica a função G2(s) da planta (por exemplo uma estufa).&lt;br /&gt;&lt;br /&gt;Aumentando-se o ganho integral k e repetindo o procedimento de simulação, é visível que este sistema em particular é superamortecido para ganhos inferiores a 1 (um) e subamortecido para ganhos k maior que 1, onde há ultrapassagem (overshot) da referência.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YK-I1cKIr2o/RjAvM9xfx_I/AAAAAAAAADM/bdWu-FOJ-Gs/s1600-h/SaidaGanhoEstavel.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YK-I1cKIr2o/RjAvM9xfx_I/AAAAAAAAADM/bdWu-FOJ-Gs/s200/SaidaGanhoEstavel.gif" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;É interessante notar que, em regime permanente (em torno de 30 segundos para este caso), a grandeza controlada tente a atingir e permanecer muito próxima à referência. Lembrando que regime permanente é um tempo relativo e particular para cada sistema, que corresponde ao tempo para que a saída estabilize ou passe a apresentar algum padrão de comportamento. Regime permanente é considerado um tempo infinito.&lt;br /&gt;&lt;br /&gt;Aumentando-se o ganho k até ultrapassar o valor 5, será visível o comportamento oscilatório instável do sistema, comprovando a faixa k entre zero e cinco obtida pelo método de Routh. Nota-se pelo gráfico, que a grandeza controlada fica cada vez mais distante da referência desejada conforme passa o tempo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YK-I1cKIr2o/RjAvgtxfyAI/AAAAAAAAADU/P3LnHTOEYYc/s1600-h/SaidaGanhoInstavel.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YK-I1cKIr2o/RjAvgtxfyAI/AAAAAAAAADU/P3LnHTOEYYc/s200/SaidaGanhoInstavel.GIF" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;O limiar para sistema sub, super, ou criticamente amortecido (neste caso particular igual a 1) pode também ser determinado matematicamente, mas em outro capítulo da novela.&lt;br /&gt;&lt;br /&gt;Isso sim é diversão!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-3177205453366915299?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/3177205453366915299/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=3177205453366915299&amp;isPopup=true' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3177205453366915299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3177205453366915299'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/estabilidade-de-sistemas-lineares-em.html' title='Estabilidade de Sistemas Lineares em Matlab'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YK-I1cKIr2o/RjAtxdxfx7I/AAAAAAAAACs/oFRGx7Z0vko/s72-c/NewModel.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-3295199398077355733</id><published>2007-04-25T18:56:00.001-03:00</published><updated>2008-02-27T10:35:23.109-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Uru'/><title type='text'>A metrópole: URU/SP</title><content type='html'>Não poderia faltar... a grande cidade de Uru-SP.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YK-I1cKIr2o/Ri_QUtxfx6I/AAAAAAAAACk/3Hf4dlBXI7o/s1600-h/Uru_VistaAerea02.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; cursor: pointer;" src="http://3.bp.blogspot.com/_YK-I1cKIr2o/Ri_QUtxfx6I/AAAAAAAAACk/3Hf4dlBXI7o/s200/Uru_VistaAerea02.JPG" alt="" id="BLOGGER_PHOTO_ID_5057489960863516578" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YK-I1cKIr2o/Ri_QE9xfx5I/AAAAAAAAACc/5EL8MVaxQII/s1600-h/Uru_VistaAerea01.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; cursor: pointer;" src="http://4.bp.blogspot.com/_YK-I1cKIr2o/Ri_QE9xfx5I/AAAAAAAAACc/5EL8MVaxQII/s200/Uru_VistaAerea01.JPG" alt="" id="BLOGGER_PHOTO_ID_5057489690280576914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Tem até na &lt;a href="http://pt.wikipedia.org/wiki/Uru_%28S%C3%A3o_Paulo%29"&gt;wikipedia&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-3295199398077355733?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/3295199398077355733/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=3295199398077355733&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3295199398077355733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/3295199398077355733'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/metrpole-urusp.html' title='A metrópole: URU/SP'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YK-I1cKIr2o/Ri_QUtxfx6I/AAAAAAAAACk/3Hf4dlBXI7o/s72-c/Uru_VistaAerea02.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-4575119095397966298</id><published>2007-04-24T23:13:00.003-03:00</published><updated>2008-03-29T02:54:00.475-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MatLab'/><category scheme='http://www.blogger.com/atom/ns#' term='Exatas'/><category scheme='http://www.blogger.com/atom/ns#' term='Critério Routh'/><title type='text'>Critério de Estabilidade de Routh</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Um pouco de diversão...&lt;br /&gt;&lt;br /&gt;Sendo a função de transferência FT de um sistema qualquer&lt;br /&gt;&lt;br /&gt;--- entrada X(s) ---| função de transferência F(s) |--- saída Y(s) ---&lt;br /&gt;&lt;br /&gt;dada por&lt;br /&gt;&lt;br /&gt;F(s) = Y(s) / X(s)&lt;br /&gt;&lt;br /&gt;onde (s) indica que a função foi afetada pela transformação de Laplace, ou seja, que foi transportada do domínio do tempo (t) para o domínio da freqüência (s), a equação obtida fazendo-se&lt;br /&gt;&lt;br /&gt;X(s) = 0&lt;br /&gt;&lt;br /&gt;descreve o comportamento do sistema desconsiderando-se qualquer condição inicial, e é chamada de Equação Característica do Sistema. As raízes desta equação definem a forma de resposta do sistema descrito por F(s) e são chamadas de Pólos de F(s).&lt;br /&gt;&lt;br /&gt;Decompondo em frações parciais um sistema cujas raízes de Q(s) sejam os pólos p1, p2, ..., pn, este mesmo polinômio Q(s) pode ser escrito como&lt;br /&gt;&lt;br /&gt;Q(s) = (s - p1) * (s - p2) * ... * (s - pn)&lt;br /&gt;&lt;br /&gt;e, daí, um sistema qualquer&lt;br /&gt;&lt;br /&gt;F(s) = Y(s) / X(s) = P(s) / Q(s)&lt;br /&gt;&lt;br /&gt;pode ser escrito como&lt;br /&gt;&lt;br /&gt;Y(s) = ( P(s) / ( (s - p1) * (s - p2) * ... * (s - pn) ) ) * X(s)&lt;br /&gt;&lt;br /&gt;Decompondo-o, fica:&lt;br /&gt;&lt;br /&gt;Y(s) = A1/(s - p1) + A2/(s - p2) + ... + An/(s - pn) + B/s&lt;br /&gt;&lt;br /&gt;em que B/s corresponde à componente de resposta em regime permanente para uma entrada em degrau unitário&lt;br /&gt;&lt;br /&gt;X(s) = 1/s.&lt;br /&gt;&lt;br /&gt;Retornando esta equação para o domínio do tempo, fica:&lt;br /&gt;&lt;br /&gt;y(t) = A1 * exp(p1 * t) + A2 * exp(p2 * t) + ... + An * exp(pn * t) + B&lt;br /&gt;&lt;br /&gt;em que Ai * exp(pi * t) somados corresponde à resposta de regime transitório em função do tempo (t).&lt;br /&gt;&lt;br /&gt;Para que esta componente transitória possa chegar à zero e, portanto, tornar o sistema ESTÁVEL, é necessário que os pólos pi sejam reais e negativos ou complexos com parte real negativa.&lt;br /&gt;&lt;br /&gt;Para determinar a estabilidade de um sistema sem calcular suas raízes, basta analisá-lo usando o método de Routh. A primeira condição a ser satisfeita é que todos os coeficientes ai do polinômio característico&lt;br /&gt;&lt;br /&gt;a0 * s^n + a1 * s^(n-1) + ... + a(n-1) * s + an&lt;br /&gt;&lt;br /&gt;tenham o mesmo sinal entre si.&lt;br /&gt;&lt;br /&gt;Montando o tabelamento de Routh para o polinômio acima:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;s^(n-0) | a0 | a2 | a4 | a6 | ...&lt;br /&gt;s^(n-1) | a1 | a3 | a5 | a7 | ...&lt;br /&gt;s^(n-2) | b1 | b2 | b3 | ...&lt;br /&gt;s^(n-3) | c1 | c2 | c3 | ...&lt;br /&gt;...&lt;br /&gt;s^1&lt;br /&gt;s^0&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;sendo as duas primeiras linhas os coeficientes do polinômio (ai) e as demais linhas coeficientes (bi e ci) determinados em função dos coeficientes do polinômio conforme relações como:&lt;br /&gt;&lt;br /&gt;b1 = (a1 * a2 - a0 * a3) / a1&lt;br /&gt;b2 = (a1 * a4 - a0 * a5) / a1&lt;br /&gt;b3 = (a1 * a6 - a0 * a7) / a1&lt;br /&gt;&lt;br /&gt;c1 = (b1 * a3 - a1 * b2) / b1&lt;br /&gt;c2 = (b1 * a5 - a1 * b3) / b1&lt;br /&gt;&lt;br /&gt;e assim por diante.&lt;br /&gt;&lt;br /&gt;O sistema será estável se não ouver qualquer inversão de sinal na primeira coluna, o que indicaria a presenta de uma raíz positiva. Caso apareça algum zero na primeira coluna, basta substituí-lo por E (muito pequeno, porém maior que zero) e continuar a análise.&lt;br /&gt;&lt;br /&gt;Considerando-se agora um sistema qualquer em malha fechada&lt;br /&gt;&lt;br /&gt;R(s) ---| G1(s) |---| G2(s) |--- C(s)&lt;br /&gt;---| H(s) |---&lt;br /&gt;&lt;br /&gt;e chamando de G(s) o produto G1(s) * G2(s), obtemos a FT na forma canônica:&lt;br /&gt;&lt;br /&gt;FT = C(s) / R(s) = G(s) / ( 1 + G(s) * H(s) )&lt;br /&gt;&lt;br /&gt;Exemplo prático: Determinar a faixa de valores de k para que o sistema seja estável.&lt;br /&gt;&lt;br /&gt;Sistema:&lt;br /&gt;entrada --- controlador integral --- planta --- saída&lt;br /&gt;--- realimentação ---&lt;br /&gt;&lt;br /&gt;Modelo matemático:&lt;br /&gt;R(s) ---| k/s |---| 1 / (s^2 + 2s + 2)(s + 2) |---| C(s)&lt;br /&gt;---| 1 |---&lt;br /&gt;&lt;br /&gt;A função de transferência é&lt;br /&gt;&lt;br /&gt;FT = C(s) / R(s) = (k/s) * ( 1 / (s^2 + 2s + 2)(s + 2)  )&lt;br /&gt;&lt;br /&gt;Mas, na forma canônica,&lt;br /&gt;&lt;br /&gt;FT = G(s) / ( 1 + G(s) * H(s) )&lt;br /&gt;&lt;br /&gt;em que G(s) =  (k/s)( 1 / (s^2 + 2s + 2)(s + 2)  )&lt;br /&gt;e H(s) = 1 (realimentação com ganho unitário)&lt;br /&gt;&lt;br /&gt;Daí vem que a função de transferência&lt;br /&gt;&lt;br /&gt;FT = [  (k/s) * ( 1 / (s^2 + 2s + 2)(s + 2) ) ] / { 1 + [  (k/s)( 1 / (s^2 + 2s + 2)(s + 2)  ) ] * 1 }&lt;br /&gt;&lt;br /&gt;e a equação característica do sistema&lt;br /&gt;&lt;br /&gt;denominador(FT) = 0. Daí&lt;br /&gt;&lt;br /&gt;1 + (k/s) * ( 1 / (s^2 + 2s + 2)(s + 2) ) = 0&lt;br /&gt;&lt;br /&gt;manipulando a equação acima, vem que:&lt;br /&gt;&lt;br /&gt;s(s^2 + 2s + 2)(s + 2) + k = 0&lt;br /&gt;s^4 + 4s^3 + 6s^2 + 4s + k = 0&lt;br /&gt;&lt;br /&gt;Aplicando o critério de Routh:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;s^4 | 1 | 6 | k&lt;br /&gt;s^3 | 4 | 4 | 0&lt;br /&gt;s^2 |b1?|b2?|&lt;br /&gt;s^1 |c1?|&lt;br /&gt;s^0 |&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;b1 = (4*6 - 1*4)/4 = 5&lt;br /&gt;b2 = (4*k - 1*0)/4 = k&lt;br /&gt;c1 = (5*4 - 4*k)/5 = (20 - 4k)/5&lt;br /&gt;&lt;br /&gt;Para que um sistema seja estável, não pode haver inversão de sinal na primeira coluna. Portanto, para este sistema em particular, c1 deve ser positivo.&lt;br /&gt;&lt;br /&gt;c1 = (20 - 4k)/5 maior q 0&lt;br /&gt;20 maior q 4k&lt;br /&gt;k menor q 5&lt;br /&gt;&lt;br /&gt;Concluindo, k deve estar entre 0 e 5.&lt;br /&gt;&lt;br /&gt;Em breve, o melhor da novela... cenas do próximo capítulo: a demonstração em MatLab.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-4575119095397966298?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/4575119095397966298/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=4575119095397966298&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4575119095397966298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4575119095397966298'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/estabilidade-de-sistemas-de-controle.html' title='Critério de Estabilidade de Routh'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-122016025060027867</id><published>2007-04-24T22:29:00.001-03:00</published><updated>2008-03-29T02:50:59.218-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Timer em C#</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Segue um exemplo simples sobre timers em C#.&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="color: rgb(51, 51, 255);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;TimerSimples&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  static void&lt;/span&gt; Main(string[] args)&lt;br /&gt;{&lt;br /&gt; System.Timers.&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Timer&lt;/span&gt; &lt;/span&gt;t = &lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt;&lt;br /&gt;   System.Timers.&lt;span style="color: rgb(51, 153, 153);"&gt;Timer&lt;/span&gt;(3000);&lt;br /&gt;&lt;br /&gt; t.Elapsed += &lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt;&lt;br /&gt;   System.Timers.&lt;span style="color: rgb(51, 153, 153);"&gt;ElapsedEventHandler&lt;/span&gt;&lt;br /&gt;   (&lt;span style="color: rgb(204, 0, 0);"&gt;myMétodoPeriódico&lt;/span&gt;);&lt;span style="color: rgb(0, 153, 0);"&gt;//usar TAB 2x&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; t.Enabled = true;&lt;br /&gt; t.Start();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;  Console&lt;/span&gt;.ReadLine();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  static void&lt;/span&gt; &lt;span style="color: rgb(204, 0, 0);"&gt;myMétodoPeriódico&lt;/span&gt;&lt;br /&gt;(object sender, System.Timers.&lt;span style="color: rgb(51, 153, 153);"&gt;ElapsedEventArgs &lt;/span&gt;e)&lt;br /&gt;{&lt;br /&gt; ((System.Timers.&lt;span style="color: rgb(51, 153, 153);"&gt;Timer&lt;/span&gt;)sender).Stop();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt; // faz alguma coisa...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);"&gt; Console&lt;/span&gt;.WriteLine&lt;br /&gt;   (&lt;span style="color: rgb(204, 0, 0);"&gt;"TimerElapsed @ "&lt;/span&gt; + e.SignalTime.TimeOfDay);&lt;br /&gt;&lt;br /&gt; ((System.Timers.&lt;span style="color: rgb(51, 153, 153);"&gt;Timer&lt;/span&gt;)sender).Start();&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;Simples. Cerveja pros músicos!!&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-122016025060027867?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/122016025060027867/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=122016025060027867&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/122016025060027867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/122016025060027867'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/timer-em-c.html' title='Timer em C#'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-1809166652337976864</id><published>2007-04-14T23:37:00.001-03:00</published><updated>2008-03-29T03:09:38.320-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cultura'/><category scheme='http://www.blogger.com/atom/ns#' term='Relações Humanas'/><title type='text'>Sexta-feira 13</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Acabei de descobrir que a sexta-feira 13 também é conhecida como &lt;/span&gt;&lt;i style="font-family: arial;"&gt;Paraskevidekatriaphobia&lt;/i&gt;&lt;span style="font-family:arial;"&gt;. Melhor do que isso, só mesmo saber que as baleias evoluíram dos cachorros.&lt;br /&gt;&lt;br /&gt;Muito, muito interessante.&lt;br /&gt;&lt;br /&gt;E ainda encontrei a origem do termo: The word "paraskevidekatriaphobia" was devised by Dr. Donald Dossey who told his patients that "when you learn to pronounce it, you're cured!"&lt;br /&gt;&lt;br /&gt;Em caso de dúvida, consultar o &lt;a href="http://www.medterms.com/"&gt;dicionário médico&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-1809166652337976864?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/1809166652337976864/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=1809166652337976864&amp;isPopup=true' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1809166652337976864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1809166652337976864'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/sexta-feira-13.html' title='Sexta-feira 13'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-7765322067570971593</id><published>2007-04-14T13:28:00.002-03:00</published><updated>2008-03-29T02:29:43.464-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Literatura'/><category scheme='http://www.blogger.com/atom/ns#' term='Latim'/><title type='text'>Trabalho sobre Latim básico</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Fluindo a inspiração deste dia, segue outro link interessante. Um excelente trabalho sobre &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.latim-basico.pro.br/"&gt;Latim Básico&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt; feito pelo Prof. Dr. Miguel Barbosa do Rosário.&lt;br /&gt;&lt;br /&gt;Outros links interessantes: &lt;a href="http://www.direitonet.com.br/dicionario_latim/"&gt;DireitoNet&lt;/a&gt;, &lt;a href="http://www.ceismael.com.br/oratoria/oratoria027.htm"&gt;CE Ismael&lt;/a&gt;, &lt;a href="http://www.multcarpo.com.br/latim.htm"&gt;Multcarpo&lt;/a&gt;, &lt;a href="http://www.colorado.edu/communication/meta-discourses/theory.htm"&gt;Univ. Colorado: Theory for communication&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-7765322067570971593?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/7765322067570971593/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=7765322067570971593&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7765322067570971593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7765322067570971593'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/trabalho-sobre-latim-bsico.html' title='Trabalho sobre Latim básico'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-5805975147738634763</id><published>2007-04-14T12:43:00.003-03:00</published><updated>2008-03-29T02:32:33.810-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Música'/><category scheme='http://www.blogger.com/atom/ns#' term='Literatura'/><category scheme='http://www.blogger.com/atom/ns#' term='Latim'/><title type='text'>Carl Orff - Carmina Burana (Canções de Beuren)</title><content type='html'>&lt;span style=";font-family:Verdana;font-size:78%;"  &gt;Vasculhando a net, eis o que encontro:&lt;br /&gt;&lt;br /&gt;Carmina Burana - "É uma obra coral baseada em poemas profanos  escritos em latim e alemão medievais. Os temas-chave destes poemas são a  exaltação que fazem ao jogo, ao amor e ao vinho. Os &lt;i&gt;Carmina Burana (canções  de Beuren)&lt;/i&gt;, primeiro elemento de uma trilogia composta por Carl Orff,  obtiveram um dos maiores êxitos internacionais da música contemporânea, sendo  considerados uma das obras corais e instrumentais mais importantes do século XX.  Nasceram da descoberta de um rolo de pergaminho, no Convento Beneditino de &lt;i&gt; Benediktbeuren,&lt;/i&gt; num Mosteiro da Ordem de São Bento, na Baviera, mais  precisamente no sudoeste da Alemanha, em 1837. Foram extraídos dessa coleção de  poemas e canções profanas medievais, provavelmente escritos entre os séculos XII  e XIII."&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:78%;"  &gt;Carl Orff - &lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:78%;"  &gt;"&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:78%;"  &gt;Nascido em 10 de julho de 1895, em Munique,  onde veio a falecer a 29 de março de 1982, filho de antiga família de eruditos e  militares de Munique, interessou-se , ainda jovem, pelo estudo de obras  medievais. Anos mais tarde, cursa a Escola de Humanismo onde completa seu curso  de estudos humanísticos. Sua verdadeira vocação, porém, aquela que o cativou foi  a música.&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:78%;"  &gt;"&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:78%;"  &gt;Trecho de &lt;a href="http://www.filologia.org.br/ixcnlf/13/04.htm"&gt;artigo escrito por &lt;/a&gt;&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:78%;"  &gt;&lt;a href="http://www.filologia.org.br/ixcnlf/13/04.htm"&gt;&lt;i&gt;Eliana da Cunha Lopes&lt;/i&gt;&lt;/a&gt; (FGS/ PELPL-USS)&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:78%;"  &gt; e retirado do site &lt;a href="http://www.filologia.org.br/"&gt;Círculo Fluminense de Estudos Filológicos e Lingüísticos&lt;/a&gt;. O texto completo trás explicações e traduções sobre esta excelente obra&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:78%;"  &gt;.&lt;br /&gt;&lt;br /&gt;Outros links encontrados: &lt;a href="http://www.nautilus.com.br/%7Eensjo/cb/"&gt;Nautilus&lt;/a&gt;, &lt;a href="http://www.rabisco.com.br/49/carmina.htm"&gt;Rabisco&lt;/a&gt;, &lt;a href="http://www.classical.net/%7Emusic/comp.lst/works/orff-cb/carmlyr.html"&gt;Classical Net&lt;/a&gt;, &lt;a href="http://www.spectrumgothic.com.br/musica/carmina.htm"&gt;Spectrum Gothic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-5805975147738634763?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/5805975147738634763/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=5805975147738634763&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5805975147738634763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/5805975147738634763'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/carl-orff-carmina-burana-canes-de.html' title='Carl Orff - Carmina Burana (Canções de Beuren)'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-7818146568151153634</id><published>2007-04-05T11:55:00.001-03:00</published><updated>2008-03-29T03:04:45.926-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Criptografia'/><title type='text'>Criptografar web.config no .NET</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Implementação &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;passo-a-passo &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;de uma DLL (Windows e web) para proteger os arquivos app e web.config.&lt;br /&gt;&lt;br /&gt;Criptografia, do Grego &lt;span style="font-style: italic;"&gt;kryptós&lt;/span&gt;, "escondido", e &lt;span style="font-style: italic;"&gt;gráphein&lt;/span&gt;, "escrever".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Referência: &lt;a style="color: rgb(51, 51, 255);" href="http://aspalliance.com/1203_Encrypting_and_Decrypting_Configuration_File"&gt;aspAlliance&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Um arquivo de configuração de uma aplicação ASP.NET é um arquivo XML bem-definido cujo elemento raiz é a tag &lt;span style="font-style: italic; color: rgb(153, 0, 0);"&gt;configuration&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;. Nele são armazenadas informações críticas como credenciais de usuários, nomes de servidores e bases de dados. Daí a necessidade de ser protegido, ou criptografado, fortalecendo a segurança nativa do ASP.NET contra "curiosos".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;O arquivo de configuração é chamado &lt;span style="font-style: italic; color: rgb(153, 0, 0);"&gt;app.config&lt;/span&gt; em aplicações Windows, e &lt;span style="color: rgb(153, 0, 0); font-style: italic;"&gt;web.config&lt;/span&gt;  para aplicações web.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Como exemplo prático, vamos implementar uma biblioteca capaz de proteger e desproteger o conteúdo dos arquivos de configuração, tanto para web como Windows. Esta DLL terá apenas dois métodos públicos, sendo eles &lt;span style="font-style: italic;"&gt;Encriptar &lt;/span&gt;e &lt;span style="font-style: italic;"&gt;Decriptar&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;1. Criar um novo projeto do tipo Class Library, semelhante à figura:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YK-I1cKIr2o/Rhr3f-5TsGI/AAAAAAAAABk/DTAgStRAhiw/s1600-h/01_NewProject.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YK-I1cKIr2o/Rhr3f-5TsGI/AAAAAAAAABk/DTAgStRAhiw/s200/01_NewProject.GIF" alt="" id="BLOGGER_PHOTO_ID_5051622060880801890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;2. Incluir referência para os namespaces &lt;span style="font-style: italic; color: rgb(153, 0, 0);"&gt;System.Configuration&lt;/span&gt;, &lt;span style="color: rgb(153, 0, 0); font-style: italic;"&gt;System.Web.Configuration&lt;/span&gt; e &lt;span style="color: rgb(153, 0, 0); font-style: italic;"&gt;System.Windows.Forms&lt;/span&gt; &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;no arquivo de&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; code-behind (*.cs) &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;após adicioná-los em &lt;span style="font-style: italic;"&gt;References&lt;/span&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YK-I1cKIr2o/Rhr64O5TsHI/AAAAAAAAABs/HTY0wJLD2y4/s1600-h/02_AddReference.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YK-I1cKIr2o/Rhr64O5TsHI/AAAAAAAAABs/HTY0wJLD2y4/s200/02_AddReference.GIF" alt="" id="BLOGGER_PHOTO_ID_5051625776027512946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;O ASP.NET possui dois provedores de configuração protegida que podem ser usados para encriptar seções de um arquivo .config, sendo eles &lt;span style="color: rgb(0, 102, 0); font-style: italic;"&gt;RSAProtectedConfigurationProvider&lt;/span&gt; e &lt;span style="color: rgb(0, 102, 0); font-style: italic;"&gt;DPAPIProtectedConfigurationProvider&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;A maioria das seções do .config podem ser encriptadas, inclusive as definidas pelo usuário e connectionString. Apenas as usadas pelo IIS como a tag &lt;span style="color: rgb(102, 0, 0);"&gt;&lt;span style="font-style: italic; color: rgb(0, 102, 0);"&gt;HttpRuntime&lt;/span&gt; &lt;/span&gt;não podem ser protegidas.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Como os passos para web e Windows são semelhantes, mudando apenas o método que abre o arquivo de configuração (web.config ou app.config), incluí um método privado comum para abrir arquivos. Este método,&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; mostrado abaixo, testa o contexto Http atual que, sendo nulo, pode indicar que se trata de uma aplicação Windows.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YK-I1cKIr2o/Rhw3jO5TsMI/AAAAAAAAACU/C5EHwDGpFYs/s1600-h/03_AbrirArqConfig.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_YK-I1cKIr2o/Rhw3jO5TsMI/AAAAAAAAACU/C5EHwDGpFYs/s200/03_AbrirArqConfig.GIF" alt="" id="BLOGGER_PHOTO_ID_5051973960436265154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;A propriedade que efetivamente testa o contexto Http para determinar se a aplicação é web ou Windows é listada abaixo. Não poderia faltar uma gambiarra, claro. Senão dá azar.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YK-I1cKIr2o/RhsCUe5TsJI/AAAAAAAAAB8/BiKJu2huyjE/s1600-h/04_TipoAmbiente.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_YK-I1cKIr2o/RhsCUe5TsJI/AAAAAAAAAB8/BiKJu2huyjE/s200/04_TipoAmbiente.GIF" alt="" id="BLOGGER_PHOTO_ID_5051633957940211858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Finalmente, segue o método para criptografar a seção appsettings do arquivo .config, transformando-a &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;em algo ilegível. Isto poderá ser confirmado ao abrir-se o arquivo.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YK-I1cKIr2o/RhsDg-5TsKI/AAAAAAAAACE/axkExCtX_k0/s1600-h/05_Encriptar.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YK-I1cKIr2o/RhsDg-5TsKI/AAAAAAAAACE/axkExCtX_k0/s200/05_Encriptar.GIF" alt="" id="BLOGGER_PHOTO_ID_5051635272200204450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;E o método para decifrar o .config, se este estiver criptografado.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YK-I1cKIr2o/RhsEkO5TsLI/AAAAAAAAACM/jdBc6ZBhqSM/s1600-h/06_Decriptar.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YK-I1cKIr2o/RhsEkO5TsLI/AAAAAAAAACM/jdBc6ZBhqSM/s200/06_Decriptar.GIF" alt="" id="BLOGGER_PHOTO_ID_5051636427546407090" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;Obs.: O programador deve certificar-se de que a conta do processo ASP.NET worker tem permissão suficiente para&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt; modificar o .config da aplicação.&lt;br /&gt;&lt;br /&gt;Finalizando o exemplo, criar um novo projeto. Pode ser tanto Windows, Console ou Web, lembrando apenas que este é um recurso exclusivo do ASP.NET Framework 2.0.&lt;br /&gt;&lt;br /&gt;Neste novo projeto, referenciar a DLL criada acima (que deve ter sido compilada, é claro) e adicionar dois botões na tela de teste, por exemplo, btnCifrar e btnDecifrar. Nos eventos onClick destes botões, chamar os métodos &lt;span style="font-style: italic; color: rgb(153, 0, 0);"&gt;Criptografia.Encriptar()&lt;/span&gt; e &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(153, 0, 0);font-family:arial;font-size:85%;"  &gt;Criptografia.Decriptar()&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;. Testar a aplicação e visualizar os resultados.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Note como os métodos acima foram ajustados a uma classe e, portanto, a uma DLL reutilizável.&lt;br /&gt;&lt;br /&gt;As simple as possible.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-7818146568151153634?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/7818146568151153634/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=7818146568151153634&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7818146568151153634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7818146568151153634'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/criptografando-o-webconfig-no-aspnet-20.html' title='Criptografar web.config no .NET'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YK-I1cKIr2o/Rhr3f-5TsGI/AAAAAAAAABk/DTAgStRAhiw/s72-c/01_NewProject.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-993869237104921569</id><published>2007-04-04T23:40:00.001-03:00</published><updated>2008-03-29T02:47:11.389-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Código-fonte'/><title type='text'>Monitoração com FileSystemWatcher</title><content type='html'>&lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt; &lt;/span&gt;  &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="font-family:Arial;"&gt;A classe &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;FileSystemWatcher &lt;/span&gt;&lt;/strong&gt;permite detetar quando algum arquivo foi, por exemplo, criado ou alterado em uma  determinada pasta. Resumindo, os passos principais:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// incluir&lt;/span&gt;&lt;br /&gt;using System.IO;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;string caminhoPasta = &lt;span style="color: rgb(0, 128, 128);"&gt;Environment&lt;/span&gt;.CurrentDirectory;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// local onde os arquivos serão  gravados&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;string filtro = "*.bmp";&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// tipo dos arquivos de  interesse&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; &lt;/span&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;FileSystemWatcher&lt;/span&gt;  CãoFarejador = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;FileSystemWatcher&lt;/span&gt;(caminhoPasta, &lt;span style="color: rgb(255, 0, 0);"&gt;filtro&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;// objeto watcher q fará a  monitoração&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;  &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-family:Arial;"&gt; &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;CãoFarejador.Created += &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;FileSystemEventHandler&lt;/span&gt;(ArquivoCriado);&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//Ocorre qdo um  arq/pasta é criado&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;CãoFarejador.EnableRaisingEvents = &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// Ativa o  componente&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-family:Arial;"&gt;// restante do método...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;private &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; ArquivoCriado(&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(0, 128, 128);"&gt;FileSystemEventArgs&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;  // um arquivo foi gravado, faz o q for necessário&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-993869237104921569?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/993869237104921569/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=993869237104921569&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/993869237104921569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/993869237104921569'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/monitorao-com-classe-filesystemwatcher.html' title='Monitoração com FileSystemWatcher'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-6435672280242054729</id><published>2007-04-04T23:15:00.000-03:00</published><updated>2008-03-29T03:04:45.928-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Threads'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Threads parametrizadas no VS2005</title><content type='html'>&lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;Threads são um recurso conveniente para realizar processamentos isolados de forma assíncrona, evitando que a aplicação "pare de responder" temporariamente até que uma operação seja concluída, propiciando uma experiência mais agradável para o usuário. São relativamente simples de implementar, bastando basicamente, instanciar uma nova thread apontando-a para algum método e, em seguida, dispará-la.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// incluir o namespace&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;using System.Threading;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="font-weight: bold; color: rgb(255, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Thread myThread = new Thread(new  ParameterizedThreadStart(Processa_AlgumaCoisa));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// faz método rodar em 2º  plano&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;br /&gt;myThread.Priority = ThreadPriority.AboveNormal;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// Definir a prioridade da thread conforme necessário ajuda a otimizar o uso de CPU&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;object _param = "nomeArquivo";&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// apenas um parâmetro de exemplo, mostrando que podemos passar&lt;br /&gt;// parâmetros para a thread parametrizada. Este parâmetro pode ser&lt;br /&gt;// um arranjo de objetos&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;font-family:Arial;font-size:85%;"  &gt;myThread.Start(_param);&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// inicia a execução do método apontado  acima&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt;  &lt;div style="color: rgb(0, 153, 0);"&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;/* Join paralisa a aplicação (na verdade a thread pai) enquanto&lt;br /&gt;esta thread  trabalha.&lt;/span&gt; A aplicação fica suspensa até q esta&lt;br /&gt;thread  termine sua tarefa&lt;/span&gt;&lt;span style="font-weight: normal;"&gt; ou o tempo &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;no overload exceda. */&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="color: rgb(255, 0, 0);font-family:Arial;font-size:85%;"  &gt;&lt;strong&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;myThread.Join();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0); font-weight: normal;"&gt;// retorna  true se terminou a tarefa ou false se o tempo foi excedido&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;br /&gt;private Processa_AlgumaCoisa(object  _param)&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;    {&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;    string nomeArquivo = (string)_param;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;    &lt;span style="color: rgb(0, 153, 0);"&gt;// faz o q tiver q fazer em  background...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt;  &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;Outra forma de saber se a thread concluiu sua tarefa é pela  propriedade &lt;strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;myThread.IsAlive&lt;/span&gt;&lt;/strong&gt;, que retorna true se ainda está trabalhando.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-6435672280242054729?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/6435672280242054729/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=6435672280242054729&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6435672280242054729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6435672280242054729'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/disparando-threads-parmetrizadas-no.html' title='Threads parametrizadas no VS2005'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-8117883481973847138</id><published>2007-04-03T12:53:00.001-03:00</published><updated>2008-03-29T03:09:38.321-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Literatura'/><category scheme='http://www.blogger.com/atom/ns#' term='Cultura'/><category scheme='http://www.blogger.com/atom/ns#' term='Relações Humanas'/><title type='text'>“Gerundismo” de Ricardo Freire</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Conforme prometido:&lt;br /&gt;&lt;br /&gt;“Aqui vai a última flor do Lácio: Este artigo foi feito especialmente para que você possa estar recortando e possa estar deixando discretamente sobre a mesa de alguém que não consiga estar falando sem estar espalhando essa praga terrível da comunicação moderna, o gerundismo. Você pode também estar passando por fax, estar mandando pelo correio ou estar enviando pela Internet.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;O importante é estar garantindo que a pessoa em questão vá estar recebendo esta ,mensagem, de modo que ela possa estar lendo e, quem sabe, consiga até mesmo estar se dando conta da maneira como tudo o que ela costuma estar falando deve estar soando nos ouvidos de quem precisa estar escutando. (...) Deus, o que a gente pode tá fazendo pra que as pessoas tejam entendendo o que esse negócio pode tá provocando no cérebro das novas gerações?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;A única solução vai estar sendo submeter o gerundismo à mesma campanha de desmoralização à qual precisaram estar sendo expostos seus coleguinhas contagiosos, como o “a nível de”, o “enquanto”, o “pra se ter uma idéia” e outros menos votados.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;A nível de linguagem, enquanto pessoa, o que você acha de tá insistindo em tá falando desse jeito?”&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;(O Estado de S.Paulo, coluna “Xongas”, &lt;/span&gt;&lt;span style="font-family:arial;"&gt;trecho do texto “Gerundismo” de Ricardo Freire)&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-8117883481973847138?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/8117883481973847138/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=8117883481973847138&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/8117883481973847138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/8117883481973847138'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/aqui-vai-ltima-flor-do-lcio-este-artigo.html' title='“Gerundismo” de Ricardo Freire'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-2360722555174782595</id><published>2007-04-03T10:22:00.001-03:00</published><updated>2008-03-29T03:09:38.323-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Literatura'/><category scheme='http://www.blogger.com/atom/ns#' term='Cultura'/><category scheme='http://www.blogger.com/atom/ns#' term='Relações Humanas'/><title type='text'>Quem mal lê, mal se comunica!</title><content type='html'>Excelente artigo sobre &lt;a href="http://www.revolucao.etc.br/archives/quem-mal-le-mal-se-comunica/"&gt;comunicação&lt;/a&gt;, por &lt;span class="author"&gt;Henrique Costa Pereira.&lt;br /&gt;&lt;br /&gt;Tenho um ótimo sobre "&lt;span style="color: rgb(51, 0, 153);"&gt;gerundismo&lt;/span&gt;". Pretendo "&lt;span style="font-style: italic;"&gt;estar postando&lt;/span&gt;" aqui em breve.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-2360722555174782595?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/2360722555174782595/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=2360722555174782595&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2360722555174782595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2360722555174782595'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/quem-mal-l-mal-se-comunica.html' title='Quem mal lê, mal se comunica!'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-4455692464230228967</id><published>2007-04-02T17:27:00.001-03:00</published><updated>2008-03-29T02:56:39.544-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Práticas'/><category scheme='http://www.blogger.com/atom/ns#' term='pérolas'/><title type='text'>Visões de projeto</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YK-I1cKIr2o/RhFoAgCgA_I/AAAAAAAAAAs/4OvRaCeeuOU/s1600-h/visoes-de-um-projeto.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_YK-I1cKIr2o/RhFoAgCgA_I/AAAAAAAAAAs/4OvRaCeeuOU/s200/visoes-de-um-projeto.jpg" alt="" id="BLOGGER_PHOTO_ID_5048931015068746738" border="0" /&gt;&lt;/a&gt;Esta é uma excelente representação de fases críticas no desenvolvimento de projetos.&lt;br /&gt;Descreve perfeitamente como o processo de engenharia de software é concebido na maioria das empresas. E ainda dizem que a culpa é dos programadores.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-4455692464230228967?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/4455692464230228967/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=4455692464230228967&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4455692464230228967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4455692464230228967'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/vises-de-projeto.html' title='Visões de projeto'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YK-I1cKIr2o/RhFoAgCgA_I/AAAAAAAAAAs/4OvRaCeeuOU/s72-c/visoes-de-um-projeto.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-2313218583873517770</id><published>2007-04-02T14:00:00.001-03:00</published><updated>2008-03-29T02:57:46.918-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Práticas'/><category scheme='http://www.blogger.com/atom/ns#' term='Gerência Projetos'/><title type='text'>Nota perfeita em Engenharia de Software</title><content type='html'>&lt;span style=";font-family:times new roman;font-size:85%;"  &gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;"&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-family:arial;font-size:100%;"  &gt;(...) a maior dificuldade na construção de um software é decidir &lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-family:arial;font-size:100%;"  &gt;precisamente o que construir. Nenhuma outra parte do trabalho conceitual é mais &lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-family:arial;font-size:100%;"  &gt;difícil quanto estabelecer detalhadamente os requisitos técnicos. Nenhuma outra parte &lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-family:arial;font-size:100%;"  &gt;é mais difícil de ser corrigida tardiamente [6].&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;[6] Berry, Daniel; Lawrence, Brian. Guest Editors’ Introduction - Requirements Engineering. &lt;/span&gt;&lt;span style="font-family:arial;"&gt;IEEE Software. 1998. pp 26-29.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-2313218583873517770?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/2313218583873517770/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=2313218583873517770&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2313218583873517770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2313218583873517770'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/04/nota-perfeita-em-engenharia-de-software.html' title='Nota perfeita em Engenharia de Software'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-2884608648193587289</id><published>2007-03-28T00:37:00.000-03:00</published><updated>2007-04-04T23:51:45.525-03:00</updated><title type='text'>Conjunto de instruções do PIC</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YK-I1cKIr2o/RgnjcgCgA-I/AAAAAAAAAAk/tbYQP4f5Xdw/s1600-h/Instru%C3%A7%C3%B5es+PIC.GIF"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_YK-I1cKIr2o/RgnjcgCgA-I/AAAAAAAAAAk/tbYQP4f5Xdw/s200/Instru%C3%A7%C3%B5es+PIC.GIF" alt="" id="BLOGGER_PHOTO_ID_5046814936221615074" align="left" border="0" hspace="8" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: arial;font-family:Verdana;font-size:85%;"  &gt;&lt;b&gt;f&lt;/b&gt; qualquer local de        memória&lt;br /&gt;&lt;b&gt;W &lt;/b&gt;registo de trabalho&lt;br /&gt;&lt;b&gt;b        &lt;/b&gt;posição de bit no registo 'f'&lt;br /&gt;&lt;b&gt;d&lt;/b&gt; registo de        destino&lt;br /&gt;&lt;i&gt;label &lt;/i&gt;grupo de oito caracteres que marca o início de uma        parte do programa (rótulo)&lt;br /&gt;&lt;b&gt;TOS &lt;/b&gt;cimo da pilha&lt;br /&gt;&lt;b&gt;[]&lt;/b&gt;        opcional&lt;br /&gt;&lt;&gt;&lt;b&gt; &lt;/b&gt;grupo de bits num registo&lt;/span&gt;&lt;span style="font-family: arial;font-family:arial;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: arial;font-family:Verdana;font-size:85%;"  &gt;&lt;b&gt;*1 &lt;/b&gt;Se o porto de        entrada/saída for o operando origem, é lido o estado dos pinos do        microcontrolador.&lt;br /&gt;&lt;b&gt;*2&lt;/b&gt; Se esta instrução for executada no registo        TMR0 e se d=1, o prescaler atribuído a esse temporizador é automaticamente        limpo.&lt;br /&gt;&lt;b&gt;*3 &lt;/b&gt;Se o PC for modificado ou se resultado do teste for        verdadeiro, a instrução é executada em dois        ciclos.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-2884608648193587289?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/2884608648193587289/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=2884608648193587289&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2884608648193587289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2884608648193587289'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/conjunto-de-instrues-do-pic.html' title='Conjunto de instruções do PIC'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YK-I1cKIr2o/RgnjcgCgA-I/AAAAAAAAAAk/tbYQP4f5Xdw/s72-c/Instru%C3%A7%C3%B5es+PIC.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-6305632678481196606</id><published>2007-03-28T00:06:00.000-03:00</published><updated>2008-03-29T03:05:53.463-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Erro abrindo projeto no VS2003</title><content type='html'>&lt;span id="_ctl0_MainContent_PostFlatView"  style="font-size:85%;"&gt;&lt;span&gt;"&lt;span style="color: rgb(51, 0, 153);"&gt;Visual Studio.Net cannot create or open the application because the current user account is not a member of the VS Developers group on the Web server computer&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;No Painel de Controle, Ferramentas administrativas, Gerenciamento do computador, Usuários e grupos locais, Usuários. Nas propriedades do seu usuário, guia "&lt;span style="color: rgb(51, 0, 153);"&gt;Membro de&lt;/span&gt;", adicione o grupo &lt;span style="color: rgb(51, 0, 153);"&gt;VS Developers&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Link para artigo da MSDN:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;a style="color: rgb(51, 51, 255);" href="http://msdn2.microsoft.com/en-us/library/aa289173%28VS.71%29.aspx"&gt;Developing Software in Visual Studio .NET with Non-Administrative Privileges&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary:&lt;/b&gt; Members of the local Administrators group have privileges to perform any action on a machine. This causes both a risk to the user performing actions in that environment and to the software that they develop. This article explains how to productively develop software while logged on with non-administrative privileges. (14 printed pages)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-6305632678481196606?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/6305632678481196606/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=6305632678481196606&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6305632678481196606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/6305632678481196606'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/erro-abrindo-projeto-no-vs2003.html' title='Erro abrindo projeto no VS2003'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-4056406800861106250</id><published>2007-03-27T08:48:00.001-03:00</published><updated>2008-03-29T03:03:33.087-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Depurar serviços no Visual Studio</title><content type='html'>&lt;span style="font-size:85%;"&gt;1. Compilar em DEBUG, inclusive DLLs, se necessário depurá-las também;&lt;br /&gt;2. Instalar E iniciar serviço;&lt;br /&gt;3. No VS, em Debug, Attach to Process...;&lt;br /&gt;4. Em Available Processes, selecionar o processo;&lt;br /&gt;5. Attach;&lt;br /&gt;&lt;br /&gt;6. Em Debug, Detach All para finalizar.&lt;br /&gt;&lt;br /&gt;Arquivos *.bat podem auxiliar na instalação e remoção de serviços:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Arquivo InstalServ.bat:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;@echo off&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;rem Linha abaixo em uma única linha:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;c:\windows\microsoft.net\framework\v2.0.50727\installutil -i D:\Projects\&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;myServico&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;s\&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;myServico1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;\bin\Release\&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;myServico1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;.exe&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Arquivo RemovServ.bat:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;@echo off&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;rem Linha abaixo em uma única linha:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;c:\windows\microsoft.net\framework\v2.0.50727\installutil -u D:\Projects\myServicos\&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;myServico1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;\bin\Release\&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;myServico1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;.exe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;ANTES DE INSTALAR OU REMOVER O SERVIÇO: Pará-lo se estiver em execução.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-4056406800861106250?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/4056406800861106250/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=4056406800861106250&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4056406800861106250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4056406800861106250'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/depurar-servios-no-visual-studio-2005.html' title='Depurar serviços no Visual Studio'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-4178588366490795217</id><published>2007-03-25T11:59:00.001-03:00</published><updated>2008-02-27T10:35:28.773-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Uru'/><title type='text'>Titan: o filho + novo</title><content type='html'>&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/P6drH7_HM_s"&gt;&lt;embed src="http://www.youtube.com/v/P6drH7_HM_s" type="application/x-shockwave-flash" height="350" width="425"&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/6243877953240735013-4178588366490795217?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/4178588366490795217/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=4178588366490795217&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4178588366490795217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4178588366490795217'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/titan-o-filho-novo.html' title='Titan: o filho + novo'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-1225627793779213616</id><published>2007-03-25T01:49:00.001-03:00</published><updated>2008-03-29T03:08:30.417-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cultura'/><category scheme='http://www.blogger.com/atom/ns#' term='pérolas'/><title type='text'>Algumas unidades práticas de Engenharia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YK-I1cKIr2o/RgYAA_1iS9I/AAAAAAAAAAc/WdK7HnSjCAE/s1600-h/Medidas_Praticas.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_YK-I1cKIr2o/RgYAA_1iS9I/AAAAAAAAAAc/WdK7HnSjCAE/s200/Medidas_Praticas.jpg" alt="" id="BLOGGER_PHOTO_ID_5045720449651198930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YK-I1cKIr2o/RgX_sv1iS8I/AAAAAAAAAAU/5yjaejHXu2A/s1600-h/Medidas_Praticas.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-1225627793779213616?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/1225627793779213616/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=1225627793779213616&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1225627793779213616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/1225627793779213616'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/blog-post.html' title='Algumas unidades práticas de Engenharia'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YK-I1cKIr2o/RgYAA_1iS9I/AAAAAAAAAAc/WdK7HnSjCAE/s72-c/Medidas_Praticas.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-2570534824120249698</id><published>2007-03-25T01:43:00.000-03:00</published><updated>2008-03-29T03:05:53.464-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>GC - Garbage Collector (C#)</title><content type='html'>&lt;span style="font-size:85%;"&gt;O método Collect do objeto GC (Garbage Collector) força a ocorrencia da coleta  de lixo e consequentemente liberação de memória.&lt;br /&gt;&lt;br /&gt;Porém este método deve  ser evitado, pois é preferível deixarmos o próprio Garbage Collector decidir  quando deve ser feita a coleta de lixo.&lt;br /&gt;&lt;br /&gt;Mas quando realmente precisarmos  realizar a coleta de lixo através do GC devemos tomar cuidado com a forma  correta de chamar o método Collect, o que não é uma simples chamada de método.  Veja :&lt;br /&gt;&lt;br /&gt;- Chamamos o método Collect&lt;br /&gt;- Precisamos esperar que todos os  finalizes sejam rodados, liberando recursos&lt;br /&gt;- Chamamos novamente o método  Collect, pois a execução do finalize gera novas instancias a serem liberadas&lt;br /&gt;&lt;br /&gt;Veja como fica :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;GC.Collect &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;GC.WaitForPendingFinalizers()  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;GC.Collect&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-2570534824120249698?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/2570534824120249698/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=2570534824120249698&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2570534824120249698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/2570534824120249698'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/gc-garbage-collector.html' title='GC - Garbage Collector (C#)'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-8012333840520217172</id><published>2007-03-25T01:39:00.002-03:00</published><updated>2008-03-29T03:08:30.418-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cultura'/><category scheme='http://www.blogger.com/atom/ns#' term='pérolas'/><title type='text'>Porquê o frango atravessou a rua?</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;  RESPOSTAS:&lt;br /&gt;&lt;br /&gt;PROFESSORA PRIMÁRIA&lt;br /&gt;Porque o frango queria chegar ao outro lado da estrada.&lt;br /&gt;&lt;br /&gt;CRIANÇA&lt;br /&gt;Porque sim.&lt;br /&gt;&lt;br /&gt;PLATÃO&lt;br /&gt;Porque buscava alcançar o Bem.&lt;br /&gt;&lt;br /&gt;ARISTÓTELES&lt;br /&gt;É da natureza do frango cruzar a estrada.&lt;br /&gt;&lt;br /&gt;MARX&lt;br /&gt;O atual estágio das forças produtivas exigia uma nova classe de frangos   capazes de  cruzar a estrada.&lt;br /&gt;&lt;br /&gt;MARTIN LUTHER KING&lt;br /&gt;Eu tive um sonho. Vi um mundo no qual todos os frangos serão livres para cruzar a estrada sem que sejam questionados seus motivos.&lt;br /&gt;&lt;br /&gt;FREUD&lt;br /&gt;A preocupação com o fato de o frango ter cruzado a estrada é um sintoma de insegurança sexual.&lt;br /&gt;&lt;br /&gt;DARWIN&lt;br /&gt;Ao longo de grandes períodos de tempo, os frangos têm sido selecionados naturalmente, de modo que, agora, têm uma predisposição genética a cruzar estradas.&lt;br /&gt;&lt;br /&gt;EINSTEIN&lt;br /&gt;Se o frango cruzou a estrada ou a estrada se moveu sob o frango, depende do ponto de vista. Tudo é relativo.&lt;br /&gt;&lt;br /&gt;MACONHEIRO&lt;br /&gt;Foi uma viagem...&lt;br /&gt;&lt;br /&gt;HELOISA HELENA&lt;br /&gt;A culpa é das elites estelionatárias, caucasianas e aristocráticas que usurpam a população de frangos e mostra a sua capacidade de luta em defesa dos seus direitos.&lt;br /&gt;&lt;br /&gt;SEVERINO CAVALCANTI&lt;br /&gt;Desafio alguém que possa provar que o frango atravessou a estrada... É mentira... É tudo mentira.&lt;br /&gt;&lt;br /&gt;ZECA PAGODINHO&lt;br /&gt;Porque do outro lado da rua tinha uma Brahma gelada.&lt;br /&gt;&lt;br /&gt;AMIR KLINK&lt;br /&gt;Para ir aonde nenhum frango jamais esteve.&lt;br /&gt;&lt;br /&gt;NELSON RODRIGUES&lt;br /&gt;Porque viu sua cunhada, uma galinha sedutora, do outro lado.&lt;br /&gt;&lt;br /&gt;FEMINISTAS&lt;br /&gt;Para humilhar a franga, num gesto exibicionista, tipicamente machista,  tentando, além disso, convencê-la de que, enquanto franga, jamais terá habilidade suficiente para cruzar a estrada.&lt;br /&gt;&lt;br /&gt;DATENA&lt;br /&gt;É uma pouca vergonha... Uma Barbaridade... Põe no ar... Põe no ar aí as imagens do frango atravessando a estrada.&lt;br /&gt;&lt;br /&gt;FERNANDO HENRIQUE CARDOSO&lt;br /&gt;Por que ele atravessou a estrada, não vem ao caso. O importante é que, com o Plano Real, o povo está comendo mais frango.&lt;br /&gt;&lt;br /&gt;PAULO MALUF&lt;br /&gt;O meu governo foi o que construiu mais passarelas para frangos. Quando  for eleito novamente vou construir galinheiros deste lado para o frango não ter mais que atravessar a estrada.&lt;br /&gt;&lt;br /&gt;CAETANO VELOSO&lt;br /&gt;O frango é amaro, é lindo, uma coisa assim amara. Ele atravessou,  atravessa e atravessará a estrada porque Narciso, filho de D.Canô, quisera comê-lo...ou não!!&lt;br /&gt;&lt;br /&gt;E PARA FINALIZAR.........&lt;br /&gt;&lt;br /&gt;LUIZ INÁCIO LULA DA SILVA&lt;br /&gt;Porque queria se juntar aos outros mamíferos.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-8012333840520217172?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/8012333840520217172/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=8012333840520217172&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/8012333840520217172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/8012333840520217172'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/porqu-o-frango-atravessou-rua.html' title='Porquê o frango atravessou a rua?'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-4272113561914956754</id><published>2007-03-25T01:21:00.000-03:00</published><updated>2008-03-29T03:04:45.931-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Webservices'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>WebService assíncrono (em C# ASP.NET)</title><content type='html'>&lt;div style="color: rgb(51, 0, 153);"&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Considere um método qualquer do webservice:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong style="font-family: courier new;"&gt;[WebMethod()]&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;public void myMetodo(ref  object parametros)&lt;br /&gt;&lt;/strong&gt;//declarando por referência disponibilizará&lt;br /&gt;//os  parâmetros qdo o método terminar&lt;/span&gt;&lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;    //lógica do webservice&lt;/span&gt;&lt;/div&gt; &lt;div style="color: rgb(51, 0, 153);"&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;strong&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;    O método assíncrono é chamado usando, por  exemplo,&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;         myWebService.myMetodoAsync(parametros);&lt;br /&gt;&lt;/strong&gt;//o método assíncrono já  é gerado pelo webservice, basta usá-lo&lt;/span&gt;&lt;/div&gt; &lt;div style="font-family: courier new;"&gt; &lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;        //o restante do código continua a ser  executado normalmente.&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt;  &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;br /&gt;Vc pode adicionar um handler (no lado  cliente) para disparar o método Completed correspondente ao método  assíncronopara qdo ele terminar sua tarefa. Por  exemplo:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;        &lt;strong&gt;myWebService.myMetodoCompleted +=  new myMetodoCompletedEventHandler(myMetodoAsync_Terminou);    &lt;/strong&gt;//use TAB  aqui&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;br /&gt;Em seguida, crie o novo método indicado no  handler (repare q o intelli sense pode &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;gerar o  método abaixo usando TAB na linha acima:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;protected void  myMetodoAsync_Terminou(object sender, &lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;System.ComponentModel.&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;AsyncCompletedEventArgs&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;e)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;        {&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;  &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;        //aqui vc coloca o código a ser  executado qdo o método assíncrono terminar&lt;/span&gt;&lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt; &lt;/div&gt; &lt;div  style="color: rgb(51, 0, 153);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;        //obs: repare q no parâmetro 'e' vc tem  disponíveis os parâmetros&lt;/span&gt;&lt;/div&gt; &lt;div face="courier new" style="color: rgb(51, 0, 153);"&gt;&lt;span style="font-size:85%;"&gt;        //q foram declarados por referência.  Por exemplo, poderíamos ter:&lt;/span&gt;&lt;/div&gt; &lt;div face="courier new" style="color: rgb(51, 0, 153);"&gt; &lt;/div&gt;  &lt;div  style="color: rgb(51, 0, 153); font-family: courier new;font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;                    Console.WriteLine(e.parametros);&lt;/strong&gt;&lt;/span&gt; &lt;/div&gt; &lt;div style="color: rgb(51, 0, 153); font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;Bom, é basicamente isso, mas ainda há muito a  explorar.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-4272113561914956754?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/4272113561914956754/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=4272113561914956754&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4272113561914956754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/4272113561914956754'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/webservice-assncrono.html' title='WebService assíncrono (em C# ASP.NET)'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-7700825828636123605</id><published>2007-03-25T01:07:00.001-03:00</published><updated>2008-02-27T10:36:19.423-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><title type='text'>Rápida introdução à linguagem JAVA</title><content type='html'>Java é uma linguagem portável orientada a objetos desenvolvida pela Sun Microsystems. Do código-fonte é gerado o byte-code, que será interpretado pela máquina virtual adequada à plataforma.&lt;br /&gt;&lt;br /&gt;As aplicações podem ser escritas em editores ASCII puro como vi, emacs ou Bloco de notas. Por exemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;class HelloWorld&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;    public static void main (String args[])&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;        System.out.println ("Hello World!");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O byte-code é gerado por &lt;span style="color: rgb(51, 0, 153);"&gt;bin/javac HelloWorld.java &lt;/span&gt;e executado por &lt;span style="color: rgb(51, 0, 153);"&gt;bin/java HelloWorld&lt;span style="color: rgb(0, 0, 0);"&gt;. Para isso é necessário o compilador instalado, que pode ser obtido no site da &lt;a href="http://java.sun.com/"&gt;Sun&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; .&lt;br /&gt;&lt;br /&gt;As Applets são aplicações Java adaptadas para rodarem dentro de páginas HTML e, portanto, apresentadas num browser. Por exemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;import java.awt.Graphics;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;public class HelloWorldApplet extends java.applet.Applet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;    public void paint (Graphics g)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;        g.drawString ("Hello World!",5,25);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O byte-code será gerado por &lt;span style="color: rgb(51, 0, 153);"&gt;bin/javac HelloWorldApplet.java&lt;/span&gt;,&lt;br /&gt;porém executado dentro de uma página HTML. Por exemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;&amp;lt;HTML&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;&amp;lt;HEAD&amp;gt;&amp;lt;TITLE&amp;gt;Exemplo de Applet Java: Hello World!&amp;lt;/TITLE&amp;gt;&amp;lt;/HEAD&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;&amp;lt;BODY&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;&amp;lt;APPLET CODE="HelloWorldApplet.class" WIDTH="300" HEIGHT="100"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;&amp;lt;/APPLET&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;&amp;lt;/BODY&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-family:courier new;" &gt;&amp;lt;/HTML&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ou poderá ser visualizado por &lt;span style="color: rgb(51, 0, 153);"&gt;bin/appletviewer HelloWorldApplet.html&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-7700825828636123605?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vsousa.blogspot.com/feeds/7700825828636123605/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6243877953240735013&amp;postID=7700825828636123605&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7700825828636123605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7700825828636123605'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/linguagem-portvel-orientada-objetos.html' title='Rápida introdução à linguagem JAVA'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-7597783214825460437</id><published>2007-03-25T00:49:00.002-03:00</published><updated>2008-03-29T03:08:30.419-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cultura'/><category scheme='http://www.blogger.com/atom/ns#' term='pérolas'/><title type='text'>Engenheiro contando a história dos 3 porquinhos</title><content type='html'>Era uma vez três porquinhos genéricos, P1, P2 e P3 e um Lobo Mau, por definição, LM, que vivia os atormentando.  &lt;br /&gt;&lt;br /&gt; P1 era sabido e fazia Engenharia de Automação e já era formado em Civil. P2 era arquiteto e vivia em fúteis devaneios estéticos absolutamente desprovidos de cálculos rigorosos. P3 fazia Comunicação e Expressão Visual na UFSC.&lt;br /&gt;&lt;br /&gt; LM, na Escola Oficial da ABNT, para medição da Maldade (EOMM) era Mau nível 8,75 (arredondando a partir da 3a casa decimal para cima). LM tbm era um mega-investidor imobiliário sem escrúpulos e cobiçava a propriedade que pertencia aos Pn (onde "n" é um número natural e varia entre 1 e 3, inclusive), visto que era de boa conformidade geológica e configuração topográfica, e ficava perto do Shopping Beira-Mar.&lt;br /&gt;&lt;br /&gt; Mas nesse promissor perímetro P1 construiu uma casa de tijolos, sensata e logicamente planejada, toda protegida com mecanismos automáticos. Ja P2 montou uma casa de blocos articulados feitos de mogno que mais parecia um castelo lego-tresloucado. Enquanto P3 planejou no AutoCad e montou ele mesmo, com barbantes e isopor como fundamentos, uma cabana de palha com teto solar, e achava aquilo "o máximo".&lt;br /&gt;&lt;br /&gt; Um dia, LM foi ate a propriedade dos suínos e disse, encontrando P3:&lt;br /&gt;&lt;br /&gt; - Uahahhahaha, corra, P3, pq vou gritar, e vou gritar e chamar o Conselho de Engenharia e Construcao Civil para denunciar sua casa de palha projetada por um formando em Comunicação e Expressão Visual!&lt;br /&gt;&lt;br /&gt; Ao que P3 correu para sua amada cabana, mas qdo chegou lá os fiscais do Conselho ja haviam posto tudo abaixo. Então P3 correu para a casa de P2. Mas quando chegou lá, encontrou LM à porta, batendo com força e gritando:&lt;br /&gt;&lt;br /&gt; - Abra essa porta, P2, ou vou gritar, gritar e gritar e chamar o GreenPeace, para denunciar que vc usou madeira nobre de aréas não-reflorestadas e areia de praia para misturar no cimento.&lt;br /&gt;&lt;br /&gt; Antes que P2 alcançasse a porta, esta foi posta a baixo por uma multidão ensandecida de eco-chatos que invadiram o ambiente, vandalizaram tudo e ocuparam os destroços, pixando e entoando palavras de ordem. Ao que P3 ergue P2 e os dois correm para a casa de P1. Quando chegaram na casa de P1, este os recebe e os dois caem ofegantes na sala de entrada.&lt;br /&gt;&lt;br /&gt;P1: O que houve?&lt;br /&gt;&lt;br /&gt;P2: LM, lobo mau por definicao, nível 8.75, destruiu nossas casas e desapropriou os terrenos.&lt;br /&gt;&lt;br /&gt;P3: Não temos para onde ir. E agora, que eu farei? Sou apenas um formando em Comunicação e Expressão Visual!&lt;br /&gt;&lt;br /&gt;Tum-tum-tum-tum-tuuummm!!!! (batidas à porta)&lt;br /&gt;&lt;br /&gt;LM: P1, abra essa porta e assine este contrato de transferência de posse de imóvel, ou eu vou gritar e gritar e chamar os fiscais do Conselho de Engenharia de Santa Catarina em cima de vc!!!&lt;br /&gt;&lt;br /&gt; Como P1 não abria (apesar da insistência covarde do porco arquiteto e do.. do... "comunicador e expressivo visual"?) LM chamou os fiscais, e estes fizeram testes de robustez do projeto, inspeções sanitárias, projeções geomorfológicas, exames de agentes físico-estressores, cálculos com muitas integrais, matrizes, e geometria analítica avançada, e nada acharam de errado.&lt;br /&gt;&lt;br /&gt; Entao LM gritou e gritou pela segunda vez, e veio o GreenPeace, mas todo o projeto e implementação da casa de P1 era ecologicamente correta. Cansado e esbaforido, o vilão lupino resolveu agir de forma irracional (porém super-comum nos contos de fada): ele pessoalmente escalou a casa de P1 pela parede, subiu ate a chaminé e resolveu entrar por esta, para invadir.&lt;br /&gt;&lt;br /&gt; Mas quando ele pulou para dentro da chamine, um dispositivo mecatrônico instalado por P1 captou sua presença por um sensor térmico e ativou uma catapulta que impulsionou com uma força de 33300 N (Newtons) LM para cima. Este subiu aos céus, numa trajetória parabólica estreita, alcançando o ápice, onde sua velocidade chegou a zero, a 200 metros do chão.&lt;br /&gt;&lt;br /&gt;Agora calcule, admitindo que a gravidade vale 9,78 m/s2:&lt;br /&gt;&lt;br /&gt;a) a massa de LM&lt;br /&gt;b) o deslocamento no eixo "x", tomando como referencial a chaminé.&lt;br /&gt;c) a velocidade de queda de LM qdo este tocou o chão e&lt;br /&gt;d) o susto que o Lobo Mau tomou.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-7597783214825460437?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7597783214825460437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7597783214825460437'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/engenheiro-contando-histria-dos-3.html' title='Engenheiro contando a história dos 3 porquinhos'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-6243877953240735013.post-7206777172685074987</id><published>2007-03-16T00:56:00.000-03:00</published><updated>2007-03-16T01:03:58.913-03:00</updated><title type='text'>Principium est?</title><content type='html'>"Tantum homo habet de scientia quantum operatur. (&lt;span style="font-style: italic;"&gt;O conhecimento que o homem possui é só aquele que aplica&lt;/span&gt;.)" São Francisco&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6243877953240735013-7206777172685074987?l=vsousa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7206777172685074987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6243877953240735013/posts/default/7206777172685074987'/><link rel='alternate' type='text/html' href='http://vsousa.blogspot.com/2007/03/principium-est.html' title='Principium est?'/><author><name>Vagner (Uru)</name><uri>http://www.blogger.com/profile/09464783714190699455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YK-I1cKIr2o/SeaBQRopZvI/AAAAAAAAAYc/AzowNGldjQU/S220/SouthVagner.JPG'/></author></entry></feed>
