Arquivo

Arquivo do autor

Problemas ao atualizar o PORTAGE do Gentoo

28, dezembro, 2010 Sem comentários

Boa noite,

Estava eu tentando atualizar uma versão recém instalada do Gentoo:

emerge portage

E recebi o seguinte erro:

*** Portage will stop merging at this point and reload itself,
then resume the merge.
[blocks B ]

Isso acontece devido ao novo PORTAGE utilizar Python2.6 e o antigo usar 2.5. Quando você tenta, ele causa conflito com o atual PORTAGE, dizendo que não pode atualizar.

Bom, para resolver é muito simples:

1. Baixe esse arquivo:

http://tinderbox.dev.gentoo.org/default-linux/x86/dev-lang/python-2.6.6-r1.tbz2

2. Descompacte na RAIZ ( / )

3. Rode o comando:
eselect python set python2.6

4. Agora, siga os passos desse tutorial:

http://www.gentoo.org/proj/en/portage/doc/manually-fixing-portage.xml

Valew pessoal!
Isso deve resolver o problema.

Rodrigo

Im sorry! =/

10, março, 2010 Sem comentários

Olá pessoal,

Sei que poucas pessoas seguem meu blog, mas gostaria de pedir desculpas pois perdi todos os posts mais novos…
Tive um problema no servidor, e foi necessário recuperar um backup bem antigo.

Devo voltar a postar em breve… visto que depois desse problema, perdi o pique!

Abraço!

Categories: Sem categoria Tags:

Novo Post?

9, março, 2009 1 comentário

Oi Pessoal,

Estou bolando ainda um novo post útil para todos nós! ;D
Mas estou um pouco sem ideias e muito apertado esses dias. Estou trabalhando em vários projetos ao mesmo tempo e isso demanda muito tempo meu. Mas, ja ja coloco algo.

O que pensam sobre:

- Triggers, functions e procedures para Postgre
- Criando DLLs para funcionarem com MetaTrader
- Como usar o amCharts com PHP

Valew!!

Usando jQuery com a Zend Framework

5, fevereiro, 2009 Sem comentários

Bom Dia!

Pretendo colocar várias quetões do meu dia-a-dia aqui. Muitas delas são dúvidas de inúmeras pessoas e várias vezes dificílimas de serem encontradas na internet.

Hoje, para inauguração, estou colocar um mini-Tutorial de como fazer o uso da jQuery junto à Zend Framework. Para quem não conhece, essas são, na minha opinião, as melhores frameworks para se trabalhar com o Javascript e o PHP respectivamente. ( aliás, todos nossos sistemas em PHP usam o conjunto )

Bom, estou criando o tutorial a medida que migro a Dojo ( não sei porque resolvi usar essa no meu ultimo projeto ) para jQuery no atual projeto.

Enfim, vamos começar:

Primeira Parte – Baixando a jQuery e a Zend Framework

Baixando cada uma das Frameworks:

jQuery

Entre no site, aqui.
Clique em DOWNLOAD.
Se preferir, o link direto para versão 1.3.1, aqui. ( clique em salvar como… )

Zend Framework

Entre no site, aqui.
Clique em DOWNLOAD NOW.
Escolha a FULL ( vamos utilizar as pastas Zend e Zendx [ em extras ] ).
Faça o login ( ou cadastro ). E escolha depois o download FULL novamente.

Não tenho como mandar o link direto, pois a Zend requer autenticação.

Para instalar o jQuery, basta colocar em alguma pasta visivel e de acesso público. Já a Zend você pode colocar em qualquer lugar visível para o PHP. Favor consultar outros tutoriais para essa instalação caso haja dúvidas, pois este não é o nosso foco.

Enfim, versões deste tutorial:

  • jQuery – 1.3.1
  • Zend Framework – 1.7.4

Segunda Parte – Criando função de Cache e Compactação da jQuery.

A jQuery minimal possui apenas 54kb. Porém não queremos que seja TUDO isso. hehehe

Então vamos compacta-la ao mínimo possível, vamos utilizar o gzip.

Para que essa etapa funcione 100%, devemos ter o gzip habilitado em nosso PHP. Para isso basta chegar em nosso phpinfo(), ou ver com nosso servidor de hospedagem se está habilitado. Caso não esteja, deverá pedir ao admin do server para instala-lo. ( acho dificil não ter instalado, pois é padrão em qualquer cPanel hoje em dia. )

Vamos ao que interessa. Esta parte será inteiramente baseada no tutorial do Julien Lecomte.

Dentro da Zend utilizamos sempre Controladores e Actions. Vamos criar uma Action no controlador principal: IndexController. Desta forma, teremos acesso ao nosso compactador de qualquer lugar da aplicação.

Primeiramente, vamos criar uma funcao private para recursão nos diretórios. ( vamos utiliza-la de acordo com o Julien em seu tutorial )

/*
 * The mkdir function does not support the recursive
 * parameter in the version of PHP run by Yahoo! Web
 * Hosting. This function simulates it.
 */
 
private function _mkdir_r( $dir_name, $rights=0777 )
{
   $dirs = explode( "/", $dir_name );
   $dir = "";
   foreach ( $dirs as $part )
   {
       $dir .= $part . "/";
       if ( !is_dir( $dir ) && strlen( $dir ) > 0 )
           mkdir( $dir, $rights );
   }
}

Feito isso, basta criar a Action principal na qual irá compactar não só nossos JS, como também qualquer outro arquivo que quizermos. Adicione essa nova Action ao IndexController:

public function gzipAction()
{
	// captura todo conteudo impresso na tela
	ob_start();
 
	/*
	 * List of known content types based on file extension.
	 * Note: These must be built-in somewhere...
	 */
 
	$known_content_types = array(
	    "htm"  => "text/html",
	    "html" => "text/html",
	    "js"   => "text/javascript",
	    "css"  => "text/css",
	    "xml"  => "text/xml",
	    "gif"  => "image/gif",
	    "jpg"  => "image/jpeg",
	    "jpeg" => "image/jpeg",
	    "png"  => "image/png",
	    "txt"  => "text/plain"
	);
 
	/*
	 * Get the path of the target file.
	 */
 
	if ( !isset( $_GET['script'] ) ) {
	    header( "HTTP/1.1 400 Bad Request" );
	    echo( "
<h1>HTTP 400 - Bad Request</h1>
" );
	    exit;
	}
 
	$file = ".".$_GET['script'];
 
	/*
	 * Verify the existence of the target file.
	 * Return HTTP 404 if needed.
	 */
 
	if (($src_uri = realpath( $file )) === false) {
	    /* The file does not exist */
	    header( "HTTP/1.1 404 Not Found" );
	    echo( "
<h1>HTTP 404 - Not Found</h1>
" );
	    exit;
	}
 
	/*
	 * Verify the requested file is under the doc root for security reasons.
	 */
 
	$doc_root = realpath( "." );
 
	if (strpos($src_uri, $doc_root) !== 0) {
	    header( "HTTP/1.1 403 Forbidden" );
	    echo( "
<h1>HTTP 403 - Forbidden</h1>
" );
	    exit;
	}
 
	/*
	 * Set the HTTP response headers that will
	 * tell the client to cache the resource.
	 */
	$file_last_modified = filemtime( $src_uri );
	header( "Last-Modified: " . date( "r", $file_last_modified ) );
 
	$max_age = 300 * 24 * 60 * 60; // 300 days
 
	$expires = $file_last_modified + $max_age;
	header( "Expires: " . date( "r", $expires ) );
 
	$etag = dechex( $file_last_modified );
	header( "ETag: " . $etag );
 
	$cache_control = "must-revalidate, proxy-revalidate, max-age=" . $max_age . ", s-maxage=" . $max_age;
	header( "Cache-Control: " . $cache_control );
 
	/*
	 * Check if the client should use the cached version.
	 * Return HTTP 304 if needed.
	 */
 
	if ( function_exists( "http_match_etag" ) &amp;&amp; function_exists( "http_match_modified" ) ) {
	    if ( http_match_etag( $etag ) || http_match_modified( $file_last_modified ) ) {
	        header( "HTTP/1.1 304 Not Modified" );
	        exit;
	    }
	} else {
	    error_log( "The HTTP extensions to PHP does not seem to be installed..." );
	}
 
	/*
	 * Extract the directory, file name and file
	 * extension from the "uri" parameter.
	 */
 
	$uri_dir = "";
	$file_name = "";
	$content_type = "";
 
	$uri_parts = explode( "/", $src_uri );
 
	for ( $i=0 ; $i 1 ) {
	    $file_extension = end( $file_parts );
	    $content_type = $known_content_types[$file_extension];
	}
 
	/*
	 * Get the target file.
	 * If the browser accepts gzip encoding, the target file
	 * will be the gzipped version of the requested file.
	 */
 
	$dst_uri = $src_uri;
 
	$compress = true;
 
	/*
	 * Let's compress only text files...
	 */
 
	$compress = $compress &amp;&amp; ( strpos( $content_type, "text" ) !== false );
 
	/*
	 * Finally, see if the client sent us the correct Accept-encoding: header value...
	 */
 
	$compress = $compress &amp;&amp; ( strpos( $_SERVER["HTTP_ACCEPT_ENCODING"], "gzip" ) !== false );
 
	if ( $compress ) {
 
		// windows servers
		if(strpos($src_uri, ":") &gt; 0) // se tiver C: ou D:, etc
		{
			$temp = str_replace("\\", "/", substr($src_uri, 3)); // remove o D: C: etc
			$uri_dir = substr($temp, 0, strrpos($temp, "/"));
		}
 
	    $gz_uri = "tmp/gzip/" . $temp . ".gz";
 
	    if ( file_exists( $gz_uri ) ) {
	        $src_last_modified = filemtime( $src_uri );
	        $dst_last_modified = filemtime( $gz_uri );
	        // The gzip version of the file exists, but it is older
	        // than the source file. We need to recreate it...
	        if ( $src_last_modified &gt; $dst_last_modified )
	            unlink( $gz_uri );
	    }
 
	    if ( !file_exists( $gz_uri ) ) {
	        if ( !file_exists( "tmp/gzip/" . $uri_dir ) )
	            $this-&gt;_mkdir_r( "tmp/gzip/" . $uri_dir );
	        $error = false;
	        if ( $fp_out = gzopen( $gz_uri, "wb" ) ) {
	            if ( $fp_in = fopen( $src_uri, "rb" ) ) {
	                while( !feof( $fp_in ) )
	                    gzwrite( $fp_out, fread( $fp_in, 1024*512 ) );
	                fclose( $fp_in );
	            } else {
	                $error = true;
	            }
	            gzclose( $fp_out );
	        } else {
	            $error = true;
	        }
 
	        if ( !$error ) {
	            $dst_uri = $gz_uri;
	            header( "Content-Encoding: gzip" );
	        }
	    } else {
	        $dst_uri = $gz_uri;
	        header( "Content-Encoding: gzip" );
	    }
	}
 
	/*
	 * Output the target file and set the appropriate HTTP headers.
	 */
 
	if ( $content_type )
	    header( "Content-Type: " . $content_type );
 
	header( "Content-Length: " . filesize( $dst_uri ) );
	readfile( $dst_uri );
 
	ob_end_flush();
	exit(); // to not execute more anything after this
}

Wow! Grandinha né? Mas ela é super simples.
Os comentários estão em inglês, porém são auto-explicativos. Basicamente o que a função faz é pegar o arquivo que estamos dando como parametro ( $_GET['script'] ), abri-lo, compacta-lo, mudar o HEADER para aceitar GZIP, e exibi-lo já compactado.

Observe o seguinte trecho:

	// windows servers
	if(strpos($src_uri, ":") &gt; 0) // se tiver C: ou D:, etc
	{
		$temp = str_replace("\\", "/", substr($src_uri, 3)); // remove o D: C: etc
		$uri_dir = substr($temp, 0, strrpos($temp, "/"));
	}

Eu mesmo criei essa parte, pois a versão do Julien não aceita servidores Windows. Fiz uma pequena modificação na strings de diretorio para aceitar Windows. Simples não?

Agora, acredite ou não, para chamar qualquer JS, já compactado, basta fazer da seguinte maneira:

<script src="/index/gzip/?script=/scripts/jquery/jquery-1.3.1.min.js" type="text/javascript"><!--mce:0--></script>

E quem utiliza as funções de Layout da Zend, faça assim:

$this-&gt;headScript()-&gt;appendFile('/index/gzip/?script=/scripts/jquery/jquery-1.3.1.min.js');

Como assim? Facil desse jeito?!
Isso mesmo! hehehe
Só precisamos chamar nossa função ( /index/gzip ) passando para ela o atributo “script” via get com o endereço onde encontramos o script. ( como já era feito anteriormente ).
E voilá:

Comprovação do Gzip

Comprovação do Gzip

Transformamos 54kb da jQuery em 19kb! Com apenas 2 funções e já funciona para qualquer aplicação Zend Framework.

E finalizamos mais essa parte. Agora, é só utilizar os componentes da jQuery. Mas vamos dar um exemplo na próxima parte.

Categories: Tutoriais Tags: , , ,

Primeiras impressões

4, fevereiro, 2009 1 comentário

Seja Bem Vindo,

Este é o nosso primeiro POST sobre a Yodsoft.
Nossa empresa está cada dia mais perto da realidade. Estamos produzindo atualmente 2 produtos, sendo que são em torno de 7 produtos aguardando para serem desenvolvidos.

Nosso primeiro produto e que já está em desenvolvimento há alguns anos, é o nosso incrível sistema de Multi-nível. Abrange 90% das necessidades dos sistemas deste setor e todo restante é produzido individualmente. Estamos terminando de modularizar todo sistema para lançar a primeira versão comercial do produto.

Em breve coloco mais informações sobre a empresa e o produto.

.

Categories: Empresa Tags: ,