Postagens populares

quinta-feira, 26 de abril de 2018

Tiny Library to manage Bootstrap 3 modals

When you need more than 2 modals at the same screen, it's HTML injection becomes painful to manage. Modal Utils create them "on the fly" an manages unique ids and dynamic buttons.

https://github.com/marcoiai/modal

Enjoy!

quarta-feira, 11 de novembro de 2015

Doctrine 2 Generic Paginator

Sometimes you need to write DQL's for the fast bulding time it gives you, other times you need intricate  queries that cannot be built or are very expensive in DQL.

Pagination of each of these is a pain in the ass. Don't suffer no more!

It is based on PagerFanta for Doctrine 2: Pagerfanta

Doctrine 2 Generic Paginator

It works with either DQL or SQL queries built by respective Query Builders.

Pagerfanta supports adapters, but it is the same concept, except that i have encapsulated.

$qb = new QueryBuilder($this->getDoctrine()->getConnection()); $pag = new DoctrinePaginator($qb, 'COUNT(a.id) as total_rows'); $pag->setMax(25); $pag->setPage($this->getRequest()->query->get('page', 1)); $pag->getResults();

No need to thank ;)

quinta-feira, 8 de outubro de 2015

Função CAST em Doctrine 2 DQL e Symfony 2

Tive a necessidade de utilizar a função CAST em uma consulta utilizando DQL(Doctrine Query Language). Fiquei surpreso pois não existia nada pronto, mas o pessoal do Doctrine não dá ponto sem nó, e para tal existem as funções personalizadas (Custom Functions). Tudo bem, tem que aprender toda a notação, que utiliza umas constantes "malucas", e, por isto, resolvi liberar para quem quiser utilizar, a classe já pronta, falta apenas configurar no Symfony 2. 

 Siga os passos e implemente em seu projeto: 

1 - Baixe o arquivo deste repositório: Doctrine 2 Tips and Tricks .

2 - Ajuste a diretiva (geralmente localizada no arquivo config.yml):

doctrine:
        orm:
            entity_managers:
                default:
                    dql:
                        string_functions:
                            Cast:
                                Path\Namespace\DQL\Cast


Limpe o cache e utilize a função dentro da Query DQL:
SELECT CAST(column AS TYPE)

That's it!

terça-feira, 14 de julho de 2015

Como pegar o Referer no Symfony 2

Prelúdio

O Symfony 2 é um ótimo framework em minha opinião, mas devido ao tamanho que tem hoje em dia, a documentação tem se mostrado ineficiente em apresentar algumas coisas. Comento abaixo uma delas: o uso do referer.

Atente para o fato de que no meu caso (e na maioria deles) acabamos por optar a utilizar uma autenticação personalizada. Se vc utiliza a autenticação "automática" acredito que vc só precisa utilizar o use_referer (mas não tenho certeza pq não utilizo desta maneira).

Logo de saída, o pensamento de qualquer um seria pegar o parâmetro referer, que, os mais antigos sabem, reside na superglobal (em teoria) $_SERVER['HTTP_REFERER'].

No caso do SF2, ao procurar na documentação vc logo fica sabendo que o SF2 alterar e "sanitiza" as superglobals, além do fato de alguns browsers não repassarem a mesma para o server. Mesmo assim vc tenta, da maneira "symfony":

$request->headers->get('referer')

Sem sucesso!

Mas #comofaz?

O SF2 tem milhares de parâmetros para configurar milhares de coisas. Uma delas é a configuração dos firewalls, os verdadeiros responsáveis por verificar o acesso a determinadas rotas.

Um dos parâmetros é o "use_referer" situado dentro de CADA firewall (vc pode ter várias) porém ao contrário do que pensaríamos (sei que eu pensei) o dado não estará situado no referer propriamente dito, mas sim em uma diretiva chamada "target_path" residente na sessão, desde que ativada a outra diretiva "use_referer", armazenará a última URL que redirecionou para o login (só leva em conta requests do tipo GET e não armazena as url's de autenticação).

Sabendo disto, utilize o seguinte método para resgatar o referer (target_path):


*Symfony 2.1 em diante

$this->container->get('session')->get('_security.nome-do-seu-firewall.target_path') ou $session->get('_security.nome-do-seu-firewall.target_path')

*Symfony 2.0 ou anterior

$this->container->get('session')->get('_security.target_path') ou $session->get('_security.target_path')
Também está na própria documentação, um passo a passo de como personalizar o método que grava o target_path caso vc tenha necessidades específicas:
http://symfony.com/doc/2.2/cookbook/security/target_path.html



Há!

quarta-feira, 18 de setembro de 2013

Alterar atributos de um FEATURE no OpenLayers carregado de um arquivo KML

Arquivos KML no Open Layers são ótimos, mas como o arquivo já está pronto, não existe indicação clara na documentação para alterar alguns dos atributos (claro, em teoria estes atributos já viriam preenchidos do KML) como ID, DESCRITPION ou TITLE (estilo e outras informações podem ser personalizados também para o formatador - veja no mesmo link: #OpenLayers.Format.KML.parseAttributes). No meu caso, todos os features de um kml recebem o mesmo titulo e descrição, mas com um pouco mais de trabalho pode-se personalizar individualmente os features.



Voilà ;)

terça-feira, 8 de novembro de 2011

Expressão Regular - Somente Números

Eu estava procurando por isto, quando o meu amigo Pedro MelloM ( :P ) me passou a dica, que acredito será útil para muitos.

Normalmente vc utiliza \d (minúsculo) para achar qualquer número. \D (maiúsculo) é a negação, ou seja, qualquer NÃO número. Você então usa uma regexp_replace e substitui \D (não números) por (string vazia).

Fica assim no postgreSQL (o g é um modificador para ele substituir todas as ocorrencias, e não apenas a primeira): regexp_replace('111.222.333-67', '\\D', '', 'g')

Resultado: 11122233367

Tanto em POSIX como PERL tem esta classe de caracter ( \D ).

Pronto, o que sobram são os números heheheheeu

quinta-feira, 25 de agosto de 2011

Primeiros passo no QT

Estou aprendendo a programar utilizando o QT.

Muita coisa boa! Nerd é uma desgraça mesmo né? rs

Pois bem, demorei para descobrir como fazer (sim, usei o google, mas vc acha "cada" solução de 500 linhas de código hehehehe) um efeito de "fade-in" e, lógico, se fizer ao contrário, "fade-out".

Inseri este trecho no método show() do widget.

setGraphicsEffect(new QGraphicsOpacityEffect(this));

QPropertyAnimation *animation = new QPropertyAnimation(graphicsEffect(), "opacity");
animation->setDuration(1000);
animation->setStartValue(0.);
animation->setEndValue(0.9);
animation->start();


Há! Difícil?

quinta-feira, 18 de agosto de 2011

Motorola Xoom wireless: decepção para muitos

Meu Motorola Xoom chegou!

Muito legal não?


Não!

hahahaha

Comprei o modelo wireless ao invés do 3G pensando em utilizar meu N95 ou IPHONE compartilhando a conexão 3G que já possuo.

Me ferrei. Nos ferramos!

Muita gente fez o mesmo, e pasmem, o Android não conecta em AP em modo Ad-Hoc!

Todo mundo tira o corpo fora, a Motorola diz que é culpa do google, os developers do google dizem que a tecnologia é obsoleta e não aceitam fazer a ajuste. O ticket aberto para o problema data de 2 anos atrás!

Mas eis que surgiu uma luz (para quem não tem medo de perder a garantia): em um deste forums de Phreaks, um cidadão conseguiu com apenas um ajuste em UM ARQUIVO (ISSO MESMO, 1) fazer com que o dispositivo conecte sem problemas. Só que vc tem que pegar o ROOT para fazer isto, e pode danificar o aparelho fazendo o mesmo.

Poxa gente, UM ARQUIVO? É tão difícil assim fazer este ajuste? Vejo a motivação capitalista por trás disto, mas vejam, comprei um wireless para acessar hotspots por aí, e vejam, muitos mais antigos utilizam Ad-hoc! COMO FICA?

Fora este problema, o tablet é fantástico, o Android 3 também ficou bom (ÓTIMO não né, já que não faz uma simples conexão Ad-hoc).

E a Motorola também tem culpa sim, podia pressionar a equipe do Android (principalmente agora que foi adquirida pela google) pois isto seria um item de excelencia para o equipamento, pois para mim e muitos outros é uma GENEROSA FALHA DE DESENVOLVIMENTO DO APARELHO.

See ya!

segunda-feira, 15 de agosto de 2011

Tirinha!

http://vidadeprogramador.com.br/2011/08/04/quanto-custa-um-portal/

Nossa classe sofre! hahuhuhauahhuauah

quarta-feira, 10 de agosto de 2011

Ternary Operators - mais rápidos que IF convencional?

Artigo interessante do gerente de projeto do symfony, Fabien Potencier.

Este cara é demais, olha a análise que ele fez. Não faz grande diferença, mas para quem é programador é interessante, porque é sedutor pensar que o ternary operator é mais rápido, quando na verdade não é, e faz todo o sentido!

http://fabien.potencier.org/article/48/the-php-ternary-operator-fast-or-not

Há!

segunda-feira, 18 de julho de 2011

Método preventDefault() do evento dos browsers

Uma dica para quem trabalha com atribuição de eventos e precisa impedir o browser de executar uma ação padrão, como o click de um botão ou submit de um form: método preventDefault();

É um método que existe por padrão, no evento dos browsers, e você pode utilizá-lo ao invés de retornar false para evitar a execução do evento original.

Apenas chame o método a partir da variável que contém o evento.

Ex.:

function submitForm(event) {
event.preventDefault(); //previne que o browser submeta o form

seu código personalizado;

}

Fácil mas muito útil!

sexta-feira, 29 de abril de 2011

Função empty do PHP e importância de ler a documentação

Um exemplo rápido que me pegou desprevinido por não ler atentamente a documentação: a função empty do PHP retorna TRUE para um array com um indice de valor nulo.

Ex.: ARRAY[ 0 => null ]

Está certo que eu esperava um array vazio, mas na conversão do xml para a aplicação ele criou este índice. Quando verifiquei o que estava acontecendo, primeiramente imprimindo o valor da variável, achei que o teste deveria retornar TRUE pois zero => null = NADA  não é mesmo?

Lendo rapidamente a documentação (no site oficial, SEMPRE) ele afirma que o empty retorna TRUE apenas para um array TOTALMENTE vazio, ou seja:
ARRAY[]. Faz sentido, afinal 0 no array será um índice, e não, NADA.

Por isto, sempre é bom conhecer bem a função que você está utilizando e verificar possíveis outputs que você atribuirá (ou receberá como no meu caso) para as variáveis.

That's it!

segunda-feira, 25 de abril de 2011

Calculo de dias com campos data no POSTGRESQL

Para retirar a quantidade de dias baseada em um campo de data ou timestamp, o POSTGRESQL permite realizar estes cálculos de maneira bem prática.

Como exemplo, tenho o campo locacoes.saida (timestamp da tabela locacoes) de um DVD. Quero calcular quantos dias, até agora, ele esta com o cliente sem levar em conta as horas:

SELECT (CURRENT_DATE - locacoes.saida::date) FROM locacoes;

O resultado desta conta será o total de dias que se passaram da data de saida do DVD. Repare que o TYPECAST  para date é importante, e somá-lo a outro tipo DATE também. Se ao invés disto, vc fizer:

SELECT (NOW() - locacoes.saida) FROM locacoes;

ele retornará algo como: "4 days 17:51:23.338403" que é o tipo INTERVAL no banco, levando em conta as horas.

Existem mais coisas que se pode fazer com datas no POSTGRESQL, leia a seção no manual do postgresql que é muito interessante.


Thats it!

segunda-feira, 28 de fevereiro de 2011

A rede social: nada de novo...

Assisti o filme "A rede social" neste final de semana.

Oscar? Roteiro original? "Pera" lá né Holywood, só um idiota para aclamar tanto assim um filme que conta a história banal de mais um programador tentando alavancar um projeto na web. A diferença? Uma sucessão de acontecimentos a favor do nosso "herói" mas que a sorte apenas escolheu como sendo Zuckerberg.

Poderia ser qualquer um de nós, quem já não teve um projeto como este? Uma idéia, original ou não, com muitas horas de programação e pouca grana para tocar. O Orkut já não existia? Existia sim! O que diferenciou o Facebook dos outros? Exclusividade. Sim, o Orkut também necessitava de convites, mas no Facebook, somente quem era de Harvard poderia entrar.

Parabéns ao cara por ele ser um escroto com caruda suficiente para deixar para trás até o melhor amigo...

Mas tudo bem, ele é bilionário e nós estamos aqui, tentando...

quarta-feira, 9 de fevereiro de 2011

Apagão no Nordeste

Sério.

Falem sério.

A desculpa que conseguiram dar até agora para o apagão foi de que "um cartão magnético emitiu um sinal errado blah blah blah blah blah..." ops, me perdi no sinal errado, desculpe.

Muita besteira em uma frase só. Que desculpa mais esfarrapada. Cartão magnético emitindo sinal? Estes senhores estão ofendendo minha inteligência. Nossa inteligência... Quer dizer, inteligência de alguns brasileiros... Quer dizer, inteligência de poucos brasileiros, afinal, os eleitores deles acreditaram nisso...

Esconder o real motivo porque?

Sério.

Tá de brincadeira?


SÉRIO!

domingo, 12 de setembro de 2010

Open SSL e Certificados no Apache: autenticação mútua

O melhor guia que encontrei para autenticação mútua entre Apache e Cliente.

Contém um tutorial para gerar: CA, chaves, certificados e tudo que você precisa para um ambiente de desenvolvimento com certificados digitais para web:

http://www.cafesoft.com/products/cams/ps/docs30/admin/ConfiguringApache2ForSSLTLSMutualAuthentication.html



Isso aí!

sábado, 11 de setembro de 2010

Recriações de jogos dos anos 80!

http://www1.folha.uol.com.br/multimidia/videocasts/796802-pac-man-humano-usa-111-pessoas-para-recriar-jogo-classico.shtml

quarta-feira, 25 de agosto de 2010

Utilizando a mesma sessão do browser em Applets Java

Ao surgir a necessidade de auntenticar um e-token no navegador, utilizei o Java. Porém não imaginava como seria difícil manter a sessão do ususário através do plugin.

Pesquisei na documentação e outras fontes, mas estava difícil. Aparentemente se você faz uma chamada detro do Applet, utilizando a classe URLConnection, é uma chamada totalmente diferente.

Mas existe uma solução simples, e que pode evoluir até para algo mais elegante, mas me atenho ao básico que é minha necessidade no momento.

Ao chamar a tag (embed, object ou applet) passe como parametro o nome e o valor do cookie que controla sua sessão. Em PHP fica assim:
<param name="cookie_name" value="nome-do-cookie >
<param name="cookie_value" value="" >

Capture dentro do Applet o valor:
String cookie_name = getParameter('cookie_name');
String cookie_value = getParameter('cookie_value');

 E ao realizar a chamada para a url que deseja, passe o cookie:
URLConnection conn = new URLConnection(url);
conn.setRequestProperty('Cookie', cookie_name + "=" + cookie_value);

Pronto.

Existe uma maneira de pegar os sent headers, dentre eles os cookies enviados, automaticamente e em um laço, repassá-los adiante, mas como eu comentei antes, não foi minha necessidade algo tão elegante.


Keep it simple!

quinta-feira, 5 de agosto de 2010

Dica: Remover o cache de applets da máquina virtual JAVA

Essa é para quem já se bateu muito (que nem eu hehe) - como remover o "maldito" cache de applets JAVA no navegador.

Existe um diretório que armazena o cache dos applets e não existe uma forma de remove-lo, a não ser manualmente.

Para fazer isto, procure por um diretório com um nome parecido:
/home/usuario/.java/deployment/cache

Dentro deste diretório "cache" ele cria o diretório 6.0 (meu JDK é a versão 6, imagino que na 7 ele criará 7.0 e assim por diante) e dentro deste, um diretório com nome numérico começando pelo 0 e daí para a frente para cada execução.

Após a limpeza, é necessário fechar o browser e abri-lo novamente, caso contrário ele não encontrará nenhuma classe de nenhum applet que você tentar carregar.

That's it.


Há!


P.S.: JAVA SUCKS!

quarta-feira, 21 de julho de 2010

Dica: como carregar helpers do Symfony além dos templates

Quem trabalha com Symfony pode aproveitar esta dica muito útil: carregar helpers em qualquer outro lugar além dos templates, como dentro de uma action por exemplo.

Para isso, digite:

sfLoader::loadHelpers(array ('HelperName1', 'HelperName2'));

Pronto!



Há!

Magazine Luiza