Software desejável

Um dos processos mais eficientes para melhorar a performance e o valor de um software é a análise de funil.

Isso é, você procura pelos “gargalos” de performance, aqueles pontos onde, se você melhorar as coisas, tudo vai fluir melhor.

Bem, software é feito para ser usado por pessoas. E aí está, geralmente, o gargalo mais óbvio para que um software dê o retorno que se espera dele.

Nós não somos racionais como gostamos de achar que somos. A maior parte de nossas motivações é emocional e intuitiva.

Por isso, se você construir software que as pessoas gostem de usar, isso pode com facilidade dobrar ou triplicar os retornos que seu software gera para seu cliente.

Isso inclui fatores objetivos, como responder rápido, ser fácil de usar, automatizar tarefas repetitivas e exigir menos passos para completar tarefas.

Mas inclui fatores subjetivos. Coisas que fazem as pessoas gostarem de um software.

Por exemplo, não basta que ele seja fácil de usar, precisa parecer fácil de usar. Não basta ser produtivo, precisa parecer produtivo.

Estou falando do valor de um bom design. O pessoal que desenvolve sites já descobriu isso há uns vinte anos.

Mas muita gente no mercado de software ainda está desperdiçando essa oportunidade. Você já reparou como são feios e complicados os ERPs, por exemplo?

O ano do Linux no Desktop (não como você esperava)

O Windows 10 vai incluir um kernel Linux completo. O ChromeOS é baseado no kernel Linux.

Seria 2019, finalmente, o “ano do Linux no Desktop”?

Eu não certeza das implicações disso.

Eu sei que o que você esperava era a popularização do Gnome. Ou do KDE, ou XFCE, ou Enlightenment, ou Mate… Tanto faz, certo? Não importa qual interface gráfica, se o coração for Linux.

Então, será que faz diferença se a interface é Windows ou ChromeOS? O resultado final é que você vai poder escrever aplicações baseadas no Linux para rodar em todo lugar.

E, sinceramente, a web já tinha tornado essa discussão meio irrelevante.

Exceto para nós, programadores, que vamos poder desenvolver usando qualquer sistema operacional. Para o resto do mundo, a maior parte do tempo, o sistema operacional é o navegador.

Hacker instalou um Backdoor secreto em servidores do Facebook para capturar senhas

Você viu essa notícia?

Hacker Installed a Secret Backdoor On Facebook Server to Steal Passwords

Resumindo, um hacker descobriu um servidor do Facebook (files.fb.com) rodando uma versão desatualizada de um software de compartilhamento de arquivos e conseguiu, através disso, fazer upload de um PHP Web Shell. Ou seja, acesso shell ao servidor.

No post original do cara que descobriu a falha você pode achar uma porção de detalhes técnicos muito interessantes.

O que é esse backdoor secreto?

Backdoor (“porta dos fundos” em inglês) é um software oculto que permite a quem o instalou acesso ao servidor. Um webshell é um backdoor que pode ser acessado em uma interface web. Existem webshells em PHP, ASP, Python, Ruby, C#, Perl e é muito fácil construir um em sua linguagem predileta.

Veja um exemplo de tela de um web shell em PHP:

Webshell em PHP
Webshell em PHP (clique para ampliar)

E seu site, é seguro?

Lição importante que você tirar desse episódio: uma corrente é tão forte quanto seu elo mais fraco. Seu servidor de controle de versão, seu software de gestão de projetos, seu webmail, todas as aplicações web acessórias ao seu site, todos os seus servidores e os computadores da sua equipe precisam estar seguros.

Por exemplo: se seu servidor git tiver o Open SSH desatualizado, se um dos programadores que desenvolve seu site instalar um software malicioso por engano ou se a sua senha do registro de domínios não é forte o suficiente, seu site estará vulnerável, não importa quão bom seja seu código.

Tudo tem que funcionar no celular

Mandei esse e-mail para o pessoal da Visie:

Pessoal,

Quando foi a última vez que você fez um site na Visie que não tinha versão mobile?

Então. Tudo tem que funcionar no celular. É praxe. O que não for responsivo é a exceção.

Então, ao receber um wireframe, layout ou especificação do projeto, não precisa perguntar: vai ser responsivo? Pode perguntar direto: onde está o layout mobile?

Ao estimar, planejar, projetar ou implementar qualquer coisa web na Visie, ter isso em mente vai evitar confusão. Lembre-se sempre: é sim responsivo, a não ser que alguém explicitamente diga o contrário.

Um [ ]!

Elcio

É, eu sei, não tem nada genial aí. Nem é “vanguarda”, todo mundo já trabalha assim há um tempão (ou não?) Mas para quem viveu o tempo dos layouts com tabelas para IE3 e Netscape 4, o simples fato de estar escrevendo essas palavras significa muito.

Valeu internet!

Microsoft quer ressuscitar o Flash

winphone8-title-cardDepois de uma tentativa frustrada de parceira com a Nokia, a Microsoft encontra uma nova parceira para sua batalha contra a Apple: a Adobe. A parceria parece ser boa para ambos os lados: ao mesmo tempo em que a Microsoft luta para manter sua posição no mercado de PCs contra o avanço dos Macs, a Adobe teve um de seus principais produtos, Flash, morto pela Apple.

A parceira envolve lançar uma nova versão do Adobe Flash, que deixará de ser produzido para Macs e a partir de agora funcionará apenas no sistema operacional Windows. Essa nova versão estará integrada ao Visual Studio, ao .Net Framework e ao Microsoft Sharepoint. O objetivo é tornar o Flash um novo padrão para a construção de sites, portais e aplicações web. Além disso, o ponto forte da estratégia é fazer do Flash a ferramenta oficial para a construção de aplicativos para as plataformas Windows 8 e Windows Phone.

Segundo Emmett Brown, vice presidente de estratégias globais para o futuro da Microsoft, plataformas abertas como o HTML5 são prejudiciais à livre concorrência e à inovação no mercado de desenvolvimento web e, ao trazer o Flash de volta, a Microsoft pretende inaugurar uma nova era no mundo dos aplicativos móveis.

Para mais detalhes sobre a parceria, leia o anúncio na íntegra no site oficial.

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('https://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.

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!

Aprenda SVG!

SVG é suportado em tudo quanto é navegador hoje, incluindo o Internet Explorer 9. Isso significa que, num futuro próximo, você vai poder usar SVG sem medo. Enquanto isso, para boa parte das necessidades, você pode usar SVG com uma biblioteca de compatibilidade com IEs antigos, como a Raphaël e a svgweb.

Dá uma olhada nesse exemplo. Exibe o código fonte e você vai ver que isso aí foi feito com umas 300 linhas de javascript.

Qual o segredo?

SVG é um formato de XML para a descrição de gráficos vetoriais. O que significa que, diferente do que acontece com canvas, com SVG os objetos que você exibe na tela são de fato objetos, nós do DOM, na árvore do seu documento. Então dá uma olhada nesse outro exemplo. A animação do logo em cima e o gráfico interativo em baixo, tudo isso tem umas 35 linhas de Javascript apenas.

Então fica a dica: estude SVG. Tenho certeza que vai ser útil.

 

Escolha com cuidado suas regras

É impressionante a facilidade com que certas discussões técnicas ficam parecendo discussões sobre moral, ética ou futebol. Parece que é difícil entender o fato de que fazer uma escolha técnica diferente da sua não vai condenar ninguém ao inferno.

Veja, por exemplo, a questão da validação do W3C. Algumas páginas do site da Visie não passam na validação do W3C. E a gente não está nem aí para isso. Entenda bem, nós acreditamos na importância dos padrões web. A empresa se chama “Visie Padrões Web”. Mas acreditamos que padrões web são importantes porque tornam seu site acessível, compatível, rápido e indexável. Também são importantes porque formam um excelente conjunto de tecnologias para o desenvolvimento. Desenvolver direito com padrões web é a melhor relação custo X benefício.

Nada disso tem a ver com estar “certo”, politicamente correto, ou com conseguir ganhar um selinho. Tem a ver apenas com encontrar a melhor maneira de deixar meus usuários satisfeitos. Ponto.

O validador é uma ferramenta e tanto. Principalmente para quem está aprendendo HTML ou precisa corrigir um problema misterioso num site. Eu uso muito o validador em treinamentos. Mas ele não é um juiz, um crivo obrigatório sem o qual seu site não deveria nem ser publicado.

Javascript

Javascript é uma linguagem muito flexível, que permite muitas escolhas diferentes de modelagem, de técnica de codificação e até de estilo do código. E isso é um terreno muito fértil para os inventores de regras. Existem mil maneiras de preparar Neston. Nenhuma é mais “certa” do que a outra, o que define o que é certo são seus objetivos.

Não, não estou falando sobre a polêmica dos ponto-e-vírgula no código. Embora esse seja um assunto interessante, não é tão importante. Estou falando de algo mais.

Leia, por exemplo, o excelente artigo do Willian Bruno sobre orientação a objetos. Antes de criticá-lo, preciso dizer que o Willian usou uma abordagem muito didática, e escreveu código impecável. Vale a pena a leitura. A única coisa que eu recomendo ao leitor é que entenda que a abordagem usada não é a única correta.

Começando com o estilo de código para orientação a objetos. Tem gente que escreve construtores de objetos literais, como o Willian fez. Tem gente que escreve funções construtoras, para ser chamadas com new, e atribuem propriedades e valores dentro do construtor. Tem gente que escreve funções construtoras e atribui propriedades e métodos ao seu prototype. Há grandes diferenças de sintaxe e ligeiras diferenças nos resultados obtidos ao usar cada técnica. O ponto é: não escolha as regras de alguém como as suas sem entender primeiro os porquês.

Outro ponto tem mais a ver com a modelagem do que com estilo de código. O Willian usa um pattern bastante popular hoje em Javascript, o Module. E faz com ele controle de visibilidade, fazendo com que apenas um método seja visível fora do módulo. Esse estilo de modelagem, embora bastante popular, está longe de ser o único correto. Embora programadores Java e C sejam incentivados a se preocupar muito com isso, a maioria dos programadores Ruby usa com muita parcimônia o controle de visibilidade e a comunidade Python tem vivido muito bem sem esse recurso. Você pode escrever módulos com excelente nível de encapsulamento sem controle de visibilidade.

A mesma coisa se aplica a quase qualquer escolha em tecnologia. NoSQL não é a bala de prata que vai salvar a próxima geração de ERPs, mas vale a pena conhecer. Os novos recursos do HTML5 não vão tornar a jQuery desnecessária, mas você precisa conhecê-los. O Sublime Text não me fez largar o Vim, mas valeu muito a pena gastar um tempinho para ter uma segunda opção.

Moderação. Não é futebol. Não é religião. É só técnica.

 

API gratuita de consulta de CEP

Nosso presente de natal para os desenvolvedores do Brasil: API gratuita de consulta de CEP.

A Visie é parceira de tecnologia da Aviso Brasil. Nós fornecemos tecnologia para o Correio Control, e como parte do negócio, precisamos ter a base de endereços sempre atualizada e sincronizada com o Diretório Nacional de Endereços.

Vimos que muita gente oferece aquele cômodo recurso de auto completar o endereço pelo CEP, mas usando bases de dados desatualizadas. Existem até uns serviços pagos que oferecem esses dados.

Por isso, decidimos oferecer um serviço gratuito de consulta de endereços pelo CEP, para que você possa usar em sua aplicação. Os resultados podem ser retornados usando o modelo JSONp, de modo que o próprio navegador do usuário requisite diretamente o endereço de nossos servidores.

Aproveite!

Em tempo: se você faz software que de alguma maneira envia e controla encomendas, você precisa conhecer o Correio Control. É um software de baixo custo para usuários corporativos dos Correios que oferece o controle de faixas de registro, geração de etiquetas e AR, monitoramento e rastreamento estendido, solicitação automatizada de pedidos de informação e indenização, relatórios de status e muito mais.

 

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.

Site recomendado: Marco Gomes

Além de escalar paredes, construir sites em uma madrugada e ser o Eike Batista da internet, Marco Gomes também escreve em seu blog. E escreve bem. Conteúdo inteligente e interessante para quem gosta de internet.

Além disso, deve ter o dedo dele no blog da boo-box, um excelente exemplo de como um blog de uma empresa pode ser interessante e relevante.

Não, este post não é patrocinado 😉

Por que sua estratégia de mobile começa com iOS?

Saiu a notícia hoje: Android ultrapassará Windows e será sistema mais usado do mundo, diz IDC.

Agora veja o gráfico:

Sistemas operacionais mobile navegando na web no Brasil de Fev/2011 a Fev/2012

Apesar disso, continuo recebendo das agências sites para construir que não tem versão mobile ou, quando tem, foi desenhada e deve ser construída para iPhone e iPad.

Cena comum numa reunião entre cliente e agência: todo mundo, de ambos os lados, coloca seu celular sobre a mesa. São todos iPhone. Logo, acho que até inconscientemente, eles deduzem que iPhone é o que importa. Alô pessoal! Vocês estão falando com 8,7% do público! Com um investimento semelhante, mas um pouquinho mais de planejamento, poderiam falar com praticamente todo mundo que está navegando no celular.

HTML5 é mais que canvas

Acesse o HTML5 Please. Clique em use e dê uma olhada na lista. Agora clique em use with caution e confira a lista. Viu quanta coisa?

Por que a maioria dos exemplos de site em HTML5 brasileiros, dois anos depois de começarmos a usar esse treco, ainda são um mark-up levemente vitaminado e canvas?

Onde estão nossas aplicações offline? Web sockets? Drag-and-drop? Geolocation? Micro-data? Device orientation? Novos campos de formulário? SVG? History API?

Mas não tem demanda…

Você pode se desculpar por estar usando os mesmos velhos recursos de sempre, dizendo que os clientes da agência ou produtora onde você trabalha não querem os recursos novos, que seu chefe não quer saber dessas coisas, que tem trabalho pra caramba pra simplesmente recortar os layouts que recebe e não quer arrumar sarna pra se coçar…

Você vai mesmo querer passar o resto da vida recortando layouts? O mundo vai mudar, e você vai ser extinto, dinossauro. Se não tem demanda, crie a demanda. Comece a desenvolver projetos pessoais com o que você acha que seus clientes deveriam estar usando. Em seguida, mostre para todo mundo. Você vai ver se a demanda não aparece.

Todo mundo tem celular conectado. Todos os navegadores (até o IE) estão se esforçando para funcionar direito. É um momento mágico. É uma oportunidade que você não quer deixar passar. Um pouquinho de esforço aí, galera.