http://loja.zionlanhouse.com.br
Esse é o endereço da minha loja.
Ela foi feita com OScommerce, que é uma loja open source.
Peguei ela no phpmania.org
Fiz várias alterações.
Inclusive scripts para atualizar a tabela de sedex, cadastrar automaticamente os produtos no mercado livre e no toda oferta.
Se alguém precisar de alguma ajuda, e só postar.
quarta-feira, 22 de abril de 2009
segunda-feira, 6 de abril de 2009
Terra Voip - alguns exclarecimentos
Estou na incessante procura por um bom provedor VOIP.
Fui no UOL, não tem suporte para configuração de adaptadores ata, não consegui configurar com as pobres informações que está no site, cancelei, e obtive o valor que eu havia pago devolta, sem transtornos.
Fui até o Terra (no sábado dia 3 de abril de 2009), procurei saber se tinha suporte para adaptadores ata, eles disseram que sim, configurei tudo certinho, e foi de primeira.
Fui lá fazer o teste, ligação perfeita, tudo nos conformes.
Mas como eu vo oferecer voip aos clientes da minha lan house, eu preciso que o extrato da ligação seja em tempo real.
Sé que a ligação de teste demorou 1 dia para aparecer no extrato.
Liguei no suporte (na segunda dia 6 de abril de 2009), perguntei se havia algum jeito deles acelerarem o processo de extrato, e não houve jeito. Tive de cancelar.
Me botaram na linha, depois de 10 minutos de espera, uma atendente de tele-marketing, que tentava o tempo todo me persuadir de que eu estava fazendo a coisa errada. Até que ela concordou comigo, e resolveu cancelar.
Ai, claro, pedi o meu dinheiro de volta, e a resposta foi que eles não devolvem o dinheiro......
É complicado você fazer uma assinatura, e você não ter ficado satisfeito com o serviço, cancelar apenas 2 dias depois (sendo q foi por causa do final de semana), e não ter seu rico dinheirinho q vc suou pra ganhar devolta.
Deixei pra lá, pois eram apenas 15 reais, mas avisei que ia deixar os possíveis clientes deles sabendo do que houve comigo, e aqui estou avisando. Se vocês cancelarem, não vão ver seu dim dim devolta, cuidado!!!
ps.: Fui atendido pela Márcia, o protocolo de cancelamento é 79656793
Fui no UOL, não tem suporte para configuração de adaptadores ata, não consegui configurar com as pobres informações que está no site, cancelei, e obtive o valor que eu havia pago devolta, sem transtornos.
Fui até o Terra (no sábado dia 3 de abril de 2009), procurei saber se tinha suporte para adaptadores ata, eles disseram que sim, configurei tudo certinho, e foi de primeira.
Fui lá fazer o teste, ligação perfeita, tudo nos conformes.
Mas como eu vo oferecer voip aos clientes da minha lan house, eu preciso que o extrato da ligação seja em tempo real.
Sé que a ligação de teste demorou 1 dia para aparecer no extrato.
Liguei no suporte (na segunda dia 6 de abril de 2009), perguntei se havia algum jeito deles acelerarem o processo de extrato, e não houve jeito. Tive de cancelar.
Me botaram na linha, depois de 10 minutos de espera, uma atendente de tele-marketing, que tentava o tempo todo me persuadir de que eu estava fazendo a coisa errada. Até que ela concordou comigo, e resolveu cancelar.
Ai, claro, pedi o meu dinheiro de volta, e a resposta foi que eles não devolvem o dinheiro......
É complicado você fazer uma assinatura, e você não ter ficado satisfeito com o serviço, cancelar apenas 2 dias depois (sendo q foi por causa do final de semana), e não ter seu rico dinheirinho q vc suou pra ganhar devolta.
Deixei pra lá, pois eram apenas 15 reais, mas avisei que ia deixar os possíveis clientes deles sabendo do que houve comigo, e aqui estou avisando. Se vocês cancelarem, não vão ver seu dim dim devolta, cuidado!!!
ps.: Fui atendido pela Márcia, o protocolo de cancelamento é 79656793
Marcadores:
voip uol terra cancelamento tele marketing
terça-feira, 10 de fevereiro de 2009
Fazer o subversion trabalhar por você
Quando você está trabalhando em um repositório Subversion em um projeto para a web, a melhor coisa que tem é quando alguem faz um commit a alteração aparecer no webserver do mesmo servidor.
O subversion possui os scripts HOOK, que são executados quando alguma ação é feita no subversion.
O que eu usei foi o script post-commit. Ele é executado após um commit.
O padrão é que os scripts estejam com permissão de execução no diretório hook dentro do repositório.
Só que os problemas de permissões são inúmeros!
A principal dica é: Usando webdav para o subversion, dê um checkout (svn checkout http://localhost /var/www) e depois altere o dono para www-data recursivamente (chown www-data:www-data -R /var/www)
Abaixo está o script post-commit, altere-o para suas necessidades:
O subversion possui os scripts HOOK, que são executados quando alguma ação é feita no subversion.
O que eu usei foi o script post-commit. Ele é executado após um commit.
O padrão é que os scripts estejam com permissão de execução no diretório hook dentro do repositório.
Só que os problemas de permissões são inúmeros!
A principal dica é: Usando webdav para o subversion, dê um checkout (svn checkout http://localhost /var/www) e depois altere o dono para www-data recursivamente (chown www-data:www-data -R /var/www)
Abaixo está o script post-commit, altere-o para suas necessidades:
#!/bin/bash
/bin/sleep 3
/usr/bin/svn update /var/www/ --non-interactive --no-auth-cache --username XXXX --password XXXXX
Marcadores:
subversion svn deploy permissão hook
domingo, 8 de fevereiro de 2009
Configurando o aMSN para acesso público
O aMSN é um cliente para a rede MSN que mais se assemelha ao cliente da microsoft no windows. O problema é que ele vem bem feio na sua configuração "default".
Vamos usar como base o Ubuntu Intrepid, e instalar o aMSN 0.98 com o skin do Windows Live 2009 e com suporte ao MSN Plus!
Baixe o pacote deb do aMSN no link: http://www.getdeb.net/download/3001/0 e depois instale normalmente usando o gerenciador de pacotes do ubuntu.
Agora baixe o Colored Nicks, que dá suporte ao MSN Plus! no link: http://europa.solit.us/archives/downloadstatic/6325657399, é só descompactar na pasta ~/.amsn/plugins
Agora baixe o skin do Windows Live Messenger 2009 no link: http://amsn.fr.nf/communaute/download/file.php?id=21&sid=ce88c102d6b53fc952f74772b1ad08c5 , depois descompacte na pasta ~/.amsn/skins
Pra tudo funcionar, simplesmente escolha o skin e carregue o plugin dentro do aMSN.
O unico problema do acesso público, é que os plugins tem que serem carregados toda vez que uma pessoa entra no aMSN.
Usando o perfil que tinha salvo, percebi que tinha um arquivo chamado plugins.xml que guardava as configurações de plugins. O problema é que quando vc coloca na pasta principal do aMSN, ele simplesmente era apagado...
Ai descobri um comando novo no linux, o chattr. Com ele eu consigo marcar um arquivo como imutável, assim ninguem consegue alterar o arquivo (a não ser o root).
Aqui está um exemplo do arquivo plugins.xml
Coloque ele na pasta principal do aMSN: ~/.amsn
depois é só dar esse comando: chattr +i plugins.xml
Pronto! Qualquer dúvida, comente o post!
Vamos usar como base o Ubuntu Intrepid, e instalar o aMSN 0.98 com o skin do Windows Live 2009 e com suporte ao MSN Plus!
Baixe o pacote deb do aMSN no link: http://www.getdeb.net/download/3001/0 e depois instale normalmente usando o gerenciador de pacotes do ubuntu.
Agora baixe o Colored Nicks, que dá suporte ao MSN Plus! no link: http://europa.solit.us/archives/downloadstatic/6325657399, é só descompactar na pasta ~/.amsn/plugins
Agora baixe o skin do Windows Live Messenger 2009 no link: http://amsn.fr.nf/communaute/download/file.php?id=21&sid=ce88c102d6b53fc952f74772b1ad08c5 , depois descompacte na pasta ~/.amsn/skins
Pra tudo funcionar, simplesmente escolha o skin e carregue o plugin dentro do aMSN.
O unico problema do acesso público, é que os plugins tem que serem carregados toda vez que uma pessoa entra no aMSN.
Usando o perfil que tinha salvo, percebi que tinha um arquivo chamado plugins.xml que guardava as configurações de plugins. O problema é que quando vc coloca na pasta principal do aMSN, ele simplesmente era apagado...
Ai descobri um comando novo no linux, o chattr. Com ele eu consigo marcar um arquivo como imutável, assim ninguem consegue alterar o arquivo (a não ser o root).
Aqui está um exemplo do arquivo plugins.xml
<config>
<plugin>
<name>Nudge</name>
<loaded>true</loaded>
<entry>
<key>notsentinwin</key>
<value>1</value>
</entry>
<entry>
<key>notrecdinwin</key>
<value>1</value>
</entry>
<entry>
<key>soundnotsend</key>
<value>1</value>
</entry>
<entry>
<key>soundnotrec</key>
<value>1</value>
</entry>
<entry>
<key>shake</key>
<value>0</value>
</entry>
<entry>
<key>shakes</key>
<value>10</value>
</entry>
<entry>
<key>addblockbutton</key>
<value>0</value>
</entry>
<entry>
<key>notify</key>
<value>1</value>
</entry>
<entry>
<key>addclmenuitem</key>
<value>0</value>
</entry>
<entry>
<key>addbutton</key>
<value>1</value>
</entry>
<entry>
<key>shaketoo</key>
<value>0</value>
</entry>
<entry>
<key>limit</key>
<value>1</value>
</entry>
<entry>
<key>delay</key>
<value>60</value>
</entry>
</plugin>
<plugin>
<name>Winks</name>
<loaded>true</loaded>
<entry>
<key>use_extrac32</key>
<value>0</value>
</entry>
<entry>
<key>flashplayerargs</key>
<value></value>
</entry>
<entry>
<key>1</key>
<value>#</value>
</entry>
<entry>
<key>play_embed</key>
<value>0</value>
</entry>
<entry>
<key>#</key>
<value>show_add_wink</value>
</entry>
<entry>
<key>flashplayer</key>
<value></value>
</entry>
<entry>
<key>#use_queque_in</key>
<value>1</value>
</entry>
<entry>
<key>#use_queque_out</key>
<value>1</value>
</entry>
<entry>
<key>play_inmediatly</key>
<value>1</value>
</entry>
<entry>
<key>cabextractor</key>
<value>cabextract</value>
</entry>
<entry>
<key>close_on_leave</key>
<value>1</value>
</entry>
<entry>
<key>notify_in_one_line</key>
<value>0</value>
</entry>
</plugin>
<plugin>
<name>Cam Shooter</name>
<loaded>true</loaded>
</plugin>
<plugin>
<name>remind</name>
<loaded>true</loaded>
<entry>
<key>beginend</key>
<value>1</value>
</entry>
<entry>
<key>nbline</key>
<value>10</value>
</entry>
<entry>
<key>checknote</key>
<value>1</value>
</entry>
<entry>
<key>filetransfert</key>
<value>1</value>
</entry>
<entry>
<key>daysnumber</key>
<value>7</value>
</entry>
<entry>
<key>when</key>
<value>1</value>
</entry>
</plugin>
<plugin>
<name>ColoredNicks</name>
<loaded>true</loaded>
<entry>
<key>nostyle</key>
<value>0</value>
</entry>
</plugin>
<plugin>
<name>Search Contact</name>
<loaded>true</loaded>
<entry>
<key>search</key>
<value>0</value>
</entry>
<entry>
<key>hide</key>
<value>0</value>
</entry>
<entry>
<key>advanced</key>
<value>1</value>
</entry>
</plugin>
<plugin>
<name>aMSN Plus</name>
<loaded>false</loaded>
<entry>
<key>allow_commands</key>
<value>1</value>
</entry>
<entry>
<key>allow_quicktext</key>
<value>1</value>
</entry>
<entry>
<key>allow_colours</key>
<value>1</value>
</entry>
<entry>
<key>quick_text</key>
<value>[list]</value>
</entry>
<entry>
<key>parse_nicks</key>
<value>1</value>
</entry>
<entry>
<key>colour_nicks</key>
<value>1</value>
</entry>
<entry>
<key>#resource</key>
<value>aMSN</value>
</entry>
</plugin>
</config>
Coloque ele na pasta principal do aMSN: ~/.amsn
depois é só dar esse comando: chattr +i plugins.xml
Pronto! Qualquer dúvida, comente o post!
quinta-feira, 5 de fevereiro de 2009
Como colocar uma mensagem do Jquery validate dentro de um objeto definido
Fiquei um dia tentando colocar a mensagem do Jquery validate dentro de um <p>, pois o validate cria um label, e ele tava pegando as propriedades do css da pagina, e tava acabando com o layout.
Depois de ler muito o código fonte do validate, consegui o seguinte código:
Como eu já tinha colocado no formulário paragrafos seguindo o padrão nome_do_elemento_p, na linha var elemento = "#"+element.attr("name")+'_p'; eu crio uma variável de texto pegando o nome do elemento com erro e adicionando no final o _p
Na linha $(elemento).html(error.html()); pegamos a mensagem de erro a colocamos dentro do p.
Fácil? depois que ralei procurando como faz ficou sim!
Qualquer dúvida, comente.
Depois de ler muito o código fonte do validate, consegui o seguinte código:
<script type="text/javascript">
$(document).ready(function(){
$("#form_login").validate({ //nome do formulário
rules: {
user_login: { // regra do campo user_login
required:true, // campo requirido
minlength: 2 // deve ter no mínimo 2 caracteres
},
user_pass: {
required:true,
minlength: 4
}
},
errorPlacement: function(error, element) { // função que define onde deve ser colocado os erros
var elemento = "#"+element.attr("name")+'_p';
$(elemento).html(error.html());
}
});
});
</script>
Como eu já tinha colocado no formulário paragrafos seguindo o padrão nome_do_elemento_p, na linha var elemento = "#"+element.attr("name")+'_p'; eu crio uma variável de texto pegando o nome do elemento com erro e adicionando no final o _p
Na linha $(elemento).html(error.html()); pegamos a mensagem de erro a colocamos dentro do p.
Fácil? depois que ralei procurando como faz ficou sim!
Qualquer dúvida, comente.
Como ligar o rewriter do apache em um alias
Trabalhando com Zend, surgiu a necessidade de configurar varios aliases para diversas pastas do sistema zend, pois eu tinha uma pasta de teste, outra de produção e etc.
Eu poderia fazer por virtualhost, mas é complicado, pois eu teria que acessar cada um com um IP, e isso daria mais trabalho.
Fucei fucei, até que consegui a solução.
Eu uso o Ubuntu server, os arquivos de configuração do apache fica em /etc/apache2
Dentro desse, existe o diretório "conf.d", lá dentro eu criei um arquivo para adicionar novos aliases ao apache.
O arquivo que criei foi zend.conf, e está desse jeito
Assim ele está mapeando o diretório /home/usuario/teste/public/ onde vamos ter um .htaccess para fazer o trabalho do rewriter do Zend.
Percebeu que o .htaccess está direcionando para o index.php? simples né?
Se não entendeu alguma coisa, faça um comentário.
ps.: Não esqueça de reiniciar o apache!
Eu poderia fazer por virtualhost, mas é complicado, pois eu teria que acessar cada um com um IP, e isso daria mais trabalho.
Fucei fucei, até que consegui a solução.
Eu uso o Ubuntu server, os arquivos de configuração do apache fica em /etc/apache2
Dentro desse, existe o diretório "conf.d", lá dentro eu criei um arquivo para adicionar novos aliases ao apache.
O arquivo que criei foi zend.conf, e está desse jeito
Alias /teste /home/usuario/teste/public/
<Directory /home/usuario/teste/public/ >
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
Assim ele está mapeando o diretório /home/usuario/teste/public/ onde vamos ter um .htaccess para fazer o trabalho do rewriter do Zend.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /teste/index.php
Percebeu que o .htaccess está direcionando para o index.php? simples né?
Se não entendeu alguma coisa, faça um comentário.
ps.: Não esqueça de reiniciar o apache!
domingo, 25 de janeiro de 2009
Zend Log
Estava precisando criar um log de acessos e etc.
O sistema que estou trabalhando é com Zend Framework, havia pensado em acessar o banco de dados diretamente pelo php para fazer, mas depois vi que existe o Zend_Log.
O problema é que eu não achava uma opção de colocar mais campos para alimentar o banco de dados. Depois de muitas procuras e testes, eis o código.
Acho que dá pra entender bem o código né?
o segredo é usar o setEventItem!
Se você ficou com alguma dúvida, comente o post.
O sistema que estou trabalhando é com Zend Framework, havia pensado em acessar o banco de dados diretamente pelo php para fazer, mas depois vi que existe o Zend_Log.
O problema é que eu não achava uma opção de colocar mais campos para alimentar o banco de dados. Depois de muitas procuras e testes, eis o código.
class logEvents{
private $_db;
public function __construct($db){
$this->_db = $db;
$colunas = array('logevents_type_idlogevents_type' => 'tipo',
'logevents_date' => 'timestamp',
'logevents_text' => 'message',
'idpartner' => 'parceiro',
'logevents_ip' => 'address'
);
$writer = new Zend_Log_Writer_Db($this->_db, 'logevents', $colunas);
$this->logger = new Zend_Log($writer);
}
public function set_acesso($tipo,$descricao = "",$parceiro = 0){
$this->logger->setEventItem('tipo',$tipo);
$this->logger->setEventItem('parceiro', $parceiro);
$this->logger->setEventItem('address',$_SERVER['REMOTE_ADDR']);
$this->logger->log($descricao);
}
}
Acho que dá pra entender bem o código né?
o segredo é usar o setEventItem!
Se você ficou com alguma dúvida, comente o post.
Assinar:
Postagens (Atom)