quarta-feira, 23 de setembro de 2009

A árvore genealógica das linguagens de programação

Uma linguagem de programação é um conjunto de palavras capaz de expressar instruções para um computador. É um conjunto de regras padronizadas usadas para construir um programa de computador. Uma determinada combinação das palavras da linguagem, formando uma seqüência lógica de eventos, constitui o código fonte de um software. Esse código fonte, armazenado em um aquivo texto, é depois traduzido para código de máquina, que é executado pelo computador.

A intenção das linguagens de programação é tornar mais fácil a criação de softwares pelo programador, pois é uma linguagem próxima à linguagem humana, ao contrário da linguagem de máquina que utiliza códigos semelhantes às instruções do hardware.

Nos anos 50 foi o início das linguagens modernas de programação. As três primeiras linguagens de programação modernas, as quais suas descendentes ainda são utilizadas são FORTRAN (FORmula TRANslator), LISP (LISt Processor) e COBOL (COmmon Business Oriented Language).

Do FORTRAN vieram linguagens como Basic, C, Pascal, estas vindas da linha da linguagem ALGOL. Muitas outras, a maioria, vieram a partir destas descendências. Para ter uma idéia, Perl, PHP, Java, vieram da linguagem C, e também tem VisualBasic e Delphi que vieram do Basic e Pascal respectivamente.

No site de Éric Lévénez existe uma página que contém uma apresentação gráfica muito interessante da linha do tempo das linguagens de programação com todas as descendências. Lá é possível conhecer a origem das diversas linguagens. Acesse esta página neste endereço: http://www.levenez.com/lang/

Outros sites possuem conteúdo semelhante, são acessados nos endereços abaixo:

http://www.digibarn.com/collections/posters/tongues/
http://oreilly.com/pub/a/oreilly/news/languageposter_0504.html
http://merd.sourceforge.net/pixel/language-study/diagram.html

segunda-feira, 21 de setembro de 2009

Problema de lógica: A cor dos vestidos das três senhoras

Atenção, a resposta está logo após o problema!

Três senhoras, dona Branca, dona Rosa e dona Violeta, passeavam pelo parque quando dona Rosa disse:
- Não é curioso que estejamos usando vestidos de cores branca, rosa e violeta, embora nenhuma de nós esteja usando um vestido de cor igual ao seu próprio nome?
- Uma simples coincidência. - respondeu a senhora com o vestido violeta.
Qual a cor do vestido de cada senhora?





RESPOSTA





Se a senhora com o vestido violeta respondeu a dona Rosa, então ela não é a própria dona Rosa. Além disso, como ela não tem o vestido da mesma cor de seu nome, ela também não é a dona Violeta. Logo, é a dona Branca que está com o vestido violeta. Dona Rosa não está usando o vestido rosa nem o violeta, portanto só pode estar usando o branco. Conseqüentemente, dona Violeta veste o vestido rosa.

sábado, 19 de setembro de 2009

Unidades de Medida do Computador

Toda informação introduzida em um computador precisa ser entendida pela máquina, para que possa corretamente interpretá-la e processá-la. O computador, sendo um equipamento eletrônico, armazena e movimenta as informações internamente sob forma eletrônica, em um valor de voltagem ou de corrente. Para uma maior simplicidade e confiabilidade na representação elétrica da informação, os valores de voltagem, ou de corrente, são gerados e manipulados pelos circuitos em apenas dois valores diferentes, 0 e 1.

Dessa forma, os computadores digitais são totalmente binários. Toda informação introduzida em um computador é convertida para a forma binária. Tornando inclusive mais simples o emprego da lógica booleana para o tratamento da informação.

Assim, a menor unidade de informação armazenável em um computador é o algarismo binário ou dígito binário, conhecido como bit (contração das palavras inglesas binary digit). O bit pode ter então somente dois valores, 0 e 1.

Mas para poder armazenar as informações da linguagem humana, o computador manipula os bits em grupos ordenados. Por definição, instituída pela IBM e atualmente utilizada por praticamente todos os fabricantes de computadores, um caractere da linguagem humana é armazenado em um grupo ordenado de oito bits. Com isso o byte, definido como um grupo ordenado de oito bits, é a menor unidade de armazenamento de informação útil em computadores para nossa linguagem.

Em Dezembro de 1998 a Comissão Eletrotécnica Internacional (IEC), líder em padronização mundial de eletrotecnologia, aprovou como um padrão internacional nomes e símbolos para os prefixos dos múltiplos binários usados no campo de processamento e transmissão de dados.

Prefixos binários são nomes ou sí­mbolos que precedem a unidade de medida, para indicar a sua multiplicação por potências de base dois, semelhante aos prefixos padronizados pelo Sistema Internacional de Unidades (SI), onde a multiplicação se dá por potências de base dez. Os nomes e símbolos dos prefixos binários e suas respectivas potências binárias são mostrados abaixo:

1 Kilobyte  (KB)                   = 2^10 Bytes = 1.024 Bytes
1 Megabyte (MB) = 1024 Kilobytes = 2^20 Bytes = 1.048.576 Bytes
1 Gigabyte (GB) = 1024 Megabytes = 2^30 Bytes = 1.073.741.824 Bytes
1 Terabyte (TB) = 1024 Gigabytes = 2^40 Bytes = 1.099.511.627.776 Bytes
1 Petabyte (PB) = 1024 Terabytes = 2^50 Bytes = 1.125.899.906.842.624 Bytes
1 Exabyte (EB) = 1024 Petabytes = 2^60 Bytes = 1.152.921.504.606.846.976 Bytes
1 Zettabyte (ZB) = 1024 Exabytes = 2^70 Bytes = 1.180.591.620.717.411.303.424 Bytes
1 Yottabyte (YB) = 1024 Zettabytes = 2^80 Bytes = 1.208.925.819.614.629.174.706.176 Bytes


Com o passar dos anos e com a acelerada evolução tecnológica dos computadores, torna-se mais comum entre nós o uso dos prefixos de potências maiores. O primeiro computador pessoal padrão IBM tinha apenas 640KB de memória RAM, hoje é comum computadores com 4 GB de RAM. Os primeiros discos rígidos para estes computadores tinham até 10 MB, hoje usamos discos rígidos de 500 GB. As primeiras mídias removíveis armazenavam 180 KB, hoje temos as mídias Blu-ray que armazenam até 93,2 GB.

Por enquanto estamos na era dos Terabytes e Petabytes, pois os maiores bancos de dados do planeta e os mais grandiosos cálculos matemáticos realizados em computadores manipulam quantidades de informações dentro destas faixas. Não se assuste se um dia começar a ver anúncios de câmeras digitais de 5 Exabytes!

sexta-feira, 18 de setembro de 2009

Medidas de Tendência Central

Uma forma útil de descrever um grupo como um todo consiste em encontrar um único número que represente o que é "médio" naquele conjunto particular de dados. Em estatística descritiva este valor é conhecido por medida de tendência central, pois geralmente se localiza em torno do centro de uma distribuição, onde a maior parte dos dados tende a concentrar-se.

A estatística descritiva é um ramo da estatística que aplica várias técnicas para descrever e sumariar um conjunto de dados. As medidas de tendência central mais conhecidas são a moda, a mediana, o ponto médio e a média.

A moda simplesmente é o dado que ocorre com maior freqüência no conjunto. A moda pode ser localizada com muito mais facilidade por exame do que por cálculo. Se os dados estão organizados em uma tabela de freqüências, a moda é o valor que possui a maior freqüência na tabela. Um conjunto pode não ter valores que se repetem, tornando uma distribuição amodal, ou pode ter duas ou mais modas tornando uma distribuição bimodal ou polimodal. Um conjunto com uma moda apenas é uma distribuição unimodal.

A mediana corresponde ao ponto central da distribuição e é localizada quando os dados estão dispostos em ordem. A mediana é considerada a medida de tendência central que corta a distribuição em duas partes iguais. Se for uma distribuição com número ímpar de dados, a mediana será o dado que fica exatamente no meio da distribuição. Sua posição é dada pela fórmula n+1/2. Se o número de dados for par haverá dois valores considerados centrais. Visto que a posição pela fórmula n+1/2 será um valor fracionado, a mediana vai cair entre os dois valores centrais, então a mediana será a média aritmética destes dois valores. Se os dados estão apresentados em uma tabela de freqüências basta construir uma distribuição de freqüências acumuladas e a mediana será o dado em que o valor acumulado contém a posição da mediana.

O ponto médio é o valor que está a meio caminho entre o menor e o maior valor do conjunto de dados. Para calcular soma-se esses valores extremos e divide-se o resultado por dois.

A média é o valor que aponta para onde mais se concentram os dados de uma distribuição. Pode ser considerada o ponto de equilíbrio das freqüências, num histograma. É a medida de tendência central mais comumente usada. Existem diversos tipos de média, cada uma adequada para uma determinada característica do conjunto de dados. Para suas fórmulas existem duas versões, uma para dados agrupados em uma tabela de freqüências, ou ponderada pelos pesos dos dados, e outra para dados não agrupados.

A média aritmética é a média mais simples, é o somatório dos dados de um conjunto dividido pelo número de dados deste conjunto.

Média aritmética:

Média aritmética ponderada:

A média geométrica é indicada para um conjunto onde os dados fazem uma progressão geométrica. É a raiz n-ésima do produtório dos dados de um conjunto.

Média geométrica:

Média geométrica ponderada:

A média harmônica de um conjunto de dados é utilizada quando se quer valorizar o conjunto onde os dados são mais uniformes, ou mais equilibrados. É o número de dados do conjunto dividido pelo somatório dos inversos dos dados:

Média harmônica:

Média harmônica ponderada:

Caso especial da média harmônica para dois valores:

A média desarmônica é utilizada quando se quer valorizar o conjunto onde os dados possuem uma maior disparidade, ou maior oscilação. É definida como a média harmônica entre a média aritmética desse conjunto e o quadrado da média aritmética do conjunto dividido pela média harmônica do mesmo:

Média desarmônica:

Média desarmônica ponderada:

Caso especial da média desarmônica para dois valores:

A média quadrática é a raiz quadrada da média aritmética dos quadrados dos dados:

Média quadrática:

Média quadrática ponderada:

A média cúbica é a raiz cúbica da média aritmética dos cubos dos dados:

Média cúbica:

Média cúbica ponderada:

Em uma análise estatística a moda nos mostra o valor mais comum do conjunto de dados, porém não é necessariamente igual à média. A mediana nos mostra o equilíbrio da distribuição dos dados no conjunto, se próxima ao valor da média. E a média é limitada pela influência dos valores das extremidades, por isso em alguns casos é muito comum ignorar o maior e o menor valor de um conjunto para se calcular a média.

A maioria dos autores adotam como símbolo da média populacional a letra grega μ (Mu) e o símbolo da média amostral a letra grega χ (Qui).

terça-feira, 15 de setembro de 2009

A proporção do nosso Sistema Solar

Um modelo do nosso Sistema Solar mantendo a mesma proporção, em dimensão reduzida, e adotando o diâmetro do Sol sendo igual a 1 metro, tem a escala de 1:1.391.900.000. A tabela abaixo mostra os diâmetros e órbitas dos principais astros do nosso Sistema Solar em escala reduzida, proporcionalmente ao modelo do Sol com 1 metro de diâmetro:

            Diâmetro (milímetros)   Raio da Órbita (metros)
Mercúrio 3,4 41,633
Vênus 8,6 77,67
Terra 9,1 107,457
Lua 2,4 0,276
Marte 4,8 163,689
Júpiter 100,2 559,048
Saturno 83,6 1.025,217
Urano 33,7 2.062,145
Netuno 32,6 3.232,919
Plutão 1,6 4.248,15


Nesta escala a velocidade da luz seria 215,3 milímetros por segundo, percorrendo em um ano 6.796,8 quilômetros, e o centro da nossa galáxia estaria a 188.340.398 quilômetros de distância.

segunda-feira, 14 de setembro de 2009

Configurando Serviços no Linux

Os serviços são programas (daemons) que são iniciados e mantidos em execução em segundo plano, ficam monitorando o computador e respondem às mudanças. Por exemplo o servidor Apache possui um daemon chamado httpd (o d é de daemon) que fica escutando a porta 80 do computador e quando ele recebe uma requisição por uma página, ele envia os dados apropriados para a máquina cliente.

Muitos serviços ficam em execução na maioria do tempo entretanto muitos podem ser seguramente desligados por razões de segurança como também por razões de desempenho. Pode não ser muita a diferença mas o computador é iniciado um pouco mais rápido quando há menos serviços para iniciar.

Existem dois comandos que são usados para controlar os serviços:

/sbin/chkconfig - Este controla quais serviços serão iniciados durante a inicialização da máquina. As mudanças aplicadas por este programa não alterará o estado do serviço imediatamente, apenas deixará marcada a configuração para a próxima inicialização da máquina.

/sbin/service - Este controla o início ou o fim da execução dos serviços imediatamente durante a seção atual, não mantendo para a próxima inicialização da máquina.

Antes vamos conhecer como o sistema Linux organiza o controle dos serviços. Muitas variantes do Unix System V, e isto inclui diversas distribuições do Linux, usam scripts nos diretórios "/etc/rcN.d/" para controlar quais serviços serão iniciados dentre os níveis de execução. Se um serviço deve ser iniciado no nível de execução 5 então é colocado o seu script em "/etc/rc5.d/".

Entretanto este modelo envolve em existir múltiplas cópias do mesmo script em diretórios diferentes, então foi adotado o padrão de colocar todos os scripts de controle dos serviços no diretório "/etc/init.d/", e usar ligações simbólicas para estes scripts nos vários diretórios "/etc/rcN.d/". Isto permitiu a inovação com o comando "chkconfig".

Na distribuição Fedora Linux as ligações e os scripts estão nos diretórios "/etc/rc.d/rcN.d/" e "/etc/rc.d/init.d/", porém é mantido no diretório "/etc/" as ligações simbólicas para estes diretórios, imitando a origem vinda do Unix System V.

Para o comando "chkconfig" poder operar adequadamente, os arquivos dos scripts de controle devem ter seus nomes refletindo o nome do serviço o qual eles controlam. E no inicio de cada script deve existir um cabeçalho com algumas linhas que fazem com que o "chkconfig" entenda que pode controlar a execução.

A principal linha deste cabeçalho é a que especifica os níveis de execução e a ordem de execução dos scripts. Esta linha é semelhante a mostrada abaixo:

# chkconfig: 2345 55 25

O primeiro conjunto de números "2345" indica os níveis no qual o script será executado e "55" e "25" representam a ordem em que o script será executado e parado no nível de execução.

Para adicionar um script e ativar o controle do serviço pelo gerenciamento do "chkconfig" primeiro é preciso colocar o script no diretório "/etc/rc.d/init.d/" e então executar no prompt do terminal o comando "chkconfig --add nome_do_serviço". A partir deste ponto basta executar o comando "chkconfig nome_do_serviço on" para que a devida ligação simbólica seja criada nos diretórios "/etc/rc.d/rcN.d/" especificados no cabeçalho do script. Com a execução do comando "chkconfig nome_do_serviço off" estas ligações são removidas. Do mesmo modo, pode-se remover o controle do serviço pelo gerenciamento do "chkconfig" executando o comando "chkconfig --del nome_do_serviço".

Estas ligações simbólicas existentes dos diretórios "/etc/rc.d/rcN.d/" seguem um padrão em seus nomes. Os nomes iniciam com os caracteres "S" ou "K" (de Start e Kill) seguido do número da ordem de execução (aqueles do cabeçalho), semelhante a algo como por exemplo "S85httpd" ou "K30proftpd".

O comando "chkconfig --list" retorna uma listagem de todos os serviços disponíveis junto com suas respectivas configurações para a inicialização da máquina. Um retorno mais específico pode ser obtido com o comando "chkconfig --list nome_do_serviço". E é possível alterar os níveis definidos no cabeçalho diretamente na linha do comando, por exemplo se no cabeçalho do script estão definidos os níveis 2345 e a linha de comando for "chkconfig --level 35 nome_do_serviço on", somente será criada as ligações simbólicas nos diretórios "/etc/rc.d/rc3.d/" e "/etc/rc.d/rc5.d/".

Estes scripts usualmente atendem aos argumentos "start", "stop", "status" e "restart", do mesmo modo os comandos que controlam os serviços. A execução imediata do serviço pode ser feita com a chamada do próprio script pela linha de comando, em algo como "/etc/rc.d/init.d/nome_do_serviço start". Ou também utilizando o comando "service" em algo como "service nome_do_serviço start". Lembrando que estas formas só funcionam para a seção atual, não mantendo para a próxima inicialização da máquina. O argumento "stop" para o serviço, o argumento "status" mostra a situação atual do serviço e o argumento "restart" reinicia o serviço. O comando "service" pode ir mais além, executando o comando "service --status-all" ele retorna o estado de todos os serviços instalados no sistema.

Uma alternativa para o comando "chkconfig" é o utilitário "ntsysv", que é uma simples interface para configurar os serviços nos níveis de execução. Por padrão ele configura somente no nível de execução atual e para configurar também para algum outro nível é necessário executá-lo com o argumento "--level NNN", por exemplo "ntsysv --level 35" edita os níveis 3 e 5.

Estes comandos são o padrão na distribuição Fedora. As outras distros poderão ter comandos ligeiramente diferentes.

quinta-feira, 10 de setembro de 2009

Controlador de luz através da porta paralela

Há alguns anos saiu nas bancas uma coleção portuguesa chamada Electrónica PC. Eu comprei os números que vieram até a revista sair de linha. Era uma coleção que ensinava hardware, eletrônica digital e vinha com um projeto para montagem. No segundo fascículo veio o "Controlador luminoso através de Centronics".

É um equipamento que faz com que o computador controle oito saídas de energia da rede elétrica, comunicando pela porta paralela. Pode-se programar um software para operar o equipamento usando qualquer linguagem, em qualquer sistema operacional.

Anexado à este fascículo estava esta placa de circuito:





Bastou então adquirir os componentes necessários, que são estes:

8 resistores de 470 ohms.
8 resistores de 1200 ohms.
8 circuitos integrados MOC3011 ou MCP3011.
8 circuitos integrados TIC 226D ou BT 137.
8 terminais de ligação por parafuso para circuito impresso.
1 conector DB-25 macho dobrada para circuito impresso.
1 cabo de 25 condutores.
2 conectores DB-25 para cabo, macho e fêmea.
1 caixa plástica.
8 tomadas fêmea de 220 V.
cabo de ligação à rede, encaixes para CI etc.

Veja as fotos do equipamento montado:





Segundo a revista este equipamento agüenta até 800W por canal, mas os cabos que usei não tem bitola suficiente, então ligo somente lâmpadas de baixa potência.

Com um equipamento desse pode-se automatizar uma residência, ligando e desligando lâmpadas em horários pré-programados, também como televisão, rádio etc. Inclusive pode-se acessar remotamente o computador para modificar o estado das saídas. Pela internet é comum encontrar referências à equipamentos deste tipo como controlador de cafeteira.