<?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-2071137246436930892</id><updated>2012-02-11T07:56:13.704-03:00</updated><category term='Algoritmos'/><category term='Internet'/><category term='Software Livre'/><category term='Ruby'/><category term='php'/><category term='Javascript'/><category term='Mercado de Trabalho'/><category term='C/C++'/><category term='engenharia de software'/><category term='padrões de projeto'/><category term='Segurança'/><category term='tecnologia'/><category term='games'/><category term='Java'/><title type='text'>Mãozinha da Web</title><subtitle type='html'>Está precisando de uma mãozinha? Tutoriais, artigos, passo-a-passos e discussões sobre informática.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6470058133565935943</id><published>2007-09-11T20:00:00.000-03:00</published><updated>2007-09-11T20:56:23.540-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engenharia de software'/><title type='text'>Problemas essenciais no desenvolvimento de software</title><content type='html'>Algumas características diferem o processo de desenvolvimento de software de qualquer outro produto manufaturado. Essas diferenças, dadas pela própria essência do software, que é uma entidade abstrata, provocam tantos problemas durante o processo de transformar uma idéia em um produto.&lt;br /&gt;&lt;br /&gt;Brooks, em seu artigos Essence and Accident in Software Development, trata de questões que sempre aparecem em equipes de desenvolvimento, e que são as principais inimigas dos desenvolvedores.&lt;br /&gt;&lt;br /&gt;Assim como Aristóteles na filosofia, Brooks encontra duas classes de problemas enfrentados durante o desenvolvimento: os essenciais e os acidentais. Questões essenciais são aquelas que são inerentes ao processo de software e sempre estarão presentes durante o desenvolvimento. Já os problemas acidentais são aqueles não instrínsecos ao software e que surgem em determinados pontos do projeto. O grande erro, segundo Brooks, é quando se dá mais atenção ao que é acidental, deixando de lado aquilo que é essencial. Falaremos um pouco sobre os problemas essenciais no projeto de software.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Complexidade:&lt;/span&gt; Manejar uma entidade abstrata é uma tarefa por si só bastante árdua. A dificuldade de compreender um todo composto por pequenas partes interdependentes contribui  para  falhas de entendimento e comunicação. Muitas vezes membros de uma equipe têm visões diferentes sobre partes do software, o que gera atrasos e retrabalhos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conformidade: &lt;/span&gt;O software não depende apenas do desejo de um programador bem intencionado. O projeto deve contemplar as expectativas de clientes exigentes, fazendo jus ao tempo de desenvolvimento e ao custo. Esse é um ponto importante, que se mal observado, pode por um projeto inteiro a perder.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mutabilidade: &lt;/span&gt;O software está em constante evolução. Interesses mudam,  objetivos são trocados e por isso o projeto deve estar pronto para evoluir com o menor impacto possível. Projete pensando no futuro, pois logo você estará nele.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Invisibilidade: &lt;/span&gt;O fato de o software ser uma entidade abstrata é o responsável pela maior parte dos problemas durante o desenvolvimento. A necessidade de modelos de representação simples e eficientes é prioridade para a indústria do software. Isso nos últimos anos vem sendo bastante buscado e por vezes alcançado, com linguagens de representação como a UML, que promove as mais diversas formas de modelar o projeto.&lt;br /&gt;&lt;br /&gt;Tentar superar esses problemas essenciais é o primeiro passo para um projeto de sucesso. De fato outros problemas aparecerão, mas serão acidentes, que podem ser tratados com outros remédios.&lt;br /&gt;&lt;br /&gt;Desses acidentes falaremos em outra oportunidade.&lt;br /&gt;&lt;br /&gt;Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-6470058133565935943?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6470058133565935943/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6470058133565935943' title='9 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6470058133565935943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6470058133565935943'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/09/problemas-essenciais-no-desenvolvimento.html' title='Problemas essenciais no desenvolvimento de software'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-1026609499024196978</id><published>2007-08-22T13:17:00.000-03:00</published><updated>2007-08-22T14:03:39.162-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Referência circular e forward declarations no C++</title><content type='html'>Quando programamos em C++, temos geralmente um arquivo header, que guarda as assinaturas dos métodos, e um arquivo.cxx, que tem as implementações daquilo que foi declarado no arquivo header. Vamos exemplificar o problema da referência circular.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:arial;" &gt;foo.h&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;#include&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);"&gt; &lt;/span&gt;"bar.h"&lt;br /&gt;class Foo {&lt;br /&gt;&lt;arquivo2.h&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;     public: &lt;span style="color: rgb(51, 0, 51);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/arquivo2.h&gt;          Bar* bar;&lt;br /&gt;&lt;arquivo2.h&gt;}&lt;br /&gt;&lt;/arquivo2.h&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:arial;" &gt;bart.h&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;#include&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);"&gt; &lt;/span&gt;"foo.h"&lt;br /&gt;class Bar {&lt;br /&gt;&lt;arquivo2.h&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;     public:&lt;br /&gt;&lt;/span&gt;&lt;/arquivo2.h&gt;          Foo* foo;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Note que na classe Foo precisamos incluir a classe Bar e vice-e-versa. Porém, se tentarmos compilar esse código, obteremos um erro de compilação.&lt;br /&gt;O C++, porém nos dá uma ferramenta para acabar com esse problema: o uso de forward declarations. Como o próprio nome já diz, a idéia é anteciparmos a declaração de uma classe a ser usada, porém sem incluir o arquivo header propriamente dito. Vejamos:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:arial;" &gt;arquivo1.h:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;#include&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);"&gt; &lt;/span&gt;"bar.h"&lt;br /&gt;class Bar;  &lt;span style="font-style: italic;"&gt;//Forward declaration da classe Bar&lt;/span&gt;&lt;br /&gt;class Foo {&lt;br /&gt;&lt;arquivo2.h&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;     public: &lt;span style="color: rgb(51, 0, 51);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/arquivo2.h&gt;          Bar* bar;&lt;br /&gt;&lt;arquivo2.h&gt;}&lt;/arquivo2.h&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:arial;" &gt;arquivo2.h:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;#include&lt;/span&gt;&lt;span style="color: rgb(51, 0, 153);"&gt; &lt;/span&gt;"foo.h"&lt;br /&gt;class For; &lt;span style="font-style: italic;"&gt; //Forward declaration da classe Foo&lt;/span&gt;&lt;br /&gt;class Bar {&lt;br /&gt;&lt;arquivo2.h&gt;&lt;span style="font-weight: bold; color: rgb(51, 0, 153);"&gt;     public:&lt;br /&gt;&lt;/span&gt;&lt;/arquivo2.h&gt;          Foo* foo;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Isso resolve o problema das referências circulares. Agora só é dar o include dos arquivo headers dentro do arquivo .cxx, onde os métodos foram implemetados. Esse é o segredo: include só nos .cxx, dentro do .h usamos forward declaration para a declaração de classes interdependentes.&lt;br /&gt;&lt;br /&gt;Por enquanto é só. Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-1026609499024196978?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/1026609499024196978/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=1026609499024196978' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1026609499024196978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1026609499024196978'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/08/referncia-circular-e-forward.html' title='Referência circular e forward declarations no C++'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-911356711129626702</id><published>2007-08-16T20:57:00.000-03:00</published><updated>2007-08-16T21:11:16.287-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Manipulando variáveis de ambiente no Linux</title><content type='html'>Programar no Linux nos dá liberdade para fazer algumas coisas bem legais. Por exemplo, existem funções já implementadas que nos permitem trabalhar com variáveis de ambiente do Linux. Vou falar sobre duas delas, que são setenv e getenv, ambas presentes em stdlib.h.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;char* getenv (const char *name) &lt;/b&gt;&lt;/code&gt;&lt;br /&gt;A função getenv pega como parâmtero o identificador de uma variável de ambiente e retorna o seu valor. Por exemplo&lt;br /&gt;&lt;code&gt;getenv ("PWD")&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;int setenv (const char *name, const char *value, int overwrite)&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;Já a função setenv define uma variável de ambiente. Os dois primeiros parâmetros correspondem ao nome e ao valor da variável, respectivamente. Se a variável não existir, ela será então criada. Se já existir o terceiro parâmetro será testado. Se for zero, o valor da variável não será atualizado. Caso seja maior que zero, o valor da variável será alterado para value.&lt;br /&gt;Por exemplo&lt;br /&gt;&lt;code&gt;setenv("FOO","BAR",1)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Não esqueçam de dar o include em stdlib.h! &lt;br /&gt;&lt;br /&gt;Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-911356711129626702?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/911356711129626702/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=911356711129626702' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/911356711129626702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/911356711129626702'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/08/manipulando-variveis-de-ambiente-no.html' title='Manipulando variáveis de ambiente no Linux'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6232480307528913449</id><published>2007-06-12T22:09:00.000-03:00</published><updated>2007-06-12T22:12:51.951-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engenharia de software'/><title type='text'>Modelo de documento de especificação de requisitos</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;br /&gt;Esse é modelo de documento de requisitos muito completo que encontrei. Segue o link. O texto está em inglês e contempla as principais seções de um documento de requisitos. Vale a pena conferir:&lt;br /&gt;&lt;br /&gt;www.processimpact.com/process_assets/srs_template.doc&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-6232480307528913449?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6232480307528913449/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6232480307528913449' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6232480307528913449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6232480307528913449'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/06/modelo-de-documento-de-especificao-de.html' title='Modelo de documento de especificação de requisitos'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6615226352016809505</id><published>2007-06-03T13:33:00.000-03:00</published><updated>2007-06-03T13:49:26.524-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Sistema de Login com PHP orientado a objetos</title><content type='html'>Olá a todos. Peço desculpas pelo tempo sem postagens. Ultimamente tem sido muito corrido para mim. Por isso gostaria de aproveitar a oportunidade para abrir esse espaço a todos os que gostariam de contribuir com o blog com tutoriais e artigos. &lt;br /&gt;&lt;br /&gt;Desta vez vamos desenvolver um sistema de autenticação com PHP usando orientação a objetos. Vamos precisar de três arquivos: um arquivo para conter a classe Usuário, outro para realizar a autenticação e fazer o redirecionamento e uma página HTML que vai conter o formulário. Pois bem, mãos à obra.&lt;br /&gt;&lt;br /&gt;A classe de usuário. Essa classe vai ficar no arquivo usuario.php&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php&lt;br /&gt; class Usuario {&lt;br /&gt;  var $nome, $senha;&lt;br /&gt;&lt;br /&gt;  function getNome() {&lt;br /&gt;   return this-&gt;nome;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function Usuario($nome,$senha) {&lt;br /&gt;   $this-&gt;nome  = $nome;&lt;br /&gt;   //A senha será submetida a um hash, que&lt;br /&gt; é uma criptografia sem volta.&lt;br /&gt;   $this-&gt;senha = md5($senha);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function autentica() {&lt;br /&gt;   //Aqui estara o metodo de acesso ao banco.&lt;br /&gt;   $nome  = $this-&gt;nome;&lt;br /&gt;   $senha = $this-&gt;senha;&lt;br /&gt;   $query = "SELECT nome, senha FROM usuarios WHERE nome=$nome &lt;br /&gt;AND senha=$senha";&lt;br /&gt;   $resultados = mysql_query($query) or die(mysql_error();&lt;br /&gt;   if (mysql_num_rows($resultados)&gt;0) {&lt;br /&gt;    $this-&gt;geraSessao($this);&lt;br /&gt;    return true;&lt;br /&gt;   }&lt;br /&gt;   else{&lt;br /&gt;    return false;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function geraSessao($usuario) {&lt;br /&gt;   session_start();&lt;br /&gt;   $_SESSION['usuario'] = $usuario;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A página HTML:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; HTML&gt;&lt;br /&gt; &lt; HEAD&gt;&lt;br /&gt;  &lt; TITLE&gt;Login&lt; /TITLE&gt;&lt;br /&gt; &lt; /HEAD&gt;&lt;br /&gt;&lt;br /&gt; &lt; BODY&gt;&lt;br /&gt; &lt; form action="autentica.php" method="post"&gt;&lt;br /&gt;  &lt; input type="text" name="nome" /&gt;&lt;br /&gt;  &lt; input type="password" name="senha" /&gt;&lt;br /&gt; &lt; /form&gt;&lt;br /&gt; &lt; /BODY&gt;&lt;br /&gt;&lt; /HTML&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A página que vai fazer a autenticação dos dados vindos da página HTML:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php&lt;br /&gt; include("usuario.php");&lt;br /&gt; $nome = $_POST["nome"];&lt;br /&gt; $senha = $_POST["senha"];&lt;br /&gt; var usuario = new Usuario($nome,$senha);&lt;br /&gt; if (usuario-&gt;autentica()) {&lt;br /&gt;  header("location:principal.php");&lt;br /&gt; }&lt;br /&gt; else {&lt;br /&gt;  header("location:login.php");&lt;br /&gt; }&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bom pessoal, esta é uma idéia de um sistema de autenticação. Hábitos de segurança como gravar os dados de senha no banco como um hash são importantes e devem ser usados. Postem dúvidas, sugestões e melhorias para o código. Não testei o sistema. É apenas um tutorial didático, mas de qualquer forma, não custa estudar e testar. No caso de acessar o banco, não esqueçam de escrever um método de conexão. &lt;br /&gt;&lt;br /&gt;É isso aí pessoal. Até a próxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-6615226352016809505?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6615226352016809505/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6615226352016809505' title='23 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6615226352016809505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6615226352016809505'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/06/sistema-de-login-com-php-orientado.html' title='Sistema de Login com PHP orientado a objetos'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>23</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-7645105433698788834</id><published>2007-05-30T20:09:00.000-03:00</published><updated>2007-05-30T20:20:18.327-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Tutorial Ruby: Hello World</title><content type='html'>Comecei a dar uma olhada em Ruby. Mais precisamente, descobri um livro muito bom (em inglês) no site www.infoq.com. &lt;br /&gt;&lt;br /&gt;Ruby é uma linguagem open source, multi-paradigmas e muito leve. É multiparadigmas porque se pode programar utilizando orientação a objetos, programação funcional ou a boa e velha programação imperativa. A linguagem em si é totalmente orientada a objetos. Ao contrário do Java, por exemplo, não existem tipos primitivos, mas sim classes básicas que constituem os blocos fundamentais para a construção do programa. &lt;br /&gt;&lt;br /&gt;Antes de sair programando você vai precisar baixar o Ruby. Você pode encontrá-lo no site http://www.ruby-lang.org/en/. &lt;br /&gt;&lt;br /&gt;No nosso Hello World vamos pedir o nome do usuário e em seguida faremos uma saudação personalizada.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;puts("Qual eh o seu nome?")&lt;br /&gt;nome = gets()&lt;br /&gt;puts("Ola "+ nome)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A função puts escreve algo na tela e a gets lê do teclado. A concatenação de strings é feita com o operador +. Como se pode ver, não há declaração de tipos em Ruby. Uma variável pode assumir valores de diferentes tipos no decorrer do programa.&lt;br /&gt;&lt;br /&gt;Por enquanto ficamos no Hello World. Em breve trarei coisas mais interessantes sobre usando Ruby. Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-7645105433698788834?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/7645105433698788834/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=7645105433698788834' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/7645105433698788834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/7645105433698788834'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/tutorial-ruby-hello-world.html' title='Tutorial Ruby: Hello World'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-3289902844206537508</id><published>2007-05-29T16:56:00.000-03:00</published><updated>2007-05-29T17:03:41.481-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmos'/><title type='text'>Bubble sort, Insertion sort e Selection sort</title><content type='html'>Os três algoritmos mais básicos de ordenação. A implementação é em Java.&lt;br /&gt;&lt;br /&gt;O bubble sort consiste em prover, em cada passo i, os menores elementos para o início do vetor, de tal forma que o i-ésimo menor estará na sua posição correta.&lt;br /&gt;&lt;br /&gt;O insertion sort consiste em manter os i primeiros elementos ordenados entre si. No passo i, insere o i+1 elemento na posição correta entre os i primeiros.&lt;br /&gt;&lt;br /&gt;Já o selection sort consiste em, a cada passo i, colocar na i-ésima posição o menor elemento entre os n-i elementos restantes.&lt;br /&gt;&lt;br /&gt;Abaixo seguem as implementações:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; public void insertionSort(int a[]) {&lt;br /&gt;  for (int i=1;i&lt; a.length;i++) {&lt;br /&gt;   for (int j=i;j&gt;0;j--){&lt;br /&gt;    if (a[j]&lt; a[j-1]) {&lt;br /&gt;     int temp = a[j];&lt;br /&gt;     a[j] = a[j-1];&lt;br /&gt;     a[j-1] = temp;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;     break;&lt;br /&gt;    }&lt;br /&gt;   } &lt;br /&gt;  } &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; public void selectionSort(int a[]) {&lt;br /&gt;  for (int i=0;i&lt; a.length-1;i++){&lt;br /&gt;   int menor = i;&lt;br /&gt;   for (int j=i+1;j&lt; a.length;j++) {&lt;br /&gt;    if (a[j]&lt; a[menor]){&lt;br /&gt;     menor = j;&lt;br /&gt;    } &lt;br /&gt;   }&lt;br /&gt;   int temp = a[menor];&lt;br /&gt;   a[menor] = a[i];&lt;br /&gt;   a[i] = temp;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; public void bubbleSort(int[] a) {&lt;br /&gt;  for (int i=0;i&lt; a.length;i++) {&lt;br /&gt;   for (int j=a.length-1;j&gt;i;j--) {&lt;br /&gt;    if (a[j]&lt; a[j-1]) {&lt;br /&gt;     int temp = a[j];&lt;br /&gt;     a[j]= a[j-1];&lt;br /&gt;     a[j-1] = temp;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Até a próxima! Esperem que métodos de quick sort, merge sort e heap sort ainda virão.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-3289902844206537508?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/3289902844206537508/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=3289902844206537508' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/3289902844206537508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/3289902844206537508'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/bubble-sort-insertion-sort-e-selection.html' title='Bubble sort, Insertion sort e Selection sort'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-4334847550840869787</id><published>2007-05-26T23:23:00.000-03:00</published><updated>2007-05-26T23:28:48.983-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Software tem que acompanhar a Lei de Moore</title><content type='html'>Segundo Moore, os processadores dobrariam sua capacidade a cada 18 meses. Isso realmente tem acontecido desde a profecia, em 70. Porém o hardware chegou a um ponto em que não é mais viável o aumento da velocidade em um único chip. A estratégia agora é otimizar o paralelismo em busca de ganho de desempenho. Logo, para que o software acompanhe o nível de evolução do hardware, é necessário dobrar o poder de processamento  paralelo dos softwares a cada 18 meses. Tarefa difícil?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Até a próxima!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fonte : &lt;a href="http://www.osnews.com/story.php/17983/Intel-Software-Needs-to-Heed-Moores-Law"&gt;OS News&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-4334847550840869787?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/4334847550840869787/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=4334847550840869787' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/4334847550840869787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/4334847550840869787'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/software-tem-que-acompanhar-lei-de.html' title='Software tem que acompanhar a Lei de Moore'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-2566391662882629272</id><published>2007-05-26T08:20:00.000-03:00</published><updated>2007-05-26T08:30:50.002-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Carrinho de Compras com PHP orientado a objetos</title><content type='html'>Olá a todos! Desta vez vamos criar um carrinho de compras em PHP orientado a objetos. Escolhi OO pois deixa o código mais claro e mais fácil de dar manutenção. Além disso, para aqueles que ainda não conhecem a orientação a objetos, sugiro fortemente que busquem aprender. Podem começar então por esse tutorial.&lt;br /&gt;&lt;br /&gt;Esta não é um versão completamente funcional, mas já é uma base para o carrinho de compras de verdade.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php&lt;br /&gt;&lt;br /&gt; class Produto {&lt;br /&gt;  &lt;br /&gt;  var $codigo;&lt;br /&gt;  var $descricao;&lt;br /&gt;  var $preco;&lt;br /&gt;  var $quantidade;&lt;br /&gt;&lt;br /&gt;  function Produto($codigo,$descricao,$preco,$quantidade) {&lt;br /&gt;   $this-&gt;codigo       = $codigo;&lt;br /&gt;   $this-&gt;descricao    = $descricao;&lt;br /&gt;   $this-&gt;preco        = $preco;&lt;br /&gt;   $this-&gt;quantidade   = $estoque;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function getCodigo() {&lt;br /&gt;   return this-&gt;codigo;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function getQuantidade() {&lt;br /&gt;   return this-&gt;getQuantidade;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function setQuantidade($quantidade) {&lt;br /&gt;   this-&gt;quantidade = $quantidade;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function getValor() {&lt;br /&gt;   return this-&gt;preco * this-&gt;quantidade;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; class CarrinhoDeCompras() {&lt;br /&gt; &lt;br /&gt;  var $carrinho;&lt;br /&gt;&lt;br /&gt;  //Coloca o novo Carrinho de Compras na sessão&lt;br /&gt;  function CarrinhoDeCompras() {&lt;br /&gt;   session_start();&lt;br /&gt;   $_SESSION["carrinho"] = new Array();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  //Atualiza os dados da sessão&lt;br /&gt;  function atualizaDados() {&lt;br /&gt;   $_SESSION["carrinho"] = $this-&gt;carrinho;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  //Pega os dados da sessão&lt;br /&gt;  function getCarrinho() {&lt;br /&gt;   $this-&gt;carrinho = $_SESSION["carrinho"];&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  //Adiciona um item no carrinho de compras&lt;br /&gt;  function adicionaItem($produto) {&lt;br /&gt;   //Pega os dados atualizados da sessão&lt;br /&gt;   $this-&gt;getCarrinho();&lt;br /&gt;&lt;br /&gt;   $codigo = $produto-&gt;getCodigo();&lt;br /&gt;   //Seo produto ainda não está no carrinho adicione&lt;br /&gt;   if ($this-&gt;arrinho[codigo] != null) {&lt;br /&gt;    $this-&gt;carrinho[codigo] = $produto;&lt;br /&gt;   }&lt;br /&gt;   //Caso contrário, apenas incremente a quantidade do  produto já existente&lt;br /&gt;   else {&lt;br /&gt;    $quantidade = $produto-&gt;getQuantidade() + &lt;br /&gt;                   $carrinho[$codigo]-&gt;getQuantidade();&lt;br /&gt;    $this-&gt;carrinho[$codigo]-&gt;setQuantidade($quantidade);&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   //Atualiza os dados da sessão&lt;br /&gt;   $this-&gt;atualizaDados();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;  //Remove um item do carrinho de compras&lt;br /&gt;  function removeItem($produto) {&lt;br /&gt;   $this-&gt;getCarrinho();&lt;br /&gt;&lt;br /&gt;   $codigo = $produto-&gt;getCodigo();&lt;br /&gt;   unset($this-&gt;carrinho[codigo]);&lt;br /&gt;   &lt;br /&gt;   $this-&gt;atualizaDados();&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  //Pega o valor total das compras do usuário&lt;br /&gt;  function getTotal() {&lt;br /&gt;   $this-&gt;getCarrinho();   &lt;br /&gt;   $total = 0;&lt;br /&gt;&lt;br /&gt;   foreach($this-&gt;carrinho as $produto) {&lt;br /&gt;    $total += $produto-&gt;getValor();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return $total;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;? &gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;É isso pessoal. Para aqueles que gostaram, sugiro a adição de novas funcionalidades como controle do estoque dos produtos que saem, novas classes que gerenciem formas de pagamento, etc. Quando tiverem com a loja virtual funcionando me avisem para eu visitar =D.&lt;br /&gt;&lt;br /&gt;Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-2566391662882629272?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/2566391662882629272/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=2566391662882629272' title='15 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/2566391662882629272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/2566391662882629272'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/carrinho-de-compras-com-php-orientado.html' title='Carrinho de Compras com PHP orientado a objetos'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-1472149523733955745</id><published>2007-05-24T19:41:00.000-03:00</published><updated>2007-05-24T19:42:23.014-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engenharia de software'/><title type='text'>Boas práticas das metodologias ágeis</title><content type='html'>Muito se tem discutido a respeito das metodologias ágeis de desenvolvimento. A idéia é dar mais ênfase à prática que à teoria, ao sistema que à documentação. Porém em tempos onde a busca de certificações como CMM e MPSBR é grande, metodologias como XP, por exemplo, ainda têm que se adequar para poder competir com os métodos tradicionais nas grandes organizações. Porém, apesar de não integralmente, essas empresas podem adequar algumas das melhores práticas das metodologias ágeis em suas equipes.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt; Programação em Pares (Pair Programming):&lt;/span&gt; Nesse tipo de desenvolvimento há dois programadores por micro. Alguns podem dizer que essa é uma solução custosa do ponto de vista econômico, mas o fato é o contrário. Dois desenvolvedores juntos significa um código melhor escrito, algoritmos mais eficientes, menor possibilidade de bugs, programa mais manutenível. Além disso, evita-se um problema que ainda ocorre muito: um desenvolvedor responsável por um determinado módulo do sistema sai da equipe. É o suficiente para parar o projeto, já que só ele sabia sobre aquela parte. Com pair programming isso muda, ainda mais com sistemas de revezamento entre duplas, que também ocorre em XP.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Cliente faz parte da equipe: &lt;/span&gt;Geralmente o desenvolvedor tende a ver o cliente como inimigo. Para ele o usuário é aquele que nunca sabe o que quer, que sempre pede coisas diferentes e que provoca mudanças em algo que já estava pronto e funcional. Por isso há a tendência de a equipe de desenvolvimento acabar se isolando do seu cliente, que por sinal é o maior interessado no projeto. Para os métodos ágeis, o cliente é um membro da equipe. Ele participa das reuniões,  escreve estórias (requisitos) e faz os testes de validação. Quanto mais próximo o cliente estiver, maiores são as chances de se entregar um produto de qualidade e útil para as necessidades do usuário final.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;O desenvolvedor estima seus próprios prazos: &lt;/span&gt;Na divisão de tarefas é o desenvolvedor quem estima os prazos para a conclusão de determinada tarefa. O gerente apenas administra o processo de delegaçaõ das atividades. Caso o prazo estimado seja muito folgado, ou seja, o desenvolvedor terminou antes do prazo, então na próxima divisão de atividades são distribuídas um número maior de tarefas. Caso o tempo estimado seja muito curto, então o número de tarefas será diminuído. É o conceito de Yesterday's weather (tempo de ontem). O tempo hoje provavelmente será parecido com o de ontem. Se ontem choveu, hoje também choverá. Se sobrou tempo antes, então agora também sobrará, e por isso o número de tarefas aumentará para compensar isso.&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As metodologias ágeis têm propostas bastante interessantes, apesar de necessitarem ainda de ajustes para serem totalmente aceitas pelo mercado. Como tudo na vida, cabe-nos avaliar prós e contras de cada lado e tentarmos criar uma proposta ótima.&lt;br /&gt;&lt;br /&gt;Fico por aqui. Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-1472149523733955745?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/1472149523733955745/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=1472149523733955745' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1472149523733955745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1472149523733955745'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/boas-prticas-das-metodologias-geis.html' title='Boas práticas das metodologias ágeis'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6577774725536723574</id><published>2007-05-24T12:55:00.000-03:00</published><updated>2007-05-24T13:48:34.699-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mercado de Trabalho'/><title type='text'>Mercado carente de desenvolvedores Cobol</title><content type='html'>A maioria dos visitantes aqui não devem ser da época áurea do Cobol. Muitos o comparam com o que o Java é hoje. Por sua robustez e grande confiabilidade para aplicações comerciais, o Cobol ainda persiste como base de muitos dos sistemas, especialmente financeiros. Com o surgimento de outras linguagens, o Cobol foi sendo deixado de lado no desenvolvimento de sistemas novos, mas ainda é grande a demanda de bons profissionais para prestar manutenções em sistemas legados. Como geralmente o especialista em Cobol já tem mais de 15 anos de experiência na área, os salários podem chegar até os 12 mil. Fique atento, pois o mercado está carente desses profissionais.&lt;br /&gt;&lt;br /&gt;Existem tecnologias que passam como nuvens, mas com certeza esse não é o caso do Cobol. O ideal é ser um profissional com visão abrangente, para ser fácil se adequar às mudanças e transformações do mercado.&lt;br /&gt;&lt;br /&gt;Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-6577774725536723574?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6577774725536723574/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6577774725536723574' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6577774725536723574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6577774725536723574'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/mercado-carente-em-desenvolvedores.html' title='Mercado carente de desenvolvedores Cobol'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6525210974074985151</id><published>2007-05-23T12:36:00.001-03:00</published><updated>2007-05-23T12:47:57.997-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Livre'/><title type='text'>Comunidade Linux reage a denúncias da Microsoft</title><content type='html'>Após as declarações de possíveis e supostas quebras de patentes em vários componentes livres (kernel do linux, openoffice, entre outros), patrocinadas pela Microsoft, a comunidade linux se uniu em um protesto irônico e no mínimo inusitado.&lt;br /&gt;&lt;br /&gt;Criaram um abaixo assinado num wiki público com nomes de pessoas (usuários, desenvolvedores open source e até advogados) pedindo para serem processadas pela Microsoft. Isso mesmo! Comentários do tipo &lt;span style="font-style: italic;"&gt;"Se você gostaria de solicitar uma visita de Brad Smith, chefe de litígio da Microsoft, por favor fique à vontade para acrescentar seu nome aqui"&lt;/span&gt;permeiam a página.&lt;br /&gt;&lt;br /&gt;O protesto, que é encabeçado pela Digital Tipping Point, um projeto de vídeo open source, demonstra a revolta da comunidade livre contra as ameaças sofridas nas últimas semanas. A lista já contava com 250 assinaturas até essa manhã, e com comentários inflamados coloca a Microsoft  contra a parede, exigindo explicações sobre as denúncias de infrações nos direitos de patentes da empresa.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Fonte: &lt;a href="http://idgnow.uol.com.br/computacao_pessoal/2007/05/22/idgnoticia.2007-05-22.2339840008"&gt;http://idgnow.uol.com.br/computacao_pessoal/2007/05/22/idgnoticia.2007-05-22.2339840008&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/2071137246436930892-6525210974074985151?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6525210974074985151/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6525210974074985151' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6525210974074985151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6525210974074985151'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/comunidade-linux-reage-denncias-da.html' title='Comunidade Linux reage a denúncias da Microsoft'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-4728225676724400970</id><published>2007-05-22T21:45:00.000-03:00</published><updated>2007-05-23T07:50:17.936-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engenharia de software'/><title type='text'>Análise de Requisitos: Funcionais x Não Funcionais</title><content type='html'>A especificação de requisitos é a tarefa mais importante na fase de análise de um sistema. Requisitos mal especificados produzem dor de cabeça, retrabalho e atrasos no projeto. Aqui vamos ver os principais conceitos relativos aos tipos de requisitos de um sistema.&lt;br /&gt;&lt;br /&gt;Os requisitos, de modo geral, pordem ser classificados em dois grandes grupos: os requisitos funcionais e os não funcionais.&lt;br /&gt;&lt;br /&gt;O requisitos funcionais são aqueles que descrevem o comportamento do sistema, suas ações para cada entrada, ou seja, é aquilo que descreve &lt;span style="font-weight: bold;"&gt;o que&lt;/span&gt; tem que ser feito pelo sistema. São o cérebro do projeto, já que descrevem as funcionalidades que o sistema deve dispor.&lt;br /&gt;&lt;br /&gt;Os requisitos não funcionais são aqueles que expressam &lt;span style="font-weight: bold;"&gt;como &lt;/span&gt;deve ser feito (não confundir requisitos não funcionais com design). Em geral se relacionam com padrões de qualidade como confiabilidade, performance, robustez, etc. São muito importantes, pois definem se o sistema será eficiente para a tarefa que se propõe a fazer ou não. Um sistema ineficiente certamente não será usado. Neles também são apresentados restrições e especificações de uso para os requisitos funcionais.&lt;br /&gt;&lt;br /&gt;Além desses dois, existem ainda os requisitos de interface, que como o nome já diz especifica as funcionalidades inerentes a interface do sistema com usuário.&lt;br /&gt;&lt;br /&gt;Muitas vezes é difícil discernir entre quais requisitos são funcionais e quais não são. Essa pática vem com o tempo e com a experiência e, por isso, para quem não trabalha diretamente com análise, é sempre  bom exercitar. Vejamos o exemplo:&lt;br /&gt;&lt;br /&gt;Requisito:&lt;br /&gt;O sistema deve prover um grid na tela, que permitirá a visualização de imagens. Esse grid poderá ser ativado ou desativado através do clique em um botão. O grid terá uma régua, cuja  escala poderá estar tanto em centímetros como em polegadas, que ajudará no redimensionamento das imagens.&lt;br /&gt;&lt;br /&gt;Os requisitos não foram especificados da maneira correta no exemplo acima. É o que chamamos de aglutinação de requisitos. Temos então que seprarar requisitos funcionais, não funcionais e de interface. No nosso caso, o maneira correta seria:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Funcional: O sistema deve prover um grid para a visualização de imagens. Este grid poderia ser ativado ou desativado.&lt;/li&gt;&lt;li&gt;Não funcional: A escala do grid poderá estar tanto em centímetros com em polegadas.&lt;/li&gt;&lt;li&gt;Interface: Deve haver um botão responsável por habilitar e desabilitar o grid.&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;O processo de análise é uma das fases mais complexas do projeto de software. Vamos ainda continuar falando sobre o processo de elicitação de requisitos e de análise em geral em próximas ocasiões.&lt;br /&gt;&lt;br /&gt;Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-4728225676724400970?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/4728225676724400970/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=4728225676724400970' title='14 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/4728225676724400970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/4728225676724400970'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/anlise-de-requisitos-funcionais-x-no.html' title='Análise de Requisitos: Funcionais x Não Funcionais'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-3760013777948585914</id><published>2007-05-20T15:55:00.000-03:00</published><updated>2007-05-20T16:15:09.975-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engenharia de software'/><title type='text'>Estimativa de prazos e custos com pontos por função</title><content type='html'>A difícil tarefa de se estimar prazos e custos no desenvolvimento de software pode ser facilitado com o uso de ferramentas matemáticas como a análise de pontos por função. A partir de dados como número de interfaces, entradas e saídas de usuários, linguagens utilizadas, grau de generalidade do projeto, pode-se chegar a valores aproximados de custos e tempo para um projeto de software.&lt;br /&gt;&lt;br /&gt;Alguns links com planilhas e mais informações sobre análise de pontos por função:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="www.engin.umd.umich.edu/CIS/tinytools/cis375/f00/metrics/MetricsDatabase.xls"&gt;Planilha com análise AFP de projetos (em inglês)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bfpug.com.br/"&gt;Grupo Brasileiro de Usuários de Pontos por Função&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-3760013777948585914?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/3760013777948585914/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=3760013777948585914' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/3760013777948585914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/3760013777948585914'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/estimativa-de-prazos-e-custos-com.html' title='Estimativa de prazos e custos com pontos por função'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-865086786944937991</id><published>2007-05-19T12:58:00.000-03:00</published><updated>2007-05-19T13:09:52.880-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>Validação de formulários via Javascript + DOM</title><content type='html'>Olá pessoal.&lt;br /&gt;&lt;br /&gt;Decidi estudar uma nova forma de validação de campos obrigatórios em formulários. Em todo lugar vemos grandes funções que fazem o trabalho de maneira repetida e braçal. Usando javascript e DOM cheguei a uma função genérica, que recebe um formulário como parâmetro e percorre campo a campo testando se ele é obrigatório ou não. Mas como a função vai saber se o campo é obrigatório?&lt;br /&gt;&lt;br /&gt;O HTML é uma linguagem de marcação, com tags já definidas (input , por exemplo) e com atributos definidos para essas tags. Pensei então: por quê não adicionar mais um atributo a essas tags. Esse atributo conteria a informação de obrigatoriedade do campo, e usando DOM, acessaríamos o valor desse novo atributo.&lt;br /&gt;&lt;br /&gt;Veja:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&lt; html&gt;&lt;br /&gt; &lt; head&gt;&lt;br /&gt;  &lt; title&gt;Validação Genérica via DOM&lt; /title&gt;&lt;br /&gt;&lt; script language="javascript"&gt;&lt;br /&gt; &lt;br /&gt; function valida(form) {&lt;br /&gt;  var elementos = form.elements;&lt;br /&gt;  for (var i=0; i&lt; elementos.length; i++){&lt;br /&gt;   if (elementos[i].getAttribute("type")=="text") {&lt;br /&gt;    if (elementos[i].getAttribute("obrigatorio")=="sim") {&lt;br /&gt;     if (elementos[i].value=="") {&lt;br /&gt;      alert("O campo "+elementos[i].getAttribute("name")+&lt;br /&gt;            " é obrigatorio.");&lt;br /&gt;      return false;&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt; /script&gt;&lt;br /&gt; &lt; /head&gt;&lt;br /&gt;&lt;br /&gt; &lt; body&gt;&lt;br /&gt;  &lt; form onSubmit="return valida(this);"&gt;&lt;br /&gt; &lt; input type="text" name="Nome" obrigatorio="sim" /&gt;&lt; br/&gt;&lt;br /&gt; &lt; input type="text" name="E-mail"  obrigatorio="nao"  /&gt;&lt; br/&gt;&lt;br /&gt; &lt; input type="submit" name="submit" /&gt;&lt;br /&gt;  &lt; /form&gt;&lt;br /&gt; &lt; /body&gt;&lt;br /&gt;&lt; /html&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Por equanto é só. Até a próxima e qualquer dúvida quanto ao código, podem comentar.&lt;br /&gt;E não esqueçam de tirar os espaços das tags na hora de testar!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-865086786944937991?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/865086786944937991/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=865086786944937991' title='7 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/865086786944937991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/865086786944937991'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/validao-de-formulrios-via-javascript.html' title='Validação de formulários via Javascript + DOM'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-1567133645217155274</id><published>2007-05-19T11:34:00.000-03:00</published><updated>2007-05-19T11:39:13.860-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engenharia de software'/><title type='text'>Reusabilidade com Orientação a Objetos</title><content type='html'>Um conceito muito importante no processo de desenvolvimento de software é a reusabilidade. Precisamente a reusabilidade de código.&lt;br /&gt;&lt;br /&gt;Antes da disseminação da OO, pouco se falava nessa questão. Os softwares costumavam ser muito acoplados e pouco coesos, tornando a manutenção uma tarefa penosa. As funções estavam espalhadas por todo o código de maneira desordenada e, muitas vezes, repetida.&lt;br /&gt;&lt;br /&gt;O paradigma da orientação a objetos vem justamente solucionar os principais problemas da programação estruturada.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Objetos&lt;/span&gt;: São a base da programação OO e já têm algum nível de reusabilidade. Têm uma interface com o meio externo e através dela acessamos seus atributos.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Herança&lt;/span&gt;: Quando utilizamos herança, temos um alto grau de reusabilidade do código. As classes filhas não precisam reimplementar os métodos e atributos já presentes na classe pai. Isso de certa forma é muito bom, já que escrevemos o código apenas uma vez e o utilizamos em contextos diferentes.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Interfaces&lt;/span&gt;: A herança apresenta algumas limitações de uso, e além disso, aumenta o acoplamento do sistema. Como alternativa, temos as interfaces, que propõem um contrato entre as classes que as implementam. Interfaces aumentam a coesão do sistema, além de simularem perfeitamente o uso da herança.&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;O uso da herança e de interfaces deve ser encorajado a fim de se obter o máximo de reuso do código. Além disso elas fornecem as ferramentas necessárias ao &lt;span style="font-weight: bold;"&gt;polimorfismo&lt;/span&gt;, que consiste em referenciar-nos de uma única maneira a objetos de classes diferentes, desde que eles implementem a mesma interface ou herdem uma classe comum. Além desses tópicos, a reusabilidade atinge seu grau mais alto em sistemas OO com o uso de &lt;span style="font-weight: bold;"&gt;frameworks &lt;/span&gt;e &lt;span style="font-weight: bold;"&gt;padrões de projeto&lt;/span&gt;, mas esses são temas para outra oportunidade.&lt;br /&gt;&lt;br /&gt;Por enquanto, ficamos por aqui! Até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-1567133645217155274?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/1567133645217155274/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=1567133645217155274' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1567133645217155274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1567133645217155274'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/reusabilidade-com-orientao-objetos.html' title='Reusabilidade com Orientação a Objetos'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-397897708475053871</id><published>2007-05-17T22:19:00.001-03:00</published><updated>2007-05-17T22:24:27.018-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Tutorial PHP: Mural de Recados</title><content type='html'>Primeiramente vamos estruturar a parte de acesso ao banco de dados e criação de tabelas.&lt;br /&gt;&lt;br /&gt;    * Para conectar a aplicação ao banco, vamos usar um arquivo chamado conecta.php, que conterá informaçãoes como usuário, senha e servidor mysql.&lt;br /&gt;         &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;conecta.php&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php&lt;br /&gt;    $server ="localhost";&lt;br /&gt;    $user="root";&lt;br /&gt;    $password="";&lt;br /&gt;    $dbname="mural_de_recados";&lt;br /&gt;    mysql_connect($server,$user,$password) or die(mysql_error());&lt;br /&gt;    mysql_select_db($dbname) or die(mysql_error());&lt;br /&gt;? &gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    * Para criar o banco, vamos executar esse script uma única vez&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;cria_banco.php&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php&lt;br /&gt;    $server ="localhost";&lt;br /&gt;    $user="root";&lt;br /&gt;    $password="";&lt;br /&gt;    $dbname="mural_de_recados";&lt;br /&gt;    mysql_connect($server,$user,$password) or die(mysql_error());&lt;br /&gt;    $query= "CREATE DATABASE mural_de_recados";&lt;br /&gt;    mysql_query($query) or die (mysql_error());&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    * Para criar a tabela, vamos rodar apenas uma vez o arquivo cria_tabelas.php, que criará a tabela de recados.&lt;br /&gt;&lt;br /&gt;cria_tabelas.php&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;   include("conecta.php");&lt;br /&gt;   $query = "CREATE TABLE recados&lt;br /&gt;                (id int NOT NULL AUTO_INCREMENT,&lt;br /&gt;                 titulo varchar(256),&lt;br /&gt;                 comentario text,&lt;br /&gt;                 email varchar(256),&lt;br /&gt;                 PRIMARY KEY(id))";&lt;br /&gt;   mysql_query($query) or die(mysql_error());&lt;br /&gt;   mysql_close();                                      &lt;br /&gt;? &gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Com a parte do banco já criada, vamos passar pará a página que cadastrará novos posts e listará todos os recados.&lt;br /&gt;&lt;br /&gt;index.php&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; html&gt;&lt;br /&gt;    &lt; head&gt;&lt;br /&gt;        &lt; title&gt;Mural de Recados em PHP&lt;br /&gt;    &lt; /head&gt;&lt;br /&gt;    &lt; body&gt;&lt;br /&gt;        &lt; h1&gt;Mural de Recados&lt; /h1&gt;&lt;br /&gt;        &lt; form method="POST" action="cadastra.php"&gt;&lt;br /&gt;            Titulo: &lt; input type="text" name="titulo" /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;            E-mail: &lt; input type="text" name="email" /&gt;&lt;br/&gt;&lt;br/&gt;           &lt;br /&gt;            Recado: &lt; textarea name="recado"&gt;Deixe seu recado!&lt; /textarea&gt;&lt;br/&gt;&lt;br /&gt;            &lt; input type="submit" /&gt;&lt;/br&gt;           &lt;br /&gt;           &lt;br /&gt;            &lt; h2&gt;Recados Postados: &lt; /h2&gt;&lt;br /&gt;            &lt; ?php&lt;br /&gt;                include("conecta.php");               &lt;br /&gt;                $query = "SELECT * FROM recados ORDER BY id DESC";&lt;br /&gt;                $resultado = mysql_query($query) or die(mysql_error());&lt;br /&gt;                while ($row = mysql_fetch_array($resultado)) {&lt;br /&gt;                    echo "&lt; b&gt;".$row["titulo"]."&lt; /b&gt;";&lt;br /&gt;                    echo "&lt; br/&gt;";&lt;br /&gt;                    echo $row["comentario"];&lt;br /&gt;                    echo "&lt; br/&gt;";               &lt;br /&gt;                    echo "E-mail: &lt; b&gt;".$row["email"]."&lt; /b&gt;";&lt;br /&gt;                    echo "&lt; br/&gt;&lt; br/&gt;";                               &lt;br /&gt;                }&lt;br /&gt;                mysql_close();&lt;br /&gt;            ? &gt;&lt;br /&gt;        &lt; /form&gt;&lt;br /&gt;    &lt; /body&gt;&lt;br /&gt;&lt; /html&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;E finalmente, página responsável por salvar os novos recados:&lt;br /&gt;&lt;br /&gt;cadastra.php&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php&lt;br /&gt;    include("conecta.php");&lt;br /&gt;    $titulo = $_POST['titulo'];&lt;br /&gt;    $email = $_POST['email'];&lt;br /&gt;    $recado = $_POST['recado'];&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    $query = "INSERT INTO recados (titulo,email,comentario) VALUES ('$titulo','$email','$recado')";&lt;br /&gt;    mysql_query($query) or die (mysql_error());&lt;br /&gt;   &lt;br /&gt;    mysql_close();&lt;br /&gt;   &lt;br /&gt;    header("location:index.php")&lt;br /&gt;? &gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bem pessoal, esse foi o primeiro tutorial completo de PHP do Mãozinha. Espero que tenham gostado e aprendido com ele. Ele foi testado e está funcionando certinho. Só mais uma coisa: como o blogger não aceita que postemos tags html e php, eu coloquei um espaço entre os símbolos &lt; e &gt; e as tags. Por exemplo em &lt; html &gt;. Logicamente você devem tirar esses espaços para o programa funcionar. A ordem de execução dos arquivos é:&lt;br /&gt;&lt;br /&gt;   1. cria_banco.php&lt;br /&gt;   2. cria_tabelas.php&lt;br /&gt;   3. index.php&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lembrando que os dois primeiros são apenas executados na primeira vez.&lt;br /&gt;&lt;br /&gt;Falou pessoal e até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-397897708475053871?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/397897708475053871/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=397897708475053871' title='13 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/397897708475053871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/397897708475053871'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/tutorial-php-mural-de-recados.html' title='Tutorial PHP: Mural de Recados'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-2833873283623385842</id><published>2007-05-16T13:09:00.000-03:00</published><updated>2007-05-16T13:22:39.455-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Livre'/><title type='text'>Longhorn... 40 mi de cópias ... Falta mais o quê?</title><content type='html'>A Microsoft anunciou o nome do próximo sistema operacional da empresa, com lançamento previsto para o segundo semestre deste ano. O SO cujo codinome era Longhorn se chamará Windows Server 2008 e consiste na grande aposta da MS para o fim de 2007. &lt;br /&gt;&lt;br /&gt;Junta-se a isso a divulgação dos números em relação às vendas do Vista. De acordo com Gates elas ultrapassaram as 40 mi de cópias, o que, segundo ele, são valores bem satisfatórios. &lt;br /&gt;&lt;br /&gt;Porém apesar de tantos motivos para Bill ter um sono tranqüilo, o crescimento do Software Livre ainda é uma pedra cada vez maior no sapato da empresa. A última cartada foi o anúncio suspeito e mal explicado sobre uma possível quebra de patentes pelo Linux  e OpenOffice. &lt;br /&gt;&lt;br /&gt;O crescimento do software livre é um fato, e de acordo com muitos, um processo irreversível. O desespero está só começando para as gigantes...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-2833873283623385842?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/2833873283623385842/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=2833873283623385842' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/2833873283623385842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/2833873283623385842'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/longhorn-40-mi-de-cpias-falta-mais-o-qu.html' title='Longhorn... 40 mi de cópias ... Falta mais o quê?'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-4189627045233495450</id><published>2007-05-15T13:51:00.000-03:00</published><updated>2007-05-15T14:28:37.321-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Tutorial de PHP - Parte 3: Sessões e Autenticação</title><content type='html'>Olá a todos futuros programadores de PHP!&lt;br /&gt;&lt;br /&gt;Nesta terceira parte do nosso tutorial vamos tratar de dois dos assuntos mais importantes no que se trata de programação web: sessões e autenticação.&lt;br /&gt;&lt;br /&gt;Em todo o lugar vemos telas de login, cadastros e senhas (Às vezes são tantos que não é raro nós trocarmos ou simplesmente esquecermos). Tudo isso para proporcionar segurança, restringir o acesso a determinado conteúdo ou então manter a privacidade e individualidade de acesso a um serviço.&lt;br /&gt;&lt;br /&gt;Veremos que com PHP é bem fácil implementar essas políticas de acesso.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Sessões:&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;Sessões são usadas para guardar dados enquanto a janela do browser estiver aberta. São geralmente usadas para manter dados como nome do usuário, tipo do usuário (se é o administrador ou se é um visitante não cadastrado, por exemplo), entre outros dados importantes. Dica: NUNCA COLOQUE A SENHA NA SESSÃO. VOCÊ SÓ PRECISA DELA PARA AUTENTICAÇÃO!&lt;br /&gt;Para iniciar uma sessão no PHP usamos a função:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; session_start(); &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Se quisermos destruir a sessão (no caso de o usuário ter feito logoff), usamos a função:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; session_destroy(); &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Agora precisamos apenas setar os valores que ficarão na sessão. No PHP os valores são armazenados em um vetor associativo chamado $_SESSION. As associações são feitas com pares chave e valor. Por exemplo, vamos setar o nome do usuário e a permissão dele, e colocar esses dados na seção. Vamos buscar esses dados a partir de um formulário fictício, via POST.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php&lt;br /&gt;    session_start(); //iniciamos a sessão&lt;br /&gt;&lt;br /&gt;    $_SESSION['usuario'] = $_POST['usuario']; //colocamos na sessão o valor do campo usuário vindo do formulário&lt;br /&gt;&lt;br /&gt;    $_SESSION['permissao'] = $_POST['admin']; //da mesma forma setamos suas permissões&lt;br /&gt;&lt;br /&gt;    header("location:pagina_principal.php"); //Redirecionamos para a pagina principal  &lt;br /&gt;&lt;br /&gt;? &gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Com isso feito, podemos acessar as variáveis da sessão de qualquer lugar da nossa aplicação através do vetor $_SESSION.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Autenticação e Segurança:&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Os princípios vistos até agora já lhe dão uma boa base de como funciona o processo de autenticação na web. Agora vou dar umas dicas para otimizar a segurança do seu site, tornando-o mais confiável para os seus visitantes.&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;Nunca passe dados confidenciais via GET. Isso pode parecer meio óbvio para os mais experientes, mas é uma falha comum que pode ser desastrosa. Sempre use o método POST em sistemas de login, por exemplo.&lt;/li&gt;&lt;li&gt;Quando estiver trabalhando com banco de dados, nunca armazene as senhas de seus usuários como elas são. Por exemplo: Digamos que a senha de um usuário seja 123456. NÃO armazene no banco 123456. O PHP dispõe de funções de hash (criptografia sem volta) que promove maior segurança para armazenar dados críticos. Aplicando uma dessas funções em 123456 obteríamos "AssjUBnsuabBHb1513AdsDbkhjNKJokp", por exemplo. Esse valor criptografado seria armazenado no banco, e na hora do login a função de hash seria aplicada à senha digitada e aí então seria feita a comparação entre os dois valores criptografados. Ou seja, nenhum administrador de banco de dados mal intencionado poderá olhar as senhas dos seus usuários.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;É isso pessoal, espero que estejam gostando dos tutoriais desta série. Qualquer dúvida é só comentar.&lt;br /&gt;&lt;br /&gt;&lt;br /&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/2071137246436930892-4189627045233495450?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/4189627045233495450/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=4189627045233495450' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/4189627045233495450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/4189627045233495450'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/tutorial-de-php-parte-3-sesses-e.html' title='Tutorial de PHP - Parte 3: Sessões e Autenticação'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-3651518752027402014</id><published>2007-05-15T13:37:00.000-03:00</published><updated>2007-05-15T13:41:38.572-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Dólar abaixo dos R$ 2 faz preços cairem</title><content type='html'>Hoje o dólar atingiu sua cotação mais baixa dos últimos anos. Rompendo a barreira dos dois reais, a queda  moeda americana proporciona algumas vantagens para o consumidor brasileiro. Nos produtos de informática, por exemplo, é possível perceber uma queda de cerca de 30% em relação ao mesmo período do ano passado. Para aqueles que vêm juntando um dinheirinho, esta pode ser uma boa oportunidade de trocar o computador ou comprar aquele notebook dos sonhos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-3651518752027402014?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/3651518752027402014/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=3651518752027402014' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/3651518752027402014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/3651518752027402014'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/dlar-abaixo-dos-r-2-faz-preos-cairem.html' title='Dólar abaixo dos R$ 2 faz preços cairem'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-803605147016928482</id><published>2007-05-14T21:48:00.000-03:00</published><updated>2007-05-14T21:49:44.384-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Segurança'/><title type='text'>Windows Update pode levar vírus, diz Symantec</title><content type='html'>&lt;p&gt;Uma nota publicada no blog da Symantec diz que o Windows Update pode baixar programas maliciosos.  &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;O post, assinado por Elia Florio, pesquisador da Symantec, afirma que o componente BITS, ou Background Intelligent Transfer Service, do Windows Update, vem sendo usado por cavalos-de-tróia para baixar programas que passam despercebidos por firewalls e outros dispositivos de segurança. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;O serviço BITS é adotado pela Microsoft para oferecer as atualizações do Windows e aplicativos. Segundo a explicação do pesquisador, os cavalos-de-tróia usariam esse recurso porque, por definição, ele é mais confiável para o sistema, já que o BITS faz parte do Windows. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Elia Florio diz que não existe uma correção imediata para o problema. Acrescenta que, para a Microsoft, o Windows Update não é realmente o culpado porque, nesse caso, o cavalo-de-tróia precisa estar instalado no sistema. Florio não aponta nenhum caso concreto em que o BITS já tenha sido usado por programas nocivos.&lt;/p&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Fonte: &lt;/span&gt;&lt;a style="font-style: italic;" href="http://info.abril.com.br/aberto/infonews/052007/14052007-29.shl"&gt;http://info.abril.com.br/aberto/infonews/052007/14052007-29.shl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-803605147016928482?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/803605147016928482/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=803605147016928482' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/803605147016928482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/803605147016928482'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/windows-update-pode-levar-vrus-diz.html' title='Windows Update pode levar vírus, diz Symantec'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-1103474273027928565</id><published>2007-05-14T21:34:00.000-03:00</published><updated>2007-05-14T21:35:55.881-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Livre'/><title type='text'>Microsoft exigirá royalties de usuários e desenvolvedores de Linux</title><content type='html'>A Microsoft quer que usuários de software de código aberto paguem royalties em 235 supostos casos de quebra de patente, segundo notícias.&lt;br /&gt;&lt;br /&gt;Em entrevista à revista Fortune, Brad Smith, conselheiro geral da Microsoft, e Horacio Gutierrez, vice-presidente de propriedade intelectual e licenças da empresa , disseram que softwares livres, incluindo em Linux, violam 235 patentes da companhia. E a Microsoft quer que distribuidores e usuários desses programas comecem a pagar royalties por essas supostas violações.&lt;br /&gt;&lt;br /&gt;“Não é o caso de algumas infrações acidentais. Há um grande número de patentes sendo quebradas”, disse Gutierrez.&lt;br /&gt;&lt;br /&gt;Executivos da empresa em Cingapura não estavam disponíveis imediatamente para comentar o artigo.&lt;br /&gt;&lt;br /&gt;Smith detalhou as supostas violações na entrevista à Fortune, dizendo que o kernel do Linux infringe 42 licenças e a interface do usuário do sistema operacional, outras 65.&lt;br /&gt;&lt;br /&gt;Ele prosseguiu, dizendo que a suíte de aplicações OpenOffice infringe 45 patentes e aplicações de email de código aberto, outras 15; outras aplicações de software de código aberto violam mais 68 patentes, disse Smith.&lt;br /&gt;&lt;br /&gt;A Microsft tem formado uma base de acusações de quebra de patente contra o Linux e softwares de código aberto há algum tempo. A empresa assinou recentemente um acordo com a Novell que indenizaria a companhia contra as acusações da Microsoft envolvendo Linux. Na semana passada, a Dell entrou no acordo, se tornando a primeira vendedora de hardware a fazer isso.&lt;br /&gt;&lt;br /&gt;A Microsoft fez outros acordos com fabricantes de hardware. Em abril, a Samsung e a empresa assinaram um acordo de compartilhamento de licença que inclui uma cláusula que indenizaria a Samsung contra acusações de quebra de patente envolvendo Linux.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Fonte: &lt;/span&gt;&lt;a style="font-style: italic;" href="http://idgnow.uol.com.br/mercado/2007/05/14/idgnoticia.2007-05-14.1193491933"&gt;http://idgnow.uol.com.br/mercado/2007/05/14/idgnoticia.2007-05-14.1193491933&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-1103474273027928565?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/1103474273027928565/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=1103474273027928565' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1103474273027928565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1103474273027928565'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/microsoft-exigir-royalties-de-usurios-e.html' title='Microsoft exigirá royalties de usuários e desenvolvedores de Linux'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6249677613607062618</id><published>2007-05-14T13:13:00.001-03:00</published><updated>2007-05-14T17:23:32.560-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>Máscara de data com Javascript</title><content type='html'>Nesse tutorial vamos implementar uma máscara para campos de datas. Usaremos o formato de data brasileiro (dd/mm/aaaa), mas facilmente você poderá adaptar para outros formatos.&lt;br /&gt;A função que fará a máscara receberá como parâmetro o campo da data e fará a formatação.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; html&gt;&lt;br /&gt;&lt; head&gt;&lt;br /&gt;&lt; title&gt;Mascara de datas &lt; /title&gt;&lt;br /&gt;&lt; script language="JavaScript" type="text/javascript"&gt;&lt;br /&gt;   function mascaraData(campoData){&lt;br /&gt;              var data = campoData.value;&lt;br /&gt;              if (data.length == 2){&lt;br /&gt;                  data = data + '/';&lt;br /&gt;                  document.forms[0].data.value = data;&lt;br /&gt;      return true;              &lt;br /&gt;              }&lt;br /&gt;              if (data.length == 5){&lt;br /&gt;                  data = data + '/';&lt;br /&gt;                  document.forms[0].data.value = data;&lt;br /&gt;                  return true;&lt;br /&gt;              }&lt;br /&gt;         }&lt;br /&gt;&lt; /script&gt;&lt;br /&gt;&lt; /head&gt;&lt;br /&gt;&lt;br /&gt;&lt; body&gt;&lt;br /&gt;&lt;br /&gt;&lt; form&gt;&lt;br /&gt; &lt; input type="text" name="data" OnKeyUp="mascaraData(this);" maxlength="10" / &gt;&lt;br /&gt;&lt; /form&gt;&lt;br /&gt;&lt; /body&gt;&lt;br /&gt;&lt; /html&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/2071137246436930892-6249677613607062618?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6249677613607062618/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6249677613607062618' title='18 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6249677613607062618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6249677613607062618'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/mscara-de-data-com-javascript_14.html' title='Máscara de data com Javascript'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-8690963403777937476</id><published>2007-05-14T07:57:00.000-03:00</published><updated>2007-05-14T08:00:12.595-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Protótipo de livro eletrônico para cegos vence Imagine Cup 2007</title><content type='html'>Por meio de &lt;span style="color: rgb(255, 102, 0);"&gt;radio freqüência&lt;/span&gt; e pinos, projeto &lt;span style="color: rgb(255, 102, 0);"&gt;KnowTouch&lt;/span&gt;, vencedor da Imagine Cup 2007, permite leitura em Braille para &lt;span style="color: rgb(255, 102, 0);"&gt;cegos&lt;/span&gt;.                                                                                           &lt;p&gt;Um projeto que pretende possibilitar que cegos consigam ler dezenas de livros pelo método &lt;span style="color: rgb(255, 102, 0);"&gt;Braille &lt;/span&gt;com preço menor que a média do mercado ganhou a edição 2007 do &lt;span style="color: rgb(255, 102, 0);"&gt;Imagine Cup&lt;/span&gt;, promovido pela Microsoft.&lt;br /&gt;&lt;br /&gt;Chamado de KnowTouch, o projeto usa pinos eletromecânicos que são moldados com os símbolos do alfabeto em Braille conforme as palavras da obra recebidas por rádio freqüência de um servidor que estoca os&lt;span style="color: rgb(255, 102, 0);"&gt; livros eletrônicos&lt;/span&gt;.&lt;/p&gt;&lt;span style="font-style: italic;"&gt;Fonte: &lt;/span&gt;&lt;a style="font-style: italic;" href="http://idgnow.uol.com.br/computacao_pessoal/2007/05/09/idgnoticia.2007-05-09.0647671839"&gt;http://idgnow.uol.com.br/computacao_pessoal/2007/05/09/idgnoticia.2007-05-09.0647671839&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-8690963403777937476?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/8690963403777937476/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=8690963403777937476' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/8690963403777937476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/8690963403777937476'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/prottipo-de-livro-eletrnico-para-cegos.html' title='Protótipo de livro eletrônico para cegos vence Imagine Cup 2007'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-5680314124470308316</id><published>2007-05-10T19:53:00.000-03:00</published><updated>2007-05-10T21:18:54.092-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Tutorial de PHP - Parte 2: Variáves e Formulários</title><content type='html'>Bem pessoal, chegamos à segunda parte do nosso tutorial sobre PHP, onde aprenderemos sobre varáveis, passagem de valores para outras páginas e vamos começar a brincar com formulários também.&lt;br /&gt;&lt;br /&gt;Vamos lá, então.&lt;br /&gt;&lt;br /&gt;As variáveis em PHP são antecedidas pelo símbolo $. Por exemplo:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php     &lt;br /&gt;   $mensagem = "Mensagem é uma string"; &lt;br /&gt;   $inteiro = 1526;&lt;br /&gt;   $float = 3.1416;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Apesar de todas as variáveis terem tipos, nós não precisamos declará-los. O PHP tem tipagem dinâmica, o que permite que uma mesma variável assuma valores de vários tipos durante a execução do programa. Veja:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php     &lt;br /&gt;   $mensagem = "Mensagem é uma string"; &lt;br /&gt;   if ($mensagem=="OK") {&lt;br /&gt;       $mensagem = 10;     &lt;br /&gt;   } &lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Mas as variáveis não serviriam para nada se elas não pudessem ser transmitidas de uma página para outra. Para isso temos dois métodos: GET e POST. No GET, os dados são passados pela própria URL como no exemplo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   www.meusite.com/pagina.php?nome=Jose&amp;idade=25&amp;cidade=Salvador&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Nesse caso temos três variáveis sendo passadas para a página "pagina.php". Primeiro vem a variável nome cujo valor é Jose, depois temos a variável idade cujo valor é 25 e por último temos cidade, cujo valor é Salvador.&lt;br /&gt;&lt;br /&gt;Pelo método POST, os dados são passados por debaixo do pano. É mais seguro e não tem limite de tamanho, porém só pode ser usado com um formulário, que é o próximo tópico do nosso tutorial.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maozinhadaweb.blogspot.com/2007/04/enviando-dados-via-get-e-post-no-php.html"&gt;Veja mais sobre POST e GET nesse tutorial específico.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;O método de se obter informações do usuário numa aplicação web é através de formulários. Só para lembrar como se declara um formulário no HTML, vamos declarar um formulário contendo dois campos de texto. Um para o nome e outro para a idade do usuário, além é claro, de um botão de submit para enviar as informações.&lt;br /&gt;Código do formulario da pagina formulario.html:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; form method="POST" action="pagina.php&gt;&lt;br /&gt;     &lt; input type="text" name="nome"  /&gt;&lt;br /&gt;     &lt; input type="text" name="idade"  /&gt;&lt;br /&gt;     &lt; input type="submit" value="Enviar Dados" /&gt;&lt;br /&gt;&lt; /form&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O atributo method do form define qual método usaremos para transmitir os dados. Nesse caso usaremos o POST, e fica como exercício fazer usando GET (você vai perceber que as variáveis vão na URL). Já o atributo action diz qual página vai receber as variáveis passadas. Nesse caso é a página pagina.php .&lt;br /&gt;&lt;br /&gt;Temos, então que preparar a pagina.php para receber as nossas variaveis:&lt;br /&gt;Código da pagina.php:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt; ?php&lt;br /&gt;     $nome = $_POST["nome"];&lt;br /&gt;     $idade = $_POST["idade"];&lt;br /&gt;     if ($idade&lt;18) {&lt;br /&gt;         echo "Ola ";&lt;br /&gt;         echo $nome;&lt;br /&gt;         echo " você ainda é menor de idade";&lt;br /&gt;     }&lt;br /&gt;     else {&lt;br /&gt;         echo "Ola ";&lt;br /&gt;         echo $nome;&lt;br /&gt;         echo " você já é maior de idade";&lt;br /&gt;    }&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pronto! Com isso você já pode começar a se aprofundar nos formulários usando PHP. Não deixe de pesquisar mais sobre o assunto. Essa é apenas a ponta do iceberg. Você pode fazer muitas coisas legais usando esses conceitos que vimos hoje.&lt;br /&gt;&lt;br /&gt;Até o próximo tutorial da série, no qual trataremos de sessões no PHP e implementaremos um sisteminha de login.&lt;br /&gt;&lt;br /&gt;Até lá e qualquer dúvida é só postar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-5680314124470308316?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/5680314124470308316/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=5680314124470308316' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/5680314124470308316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/5680314124470308316'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/bem-pessoal-chegamos-segunda-parte-do.html' title='Tutorial de PHP - Parte 2: Variáves e Formulários'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-213951293808682518</id><published>2007-05-10T10:31:00.000-03:00</published><updated>2007-05-10T21:19:35.656-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Impressora faz cópias 3D</title><content type='html'>Uma empresa norte-americana anunciou uma nova impressora capaz de fazer &lt;span style="color: rgb(255, 102, 0);"&gt;cópias &lt;/span&gt;3D de objetos a um custo que pode ser usada por usuários domésticos nos próximos quatro anos.&lt;br /&gt;&lt;br /&gt;O anúncio foi feito pela &lt;span style="color: rgb(255, 102, 0);"&gt;Desktop Factory&lt;/span&gt;, uma companhia da IdeaLab, que promete prototipagem rápida de objetos usando plástico.&lt;br /&gt;&lt;br /&gt;O &lt;span style="color: rgb(255, 102, 0);"&gt;primeiro modelo&lt;/span&gt; chegou ao mercado com custo de 5 mil dólares. Em quatro anos, a companhia estima que o custo vai cair para mil dólares, segundo reportagem publicada no jornal norte-americano New York Times.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;Impressoras 3D&lt;/span&gt;, na verdade, não são novidades. Elas são usadas, há tempos, pela indústria para testar peças de vários produtos antes de entrar em produção.&lt;br /&gt;&lt;br /&gt;Mas nenhuma delas, até agora, tinha tamanho e preço capazes de levá-las para dentro das residências, pois a impressora 3D é parecido com uma comum a laser e pode caber em qualquer mesa.&lt;br /&gt;&lt;br /&gt;De acordo com a reportagem do New York Times, as impressoras 3D montam um objeto a partir de uma &lt;span style="color: rgb(255, 102, 0);"&gt;disposição de partículas&lt;/span&gt; de um material, construindo modelos em um &lt;span style="color: rgb(255, 102, 0);"&gt;pilha de camadas&lt;/span&gt; muito finas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Fonte: &lt;/span&gt;&lt;a style="font-style: italic;" href="http://idgnow.uol.com.br/computacao_pessoal/2007/05/09/idgnoticia.2007-05-09.5088659895"&gt;http://idgnow.uol.com.br/computacao_pessoal/2007/05/09/idgnoticia.2007-05-09.5088659895&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-213951293808682518?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/213951293808682518/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=213951293808682518' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/213951293808682518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/213951293808682518'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/impressora-faz-cpias-3d.html' title='Impressora faz cópias 3D'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-4728362286355650329</id><published>2007-05-10T07:48:00.001-03:00</published><updated>2007-05-10T21:20:05.141-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Sun planeja nova versão de Java para celulares</title><content type='html'>&lt;span class="titulo"&gt;&lt;span class="sinopse1"&gt;&lt;span class="autor"&gt;&lt;span class="noticia"&gt;A &lt;span style="color: rgb(255, 102, 0);"&gt;Sun Microsystems&lt;/span&gt; quer reforçar sua atuação na área de mobilidade, para expandir sua participação em celulares capazes de acessar a internet. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;span class="titulo"&gt;&lt;span class="sinopse1"&gt;&lt;span class="autor"&gt;&lt;span class="noticia"&gt;Para tanto, além da linguagem &lt;span style="color: rgb(255, 102, 0);"&gt;Java&lt;/span&gt; convencional, que é utilizada para construir mini-aplicativos e jogos, agora a empresa quer promover a plataforma &lt;span style="color: rgb(255, 102, 0);"&gt;JavaFX&lt;/span&gt;, uma versão melhorada e revistada da plataforma de software voltada para as necessidades da mobilidade e de olho no mercado emergente de smartphones (aparelhos que combinam as funções de celular e computador de mão), segundo noticia o jornal The New York Times.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="titulo"&gt;&lt;span class="sinopse1"&gt;&lt;span class="autor"&gt;&lt;span class="noticia"&gt;A nova plataforma é resultado da recente aquisição da &lt;span style="color: rgb(255, 102, 0);"&gt;SavaJe Technologies&lt;/span&gt;, cuja tecnologia será ‘fundida’ à plataforma existente de Java da Sun e que pode resultar em um novo sistema operacional para celulares, que irá competir com outros sistemas como o Symbian europeu, o Windows Mobile, da Microsoft, o sistema Palm e da Research in Motion (fabricante do Blackberry) e as versões atuais de &lt;span style="color: rgb(255, 102, 0);"&gt;Linux &lt;/span&gt;para celulares, incluindo aí fabricantes como a Motorola, que até comercializam aparelhos com uma versão portátil do sistema de código aberto no Brasil.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="titulo"&gt;&lt;span class="sinopse1"&gt;&lt;span class="autor"&gt;&lt;span class="noticia"&gt;A proposta de valor do JavaFX é a &lt;span style="color: rgb(255, 102, 0);"&gt;facilidade &lt;/span&gt;no acesso ao conteúdo móvel e a empresa deve anunciar uma versão desta plataforma durante a conferência &lt;span style="color: rgb(255, 102, 0);"&gt;JavaOne&lt;/span&gt;, evento anual da empresa para desenvolvedores e que acontece nesta semana nos EUA.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Fonte: &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.estadao.com.br/tecnologia/noticias/2007/mai/08/50.htm"&gt;Estadão&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-4728362286355650329?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/4728362286355650329/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=4728362286355650329' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/4728362286355650329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/4728362286355650329'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/sun-planeja-nova-verso-de-java-para_10.html' title='Sun planeja nova versão de Java para celulares'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-8131177394848696767</id><published>2007-05-09T12:17:00.000-03:00</published><updated>2007-05-10T21:20:36.328-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Dez raças de humanos na web - Escolha a sua!</title><content type='html'>O instituto de pesquisas americano Pew estudou os hábitos de adultos na era da web 2.0 e dividiu seus usuários &lt;span style="font-size:100%;"&gt; em 10 tipos.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; A raça dos adolescentes, que já nasce chipada, não entrou na pesquisa.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Quatro tipos identificados &lt;/span&gt;&lt;span style="font-size:100%;"&gt; pertencem à elite dos consumidores de tecnologia, dois ficam no meio do caminho e quatro estão se colocam no fim da fila.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Mas vamos lá:&lt;/span&gt;&lt;p&gt;&lt;/p&gt;1 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Onívoros &lt;/span&gt;&lt;span style="font-size:100%;"&gt;– Sabem tudo sobre gadgets e serviços da internet, participam muito do ciberespaço e têm seus próprios blogs e sites&lt;/span&gt;&lt;p&gt;&lt;/p&gt;2 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Ligados &lt;/span&gt;&lt;span style="font-size:100%;"&gt;- &lt;/span&gt;&lt;span style="font-size:100%;"&gt; Usam celulares sofisticados e ficam bastante tempo online. Vivem satisfeitos com esses recursos, ligados em comunidades e hobbies.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;3 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Veteranos desanimados&lt;/span&gt;&lt;span style="font-size:100%;"&gt; – Usam muito a internet e menos celulares.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Não estão tão satisfeitos com&lt;/span&gt;&lt;span style="font-size:100%;"&gt; com TI e tecnologias de comunicação.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;4 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Produtivos &lt;/span&gt;&lt;span style="font-size:100%;"&gt;– São super otimistas sobre o poder da tecnologia para se manter atualizados, realizar seu trabalho e aprender coisas novas.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;5 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Centrados em mobilidade&lt;/span&gt;&lt;span style="font-size:100%;"&gt; – Eles adoram a funcionalidade dos celulares, mas usam menos a internet.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;6 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Conectados mas aborrecidos&lt;/span&gt;&lt;span style="font-size:100%;"&gt; – Investiram muito em tecnologia, mas acham a conectividade invasiva e consideram tanta informação um peso.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;7 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Experimentadores inexperientes&lt;/span&gt;&lt;span style="font-size:100%;"&gt; – De vez em quando usam os recursos de interatividade, mas poderiam explorá-los mais, se tivessem mais experiência.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;8 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Light mas satisfeitos&lt;/span&gt;&lt;span style="font-size:100%;"&gt; – Usam um pouco de tecnologia, mas ela não ocupa um espaço central na vida deles.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;9 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Indiferentes &lt;/span&gt;&lt;span style="font-size:100%;"&gt;– Apesar de ter celulares e acesso à internet, usam um e outro intermitentemente, e acham a conectividade uma atrapalhação.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;10 – &lt;span style="color: rgb(255, 102, 0);font-size:100%;" &gt;Desconectados &lt;/span&gt;&lt;span style="font-size:100%;"&gt;-&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Não têm celular ou acesso à web. Tendem a ser mais velhos e estão satisfeitos com a velha mídia.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;O estudo da Pew, feito para os Estados Unidos, não explora a relação entre o poder de compra das pessoas e uso de tecnologia, e não tem a menor preocupação com um tema forte aqui entre nós, no Brasil, que é a inclusão digital. &lt;span style="font-size:100%;"&gt;Mas, aplicado apenas à classe média, até que pode fazer sentido por aqui também.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.pewinternet.org/pdfs/PIP_ICT_Typology.pdf"&gt;Veja na íntegra o estudo do Pew.&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;span style="font-style: italic;font-family:times new roman;font-size:100%;"  &gt;Fonte: &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;a style="font-style: italic;" href="http://info.abril.com.br/blog/sandra/20070508_listar.shtml"&gt;Blog da Sandra Carvalho&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="font-family: georgia;" class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-8131177394848696767?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/8131177394848696767/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=8131177394848696767' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/8131177394848696767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/8131177394848696767'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/dez-raas-de-humanos-na-web-escolha-sua.html' title='Dez raças de humanos na web - Escolha a sua!'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-7210007425072033797</id><published>2007-05-09T07:50:00.000-03:00</published><updated>2007-05-10T21:23:22.488-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Os dez jogos mais importantes de todos os tempos</title><content type='html'>&lt;div style="text-align: left;"&gt; &lt;span style="color: rgb(255, 102, 0);"&gt;Doom&lt;/span&gt;, &lt;span style="color: rgb(255, 102, 0);"&gt;Mario Bros&lt;/span&gt; e &lt;span style="color: rgb(255, 102, 0);"&gt;Tetris &lt;/span&gt;estão entre os 10 games que mais impacto tiveram no mercado mundial.&lt;br /&gt;&lt;br /&gt;Já foi o tempo em que &lt;span style="color: rgb(255, 102, 0);"&gt;videogames &lt;/span&gt;eram apenas distrações para filhos que não ouviam suas mães chamando quando o jantar era servido.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Mesmo ainda vistos com certo preconceito por quem classifica a jogatina digital como perda de tempo, os &lt;span style="color: rgb(255, 102, 0);"&gt;games &lt;/span&gt;vão alcançando aos poucos o posto de expressão artística, sem dever nada a livros, filmes e músicas.&lt;br /&gt;&lt;br /&gt;Além do poderoso mercado de consoles, que tem Sony, Nintendo e Microsoft, disputando a preferência dos entusiastas, games em celulares e smartphones e redes sociais online atingem os gamers corriqueiros.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://idgnow.uol.com.br/computacao_pessoal/2007/03/30/idgnoticia.2007-03-30.2790787201"&gt;Veja a lista completa.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-7210007425072033797?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/7210007425072033797/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=7210007425072033797' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/7210007425072033797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/7210007425072033797'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/os-dez-jogos-mais-importantes-de-todos.html' title='Os dez jogos mais importantes de todos os tempos'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-1361289757365243024</id><published>2007-05-09T07:44:00.000-03:00</published><updated>2007-05-10T21:21:57.849-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Será que não estamos exagerando?</title><content type='html'>No Japão a última novidade são cybercafés que oferecem serviços de hotel. O cliente pode tomar banho ou até mesmo dormir sem sair da frente do computador. Em tempos de grande desenvolvimento tecnológico e de aluguéis caros, essa é uma moda que está atraindo muitos jovens que precisam de um computador para trabalhar e que querem economizar. As diárias ficam entre 12 e 20 dólares. Vale à pena?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Fonte: &lt;a href="http://info.abril.com.br/blog/debora/20070507_listar.shtml"&gt;Blog da Débora Fortes&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/2071137246436930892-1361289757365243024?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/1361289757365243024/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=1361289757365243024' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1361289757365243024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/1361289757365243024'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/ser-que-no-estamos-exagerando.html' title='Será que não estamos exagerando?'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6365250716442577192</id><published>2007-05-07T12:42:00.000-03:00</published><updated>2007-05-10T21:20:59.886-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Tutorial de PHP - Parte 1: Primeiros passos</title><content type='html'>O &lt;span style="color: rgb(255, 102, 0);"&gt;PHP &lt;/span&gt;é a linguagem de programação web mais usada em todo mundo. Além ser open source, é muito leve e fácil de aprender. Nesta série de tutoriais veremos alguns tópicos que lhe darão o primeiro empurrãozinho no aprendizado desta linguagem.&lt;br /&gt;Primeiramente você precisa ter o PHP instalado na sua máquina, além do servidor Apache. Também usaremos nos tutoriais o banco de dados &lt;span style="color: rgb(255, 102, 0);"&gt;MySQL&lt;/span&gt;. Você pode baixar tudo isso separadamente, mas é mais fácil instalar o &lt;span style="color: rgb(255, 102, 0);"&gt;EasyPHP, &lt;/span&gt;que já instala e configura tudinho para você.&lt;br /&gt;&lt;br /&gt;Após instalar o EasyPHP, vamos conhecer um pouco a estrutura de pastas das nossas aplicações web em PHP. Dentro da pasta do easyPHP você vai encontrar uma pasta chamada &lt;span style="color: rgb(255, 102, 0);"&gt;www. &lt;/span&gt;Essa pasta vai guardar todas as nossas páginas. Quando você chamar a página pelo navegador o servidor &lt;span style="color: rgb(255, 102, 0);"&gt;Apache &lt;/span&gt;vai nessa pasta procurar pelos arquivos. Por isso nunca se esqueça de salvar todas as suas produções dentro da www.&lt;br /&gt;&lt;br /&gt;OK. Com isso acho já podemos colocar a mão na massa. Como todo tutorial de linguagem de programação que se preze, vamos iniciar com o bom e velho hello world.&lt;br /&gt;&lt;br /&gt;Para começar, crie um arquivo pelo bloco de notas (ou o editor de sua preferência - em breve vou indicar uns bons editores para você programar). Salve como&lt;span style="color: rgb(255, 102, 0);"&gt; hello.php&lt;/span&gt;. Se usar o bloco de notas cuidado para não salvar como&lt;span style="color: rgb(255, 102, 0);"&gt; .txt.php&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Com o que vimos até agora você já deve saber onde salvar essa página, não é? Isso mesmo, você deve salvar dentro da pasta www, que é lá que Apache busca pelas páginas. Pronto, página está criada e salva. Agora precisamos finalmente dar o hello para o mundo do PHP.&lt;br /&gt;&lt;br /&gt;Abra a página hello.php e coloque o seguinte código.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt; ?php echo "Ola mundo do PHP!!!";     ?&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;O &lt; ?php e ?&gt; são usados para &lt;span style="color: rgb(255, 102, 0);"&gt;delimitar &lt;/span&gt;o código PHP. Todo o seu PHP tem que estar dentro dessas tags. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;A função echo serve para escreve algo na tela certo? Errado. Um detalhe importante sobre a função echo é que ela joga o parâmetro no html da página e não na tela. Isso é bem interessante porque nos permite montar tags html dinâmicamente. Se você não ainda não entende &lt;span style="color: rgb(255, 102, 0);"&gt;HTML&lt;/span&gt;, recomendo dar uma lida antes de vir para esse tutorial.&lt;/li&gt;&lt;/ul&gt;Para &lt;span style="color: rgb(255, 102, 0);"&gt;visualizar &lt;/span&gt;abra o navegador, e digite &lt;span style="color: rgb(255, 102, 0);"&gt;http://localhost/hello.php&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;voi lá, &lt;/span&gt;você acaba de escrever o sua primeira página em PHP.&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ficamos por aqui nessa primeira parte do nosso tutorial. No próximo da série vamos tratar de &lt;span style="color: rgb(255, 102, 0);"&gt;variáveis&lt;/span&gt;, passagem de valores entre páginas e &lt;span style="color: rgb(255, 102, 0);"&gt;formulários&lt;/span&gt;. Em caso de dúvidas, só é postar.&lt;br /&gt;&lt;br /&gt;Até mais!&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-6365250716442577192?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6365250716442577192/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6365250716442577192' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6365250716442577192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6365250716442577192'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/05/tutorial-de-php-parte-1-primeiros.html' title='Tutorial de PHP - Parte 1: Primeiros passos'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-7608750956584394365</id><published>2007-04-27T09:16:00.000-03:00</published><updated>2007-05-10T21:21:35.183-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engenharia de software'/><title type='text'>Produtividade no desenvolvimento de software</title><content type='html'>&lt;p&gt; A questão da produtividade de uma equipe de desenvolvimento é de extrema relevância para a análise de um projeto, já que ela define entre outros fatores, o seu prazo e o seu custo. Por que é tão difícil estimar com precisão o tempo de um conjunto de atividades? &lt;/p&gt;&lt;p&gt; Geralmente a experiência conta muito para a definição de prazos e metas reais e concretas. Porém deve haver variáveis menos subjetivas que essa para se alcançar o sucesso em um projeto. &lt;/p&gt;&lt;p&gt; O maior erro ao se estipular prazos é o caráter teórico da avaliação. &lt;/p&gt;&lt;p&gt;Sabe-se que um programador tem uma produtividade média X. Multiplica-se isso pelo número de programadores e, pronto, tem-se a produtividade do conjunto e, portanto, o tempo de projeto. &lt;/p&gt;&lt;p&gt;Essa abordagem apesar de simples e aparentemente lógica, não conta com a interferência de fatores cotidianos que terminam provocando atrasos, como reuniões da equipe, doenças e possíveis afastamentos de funcionários, membros que entram e que saem, além das mais diversas interações dentro do grupo. Tudo isso deve ser levado em consideração durante o processo de análise. &lt;/p&gt;&lt;p&gt; Outro fator que limita a fixação de prazos mais apertados é a questão do nível de complexidade do projeto. Estatísticas mostram que a produtividade para o desevolvimento de um SO, por exemplo, é cerca de duas vezes menor quando comparada com sistemas tradutores. Prestando atenção, percebe-se que projetos de grande porte têm dois fatores negativos quanto à produtividade: a própria complexidade do sistema, e o grande número de membros do grupo, que gera mais interações entre a equipe, que por sua vez diminui a produtividade geral. &lt;/p&gt;&lt;p&gt;A maioria dos dados relativos à produtividade existentes referem-se a projetos desenvolvidos em linguagem Assembly, nos quais ela é medida em instruções por indivíduo em um ano. Mas algumas pesquisas realizadas com linguagens de alto nível já mostram que a produtividade aumenta cerca de cinco vezes em relação à linguagens de baixo nível, já que cada linha de código em linguagem alto nível correponde, em média, a cinco instruções assembly. &lt;/p&gt;&lt;p&gt;Portanto, apesar de complexa, a análise de produtividade pode ser aproximada dos níveis reais a partir de estimativas mais práticas e mais concretas, levando em consideração os mais diversos fatores que limitam a produtividade da equipe. Além disso, a avaliação do uso de uma linguangem de alto nível adequada pode proporcionar níveis ainda maiores de produtividade. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-7608750956584394365?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/7608750956584394365/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=7608750956584394365' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/7608750956584394365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/7608750956584394365'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/04/produtividade-no-desenvolvimento-de.html' title='Produtividade no desenvolvimento de software'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-5805029427459572161</id><published>2007-04-16T12:49:00.000-03:00</published><updated>2007-05-10T21:22:20.505-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engenharia de software'/><title type='text'>A importância de um estudo de viabilidade</title><content type='html'>Todo projeto de software, em sua fase inicial, deve ser submetido a uma rápida análise panorâmica sobre o problema. Esta etapa de desenvolvimento é chamada de estudo de viabilidade.&lt;br /&gt;&lt;br /&gt;É o estudo de viabilidade que determinará pontos críticos do seu projeto, diferentes alternativas de soluções para o problema e, até mesmo, se o projeto será levado adiante ou não.&lt;br /&gt;&lt;br /&gt;    O estudo de viabilidade consiste, na prática, de um documento com formato mais ou menos definido que descreve de maneira geral o problema a ser tratado, a organização para a qual se destina o software, e as mais variadas soluções acompanhadas de análises comparativas entre elas.&lt;br /&gt;&lt;br /&gt;    A estrura básica de um documento como este é composta por uma breve descrição sobre a organização que o contratou para desenvolver a solução, o problema em questão, fontes e referências que lhe proporcionaram conhecimento do problema (questionários, bibliografia, etc), além, é claro de mais de uma solução para o problema. Cada uma, acompanhada de uma breve análise com prós e contras. Ao final do documento, o desenvolvedor, a partir da análise de cada uma das soluções por ele propostas, indica qual a mais adequada, levando em cosideração fatores como custo, tempo de desenvolvimento, satisfação dos anseios do cliente, etc.&lt;br /&gt;   &lt;br /&gt;Para empresas de desenvolvimento de software, o estudo de viabilidade já é um procedimento padrão no processo de design, do qual depende todo o restante do projeto. Porém, o pequeno desenvolvedor, ou o famoso "freela" deve estar se perguntando como isso afetaria seu trabalho de maneira positiva. Para ele, isso não seria apenas um desperdício de tempo e dinheiro?&lt;br /&gt;&lt;br /&gt;A resposta é não. Com certeza, por mais breve que seja um estudo de viabilidade ele leva um certo tempo para ser feito e consome algumas horas preciosas de trabalho. Porém os benefícios trazidos são maiores. Com uma análise prévia, o desenvolvedor terá uma visão mais abrangente sobre o problema e poderá congitar diversas soluções. A partir do estudo destas soluções, ele terá a melhor proposta tanto para ele quanto para o cliente. Imagine você chegar no meio de um projeto, e decobrir que havia uma maneira mais fácil e mais eficiente para chegar ao mesmo resultado? Com certeza seria frustrante. Além disso, com um documento como este sendo entregue ao cliente, você com certeza terá seu trabalho mais valorizado e se destacará num mercado que anda a cada dia mais concorrido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-5805029427459572161?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/5805029427459572161/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=5805029427459572161' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/5805029427459572161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/5805029427459572161'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/04/importncia-de-um-estudo-de-viabilidade.html' title='A importância de um estudo de viabilidade'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-3684062942609035315</id><published>2007-04-10T15:56:00.000-03:00</published><updated>2007-05-10T21:22:39.542-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Enviando dados via GET e POST no PHP</title><content type='html'>Quando desenvolvemos um site dinâmico, geralmente temos a necessidade de passar alguns valores de uma página para a outra, para podermos, então,   realizar operações como consultas e inserções no banco, autenticação de usuários, etc. No PHP os dois métodos mais utilizado para isso são o GET e POST. Vamos falar um pouco mais sobre eles agora.&lt;p&gt;&lt;/p&gt;  &lt;p class="western" style="margin-bottom: 0cm; font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;GET&lt;/span&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;É o método mais simples e mais limitado para se usar. Neste caso os valores e seus respectivos identificadores são transmitidos pela URL, não sendo preciso a abertura de uma nova conexão (explicaremos melhor isso quando falarmos do método POST). Quem nunca viu uma URL desse tipo:&lt;/p&gt;  &lt;p class="western" style="margin-bottom: 0cm;"&gt; &lt;a href="http://www.meusite.com/versecao.php?id=32&amp;descricao=Minha_Secao"&gt;http://www.meusite.com/versecao.php?id=32&amp;amp;descricao=Minha_Secao&lt;/a&gt;&lt;/p&gt;  &lt;p class="western" style="margin-bottom: 0cm;"&gt;Esse exemplo demonstra na prática o uso da passagem de parâmetros via GET. A presença da interrogação indica o fim do endereço e o início da declaração dos  nossos valores que serão passados. Neste caso, a página versecao.php receberá uma variável chamada id com o valor 32, e outra variável descricao com valor “Minha_Secao”.&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Pronto! Você provavelmente deverá estar pensando: “Ótimo . Vou passar todos os meus valores via GET, pela URL. ”&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Porém, como nem tudo é perfeito, o método GET não faz tudo para nós.  &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Como os valores são passados pela URL, há um limite para o número de bytes que serão enviados.  Você poderá enviar no máximo 1024 caracteres, o que limita bastante suas possibilidades com esse método.&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Outra questão, agora referente à segurança, é sobre os tipos de dados que você poderá enviar via URL. Como nesse método os dados são visíveis ao usuário, não é bom (na verdade é péssimo) que se passe informação confidenciais via GET. Imagine você, navegando  em um site, e de repente você vê a sua senha passando pela URL. E o pior, sendo salva no histórico do computador.  &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;O ideal é que se use o método get somente para passar parâmetros para pesquisas e outras informações não críticas.&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Para solucionar esses e outros problemas temos disponível o método POST.&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;POST&lt;/span&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;O método POST representa uma alternativa ao método GET para as questões de capacidade e segurança. Nesse método uma conexão paralela é aberta e os dados são passados por ela. Não há restrição referente ao tamanho e os dados não são visíveis ao usuário. Há única condição é que se use um formulário para os dados. Na tag form , temos um atributo action. Nesse atributo é que setaremos a página que receberá nossas informações. Quando o botão submit for acionado todos os dados desse formulário serão passados para a página definida no action. É uma maneira segura e com mais capacidade em termos de espaço.&lt;/p&gt;  &lt;p class="western" style="margin-bottom: 0cm;"&gt;Legal. Aprendemos como enviar as informações através dos dois métodos para as páginas, mas ainda não sabemos como acessá-los nessas página.  &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;O PHP armazena as variáveis vindas por GET e por POST em vetores associativos (vetores cujos índices são strings).&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Vejamos como faríamos isso com o exemplo do método GET acima.&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Foram passadas duas variáveis : id e descricao.&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Para pegar o id fazemos, por exemplo:&lt;br /&gt;&lt;/p&gt;&lt;p class="western" style="margin-bottom: 0cm; text-align: center;"&gt;   &lt;span style="font-family:courier new;"&gt; $meu id = $_GET[“id”] e $minhadescricao = $_GET[“descricao”]&lt;/span&gt;&lt;/p&gt;  &lt;p class="western" style="margin-bottom: 0cm;"&gt;No caso do método POST, temos um vetor chamado $_POST que armazenará os dados vindos do formulário. Vale lembrar que, nesse caso, os índices do vetor serão as nomes dados aos inputs no seu formulário.&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm;"&gt;Para acessar os valores vindos de um formulário com nome e idade, por exemplo, fazemos&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0cm; text-align: center;"&gt;    &lt;span style="font-family:courier new;"&gt;$nome = $_POST[“nome”] e $idade = $_POST[“idade”].&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;Agora você já está pronto para começar a praticar a transmissão de variáveis no PHP. Qualquer dúvida é só comentar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-3684062942609035315?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/3684062942609035315/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=3684062942609035315' title='7 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/3684062942609035315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/3684062942609035315'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/04/enviando-dados-via-get-e-post-no-php.html' title='Enviando dados via GET e POST no PHP'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6752296571720318110</id><published>2007-04-08T17:09:00.000-03:00</published><updated>2007-05-10T21:23:02.803-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engenharia de software'/><title type='text'>Desenvolvimento ágil com XP</title><content type='html'>Extreme programming (XP) é uma metodologia de desenvolvimento de software que difere principalmente dos métodos tradicionais por visar a adaptabilidade do sistema, em vez de previsibilidade normalmente utilizada. Defensores de XP afirmam que a capacidade de um software se adaptar a novos requisitos durante o desenvolvimento promove uma melhoria no processo, ao contrário das metodologias não ágeis, que defendem a inserção de todos os requisitos na fase de concepção do projeto. De acordo com XP, prever requisitos antes mesmo de existirem é , na verdade, um fator gerador de perda de recursos, uma vez que estes próprios requisitos previstos podem ser alterados no decorrer do desenvolvimento.&lt;br /&gt;   &lt;br /&gt;A metodologia está baseada em alguns valores que definem métodos de interação e trabalho entre os membros da equipe e o cliente. São eles: a comunicação, a simplicidade (marca das metodologias ágeis),  o feedback, a coragem (muitas vezes é necessário jogar fora muito trabalho para dar lugar a novos requisitos) e o respeito (último valor incorporado à essa lista, que visa gerenciar as relações humanas dentro do grupo).&lt;br /&gt;   &lt;br /&gt;As atividades básicas dentro da extreme programming são a de codificação, testes, o projeto - apesar de contrariar um pouco as premissas de desenvolvimento ágil, às vezes é necessário de acordo com a magnitude do projeto -  e,  por último,  o ouvir, que é um fator imprescindível para o sucesso de um projeto de software.&lt;br /&gt;   &lt;br /&gt;Gradativamente, com um pouco de resistência até, a XP vem sendo incorporada à projetos de vários segmentos. Como qualquer outra metodologia, tem seus prós e contras que devem ser pesados durante a análise. Além disso, também vem sendo amadurecida e aperfeiçoada a fim de que seja uma opção para pequenos e grandes projetos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-6752296571720318110?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6752296571720318110/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6752296571720318110' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6752296571720318110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6752296571720318110'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/04/desenvolvimento-gil-com-xp.html' title='Desenvolvimento ágil com XP'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6905200312580414827</id><published>2007-04-07T15:44:00.000-03:00</published><updated>2007-05-10T21:23:59.405-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>Uma pequena introdução ao JSON</title><content type='html'>Javascript Object Notation, ou simplesmente JSON para os íntimos, é uma linguagem de formatação de dados baseado na sintaxe do Javascript. Foi criada por Douglas Crockford com o o objetivo de ser uma opção mais leve em relação ao XML, já largamente usado em webservices e que é padrão em transimissão de dados. O JSON utiliza-se de duas formas de representação de dados do javascript na sua sintaxe: os Array Literals e os Object Literals. Vamos falar sobre cada um deles em detalhes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Array Literals:&lt;/span&gt;São vetores definidos com o uso de colchetes como delimitadores e que aceitam qualquer objeto como membros, já que os arrays em javascript não são tipados. Por exemplo vamos definir um array literal contendo quatro valores:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; var meuArrayLiteral = ["Uma String",150,true,null] &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Observe que um array literal pode conter&lt;br /&gt;strings, numeros, boleanos, outros objetos ou até mesmo um array literal. Não entendeu? Veja só:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var meuOutroArrayLiteral = ["Outra String", ["meu","outro","array"]]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Object Literals: &lt;/span&gt;Object literals são normalmente usados para armazenar informações em pares nome-valor. São definidos entre chaves ({ e }) e podem conter quantos pares nome-valor você precisar. Por exemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var endereco = { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"rua":"Rua das Palmeiras", &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"numero": 12, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"bairro": "Caminho das Árvores" }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agora nós já podemos acessar os atributos do nosso objeto. Podemos fazer isso de duas formas. A primeira é bem conhecida dos programadores java que é utilizando ponto (.):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;endereco.rua;       //Retorna "Rua das Palmeiras"&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;endereco.numero;    //Retorna 12&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;endereco.bairro;     //Retorna "Caminho das Árvores"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A outra maneira é mais conhecida como vetor associativo ou hash e funciona utilizando o nome como índice. Exemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;endereco["rua"];     //Retorna "Rua das Palmeiras"&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;endereco["numero"];   //Retorna 12&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;endereco["bairro"];   //Retorna "Caminho das Árvores"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pronto! Com isso nós já podemos montar nosso primero arquivo com formato JSON. Vamos montar um cadastro de uma concessionária de automóveis usando o que vimos até aqui.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{ "concessionaria":&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;"automoveis": [&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;"marca":"Ford",&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;"modelo":"Fiesta",&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;"ano":2005,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;"preco":"18.500,00"&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;},&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;{&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;"marca":"Volkswagen",&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;"modelo":"Golf",&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;"ano":2004,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;"preco":"27.900,00"&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&gt;&gt;&gt;&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Claramente percebemos que o código acima é bem menor que um XML convencional em relação ao número de caracteres. A economia de bytes no caso do JSON proporciona maior velocidade de comunicação entre cliente e servidor. Uma desvatangem no uso do JSON é que ele  é menos legível para o ser humano, uma vez que utiliza uma linguagem mais curta e compacta. Para a manipulação de JSON no servidor existem diversas ferramentas disponíveis, sobre as quais não vou comentar neste artigo já que foge ao escopo dessa pequena introdução.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-6905200312580414827?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6905200312580414827/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6905200312580414827' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6905200312580414827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6905200312580414827'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/04/javascript-object-notation-ou.html' title='Uma pequena introdução ao JSON'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-6247506901810063412</id><published>2007-04-06T10:21:00.000-03:00</published><updated>2007-05-10T21:24:39.497-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='padrões de projeto'/><title type='text'>O padrão MVC: Model-View-Controller</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_1ciw0gh3lPc/RhZQmZw3uKI/AAAAAAAAAAM/DvepXGUepyw/s1600-h/ModelViewControllerDiagram.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_1ciw0gh3lPc/RhZQmZw3uKI/AAAAAAAAAAM/DvepXGUepyw/s320/ModelViewControllerDiagram.png" alt="" id="BLOGGER_PHOTO_ID_5050312652823705762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt; O padrão MVC é um padrão de arquitetura de aplicação cujo objetivo é promover uma maior independência entre os componentes do projeto.&lt;br /&gt;&lt;br /&gt; É muito comum em grandes projetos a existência de complexas regras de negócios e projetos de interfaces rebuscados, e a redução do acoplamento entre os componentes é bastante importante para se atingir maior reusabilidade e mais facilidade de manuntenção sem comprometer todo o sistema. O padrão MVC entra como uma solução, por sinal muito usada em aplicações web, para a construção de sistemas cada vez mais coesos e menos acoplados.&lt;br /&gt;&lt;br /&gt; A sigla MVC refere-se às três camadas do padrão, cada uma responsável por funções muito bem definidas. Vamos tratar de cada uma delas mais detalhadamente:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Model&lt;/span&gt;: É a camada que contém a lógica da aplicação. É responsável por conter as regras de negócios e, para sistemas persistentes, todo o controle de acesso e tratamento de dados vindos do banco. Recebe as requisições e geram respostas a partir do que foi pedido. Vamos imaginar um sisteminha de blog. Quando queremos cadastrar ou ver algum post, o Model recebe esta requisição, acessa o banco (ou qualquer outra fonte de dados), faz as operações necessárias e retorna a resposta para alguém que saberá tratar. A função dele termina por aí.&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;View: &lt;/span&gt;É a camada de apresentação ao usuário. É a interface que proporcionará a entrada de dados e a visualização das respostas geradas.  Em aplicações web é representado pelo HTML que é processado e mostrado pelo navegador. Geralmente contém formulários de entrada de dados e tabelas, grids, etc. para mostrar as respostas. Essa camada não contém lógicas de negócios,  portanto todo o processamento é feito pela Model e então a resposta é repassada para o View. No caso do nosso sisteminha de blog, o View representaria a tela de entrada de uma nova postagem ou uma página listando todos os posts feitos recentemente.&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;Controller&lt;/span&gt;: Já falamos de quem recebe as requisições e de quem as manda. Mas temos que concordar que tudo isso viraria uma grande bagunça se não houvesse alguém para organizar tudo isso. Essa é a função do controller. Essa camada funciona como um intermediário entre a camada de apresentação e a camada de negócios. É função do controller (como o própio nome já diz)  coodenar o envio e o recebimento de requisições entre o Model e o View.&lt;br /&gt;&lt;br /&gt; Existem muitos frameworks MVC para as mais diferentes liguagens como o &lt;a href="http://struts.apache.org/"&gt;Struts &lt;/a&gt;(Java) e o &lt;a href="http://www.symfony-project.com/"&gt;Symfony&lt;/a&gt; ou &lt;a href="http://www.cakephp.org/"&gt;CakePHP&lt;/a&gt; (PHP), e muitos outros. Cabe ao desenvolvedor analisar as suas necessidades e ponderar sobre o uso ou não desse padrão.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-6247506901810063412?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/6247506901810063412/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=6247506901810063412' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6247506901810063412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/6247506901810063412'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/04/o-padro-mvc-model-view-controller.html' title='O padrão MVC: Model-View-Controller'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_1ciw0gh3lPc/RhZQmZw3uKI/AAAAAAAAAAM/DvepXGUepyw/s72-c/ModelViewControllerDiagram.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2071137246436930892.post-5210462020569979541</id><published>2007-04-05T21:54:00.000-03:00</published><updated>2007-05-10T21:25:01.706-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Você está preparado para a web 2.0?</title><content type='html'>É com muita satisfação que inauguro o blog, cujo intuito é ser um espaço para troca de conhecimentos e experiências na área de informática. Como primeria postagem, decidi falar sobre uma expressão recentemente incorporada ao vocabulário web e quem vem sendo muito discutida.&lt;br /&gt;&lt;br /&gt;   A Web 2.0, tecnicamente, representa a segunda geração da convencional rede mundial de computadores e traz consigo novos conceitos à utilização da internet. A interatividade com usuário torna-se peça fundamental neste tabuleiro. O visitante não quer apenas receber conteúdos, mas também colaborar, participar, discutir e ser ouvido. O antigo (ou nem tanto) tempo em que páginas estáticas mostravam informações limitadas ao internauta, está sendo substituído por um em que os usuários constroem aquilo que vão ver. Falando nisso é inevitável deixar de citar a Wikipedia.com, que soube explorar esse conceito e se tornou, com a ajuda de colaboradores do mundo inteiro, uma das maiores bases de informação da web.&lt;br /&gt;&lt;br /&gt;A web 2.0 também traz os serviços integrados, onde em apenas um local o usuário tem acesso a informações, e-mails, ferramentas de produção e muito mais que ele possa precisar. Grande portais como Google e o Live, principalmente o primeiro, mostram como vencer nesse acirrado mercado dando tudo o que o visitante que em um mesmo lugar. E o que é melhor: de graça.&lt;br /&gt;&lt;br /&gt;A internet está sofrendo uma grande, e talvez inevitável, transformação. Aqueles que se adaptarem sobreviverão. Os que souberem aproveitar boas idéias se sobressairão dentre a multidão. Àquele profissionais da web cabem se amoldarem a essa nova realidade, incorporando os novos paradigmas da maneira mais adequada ao seu negócio. A web 2.0 é fato. Idéias, conceitos e novas ferramentas (Ajax por exemplo) estão surgindo e cabe a cada um buscar seu espaço. &lt;a href="http://pt.wikipedia.org/wiki/Larry_Page" title="Larry Page"&gt;Larry Page&lt;/a&gt; e &lt;a href="http://pt.wikipedia.org/wiki/Sergey_Brin" title="Sergey Brin"&gt;Sergey Brin&lt;/a&gt; conseguiram...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2071137246436930892-5210462020569979541?l=maozinhadaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maozinhadaweb.blogspot.com/feeds/5210462020569979541/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2071137246436930892&amp;postID=5210462020569979541' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/5210462020569979541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2071137246436930892/posts/default/5210462020569979541'/><link rel='alternate' type='text/html' href='http://maozinhadaweb.blogspot.com/2007/04/voc-est-preparado-para-web-20.html' title='Você está preparado para a web 2.0?'/><author><name>Bruno Nunes</name><uri>http://www.blogger.com/profile/06197570695782878799</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
