segunda-feira, 29 de dezembro de 2008

Dica de leitura

Aproveitando as férias da faculdade prometi pra mim mesmo que vou botar em dia algumas metas de leitura e o primeiro foi o livro do Vinicius Teles da Improve It, cujo tema e titulo são os mesmos: Extreme Programming.

O livro da uma pincelada em muita coisa que tem se dito sobre desenvolvimento ágil de uma maneira descontraída e sem muita enrolação. Muito exemplos, experiências pessoais do autor e boas referências literárias. O único ponto negativo é que as vezes ele se torna um pouco repetitivo, mas isso não chega a ser um motivo que faça alguém parar de lê-lo.

Aproveitando o jabá, no site da Livraria Cultura dá pra ler o primeiro capítulo. Fica a dica ao interessados pelo livro/tema.

quarta-feira, 17 de dezembro de 2008

Programming Ruby

Pra qualquer mortal que inicia em Ruby on Rails, ter uma base de Ruby é fundamental. Além do próprio user guide, o dx7labs colocou no seu site pessoal uma cópia do livro Programming Ruby - The Pragmatic Programmer's Guide, que esta sob licença Open Publication License. Vamos estudar!

sexta-feira, 12 de dezembro de 2008

quinta-feira, 11 de dezembro de 2008

Canivete Suíço do Shell

Dica enviada pelo Rafael "Peixe": O Aurélio Jargas, que possui um ótimo site com várias dicas (em especial do mundo Unix e derivados), publicou há algum tempo uma lista de comandos úteis para se usar no Shell - tem até uma versão PDF no final da página. Essas coisas sempre são boas para se manter no bookmark do navegador...

quarta-feira, 10 de dezembro de 2008

Apresentação do Danilo Bardusco no Falando em Agile 2008

Há algum tempo atrás eu [re]publiquei dois slides do Danilo Bardusco falando sobre Scrum. Pois é, melhor que meros slides, a Caelum publicou o vídeo da palestra do Danilo falando sobre a adoção de Scrum na Globo.com.

GitHub

O Fábio Akita lançou um vídeo muito interessante há algum tempo falando sobre como colaborar em um projeto no GitHub, e de quebra acaba dando uma palinha sobre o git.


Github colaborativo from Fabio Akita on Vimeo.


Vlw pela dica Rafael.

terça-feira, 9 de dezembro de 2008

PHP Advent 2008

Chegando a mais um final de ano, é lançado (novamente) o site PHP Advent cujo objetivo é trazer um post por dia dando alguma dica relevante para usarmos no próximo ano. Para acessar, clique aqui.

quinta-feira, 4 de dezembro de 2008

Que tal bater um papo com a Eliza ?


Procurando um projeto interessante para fazer durante as férias, tenho lido um pouco sobre Processamento de Linguagem Natural (ou NLP) e esbarrei no Eliza, um programa antigo usando NLP que simula um psiquiatra capaz de conversar sobre problemas humanos. Se alguém estiver interessado no assunto, eis aí um exemplo online.

sexta-feira, 28 de novembro de 2008

PHP.JS - port de funções PHP para o Javascript

Procurando algumas funções Javascript que fossem equivalentes a funções em PHP acabei esbarrando no projeto PHP.JS, que é uma biblioteca Javascript com várias funções "portadas" do PHP. O contador do site deles informa que até a data deste post, 196 funções já foram recriadas e parece que o projeto esta ativo.

Como a biblioteca esta ficando cada vez mais extensa, consequentemente esta ficando cada vez mais pesada (52.kb comprimida e 219kb não comprimida). Acho que o ideal é ir adicionando ao projeto somente as funções que forem sendo usadas, o que poupará bastante a conexão dos usuários do seu site.

quarta-feira, 26 de novembro de 2008

How to Love Tests

Pois é gente, muita correria aqui na 3Jane e pra ajudar estou no período de provas da faculdade. Mas pra não deixar meu estudos de lado, estive dando uma olhada no video sobre TDD do Gregg Pollack ( famoso pelo Rails Envy ).

terça-feira, 18 de novembro de 2008

Free ebook sobre Agile Development

Repassando a dica recebida por email, deixo a indicação do ebook Essential Skills for Agile Development, que pode ser baixado e lido no computador gratuitamente. Dei uma lida rápida nos capitulos iniciais e o livro parece estar bem contextualizado com tudo que tem-se dito sobre desenvolvimento ágil. Para o link direto para o download do ebook, clique aqui.

segunda-feira, 17 de novembro de 2008

Helper button_to no Code Igniter

O Rails tem um helper interessante que é o button_to - ele cria um formulário e botão pra postagem com a opção de se passar um array para criação de hiddens. Bem prático, se por exemplo você tem uma listagem que tenha opções como excluir ou editar e você não ache elegante passar parâmetros por get. Trazendo para o mundo do CodeIgniter, para quem estiver escrevendo a view, tem a sensação de que esta usando um <php echo anchor('')> que posta dados.

Copiando essa idéia do RoR para o CI, criei o helper button_to (prêmio para mim pela criatividade do nome) que tem o mesmo conceito. Cadastrei o helper no wiki do framework. Para acessar, clique aqui.

Internet Explorer e WebKit ?


Recebi essa notícia no meu reader de rss e acho que merece até forward no blog:

Na sua ultima conferência em Sydney, Austrália, Steve Ballmer centrou a sua conversa para falar no Webkit e da forma como a Apple o utilizou para desenvolver o seu browser Safari, bem como o Safari Mobile.

Estes indícios indicam que a Microsoft poderá vir a utilizar o Webkit no Internet Explorer e tornar-lo OpenSource.

Se isto vier a acontecer, vai ser uma mais valia não só para os usuários como também para os webdesigners e programadores web.

Fonte: BestLinux


Embora sempre tenho medo das ações da empresa do Tio Bill, a troca de engine seria um alívio para os desenvolvedores web...

quarta-feira, 12 de novembro de 2008

E ai, regulariza nossa profissão ou não ?


Essa discussão ainda esta gerando muito bafafá entre as listas de emails. Na lista java-br mesmo surgiu (novamente) o tema. Confesso que fico preocupado mais em ver as esperanças de um mundo melhor na área tecnológica brasileira do que com a lei em si.

Minha idéia sobre esse assunto é a mesma que alguns sobre certificação: será mais um papel que funciona como uma linha imaginária para ficar prendendo a atenção de pessoas que ainda lutam por algum reconhecimento no mercado. Não que todos que tenham ou almejam ter uma certificação (seja na área que for) são profissionais ruins, mas os realmente bons sabem que possuem experiência o suficiente para mostrar suas capacidades sem depender dos canudos.

Acho utopia a idéia de que com a regulamentação teremos melhores profissionais pelos simples fato deles ter uma faculdade concluída e pertencerem a algum sindicato. Não só pela fraca qualidade da "maioria das faculdades da maioria das pessoas", mas pela mentalidade de que um rolo de papel vai ser o Messias para essa bagunça.

É óbvio que com a regulamentação, os profissionais terão mais burocracia e taxas pra pagar. Mesmo que seja montado um sindicato que faça alguma coisa, ainda sim a mentalidade em muitos será "preciso conseguir a matrícula no sindicato X" com a idéia de que isso os tornou grandes profissionais.

Com a deficiência que a empresas tem de mão de obra qualificada, o mercado ainda continuará incluindo péssimos profissionais em detrimento dos bons profissionais. E essa idéia de que o governo irá fiscalizar as contratações feitas pelas empresas permitindo somente a entrada de profissionais regularizados pode até funcionar nas grandes empresas, mas nas pequenas e médias ainda sim os geeks "desregularizados" estarão lá, mesmo com a carteira de trabalho assinada como "ajudante-geral-de-serviços-de-informática" (enquanto na verdade ele estará resolvendo problemas de escalabidade no principal sistema da empresa). Infelizmente a realidade é assim

Os bons profissionais sempre terão boas oportunidades, com regularização ou não. Sei que é chato pensarmos em pagar alguma coisa a algum órgão para ele simplesmente dizer que você sabe o que sabe, mas o mercado brasileiro gosta disso. Para reafirmar isso me aproprio de um pequeno trecho escrito pelo Vinícius Teles da Improve It:

Do ponto de vista comercial, aqui no Brasil, a certificação é uma jogada de mestre. As pessoas buscam, cada vez mais, todo tipo de selinho que puderem encontrar no mercado para colocar em seus currículos. É uma cultura insana, mas absolutamente pervasiva. Vai de pessoas a empresas.

Fonte: http://blog.improveit.com.br/articles/2007/12/19/novos-rumos-em-2008


O Vinícius resumiu tudo: certificação é uma jogada de mestre. E assim como certificação o é, será também a carteirinha do sindicato. E você possivelmente verá bons profissionais ignorando completamente a regulamentação, bons profissionais se regularizando pra continuarem empregados e profissionais com qualidades questionáveis colocando a carteirinha em uma moldura na parede do quarto.

segunda-feira, 10 de novembro de 2008

Web 2.0 no Slideshare

O slideshare fez uma coleção com os slides publicados no Web 2.0 Summit 2008, evento promovido pela O'Reilly no inicio deste mês.

Confesso que fiquei ansioso para ver o material publicado, mas achei a maioria dos slides bem básicos - acredito que as apresentações em si tenham sido melhores. Procurando algum material no slideshare achei outros slides legais sobre o assunto. Posto alguns abaixo:

Web 2.0
View SlideShare presentation or Upload your own. (tags: 2.0 web)


Creative Web 2.0 Learning
View SlideShare presentation or Upload your own. (tags: creativity library)



Vale lembrar também que estão surgindo aos poucos os vídeos das palestras no canal da O'Reilly no youtube .

Editor de imagens online

Não é novidade que a web esta se tornando uma extensão do nosso desktop... mas confesso que me espanto com certas migrações... É o caso do pixlr, um editor de images totalmente web que tem um monte de recursos bacanas. Já que todo programador acaba tendo uma certa preguiça na hora de editar alguma imagem, uma solução web até que não é ruim...

quinta-feira, 6 de novembro de 2008

Liderando equipes ágeis

O Guilherme Chapiewski publicou no slideshare os slides de sua apresentação no Falando em Agile 2008, onde ele falou sobre Liderança de Equipes Ágeis.

segunda-feira, 3 de novembro de 2008

PHPRio

Repassando o convite recebido, no dia 07/11 (sexta feira) irá rolar o Primeiro Encontro de PHP no Rio. Maiores informações aqui!

quarta-feira, 29 de outubro de 2008

Aumentando a produtividade com os snippets

Uma ótima dica para quem usa uma IDE ou editor decente é usar os snippets, blocos de códigos reutilizáveis que "brotam" no seu código após o uso de uma keyword e um tab.

É impressionante como a maioria sabe disso mais deixam essa ferramenta de lado. Utilizando o Gedit hoje resolvi checar como criar novos snippets com coisas mais úteis que for, if e foreach. Como tenho trabalhado em um projeto com CodeIgniter, fiz em poucos minutos snippets completos para criação de controllers, models, helpers, libraries, etc. Além do código em si, embuti os esqueletos dos comentários no formado do phpDocumentator.

Tive uma sensível diferença de produtividade, mesmo tendo parado para criar os snippets. Agora entendo porque o Pragmatic Programmer bate na tecla dos script generators. Realmente ajuda.

Para habilitar os snippets no GEdit, basta ir em Edit -> Preferences -> Plugins e selecionar o plugin snippets.



Clicando no botão Configure Plugin na mesma janela, você pode ver todos os Snippets criados e criar os seus. Para criar um snippet novo não tem mistério algum, basta olhar os outros que você pega o jeito da coisa fácil fácil.

A única coisa que achei estranho no GEdit é que você só pode configurar o plugin do snippet se tiver com um arquivo de extensão reconhecida aberto no Editor. Se estiver só com um Unsaved Document aberto por exemplo, ele não deixa.

Para quem ainda não conseguiu "visualizar" a coisa toda, veja as duas imagens abaixo:



Criei o snippet cicontroller para construir controllers do CodeIgniter. Agora, depois de digitar essa keyword dar um tab, tenho isso:

terça-feira, 28 de outubro de 2008

Usando Google como ferramenta Wiki

Não sei se todos sabem, mas o Google Sites é também um eficiente Wiki empresarial. Basta criar o site, não defini-lo como público, convidar os envolvidos no projeto e pronto. O Google Sites tem todas as ferramentas de um Wiki decente.

Sei que para algumas empresas colocar suas documentações em uma ferramenta externa (e de terceiros) pode ser um pesadelo, mas para outras poder terceirizar a manutenção de um sistema de apoio ao desenvolvimento é um alívio.

Outras ferramentas para Wiki interessantes são: o MediaWiki (gratuito) em php, o TWiki (gratuito) em perl ou o Confluence (comercial) em Java.

Update 1: O Rafael Dx7 achou o projeto Instiki no RubyForge, que também é free. Como o site estava fora e eu não sabia que ele estava hospedado em outro lugar, acabei deixando de fora. Vlw pela dica!

Update 2: Ótima réplica do Rafael, para ler clique aqui.

quinta-feira, 23 de outubro de 2008

InfoQ no Brasil!

Parece que oficializou: O InfoQ aportará em terras tupiniquins! Eu acesso a versão americana há um bom tempo, e já tinha ouvido alguns rumores sobre criação de uma comunidade brasileira no InfoQ, mas agora é notícia oficial.

Ótimo para nós, pois além do reconhecimento dado pela InfoQ para os desenvolvedores brasileiros, teremos uma ótima fonte de recursos sobre como fazer software de médio/grande porte da maneira certa. Que os indianos morram de inveja.

Para os mais entusiastas, haverá um evento de lançamento que ocorrerá em São Paulo no dia 01/11. Mais informações aqui.

Palestra de JQuery com uma criança

Pois é, eu ontem ficando mais velho e o pessoal aqui da empresa me passa um vídeo de um garotinho de 12 anos dando uma palestra de Jquery. Pelo menos dessa vez não foi o Rafael dx7 que acabou com a minha vida, foi o Rafael Peixe.

terça-feira, 21 de outubro de 2008

The Lego Hypothesis

Concorrendo ao prêmio de Palestra que Mais Usou Analogias do ano, o professor James Noble conseguiu criar bons paralelos entre o desenvolvimento de softwares e lego. A máxima da palestra é desenvolvermos software menos acoplados e mais reaproveitáveis - "Programs can be built out of many small independent components".

Para assistir o vídeo, clique aqui.

sexta-feira, 17 de outubro de 2008

Layout e Elements no CodeIgniter

Primeiramente quero pedir desculpas a galera que acessa o blog diariamente, já que notaram que o blog tem uma semana sem atualizações! Mas não fiquem com raiva : como recompensa consegui autorização de um grande autor gringo para publicar seus artigos traduzidos. Em breve falo mais sobre isso.

Estamos na correria aqui na 3Jane passando um projeto do CakePHP para o Code Igniter. Uma das primeiras coisas que precisamos criar no Code Igniter foi o esquema de Layouts e Elements (como no Cake). Não dá pra acreditar que o Code Igniter não venha com algo built-in, mas, felizmente o CI tem algumas formas de você construir adds.

Eu sei que quem trabalha com o Code Igniter mais tempo vai reclamar feito uma velha ranzinza "mas já existem uns 10 sites falando sobre como plugar algum esquema de layout no CI". Eu realmente achei algumas soluções na web mas nem sempre se propunham a resolver meu problema de uma maneira simples e "desacoplada". Um simples exemplo é a Layout Library do próprio site do CodeIgniter, que é bem completa mas, para funcionar você tem que substituir a chamada da view das actions dos seus controllers por um método próprio. Além do problema da refatoração do código, isso acaba fugindo do padrão do CodeIgniter ( que é o que eu tenho mais medo). E nem me venha falar daquelas soluções que usam hooks...

Para chegar a algo que me atendesse, eu peguei a Library acima e dei uma adaptada para funcionar sobreescrevendo o Loader padrão para trabalhar com o esquema de Layouts - e acrescentei um método para trabalhar com Elements também. Vamos lah:

Crie uma library parecida com a seguinte:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
* Customized Loader Class
*
* Overwrite default Loader which loads views and files
*
*/
class MY_Loader extends CI_Loader {

var $layout = "default";

function MY_Loader() {
parent::CI_Loader();
}

/**
* Load View
*
* This function is used to load a "view" file, including layout. It has three parameters:
*
* 1. The name of the "view" file to be included.
* 2. An associative array of data to be extracted for use in the view.
* 3. TRUE/FALSE - whether to return the data or load it. In
* some cases it's advantageous to be able to return data so that
* a developer can process it in some way.
*
* @access public
* @param string
* @param array
* @param bool
* @return void
*/
function view($view, $data = null, $return = FALSE) {

$loadedData = array();
$loadedData['content_for_layout'] = parent::view($view,$data,true);

if($return) {
$output = parent::view('layouts/' . $this->layout, $loadedData, true);
return $output;
} else {
parent::view('layouts/' . $this->layout, $loadedData, false);
}
}

/**
* Load View Element
*
* This function is used to load a "view" element file, simulating CakePHP's elements.
*
* 1. The name of the "element" file to be included.
* 2. An associative array of data to be extracted for use in the element.
*
* @access public
* @param string
* @param array
* @return string
*/
function element($element, $data = null) {
return parent::view('elements/' . $element, $data, TRUE);
}

/**
* Set Layout
*
* This function is used to set layout name
*
* 1. The name of the "layout" file to be renderized in view function.
*
* @access public
* @param string
* @return void
*/
function set_layout($value) {
$this->layout = $value ;
}

}


Teoricamente é só isso, copiar a library acima para o diretório de bibliotecas, criar os diretórios layouts e elements dentro do diretório views e criar um layout padrão. Com isso seu site já estará funcionando com layouts, sem precisar mudar suas actions ou criar hooks.

Explicando melhor, a library primeiro renderiza a view solicitada e depois coloca o resultado dentro do layout e o renderiza. Como já disse, fixei que todos os layouts estarão dentro da pasta layouts dentro das views, mas você pode mudar isso. Criei também o set_layout, que me recurso a explicar pra que funciona. E por fim os elements são "views" disfarçadas, que sempre retornam a view renderizada como string. Acho que os elements nem são tão necessários pra todos, mas os fiz só pra forçar o pessoal a concentrar o elementos no mesmo lugar.

Um layout (já usando um elemento) poderia ser o seguinte:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> Titulo </title>

</head>

<body>

<h1> Esta carregando o layout </h1>

<?= $this->load->element('banner.php'); ?>


<!-- Conteudo -->
<?=$content_for_layout?>

</body>

</html>


O elemento banner acima é uma view normal, por isso nem vou postar o exemplo. Quem quiser uma cópia do framework seco só com o esquema de layouts funcionando, eu coloquei no rapidshare. A versão da framework é 1.6.3 então cheque no site do CodeIgniter qual é a versão atual antes de começar a desenvolver em cima da cópia que estou disponibilizando.

quinta-feira, 9 de outubro de 2008

Projetos PHP e Integração Contínua

Estamos lutando aqui na 3Jane para alcançarmos um formato indolor de Continuous Integration ( aqui e aqui ) em nossos projetos - que são (até então) em PHP.

Existe um número relevante de ferramentas disponíveis, o problema esta sendo fazer com que elas sigam um fluxo natural no projeto. Ou as ferramentas precisam de uma adaptação para PHP (como o CruiseControl com o PHPUnderControl), ou as ferramentas não se encaixam, ou são muito limitadas.

Embora um pouco complexo, estamos achando algumas coisas boas. Para começar, tinhamos decidido apostar no CakePHP, um framework sólido e com grande similaridade com o Rails. Ficamos realmente satisfeitos com a organização da "criança" e de como ele é bem feito. E também tem o fato de que o CakePHP já vem com uma integração com o SimpleTest, que até onde pude ver, a ponte entre eles é sólida e sem "adaptações" incomodas - até porque o SimpleTest também é em PHP.

Acontece que pelo CakePHP ser bem completo, ele também é mais lento que outros frameworks e por motivos de força maior decidimos trocar para o Code Igniter, que também é um bom framework, mas não possui tantas camadas quanto o CakePHP e teremos que "digitar mais". Outro ponto fraco do Code Igniter com relação ao CakePHP é o bake, que é um script generator do CakePHP que agiliza muito a vida.

Quanto aos testes no Code Igniter ele já vem com uma library bem simples para teste unitário, mas é tão simples que estou propondo aqui que troquemos para o SimpleTest ou PHPUnit. Como este último parece ter uma integração com o PHPUndercontrol, estou lendo como plugá-lo ao CodeIgniter.

Já construímos o Tracer Bullet para os testes do ambiente e estamos implantando-o. Estou vendo o Phing para automatizar o processo de deploy, mas ainda não parei para estuda-lo de verdade. Essa é uma das minhas metas nos próximos dias.

Para controle de código, migramos do SourceSafe para o SubVersion e apesar de alguns problemas com o Tortoise, valeu a pena. Pra ser bem sincero, o engraçado é como sempre os problemas envolvem o Windows. Para controle de bug/issues estamos usando o Jira e como Wiki o Confluence. Ah, e para a documentação do nosso código estamos usando o phpDocumentator.

Ufa! Acho que é isso... O problema é conseguir tempo pra ver tudo isso e dar continuidade no projeto. Mas posso dizer que demos um "salto quântico" no processo de desenvolvimento aqui na 3Jane. Se você quiser uma lista organizada e decente das ferramentas que podem te ajudar no desenvolvimento em projetos PHP, o Dave Marshall publicou um top 10 no blog dele.

Por fim, deixo com vocês um slide falando sobre PHP + Continuous Integration :

quarta-feira, 8 de outubro de 2008

E-books de graça no InfoQ BookShelf

Para quem não conhece, o InfoQ possui um pequeno acervo de bons ebooks disponibilizados gratuitamente. Você se registra e pode baixar qualquer ebook de graça. Existe também a opção de compra impressa, mas com as taxas de importação mais esse dólar que não para de subir, aconselho a imprimir na xérox do seu João na esquina mais próxima da sua casa.

No site existem alguns ebooks como Composite Software Construction, Scrum and XP from the Trenches, Starting Struts 2, Agile Patterns: The Technical Cluster, Mr. Neighborly's Humble Little Ruby Book, Getting Started with Grails, Domain Driven Design Quickly, Scrum Checklists, Enterprise SOA Adoption Strategies e outros.

segunda-feira, 6 de outubro de 2008

Htacces Generator


Cansado de configurar o htaccess na mão ? O Cooletips disponibiliza um página que após fornecido os parâmetros desejados monta um pra você. Clique aqui para acessar.

sexta-feira, 3 de outubro de 2008

Max Gehringer e sua opinão sobre o profissional de TI no futuro


A ComputerWorld publicou uma entrevista com Max Gehringer sobre sua visão do profissional de TI do futuro. Embora meio óbvia, destaca como as empresas devem se posicionar para conseguir manter algum empregado de TI nos próximos anos.

Infelizmente a ComputerWorld não permite o sharing total/parcial de seus textos (no donuts for u), portanto, o máximo que posso fazer é deixar o link.

quinta-feira, 2 de outubro de 2008

Gerenciador de pacotes para Slackware



Ótima notícia para os usuários do Slackware: o Slackbuilds.org, site conhecido como uma das principais fontes de pacotes para Slackware, disponibilizou uma ferramenta chamada Sbopkg, que é uma uma ferramenta que cria uma ponte entre o pkgtool e repositório do próprio Slackbuilds, permitindo atualizar ou instalar seus pacotes.

Ainda não tive tempo pra testar mas prometo dar um feedback quando usar a ferramenta. Confesso que de uns tempos pra cá estava usando mais o linuxpackages para baixar os pacotes do Slack, mas se a ferramenta funcionar será o improvement que faltava para a nossa estimada distro linux.

Pra quem esta por fora, existe também o slapt-get que tenta ser uma cópia do apt-get dos Debians da vida para o Slack. Eu não sei se é preconceito meu mas eu não gosto muito. A única coisa que pode vir a me fazer gostar da Sbopkg, além da integração com o pkgtool é o próprio Slackbuilds, que cujos pacotes sempre rodaram redondo na minha máquina... Vamos ver no dá.

quarta-feira, 1 de outubro de 2008

Fearless Change Pattern




Mais um vídeo interessante do InfoQ, uma entrevista com Linda Rising ( autora do Livro Patterns Almanac ). Ela fala sobre algo muito importante presente em qualquer mudança de paradigmas: o medo de mudança.

Qualquer padrão novo envolve o medo do erro. Quanto maior o risco de erro, maior o medo. E por isso muitas empresas param no tempo. Com essa introdução ela segue a entrevista identificando fatores para uma mudança sem medo. Para ver a entrevista, clique aqui.

terça-feira, 30 de setembro de 2008

PHP on Rails


Mas esse pessoal não perde a oportunidade para tirar um sarro. Foto tirada daqui.

segunda-feira, 29 de setembro de 2008

25 anos de GNU


Pois é, faz 25 anos que a maior frente no mundo open source iniciou seu trabalho. O dia da festa foi 27 de Setembro (sab) e mesmo que atrasado sou mais um a manifestar meus parabéns a todos aqueles que contribuem de alguma forma ( desenvolvendo, testando, usando ou evangelizando). É isso ae moçada!

Abaixo coloco um vídeo feito pela Globo News com o polémico Richard Stallman. Apesar do cara ser meio doido, ele é o cara que faz a balança funcionar. De um lado, extremistas que querem capitalizar tudo, por outro extremistas like Richard Stallman que quer liberar tudo.



O vídeo acima esta hospedado no site do Augusto Campos, um ativista brazuca do opensource.

sábado, 27 de setembro de 2008

Ubuntu Kung Fu



Boa notícias para os fãs do Ubuntu: o grupo The Pragmatic Programmers acaba de lançar o livro Ubuntu Kung Fu, ressaltando os poderes da distro ( e como as pessoas os desconhecem). Embora não concorde com a frase It’s the best Linux distribution ever, o livro promete trazer mais de 300 dicas sobre o famoso filho do Debian, com foco em usuários que vieram do Windows e do MacOS (sério? E como ficam os milhares de usuários do FreeBSD e do BeOS ?).

Quem quiser um trecho do livro, eles disponibilizaram um PDF aqui.

sexta-feira, 26 de setembro de 2008

Materiais online de Stanford e MIT

A universidade de Stanford disponibiliza alguns materiais de suas aulas do curso de Ciências da Computação online, através do programa Stanford Engineering Everywhere. Confesso que peguei o video de introdução ao curso de CC e o carinha fala rápido hein... Mas nada impossível de pegar, principalmente com o tempo.

Abaixo a aula de introdução ao curso de CC:



Procurando por algum similar do MIT achei um tal de MIT Open Courseware, que tem uma sessão de "Ciência, Tecnologia e Sociedade". Não é tão bom quanto o curso online de Stanford, mas já é alguma coisa também.

Vale lembrar que as duas universidades tem canais no Youtube: Stanford e MIT.

quinta-feira, 25 de setembro de 2008

Test Driven Development

Estamos aqui na 3Jane nos policiando para seguirmos as regras pregadas pelos processos ágeis. Uma delas é o desenvolvimento orientado a testes. Na verdade todos nós aqui já tinhamos lido sobre o assunto, mas agora vai ser lei.

Falando de mundo PHP, temos basicamente dois frameworks para testes : o PHPUnit e o SimpleTest. Até onde tenho lido, ambos fornecem diversos recursos para escrita de testes, entretando como o CakePHP já possui um caso de amor com o SimpleTest, estou lendo mais sobre ele.

Deixo abaixo um slide que encontrei no slideshare falando sobre TDD:

Software Testing Basics
View SlideShare presentation or Upload your own.

terça-feira, 23 de setembro de 2008

Poster sobre desenvolvimento ágil



A VersionOne possui um poster bastante claro sobre os subprocessos dentro do processo ágil. Para fazer o download, você tem que preencher um pequeno cadastro (nome e email). A página é essa.

História de falha de um projeto



Recebi por email a newsletter do InfoQ e tinha o anuncio de um vídeo interessante de um projeto que parecia ser bem-sucedido mas foi considerado um fracasso pelo cliente.
Palestra foi gravada na Agile 2008 Conference, pelo Mitch Lacey um CST e PMP.

Para ver o vídeo, clique aqui.

segunda-feira, 22 de setembro de 2008

PHP + YAML via SPYC


O Rails usa um formato muito simples de documentos para a substituição do XML, o YAML. Esse formato além de extremamente ágil é mais "human friendly" que o XML.

Procurando algum loader em PHP para esse formato, achei o SPYC. A implementação é simples, basta dar um Spyc::YAMLLoad('arquivo.yml') que ele carrega e gera um array - e você também pode fazer dump com ele.

quarta-feira, 17 de setembro de 2008

Enquanto isso na Zend Conference 08



Pois é, esta rolando na Califórnia a conferência mais importante de PHP, a Zend Conference. E esta começando a pipocar vários vídeos e materiais decorrentes das palestras. Listo abaixo alguns materiais que já encontrei por ai:

Rickroll to go with PHP, WURFL e other Open Source tools


Brian Deshong fala sobre conteúdo móvel e as tecnologias que circulam ao redor do tema.

Material :
PDF (sem transições)
Vídeo (quicktime)

PHP Developer Best Practices


Matthew Weier O’Phinney fala sobre melhores práticas no desenvolvimento com PHP.

Material:
PDF

Static and Dynamic Analysis at Ning


David Sklar fala sobre o Ning, uma ferramenta que permite a criação de redes sociais. Muito bacana.

Material:
PDF

Distribution and Publication With Atom Web Services


Ben Ramsey da uma passada rápida sobre Atom, um "novo" formato de comunicação.

Slide:


Por enquanto só achei esses materiais, mas vale lembrar que a conferência vai até amanhã. Pra quem não pode ir (como eu), pelo menos dá uma olhada no material para saber o que esta acontecendo no mundo PHP.

sábado, 13 de setembro de 2008

Dinheiro não é tudo



Em pleno século XXI, eu, cidadão das Américas (ainda que do Sul), venho com esse papo mole de que dinheiro não é tudo. Sei que a proposta do post não é nova, mas sei também que tem muita gente que vai concordar comigo que dinheiro não é tudo.

Nós como meros desenvolvedores que somos por vezes somos a menor parte do processo de desenvolvimento de um software ( que paradoxo não ?). Constantemente trabalhamos sobre pressão, com prazos apertados, especificações falhas e com legados de softwares que sofremos pra manter. Mas se é tão ruim assim, por que continuamos ? Simples: porque amamos desenvolver software. Achamos mágico construir soluções que acelerem o processo de comunicação entre os seres humanos, sejam eles quem forem. Gostamos de bits, patterns, miracle driven developments, aprender coisas novas pra agilizar os processos e por ai vai.

Por isso nos envolvemos muito com o nosso trabalho. Saimos da empresa onde trabalhamos e vamos pra casa fazer o que ? Programar ou estudar programação ainda mais - e isso normalmente invade nossos finais de semana. Por essa razão não é difícil imaginar que nos envolvemos e muito com o que fazemos, já que fazemos por que somos apaixonados por isso.

E o que acontece quando percebemos que no ambiente onde trabalhamos existem processos ruins, que podiam ser otimizados mas que por "força maior" não os são ? Perdemos nosso humor. Parece que a "inspiração" para programar acabou, perdemos o ânimo para digitar um ponto-e-vígula sequer. Programador que ama o que faz não consegue digerir muito bem essa coisa de "isso é problema da empresa, as 18h vou pra casa tranquilo".

E é ai que entra o titulo do post "Dinheiro não é tudo". Ok, gostamos de dinheiro por que precisamos e por que nos trás conforto, mas dinheiro não compra entusiasmo - muito menos patrimônio intelectual.

Por exemplo, sempre tem aquele papo de que todo programador deve virar gerente de projetos. Por quê ? Simples, porque gerente ganha mais. Mas, e se eu não gostar de ficar "o dia todo de frente pro Project?" (hei isso foi uma piada, por favor ria) E se eu achar graça em outra coisa? E se o que me deixa feliz é digitar um bando de palavras em inglês e apertar o F5 ? (preciso dizer que foi outra piada?). Quem disse que eu estou programando só por dinheiro?

Por isso saiba discernir se você esta construindo o seu futuro simplesmente pelo que vai ganhar ou pelo que vai viver. Não deixe seu prazer em desenvolver softwares da maneira correta enferrujar junto com os processos administrativos da sua empresa. Dinheiro é bom, mas quando a gente morre fica tudo pra um bando de filhos ingratos que não vão saber quantas linhas de código você teve que escrever para consegui-lo. E se você morrer sem filhos, alguma mulher vai acabar gastando sua grana mesmo. (Suellen isso foi só força de expressão tah amor...) Não substitua talento por desculpas. Se quando você esta no trabalho, só fica pensando em ir embora e quando esta em casa fica com aquela sensação de frustação de voltar pra empresa, é melhor você dar uma olhada nesse vídeo aqui.

Ps.: A propósito, a foto do post é do filme A procura da felicidade. Acho que fui o único que achou o filme sensacional do inicio ao fim, mas mesmo assim se você não viu aconselho a fazê-lo.

Dica : Desenvolvimento Web Ágil com Rails



Pois é, o ultimo livro que comprei acabou rápido ( terminei de ler até mesmo antes da fatura do cartão de crédito ser emitida. Será que posso devolver o livro ? ). Logo no inicio do The Pragmatic Programmers os autores falam sobre expandir continuamente seu conhecimento, lendo bons livros a todo momento e aprendendo pelo menos uma linguagem de programação nova por ano. Tentando cumprir isso, tomei vergonha pra começar a estudar Ruby on Rails de verdade.

Como gostei muito do estilo usado pelo grupo The Pragmatic Programmers, comprei o livro deles sobre Rails. Já li umas 60 páginas e estou sentindo que vai dar namoro. Provavelmente os posts sobre Rails no blog vão começar aparecer ;-)

quinta-feira, 11 de setembro de 2008

LHC usa Linux



Legal não ? Pelo menos agora eu já sei que o mundo não vai acabar com uma tela azul. O texto a seguir foi tirado da Internet News :

"The most powerful physics project in the history of the known universe - The $10 Billion Large Hadron Collider (LHC)- shot its first light speed beam this morning around its 27 km circuit. Beyond the 20 years it took to build and half of all the world's astrophysicists, it also takes another key ingredient to make LHC work -- Linux.

CERN which is the organization that runs the LHC project is using something called CernVM which is is custom Linux distribution. According to VMware, CernVM runs inside of VMware virtual machines that include PC and Macs across a grid that encompases the power of approximately 40,000 CPUs and some 15 petabytes of data a year.

CERN itself is no stranger to Linux and is one of the lead backers of the Scientific Linux distribution, which is a recompiled version of Red Hat Enterprise Linux.

**UPDATED** Got a comment (listed below) from a commenter with an IP within CERN that writes,".. the primary configuration for machines in the LHC computing grid (http://lcg.web.cern.ch/LCG/) is based on Scientific Linux distribution running directly on the hardware. This grid is used to receive and distribute the 15PB of data across the 100,000s of CPUs across the world" **

Considering that the LHC, according to some, could be powerful enough to destroy the Earth, create a blackhole or rip a hole in the fabric of space itself, it is somewhat re-assuring that at least some of the key software behind it is not at risk from the blue screen of death."

quarta-feira, 10 de setembro de 2008

Usando o Authenticate do CakePHP


Estou trabalhando ultimamente com o CakePHP (1.2) e achei um componente muito útil: o AuthComponent. Ele centraliza todo o fluxo de autenticação no sistema e se você seguir algumas regras básicas dele, poderá fazer toda parte de login do seu site com praticamente esforço zero.

Primeiro passo é definir se a maior parte do seu site será publica ou privada por que isso dirá onde você deve acionar o Auth. Se você notar que quase todas as áreas do seu site será de acesso publico, é melhor chamar o Auth direto nos controllers que terá actions privadas. Caso não, você pode colocar direto no app_controller da sua aplicação.

Não que você não possa colocar direto na configuração de chamada do auth a lista de controllers e/ou actions e suas respectivas visibilidades, mas é só por uma questão de economia de esforço

A idéia é simples, e vou assumir que o controller com o auth será o app_controller


class AppController extends Controller {

var $components = array('Auth');

function beforeFilter() {

// Auth config
$this->Auth->allow(array('action_publica'));
$this->Auth->loginError = __("Usuario nao encontrado", true);
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'profile');
}

}


No exemplo acima, coloquei a chamada do componente no var $components = array('Auth');, logo depois no beforeFilter ( que sempre é executado antes do controller) configurei o Auth da seguinte forma: o allow() serve para você dizer quais actions são de acesso publico, o loginError() é a mensagem de erro, o loginAction() define onde esta o action de login e o loginRedirect() serve pra apontar pra onde o usuário será redirecionado após o login. Agora basta no meu controller login colocar as actions login() e logout() que ficaria parecido com o seguinte:


class UsersController extends AppController {

function login() { }

function logout() {
$this->redirect($this->Auth->logout());
}

}


Assim ficar o login e o logout. Simples não ? O action login() pode ficar completamente em branco e o logout() faz um redirect pro logout do Auth. E a view do login também é bem simples:


<div class="users">

<?php if ($session->check('Message.auth')):?>
<?php $session->flash('auth'); ?>
<?php endif;?>

<?php echo $form->create('User', array('action' => 'login'));?>
<fieldset>
<legend><? __('Login') ?></legend>
<?= $form->input('username'); ?>
<?= $form->input('password'); ?>
</fieldset>
<?php echo $form->end('Logar');?>
</div>


Na view eu coloquei o $session->flash('auth'); principalmente para mostrar a mensagens do tipo "usuário não encontrado", que você configura previamente no Auth.

Algumas considerações finais



O Auth tem várias configurações que podem ser alteradas, mas por default ele assume que você tem um modelo chamado User, que tem dois campos: username e password. Ele também assume que o campo password foi criptografado com um hash dele. A questão da criptografia do password é a única coisa que não pode ser alterada - ele sempre assume que o password esta criptografado.

Para saber mais sobre o Auth, vá na página da API dele e da documentação no CookBook. Agora vou continuar estudando sobre o ACL para definir as permissões de usuário automaticamente pelo grupo que ele pertence. Quando estiver com melhores conhecimentos tento escrever algo sobre isso.

terça-feira, 9 de setembro de 2008

Alterando configurações do php.ini via apache


Pra quem trabalha com vários projetos PHP em um mesmo servidor, sabe que ficar alterando o PHP.INI para cada besteira que algum projeto queria fazer não é uma coisa muito legal. Para falar a verdade não é nada legal... Por exemplo, não é legal trocar a pasta temporária de upload para um diretório que não possui permissão de escrita ou que esta em uma partição com pouco espaço disponível.

Entretanto ficar confiando no ini_set() do PHP realmente não é legal, pois ao meu ver caímos em dois problemas: as configurações do php.ini ficam extremamente espalhadas ( não queremos violar o DRY correto ?), e segundo é que não podemos fazer tudo com as funções ini_set() like.

Para quem não sabe, algumas configurações do php.ini não pode ser alteradas "on the fly". A Zend criou um nível de segurança chamado PHP_INI_SYSTEM, que não podem ser alteradas em runtime ( clique aqui para ver a lista de funções e privilégios necessários).

A solução que encontrei foi simples mas eficaz ( além de seguir as orientações da própria Zend) : usar uma diretiva de diretório do Apache, lançando um PHP Admin Value. Fazendo isso você pode redefinir algum parâmetro do php.ini para um diretório específico no servidor. A idéia é mais ou menos a seguinte: No httpd.conf do apache, dentro da sessão Ifmodule , crie um diretório para sua aplicação e coloque o seguinte parâmetro:


<Directory "/caminho/para/o/projeto/">
php_admin_value parametro_do_php_ini "novo_valor"
</Directory>
Com isso você pode sobrescrever o comportamento do php.ini inclusive em configurações mais avançadas. Sei que é redundante, mas como se pode perceber tive que usar o php como módulo para poder proveitar essa diretiva.

sexta-feira, 5 de setembro de 2008

Gerenciamento de campanhas via OpenX




Vejo pouca gente comentando sobre uma ferramenta de gerenciamento de publicidade online muito interessante feita na dupla PHP & MySQL: OpenX.

O OpenX é uma ferramenta já estável usada para o gerenciamento de banners e texto publicitários de N anunciantes (advertisers) para N publicadores (publishers) no esquema de campaigns. No início é meio complexo entender como funciona as campaigns, zones, filters e os esquemas de clicks, mas não é nenhum ciplope. Eu estive futucando o design do software e os caras que desenvolveram focaram muito (muito mesmo) em desempenho - o que às vezes não os deixam seguir algumas regras da cartilha do "bom desenvolvedor", mas nada alarmante.

Outra coisa muito legal é os diversos relatórios que ele gera, além de um instalador que torna a vida mais fácil para o primeiro deployment.

Para saber mais sobre a ferramenta, clique aqui.

Cheat Sheets


Precisa de uma lista rápida das funções do programa ou da linguagem que esta trabalhando? Pois é, o cheat-sheets.org possui diversos cheat sheets de inúmeros sistemas.

quinta-feira, 4 de setembro de 2008

Joomla Security Strike Team


Usei por algum tempo o Joomla e achei esse CMS bem feito, principalmente pelo esquema das suas extensões. Eu comecei a usar na versão 1.0.12 - que ainda tinha umas coisas a resolver quanto ao design da framework, mas com a versão 1.5 ele ficou bem redondo.

Acontece que esse CMS sempre teve seu "tendão de Aquiles" no quesito segurança, e não são poucas pessoas que tem medo de usá-lo por causa das más notícias que o rapazinho tem. Parece que os desenvolvedores do projeto decidiram criar uma divisão só para cuidar da questão segurança do CMS - a Joomla Security Strike Team. O nome até é bonitinho e parece até a nova versão dos Power Rangers, agora só nos resta saber se as falhas de segurança vão continuar acontecendo.

quarta-feira, 3 de setembro de 2008

O que é Scrum, segundo Danilo Bardusco.

Ocorreu aqui no Rio da XII Amostra PUC (que não pude ir...). Uma das palestras foi ministrada pelo Danilo Bardusco, onde ele conta como foi a adoção de Scrum na Globo.com.



Outro slide do Danilo, quebrando alguns mitos sobre o Scrum:


terça-feira, 2 de setembro de 2008

Estimando com bola de cristal



Chegou a hora de começar o projeto e o gerente pede uma estimativa em horas. E como bons funcionários que somos, analisamos os requisitos, geramos as especificações, quebramos em partes tangíveis e calculamos cientificamente o prazo de cada item do nosso WBS (ou qualquer outro nome que você dê a isso) para então conseguir o tempo ideal.

Óbvio que depois disso você acorda, toma um banho frio e vai pro trabalho, aonde você provavelmente vai iniciar um projeto ainda participando do deployment ou manutenção de outros sistemas paralelos, o gerente (que provavelmente esta sendo pressionado por alguma força superior mediúnica detentora de conhecimentos profundos sobre o trabalho alheio, como por exemplo clientes ou executivos) solicita um "cornograma" pra ontem, não temos todos os requisitos e geramos especificações que sabemos que não são reais, para então gerar um WBS com estimativas de horas completamente furadas.

Mas o projeto tem que andar, alguém tem que dar o primeiro chute na bola correto? Errado. O problema é que na maioria das vezes esse chute é contra o seu time. Gerar estimativas em horas é sempre uma tarefa sacal, que na verdade funciona muitos mais como aquela brincadeira da "batata-quente" do que com uma métrica técnica. Todos que participam da brincadeira sabem que é tudo um jogo de faz de contas, mas temos que arranjar alguém pra passar a bomba adiante. Principalmente em modelos waterfall, onde já vi casos do time ter até mesmo dois cronogramas: um para os clientes/supervisores (que provavelmente viaja na maionese) e outro para o time de desenvolvimento (com os diagnósticos menos utópicos) e os dois cronogramas acabam batendo no prazo final.

Eu entendo o desespero dos gerentes de projeto, que precisam ter algum recurso tangível para medir o progresso do grupo, mas questiono seriamente a forma maquiavélica como isso é feito. O livro The Pragmatic Programmer traz uma sessão falando sobre esse problema que é tão velho quanto o desenvolvimento de sistemas:


How Accurate is Accurate Enougth ?

To some extent, all answers are estimates. It's just that some are more accurate than others. So the first question you have to ask yourself when someone asks you for an estimate is the context in which your answer will be taken. Do they need high accuracy, or are they looking for a ballpack figure?

- If your grandmother asks when you will arrive, she's probably wondering whether you lunch do dinner. On the other hand, a diver trapper underwater and running out of air probably internested in an answer down to the second.

- What's the value of π ? If you're wondering how much edging to buy to put around a circular flower bed, then "3" is probably good enought. If you're in school, then may be "22/7" is a good approximation. If you're in NASA, then maybe 12 decimal places will do.

One of the interesting things about estimating is that the units you use make a diference in the interpretation of the result. If you say that something will take about 130 working days, then people will be expecting it to come in pretty close. However, if you say "Oh, about six months" then they know to look for it any time between five and seven months from now. Both numbers represent the same duration, but "130 days" probably implies a higher degree of accuracy than you feel.
Trabalhar com estimativas em horas é muito mais empírico do que matemático. Por isso acredito que os processos ágeis trazem soluções mais proveitosas para todas as partes envolvidas no processo de desenvolvimento: do cliente, que recebe prazos mais reais e o ROI mais cedo, ainda que tenhamos que pensar nos moldes de iterações, o desenvolvedores que vão trabalhar mais focadamente (tendo como tarefa principal fazer só o seu trabalho) e o gerente, que vendo ambas as partes felizes, vão poder dormir mais tranqüilos.

Por fim, deixo alguns links interessantes: esse, esse e esse.

sexta-feira, 29 de agosto de 2008

Slide sobre Usabilidade

Recebi pelo twitter o link do slide abaixo e achei interessante a forma como ele fala sobre usabilidade, usando o Wordpress e algumas outras ferramentas que conhecemos como referência. Expressa bem a idéia do Getting Real sobre fazer somente o necessário e deixar claro como ele funciona.



Hug a Developer!

Hilário não ?

quinta-feira, 28 de agosto de 2008

Tracer Bullet

Uma dica simples, mas que é capaz de nos livrar de muitas dores-de-cabeça é o uso de códigos testadores de ambiente, ou como o livro Pragmatic Programmer chama, Tracer Bullet. Se preocupar com o ambiente em que sua aplicação irá rodar é tão importante quanto escolher a framework certa para desenvolvê-la. Precisamos ter certeza sobre quais sãos os módulos suportados pelos servidores envolvidos, diretórios com permissão de escrita, configurações diversas do web server e outros itens que sempre nos preocupamos por último.

Deixar para testar o ambiente de produção com o software que irá ser entregue (ainda que seja a versão alpha) é tão insensato quanto fazer o checkup do seu carro 30 min antes de viajar do Rio para Bahia com toda a família. Se tiver que alterar qualquer coisa, já era.

Tendo esse problema nas mãos, entende-se então a técnica de Tracer Bullet, onde criamos um pequeno código, com o mínimo de linhas necessárias para fazer um teste geral no ambiente. Por exemplo, em uma aplicação qualquer pode-se testar a conexão em um CRUD simples com as bases de dados que serão usadas, o uso de componentes terceirizados, envio de emails, permissões de diretórios e usuários, extensões do web server ou qualquer outro recurso que sua aplicação final poderá usar. Não gaste tempo tentando fazer uma tela bonitinha pra mostrar pro cliente, a função do Tracer Bullet é informar pra equipe de desenvolvimento e infra o que terá que ser alterado antes do primeiro deployment. E como grande parte da infra será testada de forma direta, isso refletirá na redução de testes posteriores ao primeiro processo de deployment.

quarta-feira, 27 de agosto de 2008

MySQL Workbench 5.1 Alpha para Linux



Saiu no blog do MySQL Workbench que em menos de 30 dias teremos disponível para Linux a versão alpha da ferramenta de ERM da MySQL. Obviamente, a ferramenta ainda não terá todas as opções da versão estável, mas já terá a principal que é montar o ERM e criar uma DDL a partir do mesmo. Abaixo mais uma tela.

terça-feira, 26 de agosto de 2008

Dica: The Pragmatic Programmer



Vou usar o blog para indicar alguns livros interessantes que tenho tido contato. Embora pareça ser puro "jabá", a idéia é passar pra vocês o que tenho lido e que tem trazido benefícios reais no meu dia-a-dia.

Embora não tenha terminado de ler, tenho gostado muito do The Pragmatic Programmer. É um livro obrigatório, servindo de introdução geral para Refatoração, Source Control, TDD, técnicas DRY, e vários outros recursos que estão de uma forma ou de outra, englobados dentro dos processos ágeis de desenvolvimento.

Além de não ter uma linguagem chata e usar várias analogias interessantes, o livro é realmente prático, traz muitas situações que facilmente encontramos no dia-a-dia.