Sunday, February 19, 2006

ExperiMENTA

Agora quem não sabe "ingrêiz" não tem mais desculpas!!!O site do Mentawai agora é bilíngue, e esse framework é uma boa oportunidade para os que estão entrando para o mercado web agora,
os que estão de saco cheio do Struts, e os que detestam macarronada com XML(like me!!!).
A maior feature do Mentawai(IMHO) não é não precisar reestartar o contexto, não é a independência dos XMLs entre tantas outras features, mas sim a sua simplicidade.
O Mentawai não é o Santo Graal da programação Web, mas funciona direitinho ao que se propõe e
ainda é simples! ;]

Ops! Ia esqueçendo o site: http://www.mentaframework.org/

Monocore X Multicore.

Muitos se perguntam:
-"Quando será que eu devo trocar meu humilde computador por um multicore?"
Depende.Se vc é um gamer e possui um FX57, fique onde está, que está muuuito bem. Se vc programa e tem um desses, fique por aí também. Agora, se você programa, escuta radio online, roda antivírus e ainda deixa umas "aplicaçõezinhas" rodando de fundo, um dualcore é para você.
A maioria das aplicações atuais, ainda não estão preparadas para rodar em 64 bits e fazer um uso completo dos multicores(claro, não estou falando de ambiente de servidores!) e devemos lembrar também aos heavy gamers que não adianta ter um processador top(como o FX57 ou FX60) pois a grande maioria das placas de vídeo serão um gargalo em comparação ao processador.
Para os gamers, um dualcore ainda não é ideal, pois só agora estão surgindo patches e otimizações de performance dos drivers para tirar proveito dos multicores(e das placas de vídeo atuais). Se vc é um jogador inveterado e tem grana de sobra para gastar, go ahead; senão, espere.
Se vc é um programador que goste de novas tendências, vá em frente, mas saiba que a maioria
dos programas ainda não faz o correto uso do multiprocessamento e eu(na minha modesta opnião) esperaria até o lançamento dos AM2 para tomar uma decisão, pois os preços dos 939 cairão muito, e se vc não quiser ficar com algo defasado(e com preço depreciado), parta direto para esse novo soquete.
Me preocupa a adesão em massa aos multicores e aos 64 bits, sem a correta adaptação das softwarehouses a eles. Apesar do inegável ganho de performance quando se abre vários programas ao mesmo tempo num dualcore, o aproveitamento ainda é longe do ideal do que deveria ser.
Fora uma degradação de performance quando a memória é insuficiente(esperado em qualquer micro), e o preço ainda longe do ideal das memos DDR2, não anima muito o mercado. A conclusão que posso lhes oferecer é que se o ambiente importante é o multitarefa, o mundo multicore já lhes serve.Se o importante for o multiprocessamento, melhor esperar um pouco mais...

Wednesday, February 15, 2006

Um pouco de Haskell[REPOST]

A pedidos de um amigo, taí:

Haskell é uma linguagem funcional, toda escrita baseada em funções.Conta com uma biblioteca padrão,chamada Prelude, que contém algumas funções básicas como raiz quadrada(sqrt), e funções para manipulações de listas.

Exemplo de sintaxe de uma função:

média aritimética entre dois nums:

media::Float->Float->Float

media x y = (x+y)/2.0

onde media é o nome da função(em minúscula),os 2 primeiros Float são as 2 entradas,e o último Float é a saída(resultado).

Para sua execução o exemplo deve ser salvo por um Editor de Textos com a extensão .HS e ser executado pelo interpretador hugs,q pode ser baixado em haskell.org . Exemplo de execução via prompt:

media 8.0 e 9.0 --retornará 8.5

Para saber mais:

http://cs.wwc.edu/~cs_dept/KU/PR/Haskell.html

http://www.marcosrodrigues6.hpg.ig.com.br/cap2.htm


E aqui vai um Script com algumas funções(salvar como testes.hs , por exemplo):

--Teste de funções em Haskell-16/12/2004-Por Ironlynx(c)
--cubo de um número
cubo::Int->Int
cubo c= c*c*c

--cubo de n nums-outra forma
saidacubo=[3^n|n<-[0..15]]

--exemplo de tabuada
tabuada=[5*n|n<-[1..9]] --tabuada de 5

--exponencial
exponencial::Int->Int->Int
exponencial b e
| e==0=1
| e==1=b
| otherwise =b*exponencial b (e-1)

--fatorial
fat::Int->Int
fat n
| n==0=1
| otherwise =n*fat(n-1)
--a função product substitui o uso de fatorial exemplo:
produto::Int
produto=product[1..10]

--Sequencia de Fibonnacci-inicia em 0 e 1 e cada num q se segue é a soma
--dos 2 anteriores
fibo::Int->Int
fibo n
| n==0=0
| n==1=1
| otherwise =fibo(n-1)+fibo(n-2)--melhor usar n>1pois negativos darão erro!

--diagonal de um paralelepípedo de lados a,b e c
diagonal::Float->Float->Float->Float
diagonal a b c =sqrt(a*a+b*b+c*c)

--Equação do 2º(ax^2+bx-c=0)--
equacao::Float->Float->Float->[Float] --produz um resultado do tipo lista
equacao a b c=[bmais a b c,bmenos a b c]
bmais::Float->Float->Float->Float
bmais a b c = (-b + sqrt(delta a b c))/(2*a)
bmenos::Float->Float->Float->Float
bmenos a b c = (-b + sqrt(delta a b c))/(2*a)
delta::Float->Float->Float->Float
delta a b c = (b^2)-(4*a*c)

--escrever numeros de 1 a 10-usando uma lista
numers::[Int]
numers=[1..10]

--imprimir os numeros entre 2 valores dados(inferior e superior) de acordo
--com o passo escolhido pelo usuário-por exemplo: valores 2 20 4
--exibirá a lista [2,6,10,14,18]
valores::Int->Int->Int->[Int]
valores inf sup passo=[inf,(inf+passo)..sup]

--implementando funções mod(retorna o resto) e div(retorna o quociente)
--já existem no prelude---->é apenas um exercício
funcaomod::Int->Int->Int
funcaomod x y
| (x-y)>=y=funcaomod (x-y) y
| (x==y)=0
| (x>y)=x-y

--funcaodiv::Int->Int->Int
--funcaodiv x y = (x - funcaomod x y )/y

--Compreendendo listas,estrutura de uma lista:
--[corpo|geradores,filtros] onde:
--corpo:são os elementos componentes da lista
--geradores:fornece os candidatos a lista de saída
--filtros: qualificam os elementos q farão parte da lista de saída
--Exemplos:

--ler 100 numeros inteiros e imprimir quais são pares e quais são ímpares
pares=[n|n<-[1..100],n`mod`2==0]
impares=[i|i<-[1..100],i`mod`2==1]

--múltiplos de 4 entre 1 e 100
multiplos=[n|n<-[4..100],n`mod`4==0]

--Receber uma Frase(por ex. "hoje e sabado") e exibir
--essa frase invertida("sabado e hoje"):
frase::String->String
frase f=unwords(reverse(words f))

--explicação sobre algumas funções:
--words transforma String em uma Lista
--unwords transforma lista em String
--reverse inverte uma lista
--concat concatena 2 listas
--map transforma todos os elementos de uma lista Ex.:
--map (^2) [2,3] mostrará [4,9]

--Banco de Dados(na verdade tuplas) em Haskell-parece Struct de C-
--tipos Tuplas são sempre maíusculas--
--exemplo simples usando uma sextupla de videolocadora representando as
--aquisições de filmes
type Usuario = String
type Filme = String
type Diretor = String
type Genero = String
type Sexo = Char
type Dia = Int
type Mes = Int
type Ano = Int
type DataAluguel = (Dia,Mes,Ano)
type Aquisicao = (Usuario,Sexo,Filme,Diretor,Genero,DataAluguel)
type BancoDeDados = [Aquisicao]

banco::BancoDeDados
banco=[("Ana Paula",'f',"ET","Steven Spielberg","drama",(12,12,2004)),
("José Leonardo",'m',"Monella","Tinto Brass","comedia",(10,12,2004))]

usuarioDaFita::Aquisicao->Usuario
usuarioDaFita(nomeDoUsuario,sexo,filme,diretor,genero,dataAluguel)=nomeDoUsuario

diretorFita::Aquisicao->Diretor
diretorFita(nomeDoUsuario,sexo,filme,diretor,genero,dataAluguel)=diretor

nomeVideo::Aquisicao->Filme
nomeVideo(nomeDoUsuario,sexo,filme,diretor,genero,dataAluguel)=filme

generoVideo::Aquisicao->Genero
generoVideo(nomeDoUsuario,sexo,filme,diretor,genero,dataAluguel)=genero

--exemplo de relação que retorna o filme alugado pelo usuario:
aluguel::BancoDeDados->Usuario->[Filme]
aluguel banco usuario = [nomeVideo n|n<-banco,usuarioDaFita n==usuario]

--repare que os tipos tuplas podem ser compostos(como a Data)

--boa prova plawng!!!



>>>Originalmente postado em DEZ de 2004.

Pequenas Notáveis[REPOST]

O alvorescer da Internet, trouxe inúmeras mudanças no comércio,mas uma que está ficando marcante é as "insurgentes virtuais",que são lojas que só existem na web.Sim,lojas que nunca existiram,nem possuem a pretensão de existir além do mundo virtual.
Isso está ocorrendo principalmente devido ao alto custo de manter uma loja "física" com muitos empregados,custos fixos altos(aluguel do ponto, luz, água, impostos, segurança, os próprios empregados e seus encargos sociais...), além de outras despesas inerentes a qualquer comércio.
Na web, esses custos são drasticamente reduzidos, pois o maior custo, em geral, será o de desenvolvimento da loja virtual Claro, depois há a necessidade de pagar hospedagem, manutenção, ter um apoio logístico para a distribuição dos produtos, marketing(-Não façam Spam!!!), bons fornecedores.. e por aí vai!
Mesmo com uma série de fatores que devem ser atentamente observados e seguidos ao pé da letra, em geral,os custos de uma pequena loja virtual podem ser bem menores que uma loja real.Já existem soluções prontas inclusive,com pacotes fechados de hospedagem+ divulgação+ notificação de pedidos+domínio na casa das 500 pratas mensais(ou até menos!), dependendo a quantidade de produtos e page views que a loja terá.
Mas é bom salientar que esse mercado não é para todos,pois envolvem riscos(-o que não envolve?), e um certo(-ou seria grande?) esforço, principalmente quanto o é o dono da loja que fecha as compras e contata fornecedores/distribuidores, mas em geral, alguns poucos empregados podem vir a ser necessários, principalmente quando há um teleatendimento para fechar as compras(muitas fecham por confirmação via email-menos seguro!).
Também se faz necessário definir o que a loja venderá(qual será o foco),pois alguns produtos tem grande aceitação(livros, cds, dvds, componentes de hardware), e outros, ainda sofrem da desconfiança do usuário como vestuário feminino pois a maioria das mulheres ainda prefere ir a uma loja onde possam experimentar o produto, algo ainda improvável via web...
Não se deve esquecer o item mais discutido de um comércio via web,que ainda é a segurança da transação que o usuário irá efetuar, pois cartões de crédito são facilmente clonáveis,o que leva a loja a possuir várias opções de pagamento como boletos bancários e depósitos em conta corrente.
O lojista deve atentar também para os prazos de entrega que é capaz de cumprir e se possível, contratar uma terceirizada para cuidar da logística e entrega de produtos,claro que essa solução já é para uma loja de bom porte, mas não se deve subestimar o crescimento de uma loja online, basta ser competitiva e cumprir prazos que muitos clientes virão.

>>>Originalmente postado em NOV de 2004.

Fim dos Tempos[REPOST]

É inconcebível que nos dias atuais ainda seguimos vínculos religiosos para se tomarem decisões de cunho off-culto. A religião deve ficar aonde jamais deveria ter saído:os templos,e os corações de seus seguidores.
Nunca é tarde para lembrar que muitas das maiores atrocidades da humanidade,foram cometidas "em nome de Deus", e atos ignorantes como a Santa Inquisição, o incêndio da biblioteca de Alexandria, a reparação de Galileu, entre outros cuja extensa lista não convém citar, pois faltaria espaço no hd do servidor...
A eleição dos EUA, mostra o quão frágil e ignorante é o ser humano, não importa cor, sexo ou condição social.Religião,ao contrário do que muitos pensam, não é apenas fé.É dogma+fé.O problema,nunca é a fé. É o dogma.
Um Ateu pode ter fé?Pode. dogma não.-Mas como???a palavra Fé, do hebraico "emuná", entre diversos outros significados é dado pelos Hebreus: "é a certeza de coisas que se esperam, a convicção de fatos que não se vêem."
Ou seja, ela é intangível, não atingível pela racionalidade, pois não é passível de ser mensurada. Um corredor olímpico bem treinado, um grande cientista, um grande músico, podem ter fé sem dogma.Como?Crendo em si próprios, que deveria ser o primordial do ser humano.
Um grande pesquisador quando está no ápice de seu potencial de pesquisa, muitas vezes,fala para os demais:"olha,o resultado será obtido,descobriremos a cura." Ele ainda nem sabe qual será o resultado, nem analisou o conjunto de resultados possiveis,mas ele acredita no que pode fazer,mesmo tentando usar uma base racional para isso. Se você não é capaz de definí-la(ainda), foge a razão,e no campo do intangível, é fé. Até o mais Ateu dos cientistas, um dia teve que acreditar em algo(pode ser sua própria teoria-ou teimosia), sem antes ser capaz de definí-lo. Nunca é demais lembrar que: Fato é uma verdade absoluta, real,existente, inequívoca, incontestável, declarada. A razão trabalha com isso(fatos).
Dogma,é a definição e a explicitação da (suposta) verdade, condicionada a uma fórmula perfeita. pode ser considerado nas palavras de um profeta(como maomé para os muçulmanos), a verdade revelada por Deus e confirmada pela igreja(catolicismo), ou outras tantas dependendo do credo. A negação do dogma de qualquer religião constitui uma ofensa(ou heresia), por depor contra os pilares aos quais essa religião se sustenta. Como não existe uma única religião, e indubitavelmente o que é a verdade(dogma) para uma, não é para a outra, podemos concluir que TODOS NÓS SOMOS HEREGES(Ateus,Agnósticos e Religiosos), depende apenas do olhar de quem nos observa.
Voltando aos EUA, a política no mundo, há muito vem sendo manipulada, pelo lado da ocasião,que hoje em dia, é o terrorismo no mundo.Bin Laden e seus seguidores nada são que não uma representação atual da igreja católica do século de 16,que era sedenta por sangue daqueles que violavam seus dogmas(ou interesses),e praticava barbáries igualmente inconcebíveis para aqueles que se dizem "seguidores" ou "enviados" por Deus.
A sociedade americana está balançada, e no desespero,tenta se apegar em algo que não se pode ver,que supostamente é maior que qualquer ser.Afinal,se Deus é justo, ele vencerá os implacáveis que atormentam os pilares na hipócrita sociedade americana.Ora,convenhamos,Deus é para todos certo?Cristãos tem Deus,Muçulmanos tem Deus. Se a força da fé de um católico for igual a de um muçulmano,tão fodidos. A maior religião do mundo(com 1,6bilhão de adeptos) é a muçulmana. e a justiça é igual para todos, ela atenderá a maioria, e a maioria...
...a Maioria o quê?É terrorista?Sanguinária???Claro que não...os extremistas são uma minoria,mas uma minoria que perturba,e muito!
Para existirem extremistas(em qualquer credo), em algum ponto, esse credo que os alimenta falhou, pois não deu limites a sua interpretação do dogma, e esta interpretação, serviu de alicerce para todo um conjunto de loucuras que alguns chamam de "verdadeira interpretação" disto ou daquilo. Não importa. É a insanidade com embasamento na crença.
Hoje, é possível termos maletas atômicas de apenas 10-12Kg, com a potência próxima da bomba de hiroshima. A bomba no japão tinha quase 1tonelada de massa, mas hoje, com a miniaturização,e melhor técnica de produção, pode-se produzir um estrago igual(ou muito maior devido a alta densidade populacional de alguns locais), sendo muito mais difícil de serem encontradas do que as duas bombas voadoras de centenas de toneladas que atingiram as duas torres. Mesmo com toda a radiação dissipada no transporte.
O voto em Bush não foi feito com consciência, mas sim com medo, e esperança de que o "intangível" e a "verdade" vencerão a maldade dos detratores do "Sonho Americano". Torço que nenhuma das maletas atômicas desaparecidas dos depositos russos caiam em mãos erradas, e não custa nada lembrar, muitos dos militares russos que tomam conta das ogivas ainda existentes,ganham 150 dólares ao mês, e a cobiça...bem, sabe como é né?É inerente do ser humano...
Espero que o povo de tantos nobéis,da eletricidade,de Watson, Sagan, Wrigth, Einstein(naturalizado), Welles entre tantos outros, passe a utilizar o conhecimento já disponibilizado por esses tantos na nação mais rica do planeta, pois onde a fé termina, começa o conhecimento(e vice-versa).Não devemos misturar as coisas.


Respondendo aqueles que bateram no Daniel:Moral comum não existe, só na teoria, pois moral é dependente de interpretação dogmática,e o que serve para uns,não servirá para outros. Não cabe ao Estado definir o que é a moral, mas sim o que é o bem comum,pois este é para todos.Um político não pode ser eleito porque é ateu, cristão, muçulmano, bissexual, punk ou seja lá o que for. Deve ser eleito por que é capaz de dar chances iguais á todos. Afinal, não é os Estados Unidos o país(autoproclamado) das oportunidades? Deixo aqui essa questão.

>>>Originalmente postado em NOV de 2004.

Você sabe o que é um cache?[REPOST]

Cache é uma memória extremamente rápida que armazena dados e instruções que o processador utiliza, permitindo um acesso mais rápido as mesmas. O cache passou a ser utilizado quando os processadores efetivamente se tornaram mais rápidos do que a memória RAM(o que aconteceu a partir do 386). Geralmente, quanto maior a quantidade, ou quanto maior a velocidade, maior será a eficiência do cache. O cache é dividido em níveis(L1,L2,L3), operando na mesma frequência do processador.(Obs.:no início de seu uso, o cache L2 fazia parte da placa mãe, ficando limitado obviamente a frequência da mesma-á época, entre 66 e 100MHz-o que o tornava muito mais lento do que o L1, que funcionava na frequência do processador). O cache L3 usado nos micros atuais também faz parte do processador(como o Pentium 4 Xeon da Intel), mas quando começou a ser implantado(no k6-3) era parte da placa-mãe, logo bem lento.

Quando o processador não encontra o dado que necessita no cache(cache hit), haverá um cache miss, pois como o dado não está disponível para ele,ele terá que acessar a memória RAM para encontrá-lo. Nos processadores atuais, a chance de sucesso(cache hit) na obtenção do dado é muito grande(quase 99% de êxito). Em alguns processadores, o cache é exclusivo, ou seja, os dados disponíveis nos caches L1 e L2 são diferentes (como o Athlon da AMD), enquanto em outros é inclusivo(como no Pentium 3)em que o cache L1 contém uma cópia do cache L2. Isso é uma vantagem da AMD pois mais dados poderão ser armazenados.

Mas como ele trabalha em si?É fácil:Imagine uma farmácia.Você,que é o cliente, fará o papel do processador solicitando dados ao cache, chegando na bela atendente parecida com a Daniela Cicarelli(que farmácia é essa?Quando???onde???huhauah...) para solicitar dados (ops!produtos!)... continuando, ao se dirigir a atendente,você solicita um remédio. A nossa opulenta atendente, que é muito esperta, tem no balcão em que está localizada, os 10 produtos que mais são solicitados (como aspirina, camisinha, pastilhas valda...),atendendo a maioria dos pedidos muito rápido,só com um levantar de mãos do balcão. Esse balcão a qual está localizada,é o nosso cache L1, mais perto do núcleo do processador, portando entregando produtos(os nossos "dados"),mais rápido. Infelizmente,o produto que você precisa(um antiácido para aliviar a azia do hamburguer "verde" comido no podrão da esquina), não está nesse balcão,sendo necessário a nossa bela atendente ir até uma segunda bancada maior, com uns 100 produtos que saem muito. Essa segunda bancada, é o nosso cache L2.Como você é muito azarado, ela vai ter que ir até uma terceira e distante estante(que é o nosso cache L3!) com 1000 remédios, para pegar esse maldito antiácido. Repare que ela vai demorando um tempo maior a medida em que vai descendo de nível(procurando) os produtos no "cache". A essa demora em buscar o "dado", chamamos de latência (geralmente medida em ciclos de processador), sendo obviamente maior no cache mais distante do nosso núcleo (a nossa estante representando o cache L3). Como você é muuuito azarado, ela teve que ir além, tendo que ir ao depósito de todos os remédios(que nesse caso,representa a nossa RAM, onde o programa inicialmente carrega os dados). Lamentavelmente ela demorou demais a trazer o remédio e você "vazou" da farmácia após ter vomitado no balcão...(que papelão hein???)

O cache se tornou indispensável nos processadores,sendo usados inclusive em um dos maiores gargalos da computação atual que é o disco rígido(por ser um dispositivo muito mais lento do que a RAM ou o processador). Ele evita que a cabeça de leitura do disco tenha que passar várias vezes na mesma trilha,pois ela lê os setores próximos(mesmo não sendo solicitados). Quando o sistema solicitar o próximo setor, este já estará carregado em cache e será acessado em tempo recorde. Já existem hds com até 16MB de cache.

Para saber mais:
http://www.guiadohardware.net/livros/dicionario/c/index.php
http://computer.howstuffworks.com/cache1.htm

>>>originalmente postado em JUL de 2004.

Monday, February 13, 2006

Testando

Com a morte do Jablo, esta se torna a nossa nova casa...