Linguagens de programação, cabelos e seus criadores
Um tipo muito engraçado que mantem um blog na Microsoft de Israel escreveu um artigo (deve ser a brincar) onde relaciona linguagens de programação, os seus criadores e o tipo de cabelo que eles ostentam.
Essa frase por exemplo é bastante engraçada:
Last time, I completely forgot about PHP by Rasmus Lerdorf. This language is rather popular and it is not because of it’s nature. See Rasmus face to understand why.

Programação orientada a objectos, uma visao basica

Bem eu vou tentar aqui transmitir aqui alguns conceitos sobre como se deve encarar este conceito de orientação a objectos.
Quando programavamos em C na realidade faziamos em programação estruturada alguma coisa daquilo que fazemos hoje em programação orientada a objectos (OOP).
Reparemos no caso da estruturas. Na realidade programas serios em C sao na sua maior parte construidos com base em estruturas (vide algumas libs famosas). Continuando, repare para estre trecho de codigo duma struct qualquer:
struct triangulo{
tipo ladox;
tipo ladoy;
tipo ladoz;
};
/* criar uma var do tipo struct exemplosimples */
struct triangulo variavel;
/* Acessar o membro ladoz e atribuir um valor */
Usamos a notação pontual, assumindo ser do tipo inteiro
variavel.ladoz = 2;
Se quisermos criar mais uma variavel para TRABALHAR EM CIMA dos mesmos campos recorremos novamente ao tipo :
struct triangulo variavel2;
/* Acessar o membro ladoz e atribuir um valor */
Usamos a notação pontual, assumindo ser do tipo int
variavel2.ladoz = 3;
Ora notamos aqui que podemos criar n variaveis (que possuem endereços de memoria) com uma ‘copia’ sua de um determinado membro da estrutura.
O que notamos aqui:
Repare, se fosse em ‘programação orientada a gambiarras’ e tu quisesses criar 2 triangulos com definições diferentes:
Um triangulo escaleno e um equilatero equivalem a seis lados, definindo em medidas de lados.
int ladox1, ladox2, ladoy1, ladoy2, ladoz1, ladoz2;
Repare na inusabilidade do trecho de codigo acima
Nos apeguemos a medida dos seus lados ao invez dos seus angulos internos, por exemplo.
O escaleno pela medida dos seus lados possui 3 lados diferentes, e o equilatero com 3 lados iguais.
Se quisessemos criar um triangulo escaleno recorrendo a estrutura acima:
/* criar variavel escaleno*/
struct triangulo escaleno;
/* atribuir medidas dos lados x y e z */
escaleno.x = 2;
escaleno.y = 3;
escaleno.z = 4;
Reparem que os membros (x, y e z) em si da estrutura sao mantidos, porque apenas uma copia deles é tomada por cada variavel do tipo struct triangulo.
Mas e se quiser criar um triangulo equilatero?
‘It’s the same potatoe’ como dizia alguem:
/* criar variavel equilatero*/
struct triangulo equilatero;
/* atribuir medidas dos lados x y e z */
equilatero.x = 2;
equilatero.y = 2;
equilatero.z = 2;
Se notarmos podemos ver quem em termos de Programação orientada a Objectos X, Y E Z sao o quê?
VARIAVEIS DE INSTANCIA
Em Java todo programa é criado sobre uma classe, é deste modo que o compilador consegue organizar-se por meio dos pacotes, tal como em C um programa sem a função main nao funcionava.
Ora vejamos, podemos chamar uma classe de objecto (estamos ou nao?) e este objecto possui algumas propriedades. Estas propriedades por sua vez somente e SOMENTE sao manipuladas por meio de referencias a objectos.
O que sao as referencias a objectos
Exactamente aquilo que fizemos ali acima com as variaveis escaleno e equilatero, estes sao as referencias a objectos que permitem manipular membros do objecto, que sao as variaveis de instancia que assim sao chamadas porque elas se permitem que sejam criadas ‘copias’ delas mesmas por referencias a objectos.
Se esteve atento acima notou que estamos a falar até agora exactamente a mesma coisa, sem alterações.
Continuando, voltemos ao nosso exemplo do triangulo e apliquemo-lo em Java, mas antes falemos de alguns conceitos basicos:
Os valores das variaveis de instancia sao inicializados por meio dos metodos set.
Os valores das variaveis de instancia sao retornados por meio dos metodos get.
O construtor da classe permite chamar os metodos set e inicializa-los recebendo tambem ou nao recebendo parametros.
O metodo toString() permite retornar todos valores das variaveis de instancia numa String concatenada.
Ok, vamos ao codigo
public class Triangulo{
// Variaveis de instancia somente pertencentes a esta classe:
private int x;
private int y;
private int z;
// Construtor da classe. Inicializa variaveis de instancia:
public Triangulo(int x, int y, int z)
{
// chama metodos set para iniciar variaveis de instancia
// Para triangulo escaleno e equilatero
setEscaleno(x, y, z);
setEquilatero(x, y, z)
}
// Definicao dos metodos set
public int setEscaleno(int ladox, int ladoy, int ladoz)
{
x = ladox;
y = ladoy;
z = ladoz;
}
public int setEquilatero(int ladox, int ladoy, int ladoz)
{
x = ladox;
y = ladoy;
z = ladoz;
}
// Definicao dos metodos get
public int getEquilatero()
{
if (x == y && x == z && z == x && z == y)
return TOKEN;
else
return;
}
public int getEscaleno()
{
if (x != y && x != z)
return TOKEN;
else
return;
}
Pronto, isto é o basico. Repare agora que se eu quiser instanciar o objecto Triangulo para criar uma referencia a objecto escaleno eu faria o seguinte:
…
Triangulo escaleno = new Triangulo(2,3,4);
// Quero saber se realmente possuimos um triangulo escaleno?
if (escaleno.getEscaleno == TOKEN)
System.out.printf(”Triangulo escaleno. Valor logico %d”, escaleno.getEscaleno());
else
return;
Repare que na instrução Triangulo Escaleno = new Triangulo(2,3,4); na realidade passamos esses valores ao construtor que os recebe e ‘atira’ aos metodos set que modifica os valores das variaveis de instancia. Os metodos get recebem e avaliam os valores ‘actuais’ das variaveis de instancia e determinamos se os valores da chamada a função get por meio da chamada a referencia condizem com aquilo que pretendemos.
Repare agora que se eu quiser instanciar o objecto Triangulo para criar uma referencia a objecto equiltero eu faria o seguinte:
…
Triangulo equilatero = new Triangulo(2,2,2);
// Quero saber se realmente possuimos um triangulo equilatero?
if (equilatero.getEquilatero == TOKEN)
System.out.printf(”Triangulo equilatero. Valor de token %d”, equilatero.getEquilatero());
else
return;
OBS: Acima considerar TOKEN um valor a sua escolha, pode ser uma variavel de escopo ‘final’.
E é tudo por hoje.
Espero ter sido um bocado claro naquilo que disse. qualquer erro aí acima poderão obviamente retificar ou critica-lo. Dentro em breve entrarei em mais detalhes, isto foi escrito a pressa e a socapa.
Grazie mille.
Pesquisadores curiosos com exploração de NULL pointers bugs
Essa historia começou um bocado como todas as outras (Quem nao se lembra dos problemas com format string ?) ou seja é descoberta uma falha de segurança num software e a tecnica de exploração introduz um novo conceito de exploitação de bugs tratando-se de gestão de memoria.
Tudo começou por meio duma falha de segurança descoberta no Adobe Flash e divulgada por meio deste paper por um pesquisador. A partir daí alguns pesquisadores chegaram a conclusao de que esta pesquisa pode originar um novo metodo de exploração de falhas em softwares. A falha é da Action Script Virtual Machine que é o motor por detras da interpretação da linguagem Action Script com a qual sao criados aplicativos flash, sendo um factor independente a plataforma em causa.
Vejamos, se um determinado arquivo SWF for manipulado, por meio de alterações ao seu formato constituido por campos chamados de tags, por exemplo a tag DefineSceneAndFrameLabelData (tag ID 0×56) cuja estrutura segue abaixo:
// supporting structures
SceneData
{
UI32 FrameOffset
String SceneName
}
FrameData
{
UI32 FrameNumber
String FrameLabel
}
// Tag structure
DefineSceneAndFrameLabelData
{
RecordHeader Header
UI32 SceneCount
SceneData Scenes[SceneCount]
UI32 FrameCount
FrameData Frames[FrameCount]
}
Notar que RecordHeader e UI32 sao tipos de dados.
Continuando, (Ver um artigo meu sobre tipos de dados avançados) a tag DefineSceneAndFrameLabelData é uma tag cujo tamanho varia e que recebe o inteiro ‘Scene Count’. Existem algumas funções que realizam a valiação de dados como a função “ProcessSFLData” que le o valor ‘Scene Count’ realiza algumas validações basicas e aloca uma estrutura para ler os proximos valores um a um, mas o problema é que nao existe validação para uma falha de alocação de memoria.
Mais informações podem ser encontradas aqui.
Como motivar o aluno nas disciplinas introdutórias da área de programação?
Vários cursos, das mais variadas áreas do conhecimento, possuem em sua estrutura curricular a disciplina de lógica de programação, na qual esta trabalha, basicamente, com o ensino de algoritmos e linguagens de programação. Na maioria das universidades, centros universitários e faculdades isoladas o ensino, direcionado pela disciplina em questão, está focado predominantemente no paradigma estruturado aliado a utilização de linguagens procedurais como C e Pascal. Um fato chama a atenção nestas disciplinas: A QUANTIDADE DE REPROVAS OU DESISTÊNCIAS. Os dados apresentados a seguir comprovam minha afirmação:
Gates prevê próximo Windows para “algum momento” do ano que vem

MIAMI (Reuters) - O co-fundador da Microsoft, Bill Gates, disse na sexta-feira que espera que a nova versão do sistema operacional Windows, em desenvolvimento sob o codinome Windows 7, seja lançada “em algum momento do ano que vem.”
A gigante do software planeja atualizar com mais regularidade o software de sistema operacional que aciona a maioria dos computadores pessoais do mundo. Mesmo assim, os comentários de Gates sugerem que um sucesso do Vista pode ser lançado mais cedo do que geralmente se espera.
A Microsoft havia afirmado que planejava lançar a nova versão do Windows aproximadamente três anos depois da introdução do Vista, que aconteceu em janeiro de 2007.
Uma porta-voz da empresa disse que os comentários de Gates se enquadram a um ciclo de desenvolvimento que em geral implica em lançamento de versão do software para teste antes do lançamento oficial. “Estou muito animado com tudo que o programa fará, de muitas maneiras”, disse Gates em um seminário sobre filantropia empresarial realizado durante a reunião do Banco Inter-Americano de Desenvolvimento em Miami. “Isso acontecerá em algum momento do ano que vem, teremos uma nova versão”, disse Gates em resposta a uma pergunta da platéia.
Gates, que deixará suas funções cotidianas na Microsoft e passará a se dedicar aos esforços filantrópicos da Gates Foundation em junho, disse que a empresa planejava, por meio de seu orçamento de pesquisa e desenvolvimento de seis bilhões de dólares ao ano, levar os produtos acionados por seu software “ao próximo patamar.”
Ele disse que novas versões do Windows ajudariam a revolucionar os celulares e a acionar as futuras mesas de trabalho, equipadas com uma superfície de toque e tela que permitiriam aos usuários usar as mãos para obter acesso a itens.
Fonte: Yahoo
HI5 lança oficialmente plataforma de programação (API)



O Hi5 torna-se a primeira rede social a disponibilizar APIs para desenvolvimento como membro do grupo OpenSocial da Google. O grande diferencial do Hi5 é que se torna deste modo a primeira rede social a suportar na sua APIs instruções para trabalhar em cima de mensagens. Estas aplicações podem ser convites, notificações, e saber dos updates dos seus amigos.
Quando um usuario ja registrado no Hi5 resolve criar aplicativos para esta rede social, imediatamente é adicionado preenchendo apenas algumas checkboxes e aceitando um termo. Depois disto é enviado para uma ’sandbox’ aonde se podem testar aplicativos criados em linguagens como Ruby, PHP, Java, Python etc.
De lembrar que o Hi5 é a maior rede social em Angola, e uma das 5 maiores do mundo.
Fonte: Mashable
Google abre Youtube API a ‘interessados’

A google pretende assumir uma posição de destaque total na area de reprodução de video baseado na Web, e nada melhor para isso do que permitir que qualquer website possa usar a API do Youtube, permitindo a qualquer usuario se desejar, fazer uploads directamente ao Youtube sem estar lá, adicionar, editar metadados de cada reprodução (titulos, descrição, favoritos) etc. Mais uma boa jogada da Google numa altura em que a Yahoo anuncia entrada no grupo Opensocial.
SUN desenvolve Java para IPhone

Mesmo sem contar com a anuencia da Apple a SUN desenvolverá uma versão da maquina virtual Java (JVM) para o IPhone baseado no JME (Java Micro Edition) que estará disponivel no marketplace do Iphone, aliás a unica forma legal de desenvolver aplicativos para o mesmo.
25 aplicativos que todo iPhone deveria ter

A PCworld publicou uma lista com dicas de 25 aplicativos que deveriam ser desenvolvidos para o IPhone agora que o lançamento do SDK foi anunciado
Apple anuncia lançamento do Iphone SDK

A partir de Cuppertino num evento especial dedicado ao Iphone a Apple anunciou hoje o lançamento do Software Development Kit (SDK) para o mesmo. Mas antes disso deixaram bem claro que vao melhorar o software do smartphone (que tem 28% de mercado) para estender melhor suporte a Internet, e-mail, lista de endereços e afins por meio dum update que deverá sair em Junho. Jobs deixou bem claro que o Iphone é neste momento a mais avançada plataforma de comunicação movel, por isso mesmo o Iphone deverá ter integração fácil com o Microsoft Exchange, suportar conexoes com VPN Cisco IPSec, certificados, identidades e padrão WPA2/802.11x.

Voltando ao SDK, Jobs anunciou que desenvolvedores poderão usa-lo em breve para criarem aplicações externas para o IPhone com o uso do Cocoa Touch uma plataforma de desenvolvimento criada especialmente para o IPhone. Como era de se esperar, O Cocoa Touch suportará todas as funcionalidades do IPhone como eventos multitoques, camera, alertas etc.
Fonte: GizModo