Willian Fernandes

E os Padrões Web?

Comente »

Atualmente estou alocado em um cliente, desenvolvendo um projeto de grande porte. Esse cliente reformulou todo o seu site e estão tendo alguns problemas com as mudanças.

Ontem ouvi uma conversa vindo de uma mesa próxima a minha. Aquela conversa me deixou indignado a ponto de colocar o fone de ouvido, procurar algumas músicas do System of a Down e aumentar o volume do som. Veja um trecho da conversa:

Fulano 1: Cara, você conhece o navegador Safari?
Fulano 2: Sim, é um navegador da Apple.
Fulano 1: Você tem ele instalado aí?
Fulano 2: Aqui não, tenho somente em casa. Por quê?
Fulano 1: Você já acessou o novo site da Nossa Empresa no Safari? Tem alguns clientes ligando aqui dizendo que o site fica todo desformatado no Safari.
Fulano 2: Não, ainda não abri. Mas abri no no Firefox e vi que nele também fica desformatado. O menu vai parar no canto da tela…
Fulano 1: Assim não dá! Não posso fazer uma programação diferente para cada tipo de navegador! O usuário que se vire para acessar o site. Ele que utilize o Internet Explorer para navegar em nosso site. No IE funciona perfeitamente.
Fulano 2: Acho que você terá que fazer um “scriptizinho” para identificar o navegador do usuário e utilizar um JavaScript para cada navegador.

E depois disso a conversa foi piorando cada vez mais… Fazia tempo que eu não ouvia alguém falando um absurdo desses e achava que não ouviria mais.

Para que servem os Padrões Web? E a programação de JavaScript Cross-browser?

Muitas pessoas, assim como eu, ouviram esse diálogo e, na hora do almoço, foi o comentário da mesa…rs Daí comecei a chegar em uma conclusão:
A maioria das pessoas que estavam na mesa tinham aproximadamente 25 anos de idade. Os dois aí da conversa devem ter ultrapassado os 30. Será que isso é problema de pessoa mais velha?
Será que só porque a pessoa é mais velha ela tem o direito de não acompanhar a evolução da Web?

Não é possível. Conheço pessoas com mais de 30 anos que sabem, e sabem muito, os Padrões Web, JavaScript Cross-browser, Acessibilidade, e o quanto é importante tudo isso.

Não sei no que deu o final da história. O fone de ouvido e as pesadas músicas do System of a Down me salvaram de ouvir o resto. Mas acredito que gambiarras virão para que o site funcione pelo menos no Firefox.

Ajude a divulgar a lista brasileira de equipamentos e serviços compatíveis com Linux

Comente »

…e concorra a MP4 e MP3 players, mochilas Targus, períodos de VoIP grátis e até a ventiladores USB – além de contribuir automaticamente para doações para a Wikipedia e o WordPress! O BR-Linux coletou mais de 12.000 registros de compatibilidade de equipamentos e serviços (webcams, scanners, notebooks, …) na sua Pesquisa Nacional de Compatibilidade 2007, e agora convida a comunidade a ajudar a divulgar o resultado. Veja as regras da promoção no BR-Linux e ajude a divulgar – quanto mais divulgação, maior será a doação do BR-Linux à Wikipedia e ao WordPress.

Eu não tenho medo de JavaScript

Comente »

Muitos desenvolvedores possuem medo (ou será preconceito?) quando alguém lhe diz que precisarão desenvolver algo em Client-Side.

Recentemente, o Elcio e eu participamos de um projeto que não tinha nenhuma linha de código Server-Side (PHP, Python, Ruby, etc), era puro JavaScript.

Sim, sabemos que não podemos prender o usuário ao JavaScript. Sabemos que devemos permitir que o usuário navegue pelo site mesmo se ele não estiver com o JavaScript habilitado no navegador dele. Mas não podemos ser radicais. Existem alguns casos que permitem o desenvolvedor não se preocupar com questões de Acessibilidade e JavaScript Não-Obstrutivo, esse era o nosso caso.

Com a combinação de AJAX, DOM e JSON podemos fazer coisas incríveis sem precisar, na maioria das vezes, de uma linguagem Server-Side. Veja como exemplo o Wallpapr, uma aplicação desenvolvida pelo Marco Gomes utilizando o framework jQuery e sem nenhuma linguagem Server-Side.

Assim que comecei a ouvir falar do framework jQuery comecei a estudá-lo e estou ficando cada vez mais curioso em aprendê-lo, mas até agora não consegui fazer testes reais. Por isso irei escrever uma série de posts falando sobre a utilização do jQuery, desenvolvimento de JavaScript Orientado à Objetos e JSON, muito JSON.

Até o próximo post!

Copiaram o layout da Visie.com.br e os códigos JS

Comente »

Pois é, como o Diego publicou, copiaram o layout da Visie.com.br.

Mas não foi somente o layout, copiaram também meus arquivo JavaScript:

Como o Diego disse:
Parabéns pela falta de criatividade deste pessoal. Parabéns BR e-commerce.

Que tal medir a velocidade do seu site?

Comente »

WebWait é um serviço interessante que acabei de conhecer.

O serviço é bem simples, você coloca uma URL e ele mede o tempo em segundos que o site demorou para carregar por completo.

Veja alguns resultados:

O Fantástico Mundo do Python – Parte 1

Comente »

Gosto muito de programar, principalmente para Web. Sempre gostei muito de PHP e outras linguagens/tecnlogias do mundo Open Source, apesar de também ter trabalhado bastante com ASP/ASP.NET (C#) meu principal foco foi o mundo Open Source.

Há um pouco menos de um ano comecei a estudar Python e cada dia que passa meu interesse por essa linguagem aumenta mais e mais.

Assim que lancei o blog recebi alguns comentários e e-mails de pessoas pedindo conteúdo de Python, pois sempre ouvem falar desta linguagem e gostariam de saber como ela é. Por isso resolvi listar algumas diferenças entre Python e PHP (umas das linguagens mais usadas no Brasil).

Abaixo segue uma lista com algumas diferenças entre a sintaxe e a estrutura de dados do PHP e do Python:

1. Criando listas (arrays)

PHP

$numeros = array(1,2,3,4,5);
echo "O número " . $numeros[1] . " é segundo número da lista";

Python

numeros = [1,2,3,4,5]
print "O número %i é segundo número da lista" % numeros[1]

2. Criando dicionários (arrays associativos)

PHP

$numeros = array(
    "um" => 1,
    "dois" => 2,
    "tres" => 3,
    "quatro" => 4,
    "cinco" => 5
);
echo "O número " . $numeros["dois"] . " é segundo número da lista";

Python

numeros = {
    "um":1,
    "dois":2,
    "tres":3,
    "quatro":4,
    "cinco":5
}
print "O número %i é segundo número da lista" % numeros["dois"]

3. Percorrendo a lista (array)

PHP

$numeros = array(1,2,3,4,5);
for ($i = 0; $i < count($numeros); $i++) {
    echo $numeros[$i];
}

Python

numeros = [1,2,3,4,5]
for i in numeros:
    print i

4. Verificando se uma chave existe em um dicionário (array associativo)

PHP

$numeros = array(
    "um" => 1,
    "dois" => 2,
    "tres" => 3,
    "quatro" => 4,
    "cinco" => 5
);
if (array_key_exists("um", $numeros)) {
    echo "A chave existe";
}

Python

numeros = {
    "um":1,
    "dois":2,
    "tres":3,
    "quatro":4,
    "cinco":5
}
if numeros.has_key("um"):
    print "A chave existe"

5. Replaces em String

PHP

$titulo = "{NOME} e o Pé de Feijão";
$titulo = str_replace("{NOME}", "João", $titulo);
//Ou, para simplicar em uma única linha
$titulo = str_replace("{NOME}", "João", "{NOME} e o Pé de Feijão");

Python

titulo = "{NOME} e o Pé de Feijão"
titulo = titulo.replace("{NOME}", "João")
#Ou, para simplicar em uma única linha
titulo = "{NOME} e o Pé de Feijão".replace("{NOME}", "João")

6. Escrevendo uma parte da String

PHP

$titulo = "João e o Pé de Feijão";
echo substr($titulo, 9, 2);

Python

titulo = "João e o Pé de Feijão"
print titulo[9:11]

7. Verificando tipo da variável

PHP

$var = "Teste";
if (is_array($var)) {
    echo "É array";
}
elseif (is_string($var)) {
    echo "É string";
}
elseif (is_integer($var)) {
    echo "É inteiro";
}

Python

var = "Teste"
if type(var) == list:
    print "É array"
elif type(var) == str:
    print "É string"
elif type(var) == int:
    print "É inteiro"

8. Estrutura de controle

PHP

$n = 4;
if ($n == 1) {
    echo "Um";
}
elseif ($n == 2) {
    echo "Dois";
}
else {
    echo "Maior que dois";
}

Python

n = 4
if n == 1:
    print "Um"
elif n == 2:
    print "Dois"
else:
    print "Maior que dois"

9. Definindo funções

PHP

function Teste() {
    echo "teste";
}
Teste();

Python

def Teste():
    print "teste"
Teste()

10. Definindo classes

PHP

class TestePai {
}
class Teste extends TestePai {
    public function __construct() {
        echo "Esta é a classe Teste que faz herança da classe TestePai.";
    }
}
$t = new Teste();

Python

class TestePai:
    pass
class Teste(TestePai):
    def __init__(self):
        print "Esta é a classe Teste que faz herança da classe TestePai.";
t = Teste()

Perceba que, em todos os casos, acabamos escrevendo menos código em Python do que em PHP. Isso por que em Python temos uma estrutura de dados mais simples e sua forma de trabalhar sempre com objetos facilita muito a vida do programador. Ao invés de ficarmos decorando milhares de funções em PHP, decoramos somente alguns métodos em Python.

Particularmente, acho mais fácil decorar métodos do que funções, isso porque os métodos se diferenciam entre os tipos de objetos disponíveis na linguagem. Além disso, se eu estiver com dúvida se algum método existe ou não em determinado objeto, basta utilizar a função dir:

>>> minha_lista = [1,2,3,4]
>>> dir(minha_lista)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', 
'__eq__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', 
'__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', 
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', 
'__setattr__', '__setitem__', '__setslice__', '__str__', 'append', 'count', 'extend', 'index', 
'insert', 'pop', 'remove', 'reverse', 'sort']
>>> lista.sort()

Ao digitar a função dir() passando como parâmetro o objeto minha_lista, podemos ver todos os método que um objeto do tipo list possui.

Em posts futuros colocarei exemplos mais complexos, e quem sabe envolvendo outras linguagens também…

Você pode sugerir um exemplo, basta escrever nos comentários…

Subversion: você só sente falta quando perde!

Comente »

Nós aqui da Visie estamos acostumados a criar um repositório no Subversion para cada novo projeto que iremos trabalhar.

É muito bom trabalhar com o Subversion, ainda mais quando podemos trabalhar longe do escritório. Acontece que, nos últimos três meses estou alocado em um cliente, desenvolvendo um gigantesco projeto em PHP.

Aqui (no cliente) não podemos utilizar nenhum controle de versão, muito menos Linux nas estações de trabalho. O servidor é um AS/400 e o banco de dados é DB2. Então, deu para imaginar como acessamos os arquivos do servidor?

Temos uma mapeamento no Windows para o diretório do projeto no servidor AS/400. Ou seja, todos os programadores acessam o mesmo arquivo, ao mesmo tempo, no mesmo lugar. Ah! Este servidor é o mesmo para Desenvolvimento, Testes (Homologação) e Produção.

Para evitar que alguém edite os arquivos de produção foi criada a seguinte estrutura de diretórios:

  • PROJETO_D
  • PROJETO_H
  • PROJETO_P

Assim ficou melhor, não é? Olha só que coisa mais inteligente e organizada:

  1. Depois que eu terminar de desenvolver basta copiar os arquivos do diretório PROJETO_D e colocar no diretório PROJETO_H;
  2. Se alguma coisa estiver errada é só copiar o(s) arquivo(s) que será(ão) corrigido(s) do PROJETO_H e colar no PROJETO_D;
  3. Assim que editar esses arquivos é só fazer o primeiro passo novamente;
  4. Se tudo for homologado é só copiar os arquivos do PROJETO_H para o PROJETO_P e pronto!

Acontece que, estava eu alterando um arquivo quando de repente aparece a seguinte mensagem:
Alguém fuçou no meu arquivo!

Pois é, isso acontece porque todas as pessoas envolvidas no projeto estão com o diretório mapeado em seus Windows e sempre que eu for alterar um arquivo tenho que verificar se alguém está alterando o mesmo arquivo para evitar esses tipos de conflitos.

Que falta eu sinto do Subversion! :(

PS.: O backup dos arquivo do sistema é feito em um diretório chamado backup que possui outros diretórios com os nomes mais ou menos assim: PROJETO_D_20070906. Esse “backup” está no mesmo HD que o sistema, ou seja, se o HD um dia “morrer” o sistema e o backup morrerão também.

Primeira turma de PHP

Comente »

Na segunda-feira passada (03/09/2007) foi iniciada a primeira turma do curso de PHP da Visie.

Para mim está sendo uma experiência incrível! Os alunos são bem legais e interessados em aprender. São meus cobaias…rs

A turma começou pequena, somente com três alunos, mas no segundo dia de curso entraram mais dois. Tem de tudo, desde pessoas que somente trabalhavam com design até programadores ASP (eca!).

Ontem começamos a trabalhar com conexão ao banco de dados MySQL e hoje avançaremos mais na utilização do MySQL junto com o PHP.

Quem tiver interesse em aprender PHP, desde o zero, entre em contato com a Paloma da Visie, ela ficará contente em receber sua ligação. ;)