terça-feira, 24 de junho de 2014

[OpenCart] Erro no Módulo Correios (prazo diferenciado)

Pessoal, algumas áreas no Brasil estão com problemas de entrega pelos Correios. Isso prejudica o funcionamento do módulo dos correios do OpenCart. O Webservice dos Correios envia a mensagem de que a entrega será diferenciada, mas isso vem no campo de erro. Embora o frete seja calculado, o OpenCart ignora e mostra apenas o erro.

Erro no site: "Atenção: Não há opções de entrega disponíveis. Por favor, contate-nos para assistência!"
Erro ao investigar o webservice dos correios: "Área com entrega temporariamente sujeita a prazo diferenciado".

Esse erro ocorre apenas para alguns CEPs, nem sempre aparece,
E vamos lá aos códigos...

No "catalog/model/shipping/correios.php" altere
if($servico['Erro'] == 0 && $valor_frete_sem_adicionais > 0)
substitua por
if(($servico['Erro'] == 0 || $servico['Erro'] == 10 ) && $valor_frete_sem_adicionais > 0)
(cuidado para não comer a chave "{" do if )

Porém eu acho importante esse erro aparecer para o comprador pois ele deve saber que o produto vai ter problemas na entrega. Então testo se o erro é o 10 e incluo a mensagem no título do tipo da entrega.
Procure os seguintes códigos abaixo no mesmo arquivo e adicione as linhas em laranja:

// texto a ser exibido para Sedex a Cobrar
if($servico['Codigo'] == $this->correios['Sedex a Cobrar']){
 $title = sprintf($this->language->get('text_'.$servico['Codigo']), $servico['PrazoEntrega'], $this->currency->format($cost));
 if($servico['Erro'] == 10) $title .= ' ('.$servico['MsgErro'].')';
 $text = $this->currency->format($this->tax->calculate($cost, $this->config->get('correios_tax_class_id'), $this->config->get('config_tax')));
}
else{
 $title = sprintf($this->language->get('text_'.$servico['Codigo']), $servico['PrazoEntrega']);
 if($servico['Erro'] == 10) $title .= ' ('.$servico['MsgErro'].')';
 $text = $this->currency->format($this->tax->calculate($cost, $this->config->get('correios_tax_class_id'), $this->config->get('config_tax')));
}

Galera, gostaria de contar com a colaboração de vocês para melhorar isso ou até checar se a solução é realmente adequada. Fiz essa alteração a poucos minutos e já estou publicando pois vejo que ela é bem emergencial, mas é sempre bom construir soluções de maneira colaborativa.

Abraços !


domingo, 18 de maio de 2014

[Apache2] Erro de permissão ao acessar site: "Forbidden"

Meu apache2 estava até funcionando direito, mas depois de um tempo e várias atualizações fui tentar usar de novo e notei que havia um erro. Ao acessar o site no navegador:

Forbidden

You don't have permission to access / on this server.

Analisando o log (/var/log/apache2/error.log) tenho o erro:
 client denied by server configuration

Para resolver, editei o arquivo de configuração do apache adicionando as permissões.

  • sudo nano /etc/apache2/apache2.conf

Adicione as permissões para sua pasta com as seguintes linhas
<Directory /minhapasta/meusite/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Atente em trocar nessa configuração "/minhapasta/meusite/" pelo caminho da sua pasta.
Depois reinicie o apache para aplicar as configurações.
  • sudo service apache2 restart

Após essas etapas, seu site deve voltar a funcionar. 
Caso ainda tenha problemas de permissão, cheque no seu sistema operacional se as permissões de acesso à pasta estão ok.

Outra questão de permissão que pode surgir, é que a pasta só esteja autorizada para seu usuário. Neste caso, faça o apache iniciar com o seu usuário. Procure no arquivo "/etc/apache2/apache2.conf" o seguinte:

User <Your User>
Group <Your Group>

Então substitua pelo seu usuário e grupo nestas linhas.

Té + !




sábado, 29 de março de 2014

[Ubuntu 13.10] Tela preta no youtube (sem vídeo)

Navego pela web usando Chromium. No último mês, tem me incomodado cada vez mais problemas ao assistir vídeos no youtube:
  • As vezes, ao entrar num vídeo do youtube, aparece uma tela preta no lugar do flash player.
  • Ao assistir um vídeo e, depois, mudar de aba, quando volta o vídeo some, só se tem o áudio.
Tentei algumas soluções, mas o que funcionou foi trocar o plugin do flash.
Trocaremos o plugin mais comum do Adobe Flash Player para o Pepper Flash Player

Abra um Terminal e digite os seguintes comandos:

sudo add-apt-repository ppa:skunk/pepper-flash
sudo apt-get update
sudo apt-get install pepflashplugin-installer

A primeira linha adiciona o repositório para download do plugin. Depois, atualiza-se. O último comando instala o Pepper Flash Plugin. Faça um de cada vez para ter certeza do está fazendo.

Pronto, temos o plugin instalado, mas precisamos adicioná-lo ao nosso navegador Chromium. Abra o arquivo de configuração do navegador com o seguinte comando:

sudo gedit /etc/chromium-browser/default

No caso, estou utilizando o editor de texto "gedit". Sinta-se a vontade de usar outro editor que preferir. Então adicione, ou altere se já existir, a seguinte linha

CHROMIUM_FLAGS="$CHROMIUM_FLAGS --ppapi-flash-path=/usr/lib/pepflashplugin-installer/libpepflashplayer.so --ppapi-flash-version=$FLASH_VERSION"

Salve o arquivo e reinicie o Chromium.
Vamos checar se instalou? Na barra de endereço digite
chrome://plugins/

Note que no canto direito há uma opção de "Detalhes", deixe isso expandido.
Depois utilize "ctrl+f" para buscar a palavra "Flash".
Desative o antigo "/usr/lib/flashplugin-installer/libflashplayer.so" (NPAPI)
Deixe ativo somente o Pepper (PPAPI) que acabamos de instalar.

Veja na imagem como deve ficar o resultado final:


Pronto gente, acabou ! Isso resolve o problema ! Reinicie o navegador e divirta-se !

Coisas que tentei e que não funcionaram
  • atualizar chromium-codecs-ffmpeg-extra
  • desabilitar a aceleração de hardware no flash player
  • alterar a flag "Composição de thread" do Chromium
Té +!

sexta-feira, 14 de março de 2014

[Linux] Separando arquivos modificados através de script bash (Criando um pacote automaticamente)

[Linux] Copying modified files into a new folder using bash script


- Você programa alterando vários arquivos e não anota qual alterou ?
- Do you modify a lot of source codes and after don’t know which ones were modified ?
- Gostaria de montar um pacote com os arquivos modificados para atualizar o ambiente de produção ?
- Would you like to create a package to update the production environment ?
Seu problemas acabaram !!!
Your problems are over!


Se você é mais um programador rústico que vive com os lobos na montanha e altera códigos dos programas usando “nano” no terminal do Linux, saiba que você não está sozinho nesse mundo !
If you are a rustic programmer that lives in a mountain with wolves and modify system source codes using “nano” at Linux terminal, be aware that you aren’t alone in this world !


Eu fiz um Script Bash que verifica os arquivos alterados a partir de uma data/hora definidos e copia para um novo diretório mantendo toda estrutura de pasta. Com isso, teremos todos os arquivos modificados numa pasta, ou seja, um pacote pronto para atualizar a produção.
I developed a Bash script that uses a specified hour to find modified files in a folder and then copies all of them into a new folder keeping the same folder structure. With all modified files in one folder organized as the original one, we have a package and we can update the production environment.  


Acredito que isso tenha diversos usos, é só adaptar para o que precisa.
I believe this script has several utilities and can modified as much as you need.
Vamos ao código !
Let’s go to the codes !


*Crie uma nova pasta para o pacote e salve o script nela
*Create a new folder to the package and then save that script in this folder.



#!/bin/bash


#Pasta base, um nível acima da pasta principal
#Set base folder which must be above the main folder
dirIni="/media/4965-5CD0/Marcos/Sites e Flash/rollingsports/"
#Subdiretorio a partir do inicial(definido acima). Dessa pasta para baixo sera montado o pacote.
#Set the main folder. The search will start in this folder.
dirMain="site"
#Serao localizados todos os arquivos modificados a partir da data definida (YYYY-MM-DD).
#Set the initial date (YYYY-MM-DD) to find the files
datIni="2012-11-15"
#Extensoes a serem buscadas
#Set the files extensions (in this case .php and .tpl)
extensao="\(php\|tpl\)"


# Gera um arquivo com a data que definimos em datIni. Servirá para comparação logo abaixo.
# A temporary file will be created with the date of “datIni”. It will be used for file comparison.
touch --date $datIni /tmp/start


#Lista todos os arquivos da pasta principal modificados após a data definida.
# The command will list all modified files after the set date.
result="$(find "$dirIni$dirMain" -regex ".*$extensao$" -newer /tmp/start)"


nro=0 # Contador - Counter
nroCopiados=0


(
IFS=$'\n'
set +f


#Para cada arquivo encontrado, processar da seguinte forma:
#For each file, do the commands:
for arquivo in $result
do
#Pega o nome do arquivo e prepara-o para copiá-lo para uma nova pasta
#Get the filename and prepare the file to be copied into a new folder
d="${arquivo/$dirIni/}"
nome="$(basename "$arquivo")"
d="${d/$nome/}"


#Perguntar se quero adicionar o arquivo no pacote
#Here it will show the filename and ask you if you want to copy the file
read -p " Empacotar "$d$nome" ? (S/N) " ans


#Pega a resposta do usuário (S/N) e transforma a letra em maiúscula.
#Get the user’s answer and change the letter typed into uppercase
ans="$(echo $ans | tr '[:lower:]' '[:upper:]')";


#Caso o usuário digitou “S”, coloca o arquivo no pacote
#If the user has typed “S”, it means “YES” then the command will copy the file
if [ "$ans" == "S" ]
then
#Cria a estrutura de pasta dentro do pacote antes de copiar o arquivo
#Now it will create a folder before copying the file in order to keep the same organization
test -d "$d" || mkdir -p "$d" && cp $arquivo "$d"
let nroCopiados+=1 #Incrementa o contador.
echo $d$nome >> $dirMain"/pacote.log"   
fi


let nro+=1 #Incrementa o contador. Increase the counter
done


#Fim, mostra a quantidade de arquivos copiados e gera um log descrevendo o pacote.
#At the end the command will show you the number of copied files and it will save descriptions in a log file.
echo -e "\n\n Foram empacotados "$nroCopiados" arquivos dos "$nro" encontrados."


echo -e "\n\nForam empacotados "$nroCopiados" arquivos dos "$nro" encontrados." >> $dirMain"/pacote.log"
date +'%d/%m/%Y %H:%M' >> $dirMain"/pacote.log"
)




quinta-feira, 2 de janeiro de 2014

[Ubuntu 13.10] Tecla de brilho de tela não funciona

Anoiteceu e resolvi diminuir o brilho da tela do meu notebook e... nada !
Até apareceu a animação de que se está diminuindo o brilho da tela, mas, de fato, a ação não acontece.

Antes e Depois de mexer no brilho (nenhuma alteração é notada)

Para resolver isso, criei um arquivo chamado 20-intel.conf
Seu conteúdo deverá ser o seguinte:

Section "Device"
    Identifier  "card0"
    Driver      "intel"
    Option      "Backlight"  "intel_backlight"
    BusID       "PCI:0:2:0"
EndSection

Salve esse texto no arquivo e mova para a pasta "/usr/share/X11/xorg.conf.d/".
Para isso, utilizei no terminal o comando "mv" combinado com "sudo" pela questão de permissão de acesso a essa pasta.

sudo mv 20-intel.conf /usr/share/X11/xorg.conf.d/20-intel.conf

Após criar e mover o arquivo para a pasta certa, reinicie o computador !
Pronto, só apertar as teclas de brilho que deverá funcionar.

Antes e Depois ( Agora sim está funcionando !!! )

Espero que essa solução funcione para vocês como funcionou para mim.

Té + galera !

terça-feira, 17 de dezembro de 2013

Teclado volta para inglês ao reiniciar no Ubuntu 13.10

Então eu atualizei meu notebook e desktop com o Ubuntu 13.10 pensando que iria ser legal, mas depois não me pareceu uma boa ideia. Além do gráfico que as vezes borra em um ponto e depois volta, já tive alguns travamentos, poucos, mas acontecem. Porém o que mais me incomoda é que, a cada vez que inicio o computador, o teclado desconfigura.

Todo dia, ligo o computador, começo a digitar e percebo que o "ç" e os acentos estão todos fora do lugar: meu teclado está configurado como Inglês (EUA) ! Então uso o atalho no relógio e clico em "PT"(Português Brasil) e está resolvido. Porém, é só reiniciar e tem que fazer de novo. Irritante !
Vamos lá a solução definitiva que encontrei:

Abra a "configuração do sistema". Geralmente tem um atalho na barra lateral, também tem outro atalho no menu que usamos para desligar.

Na configuração do sistema, abra a opção "Suporte a Idiomas"
 Por fim, na janela que abriu, marque "Sistema de método de entrada do teclado" como "nenhum".

Após fazer isso, o teclado irá fixar na sua primeira opção de idioma ao reiniciar.

Lembrem-se, eu não estou ensinando configurar o teclado, eu suponho que já tenham feito a configuração correta e que estejam com esse bug que troca o idioma do teclado para inglês mesmo que essa não seja sua configuração principal.

Té + !

quinta-feira, 17 de outubro de 2013

[OCR] Transformando PDF/Imagem em texto (Ubuntu)

Aí vieram até o "cara da informática", eu no caso, com algumas folhas na mão e pediram:
 - Bota essas folhas no scanner e transforma em texto para gente por favor?  #partiu !

A impressora aqui no trabalho não faz essa mágica. Então lá fui eu atrás de software...
A palavra chave aqui é OCR: Optical Character Recognition!
OCR é a tecnologia para reconhecimento de caracteres. Como numa imagem não podemos simplesmente copiar e colar o texto, utilizamos programas que implementam essa tecnologia a fim de extrair esses caracteres.

Os procedimentos a seguir foram executados no Ubuntu 13.04.
Primeiramente eu baixei um programa de OCR, o Tesseract, e junto, seu pacote para reconhecer caracteres em português:

  • sudo apt-get install tesseract-ocr tesseract-ocr-por imagemagick

Notem que também será feita a instalação do Image Magick, isso porque irei utilizá-lo num script para automatizar o processo. Image Magick é um incrível editor/conversor de imagem através de linha de comando. Se um dia precisarem escrever um script para editar/converter imagem, busquem mais por esse software, recomendo!

Se você passou uma só folha no scanner e ainda salvou em imagem, simplesmente faça:

  • tesseract minhaImagem.jpg novoArquivoTexto

Mas se você colocou no scanner várias folhas e ainda transformou em PDF, meu caso, vamos fazer um script para automatizar sua conversão:

#!/bin/sh
STARTPAGE=1 # Digite aqui o número da primeira página a ser lida
ENDPAGE=3 # Digite aqui o número da última página a ser lida
SOURCE=meuarquivo.pdf # Nome do PDF original
OUTPUT=meuarquivo.txt # Nome do arquivo de saída. O resultado é dado em texto simples.
RESOLUTION=300 # Digite aqui qual a resolução que o documento foi scaneado

touch $OUTPUT
for i in `seq $STARTPAGE $ENDPAGE`; do
    convert -density $RESOLUTION $SOURCE\[$(($i - 1 ))\] page.jpg
    echo processing page $i
    tesseract -l por page.jpg tempoutput
    cat tempoutput.txt >> $OUTPUT
done

Salve esse bloco num arquivo de texto, sugestão, converterPDF2TXT.sh
Altere os primeiros parâmetro que estão comentados com as informações do seu arquivo de entrada e saída. Depois altere as permissões do arquivo para execução e então é só rodar!

  • chmod 775 converterPDF2TXT.sh
  • ./converterPDF2TXT.sh

O interessante é scannear utilizando uma resolução alta, por exemplo, 300dpi.

Há uma maneira de fazer tudo isso graficamente, sem precisar do script shell. Instale o gscan2pdf, ele fará interface para o Tesseract. Porém, não tive sucesso, esse programa não enxergou o Tesseract, então não converteu (problema em pc's 64bits). Fica a dica para quem quiser testar.

Té + gente !