Lançamento: canastra.online

Olá! Hoje eu estou lançando o canastra.online! É um website que eu construí onde você pode jogar Canastra totalmente grátis, sem anúncios, contra o computador (bot) ou contra outras pessoas. Canastra é um jogo de cartas, também conhecido no Brasil como biriba ou buraco. Existem diversas regras para o jogo, e por enquanto o canastra.online apenas suporta um tipo específico de jogo, que algumas pessoas chamam de canastrinha. Leia as regras no website. ...

outubro 15, 2023

Unidades de tempo no Ncat, alternativa ao netcat

Olá, É comum o uso da ferramenta netcat com o ProxyCommand do SSH, que permite usar um servidor como bridge, útil quando precisamos conectar em uma máquina atrás de um firewall. Exemplo: # Arquivo: ~/.ssh/config Host computadordaempresa HostName 192.168.1.92 # O endereço IP que o firewall consegue enxergar User outrousuario IdentityFile ~/.ssh/id_rsa ProxyCommand ssh meuusuario@firewall.empresa.com nc -w 120 %h %p Eu usava o netcat e funcionava perfeitamente. Então, precisei conectar em uma máquina em outra rede, e o firewall desta utilizava CentOS 7, e ao tentar utilizar a configuração acima eu recebi o seguinte erro: ...

julho 21, 2014

Magento: conflito de rotas entre frontend e admin

Hoje eu estava trabalhando num bug de um módulo de terceiros. Algo simples, o botão do adicionar ao carrinho fazia seu trabalho por AJAX, ao invés do tradicional POST. Entretanto, toda vez que eu chamava a URL http://.../ajaxcart/cart/add, eu recebia um HTTP status 302, ou seja, um redirecionamento, para a mesma URL, porém em modo seguro (HTTPS). Depois de um processo de debug, constatei que o controller não era chamado quando era feita a requisição, portanto o problema deveria estar em alguma configuração do Magento. E de fato, estava. O painel administrativo estava configurado para utilizar o HTTPS (Configurações > Geral > Web > Seguro > Usar SSL no Admin), e quando eu removia esta opção, tudo funcionava conforme o esperado. ...

junho 6, 2014

Nginx: regex no server_name

Pequena dica para utilizar expressões regulares na diretiva server_name do Nginx. Usando um diretório específico para cada subdomínio: server { listen 80; server_name ~^(.*)\.project\.com$; root /home/www/project/$1; } Definindo uma variável de ambiente em um projeto único: server { listen 80; server_name ~^(.*)\.project\.com$; fastcgi_param CUSTOMER $1; root /home/www/project; } Você também pode utilizar a expressão para o domínio todo: server { listen 80; server_name ~^(.*)\.(.*\..*)$; root /home/www/$2/subdomains/$1/public_html; } Testado no Nginx 1.4.x. ...

maio 23, 2014

Debian: cannot connect to X server

Dica rápida para o Debian com KDE: Quando você receber o seguinte erro ao tentar executar uma aplicação que depende do X com sudo: kassner@brian:~$ sudo unetbootin No protocol specified unetbootin: cannot connect to X server :0 Rode o comando abaixo e tente novamente. kassner@brian:~$ xhost SI:localuser:root localuser:root being added to access control list

fevereiro 7, 2014

Twig_Error_Syntax: A message inside a trans tag must be a simple text

Dica rápida: Quando você tiver um código deste tipo: {% raw %}{% trans %}prefix.{{ varname }}{% endtrans %}{% endraw %} E receber esta mensagem de erro: Twig_Error_Syntax: A message inside a trans tag must be a simple text Você pode usar o código abaixo como gambiarra alternativa. {% raw %}{{ ("prefix." ~ varname)|trans }}{% endraw %} PS: é possível que esta não seja a melhor maneira de resolver.

janeiro 15, 2014

Symfony 2: alternativa para usar heranças com UniqueEntity

Olá, Hoje eu me deparei com um bug conhecido do Symfony2 ao usar UniqueEntity e herança com entidades. Na discussão, @gentisaliu recomendou usar um repositório customizado, então estou documentando a solução abaixo: Entidades: /** * @ORM\Table(name="parent") * @ORM\Entity(repositoryClass="Repository\Parent") * @UniqueEntity(fields={"name"}, repositoryMethod="findByName", message="Name already used.") * @ORM\InheritanceType("JOINED") * @ORM\DiscriminatorColumn(name="type", type="string") * @ORM\DiscriminatorMap({ * "a" = "ChildA", * "b" = "ChildB" * }) */ class Parent { } /** * @ORM\Entity(repositoryClass="Repository\Parent") * @ORM\Table(name="child_a") */ class ChildA extends Parent { } /** * @ORM\Entity(repositoryClass="Repository\Parent") * @ORM\Table(name="child_b") */ class ChildB extends Parent { } repositoryMethod: ...

novembro 27, 2013

Debian: ping hostname não encontrado mas o DNS funciona

Olá. Hoje encontrei um erro estranho com o ping: kassner@brian$ ping git.company.local ping: unknown host git.company.local É um endereço local, então eu posso ter esquecido de adicionar o servidor DNS. Vamos verificar: kassner@brian$ dig A git.company.local ; < <>> DiG 9.8.4-rpz2+rl005.12-P1 < <>> A git.company.local ;; global options: +cmd ;; Got answer: ;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 15746 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4 ;; QUESTION SECTION: ;git.company.local. IN A ;; ANSWER SECTION: git.company.local. 86400 IN A 192.168.0.150 ;; Query time: 0 msec ;; SERVER: 10.0.0.1#53(10.0.0.1) ;; WHEN: Thu Nov 14 12:05:45 2013 ;; MSG SIZE rcvd: 249 WTF? Ah, claro. É um endereço com sufixo .local, então o Avahi entra em cena. Como ele é desnecessário para minha rede local, eu desabilitei o mesmo no Debian Wheezy com o comando abaixo: ...

novembro 14, 2013

Objeto produto do Magento e o método loadByAttribute

Olá, Abaixo uma pequena dica para trabalhar com o objeto produto no Magento: /** * Use o método setStoreId duas vezes, caso contrário, qualquer valor editado será salvo na loja padrão, ao invés da selecionada. */ $product = Mage::getModel('catalog/product') ->setStoreId($storeId) ->loadByAttribute('ean', $ean) ->setStoreId($storeId);

maio 28, 2012

Apache Rewrite no VirtualHost = Erro 400 Bad Request

Nota mental: Caso você esteja movendo o Rewrite do .htaccess para o VirtualHost e receber um erro 400 Bad Request, uma ou ambas dicas abaixo podem ser necessárias: RewriteEngine On # usar o %{DOCUMENT_ROOT} RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -s [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -l [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] # usar o caminho completo para o arquivo RewriteRule ^.*$ /home/www/html/index.php [NC,L] Até mais.

março 7, 2012

Convertendo vídeos com tovid

Olá Fica a dica de um pequeno tutorial de como converter vídeos de AVI e similares para DVD, com legenda embutida. Instalando o tovid: sudo apt-get install tovid Convertendo de AVI com legenda para uma DVD-ISO. tovid -dvd -in Video.avi -subtitles Legenda.srt -out Video /usr/share/tovid/makexml Video.mpg -out Video export VIDEO_FORMAT=NTSC /usr/share/tovid/makedvd Video.xml mkisofs -dvd-video -udf -R -o Video.iso Video/ Depois disso, basta gravar a ISO pelo Brasero, por exemplo.

fevereiro 9, 2012

Oracle Developer VM

Olá Pessoal Na PHP Conference Brasil deste ano, Todd Trichler da divisão de Developer Marketing da Oracle disponibilizou para quem passou no estande uma Developer Virtual Machine em DVD, para o Virtual Box, contendo além de um Linux como sistema operacional, o Oracle Database 11g Release 2 e as ferramentas de desenvolvimento. Apesar da VM estar prontinha, é necessário alterar as configurações de rede da máquina virtual para que a mesma funcione corretamente. Prometi ao Todd que postaria no blog isso em português, então aí vai o passo-a-passo. ...

dezembro 2, 2011

Lentidão no Magento

Olá. Após um exaustivo trabalho de debug no Magento, o Filipe Ibaldo e eu acabamos por descobrir dois problemas no Magento, relacionados à lentidão na conclusão da compra com muitos produtos (produtos diferentes, e não um produto com 100 unidades). Um dos problemas é o save de cada produto que está no Order, que é executado precisamente em app/code/core/Mage/Sales/Model/Entity/Order/Attribute/Backend/Parent.php, no método afterSave, que demanda MUITO tempo de processamento na minha máquina (Core 2 Duo 2.26/4GB RAM), cerca de 0.3 segundos para cada produto. ...

janeiro 7, 2011

Erro de include no Zend_Loader

Olá. Hoje me deparei com um problema no Zend Framework e seu autoloader de classes, onde uma chamada ao class_exists dispara o autoloader do Zend Framework. A função tem uma opção de não disparar o autoloader, porém, ela sempre retorna false para objetos que são carregados dinamicamente via Zend_Loader. Além disso, se eu uso class_exists sem desabilitar o autoloader, eu recebo um warning o arquivo com a classe não exista, isso por que o Zend_Loader não faz a verificação se o arquivo existe, ele apenas inclui. ...

novembro 1, 2010

Utilizando múltiplas versões do PHP + Apache

Olá. Esta é uma dica para utilizar em ambiente de desenvolvimento e/ou testes, onde é necessário utilizar mais de uma versão do PHP, sem que seja necessário setar uma para todo seu ambiente. Neste caso, a versão será definida via .htaccess, porém, somente é possível utilizar esta técnica se você puder compilar o PHP. É realmente importante pra quem precisa dar suporte a ambientes e/ou sistemas legadosm ou testar a retrocompatiblidade de um código PHP. Parto do princípio que você já saiba compilar o PHP para seu ambiente, se não souber, procure no Google antes. ...

julho 29, 2010