Dica rápida: PHP + BYTEA

Fala galera! Estava aqui tentando exibir imagens armazenadas em um campo bytea do PostgreSQL e apanhei feito mala velha usando o par de funções pg_escape_bytea e pg_unescape_bytea.

Consegui achar a solução em um comentário no manual do PHP: “To prevent any problems with encoding you could use hexadecimal or base64 input to save and retrieve data to the database”

Usei base64_encode/base64_decode e tudo funcionou perfeitamente. Então, se você está tentando usar pg_escape_bytea($content) e pg_unescape_bytea($content) mude para base64_encode($content) para inserir no banco e base64_decode($content) para exibir no browser.

Valeu Mike-RaWare!

Para quem quiser ver o post: http://php.net/manual/en/function.pg-escape-bytea.php

setembro 3, 2011 at 1:36 pm Deixe um comentário

Forçar o WebBrowser Control a usar IEX(7,8 ou 9)

Desenvolvi um aplicativo que possui um navegador integrado com webbrowser control que insistia em renderizar as páginas como IE7. O IE instalado na máquina, estava renderizando normalmente como IE8 sem estar usando o modo de compatibilidade. Pesquisando com um amigo aqui do trampo, descobrimos que o webcontrol rendereza por padrão como IE7 e precisamos modificar o registro do windows para força-lo a usar o IE8 ou IE9 se for o caso.

Para, tal .. abra o regedit e localize a chave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION e adicione um valor DWORD com o nome do seu aplicativo, browser.exe por exemplo e coloque o valor 7000 em decimal para rodar como IE7, 8000 para rodar como IE8 e 9000 para rodar como IE9.

Existem outros modos de compatibilidade, veja aqui o material oficial da Microsoft.

Abrasss

abril 26, 2011 at 2:36 pm Deixe um comentário

Dica rápida: Otimizar navegação do pfsense com squid transparent

Está precisando melhorar o tempo de resposta do squid no pfsense?

Achei a solução aqui

Abrasss!!!!

abril 26, 2011 at 2:13 pm Deixe um comentário

Arch Linux Review

Hi Folks!!!

Nesse post vou passar as minhas impressões sobre a distro Arch Linux: uma distro enxuta, leve e simples de manter mas que é voltada para usuários avançados ou pelo menos fuçadores.

Eu fui durante muito tempo usuário do Slackware, mas acabei migrando para o Ubuntu pela comodidade e facilidade de uso. O projeto comandado por Patrick Volkerding anda a passos de tartaruga … demora muito para lançar releases … sem falar na falta de um gerenciador de pacotes no estilo apt-get e o fato de retirar o gnome e deixar apenas o KDE. Tirando esses pormenores, é melhor distro que já usei.

O Ubuntu é uma ótima distro mas não é leve e customizavel como o Slack. Foi ai que meu amigo e ídolo Joenio Marques me falou sobre o Arch. Eu já tinha ouvido falar mas não conhecia nada do projeto.

Baixei e instalei … virei fan!

A distro é muito boa, muito parecida com o Slack, estrutura do sistema … filosofia …robustez. Possui um ótimo gerenciador de pacotes (pacman), consegui instalar tudo que precisei sem problemas .. incluindo o gnome e GDM.

A instalação foi rápida, em torno de 10 min usando a opção Core (offiline) 330MB.

Configurar também não foi diferente, tudo fica armazenado em um arquivo central, o /etc/RC.conf … módulos, daemons, configuração de interfaces de rede, teclado, etc … tudo é centralizado tornando as coisas bem mais práticas. Caso tenha dúvidas, eles possuem um Wiki do projeto com bastante material.

Outro ponto bom é a atualização do sistema … como se trata de uma distro rolling release, o sistema está em constante atualização … para atualizar, basta executar: pacman -Syu ou pacman -Su

Aqui vai um post que compara o Slackware e o Arch pra quem ficou em dúvida como eu hehehe: http://www.osnews.com/story/8761/Arch_Linux_Vs_Slackware_The_Best_of_All_Worlds/page1/

É isso ai … Quem gosta de deixar o linux com a sua cara e/ou gosta de Slackware, vai adorar o Arch.

Abraço e até o próximo post

janeiro 27, 2011 at 12:28 pm 2 comentários

PHP-GTK2 + Glade 3 = fatal error

Você já viu esse erro?

(php.exe:4416): libglade-WARNING **: Expected <glade-interface>.  Got <interface>.
(php.exe:4416): libglade-WARNING **: did not finish in PARSER_FINISH state

Fatal error: Uncaught exception 'PhpGtkConstructException' with message 'could n
ot construct GladeXML object' in E:\Nodo3\PHP-GTK\Sample\Sample.phpw:6
Stack trace:
#0 E:\Nodo3\PHP-GTK\Sample\Sample.phpw(6): GladeXML->__construct('Sample.glade')

#1 {main}
  thrown in E:\Nodo3\PHP-GTK\Sample\Sample.phpw on line 6

Pois é, o erro é causado pelo formato do arquivo glade: o GtkBuilder, substituto do GladeXML que foi depreciado.

É muito difícil encontrar informações sobre php-gtk2, mas pelo que pude entender, ele não tem suporte total ao padrão GtkBuilder, logo .. é melhor continuar usando GladeXML.

Para resolver o problema, abra o menu Editar > Preferências, e altere o formato de saída do arquivo para Libglade.
Se alguém tiver informações mais precisas sobre o suporte do GtkBuilder no php-gtk2 compartilha aqui ok??

Abrasss

janeiro 20, 2011 at 5:31 pm Deixe um comentário

IEOptLib – Internet Explorer Options Library

Fala meu povo!! Criei uma lib em C# para manipular as opções de internet do Windows. É possível modificar as zonas de segurança ou criar um nível personalizado. É bem útil para utilizar em conjunto com o componente WebBrowser (System.Windows.Forms.WebBrowser).

Basicamente a classe modifica as chaves do registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\[0-4], onde [0-4] é zona que deseja modificar.

  • 0 – Meu computador
  • 1 – Intranet local
  • 2 – Sites confiáveis
  • 3 – Internet
  • 4 – Sites restritos

Seguindo a regra acima, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3 representa as opções da zona de internet. Cada valor DWORD dentro dessa chave, representa um item das opções de internet.

Usar a lib é muito fácil, basta fazer a chamada ao método estático que representa a função que você deseja modificar e passar a zona e o novo valor que será atribuído.

InternetOptions.SetSecurityLevel(InternetOptions.INTERNET, InternetOptions.MEDIUM_LOW_LEVEL);

O exemplo acima altera o nível de segurança da zona de internet para médio-baixo.

Como a maioria das opções requer que o Internet Explorer seja reiniciado, é uma boa prática chamar o método antes de renderizar o componente WebBrowser (se esse for o seu foco). faça as chamadas na classe Program, antes de inicializar o Main Form.

O projeto encontra-se no source forge (http://sourceforge.net/projects/ieoptlib/) e é GPL.
Usei como referência um artigo da Microsoft (http://support.microsoft.com/kb/182569/pt-br) que explica muito bem como funciona a gestão das opções de internet.

Espero ter ajudado
Abrassss

janeiro 17, 2011 at 12:34 pm Deixe um comentário

Dica rápida: Permitir “.” no login dos usuários do USVN

O USVN (http://www.usvn.info/) é uma ótima ferramenta de administração de repositórios SVN. Só achei uma coisa ruim, não permite que eu use “.” como separador do nome de usuário.

É muito comum se usar como padrão de login primeironome.sobrenome, e nós usamos essa nomenclatura pra tudo: AD, ftp, banco, aplicativos, controle de versão, etc.

Para liberar esse e qualquer outro char que esteja desativado basta alterar o script: USVN_HOME/library/USVN/Db/Table/Row/User.php
Procure pelo método “checkLogin”, acrescente “\.” no final da expressão regular da linha ” if (!preg_match(‘/^[0-9a-zA-Z_\-]+$/’, $login))” como no código abaixo:

protected function checkLogin($login)
{
    if (empty($login) || preg_match('/^\s+$/', $login)) {
        throw new USVN_Exception(T_('Login empty.'));
    }

    if (!preg_match('/^[0-9a-zA-Z_\-\.]+$/', $login)) {
        throw new USVN_Exception(T_('Login invalid.  The login can only include alpha-numeric characters and \'-\' or \'_\'.'));
    }
}

Pronto

Abrasss e até o próximo post

janeiro 6, 2011 at 2:43 pm Deixe um comentário

CodeIgniter: Associação de controllers e grupo de regras no config/Form_validation

O codeigniter permite criar uma associação do ‘controller/método’ no arquivo de configuração form_validation para facilitar e centralizar a validação de formulários. É realmente excelente, desde que você não tenha parâmetros em seu método :| … meio estranho mas blz.

Tive esse problema e achei esse post: http://codeigniter.com/forums/viewthread/104425/ que relata o problema e indica uma solução que consiste em alterar a classe form_validation. Essa solução funciona perfeitamente mas pode causar problemas se você decidir atualizar a versão do CI e esqueceu que mudou algo lá dentro.

Segui a idéia dele e fiz o ‘patch’ no próprio config/form_validation.
Ficou algo assim:

$CI =& get_instance();

$config = array(
	"blog/post/{$CI->uri->segment(3)}" => array(
		array(
				'field' => 'titulo',
				'label' => 'Título',
				'rules' => 'required'
			 ),
		array(
				'field' => 'conteudo',
				'label' => 'Conteúdo',
				'rules' => 'required'
			 )
		)
);

Espero ter ajudado.

Abrassss!!!

janeiro 4, 2011 at 12:12 am Deixe um comentário

Codeigniter + jqTransform + Combos dinâmicos

Esse post é em homenagem a meu amigo Ubiracy mais conhecido como Bira-bira-birô hehehehe, que junto comigo, se mordeu todo pra tentar resolver esse problema. Depois de muito pesquisar e nada encontrar, conseguimos criar elementos options em tempo de execução no jqTransform, que é um plugin jquery pra customizar a cara dos formulários. Bonitinho mas ordinário.

Pois bem, vamos precisar de:

  • jqTransform
  • Algum conhecimento em JSON
  • Algum conhecimento em Ajax
  • Codeigniter (opcional)

A solução funciona da seguinte forma, você vai criar dois combos, um de estados e outro de cidades. Os itens do combo de cidades vão ser carregados dinamicamente via ajax a depender do que foi selecionado no combo de estados.

  1. JSON
    Crie um método em seu model que realiza a consulta de cidades

    public function lista_cidades($id_estado)
    {
        $this->db->select("id, nome");
        $this->db->where("id_estado", $id_estado);
    
        return $this->db->get("cidades");
    }
    

    Em seu controller, crie um novo método público que escreva no browser o resultado da consulta no padrão json.

    public function cidades($id_estado)
    {
        header('Content-type: application/json');
        $this->load->model("cidade_model");
        $cidades = $this->cidade_model->lista_cidades($id_estado)->result_array();
        $json = "[";
        foreach ($cidades as $cidade) {
    	$json.= '{"value": "{$cidade['id']}", "label": "{$cidade['nome']}",';
        }
        $json = preg_replace("/,$/", "", $json);
        $json.= "[";
    }
    

    Pronto, agora você já tem um método em seu controller que filtra as cidades por estado e gera um documento json.

  2. HTML

    <tr>;
    	<td>Estado:</td>
    	<td><div id="div_cmb_estado" class="select-menus"><?php echo form_dropdown('cmb_estado', $cmb_estado); ?></div></td>;
    	<td>Cidade:</td>
    	<td>
    		<div id="container">
    			<div id="div_cmb_cidade" class="select-menus"><select id="cmb_cidade" name="cmb_cidade"></select></div>
    		</div>
    	</td>
    </tr>
    


    Crie o combo de estados normalmente, se você estiver usando form helper como eu, chame a função form_dropdown passando os dados que irão compor este combo. Observe que a variável $cmb_estado contém o array de dados que popula o combo de estados.
    Já o combo cidades (neste nosso exemplo), não terá nenhum registro inicialmente. Ele será preenchido dinamicamente como falei anteriormente. O pulo do gato é a div container. Os elementos que irão compor o combo devem ficar dentro dessa div.

  3. Ajax
    Finalmente, o ajax para criar o options. Basta chamar a url do seu método que cria o json e fazer o parser no resultado.

    $(document).ready(function() {
    
    	// Aplica o skin com jqTransform
    	$("form.jqtransform").jqTransform();
    
             // OnClick no item do combo de estados
    	$("#div_cmb_estado div.jqTransformSelectWrapper ul li a").click(function(){
    
    	// Recupera o valor do item selecionado
    	var index = $(this).attr('index');
    	var value = $('#div_cmb_estado div.jqTransformSelectWrapper option:eq(' + index + ')').attr('value');
    
    	// Chamada ao método criado no controller via ajax
    	$.ajax({
    	    type: "GET",
    	    async: true,
    	    url: "/exemplo/cidades/" + value,
    	    dataType:"json",
    	    error: function(XMLHttpRequest, textStatus, errorThrown) {
    		   alert(textStatus);
    	    },
    	    success: function(resposta){
    
    		// Limpa o "combo" de cidades
    		var html_combo = '<div id="div_cmb_cidade" class="select-menus"><select id="cmb_cidades" name="cmb_cidades"></div>';
    		$("#container").html(html_combo);
    
    		// Faz o parser no json e cria os elementos
    		for (i = 0; i < resposta.length; i++) {
    		   $("#cmb_cidades").append('<option selected value="' + resposta[i].value + '">' + resposta[i].label + '</option>');
    		}
    
    		// Chama novamente o jqTransform para o select. Funciona como um refresh no layout
    	         $("#cmb_cidades").jqTransSelect();
    		}
    	    });
    	});
    });
    

Espero ter ajudado, até o próximo post.

obs: Esse editor do wordpress é muito bom, ¬¬

agosto 20, 2010 at 3:32 pm 6 comentários

Blob do SQL Server truncados no PHP

Hello folks, depois de um bom tempo sem postar nada vai ai uma dica de configuração do PHP com SQL Server. Essa dica é para quem está recuperando um blob (varbinary, image, etc) e quando é exibido pelo PHP vem truncado… exibindo parte da imagem e o resto em cinza indicando que ali teria que ter algo =]. Para resolver basta alterar o valor das propriedades mssql.textlimit e mssql.textsize no php.ini. Lembrando que os valores estão em bytes.

Abrasss

julho 21, 2010 at 4:55 pm 2 comentários

Posts mais Antigos


 

janeiro 2012
S T Q Q S S D
« set    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Tópicos recentes


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.