Tips

Zend Framework 2 Tips: Usando Doctrine em testes unitários

Posted on março 14, 2013. Filed under: PHP, Tips, Zend Framework | Tags:, , , |

Introdução

Neste artigo vamos aprender como instanciar o Entity Manager do Doctrine nas classes de teste unitário no Zend Framework 2. Se você usa Doctrine no seu projeto, é bem provável que algumas classes que precisará testar possuem a dependência do Entity Manager. É sobre isso que trata esse artigo.

Caso necessário, em artigo anterior, já vimos como instalar os módulos Doctrine, ZFTool e Firephp no Zend Framework 2.

Registrando os módulos do Doctrine no Config de testes

Se você criou seu módulo do Zend Framework através do ZFTool provavelmente foi criado uma pasta chamada test/ dentro do diretório pai do seu módulo. No caso de exemplo do módulo Application, que já vem instalado no esqueleto inicial do projeto, o caminho ficaria: module/Application/test/.

O primeiro passo é registrar os módulos do Doctrine dentro do arquivo TestConfig.php.dist que esta dentro do diretório test/ do seu módulo:

<?php
// module/Application/test/TestConfig.php.dist
return array(
    'modules' => array(
        'Application',
        'DoctrineModule',
        'DoctrineORMModule'
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            '../../../config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            'module',
            'vendor',
        ),
    ),
);

Bootstrap

Existe um arquivo chamado Bootstrap.php dentro do diretório test/ do seu módulo. Esse arquivo é responsável por inicializar todos os parâmetros necessários para que você possa trabalhar com testes unitários no Zend Framework.

Vamos criar dentro do arquivo Bootstrap.php um método estático que será responsável por retornar o Entity Manager do Doctrine. É através deste método que vamos acessar o Entity Manager em nossos testes:

<?php
// module/Application/test/Bootstrap.php
..
    public static function getEntityManager()
    {
    	$sm = static::getServiceManager();
    	return $sm->get('doctrine.entitymanager.orm_default');
    }
    
}

Bootstrap::init();

Acessando o Entity Manager

Por final, vamos acessar o Entity Manager dentro de nossas classes de teste. Podemos estar testando um Controller, um Model ou qualquer outro componente. Basta chamarmos o método estático Bootstrap::getEntityManager();.

Não se esqueça de usar o namespace do Bootstrap no início do seu script:

<?php
// module/Application/test/ApplicationTest/Model/AlbumTest.php
namespace ApplicationTest\Model;
use ApplicationTest\Bootstrap;
//.... setUp, etc.

public function testAlbum()
{
	$em = Bootstrap::getEntityManager();
	$album = new Album($em);
}
Ler Post Completo | Make a Comment ( None so far )

Java Tips: Operações com JTable parte 3

Posted on dezembro 18, 2012. Filed under: Java, Tips | Tags:, |

Introdução

Vamos mostrar mais algumas dicas interessantes da class JTable do Java. Outras dicas do JTable podem ser encontradas nos posts anteriores:

Java Tips: Operações com JTable parte 1
Java Tips: Operações com JTable parte 2

  1. Manipulando o conteúdo da tabela
  2. 
    // inserindo dados em uma tabela com 4 colunas
    DefaultTableModel tableModel = (DefaultTableModel) minhaTabela.getModel();
    tableModel.insertRow(tableModel.getRowCount(), new Object[]{ "Douglas", "Villanacci", "douglas.pasqua@gmail.com", "11111111"});
    tableModel.insertRow(tableModel.getRowCount(), new Object[]{ "Fulano", "da Silva", "fulano.silva@blalbla.com", "11111111"});
    
    // limpando todo o conteúdo da tabela
    DefaultTableModel tableModel = (DefaultTableModel) minhaTabela.getModel();
    tableModel.getDataVector().removeAllElements();
    minhaTabela.updateUI();
    
    // alterando o valor de determinada linha e coluna da tabela: Linha (1), Coluna (1)
    // linha e coluna começam com valor 0
    TableModel model = (TableModel) minhaTabela.getModel();
    model.setValueAt("Josefina", 0, 0);
    
    // obtendo valor de determinado campo na tabela, informando Linha(2) e Coluna(1)
    // linha e coluna começam com valor 0
    TableModel model = (TableModel) minhaTabela.getModel();
    String value = (String) model.getValueAt(1, 0);
    System.out.println(value);
    
  3. Tratando evento de mudança de dados na tabela
  4. Caso você tenha campos editáveis na sua tabela, você pode em algum momento querer executar alguma ação quando um valor de um campo da sua tabela sofrer alterações.

    Para que você possa controlar as mudanças realizadas na edição da sua tabela, é necessário monitorar o evento de alteração através do listener TableModelListener.

    // monitorando o evento através de TableModelListener
    minhaTabela.getModel().addTableModelListener(new TableModelListener() {
        @Override
        public void tableChanged(TableModelEvent e) {
            int linha = e.getFirstRow();
            int coluna = e.getColumn();
    
            TableModel model = (TableModel) e.getSource();
    
            System.out.println("Você alterou a linha " + linha + ", coluna " + coluna);
            System.out.println("Valor da célula alterada: " + model.getValueAt(linha, coluna));
        }
    });
    
  5. Usando ComboBox (JcomboBox) nas células da sua tabela
  6. É possível associar um JComboBox (caixa de seleção) à uma coluna da sua tabela. É uma forma de facilitar a vida do usuário. Ao invés do usuário digitar um valor para a célula, ele simplesmente escolhe um valor dentre vários, através de uma caixa de seleção. Recurso bem interessante e elegante.

    No exemplo abaixo, vamos associar um combo box para a quinta coluna da tabela. (Lembre-se que a numeração das colunas começa por 0). O usuário poderá escolher entre “Masculino” ou “Feminino”:

    // Obtendo à referencia para a 5 coluna da tabela
    TableColumn column = minhaTabela.getColumnModel().getColumn(4);
    // Criando o ComboBox
    JComboBox comboSexo = new JComboBox();
    // Definindo os valores para o ComboBox
    DefaultComboBoxModel comboModel = new DefaultComboBoxModel(new String[] { "Masculino", "Feminino" });
    comboSexo.setModel(comboModel);
    // Associando o ComboBox para a coluna
    column.setCellEditor(new DefaultCellEditor(comboSexo));
    

    Veja ilustração:

    ScreenShot026

Ler Post Completo | Make a Comment ( None so far )

Seleção de Dicas PHP

Posted on novembro 13, 2012. Filed under: PHP, Tips | Tags:, |

Reuni aqui pequenas dicas de programação em PHP que foram-me úteis nessa semana. Em algum momento podem ser úteis para você também.

  1. Navegando em uma estrutura de diretórios usando DirectoryIterator
  2. É uma alternativa ao conjunto opendir()/readdir(), usando Orientação à Objetos:

    <?php
    $it = new DirectoryIterator("/caminho");
    foreach($it as $file) {
    
    	if(!$it->isDot()) { // diferente de .. ou .
    		
    		if($it->isFile()) { // elemento atual é um arquivo
    			echo "Arquivo: $file" . PHP_EOL;
    		}	
    		
    		if($it->isDir()) { // elemento atual
    			echo "Diretório: $file" . PHP_EOL;
    		}
    	}
    }
    

    Mais métodos da classe DirectoryIterator:
    http://php.net/manual/pt_BR/class.directoryiterator.php

  3. Obtendo valores repetidos dentro de um array
  4. Função útil para obter valores repetidos dentro de um array, independente do valor da chave.

    <?php
    $a = array("morango", "laranja", "pera", "beterraba", "banana", "morango");
    
    $repetidos = array_diff_assoc($a, array_unique($a));
    $repetidos = array_unique($repetidos);
    var_dump($repetidos);
    

    A função acima irá obter os elementos com valores repetidos. No caso do exemplo, somente o elemento com o valor “morango” se repete no array:

    array(1) {
    [5] =>
    string(7) "morango"
    }

  5. Obtendo as chaves de um array, especificando um valor do elemento
  6. Complementando a dica anterior, vamos obter o valor da chave de cada elemento repetido encontrado no array:

    $a = array("morango", "laranja", "pera", "beterraba", "banana", "morango");
    $repetidos = array_diff_assoc($a, array_unique($a));
    $repetidos = array_unique($repetidos);
    
    foreach($repetidos as $valor_repetido) {
    	echo "Elemento Repetido: $valor_repetido" . PHP_EOL;
    	$keys = array_keys($a, $valor_repetido);
    	var_dump($keys);
    }
    

    No caso do código acima, o elemento morango esta repetido nos índices 0 e 5 do array $a:

    Elemento Repetido: morango
    array(2) {
    [0] =>
    int(0)
    [1] =>
    int(5)
    }

  7. Removendo os últimos N Bytes de um arquivo
  8. Esta dica é para caso precise remover alguns bytes do final de um arquivo sem a necessidade de duplicá-lo. Isso pode ser facilmente realizado através da função ftruncate:

    (No caso abaixo, serão removidos os últimos 512bytes do arquivo)

    <?php
    
    $filename = "/caminho/para/o/arquivo";
    
    $handle = fopen($filename, 'r+');
    ftruncate($handle, filesize($filename) - 512);
    fclose($handle);
    
Ler Post Completo | Make a Comment ( None so far )

Dica PHP, identificando automaticamente o formato de imagem

Posted on setembro 21, 2012. Filed under: PHP, Tips | Tags:, , , |

Essa dica simples é para você que precisa identificar automaticamente o formato de um determinado arquivo de imagem. Por exemplo, se é no formato jpeg, png, gif, etc. Útil no caso onde você precisa enviar uma imagem para o navegador, onde o tipo de imagem é incerto, podendo ser de qualquer formato.

Uma forma de resolver essa questão, seria tentar definir o formato da imagem através da extensão do nome do arquivo(.jpg, .png, .gif, etc.), usando um switch/case. Porém podemos resolver isso de uma forma automática, que é muito mais eficiente, fazendo o uso das funções getimagesize() e image_type_to_mime_type().

Veja exemplo abaixo:

<?php
// caminho da imagem será obtido de forma dinâmica
// para esse exemplo estamos definindo de forma estática
$caminho_imagem = "teste.jpg";

// identificando o mime type do arquivo automaticamente
$info = getimagesize($caminho_imagem);
$mime_type = image_type_to_mime_type($info[2]); 

// neste caso, o mime_type será "image/jpeg"
header("Content-Type: $mime_type");
// enviando a imagem para o navegador
readfile($caminho_imagem); 

Já no caso abaixo, o mime type será “image/png”

$caminho_imagem = "teste.png";

// identificando o mime type do arquivo automaticamente
$info = getimagesize($caminho_imagem);
$mime_type = image_type_to_mime_type($info[2]); 

Ler Post Completo | Make a Comment ( None so far )

IE Problemas com cookies dentro de iframe (facebook)

Posted on setembro 16, 2012. Filed under: Facebook, Tips | Tags:, , , |

Introdução

Tive um problema um tanto quanto curioso. Após criar uma app no facebook e usá-la dentro de um Page Tab, que permite acessar a app dentro de uma fan page do facebook, tive um problema de acesso dentro da aplicação após a criação da sessão do facebook. O problema ocorre somente no IE, com a página da app sendo carregada dentro de um iframe. Na página inicial, após realizado o login no facebook, a aplicação direciona o usuário para uma página interna, onde somente usuários autenticados podem ter acesso. Em todos navegadores, a página interna funcionava perfeitamente. Menos o IE, que perdia a sessão do usuário após o login inicial. Porém, fora do Page Tab, ou seja, fora do iframe, a aplicação funcionava normalmente, até no IE.

Após pesquisas, descobri que por padrão o IE bloqueia third-party cookies. No caso o IE bloqueou os cookies que estavam sendo acessados dentro uma página que estava dentro de um iframe. É uma política de segurança que o IE adota, seguindo uma especificação do W3C conhecida como Platform for Privacy Preferences ou somente P3P. Para resolver o problema foi bem simples. Basta adicionar o header abaixo em todas as páginas php de sua aplicação que setam cookies. Esse header irá permitir que o IE aceite third-party cookies.

header('p3p: CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"');

Ah, lembre-se de setar o header no php antes de qualquer saída de texto.

Ler Post Completo | Make a Comment ( 7 so far )

Habilitando e desabilitando elementos com JQuery

Posted on setembro 7, 2012. Filed under: JavaScript, JQuery, Tips | Tags:, , , |

Introdução

Habilitar e desabilitar elementos em sua página, torna-se uma tarefa simples quando se trata de JQuery. Neste artigo iremos manipular o atributo disabled, usado para controlar se o elemento esta habilitado ou desabilitado, usando o método prop() ao invés de attr(), que é mais específico para esta finalidade.

Veja abaixo alguns exemplos:

Desabilitando elementos:

// desabilitando determinado elemento
$('#id_elemento').prop('disabled', true);

// desabilitando todos elementos dentro de tag <div>
$('div *').prop('disabled', true);

// desabilitando somete elementos do tipo input e button dentro de tag <div>
$('div').find('input, button').prop('disabled', true);

// desabilitando todos tipos de input (input, textarea, select, button) dentro de tag <div>
$('div').find(':input').prop('disabled', true);

Habilitando elementos:

Use o mesmo método prop() conforme anteriormente, mas setando o valor para false.

$('#id_elemento').prop('disabled', false);
...

Considerações

O método prop() foi adicionado à partir da versão 1.6 do jquery. Use prop() ao invés de attr() para atributos como disabled, checked, selected, etc. São atributos considerados “booleanos” na especificação W3C. Ele foi criado para esse propósito. Para maiores detalhes, acesse a documentação do JQUery: http://api.jquery.com/prop/

O método attr() pode fazer o trabalho de desabilitar e habilitar elementos também. Porém com a criação do prop(), o attr() deixou de ser a melhor forma de resolver essa questão. Utilize-o caso esteja com uma versão do jquery mais antiga, inferior à 1.6. Veja abaixo exemplos:

// desabilitando elementos
$('#id_do_elemento').attr('disabled', 'disabled');

// habilitando elementos
$('#id_do_elemento').removeAttr('disabled');
Ler Post Completo | Make a Comment ( 1 so far )

Dicas do comando find

Posted on setembro 3, 2012. Filed under: Linux, Tips | Tags:, |

Introdução

Neste artigo vamos informar alguns exemplos práticos do comando find. São exemplos que resolvem problemas que temos no dia a dia. Voltado para quem trabalha com administração de servidores Linux.

  • Encontrando arquivos que estão com problema de encoding no nome.
  • find . ! -regex '.*'

    Esse interessante comando do find, apesar de não ser específico para isso, irá listar todos arquivos que estão com erro de encoding no nome. Para mais informações como corrigir o encode do nome do arquivo, acesse:
    http://selectoid.wordpress.com/2009/07/23/a-commandline-preciousness-for-converting-filename-encoding-in-linux-convmv/

  • Removendo arquivos que foram criados/modificados a mais de x dias. No caso abaixo, serão removidos os arquivos modificados/criados à mais de 30 dias.
  • find . -type f -mtime +30 -exec rm -f {} \;
  • Procurando um pattern (require_once) dentro de arquivos que possuem a extensão .php, entrando nos níveis de diretório abaixo, de forma recursiva.
  • find . -name "*.php" -exec grep -Hi "require_once" {} \;
  • Esta dica é para você que precisa limpar um diretório que contém muitos arquivos. Usar somente o comando rm -f * no diretório irá gerar erro de lista de arquivos muito grande. A alternativa é usar o comando find combinado com o comando xargs, que irá limpar o diretório completo. O xargs irá passar os arquivos para o comando rm por partes.
  • find . -type f -print0 | xargs -0 rm
  • Procurando arquivos em apenas 2 níveis de sub-diretórios.
  • find . -maxdepth 2
  • Procurando arquivos/diretórios que possuem determinado dono de arquivo.
  • find . -user www-data
  • Procurando arquivos/diretórios que possuem determinado grupo de arquivo.
  • find . -group www-data
  • Procurando arquivos/diretórios que possuem determinado permissão.
  • find . -perm 644
  • Fazendo busca somente em diretórios.
  • find . -type d
  • Fazendo busca somente em arquivos.
  • find . -type f

Conclusão

É claro que esses exemplos não devem ser utilizados de forma rígida. O comando find é muito flexível, portanto fique livre para combinar seus parâmetros. As dicas acima podem ajudar em muitas situações diferentes.

Ler Post Completo | Make a Comment ( None so far )

Tips: Ferramentas de trabalho de um desenvolvedor

Posted on agosto 25, 2012. Filed under: Tips | Tags:, |

Introdução

Neste artigo vou procurar listar as principais ferramentas de trabalho que utilizo no meu dia a dia. Atualmente, tenho meu ambiente de trabalho criado em cima de um sistema operacional Windows 7. Já utilizei Linux como ambiente “primário” por muito tempo. Porém no momento, uso Windows devido à diversas circunstâncias do meu dia a dia. O meu trabalho inclui também administração de sistemas Linux, que faço remotamente, através de conexão ssh usando putty.

A maioria das ferramentas abaixo são software livre e todas são de uso gratuito.

Bem, vamos à lista das ferramentas:

  • Eclipse:

    Eclipse é a minha principal e preferida IDE de desenvolvimento. Torna meu trabalho mais eficiente. Uso para desenvolvimento em Java, e PHP através do Eclipse-pdt. Muitas IDE´s são baseados em Eclipse. (Zend Studio, Adobe Flash Builder, entre outras). Portanto, se você for desenvolver em Flex, provavelmente irá utilizar um IDE baseado em EClipse. Além disso, possui muitos plugin’s interessantes, entre eles, desenvolvimento de aplicativos para Smart TV (LG, Samsung). É possível também baixar versões para C e C++.

    http://www.eclipse.org/downloads/
    http://www.eclipse.org/projects/project.php?id=tools.pdt

  • vim:

    Utilizo muito o vim, tanto no Windows como no Linux. A versão GUI (Gráfica) é chamada de gvim e a versão usada no modo texto, simplesmente vim. Editor muito eficiente. Utilizo principalmente quando preciso programar scripts e aplicativos acessíveis em servidores remotos através de ssh. No Windows, para manipulação e formatação de textos, através do forte suporte de expressões regulares e da criação de funções próprias no editor. Difícil de aprender para os iniciantes, mas após dominado, economiza muito tempo. Para iniciar o aprendizado, aconselho a fazer um mini-curso interativo do vim, chamado vim-tutorial. O vim tutorial é distribuído junto com o pacote do aplicativo. No Windows, chama-se vimtutor.bat (Procurar no diretório de instalação) e no Linux, digitar vimtutor na linha de comando.

  • http://www.vim.org/download.php

  • PgAdmin:

    Melhor ferramenta para administradores e desenvolvedores de banco de dados PostgreSQL. Pode ser usada em Linux, Windows, Mac OSX, entre outros *nix.
    http://www.pgadmin.org/index.php

  • Mysql Workbench:

    Ferramenta completa para administradores e desenvolvedores de banco de dados MySQL. Perfeito para criar/executar queries SQL, alterar e criar tabelas, objetos de banco de dados (procedures, triggers, etc..). Inclui ferramenta para modelagem de dados extremamente rica em funções. Possível fazer engenharia reversa para criação do modelo de dados. Sincronizar modelo de dados com o banco, realizar comparações entre outras. Possui ferramenta exclusiva para administração do banco de dados também. (Logs, gerenciamento de usuários). Particularmente, utilizo mais a parte de modelagem de dados e da parte de desenvolvimento de queries. Normalmente a parte de administração do banco, gosto de fazer através da linha de comando.

    http://www.mysql.com/downloads/workbench/

  • Putty:

    Uso como terminal para acesso remoto à servidores Linux, através de protocolo SSH. Pode ser usado para telnet também e para testar portas abertas em servidores remotos. Muitas vezes, o telnet do seu Windows não esta instalado/habiltiado. Neste caso o putty também pode ajudar. Outra função muito útil do putty, é a configuração de tunel ssh. Quebra o galho muitas vezes essa função. O tunel ssh no putty é bem mais simples de configurar do que via linha de comando.

    http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

  • Winscp:

    Winscp é meu aplicativo para transferência de arquivos. Simples e eficiente. Utilizo tanto para protocolo SCP (cópia de arquivos através de ssh) e FTP. Como já sugere o nome, é um aplicativo somente para Windows.

    http://winscp.net/eng/download.php

  • Firefox

    Firefox é meu navegador preferido para testar e debugar aplicações web. Os principais complementos que utilizo são firebug, firephp, firecookie e LiveHttpHeaders. Do firebug, destaco a parte de inspeção de elementos, erros de javascript e o painel de Rede, onde é possível monitorar as informações das requisições HTTP, inclusive as requisições Ajax. O firephp, é possível o envio de mensagens do php (mensagens de erro e debug) para o console do firebug, ajudando principalmente a debugar requisições ajax. O firecookie permite a manipulação de cookies “ao vivo” durante a navegação no site. O complemento LiveHttpHeaders muito útil para analisar os cabeçalhos de requisições HTTP durante a navegação no site.

    http://www.mozilla.org/pt-BR/firefox/new/
    https://addons.mozilla.org/pt-BR/firefox/addon/firebug/
    http://www.firephp.org/
    https://addons.mozilla.org/pt-br/firefox/addon/firecookie/
    https://addons.mozilla.org/pt-br/firefox/addon/live-http-headers/

  • Gimp

    Fantástico manipulador de imagens. É Software Livre. Tem versões em diversas plataformas, inclusive Windows. Uso o gimp para operações básicas, como criar imagens transparentes, pequenos acabamentos e redimensionamento de imagens.

    http://www.gimp.org/downloads/
     

  • Vmware PLayer

    Player de máquinas virtuais. Utilizo no Windows. Uso para testar outros sistemas operacionais, subir ambientes de desenvolvimento, testar ferramentas de proxy / firewall, etc.

    http://www.vmware.com/products/player/

  • Thunderbird
    Meu leitor de E-mail preferido quando trabalho em estações Windows. Uma ótima alternativa ao Outlook. Pode ser usado no Linux também.
    http://www.mozilla.org/pt-BR/thunderbird/

 
 
 
Outras Ferramentas

Gostaria de destacar mais algumas ferramentas que considero importante: Skype, VirtualBox, PhpStorm, NetBeans, Google Docs, Chrome, TortoiseSvn, Notepad++ !

E você, quais ferramentas considera essenciais para o seu trabalho como desenvolvedor ?

Ler Post Completo | Make a Comment ( None so far )

Dicas de Programação para Objective-C / iOS 5

Posted on agosto 8, 2012. Filed under: Objective-C, Tips | Tags:, , , |

Introdução

Neste artigo separei algumas dicas de desenvolvimento para iOS 5. São dicas que me foram úteis durante o desenvolvimento de uma aplicação para Iphone. Espero que possam ser úteis para você também.

Manipulando Strings

  • Obtendo o tamanho de uma string
  •   NSString* string = @"Hello World";
      int tamanho = [string length];
    
  • Convertendo inteiro para String
  • [NSString stringWithFormat:@"%d",tamanho];
    
  • Concatenando Strings
  • NSString* string = @"Hello World";
    NSString* string2 = @"!";
    string = [string stringByAppendingString: @" Douglas"];
    string = [string stringByAppendingString: string2];
    

    A string final ficara com o valor:
    Hello World Douglas!

  • Substituição em Strings
  • NSString* string3 = [string stringByReplacingOccurrencesOfString:@"Hello World" withString:@"Ola Mundo"];
    

    A string final ficara com o valor:
    Ola Mundo Douglas!

  • Obtendo caracter de determinada posição
  • if([string3 characterAtIndex:0] == 'O') {
            // ok
    }
    

    O caracter na primeira posição será O

    Expressões Regulares

  • O código abaixo representa uma expressão regular responsável por fazer um matching em uma string. A condição retorna verdadeiro se o valor checado contém somente números:
  • NSString *regex1 = @"^[0-9]+$";
    NSPredicate *numberTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1];
    if([numberTest evaluateWithObject:@"123456789"]) {
        myLabel.text = novoCpf;
    }
    

    O código acima entra dentro da condição, devido à string "123456789" conter somente números.

  • A expressão regular abaixo é usada para fazer uma substituição em string através de um determinado pattern. A operação irá remover de uma string tudo aquilo que não for número.
  • NSString* cpf = @"111.111.111-11";
    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9]" options:NSRegularExpressionCaseInsensitive error:&error];
    NSString *novoCpf = [regex stringByReplacingMatchesInString:cpf options:0 range:NSMakeRange(0, [cpf length]) withTemplate:@""];
        
    myLabel.text = novoCpf;
    

    A string novoCpf conterá apenas números. (De 111.111.111-11 para 11111111111)

    Escondendo/Habilitando elementos

  • Esconder qualquer objeto da tela é bem simples. Basta setar a propriedade alpha do elemento para 0. Caso queira que o elemento volte a ficar visivel, bastar setar o alpha para 1
  • // escondendo elementos na tela
    MyProgressbar.alpha = 0;
    MyAlert.alpha = 0;
    MyButton.alpha = 0;
    MyLabel.alpha = 0;
    
    // mantendo elemento visivel
    MyProgressbar.alpha = 1;
    ...
    

    Atualizando elementos da tela dentro de loop

    Ao atualizar algum elemento da tela dentro de um loop (Label, Barra de Progresso, …), a atualização no objeto será refletido somente após à finalização do loop. Para que o elemento seja atualizado imediatamente, e não somente ao final do loop, é necessário incluir a seguinte linha, logo após à instrução que modifica o elemento:

    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];
    

    Essa funcionalidade é ideal para contadores e barras de progresso. Segue abaixo um exemplo mais detalhado.

    for(int i = 0; i < 100; i++) {
            myLabel.text = [NSString stringWithFormat:@"%d",i];
            usleep(5000);
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];
    }
    
    Ler Post Completo | Make a Comment ( None so far )

Java Tips: Download de arquivo usando Apache HttpComponents

Posted on junho 3, 2012. Filed under: Java, Tips | Tags:, , |

Introdução

Já vimos em um artigo anterior como realizar o download de arquivos binários através de HTTP usando a biblioteca Commons HttpClient do Apache. O Commons HttpClient foi descontinuado já à algum tempo e substituído pelo projeto Apache HttpComponents que promete melhor perfomance e mais flexibilidade. Portanto neste artigo vamos demonstrar como realizar o download de arquivos através de http usando a biblioteca HttpComponents.

Segue abaixo o código fonte:

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

// definição da classe HttpDownload 
public class HttpDownload {
	private final HttpClient httpclient;
	
	public static void main(String[] args) {
		// instanciando e usando a classe HttpDownload 
		HttpDownload httpDownload = new HttpDownload(new DefaultHttpClient());
		
		// fazendo o download do logotipo da google e salvando em diretório local 
		httpDownload.downloadByGet("http://www.google.com.br/images/srpr/logo3w.png", "/tmp/logo-google.png");
	}
	
	// construtor 
	public HttpDownload(HttpClient httpclient) {
		this.httpclient = httpclient;
	}
	
	// método que realiza download de arquivo via método GET 
	public void downloadByGet(String URL, String path) {
		HttpGet httpget = new HttpGet(URL);
		try {
			HttpResponse response = httpclient.execute(httpget);
			HttpEntity entity = response.getEntity();
								
			if (entity != null) {
				/* salvar arquivo no disco */
				java.io.FileOutputStream fos = new java.io.FileOutputStream(path);
			    entity.writeTo(fos);
			    fos.close();
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
Ler Post Completo | Make a Comment ( 5 so far )

« Entradas Anteriores

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: