Objota O mundo orientado a objetos

De volta ao Blog

Posted on julho 30, 2013

Posted by Pedro

Olá galerinha,

Bom, esse post é mais para justificar, nos próximos meses voltarei a publicar várias dicas e exemplos aqui no Blog. Os assuntos que vou focar é mobile, visto que existe uma demanda muito grande de conhecimentos referente a iOS, Windows Phone e Android.

Espero que gostem dos meus novos post.

E pra quem esperou tanto tempo para ver novamente meus posts, um muito Obrigado pela paciência.

Categorias: Java 3 Comentários

Introdução ao C++ ou Cpp e Boas Práticas

Posted on outubro 22, 2012

Posted by Fernando Gomes

Estou iniciando como moderador do blog, vou tentar posta pelo menos toda semana no blog sobre C++.

No meu primeiro post, decidi começar o básico de C++, para não ficar difícil de entender os próximos posts.
Chega de "lero lero" e vamos ao post.

  1. Para começar com C++ é importante ler e praticar os exercícios desse livro:
  2. http://pt.wikibooks.org/wiki/Programar_em_C%2B%2B

    Esse livro ensina passo a passo de como começar a programar em c++, utilizando ponteiros, referencias, etc

  3. Boas Práticas
    • Quando criar uma classe ao declaras as variáveis globais (variável declarada no .h)  utilize esse padrão:
// Classe Teste
public Teste
{
public:
int m_iNumeroInteiro = 0; // numero inteiro, varivel sempre iniciando com "m_i"
int *m_pNumeroInteiro; // ponteiro de numero inteiro, variavel sempre iniciando com "m_p"
int &m_rNumeroInteiro; // referencia de numero inteiro, variavel sempre iniciando com "m_r"
double m_dNumeroDecimal = 0.0; // numero decimal, variavel sempre iniciando com "m_d"
double *m_pNumeroDecimal; // ponteiro de um numero decimal
double &m_pNumeroDecimal; // referencia de um numero decimal
char m_cLetra = 'c'; // cáracter, variavel sempre iniciando com "m_c"
char *m_pLetra; // ponteiro de um cáracter
char &m_rLetra; // referencia de um cáracter
// e assim sucessivamente...
}

Obs. O "m" significa que a variável é membro da classe.

para variáveis locais (variável declarada dentro do método) :

void Teste::set()
{
int iNumeroInteiro; // variavel int iniciando com i
double dNumeroDecimal; // variavel double iniciando com d
char cLetra; // variavel char iniciando com c
}

    • Quando criar uma variável comece com letra minuscula
      (exemplo: int nIndice)
    • Quando criar um método comece com letra minuscula
      (exemplo: void run())
    • Quando criar uma classe comece com letra Maiuscula
      (exemplo: class Pessoa)

Abs,

Classe com o Design Pattern Singleton no Objective-C

Posted on setembro 13, 2012

Posted by Pedro

Galera segue ai um exemplo simples para quem tem dúvidas de como criar uma classe no Design Pattern Singleton utilizando Objective-C.


//arquivo Exemplo.h

@interface Exemplo : NSObject {
    
    NSInteger propriedade;
    
}

@property(nonatomic, assign) NSInteger propriedade;

+ (Exemplo *)shared;

@end

Abaixo o código do arquivo Exemplo.m


//arquivo Exemplo.m

#import "Exemplo.h"

static Exemplo *_shared = nil;

@implementation Exemplo

@synthesize propriedade;

+ (Exemplo *)shared {
    
	if(_shared == nil){
		
		@synchronized([Exemplo class]){
			_shared = [[Exemplo alloc] init];
		}
		
	}
	
	return _shared;
	
}

- (id)init{
    
    self = [super init];
    
    if (self) {
        propriedade = 10;
    }
    
    return self;
    
}

@end


//Chamando o objeto estático

[Exemplo shared].propriedade = 20;

Espero que seja útil pra vocês. Até a próxima!

PHP – Problema com caracteres na conexão com o banco de dados utilizando PDO

Posted on setembro 13, 2012

Posted by Pedro

Olá galera, fica aqui uma dica bacana para quem está tendo problemas com caracteres na conexão com o banco de dados utilizando PDO.

Problemas com charset geralmente ocorrem quando você processa os dados no seu site em um formato X e no banco em um formato diferente. Ai começam os problemas. Um exemplo simples é o uso de ISO-8859-1 na codificação do seu site e um banco de dados configurado para trabalhar com charset UTF-8.

Nesse exemplo vou configurar parâmetros de conexão como o banco de dados MySQL já que é geralmente o mais utilizando com PHP, e trabalhar com  os dados no formato UTF-8.


//Exemplo da classe em PHP com extends na classe PDO. Aqui vamos atribuir todas as variáveis da nossa conexão pra trabalhar no formato UTF-8.

class MysqlConnection extends PDO {

public function Connection($dsn, $username = "", $password = "", $driverOptions = array()) {

parent::__construct ( $dsn, $username, $password, $driverOptions );

$this->exec("SET NAMES utf8");

$this->exec("SET character_set='utf8'");

$this->exec("SET collation_connection='utf8_general_ci'");

$this->exec("SET character_set_connection='utf8'");

$this->exec("SET character_set_client='utf8'");

$this->exec("SET character_set_results='utf8'");

}

}


//Aqui é a string de conexão / $dsn que vamos usar para conectar ao nosso banco

$dsn = "mysql:host=localhost;dbname=meu_banco_de_dados;charset=utf8";

Bom é isso. Muito simples, certo?

Qualquer dúvida pode postar um comentário que irei responder.

Até a próxima.

Animação fadeIn com UIView

Posted on setembro 13, 2012

Posted by Pedro

Um exemplo simples para realizar a animação de um UIView.

Básicamente criamos uma instancia da Classe UIView e adicionamos ela a ViewController. Após isso aplicamos uma animação de fadein de 2.0 segundos.

Importante lembrar que esse código deve ir dentro do método - (void)viewDidLoad do ViewController

Obs: Isso é um exemplo simples, pois você pode usar diversas outras propriedades que também irá funcionar, como por exemplo: frame, alpha, transform (bastante usado em caso de animação 3D). Outras opções também podem ser adicionadas a animação, como por exemplo um seletor para quando terminar a animação, para quando iniciar a animação, EasyIn, EasyOut, transição, etc.



UIView *minhaView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)] autorelease];
minhaView.backgroundColor = [UIColor redColor];

[self.view addSubview:minhaView];

minhaView.alpha = 0.0;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];

minhaView.alpha = 1.0;

[UIView commitAnimations];



Até a próxima galera!

Projeto Zepelin – Unity3d

Posted on março 14, 2012

Posted by Rodrigo Ireno

Bom galera, esse é meu primeiro projeto com Unity3d, não é comercial ( claro ) e se vocês jogarem algum tempo vão perceber uma série de erros. Mas como disse foi meu primeiro projeto então nem eu esperava muita coisa, afinal não tem como fazer uma equipe de game de um homem só.
[O que é Unity3d]

Por falta de tempo acabei não postando mais nada no objota, mas prometo que algum conteúdo considerável de unity3d irá ter com certeza. Até lá apreciem algumas "graças" que são possíveis no Unity3d.

Abraço.

Link do jogo: Zeppelin

Unity3D

Posted on janeiro 25, 2012

Posted by Rodrigo Ireno

Unity3D é uma plataforma para desenvolvimento de jogos, entre várias outras como UDK ( Unreal ) e Cry. Estes softwares possibilitam integrar em um ambiente 3d, modelos, animações, vídeo, imagens e etc.. tudo o que você imaginar que um jogo tenha e claro, programação.

Ela utiliza três linguagens javascript, boo ( uma variação de python ) e C#. A plataforma já é bem conhecida, mas ao contrário das grandes engines concorrentes ele não é tão "parrudo", digamos assim. Um exemplo de jogo com UDK: Batman Arkham City, Gears of War entre muitos outros jogos extremamente realistas e "pesadões". Porém aí vem a grande sacada, unity roda muito bem em mobiles e na web ( tem seu próprio player ) e na mais recente versão também é possível exportar o jogo para flash. Atualmente o unity é uma engine barata a qual é possível fazer games de qualidade ( não confunda qualidade com gráficos realistas ).

Bom, esta foi minha palavrinha a respeito, segue um vídeo tutorial

e em breve teremos um tutorial aqui.

Utilizando objeto UIView do framework UIkit

Posted on janeiro 6, 2012

Posted by Rodrigo Ireno

A UIView é um objeto visual genérico previsto no framework UIKit. Por tanto qualquer objeto visivel na tela é um UIView ou extende-se a esta classe.
Exemplificando abaixo existe uma implementação com o UIView.

- (void)viewDidLoad
{
 [super viewDidLoad];

 UIView * objetoVisual = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 300, 60)];

 objetoVisual.backgroundColor = [UIColor redColor];

 [self.view addSubview:objetoVisual];

 [objetoVisual release];
}

O UIKit provê uma interface bem definida de objetos, sendo todos focados em suas respectivas funções. Como exemplo: O UIImage, responsável por carregar os dados de uma imagem na memória, e o UIImageView sendo responsável por mostrar a imagem na tela.

Com base nisso podemos concluir (a grosso modo) que todo objeto do UIKit terminado em View faz uso da interface da classe UIView, que mostra objetos na tela. Ironicamente o UIImageView não utiliza o UIView como base, pois é processado de forma diferente por ser uma simples imagem.
Um UIView pode conter "n" elementos visuais dentro dele, ou seja, outros UIView's. Abaixo segue uma implementação com o uso de SubViews (Elementos visuais dentro de outro elemento visual)


- (void)viewDidLoad
{
 [super viewDidLoad];

 UIView * objetoVisual = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 300, 60)];
 objetoVisual.backgroundColor = [UIColor redColor];

 UIView * subElemento = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 200, 40)];
 subElemento.backgroundColor = [UIColor blueColor];

 [objetoVisual addSubview:subElemento];

 [self.view addSubview:objetoVisual];

 [objetoVisual release];
 [subElemento release];
}

Nota: É muito interessante checar a documentação, pois ela possui uma boa definição de toda a interface, sendo alguns casos exemplificados com implementações.

Terminamos por aqui, bons estudos.

hashDoS a falha de segurança que afeta a maioria das linguagens WEB

Posted on janeiro 1, 2012

Posted by Eder Freire

Recentemente na Alemanha aconteceu a 23ª edição da Chaos Computer Club, uma conferência de segurança muito conhecida entre os hackers de todo mundo e, pra variar, as primeiras palestras foram assustadoras. Um pesquisador encontrou uma brecha que afeta milhões de celulares no mundo todo nas redes 2G GSM, mas o que realmente me chamou atenção foi uma dupla de pesquisadores avisou que milhões de sites estão vulneráveis a um novo tipo de ataque DoS (Denial of Service), chamado hashDoS, que pode deixá-los fora do ar se não tratado com rapidez.

Os pesquisadores Alexandre Klink e Julian Wälde gesticularam e demonstraram que o problema está na maneira que certas linguagens usadas em servidores web armazenam valores em uma tabela hash. A grande maioria utiliza do mesmo método e pessoas mal-intencionadas podem tirar vantagens disso, enviando valores pré-determinados que sabem sabem que não serão tratados da forma que deveriam ser tratados. Essas requisiões, no final das contas, acaba gerando uma função quadrática que sobrecarrega os servidores.

Para provar que o método funciona, durante a apresentação, eles enviaram requisições do tipo HTTP POST com 2 MB de tamanho para um servidor WEB rodando Apache Tomcat, isso foi o suficiente para que o processamento do servidor subisse para a marca de 100% de consumo e permanecesse neste nível durante toda a palestra.

Quais linguagens afetadas?

A lista não é nada pequena. Nela constam PHP, ASP.NET, Java, Python, Ruby, Apache Tomcat, Apache Geronimo, Jetty, Glassfish, e até a V8, engine de renderização de JavaScript do Google.

Note que aqui temos interpretadores e servidor de aplicação, nessa os servidores WEB e o protocolo HTTP escaparam, sempre alvos de ataques de hackers.

Quais linguagens ja iniciaram o processo de correção e em qual versão isso ja está corrigida?

JRuby >= 1.6.5.1
PHP >= 5.3.9 (ainda está em Release Candidate), 5.4.0 RC4
Ruby >= 1.8.7-p357, 1.9.x
Apache Tomcat >= 5.5.35, 6.0.35, 7.0.35
Rack >= 1.4.0, 1.3.6, 1.2.5, 1.1.3

A Microsoft ja anunciou que vai liberar uma atualização para o ASP.NET que soluciona esse problema.

Os mais afetados com certeza serão os sites com PHP, hoje 77% dos sites em PHP rodam sob o PHP 5.2, que não teve nenhum suporte a este buf-fix. O certo é migrar-mos nossos sites para o PHP 5.3.9 RC, a 5.3 ja é a versão estável do PHP, o que garante atualizações de segurança e novos recursos.

Há linguagens que não entraram na lista, pois isso não era novidade para seus criadores, uma que vale a pena destacar, a qual eu sou fã, é o Perl, eles trataram esse problema em meados de 2003, pois ja haviam identificado essa falha.

A explicação é extramamente complexa, vale a pena dar uma olhada no vídeo da apresentação no Youtube .

Você também pode conferir o anúncio oficial.

Hello World em Python – O seu primeiro programa em Python

Posted on novembro 12, 2011

Posted by Eder Freire

A idéia em mainstream de hoje é apresentar o Python e fazer você, caro leitor, gostar de Python.

Para que você veja o porquê Python é considerada uma linguagem de altíssimo nível, este termo é utilizado para as novas linguagens que estão surgindo que tem como filosofia reduzir o esforço do programador para conseguir 1 resultado, antes de ver o Hello World em Python vamos ver em outras linguagens, mais especificamente em C++ e Java.

Hello World em C++
#include <iostream>
<pre>int main()
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}

Hello World em Java

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

Antes de passar e mostrar como ficaria um Hello World em Python, verifique se ele ja está instalado e configurado em seu computador. Em computadores com sistemas operacionais Linux ou MAC OSX, o Python vem instalado como padrão, caso você utilize Windows entre no site http://python.org e faça o download da versão 2.7.2 do Python para seu sistema operacional. Caso esteja instalando no Windows não esqueça de colocar a pasta X:\Python27 nas variáveis de ambiente. Com o Python ja instalado, entre no Terminal (CMD no Windows) e digite python, abrirá uma linha de comando nova ai, esse você acabou de inicializar o interpretador do python em modo interativo. Com o compilador aberto vamos nos divertir, digite os códigos abaixo:

print "Hello World"

Pronto acabou! O que você achou? Essa é a filosofia do Python, falando nisso, aproveita que o interpretador está aberto e digite

import this

Este é o Zen do Python, que estou me atrevendo a colocar aqui uma tradução livre.

Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Linear é melhor do que aninhado.
Esparso é melhor que denso.
Legibilidade conta.
Casos especiais não são especiais o bastante para quebrar as regras.
Ainda que praticidade vença a pureza.
Erros nunca devem passar silenciosamente.
A menos que sejam explicitamente silenciados.
Diante da ambigüidade, recuse a tentação de adivinhar.
Deveria haver um — e preferencialmente só um — modo óbvio para fazer algo.
Embora esse modo possa não ser óbvio a princípio a menos que você seja holandês.
Agora é melhor que nunca.
Embora nunca freqüentemente seja melhor que *já*.
Se a implementação é difícil de explicar, é uma má idéia.
Se a implementação é fácil de explicar, pode ser uma boa idéia.
Namespaces é uma grande idéia — vamos ter mais dessas!
Espero que essas informações tenham sido úteis, continuem acompanhando os nossos posts sobre Python.

Uma introdução ao Python

Posted on novembro 11, 2011

Posted by Eder Freire

Quando nos deparamos com um código em Python pela primeira vez é normal nos sentirmos confortáveis pelo modo em que ele é escrito, pela fácil leitura que se assemelha bastante sua sintaxe com C e Pascal, que são linguagens padrões do mercado.

Essa semelhança ainda é mais notável quando é comparada com C, muitas das palavras reservadas, identificadores e operadores vem do C, isso foi proposital.

O Python foi criado em 1991 por Guido Van Rossum, é comum ouvirmos que o Python é "orientado ao programador", isso porquê na época quando o Guido Van Rossum começou a desenvolver a linguagem o preço de hardware estava ficando barato e o programador estava ficando caro, com isso ele teve a idéia de criar uma linguagem para facilitar e abstrair algumas complexidades e trouxesse mais flexibilidade do que o C, para que o programador pudesse fazer projetos rápidos sem preocupações por exemplo com gerenciamento de memória.

É comum ver códigos python de 1 linha que precisam de 20 linhas em C para obter o mesmo resultado.

Muitas vezes o Python é taxado de minimalista por causa da sua facilidade de leitura e sua semântica simples.

Motivos para aprender Python

Interpretada

O Python é uma linguagem interpretada, ela roda dentro do interpretador, existem compiladores também como o Jython, o Pip e o IronPython.

Dinâmica

Os tipos de variáveis são definidos em tempo de execução

Tipagem Forte

Isso significa que as variáveis são fortemente tipadas, elas não aceitam um tipo de dado diferente do que ele foi inicializado, se eu somar 1+1 eu vou obter o resultado 2, em python se eu somasse 1+a eu obteria um erro.

Multiparadigma

Python pode ser programada de forma Procedural, Orientado a objetos e Funcional.

Identação como delimitador de blocos

Isso com certeza vai mudar sua vida, em outras linguagens se você não identa seu código, você tem uma leitura ruim dos códigos, no Python se você não identar você vai obter um erro de sintaxe.

Falta de identação no Python é erro de Sintaxe.

Espero que tenham gostado, e que tenha aberto o apetite de vocês para aprender um pouco mais dessa linguagem. Se você não sabe programar e ta afim de aprender, recomendo começar por aqui e acompanhar os nossos próximos artigos.

Qualquer dúvida que tiverem estou a disposição para responde-la.

APP Corinthians

Posted on setembro 30, 2011

Posted by Pedro

Para alegria de todos os torcedores de carteirinha do Timão. Foi anunciado o lançamento da versão completa do aplicativo MeuCorinthians, para iPhone. Em 1 mês e meio o aplicativo já chega perto dos 1000 downloads, crescendo a cada semana a freqüência de usuários.

Baixamos o App e fuçamos. Ao que parece, o aplicativo dentre os que o iTunes dispõe, parece ser o mais completo. Dentre as principais funcionalidade do app, destacamos:

- Tabelas dos campeonatos atualizadas

- Tudo o que você queria saber, até lista de uniformes já usados pelo Corinthians o app têm

- Design/interface bem resolvidas

- Nova versão free

Para baixar o aplicativo no iTunes, clique aqui.