Postagens

Mostrando postagens com o rótulo programação

GIT - Comandos uteis

Imagem
  A breve lista de comandos úteis do GIT deste post estão muito longe de esgotar todas as possibilidades. Marca o arquivo para remoção git rm <file> Desfaz um git add em <file> git reset <file> Reverte um único arquivo para seu ultimo commit git checkout <filename> Vai para um commit qualquer (semelhante a mudar para um branch $ git checkout <branch_name>) git checkout <commit_hash> Volta para o HEAD do seu branch atual git checkout master Exibe os logs de atualização em linhas git log --oneline Exibe quais branches foram foram adicionados ao Master git log --oneline --decorate Verifica o conteúdo modificado antes de dar um add git diff <filename> Verifica o conteúdo modificado após um add git diff --cached Verifica o conteúdo modificado comparado com o último commit git diff HEAD Se esquecer de commitar um arquivo basta colocar este arquivo no stage dando um 'gi...

Ocultando arquivos e diretórios que não se deseja versionar com GIT usando gitignore

Imagem
É comum no diretório em que estamos desenvolvendo uma aplicação existirem arquivos e pastas que não queremos versionar e nem que apareçam ao dar um ' git status '. Pastas com imagens, arquivos de log e etc. são alguns exemplos. Para facilitar nossa vida é possível fazer o GIT ignorar tais arquivos e pastas. Basta criar um arquivo chamado ' .gitignore '. O exemplo abaixo é o padrão do arquivo e pode ser copiado e alterado dependendo de suas necessidades. # Compiled source # ################### *.com *.class *.dll *.exe *.o *.so # Packages # ############ # it's better to unpack these files and commit the raw source # git has its own built in compression methods *.7z *.dmg *.gz *.iso *.jar *.rar *.tar *.zip # Logs and databases # ###################### *.log *.sql *.sqlite # OS generated files # ###################### .DS_Store .DS_Store? ._* .Spotlight-V100 .Trash...

Dicas de livros para iniciar no Git

Imagem
Imagem original em  blog.rjs.in   Programas de versionamento são indispensáveis para o desenvolvimento em equipe. É ele quem fará o controle das atualizações, mesclará as inúmeras partes dos vários desenvolvedores e manterá todo o trabalho coeso. Mas diferente do que se pensa os programas de versionamento podem ser também usados por desenvolvedores solitários, apenas localmente em suas máquinas. Assim estes programas ajudam tanto a organizar as atualizações e o fluxo de trabalho assim como também podem ser utilizadas como backup. Git é um dos mais famosos sistemas de versionamento e nasceu como um projeto para organizar o desenvolvimento do kernel do Linux, que envolve inúmeros programadores ao redor do mundo. Controlar cada alteração e acrescentá-la ao código final seria uma tarefa impensável sem um fluxo organizado e um gerenciador que controle as alterações de cada um. Este é o espírito do Git. Git X GitHub Uma coisa interessante de citar é a confusão em tor...

Livro 'PHP Master' é uma boa dica para quem quer se aprimorar na linguagem.

Imagem
Os livros de programação e TI não são literatura e por isso geralmente são bem difíceis de ler de cabo a rabo. É comum lermos um ou outro capítulo que nos interessa mais e de vez em quando consultá-lo para tirar alguma dúvida. Além disso hoje é mais fácil consultar o Google e encontrar um código ou exemplo pré-pronto e adapta-lo, muitas vezes na tentativa e erro, do que ler um livro sobre o assunto. Porém de vez em quando é interessante ler um livro não apenas para resolver questões técnicas específicas ou um problema pontual mas para adquirir fundamento teórico sobre o que estamos trabalhando, algo que não necessariamente um tutorial será o suficiente. Assim ler um livro técnico sobre determinado assunto acaba sendo uma opção inteligente, especialmente se é uma tecnologia ou assunto muito novo. 'PHP Master' da Sitepoint é um tipo de livro destes que você deve ler do começo ao fim. Ele é dedicado a programadores PHP intermediários ou que sabem algo sobre orientação a...

AngularJS - Aplicando filters através do Controller

Trabalhar com data pode ser bem chato, porém com o Angular JS é muito tranquilo. Vamos criar um script que pega a data atual e a formata no padrão brasileiro, ou seja, Dia/Mês/Ano hora:minuto:segundo. Segue abaixo o exemplo: <html ng-app="app"> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.3/angular.min.js"></script> <script> var appModule = angular.module('app', []); function General($scope, $element, $http, $filter) { $scope.datahora = $filter('date')(new Date(), 'yyyy-MM-dd HH:mm:ss'); } </script> </head> <body ng-controller="General"> <p>Data</p> <span>{{datahora}}</span> </body> </html> 'General' é nosso controller. O detalhe aqui é incluir o parâmetro ' $filter ' na declaração da função do controller. Com isso poderemos trabalhar com os filtr...

PHP - Utilizando proxy e CURL para acessar servidores ou sites

Imagem
Proxies são extremamente úteis, principalmente para usuários avançados, e se você não sabe exatamente o que são recomendo a leitura deste artigo da Wikipedia . Resumidamente um proxy é uma máquina que fica entre você e a Internet. Acessar a Web por um proxy fará com que os servidores que você acessa enxerguem não o seu endereço mas o endereço desta máquina intermediária. Você pode precisar utilizar um proxy caso a rede da sua empresa não permita acessar um Facebook, Twitter ou outro site qualquer, caso seu IP tenha sido bloqueado por algum administrador de site, queira testar o acesso de diferentes usuários em seu site e outros usos menos ortodoxos. Por suas características peculiares proxies devem ser usados com cuidado, principalmente se você pensa em acessar serviços utilizando alguma senha. Hoje vamos criar uma classe que utilizará um proxy para acessar qualquer URL com a ajuda do CURL do PHP. Vamos considerar que o proxy que você utiliza é aberto, ou seja, não necess...

Linux - Utilizando o comando DIFF para comparar diferenças entre arquivos em diferentes pastas

Um comando do Shell Linux muito interessante e útil é o 'diff'. Utilizo ele tanto para verificar as diferenças entre arquivos gerados por um sistema em que fiz alguma atualização quanto para verificar diferenças no código entre versões de arquivos de aplicações. Sua utilização é muito simples: $ diff /diretorio1 /diretorio2 | cat > /diretoriodesaida/diferencas.txt Explicando o comando acima: 'diff' verifica a diferença entre os arquivos nas pastas 'diretorio1' e 'diretorio2', inclusive diferenças dentro dos arquivos. '| cat > /diretoriodesaida/diferencas.txt' direciona a saída padrão da tela para um arquivo, ou seja, os resultados da análise poderão ser checados no arquivo 'diferencas.txt' Dentro do arquivo gerado 'diferencas.txt' estão indicados todos os trechos que foram modificados entre dois arquivos de mesmo nome ou as diferenças entre quantidades de arquivos.

Javascript - Comportamentos diferentes para incremento de valores com ++ antes e depois da variável

Hoje vamos tratar de algo que aparentemente é muito bobo mas que na verdade não o é e costuma trazer grandes problemas quando utilizado de maneira errada: o incremento em variáveis. O incremento está presente em inúmeras linguagens de programação. Os exemplos que apresentarei aqui são baseados em Javascript , porém eles são válidos também para PHP e outros. Acredito que todos sabem que para incrementar ou decrementar (adicionar ou subtrair) uma unidade a uma variável, ao invés de fazer isso: $a = $a + 1 Podemos fazer isso: $a++ ou isso: ++$a Bem, acredito que todos sabem deste truque, mesmo porque é a primeira coisa que aprendemos quando iniciamos na arte de programar, porém você sabe qual a diferença entre ambos? Vamos rodar um javascript bem simples para exemplificar o que acontece: $a = 0; $b = 0; $a++; ++$b; console.log($a); console.log($b); É provável que você obtenha como resultado: 1 1 Bem, até ai parece que não existem diferenças, correto? Inic...

PHP - Rodando PHP pela linha de comando: passando parâmetros

Imagem
Para quem não sabe o PHP pode ser rodado via linha de comando, seja no Linux, DOS ou MAC e não somente via browser. Podemos rodar um script desta forma (no DOS): c: \xampp\htdocs\>php meuscript.php Pelo browser podemos passar parâmetros usando os caracteres ? e & como separadores localhost/meuscript.php?parametro=linha E no script 'pegamos' este parâmetro através do $_GET. Pela linha de comando $_GET não consegue pegar parâmetros. Desta forma devemos modificar nosso script de forma a receber os parâmetros imputados via linha de comando. A variável interna $argv captura os parâmetros imputados: <?php var_dump($argv); Agora podemos rodar o script e enviar os parâmetros: c: \xampp\htdocs\>php meuscript.php linha Veremos como saída: Array(2) {   [0] => string(16) "meuscript.php"   [1] => string(5) "linha" } Ou seja, os parâmetros são reconhecidos pelo script como uma array de valores. É isso ai!

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 - 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...

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...

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 - 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 Infelizme...