As pequenas agências procuram um samurai, o que eu faço?

Hoje falo sobre um assunto bastante comum, principalmente para os pequenos garotos(as) que estão na disputa por um lugar no mercado de trabalho.

Neste post eu vou tentar convencer essas pessoas de que o cenário samurai, não é tão ruim quanto pensam.

Procura-se Web Designer

Procuramos Web Designer’s com no minimo “3 anos” de experiência que saibam: Photoshop, Corel e Flash.

Conhecimentos desejáveis: PHP, .Net, Ruby, MySQL, SQL Server.

Existem muitas vagas deste gênero em sites de empregos, e muitos já encaram estas vagas como algo “maligno”. Sim, para os profissionais que já possuem o seu espaço no mercado, é obvio que é, certamente, uma vaga com este perfil, é andar muitos passos para traz.

Estes dias estava conversando com o pessoal da Visie e a esposa do nosso amigo David (programador), estava tendo muitas propostas de emprego com este perfil e pelo fato dela estar começando e estar insegura, isso acabava gerando muitas dúvidas sobre como agir e que decisão tomar. Ela reclamava muito a respeito da descrição da vaga pois a vaga descrevia uma pessoa que necessitava de muitas habilidades que não tem muito a ver com a área da outra.

Pensamento Positivo!

Todo mundo começa de baixo, seja você um Ninja do Photoshop ou um Ninja programador. As empresas desconfiam de profissionais sem experiência, as grandes empresas querem profissionais qualificados e com experiência, já as pequenas empresas procuram os “meio termos” pois elas sabem que não podem pagar, nem manter, um profissional de qualificação superior dentro da empresa.

Desafie você mesmo!

Se você esta começando, encare estas vagas como um desafio, o lado bom de trabalhar em uma agência que procuram estes profissionais é que você aprende muito em um curto intervalo de tempo. O fato de você estar começando e a vaga exigir muitas habilidades como, design, programação, animação, arquitetura da informação, usabilidade e etc. Isso vai exigir muita pesquisa e muito esforço do profissional que esta neste time, é uma exploração? talvez… mas encare isso por este lado.

Quando estamos sendo engajados no mercado de trabalho, o objetivo é aprender, ganhar experiência, encare esta vaga como algo que vai exigir muito de você.

Mesmo que você não esteja confiante para exercer todas estas funcionalidades, encare esta vaga mesmo assim, é uma grande chance de você aprender.

Dê prioridade primeiro ao seu aprendizado, depois dê prioridade para as condições de trabalho, embiênte, salário, equipe etc.

Quando eu comecei a trabalhar com Internet, eu já tinha alguns anos de experiência, quando resolvi procurar emprego, as empresas tinham o pé atrás de me contratar, pelo fato de eu não ter experiência comprovada, ou seja, eu também comecei em agências que procuram samurais, todos começamos, encare esta oportunidade como uma grande chance de aprender. Certamente esta vaga vai te preparar para uma outra melhor.

Conhecimento nunca é demais!

Você pode ficar pulando de agência em agência, pode não dar certo em muitas delas, mas pode ter certeza que por cada lugar que você passar, você vai aprender algo novo. Pense por este lado! conhecimento nunca é demais e ninguém tira ele de você!

[]’s
Igor Escobar.

As microempresas e a pseudo-vontade de aderir os padrões.

Acredito que a grande maioria de vocês, senão todos vocês, começaram de baixo, em uma empresa pequena, com poucos funcionários porém lutadora.

De todas as pequenas que trabalhei, lembro-me que a Web 2.0 era (e ainda é) utilizada como uma forma de atrair e conseguir clientes, era Web 2.0 aqui, Web 2.0 lá, os donos das empresas utilizavam o termo, mais nem sabiam ao certo, que ele queria dizer, eles só sabiam que isso estava atraindo a curiosidade dos clientes e eles depositavam as suas esperanças nessa tal de Web 2.0 (na época) a Web 2.0 já estava sendo muito bem falada, estruturada e aplicada por algumas grandes empresas que possuíam uma boa organização e principalmente maturidade.

Era mais ou menos igual aquela propaganda da escova de dentes com o limpador de línguas: – Quando crescer, vou querer ser como você.

Tudo bem, admirar não faz mal a ninguém, mas a maioria das empresas acabavam dando um passo maior que as pernas para poder logo sair contando para os clientes que podem desenvolver sistemas utilizando os conceitos que a Web 2.0 trazia.

A Mudança

Toda empresa esta familiarizada principalmente os lideres a desenvolver sites da forma tradicional, abrir um editor WYSIWYG (Ex: Dreamweaver) e sair criando tabelas, inserindo as imagens do layout, os textos etc, sem nem olhar o que esta sendo criado por trás. Este era o cenário a anos atrás.

São poucas as microempresas que possuem maturidade o suficiente para entender o passo que é começar a desenvolver utilizando conceitos da Web 2.0.

O cronograma aumenta, mais processos no ciclo de vida do projeto são acrescentados, pessoas precisam ser contratadas (dependendo do caso), documentação aumenta, o paradigma do desenvolvimento fica mais complexo e detalhado…tudo aumenta.

Toda essa adição de pessoas, processos e complexibilidade é consecutivamente convertida em mais despesas e mais tempo aplicado a um único projeto. As micros querem isso? na visão deles é Web 2.0 pra todos os lados na cabeça do cliente, e o melhor, sem adição no custo, e no prazo.

Quem apanha no final?

O coitado do programador que tem que fazer milagres em um curto intervalo de tempo, o coitado do cliente, que só queria o site dele prontinho em Web 2.0.
Mas quem toma o maior prejuízo no final, é a própria empresa que acaba tendo que gastar muito mais do que o vendido para o cliente, principalmente para correção de bugs e melhorias de processos que não ficou como o cliente esperava ou de acordo com a realidade da empresa.
Resultado: O Cliente fica insatisfeito, desiludido com essa tal de Web 2.0, nunca mais volta a ser cliente da empresa, fala mal de você para toda a direção da empresa e dependendo do desgaste até para a família.

A Web 2.0 trás conceitos inovadores que podem tornar uma pequena empresa, em uma grande empresa criadora de soluções e ideias. Mas toda essa força e os seus “benefícios” pode se virar contra a própria empresa e contra o seu próprio usuário, se a empresa não possui um processo sólido, com foco principalmente, no ciclo de vida de um projeto.

Para quem já trabalhou em uma pequena empresa, na época do boom empresarial em prol da Web 2.0, sabe o que eu estou falando.

Claro, que este cenário hoje já esta mudando muito, mas o velho ditado diz: Antes de melhorar, vai piorar…muito!

Tem empresas que aprendem na prática, outras aprendem na teoria para apanhar menos na prática ou caem naquilo que eu falei anteriormente, contratar mais pessoas!
Aplicar os conceitos da Web 2.0 nos seus projetos é uma questão de puro planejamento e estratégia se você entrar nessa só por entrar e ficar com um pé na web 2.0 e outro na 1.0 isso só vai fazer a sua empresa afundar e se comprometer cada dia mais com seus clientes.

Esta é uma visão minha, baseando-se em todas as pequenas empresas que eu trabalhei, se alguém possui um ponto de vista diferente e queira compartilhar, por favor, os comentários são abertos e muito bem aceitos.

Espero ter contribuído!
[]’s

Coding Standards

Todos nós sabemos que programar  é um arte, certo? Errado! :D Resolver problemas e criar soluções, é sim, uma arte. Com o amadurecimento do desenvolvimento e a iteração de equipes cada vez maiores, esta “arte” passou a virar ciência.

Não existe mais este lance de cada um tem seu jeito de programar, cada um tem seu jeito de escrever etc., cada programador tem o seu jeito de pensar, mas não seu jeito de escrever seu código.

O Coding Standards foi uma dessas demandas surgidas com o crescimento e o amadurecimento do ambiente corporativo. Visando mais produtividade e padronização do ambiente de trabalho, caras como Walker de Alencar, Todd Hoff’s, e Fredrik Kristiansen (e mais uns por aí) trabalharam desenvolvendo um manual, um guia, de como o seu código deve ser escrito para que todos em uma equipe e/ou empresa desenvolva de forma padrão: dar nomes de funções classes, tabulação, espaçamento, tudo, absolutamente, tudo de forma padrão e sugestiva.

Adotar o Coding Standards pode ajudar você a não ter que abrir aquele arquivo de funções enorme para lembrar como você escreveu a função que verifica o cadastro dos clientes.

Verifica_Cadastro() ?
VerificaCadstro()?
verificaCadastro()?
CheckCadastros()?
verificacadastro()?
...

Pode ser que, para algumas pessoas que nunca tenham visto isso, o coding standards pode ser uma lavagem cerebral, algo que vá mudar totalmente a forma como alguns programam, mas é extremamente necessário.

Qualquer programador que leve a sério o seu trabalho, e que tem o mínimo de respeito pelos seus colegas de trabalho, vão desejar programar de forma padronizada.

Manuais sobre Coding Standards

PHP Coding Standards (Walker de Alencar)
C++ Coding Standards (Todd Hoff’s)
Code Conventions for Java
[UPDATE]
Code Conventions for Python (Guido van Rossum)
Code Conventions for C#
Code Conventions for .NET
[/UPDATE]

[]’s
Igor.

Expressões Regulares: Use!

Hoje vou falar sobre um assunto que é de suma importância para qualquer programador , expressões regulares. O poder e a facilidade que é proporcionada aos programadores adeptos deste conceito são realmente enormes.

Para quem ainda não faz idéia do que eu estou falando vou mostrar um exemplo para vocês:
[php]
if(! ereg(”^([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*[@]([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*[.]([a-zA-Z]){2,3}([0-9a-zA-Z])?$”, $input_email ) ) {
echo "Caracteres Inválidos no campo de e-mail!!!";
}
[/php]

Estão vendo este grupo de caracteres aparamente mente misturados e sem lógica alguma, certo?

Errado! claro que tem lógica! ;)

A história das expressões regulares começou no ano de 1943 e só foi apresentada ao computador 25 anos depois em 1968 em um algoritmo de busca integrado no editor de textos, na época chamado “qed”.

Os pais das expressões regulares foram dois neurologistas que na época publicaram um estudo que teorizava o funcionamento dos nossos neurônios. Alguns anos depois um matemático (não me pergunte quem) descreveu algebricamente os modelos deste estudo usando símbolos que por sua vez foram chamados de grupos-regulares (regular sets) e baseado nestas notações simbólicas foi que deu origem as expressões regulares.

Como puderam notar, as expressões regulares são muito antigas e vem sendo muito utilizado para criar implementações “farejadoras”, o uso das expressões regulares nada mais é do que implementar regras de coletação e verificação de sintaxe de textos.

O exemplo que eu dei para verificação do e-mail de um visitante é bem claro em relação a isso, ele verifica se o e-mail digitado pelo visitante possui uma sintaxe válida.

Para o seu estudo e compreendimento existe um e-book publicado pelo Aurélio Marinho Jargas na internet que foi aonde eu aprendi tudo que sei no que se trata de expressões regulares.

Facilitando o Estudo

Na internet existe várias ferramentas que te ajudam na fixação e treinamento dos conceitos aprendidos neste livro, uma destas, é o Regex Tester online, você escreve um texto simples, escreve a regra e o editor vai colorindo as áreas afetadas por sua expressão regular no seu texto.

Guia de Links Uteis

Expressões Regulares – Aplicando

Nos links acima você encontra informações suficientes para em pouco tempo sair criando suas próprias expressões.

Concluindo

Insisto para que se você ainda não sabe criar suas expressões regulares, por favor, leia o e-book que apresentei a vocês, vocês não fazem idéia do quanto as expressões regulares podem facilitar a vida de um programador. Recentemente na empresa na qual trabalho um programador criou uma rotina que tinha aproximadamente 15 linhas de código, vários parsers, loops e funções desnecessárias somente para verificar se o campo foi preenchido com 12 números 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. ou seja, ele criou uma rotina que varria o campo cpf e verificava se os 12 números digitados eram repetidos por ex: 111111111111, 222222222222 … 999999999999.

De 12-15 linhas implementadas em JavaScript a solução Regex foi:
[javascript]
var Expressao = /([0]{12}|[1]{12}|[2]{12}|[3]{12}|[4]{12}|[5]{12}|[6]{12}|[7]{12}|[8]{12}|[9]{12}|)/
if(campoCpf.test(Expressao)) return false;
[/javascript]
Viu? Poupa tempo e neurônios. Uma implementação de 12-15 linhas virar apenas duas.

Objetivo deste post não é ensina-los Expressões regulares e sim tentar mostrar para vocês a importância da aprendizagem do mesmo para tornar você um desenvolvedor muito mais produtivo.

Espero ter contribuído!
[]’s

Trabalhando com Mascaras em Java Script

Recentemente, tive problemas com algumas funções já disponíveis na internet para poder facilitar a aplicação de mascaras em campos do tipo string.

Por exemplo: o cliente precisava que no momento que eu fosse digitando a data no formato (00/00/000) o sistema automaticamente, iria colocando as barras “/” para facilitar o preenchimento do campo.

Baseando-se neste ,desenvolvi uma função em JavaScript para aplicar qualquer tipo de mascara que você precisar basta informar o template da mesma:
[javascript]
/**
* Formata o Campo de acordo com a mascara informada.
* Ex de uso: onkeyup="AplicaMascara(’00:00:00′, this);".
* @author Igor Escobar (blog@igorescobar.com)
* @param Mascara String que possui a mascara de formatação do campo.
* @param elemento Campo que será formatado de acordo com a mascara, voce pode informar o id direto ou o próprio elemento usando o this.
* @returns {void}
*/
function AplicaMascara(Mascara, elemento){

// Seta o elemento
var elemento = (elemento) ? elemento : document.getElementById(elemento);
if(!elemento) return false;

// Método que busca um determinado caractere ou string dentro de uma Array
function in_array( oque, onde ){
for(var i = 0 ; i < onde.length; i++){
if(oque == onde[i]){
return true;
}
}
return false;
}
// Informa o array com todos os caracteres que podem ser considerados caracteres de mascara
var SpecialChars = [‘:’, ‘-‘, ‘.’, ‘(‘,’)’, ‘/’, ‘,’, ‘_’];
var oValue = elemento.value;
var novo_valor = ”;
for( i = 0 ; i < oValue.length; i++){
//Recebe o caractere de mascara atual
var nowMask = Mascara.charAt(i);
//Recebe o caractere do campo atual
var nowLetter = oValue.charAt(i);
//Aplica a masca
if(in_array(nowMask, SpecialChars) == true && nowLetter != nowMask){
novo_valor += nowMask + ” + nowLetter;
} else {
novo_valor += nowLetter;
}
// Remove regras duplicadas
var DuplicatedMasks = nowMask+”+nowMask;
while (novo_valor.indexOf(DuplicatedMasks) >= 0) {
novo_valor = novo_valor.replace(DuplicatedMasks, nowMask);
}
}
// Retorna o valor do elemento com seu novo valor
elemento.value = novo_valor;

}
[/javascript]

Metodos de uso

Mascara para campos do tipo Data:
[html]<input name="data" maxlength="10" onkeyup="AplicaMascara(‘XX/XX/XXXX’, this);" type="text" />[html]

<strong> Mascara para campos do tipo Hora:</strong>
[html]<input name="hora" maxlength="8" onkeyup="AplicaMascara(‘XX:XX:XX’, this);" type="text" /> [/html]

Mascara para campos do tipo CEP:
[html]<input name="cep" onkeyup="AplicaMascara(‘XXXX-XXX’, this);" type="text" /> [/html]

Mascara para campos do tipo TELEFONE:
[html]<input name="tel" onkeyup="AplicaMascara(‘(XX)XXXX-XXXX’, this);" type="text" /> [/html]

Mascara para campos do tipo CPF:
[html]<input name="cpf" onkeyup="AplicaMascara(‘XXX.XXX.XXX-XX’, this);" type="text" /> [/html]

E por ai vai, basta seguir os exemplos e ser feliz ;) Espero ter contribuído!
[]’s

Iniciando com o JSON

Alguns dias atrás, recebi um e-mail de um leitor que acabou de iniciar em um novo emprego e seus supervisores lançaram a seguinte necessidade:

Na nossa empresa temos uma base de dados que ao fazer a consulta X, irá vai te retornar um JSON, ou seja, um valor que por sua notação é denominada JSON.

JSON quer dizer JavaScript Objection Notation, nada mais é do que um conjunto de chaves e valores, que podem ser interpretadas por qualquer linguagem. Toda essa estrutura, foi criada apartir do padrão ECMA-262 que por sua vez possui convenções muito semelhante às linguagens como C, C#, C++, Java, JavaScript, Perl, Python e várias outras. Com estas características o JSON se torna o formato ideal para troca de informações independente da linguagem.

Um estrutura JSON pode ser identificada por duas estruturas de dados:

Uma coleção de pares nome/valor. Em várias linguagens, isto é caracterizado como um object, record, struct, dicionário, hash table, keyed list, ou arrays associativas.

json-object

Ex:
[javascript]
var MeuBlog = {
nome:"Igor Escobar // blog",
ano:2008,
assunto:"Tecnologia",
getTitle:function(){
return (‘TituloBlog:’ + nome);
}
}
[/javascript]

Uma lista ordenada de valores. Na maioria das linguagens, isto é caracterizado como uma array, vetor, lista ou sequência.
json-array

Ex:
[javascript]
["Igor Escobar // Blog", 2008, 0]
[/javascript]

Viu só? é super simples se trabalhar com o JSON. Não se preocupe ao aplicar estas regras na prática, a teoria é valida para você entender como o JSON gera estes dados, no seu caso (e de muitos), você precisa decodificar um Array ou um Objecto JSON para a sua linguagem nativa.

Vou utilizar a linguagem PHP, como exemplo, para você entender como funciona e aonde entra o JSON nesta história toda.

json-na-pratica

  • Primeiro o PHP recebe os dados e envia estes dados para o JSON seja ele um Array ou um Objeto.
  • Depois o JSON codifica os dados e retorna este valor (uma inofenciva string) para uma variavel PHP que por sua vez é responsável por enviar esta váriavel para o banco com os dados codificados.

JSON na Prática

Estou disponibilizando aqui o JSON em:

Mais caso você precise da implementação JSON em outras linguagens basta ir até o site do projeto.
Na prática você só vai utilizar duas funções do JSON:

[javascript]
$JSON = new JSON();
// JSON – Encode
$dbValue = $JSON->;encode($objetoPHP); // Codifica um objeto PHP -> JSON
// JSON – Decode
$dbValue = $JSON->decode($dbObject->campoComJson); // Decodifica um objeto JSON -> PHP Object
[/javascript]

E é exatamente isso que no caso do nosso “amigo do e-mail” precisa fazer. Você precisa receber este valor na estrutura de dados JSON e decodifica-lo para que sua linguagem nativa o entenda e interprete.

Possível problema

Se você estiver utilizando JSON -> JavaScript e este array/objeto JSON retornar uma estring é possivel que você tenha problemas com caracteres especiais e na hora de exibir apareça uns caracteres como (+%…etc).

Para corrigir este problema eu implemento em minhas funções javascript a seguinte solução:

[javascript]
function urlencode(str) {
str = escape(str);
str = str.replace(‘+’, ‘%2B’);
str = str.replace(‘%20’, ‘+’);
str = str.replace(‘*’, ‘%2A’);
str = str.replace(‘/’, ‘%2F’);
str = str.replace(‘@’, ‘%40’);
return str;
}

function urldecode(str) {
str = str.replace(/\+/g, ‘ ‘);
str = unescape(str);
return str;
}
[/javascript]

E é isso caro “amigo do e-mail”, conte-nos depois como foi a sua experiência iniciando com o uso do JSON e espero que este ajude todas as outras pessoas que forem iniciar com o mesmo.

Vale lembrar, eu só escrevi este texto por que o nosso amigo aparentemente precisava MUITO, pela iniciação no novo trabalho e claro o seu problema com certeza bate com o de muitas outras pessoas, principalmente, com o objetivo deste blog que é em primeiro lugar, reunir soluções de desenvolvimento em um único lugar.

Nota: Apartir do PHP 5.2 o JSON já se encontra nativo na linguagem através dos métodos json_encode(); e json_decode();

Espero ter contribuído!
[]’s

Afinal de contas, quanto devo cobrar?

Essa é a dúvida que martela a cabeça de muitos freelancers, micro-empresários e principalmente profissionais que pouco se interessaram por esse lado da profissão e sempre ficam no back stage, fazendo o que lhes são de competência.

Se você espera que ao final deste artigo tenha um uma tabela feita em excel com todos os produtos e custos, desista. Se você não quer levar a sua empresa para o ralo, os preços entre uma agência e outra pode variar e muito isso é fato, mas não vem ao caso deste artigo ensinar como escolher a melhor empresa.

Na hora de dar o preço, tudo é uma questão de tecnologias envolvidas, pessoas, gastos mensais da empresa (água, luz, licenças, impostos ou qualquer outra coisa que gere gastos mensalmente para você).

Muita gente por aí acha melhor utilizar o feeling para dar os custos. Isso pode dar certo como pode também não dar, geralmente o profissional cobra muito caro, ou muito barato ou meio termo, acontece que as grandes contas ou as empresas do ramo de TI que mais têm portas abertas são as pessoas e/ou agências que cobram “certo”.

Na hora de dar o preço é muito importante ter em mente que dificilmente o seu cliente bate na porta de uma única agência, fecha o negócio e vai embora sorridente, as empresas fazem os orçamento em mais de uma empresa, isso é praticamente garantido, você nunca está sozinho.

Ter esse pensamento é muito importante, dependendo da conta e do cliente o feeling nestes casos conta muito, é totalmente válido para um empresa as vezes cobrar um valor abaixo do que está acostumado para cativar o cliente e conseguir o case, afinal todos sabemos que quando se consegue um projeto e o mesmo é concluído com sucesso as chances de você receber outras propostas e o cliente bater na sua porta novamente são grandes, há quem diga que o primeiro job é o mais importante de todos pois o cliente dificilmente arrisca milhões de reais (exemplo) em um case de uma empresa que ele nunca trabalhou ou nunca teve contato antes.

Há uma diferença em orçar preços de jobs de clientes que já passaram pela galeria de cases da agência e orçar preços para clientes que nunca conheceram a metodologia da agência, etc.

É muito importante passar pela primeira barreira com o cliente (case) o preço tende a ser menor no primeiro, mais se o cliente ficar satisfeito, com certeza ele não irá se preocupar de pagar um preço um pouco maior no segundo case já que agora não há motivos para se preocupar, principalmente sabendo que ele vai poder dormir tranquilamente (claro que ele não precisa ficar sabendo disso).

Para você não se preocupar em quanto deve cobrar, apenas cobre certo e não terá dores de cabeça. O grande problema de você cobrar sempre utilizando o feeling é que vai chegar um dia que com certeza irá faltar dinheiro no seu bolso, excesso de despesas, gastos com os filhos … estas coisas acontecem, porém, podemos nos prevenir.

A empresa que cobra corretamente ele tem em mente a quantidade de projetos que geralmente ela fecha por mês, tendo isso em vista, podemos dividir os gastos da empresa balanceando os mesmos em projetos diferentes.

Por exemplo, A empresa TI Exemple gasta 30 mil reais por mês somente com encargos empresariais (luz, água, profissionais, internet, impostos, etc) para manter a minha agência funcionando, preciso ter uma margem de lucro de 20% em cima de cada projeto, se a minha agência consegue manter a média de 10 projetos por mês vamos fazer o seguinte:

Os gastos mensais para manter a minha empresa funcionando é de 30 mil reais, vamos balancear isso nos 10 projetos e dividirmos isso pelo número médio de projetos criados por mês, neste caso, teríamos 3 mil reais fixos para incluir no orçamento de cada cliente. Agora vamos incluir a margem de lucro do projeto de 20% em cada projeto:

(3.000 / 100) * 20 temos 600 reais, mais os 3 mil fixos de encargos, fechamos o job por 3.600 reais.

Ah! Então quer dizer que se um cliente vem até a mim e pede para eu editar uma imagem eu vou cobrar 3.600 reais?
Claro que não, com certeza se você é uma empresa que pega jobs deste gênero o número de jobs executados por mês são maiores e o custo com estrutura e profissionais são bem menores também, tudo é uma questão de estratégia.

Esta aí a diferença entre a empresa que cobra certo e o cara que cobra seguindo o seu feeling. Ele vai pensar: – Eu não posso cobrar 3.600 reais para editar/criar uma campanha visual para o cliente, vou cobrar apenas 600 reais, pronto o cliente abre um sorriso, sai cantarolando pela rua e aguarda o resultado, já você no final do mês terá que correr em busca do prejuízo.

Claro que este é um exemplo extremamente simples e objetivo, ilustrando como devemos (por cima) fazer para cobrar por um projeto e não ficar de mãos abanando no final do mês e só acumular dívidas.

Temos que levar em conta que quanto maior o número de funcionários mais jobs poderemos desenvolver simultaneamente.

Cada profissional tem um custo diferente para empresa e consequentemente as horas de trabalho de cada profissional pode variar.

Temos que ter também um certo nível de maturidade, para saber quantas horas iremos gastar no total em cada projeto, para depois então alocar os profissionais competentes, para executá-los, dentro do prazo combinado com o cliente.

A diferença de cobrar usando o feeling e cobrar certo é que um dia você pode perder seu case ou sua agência para uma outra agência que ao invés de usar o feeling cobrou certo.

Espero ter contribuído.
[]’s.
Webtutoriais:52F051F1

Problemas com UTF-8 with BOM?

Olá pessoal!
Como um dos objetivos deste blog é apresentar soluções para problemas cotidianos, hoje eu vou falar sobre um problema que enfrentei utilizando a codificação UTF-8 BOM em minhas páginas e sinceramente, até a pouco eu não sabia a diferença entre o UTF-8 sem o BOM e o UTF-8 com o BOM.

O Problema

Quando usamos paginas codificadas em UTF-8, em alguns user agents eu recebo algumas linhas extras ou caracteres não esperados no TOPO do documento ou no TOPO de arquivos incluídos… como eu removo estes caracteres?

Resposta

Se você trabalha com um arquivo codificado em UTF-8, provavelmente, seus problemas estão sendo causados pela presença da assinatura (BOM) do seu documento que o user agent não reconheçe.

A assintua (BOM) dos documentos UTF-8 estão sempre no topo do documento e normalmente você espera vêlos, mas não perca seu tempo. A única maneira (works for me) que fez com que pudesse ver a assinatura foi trocando a codificação do documento de UTF-8 BOM para um ISO, caso contrário, a única coisa que você verá, será uma linha em branco no começo do seu documento (e em alguns casos, como o meu, nem isso você vê).

A confusão

O grande problema causado pela assinatura dos documentos UTF-8 é que pêla experiência que cada programador possuí é de instinto o programador já sair à procura de linhas extras nos arquivos incluídos.
É neste pronto onde se é gasto um grande tempo… Depois de perter todo o seu tempo, então, você começa a ficar frustrado por não encontrar a linhas extras nos arquivos e começa a acreditar que tudo isso não passa de uma conspiração do dêmonio com a sua pessoa.

O que é a assinatura (BOM) dos documentos UTF-8?

Algumas aplicações inserem uma combinação particular de bytes no começo dos arquivos e isso é usado para indicar que o conteúdo a seguir, possuí caracteres Unicode. Essa combinação de caracteres é conhecida como assinatura ou Byte Order Mark. Alguns editores mostram a assinatura como uma linha extra outras aplicações como o Zend Studio mostram a assinatura como ( ).

A assinatura (BOM) do documento é importante?

No caso dos arquivos codificados em UTF-8 não, você pode retirar esta assinatura sem causar problemas de interpretação, a assinatura (BOM) do documento só é importante para documentos UTF-16 e UTF-32 ela é usada para informar como o user agent deve interpretar os caracteres.

Como detectar a presença da assinatura de arquivos UTF-8?

Primeiro, nós precisamos detectar se esta linha extra no começo do arquivo é realmente a assinatura BOM.
Você pode tentar procurar no olhometro, mas se o seu editor interpreta corretamente a assinatura do arquivo, lamento, mas você não verá. Se o seu editor não interpretar ou não reconhecer esta assinatura ele vai apresentar caracteres como  no início do seu documento. Se você utilizar um editor binário, capaz de mostrar valores em hexadecimal, a assinatura poderá ser indentificada pelo conjunto de bytes EF BB BF.

Alternativamente, se você possuir em mãos um bom editor, ele vai te dizer a codificação do documento na barra inferior do editor ou em algum menu que apresente o encoding do seu documento.

Se em nenhum destes casos você obter sucesso, existem algumas aplicações web que são capazes de detectar a assinatura (BOM) de documentos UTF-8.

Removendo a assinatura (BOM)

Se você possuí algum editor capaz de exibir esta assinatura, você pode remover na mão, apenas seleciona-la e apaga-la.

Alguns editores como o Notepad++ (Windows, free) e Komodo (Linux, Free) permitem que você especifique se você quer ou não a assinatura no ato em que você salva o arquivo, dê uma olhada no menu “Format”.

Outra opção, é você utilizar algum tipo de script que automatize a remoção da assinatura rápidamente e recursivamente em todos os seus arquivos. Existe um script feito em Perl, desenvolvido por Martin Dürst que faz isso para você:

[perl]
# program to remove a leading UTF-8 BOM from a file
# works both STDIN -> STDOUT and on the spot (with filename as argument)

if ($#ARGV > 0) {
print STDERR "Too many arguments!\n";
exit;
}

my @file; # file content
my $lineno = 0;

my $filename = @ARGV[0];
if ($filename) {
open( BOMFILE, $filename ) || die "Could not open source file for reading.";
while (<BOMFILE>) {
if ($lineno++ == 0) {
if ( index( $_, ‘’ ) == 0 ) {
s/^\xEF\xBB\xBF//;
print "BOM found and removed.\n";
}
else { print "No BOM found.\n"; }
}
push @file, $_ ;
}
close (BOMFILE) || die "Can’t close source file after reading.";

open (NOBOMFILE, ">$filename") || die "Could not open source file for writing.";
foreach $line (@file) {
print NOBOMFILE $line;
}
close (NOBOMFILE) || die "Can’t close source file after writing.";
}
else { # STDIN -> STDOUT
while (<>) {
if (!$lineno++) {
s/^\xEF\xBB\xBF//;
}
push @file, $_ ;
}

foreach $line (@file) {
print $line;
}
}
[/perl]

Cuidado com o BOM

Em alguns editores como o Widows Notepad, se você escolhe salvar o arquivo como UTF-8 ele automaticamente coloca a assinatura (BOM).

A assinatura (BOM) em arquivos CSS pode causar a falha de de interpretação de algumas regras em alguns user agents, por isso, deve ser removida.

Em alguns navegadores, a presença da assinatura pode fazer com que TODOS os caracteres da sua pagina sejam interpretados como se fossem UTF-8 independente de qualquer declaração contrária.

E é isso pessoal, espero que seja útil para vocês, espero que você não perca horas do seu dia tentando resolver este problema como eu e algumas pessoas da comunidade PHP passaram.

Em arquivos PHP, se você trabalhar como funções como header(); a assinatura causará aquele problema comum quando você enviar qualquer caracter para o browser antes dos header();

[]’s
Igor

MooTools 1.2 Image Protector: dwProtector

Hoje venho apresentar para vocês uma biblioteca que achei bastante interessante, escrita para o Framework javascript MooTools, chamada Image Protector, é uma grande novidade e talvez um grande marco para os designers que se descabelam para poder proteger suas imagens.

Esta biblioteca foi criada justamente para os designers ou artistas, que odeiam ver seus trabalhos copiados e ripados em segundos após dias, semanas, anos de trabalho dedicado, e o pior, as vezes até roubo de autoria.

O MooTools 1.2 Image Protector previne:

  • right-click “Save Image As”.
  • Arrastar qualquer imagem para o desktop.
  • right-click “Save Background As”.
  • right-click “View Background Image”

Segue abaixo tudo o que você precisa:

MooTools 1.2 Image Protector JavaScript Class

[javascript]
//protector class
var dwProtector = new Class({

//implements
Implements: [Options],

//options
options: {
image: ‘blank.gif’,
elements: $$(‘img’),
zIndex: 10
},

//initialization
initialize: function(options) {
//set options
this.setOptions(options);

//make it happen
this.protect();
},

//a method that does whatever you want
protect: function() {
//for each image that needs be protected…
this.options.elements.each(function(el) {
//get the element’s position, width, and height
var size = el.getCoordinates();
//create the protector
var p = new Element(‘img’, {
src: this.options.image,
width: size.width,
height: size.height,
styles: {
‘z-index’: this.options.zIndex,
‘left’: size.left + ‘px’,
‘top’: size.top + ‘px’,
‘position’: ‘absolute’
}
}).inject($(document.body),’top’);
},this);

}
});
[/javascript]

Exemplo de uso

[javascript]
window.addEvent(‘domready’, function() {
var protector = new dwProtector({
image: ‘/blank.gif’,
elements: $$(‘.protect’)
});
});
[/javascript]

Caso você queira testar o MooTools 1.2 Image Protector, basta acessar.

[]’s
Igor.

12 dicas para otimizar seus códigos PHP

É sempre útil ler algumas dicas rápidas para melhorar a sua codificação, geralmente temos vícios que adquirimos no dia-a-dia que sem sabermos tornam o nosso código mais lento.

Segue abaixo 12 dicas para melhorar o processamento dos seus códigos PHP.

1. Se um método pode ser static, declare-o como static! O desempenho aumenta 4 vezes

2. Evite utilizar metódos mágicos como __get, __set e __autoload, se possível

3. require_once() é dispensável e demanda bastante memória

4. Use caminhos completos (full path) nos includes e requires, pois é gasto menos tempo resolvendo os caminhos do sistema operacional

5. Se você quer descobrir o tempo em que o script começou a ser executado, é preferível utilizar $_SERVER[‘REQUEST_TIME’] do que time()

6. Veja se pode utilizar strncasecmp, strpbrk e stripos ao invés de regex

7. str_replace é mais rápido que preg_replace, mas strtr é 4 vezes mais rápido que str_replace

8. Se uma função, como de substituição de strings, aceitar tanto arrays como caracteres simples como argumentos, e se a sua lista de argumentos não é muito longa, considere fazer algumas declarações redundantes de substituição, passando um caractere por vez, ao invés de uma linha de código que aceita arrays como argumentos de busca e substituição

9. Supressão de erro com @ é muito lento

10. $row[‘id’] é 7 vezes mais rápido que $row[id]

11. Mensagens de erro demandam mais processamento

12. Não utilize funções dentro de loops, como por exemplo: for ($x=0; $x < count($array); $x). A função count() é chamada todas as vezes que o loop é executado.

Fonte: http://www.moskalyuk.com/blog/php-optimization-tips/1272