22 de maio de 2010

Write the Future

Tem propagandas que ficam marcadas na memória por motivos que variam de acordo com a história pessoal de cada indivíduo. No entanto, algumas poucas obras de arte conseguem extrapolar isso e se fixarem na memória coletiva da população. A nova campanha da fornecedora de material esportivo Nike parece ter cravado suas duas chuteiras nesta restrita segunda opção.

O comercial, que tem pouco mais de três minutos, irá estrear durante a final da Liga dos Campeões neste sábado e tem arrancados suspiros das pessoas que já o viram na internet. A campanha, cujo tema é "Write the future" (Escreva o futuro), mostra craques patrocinados pela empresa, como Didier Drogba (Costa do Marfim), Wayne Rooney (Inglaterra), Cristiano Ronaldo (Portugal) e Ronaldinho (Brasil), em situaçõs nas quais eles podem ser alçados ao estrelato ou ao fracasso absoluto.

Das feras presentes na campanha, apenas Ronaldinho ficou de fora do Mundial, mas mostrou que é bom de propaganda e desfilou sua habilidade contra os marcadores, ganhando uma imitação do astro da NBA Kobe Bryant, ala-armador do Los Angeles Lakers. O diretor da campanha é Alejandro Inarritu, diretor de filmes como "21 gramas" e "Babel".

E o comercial não é feito só de boleiros. O tenista Roger Federer e o personagem de desenho animado Homer Simpson também dão o ar da graça. De resto não dá para explicar, só assistindo. Veja abaixo o vídeo!

Noticias da semana!

Noticias da semana!


Google Street View coleta SSID, MAC e Payload de redes WiFi

O Google possui um serviço muito interessante e polêmico chamado Street View. Em operação desde 2007, o Street View possibilita a visualização panorâmica de ruas e avenidas de várias cidades do mundo a partir das interfaces do Google Maps e Google Earth. No Brasil, o lançamento do Street View será no segundo semestre de 2010 e incluirá fotografias de Belo Horizonte, São Paulo e Rio de Janeiro.

Veja na integra, essa matéria é muito boa!
http://sseguranca.blogspot.com/2010/05/google-street-view-coleta-ssid-mac-e.html

Polícia Federal desenvolve sistema para aumentar segurança de grampos telefônicos


A Polícia Federal (PF) espera implementar, em breve, um novo sistema tecnológico para realizar interceptações telefônicas, os chamados grampos legais. Segundo o diretor-geral da instituição, Luiz Fernando Corrêa, o novo software, bem como os novos procedimentos que vem sendo discutidos com o Conselho Nacional de Justiça (CNJ), darão maior controle e segurança ao recurso de investigação, evitando vazamentos e facilitando o controle pelo Poder Judiciário e pelo Ministério Público.

http://www.internetlegal.com.br/2010/05/policia-federal-desenvolve-sistema-para-aumentar-seguranca-de-grampos-telefonicos/


Alemanha investigará "espionagem" da Google

Ministério Público alemão iniciou um processo criminal para investigar se a empresa infringiu a lei ao capturar dados de Wi-Fi.
O Ministério Público alemão iniciou um processo criminal para investigar se a Google violou leis de proteção de dados quando coletou fragmentos de informações via Wi-Fi enquanto capturou imagens para sua aplicação de mapas Google Street View.





http://idgnow.uol.com.br/seguranca/2010/05/20/alemanha-investigara-espionagem-da-google/

Seu navegador deixa rastros mesmo sem os cookies

Estudo confirma suspeita de especialistas: não importa o que você faça, seus dados estão desprotegidos.
Mesmo sem os cookies, navegadores populares como o Internet Explorer e o Firefox enviam aos sites informações sobre o usuário em 94% do tempo, concluiu uma pesquisa da EFF (Electronic Frontier Foundtion), depois de reunir dados por alguns meses.

http://idgnow.uol.com.br/seguranca/2010/05/18/seu-navegador-deixa-rastros-mesmo-sem-os-cookies/

Megan Fox está fora do elenco de 'Transformers 3'
RIO - A atriz Megan Fox, de 24 anos, está fora do elenco de "Transformers 3". Na quarta-feira, um assessor da musa americana disse à revista "People" que ela não vai estrelar o próximo filme da franquia por vontade própria, negando rumores de que a atriz teria sido demitida. Citando fontes anônimas, a "Variety" informou que o diretor Michael Bay já procura outra pessoa para interpretar a heroína Mikaela Banes ao lado do ator Shia LaBeouf.





Google corre risco de pagar multa milionária por coleta ilegal de dados
Empresa pode pagar US$ 10 mil para cada vez que pegou informações de redes Wi-Fi desprotegidas por meio do Google Street View.

O roubo de dados de redes Wi-Fi desprotegidas nos EUA pode custar caro ao Google nos EUA. Isso porque a empresa pode desembolsar até US$10 mil para cada ocasião que coletou tais informações por meio do Google Street View, segundo documentos da justiça norte-americana.
O Banco do Brasil decidiu investir na atualização da sua plataforma baseada em Linux visando a redução de custos, além de fornecer novas funcionalidades aos usuários das agências e aos clientes, e simplificar as rotinas de atualização e manutenção dos sistemas. Para tal, o banco optou por uma solução fornecida por meio de acordo mundial entre Microsoft e Novell. O valor do investimento não foi revelado.

http://www.tiinside.com.br/20/05/2010/banco-do-brasil-atualiza-plataforma-linux/ti/182218/news.aspx

20 de maio de 2010

Blaise Aguera y Arcas demonstra realidade aumentada em mapas



Muito bom! ( Aplausos! )

Mais um dia normal na aula de BD II





ps. Se alguém quiser as imagens no tamanho original, só pedir...

17 de maio de 2010

Como o paradigma da inovação desafiará os CIOs no futuro da TI

Complexidade virou sinônimo de modernidade. Ciclos cada vez mais curtos de lançamentos desafiam as empresas para manterem negócios longevos

O planeta vive um período de transformação profunda. O amanhã se modifica a cada fração de segundo. Em um ritmo cada vez mais intenso, inovações instantâneas chegam e trazem consigo impactos sistêmicos. Na mesma medida em que as novidades necessitam ser assimiladas - e isto exige um tempo de compreensão e reação -, as corporações precisam manter-se ágeis para não perder o tempo que as fará permanecerem competitivas nesta era de urgências. O melhor seria uma bola de cristal para ajudar a traçar estratégias que garantam a longevidade das organizações. Mas isto ainda não existe. Se prever o futuro é impossível, a saída, então, é tentar gerenciá-lo. 

Os atores desse jogo devem compreender seu papel na construção da história. Hoje, muitas empresas ainda acreditam que o futuro será igual ao ontem só que amanhã. Pegam dados de seu passado e projetam em um modelo para tentar antecipar seus próximos passos. Para coisas simples pode até funcionar. Contudo, para um mundo cada vez mais complexo, que vive transformações e desafios que incluem variáveis fora dos bancos de dados, já não basta.

Veja a matéria inteira: http://www.itweb.com.br/noticias/index.asp?cod=68216

11 de maio de 2010

Deputados terão folga remunerada (40 dias) durante a copa

 Você preocupado com a efetividade da escalação do Dunga, e os deputados terão folga remunerada (40 dias) durante a copa. Leia a matéria completa: 


http://www.correiobraziliense.com.br/app/noticia182/2010/05/11/politica,i=191646/DEPUTADOS+QUEREM+RECESSO+PARA+VER+A+COPA+EM+CASA.shtml

Não Faz Sentido! - Gente colorida!




kkkkkkkkkkkkkkkkkkkkk

Familia Restart! kkkkkkkkkkkkk

27 de abril de 2010

Segurança da Informação

Segue link de 2 sites que possuem podcast na área de segurança da informação.

http://www.staysafepodcast.com.br/

http://www.naopod.com.br/

estou escutando e achei bem interessante, da pra agregar uns conhecimentos na área.

20 de abril de 2010

Fotos Frenéticas de um Vulcao, causando na Europa... Parece brincadeira, mas não é!!!!!!



Achou que essa imagem foi feita no photoshop? Para sua surpresa e minha também, não foi feita nele, isso é real. :S

Vejam mais fotos no link abaixo:

http://www.boston.com/bigpicture/2010/04/more_from_eyjafjallajokull.html

Várias fotos mostrando a ira de um vulcão, o Eyjafjallajokull!! ( como pronuncia isso? Eijafjalllaaaajokulllllll? :S pqp não tinha um nome mais simples).

18 de abril de 2010

Hacker de 9 anos invade sistema de notas de escolas americanas

"Garoto burlou segurança de plataforma de aulas virtuais e conseguiu mudar senhas de professores e apagar aulas."

A segurança passo longe viu...

16 de abril de 2010

Vivendo do Ócio - Ao Vivo - "Som, luzes e terror"

12 de abril de 2010

O que vai cair além da nota no dia 19/04

O conteúdo da prova será todo o conteúdo do módulo 1 até o HTML do módulo 2.

"Resumo" da matéria, faça o download, clique aqui.

ps. É um resumo pequeno....

Se você souber tudo que tem no resumo você irá bem na prova, garanto! ... ou não...

Prova Adiada

Por Alberto Correia,

Bom dia pessoal, tudo bem?

só completando o que já conversei com alguns alunos, nossa prova não será hoje e sim na semana que vem, dia 12/04.

O conteúdo da prova será todo o conteúdo do módulo 1 até o HTML do módulo 2. Vou deixar o dia de hoje pra vocês tirarem dúvidas.

Os seminários não serão cobrados na prova.

Hoje teremos a apresentação do Grupo da semana passada.

Atenciosamente,

Alberto Correia

----------------------

Pessoal,


Errei a data, nossa prova será no dia 19/04 (segunda-feira que vem).

Desculpe-me pelo erro.

Att
Alberto Correia

9 de abril de 2010

Teste

SÓ PARA OS INTELIGENTES

Se não acertar nenhum desses exercícios

É bom você aprender logo a ZURRAR (voz do burro),
a ESCOICEAR (dar coices) e ficar RABUDO (que tem
grande rabo/cauda).

Boa sorte !!!



Exercicios para treinar o cérebro


Exercícios para cérebros enferrujados
Não deixe de ler..
De aorcdo com uma peqsiusa

de uma uinrvesriddae ignlsea,

não ipomtra em qaul odrem as

Lteras de uma plravaa etãso,

a úncia csioa iprotmatne é que

a piremria e útmlia Lteras etejasm

no lgaur crteo. O rseto pdoe ser

uma bçguana ttaol, que vcoê

anida pdoe ler sem pobrlmea.

Itso é poqrue nós não lmeos

cdaa Ltera isladoa, mas a plravaa

cmoo um tdoo.


Sohw de bloa.



Fixe seus olhos no texto abaixo e deixe que a sua mente leia corretamente o que está escrito..

35T3 P3QU3N0 T3XTO 53RV3 4P3N45 P4R4 M05TR4R COMO NO554 C4B3Ç4 CONS3GU3 F4Z3R CO1545 1MPR3551ON4ANT35! R3P4R3 N155O! NO COM3ÇO 35T4V4 M310 COMPL1C4DO, M45 N3ST4 L1NH4 SU4 M3NT3 V41 D3C1FR4NDO O CÓD1GO QU453 4UTOM4T1C4M3NT3, S3M PR3C1S4R P3N54R MU1TO, C3RTO? POD3 F1C4R B3M ORGULHO5O D155O! SU4 C4P4C1D4D3 M3R3C3! P4R4BÉN5!

8 de abril de 2010

Professor Tiburcio no Campus Party

Aula do professor Tiburcio direto do Campus Party 2010.

rs.. Palestra do Marcelo Tas que aconteceu no Campus Party 2010, ele tem um visão muito legal da INTERNET.

Ps.: o segundo video só os 40 segundo iniciais que é o final da "palestra"

att





5 de abril de 2010

No aula,

Hoje (05/04/2010) não haverá aula de Programação para Internet I com o prof Alberto Correia, será que deu tempo para avisar. =]

att

2 de abril de 2010

Árvores Genéricas - AED II

Árvores Genéricas - AED II

Escreva um programa em Java que leia uma seqüência de pares (chave: int, elemento: string) fornecidos pelo usuário e monte uma árvore de pesquisa genérica atendendo às regras da estrutura.

O programa deve permitir:

* Inserção, remoção e busca de elementos informados pelo usuário;
* Exibir a árvore na tela, de modo que a estrutura possa ser visualizada, ou seja, de maneira que possamos conferir a estrutura da árvore.

Estou colocando a resoluções que consegui fazer, não digo que esteja certo, mais pelos teste que fiz os erros encontrados foram solucionados.

Para ilustrar segue a arvoré resultante do exemplo:

([10, 22])
([3, 8, 9][11, 15, 16][])
([][4, 5, 7][][])([][12, 14][][17])
([][][][])([][13][])([][])
([][])




App

package ArvoreGenerica;

import java.util.ArrayList;

public class app {

public static void main (String arg[]){

ArrayList imp;
String r;

Arvore arv = new Arvore();
arv.novoFilho(22, "el:22");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(10, "el:10");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(15, "el:15");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(16, "el:16");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(9, "el:9");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(8, "el:8");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(3, "el:3");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(5, "el:5");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");

arv.novoFilho(7, "el:7");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");

arv.novoFilho(11, "el:11");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");

arv.novoFilho(4, "el:4");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(12, "el:12");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");

arv.novoFilho(14, "el:14");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(13, "el:13");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
arv.novoFilho(17, "el:17");
imp = arv.ImpAravore();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");
r = arv.getElemento(9);
System.out.println(r);

r =arv.removeKey(10);
r =arv.removeKey(9);
r =arv.removeKey(3);
r =arv.removeKey(7);
r =arv.removeKey(4);
System.out.println("removido "+r);

imp = arv.ImpAravoreElemento();
for (int i=0;i System.out.println(imp.get(i));
System.out.println("-------------");

}
}


Arvore


package ArvoreGenerica;

import java.util.ArrayList;


public class Arvore {
//Nó raiz
private Nodo root;
//quantidade de nos
private int size;
//para armazenar os elementos quando usado os metodos de percorrer
private ArrayList lista;
//Altura é o nivel do nodo mais externo + 1
public int altura;

//Construtor sem Nó raiz
public Arvore(){
root = null;
size = 0;
lista = new ArrayList();
}

//Construtor passando o Nó raiz
public Arvore(int k, String x){
root = new Nodo(k,x,null);
size = 0;
lista = new ArrayList();
}

public Nodo getRoot() {
return root;
}

public void setRoot(int k, String x){
root = new Nodo(k,x,null);
}

public void setSize(int size) {
this.size = size;
}

public int Size() {
return size;
}

//Se possui algum filho o Nó é interno
public boolean isInternal(Nodo n){
if (n.possuiFilho())
return true;
return false;
}

//Se não possuir filho é Nó externo (folha)
public boolean isExternal(Nodo n){
if (n.possuiFilho()==false)
return true;
return false;
}

public boolean isRoot(Nodo n){
if (n.getPai()==null)
return true;
return false;
}

public boolean isEmpty(){
if (getRoot()==null)
return true;
return false;
}


/**
* Partindo da raiz irá verificar o valor do nó para adicionar o novo nó
* @param n
* @param v
*/
private void addOrder(Nodo n, int k, String x){
if (n.possuiFilho()==false)
n.setElemento(k, x, n);
else{
//informa a chave e recebe qual o filho
Filho f = n.getFilho(k);
//Se o filho for nulo insere este nete filho o novo nodo
//se o filho não nulo chama novamente o metodo addOrder
if (f.getElemento()==null){
Nodo novo = new Nodo(k,x,n);
f.setElemento(novo);
altura = novo.getNivel()+1;
}
else{
Nodo novo = (Nodo)f.getElemento();
addOrder(novo,k,x);
}

}
}

public void novoFilho(int k, String x){
if (isEmpty()==false){
addOrder(root,k,x);
}
else
setRoot(k,x);
this.size++;
}


public int getAltura(){
return altura;
}

private ArrayList ImpFilho(Nodo n, int lin, ArrayList imp){
lin++;

ListaFilho lF = n.getlFilhos();
Filho f = lF.getHead();
if (imp.size()==lin){
imp.add("");
}
imp.set(lin,imp.get(lin)+"(");
while (f!=lF.getTail()){
if (f.getElemento()==null){
imp.set(lin, imp.get(lin)+"[]");
}
else{
imp.set(lin,imp.get(lin)+""+((Nodo)f.getElemento()).getChave());

imp = ImpFilho((Nodo)f.getElemento(),lin,imp);
}
f=f.getProximo();
}
if (f.getElemento()==null){
imp.set(lin, imp.get(lin)+"[]");
}
else{
imp.set(lin,imp.get(lin)+""+((Nodo)f.getElemento()).getChave());
imp = ImpFilho((Nodo)f.getElemento(),lin,imp);
}
imp.set(lin,imp.get(lin)+")");
return imp;
}

public ArrayList ImpAravore(){
ArrayList imp = new ArrayList();
Nodo n = getRoot();
if (n!=null){
int lin=0;
imp.add("("+n.getChave()+")");

imp = ImpFilho(n,lin,imp);
}else
imp.add("[Vasio]");
return imp;

}


private ArrayList ImpFilhoElemento(Nodo n, int lin, ArrayList imp){
lin++;

ListaFilho lF = n.getlFilhos();
Filho f = lF.getHead();
if (imp.size()==lin){
imp.add("");
}
imp.set(lin,imp.get(lin)+"(");
while (f!=lF.getTail()){
if (f.getElemento()==null){
imp.set(lin, imp.get(lin)+"[]");
}
else{
imp.set(lin,imp.get(lin)+""+((Nodo)f.getElemento()).getElemento());

imp = ImpFilhoElemento((Nodo)f.getElemento(),lin,imp);
}
f=f.getProximo();
}
if (f.getElemento()==null){
imp.set(lin, imp.get(lin)+"[]");
}
else{
imp.set(lin,imp.get(lin)+""+((Nodo)f.getElemento()).getElemento());
imp = ImpFilhoElemento((Nodo)f.getElemento(),lin,imp);
}
imp.set(lin,imp.get(lin)+")");
return imp;
}

public ArrayList ImpAravoreElemento(){
ArrayList imp = new ArrayList();
Nodo n = getRoot();
if (n!=null){
int lin=0;
imp.add("("+n.getElemento()+")");

imp = ImpFilhoElemento(n,lin,imp);
}else
imp.add("[Vasio]");
return imp;

}

private String findElemento(int k, Nodo n, int cc){

Filho f = n.getFilho(k);

if (f.getElemento()!=null){
n = (Nodo)f.getElemento();
for(int i=0;i


Nodo


package ArvoreGenerica;

import java.util.ArrayList;

public class Nodo {
private ArrayList chave;
private ArrayList elemento;
private Nodo pai;
private ListaFilho lFilhos;
private int nivel;

public Nodo(int k, String x, Nodo Pai){
chave = new ArrayList();
chave.add(k);

elemento = new ArrayList();
elemento.add(x);

this.pai = Pai;

lFilhos = new ListaFilho();
lFilhos.insertFist(null);
lFilhos.insertFist(null);

if (Pai!=null)
nivel = Pai.getNivel()+1;
}

public boolean chaveMenor(int k){
if (chave.get(0)>k)
return true;
return false;
}

public boolean chaveMaior(int k){
if (chave.get(chave.size()-1)k){//Se a 1ª chave for maior do k, então insere no começo
this.chave.add(null);
this.elemento.add(null);
for(int i=this.chave.size()-1;i>0;i--){
this.chave.set(i,this.chave.get(i-1));
this.elemento.set(i, this.elemento.get(i-1));
}
this.chave.set(0,k);
this.elemento.set(0, x);
lFilhos.insertFist(null);
}
else
if (chave.get(chave.size()-1)chave.get(pos)){
pos++;
}
Filho f = lFilhos.getHead();
for (int i=0;i getChave(){
return chave;
}

public ListaFilho getlFilhos(){
return lFilhos;
}

}


ListaFilho


package ArvoreGenerica;

public class ListaFilho {
private Filho Head;
private Filho Tail;
private int Size;

public ListaFilho(){
Head = null;
Tail = null;
Size = 0;
}

public void insertFist(Object elemento){
Filho novo = new Filho(elemento);

novo.setProximo(Head);
Head = novo;
Size++;
if (Tail==null)
Tail=novo;
}

public void insertLast(Object elemento){
Filho novo = new Filho(elemento);
if (Tail!=null){

Tail.setProximo(novo);
Tail = novo;
Size++;
}
else
{
insertFist(elemento);
Tail=Head;
}
}

public Object removeFirst(){
Filho nodo = Head;
Head = nodo.getProximo();
Size--;
return nodo;
}

public Object removeLast(){
Filho nodo = Head;
while (nodo.getProximo()!=null){
Tail = nodo;
nodo = nodo.getProximo();
}
Tail.setProximo(null);
Size--;
return nodo;

}

public Object [] RetornaLista(){
Object [] lista = new Object[Size];

Filho nodo = Head;

int i=0;
while(nodo!=null){
lista[i]=nodo.getElemento();
i++;
nodo = nodo.getProximo();
}

return lista;

}

public Filho getHead(){
return this.Head;
}

public Filho getTail(){
return this.Tail;
}

public int getSize(){
return Size;
}
}


Filho


package ArvoreGenerica;

public class Filho {
private Object Elemento;
private Filho Proximo;

public Filho(Object elemento){
Elemento = elemento;
Proximo = null;
}

public Object getElemento(){
return Elemento;
}

public void setElemento(Object elemento){
Elemento = elemento;
}

public Filho getProximo(){
return Proximo;
}

public void setProximo(Filho proximo){
Proximo = proximo;
}
}

1 de abril de 2010

Google Wave agora é pra valer

Google afirma nesta quinta-feira que irá transportar todos os usuários do seu serviço de e-mail, Gmail, para a mais revolucionaria ferramenta criada pela empresa, Google WAVE.

Esta migração deverá afetar todos os usuários do Gmail e ocorrerá da mesma maneira que foi feita com o novo Orkut, onde usuários serão escolhidos pela empresa e poderão enviar convites para outros usuários, isso durante 3 meses e depois deste período todos os usuários serão migrados automaticamente.

Os especialistas afirmam que é uma ótima estratégia do Google, pois o Wave possui diversas ferramentas que revoluciona a forma de se comunicar pela WEB.

Caso deseja ser um dos primeiros a migrar sua conta do Gmail para o Google Wave acesse o link abaixo, onde também encontrará a reportagem completa.

Acesse o link

\º/ - primeiro post



Feliz 1º de Abril

30 de março de 2010

Java vs .NET

 Meio velinho esse texto mas vale apena ler!

Escrito por Paulo Krieser:

Prosseguindo com a sequência de colunas sobre as comparações entre linguagens de programação, neste artigo vamos comparar o Java ao .NET.

Antes que sigam as críticas, cabe esclarecer que o .NET não é uma linguagem, e sim uma plataforma da Microsoft que permite a utilização de diversas linguagens, como C#, Visual Basic, J# e ASP. Vamos focar então a comparação na construção de aplicações web, utilizando J2EE e o framework ASP NET da Microsoft, que é onde as duas linguagens mais competem.

Comecemos pela questão das licenças de uso, que influenciam diretamente no TCO (para referência aos fatores sendo comparados, consultar na minha coluna Fatores para Escolha da Linguagem de Programação). Apesar da Sun deter a marca Java, a mesma tornou a linguagem open source, permitindo aos usuários efetuar alterações convenientes. Para a plataforma .NET, existem algumas iniciativas free, como os projetos Mono e DotGNU. Porém, para se aproveitar todo o potencial da plataforma, é praticamente necessário se adquirir o servidor Microsoft juntamente com o ambiente de desenvolvimento Visual Studio. Sem estas ferramentas, além de não se aproveitar tudo o que se tem, a velocidade de desenvolvimento fica fortemente prejudicada. Além disto, nada na Microsoft é open source.

No item escalabilidade, as implementações das duas plataformas provêem mecanismos de balanceamento de carga, permitindo habilitar um cluster de máquinas para servir às cargas dos usuários que forem aumentando ao longo do tempo. A grande diferença entre o J2EE e o .NET é que desde que o .NET suporta apenas Win32, um número maior de máquinas se faz necessário, comparando ao J2EE, devido às limitações dos processadores.

Em um fator de extrema importância, como velocidade de desenvolvimento, o .NET leva grande vantagem. A sua IDE proprietária, o Visual Studio, é baseado em RAD (Rapid Application Development), aumentando a agilidade na construção de aplicações. O Visual Studio .NET inclui várias ferramentas interessantes em termos de produtividade, como por exemplo o Web Forms. Estima-se que um projeto criado do zero, leve-se de 10% a 20% menos tempo para entrar em produção quando desenvolvido em .NET.

O Microsoft .NET oferece independência de linguagem, permitindo os componentes serem escritos em VB.NET, C# e J#, por exemplo. Para fazer isto funcionar, o código-fonte nestas diferentes linguagens é traduzido para um código intermediário (análogo aos bytecodes do Java) chamado Microsoft Intermediate Language, abreviado IL. O Common Language Runtime (CLR), análogo ao JRE (Java Runtime Enviroment) do Java, interpreta o IL e traduz em código de máquina.

Com um conjunto de linguagens rodando sobre a plataforma .NET, os desenvolvedores diminuem a habilidade de compartilhar as melhores práticas, diminuindo a assertividade do compartilhamento de informações. Assim, especula-se que um conjunto de linguagens rodando em CLR pode levar a uma combinação de código espaguete que fica difícil de manter. Com a liberdade para se utilizar diversas linguagens, a aplicação torna-se mais complexa, necessitando de experts em diferentes linguagens, o que também faz aumentar o TCO e a entropia do sistema.

As duas tecnologias apresentam uma curva de aprendizado parecida, com a diferença de que o Java possui mais material para aprendizado na internet do que o .NET, que é proprietário e a principal fonte de conteúdo é o MSDN.

Analisando o último quesito, portabilidade, praticamente não há o que comparar. Como já dito na coluna anterior, o Java segue o princípio write once, run anywhere, permitindo executar as aplicações na virtual machine em praticamente qualquer ambiente. O .NET roda apenas no Windows, no seu hardware suportado, e no ambiente .NET. Há algumas implementações adicionais do .NET que rodam em outras plataformas, porém que não permitem o uso de todo o potencial do framework.

Concluindo a análise, a plataforma J2EE, possuindo uma interoperabilidade melhor, permite mais facilmente integrações com o legado através de web services e JCA (Java Connector Architecture) e uma maior facilidade de portabilidade, podendo rodar em qualquer sistema operacional. A grande vantagem do .NET é a sua incrível ferramenta de desenvolvimento, que incrementa bastante a velocidade na construção de aplicações. Porém, esta vantagem apresenta o custo das licenças de uso e de se ter uma plataforma proprietária e fechada, seguindo a iniciativa monopolística da Microsoft.

Para a escolha de qual tecnologia utilizar, deve-se analisar o que já se tem de legado e os skills da equipe que irá trabalhar no projeto, aproveitando os conhecimentos já existentes nas linguagens.

Não perca a próxima coluna, onde vamos comparar Ruby on Rails com PHP (vamos deixar o Java um pouco de lado).

Fonte : JavaFree.org

Tricampeão de concurso de hackers "detona" Apple e Microsoft


Tricampeão de concurso de hackers "detona" Apple e Microsoft

Segundo Charlie Miller, único a vencer três vezes o desafio Pwn2Own, as empresas não fazem coisas básicas na área da segurança.

Ele é capaz de, em alguns segundos, invadir computadores explorando as mais diversas plataformas. E não entende como empresas como Apple, Microsoft e Adobe, com muito mais dinheiro e equipe, não conseguem achar tantos bugs e fazer melhores produtos na área da segurança.

Único hacker a vencer três vezes a competição Pwn2Own, Charlie Miller descobriu, recentemente, 20 falhas no Mac OS, Office e Adobe Reader, com o uso de uma ferramenta simples (utilizada por desenvolvedores para testar bugs), que procura vulnerabilidades nos sistemas.

E afirma estar cansado da defasagem na área de proteção de sistemas.  “Nós encontramos um bug, eles corrigem. Isso não melhora a segurança do produto. Eles precisam investir direito na melhoria de seus programas”, afirma.
Algumas dessas brechas ele usou para invadir um MacBook com o Snow Leopard e navegador Safari e faturar 10 mil dólares na edição 2010 da competição de hackers.
Ele afirma que seu processo de busca de vulnerabilidades não tem nada de inovador. “Não precisa ser muito esperto. Faço  o trabalho básico e continuo achando problemas de segurança”, afirma.

Durante a conferência CanSecWest (na qual acontece o concurso de hackers), no Canadá, ele fez uma apresentação demonstrando como encontrar vulnerabilidades. E convidou Apple, Microsoft e outras empresas a ouvirem e usarem o que ele tinha a dizer.

Miller tomou a decisão de não compartilhar as informações sobre as vulnerabilidades que descobriu. Ele afirma que faz mais sentido ensinar as empresas a acharem essas brechas do que continuar a dar a eles o serviço pronto.

Fonte : MacWorldBrasil