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
segunda-feira, 3 de agosto de 2009
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.
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:
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:
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:
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
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
Assinar:
Postagens (Atom)