<?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/"
	>

<channel>
	<title>Tecnologia de Internet (Locaweb)</title>
	<atom:link href="http://tecblog.locaweb.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://tecblog.locaweb.com.br</link>
	<description></description>
	<pubDate>Thu, 02 Jul 2009 21:23:41 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>FISL 10 - Aplicações Web escaláveis.</title>
		<link>http://tecblog.locaweb.com.br/2009/07/02/aplicacoes-web-escalaveis/</link>
		<comments>http://tecblog.locaweb.com.br/2009/07/02/aplicacoes-web-escalaveis/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 21:22:47 +0000</pubDate>
		<dc:creator>Alessandro Santos</dc:creator>
		
		<category><![CDATA[Escalabidade]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[Técnicas de Desenvolvimento de Software]]></category>

		<category><![CDATA[escalabilidade]]></category>

		<category><![CDATA[fisl10]]></category>

		<category><![CDATA[mencached]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/?p=576</guid>
		<description><![CDATA[Na última edição do Fisl tivemos a oportunidade de conhecer algumas soluções implementadas tanto por grandes empresas quanto por startups para garantir que suas aplicações web obtivessem um alto grau de performance, capacidade e, principalmente, escalabilidade.
Foram expostos alguns cases de infraestrutura de aplicações web com um alto volume de transações como, por exemplo, o boo-box, [...]]]></description>
			<content:encoded><![CDATA[<p>Na última edição do <a href="http://www.fisl.org.br/">Fisl</a> tivemos a oportunidade de conhecer algumas soluções implementadas tanto por grandes empresas quanto por startups para garantir que suas aplicações web obtivessem um alto grau de performance, capacidade e, principalmente, <strong>escalabilidade</strong>.</p>
<p>Foram expostos alguns cases de infraestrutura de aplicações web com um alto volume de transações como, por exemplo, o <a href="http://boo-box.com">boo-box</a>, o <a href="http://drimio.com.br">Drimio</a> e aplicações desenvolvidas pela <a href="http://globo.com">globo.com</a>.</p>
<p>Algumas das implementações de infraestrutura usadas por diversas empresas de médio/grande porte já são “antigas” e populares no mundo web, mas com o advento de novas tecnologias para load balance, cached, etc, fazem a tarefa de deixar uma aplicação web escalável, um pouco mais fácil de implementar e manter.</p>
<p>Abaixo seguem os itens mais abordados pelos desenvolvedores presentes no Fisl no tocante a escalabilidade em ambiente web.</p>
<p><strong>Infraestrura em camadas:</strong></p>
<p>A divisão da aplicação web em camadas permite que cada uma delas seja tratada de forma individual.<br />
Essa divisão permite as melhores praticas para garantir que a escalabilidade seja aplicada diretamente na camada que venha a se tornar um gargalo na aplicação.</p>
<p style="text-align: center;"><img class="size-medium wp-image-588 aligncenter" title="Arquitetura em camadas." src="http://tecblog.locaweb.com.br/wp-content/uploads/2009/07/camadas-300x268.gif" alt="Arquitetura em camadas." width="300" height="268" /></p>
<p><strong>Load Balanced (Balanceadores de carga):</strong></p>
<p>O uso desse artefato tanto na camada de aplicação quanto na camada de acesso a dados permite escalar a aplicação de forma horizontal.<br />
Escalar na horizontal permite que em uma situação em que aplicação já não tenha um tempo resposta aceitável devido ao alto volume de acessos (performace x capacidade) tenha seu estado normalizado apenas por incluir um novo servidor na infraestrutura da aplicação, ou seja, na camada que foi afetada pelo problema.</p>
<p style="text-align: center;"><img class="aligncenter size-medium wp-image-590" title="Fluxo simples de load balance" src="http://tecblog.locaweb.com.br/wp-content/uploads/2009/07/fluxo-300x192.jpg" alt="fluxo" width="300" height="192" /></p>
<p><strong>Banco de dados:</strong></p>
<p>Uma prática comum em sites de médio/grande porte é, além do uso de balanceadores, a divisão de requisições de modificação de dados (insert, update e delete) e leituras em diferentes bases de dados (select).<br />
A sincronização dos dados em todas as bases envolvidas é feita por meio de replicação entre as bases.<br />
O uso de tipo de dados corretos, índices em tabelas e boas práticas na construção de consultas ou store procedures trazem um ganho de performance considerável. Um DBA sempre é bem vindo.</p>
<p><strong>Cached:</strong></p>
<p>Em grande parte da cases no Fisl relacionados ao assunto desse post o termo cached sempre esteve presente nas aplicações apresentadas.<br />
Nesse quesito o <a href="http://www.danga.com/memcached/">memcached</a>, já consolidado na comunidade, foi o sistema de cached mais usado para armazenar conteúdos como resultados de queries SQL, sessões de usuários, css, javascripts, etc.</p>
<p><strong>Monitoração/métricas:</strong></p>
<p>Manter uma aplicação web sob controle requer monitoração constante.<br />
O uso de ferramentas de monitoramento/métricas permite-se alertas sobre possíveis problemas de performance, falhas de hardware, bugs na aplicação e também ajuda com <a href="http://en.wikipedia.org/wiki/Capacity_planning">capacity planning</a>.<br />
Apache ab, nagios, cacti, mrtg, snmp, jmeter, firebug foram os mais citados.</p>
<p><strong>Arquivos estáticos:</strong></p>
<p>Deixar arquivos estáticos como css, imagens, javascripts, etc em um servidor a parte e se possível carregar esses dados em memória, reduzindo assim a carga no servidor de aplicação, se tornou um excelente prática.<br />
Deixando o servidor de arquivos estáticos em um subdomínio, por exemplo, pode-se tirar vantagem do fato de navegadores modernos serem capazes de carregar arquivos de múltiplos domínios simultaneamente.<br />
Outras melhorias de performance em arquivos estáticos podem ser verificadas <a href="http://tecblog.locaweb.com.br/2009/06/25/faca-seu-site-ser-mais-rapido/">aqui</a>.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-603" title="Infraestruturada da Drimio." src="http://tecblog.locaweb.com.br/wp-content/uploads/2009/07/fluxo11.jpg" alt="fluxo11" width="566" height="353" /></p>
<p style="text-align: center;">
<p><strong>Algumas dicas deixadas pelos palestrantes:</strong></p>
<ul>- Procurar fazer transações curtas e comandos simples no banco de dados.</ul>
<ul>- Regras de negócio na aplicação. Banco de dados apenas para armazenar dados.</ul>
<ul>- Use cached sempre que possível.</ul>
<ul>- Sessões de usuário devem ser armazenadas em banco ou cached facilitam a escala da aplicação.</ul>
<ul>- Eliminar possíveis SPOF (Single point of failure).</ul>
<ul>- Coletar estatísticas de performance. Capacity planning deve ser feito com dados reais e não com abstratos.</ul>
<ul>- 80% a 90% do tempo de resposta para o usuário final é gasto no frontend da aplicação. Otimize ao máximo essa camada.</ul>
<ul>- Linguagem/framework de programação por si só não escala.</ul>
<p><strong>Apresentações originais:</strong></p>
<p>Boo-box/Marco Gomes : <a href="http://www.slideshare.net/marcogomes/construindo-uma-empresa-de-servio-web-baseada-em-software-livre-e-colaborao-fisl-10" target="_blank">http://www.slideshare.net/marcogomes/construindo-uma-empresa-de-servio-web-baseada-em-software-livre-e-colaborao-fisl-10</a></p>
<p>Drimio/Elton Luís Minetto : <a href="http://www.slideshare.net/eminetto/app-web-escalaveis-fisl" target="_blank">http://www.slideshare.net/eminetto/app-web-escalaveis-fisl</a></p>
<p>Globo.com/Camila Dias : <a href="http://www.slideshare.net/camilapdias/fisl10-mysql-na-globocom-por-camila-dias-1663778" target="_blank">http://www.slideshare.net/camilapdias/fisl10-mysql-na-globocom-por-camila-dias-1663778</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/07/02/aplicacoes-web-escalaveis/feed/</wfw:commentRss>
		</item>
		<item>
		<title>.Net Architets Day - Boas pr&#225;ticas de arquitetura e engenharia de software</title>
		<link>http://tecblog.locaweb.com.br/2009/07/01/net-architets-day-boas-prticas-de-arquitetura-e-engenharia-de-software/</link>
		<comments>http://tecblog.locaweb.com.br/2009/07/01/net-architets-day-boas-prticas-de-arquitetura-e-engenharia-de-software/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 23:36:17 +0000</pubDate>
		<dc:creator>Luciano Coelho</dc:creator>
		
		<category><![CDATA[.net]]></category>

		<category><![CDATA[arquitetura]]></category>

		<category><![CDATA[ASP.NET MVC]]></category>

		<category><![CDATA[Boas práticas]]></category>

		<category><![CDATA[ddd]]></category>

		<category><![CDATA[Domain-Driven Design]]></category>

		<category><![CDATA[Enterprise Library]]></category>

		<category><![CDATA[injeção de dependência]]></category>

		<category><![CDATA[NHibernate]]></category>

		<category><![CDATA[ORM]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[Testes]]></category>

		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/2009/07/01/net-architets-day-boas-prticas-de-arquitetura-e-engenharia-de-software/</guid>
		<description><![CDATA[ No último sábado (27/06) rolou o .Net Architets Day 2009 voltado para arquitetura de software (com foco em .Net).

Pouco ou quase nada se falou sobre uso de alguma ferramenta específicas Microsoft, até porque o foco do grupo que já existe há algum tempo é exatamente a utilização do .Net com práticas de engenharia de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dotnetarchitects.net/page/NET-Architects-Day-2009.aspx"><img style="border-right-width: 0px; margin: 5px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="dotnetarchitets" border="0" alt="dotnetarchitets" align="left" src="http://tecblog.locaweb.com.br/wp-content/uploads/2009/07/dotnetarchitets.jpg" width="202" height="60" /></a> No último sábado (27/06) rolou o .Net Architets Day 2009 voltado para arquitetura de software (com foco em .Net).
</p>
<p>Pouco ou quase nada se falou sobre uso de alguma ferramenta específicas Microsoft, até porque o foco do <a href="http://www.dotnetarchitects.net/">grupo</a> que já existe há algum tempo é exatamente a utilização do .Net com práticas de engenharia de software e arquitertura.</p>
<p>O evento, segundo a organização, não teve fins lucrativos e o valor foi revertido em brindes e coffe break além de algumas outras despezas (achei muito bacana a prestação de contas apresentada pelo Giovanni, idealizador do grupo).</p>
<p>Estes foram os temas apresentados, com um pequeno resumo de cada palestra. De acordo com a organização, as apresentações e as filmagens estarão disponíveis no <a href="http://www.dotnetarchitects.net/" target="_blank">site</a> do grupo em breve.</p>
<p><strong>Programando com prazer com Domain Driven Design (DDD)</strong> – <a href="http://unplugged.giggio.net" target="_blank">Giovanni Basi</a></p>
<p>A principal preocupação do arquiteto ou desenvolvedor de software deve ser com o futuro, ou seja, a “manutenibilidade” do sistema. Com o design baseado na lógica do domínio do cliente (<a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank">DDD</a>), tudo fica mais fácil, desde a forma de se comunicar (linguagem ubíqua) até a modelagem, desenvolvimento e manutenção do software.</p>
<p><strong>Utilizando Injeção de dependência com Unity (Enterprise Library)</strong> - <a href="http://reverb.leandrodaniel.com/" target="_blank">Leandro Daniel</a></p>
<p>O acoplamento é um problema enorme em POO. Fazer testes em uma classe de negócio que dependa de uma outra que envia e-mail, por exemplo, ou adicionar uma nova funcionalidade a um pedaço que já esteja amarrado a uma implementação é triste demais. O <a href="http://msdn.microsoft.com/en-us/library/cc468366.aspx" target="_blank">Unity</a>, um dos blocos da <a href="http://msdn.microsoft.com/en-us/library/cc467894.aspx" target="_blank">Enterprise Library</a> (incorporado a partir da versão 4.0), foi criado para ajudar nessa tarefa injetando a dependência quando necessário. No entanto, é preciso avaliar o uso para não tornar seu software ainda mais acoplado <img src='http://tecblog.locaweb.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>ASP.Net MVC: tome seu HTML de volta</strong> - <a href="http://www.cavalcante.net/">Victor Cavalcante</a></p>
<p>Nesta palestra foi feita uma comparação entre o <a href="http://www.asp.net/mvc/" target="_blank">ASP.NET MVC</a> e Web Forms, mostrando como ficamos como, com este último, muito presos à interface e fica difícil fazer testes enquanto que, com MVC separa a lógica da apresentação ficando mais flexível e testável. Por outro lado, MVC tem um preço, é necessário colocar a mão na massa, controlar o HTML, é necessário saber programar para web.</p>
<p><strong>ORM - Sendo preguiçoso com NHibernate</strong> - <a href="http://programandoem.net/">Juliano Oliveira</a></p>
<p>No início da palestra o Juliano trocou o título para “Sendo produtivo com <a href="https://www.hibernate.org/343.html" target="_blank">NHibernate</a>”. Este que é um dos frameworks mais conhecidos para mapeamento de objeto relacional é de grande valor na hora de desenvolver seu sistema e diminui bastante a dor de cabeça com criação de tabelas, colunas, constraints, etc. na base de dados. Foi mostrado também o NHProf uma ferramenta comercial para que funciona como o Profiler do SQL Server.</p>
<p><strong>Testes: garantindo que seu código faz o que você quer</strong> - <a href="http://aniche.com.br/">Mauricio Aniche</a></p>
<p>Uma frase que eu tenho ouvido muito ultimamente, mas, graças a Deus, a grande maioria das vezes, só como ilustração “Tá pronto, só falta testar”, foi mencionada mais uma vez. E não é difícil ouvir isso nas empresas que ainda não adotam boas práticas de desenvolvimento. Foi feita uma bela apresentação de como os testes podem ajudar tanto a evitar bugs como na qualidade e na própria codificação, pois fica fácil entender a lógica e as regras de negócio fazendo testes. O uso de ferramentas de automatização de testes como o <a href="http://www.nunit.org/index.php" target="_blank">NUnit</a> ou o Próprio MSTest do Visual Studio, o uso de frameworks de mock potencializam a produtividade.</p>
<p>Valeu muito a pena participar e já estou esperando o próximo.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/07/01/net-architets-day-boas-prticas-de-arquitetura-e-engenharia-de-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>fisl10 - TDD e Rails: Mais rápido, mais forte e melhor</title>
		<link>http://tecblog.locaweb.com.br/2009/06/30/fisl10-tdd-e-rails-mais-rapido-mais-forte-e-melhor/</link>
		<comments>http://tecblog.locaweb.com.br/2009/06/30/fisl10-tdd-e-rails-mais-rapido-mais-forte-e-melhor/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 19:15:11 +0000</pubDate>
		<dc:creator>Fernando Amorim</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[bdd]]></category>

		<category><![CDATA[cucumber]]></category>

		<category><![CDATA[dry]]></category>

		<category><![CDATA[fisl]]></category>

		<category><![CDATA[fisl10]]></category>

		<category><![CDATA[mock]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<category><![CDATA[stub]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[Testes]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/?p=541</guid>
		<description><![CDATA[A primeira apresentação que assisti no fisl10 foi muito boa. Lucas Húngaro mostrou formas de criar aplicações Ruby on Rails com testes, passando um pouco da sua experiência em desenvolvimento Web.

A palestra foi dividida em quatro partes: Fundamentos, Abordagens, Como eu desenvolvo com testes no Rails e Dicas. Mas separei aqui em mais duas: Boas [...]]]></description>
			<content:encoded><![CDATA[<p>A primeira apresentação que assisti no <a title="fisl10" href="http://www.fisl.org.br/10/www/" target="_blank">fisl10</a> foi muito boa. <a title="Lucas Húngaro - Keep Learning" href="http://www.makemesimple.com/blog/" target="_blank">Lucas Húngaro</a> mostrou formas de criar aplicações Ruby on Rails com testes, passando um pouco da sua experiência em desenvolvimento Web.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-560" title="Lucas Húngaro" src="http://tecblog.locaweb.com.br/wp-content/uploads/2009/06/fisl10_lucas_hungaro2.jpg" alt="Lucas Húngaro" width="247" height="250" /></p>
<p>A palestra foi dividida em quatro partes: <strong>Fundamentos</strong>, <strong>Abordagens</strong>, <strong>Como eu desenvolvo com testes no Rails</strong> e <strong>Dicas</strong>. Mas separei aqui em mais duas: <strong>Boas Práticas</strong> e <strong>Maus Sinais</strong>.</p>
<p><strong>Fundamentos</strong></p>
<ul>
<li> <a title="TDD - Test Driven Development" href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">TDD</a>, <a title="BDD - Behavior Driven Development" href="http://en.wikipedia.org/wiki/Behavior_Driven_Development" target="_blank">BDD</a> e suas suas diferenças.</li>
</ul>
<p><strong><br />
Abordagens</strong></p>
<ul>
<li> Outside-in: perspectiva dos usuários, testes de fora para dentro. São os testes de aceitação, mostram onde chegar.</li>
<li> Inside-out: perspectiva do desenvolvedor, testes de dentro para fora. São os testes unitários, mostram como chegar.</li>
<li> Atenção para não duplicar testes. Por exemplo, quando testar validações no model, não testar novamente essa validação no teste do controller que usa esse model.</li>
</ul>
<p><strong><br />
Como eu desenvolvo com testes no Rails</strong></p>
<ul>
<li> Testes unitários somente para models, testes funcionais mínimos e testes de aceitação guiando seu design de alto nível.</li>
<li> Não fazer testes para helpers: se há uma complexidade em um helper que precise de um teste, essa lógica não deveria estar na View. Os helpers devem contém formatação e não lógica de negócio.</li>
<li> Processo ideal: criar uma feature no <a title="Cucumber" href="http://cukes.info/" target="_blank">Cucumber</a> e vai descendo do alto nível (browser, session/routes, view) para os níveis mais baixos (controllers, models).</li>
</ul>
<p><strong><br />
Dicas</strong></p>
<ul>
<li>Use factories para fazer testes.</li>
<li>Especifique os casos de falha, não crie testes somente para a execução perfeita da funcionalidade.</li>
<li>Os testes precisam revelar o comportamento e a intenção. Testes com nomes de métodos ficam esquisitos, coloque no nome do teste o comportamento que você está testando.</li>
<li>Testes não precisam ser totalmente <a title="DRY - Don't Repeat Yourself" href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself" target="_blank">DRY (Don&#8217;t Repeat Yourself)</a>, pois devem ser muito fáceis de entender, somente &#8220;batendo o olho&#8221;.</li>
<li>Use com moderação objetos de substituição (mocks, stubs, proxies, etc).</li>
<li><a title="Martin Fowler - Mocks Aren't Stubs" href="http://martinfowler.com/articles/mocksArentStubs.html" target="_blank">Não utilize mocks como stubs</a>.</li>
<li>Não confie cegamente em métricas: é muito fácil criar testes que não testam nada e que aumenta a cobertura de testes.</li>
</ul>
<p><strong><br />
Boas práticas</strong></p>
<ul>
<li>Não substitua (com mocks, por exemplo) o objeto que você está testando.</li>
<li>Crie wrappers para objetos que você não é dono, ao invés de tentar modificar os objetos de terceiros nos seus testes, já que no Ruby você tem o poder para alterar tudo.</li>
<li>Teste também o que não deve acontecer, sendo explícito a respeito disso.</li>
</ul>
<p><strong><br />
Maus sinais</strong></p>
<ul>
<li>Métodos de setup longos: você está testando muita coisa ao mesmo tempo e seu design provalmente está acoplado.</li>
<li>Falta de testes de integração:  você irá perder a sincronia com as alterações que são feitas nos testes unitários.</li>
</ul>
<p><span style="color: #ffffff;">.</span><br />
Grande parte do que foi passado na apresentação  <strong>se aplica em qualquer plataforma</strong> onde você esteja desenvolvendo orientado a testes.</p>
<p>O arquivo PDF com slides da apresentação você pode <a title="Slides TDD e Rails" href="http://makemesimple.com/files/fisl10.pdf" target="_blank">baixar aqui</a>. O que achei muito legal desses slides é que eles vêm comentados com o texto de base para a apresentação, ou seja, praticamente <strong>você pode &#8220;ler&#8221; a apresentação</strong> que foi feita.<br />
<span style="color: #ffffff;">.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/06/30/fisl10-tdd-e-rails-mais-rapido-mais-forte-e-melhor/feed/</wfw:commentRss>
		</item>
		<item>
		<title>FISL 10 - Conhecimento e cultura</title>
		<link>http://tecblog.locaweb.com.br/2009/06/29/fisl-10-conhecimento-e-cultura/</link>
		<comments>http://tecblog.locaweb.com.br/2009/06/29/fisl-10-conhecimento-e-cultura/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 11:47:54 +0000</pubDate>
		<dc:creator>Mauricio de Amorim</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Rails]]></category>

		<category><![CDATA[fils10]]></category>

		<category><![CDATA[fisl]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[visão]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/?p=507</guid>
		<description><![CDATA[Com a presença de mais de 8 mil pessoas, e grandes nomes como Richard Stallman, fundador do Movimento Software Livre, Jon &#8220;Maddog&#8221; Hall Presidente fundador da Linux Internacional, Peter Sunde um dos fundadores do The Pirate Bay, Chris diBona responsável pelo Software Livre no Google, Chris Hofmann diretor de engenharia e projetos especiais da Mozilla [...]]]></description>
			<content:encoded><![CDATA[<p>Com a presença de mais de 8 mil pessoas, e grandes nomes como Richard Stallman, fundador do Movimento Software Livre, Jon &#8220;Maddog&#8221; Hall Presidente fundador da Linux Internacional, Peter Sunde um dos fundadores do The Pirate Bay, Chris diBona responsável pelo Software Livre no Google, Chris Hofmann diretor de engenharia e projetos especiais da Mozilla Foundation, Nick Nguyen responsável pelos Add-ons Mozilla, entre outros, o FISL 10 foi um grande sucesso, contando até com a presença de nosso Presidente Luís Inácio Lula da Silva.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://mauriciodeamorim.com.br/blog/wp-content/uploads/2009/06/fisl10.png" alt="FISL 10" width="435" height="120" /></p>
<p>Em resumo, com palestras de diversos níveis técnicos e didáticos, das quais tive a oportunidade de acompanhar, destaco as seguintes:</p>
<ul>
<li><a href="http://akitaonrails.com" target="_blank">Fábio Akita</a> - Características e recursos do Ruby on Rails para incrementar o <a href="http://www.youtube.com/watch?v=Gzj723LkRJY" target="_blank">Blog em 15 minutos</a> de <a href="http://www.loudthinking.com/about.html" target="_blank">DHH</a>; (<a href="http://www.slideshare.net/akitaonrails/fisl-10" target="_blank">slide</a>, <a href="http://github.com/akitaonrails/fisl_10_demo/" target="_blank">código</a>)</li>
<li><a href="http://www.makemesimple.com/blog/" target="_blank">Lucas Húngaro</a> - TDD e Rails: Mais rápido, mais forte e melhor; (<a href="http://makemesimple.com/files/fisl10.pdf" target="_blank">pdf</a>)</li>
<li><a href="http://www.pyccuracy.org/" target="_blank">Bernardo Heynemann e Gabriel Falcão</a> - Testes de aceitação como Pyccuracy;</li>
<li>Leonardo Rochael -<a href="http://ipython.scipy.org/moin/P%C3%A1ginaPrincipal" target="_blank"> IPython</a> para principiantes;</li>
<li><a href="http://www.vivaolinux.com.br/perfil/verPerfil.php?login=fabio" target="_blank">Fábio Berbert de Paula</a> - Como ingressar no mercado usando software livre;</li>
<li>Camila Dias - MySQL (<a href="http://lgbassani.wordpress.com/2009/06/26/fisl10-case-mysql-na-globo-com/" target="_blank">resumo da palestra</a>, <a href="http://www.slideshare.net/camilapdias/fisl10-mysql-na-globocom-por-camila-dias-1663778" target="_self">slide</a>)</li>
<li><a href="http://marcogomes.com/blog/" target="_blank">Marco Gomes</a> - Construindo uma empresa de serviços WEB baseada em software livre e colaboração;</li>
<li><a href="http://gc.blog.br/" target="_blank">Guilherme Chapiewski</a> - Uso do software livre e introdução à metodologias ágeis (<a href="http://www.slideshare.net/gchapiewski/desenvolvimento-gil-com-xp-e-scrum-presentation" target="_blank">slide</a>)</li>
<li>Nelson Lago - Empreender com software livre.</li>
</ul>
<p>A grande lição que transmito com esta jornada, vai além dos conceitos técnicos, a vivência e adquirição de conhecimento trazidos das palavras comunidade, comunicação e colaboração, mostram que o ponto principal a ser focado é a cultura, então seja no desenvolvimento de software, seja na aplicação de metodologias ágeis ou na vida em geral, compartilhe o conhecimento, exponha suas idéias, seus códigos, pois a humanidade não só ganha com isso, mas ela evolui. Então, eis algumas dicas:</p>
<p><strong>Não importa o seu nível de conhecimento</strong> - sempre existirá o experiente, o intermediário, o iniciante e o curioso, então compartilhe o que você sabe, crie um blog, participe de fóruns, contribua com algum projeto de código aberto (open source), nem que seja para informar que uma tradução não está correta, que faltou um ponto ou uma acentuação, pois desta maneira você contribuirá para que um curioso se torne um iniciante, um iniciante se torne um intermediário e assim por diante;<br />
<strong>Documente suas dificuldades</strong> - quando sentir alguma dificuldade na resolução de um problema, na melhorar maneira de aplicar um padrão de projeto, documente como você resolveu e publique seus passos, pois esses passos poderão contribuir para que outros alcancem o mesmo resultado de forma mais rápida;<br />
<strong>A melhor forma de aprender é ensinar</strong> - seja voluntário, ao explorar uma nova ferramenta, tecnologia, conceito, compartilhe com seus colegas, passe a informação adiante, faça uma apresentação, monte um grupo de estudos. Com certeza o maior beneficiado com isto é aquele que compartilha, pois enraíza o conhecimento;<br />
<strong>E por fim, comunique-se</strong> - e-mail, twitter e afins, são excelentes ferramentas, mas eu falo de comunicação olhos nos olhos, pergunte o nome do colega ao seu lado, do vizinho à sua frente, sim, aquele que talvez trabalha a anos no mesmo ambiente que o seu, mas você sequer conhece o timbre de voz dele. Descubra com qual tecnologia ele trabalha e se existem formas de ambos se ajudarem, de contribuírem para algo melhor. A comunicação é o elo entre comunidade e colaboração, e ela pode resolver problemas numa velocidade muito maior que qualquer e e-mail,  sms,  mensagem,  etc.</p>
<p><span style="font-size:10px; color: #000000;">Post original:<br />
<a title="Uma grande semana no FISL 10" href="http://mauriciodeamorim.com.br/2009/06/29/uma-grande-semana-no-fisl-10" target="_blank">http://mauriciodeamorim.com.br/2009/06/29/uma-grande-semana-no-fisl-10</a><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/06/29/fisl-10-conhecimento-e-cultura/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cuidado: seu site pode ter sido invadido</title>
		<link>http://tecblog.locaweb.com.br/2009/06/25/cuidado-seu-site-pode-ter-sido-invadido/</link>
		<comments>http://tecblog.locaweb.com.br/2009/06/25/cuidado-seu-site-pode-ter-sido-invadido/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 19:34:33 +0000</pubDate>
		<dc:creator>AkitaOnRails</dc:creator>
		
		<category><![CDATA[Técnicas de Desenvolvimento de Software]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/?p=499</guid>
		<description><![CDATA[O Google tem já há algum tempo um serviço onde ele avalia a periculosidade de um website. Da mesma forma como eles já vasculham toda a Internet para indexar suas páginas, agora ele também as avalia em termos de segurança. A maioria dos bons web browsers já implementa integração com isso e, toda vez que [...]]]></description>
			<content:encoded><![CDATA[<p>O Google tem já há algum tempo um serviço onde ele avalia a periculosidade de um website. Da mesma forma como eles já vasculham toda a Internet para indexar suas páginas, agora ele também as avalia em termos de segurança. A maioria dos bons web browsers já implementa integração com isso e, toda vez que você tentar entrar por acidente em um web site com possíveis problemas de segurança, o browser o avisará da seguinte forma:</p>
<p><center><a href="http://tecblog.locaweb.com.br/wp-content/uploads/2009/06/seguranca.png"><img src="http://tecblog.locaweb.com.br/wp-content/uploads/2009/06/seguranca-300x187.png" alt="seguranca" title="seguranca" width="300" height="187" class="alignnone size-medium wp-image-500" /></a><br />
<small>Tela de aviso sobre problema de segurança em um site</small><br />
</center></p>
<p>Assim você pode escolher se quer seguir ou não. Isso não significa com 100% de certeza que o site está realmente invadido, apenas que, pelo critérios do próprio Google, ele acha que sim.</p>
<p>Agora, o que leva um site a ser invadido? Existem várias maneiras e você como dono de um website, deve ficar muito atento a isso:</p>
<ul>
<li> sua senha na sua hospedagem é fraca. E senha fraca é mais comum do que se pensa. Você usa uma daquelas senhas do tipo &#8220;123456&#8243;, ou &#8220;teste123&#8243; ou mesmo combinações de palavras e datas &#8220;joao1970&#8243;? Tudo isso é muito fraco e lhes digo que trivialmente quebrável. A senha precisa ser o mais aleatório possível. Quer um exemplo de senha forte?  Use <a href="https://www.grc.com/passwords.htm">este gerador</a> e gere combinações como estas:
<p>D2F16079AD2267C09BBD3ECD7C546892C4FB3F4AF52BD556ED857</p>
<p>(Claro, tome todo cuidado para não esquecer depois qual era a senha, é como trancar a porta de casa e esquecer onde deixou a chave <img src='http://tecblog.locaweb.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li> a programação do seu site é falha. E isso é extremamente comum. Na verdade é mais fácil achar um site com defeito do que bem protegido.
<p>Especialmente se o programador não tem interesse em se aprofundar realmente na área (não, faculdade, cursos, certificações, nada disso é garantia). Lembrem-se, exemplos de revista, livros, foram feitos para serem didáticos. Por exemplo, se um livro mostra um exemplo de como se faz um formulário que recebe um upload de imagens, ou um formulário para cadastrar e-mails, eles estão preocupados em explicar apenas um assunto. Coisas como performance, escalabilidade, usabilidade, segurança, não estão sendo discutidos. Especificamente sobre segurança, esses exemplos quase sempre tem buracos, por exemplo, coisas como &#8220;Injeção de SQL&#8221;. Ou imagine que em vez de fazer upload de uma imagem como JPG, o malfeitor faça download de um arquivo do tipo &#8220;virus.exe.jpg&#8221; e seu site aceita e os usuários baixam?</li>
</ul>
<p>Esses são apenas 2 pequenos exemplos. O mundo da internet tem dezenas de maneiras de se invadir e contaminar um website. Às vezes nem precisa de muito, basta alguém que baixou uma versão de um software como Drupal ou Joomla (e não importa se é open source ou comercial, o risco é o mesmo) e nunca fez atualizações, mesmo depois de já terem sido descobertas falhas de segurança que já foram corrigidas. Sistemas obsoletos vão se tornando mais e mais vulneráveis à medida que novas formas de invasão ou bugs são descobertos.</p>
<p>Além de &#8220;Injeção de SQL&#8221; (SQL Injection), ainda existem Cross-Site Request Forgery, Cross Site Scripting, Replay Attack, Session Fixation e muito mais. Hoje em dia não basta apenas que o site esteja &#8220;rodando&#8221;, isso quase sempre não garante muita coisa. Por isso sempre procure pessoas/empresas experientes e de boa reputação para fazer seu site, porque caso contrário é o nome da sua empresa que pode ficar prejudicada quando seus usuários começarem a ser infectados e quando o Google Safe Browsing passar a categorizá-lo como site perigoso.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/06/25/cuidado-seu-site-pode-ter-sido-invadido/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Faça seu site ser mais rápido</title>
		<link>http://tecblog.locaweb.com.br/2009/06/25/faca-seu-site-ser-mais-rapido/</link>
		<comments>http://tecblog.locaweb.com.br/2009/06/25/faca-seu-site-ser-mais-rapido/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 14:13:08 +0000</pubDate>
		<dc:creator>Joca</dc:creator>
		
		<category><![CDATA[Linguagens de Programação]]></category>

		<category><![CDATA[Programação de Interface]]></category>

		<category><![CDATA[Técnicas de Desenvolvimento de Software]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/?p=494</guid>
		<description><![CDATA[Há dois dias atrás o Levy falou sobre como melhorar a permformance de um site no browser aqui mesmo no TecBlog. Hoje o Google lançou uma nova iniciativa em:
http://code.google.com/speed/
que tem por objetivo ajudar todas as pessoas que trabalham com desenvolvimento de aplicativos web a torná-los mais rápidos. Abaixo um vídeo em inglês (sem legendas) sobre [...]]]></description>
			<content:encoded><![CDATA[<p>Há dois dias atrás o Levy falou sobre <a href=http://tecblog.locaweb.com.br/2009/06/23/melhorando-a-performance-de-um-site-no-browser/>como melhorar a permformance de um site no browser</a> aqui mesmo no TecBlog. Hoje o Google lançou uma nova iniciativa em:</p>
<p><a href=http://code.google.com/speed/>http://code.google.com/speed/</a></p>
<p>que tem por objetivo ajudar todas as pessoas que trabalham com desenvolvimento de aplicativos web a torná-los mais rápidos. Abaixo um vídeo em inglês (sem legendas) sobre porque cada milisegundo conta:</p>
<p><center><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/aXJklICrFJI&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/aXJklICrFJI&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object><br />
</center></p>
<p>Esse site tem 3 áreas:</p>
<ul>
<li> Uma área de <a href="http://code.google.com/speed/articles/">tutoriais</a>;</li>
<li> Uma área com <a href="http://code.google.com/speed/downloads.html">ferramentas para download</a> e;</li>
<li> A própria <a href="http://code.google.com/speed/community.html">comunidade de desenvolvedores web</a>.</li>
</ul>
<p>Vale dar uma olhada para rever ou aprender novas técnicas para melhorar a performance do seu site. </p>
<p>Afinal, com um site mais rápido todos ganham.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/06/25/faca-seu-site-ser-mais-rapido/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Exercícios calistênicos para objetos</title>
		<link>http://tecblog.locaweb.com.br/2009/06/24/exercicios-calistenicos-para-objetos/</link>
		<comments>http://tecblog.locaweb.com.br/2009/06/24/exercicios-calistenicos-para-objetos/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 18:42:09 +0000</pubDate>
		<dc:creator>Joca</dc:creator>
		
		<category><![CDATA[Design]]></category>

		<category><![CDATA[Técnicas de Desenvolvimento de Software]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/?p=475</guid>
		<description><![CDATA[Calistenia é uma forma de atividade que consiste em uma variedade de exercícios físicos feitos sem equipamentos ou pesos que têm por objetivo aumentar a força e a flexibilidade usando o peso do próprio corpo como resistência.


Crianças praticando Calistenia em 1943

Jeff Bay, desenvolvedor de sistemas da ThoughtWorks, escreveu um artigo muito interessante no livro &#8220;The [...]]]></description>
			<content:encoded><![CDATA[<p><a href=http://en.wikipedia.org/wiki/Calisthenics>Calistenia</a> é uma forma de atividade que consiste em uma variedade de exercícios físicos feitos sem equipamentos ou pesos que têm por objetivo aumentar a força e a flexibilidade usando o peso do próprio corpo como resistência.</p>
<p><center><br />
<a href="http://tecblog.locaweb.com.br/wp-content/uploads/2009/06/manzanar_calisthenics_0016u.jpg"><img src="http://tecblog.locaweb.com.br/wp-content/uploads/2009/06/manzanar_calisthenics_0016u-300x209.jpg" alt="manzanar_calisthenics_0016u" title="manzanar_calisthenics_0016u" width="300" height="209" class="alignnone size-medium wp-image-476" /></a><br />
<small>Crianças praticando Calistenia em 1943</small><br />
</center></p>
<p>Jeff Bay, desenvolvedor de sistemas da <a href=http://www.thoughtworks.com>ThoughtWorks</a>, escreveu um artigo muito interessante no livro &#8220;<a href=http://www.pragprog.com/titles/twa/thoughtworks-anthology>The ThoughtWorks Antology</a>&#8221; entitulado &#8220;Object Calisthenics&#8221; onde ele propõe um exercício &#8220;calistênico&#8221; para melhorar o design de software e ajudar a internalizar princípios de bom design de programação orientada a objetos.</p>
<p>O exercício consiste em escrever um programa pequeno, de umas 1.000 linhas, seguindo 9 regras bem rígidas:</p>
<ol>
<li> <b>Use apenas um nível de identação por método.</b> O objetivo aqui é garantir que cada método faça apenas uma coisa. Assim facilitamos a leitura e facilidade de manutenção do código. Exemplo:
<pre><code>
class Board {
  ...
  String board() {
    StringBuffer buf = new StringBuffer();
    for(int i = 0; i < 10; i++) {
      for(int j = 0; j < 10; j++)
        buf.append(data[i][j]);
      buf.append("\n" );
    }
    return buf.toString();
  }
}

Class Board {
  ...
  String board() {
    StringBuffer buf = new StringBuffer();
    collectRows(buf);
    Return buf.toString();
  }

  Void collectRows(StringBuffer buf) {
    For(int I = 0; I < 10; i++)
      collectRow(buf, i);
  }

  Void collectRow(StringBuffer buf, int row) {
    For(int I = 0; I < 10; i++)
      Buf.append(data[row][i]);
    buf.append("\n" );
  }
}
</code></pre>
</li>
<li> <b>Não use else.</b> Aqui iremos evitar aquelas construções de vários ifs e elses um dentro do outro, que também dificultam bastante a leitura do código. Exemplo:
<pre><code>
public static void endMe() {
  if (status == DONE) {
    doSomething();
  } else {
    <other code>
  }
}

public static void endMe() {
  if (status == DONE) {
    doSomething();
    return;
  }
  <other code>
}
</code></pre>
<p>Outro exemplo:</p>
<pre><code>
public static Node head() {
  if (isAdvancing()) { return first; }
  else { return last; }
}

public static Node head() {
  return isAdvancing() ? first : last;
}
</code></pre>
</li>
<li> <b>Crie objetos para tipos primitivos e strings.</b> Se um determinado método espara um ano como parâmetro, crie um objeto chamado ano. Um int por si só é apenas um escalar sem significado. Um objeto, mesmo que seja bem pequeno, irá dar ao compilador e ao programador mais informação sobre o valor e por quê ele está sendo usado.</li>
<li> <b>Use apenas um ponto por linha.</b> Com muitos pontos na mesma linha às vezes fica difícil saber que objeto é responsável por qual atividade. Pense da seguinte forma: você pode brincar com seus brincados, com os brinquedos que você faz, com os brinquedos que deram para você. Contudo, você nunca deve brincar com os brinquedos do seu brinquedo. Exemplo:
<pre><code>
class Board {
  ...

  class Piece {
    ...
    String representation;
  }
  class Location {
    ...
    Piece current;
  }

  String boardRepresentation() {
    StringBuffer buf = new StringBuffer();
    for(Location l : squares())
      buf.append(l.current.representation.substring(0, 1));
    return buf.toString();
  }
}

class Board {
  ...

  class Piece {
    ...
    private String representation;
    String character() {
      return representation.substring(0, 1);
    }

    void addTo(StringBuffer buf) {
      buf.append(character());
    }
  }
  class Location {
    ...
    private Piece current;

    void addTo(StringBuffer buf) {
      current.addTo(buf);
    }
  }

  String boardRepresentation() {
    StringBuffer buf = new StringBuffer();
    for(Location l : squares())
      l.addTo(buf);
    return buf.toString();
  }
}
</code></pre>
<p>Note que, apesar de os detalhes da implementação ficarem mais difusos e dar a impressão de que é mais difícil ler esse código, você acaba de criar um método com um nome claro para transformar uma peça em um caracter. Os nomes dos métodos devem servir como comentários, o que facilita a leitura e a manutenção do código.</li>
<li> <b>Não abrevie.</b> É muito tentador abreviar nomes de classes, objetos e variáveis. Resista à tentação. Abreviações dificultam o entendimento do código. Procure manter os nomes com apenas uma ou duas palavras, e evite nomes que duplicam contexto. Por exemplo, na classe <code>Order</code> o método de envio não precisa se chamar <code>shipOrder()</code>. Chamando o método apenas de <code>ship()</code>, você terá chamadas como <code>order.ship()</code>, mais fáceis de ler do que <code>order.orderShip()</code>.</li>
<li> <b>Mantenha todas as entidades pequenas</b>. Isso significa que nenhuma classe pode ter mais do que 50 linhas. Classes como mais de 50 linhas muito provavelmente fazem mais do que uma coisa, o que as deixa mais difíceis de ler e reutilizar.</li>
<li> <b>Não use classes com mais de duas variáveis instanciadas.</b> A maioria das classes deveria ser responsável por manipular uma instância de uma variável, no máximo duas. Adicionar mais instâncias de uma variável a uma classe diminui a coesão da classe. Programando com essa regra em mente você irá perceber que existem dois tipos de classes, as que mantém o estado de uma instância de uma variável e as que coordenam duas variáveis separadas. Procure não misturar as duas responsabilidades na mesma classe. Exemplo:
<pre><code>
  String first;
  String middle;
  String last;
}
</code></pre>
<p>Esse código pode ser decomposto nas classes abaixo:</p>
<pre><code>
class Name {
  Surname family;
  GivenNames given;
}

class Surname {
  String family;
}

class GivenNames {
  List<String> names;
}
</code></pre>
<p>Decompor um conjunto de atributos numa hierarquia de objetos que colaboram entre si nos conduz a um modelo de objetos mais efetivo. No código acima separamos o <code>Surname</code>, frequentemente usado para busca de nomes, dos <code>GivenNames</code>, que foi transformado em uma lista de strings para acomodar pessoas com nomes compostos ou com mais nomes que só primeiro nome, nome do meio e último nome.</li>
<li> <b>Não use coleções de primeira-classe.</b> A aplicação dessa regra é simples: qualquer classe que contenha uma coleção não deve conter outras variáveis. Cada coleção pertencerá à sua própria classe, assim os comportamentos relacionados a essa coleção terão um lugar. Uma coleção é uma variável primitiva muito útil. Tem vários comportamentos mas poucas dicas  semânticas para facilitar a manutenção do código.</li>
<li> <b>Não use Getters/Setters/Properties.</b> A última frase da regra anterior leva quase que diretamente à essa última regra. Se os seus objetos estão encapsulando o conjunto apropriado de instâncias de variáveis mas seu design ainda parece estranho, é hora de examinar mais algumas violações diretas ao encapsulamento. O comportamento não irá seguir a instância de variável se puder simplesmente perguntar pelo valor no lugar atual. Essa regra é às vezes enunciada como &#8220;Diga, não pergunte&#8221;.
</li>
<p>Oito dessas nove regras são formas de visualizar e implementar o Santo Graal da programação orientada a objetos, o encapsulamento de dados. Além disso, uma das regras direciona para uso apropriado do polimorfismo (não usar <code>else</code> e minimizar lógica condicional) e outra é uma estratégia de nomenclatura que força uma nomeação de forma concisa e clara.</p>
<p>Lembre-se que isso é apenas um exercício. É provável que você se depare com situações em que uma regra contradiz a outra, ou mesmo que você se depare com pedaços de códigos que parecerão estranhos. Contudo, experimente escrever umas 1.000 linhas de código usando todas essas regras. Você se verá quebrando velhos hábitos. E ao reler esse código ou passar para outro programador o ler, verá quão mais fácil é sua leitura e manutenção.</p>
<p>O autor termina o texto dizendo que apesar de algumas pessoas acharem que essas regras seriam impossíveis de se aplicar num projeto real, antes de escrever esse artigo ele tinha acabado de trabalhar num sistema com mais de 100.000 linhas de código nesse estilo. Todos os programadores envolvidos nesse projeto perceberam quão mais fácil é trabalhar em desenvolvimento quando se abraça a simplicidade extrema. </p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/06/24/exercicios-calistenicos-para-objetos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Locaweb no FISL - Fórum Internacional de Software Livre</title>
		<link>http://tecblog.locaweb.com.br/2009/06/24/locaweb-no-fisl-forum-internacional-de-software-livre/</link>
		<comments>http://tecblog.locaweb.com.br/2009/06/24/locaweb-no-fisl-forum-internacional-de-software-livre/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 12:48:59 +0000</pubDate>
		<dc:creator>danicuki</dc:creator>
		
		<category><![CDATA[Sem Categoria]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/?p=488</guid>
		<description><![CDATA[Começa hoje o maior encontro da comunidade de software livre do Brasil. Serão cerca de 7.000 pessoas, reunidas em Porto Alegre, para discutir tecnologia, ciência, política, educação, mercado de trabalho e até, porque não dizer, religião. Alguns adeptos do software livre encaram isso como uma grande causa, defendendo com unhas e dentes a utilização do [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-thumbnail wp-image-491" title="linux-11" src="http://tecblog.locaweb.com.br/wp-content/uploads/2009/06/linux-11-150x150.jpg" alt="linux-11" width="150" height="150" />Começa hoje o maior encontro da comunidade de software livre do Brasil. Serão cerca de 7.000 pessoas, reunidas em Porto Alegre, para discutir tecnologia, ciência, política, educação, mercado de trabalho e até, porque não dizer, religião. Alguns adeptos do software livre encaram isso como uma grande causa, defendendo com unhas e dentes a utilização do Linux, OpenOffice, Firefox, citando apenas alguns dentre outras centenas de softwares livre amplamente utilizados no mercado. Da mesma forma que defendem o uso de SL, rejeitam veementemente produtos proprietários.</p>
<p>Naturalmente, não há como negar a importância para a indústria de tecnologia de ambas as filosofias (livre e proprietária), sendo que o melhor caminho deveria ser o do debate, da interoperabilidade, da mútua colaboração. Além disso, a questão é mais complexa do que simplesmente uma rixa entre dois grupos: existem dezenas de tipos de licenças de uso de software (<a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>, <a href="http://en.wikipedia.org/wiki/BSD">BSD</a>, <a href="http://www.apache.org/licenses/">Apache</a>, etc), cada uma com características bem particulares. Com certeza teremos discussões calorosas sobre o assunto (como por exemplo, qual será o futuro do MySQL agora que a Sun foi comprada pela Oracle).</p>
<p><img class="alignleft size-medium wp-image-490" style="margin: 5px;" title="richard_stallman" src="http://tecblog.locaweb.com.br/wp-content/uploads/2009/06/richard_stallman-292x300.jpg" alt="richard_stallman" width="292" height="300" />Temos também a presença confirmada do presidente Lula na conferência, além do prefeito de Porto Alegre e do governador do Rio Grande do Sul, além dos ícones mundialmente conhecidos, como <a href="http://stallman.org/ ">Richard Stallman</a> e Peter Sunde (fundador do <a href="http://www.piratebay.com">Pirate Bay</a>)</p>
<p>A Locaweb, que há quase 10 anos possui hospedagem em ambientes Linux, está presente no evento. Além do stand, quase 30 pessoas dos times de desenvolvimento estarão passeando pelo evento, interagindo com a comunidade e discutindo soluções de tecnologia que possam melhorar a qualidade de seus serviços. Hoje a Locaweb possui uma <a href="http://www.locaweb.com.br/produtos/hospedagem/comparacao-planos.html">ampla infra-estrutura na plataforma Linux</a>, com suporte a Python, Ruby, Java, PHP, Perl, MySQL.</p>
<p>Fiquem ligados no nosso blog para a cobertura completa de palestras e os principais acontecimentos deste grande encontro.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/06/24/locaweb-no-fisl-forum-internacional-de-software-livre/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Melhorando a performance de um site no browser</title>
		<link>http://tecblog.locaweb.com.br/2009/06/23/melhorando-a-performance-de-um-site-no-browser/</link>
		<comments>http://tecblog.locaweb.com.br/2009/06/23/melhorando-a-performance-de-um-site-no-browser/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 11:38:53 +0000</pubDate>
		<dc:creator>Levy Carneiro</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Linguagens de Programação]]></category>

		<category><![CDATA[Navegadores]]></category>

		<category><![CDATA[Programação de Interface]]></category>

		<category><![CDATA[browser]]></category>

		<category><![CDATA[client side]]></category>

		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/?p=462</guid>
		<description><![CDATA[Escalar um site para atender milhões de usuários é sempre bom. Mas isto raramente é o problema. O mais importante é melhorar o tempo de carregamento ou renderização de uma página no browser. Aqui os segundos fazem diferença entre um site que abre &#8220;num estalo&#8221; e outro que demora a carregar acabando por frustrar o [...]]]></description>
			<content:encoded><![CDATA[<p>Escalar um site para atender milhões de usuários é sempre bom. Mas isto raramente é o problema. O mais importante é melhorar o tempo de carregamento ou renderização de uma página no browser. Aqui os segundos fazem diferença entre um site que abre &#8220;num estalo&#8221; e outro que demora a carregar acabando por frustrar o visitante.</p>
<p>Para melhorar a performance client-side de seu site existem diversos itens que você precisa aperfeiçoar em seu site:</p>
<p>- <strong>Reduzir o número de componentes na página</strong>. Uma página com 30 imagens, 10 arquivos CSS e 15 arquivos Javascript realmente vai demorar um certo tempo para ser carregada no browser. É possível reduzir isto tudo para, digamos, 2 imagens, 1 arquivo CSS e 1 arquivo Javascript, usando CSS Sprites e técnicas de consolidação de arquivos. Agora sim seu site carregará muito mais rápido;</p>
<p>- <strong>Usar técnicas de cache client-side</strong>. Arquivos que não mudam tão frequentemente como o logotipo de seu site, alguns ícones, e até arquivos CSS e Javascript podem usar o cabeçalho HTTP &#8220;Expires&#8221; fazendo com que browsers mantenham estes arquivos em cache local, afinal pra que baixar os mesmos arquivos toda vez que um visitante abre seu site? Para isto funcionar direito, você precisará expirar os arquivos atualizados com um número sequencial, por exemplo: logotipo.jpg?20090622001 (ano/mês/dia/alteração_do_dia).</p>
<p>Estes não são os itens mais importantes e nem os únicos. Para ver uma lista completa de coisas que influenciam na velocidade de seu site, baixe o <a href="https://addons.mozilla.org/en-US/firefox/addon/5369">plugin YSlow</a> no Firefox, e rode o teste de velocidade em seu site. Quanto maior a nota, mais rápido é seu site. No relatório existem explicações sobre o motivo daquele item impactar na velocidade de seu site, e o mais importante: <a href="http://developer.yahoo.com/performance/rules.html">como fazer para melhorar</a>.</p>
<p>Um plugin semelhante e bem recente é o <a href="http://code.google.com/speed/page-speed/download.html">Page Speed</a> da Google. Um ponto forte dele é conter diversas ferramentas que ajudam na otimização de seu site, dentre elas, uma excelente que gera online uma versão otimizada das imagens, permitindo que você possa usá-las no site imediatamente. Por exemplo: se uma imagem banner.jpg contém 100KB, você pode gerar uma versão otimizada com apenas 30KB (depende de imagem para imagem), economizando em transferência de dados e velocidade de carregamento.</p>
<p>Um blog interessante que fala sobre este tópico, é o <a href="http://www.stevesouders.com/blog">blog de Steve Souders, autor do livro High Performance Web Sites</a>. Tanto o blog como o <a href="http://oreilly.com/catalog/9780596529307/">livro</a> são extremamente recomendados.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/06/23/melhorando-a-performance-de-um-site-no-browser/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Programação serena</title>
		<link>http://tecblog.locaweb.com.br/2009/06/22/programacao-serena/</link>
		<comments>http://tecblog.locaweb.com.br/2009/06/22/programacao-serena/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 10:47:25 +0000</pubDate>
		<dc:creator>Fernando Amorim</dc:creator>
		
		<category><![CDATA[Técnicas de Desenvolvimento de Software]]></category>

		<category><![CDATA[arquitetura]]></category>

		<category><![CDATA[débito técnico]]></category>

		<category><![CDATA[refatoração]]></category>

		<category><![CDATA[serenidade]]></category>

		<category><![CDATA[Testes]]></category>

		<guid isPermaLink="false">http://tecblog.locaweb.com.br/?p=457</guid>
		<description><![CDATA[Meu pai, que considero um exemplo de pessoa honesta, humilde e de bom caráter, me ensinou que na vida precisamos agir com serenidade. Ele me apresentou a oração da serenidade:
Concedei-me, Senhor, a serenidade necessária para aceitar as coisas que não posso modificar, coragem para modificar aquelas que posso e sabedoria para distinguir umas das outras.
Agora, [...]]]></description>
			<content:encoded><![CDATA[<p>Meu pai, que considero um exemplo de pessoa honesta, humilde e de bom caráter, me ensinou que na vida precisamos agir com serenidade. Ele me apresentou a oração da serenidade:</p>
<blockquote><p>Concedei-me, Senhor, a serenidade necessária para aceitar as coisas que não posso modificar, coragem para modificar aquelas que posso e sabedoria para distinguir umas das outras.</p></blockquote>
<p>Agora, o que isso tem  a ver com desenvolvimento de software?</p>
<p>Imagine um cenário que você precise incluir uma nova funcionalidade em uma aplicação existente. Suponha que o código dessa aplicação não está muito bom, há acoplamentos entre os objetos, pouca cobertura de testes e a arquitetura deixa a desejar. Você precisa incluir a nova funcionalidade, mas não pode aumentar o <a title="Technical Debt" href="http://www.martinfowler.com/bliki/TechnicalDebt.html" target="_blank">débito técnico</a>.</p>
<p>Por outro lado, você não irá refazer toda a aplicação de uma forma melhor, pois além de você não ter tempo (e dinheiro) disponível para isso, o sistema hoje atende os requisitos atuais e executa sem problemas.</p>
<p>Nessa situação, você precisa de <strong>sabedoria para distinguir o que pode ser modificado</strong> neste momento no código existente para melhorá-lo e o que você não irá modificar agora, já que não afeta diretamente a nova funcionalidade.</p>
<p>Você necessita de <strong>coragem para modificar o código legado</strong>, pagar o débito técnico, criar testes automatizados, refatorar, tornar o código mais claro, reformular o design, diminuir acoplamentos.</p>
<p>Você terá <strong>serenidade para aceitar que nem tudo pode ser melhorado agora</strong>, pois você tem prazo e orçamento a serem cumpridos. O objetivo neste momento é implementar a nova funcionalidade.</p>
<p>Com serenidade você pode alcançar uma melhoria contínua no seu software.<br />
<span style="color: #ffffff;">.</span><br />
<span style="font-size:11px;">Obs.: Após rascunhar o conteúdo deste post dei uma olhada no meu leitor de feeds e me deparei com o post <a title="Parar e Refatorar?" href="http://www.infoq.com/br/news/2009/06/stop-and-refactor" target="_blank">Parar e Refatorar?</a> da InfoQ Brasil. A discussão sobre o tema é longa, mas a serenidade também se aplica.</span><br />
<span style="font-size:10px"><br />
Post original:<br />
<a title="Programação serena" href="http://prodis.pro.br/2009/06/20/programacao-serena" target="_blank">http://prodis.pro.br/2009/06/20/programacao-serena</a><br />
</span><br />
<span style="color: #ffffff;">.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://tecblog.locaweb.com.br/2009/06/22/programacao-serena/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
