Postagens

Mostrando postagens de 2013

jQuery - removendo opções de uma lista drop down

Uma dica rápida de Jquery. Para eliminar uma linha de uma lista select: $("option[value='2']").remove(); onde value está relacionado a 'value' do markup: <select name="lista" size="10"> <option value="0">Rio de Janeiro</option> <option value="1">São Paulo</option> <option value="2">Salvador</option> </select> ou se existirem outros níveis de selecionadores: $("#identificador option[value='2']").remove(); Abraço

Angular.js - Trabalhando com classes e estilos CSS de modo mais limpo

Imagem
O Angular traz modos interessantes de se trabalhar com estilos CSS, tornando mais automatizadas e limpas certas operações e interação cliente/aplicação. Vamos aproveitar para ver um pouco sobre diretivas do Angular também. As diretivas são propriedades inseridas nas Tags que nos ajudam a trabalhar com as interações do usuário. O Angular.js possui inúmeras diretivas que substituem a prática muito utilizada no Jquery de atribuir eventos a classes ou ids. Se no Jquery precisávamos ligar um evento a uma classe ou id e depois ligar estes a uma função para executar a operação desejada, no Angular.js isto é feito diretamente, atribuindo-se a função diretamente a um evento dentro da Tag desejada, sem a necessidade de utilizar outros tipos de truque. O exemplo abaixo considera dois diferentes modos de se trabalhar com classes e estilos. <html ng-app> <head> <title>Classes</title> <style> .menu-true { color: green; } .outro-estilo

Angular.js - Duas formas diferentes de imprimir valores

Imagem
Uma dica rápida sobre Angular são as formas de se imprimir valores no HTML de sua aplicação. A maneira mais "visual" é utilizando chaves duplas {{}}. O que for inserido dentro destas chaves duplas será considerado como uma variável e seu conteúdo, se este existir, será impresso. <html ng-app> <head> <title>Dois tipos de input</title> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.3/angular.min.js"></script> </head> <body ng-controller='TextController'> <h1>Exemplo</h1> <div> <p>{{content}}</p> </div> <script> function TextController($scope) { $scope.content = "Com chaves"; } </script> </body> </html> No exemplo acima {{content}} é uma variável. A função  TextController() seta o valor de content para  "Com chaves". Temos como saída: Exemplo Com ch

Uma introdução ao Angular.js

Imagem
Pesquisando sobre novas tecnologias me deparei com o Angular JS , um projeto suportado pelo Google. A ideia do Angular JS é oferecer uma alternativa ao Jquery, Ember e outros frameworks. Esta pesquisa me levou também a muitos caminhos sem saída e desinformação. Para evitar que os leitores do blog também fiquem confusos resolvi fazer um post explicando o básico para iniciar no Angular JS. Bom, em primeiro lugar você não precisa de nenhuma configuração ou instalação no servidor. Trabalhar com Angular JS depende apenas da carga de um arquivo .js, que pode ser (aliás é recomendado) linkado diretamente do Google. É basicamente o mesmo procedimento que você faria para carregar a biblioteca do Jquery O serviço está disponível em: http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.js Vamos a um exemplo bem básico, o cálculo de uma soma com Angular JS. Chamaremos este arquivo de angular.html: <html> <head> <script src="http://ajax.googleapis.

HTML5 - Quando usar article ou section?

É comum em algumas situações não sabermos se usamos um markup <article>  ou <section>  pois elas são um pouco ambíguas em alguns casos. Então o que fazer para escolher a melhor sintaxe ?  Usando   <article> article pode ser considerada uma especialização de section . Destina-se a conteúdo que possa estar dentro de sua própria tag sem outros níveis mais profundos. Um post de um blog ou o texto de um artigo pode ser inserido dentro de uma tag <article>. Outros exemplos de conteúdo que podem ser inseridos dentro da tag <article>: Vídeo e sua transcrição Notícias Comentários de um post Abaixo segue um exemplo de markup: <article> <h2><code>nav</code> Não é para <em>Todos</em> os Links</h2> <p>Embora <code>nav</code> várias vezes tenha links, isto não significa que <em>todos</em> os links de um site devam estar dentro de<code>nav</code>.</p> </article&

Juntando duas arrays sem perder os índices.

Algo que estava me irritando há alguns dias atrás era  a questão da junção de duas Arrays em uma única. A função array_merge() do PHP não era satisfatória pois perdia meus queridos indices, presentes nas duas arrays que queria juntar. Tão pouco queria fazer lambanças do tipo usar um foreach() para percorrer as arrays e criar uma nova. Foi então que descobri um método bem prático e simples, que quero passar para vocês. Ele consiste na simples operação de somar duas Arrays. Segue abaixo o exemplo: $equip = array('Computador', 'Impressora', 'Camera'); array (   0 => 'Computador',   1 => 'Impressora',   2 => 'Camera' ) $locais = array('local_1' => 'Escritorio', 'local_2' => 'Banheiro', 'local_3' => 'Sala') array (   'local_1' => 'Escritorio',   'local_2' => 'Banheiro',   'local_3' => 'Sala' ) $equip

PHP - Detectando encode de string e convertendo com mb_detect_encoding

Uma dica rápida é a utilização de mb_detect_encoding() para a detecção do encode de uma string. <?php $str = 'Este é meu texto' echo mb_detect_encoding($str); Resultado: ASCII Vamos criar uma função para identificar e converter uma string: <?php function converte($string) { switch  (mb_detect_encoding($string))  { case 'ASCII': return $string; break; case 'UTF-8': return utf8_decode($string); break; } } echo converte('Este é meu texto'); Por hoje é só!

PHP - Usando REGEXP ou Expressão Regular para selecionar strings com acentos

REGEXP ou Expressões Regulares já sabemos que são bem complicados, mas esta dica é bem tranquila. Quantas vezes você já não tentou selecionar aquelas palavras ou frases e quando percebeu... tinha um monte de acentos! Como consequência ou a palavra não é selecionada ou só um pedaço dela. Vamos começar com o exemplo abaixo utilizando uma frase de Albert Einstein : <?php  $html = "<blockquote><p>mais fácil é explodir um <strong>átomo</strong> que um preconceito.</p></blockquote><p><em>Albert Einstein</em></p>"; preg_match_all('/<strong>([a-z]*)/',$html,$cotacao); var_dump($cotacao); Teremos como resposta: array(2) {   [0]=>   array(1) {     [0]=>     string(8) "<strong>"   }   [1]=>   array(1) {     [0]=>     string(0) ""   } } Nossa REGEXP não foi muito feliz. Queríamos pegar toda a palavra depois de <strong> utilizando

MySQL - Fazendo Update com Subquery

Updates às vezes são bem chatos, principalmente quando devemos atualizar uma determinada tabela baseado em outra. Mas nem tudo está perdido! Podemos utilizar as sempre úteis Subqueries ou Subselects para fazer este tipo de atualização. Vamos definir as nossas tabelas base: Tabela 'site' id nome url tipo acessos 1 Wikipedia Home http://www.wikipedia.org/ home 0 2 Wikipedia NASA http://en.wikipedia.org/wiki/NASA article 0 3 Wikipedia Planetas http://pt.wikipedia.org/wiki/Planeta article 0 Tabela 'tag' id id_site nome 1 2 Agência 2 2 Estados Unidos 3 2 Pesquisa 4 3 Espaço 5 1 Wiki 6 3 Espaço 7 1 Wiki 8 2 Espaço Vamos atualizar na tabela 'site' os campos 'acessos' baseado na tabela 'tag' Primeiro vamos selecionar todas as tags cujo 'nome' seja igual a 'Espaço' SELECT       id_site  FROM       

Bitcoin, a moeda anônima da Web.

O Bitcoin foi muito falado de algum tempo para cá e acredito que muitos programadores, que se interessam pelo assunto "criptografia" com certeza se interessaram ou se interessarão por esta nova moeda. Para quem não sabe o Bitcoin é um moeda criada na Internet e que tem como principal característica permitir transações financeiras de maneira anônima. Isto acontece porque o programa que suporta a moeda funciona baseado em criptografia e, além disto, não utiliza um servidor central. Cada usuário da rede Bitcoin funciona como uma espécie de validador. O assunto é muito interessante e vale a pena ser pesquisado. Neste link você pode saber mais detalhes da história por trás do Bitcoin e varias outras curiosidades . Se você pesquisou sobre o assunto ou já usou a moeda deixe seu comentário. Abraço

Instalando o Zend Framework no Windows

Imagem
Existem muitos frameworks no mercado e um dos principais é o Zend Framework . A função de um framework é tornar mais rápido o desenvolvimento de aplicações. Para isto um framework trabalha com orientação a objetos, utilizando classes que podem ser reaproveitadas em várias partes da aplicação. Além disto um framework trabalha com a estrutura chamada VMC que separa o que é visto pelo usuário (View) da lógica da aplicação (Model) e utiliza um mediador entre as duas que pega o que o usuário fez e o envia para a lógica da aplicação (Controler) Vamos assumir que você tem o PHP e o Apache instalados. Aqui vamos seguir o procedimento com o XAMPP instalado C:\xampp\ . Vamos criar uma pasta específica para os projetos com zend, já que podemos utilizar vários frameworks para fazer diferentes aplicações. Nossa pasta base será C:\xampp\htdocs\zend Baixando o Zend Framework O Zend pode ser baixado em http://framework.zend.com/downloads/latest . Dentre as opções baixe a Zend Framewo

PHP/MySQL - Usando array_keys e implode para criar inserts no MySQL

Vimos em um artigo anterior uma técnica interessante para passar parâmetros para funções, classes ou métodos . Hoje vamos a uma dica rápida utilizando o conceito acima mais as funções array_keys e implode do PHP para criar uma função que monta um insert para o MySQL . O Codeigniter e outros frameworks possuem helpers que usam uma idéia parecida, ou seja, inserimos o nome de uma tabela e pares chave=>valor através de uma array e o helper cria a query e a executa no banco de dados . Poderíamos fazer o procedimento utilizando foreach() , mas eu acho muito deselegante utilizá-lo no contexto em que estamos, além do que é melhor utilizar sempre funções internas do PHP (quando possível) do que fazê-las 'na mão', pois a função compilada é bem mais eficiente do que a interpretada. Neste caso que estamos abordando talvez nem fizesse tanta diferença, pois usamos poucos parâmetros e chamamos três vezes as funções internas, mas serve como uma boa ilustração de uma maneira

PHP/MySQL - Organizando melhor as subqueries

Imagem
Em um artigo anterior tratei das Subqueries como sendo uma espécie de tabela virtual, utilizada para pré selecionar dados . Hoje vou mostrar uma dica rápida para organizar melhor nossas Querie s utilizando este conceito de Subquerie . É sabido que uma Query pode virar um monstro rapidamente se tivermos de fazer algo muito específico como o intuito de evitar outras Queries . Explico melhor: Em algumas situações temos de efetuar duas, três, quatro Queries separadas no banco de dados , juntar tudo isto via PHP ou seja lá o programa que se esteja usando, para retornar a informação completa de que necessitamos. Porém, em grande parte dos casos, ao invés de usar este tipo de "gambi" podemos fazer um Select mais robusto, mas que envolve Subqueries , ou seja, uma Query dentro de outra na mesma consulta. Este tipo de abordagem pode levar a "monstros" como o exemplo abaixo: $query = " SELECT * FROM ( SELECT *, @var := @var +

MySQL - REGEXP (EXPRESSÕES REGULARES) no MySQL

Expressões regulares são um tema, diriamos, meio "cabeludo" pois a sua sintaxe não ajuda muito no quesito "dicas de como funciona". Geralmente trabalhar bem com REGEXP significa muito tempo de prática para "pegar o jeito" mais do que decorar livros ou soluções prontas. Mas não é por isto que vamos desanimar de trabalhar com elas, pois são extremamente poderosas. O que alguns podem não saber, ou sabem mas não estão familiarizados, é que podemos utilizar também nos bancos de dados as famosas REGEXPs , alguns com mais outros com menos restrições. As REGEXPs também nos passam a falsa ilusão de que podemos utilizá-las não só para filtrar dados mas também para pegar "pedaços" da informação já selecionada. Vamos tratar disto mais adiante. Nosso foco hoje é ver um pouco das expressões regulares aplicadas no MySQL , as armadilhas, equivocos e soluções desta ferramenta tão poderosa. Infelizmente o MySQL não aceita todas as REGEXPs que, por exemplo

PHP - Redirects com header() para SEO e demais finalidades

Hoje vou apresentar uma dica rápida: header('Location:') e redirecionamento de URLs. Headers em PHP são um assunto bem extenso e que merecem outros artigos e por isto hoje o foco será o 'Location'. As formas abaixo são as maneiras mais fáceis de se fazer redirects de vários tipos, ou seja, varios 'significados' para o browser e para os robôs de busca. // 301 Movido permanentemente header("Location: /foo.php",TRUE,301); // 302 Encontrado (se não forem fornecidos parametros assume 302) header("Location: /foo.php",TRUE,302); header("Location: /foo.php"); // 303 Ver outro header("Location: /foo.php",TRUE,303); // 307 Redirecionamento temporário header("Location: /foo.php",TRUE,307); Se você está utilizando header('Location:') é uma boa prática incluir os parâmetros adicionais para que os robôs e browsers possam compreender melhor o que está ocorrendo com sua página. Da lista acima acredit

PHP - Gerando arquivo em UTF-8 com fwrite() e utf8_encode()

Encontrei uma dica muito interessante do "cutmaster at fearlesss dot com" que postou no site php.net. Ele mostrou como gerar um arquivo realmente no formato UTF-8. Segue a tradução de seu post. "Para aqueles que, como eu, gastaram muito tempo para entender porque fwrite() não criava arquivos utf-8 de verdade, aqui vai uma explicação que encontrei: Tentei fazer algo com:" <?php myString = utf8_encode("Test with accents éèàç"); fh=fopen('test.xml',"w"); write($fh,$myString); close($fh); "Por alguma razão misteriosa, o arquivo gerado traz os acentos sem o padrão utf-8. Tentei binário, etc. etc. e finalmente encontrei a solução. Parece que fwrite() PRECISA ter a função utf8_encode() DENTRO de seus parâmetros, como segue abaixo." <?php $myString = "Test with accents éèàç"; $fh=fopen('test.xml',"w"); fwrite($fh,utf8_encode($myString)); fclose($fh);

PHP - Enviando parâmetros para funções e métodos via Array

Quero propor hoje uma nova metodologia. Tenho testado ela em aplicações e tem sido bem interessante. A passagem de parâmetros via Array associativa  (pares de "chaves, valores"). Adianto que não necessariamente este é o melhor método que existe mas ele é bem prático se compararmos com a metodologia comum de passagem de parâmetros. O que é? Bem, não existe novidade alguma no aspecto técnico deste procedimento. Ele é mais uma metodologia de uso. Um grande problema da programação são as refatorações, ou seja, quando temos de implementar algo novo ou corrigir uma falha. Neste cenário está a passagem de parâmetros para uma função, método ou construtor de classe. Já aconteceu comigo várias vezes de ter de criar tantos parâmetros para um método que eles chegava a sumir da tela! E quando temos de colocar um novo? Devemos lembrar, é claro, que a sequência de parâmetros, ou seja, sua ordem na chamada, deve ser a mesma que na função ou método. E se trocamos esta ordem... coisa

PHP - REPL, teste códigos php assim como no console do FireFox ou Chrome

Imagem
Em minhas pesquisas semanais descobri algo muito interessante que quero dividir com vocês e que se chama REPL. Opa, mas o que é isto? O título deste post provavelmente já deu uma pista. REPL (Read-Eval-Print Loop) é um interpretador de linha de comando que executa seu código assim que você aperta o Enter. Se você já trabalhou com Javascript e já fez testes no painel de desenvolvedor do Chrome ou no FireBug do FireFox sabe bem do que estou falando. O PHP também possui um REPL. Para ativá-lo no Linux basta abrir um terminal e digitar: $php -a Deve aparecer em seu terminal o seguinte: php >  Isto indica que entramos no REPL do PHP. Podemos 'brincar' agora com o REPL. php > echo "Ola REPL"; Isto retorna: Ola REPL Um uso interessante do REPL é testar expressões regulares, que são bem chatas, e que sempre temos de testar bastante (pelo menos eu) para encontrar o melhor comportamento. php > echo preg_match('/[0-9]+/','Aqui tem

PHP - xml_encode(), função que converte uma array para XML semelhante ao json_encode()

A algum tempo estava precisando gerar dados no formato XML a partir de um banco de dados. Havia um sistema legado que gerava arquivos .html e tentei entender a lógica como um todo e... acabei desistindo. As páginas eram geradas através de preenchimento de Templates e, para XML, esta solução seria muito, muito complicada e chata. Comecei a criar uma classe específica para a geração dos XMLs diretamente do banco de dados e baseada em array, criando a estrutura do XML dentro desta array, assim como fazemos com a função json_encode(). Foi quando percebi que também seria difícil fazê-lo pois não existe uma função nativa no PHP semelhante a json_encode(). O que existe é a biblioteca SimpleXML mas mesmo esta não possuía nada que fosse prático para meu problema. Foi ai que pesquisei pela Web e encontrei no link abaixo uma solução muito interessante. http://darklaunch.com/2009/05/23/php-xml-encode-using-domdocument-convert-array-to-xml-json-encode Infelizmente esta solução não contempl