segunda-feira, 3 de agosto de 2009

Novidades

Para quem gosta de desenvolvimento de games ou gosta da linguagem de programação c++, deve vizitar o novíssimo blog:

http://gamedevcplusplus.blogspot.com/

;D

Semestre novo

Hoje começa novo semestre aqui na Universidade Federal de Santa Catarina - UFSC (acho tão imponente esse nome). Então quero dar boas vindas aos calouros Geeks aqui da universidade.. E dizer pro resto de vocês, Geeks: "Quem é Geek é foda. - tenham isso em Mente e não me desapontem." ;p

Cartão de Crédito

Uma pequena curiosidade do dinheiro de plástico que é tão presente e difundido nas nossas vidas.

Pesquisando na Internet, descobri que a referência mais popular à invenção do cartão de crédito é à Frank MacNamara. Foi realmente com ele que a forma de pagamento com cartão se popularizou.

Segundo a wikipédia:

"... na década de 1950, quando Frank MacNamara estava com executivos financeiros em um restaurante na cidade de Nova York e percebeu que tinha esquecido seu dinheiro e seu talão de cheques para pagar a conta, que teve a idéia de criar um cartão em que contivesse o nome do dono, e que após um tempo, o dono do cartão pudesse pagar a conta. Então, naquele mesmo ano, ele criou o Diners Club Card que era feito de papel cartão..."

No início era apenas para pessoas importantes e em alguns restaurantes, dois anos mais tarde, ganhou milhares de adeptos e era aceito em muitos estabelecimentos e criado o primeiro cartão de crédito internacional. Em 1955 foi feito de plástico.

Contudo em o primeiro registro que encontrei na internet foi em antes de 1890 na Europa. E de acordo com a "Encyclopedia Britannica", o uso do cartão é originário dos Estados Unidos, na década de 20, quando firmas individuais, como companias de óleo e cadeias de hoteis, começaram a oferecer o serviço a seus clientes.

Essa idéia é antiga, mas com o desenvolvimento da tecnologia e envolvimento de empresas grandes e bancos, ela é utilizada e difundida pelo mundo todo.

segunda-feira, 25 de maio de 2009

Dia do Orgulho Nerd / Geek-> NERDDAY

Oi!
Então, hoje é um dia muito importante. Você não sabe??

Wikipedia.define("Dia do Orgulho Nerd");

"O Dia do Orgulho Nerd, ou Dia do Orgulho Geek é uma iniciativa que advoga o direito de toda pessoa ser um nerd ou um geek. Teve origem na Espanha ("dia del orgullo friki", em espanhol).

O dia do orgulho nerd é celebrado em 25 de maio desde 2006, comemorando a première do primeiro filme da série Star Wars, em 1977. O dia 25 de maio também é o Dia da Toalha, em homenagem ao escritor Douglas Adams."


//sobre o Dia da Toalha não comento, pois não conheço ainda a obra

//do Guia dos Mochileiros das Galáxias


Por isso, viemos fazer uma homenagem a você, que achou esse blog depois de passar por 8729937 links e com certeza é Geek! :D

Verdade universal: Nerds mandam bem!

E um Bônus ;)


Feliz dia do Geek pra você também!

Saudações!

quarta-feira, 29 de abril de 2009

Include circular

Outro dia um colega tava tendo dificuldades com a inclusão circular num programa escrito em c++. Como esta pode ser uma dúvida frequente entre programadores iniciantes na linguagem, vou tentar esclarecê-la. xD

o problema da inclusão circular acontece quando precisamos incluir um arquivo cabeçalho dentro de outro. Como em:


//Classe B usa a classe A
#ifndef _B_
#define _B_
#include "classeA.h"

class B{
private:
A a;
public:
};

#endif

//Classe A usa a classe B
#ifndef _A_
#define _A_
#incude "classeB.h"

class A{
private:
B b;
public:
};
#endif

//Classe C usa a classa A e a classe B
#ifndef _C_
#define _C_
#include "classeB.h"
#include "classeA.h"

class C{
private:
A a;
B b;
public:
};

#endif




Mesmo colocando diretivas esse código não deve compilar. A diretiva #ifndef ALGO serve para que, caso ainda não tenha sido definido o ALGO entao o compilador deve 'ler' o restante caso contrário deve ignorar. Neste caso usamos essa diretiva para que o compilador nao inclua o código milhares de vezes, e sim apenas uma única vez. Então, caso ainda não tenha sido definido esse algo ele deve definir( #define ALGO) e compilar todo o código até o #endif (e seguir normalmente) e caso alguém tente usar esse código, e o compilador tente compilar novamente ele não consiguirá, porque já está definido o ALGO. Portanto o compilador deve ter compilado esse código apenas uma vez \o/

Então por que geraria a inclusão circular e não compilaria? Justamente por causa dessas diretivas. Então por que não tirá-las? Porque caso o faça, o compilador pode incluir o mesmo código indefinidas vezes causando diversos erros de compilação. Vamos supor que o compilador queira compilar a classe B primeiro. Oras, a classe B inclui a classe A, mas a classe A inclui a classe B, a qual ja foi definida, por tanto o compilador nao pode compila-la. Entao faltará a classe B para a classe A.

Exemplificando:

//Classe B usa a classe A
#ifndef _B_
#define _B_

#include "classeA.h"

#ifndef _A_
#define _A_
/*
aqui a classe B ainda não foi declarada, mas a classe A abaixo irá tentar usá-la.
*/
#incude "classeB.h"
/*o comilador aqui não pode fazer esse include,
porque há uma diretiva que não permite
portnato a classe A não pode usar a classe B*/


class A{
private:
B b;
public:
};
#endif


class B{
private:
A a;
public:
};

#endif


Qual a solução? Simples. Uma forward declaration, ou seja uma declaração antecipada. Ao invés de dizer que inclui uma classe toda (ou seja o arquivo .h ou .hh), a qual acabaria gerando uma inclusão circular, diremos apenas que há uma classe chamada 'X'. Como consequencia desse método é que devemos, usar referências, ao invés de variáveis, justamente por apenas sabermos que existe um classe, mas não como ela é definida.

solução:
//Classe B usa a classe A
#ifndef _B_
#define _B_

class A; //uma declaração antecipada.

class B{
private:
A* a; //aqui deve ser um ponteiro, porque não
//temos definido a classe A

public:
};

#endif

//Classe A usa a classe B
#ifndef _A_
#define _A_

class B; //uma declaração antecipada.


class A{
private:
B* b;//idem
public:
};
#endif

//Classe C usa a classa A e a classe B
#ifndef _C_
#define _C_

#include "classeB.h"
#include "classeA.h"

/*
como aqui, a inclusão das classes não
deve gerar a inclusão circular, podemos deixar assim.
*/


class C{
private:
A a;
B b;
public:
};

#endif

Bom, como iremos implementar esse código em algum arquivo, e precisaremos saber como são descritas as classes, devemos incluir o arquivo cabeçalho no arquivo de implementação.

Termos, então, seguindo o exemplo, tres arquivos cabeçalhos: classeA.h, classeB.h e classeC.h
e por consequencia teremos tres arquivos de implementação, que devem incluir o cabeçalho da classe declarada antecipadamente. Por exemplo

o arquivo de implementação da classe classeB.h, poderia ser:

#include "classeB.h"
#include "classeA.h"

B::metodos(){} //etc

o arquivo de implementação da classe classeA.h, poderia ser:

#include "classeA.h"
#include "classeB.h"

A::metodos(){} //etc

e o da classe classeC.h, poderia ser:

#include "classeC.h"

C::metodos(){}


Bom comentei uma solução para o problema exposto, a que na minha opnião é melhor. Dúvidas e sugestões são bem vindas xD

A Matrix NÃO roda em Windows



this.source= http://www.boadica.com.br

O que é uma circunferência?

é um ponto arregassado!

oO