<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog da Hostweb &#187; Desenvolvimento</title>
	<atom:link href="http://blog.hostweb.com.br/category/dicas/desenvolvimento/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.hostweb.com.br</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 23 Aug 2010 15:01:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Como conectar os usuários do Facebook no seu site.</title>
		<link>http://blog.hostweb.com.br/como-conectar-os-usuarios-do-facebook-no-seu-site/hostweb</link>
		<comments>http://blog.hostweb.com.br/como-conectar-os-usuarios-do-facebook-no-seu-site/hostweb#comments</comments>
		<pubDate>Mon, 23 Aug 2010 14:06:23 +0000</pubDate>
		<dc:creator>Giordano Alves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[Usuários]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=706</guid>
		<description><![CDATA[Todo mundo já reconhece (ou deveria) a importância que as redes sociais possuem hoje em dia, é difícil conhecer alguém que use a Internet e não tenha uma conta em alguma rede social. Pelo contrário, muitos &#8220;entram&#8221; na Internet apenas para usar as redes sociais.
Dentre as redes sociais que se destacam hoje temos o Facebook, [...]]]></description>
			<content:encoded><![CDATA[<p>Todo mundo já reconhece (ou deveria) a importância que as redes sociais possuem hoje em dia, é difícil conhecer alguém que use a Internet e não tenha uma conta em alguma rede social. Pelo contrário, muitos &#8220;entram&#8221; na Internet apenas para usar as redes sociais.</p>
<p>Dentre as redes sociais que se destacam hoje temos o Facebook, que foi lançado em 2004 e que desde que chegou ao Brasil ganhou muitos usuários novos.</p>
<p>O Facebook tem uma <a title="Facebook api" href="http://developers.facebook.com/docs/" target="_blank">Api</a> para desenvolvedores muito bem documentada e foi nela que aprendi a como conectar os usuários do Facebook no meu site.</p>
<p>O primeiro para obter os dados do usuário é você criar uma nova aplicação do site de desenvolvimento do Facebook.</p>
<p><a title="http://www.facebook.com/developers/" href="http://www.facebook.com/developers/" target="_blank">http://www.facebook.com/developers/</a></p>
<p><span id="more-706"></span></p>
<p><img class="aligncenter size-full wp-image-707" title="Captura_de_tela-1" src="http://blog.hostweb.com.br/wp-content/uploads/2010/08/Captura_de_tela-1.png" alt="Captura_de_tela-1" width="510" height="450" /></p>
<p>Na criação do seu aplicativo você vai digitar o nome do seu aplicativo e concordar com os termos do Facebook, depois disso você verá a tela inicial do seu aplicativo com informações importantes como o id do aplicativo e a chave da api .</p>
<p><img class="aligncenter size-full wp-image-714" title="Captura_de_tela-2" src="http://blog.hostweb.com.br/wp-content/uploads/2010/08/Captura_de_tela-21.png" alt="Captura_de_tela-2" width="561" height="419" /></p>
<p>No próximo passo você vai clicar no link &#8220;Editar Configurações&#8221;, nele vai ter várias áreas para configurar o aplicativo, mas você irá para o link  &#8220;Website&#8221; e coloque o endereço do seu site em &#8220;Site URL&#8221;.</p>
<p>Pronto você já criou um aplicativo no Facebook direcionando para seu site. Agora vamos fazer nossa aplicação no site receber os dados do usuário.</p>
<p>Primeiro crie uma página com o nome loginFacebook.html e coloque o código:</p>
<pre><code>&lt;fb:login-button&gt;&lt;/fb:login-button&gt;
&lt;div id="fb-root"&gt;&lt;/div&gt;
&lt;script src="http://connect.facebook.net/en_US/all.js"&gt;&lt;/script&gt;
&lt;script&gt;
  FB.init({appId: '<strong>your app id</strong>', status: true, cookie: true, xfbml: true});
  FB.Event.subscribe('auth.sessionChange', function(response) {
    if (response.session) {
      // A user has logged in, and a new cookie has been saved
    } else {
      // The user has logged out, and the cookie has been cleared
    }
  });
&lt;/script&gt;</code></pre>
<p>Não esqueça de trocar a parte <strong>your app id</strong> pelo id da sua aplicação. Feito isso o código deve renderizar um botão feito esse: <img class="alignnone size-full wp-image-721" title="login-button" src="http://blog.hostweb.com.br/wp-content/uploads/2010/08/login-button.png" alt="login-button" width="154" height="22" /></p>
<p>Agora vamos acrescentar o código php responsável por pegar o cookie que trará dados do usuário como o <span onmouseover="_tipon(this)" onmouseout="_tipoff()"><code>access_token e o uid</code></span>:</p>
<pre><code>&lt;?php

define('FACEBOOK_APP_ID', '<strong>your application id</strong>');
define('FACEBOOK_SECRET', '<strong>your application secret</strong>');

function get_facebook_cookie($app_id, $application_secret) {
  $args = array();
  parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
  ksort($args);
  $payload = '';
  foreach ($args as $key =&gt; $value) {
    if ($key != 'sig') {
      $payload .= $key . '=' . $value;
    }
  }
  if (md5($payload . $application_secret) != $args['sig']) {
    return null;
  }
  return $args;
}

$cookie = get_facebook_cookie(FACEBOOK_APP_ID, FACEBOOK_SECRET);

?&gt;
&lt;!DOCTYPE html&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:fb="http://www.facebook.com/2008/fbml"&gt;
  &lt;body&gt;
    &lt;?php if ($cookie) { ?&gt;
      Your user ID is &lt;?= $cookie['uid'] ?&gt;
    &lt;?php } else { ?&gt;
      &lt;fb:login-button&gt;&lt;/fb:login-button&gt;
    &lt;?php } ?&gt;

    &lt;div id="fb-root"&gt;&lt;/div&gt;
    &lt;script src="http://connect.facebook.net/en_US/all.js"&gt;&lt;/script&gt;
    &lt;script&gt;
      FB.init({appId: '&lt;?= FACEBOOK_APP_ID ?&gt;', status: true,
               cookie: true, xfbml: true});
      FB.Event.subscribe('auth.login', function(response) {
        window.location.reload();
      });
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Agora com os dados do cookie você pode pegar os dados do usuário com o seguinte código:</p>
<pre><code>$user = json_decode(file_get_contents('https://graph.facebook.com/me?access_token='
.$cookie['access_token']))-&gt;id;
</code></pre>
<p>Pronto, agora você pode tratar essas informações da maneira que desejar no seu aplicativo.</p>
<p>Uma dica, se quiser pegar informações como email, data de aniversário e etc, você terá que passar como parâmetro na tag . Exemplo:</p>
<pre><code>&lt;fb:login-button perms="email,user_birthday"&gt;&lt;/fb:login-button&gt;
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/como-conectar-os-usuarios-do-facebook-no-seu-site/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Frameworks javascript. Qual usar?</title>
		<link>http://blog.hostweb.com.br/frameworks-javascript-qual-usar/hostweb</link>
		<comments>http://blog.hostweb.com.br/frameworks-javascript-qual-usar/hostweb#comments</comments>
		<pubDate>Mon, 22 Mar 2010 19:12:08 +0000</pubDate>
		<dc:creator>Giordano Alves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=638</guid>
		<description><![CDATA[Nesse post vou trazer para voces vocês dos frameworks mais usados no desenvolvimento de aplicações.
JQuery &#8220;Escreva menos e faça mais&#8221;
JQuery é uma rápida e concisa biblioteca JavaScript que simplifica a manipulação do HTML, manipulação de eventos, animação e interações do Ajax para desenvolvimento web.
JQuery foi projetado para mudar a maneira que você escreve JavaScript.
$(document).ready(function() {
$(&#8221;a&#8221;).click(function() [...]]]></description>
			<content:encoded><![CDATA[<p>Nesse post vou trazer para voces vocês dos frameworks mais usados no desenvolvimento de aplicações.</p>
<p><a title="JQuery" href="http://jquery.com/" target="_blank">JQuery</a> <em>&#8220;Escreva menos e faça mais&#8221;</em></p>
<p align="justify"><a title="JQuery" href="http://jquery.com/" target="_blank">JQuery</a> é uma rápida e concisa biblioteca JavaScript que simplifica a manipulação do HTML, manipulação de eventos, animação e interações do Ajax para desenvolvimento web.</p>
<p align="justify"><a title="JQuery" href="http://jquery.com/" target="_blank">JQuery</a> foi projetado para mudar a maneira que você escreve JavaScript.</p>
<div id="code">$(document).ready(function() {<br />
$(&#8221;a&#8221;).click(function() {<br />
alert(&#8221;Olá mundo!&#8221;);<br />
});<br />
});</div>
<p><a title="mootools" href="http://mootools.net/" target="_blank">Mootools</a> <em>&#8220;Um framework javascrip compacto&#8221;</em></p>
<p align="justify"><a title="mootools" href="http://mootools.net/" target="_blank">Mootools</a> é um framework compacto, modular e orientado a objetos projetado para o desenvolvedor intermediário a avançado. Ele permite que você escreva um codigo potente, flexível e elegante.</p>
<div id="code">$(&#8217;texto_apresentacao&#8217;).setOpacity(0);<br />
$(&#8217;texto_apresentacao&#8217;).setStyle(&#8217;width&#8217;, &#8216;200px&#8217;);<br />
$(&#8217;texto_apresentacao&#8217;).setStyle(&#8217;border&#8217;, &#8216;1px solid #ff0000&#8242;);</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/frameworks-javascript-qual-usar/hostweb/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ruby &#8211; Strings, Números, Métodos e Condicionais</title>
		<link>http://blog.hostweb.com.br/ruby-strings-numeros-metodos-e-condicionais/hostweb</link>
		<comments>http://blog.hostweb.com.br/ruby-strings-numeros-metodos-e-condicionais/hostweb#comments</comments>
		<pubDate>Mon, 15 Mar 2010 11:58:08 +0000</pubDate>
		<dc:creator>Lino</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Sem Categoria]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=609</guid>
		<description><![CDATA[Eu assumirei que você já tem o Ruby instalado. Se não, você precisa fazer isto antes de mais nada. Vamos começar a codificar. Abra o seu editor e escreva o seguinte:
puts &#8216;hello world&#8217;
Salve o programa como &#8216;helloworld.rb&#8217; e agora rode o programa. Se tudo ocorreu bem, o Ruby deveria mostrar “hello world”. Se  você [...]]]></description>
			<content:encoded><![CDATA[<p>Eu assumirei que você já tem o Ruby instalado. Se não, você precisa fazer isto antes de mais nada. Vamos começar a codificar. Abra o seu editor e escreva o seguinte:</p>
<p><strong>puts &#8216;hello world&#8217;</strong></p>
<p>Salve o programa como &#8216;helloworld.rb&#8217; e agora rode o programa. Se tudo ocorreu bem, o Ruby deveria mostrar “hello world”. Se  você  estiver usando um  editor  sem  uma  console interativa,   você deverá rodar  seus  programas  a  partir  do  prompt  de  comandos  do  sistema operacional.  Para  isto  abra  um  prompt  de  comandos  (Windows)  ou  um terminal  (Linux)  e  navegue  até  o  diretório contendo  o  código  fonte  e  então digite ruby seguido pelo nome do programa, assim: ruby helloworld.rb</p>
<p><strong> puts( &#8220;hello world&#8221;.upcase )</strong></p>
<p>Este deve ser o menor ‘hello world’ programa da história da programação, então vamos avançar modificando-o para pedir que o usuário digite algo &#8230;<br />
O próximo passo, então, é &#8217;solicitar&#8217; ao usuário uma string (conjunto de caracteres). O método para fazer isso em Ruby é gets. </p>
<p><strong>print(&#8217;Enter your name: &#8216; )<br />
name = gets()<br />
puts( &#8220;Hello #{name}&#8221; )<br />
</strong></p>
<p>O programa helloname.rb pergunta ao usuário o seu nome – vamos supor que é “Fred” -e então mostra uma saudação: “Hello Fred”.<br />
Enquanto isso ainda é muito simples, existem alguns detalhes importantes que precisam ser explicados.   Primeiro, note que eu usei print em vez de puts para mostrar a pergunta. Isto foi feito porque o puts adiciona uma nova linha no final e o print não; neste exemplo eu quero que o cursor permaneça na mesma linha da pergunta.</p>
<p>Na linha seguinte eu usei o gets() para ler a informação digitada pelo usuário emuma string quando for pressionada a tecla Enter. Esta string é armazenada na variável, name. Eu não pré-declarei esta variável, nem especifiquei seu tipo. Em Ruby você pode criar variáveis como e quando precisar delas e o Ruby deduz o tipo correspondente.  Neste caso eu atribui uma string para a variável name, logo o Ruby sabe que o tipo de name deve ser uma string.<br />
<span id="more-609"></span></p>
<p><strong>Objetos e Métodos</strong></p>
<p>        Ruby  é  uma  linguagem  altamente  OOP  (Programação  Orientada  por  Objetos).  Tudo  desde um inteiro até uma string é considerado um objeto. E cada objeto é constituído de &#8216;métodos&#8217; os quais podem fazer muitas coisas. Para usar um método, você precisa colocar um ponto após o objeto,  então  adicionar  o  nome  do  método.  Por    exemplo,  aqui  eu  estou  usando  o  método<br />
<strong><br />
      upcase para mostrar a string “hello world” em  maiúsculas:<br />
      puts( &#8220;hello world&#8221;.upcase )</strong></p>
<p>       Alguns métodos como o puts e o gets estão disponíveis em todo o lugar e não necessitam ser associados a um objeto específico. Tecnicamente falando, estes métodos são fornecidos pelo módulo Kernel do Ruby e eles estão presentes em todos os objetos Ruby. Quando você roda uma aplicação Ruby, um objeto chamado main é automaticamente criado e este objeto fornece acesso aos métodos do Kernel.</p>
<p>Nota: O Ruby é sensível a maiúsculas e minúsculas (caixa alta/baixa).<br />
          Uma variável chamada myvar é diferente de outra chamada myVar.<br />
          Uma variável como &#8216;name&#8217; no nosso exemplo deve iniciar com uma<br />
          letra minúscula ( em caixa baixa )</p>
<p>O símbolo de parênteses no final de gets() é opcional assim como os parênteses que envolvem as strings após o print e o puts; o código deveria rodar igualmente se você removesse os parênteses. Contudo, o Ruby está movendo-se gradualmente na direção do uso dos parênteses – particularmente quando passa-se argumentos para métodos. Os parênteses ajudam a evitar possíveis ambigüidades no código e , em alguns casos, o interpretador do Ruby irá avisá-lo se você omiti-los.</p>
<p><strong>Strings e Avaliação embutida</strong></p>
<p>A última linha no programa helloname.rb é bem interessante:</p>
<p><strong>puts( &#8220;Hello #{name}&#8221; )</strong></p>
<p>Aqui a variável name está embutida numa string. Isto é feito colocando a variável dentro do sinal de chaves {} precedido do caracter #, assim: #{variável}. Este tipo de avaliação embutida somente funciona com strings delimitadas por aspas (“”). E não é somente variáveis que podem ser embutidas entre as aspas. Você pode pode, também, embutir caracteres não imprimíveis como nova linha “\n” e tabs “\t” em strings delimitadas por aspas. Você pode até embutir pequenos códigos de programa e expressões matemáticas. Vamos assumir que você tem um método chamado showname, que retorna a string ‘Fred’. A string seguinte deveria, no processo de avaliação, chamar o método showname e, como resultado, mostrar a string “Hello Fred”:<br />
<strong><br />
puts &#8220;Hello #{showname}&#8221;</p>
<p>def showname<br />
   return &#8220;Fred&#8221;<br />
end</p>
<p>puts &#8220;Hello #{showname}&#8221;<br />
puts( &#8220;\n\t#{(1+2) * 3}&#8221; )<br />
</strong><br />
Veja se você consegue acertar o que seria mostrado pelo código seguinte:</p>
<p><strong>puts( &#8220;\n\t#{(1 + 2) * 3}&#8221; )</strong></p>
<p>Execute o programa string_eval.rb para ver se você está certo.<br />
Comentários&#8230;<br />
Linhas que começam com o caracter # são tratadas como comentários(elas são ignoradas pelo interpretador Ruby):</p>
<p>                    # This is a comment – Isto é um comentário</p>
<p><strong>Métodos</strong></p>
<p>No exemplo anterior, eu introduzi um método Ruby sem explicar precisamente o que é e a sintaxe necessária para criá-lo. Vejamos isso agora.</p>
<p><strong>class MyClass<br />
        def saysomething<br />
                puts( &#8220;Hello&#8221; )<br />
        end<br />
end</p>
<p>ob = MyClass.new<br />
ob.saysomething<br />
</strong></p>
<p>Um método é assim chamado porque ele fornece um método ( isto é, &#8216;uma forma&#8217;) para um objeto responder a mensagens. Na terminologia OOP, você envia uma mensagem para um objeto pedindo que ele faça algo. Vamos imaginar que você tem um objeto chamado ob o qual possui um método chamado saysomething, esta é a forma que você deveria enviar-lhe uma mensagem saysomething:<br />
<strong><br />
ob.saysomething</strong></p>
<p>Vamos supor que o método saysomething seja o seguinte:<br />
<strong><br />
def saysomething<br />
       puts( &#8220;Hello&#8221; )<br />
end<br />
</strong></p>
<p>Quando você envia a mensagem saysomething para o objeto ob ele responde com o método saysomething e mostra “Hello”. OK, esta a é forma ‘OOP pura’ de descrever este processo. Uma forma OOP não tão pura de descrever isso seria dizer que saysomething é como uma função que é ligada ao objeto e pode ser chamada usando a “notação de ponto”:</p>
<p><strong>ob.saysomething.</strong></p>
<p><strong>def showstring<br />
       puts( &#8220;Hello&#8221; )<br />
end<br />
def showname( aName )<br />
       puts( &#8220;Hello #{aName}&#8221; )<br />
end<br />
def return_name( aFirstName, aSecondName )<br />
       return &#8220;Hello #{aFirstName} #{aSecondName}&#8221;<br />
end<br />
def return_name2 aFirstName, aSecondName<br />
       return &#8220;Hello #{aFirstName} #{aSecondName}&#8221;<br />
end<br />
showstring<br />
showname( &#8220;Fred&#8221; )<br />
puts( return_name( &#8220;Mary Mary&#8221;, &#8220;Quite-Contrary&#8221;  ) )<br />
puts( return_name( &#8220;Little Jack&#8221;, &#8220;Horner&#8221;  ) )<br />
</strong><br />
No Ruby um método é declarado com a palavra-chave def  seguida do nome do método  o qual<br />
deveria iniciar com uma letra minúscula, como este:</p>
<p><strong>def showstring<br />
      puts( &#8220;Hello&#8221; )<br />
end<br />
</strong></p>
<p>Você pode, opcionalmente, colocar um ou mais argumentos, separados por vírgula, após o nome do<br />
método:</p>
<p><strong>def showname( aName )<br />
      puts( &#8220;Hello #{aName}&#8221; )<br />
end<br />
def return_name( aFirstName, aSecondName )<br />
      return &#8220;Hello #{aFirstName} #{aSecondName}&#8221;<br />
end<br />
</strong><br />
Os parênteses em volta dos argumentos são opcionais. A seguinte sintaxe também é permitida:</p>
<p><strong>def return_name2 aFirstName, aSecondName<br />
      return &#8220;Hello #{aFirstName} #{aSecondName}&#8221;<br />
end<br />
</strong></p>
<p>Como explicado anteriormente,  eu sou mais favorável a usar os parênteses mas você pode omiti-los<br />
se quiser.</p>
<p><strong><br />
def showstring<br />
            puts( &#8220;Hello&#8221; )<br />
end<br />
def showname( aName )<br />
            puts( &#8220;Hello #{aName}&#8221; )<br />
end<br />
def return_name( aFirstName, aSecondName )<br />
            return &#8220;Hello #{aFirstName} #{aSecondName}&#8221;<br />
end<br />
def return_name2 aFirstName, aSecondName<br />
            return &#8220;Hello #{aFirstName} #{aSecondName}&#8221;<br />
end<br />
                             </strong><br />
# so which object owns these methods, anyhow?<br />
# The following test reveals all&#8230;<br />
print( &#8220;The &#8216;free standing methods&#8217; in this code belong to an<br />
object named: &#8221; )<br />
puts( self )<br />
print( &#8220;which is an instance of the class: &#8221; )<br />
puts( self.class )<br />
#Free-standing methods (like those above which are not defined<br />
within a<br />
#specific class) are methods (strictly speaking, &#8216;private&#8217;<br />
methods) of<br />
#the main object which Ruby creates automtically. The following<br />
code<br />
#displays a list of the main object&#8217;s private methods. Look<br />
carefully and<br />
#you will find showname, return_name and return_name2 in that list<br />
puts( &#8220;It contains these private methods: &#8221; )<br />
puts( self.private_methods )</p>
<p>Se os métodos se ligam aos objetos, qual objeto possui os métodos “independentes” que você escreve no seu código? Como mencionado antes, o Ruby cria automaticamente um objeto chamado main quando você executa um programa e é a esse objeto que os métodos “independentes” se ligam.</p>
<p><strong>Números</strong></p>
<p>Números são tão fáceis de usar quanto as strings. Por exemplo, vamos supor que você quer calcular o preço de venda e o total geral de alguns itens partindo do subtotal e da taxa de imposto.Para fazer isto você precisaria multiplicar o subtotal pela taxa de imposto e adicionar o valor ao subtotal. Assumindo que o subtotal é $100 e a taxa de imposto é de 17.5%, este código Ruby faz o cálculo e mostra o resultado:</p>
<p><strong>subtotal = 100.00<br />
taxrate = 0.175<br />
tax = subtotal * taxrate<br />
puts &#8220;Tax on $#{subtotal} is $#{tax}, so grand total is<br />
$#{subtotal+tax}&#8221;<br />
</strong></p>
<p>Obviamente, seria mais útil se pudéssemos efetuar o cálculo de vários subtotais em vez de ficar fazendo o mesmo cálculo toda vez. Aqui está uma versão simples da “Calculadora de Impostos” que pergunta ao usuário o subtotal:<br />
<strong><br />
taxrate = 0.175<br />
print &#8220;Enter price (ex tax): &#8221;<br />
s = gets<br />
subtotal = s.to_f<br />
tax = subtotal * taxrate<br />
puts &#8220;Tax on $#{subtotal} is $#{tax}, so grand total is<br />
$#{subtotal+tax}&#8221;<br />
</strong></p>
<p>Aqui s.to_f é um método da classe String. Este método tenta converter a string para um número de ponto flutuante. Por exemplo, a string “145.45” seria convertida para o número de ponto flutuante 145.45. Se a string não pode ser convertida, 0.0 é retornado. Assim, por exemplo, “Hello </p>
<p><strong>world”.to_f retornaria 0.0.</strong></p>
<p><strong>Testando uma Condição: if &#8230;             then</strong></p>
<p>O problema com o código da “Calculadora de Impostos” mostrado acima é que ele aceita subtotais negativos e calcula imposto negativo sobre eles. Eu, por essa razão,  preciso checar os valores negativos e, quando encontrá-los, zerá-los.<br />
Esta é minha nova versão do código:</p>
<p><strong>taxrate = 0.175<br />
print &#8220;Enter price (ex tax): &#8221;<br />
s = gets<br />
subtotal = s.to_f<br />
if (subtotal < 0.0) then<br />
        subtotal = 0.0<br />
end<br />
tax = subtotal * taxrate<br />
puts "Tax on $#{subtotal} is $#{tax}, so grand total is<br />
$#{subtotal+tax}"<br />
</strong></p>
<p>O teste Ruby if é semelhante a um teste if em outras linguagens de programação . Note que os parênteses, mais uma vez, são opcionais, assim como a palavra-chave then. Entretanto, se você for escrever o seguinte, sem quebra de linha após a condição de teste, o then é obrigatório:</p>
<p><strong>if (subtotal < 0.0) then subtotal = 0.0 end</strong></p>
<p>Obs: Note que a palavra-chave end que termina o bloco if não é opcional. Esqueça de colocá-la e o seu código não irá rodar.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/ruby-strings-numeros-metodos-e-condicionais/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Biblioteca de Expressões Regulares.</title>
		<link>http://blog.hostweb.com.br/biblioteca-de-expressoes-regulares/hostweb</link>
		<comments>http://blog.hostweb.com.br/biblioteca-de-expressoes-regulares/hostweb#comments</comments>
		<pubDate>Mon, 08 Feb 2010 17:20:38 +0000</pubDate>
		<dc:creator>Giordano Alves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Expressões Regulares]]></category>
		<category><![CDATA[Regex]]></category>
		<category><![CDATA[Regexlib]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=502</guid>
		<description><![CDATA[Hoje trago a vocês a dica do site RegexLib, nesse site encontramos uma vasta coleção de expresssões regulares prontas para o nosso uso.
Para procurar uma expressão regular no site e so voce digitar no campo Find Expressions uma palavra chave sobre a expressão regular que voce quer.

O site retornará alguns exemplos encontrados com uma breve [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Hoje trago a vocês a dica do site <a title="RegexLib" href="http://regexlib.com/" target="_blank">RegexLib</a>, nesse site encontramos uma vasta coleção de expresssões regulares prontas para o nosso uso.</p>
<p style="text-align: justify;">Para procurar uma expressão regular no site e so voce digitar no campo <em>Find Expressions</em> uma palavra chave sobre a expressão regular que voce quer.</p>
<p><img class="aligncenter size-full wp-image-503" title="Regular Expression Library" src="http://blog.hostweb.com.br/wp-content/uploads/2010/02/Regular-Expression-Library.png" alt="Regular Expression Library" width="510" height="97" /></p>
<p style="text-align: justify;">O site retornará alguns exemplos encontrados com uma breve descricao sobre o que cada exemplo faz.</p>
<p><img class="aligncenter size-full wp-image-504" title="Regular" src="http://blog.hostweb.com.br/wp-content/uploads/2010/02/Regular.png" alt="Regular" width="522" height="883" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/biblioteca-de-expressoes-regulares/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mootools e JQuery juntos. Como?</title>
		<link>http://blog.hostweb.com.br/mootools-jquery-juntos/hostweb</link>
		<comments>http://blog.hostweb.com.br/mootools-jquery-juntos/hostweb#comments</comments>
		<pubDate>Mon, 25 Jan 2010 17:20:50 +0000</pubDate>
		<dc:creator>Giordano Alves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=428</guid>
		<description><![CDATA[Se voce está lendo esse artigo, deve ter tido problema ao tentar usar as bibliotecas Mootools e JQuery juntas.
Quando tentamos usar as duas juntas ocorre um erro pelo fato das duas bibliotecas terem o mesmo construtor $(). Então pode acontecer delas tentarem interpretar o mesmo código. O JQuery tentando interpretrar código que foi feito para [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Se voce está lendo esse artigo, deve ter tido problema ao tentar usar as bibliotecas <a title="Mootools" href="http://mootools.net/" target="_blank">Mootools</a> e <a title="JQuery" href="http://jquery.com/" target="_blank">JQuery</a> juntas.</p>
<p style="text-align: justify;">Quando tentamos usar as duas juntas ocorre um erro pelo fato das duas bibliotecas terem o mesmo construtor<em> <strong>$()</strong></em>. Então pode acontecer delas tentarem interpretar o mesmo código. O JQuery tentando interpretrar código que foi feito para o Mootools e o Mootools querendo interpretar código escrito para JQuery.</p>
<p style="text-align: justify;">Mas não se preocupe, existe uma solução bem simples para resolver esse problema.</p>
<p style="text-align: justify;"><a href="http://ejohn.org/">John Resig</a>( criador do JQuery ), sabendo que outras bibliotecas usavam o mesmo construtor que ele, criou a funçao <strong><em>jQuery.noConflict</em></strong>.</p>
<p style="text-align: justify;">Voce apenas tem que chama-lá depois da inclusão da biblioteca JQuery, antes de usar qualquer função JQuery e colocar <em>jQuery</em> como construtor no lugar $()</p>
<div id="code">&lt;script type=&#8221;text/javascript&#8221;&gt;</p>
<p> jQuery.noConflit();</p>
<p> jQuery().ready(function(){</p>
<p> jQuery(&#8217;#empresa&#8217;).css(&#8217;color&#8217;, &#8216;blue&#8217;);</p>
<p> });</p>
<p> &lt;/script&gt;</p></div>
<p>Agora é só usar o seu script Mootools com o construtor padrão:</p>
<div id="code">&lt;script type=&#8221;text/javascript&#8221;&gt;</p>
<p>$(&#8217;pessoa&#8217;).inject(&#8217;empresa&#8217;, &#8216;top&#8217;);</p>
<p>&lt;/script&gt;</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/mootools-jquery-juntos/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Por que usar Controle de Versões</title>
		<link>http://blog.hostweb.com.br/por-que-usar-controle-de-versoes/hostweb</link>
		<comments>http://blog.hostweb.com.br/por-que-usar-controle-de-versoes/hostweb#comments</comments>
		<pubDate>Mon, 11 Jan 2010 17:33:15 +0000</pubDate>
		<dc:creator>Giordano Alves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Controle de Versões]]></category>
		<category><![CDATA[CVS]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[VCS]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=385</guid>
		<description><![CDATA[Um sistema de controle de versão, VCS (do inglês version control system) ou ainda SCM (do inglês source code management), é um software com a finalidade de gerenciar diferentes versões no desenvolvimento de um documento qualquer. Esses sistemas são comumente utilizados no desenvolvimento de software para controlar as diferentes versões – histórico e desenvolvimento – [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Um sistema de controle de versão, VCS (do inglês version control system) ou ainda SCM (do inglês source code management), é um software com a finalidade de gerenciar diferentes versões no desenvolvimento de um documento qualquer. Esses sistemas são comumente utilizados no desenvolvimento de software para controlar as diferentes versões – histórico e desenvolvimento – dos códigos-fontes e também da documentação.</p>
<p style="text-align: justify;">Esse tipo de sistema é muito presente em empresas e instituições de tecnologia e desenvolvimento de software. É também muito comum no desenvolvimento de software livre. É útil, em diversos aspectos, tanto para projetos pessoais pequenos e simples como também para grandes projetos comerciais.</p>
<p style="text-align: justify;"><strong>Principais Vantagens</strong></p>
<p style="text-align: justify;">Imaginem o seguinte quadro:</p>
<p style="text-align: justify;">Você chega na sua empresa de manhã cedinho para terminar aquele trabalho que você passou o dia anterior fazendo, só que chegando lá voce descobre que aquele estagiário novo alterou acidentalmente os arquivos que você tanto demorou pra fazer. É um desespero não? Seu prazo esta estourado e você vai ter que passar a madrugada toda trabalhando para poder entregar o trabalho no tempo.</p>
<p style="text-align: justify;">Se você utilizasse um VCS isso poderia ser facilmente resolvido com um simples comando. Isso porque todo o código( assim como seu histórico ) fica guardado em um servidor. O envio das alterações é feito a gosto do desenvolvedor (do lado do cliente), quando ele desejar; mas, para minimizar conflitos de versões, facilitar no desfazer de alterações e também no controle do histórico, recomenda-se que uma alteração seja enviada cada vez que o software estiver minimamente estável.</p>
<p style="text-align: justify;">A principal função do sistema de controle de versão é armazenar todo o histórico de desenvolvimento do documento, desde o primeiro envio até sua última versão. Isso permite que seja possível resgatar uma determinada versão de qualquer data mais antiga, evitando desperdício de tempo no desenvolvimento para desfazer alterações quando se toma algum rumo equivocado.</p>
<p style="text-align: justify;"><span id="more-385"></span></p>
<p style="text-align: justify;"><strong>Alguns exemplos de softwares que fazem controle de versoes</strong></p>
<p>Soluções comerciais</p>
<ul>
<li>Microsoft Visual SourceSafe (VSS) &#8211; produto da Microsoft para controle de versão, integrado a muitas IDEs da Microsoft.</li>
<li>Rational ClearCase &#8211; produto da IBM para controle de versão.</li>
<li>Borland StarTeam &#8211; produto da Borland para controle de versão e de equipe.</li>
</ul>
<p>Soluções livres</p>
<ul>
<li>Concurrent Version System (CVS) &#8211; software livre clássico e bem testado.</li>
<li>Subversion (SVN)</li>
<li>Git &#8211; Software para controle de versão distribuído com foco na velocidade.</li>
<li>MediaWiki &#8211; software livre que possui um sistema integrado de controle de versões. Sites com os projetos da Wikimedia, tal como a Wikipédia mantém o sistema MediaWiki para o controle das versões dos documentos. Esse sistema permite o trabalho simultâneo de milhares de voluntários.</li>
<li>GNU CSSC</li>
<li>Revision Control System (RCS)</li>
<li>Bazaar</li>
<li>Darcs</li>
<li>Mercurial</li>
<li>Monotone</li>
<li>SVK</li>
</ul>
<p>Fonte: <a title="Wikipedia" href="http://pt.wikipedia.org/w/index.php?title=Lista_de_sistemas_de_controle_de_versão&amp;action=edit&amp;redlink=1" target="_blank">Wikipédia</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/por-que-usar-controle-de-versoes/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL ou PostgreSQL, qual usar?</title>
		<link>http://blog.hostweb.com.br/mysql-ou-postgresql-qual-usar/hostweb</link>
		<comments>http://blog.hostweb.com.br/mysql-ou-postgresql-qual-usar/hostweb#comments</comments>
		<pubDate>Tue, 29 Dec 2009 11:39:52 +0000</pubDate>
		<dc:creator>Lino</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SGBD]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=246</guid>
		<description><![CDATA[Ambos são muito bons e não fazem feio diante das alternativas pagas. Além disso, possuem recursos e vantagens em comum, o que significa que, para a maioria das aplicações, ambos podem ser usados. Na verdade, o correto não é tentar descobrir qual é o melhor, mas em que situação um ou outro deve ser utilizado.
O [...]]]></description>
			<content:encoded><![CDATA[<p>Ambos são muito bons e não fazem feio diante das alternativas pagas. Além disso, possuem recursos e vantagens em comum, o que significa que, para a maioria das aplicações, ambos podem ser usados. Na verdade, o correto não é tentar descobrir qual é o melhor, mas em que situação um ou outro deve ser utilizado.</p>
<p>O PostgreSQL é otimizado para aplicações complexas, isto é, que envolvem grandes volumes de dados ou que tratam de informações críticas. Assim, para um sistema de comércio eletrônico de porte médio/alto, por exemplo, o PostGreSQL é mais interessante, já que esse SGBD é capaz de lidar de maneira satisfatória com o volume de dados gerado pelas operações de consulta e venda.</p>
<p>O MySQL, por sua vez, é focado na agilidade. Assim, se sua aplicação necessita de retornos rápidos e não envolve operações complexas, o MySQL é a opção mais adequada, pois é otimizado para proporcionar processamento rápido dos dados e tempo curto de resposta sem exigir muito do hardware. Se você precisa, por exemplo, de um banco de dados para armazenar o conteúdo do seu site, de seu  fórum ou necessita manter um cadastro de usuários de um portal, o MySQL “serve como uma luva”, pois tais aplicações não necessitam dos recursos avançados que o PostgreSQL oferece.</p>
<p><span id="more-246"></span></p>
<p>Para escolher um destes dois SGBD, procure entender bem quais recursos sua aplicação precisa. Tente estimar o volume de dados, avalie o hardware disponível, certifique-se das funcionalidades necessárias e, posteriormente, procure por informações mais detalhadas do MySQL e do PostGreSQL. Se sua aplicação for simples – principalmente se for algo ligado à internet -, não é preciso pensar muito: o MySQL é uma escolha satisfatória, pois é facilmente encontrado em serviços de hospedagem.</p>
<p>Todavia, há situações em que tanto o MySQL quanto o PostgreSQL serão boas escolhas. Nesses casos, é recomendável fazer testes com ambos e avaliar qual oferece mais vantagens à aplicação.</p>
<p>Finalizando</p>
<p>Um banco de dados pode ser a diferença entre ter e não ter um negócio, seja ele de qualquer porte. Por isso, a escolha deve ser bem feita e aspectos como desempenho, recursos, documentação e suporte devem ser considerados. Em todos esses pontos o MySQL e o PostgreSQL são excelente, por isso, a escolha entre um deles só depende de sua aplicação.</p>
<p>Para saber mais sobre o PostgreSQL, visite:</p>
<p>http://www.postgresql.org<br />
http://www.postgresql.org.br</p>
<p>Para saber mais sobre o MySQL, visite:</p>
<p>http://www.mysql.com<br />
http://www.mysqlbrasil.com.br</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/mysql-ou-postgresql-qual-usar/hostweb/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Enviando emails usando C#</title>
		<link>http://blog.hostweb.com.br/enviando-emails-usando-c/hostweb</link>
		<comments>http://blog.hostweb.com.br/enviando-emails-usando-c/hostweb#comments</comments>
		<pubDate>Wed, 23 Dec 2009 15:22:41 +0000</pubDate>
		<dc:creator>Bruno Sabóia</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Email]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=241</guid>
		<description><![CDATA[Olá, garotada. O post de hoje tratará de um assunto mais simples, porém bastante necessário e básico na rotina atual de programação: envio de emails.
Com a popularização da internet, o email passou a ser um meio de comunicação extremamente difundido. As linguagens mais antigas, como C, não possuem um suporte tão cristalino ao envio de [...]]]></description>
			<content:encoded><![CDATA[<p>Olá, garotada. O post de hoje tratará de um assunto mais simples, porém bastante necessário e básico na rotina atual de programação: envio de emails.</p>
<p>Com a popularização da internet, o email passou a ser um meio de comunicação extremamente difundido. As linguagens mais antigas, como C, não possuem um suporte tão cristalino ao envio de mensagens como as atuais. É claro que é possível fazê-lo, mas nas linguagens atuais é mais fácil.</p>
<p>Linguagens totalmente voltadas ao desenvolvimento web, como Ruby e PHP, tem um ótimo suporte ao envio de emails. O C# se encontra em uma situação intermediária, mas não é nada assustador.</p>
<p>As classes de envio de email se encontram no namespace System.Net.Mail, disponível no framework 2.0 em diante.</p>
<p><span id="more-241"></span></p>
<p>Começamos colocando o remetente e o destinatário da mensagem. Isso é simples de se fazer:</p>
<div id="code">MailAddress from = new MailAddress(&#8221;brunosaboia@hostweb.com.br&#8221;);<br />
MailAddress to = new MailAddress(&#8221;leitor@hostweb.com.br&#8221;);</div>
<p>Simples, não? Agora, podemos criar a nossa MailMessage para enviar o email:</p>
<div id="code">MailMessage message = new MailMessage(from, to);</div>
<p>Agora, já temos o objeto da nossa mensagem. Mas uma mensagem sem assunto, sem conteúdo e sem ser enviada&#8230; bem, não é exatamente o meu conceito de mensagem.</p>
<div id="code">message.Subject = &#8220;Olá, caro leitor&#8221;;<br />
message.Body = &#8220;Gostaria de desejar um feliz natal a você e sua família!&#8221;;</div>
<p>Pronto, assim está melhor. Temos um destinatário, um remetente, um assunto e um conteúdo. Agora podemos chamá-la de mensagem, não? Porém, se não a enviarmos, ela ainda não terá cumprido seu objetivo, e será uma mensagem triste e derrotada. Vamos ajudá-la:</p>
<div id="code">try<br />
{<br />
client.Send(message);<br />
Console.WriteLine(&#8221;Mensagem enviada com sucesso!&#8221;);<br />
}<br />
catch (Exception ex)<br />
{<br />
Console.WriteLine(&#8221;Erro ao enviar: {0}&#8221;, ex.ToString());<br />
}</div>
<p>Se tudo ocorrer bem, a mensagem será enviada e você terá desejado feliz natal a alguém.</p>
<p>Segue abaixo o código completo:</p>
<div id="code">using System;<br />
using System.Collections.Generic;<br />
using System.Text;<br />
using System.Net.Mail;</p>
<p>namespace MailTest<br />
{<br />
class Program<br />
{<br />
static void Main(string[] args)<br />
{<br />
MailAddress from = new MailAddress(&#8221;brunosaboia@hostweb.com.br&#8221;, &#8220;Bruno Saboia&#8221;);<br />
MailAddress to = new MailAddress(&#8221;leitor@hostweb.com.br&#8221;, &#8220;Leitor do Blog&#8221;);<br />
MailMessage message = new MailMessage(from, to);</p>
<p>message.Subject = &#8220;Olá, caro leitor&#8221;;<br />
message.Body = &#8220;Gostaria de desejar um feliz natal a você e sua família!&#8221;;</p>
<p>string smtpHost = &#8220;smtp.hostweb.com.br&#8221;;<br />
SmtpClient client = new SmtpClient(smtpHost);</p>
<p>try<br />
{<br />
client.Send(message);<br />
Console.WriteLine(&#8221;Mensagem enviada com sucesso!&#8221;);<br />
}<br />
catch (Exception ex)<br />
{<br />
Console.WriteLine(&#8221;Erro ao enviar a mensagem: {0}&#8221;, ex.ToString());<br />
}</p>
<p>}<br />
}<br />
}</p></div>
<p>Espero que tenham gostado. Feliz natal, e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/enviando-emails-usando-c/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Falando sobre XP</title>
		<link>http://blog.hostweb.com.br/falando-sobre-xp/hostweb</link>
		<comments>http://blog.hostweb.com.br/falando-sobre-xp/hostweb#comments</comments>
		<pubDate>Wed, 23 Dec 2009 14:22:52 +0000</pubDate>
		<dc:creator>Sergio B Uchoa</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=235</guid>
		<description><![CDATA[XP é uma metodologia para desenvolvimento de software que foi desenvolvida ao longe das décadas de 80 e 90, mas que somente a partir de 2001 ganhou impulso e passou a ser mais usado em todo o mundo.
Pertencente ao que se convencionou chamar de metodologias ágeis, XP baseia-se em quatro valores:
- Feedback
- Comunicação
- Simplicidade
- Coragem
Viníucius [...]]]></description>
			<content:encoded><![CDATA[<p>XP é uma metodologia para desenvolvimento de software que foi desenvolvida ao longe das décadas de 80 e 90, mas que somente a partir de 2001 ganhou impulso e passou a ser mais usado em todo o mundo.</p>
<p>Pertencente ao que se convencionou chamar de metodologias ágeis, XP baseia-se em quatro valores:</p>
<p>- <em>Feedback</em></p>
<p>- Comunicação</p>
<p>- Simplicidade</p>
<p>- Coragem</p>
<p>Viníucius Teles, um dos grandes evangelizadores de XP no Brasil, afirma que “quando o cliente aprende com o sistema que utiliza e re-avalia as suas necessidades, ele gera feedback para a equipe de desenvolvimento”. Essa característica do <em>feedback</em> está fortemente relacionada à prática do XP  ter sempre junto à  equipe de desenvolvimento pelo menos uma pessoa que será usuária do sistema, bem como ao uso de ciclos de iterações bastante curtos.</p>
<p>A comunicação é entendida, segundo Teles, como o processo que permite que as informações sejam transmitidas dentro da equipe e entre a equipe e o cliente. Este processo tem que ser claro, rápido; não é focado na formalidade e sim na informação de qualidade. Para o XP a melhor forma de repassar uma informação é de forma oral e em reuniões de corpo presente.</p>
<p>No XP a equipe de desenvolvimento de software irá programar sempre o necessário para atender ao requisito do cliente, mas nada mais que isso. Ao propor essa abordagem, o XP se contrapõe a  outras formas de projetar sistemas que procuram antecipar problemas e de formas a obter ganhos.</p>
<p>A coragem como valor no XP pode ser observada em características como:</p>
<p><span id="more-235"></span></p>
<p>- Coragem para desenvolver o software de forma incremental</p>
<p>Adotando este paradigma mais uma vez reforça-se a idéia que o desenvolvimento deve ser feito para resolver os problemas existentes e que podem ser identificados. Deve-se abolir a idéia de programar funcionalidades no projeto que sejam baseadas em especulações.</p>
<p>- Manter o sistema simples</p>
<p>Significa preocupar-se em manter todo o projeto de forma geral, simples. Não tentar antecipar problemas e nem desenvolver funcionalidades que o cliente não deseja.</p>
<p>- Permitir que o cliente priorize as funcionalidades</p>
<p>Entregar ao cliente o comando do desenvolvimento pois o mesmo passa a ficar mais comprometido com o resultado.  Outra conseqüência direta desta prática é o aumento da confiança entre equipe de projeto e cliente.</p>
<p>- Programação em pares (<em>pair programming</em>)</p>
<p>A programação em pares é um dos pilares do XP. Significa colocar sempre dois profissionais para executar uma tarefa. A idéia é que ao fazerem a mesma juntos, alternando-se entre quem codifica, estes possam ficar verificando o que está sendo feito. Essa forma de trabalho redunda em uma das grandes vantagens do XP que é o baixo valor de correção de erro. Esse valor cai significativamente, pois os erros são detectados logo no processo de codificação.</p>
<p><em>- Refactoring</em></p>
<p><em>Refactoring</em> pode ser traduzido como uma aplicação do conceito de melhoria contínua na programação de software. A idéia é que ao refazer constantemente sempre parte do software, este ficará cada vez mais organizado, menos sujeito a erros e ainda  mais no domínio da equipe. Segundo Teles (TELES, 2005) “existe um ditado que diz que um dia sem <em>refactoring</em> é como um dia sem sol”.</p>
<p>- Investir tempo em testes automatizados</p>
<p>O desenvolvimento ágil tem como característica marcante a agilidade, a facilidade de receber mudanças. Para suportar essas mudanças é necessário um comprometimento de toda a equipe do projeto com testes. Estes testes são necessários, ocorrem de forma automatizada e o mais cedo possível, exatamente para corrigir eventuais erros e evitar correções de custo elevado mais tarde. E ainda são os testes um importante espaço de participação do cliente, pois nestes o usuário tem papel de destaque. Caso o usuário não possa executar os testes de validação sozinho, uma pessoa da equipe do projeto deve auxiliá-lo. Contudo, a presença do cliente nesta etapa é essencial.</p>
<p>- Estimar as histórias na presença do cliente</p>
<p>O XP utiliza como instrumento principal de documentação os cartões com histórias do cliente. São esses cartões que irão ser a base de todo o projeto. Quando a equipe se reúne para definir os tempos de cada cartão o cliente é a parte imprescindível. Seu papel nessa etapa é validar o conteúdo do cartão e o entendimento da equipe e, principalmente, definir a prioridade da execução. Ao definir que histórias serão executadas o cliente estabelece uma iteração</p>
<p>- Expor o código a todos os membros da equipe</p>
<p>O código de todo projeto executado usando XP é coletivo. Isso significa que qualquer membro da equipe pode ver o código que o outro escreveu e, mais que isso, deve oferecer comentários, observações e fazer <em>refactoring</em> desse código. O XP necessita do trabalho coletivo não sendo compatível com sua metodologia a idéia de profissionais que não compartilhem.</p>
<p>- Integrar o sistema diversas vezes ao dia</p>
<p>Seguindo o conceito de desenvolver e testar de forma muito próxima, no XP o projeto é integrado continuamente. Podem-se corrigir problemas de integração que somente seriam corrigidos em etapas posteriores do projeto.</p>
<p>- Adotar um ritmo sustentável</p>
<p>Trabalhar com metas realistas é outra característica importante do XP. Ao discutir a precedência das ações com o cliente de forma transparente, a equipe também apresenta a este qual seu ritmo de execução.</p>
<p>- Abrir mão de documentação que vale como defesa</p>
<p>O envolvimento e a confiança que o cliente adquira na equipe que utilize XP tornam possível que a equipe utilize a mínima documentação apenas necessária. Não existe no XP a documentação que é feita apenas para o cliente saber o que está sendo feito, como uma prestação de contas. A participação e a transparência com o cliente, o cumprimento dos prazos e a entrega do software funcionando, isso satisfaz o cliente, não papéis com diagramas e modelos.</p>
<p>- Propor contratos de escopo variável</p>
<p>No XP entende-se ser mais vantajoso utilizar o tripé: qualidade, tempo e custo. O escopo é determinado, mas de forma a apenas ser uma orientação inicial. Este formato é colocado como mais adequado para o desenvolvimento de software, pois fundamentalmente o cliente não sabe dizer tudo o que o software terá que ter tudo o que irá compor seu escopo. Este irá sendo determinado ao longo do desenvolvimento. A idéia em XP então é utilizar-se um modelo de contrato no qual o cliente contrata horas e estas são utilizadas de acordo com a implementação das histórias de usuário. Desta forma promove-se o alinhamento de interesses do cliente com o fornecedor conforme verificado no quadro abaixo.</p>
<p><img class="aligncenter size-full wp-image-237" title="Image1" src="http://blog.hostweb.com.br/wp-content/uploads/2009/12/Image1.jpg" alt="Quadro sobre XP" /></p>
<p>- Propor a adoção de um processo novo</p>
<p>Adotar um modelo novo, diferente do qual as pessoas estão habituadas a trabalhar requer coragem. Romper com as resistências é uma das tarefas mais importantes ao se implantar um projeto que vai utilizar XP.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/falando-sobre-xp/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CMS x Frameworks</title>
		<link>http://blog.hostweb.com.br/cms-x-frameworks/hostweb</link>
		<comments>http://blog.hostweb.com.br/cms-x-frameworks/hostweb#comments</comments>
		<pubDate>Mon, 21 Dec 2009 13:33:33 +0000</pubDate>
		<dc:creator>Giordano Alves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://blog.hostweb.com.br/?p=217</guid>
		<description><![CDATA[Muita gente tem dúvidas na hora de diferenciar frameworks de CMS. É uma dúvida comum principalmente para quem esta iniciando na TI.
Bem pra comecar vamos falar sobre CMS.
CMS (Content Mangement System) é isso mesmo que o nome diz, Sistema de Gerenciamento de Conteúdo.
Ele basicamente é um sistema já pronto, com algumas funcionalidades prontas. Entre os [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Muita gente tem dúvidas na hora de diferenciar <a title="frameworks" href="http://pt.wikipedia.org/wiki/Framework" target="_blank">frameworks</a> de <a title="CMS" href="http://pt.wikipedia.org/wiki/Sistema_de_gerenciamento_de_conte%C3%BAdo" target="_blank">CMS</a>. É uma dúvida comum principalmente para quem esta iniciando na TI.</p>
<p style="text-align: justify;">Bem pra comecar vamos falar sobre CMS.</p>
<p style="text-align: justify;"><strong><em><a title="CMS" href="http://pt.wikipedia.org/wiki/Sistema_de_gerenciamento_de_conte%C3%BAdo" target="_blank">CMS</a></em></strong> (Content Mangement System) é isso mesmo que o nome diz, Sistema de Gerenciamento de Conteúdo.<br />
Ele basicamente é um sistema já pronto, com algumas funcionalidades prontas. Entre os mais famosos nós temos o <a title="Joomla" href="http://www.joomla.org" target="_blank">Joomla</a> , o <a title="Wordpress" href="http://wordpress.org/" target="_blank">Wordpress</a> e o <a title="Drupal" href="http://drupal.org/" target="_blank">Drupal</a>.</p>
<p style="text-align: justify;"><strong>Prós</strong><br />
Se você precisa de um sistema básico e que não vai requerer muito desenvolvimento, um <a title="CMS" href="http://pt.wikipedia.org/wiki/Sistema_de_gerenciamento_de_conte%C3%BAdo" target="_blank">CMS</a> vai se adequar perfeitamente. Ele vai te dar um sistema de gerenciamento de conteúdo já pronto e você pode fazer pequenas mudanças para se adequar a sua necessidade. Existem também grande quantidade de bibliotecas prontas para você usar.</p>
<p style="text-align: justify;"><strong>Contras</strong><br />
Não se encaixa bem para fazer sistemas complexos, até da pra fazer mas existem ferramentas melhores para facilitar o desenvolvimento.</p>
<p style="text-align: justify;"><em><strong><a title="Frameworks" href="http://pt.wikipedia.org/wiki/Framework" target="_blank">Framework</a></strong></em> é o conjunto de códigos, junto com bibliotecas de desenvolvimento, organizadas de um jeito que facilita o desenvolvimento de um projeto. Entre os Frameworks mais conhecidos nós encontramos o <a title="Ruby on Rails" href="http://rubyonrails.org/" target="_blank">Ruby on Rails</a>(Ruby), <a title="Django" href="http://www.djangoproject.com/" target="_blank">Django</a>(Python), <a title="Spring" href="http://www.springsource.org/" target="_blank">Spring</a>(Java), <a title="Struts" href="http://struts.apache.org/" target="_blank">Struts</a>(Java) <a title="Cakephp" href="http://www.cakephp.com.br/" target="_blank">CakePHP</a>(Php),  <a title="Zend Framerwok" href="http://framework.zend.com/" target="_blank">ZendFramework</a>(Php) e muitos outros.</p>
<p style="text-align: justify;"><strong>Prós</strong><br />
São ideais para voce reduzir drasticamente o tabalho de um desenvolvedor, possuem várias &#8220;soluções de desenvolvimento&#8221; prontas fazendo com que o desenvolvedor se concentre mais com a abstração da solução do problema.</p>
<p style="text-align: justify;"><strong>Contras</strong><br />
Tem uma curva de aprendizagem que pode ser bem alta.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hostweb.com.br/cms-x-frameworks/hostweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
