Mini-curso dominando o terminal do linux

É hoje à noite

DURAÇÃO: 2h

Aprenda os fundamentos do terminal do Linux, domine os comandos mais comuns mas, além disso, aprenda um novo jeito de pensar. Automatize tarefas e coloque seu computador para trabalhar por você.

Por que estamos oferecendo esse curso?

Durante os últimos anos eu tenho ensinado milhares de técnicos, programadores e webdesigners a ser mais produtivos. Treinei equipes inteiras de empresas como iG, Terra, Yahoo!, Locaweb, Magazine Luíza e Editora Abril. Além disso, tenho sido chamado para palestrar em grandes eventos técnicos em todas as regiões do Brasil.

Mas sinto que o Brasil (e provavelmente o mundo) tem uma carência enorme de conhecimento em computação. E essa carência não poderá ser preenchida apenas ensinando mais a quem já é especialista no assunto. Por isso, fiquei muito feliz quando o Maudy, do Ubuntu Dicas, me convidou para ensinar os segredos do terminal do Linux a iniciantes. E o resultado disso é esse curso que você poderá assistir hoje, quinta-feira, dia 30, às 20h.

Temos sentido, tanto na comunidade Ubuntu Dicas quanto no mercado em geral, um grande interesse dos usuários iniciantes em aprender os segredos do terminal do Linux. É uma ferramenta fantástica de automatização de tarefas, capaz de fazer seu computador trabalhar por você. E também é a porta de entrada para uma série de novos conhecimentos e, inclusive, para um novo jeito de pensar.

Por que você deve dominar o terminal?

Eu comecei minha carreira como programador Windows. Como todo usuário experiente de Windows, eu dominava uma porção de truques avançados do próprio Windows e de seus programas. Foi nessa época que comecei a estudar Linux. Um dia meu chefe na época apareceu com uma tarefa desafiadora para mim. Todos os dias chegava, no mesmo horário, um CD com imagens vindas das filiais. Sim, em CD, naquela época fazer esse tipo de coisa pela Internet ainda era muito lento. E essas imagens deviam ser preparadas para publicação no site. Não era uma tarefa complexa, precisava basicamente redimensionar as imagens e copiá-las para a pasta certa através de um programa de FTP.

Eu resolvi o problema usando um recurso do Photoshop para processamento em lote, chamado “batch” na versão em inglês. Criei uma action no Photoshop para ser executada com o recurso de batch e, todos os dias, quando o CD chegava, eu copiava o conteúdo para uma determinada pasta, abria o Photoshop, executava o processamento em lote e aguardava o Photoshop terminar. Ao final, abria um programa de FTP e copiava os arquivos para o servidor do site.

Era uma tarefa enfadonha, repetitiva e aquilo começou a me deixar desanimado. Eu passava as tardes me sentindo mal, antecipando o momento em que eu teria que parar meu trabalho para copiar as imagens e ficar olhando o Photoshop trabalhar.

Felizmente, foi nessa época que eu comecei a aprender Linux. E com um bocado de estudo e um pouco de esforço cheguei a uma sequência de comandos que resolvia o problema:

cd imagens_filiais/entrada
for i in *.jpg;do  
  convert -thumbnail 300x300 $i $i
done
mv entrada `date +%Y%m%d`
cd ..
rsync -razv . servidor:imagens_filiais/

Uma simples sequência de sete linhas. Claro, você pode achar esses comandos assustadores, e pensar que dá mais trabalho digitar isso tudo do que simplesmente copiar a pasta, renomear, executar a action no Photoshop, abrir o programa de FTP e copiar os arquivos. Acontece que só foi necessário digitar esses comandos uma vez. Criei um arquivo com essa sequência de comandos e, cada vez que o CD de imagens chegava, eu copiava as imagens para a pasta entrada e executava um único comando. Consegue imaginar meu alívio e alegria ao conseguir me livrar dessa tarefa repetitiva, colocando o computador para trabalhar para mim?

Não se assuste com os comandos. Eu também tinha medo deles e não entendia nada quando os vi pela primeira vez. Mas eles são simples, acredite. Muito simples. Se você entender os conceitos fundamentais, vai entender esses comandos e qualquer outro com que tiver que lidar, com facilidade. E é fácil entender, você vai ver.

Você vai gastar duas horas estudando hoje e com certeza, vai economizar muito mais do que duas horas na primeira tarefa repetitiva que chegar às suas mãos. E vai parar de ter medo do terminal.

Por que você deveria se inscrever para esse curso agora?

Por que o curso, com interação ao vivo, vai estar disponível apenas hoje, dia 30/01. Além disso quem se inscrever até lá vai receber também a apostila do treinamento e um bônus especial, preparado com carinho para quem quer avançar na automatização de tarefas. Esta é então uma chance única, uma oferta que não estará disponível depois de quinta-feira. Depois disso você poderá adquirir apenas o acesso à gravação do curso. A apostila estará disponível exclusivamente para quem adquirir o acesso até às 20h.

Nós temos tanta certeza que você vai gostar do curso que, para que você tenha certeza ao se inscrever, oferecemos a exclusiva garantia completa: se você assistir o treinamento ao vivo e, por qualquer motivo, não estiver satisfeito com o que aprendeu, você pode simplesmente escrever para a gente e obter seu dinheiro de volta. Todo o seu dinheiro de volta, sem letras miúdas, sem perguntas, basta mandar um e-mail.

Para quem é esse curso?

Se seu trabalho envolve lidar com arquivos em um computador e realizar tarefas que podem ser automatizadas, esse curso é para você. Se você apenas navega na internet, escreve textos e planilhas, por favor, não se inscreva. Mas se você precisa lidar com tarefas como capturar dados da internet, lidar com arquivos em grandes volumes, tratar texto, imagens, vídeos ou áudio, administrar servidores ou qualquer outra tarefa repetitiva que possa ser automatizada, você PRECISA fazer esse curso.
Eu tenho certeza que, se você trabalha assim com um computador, vai recuperar o tempo investido em estudar em no máximo uma semana.

Inscreva-se

Elcio Ferreira é sócio-diretor da Visie Padrões Web, empresa especializada no desenvolvimento de sites, sistemas web e aplicativos móveis. Já treinou e auxiliou equipes de desenvolvimento de centenas de equipes em empresas como Globo.com, Editora Abril, iG e Terra. Trabalhando com web há mais de quinze anos, Elcio é nome de referência no Brasil em padrões web e tecnologias abertas para a internet, sendo membro do grupo de trabalho de acessibilidade do W3C. Durante o ano de 2011, ministrou os treinamentos oficiais de HTML5 na sede do W3C Brasil.

Porque você deveria aprender várias linguagens de programação

tpp_xlargecover

O programador pragmático não está preso a nenhuma tecnologia.

Há um tempo eu li “The Pragmatic Programmer“, uma espécie de livro de auto-ajuda para programadores. Não é um livro técnico, não vai te ensinar técnicas ou tecnologias, mas fala de um jeito de pensar e traz uma coleção de conselhos daquele tipo que parece óbvio mas ninguém nunca faz.

Um desses conselhos era aprender novas linguagens de programação. Os autores recomendam que você se torne proficiente em uma nova linguagem de programação por ano. O que, eu sei, é muito difícil. Eu não tenho conseguido aprender uma nova linguagem por ano. Mas isso não invalida o conselho de que você deve aprender novas linguagens de programação.

Por que aprender linguagens de programação novas?

Cada linguagem de programação traz consigo um jeito de pensar, um conjunto de soluções e uma comunidade com cultura diferente. E isso enriquece você. O bom programador tem uma visão ampla e não está “preso” a uma única tecnologia.

Por exemplo, digamos que você esteja desenvolvendo um sistema em PHP e precise, de tempos em tempos, fazer parsing de feeds RSS cuja URL foi cadastrada pelos usuários. Digamos que você queira fazer o parsing em segundo plano, a cada meia hora. Claro, você pode usar SimplePie, mas ele não é tão “Simple” assim. Dê uma olhada na documentação. SimplePie é muito poderoso, tem uma porção de recursos, mas vai dar algum trabalho para instalar direito, montar seu script, testar e automatizar.

E se você procurar soluções em outras linguagens de programação? Quanto trabalho vai ter? Vamos ver o que Python tem para nós, usando o excelente módulo feedparser. O módulo feedparser está disponível no gerenciador de pacotes do Ubuntu, e também para instalação via PIP.

import feedparser
print feedparser.parse('http://elcio.com.br/feed')

Mais uma meia dúzia de linhas para ler as URLs e salvar os resultados no banco de dados e pronto, temos um arquivo simples com excelente performance para ser colocado no cron. Bom, falando em performance, esse é o típico processamento que vai rodar muito mais rápido se feito em paralelo. Processamento em paralelo com PHP é um parto, certo? Com Python você pode usar o módulo multiprocessing e fazer isso quase que em uma linha só.

Além de ferramentas, linguagens de programação carregam jeitos de pensar

Uma vez que você já tenha resolvido um problema em uma linguagem de programação, você consegue resolver o mesmo problema em qualquer outra, certo? Bom, quando você aprende uma linguagem nova, você acaba tendo que ler um bocado de código de outras pessoas. E isso te ensina novas soluções para os seus velhos problemas.

Isso é diferente de se aprofundar no estudo de sua linguagem atual. O aprofundamento vai fazer você ler mais códigos das mesmas pessoas, da mesma comunidade, da mesma cultura. Aprender uma linguagem nova faz você ler códigos de gente nova, com outra cultura. Na prática, aprender Python vai fazer você melhor programador PHP, aprender Smalltalk vai fazer você melhor programador Java, etc.

Porque Python

De todas as linguagens de programação que você poderia escolher para começar a aprender algo novo hoje, eu recomendo que, se você ainda não sabe Python, comece por ela. Python roda no Google App Engine, no AWS Elastic Beanstalk e é a linguagem de programação por trás da maioria das ferramentas de administração do Ubuntu. Se você quer construir pequenos scripts para automatizar tarefas em seu servidor, ou quer construir grandes aplicações web para rodar em Cloud, ou se quer criar ferramentas de processamento paralelo massivo, ou interfaces gráficas multiplataforma, Python vai servir.

E é, ao mesmo tempo, uma linguagem que possui recurso fantásticos e vai te ensinar coisas incríveis, e uma das linguagens mais fáceis de aprender que eu conheço.

Que tal começar agora? Leia o excelente “Dive Into Python“, faça os exercícios, depois tente desenvolver alguma coisa na linguagem. E veja se você não vai se tornar mais eficiente em sua linguagem atual.

“Jabá”: Python é a linguagem que escolhemos para a aula de integração multi-linguagem do DevOps Heroes, treinamento da Visie que acontece a partir do dia 27 em São Paulo. Quem estiver lá vai ver isso tudo funcionando na prática. As vagas estão se esgotando.

Pare de usar FTP

Há mais de dez anos que meus processos de deploy, isto é, colocar um site ou sistema em produção, não usam FTP. Qualquer bom provedor, nacional ou internacional, oferece ferramentas muito mais eficientes para o deploy de sites e sistemas. E isso inclui desde pequenos sites em WordPress ou HTML estático até portais com milhares de acesso por hora e grandes sistemas rodando em estruturas de cloud computing elástico.

Por que você não deveria usar FTP

FTP é um protocolo muito simples de troca de arquivos, que pode ser útil para uma porção de coisas. Mas não possui os recursos necessários para o deploy e controle eficiente de aplicações web. Entre os problemas com o protocolo FTP, podemos citar:

  1. Falta de integração com controle de versão: você está fazendo uma manutenção num site, cujo diretório tem 5MB de dados. Você alterou não mais que uma dúzia de arquivos, em pastas diferentes. Arquivos texto cujos tamanhos, somados, não passam de 200KB. Como você faz o deploy por FTP? Ou sobe o site todo, “por via das dúvidas”, ou precisa pinçar os arquivos que precisa subir, um a um, certo? Algumas ferramentas de transferência, como o Filezilla, conseguem “sincronizar” as pastas, mas eles fazem isso varrendo as pastas uma por uma e comparando as datas e tamanhos dos arquivos. Leva um tempão e, se algum outro programador alterou os arquivos antes de você isso certamente vai dar problemas. O que nos leva a um segundo ponto:
  2. Falta de recursos de “auditoria” e controle de deploys: não há como obter um log ou lista de quem fez deploy, quando e o que foi feito. Um problema recorrente em ambientes em que uma equipe trabalha com FTP é a sobrescrita de alterações já publicadas. Na pior das hipóteses, gerando perda de trabalho. Mas mesmo que a equipe tenha um ambiente interno de controle de versões e a sobrescrita no FTP seja fácil de resolver, pense na dor de cabeça de ter que explicar para o cliente que o defeito que foi corrigido ontem voltou ao ar hoje, mas já estamos resolvendo.
  3. Falta de automatização: deploy por FTP é feito à mão. Um homo sapiens navega nas pastas de seu computador e do servidor e arrasta o que deve ser atualizado de um lado para outro. Num processo chato e delicado. Se ele arrasta as coisas para a pasta errada, pode ser muito difícil consertar o problema. Pode ser difícil até entender o problema. E se você coloca um homo sapiens para repetir uma mesma tarefa vinte ou trinta vezes, ele certamente vai errar alguma.
  4. Falta de recursos para rollback automatizado: você subiu a alteração. Em seguida abriu o site e viu um “erro de conexão ao banco de dados”. Percebe então que subiu a versão errada, ou no lugar errado. Como voltar atrás? Voltar atrás com FTP é um processo ainda mais manual e trabalhoso do que subir o site. Já vi casos, e não foram poucos, em que foi preciso pedir ao provedor para restaurar o backup diário. E esperar por isso, claro.

O que você deveria usar então?

SSH e Git. Há uma série de ferramentas para deploy automático, como o Capistrano ou o Jenkins. Esqueça isso tudo no começo. Aprenda SSH e Git, e construa seu processo de deploy com isso. Você vai ganhar:

  1. Deploy realmente automático. Com um único comando.
  2. Integração real com o controle de versão. Isso significa que sempre será possível rastrear cada alteração. Também significa rollback automático, o que é maravilhoso.
  3. Controle simplificado de múltiplos ambientes. Precisa fazer deploy em um ambiente de homologação, para mostrar as novidades ao cliente? Um comando. Ele aprovou as novidades, e agora é hora de fazer deploy em produção da versão que foi homologada ontem? Um comando.
  4. Preparação para o futuro. O site cresceu e você precisa agora migrar para um serviço como o AWS Elastic Beanstalk, que oferece escalabilidade “elástica” sob demanda dentro da estrutura de serviços da Amazon. O processo vai ser praticamente indolor. O cliente precisa agora de deploys com zero de indisponibilidade, e você resolveu usar a estratégia Blue Green. Já tem tudo o que precisa.

Por isso, não se conforme em usar FTP. Se precisa estudar SSH e Git, estude, vai valer a pena. Se já sabe, está esperando o quê?

“Jabá”: uma boa maneira de aprender como mudar seus processos de deploy, e muito mais, é o treinamento DevOps Heroes da Visie, que acontece daqui a duas semanas.

 

Sampa JS, recomendo

Alguém me perguntou há pouco o que eu acho do Sampa JS, por que eu não vou, por que eu não apoio o evento e etc. Resolvi responder por aqui, já que talvez mais alguém pode ter essa dúvida (se é que isso importa para alguém, né?)

Vamos lá, assunto pessoal: eu sou adventista do sétimo dia, por isso dedico o sábado a atividades não-profissionais: tempo com a família, trabalho voluntário de ajuda aos necessitados, estudo da Bíblia e oração. Por isso, não tenho ido a boa parte dos eventos de nossa área. A maioria acontece aos sábados. Em alguns outros, como o excelente Tableless Conf, eu simplesmente não consegui agenda para ir (ando trabalhando demais.)

Então, para quem estava curioso, é só isso.

Aliás, eu recomendo muitíssimo o Sampa JS, se você puder ir. Parece que vai ser um evento e tanto!

HTML5: Desenvolvendo agora as aplicações web de amanhã

Boa parte das APIs do HTML5 já estão disponíveis hoje para a maioria dos navegadores e, com um pouco de conhecimento e uma pitada de javascript, é possível desenvolver hoje aplicações com geoposicionamento, funcionamento offline, conexão em tempo real com o servidor, gráficos vetoriais e todo um novo conjunto de recursos de interface.

Por que esperar?

O HTML5 foi construído de maneira modular. Não é preciso esperar que toda a documentação esteja escrita para começar a trabalhar com ele. Você pode usar agora mesmo o que já está pronto.

Pensando nisso, preparamos este Workshop sobre as APIs do HTML5 e como construir a nova geração de aplicações web. Veja o programa.

Alta Performance com WordPress

O que vai acontecer com seu site WordPress se ele receber muitas visitas? Aprenda neste Workshop as técnicas e segredos para manter seu site no ar, mesmo sob intenso tráfego.

Site bom é site rápido

A Amazon fez um trabalho de redução do tempo de carregamento em suas páginas e descobriu que cada décimo de segundo que suas páginas demoram a carregar representa 1% a menos de vendas. Ninguém gosta de sites que demoram a carregar.

Pensando nisso, preparamos este Workshop sobre otimização de performance em websites, focado especialmente em sites WordPress. Veja o programa

Novo local

Redesenhamos os Workshops da Visie. Serão eventos de menor porte, num lugar mais adequado a cursos de tecnologia, e também mais baratos. E esperamos que sejam mais frequentes. O lugar escolhido foi o MyJobSpace, que merece um post a parte.

E o primeiro Workshop que faremos neste novo formato é sobre um tema que acho apaixonante: performance. O Workshop Alta Performance com WordPress vai mostrar a você tudo o que você pode fazer, no servidor, PHP, em seu tema, plugins, HTML, Javascript, CSS e imagens para ter um site muito rápido.

Como temos apenas 34 vagas, é bom você não vacilar. Inscreva-se.

HTML5: um ano depois

Palestra apresentada na TDC 2011. Tentei separar os recursos do HTML5 em quatro grupos:

  1. O que você já pode usar hoje;
  2. O que você já pode usar hoje, mas oferecendo alternativas Javascript para navegadores sem suporte;
  3. O que você já pode usar hoje, mas só para plataformas específicas;
  4. O que não sabemos ainda quando poderá ser usado.

Palestra Diferente

Muitas vezes eu usei esse espaço para convidá-los a assistir palestras minhas em hotéis, teatros, faculdades e outros auditórios Brasil a fora, falando das mais diversas facetas do desenvolvimento web. Desta vez, quero convidá-lo para me ver numa palestra diferente:

A Presciência da Bíblia no livro de Daniel

Esqueça as baboseiras que você recebeu por e-mail sobre Nostradamus e o 11 de Setembro. Estamos falando de algo concreto aqui, de um livro escrito há 2.500 que prediz, de maneira praticamente inequívoca, séculos de acontecimentos históricos. Vamos analisar as evidências históricas e você vai entender porque eu, que era cético, passei a acreditar na Bíblia.

Onde:
No auditório da Igreja Adventista do Sétimo Dia de Americanópolis.
Rua Austrália, 230, São Paulo
A dez minutos do metrô Jabaquara.
mapa
Quando?
Amanhã, 23/01/2011, às 19h
Quanto?
Grátis

Vou usar como argumentos, ao invés de dogmas e imposições, a lógica e um pouco de matemática aliadas aos fatos históricos. Ao final, me diga o que achou.

.

Servindo vídeos Ogg Teora com o Content Type correto

Semana passada participei de um curso sobre HTML5 ministrado pela w3c Brasil. Nesse curso o Elcio Ferreira foi o instrutor, eu fiquei com uma duvida e fiz uma pergunta para ele sobre a necessidade de incluir a extensão do arquivo na tag <video> para que o mesmo funcione no firefox. Ele me mostrou uma forma utilizando PHP mas infelizmente não consegui obter o codigo.

Os servidores web, quando servem um arquivo, enviam ao navegador a informação de tipo de conteúdo. O header enviado do servidor, para um arquivo Ogg Vorbis, deve ser:

Content-type: application/ogg

Se o servidor não enviar esse header, o vídeo não vai tocar no Firefox. O Apache sabe fazer sozinho, basta que esteja configurado para isso. No Ubuntu, por exemplo, ele já vem configurado para servir ogg.

A saída de scripts PHP é servida com outro tipo de conteúdo. Geralmente “text/html”. Se você serve seu vídeo do PHP, precisa enviar um header no início do script avisando o navegador que esse conteúdo é vídeo. Você pode fazer:

<?php
header('Content-type: application/ogg');
?>

Já se você serve os vídeos como arquivos estáticos, não deve usar PHP para processá-los só para que sejam servidor com o tipo correto. O jeito certo é configurar corretamente o servidor. Se for um hosting compartilhado, eu tentaria um chamado ao suporte pedindo para que configurem isso corretamente antes de fazer com PHP. Ou estudaria mudar de hosting 😉

Amanhã, Café com Browser sobre HTML5

Durante esta semana estive no escritório do W3C Brasil, ministrando um treinamento de HTML5. Para encerrar o treinamento, o W3C organizou uma edição do Café com Browser.

Nós e o pessoal da Agência Click vamos mostrar um pouco do que já estamos fazendo com HTML5, e você pode assistir ao streaming ao vivo, cujo link será disponibilizado na hora.

Para tuitar, use a tag #cafecombrowser.

Parallel Python

Embora seu computador possa ter dois, quatro, oito ou até dezesseis núcleos de processamento, o Python só usa um deles de cada vez (mesmo trabalhando com threads). Parallel Python resolve o problema. Um exemplo simples, para você entender como funciona:

ppserver = pp.Server(ppservers=())
job1 = ppserver.submit(funcao_demorada, (), (), ())
job2 = ppserver.submit(funcao_demorada, (), (), ())
print job1()+job2()

Os quatro argumentos do método submit são: a função que será executada, os argumentos passados a ela, as funções que ele pode chamar e os módulos dos quais ela depende. Veja um exemplo de como chamar com esses parâmetros:

ppserver = pp.Server(ppservers=())
job1 = ppserver.submit(funcao_demorada, (44,), 
                        (sub_funcao,), ("sys","math",))
job2 = ppserver.submit(funcao_demorada, (25,),
                        (sub_funcao,), ("sys","math",))
print job1()+job2()

Divirta-se!

Desafio de programação: resolvendo Lights Off

Fiz essa versão do clássico joguinho Lights Off:

O jogo é simples, e o objetivo é apenas apagar todas as luzes. Por curiosidade, fiz também o algoritmo que resolve o jogo:

O desafio está lançado. O primeiro que colocar nos comentários a URL de uma página com um botão “solve” como o meu ganha uma entrada para o Codeshow. Importante:

  1. Vale o primeiro comentário. Mesmo que você comente de madrugada e eu demore a moderar, ganha quem comentar primeiro.
  2. O solucionador tem que ser escrito em Javascript. Você pode copiar minha versão do jogo e desenvolver em cima dela.
  3. Não pode resolver na base da tentativa e erro. Tem que ser uma boa solução, que resolva qualquer estado do tabuleiro em 20 passos ou menos.

Divirtam-se!

(O pessoal da Visie, se quiser participar, pode. Só não vai ganhar nada ;-))

Sobre Windows, Linux, paixões e times de futebol

Discussões sobre o melhor sistema operacional, o melhor navegador ou a melhor linguagem de programação tendem a entrar em loop infinito. Cada um dos lados parece achar o outro um completo idiota por não se convencer de suas opiniões.

Semana passada troquei algumas mensagens com o René de Paula que me fizeram pensar bastante sobre o assunto. O René provavelmente não me conhece, mas eu tenho aprendido muito com ele nos últimos anos, principalmente em seu podcast, o Roda e Avisa. E esse post não é um desabafo “estou chateadinho”. Estou citando o nome do René porque a conversa se deu no Twitter, ou seja, em público, e realmente me fez pensar.

O René recomendou esse artigo da ZDNet, analisando um estudo de segurança dos navegadores web. O artigo começa apresentando os resultados do estudo, em que o Internet Explorer ganha de lavada, e segue explicando porque, na opinião do autor, o estudo patrocinado pela Microsoft é tendencioso e irrelevante.

Respondi ao René dizendo que concordava com o artigo que ele havia indicado, que realmente o estudo era tendencioso. E usei a frase “o rei está nu.” Para mim, a crônica da roupa nova do rei é uma excelente metáfora para a situação. Ele me respondeu que havia visto meu blog e que achava que havia um “viés oculto” em tudo o que eu dizia. Em seguida twittou sobre o fato de as pessoas tratarem essas discussões como se fossem sobre times de futebol. Isso me fez pensar um bocado.

Eu gosto de, numa discussão, ouvir o outro lado. Também gosto muito de lógica. Se tem uma coisa que eu vou defender numa discussão, mais do que meu time de futebol, é o bom uso da lógica. Tento nunca ser irrazoável. Sei que todos somos tendenciosos, mas sempre tento ser mais imparcial que a média.

Talvez seja o fato de a discussão ter acontecido no Twitter, meio pouco propício, mas confesso que fiquei muito preocupado com a impressão que o René teve. Quem me conhece, sabe, trabalho com Linux, Windows ou Mac, sem rabo preso, escolhendo sempre o jeito mais simples de resolver cada problema.

Cada cabeça, uma sentença

Em primeiro lugar, não há um sistema operacional “melhor” e outro “pior”. Há um “melhor para você”. O fato de aquele seu amigo usuário de Windows não ter enxergado ainda que o Linux é o melhor sistema operacional do mundo talvez seja porque, para o perfil de uso dele, o Windows seja realmente o melhor sistema operacional.

Dificilmente eu tento convencer alguém a usar exclusivamente Linux. Sempre tento convencer as pessoas a experimentar. Se o sujeito me diz que é um heavy gamer, por exemplo, recomendo o uso de Windows. Sei, o Wine está muito evoluído e tal, mas se ele tem dinheiro para pagar as licenças e pode rodar a versão mais nova de cada jogo no ambiente em que ele foi feito para rodar, por que complicar?

Sim, não me esqueci, para certos perfis de uso, Mac OS X também é um sistema fantástico. Estou quase comprando um para minha mulher.

Existem, porém, padrões absolutos

O fato de não existir uma solução “bala de prata” e a paixão que costuma cercar essas discussões têm levado muita gente, principalmente programadores, a uma posição morna tão irrazoável quanto os extremos. É comum ouvir frases como “a melhor linguagem é aquele com a qual você sabe trabalhar” ou “a melhor ferramenta é a que resolve seu problema.”

Acredito sim que há casos de uso os mais variados. Mas, dentro de determinado caso de uso, há métricas objetivas que você pode usar para dizer o que é melhor. Falando em linguagem de programação, por exemplo, a melhor não é aquela que faz você se “sentir bem”. A não ser que programar para você seja só um hobby, a melhor é aquela que vai te permitir resolver mais rápido o problema do cliente, com a qualidade e a performance necessárias.

Dado um determinado problema do cliente, e uma determinada métrica de performance, deve ser possível apontar a melhor linguagem para essa situação.

Que problema seu software se propõe a resolver?

Se você é desenvolvedor de software, é importante entender isso. Você dificilmente vai encontrar uma oportunidade de desenvolver um produto que é o melhor para todo mundo. Não há unanimidades.

Você pode desenvolver algo que é o melhor para a maioria, pode achar uma minoria endinheirada, ou pode desenvolver algo legal para você mesmo e torcer para que haja gente parecido com você lá fora.

Mas, se você tentar ouvir todas as sugestões que receber e superar os concorrentes em absolutamente todos os perfis de uso, nunca vai terminar de desenvolver.

Mente aberta

Na Visie hoje temos 7 máquinas Windows, 6 Linux e 3 Macs. Sem contar as VMs, o ambiente de testes, e os servidores onde estão hospedadas as aplicações. Desenvolvedor, abra sua mente. Aprenda uma linguagem de programação nova, experimente outro sistema operacional, teste outra solução. Você vai aprender muito.

Aprenda Python, Ruby, Haskell ou Scala. Isso vai tornar você um melhor programador PHP, Java ou .Net. Desenvolva um projeto com uma banco de dados não relacional (estou usando MongoDB em um projeto.) Se você ama WordPress, faça alguma coisa com Joomla, e vice-versa. Tente outro framework, outro editor, outro jeito.

Sobre navegadores

No dia seguinte a essa conversa estive no escritório do W3C Brasil, assistindo ao Café com Browser com o pessoal do Internet Explorer.

Eles passaram boa parte do tempo falando sobre os recursos do navegador para o usuário final. Coisas como abas (oh!) e favoritos mais legais, webclips, processos independentes em cada aba, melhorias de performance e segurança. Tudo muito interessante mas, eu acho, apresentado para o público errado. Estávamos dentro do W3C, afinal de contas. Queríamos saber sobre as melhorias para o desenvolvedor.

Ao final, a palestra sobre melhorias para o desenvolvedor foi, para mim, parte surpreendente, parte decepcionante. Me surpreendi principalmente pela reação dos desenvolvedores no Twitter. Muita gente não conhecia as developer tools do IE8, ou os modos de compatibilidade, por exemplo. Quando foi apresentado o querySelector, muita gente twittou revoltada, porque a Microsoft estava “inventando um novo jeito proprietário de fazer as coisas”. Gente, o querySelector é uma recomendação do W3C (está em Working Draft, mas está lá.)

A parte decepcionante, expressei em minha pergunta:

Em suma, não tenho ódio da Microsoft ou de quem quer que seja. Não quero que o Internet Explorer suma do mapa. Ainda tenho projetos em ASP, VB e .Net, e sou feliz com isso. Só quero poder desenvolver uma vez só minhas aplicações. Quero não ter que cobrar do cliente pelo custo de fazê-la funcionar no Internet Explorer. Quero entregar mais rápido aplicações melhores, mais estáveis, com menos código.

Eu vou ao 1º Encontro de TI da Arteccom

A Editora Arteccom está organizando o I ETI. Eu vou estar lá, e recomendo, parece que vai ser muito interessante. Recebi deles o seguinte release:

É tempo de interatividade e o 1º Encontro de TI faz tudo o que o público deseja!
A editora Arteccom promove novo evento que promete agitar o mercado dos desenvolvedores web.

Sabe aquele evento que você sempre sonhou? Com as palestras que você sempre quis assistir? Virou realidade! A Arteccom fez uma pesquisa com desenvolvedores web para que fossem sugeridos temas e palestrantes para o evento. 512 profissionais da área de TI responderam a pesquisa e, mais tarde, com expressiva participação do público no site www.encontrodeti.com.br, foi desenhado o 1º Encontro de Tecnologia da Informação.

Os temas mais votados e escolhidos para as palestras foram “Linguagens – quais são as mais requisitadas pelas grandes empresas e o valor das formações/certificações”, “CMS livres: Drupal x Joomla! x WordPress”, “Ferramenta Google Analytics: como analisar acessos e gerar melhores resultados” e “Padrões W3C – Como tornar seu site mais leve e mais acessível”. E ocorrerão ainda, simultaneamente, algumas oficinas que vão discutir os assuntos mais atuais da área, como Ruby On Rails, SEO, Interoperabilidade e Scrum.

Mas a interação não pára por aí. Depois de escolhidos os temas, os mediadores das palestrantes e oficinas propõem um debate no site do ETI para decidir qual especialidade dentro do assunto principal será abordada para as palestras (http://www.encontrodeti.com.br/site/?p=558). Ou seja, todas as decisões são feitas através de pesquisas com o público.

Vai ter até café da manhã, espaço imprensa digital, e, para completar, eu te faço mais uma perguntinha: Já pensou em um evento com as palestras e oficinas que você sempre sonhou, e no final ainda curtir um Happy Hour? Não está acreditando não é? É isso aí! Você não pode perder! No final deste mês, dia 27/11, quinta-feira, na Amcham Brasil, em São Paulo, e dia 29/11, sábado, no Centro de Convenções SulAmérica, no Rio de Janeiro.

Para ter um gostinho do que vai rolar no evento, confira os quatro chats sobre os temas das palestras, que tiveram ótima repercussão com cerca de 50 participantes em cada sala: http://www.encontrodeti.com.br/site/?page_id=319.

O Encontro de Tecnologia da Informação é uma realização da Arteccom, com os patrocínios de PagSeguro UOL, UOL Host, Tecla e Hostnet.

Veja a programação do evento:

08:30 – Credenciamento
09:00 – Café da manhã (networking e visita aos estandes)
10:00 – Abertura
10:15Palestra: “Linguagens: quais são as mais requisitadas pelas grandes empresas e o valor das formações/certificações”
Palestrante SP e RJ: Guilherme Chapiewski (Globo.com)
11:15Debate CMS livres:
– WordPress: SP: José Murilo (Minc) | RJ: Guilherme Aguiar (Minc)
– Joomla!: Ricardo Accioly (Noix)
– Drupal: Paulino Michelazzo (Fábrica Livre)
13:00 – Intervalo para almoço
14:30Palestra: “Google Analytics: como analisar acessos e gerar melhores resultados”
Palestrante SP: Ruy Carneiro (WA Consulting)
Palestrante RJ: Gustavo Loureiro (Infnet)
15:30 – Intervalo para visita aos estandes
16:00Palestra: “Padrões W3C: torne seu site mais leve e mais acessível”
Palestrante SP: Vagner Diniz (W3C)
Palestrante RJ: Everaldo Bechara (iLearn)
17:00 – Happy hour
18:00 – Encerramento

Oficinas (vagas limitadas):

10:15 às 11:15h (palestra principal: Linguagens e certificações)
Ruby on Rails – SP Fábio Akita (Locaweb)
Ruby on Rails – RJ Sylvestre Mergulhão (Hostnet)

11:15 às 12:15 (palestra principal: CMS livres)
SEO – SP Fábio Ricotta (MestreSEO)
SEO – RJ Paulo Teixeira (Marketing de Busca)

14:30 às 15:30 (palestra principal: Google Analytics)
Interoperabilidade – SP Fábio Hara (Microsoft)
Interoperabilidade – RJ Gilson Banin (Microsoft)

16:00 às 17:00 (palestra principal: Padrões W3C)
Scrum – SP Guilherme Chapiewski (Globo.com)
Scrum – RJ Guilherme Chapiewski (Globo.com)

Locais:

São Paulo
Data: 27 de novembro de 2008
Local: Amcham Brasil
Rua da Paz, 1.431 – Chácara Santo Antônio – São Paulo – SP
Telefone: (11) 5180-3728

Rio de Janeiro
Data: 29 de novembro de 2008
Local: Centro de Convenções SulAmérica
Av. Paulo de Frontin, 1 – Cidade Nova – RJ
Telefone: (21) 3293-6700

Inscrições: www.encontrodeti.com.br
Mais informações: (21) 2253.0596

Texto de Flávia Freire
Flavia.freire@arteccom.com.br

Recomendo. Vejo você lá.

Integrando o Vim com ferramentas externas

Depois que comecei a usar o Vim nas palestras em que eu escrevo código, muita gente começou a me escrever com dúvidas sobre o editorzinho. Apesar de eu dizer nas palestras que Vim é complicado, parece que o pessoal não tem medo. E a dúvida mais freqüente é sobre a integração entre o Vim e ferramentas externas, principalmente o txt2tags.

Faz parte da filosofia Unix que um programa seja facilmente integrado a outros através de interfaces de texto, e o Vim implementa isso muito bem. Para começar, abra o Vim e execute:

:!ls

Você vai ver que o Vim vai executar o comando ls. Então guarde isso, o sinal de exclamação (!) executa comandos externos. Há duas maneiras de fazer o Vim falar com esses comandos. A primeira é mandar o Vim ler a entrada do comando. Digite:

:r!ls

Você vai notar que o Vim vai executar o comando ls e colocar o conteúdo no buffer de edição. A outra maneira de fazer o Vim falar com os programas externos é selecionar texto. Aperte i para ir para o modo de edição e digite:

zebra
tesoura
banana
macaco
felicidade
abacate

Ao terminar de digitar, pressione ESC para voltar ao modo de comando, em seguida SHIFT+V para ir para o modo de seleção de linha e selecione todo o bloco. Com o bloco selecionado, digite:

:!sort

O vim vai colocar, antes do comando, os sinais de seleção ‘<,'>. Não se preocupe, apenas digite o comando e aperte ENTER. Você vai ver que o Vim vai executar o comando sort do sistema operacional, passando como entrada o texto selecionado, e vai substituir esse texto pela saída do comando. Isso, ao final, vai te dar a lista ordenada, assim:

abacate
banana
felicidade
macaco
tesoura
zebra

Usando essa interface simples você pode fazer o Vim falar com qualquer programa Unix.

txt2tags

O programa que eu tenho usado durante as palestras e mais tem deixado as pessoas curiosas é o txt2tags, desenvolvido pelo Aurélio Marinho. O programa está nos repositórios do Debian, então se você usa Debian ou Ubuntu, pode instalá-lo com o comando:

sudo apt-get install txt2tags

O txt2tags lê as primeiras linhas de texto que recebe como títulos do documento. Além disso, precisaremos de várias opções de linha de comando, o que não é conveniente de se digitar. Então vamos criar um shell script para guardar essas opções e fornecer ao txt2tags linhas de cabeçalho de mentirinha. Eu criei um arquivo chamado tags dentro do diretório /usr/local/bin, com permissão de execução (chmod +x) e o seguinte conteúdo:

#!/bin/bash
(echo "
 
 
 
 
 
" && cat ) | txt2tags -t xhtml --infile=- --no-headers

Em seguida, basta abrir o Vim e digitar, por exemplo:

= Aprenda Online =
A [Visie http://visie.com.br/] oferece cursos de Ajax, Javascript e Tableless.

Em seguida selecione essas duas linhas e execute:

:!tags

Pronto, HTML instantâneo.