terça-feira, 30 de junho de 2009

Arvores em Python

Esse não é o melhor post que eu poderia fazer, mas é o máximo que posso fazer no momento atual.

Uma das coisas que mais gosto de programar sem me preocupar com mercado, eficiência, tempo e prazos é poder estudar o que me dá na telha ... Um exemplo disso é meu frequente interesse em estruturas de dados. Eu sei que muitos não vêem utilidade em algumas coisas como pilhas de prioridade, árvores e grafos, só para citar alguns.

No dia-a-dia dos programadores comerciais, não duvido mesmo que haja a necessidade de se preocupar com isso, já que existem componentes prontos para as mais diversas atividades e problemas imagináveis. No entanto, muitos desses componentes se utilizam de um ou outro conceito de estruturas de dados. O que estou propondo hoje não é nada mais do que colar dois códigos desenvolvidos nesses últimos dias de estudo de uma estrutura interessante. A Árvore.

Árvores como Estruturas de Dados

sexta-feira, 26 de junho de 2009

Tudo sobre o Signo de Virgem


À partir de hoje, todos os posts da série Tudo Sobre Signos estarão disponíveis no link O Livro dos Signos, no blog Inum Coeli. O texto desse post está agora no post O Livro do Signo de Virgem. Aproveitem.

segunda-feira, 22 de junho de 2009

E se o sistema operacional mais usado fosse o Linux?

Não pude deixar de rir lendo esse texto, que achei originalmente no portal aprendendo linux. Originalmente surgiu em uma lista de discussão do Mandriva, foi recentemente traduzido para pt_BR e colocado no fórum Ubuntu Brasil pelo usuário Lucas Mezencio. Posto aí para vocês na íntegra. Fiz algumas modificações para o texto ficar mais fluente, e adicionei mais uns parágrafos, pra retratar melhor a situação. Aproveitem ...

E se o sistema operacional mais usado fosse o Linux?

Eu compreendo o indivíduo que declarou ter problemas em passar do Windows para o Linux. Senti o mesmo ao experimentar o Windows. Decidi experimentá-lo, depois de alguns amigos que o usam a toda a hora me dizerem que era ótimo.

Fui até ao site da Microsoft para baixá-lo mas não estava lá disponível. Fiquei frustrado porque não consegui descobrir como se baixava o mesmo. Por fim tive que perguntar a um amigo e ele disse-me que o tinha de comprar...

sexta-feira, 19 de junho de 2009

Tudo sobre o Signo de Leão


À partir de hoje, todos os posts da série Tudo Sobre Signos estarão disponíveis no link O Livro dos Signos, no blog Inum Coeli. O texto desse post está agora no post O Livro do Signo de Leão. Aproveitem.

quarta-feira, 17 de junho de 2009

iPhone Desbloqueado - Alguns bons programas para o seu smartphone livre !!

GPS, jogos, messenger, gravador de voz. Esses são alguns exemplos de softwares que só existem para o iPhone a partir da criação de hackers espalhados pelo mundo, sobre o firmware 1.0.2 desbloqueado. São programas que não existem para a Apple, que decidiu restringir a execução de aplicativos aos que rodam na web pelo navegador Safari embutido no aparelho.

Sua instalação é feita pelos programas INdependence (Mac) ou iBrickr (PC), que também servem para subir ringtones criados em editores de áudio, acessar o sistema de arquivos do iPhone e configurar a tela principal do celular.

Como acontece com qualquer bom hack, esses não têm suporte e nem garantia de que possam danificar seu aparelho. Por isso, use-os sabendo dos riscos em potencial. O problema mais comum que vem da instalação de softwares de terceiros é bugs nos aplicativos nativos do iPhone, que podem exigir um restore do firmware.



Installer.app

O Installer.app permite instalar dezenas de aplicativos do próprio iPhone. Divide os programas por categorias, que podem ser deletados pela sua interface, e avisa quando há novas versões para baixar. É o garçom dos softwares independentes do celular da Apple.

Dock.app

Se preferir, use o Dock.app. Ele cria um pequeno ícone no canto inferior direito da tela que, ao ser arrastado, dispõe os programas instalados no iPhone como um cinturão de ícones. Como brinde, permite tirar screenshots da tela do celular, que são salvos no álbum de fotos da câmera.

Summerboard

É o outro companheiro inseparável para quem quer instalar vários aplicativos no iPhone. Com ele, a tela principal do celular ganha rolagem e personalização com temas e papel de parede. O Installer.app tem vários temas para download. Os mais corajosos podem criar o seu próprio e ganhar fama internacional.

Navizon

Uma das decepções com o lançamento do iPhone foi a ausência do GPS. O Google Maps original do aparelho exige que o usuário informe a sua posição, em vez de adivinhá-la. Para resolver esse problema, instale o Navizon. O software usa redes Wi-Fi dos usuários conectados e as estações radiobase dos celulares para triangular a posição do aparelho. Por isso, não é considerado um GPS ‘verdadeiro’, mas fornece seu posicionamento com precisão bem razoável. É gratuito por 15 dias. Depois, o usuário tem que pagar US$ 24,99 por seu desbloqueio.

Nes

O emulador de Nintendo 8 bits foi um dos primeiros softwares independentes a surgir para o iPhone e é a porta para horas de diversão. O programa não traz nenhuma ROM - a imagem dos cartuchos do videogame - que tem que ser baixada em outro site. Os controles do console são emulados na tela sensível ao toque e funcionam, para espanto do gamer acostumado com o gamepad físico. Os games podem ser salvos ao sair da partida e são controlados na orientação horizontal ou vertical.

Tap Tap Revolution

A febre de Guitar Hero e do tradicional Dance Dance Revolution chegou ao iPhone. Use as músicas da sua lista do iPod e crie novas sequências para compartilhar com a comunidade. Mais uma vez, a interface sensível ao toque do celular é colocada em prática, num uso ainda não imaginado pela Apple.

Apollo IM

Outra falha do iPhone é a ausência de um mensageiro eletrônico - até o iChat do Mac OS X ficou de fora. O Apollo IM conecta o usuário do iPhone com o resto do mundo pelas redes do MSN, ICQ, AIM ou .MAC, com várias contas em simultâneo e conexão ativa mesmo com a troca de aplicativo.

Sendsong e Sendpics

Como bom MP3 player da Apple, o iPhone “virgem” não permite enviar músicas para outros usuários, por Bluetooth ou Wi-Fi. O SendSong acaba com esse problema ao anexar canções aos e-mails criados no software nativo do iPhone. O SendPics faz o mesmo com as fotos tiradas com a câmera do iPhone, permitindo enviá-las no tamanho original por e-mail - como padrão, o celular as reduz antes de anexá-las.

PushR

O software envia em lote todas as imagens da pasta de fotos para uma conta no álbum virtual de fotos Flickr.

Stumbler

O iPhone lembra quais redes Wi-Fi o celular já acessou e se conecta automaticamente. Com o Stumbler, no entanto, o usuário tem acesso aos detalhes de cada rede sem fio no alcance do aparelho, como o tipo de proteção, canal de frequência usado e a potência do sinal.

Mobile ToDo

O aplicativo permite criar listas de tarefas no iPhone em grupos específicos, com data de validade e prioridade. Como o software nativo de calendário, mostra no ícone da Dock o número de tarefas ativas para lembrar do que está pendente.

VNotes

Se a Apple não incluiu um gravador de voz no iPhone, os hackers resolvem o problema. O VNotes usa o microfone para chamadas de voz pelo celular e garante o envio do áudio por e-mail, com edição do nome do arquivo.

Services

Em pouco tempo, o usuário do iPhone descobre que o Safari e o cliente de e-mail embutidos no aparelho reduzem muito o uso de um notebook. Mas navegar na rede Edge das operadoras de celular é um exercício doloroso, principalmente para o bolso. O Services permite desligar a conexão Edge do aparelho, para limitar a troca de dados apenas na Wi-Fi - que também é interrompida se desejado.

E-Books

A tela de 3,5 polegadas do iPhone é talhada para se ler um bom livro. O Books é o primeiro e-book reader do iPhone e já conta com livros para download no Installer.app. O usuário pode criar suas próprias versões com o tutorial disponível na página oficial do aplicativo.

Veja mais em: Programas free para iPhone

Fonte: Celular MP3

segunda-feira, 15 de junho de 2009

99 comandos do Vim que todo programador deveria saber

Antes de falarmos dos comandos, vamos a uma breve apresentação. O Vim é o sucessor mais difundido do vi, que é filho do ex com o ed, que por sua vez são filhos do qed, e por aí vai. O "vi" é a sigla de Visual Interface. Note que naquela época (início dos anos 80), não era comum como hoje, você ter um editor de textos visual, ou seja, você ver na tela o texto que está sendo editado. Tente imaginar como é editar um texto sem vê-lo. Quer tentar? Experimente o editor ed, presente em qualquer distribuição Linux.

Muito mais tarde, em 1992, apareceu no mundo Unix um concorrente do vi, o Vim (de "Vi IMitator", o imitador do vi) e logo se tornou popular, pois além de ser um clone muito bem feito do vi, possuía muitas outras funcionalidades, como uso da tecla TAB para completar nomes de arquivos, vários níveis de "undo" (desfazer comando), reconhecimento de sintaxe e histórico de linha de comando.

Então de "imitator" ele passou a ser chamado de "Vi IMproved", o vi melhorado. O Vim se tornou padrão em sistemas Linux, onde o /bin/vi é uma ligação simbólica para o /usr/vim, e conseqüentemente, a grande maioria usa Vim, mas acha que usa vi. Acabaram quase que virando sinônimos, mas, lembre-se, vi é diferente de Vim, e é sobre ele que este artigo comentará...



Apesar do Vim ser um editor de textos extremamente voltado para programação, ele também é poderoso para editar textos comuns (como esse) e possui muitas funcionalidades avançadas que outros editores gráficos como o Microsoft Word® têm, como abrir vários arquivos ao mesmo tempo, autocorreção, auto-identação, seleção visual, macros e outras que outro editor nem sonha ter, como seleção vertical de texto, interação total com o sistema operacional, uso de expressões regulares, sintaxe colorida, etc.

O Vim não é uma exclusividade de sistemas Unix, ele já foi portado para várias outras plataformas, como Amiga®, MacOs®, SunOs®, DOS®, Windows® e muitas outras. E como atrativo maior para os usuários novatos, também existe o gVim, para usar no X, com o mouse, menus, botões e todas as facilidades de uma aplicaçã o gráfica. Sendo o gVim apenas uma interface mais amigável do Vim, todas as funcionalidades deste funcionam naquele.

Vamos então para os comandos ...

100 Comandos do Vim que todo programador deveria saber

Busca

/palavra: Procura por "palavra" do início para o fim
?palavra: Procura por "palavra" do fim para o início
/Mari[oa]: Procura por "Mario" ou "Maria"
/\<pal: Procura por expressões que começem com "pala" como, "palavra" ou "palíndromo"
/ismo\>: Procura por expressões que terminem com "ismo" como, "autismo"
/\<para\>: Procura pela palavra "para"
/\<...\>: Procura por todas as palavras com 3 letras
/maria\|joao: Procura por maria ou joao
/\<\d\d\d\d\>: Procura exatamente por 4 dígitos numéricos
/^\n\{3}: Procura por três linhas em branco
:bufdo /palavra/: Procura "palavra" em todos os arquivos abertos

Substituição

:%s/antigo/novo/g: Substitui todas as ocorrências de "antigo" por "novo" no arquivo
:%s/antigo/novo/gw: Substitui todas as ocorrências com confirmação
:2,35s/antigo/novo/g: Substitui todas as ocorrências entre as linhas 2 e 35
:5,$s/antigo/novo/g: Substitui todas as ocorrências da linha 5 até EOF (fim da linha)
:%s/^/legal/g: Substitui o começo de cada linha com "legal"
:%s/$/Oh/g: Substitui o fim de cada linha por "Oh"
:%s/antigo/novo/gi: Substitui "antigo" por "novo" desconsiderando maíusculas e/ou minúsculas
:%s/ *$//g: Apaga todos os espaços em branco
:g/palavra/d: Apaga todas as linhas contendo "palavra"
:v/palavra/d: Apaga todas as linhas que não contém "palavra"
:s/maria/joao/: Substitui a primeira ocorrência de "maria" por "joao" na linha corrente
:s/maria/joao/g: Substitui todas as ocorrências de "maria" por "joao" na linha corrente
:%s/maria/joao/g: Substitui "maria" por "joao" em todo o arquivo
:%s/\r//g: Apaga retornos de carro do windows (\n)
:%s/\r/\r/g: Transforma os retornos de carro do windows (\n) em retornos do Linux (\r)
:%s#<[^>]\+>##g: Apaga tags HTML mas mantêm o texto
:%s/^\(.*\)\n\1$/\1/: Apaga linhas repetidas
Ctrl+a: Incrementa o número sob o cursor
Ctrl+x: Decrementa o número sob o cursor
ggVGg?: Muda o texto usando Rot13

Minúsculo/Maiúsculo

Vu: Torna todos os caracteres da linha minúsculos
VU: Torna todos os caracteres da linha maiúsculos
g~~: Inverte os caracteres do texto inteiro
vEU: Coloca as letras da palavra em maiúsculas
vE~~: Inverte os caracteres da palavra selecionada
ggguG: Coloca todo o texto em minúsculas
:set ignorecase: Ignora minúsculos/maiúsculos nas buscas
:set smartcase: Ignora minúsculos/maiúsculos em buscas exceto quando uma letra msiúscula é usada
:%s/\<./\u&/g: Coloca a primeira letra de cada palavra em maiúscula
:%s/\<./\l&/g: Coloca a primeira letra de cada palavra em minúscula
:%s/.*/\u&: Coloca a primeira letra de cada linha em maiúscula
:%s/.*/\l&: Coloca a primeira letra de cada linha em minúscula

Lendo/Gravando arquivos

:1,10 w arquivo: Salva as linhas de 1 a 10 em "arquivo"
:1,10 w >> arquivo: Adiciona as linhas de 1 a 10 em "Arquivo"
:r arquivo: Insere o conteúdo de "arquivo" no atual
:23r arquivo: Insere o conteúdo de "arquivo" a partir da linha 23

Explorando arquivos

:e .: Abre o gerenciador de arquivos integrado do Vim
:Sex: Divide a janela e abre o gerenciador de arquivos integrado
:browse e: Abre o gerenciador de arquivos integrado na janela corrente
:ls: Lista os buffers carregados
:cd ..: Move para a pasta superior
:args: Lista os arquivos
:args *.php: Abre lista de arquivos
:grep expressao *.php: retorna uma lista de arquivos .php que contenham a expressão informada
gf: Abre o arquivo sob o cursor

Interação com o Linux

:!pwd: Executa o comando "pwd" e retorna para o Vim
!!pwd: Executa o comando "pwd" e insere a saída no buffer
:sh: Retorna temporariamente para o shell
exit: Retorna para o Vim

Alinhamento

:%!fmt: Alinha todas as linhas
!}fmt: Alinha todas as linhas a partir da posição corrente
5!!fmt: Alinha as próximas 5 linhas

Abas

:tabnew: Cria uma nova aba
gt: Mostra a próxima aba
:tabfirst: Mostra a primeira aba
:tablast: Mostra a última aba
:tabm n(posicao): Reorganiza as abas
:tabdo %s/foo/bar/g: Executa um comando em todas as abas
:tab ball: Coloca todos os arquivos abertos em abas

Divisão da janela do Vim

:e arquivo: Edita "arquivo" na janela corrente
:split arquivo: Divide a janela e abre "arquivo"
ctrl-w "seta para cima": Coloca o cursor na janela do topo
ctrl-w ctrl-w: Coloca o cursor na próxima janela
ctrl-w_: Maximiza a janela corrente
ctrl-w=: Coloca todas as janelas com o mesmo tamanho
10 ctrl-w+: Adiciona 10 linhas de tamanho na janela corrente
:vsplit arquivo: Divide a janela verticalmente
:sview arquivo: O mesmo que split, mas em modo somente-leitura
:hide: Fecha a janela corrente
:only: Fecha todas as janelas, exceto a janela atual
:b 2: Abre #2 na janela corrente

Auto-completion do texto

Ctrl+n Ctrl+p (em modo de inserção): Completa palavra
Ctrl+x Ctrl+l: Completa linha
:set dictionary=dict: Define dict como o dicionário atual
Ctrl+x Ctrl+k: Completa usando o dicionário

Marcações

mk: Marca a posição corrente como k
‘k: Move o cursor para a marca k
d’k: Apaga tudo até a marca k

Abreviações

:ab email me@me.com: Define email como abreviação de me@me.com

Identação de Texto

:set autoindent: Liga a identação automática
:set smartindent: Liga a identação inteligente
:set shiftwidth=4: Define o tamanho da identação em 4 espaços
ctrl-t, ctrl-d: Identa/Deidenta no modo de inserção
>>: Identa
<<: Deidenta

Marcação de sintaxe

:syntax on: Liga a marcação de sintaxe
:syntax off: Desliga a marcação de sintaxe
:set syntax=perl: Força a usar a marcação de sintaxe do perl

Fontes:

Vim na Wikipédia: http://pt.wikipedia.org/wiki/Vim
Vim: Editor de Textos: http://aurelio.net/vim/
Texto sobre Vim e Emacs: http://aurelio.net/vim/vi-vim-venci.html
Tutorial do Vim: http://www.ademar.org/texts/vim.txt

domingo, 14 de junho de 2009

Limpando Caracteres de Cor do IRC - Delphi e Python

Eu achei que tinha perdido isso. Vou postar pq sei que é útil pra muita gente.

Esta função para retirada dos caracteres de cor se baseia em um autômato construído para este propósito, utilizando-se dos conceitos da Máquina de Turing.

P.S.: As duas funções foram revisadas e funcionam no Delphi 2009 e Python 2.6.2.

As duas versões são licenciadas sob a licença F.A.I.L., disponível no site do blog.



Versão Original: Delphi

(*
Função para retirar caracteres de cor de strings de IRC
Eduardo Rolim(Vndmtrx) - Knal #DelphiX - [BrasNet]
www.vindemiatrix.x-br.com
*)

Uses
Contnrs; // Necessário para poder usar a classe TStack, que implementa uma
estrutura de pilha

{
Esta função para retirada dos caracteres de cor se baseia em um autômato
construído para este propósito, utilizando-se dos conceitos da Máquina de
Turing.

A Expressão pode ser entendida como: <#3 [num [num] [,[num [num]]]>
}
function TForm1.StripIRCColor(Text: String): String;

Type
TUnitCor = packed Record
Pos: Integer;
Tam: Integer;
end;

PUnitCor = ^TUnitCor;

Var
Str: String;
UnitCor: PUnitCor;
Pilha: TStack;

I, LText: Integer; //Contador para o laço For
Pos: Integer; //Armazenador para a posição do início do marcador de cor que iremos excluir
Tam: Integer; //Armazenador para o tamanho do marcador de cor
Estado: Integer; //Estado atual da máquina

begin
//Inicialização das variáveis e objetos usados na execução do autômato
Str := Text;
Pos := -1;
Tam := -1;
Estado := 1;
LText := Length(Str);
Pilha := TStack.Create;

//Início da execução do Autômato
//For I := 1 to Length(Str) do begin
I := 1;
While (I <= LText) OR (Estado <> 1) do begin
Case Estado of
1: Begin //Estado atual: 1; Verifica caracter #3
If Str[I] in [#3] then begin
Pos := I;
Tam := 1;
Estado := 2;
Inc(I);
end else begin

{
http://www.sourcex.x-br.com/prog/artigos/ascii.html
Todos os caracteres entre #1 e #31 são considerados caracteres de controle,
por isto estes normalmente não aparecem em mensagens e podem ser excluídos
sem risco à interpretação da mensagem.

Os caracteres de 32 à 127 e os ASCII extendidos são os caracteres de input normais.
}
//Excluindo outros caracteres de controle simples.
If Str[I] in [#1 .. #31] then begin
Pos := I;
Tam := 1;
Inc(I);

//Delete(Str, Pos, Tam);
New(UnitCor);
UnitCor^.Pos := Pos;
UnitCor^.Tam := Tam;
Pilha.Push(UnitCor);
end else begin
Inc(I);
end;
end;
end; //Fim do Estado 1

2: Begin //Estado atual: 2; Verifica caracter
If Str[I] in ['0'..'9'] then begin
Inc(Tam);
Estado := 3;
Inc(I);
end else begin
Estado := 1;
//Inc(I);

//Delete(Str, Pos, Tam);
New(UnitCor);
UnitCor^.Pos := Pos;
UnitCor^.Tam := Tam;
Pilha.Push(UnitCor);
end;
end; //Fim do Estado 2

3: Begin //Estado atual: 3; Verifica caracteres ou ","
If Str[I] in ['0'..'9'] then begin
Inc(Tam);
Estado := 4;
Inc(I);
end else begin
If Str[I] in [','] then begin
Inc(Tam);
Estado := 5;
Inc(I);
end else begin
Estado := 1;
//Inc(I);

//Delete(Str, Pos, Tam);
New(UnitCor);
UnitCor^.Pos := Pos;
UnitCor^.Tam := Tam;
Pilha.Push(UnitCor);
end;
end;
end; //Fim do Estado 3

4: Begin //Estado Atual: 4; Verifica caracter ","
If Str[I] in [','] then begin
Inc(Tam);
Estado := 5;
Inc(I);
end else begin
Estado := 1;
//Inc(I);

//Delete(Str, Pos, Tam);
New(UnitCor);
UnitCor^.Pos := Pos;
UnitCor^.Tam := Tam;
Pilha.Push(UnitCor);
end;
end; //Fim Estado 4

5: Begin //Estado Atual 5; Verifica caracter
If Str[I] in ['0'..'9'] then begin
Inc(Tam);
Estado := 6;
Inc(I);
end else begin
Estado := 1;
Dec(Tam); //Se não houver número depois da virgula,
//significa que é uma vírgula normal
//Inc(I);

//Delete(Str, Pos, Tam);
New(UnitCor);
UnitCor^.Pos := Pos;
UnitCor^.Tam := Tam;
Pilha.Push(UnitCor);
end;
end; //Fim do Estado 5

6: Begin //Estado Atual 6; Verifica caracter
If Str[I] in ['0'..'9'] then begin
Inc(Tam);
Estado := 1;
//Inc(I);

//Delete(Str, Pos, Tam);
New(UnitCor);
UnitCor^.Pos := Pos;
UnitCor^.Tam := Tam;
Pilha.Push(UnitCor);
end else begin
Estado := 1;
//Inc(I);

//Delete(Str, Pos, Tam);
New(UnitCor);
UnitCor^.Pos := Pos;
UnitCor^.Tam := Tam;
Pilha.Push(UnitCor);
end;
end; //Fim do Estado 6

end; //Fim do Case
end; //Fim do laço For
//Fim da execução do autômato e início da execução da limpeza da string

While Pilha.Count > 0 do begin // Aqui efetuamos a limpeza na string
UnitCor := Pilha.Pop;
Delete(Str, UnitCor^.Pos, UnitCor^.Tam);
Dispose(UnitCor);
end;

Pilha.Free;

Result := Str;
end;



Versão em Python

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

'''
Esta função para retirada dos caracteres de cor se baseia em um autômato
construído para este propósito, utilizando-se dos conceitos da Máquina de
Turing.

A Expressão pode ser entendida como: <#3 [num [num] [,[num [num]]]>

Licenciado sob FAIL.
'''

def LimpaString(Texto, Caracter = ''):

Str = Texto[:]
Pos = -1
Tam = -1
Estado = 1
Tamanho = len(Str)
Pilha = []

I = 0

while (I <= Tamanho) or (Estado <> 1):

Char = Str[I:I+1]

if Estado == 1: #Estado atual: 1; Verifica caracter #3
if Char in ('\x03',):
Pos = I
Tam = 1
Estado = 2
I += 1
elif Char in [chr(x) for x in range(1, 32)]:
#Explicação: Todos os caracteres entre #1 e #31 são conside-
#rados caracteres de controle, por isto estes normalmente não
#aparecem em mensagens e podem ser excluídos sem risco à in-
#terpretação da mensagem.

#Os caracteres de 32 à 127 e os ASCII extendidos são os carac-
#teres de input normais.

Pos = I
Tam = 1
I += 1
Pilha.append({'Pos': Pos, 'Tam': Tam})

else:
I += 1

elif Estado == 2: #Estado atual: 2; Verifica primeiro caracter
if Char in [str(x) for x in range(0, 10)]:
Tam += 1
Estado = 3
I += 1
else:
Estado = 1
Pilha.append({'Pos': Pos, 'Tam': Tam})

elif Estado == 3: #Estado atual: 3; Verifica caracteres ou ","
if Char in [str(x) for x in range(0, 10)]:
Tam += 1
Estado = 4
I += 1
elif Char in [',']:
Tam += 1
Estado = 5
I += 1
else:
Estado = 1
Pilha.append({'Pos': Pos, 'Tam': Tam})

elif Estado == 4: #Estado Atual: 4; Verifica caracter ","
if Char in [',']:
Tam += 1
Estado = 5
I += 1
else:
Estado = 1
Pilha.append({'Pos': Pos, 'Tam': Tam})

elif Estado == 5: #Estado Atual 5; Verifica caracter
if Char in [str(x) for x in range(0, 10)]:
Tam += 1
Estado = 6
I += 1
else: #Se não houver número depois da virgula, significaque é uma vírgula normal
Estado = 1
Tam -= 1
Pilha.append({'Pos': Pos, 'Tam': Tam})

elif Estado == 6: #Estado Atual 6; Verifica caracter
if Char in [str(x) for x in range(0, 10)]:
Tam += 1
Estado = 1
Pilha.append({'Pos': Pos, 'Tam': Tam})
else:
Estado = 1
Pilha.append({'Pos': Pos, 'Tam': Tam})

while len(Pilha) > 0:
Cor = Pilha.pop()
Str = Str[:Cor['Pos']] + Caracter + Str[Cor['Pos']+Cor['Tam']:]

return Str

sexta-feira, 12 de junho de 2009

Tudo sobre o Signo de Câncer


À partir de hoje, todos os posts da série Tudo Sobre Signos estarão disponíveis no link O Livro dos Signos, no blog Inum Coeli. O texto desse post está agora no post O Livro do Signo de Câncer. Aproveitem.

terça-feira, 9 de junho de 2009

Google Wave

Eu vou lhe dizer, estou completamente fascinado por essa ferramenta e não vejo a hora que ela sairá do desenvolvimento e irá se tornar parte de nossas vidas !!!

Enquanto isso, a Microsoft está lançando um buscador que chega perto do que o Google faz.

A Microsoft diz Bing!, o Google diz Bang!



O Google Wave, além de aplicação de e-mail, integra um mensageiro instantâneo, blog, ferramenta wiki, rede social e recursos de chat, compartilhamento de arquivos e fotos e uma inovadora ferramenta de colaboração - que permite que um grupo desenvolva, simultaneamente, um texto ou uma apresentação.

Mas pra que misturar tudo? Digamos que você viajará para o Rio de Janeiro e quer saber os melhores lugares para sair à noite. Em vez de chamar algum amigo no chat, cria uma nova "onda". Este amigo adiciona outros na "conversa", que moram no Rio. Eles postam mapas, fotos de locais legais e ainda corrigem o jeito como você escreveu o nome de um bar, por exemplo.

Saindo do lazer para o trabalho, imagine editar um relatório com colegas de trabalho à distância. De certa forma já era possível fazer isso com o Google Docs, mas não simultaneamente.

Para organizar o eventual caos, o Wave tem a ferramenta Playback. Quem entra no meio de uma conversa pode ver passo a passo quem fez o quê no documento. A "onda" fica salva para consulta e futuras buscas - como os chats no Gtalk ou as conversas no Gmail já ficavam.

O serviço é uma resposta do Google à web instantânea, cujo melhor exemplo é o Twitter. Mas não são microposts, e sim informações de várias naturezas (mapas, imagens, links) que devem gerar grandes ambientes para colaboração e interação. Uma vez que as ondas poderão ser públicas, abertas e buscáveis (como no Google Maps ou Docs), o Wave pode ser entendido como uma tentativa de reorganizar os mecanismos de colaboração online.

O Google Wave não é uma promessa apenas por integrar todas essas aplicações em uma única janela do navegador. Mas, também, pelos recursos que permitirão ao internauta traduzir conversas e corrigir textos em tempo-real. Além disso, o programa terá suporte ao recurso arraste-e-solte (o famoso drag-and-drop) e a instalação de extensões.

Veja a apresentação do Wave no segundo dia do Google I/O:

"Yesterday, we promisse a surprise for this morning. And this morning, Google will surprise you!"



Futuramente em http://wave.google.com
Leia mais no Googleblog.

sexta-feira, 5 de junho de 2009

Tudo sobre o Signo de Gêmeos


À partir de hoje, todos os posts da série Tudo Sobre Signos estarão disponíveis no link O Livro dos Signos, no blog Inum Coeli. O texto desse post está agora no post O Livro do Signo de Gêmeos. Aproveitem.

quarta-feira, 3 de junho de 2009

Lexml - O Google do Governo Federal

Me faz lembrar o VisaLegis, da Anvisa, mas com muito mais recursos !!!


Governo cria 'Google' para leis e documentos de órgãos públicos

Ele tem a cara do Google, o jeito do Google, mas a proposta do projeto LexML é organizar a informação de órgãos públicos e do governo em um único repositório, simplificando o acesso a documentos como leis e acórdãos, entre outros.
...
O projeto começou a ser desenvolvido em abril do ano passado e tem lançamento oficial previsto para 30/06. Já supera os 274,4 mil documentos no ambiente de homologação - dos quais cerca de 90 mil podem ser consultados pelo endereço http://www.lexml.gov.br/. A meta é lançar o portal com 1 milhão de documentos cadastrados, de acordo com João Lima, responsável pelo projeto.
...
O LexML começou a ser desenvolvido há cerca de um ano e é gerido pela comunidade TI Controle, que reúne gestores de tecnologia da informação de 18 órgãos dos três poderes, entre eles o Senado Federal, o Tribunal de Contas da União (TCU), o Banco Central e o Supremo Tribunal Federal (STF).

Leia mais no site da Computerworld

segunda-feira, 1 de junho de 2009

Sobre Viagens e Paradoxos Temporais

Estava lendo os comentários do blog hoje e notei uma curiosidade. Algumas pessoas comentaram como seria possível meu personagem viajar para o passado e alterar os eventos da história? Bom, realmente não é fácil lidar com a situação, já que existem diversas correntes lógicas que explicam como poderia se dar esse processo.

Por isso, estou postando aqui um pedaço de um texto que encontrei que mostra um pouco sobre as várias possibilidades de viagem no tempo, destacando os vários tipos de universo existentes. Como a continuação da história ainda não foi postada, há muito espaço para especulação acerca de como se dará a alteração dos eventos. Até lá, aproveitem este excelente texto, disponível na íntegra no site Viagens no Tempo e Paradoxos Temporais.