sexta-feira, 15 de agosto de 2008

DeuTapaOnde.com.br - PodCast sobre o futebol de Cachoeirinha e Gravataí.

Dae galera,
essa semana entrou no ar um projeto particular meu e do meu pai Alceu (Careca), um podcast que fala sobre o futebol de Cachoeirinha e Gravataí, de uma forma divertida.

Gostaria que participassem comentando, opinando, divulgando ou mandando e-mail para deutapaonde@deutapaonde.com.br.

Acessem http://www.deutapaonde.com.br e participem!

Abraço à todos.

quarta-feira, 30 de julho de 2008

Discobolum.com.br - Sistema Profissional para Controle e Prescrição de Treinamento

Olá galera, venho aqui mais uma vez para falar de novidade.

Esta novidade e para quem faz atividades físicas ou trabalha neste ramo: treinadores, atletas, academias, atletas de fim de semana, professores de educação física, personal trainers.

É o sistema Discobolum de Controle e Prescrição de Treinamento Física, este sistema promete revolucionar o mercado da atividade física, pois é feito por profissionais de educação física, sabendo assim oque é necessário para tal atividade.

O sistema está em fase de ajustes, mas logo será liberado para uso.

Blog do Discobolum

Sistema Discobolum


Abraço.

quinta-feira, 26 de junho de 2008

O Cara da informática

Este texto que vou postar aqui, eu recebi por e-mail na lista do DFJUG da qual participo. Como achei muito genial o texto, e não sei ao certo a fonte, vou postar e se alguém souber a fonte me avise por favor.

Se prepare, pois alguns mitos vão ser desmentidos aqui! :)

1) O CARA DA INFORMÁTICA dorme. Pode parecer mentira, mas o CARA DA
INFORMÁTICA precisa dormir como qualquer outra pessoa. Esqueça que ele tem
celular e telefone em casa, ligue só para o escritório;

2) O CARA DA INFORMÁTICA come. Parece inacreditável, mas é verdade. O CARA
DA INFORMÁTICA também precisa se alimentar e tem hora para isso;

3) CARA DA INFORMÁTICA pode ter família. Essa é a mais incrível de todas:
Mesmo sendo um CARA DA INFORMÁTICA, a pessoa precisa descansar no final de
semana para poder dar atenção à família, aos amigos e a si próprio, sem
pensar ou falar em informática, impostos, formulários, concertos e
demonstrações, manutenção, vírus e etc.;

4) CARA DA INFORMÁTICA, como qualquer cidadão, precisa de dinheiro. Por essa
você não esperava, né? É surpreendente, mas o CARA DA INFORMÁTICA também
paga impostos, compra comida, precisa de combustível, roupas e sapatos, e
ainda consome Lexotan para conseguir relaxar. Não peça aquilo pelo que não
pode pagar ao CARA DA INFORMÁTICA;

5) Ler, estudar também é trabalho. E trabalho sério. Pode parar de rir. Não
é piada. Quando um CARA DA INFORMÁTICA está concentrado num livro ou
publicação especializada ele está se aprimorando como profissional, logo
trabalhando;

6) De uma vez por todas, vale reforçar: O CARA DA INFORMÁTICA não é vidente,
não joga tarô e nem tem bola de cristal, pois se você achou isto demita-o e
contrate um PARANORMAL OU DETETIVE. Ele precisa planejar, se organizar e
assim ter condições de fazer um bom trabalho, seja de que tamanho for.
Prazos são essenciais e não um luxo. Se você quer um milagre, ore bastante,
faça jejum, e deixe o pobre do CARA DA INFORMÁTICA em paz;

7) Em reuniões de amigos ou festas de família, o CARA DA INFORMÁTICA deixa
de ser o CARA DA INFORMÁTICA e reassume seu posto de amigo ou parente,
exatamente como era antes dele ingressar nesta profissão. Não peça
conselhos, dicas. ele tem direito de se divertir;

8) Não existe apenas um 'levantamentozinho' , uma 'pesquisazinha' , nem um
'resuminho', um 'programinha pra controlar minha loja', um 'probleminha que
a maquina não liga', um 'sisteminha' , uma 'passadinha rápida(ALIAS CONTA-SE
DE ONDE SAIMOS E ATÉ CHEGARMOS)', pois esqueça os 'inha e os inho
(programinha, sisteminha, olhadinha, )' pois OS CARAS DA INFORMATICA não
resolvem este tipo de problema. Levantamentos, pesquisas e resumos são
frutos de análises cuidadosas e requerem atenção, dedicação. Esses tópicos
podem parecer inconcebíveis a uma boa parte da população, mas servem para
tornar a vida do CARA DA INFORMATICA mais suportável;

9) Quanto ao uso do celular: celular é ferramenta de trabalho. Por favor,
ligue, apenas, quando necessário. Fora do horário de expediente, mesmo que
você ainda duvide, o CARA DA INFORMATICA pode estar fazendo algumas coisas
que você nem pensou que ele fazia, como dormir ou namorar, por exemplo;

10) Pedir a mesma coisa várias vezes não faz o CARA DA INFORMATICA trabalhar
mais rápido. Solicite, depois aguarde o prazo dado pelo CARA DA INFORMATICA;

11) Quando o horário de trabalho do período da manhã vai até 12h, não
significa que você pode ligar às 11:58 horas. Se você pretendia cometer essa
gafe, vá e ligue após o horário do almoço (relembre o item 2). O mesmo vale
para a parte da tarde: ligue no dia seguinte;

12) Quando CARA DA INFORMATICA estiver apresentando um projeto, por favor,
não fique bombardeando com milhares de perguntas durante o atendimento. Isso
tira a concentração, além de torrar a paciência.
ATENÇÃO: Evite perguntas que não tenham relação com o projeto, tipo como..
vocês entendem é claro..;

13) O CARA DA INFORMATICA não inventa problemas, não muda versão de WINDOWS,
não tem relação com vírus, NÃO É CULPADO PELO MAL USO DE EQUIPAMENTOS,
INTERNET E AFINS. Não reclame! O CARA DA INFORMATICA com certeza fez o
possível para você pagar menos. Se quer EMENDAR, EMENDE, mas antes demita o
CARA DA INFORMATICA e contrate um QUEBRA GALHO;

14) Os CARAS DA INFORMATICA não são os criadores dos ditados 'o barato sai
caro' e 'quem paga mal paga em dobro'. Mas eles concordam. ;

15) E, finalmente, o CARA DA INFORMATICA também é filho de DEUS e não filho
disso que você pensou.

16) Agora, depois de aprender sobre O CARA DA INFORMATICA, repasse aos seus
amigos,afinal, essas verdades precisam chegar a todos. O CARA DA INFORMATICA
agradece.

17) Não pergunte para O CARA DA INFORMATICA uma sugestão de computador BOM e
BARATO para você comprar. Não existe computador BOM e BARATO. Ou é uma
coisa, ou é outra.


Sensacional!!!

Abraços.

quarta-feira, 11 de junho de 2008

Dicas sobre produtividade

Para quem trabalha com web, segue umas pequenas dicas que quando bem aplicadas dão um bom resultado, para quem quer uma maior produtividade no seu trabalho.

Essas dicas foram dadas pelo Marco Gomes no seu blog, eu estou somente parafraseando algumas coisas, oque eu achei interessante foi o documento que o Marco fez sobre produtividade para uma empresa que ele trabalhava em 2006, é um documento do Google Docs sobre produtividade.


Link para o documento sobre produtividade


Apesar de ser de 2006 (nessa era de um ano estar defasado) é um texto bastante instrutivo e pode ajudar a conseguirmos nos organizar melhor, além das dicas de ferramentas para conseguir isso.

Falando dessas ferramentas, eu particularmente uso a Remember The Milk (Lembre-se do leite) e acho muito genial!

Nessa ferramenta tu consegues organizar as tarefas de uma forma simples, prática, centraliza todos os assuntos nela e também é sincronizada com o Google Calendar.

Valeu.
Abraços.

Getting Real (Caindo na Real)

Esse assunto não é muito novo na Web, mas porém, todavia, entretanto, eu nunca postei isso. Então lá vai. :)

Um livro bastante conhecido o Getting Real (caindo na real), que aborda o assunto de desenvolvimento de software baseado em Web, onde eles sugerem técnicas novas para a contexto de desenvolvimento de software, fazendo o desenvolvimento de software uma tarefa menos burocrática e a tornando mais real.

Nesse livro eles desmistificam algumas técnicas ultrapassadas e mostram um novo modo de se construir software.

Para ter uma noção, quem escreveu esse livro foi a equipe da 37 signals, tá mais e daí, quem são esses caras?

É só a galera que criou: o framework Ruby on Rails, Basecamp, Campfire, etc.

Os caras são bons!

Eu li o livro à algum tempo atrás e confesso que gostei muito! Tanto é que estou lendo de novo. :p

O livro é originalmente escrito em inglês, mas tem a versão em português que é essa do link abaixo.


Link do Livro on-line Caindo na Real.



Tá aí a dica!
Boa leitura.

Abraços.

quarta-feira, 4 de junho de 2008

Brasil fica em 2º Lugar no WIF (Web Designer Internacional Festival) na frança

A equipe batizada como bope formada por: Gustavo Finger, Maurício Brentano, Alisson Douglas e Julio Corrêa.

Tirou o segundo lugar no WIF (Web Designer Internacional Festival) em Limoges na França, perdendo apenas por um ponto para uma equipe sueca.

Lembrando que para eles se classificarem para a França, teve uma competição aqui no Brasil na Unisinos - RS (se não me falha a memória), onde os cinco melhores trabalhos ganhavam o direito de participarem da etapa internacional na França.

A competição consistia em fazer todo o projeto de um site em 24 horas, desde projeto à execução, sendo que o tema do site era dado no dia.

Na primeira etapa a equipe bope fez o seguinte trabalho sobre o futuro das águas.

Link do trabalho sobre as águas.

Já na segunda etapa, a internacional, a gurizada se puxou num vídeo interativo que na minha modesta opnião, foi melhor que os ganhadores!

O tema da etapa internacional foi como será o e-mail em 2020.

Link sobre o trabalho do e-mail em 2020.


Vídeo da comemoração da galera!

Conheço essa galera e sei que realmente são muito talentosos, parabéns!

Falou.

Abraços.

terça-feira, 3 de junho de 2008

Ferramentas interessantes

Estava procurando uma ferramenta para criação de sitemap e achei um gerador de sitemap muito legal!


Gerador de sitemap


Também estava procurando uma ferramenta para criação de ícones favicon, aqueles pequenos ícones que ficam ao lado do nome do site na barra de endereço do navegador.

Achei essa ferramenta: Gerador de ícone favicon.

Falou.
Abraços.

sábado, 31 de maio de 2008

O melhor site de bodyboarding!

Fala galera,
para aqueles que gostam, praticam ou simpatizam com o bodyboarding.

Vou deixar uma dica, para que possam dar uma olhada no site da B2BR - BodyBoarding Brasil e estar por dentro dos acontecimentos nesse esporte.

Conheço a galera da equipe B2BR: o Rodrigo Monti e a Desiree Kinashi, que além de serem muito gente boa, são profissionais de bodyboard do mais alto nível!

O site tem muitas fotos, vídeos e matérias super atualizadas, sobre oque acontece no BodyBoarding Brasileiro e Mundial e tem também a loja virtual deles a B2BR SHOP.


Link do site da Bodyboarding Brasil.

Valeu, tá aí a dica!

Abraços.

Download Day - Firefox 3

A Mozilla anuncia no mundo inteiro sua campanha para tentar estabelecer um novo recorde mundial no Guinness Livro dos Recordes pelo software mais baixado durante um período de 24 horas. A iniciativa está planejada para acontecer no dia do lançamento do Firefox 3, e foi batizada de "Download Day".

Para isso, a Mozilla acaba de lançar a página do Download Day (http://www.spreadfirefox.com/pt-BR/worldrecord) onde os interessados podem participar na tentativa de recorde. Ao fazer a inscrição, o participante receberá um lembrete do momento certo de fazer o download.
Além disso, caso o recorde venha a ser confirmado, cada participante passa a ter direito a um certificado pessoal de participação no recorde.


Link do site.


Eu tô dentro!

Falou!

Abraços.

sexta-feira, 30 de maio de 2008

Boo-box - Plugin Brazuca para enriquecer o conteúdo do seu site

Tava dando uma olhada na Web e achei esse plugin da Jquery, se chama boo-box.

O objetivo do boo-box é fazer que algumas palavras do seu site sejam vinculadas com produtos dos seus parceiros e se alguém comprar esses produtos vindo dos links do seu site gere uma renda para você.

Tá mais como assim? Não entendi!

Segue o link para ver uma explicação detalhada.

Como o pessoal da boo-box fala conteúdo relevante e marketing inteligente. :)

Link do site da boo-box

Eu uso!

Falou.

Abraços.

quarta-feira, 28 de maio de 2008

GreyBox - no evento onClick do link

Bem, como disse no post passado, vou mostrar alguns exemplos para utilizar os métodos do GreyBox no evento onClick, para evitar abrir o site ao invés do GreyBox.

Vamos lá:

Método GB_show


Assinatura do método: GB_show(título, endereço da página que vai ser aberta no GreyBox, /*opcional*/ altura, largura, função a ser chamada).
Esse método abre o uma janela GreyBox no topo da página.
Ex:


<html>
<head>
<title>Usando GreyBox</title>
<!-- greybox -->
<script type="text/javascript">
//referente a instalação do greybox
var GB_ROOT_DIR = "greybox/greybox/";
</script>
<script type="text/javascript" src="greybox/greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/greybox/gb_scripts.js"></script>
<link href="greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- / greybox -->
</head>

<body>

<div>

<a href="http://google.com/" onclick="return GB_show('Google', this.href)">Visitar o Google</a><br />

</div>

</body>

</html>


Método GB_showCenter


Assinatura do método: GB_showCenter(título, endereço da página a ser aberta pelo GreyBox, /* opcional*/ altura, largura, função a ser chamada).
Esse método abre uma janela GreyBox no centro da página.
Ex:


<html>
<head>
<title>Usando GreyBox</title>
<!-- greybox -->
<script type="text/javascript">
//referente a instalação do greybox
var GB_ROOT_DIR = "greybox/greybox/";
</script>
<script type="text/javascript" src="greybox/greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/greybox/gb_scripts.js"></script>
<link href="greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- / greybox -->
</head>
<body>
<div>
<a href="http://google.com/" onclick="return GB_showCenter('Google', this.href)">Visitar o Google com Página Centralizada</a>
</div>
</body>
</html>


Método GB_showFullScreen:


Assinatura do método: GB_showFullScreen(título, endereço da página a ser aberta, função a ser chamada).
Esse método abre uma janela GreyBox em fullscreen.

Ex:


<html>
<head>
<title>Usando GreyBox</title>
<!-- greybox -->
<script type="text/javascript">
//referente a instalação do greybox
var GB_ROOT_DIR = "greybox/greybox/";
</script>
<script type="text/javascript" src="greybox/greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/greybox/gb_scripts.js"></script>
<link href="greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- / greybox -->
</head>

<body>
<div>

<a href="http://google.com/" onclick="return GB_showFullScreen('Google', this.href)">Visitar o Google em FullScreen</a>

</div>

</body>

</html>


Método GB_showImage


Assinatura do método: GB_showImage(título, endereço da imagem a ser aberta no GreyBox, função a ser chamada).
Esse método abre uma janela GreyBox com a imagem.
Ex:


<html>
<head>
<title>Usando GreyBox</title>
<!-- greybox -->
<script type="text/javascript">
//referente a instalação do greybox
var GB_ROOT_DIR = "greybox/greybox/";
</script>
<script type="text/javascript" src="greybox/greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/greybox/gb_scripts.js"></script>
<link href="greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- / greybox -->
</head>

<body>

<div>

<a href="http://static.flickr.com/119/294309231_a3d2a339b9.jpg"
onclick="return GB_showImage('Flower', this.href)">Abrindo a imagem de uma flor</a>

</div>

</body>

</html>


GB_showPage


Assinatura do método: GB_showPage(título, endereço da página a ser aberta no GreyBox, função a ser chamada).
Esse método abre uma janela GreyBox com a página em FullScreen mas com um layout do GreyBox diferente.
Ex:


<html>
<head>
<title>Usando GreyBox</title>
<!-- greybox -->
<script type="text/javascript">
//referente a instalação do greybox
var GB_ROOT_DIR = "greybox/greybox/";
</script>
<script type="text/javascript" src="greybox/greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/greybox/gb_scripts.js"></script>
<link href="greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- / greybox -->
</head>

<body>

<div>

<a href="http://google.com" onclick="return GB_showPage('Google', this.href)">Abre o Google em FullScreen mais com um layout do GreyBox diferente</a>

</div>

</body>

</html>


GB_showFullScreenSet


Assinatura do método: GB_showFullScreenSet(array de sites a serem abertos, seta qual site vai ser aberto ao iniciar o GreyBox, função a ser chamada).
Esse método abre uma janela GreyBox com a página em FullScreen com um layout do GreyBox diferente e paginação para poder abrir mais de um site.
Ex:


<html>
<head>
<title>Usando GreyBox</title>
<!-- greybox -->
<script type="text/javascript">
//referente a instalação do greybox
var GB_ROOT_DIR = "greybox/greybox/";
</script>
<script type="text/javascript" src="greybox/greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/greybox/gb_scripts.js"></script>
<link href="greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- / greybox -->
</head>
<body>
<div>
<script>
var page_set = [{'caption': 'Google', 'url': 'http://google.com/'},
{'caption': 'Yahoo', 'url': 'http://yahoo.com/'}];
</script>
<a href="#" onclick="return GB_showFullScreenSet(page_set, 1)">Abre o GreyBox com paginação para sites, veja que o google vai ser aberto primeiro por ser o primeiro elemento do array e no método estar setado a 1 posição para abrir ao ser executado o GreyBox</a>
</div>
</body>
</html>


GB_showImageSet


Assinatura do método: GB_showImageSet(array de imagens a serem abertas, seta qual imagem vai iniciar o GreyBox, função a ser chamada).
Esse método abre uma janela GreyBox com um layout do GreyBox diferente e paginação para poder abrir mais de uma imagem.
Ex:


<html>
<head>
<title>Usando GreyBox</title>
<!-- greybox -->
<script type="text/javascript">
//referente a instalação do greybox
var GB_ROOT_DIR = "greybox/greybox/";
</script>
<script type="text/javascript" src="greybox/greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/greybox/gb_scripts.js"></script>
<link href="greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- / greybox -->
</head>

<body>

<div>

<script>
var image_set = [{'caption': 'Flower', 'url': 'http://static.flickr.com/119/294309231_a3d2a339b9.jpg'},
{'caption': 'Nice waterfall', 'url': 'http://www.widerange.org/images/large/plitvicka.jpg'}];
</script>
<a href="#" onclick="return GB_showImageSet(image_set, 1)">Abre imagens com paginação</a>
</div>

</body>

</html>

E isso aí, para quem quizer ver estes e outros exemplos de como utilizar o GreyBox na prática ou as assinaturas dos métodos segue o link:

Exemplos de GreyBox na prática.


Falou!
Abraços.

GreyBox - Como usar?

Para quem nunca usou ou já usou e não lembra mais da sintaxe ou de onde baixar os arquivos, aqui vai uma breve explicação de como usar a biblioteca GreyBox.
Mas para que serve esse GreyBox? Alguém pode estar se perguntando.

Seguinte, o GreyBox é usado para se abrir uma janela centralizada ou não dentro da sua página (evitando abrir um conteúdo em popup) e dando um fade cinza na página principal (que fica atrás da janela do GreyBox).

O GreyBox faz a mesma coisa que scripts tais como: modal, lightbox
, lyteBox, etc.

Chega de conversa e vamos ao código, né. :p

Primeiramente, você tem que baixar a biblioteca GreyBox do site orango que detém os direitos desta biblioteca.

Em seguida, temos que setar o local onde vai estar a biblioteca assim:

<script type="text/javascript">
//referente a instalação do greybox
var GB_ROOT_DIR = "greybox/greybox/";
</script>


Aqui dissemos que a nossa biblioteca GreyBox vai estar na pasta greybox dentro da sub-pasta greybox.

A variável GB_ROOT_DIR definida como pública no JavaScript pela palavra var é de extrema importância no GreyBox porque é usada dentro da biblioteca para achar as imagens de loading ao começar a carregar a página dentro do GreyBox.
Portanto devemos colocar essa parte de nosso código sempre antes de chamarmos nosso link para a biblioteca GreyBox.

Em seguida colocamos os links da biblioteca:

<script type="text/javascript" src="greybox/greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/greybox/gb_scripts.js"></script>
<link href="greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" />


Agora vamos ao código completo:


<html>
<head>
<title>Usando GreyBox</title>
<!-- greybox -->
<script type="text/javascript">
//referente a instalação do greybox
var GB_ROOT_DIR = "greybox/greybox/";
</script>
<script type="text/javascript" src="greybox/greybox/AJS.js"></script>
<script type="text/javascript" src="greybox/greybox/AJS_fx.js"></script>
<script type="text/javascript" src="greybox/greybox/gb_scripts.js"></script>
<link href="greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- / greybox -->
</head>

<body>

<div>

<a href="http://google.com/" rel="gb_page_center[640, 480]">Abrir o Google em 640px por 480px</a>
<br />

<a href="http://google.com/" rel="gb_page_fs[]">Abrir o Google em Fulscreen</a>
<br />

<script>
var image_set = [{'caption': 'Flower', 'url': 'http://static.flickr.com/119/294309231_a3d2a339b9.jpg'},
{'caption': 'Nice waterfall', 'url': 'http://www.widerange.org/images/large/plitvicka.jpg'}];
</script>

<a href="#" onclick="return GB_showImageSet(image_set, 1)">Show first picture in image_set</a>
</div>

</body>

</html>


Vamos as explicações do código:

Bem, no primeiro link em Abrir o Google em 640px por 480, devemos nos deter a atenção na tag rel do link, nesta tag temos gb_page_center[640, 480], onde o gb_page_center é para abrir uma janela centralizada, 640 ou o primeiro parâmetro é largura do GreyBox e 480 ou o segundo parâmetro é a altura do GreyBox.
Ao ser carregar a página o GreyBox varre todos os links que tem essa tag e faz esses links chamarem um GreyBox com a página setada no href em questão.

Então ele encontra todos os links que contém gb_page_center e pega o href como página a ser aberta pelo GreyBox.

O segundo link Abrir o Google em Fulscreen
, faz quase a mesma coisa que o primeiro link diferenciando apenas na questão que abre em fullscreen a página do GreyBox e a tag rel tem o seguinte valor
gb_page_fs[].

Surgem casos que o GreyBox, demora um pouco para carregar esses links por javascript em decorrência disso, ao invés de abrir a janela GreyBox ao clicar no link abre a página mesmo, neste caso eu dou uma dica para se usar as funções do GreyBox no onclick do link em questão.

No terceiro exemplo (Show first picture in image_set), estou dando uma prévia sobre isso.

No meu próximo post eu falo sobre isso...

Falou.
Abraços.

HTC Touch e Windows Mobile 6 Professional, combinação genial!

Bem, falar de windows para mim não é algo fácil, principalmente quando é para elogiar eles. :)
Porque eu estou falando isso? Bem, para resumir comprei o HTC Touch que vem como sistema operacional o Windows Mobile 6 Professional e realmente me apaixonei com sua interface, usabilidade, funcionalidades, enfim... até agora não vi nada de ruim nesse Smartphone.

Como desenvolvo em J2ME e o sistema operacional é Windows, fui ver como seria para instalar aplicativos Java nele e logo percebi que ele tem uma opção para se instalar aplicativos Java que me parece muito fácil de se operar (na teoria, não testei ainda), até agora estou gostando muito da combinação entre HTC Touch e Windows Mobile!

Em breve estarei postando alguns códigos em J2ME para desenvolver software para esse dispositivo...

Falou.
Abraços

quarta-feira, 21 de maio de 2008

URL amigável

As Url´s Amigáveis, como simpaticamente chamam a técnica de Rewrite, viraram rapidamente o atrativo da web 2.0 pelo fato de atrair mais usuários e ainda dar mais relevância ao seu conteúdo e além do mais ajuda a esconder a tecnologia usada pelo seu site.

Além de tornar mais “amigável” ao usuário isso facilita muito nos motores de busca, e normalmente um link desses atrai sempre mais visitantes.

Ao que interessa então:

mod_rewrite, como diz o nome re-write, reescrever, este modulo convete uma url em qualquer formato em um formato pré programado por voce.

Etapa 1 - Configuração

Verifique dentro do seu httpd.conf por:

LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

Se os mesmos estiverem comentados (# na frente), descomente ambos (retire o #) e reinicie o apache.

Etapa 2 - Arquivo .htaccess

Nesta etapa deve-se criar o arquivo .htaccess (ex: touch .htaccess) se o mesmo já existir, apenas verifique as permissões dele de leitura e escrita, lembrando que para criar o arquivo .htaccess complexos você deve ter o conhecimento sobre expressões regulares.

Arquivo .htaccess:



Options +FollowSymLinks

##liga motor de reescrita de URL
RewriteEngine on

##Regra para cair na index.php
RewriteRule index.html$ http://localhost/testes/index.php
RewriteRule index.htm$ http://localhost/testes/index.php

##Regra para cair na página categoria.php
RewriteRule categoria/(.*)$ http://localhost/testes/
categoria.php?categoria=$1

##Regra para cair na página busca.php
RewriteRule busca/(.*)/(.*)$ http://localhost/testes/
busca.php?data=$1&categoria=$2


Vamos ver oque significa esse código:

Options +FollowSymLinks: A opção FollowSymLinks ativada determina que o Apache deverá solicitar o arquivo real do link simbólico que será criado, sem isso resultaria em um erro 505 (em alguns casos sem essa opção funciona mesmo assim pois não foi necessário a criação de links simbolicos).

RewriteEngine on: Ativa a engine (motor) do rewrite.

RewriteRule Site-(.*)-(.*)-(.*)\.htm$ : Esta parte é o fundamento do Rewrite, é a criação da regra que será utilizada na montagem da nova URL, nessa sentença podemos traduzir que a nova URL será montada da seguinte forma: Site-1-2-3.htm sendo 1,2,3 parametros de $ definido ao final, mais quem são esses parametros ? espera p****.

busca/(.*)/(.*)$ http://localhost/testes/busca.php?data=$1&categoria=$2 : Está parte trabalha em cima da nossa URL original, repare que a URL está sendo decomposta em parametros $1, $2, $3, isso mesmo, os mesmos que serão substituidos na abordagem anterior, simples demais, ah você quer colocar o dia como sendo paramêtro ? busca.php?data=$1&categoria=$2, resolvido basta agora alterar na URL de saída.

Obs: O arquivo deverá ser criado ou deverá existir no mesmo local que foi definido no apache o DocumentRoot (diretório principal) e o nome do arquivo é .htaccess (tem que ser assim o nome do arquivo).

Etapa 3 - Criando sua Url Amigável
Quando se chama a url index.html ou index.htm o arquivo .htaccess direciona para a página index.php, conforme nossa primeira regra no .htacces:

##Regra para cair na index.php
RewriteRule index.html$ http://localhost/testes/index.php
RewriteRule index.htm$ http://localhost/testes/index.php


Arquivo index.php:


<html>
<head>
<title>Teste de reescrita de URL</title>
</head>
<body>
<div>
<a href="categoria/1">Categoria 1</a>
<br />
<a href="categoria/2">Categoria2</a>
<br />
<a href="busca/2008-01-12/1">Busca por data</a>
</div>
</body>
</html>



Se for chamada a página busca/"data"/"categoria" o .htaccess envia para a página busca.php passando também as variáveis por $_GET.

Arquivo busca.php:


<html>
<head>
<title>Busca - Verifica as variáveis passadas e se está funcionando a reescrita de URL</title>
</head>
<body>
<div>
<?php echo 'Categoria = '.$_GET['categoria'].
'<br />'.'Data = '.$_GET['data'].'
';?>
<a href="http://localhost/testes/index.html">Voltar</a>
</div>
</body>
</html>




Se for chamada a página categoria/"categoria" o .htaccess envia para a página categoria.php passando também a variável por $_GET.

Arquivo categoria.php:


<html>
<head>
<title>Categoria - Verifica as variáveis passadas e
se está funcionando a reescrita de URL</title>
</head>
<body>
<div>
<?php echo 'Categoria = '.$_GET['categoria'].'
';?>
<a href="http://localhost/testes/index.html">Voltar</a>
</div>

</body>
</html>



Gerador de .htaccess
Manual do mod_rewrite
Manual de expressão regular

Falou.
Abraços.

JEDI - Iniciativa para desenvolvimento e educação JAVA a distância.

Estou falando de curso de java gratuito e de alta qualidade. Mas como assim?
Bem, visto que o mercado de java está prescisando de profissionais qualificados e java é a linguaguem mais casca grossa para se aprender, a Universidade das Filipinas, através do Java Research & Development Center, criou a iniciativa JEDI (Java Education and Development Initiative), que tem como principais objetivos o de melhorar a experiência do ensino e da aprendizagem; Aumentar a qualidade dos graduados em Ciência da Computação e Tecnologia da Informação (disponibilizando os materiais de seus cursos gratuitamente para quem se interessar); Aumentar o banco de especialistas em Java e, Fornecer serviços e produtos a altura das necessidades do mercado mundial.

Só para dar noção do tamanho da jogada, entre os parceiros que apoiam esta iniciativa mundial estão: Sun Microsystems, Universidade das Filipinas, Politec, DFJUG, Borland e CNBB/Instituto Gaudium.

Segue o link sobre a descrição do JEDI: Descritivo do JEDI
Site do DFJUG: DFJUG
Cursos JEDI on-line: Curso JEDI on-line

Tá aí a dica!
Eu estou fazendo esses cursos e são realmente muito bons!
Hoje só não aprende java quem não quer né. :)

Falou.
Abraços.

segunda-feira, 19 de maio de 2008

Apóstofro - Quando usar apóstofro (') e quando usar aspas (") em programação PHP?

Bem essa questão é bem básica mas, às vezes quando estamos começando nos perdemos um pouco e usamos aspas (") direto para avitar dor de cabeça. :p
A questão é processamento, enquanto aspas (") interpreta todo o conteúdo que estiver entre elas ou seja varre toda a string para verificar se tem alguma variável nela para imprimir o conteúdo e em conseqüencia disso demora um pouco mais para interpretar o valor, o apóstrofo (') somente imprime na tela oque desejarmos de texto ou tudo que estiver entre apóstofro vai se interpretado como texto. Tá mais como assim?

Ex:


<?php
$strValorApostrofo = 'Cara, isso é um teste de apóstrofo.';

//imprime o texto igualzinho oque tiver entre os apóstrofos (')
//imprime $strValorApostrofo
echo '$strValorApostrofo';

$strValorAspas = '<br />';
$strValorAspas1 = 'Cara, isso é um teste de aspas. ';
$strValorAspas2 = 'Tá aí a diferença em aspas o valor
da variável é executado.';
$strMensagemConcatenada = "$strValorAspas $strValorAspas1
$strValorAspas2 Viu a diferença!";

//imprime o texto e se tiver variáveis imprime os valores destas
//imprime <br /> Cara, isso é um teste de aspas.
//Tá aí a diferença em aspas o valor da variável é executado.
//Viu a diferença!
echo $strMensagemConcatenada;
?>



A minha dica é: Use aspas (") onde for extremamante necessário usar e no mais use apóstrofo (').
Tá mais isso não é muito xiitismo?
Na realidade até é.
Isso está envolvido com as boas práticas de programação, se você usar aspas (") em todo o seu sistema sem distinção e o seu sistema for pequeno, vai fazer pouca diferença. Mas, se o sistema for grande vai notar seu sistema uns segundos mais rápido se usar aspas (") somente onde for necessário e no mais apóstrofo (').

Falou.
Abraços.

PHP5 - Manipulando documentos XML com PHP

Bem, para manipular documentos XML em php temos a função simplexml_load_file, onde devemos somente passar o nome do arquivo XML por parâmetro para esta função e ela se encarrega de criar um objeto do tipo SimpleXmlElement para nós.
Observação: Se o arquivo XML estiver mal formatado ou não seja um documento XML está função retornará false.

Vamos ao código:
Arquivo pessoa.xml.


<?xml version="1.0" encoding="utf-8"?>
<pessoas>
<pessoa>
<nome>Juca Bala</nome>
<data_nascimento>10/10/2008</data_nascimento>
<nome_mae>Joana Bala</nome_mae>
</pessoa>
<pessoa>
<nome>Josiel Almeida</nome>
<data_nascimento>10/12/2008</data_nascimento>
<nome_mae>Josefa Almeida</nome_mae>
</pessoa>
<pessoa>
<nome>Carlos Freitas</nome>
<data_nascimento>10/05/2008</data_nascimento>
<nome_mae>Catarina Freitas</nome_mae>
</pessoa>
</pessoas>



Arquivo manipula_xml.php


<php
//cria o objeto SimpleXmlElement
$objXML = simplexml_load_file('pessoa.xml');

//imprime atributos do objeto criado
echo 'Nome da pessoa = '.$objXML->pessoa[0]->nome.'<br />';
echo 'Data de Nascimento = '
.$objXML->pessoa[0]->data_nascimento.'<br />';
echo 'Nome da mãe = '.$objXML->pessoa[0]->nome_mae.'<br />';
?>



Pegando valores do objeto com foreach ou pelo método children().



<?php
//cria o objeto SimpleXmlElement
$objXML = simplexml_load_file('pessoa.xml');

//imprime atributos do objeto criado
foreach ( $objXML->pessoa as $objPessoa )
{
echo 'Nome da pessoa = '.$objPessoa->nome.'<br />';
echo 'Data de Nascimento = '
.$objPessoa->data_nascimento.'<br />';
echo 'Nome da mãe = '.$objPessoa->nome_mae.'<br /><br />';
}

//imprime as string contendo o código XML
echo $objXML->asXML();

echo '<br /><br />';

//obtém os objetos filhos do objeto (sub-nodos), bem
//como seus valores
foreach ( $objXML->children() AS $objPessoa )
{
echo 'Nome da pessoa = '.$objPessoa->nome.'<br />';
echo 'Data de Nascimento = '
.$objPessoa->data_nascimento.'<br />';
echo 'Nome da mãe = '.$objPessoa->nome_mae.'<br /><br />';
}
?>


Inserindo dados novos no arquivo XML, criando novo nodo e gravando os dados.



<?php
//cria o objeto SimpleXmlElement
$objXML = simplexml_load_file('pessoa.xml');

//verifica total de nodos para inserir no final um novo nodo
$intTotalNodo = count($objXML->pessoa);

//insere e grava dados no arquivo XML
$objXML->pessoa[$intTotalNodo]->nome = 'Jean Carlos';
$objXML->pessoa[$intTotalNodo]->data_nascimento = '31/05/1994';
$objXML->pessoa[$intTotalNodo]->nome_mae = 'Joana Ramos';
$objXML->pessoa[$intTotalNodo]->esporte = 'futebol';

//imprime as string contendo o código XML
echo $objXML->asXML();

//cria um novo nodo
$objXML->pessoa->addChild('esporte', 'futebol');

//escreve no arquivo
file_put_contents('pessoa.xml', $objXML->asXML());
?>


Falou galera!
Abraços.

Variáveis Variantes (variable variables) - PHP

Em algumas ocasiões em um projeto você se ve no seguinte dilema.
"Tenho que trocar não só o valor da variável mas o nome desta também, mas como fazer?"
Claro que isto vai acontecer bem raramente mas, pode acontecer.
Pensando nisso o PHP traz o conceito de variável variante, que nada mais é que você conseguir trocar o nome da variável usando o valor de outra variável. Confundiu?
Bem vamos ao código que fica mais facíl.
Ex:

<?php
$strVariavell = 'strPessoa1';
$strVariavel2 = 'strPessoa2';

//aqui você cria a variável de nome strPessoa1
//com o valor de Tiago Finger
$$strVariavell = 'Tiago Finger';

//vamos ver o valor de strPessoa1
echo $$strVariavell;

//aqui você cria a variável de nome strPessoa2
//com o valor de Zeca Urubu
$$strVariavel2 = 'Zeca Urubu';

//quebra para a próxima linha
echo '<br />';

//vamos ver o valor de strPessoa2
//imprime Zeca Urubu
echo $strPessoa2;
?>

Toda a vez que se usa $$nomeVariavel, você está usando o conceito de variáveis variantes ou seja o conteúdo de $nomeVariavel será o nome da variável em questão.
Assim se pode criar objetos e variáveis dinâmicamente com o $$ antes do nome da variável.

Falou galera!
Abraço.

PHP 5 - Funções que auxiliam a nossa vida

No PHP 5 temos algumas funções que ajudam e muito, a facilitar nossa vida de programador.
Por exemplo:
__autoload($nome_classe) = função que carrega classes ao ser instanciada pela primeira vez.
Ex:


<?php
//executa a função __autoload para carregar as classes
function __autoload($strNomeClasse)
{
//se tiver classes em vários lugares se cria um array com as pastas
$arrPasta = array('classes');

//verifica as pastas que contém as classes
foreach ( $arrPasta AS $strNomePasta )
{
//se existe o arquivo carrega ele
if( file_exists("$strNomePasta/$strNomeClasse.class.php" ) )
{
include_once("$strNomePasta/$strNomeClasse.class.php");
}
}
}
//instancia a classe
$objClass1 = new Class1();
$objClass1->mostra();
?>


__set($nome_propriedade, $valor) = intercepta toda a atribuição em uma classe e seta os atributos.
Ex:


<?php
/**
* Classe de exemplo
* @author Tiago Finger
* @version 1.0
* @package teste
*/
class Exemplo
{
/**
* @var int $intPropriedade1 primeiro atributo da classe
* @access private
*/
private $intPropriedade1;

/**
* @var int $intPropriedade2 segundo atributo da classe
* @access private
*/
private $intPropriedade2;

/**
* Usado para setar os atributos da classe
* @param string $strPropriedade nome do atributo da classe
* @param mixed $mixValor valor da propriedade
* @return void
* @access public
*/
public function __set($strPropriedade, $mixValor)
{
$this->$strPropriedade = $mixValor;
}

/**
* Retorna a soma de $intPropriedade1 e $intPropriedade2
* @param void
* @return int
* @access public
*/
public function somar()
{
$intSoma = $this->intPropriedade1 + $this->intPropriedade2;
return $intSoma;
}

}

//cria instância da classe exemplo
$objExemplo = new Exemplo();

//seta valores dos atributos da classe
$objExemplo->__set('intPropriedade1', 2);
$objExemplo->__set('intPropriedade2', 10);

//executa metódo
echo 'Valor total = '.$objExemplo->somar();
?>



__get($propriedade) = intercepta toda requisição da classe e retorna o atributo.
Ex:


<?php
/**
* Classe de exemplo
* @author Tiago Finger
* @version 1.0
* @package teste
*/
class Exemplo
{
/**
* @var int $intPropriedade1 primeiro atributo da classe
* @access private
*/
private $intPropriedade1;

/**
* @var int $intPropriedade2 segundo atributo da classe
* @access private
*/
private $intPropriedade2;

/**
* Usado para setar os atributos da classe
* @param string $strPropriedade nome do atributo da classe
* @param mixed $mixValor valor da propriedade
* @return void
* @access public
*/
public function __set($strPropriedade, $mixValor)
{
$this->$strPropriedade = $mixValor;
}

/**
* Usado para pegar os atributos da classe
* @param string $strPropriedade nome do atributo da classe
* @return void
* @access public
*/
public function __get($strPropriedade)
{
return $this->$strPropriedade;
}

/**
* Retorna a soma de $intPropriedade1 e $intPropriedade2
* @param void
* @return int
* @access public
*/
public function somar()
{
$intSoma = $this->intPropriedade1 + $this->intPropriedade2;
return $intSoma;
}

}

//cria instância da classe exemplo
$objExemplo = new Exemplo();

//seta valores dos atributos da classe
$objExemplo->__set('intPropriedade1', 2);
$objExemplo->__set('intPropriedade2', 10);

//retorna propriedade
echo 'Primeiro atributo do objeto = '.
$objExemplo->__get('intPropriedade1').'<br />';
echo 'Segundo atributo do objeto = '.
$objExemplo->__get('intPropriedade2').'<br />';
?>



Falou galera!
Abraços.

Web Service em PHP

Bem primeiramente vamos ver o conceito sobre Web Services:
"Web Services são serviços disponibilizados pela internet por meio de um conjunto de tecnologias independentes de plataforma que permitem interoperabilidade entre aplicações por meio de padrões abertos e conhecidos como XML e SOAP. Com a interoperabilidade provida pelos Web Services torna possível agregar e e publicar dinamicamente aplicações. Web Services permitem que tecnologias de diferentes plataformas acionem serviços e se comuniquem umas com as outras."

De uma forma simples em um Web Service, você tem que ter uma aplicação que será a servidora do Web Service ou a aplicação que tem a implementação do Web Service e as outras aplicações que utilizam esse Web Service são aplicações cliente, essas aplicações chamam as funções do Web Service servidor.

Exemplo: Sua empresa desenvolve lojas virtuais em php e todas as vezes que você vai implantar o sistema em um novo cliente, tem que importar aquela tabela gigante de cep que o correio vende e se dá algum problema em algum cep de algum cliente você tem que ir na tabela cep daquele cliente e verificar o problema ou se você tem atualizar a tabela vai ter que atualizar essa tabela em todos os clientes. Que increnca hein!
Nesse caso poderia ser pensado em se criar um web service para centralizar essa tabela de cep. Mas como?

Vou mostrar um exemplo de como utilizar um web service para este caso:
Primeiramente você tem que implementar as funções de requisição do web service ou a aplicação que será a servidora desse Web Service.
Primeiramente vamos usar a classe NuSoap um toolkit para facilitar a implementação de Web Services. Lembrando que o php tem classes nativas para se implementar Web Services, em outra oportunidade eu posto aqui como fazer :).

Segue o link para baixar a classe nusoap.

Chega de conversa e vamos ao código:

A aplicação Web Service servidora, server.php:



<?php
//carrega a classe nusoap e seus componentes
include('nusoap.php');

//cria instância classe soap_server
$objServer = new soap_server();

//registra as funções do Web Service
objServer->register('getLocalidade');
$objServer->register('getRua');
$objServer->register('getBairro');
$objServer->register('getCidade');
$objServer->register('getEstado');

//retorna o local
function getLocalidade( $strCep )
{
//instância a classe cep que faz as transações para
//verificar o cep
$objCep = new Cep($strCep );
$strLocal = $objCep->pesqLocalidade();
return $strLocal;
}

//retorna a rua
function getRua( $strCep )
{
//instância a classe cep que faz as transações para
//verificar o cep
$objCep = new Cep($strCep );
$objCep->pesqLocalidade();
return $objCep->rua;
}

//retorna o bairro
function getBairro( $strCep )
{
//instância a classe cep que faz as transações para
//verificar o cep
$objCep = new Cep($strCep );
$objCep->pesqLocalidade();
return $objCep->bairro;
}

//retorna a cidade
function getCidade( $strCEP )
{
//instância a classe cep que faz as transações para
//verificar o cep
$objCep = new Cep($strCep);
$objCep->pesqLocalidade();
return $objCep->cidade;
}

//retorna o estado
function getEstado( $strCep )
{
//instância a classe cep que faz as transações para
//verificar o cep
$objCep = new Cep($strCep);
$objCep->pesqLocalidade();
return $objCep->estado;
}

//requisição para uso do serviço
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$objServer->service($HTTP_RAW_POST_DATA);
?>



A aplicação Web Service cliente, cliente.php:



<?php
//carrega a classe nusoap e seus componentes
include('nusoap.php');

//cria instância classe soapclient
//parâmetro a URL da página do web service
$objSoapClient = new soapclient('http://www.nomesite.com.br/web-
service-cep.php');

//chama a função getLocalidade que retorna o nome da localidade
//da pessoa e passa o número do cep como parâmetro para a função
$local = $objSoapClient->call('getLocalidade', array($cep));

//chama a função getRua que retorna o nome da rua da pessoa e
//passa o número do cep como parâmetro para a função
$strRua = $objSoapClient->call('getRua', array($strCep));
?>


E isso aí pessoal!
Abraços.