Não, não vou implementar a especificação do J2EE em um "post" não (mesmo se eu tivesse tempo, acho que a explicação ficaria grande demais para isso...). :P
Mas você, implementador Java, já se perguntou como um servidor de páginas é feito?
Eu já, e por isso tentei implementar um pequeno "serviço" web em J2SE sem um servidor padrão (seja o Tomcat, o JBoss ou outro).
Vamos ao passos:
Primeiramente, eu pensei: preciso usar um ServerSocket para abrir conexão na rede na porta 8070 (por padrão, a porta do protocolo http é 80, mas preferi usar uma outra porta para evitar conflitos...).
public class Exemplo {
private ServerSocket server;
//Construtor da classe
public Exemplo() throws Exception {
server = new ServerSocket(8070);
}
...
//"Destrutor da classe"
protected void finalize() {
try {
if (server != null) {
server.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Beleza! Depois disso, precisava que meu "servidor" sempre aceita-se a requisição de um cliente (por exemplo, um navegador) para esta porta e que minha aplicação "escreve-se" uma resposta para este... Como exemplo, fiz a resposta "padrão" para uma requisição do protocolo http de uma página web:
...
public void acceptAndResponse() throws Exception {
Socket client = server.accept();
String header = "HTTP/1.1 200 OK\n" +
"Date: {0}\n" +
"Server: Socket\n" +
"Last-Modified: {0}\n" +
"Accept-Ranges: bytes\n" +
"Content-Length: {1}\n" +
"Connection: close\n" +
"Content-Type: text/html\n" +
"\n"+
"{2}";
Locale.setDefault(Locale.ENGLISH);
String now = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z").format(new Date());
String html = "\n" +
"<html>\n"+
"<head><title>Hello World!</title></head>\n" +
"<body><h1>Hello World!</h1></body>\n" +
"</html>\n";
String message = MessageFormat.format(header, now, String.valueOf(html.length()), html);
client.getOutputStream().write(message.getBytes());
client.close();
}
...
Mas, como eu teria que rodar isso continuamente, criei uma Thread para ficar eternamente executando a função acima...:
public class Exemplo implements Runnable {
...
public Exemplo() throws Exception {
server = new ServerSocket(8070);
Thread thread = new Thread(this);
thread.start();
}
...
public void run() {
do {
try {
this.acceptAndResponse();
} catch (Exception e) {
e.printStackTrace();
}
} while (true);
}
...
E, no final, criei a função principal que chama tudo isso (está bem..., é o construtor que cria tudo, mas como era um teste, nem fiz questão de fazer um código "bonito"... :P ):
...
public static void main(String[] args) throws Exception {
Exemplo e = new Exemplo();
}
...
Rodando a aplicação, eu fui ao navegador testar (endereço: http://localhost:8070) e, por incrivel que pareça, funcionou!
Legal, não?
Agora, quem reclamar da lentidão do Tomcat pode tentar fazer o seu servidor web. :)
Até mais!
segunda-feira, 5 de março de 2012
quinta-feira, 1 de março de 2012
Um ano de blog e estou ficando velho... (continuação)
Percebi que se ficar falando de cada comentário, eu vou escrever um livro... :P
Portanto, agora, vou só citar as pessoas que é mais fácil... :)
Obrigado:
Aos anônimos, um que me deu um puxão de orelha no português e outro pelo dia do estagiário. :)
Ao Richardson, sobre os CMSs (valeu, estou precisando dar uma olhada :) )
Ao Elton, por me corrigir que um erro bobo de javascript.
Ao DizaumBR, é muito legal você comentar meu post, principalmente de uma coisa que você é que merece os parabéns!
Ao Black Wolf, que acho que é spam :P
Ao Cesar e sua família (sei que esta muito atrasado, mas parabéns pelo filhinho :) ).
Ao graU, a cerveja vou ficar devendo... (ainda não ganhei um dólar do ads...).
Denilson, valeu! Sou muito saudosista...
Nardão, o RPGMaker é clássico! :)
Renato, ainda não fiz um jogo decente...
Daniel, poxa... valeu cara!
[GM] Eduardo, preciso de um tempo para jogar... mas quem sabe um dia! :)
E aos outros que postaram e recomendaram este blog, meu muito obrigado!
Valeu pessoal!
Até mais! (e tomara que este ano dê mais tempo para postar mais coisas :P).
Portanto, agora, vou só citar as pessoas que é mais fácil... :)
Obrigado:
Aos anônimos, um que me deu um puxão de orelha no português e outro pelo dia do estagiário. :)
Ao Richardson, sobre os CMSs (valeu, estou precisando dar uma olhada :) )
Ao Elton, por me corrigir que um erro bobo de javascript.
Ao DizaumBR, é muito legal você comentar meu post, principalmente de uma coisa que você é que merece os parabéns!
Ao Black Wolf, que acho que é spam :P
Ao Cesar e sua família (sei que esta muito atrasado, mas parabéns pelo filhinho :) ).
Ao graU, a cerveja vou ficar devendo... (ainda não ganhei um dólar do ads...).
Denilson, valeu! Sou muito saudosista...
Nardão, o RPGMaker é clássico! :)
Renato, ainda não fiz um jogo decente...
Daniel, poxa... valeu cara!
[GM] Eduardo, preciso de um tempo para jogar... mas quem sabe um dia! :)
E aos outros que postaram e recomendaram este blog, meu muito obrigado!
Valeu pessoal!
Até mais! (e tomara que este ano dê mais tempo para postar mais coisas :P).
terça-feira, 28 de fevereiro de 2012
Um ano de blog e estou ficando velho...
Uia, como o tempo passa... :P
Quando eu comecei este blog, era simplesmente para usar algo que tinha (na verdade, o blog faz três anos... dois destes foi só para testes de uma aplicação web...), mas ai virou mania (postava dois artigos por dia...) e depois fiquei sem tempo...
Mas neste um ano que passou, seria uma boa dar uma relembrada do que eu escrevi...
Um dos primeiros artigos, foi sobre se Stallman era uma pessoa radical (no sentido de ser extremista) ou não, e foi um dos primeiros artigos com comentários...
E foi muito legal! Agradeço imensamente ao Fabio (eu também preciso me policiar...) e ao Mr. Yakult (ainda não li o livro, desculpe :P)
Depois foi a Mariângela, sobre a galinha e o porco do SCRUM, e dá-lhe porco (para quem não sabe, sou palmeirense)!
Também agradeço ao Carmona, sobre meus 10 princípios fundamentais para os "novatos": depois que se passa dos 30, você tem vergonha do código que você fez com 18 (peço desculpas minha primeira equipe...).
Ao Mauro Takeda, sobre minha dica de javascript de como escrever/reescrever um método: Vocês pensaram que eu era um especialista em javascript? Pois é... faz mais de um ano que não mexo, efetivamente, em javascript!
Ao Guilherme Andrade, sobre a dica do Cocos2D no artigo do Pygame. Valeu! Queria ter visto mesmo isso... mas é tanta coisa que quero ver que não vejo nenhuma coisa... (apesar que já aprendi o objective-c, agora só preciso instalar o Cocos2D :) )
Uia, o Mr. Yakult de novo na dica de como acessar uma porta serial em PHP. Sabia que dá para fazer isso em Java? :)
Ao Marcelo Augusto, sobre o primeiro (que eu saiba) personagem brasileiro em um game e no fim de uma era (se estou falando de 2012? hum... só lendo o artigo para saber! :P) -- Didi é um mito! :)
Ao 1klp no mesmo artigo e nas diferenças entre == e === em javascript -- sobre o Ruby, eu tentei estudar, mas ando sem tempo... se aparecer um projeto de Rhodes aqui no dev-mobile, eu juntaria o útil ao agradável. :)
Ao TRex no mesmo artigo javascript. O que você escreveu, resume todo meu artigo! :P
Ao Viera' que me deu a idéia do meu post de lugares culturais em Campinas.
Sei que falta mais gente, mas como eu disse, estou meio sem tempo... Espero continuar os agradecimentos até este final de semana... :)
Ah... Um abraço ao Morilha, que mesmo não comentando nada, me incentivou a continuar este blog!
Valeu!
Até mais! (ainda continua...)
Quando eu comecei este blog, era simplesmente para usar algo que tinha (na verdade, o blog faz três anos... dois destes foi só para testes de uma aplicação web...), mas ai virou mania (postava dois artigos por dia...) e depois fiquei sem tempo...
Mas neste um ano que passou, seria uma boa dar uma relembrada do que eu escrevi...
Um dos primeiros artigos, foi sobre se Stallman era uma pessoa radical (no sentido de ser extremista) ou não, e foi um dos primeiros artigos com comentários...
E foi muito legal! Agradeço imensamente ao Fabio (eu também preciso me policiar...) e ao Mr. Yakult (ainda não li o livro, desculpe :P)
Depois foi a Mariângela, sobre a galinha e o porco do SCRUM, e dá-lhe porco (para quem não sabe, sou palmeirense)!
Também agradeço ao Carmona, sobre meus 10 princípios fundamentais para os "novatos": depois que se passa dos 30, você tem vergonha do código que você fez com 18 (peço desculpas minha primeira equipe...).
Ao Mauro Takeda, sobre minha dica de javascript de como escrever/reescrever um método: Vocês pensaram que eu era um especialista em javascript? Pois é... faz mais de um ano que não mexo, efetivamente, em javascript!
Ao Guilherme Andrade, sobre a dica do Cocos2D no artigo do Pygame. Valeu! Queria ter visto mesmo isso... mas é tanta coisa que quero ver que não vejo nenhuma coisa... (apesar que já aprendi o objective-c, agora só preciso instalar o Cocos2D :) )
Uia, o Mr. Yakult de novo na dica de como acessar uma porta serial em PHP. Sabia que dá para fazer isso em Java? :)
Ao Marcelo Augusto, sobre o primeiro (que eu saiba) personagem brasileiro em um game e no fim de uma era (se estou falando de 2012? hum... só lendo o artigo para saber! :P) -- Didi é um mito! :)
Ao 1klp no mesmo artigo e nas diferenças entre == e === em javascript -- sobre o Ruby, eu tentei estudar, mas ando sem tempo... se aparecer um projeto de Rhodes aqui no dev-mobile, eu juntaria o útil ao agradável. :)
Ao TRex no mesmo artigo javascript. O que você escreveu, resume todo meu artigo! :P
Ao Viera' que me deu a idéia do meu post de lugares culturais em Campinas.
Sei que falta mais gente, mas como eu disse, estou meio sem tempo... Espero continuar os agradecimentos até este final de semana... :)
Ah... Um abraço ao Morilha, que mesmo não comentando nada, me incentivou a continuar este blog!
Valeu!
Até mais! (ainda continua...)
quarta-feira, 22 de fevereiro de 2012
MonoTouch: Construindo Apps em iOS e Android com .Net
Essa dica é de um amigo meu, que esta trabalhando com esta linguagem. :)
O Mono é um projeto open-source que, eu acho, foi iniciado pelos ex-donos da Ximian (uma antiga empresa que trabalhava com a plataforma Gnome).
Inicialmente, era uma tentativa de criar um framework livre para Microsoft.Net que rodasse tanto em GNU/Linux quanto em MS-Windows. Hoje, a versāo disponível implementa a linguagem C# e alguns CLR (um tipo de biblioteca) compatível com o Microsoft.Net.
O interessante é que, a partir daí, surgiram dois novos frameworks: um para iOS (iPhone) chamado MonoTouch e um Android, o MonoForAndroid.
Com certeza, isso é uma alegria para todo desenvolvedor .Net que quer programar em iOS/Android...
O problema: as frameworks são pagas. :(
Mas existe a versão para validação (evaluation... Será que a tradução esta correta? Já disse que sou péssimo em inglês? :P).
Para tentar ver se realmente vale a pena pagar ou nāo, nāo custa ir ao site deles e baixar esta versāo:
Versāo iOS:
http://xamarin.com/monotouch
Versāo Android:
http://xamarin.com/monoforandroid
Até mais!
Ah... Valeu Ermano, pela dica! ;)
O Mono é um projeto open-source que, eu acho, foi iniciado pelos ex-donos da Ximian (uma antiga empresa que trabalhava com a plataforma Gnome).
Inicialmente, era uma tentativa de criar um framework livre para Microsoft.Net que rodasse tanto em GNU/Linux quanto em MS-Windows. Hoje, a versāo disponível implementa a linguagem C# e alguns CLR (um tipo de biblioteca) compatível com o Microsoft.Net.
O interessante é que, a partir daí, surgiram dois novos frameworks: um para iOS (iPhone) chamado MonoTouch e um Android, o MonoForAndroid.
Com certeza, isso é uma alegria para todo desenvolvedor .Net que quer programar em iOS/Android...
O problema: as frameworks são pagas. :(
Mas existe a versão para validação (evaluation... Será que a tradução esta correta? Já disse que sou péssimo em inglês? :P).
Para tentar ver se realmente vale a pena pagar ou nāo, nāo custa ir ao site deles e baixar esta versāo:
Versāo iOS:
http://xamarin.com/monotouch
Versāo Android:
http://xamarin.com/monoforandroid
Até mais!
Ah... Valeu Ermano, pela dica! ;)
quinta-feira, 19 de janeiro de 2012
Dicas de Programação: "Adicionando" métodos em Classes Nativas (Objective C)
Essa eu aprendi com um cara aqui da empresa. :)
Sempre que precisava de um método novo em uma classe que já existia em Java, eu tinha que criar uma nova classe que herdava desta e criar o método:
public class MyArrayList extends ArrayList {
public void sort() {
...
}
}
Para usar, tinha que substituir a instância para esta classe:
//De: ArrayList a = new ArrayList();
//Para:
MyArrayList a = new MyArrayList();
a.sort();
Mas em Objective C existe uma coisa interessante, se eu quiser criar um método em uma classe já existente, basta colocar uma "categoria" para ela. Por exemplo: quero criar um método chamado parseJSON na classe NSString (que já existe na API da Apple):
/*
* NSString+JSON.h
*/
@interface NSString (NSString_JSON)
- (NSDictionary*) parseJSON;
@end
/*
* NSString+JSON.m
*/
@implementation NSString (NSString_JSON)
- (NSDictionary*) parseJSON
{
...
}
@end
Agora, qualquer objeto do NSString possue este método (sem eu precisar mudar a classe da variável!):
NSString* str = @"{a:1, b:2}";
NSDictionary* dict = [str parseJSON];
Muito interessante... :)
Valeu, Koga, pela dica!
Até mais!
sexta-feira, 23 de dezembro de 2011
Feliz Natal e um Prospero Ano Novo (2011)
Pessoal,
Desta vez vou pedir desculpas, estava muito enrolado com alguns problemas e não deu para enviar aquele "spam" padrão de Feliz Natal e Próspero Ano Novo á todos...
Então, agora, estou escrevendo este post. :)
Vamos lá!
A turma da EEPG Orosimbo Maia (vulgo, Zimbão), de 1984 a 1991, principalmente ao Jefferson, ao Marcelo, ao Denis, ao Peterline, a Luciana e a Márcia, um grande Natal e um Ano Novo com muitas realizações pessoais e profissionais (saudades de vocês). :)
Ao pessoal do EESG Culto á Ciência, noturno e diurno, de 1992 á 1994. Passamos por muitas dificuldades, mas espero que vocês estejam bem!
A turma de Análise de Sistemas da PUCCAMP (1995) do noturno, foi com vocês que aprendi a programar. :D
Ao pessoal de Informática Noturno do COTUCA (de 1999 a 2000). A Suzi, a Edilene, ao Márcio, ao Perna, ao Denilson, ao Zé Maria, ao Mário, ao Gilson, ao Ielon, ao Wander, a Marly e a Giane. Vocês sabem que tenho um carinho enorme por todos e sinto muito orgulho desta turma.
A turma de Análise de Sistemas da PUCCAMP (2001) do noturno, principalmente a "minha" equipe: Diego, Saulo e Sérgio, finalmente nós concluímos o curso!
Ao pessoal da Especialização de OO da Unicamp (2005), foi uma dura batalha acordar no Sábado de manhã, mas valeu a pena conhece-los.
E a todos os professores que me ajudaram a me formar, meu muito obrigado. :)
Agora, do trabalho:
Ao pessoal do boteco (não, não sou tão bebum assim, e sim, fui filho do dono do bar...), onde foi meu primeiro emprego (dava uma canseira, mas valeu!).
A turma da Sonda (meu primeiro emprego como programador), principalmente para a Suzi, a Carol, a Fer, a Andrezza, ao Luciano e ao Igor, que apoiaram este programador júnior que só estava começando.
Ao pessoal do Yahoo! Brasil, especial para a equipe do Search: Fabio, Pater, Castilho e Morilha, foram momentos divertidos aí dentro! Aprendi demais com vocês.
A turma da Dextra, que me deu oportunidade de voltar a minha cidade, agradeço à vocês.
E ao pessoal da Ci&T, para todas as pessoas de todos os projetos que eu participei (são muitos e não dá para citar a todos...:P).
De novo, um Feliz Natal a todos vocês e um Ano Novo repleto de realizaçőes!
Até o ano que vêm!
Obs.: E desculpem mesmo por não ter enviado os "spams"... Ano que vêm, vou tirar férias no fim do ano, só para fazer isso...
E ao pessoal que não citei o nome, desculpem... É que é difícil colocar todos em um post. :P
Valeu,
Take, Ricardinho, Ricardo, Takemura, Rica, Rick, etc. :P
quinta-feira, 17 de novembro de 2011
Dicas de Programação: Comando delete em Javascript
Sabia que existe um comando que desaloca da memória uma variável em Javascript?
Pois, ele existe e é bem parecido com o de C++.
Ele se chama "delete"! :)
<script>
var str = new String("Vamos usar javascript?");
alert(str);
delete str;
alert(str);
</script>
Meio estranho desalocar memória em Javascript... Acho, mas não tenho certeza, que ele já faz isso por que é uma linguagem interpretada...
Em todo caso, nāo faz mal usá-la... :P
E percebi que nem todo navegador funciona... :P
Mais informações no site do MDN:
https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete
É isso aí! Até mais!
Pois, ele existe e é bem parecido com o de C++.
Ele se chama "delete"! :)
<script>
var str = new String("Vamos usar javascript?");
alert(str);
delete str;
alert(str);
</script>
Meio estranho desalocar memória em Javascript... Acho, mas não tenho certeza, que ele já faz isso por que é uma linguagem interpretada...
Em todo caso, nāo faz mal usá-la... :P
E percebi que nem todo navegador funciona... :P
Mais informações no site do MDN:
https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete
É isso aí! Até mais!
Assinar:
Postagens (Atom)