tadarank afiliados

26 março, 2019

Indicadores de RH e Gestão de Pessoas - parte 1 - Funções de Gestão de Pessoas e Definição de indicadores

Em 2018, concluí minha pós-graduação em Controladoria e Finanças na Universo. Como trabalho de conclusão, sob orientação de do prof. André Costa, voltei-me a área controladoria, focando em indicadores de desempenho para RH (Recurso Humanos ou Gestão de Pessoas, não foquei na diferença dos termos), por estar envolvido na área.

Nesta série de postagens, condensarei de forma prática os pontos importantes do trabalho. O trabalho completo está no Google Drive: Indicadores de RH e Gestão de Pessoas


INDICADORES DE DESEMPENHO PARA A GESTÃO DE PESSOAS EM EMPRESAS DE MÉDIO E GRANDE PORTE - NAIRON 2017 - UNIP - PARTE 1

A Gestão de Pessoas possui papel crucial na busca pelos objetivos estratégicos das empresas. Um sistema de medição de desempenho baseado em indicadores numéricos estratégicos permite à Controladoria e à equipe de Gestão de Pessoas alinhar os objetivos departamentais da área de Gestão de Pessoas com o Planejamento Estratégico da empresa. No entanto, por tratar de temas aparentemente intangíveis, a Gestão de Pessoas pode encontrar dificuldades na definição de indicadores e metas. Através de pesquisa bibliográfica, este artigo apresenta um conjunto de indicadores para cada função da área de Recursos Humanos (RH) de forma a permitir que a Controladoria, Alta Direção e o próprio RH possam medir e alinhar suas ações ao Planejamento Estratégico.

Palavras-chave: indicadores, kpi, controladoria, recursos humanos, gestão de pessoas, planejamento estratégico.

[...]
Vai:

Com a finalidade de efetuar a medição dos resultados, visando a qualidade, é indispensável a utilização de indicadores de desempenho. Indicadores são formas mensuráveis de representação das características de processos e produtos (TAKASHINA & FLORES, 2005 apud NUINTIN & NAKAO, 2011).

Tendo em vista a definição acima, a área de Gestão de Pessoas encontra dificuldades na definição do que seria “o produto” a ser mensurado, devido aos diversos assuntos intangíveis que a permeiam. Questões como satisfação dos empregados, interesses dos empregadores, eficácia do processo principal e redução de passivos futuros são alguns destes aspectos de difícil mensuração. Igualmente, a área de Controladoria tem seu papel preventivo e controlador prejudicado por estas indefinições.

[...]

Este artigo tem o propósito de apresentar um conjunto de indicadores de desempenho voltado à gestão de pessoas, onde seja possível abordar variáveis tangíveis e intangíveis. Através destes indicadores, espera-se que os gestores da área de Recursos Humanos e Controladoria possam escolher melhor os indicadores que desejam trabalhar e alinhar o Planejamento Estratégico às funções de Gestão de Pessoas, mensurando resultados através de comparações históricas ou com outras empresas.

Este artigo não tem como propósito detalhar as teorias de Gestão de Pessoas nem as metodologias de elaboração do Planejamento Estratégico, mas sim realizar uma pesquisa bibliográfica sobre os principais indicadores de desempenho da área de Gestão de Pessoas, que possam ser escolhidos e utilizados pela área de Controladoria e Recursos Humanos de várias empresas. Também consideramos inviável definir metas para tais indicadores, tendo em vista que a definição das metas está intimamente ligada à estratégia única de cada empresa.

A principal questão que este trabalho buscará clarificar será qual a gama de indicadores as empresas podem utilizar para avaliar o desempenho da gestão de pessoas de forma a possibilitar melhor conexão com os objetivos estratégicos.

[...]

Conceituação de Indicadores de desempenho 

Os sistemas informatizados têm levado à possibilidade de extração de inúmeros dados das bases de recursos humanos: quantidade de empregados, custo total, custo por área, minutos de falta, absenteísmo por categoria, segmentação por idade, por sexo etc. Vivemos a era do Big Data. A criação de infinitos números não tem relação qualquer com o bom planejamento se não estiverem ligados a um objetivo estratégico.

Indicadores não são apenas números, dados, informações. Indicadores devem fazer o que o nome diz: indicar, indicar o caminho. Um número solto, sem ligação com um objetivo é apenas um número e não gera informação útil na tomada de decisão.

Como exemplo, tomemos as informações “Quantidade de empregados” ou “horas de treinamento”. Imagine qualquer empresa e qualquer número: doze, quinhentos, dois mil. Estes números não dizem nada se não estiverem ligados a um objetivo ou a uma comparação. 
Segundo Lima (2005) apud Navarro (2005), deve-se ter definido que “as medidas, isoladamente, não são geralmente capazes de fornecer informações suficientes para tomada de decisão”.

[...]

Na criação de um indicador, deve ser definido um bom nome (não complexo demais ou curto demais), a forma de cálculo, a periodicidade de atualização e o responsável pela atualização. Nem sempre o responsável pela atualização será o responsável pela melhoria ou atingimento da meta ligada ao indicador. Meta é o objetivo a se alcançar transformado em número ligado ao indicador.


Funções e objetivos comuns à área de Gestão de Pessoas 

Conforme explicado, para termos bons indicadores precisamos de tarefas e objetivos bem definidos. Tentaremos, neste tópico, chegar às funções e objetivos mais comuns à área de Gestão de Pessoas ou Recursos Humanos (RH) em empresas de médio e grande porte, independentemente do modelo de planejamento estratégico ou política de gestão de pessoas escolhida pelas empresas. 

[...]

(Após pesquisa bibliográfica disponível no trabalho completo:) Dessa forma, agruparemos os indicadores através das funções: (1) Planejamento de Recursos Humanos, (2) Recrutamento e Seleção, (3) Avaliação de Desempenho, (4) Administração de Cargos, Salários e Carreiras, (5) Treinamento e Desenvolvimento, (6) Saúde, Segurança e Qualidade de vida, (7) Função Legal e (8) Gestão do Clima Organizacional.

Finalmente: Indicadores à Gestão de Pessoas

Geralmente, um mesmo indicador será útil para várias funções de Gestão de Pessoas e não apenas uma função. Tentaremos organizar os indicadores nas funções onde consideramos que o mesmo é mais importante.
 
A periodicidade de apuração de cada indicador costuma variar de acordo com o fluxo de trabalho e acompanhamento de cada empresa, podendo ser mensal, anual ou por evento. Indicadores percentuais devem ser convertidos multiplicando-se o resultado por 100%.

3.3.1 Indicadores de Planejamento de RH 

a) Rotatividade (turnover)

O índice de rotatividade ou turnover diz respeito à quantidade relativa de colaboradores que deixaram a empresa dentro de determinado período. Este indicador é importante para o planejamento de RH pois possibilita, entre outras análises, a identificação da periodicidade ideal para novas contratações.

Método de apuração: Este é outro indicador com diversas formas de apuração. A que consideramos mais proveitosa por envolver também a mensuração de empregados admitidos é somar a quantidade de empregados demitidos com a quantidade de empregados admitidos, em seguida dividir pelo total de empregados ao final do período analisado.

Consideramos bastante útil que o indicador seja medido a nível de departamento, de forma a identificar as áreas com menor ou maior rotatividade (possível problema de clima) e também haja estratificação de demissões a pedido ou demissões por parte da empresa.

Ligado às funções: planejamento de RH (definição de periodicidade e
quantitativos para as novas contratações), recrutamento e seleção (alta rotatividade pode indicar seleção de candidatos errados), administração de cargos, salários e carreiras (pode indicar que a empresa não é atrativa para os talentos), qualidade de vida (pode indicar que a empresa ou determinados departamentos são estressantes) e gestão do clima organizacional.

b) Média de horas extras por empregado 

Horas extras são as horas trabalhadas além do regularmente contratado com os empregados, pelas quais os mesmos recebem remuneração maior que a habitual. São fortemente regulamentadas pela CLT (Decreto-Lei N.º 5.452/1943). Como a execução de horas extras é mais cara que a execução de horas normais, há que se planejar até que ponto elas são vantajosas.

A execução de horas extras constantes, concentradas em um departamento ou grupo de empregados, mesmo que em pouca quantidade, indica necessidade de pessoal ou falta de controle interno nos registros de ponto (entrada e saída do trabalho).

Método de apuração: Quantidade de horas extras dividido pela quantidade de empregados.

Ligado às funções: planejamento de RH, qualidade de vida (empregados
submetidos a várias horas de trabalho tendem a apresentar maior stress), função legal, Administração de Cargos Salários e Carreiras.

(continua amanhã) Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

20 dezembro, 2013

Aplicando efeito fade ciclicamente a um conjunto de imagens com jQuery

Senhores.

Precisei aplicar um efeito de fade para fazer transição entre várias imagens de uma galeria. Pra isso eu sempre usava o velho plugin jQuery cycle, mas dessa vez o bixo não ajudou.

Porém o jQuery Cycle dá uma modificada em propriedades como top e width das imagens que não estava me sendo útil. Além disso, ele aplica o efeito em imagens que ainda não estão carregadas, o que fica feio pra caramba.

Como eu precisava de algo simples e não de todas as funcionalidades do jQuery Cycle preferi programar rapidinho esta transição.

Meu código, atualmente é só pra fade, mas quem entende de jQuery sabe que é só mudar o nome do efeito que está lá na definição do fadeInterval.

Outro benefício do meu código é que ele não exibe imagens ainda não carregadas.

O código está abaixo:



Modo de uso:

Site onde apliquei: www.robsonlazzari.com.br

Dúvidas? É só comentar que eu respondo.

//Esse blogger tá uma bosta pra postar códigos. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

11 setembro, 2013

Solução: Sandbox do Paypal não funciona no código IPN Listener

Ae,

Coisa rápida que me ajudou e talvez ajude outros que estão na briga da integração com o sistema de pagamentos do Paypal.

Ao identificar um pagamento, o paypal chama o notify_url que você configurou em seu form.
Daí, neste notify_url você faz o código de tratamento e talz .

Porém, muitas vezes, este código de tratamento só funciona no paypal real e não funfa no sandbox do paypal (o local para testes).

O que fazer?

O código que a maioria tem (em php) para o IPN tem uma parte assim:

// post back to PayPal system to validate //
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";

//For the below line i have tried "www.sandbox.paypal" as well as "www.paypal"
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

A solução é adicionar um parâmetro HOST no header, ficando assim:

// post back to PayPal system to validate //
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

Claro que você fará as devidas adaptações...

Tal falha da documentação do paypal me fez perder 1 hora de sono na madrugada e metade da manhã.
Só achei a solução graças a este post no stackoverflow: http://stackoverflow.com/questions/17718722/paypal-ipn-sandbox-ipn-listener-no-verified-or-invalid/17721965#17721965

Quer trocar idéia sobre integração no paypal (não sou especialista, só um iniciante)? Comenta ae. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

12 agosto, 2013

Criando Calendários no MS Project

Senhores e senhoras, continuando a série de postagens sobre o MS Project 2010.

Para realizar o correto agendamento das tarefas e cálculo das datas, o MS Project deverá ser informado sobre as horas de trabalho e sobre os dias úteis e não úteis. Isto é feito através de “Calendários de Projeto”.

Para visualizar os calendários disponíveis acesse a Guia Projeto > Alterar Período Trabalho (6º botão).

No calendário “padrão” do Project, o turno de trabalho se inicia às 09:00, possui 01 hora para almoço, e se encerra às 18:00. Os dias não úteis são Domingo e Sábado.
Como se pode perceber, este calendário “padrão” raramente irá corresponder à realidade do trabalho a ser desenvolvido. Geralmente precisarmos definir feriados, outros horários de trabalho, outros dias úteis, outros dias não úteis, etc.

Para configurar um NOVO calendário, considerando outros turnos de trabalho e outros dias não úteis, devemos clicar no botão “Criar novo calendário” à direita (Não é recomendado alterar o calendário padrão do Project).
Na tela “Criar novo calendário base” entre com o nome do novo Calendário e escolha se quer criar seu novo calendário tendo outro como modelo (o que facilitará seu trabalho). Clique OK para confirmar.



Definindo horários de trabalho e dias úteis

Em seu novo calendário criado, primeiramente, veremos como configurar os horários de trabalho e os dias úteis. Para isto acesse a guia “Semanas de Trabalho” e clique no botão Detalhes.

Na tela “Detalhes de”, selecione, ao lado esquerdo, o(s) dia(s) da semana que deseja configurar. Para selecionar mais de um dia, clique e arraste ou segure a tecla SHIFT enquanto clica.

Ao lado direito, você tem 3 opções que definem que tratamento se deve dar aos dias da semana selecionados e, mais abaixo, os horários de trabalho para aquele dia selecionado.

Por exemplo, clique em “Segunda-feira” e arraste até “Sexta-feira”. Veja que o Project, por padrão, definiu que o horário de trabalho é das 09:00 às 18:00.

Para alterarmos isto, escolha a 3ª opção “Definir dia(s) para os períodos de trabalho específicos”. Neste momento, a opção para alterar as horas de trabalho ficou habilitada.

Veja que, cada dia da semana pode ter seu horário de trabalho específico. Dessa forma, por exemplo, você pode definir, se desejar, que Sábado haverá trabalho das 08:00 às 12:00.

Digite os novos horários de trabalho e clique OK para confirmar.

Definindo dias de exceções e feriados

Agora voltamos à tela “Alterar período útil” e veremos como configurar feriados. No menu superior, escolha novamente seu calendário e clique na guia Exceções.

Nesta guia, logo abaixo da coluna Nome, escreva o nome de seu feriado ou exceção, por exemplo, “Independência do Brasil”. Em seguida clique em Detalhes.

Agora você irá escolher se esta exceção é uma folga completa ou uma alteração no período de trabalho como, por exemplo, um dia que os funcionários devem trabalhar somente pela manhã.

Você poderá informar também o “Padrão de recorrência” da exceção (diário, semanal, mensal, anual) e indicar quando a exceção deve terminar em “Intervalo de recorrência”.

Veja que opção “Exceções” de seu calendário não se refere somente a feriados. Com ela você pode configurar diversas exceções ao horário de trabalho normal.

Agora que você já sabe criar seu(s) calendário(s) você pode retornar à tela “Informações do Projeto” e definir seu calendário como sendo o calendário padrão do seu projeto. Acesse a guia Projeto > Informações do Projeto (2º botão).

Ao definir o calendário padrão do projeto, além de mudar a forma de ver a duração do projeto, você também altera o cronograma de atividades com nenhum calendário (que não tiveram calendário definido).

Você pode criar quantos calendários considerar necessários ao seu projeto. Por exemplo, um calendário para “trabalho somente segunda a sexta” e outro para “dias corridos”. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

10 agosto, 2013

Cursos e Serviços Freelancer do Micox

Nobres senhores, a situação tá braba. Sendo assim, me mande um email se você precisa de:
  1. Serviços na área de Javascript, PHP, CSS ou Wordpress.
  2. Sistemas Web, conexão com banco de dados, inserção de dados, atualização, etc.
  3. Alguma planilha bruta ou mágica no Excel.
  4. Cursos de MS Project 2010 com foco em Gerenciamento de Projetos.
  5. Cursos de funcionamento da Web, Javascript, PHP, Banco de Dados, Wordpress.
  6. Curso de Excel Avançado.


Quem me conhece sabe que é com a melhor qualidade do mercado. Sou meio louco perfeccionista.

Alguns Sites desenvolvidos:

sorteiodejogos.com.br/ (para terceiros - apenas programação do CMS, o visual é do Fábio Lobo)
Tadarank.com (site próprio)
ResultadoConcursos.net (site próprio)
Mwords.valeus.net (site próprio)
Brasads.com.br (site próprio)
Elmicox.blogspot.com.br (site próprio)
Pctelonline.com.br (para terceiros)
Auvo.com.br (para terceiros)

Thanks.
Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

09 agosto, 2013

MS Project - Dicas para configuração e inserção de tarefas

Olá pessoal. Tô de volta.

Atualmente, estou há algum tempo (1 ano) trabalhando em um Escritório de Gerenciamento de Projetos e dando cursos de MS Project 2010 (se você se interessar, me manda um email hehe).

Resolvi deixar registrado aqui algumas dicas úteis. Compartilhe suas dicas nos comentários também.

Ressalto que estas dicas são, de certa forma, pessoais. Aprendidas com o calejar do dia a dia com o Project. Talvez outros autores (ou você) prefiram outras configurações.

Configurações básicas que uso para evitar problemas:


0) Crie um novo arquivo em branco do project, para fazer as configurações. Não coloque nenhuma tarefa nele. Você vai utilizá-lo, através do ctrl+C ctrl+V sempre que quiser criar novos projetos.
Seu Project-modelo.mpp deve se manter intacto.

1) Vá no menu Arquivo > Opções > Geral > Formato de data > 28/01/09
Muitas vezes, para resolver problemas, convém exibir o dia da semana e a hora também.
Segunda eu faço um post explicando como resolver problemas de dias quebrados em tarefas (4,5 dias por exemplo) que costumam fritar os neurônios.

2) Cronograma > Opções de calendário > Hora de início 08:00

3) Cronograma  > Mostrar unidades de atribuição como DECIMAL.
Em geral, na empresa que trabalho, define-se recursos como unidades (decimal) e não em porcentagem como é o padrão do project. Ou seja, é mais comum usarmos 2 engenheiros do que 200% engenheiros ou 50% do tempo do engenheiro.

4) Cronograma > Novas tarefas criadas > AGENDADA AUTOMATICAMENTE

5) Cronograma > Opções de agendamento > Mostrar avisos | Mostrar sugestões

6) Cronograma > Cálculo > Ativar.

7) Avançado > Opções de exibição > Mostrar tarefa de resumo do projeto

8) Avançado > Exibir > DESMARQUE "Adicionar automaticamente novos modos de exibição, tabelas, filtros ao grupo global".
Assim você não irá estragar/sobrescrever as tabelas e modos de exibição padrão do project.
Se quiser reutilizar, o melhor é compartilhar entre os 2 arquivos project que deseja apenas, e não alterar o organizador global.
Qualquer dia, faço um post sobre o "Organizador".



8) Crie seus calendários e não sobrescreva o calendário padrão do Project. Para criar seu calendário, vá em "Projeto" > Alterar período de trabalho.  ocê DEVE criar um calendário (ou vários) já que o calendário padrão do project não corresponde à realidade de sua empresa, muito provavelmente



9) Sugere-se deixar visível a coluna "Calendário da tarefa" ao lado da coluna duração devido à sua grande importância para o cronograma.
Evite ao máximo tarefas com calendário "Nenhum".

10) É imprescindível ir em Projeto > Informações do Projeto.

11) Ao preencher a duração, se usar a unidade "diasd" (dias decorridos) você terá problemas pois indica que os trabalhos ocorrerão 24 horas todos os dias e não 8 horas todos os dias.
Se quiser 8 horas todos os dias, ou outra quantidade de horas que não 24, o melhor é criar um calendário chamado dias corridos.

12) Evite usar unidades diferentes ao definir a duração. Use sempre "dias" para evitar confusão na sua cabeça. Lembre-se que você pode fazer picado: 0,25 dias, etc.

=======================

Observações ao inserir tarefas

1) Prefira nomes curtos porém descritivos para as tarefas. Detalhamentos podem ser colocados na coluna Anotações.

2) Nunca preencher as colunas de DATA DE INÍCIO ou DATA DE TÉRMINO durante o planejamento.
Se fizer isto, será criada erroneamente uma data de restrição.
O correto para chegar à uma data é alterar as predecessões e durações. O project calcula as datas por conta própria.
Para criar uma data de restrição da forma correta dê dois cliques na tarefa e vá em avançado. Assim você poderá escolher o tipo da restrição.
Não coloque datas de restrição sem motivo.
(um dia faço um post sobre isso também hahaha)

3) Ao definir o calendário de uma atividade NÃO resumo, você estará realmente alterando o cronograma de trabalho (e consequentemente as datas)
Ao definir o calendário de tarefas RESUMO, você está apenas mudando a forma de ver a data, mas não tem nenhum efeito no cronograma de trabalho.
Ao definir o calendário padrão do projeto, além de mudar a forma de ver a duração do projeto, você também altera o cronograma de atividades com nenhum calendário.
(um dia faço um post sobre isso também)

4) Se o foco não é custo e sim prazo, prefira agrupar as tarefas resumo de forma cronológica e não através do assunto. Assim seu Gantt fica mais fácil de ser entendido.

========================

Borós comuns (que eu lembro):

1) Tarefa não fica crítica mesmo sendo predecessora de uma crítica.
Geralmente isto ocorre devido a tarefa A do tipo dias corridos ser predecessora de uma tarefa B dias úteis e a tarefa A acabar em uma sexta. Assim, claramente ela tem a folga do fim de semana mesmo a tarefa B não tendo folga.

2) Esquecer de colocar predecessora em uma tarefa.
Do mesmo modo, esquecer de informar uma sucessora para a tarefa.
Em geral, TODAS as tarefas tem predecessora e sucessora, exceto a(s) tarefa(s) iniciais e finais do projeto.

3) Após congelar a linha de base, infelizmente o project não bloqueia as colunas da Linha de Base. Cuidado para não alterar sem querer.

Compartilhe suas dicas nos comentários abaixo. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

09 agosto, 2012

O Google não acessa seu site? Talvez haja bloqueio no Firewall (lista de IPs do google)

Ae pessoas,

Muitas vezes, ao olharmos o Google Webmasters Tools vemos o erro de que "o Googlebot não consegue acessar seu site"

Porém o site tá lá vivinho da silva e funcionando bem.

Das vezes que eu passei por este perrengue, a culpa foi do Firewall que bloqueava alguns IPs do Googlebot.

Como resolvi? Colocando os IPs do google na lista branca do firewall.

1) Acesse seu Gerenciador de Webhost (WHM) - www.seusite.com:2086

2) Vá em Em Plugins > ConfigServer Security & Firewall.

3) Acesse o csf – ConfigServer Firewall.

4) Procure a opção chamada FIREWALL ALLOW IPS

Agora é hora de colocar os IPs do google:

209.185.108
209.185.253
209.85.238
209.85.238.11
209.85.238.4
216.239.33.96
216.239.33.97
216.239.33.98
216.239.33.99
216.239.37.98
216.239.37.99
216.239.39.98
216.239.39.99
216.239.41.96
216.239.41.97
216.239.41.98
216.239.41.99
216.239.45.4
216.239.51.96
216.239.51.97
216.239.51.98
216.239.51.99
216.239.53.98
216.239.53.99
216.239.57.96
216.239.57.97
216.239.57.98
216.239.57.99
216.239.59.98
216.239.59.99
216.33.229.163
64.233.173.193
64.233.173.194
64.233.173.195
64.233.173.196
64.233.173.197
64.233.173.198
64.233.173.199
64.233.173.200
64.233.173.201
64.233.173.202
64.233.173.203
64.233.173.204
64.233.173.205
64.233.173.206
64.233.173.207
64.233.173.208
64.233.173.209
64.233.173.210
64.233.173.211
64.233.173.212
64.233.173.213
64.233.173.214
64.233.173.215
64.233.173.216
64.233.173.217
64.233.173.218
64.233.173.219
64.233.173.220
64.233.173.221
64.233.173.222
64.233.173.223
64.233.173.224
64.233.173.225
64.233.173.226
64.233.173.227
64.233.173.228
64.233.173.229
64.233.173.230
64.233.173.231
64.233.173.232
64.233.173.233
64.233.173.234
64.233.173.235
64.233.173.236
64.233.173.237
64.233.173.238
64.233.173.239
64.233.173.240
64.233.173.241
64.233.173.242
64.233.173.243
64.233.173.244
64.233.173.245
64.233.173.246
64.233.173.247
64.233.173.248
64.233.173.249
64.233.173.250
64.233.173.251
64.233.173.252
64.233.173.253
64.233.173.254
64.233.173.255
64.68.90.1
64.68.90.10
64.68.90.11
64.68.90.12
64.68.90.129
64.68.90.13
64.68.90.130
64.68.90.131
64.68.90.132
64.68.90.133
64.68.90.134
64.68.90.135
64.68.90.136
64.68.90.137
64.68.90.138
64.68.90.139
64.68.90.14
64.68.90.140
64.68.90.141
64.68.90.142
64.68.90.143
64.68.90.144
64.68.90.145
64.68.90.146
64.68.90.147
64.68.90.148
64.68.90.149
64.68.90.15
64.68.90.150
64.68.90.151
64.68.90.152
64.68.90.153
64.68.90.154
64.68.90.155
64.68.90.156
64.68.90.157
64.68.90.158
64.68.90.159
64.68.90.16
64.68.90.160
64.68.90.161
64.68.90.162
64.68.90.163
64.68.90.164
64.68.90.165
64.68.90.166
64.68.90.167
64.68.90.168
64.68.90.169
64.68.90.17
64.68.90.170
64.68.90.171
64.68.90.172
64.68.90.173
64.68.90.174
64.68.90.175
64.68.90.176
64.68.90.177
64.68.90.178
64.68.90.179
64.68.90.18
64.68.90.180
64.68.90.181
64.68.90.182
64.68.90.183
64.68.90.184
64.68.90.185
64.68.90.186
64.68.90.187
64.68.90.188
64.68.90.189
64.68.90.19
64.68.90.190
64.68.90.191
64.68.90.192
64.68.90.193
64.68.90.194
64.68.90.195
64.68.90.196
64.68.90.197
64.68.90.198
64.68.90.199
64.68.90.2
64.68.90.20
64.68.90.200
64.68.90.201
64.68.90.202
64.68.90.203
64.68.90.204
64.68.90.205
64.68.90.206
64.68.90.207
64.68.90.208
64.68.90.21
64.68.90.22
64.68.90.23
64.68.90.24
64.68.90.25
64.68.90.26
64.68.90.27
64.68.90.28
64.68.90.29
64.68.90.3
64.68.90.30
64.68.90.31
64.68.90.32
64.68.90.33
64.68.90.34
64.68.90.35
64.68.90.36
64.68.90.37
64.68.90.38
64.68.90.39
64.68.90.4
64.68.90.40
64.68.90.41
64.68.90.42
64.68.90.43
64.68.90.44
64.68.90.45
64.68.90.46
64.68.90.47
64.68.90.48
64.68.90.49
64.68.90.5
64.68.90.50
64.68.90.51
64.68.90.52
64.68.90.53
64.68.90.54
64.68.90.55
64.68.90.56
64.68.90.57
64.68.90.58
64.68.90.59
64.68.90.6
64.68.90.60
64.68.90.61
64.68.90.62
64.68.90.63
64.68.90.64
64.68.90.65
64.68.90.66
64.68.90.67
64.68.90.68
64.68.90.69
64.68.90.7
64.68.90.70
64.68.90.71
64.68.90.72
64.68.90.73
64.68.90.74
64.68.90.75
64.68.90.76
64.68.90.77
64.68.90.78
64.68.90.79
64.68.90.8
64.68.90.80
64.68.90.9

5) Depois dê uma limpeza na lista de bloqueios atuais do firewal procurando a opção "FLUSH ALL BLOCKS".

6) Pronto. Agora é hora de voltar no Google Webmaster tools e reenviar seu sitemap pra ver o que dá.

Essa técnica já funcionou pra mim e pro Philipe do MundoGump

Tem novas idéias e experiências? Escreva e comente ae.
Até mais.
Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

31 maio, 2012

Substituta para a Empty do PHP pra não dar erro tosco "can't use function return value in write context"

Cansado de erros "Can't use function return value in write context"  no PHP ?

Segundo uma pesquisa rápida e sem vergonha no Google a gente vê que este erro é porque alquém do PHP quis algumas coisas do PHP não são funções e sim construções da linguagem (O carlos me explicou nos comments que empty não é language construct). Daí que as malditas só aceitam variáveis como argumento e não aceitam funções. Uma dessas coisas é a Empty().

*Tem também outras coisas que geram este erro, mas tô com preguiça de sair procurando e listando tudo aqui.

Expicando com exemplos:

Não dá erro: empty($variavelTal)
Dá erro: empty(funcaoTal())

Uma frescagem né?

Daí fiz uma funçãozinha gambiarra rápida pra este problema com o empty e estou guardando aqui no meu blog para caso eu precise no futuro.


function empti($oque){
//tive que fazer esta porque a empty do php é muito fresca  
//e só aceita variáveis como parametro, daí não aceita 
//coisas como empty( funcaoX() ) ou empty ( ($variavel) )
//também coloquei um trim aqui dentro
$oque = trim($oque);
$oque = empty($oque);
return $oque;
}

Pronto. Agora aceita funções. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

22 março, 2012

A importância do suporte bom na hospedagem de sites

Capítulo 1 - A bênção

Bom dia Nobres senhores e senhoritas.

Provavelmente, você que lê o El Micox possui um site.
Provavelmente este site está em uma hospedagem paga.
Provavelmente você executa as mesmas tarefas periodicamente, buscando ser abençoado pelo Google:

Lá está você, colocando artigos todos os dias...
Lá está você, otimizando meta tags e titles todos os dias...
Lá está você divulgando em redes sociais...
Lá está você divulgando links pelo mundo...

Quando, de repente, acontece o que você pediu tanto para o pai Google: as visitas dobram, triplicam.

Se você usa Adsense - ou outro tipo de monetização - a grana começa a entrar.
Já vai dar pra pagar a parcela do Fusquinha. :)

Créditos: David do OndeTemFesta.com.br


Capítulo 2 - A maldição

Mas aí, devido à súbita explosão de acessos, seu site cai. Parabéns, você acabou de ser batizado!

Agora vai começar o trabalho chato: entrar em contato com o suporte da sua hospedagem para descobrir a origem do problema.
Este é o momento que separa os bons dos maus, os fortes dos fracos, os true dos poser (hahá).

Nobres colegas, não tem nada mais chato do que ficar abrindo tickets ou fazendo ligações pra suporte - e aguardando horas pra ser atendido, enquanto preciosos visitantes chegam a uma tela de erro.

Principalmente, principalmente - repito - principalmente, quando há uma corja de incompetentes do outro lado.

Nobres fidalgos, não tem nada pior do que você querer saber a origem do problema e os incompetentes ficarem apenas repetindo "seu site está com muitos acessos, tem que aumentar o plano".

Acho que os donos das hospedagens simplesmente contratam estagiários de "sei lá o quê" pra ficarem respondendo um FAQ padrão.

Como o pai Google não perdoa, sites fora do ar voltam a cair nos rankings.

Capítulo 3 - A solução

Nobres cavalheiros, o intuito deste texto não é ser publieditorial, propaganda, post patrocinado, essas nóia.
O intuito aqui é contar-lhes um boró que passei com meu site de concursos e como resolvi.

Não lembro a boa alma que me indicou a hospedagem do Jânio (sem links por enquanto pro pessoal não pensar que é só propaganda chata), só sei de uma parada: o cara é blogueiro.


O cara usa e entende de Wordpress, o cara entende de plugins bons e ruins, o cara entende de sistemas de cache, o cara entende de otimização de velocidade e otimização de recursos...

Enfim, quando vossa senhoria estiver passando por um boró temporário no seu site, o cara não vai simplesmente dizer "aumenta o plano".

O cara primeiro te ajuda a encontrar a fonte do problema (que pode ser um plugin pesado ou uma programação PHP mal feita ou um banco de dados mal planejado, etc), depois te ajuda a resolver, se não der certo, te dará alternativas (tipo cache, nginx, cloudflare, etc) e só depois disso, caso o problema seja realmente de poucos recursos no plano atual, ele irá te indicar um novo plano.

No meu caso mais recente, acreditem, ele me indicou um plano mais barato. [pausa para explicações] "Como um plano mais barato pode ser melhor?" É que, neste caso, este plano não tem frescuras de Cpanel (tem que pagar licença e consome recursos do servidor) além de ter um sistema de cache foda. [fim da pausa]

Nobres nobres, como dica final digo: Antes de contratar sua hospedagem, teste o sistema de suporte deles. Veja se você está falando com quem entende do assunto ou se está falando apenas com funcionários leigos ou pseudo-entendidos.

Aqui o link da PortoFácil, hospedagem do Jânio: http://portofacil.net/

Aqui um link de um parceiro do Jânio pra quem não precisa de hospedagem muito parruda: http://www.viahospedagem.net/

Aqui um artigo que explica um pouco a filosofia do Jânio: http://portaldohost.com.br/geral/como-enfrentar-os-concorrentes-gigantes

Nos comentários de vocês, gostaria também de ler experiências, dicas e indicações legítimas sobre hospedagens. Mas não venha com um simples jabá pois vai é sair queimado. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

16 fevereiro, 2012

Comentários do Facebook no Blogger - Sem duplicar e sem complicação

Bom dia nobres senhores que leem - reforma ortográfica moment: "As palavras paroxítonas terminadas em dois "-oo" e em "-eem" agora perdem o acento circunflexo" - este nobre blog.

Explico-vos agora como inserir aquela caixa de comentários do facebook no blogger, sem duplicar, sem complicar, na maior facilidade do universo conhecido pelo homem.

1) Modelo > Editar HTML > Prosseguir > Expandir modelos de Widget

2) Procura o </head> , abaixo dele vai tá abrindo o body

3) Cola logo abaixo do <body> antes das outras coisas:
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/pt_BR/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

4) Em qualquer lugar que quiser os comentários cola
<div class="fb-comments" data-href="data:post.url" data-num-posts="10" data-width="470"></div>
5) se desse jeito não deu certo, cola
<div class="fb-comments" expr:data-href="data:post.url" data-num-posts="10" data-width="470"></div>
6) Se ainda assim não deu certo, desiste porque essa porcaria não funciona não.


Me deparei com o problema ao ajudar o maluco do fantasymedieval.blogspot.com/ que é meu brodi de infância.

Ele me disse que rodou a web inteira, brasileira e gringa, e não achou como inserir a caixa de comentários no facebook no blogger corretamente. Quando ele conseguia, sempre duplicava os mesmos comentários em todas as páginas.

Dei uma navegada no google e vi que realmente todos os tutoriais que tinham por aí eram muito complexos.

Como eu já tinha inserido comentários do Facebook no WordPress na maior simplicidade do mundo, imaginei que no blogger não deveria ser tão complexo quanto os tutoriais estavam ensinando, daí mandei o código acima por email para o cara sem testar nem nada (preguiça) e incrivelmente funcionou.

Se deu certo pra você, ao contrário dos complicadíssimos tutoriais da net, comente abaixo e ajude a divulgar em redes sociais e talz.

Atualização: Pra quem quer monitorar os comentários, terá que criar um app pra caixa de comentários: http://www.dicasparablogs.com.br/2012/06/aplicativo-facebook-comentarios-blogger.html
. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

05 janeiro, 2012

Dica do Dia: CSS Gradient Generator

Bom dia nobres senhores e senhoras.

Hoje, venho ao presente blog, repassar um site muito interessante e prático que estava em meus Bookmarks e eu não lembrava até precisar.

Se bem que minha memória nunca lembra de nada mesmo. Aliás, meus recentes problemas de memória (não tão recentes) estavam me deixando preocupado. Eu já havia ido até em neurologista, o qual me pediu um exame de ressonância magnética, do qual eu pulei fora (espero que este meu português cheio de "o qual" e "do qual" esteja correto, afinal estudei orações subordinadas ontem haha).

(Voltando ao assunto secundário do post: ) Porém minhas preocupações passaram quando vi que todos meus amigos que "mexem" com computador o dia inteiro também estavam assim e também após ler uma reportagem na Revista Época dizendo que a internet está sacaneando nossos cérebros. Concordei e fiquei aliviado por, de certa forma, eu ainda ser "normal". Aliás, maldita Ed. Globo que fica renovando as assinaturas sem solicitação.

Qual era o assunto inicial do post mesmo? Ah, CSS Gradient Generator. Desculpem a divagação anterior mas pelo menos serviu pra deixar o post com mais de 1 parágrafo haha.

Agora, pra não tomar muito do seu tempo, serei rápido e deixarei que tire suas próprias conclusões: O Gradiente dos botões deste site foi feito em 30 segundos (e sem imagens de certa forma) graças a este site.

Pra você não precisar abrir link externo, deixo aqui o exemplo:


Sou uma div com
gradiente CSS


Pode me agradecer ou xingar nos comentários. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

28 dezembro, 2011

Selects Multiple NÃO! Checkboxes SIM! Uma campanha pela abolição de selects multiples

Sabe, eu nunca tinha parado pra pensar sobre isso.

Selects multiples são muito chatos.
Chatos pro visitante - que tem que usar o shift pra escolher mais de um (que visitante sabe fazer isso?)
Chatos pro desenvolvedor - na hora do html e na hora de tratar os dados no server-side (php, asp, etc).
Chatos pra estilizar o visual - Alterar visual CSS de selects é quase impossível.

Quantas vezes já vimos formulários assim:



O povão gosta de mouse. O povão não gosta de teclado. O povão lá sabe o que é shift ou control?

Se quer uma página acessível não é melhor fazer assim?

Escolha as cidades de destino:






É mais bonito ou não é? É mais fácil pro visitante ou não é?

Olha só como o código é simples:

<style>
/* coloque este estilo em seu arquivo css */
.check-select-multiple { display: inline-block; height: 60px; padding: 0 5px; overflow-y: scroll; width: 300px; border: 2px inset #DDD; background: white;}
.check-select-multiple label { display: inline-block; width: 95%;}</style>
<div class="check-select-multiple">
<label><input name="cidades" type="checkbox" value="1" />Goiânia</label>
<label><input name="cidades" type="checkbox" value="2" />Palmas</label>
<label><input name="cidades" type="checkbox" value="3" />Fortaleza</label>
<label><input name="cidades" type="checkbox" value="4" />São Paulo</label>
<label><input name="cidades" type="checkbox" value="5" />Salvador</label>
</div>

Veja que não precisamos fazer malabarismos com javascripts nem plugins pra Jquery. É só usar a simplicidade do belo HTML+CSS.

Além da facilidade pro visitante, ainda é infinitamente mais fácil estilizar uma DIV do que estilizar um Select (principalmente nos IEs da vida).

Se você gostou da minha explanação, abrace esta campanha também. Diga adeus ao select-multiple.
Faça um link para esta campanha, compartilhe no twitter, facebook, google-plus, faça bandeiras, passeatas, greve de fome...

Amém. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

21 dezembro, 2011

QuerySelector ou CSSQuery para IE 6 e 7 (e outros navegadores antigos)

Nobres colegas scripteiros, no maravilhoso mundo da programação, a cada dia a gente se surpreende.

Ontem, durante a programação do Mwords, eu procurava um script de CSSQuery para poder permitir que os usuários do Mwords, escolhessem o elemento alvo com base em seletores CSS. Exemplo: alvo = '#content .post p'.

Lindo né? Assim como no jQuery e outras libs por aí.

As versões que eu achei eram gigantescas (mais de 10k) e a mais recomendada era a do Dean Edwards.
Nunca que eu iria pesar o script do Mwords com 10k só pra ter uma funcionalidadezinha dessas a mais.

Além disso, a maioria dos navegadores modernos já suporta a document.querySelectorAll que permite fazer isso.
O único problemático (pra variar) é o IE (acho que do 8 pra baixo).

Não desisti da minha busca, e acabei encontrando esta pérola da gambiarra feita pelo pessoal do Ajaxian. Funciona maravilhosamente bem e é maravilhosamente pequeno. Um achado digno de glórias ao pessoal do Ajaxian.

Rapidamente adaptei na minha lib, pra usar isto, caso o navegador não suporte a document.querySelectorAll.

Vejam como ficou:

cssQuery = function(sel){ //document.querySelector. sel é o seletor CSS
  //by Micox - http://elmicox.blogspot.com
  var i, res, dqs, d=document;
  if (d.querySelectorAll){
    return d.querySelectorAll(sel);
  }else{ //o IE8 pra baixo e FF 3.5 pra baixo não tem querySelector
    //baseado no fudido script de querySelector do ajaxian http://ajaxian.com/archives/creating-a-queryselector-for-ie-that-runs-at-native-speed
    var head = d.documentElement.firstChild;
    var styleTag = d.createElement("STYLE");
    head.appendChild(styleTag);
    dqs = d.__qsResult = [];

    styleTag.styleSheet.cssText = sel + "{x:expression(document.__qsResult.push(this))}";
    window.scrollBy(0, 0);
    head.removeChild(styleTag);

    res = [];
    for (i in dqs){if (dqs.hasOwnProperty(i)) {
      res.push(dqs[i]);
    }}
    return res;
    }
}
//como usar
var todos_p_destaque_filhos_de_content = cssQuery('#content p.destaque');

Obs.1: Não quis mexer com o prototype do "document" porque uso isso dentro de uma lib minha e iria ficar melhor pra mim assim. Você pode adaptá-la e postar nos comentários se quiser.

Obs.2: Só irá funcionar com seletores NATIVOS do navegador em que estiver. Portanto se for usar um "div>p.classetal" no IE, provavelmente não irá funcionar.

Pequena explicação sobre o truque deste CSSQuery:

  1. Primeiro testo se o querySelectorAll existe no navegador atual (aquele primeiro if). Se existe, então uso ele.
  2. Se não existe, irei adicionar um "style" ao documento.
  3. O conteúdo deste style usa expressions - uma funcionalidade de CSS exclusiva do Internet Explorer que permite embutir scripts dentro das folhas de estilo. Você já deve conhecê-la caso já tenha usado meu velho Ultimate menu drop-down, onde uso expressions pra simular o :hover no IE.
  4. O que foi escrito dentro do style embutido (cssText) é a criação de uma regra onde o seletor é o parametro "sel" passado (o caminho do elemento). 
  5. Dentro da regra, eu pego o próprio elemento encontrato (this) e adiciono em uma variável __qsResult.
  6. Simples não? Genial.


(Pra quem quiser ver um exemplo do novo Mwords em funcionamento, olhem este site).

Até mais.

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

18 outubro, 2011

Alternativa melhor ao typeOf em Javascript

Opa,

Um textinho rápido que li neste link do Angus Croll e que merece ser replicado: Uma alternativa bem melhor ao velho typeOf em javascript.

O typeOf, é um método nativo de Javascript pra retornar o tipo da variável. Assim temos:


typeof "belladonna" //"string"

typeof (2) //"number"
typeof ("a", 3) //"number"
typeof (1 + 1) //"number"

var a;
typeof a; //"undefined"
typeof b; //"undefined"
alert(a); //undefined
alert(b); //ReferenceError

typeof NaN //"number"

typeof {a: 4}; //"object"
typeof [1, 2, 3]; //"object"
typeof null //"object"
typeof new ReferenceError; //"object"
typeof new Date; //"object"
typeof /a-z/; //"object"
typeof Math; //"object"
typeof JSON; //"object"
typeof new Number(4); //"object"
typeof new String("abc"); //"object"
typeof new Boolean(true); //"object"
(function() {console.log(typeof arguments)})(); //object

Bom, olhando os exemplos acima a gente vê que, apesar de útil e muito usado, ele não retorna detalhadamente o que a gente precisa.

A solução? Eu, pessoalmente, sempre usei uma verificação envolvendo a propriedade "prototype" que toda variável tem.

O Angus fez melhor e empacotou em uma função:

var toType = function(obj) {
  return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}

Comparando com os "object" do typeof padrão teremos as seguintes diferenças:

toType ("a", 3); //"string"
toType({a: 4}); //"object"
toType(null); //"null"
toType([1, 2, 3]); //"array"
(function() {console.log(toType(arguments))})(); //arguments
toType(new ReferenceError); //"error"
toType(new Date); //"date"
toType(/a-z/); //"regexp"
toType(Math); //"math"
toType(JSON); //"json"
toType(new Number(4)); //"number"
toType(new String("abc")); //"string"
toType(new Boolean(true)); //"boolean"

O resto (string, number, undefined) é igual. Só não pode ser usado em variáveis vazias não declaradas, senão dará um "ReferenceError" assim como um alert em algo não declarado.

Gostou? Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

07 outubro, 2011

Funções javascript pra trabalhar com Scroll

Ae pessoal, esses dias precisei brincar com a posição da barra de rolagem (scroll) na tela e posicionamento de elementos de acordo com o scroll.

Como quase tudo em javascript, nossos amigos navegadores não ajudam. Ou seja, não é só pegar a documentação, tem toda aquela velha gambiarra pra funcionar em diversos browsers (crossbrowser).

Pra minha alegria, lembrei que eu já tinha brincado com isso na época do velho Mwords, daí fui lá atrás das funções e re-adaptei. Mostrar-lhes-ei agora:

Pegando a posição atual do scroll e retornando em um objeto com as propriedades X e Y:
var w=window, d=document;
//pega a posição atual do scroll
mov.getScroll= function(){
	return {
		x: (w.pageXOffset ? w.pageXOffset : de.scrollLeft ? de.scrollLeft : d.body.scrollLeft) || 0,		
		y: (w.pageYOffset ? w.pageYOffset : de.scrollTop ? de.scrollTop : d.body.scrollTop) || 0	
	};
};
//exemplo de uso
alert('Posição Y do scroll: ' + mov.getScroll().y);

Pegando a posição de determinado elemento na tela:
var w=window, d=document;
//pega a posição correta do elemento na tela
mov.objPos = function(obj) {
	var curl =0, curt = 0;
	if (obj.offsetParent) {
		do {
			curl += obj.offsetLeft;
			curt += obj.offsetTop;
		} while ((obj = obj.offsetParent));
		return {x: curl, y: curt};
	}else{
		return {x: obj.offsetLeft, y:obj.offsetTop};
	}
};
//exemplo de uso
alert('Posição real do elemento "viva" na tela: ' + mov.objPos(d.getElementById('viva') ) );

Fazendo a barra de rolagem se movimentar gradativamente
//variaveis
var micox_mov_height= 50; //de quanto em quanto o scroll se moverá
var micox_mov_fps    = 20; //velocidade que o scroll se moverá
//faz o slide
mov.slide = function(ini,end){
	if(!mov.sliding){	
		mov.sliding = true;
		//setando posição inicial
		var atual = mov.getScroll();
		w.scrollTo(atual.x , ini);
		mov.inter = setInterval(function(){
			var novoY, atual = mov.getScroll();
			if(atual.y < end){
				w.scrollTo(atual.x , atual.y + micox_mov_heigth);
			}else{
				mov.sliding = false;
				clearInterval(mov.inter);
			}
		},1000/micox_mov_fps);
	}
}

Em breve vocês irão ver estas funções fazendo um efeitinho muito legal em um texto de um brodi meu. Linkarei aqui quando acontecer. Aguardem, irá valer a pena.

Bom, tá documentado ae se alguém precisar. Qualquer dúvida é só comentar. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

10 maio, 2011

ERR_CONTENT_DECODING_FAILED no Google Chrome

Eu tive um problema no navegador Google Chrome com o Tadarank.com esses dias.

A página não aparecia no Chrome de jeito nenhum. Exibia um erro:

Error 330 (net::ERR_CONTENT_DECODING_FAILED)


Dando uma pesquisada na net, vi que meu caso poderia ter a ver com encoding Gzip, essas paradas...


Daí resolvi trocando:
header('Content-Encoding: gzip, deflate');


Por
header('Content-Encoding: zlib, deflate, gzip');


Pronto. O problema sumiu.
Talvez esta postagem seja útil pra você. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

12 abril, 2011

Como não ser marcado como SPAM ao enviar email pelo PHP - Ativar DomainKeys e SPF no Cpanel

Oaa

Ae malucada.
Esses dias passei um perrengue com emails do tadarank e com um produto que eu vendia e enviava email automaticamente pros meus compradores.

Nas últimas semanas, um monte de clientes me ligou dizendo que não recebeu o email. Pesquisei e receberam sim, só que tinha ido parar na caixa de SPAM. Todos os emails enviados pelos meus domínios estavam indo pra caixa de SPAM. Tristeza.

Pesquisei e pedi ajuda pra resolver este problema.
Eu mesmo já tinha ajudado muita gente no passado, sugerindo palavras "negras" a serem eliminadas, sugerindo enviar somente se o email for do domínio (ex, se seu site é do domínio www.arroz.com você só pode enviar emails terminados em @arroz.com ), baixar bibliotecas php para email, e outras técnicas que dão uma força boa na resolução do problema, mas não resolvem de vez.

Até que o brodi kyonac da lista de monetização me sugeriu ativar uns lanche chamado SPF e DomainKeys.

É claro que vc irá pesquisar na web o que diabos é isso (afinal você está lendo este tutorial). Numa rápida explicação (chupinhada do Cpanel):

DomainKeys é um sistema de autenticação de e-mail que permite que o correio recebido seja comparado com o servidor de que foi enviado para confirmar que o correio não foi modificado. Isto garante que as mensagens estão chegando realmente do remetente listado e permite que as mensagens abusivas sejam rastreadas com mais facilidade (segundo o Cpanel).

SPF irá especificar que máquinas estão autorizadas a enviar e-mails do(s) seu(s) domínio(s). Isto significa que apenas o correio enviado através deste servidor irá aparecer como correio válido do(s) seu(s) domínio(s) quando os registros SPF são verificados (segundo o Cpanel).

Bom, se quiser detalhar melhor pesquisa no google :P

Em resumo: Ativei estas duas paradas no Cpanel e deixei de ser taxado como Spammer. Simples assim.

Antes de descobrir como ativar isso aí, eu e o Jânio, quebramos a cabeça, pois achávamos que era algo complexo de ser ativado. Abrimos chamado no datacenter e talz...

Felizmente, passeando pelas opções de email do Cpanel achei o menu chamado Autenticação de Email dentro da aba Correio. É só clicar, ativar e ser feliz. Sem complicação nenhuma.

Atualização: O Vinicius indicou um wizard pra gerar o SPF http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard (em inglês)

Dúvidas? Comente. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

11 março, 2011

Tada Rank - Avaliações de sistemas de afiliados, hospedagens, webmasters e anunciantes na web

Opa malucada, beleza?

O mico tava sumido pois tava trabalhando em 3 novos projetinhos.

O primeiro é tipo um Framework PHP/Javascript pessoal, sem complicação, que me ajudará bastante no que eu preciso pra programar sites: Mudar de visual facilmente, facilidade pra exibir tabelas do BD, facilidade pra criar forms que se comunicam com o BD, facilidade pra cadastro/login de usuários, facilidade pra trocar de linguagem do site (pt en es) e facilidade pra validação de campos.

Disso tá saindo o MicoxLib - Quem sabe um dia eu torno ele público.

O segundo, que foi feito com o MicoxLib, era um sistema de compras coletivas com um brodi aqui de Goiânia. Infelizmente o mercado já tá poluído demais. Daí desistimos.

O terceiro, também feito com o MicoxLib, tá online e ele é o assunto dessa postagem:
Tada Rank - Avaliações de sistemas de afiliados, hospedagens, webmasters e anunciantes na web

O objetivo inicial é avaliar os sistemas de afiliados pra ajudar nós webmasters e também os anunciantes.

Acabou que coloquei formas de contato/anúncio para ajudar os anunciantes a não gastarem rios de dinheiro com intermediários e poderem anunciar DIRETAMENTE nos sites que desejarem. Vou até gastar um pouco com Adwords nessa parte.

Futuramente vou colocar pra avaliar hospedagens também.

Acaba que os sistemas de afiliados e as hospedagens também sairão ganhando pois saberão seus pontos fracos.

Se cadastra lá e ajuda a avaliar.

Abaixo, uma lista de alguns sistemas de afiliados cadastrados e links pras suas respectivas pontuações:

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

24 fevereiro, 2011

Pegando o endereço da URL atual em PHP

Várias e várias vezes precisamos saber o caminho COMPLETO da url atual em PHP mas as variáveis globais não ajudam.
Seja para inserir em botões do twitter, facebook, etc.

As globais do PHP só informam após o domínio do site (www.qualquercoisa.com), o que muitas vezes não serve de nada para um botão do twitter por exemplo.

Pesquisei na net pra ver se já tinha algo pronto pra eu usar e nada. Só tinha gente gambiarrando com o SCRIPT_NAME , REQUEST_URI ou PHP_SELF que não valem de nada quando você precisa do endereço COMPLETO incluindo o 'http://' (protocolo) e o 'www.qualquercoisa.com' (domínio).

Eu precisava era de algo parecido com o this.location comum no javascript.

Daí resolvi fazer o que sei: gambiarrar também.

Saiu o código abaixo:

$proto = strtolower(preg_replace('/[^a-zA-Z]/','',$_SERVER['SERVER_PROTOCOL'])); //pegando só o que for letra 
$location = $proto.'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

echo $location; 
Prontinho, espero ter ajudado. Comenta ae.

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

18 janeiro, 2011

Botão Twitta Isso Fácil como Favorito no Firefox - sem plugin

Ae povo. Tô de férias.

Eu tava cansado de querer mandar algo pro twitter e ter que usar complicação de plugins pra firefox ou ver a boa vontade do dono da página de colocar um botão "twite isto" fácil sem burocracia.

Tem alguns que chegam ao absurdo de te pedir até a senha!!! Sai fora.

E o pior é que muitos NÃO REDUZEM O URL!!

Daí resolvi deixar a preguiça de lado e fazer um rapidinho aqui com confirm de javascript e opção pra escrever algo e, principalmente, com redução automática do URL via bitly e topsy.

Não pede sua senha, não fica 2 horas carregando páginas intermediárias e ainda reduz a url.

É só arrastar o link abaixo para seus favoritos do Firefox:

Twitta Isso

Ou, se não der certo arrastando, você pode colocar o favorito manualmente:
  1. Copia o seguinte código (ctrl + C): javascript:(function(){tx=document.title;do{tx=prompt('Digite o texto para aparecer antes do link.\r\nMáximo de 115 caracteres.',tx);if(tx&&tx.length<119){open('http://button.topsy.com/retweet?title='+escape(tx)+'&url='+escape(location));break}}while(tx&&confirm('Seu texto tem mais de 118 caracteres.\r\nNão vai caber.\r\nQuer corrigir?'))})();
  2. Clica com o Botão direito na barra de favoritos e escolher a opção "adicionar novo favorito"
  3. No nome você coloca: Twitta Isso
  4. No Endereço você cola o código que copiou antes.
Prontinho.
Não testei em outros navegadores pra ver o que dá. Sou preguiçoso. Testa ae e me avisa nos comments.

Se quiser dar uma curiada no código é só embelezá-lo no jsbeautifier: http://jsbeautifier.org/ 
Se quiser, pode me agradecer ou xingar via twitter também hehe: twitter.com/micox

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

Resultado! Concursos