Tiago Madeira Inferências aleatórias de um cérebro em versão alpha

"Só se dedicará a um assunto com toda a seriedade alguém que esteja envolvido de modo imediato e que se ocupe dele com amor. É sempre de tais pessoas, e não dos assalariados, que vêm as grandes descobertas."
(Arthur Schopenhauer)

Arquivo do mês: September, 2005

27/09/2005

Início no Java

Nesse final de semana, comecei a estudar Programação Orientada a Objetos. Eu nunca tinha experimentado essa maneira de programar e venho gostando bastante. :)

No início, fiz alguma coisa em C++; Depois mudei todo o sistema do meu blog para usar classes (ou "bibliotecas", como o hlegius prefere, não sei porquê...) e agora então, por sugestão do , comecei a aprender Java.

Acho que é uma excelente maneira de me aprofundar na orientação a objetos. Desde o início da minha apostila, estou me deparando com a POO; o Java é uma linguagem completamente orientada a objetos (tanto que é sempre o exemplo quando alguém fala dela).

Pelo pouco que programei até agora (comecei hoje), percebi quatro vantagens legais que o C não tinha:

  1. Declaração de variáveis em qualquer lugar do documento. O C++, o PHP e várias outras linguagens permitem isso também...
  2. Multi-plataforma. Linux, Windows, Mac, Solaris... O mesmo código roda em tudo! :) C também roda em tudo, mas não exatamente da mesma maneira como o Java
  3. Desenvolvimento para web via applets.
  4. Parece muito fácil criar interfaces gráficas. Não sei se é mesmo, mas parece.

Bom... Não entendi direito o negócio de plataforma Java, pra ser sincero... Mas ainda tô iniciando aí nesse mundo do Java e da POO. :)

E então, para finalizar fica um código de um exercício que eu fiz; o primeiro da primeira apostila (que inclusive eu já concluí a leitura):

Calcular a soma e a média de vários números, e ver o maior e o menor

import javax.swing.JOptionPane;
 
/* Eu não precisava de array para esse programa, só usei porque
 * estou aprendendo Java então preciso me acostumar com arrays... */
 
class Exercicio {
import javax.swing.JOptionPane;
 
/* Eu não precisava de array para esse programa, só usei porque
 * estou aprendendo Java então preciso me acostumar com arrays... */
 
class Exercicio {
        public static void main(String args[]) {
                int n;
                String string;
 
                JOptionPane.showMessageDialog(null, "Olá. Esse programa serve pra calcular a soma e a média entre vários números, além de definir o maior e o menor deles.");
                JOptionPane.showMessageDialog(null, "Restrições:\n\n1. Só funciona com números entre -1.000.000 e 1.000.000.\n2. Só funciona (a entrada e a saída) com números inteiros.");
                string=JOptionPane.showInputDialog("Você quer calcular a média entre quantos termos?");
                n=Integer.parseInt(string);
 
                int array[] = new int[n];
                int i, m, soma=0, maior=-1000000, menor=1000000;
 
                for (i=0; i<n; i++) {
                        m=i+1;
                        string=JOptionPane.showInputDialog("Digite o "+m+"o. número:");
                        array[i]=Integer.parseInt(string);
                        soma+=array[i];
                        if (array[i]>maior) {
                                maior=array[i];
                        }
                        if (array[i]<menor) {
                                menor=array[i];
                        }
                }
 
                int media=soma/n;
 
                JOptionPane.showMessageDialog(null, "A soma de todos os números é "+soma+".");
                JOptionPane.showMessageDialog(null, "A média de todos os números é "+media+".");
                JOptionPane.showMessageDialog(null, "O maior dos números é "+maior+".");
                JOptionPane.showMessageDialog(null, "O menor dos números é "+menor+".");
        }
}

No mais, nada de novo. Só pra registrar a data de meu início no Java. :D

Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais

Um comentário...

25/09/2005

Mudanças no Site e Código do Blog

Ultimamente fiz várias alterações no site. Refiz quase que todas as páginas e deixei tudo um pouco mais leve e mais fácil para mudar depois. :D Depois de conhecer a POO, me viciei nela no final de semana e converti meu site inteiro para classes. E agora, que seu script tá um pouco melhor organizado, vou colocar aqui para quem quiser copiar, usar alguma idéia, saber como eu estou indo em POO, ver as besteiras que eu faço enquanto programo, etc. :lol: resolvi disponibilizar todo o código de meu blog aqui.

Já que meu blog tem alguns bugs (known bugs de pouca importância, como o caso de se alguém escreve CHARESPC no meio de um comentário ele deve criar um &;), peço somente que ninguém destrua-o sabendo disso. Se alguém descobrir algum bug, pode me enviar um e-mail que ficarei bastante grato. :)

Já que não passei a sessão de administração para POO não vou publicá-la aqui, mas depois de resolver alguns bugzinhos pretendo disponibilizar o código completo, inclusive com um arquivo de instalação que cria as tabelas no banco de dados, para todos poderem usar um sisteminha de blog simples e prático (só que acho que vai ser algo mais voltado a programadores, porque tem vantagens como o uso do GeSHi, e desvantagens como eu publicar todos os posts escrevendo em HTML - isso mesmo, até os & que eu escrevo são &amp; que são &amp;amp; *e um loop infinito pela frente). Hmmm, aliás, quem quiser me ajudar a fazer parte desse projeto para tornar o meu blog um software livre, sinta-se livre para me mandar um e-mail também. :p

Então, uma última observação é que eu substituí todos os <code (note a ausência do > ) por tag code e todos os </code> por tag /code, porque senão minhas expressões regulares do código dariam bug (quer saber por que? Então leia os códigos!)

Funções e classes "includadas" em todos os arquivos

<?php
session_start();
 
// Syntax Highlight - GeSHi
if (!class_exists(GeSHi)) {
	include("geshi.php");
}
 
// Objeto de conexão do MySql
class MySql {
	var $host="servidor";
	var $usuario="usuario";
	var $senha="senha";
	var $db="bancodedados";
	var $conexao;
 
	function conecta() {
		$this->conexao=mysql_connect($this->host, $this->usuario, $this->senha);
		mysql_select_db($this->db);
	}
 
	function desconecta() {
		mysql_close($this->conexao);
	}
}
 
// Classe com as funções de expressões regulares
class Regex {
	function Replace($o, $d, $t, $codes=0) {
		for ($i=0; $i<sizeof($o); $i++) {
			$o[$i]=str_replace('(', '\(', $o[$i]);
			$o[$i]=str_replace(')', '\)', $o[$i]);
			$t=eregi_replace($o[$i], $d[$i], $t);
		}
		if ($codes==1) {
			$t="tag /code".$t."tag code";
		} else if ($codes==2) {
			$t.="tag code";
		} else if ($codes==3) {
			$t="tag /code".$t;
		}
		return $t;
	}
 
	function Emoticons() {
		$o[0]=":)";
		$d[0]="feliz";
		$o[1]=":(";
		$d[1]="triste";
		$o[2]=":o";
		$d[2]="bocaaberta";
		$o[3]=":p";
		$d[3]="lingua";
		$o[4]=":angry:";
		$d[4]="raiva";
		$o[5]=":s";
		$d[5]="confuso";
		$o[6]=":blink:";
		$d[6]="inacreditavel";
		$o[7]=";)";
		$d[7]="piscando";
		$o[8]=":lol:";
		$d[8]="rindo";
		$o[9]=":d";
		$d[9]="sorriso";
		$o[10]=":unsure:";
		$d[10]="semgraca";

		for ($i=0; $i<sizeof($d); $i++) {
			$d[$i]="<img src=\"/emoticon/".$d[$i].".gif\" alt=\"".$o[$i]."\" />";
		}
 
		if (!ereg("tag code", $texto)) {
			$this->texto=$this->Replace($o, $d, $this->texto);
		} else {
			preg_match_all("/<\/code>(.+)tag code/sU", $this->texto, $mat1);
			for ($i=0; $i<sizeof($mat1[1]); $i++) {
				$this->texto=str_replace($mat1[1][$i], $this->Replace($o, $d, $mat1[1][$i]), $this->texto);
			}
			preg_match("/^(.+)tag code/sU", $this->texto, $mat2);
			$texto=str_replace($mat2[1], $this->Replace($o, $d, $mat2[1]), $this->texto);
			$rev=strrev($this->texto); //Tenho medo do PHP5.0.5
			preg_match("/^(.+)>edoc\/</sU", $rev, $mat3); //Nossa, que código louco!
			$rev=strrev($mat3[1]); //Repito... Tenho medo do PHP5.0.5
			$this->texto=str_replace($rev, $this->Replace($o, $d, $rev), $this->texto); //Agora fuck PHP5.0.5!
		}
	}
 
	function GeshiHighlight($codigo, $linguagem) {
		$geshi=new GeSHi($codigo, $linguagem, "./geshi/");
		return $geshi->parse_code();
	}
 
	function Codigos() {
		preg_match_all("/tag code class=\"(.*)\">(.*)<\/code>/sU",
			$this->texto,
			$matches);
		for ($i=0; $i<sizeof($matches[1]); $i++) {
			$g=$this->GeshiHighlight($matches[2][$i], $matches[1][$i]);
			if (eregi("MSIE", $_SERVER["HTTP_USER_AGENT"])) {
				$g=ereg_replace("<pre>", "<pre class=\"alturamaxima\">", $g);
			}
			$this->texto=str_replace($matches[0][$i],
				$g,
				$this->texto);
		}
	}
 
	function QuebraLinha() {
		$this->texto=nl2br($this->texto);
	}
}
 
// Objeto "Artigo"
class Artigo extends Regex {
	var $id;
	var $data;
	var $permalink;
	var $titulo;
	var $texto;
	var $comentarios;
 
	function Artigo($identificacao) {
		$this->id=$identificacao;

		$mysql=new MySql();
		$mysql->conecta();
 
		$query_post=mysql_query("SELECT data, permalink, titulo, texto FROM artigos WHERE id='{$this->id}'");
		$post=mysql_fetch_row($query_post);
		$this->data=date("d/m/Y", $post[0]);
		$this->permalink=$post[1];
		$this->titulo=$post[2];
		$this->texto=$post[3];
 
		$query_comentarios=mysql_query("SELECT count(id) FROM comentario WHERE idpost='{$this->id}'");
		$comentarios=mysql_fetch_row($query_comentarios);
		$this->comentarios=$comentarios[0];
 
		$mysql->desconecta();
	}
 
	function AppendGoogleAds($ads) {
		$this->texto.="\n\n".$ads;
	}
 
	function Mostra() {
		echo "<h2><a href=\"/post/{$this-?PHPSESSID=9ec34c96b02b3755051aa682d1e02001>permalink}\">{$this->titulo}</a></h2>\n";
		echo $this->texto."\n";
		echo "<h5>{$this->data} ";
		echo "<a href=\"/post/{$this-?PHPSESSID=9ec34c96b02b3755051aa682d1e02001>permalink}\" class=\"permalink\">permalink</a> ";
		echo "<a href=\"/post/{$this-?PHPSESSID=9ec34c96b02b3755051aa682d1e02001>permalink}#comentarios\" class=\"comentarios\">";
		echo "{$this->comentarios} comentário(s)</a></h5>\n";
	}
 
	function MostraComentarios() {
		if ($_POST["comenta"]&&(!$_SESSION["comentario"]||time()-30>$_SESSION["comentario"])) {
			$_SESSION["comentario"]=time();
			EscreveComentario($_POST["nome"], $_POST["email"], $_POST["texto"], $this->id);
		}
		$comentarios=new Comentarios($this->id);
		$comentarios->Mostra();
	}
}
 
// Objeto Artigos (serve para pegar vários artigos sem eu precisar fazer nada nas outras páginas)
class Artigos {
	var $id;
	var $titulo;
	var $texto;
	var $permalink;
	var $data;
	var $comentarios;
 
	function Artigos($n=20, $start=0, $emoticons=0, $codigos=0, $mostrar=0, $comentarios=0) {
		$mysql=new MySql();
		$mysql->conecta();
		$query=mysql_query("SELECT id FROM artigos ORDER BY data DESC, id DESC LIMIT $start,$n");
		$mysql->desconecta();
		for ($i=0; $array=mysql_fetch_array($query); $i++) {
			$artigo=new Artigo($array["id"]);
			if ($emoticons) {
				$artigo->Emoticons();
			}
			if ($codigos) {
				$artigo->Codigos();
			}
			if ($mostrar) {
				$artigo->Mostra();
			}
			if ($comentarios) {
				$artigo->MostraComentarios();
			}
			$this->id[$i]=$array["id"];
			$this->titulo[$i]=$artigo->titulo;
			$this->texto[$i]=$artigo->texto;
			$this->permalink[$i]=$artigo->permalink;
			$this->comentarios[$i]=$artigo->comentarios;
			$this->data[$i]=$artigo->data;
		}
	}
}
 
// Objeto Comentário
class Comentario extends Regex {
	var $id;
	var $data;
	var $nome;
	var $email;
	var $ip;
	var $useragent;
	var $texto;
	var $numero;
 
	function Comentario($identificacao, $numero) {
		$this->id=$identificacao;
		$this->numero=$numero;
 
		$mysql=new MySql();
		$mysql->conecta();
 
		$query=mysql_query("SELECT data, nome, email, ip, useragent, texto FROM comentario WHERE id='{$this->id}'");
		$comentario=mysql_fetch_row($query);
 
		$this->data=date("d/m/Y", $comentario[0]);
		$this->nome=$comentario[1];
		if ($_SESSION["tiagomadeira"]) {
			$this->email="</small><span style=\"font-size:10px;\"><br />";
			if ($comentario[2]) $this->email.="<strong>E-mail:</strong> ".$comentario[2]."<br />\n";
			if ($comentario[3]) $this->ip="<strong>IP:</strong> ".$comentario[3]."<br />\n";
			if ($comentario[4]) $this->useragent="<strong>User Agent:</strong> ".$comentario[4];
			$this->useragent.="</span>";
		} else {
			$this->email="</small>";
		}
		$this->texto=$comentario[5];
 
		$mysql->desconecta();
	}
 
	function CharEspc($pos) {
		if ($pos==1) {
			$this->texto=preg_replace("/&([^;]+);/sU", "CHARESPC\\1/CHARESPC", $this->texto);
		} else if ($pos==2) {
			$this->texto=preg_replace("/CHARESPC(.+)\/CHARESPC/sU", "&\\1;", $this->texto);
		}
	}
 
	function Mostra() {
		echo "<div class=\"comentario\" id=\"com{$this->id}\">\n";
		echo "\t<h4><a href=\"?PHPSESSID=9ec34c96b02b3755051aa682d1e02001#com{$this->id}\">#{$this->numero}</a> | ";
		echo "{$this->nome} ";
		echo "<small>{$this->data}{$this->email}{$this->ip}{$this->useragent}</h4>\n";
		echo "<p>{$this->texto}</p>";
		echo "</div>\n";
	}
}
 
// Objeto Comentários
class Comentarios {
	var $idpost;
	var $ids;
	var $tamanho;
 
	function Comentarios($idpost) {
		$this->idpost=$idpost;
 
		$mysql=new MySql();
		$mysql->conecta();

		$query=mysql_query("SELECT id FROM comentario WHERE idpost='{$this->idpost}' ORDER BY data ASC, id ASC");
		for ($i=1; $array=mysql_fetch_array($query); $i++) {
			$this->ids[$i]=$array["id"];
		}
 
		$this->tamanho=$i;
		$mysql->desconecta();
	}
 
	function Mostra() {
		echo "<h3 id=\"comentarios\">Comentários</h3>\n";
		for ($i=1; $i<$this->tamanho; $i++) {
			$comentario=new Comentario($this->ids[$i], $i);
			$comentario->CharEspc(1);
			$comentario->Emoticons();
			$comentario->CharEspc(2);
			$comentario->QuebraLinha();
			$comentario->Mostra();
		}
 
		if ($this->tamanho <= 1) {
			echo "<p>Nenhum comentário cadastrado.</p>\n";
		}
 
		FormularioComentario($this->idpost);
	}
}
 
// Função para descobrir IP do visitante
function PegaIP() {
	if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "desconhecido")) {
		$ip=getenv("HTTP_CLIENT_IP");
	} else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "desconhecido")) {
		$ip=getenv("HTTP_X_FORWARDED_FOR");
	} else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "desconhecido")) {
		$ip=getenv("REMOTE_ADDR");
	} else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "desconhecido")) {
		$ip=$_SERVER['REMOTE_ADDR'];
	} else {
		$ip="desconhecido";
	}

	return($ip);
}
 
// Função que escreve o formulário para envio de comentário
function FormularioComentario($idpost) {
	$mysql=new MySql();
	$mysql->conecta();
	$query=mysql_query("SELECT permalink FROM artigos WHERE id='$idpost'");
	$row=mysql_fetch_row($query);
	$permalink=$row[0];
	$mysql->desconecta();
?>
 
<h3>Escreva um comentário</h3>
 
<form action="/post/<?=$permalink;?><input type="hidden" name="PHPSESSID" value="9ec34c96b02b3755051aa682d1e02001" />#comentarios" method="post">
	<ul>
		<li><label for="nome">Seu nome:</label>
			<input type="text" name="nome" id="nome" />
		</li>
		<li><label for="email">Seu e-mail<strong>*</strong>:</label>
 
			<input type="text" name="email" id="email" />
		</li>
		<li class="textarea"><label for="texto">Comentário:</label>
			<textarea name="texto" id="texto" cols="20" rows="15"></textarea>
		</li>
	</ul>
	<p><strong>*</strong> - Ele não aparecerá em público. Serve apenas para eu te contatar,
	caso queira responder seu comentário.</p>
 
	<p><input type="submit" name="comenta" value="Comentar" /></p>
</form>
<?php
}
 
// Função que cadastra um comentário
function EscreveComentario($nome, $email, $texto, $idpost) {
	$ip=PegaIP();
	$useragent=$_SERVER["HTTP_USER_AGENT"];
	$nome=purifica($nome);
	$email=purifica($email);
	$texto=purifica($texto);
	$data=time();
	$mysql=new MySql();
	$mysql->conecta();
	mysql_query("INSERT INTO comentario (id, idpost, nome, email, texto, data, ip, useragent) VALUES
		('', '$idpost', '$nome', '$email', '$texto', '$data', '$ip', '$useragent')") or die(mysql_error());
	$mysql->desconecta();
	$email=($email)?$email:"contato@tiagomadeira.net";
	$mensagem="No post de id $idpost, o $nome ($email) comentou em ".date("d/m/Y", $time)." dizendo:";
	$mensagem.="\n\n";
	$mensagem.="$texto";
	mail("contato@tiagomadeira.net", "[tiagomadeira.net] Novo Comentário!", "$mensagem", "From: $nome <$email>");
}
 
// Função que cria escreve o título das seções
function titulo($titulo) {
	$tit="$titulo [tiagomadeira.net]";
	echo "<script type=\"text/javascript\">\n";
	echo "\ttop.document.title=\"$tit\";\n";
	echo "</script>\n";
}
 
// Função para purificar os comentários depois do envio
function purifica($texto) {
	$t=ereg_replace("&", "&amp;", $texto);
	$t=ereg_replace("%", "&#37;", $t);
	$t=ereg_replace("<", "&lt;", $t);
	$t=ereg_replace(">", "&gt;", $t);
	$t=ereg_replace("\[", "&#91;", $t);
	$t=ereg_replace("\]", "&#93;", $t);
	$t=ereg_replace("\"", "&quot;", $t);
	return $t;
}
 
// Função para editar artigos
function pra_textarea($texto) {
	$texto=ereg_replace("&", "&amp;", $texto);
	$texto=ereg_replace("<", "&lt;", $texto);
	$texto=ereg_replace(">", "&gt;", $texto);
	$texto=ereg_replace("\"", "&quot;", $texto);
	return $texto;
}
 
?>

E os arquivos que usam essas funções e classes...

/artigos (ou /blog)

<?php
	$artigosporpagina=10; //Artigos Por Página
	$p=($_GET["pg"])?$_GET["pg"]:1; //Página Atual

	$mysql=new MySql();
	$mysql->conecta();
	$query=mysql_query("SELECT count(id) FROM artigos");
	$row=mysql_fetch_row($query);
	$np=ceil($row[0]/$artigosporpagina);
	$mysql->desconecta();
 
	$paginacao="";
	for ($i=1; $i<=$np; $i++) {
		$paginacao.="<a href=\"/artigos/$i\"";
?PHPSESSID=9ec34c96b02b3755051aa682d1e02001
		if ($i==$p) $paginacao.=" style=\"font-weight:bold; color:#c00;\"";
		$paginacao.=">$i</a> ";
	}
	$paginacao="\n\n<p style=\"text-align:center;\"><span style=\"color:#aaa; font-size:11px;\">Ir para página:</span> $paginacao</p>\n\n";
 
	echo $paginacao;

	$artigos=new Artigos($artigosporpagina, ($p-1)*$artigosporpagina);
	echo "<ul>\n";
	for ($i=0; $i<count($artigos->id); $i++) {
		echo "<li><a href=\"/post/{$artigos-?PHPSESSID=9ec34c96b02b3755051aa682d1e02001>permalink[$i]}\">{$artigos->titulo[$i]}</a><br />";
		echo "<small>{$artigos->data[$i]} ";
		echo "<a class=\"comentarios\" href=\"/post/{$artigos-?PHPSESSID=9ec34c96b02b3755051aa682d1e02001>permalink[$i]}#comentarios\">{$artigos->comentarios[$i]} comentário(s)</a>";
		if ($_SESSION["tiagomadeira"]) {
			echo " <a href=\"/admin-edita&amp;id={$artigos-?PHPSESSID=9ec34c96b02b3755051aa682d1e02001>id[$i]}\">[editar]</a>";
			echo " <a href=\"/admin-exclui&amp;id={$artigos-?PHPSESSID=9ec34c96b02b3755051aa682d1e02001>id[$i]}\">[excluir]</a>";
		}
		echo "</small></li>\n";
	}
	echo "</ul>\n";
 
	echo $paginacao;
?>

/ (ou /ultimos)

<?php
	$artigos=new Artigos(5, 0, 1, 1, 1);
?>

Para finalizar... .htaccess

RewriteEngine On
 
#Diretórios
RewriteRule ^link/?$ http://tableless.tiagomadeira.net
RewriteRule ^post/?$ http://tableless.tiagomadeira.net/blog
RewriteRule ^script/?$ http://tableless.tiagomadeira.net/scripts
RewriteRule ^downloadscript/?$ http://tableless.tiagomadeira.net/scripts
 
#Blog: A grande excessão
RewriteRule ^blog/([0-9]+)$ http://tableless.tiagomadeira.net/index.php?l=blog&pg=$1
RewriteRule ^/link/blog/([0-9]+)$ http://tableless.tiagomadeira.net/index.php?l=blog&pg=$1
RewriteRule ^artigos/([0-9]+)$ http://tableless.tiagomadeira.net/index.php?l=blog&pg=$1
RewriteRule ^/link/artigos/([0-9]+)$ http://tableless.tiagomadeira.net/index.php?l=blog&pg=$1
 
#Links
RewriteRule ^link/(.+)$ http://tableless.tiagomadeira.net/index.php?l=$1
RewriteRule ^([^/.]+)$ http://tableless.tiagomadeira.net/index.php?l=$1
 
#Posts
RewriteRule ^post/([0-9]+)$ http://tableless.tiagomadeira.net/index.php?l=artigo&id=$1
RewriteRule ^post/(.+)$ http://tableless.tiagomadeira.net/index.php?l=artigo&permalink=$1
 
#Scripts
RewriteRule ^script/(.+)$ http://tableless.tiagomadeira.net/index.php?l=script&script=$1
RewriteRule ^downloadscript/(.+)$ http://tableless.tiagomadeira.net/downloadscript.php?script=$1
 
#Feeds
RewriteRule ^feed.rss$ http://tableless.tiagomadeira.net/rss.php
RewriteRule ^rss.xml$ http://tableless.tiagomadeira.net/rss.php
RewriteRule ^index.rss$ http://tableless.tiagomadeira.net/rss.php
RewriteRule ^sitemap.xml$ http://tableless.tiagomadeira.net/sitemap.php

Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais

5 comentários

24/09/2005

Programação Orientada a Objetos

Estou finalmente começando a aprender orientação a objetos. É claro que o conceito eu já conhecia e até como usar "cin" e "cout" no C++, mas agora resolvi estudar a fundo a Programação Orientada a Objetos, porque vejo que ela está cada vez mais comum entre os programadores. Estou aproveitando pra aprender C++, o que pode ser bastante útil em olimpíadas, para ter strings com o tipo string, poder declarar variáveis no meio, além de programar orientado a objetos.

Hmmm... Eu estava lendo uns tutoriais de introdução a POO e agora vou tentar fazer algumas coisas em C++ e em PHP também (porque é uma linguagem que eu domino mais, fica mais fácil entender POO). Se alguém quiser estudar comigo, entre em contato (e a mesma coisa se alguém tiver uma apostila legal e está afim de ajudar).

XUL

Durante as aulas, estou estudando XUL. É uma linguagem de interface gráfica, tipo um HTML, mas que tem umas coisas bem interessantes. O único problema é que só roda em Mozilla... E também estou aumentando bastante meu conhecimento de JavaScript utilizando XUL e iniciando uma fase nova de tableless com DOM. :)

Meetweb, tableless

Semana passada eu peguei dois serviços da Meetweb. São serviços de converter um site para tableless e programá-lo em PHP usando banco de dados MySql (ou seja, minha especialidade). Por isso também, estou entrando nessa nova fase de tableless que citei no parágrafo acima.

Desvendando os segredos do C

É incrível que quando eu estudei C no início eu passei por alguns conceitos que na época eu achava complicados. Além dos operadores binários que o Paulo Matias me ensinou semana passada, ontem é que eu finalmente aprendi as funções de alocação dinâmica do C... E é tão simples! :D

Olimpíada Regional de Matemática

Ontem fiz a prova da segunda fase (final) da Olimpíada Regional (catarinense) de Matemática. Dos cinco problemas, resolvi quatro e acho que acertei três e meio. Um deles eu pensei certo, mas dei a resposta errada... Mas já que a prova era discursiva, acredito que eles dêem no mínimo metade dos 20 pontos do problema. Não sei se dá pra ganhar medalha, porque a prova tava bem fácil então mais gente deve ter ido bem.

Problemas Lógicos

Estou meio parado quanto a solução de problemas lógicos, mas estou estudando bastante para resolvê-los de forma melhor. Por enquanto, nenhum código novo. Tenho uma lista de problemas da UVa para resolver e ainda falta o último problema do capítulo 1 do USACO Training Gateway (Checkers Challenge).

Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais

2 comentários

Assine via RSS

Assine gratuitamente o meu blog e receba todas as atualizações na hora, em seu agregador de feeds favorito.

Seja o 231º assinante

Busca no blog

Escreva palavras-chave para buscar e clique em Pesquisar.

Busca Google

Blogs de minha autoria