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 !