quarta-feira, 26 de novembro de 2008

Criando problemas - Crônica

Época de ecologia. Todo mundo com um bichinho de estimação ou uma criação no fundo de casa. Bichinhos de estimação são prejuízo enquanto criações são fontes de renda. Na decisão despesa /lucro eu fiquei com o lucro. Decidi começar a criar alguma coisa. Sempre gostei de criações. Fiz um cercadinho, coloquei no fundo de casa e me peguei a pensar: O que criar? Não tenho experiência com criações mas estava disposto a estudar. Resolvi criar problemas.

Encontrei na Internet a ABCP (Associação Brasileira de Criadores de Problemas). No site, por sinal muito bem documentado, encontrei várias instruções sobre como criar problemas, como alimentar problemas, a época de reprodução e tudo o mais. Descobri que criar problemas pode se tornar um negócio rentável e permite carreira em várias áreas profissionais. Nada mal. Só restava aprender como criar problemas corretamente.

Uma das maneiras de criar problemas é alimentá-los com dúvidas. Para não comprar dúvida dos outros e evitar as dúvidas sintéticas da praça, resolvi plantar minhas próprias dúvidas. Empurrei a gaiola de problemas para o lado e sobrou espaço para um canteirinho. Lá vamos nós para o site da ABPD (Associação Brasileira de Plantadores de Dúvidas). Novamente muita informação. Como plantar dúvidas, como cultivá-las, técnicas especiais de polinização e adubação de dúvidas. Você sabia, por exemplo, que para plantar dúvida vc precisa semear discórdia? Sim, o pé de dúvida é híbrido e nasce com uma semente da discórdia.

Afofei a terra, preparei o canteiro e comecei a platar dúvidas. No site encontrei mais instruções. Para o correto platio de dúvidas deve-se espalhar no canteiro algumas polêmicas. A quantidade correta de polêmicas dariam dúvidas vistosas e saudáveis.

No mesmo site havia instruções de como preparar polêmicas. A idéia de comprar polêmicas prontas estava fora do meu orçamento. Eu teria que prepará-las em casa mesmo. Em um canteiro de 40 dúvidas deve-se espalhar cerca de 2 litros de polêmicas por dia. Até então, nada mal. Um canteiro de 40 dúvidas é capaz de alimentar 4 problemas por cerca de 6 meses. Não é caro. 40 sementes de discórdia resolviam meu investimento inicial. Restava saber como preparar corretamente a polêmica para o cultivo correto da dúvida.

Para 2 litros de polêmica é necessário diluir em água fria cerca de 10 mentiras de tamanho médio. Faz se a conta de 1 mentira para cada 5 dúvidas e 10 dúvidas para cada problema. Conta simples. O problema é acertar a medida. Se vc não contar a mentira pode se enganar, a polêmica não fica convincente e a sua dúvida não flora como deveria. Além disto as mentiras se mexem um pouco e por isto as vezes vc se confunde e conta a mesma mentira mais de uma vez. Este é o ponto mais crítico de se criar problemas: lembrar das mentiras que se conta.

Outra coisa que ajuda é misturar junto com as polêmicas alguns boatos. Depois é só espalhar a mistura sobre o canteiro de dúvida. O preparo do boato é um pouco diferente. Em um quilo de boato vai 500 gramas de má fé, 200 gramas de inveja e 300 gramas de olho gordo. Felizmente, desde que descobri que criar problemas dava lucro eu tinha isto tudo em casa.

Mãos a massa! Me tornei um criador.

quarta-feira, 10 de setembro de 2008

10 razões por que usar Java

Sou analista e programador há cerca de 10 anos. Neste período trabalhei com várias linguagens, inclusive com Java. Este post é o conteúdo de uma palestra com o mesmo título, 10 razões porque usar Java. Não é meu intuito discutir linguagens de programação, compará-las ou persuadir o leitor a utilizar Java. Java não é a melhor linguagem de programação já inventada pois isto não existe. Há apenas razões pela qual utilizar uma linguagem de programação ou outra para resolver um determinado problema computacional.

Vamos as razões:

1 - Java é gratuíto
Java depende de uma JVM, que é gratuíta. O programador depende de um compilador e do JDK, que também é gratuíto. Programadores costumam utilizar IDEs, como o Delphi ou o o Netbeans. Para Java, apesar de haverem IDEs pagas, as duas maiores IDEs do mercado (Eclipse e NetBeans) também são gratuítas. Há vários frameworks e ferramentas para a implementação de sistemas em Java, e os mesmos também costumam ser gratuítos. A documentação é gratuíta. Servidores são gratuítos. Drivers de Banco de Dados são gratuítos.

2 - Java é padronizada
A orientação a objetos do Java ajuda a diminuir a barreira entre um diagrama UML e o código Java e permite, inclusive, a geração de códigos a partir do modelo UML. Sei que muitos programadores estão acostumados a trabalhar com programas de 20.000 linhas de código. Há linguagens que não permitem a modularização. Só é muito complicado desenvolver em equipes quando temos apenas um código-fonte de 20.000 linhas. A orientação a objetos começa a ser justificada quando temos equipes de desenvolvimento. A integração com ferramentas UML permitem também manter a documentação do sistema atualizada em relação a implementação.
O mesmo em relação a própria organização do código. Os pacotes Java são diretórios e uma classe estará escrita em um arquivo com o mesmo nome. Isto facilita trabalhar em equipes e desenvolver sistemas maiores. Além de obrigar a trabalhar com Orientação a Objetos, Java possui padrões de código que são como convenções: Classes em maiúsculo, métodos e atributos em minúsculo e uma letra maiúscula substitui um espaço em branco. Assim, se uma classe tem um atributo nome o acesso a este atributo normalmente é feito pelo método getNome().

3 - Java é interoperável
A empresa utiliza Windows mas pretende migrar para Linux. O Sistema era desktop mas será migrado para a web. A equipe de vendas irá utilizar Palmtops. O que fazer? Java. Java é interoperável, ou seja, funcionar em várias arquiteturas distintas, sistemas operacionais distintos e trabalha com paradigmas de programação distintos como desktop e web. Na web Java pode ser utilizado no servidor (JSP e Servlets) ou no cliente (Applets). Apesar de haver diferenças para a implementação (J2EE, J2SE e J2ME), a linguagem é a mesma e o conceito é o mesmo.
Indo além, Java permite também uma facilidade para internacionalização com a utilização nativa de arquivos Properties e definição automática de valores financeiros, numéricos, de data e texto. Além disto, a utilização de Unicode pode garantir a visualização de textos em vários alfabetos distintos.

4 - Java possui uma API satisfatória
A API Java traz implementada várias coisas como socket, criptografia, listas, filas, acesso a arquivos e compactadores. Também há uma API para Imagem 2D, Imagem 3D, música (MP3, Wav e Midi). É muito provável que um programador antigo em Java não conheça toda a API e nem é esta a questão. Como a API é padronizada basta ler a documentação e utilizar as classes que a linguagem já traz prontas. De toda a API Java, acho que minha paixão é a classe String. Sim, eu era programador C...
Não bastando isto, a API do Java é facilmente extensível por vários outros componentes e frameworks que complementam a API tornando o trabalho do analista muito mais simples.

5 - Java possui frameworks, padrões de projeto e Componentes
A engenharia de software vem propondo soluções para minimizar o trabalho do analista já há um tempo. Padrões de projetos, frameworks e componentes são exemplos destas propostas. Há vários exemplos de como implementar padrões de projetos em Java e vários padrões de projeto que foram propostos pensando nesta linguagem. Frameworks Java facilitam a implementação de sistemas complexos e componentes fazem com que o programador Java possa compartilhar seu conhecimento com toda a comunidade Java. Alguns exemplos:
  • Jakarta Struts
  • JasperReports
  • Hibernate
  • Jakarta Velocity
  • JSF
  • GWT
  • Jakarta POI
  • Log4J
  • JSTL
6 - Java é documentada
A documentação da linguagem, chamada Javadoc, está disponível gratuitamente. E possui um padrão de organização estruturada como documento HTML. Os desenvolvedores de frameworks e componentes costumam utilizar este padrão de documentação para documentar seus códigos. Isto facilita em muito tanto o trabalho em equipe quanto a reutilização de código de terceiros em outras implementações. Além disto, junto com o compilador Java vem um aplicativo para geração de JavaDoc do código que você acabou de implementar.

7 - Java permite sistemas distribuídos
Com a utilização de redes de computadores em empresas, sistemas distribuídos se tornam a cada dia mais realidade. Java permite a utilização de programação em redes possuindo implementações em sua API nativa para sockets, RMI, CORBA e Webservices. No caso especíifico de CORBA, junto com o compilador Java vem um aplicativo que gera a partir da IDL toda a estrutura de classes para uma aplicação CORBA.

8 - Java integra com Bancos de dados
Eu sei que várias linguagens conectam-se com bancos de dados, porém a interface JDBC faz com que a comunicação com bancos de dados em Java funcionem de maneira homogênea. Além disto, há atualmente implementações de drivers de banco de dados para Java para a maioria dos bancos comerciais. Inclusive ODBC. Inclusive Access. Inclusive bancos de dados feitos em Java e que não dependem de servidores. A API JDBC permite a migração de um sistema de um banco de dados para outro a partir da alteração de sua conexão. Isto facilita a passagem de uma aplicação do ambiente de desenvolvimento e testes para o ambiente de produção.

9 - Java é multi-thread
A multi-programação em Java é nativa. Toda a API Java baseia-se em comunicação por eventos e o controle de Threads em Java é simples de ser implementado e bastante eficiente. Toda classe Java possui métodos para implementação de semáforos e na API há especificações para implementar métodos que não permitam acesso concorrente.

10 - Java é moderna
A linguagem Java integra vários conceitos modernos, como por exemplo o Ant, Maven, XML, Orientação a Aspectos, Agentes móveis, Testes de Software e integração com repositórios. Java se tornou uma das linguagens mais utilizadas no mundo. Exemplos em livros são feitos em Java. Padrões de projetos são apresentados em Java. Componentes e exemplos de frameworks são feitos em Java. Devido as razões acima apresentadas, muitas empresas utilizam Java. O resultado disto é que há várias oportunidades de emprego nesta linguagem.

Para os que gostam de comparar linguagens de programação e tentam explicar qual a melhor linguagem de programação, fica a pergunta: Podemos dizer que o martelo é a melhor ferramenta de um marceneiro?

terça-feira, 9 de setembro de 2008

A minha menina - Nova versão do 64 Studio

"Ela é minha menina
E eu sou o menino dela"


Há algum tempo que distribuições de software, principalmente de Linux, possuem um número e também um nome. Desta vez, a versão 2.1 do 64 Studio foi lançada com o nome "A minha menina" em homenagem a canção do músico brasileiro Jorge Ben (Jor). Não, não é a tradução disto para o inglês, é exatamente isto: A minha menina.

O 64 Studio é uma distribuição de Linux voltada para áudio e Multimídia. Baseada no Debian 4.0 (também chamado "Etch") possui em suas configurações Kernel RT e várias aplicações para multimídia. O Debian é uma distribuição de Linux muito utilizada em servidores devido a sua estabilidade. Ao contrário de outras distro, o Debian costuma lançar novas versões apenas de 2 anos em 2 anos pois todos os pacotes de uma versão são auditados pela comunidade de desenvolvimento.


Com o objetivo de corrigir alguns erros e atualizar versõe de softwares, "A minha menina" veio substituir a versão "Eletric", também chamada de 2.0, lançada em Julho de 2007.

Como brasileiro, nada melhor do que saber que uma distribuição de Linux veio buscar em nossas terras a inspiração para seu nome. Agora, fica a dúvida de como ficaria a pronúncia de "A minha menina" pelos vários utilizadores desta distribuição em outros países.

A canção "A minha menina" do Jorge Ben (na época não tinha o Jor) foi regravada pelos Mutantes e também pela banda inglesa The Bees. Para ouvir a canção e ver a letra, clique aqui. A versão dos Mutantes também se encontra online neste endereço.
Fontes:

segunda-feira, 8 de setembro de 2008

Diminuindo Latência - Parte I - Memórias

Atualmente os processadores de computadores tem velocidades grandes. Porém há no mercado processadores com o mesmo clock e com preços diferentes e gente que jura que o mais caro é melhor. A justificativa é uma tal de L2 maior. Como hardware não é minha área, neste post tentarei explicar o que é este tal L2 e que diferença ele fará no desempenho final do computador.

Um conceito inicial: barramento

No computador, os componentes são conectados por meio de um barramento. No inglês, Bus. O barramento é o caminho que os dados utilizam para "passear" entre os diversos componentes de um computador. Como os dados do teclado vão parar no processador? Pelo barramento. Assim como é por meio do barramento que eles vão do processador para sua placa de vídeo. No computador há níveis distintos de barramentos. Uma analogia simples é comparar os barramentos às nossas estradas. Há barramentos com várias vias cuja velocidade máxima permitida é de 500Km/h e barramentos como estradas de terra aonde você corre o risco de encontrar uma vaca dormindo no meio do seu caminho. Continuando...



Entendendo o processador

Processador. Quando falam em processador eu penso em um processador de alimentos, como um multiprocessador da Arno. O processador é uma máquina que só sabe processar. Só faz isto. A velocidade de seu processador irá influenciar no quão rápido os alimentos serão "picados". Um processador dual core é como um liquidificador com 2 hélices. Em princípio irá processar muito mais rapidamente. Porém, o tamanho do copo do processador também influi na velocidade final do preparo de seu almoço.


O copo do liquidificador: Memória Cache L1

O processador posui uma memória interna que guarda o que ele está processando. É como o copo do liquidificador. Quanto maior o copo, mais ele processa de uma vez. É uma memória super rápida que cabe muito pouco. O copo do liquidificador é chamada L1. A memória cache L1 fica dentro do processador e o tempo de latência para o acesso a estes dados é de 2 ciclos do processador. O barramento de acesso do processador ao cache L1 é de 512 bits. É como uma estrada aonde a velocidade máxima permitida é de 512 Km/h. A cache L1 é dividida em 2 partes: dados e instruções. A parte de instruções varia muito de um processador para outro tendo, por exemplo, o Pentium 4 aproximadamente 150KB de instruções. Já a parte de dados, que também varia um pouco pode ter 8KB ou 16KB. O tamanho do copo do liquidificador? Vamos deixar por 166KB.

O balcão da pia: Memória Cache L2

Em computadores mais antigos, como o Processadores Soquete 7, a memória cache L2 ficava na placa mãe e não no processador. Mantendo nossa metáfora, é como se a memória cache L2 fosse o balcão da pia aonde o nosso processador de alimentos se encontra. Quando uma receita precisa de vários processamentos o nosso cozinheiro (no caso, o sistema operacional) vai até a despensa e traz um monte de coisa e coloca no balcão. Se o balcão for pequeno, ele trará poucas coisas e então nosso processador muito rápido ficará esperando que o cozinheiro traga novas coisas para serem processadas. A L2 é muito maior que a L1 porém o acesso a seus dados possui uma latência de 7 ciclos de máquina. A largura do barramento para o acesso a L2 pode ser algo na ordem de 256 bits. Lá estamos circulando por uma rodovia rápida, 256 Km/h, mas muito mais lenta que a L1. Há processadores que possuem L2 na ordem de 2MB.
A despensa: Memória RAM

A memória RAM é a despensa da cozinha. Muito maior que o balcão da pia L2. Externa ao processador ela costuma ser maior e normalmente pode até ser aumentada. O tamanho da memória RAM, em máquinas 32 bits, pode chegar a 3,2GB. Há um tempo de latência para buscar dados na despensa. O barramento de acesso do processador a memória é chamado de Front Side Bus. A largura média dele é de 64bits. Temos uma despensa grandona mas que precisa ser acessada por uma estradinha que a velocidade máxima é de 64Km/h. Como atualmente os periféricos podem acessar diretamente a memória (DMA), talvez você ainda encontre uma vaca dormindo nesta estrada. E lá se vão vários ciclos de máquina para trazer até o balcão da pia o que precisa ser cozinhado para o jantar. Memória também possui freqüência. Freqüência é a velocidade de acesso aos dados da memória. Maior freqüência, dados acessados mais rápidos.

O mercado do outro lado da cidade: HD

Heis que nem tudo está na memória. As vezes é necessário ir buscar em um mercado do outro lado da cidade. Na nossa história, o HD. Atualmente é comum encontrar discos rígidos de 200GB. Há modelos no mercado que ultrapassam 1TB. Muito grande. Mas longe. A via de acesso ao HD é o chamado Internal Bus. Aqui há uma diferença entre HDs IDE, IDE 2, SATA, SATA 2 ou SCUSCI. Cada um tem uma largura e uma velocidade de barramento diferente. Mas aqui não é apenas o barramento que importa, tem a velocidade do carrinho dentro do mercado. A velocidade de leitura e gravação de HDs varia. HDs de Notebook costumam girar a uma velocidade máxima de 5400 RPMs enquanto a maioria dos desktops gira em torno de 7200 RPMs. Há HDs SCUSCI que giram acima de 10.000 RPMs. A largura de barramento, ou seja, a estrada para o mercado, pode não importar tanto se o carrinho de compras andar devagar. Você vai demorar para encher o carrinho e não vai adiantar muita coisa correr depois.

O mercado de outra cidade: DVD / CD

Sem entrar em detalhes de velocidades, o DVD nesta história é o mercado da cidade vizinha. Estrada pedagiada.

Juntando tudo

Se o intuito é configurar um computador para trabalhar com baixa latência, será preciso se preocupar com:
  • HD - velocidade, conexão e, dependendo do propósito, tamanho;
  • Memória RAM - tamanho, velocidade de barramento, freqüência;
  • Processador - Velocidade, tamanho de L1 e L2 e velocidade interna de barramento;
  • Placa mãe - velocidade dos barramentos de memória e disco além, é claro da compatibilidade com a memória, processador e HD escolhidos.
Fontes:
  • http://pt.wikipedia.org/wiki/Cache
  • http://pt.wikipedia.org/wiki/Front_side_bus
  • http://www.intel.com

Imagens:
  • http://comprar.todaoferta.uol.com.br/
  • http://www.eletrodomesticosforum.com
  • http://pt.wikipedia.org/wiki/Front_side_bus
  • http://br.geocities.com/friolandianet/genial.html

Ciência da Computação ou Sistema de informação?

Muita gente pergunta a diferença entre cursos da área de computação, em especial Sistemas de Informação e Ciência da computação. Sem o intuito de comparar os cursos apresento esta contextualização em um bate-bola:

  • Ciência da computação: Ciência Exata
  • Sistemas de Informação: Ciência Social Aplicada

  • Ciência da computação: Computador como atividade fim
  • Sistemas de Informação: Computador como atividade meio

  • Ciência da Computação: SO, IA, TC, ES, SD
  • Sistemas de Informação: ERP, CRM, SCM, SAD, SIG

  • Ciência da computação: C++
  • Sistemas de Informação: UML
  • Ciência da computação: Álgebra relacional
  • Sistemas de Informação: DER

  • Ciência da computação: Teoria
  • Sistemas de Informação: Prática

  • Ciência da computação: Matemática
  • Sistemas de Informação: Administração

  • Ciência da computação: Próximo ao Hardware
  • Sistemas de Informação: Próximo ao Usuário

  • Ciência da Computação: Práticas Unix
  • Sistemas de Informação: Práticas CMMI

terça-feira, 26 de agosto de 2008

O que é o Kernel?

A explicação para leigos de Kernel RT gerou uma dúvida sobre o que é o Kernel "sem o RT". Vou tentar explicá-lo aqui de maneira simplificada.

Primeiro, uma visão histórica
No começo da informática, os programas de computadores (também chamados aplicativos ou aplicações) eram feitos para serem executados em computadores específicos. Programas específicos para máquinas específicas existiram por um certo período e ainda existem. Quando existia a necessidade de mudar esta máquina, toda a programação dos aplicativos precisava ser alterada para continuar funcionando. Percebendo que esta era uma situação impossível de ser mantida, os cientistas da época resolveram mudar a forma de pensar a integração entre computadores e seus programas.


O sistema operacional
Neste ponto da história entra um programa chamado Sistema Operacional. A função principal do sistema operacional é gerenciar os recursos do computador. Por recurso entenda a memória, arquivos, processador, teclado, vídeo, impressora e tudo o mais que pode ou deve ser "espetado" em um computador. Desta maneira os programas passaram a ser feitos para um sistema operacional e não para uma máquina. Quando uma nova máquina era lançada, o sistema operacional era adaptado para ela e todas as aplicações continuariam funcionando.
Em paralelo ao conceito de sistema operacional, veio o conceito de aplicativo. O Word, por exemplo, é uma aplicação para o Sistema operacional Windows. O Rosegarden é outra aplicação que utiliza o sistema operacional Linux. Normalmente, o que o usuário vê é a aplicação.

Com a contínua evolução dos computadores, novos dispositivos foram criados. Atualmente monitores LCD, mouses óticso, impressoras lasers e pen drives são exemplos destes dispositivos. Ao Sistema Operacional ficaria impossível gerenciar todos estes recursos. A evolução dos Sistemas Operacionais acompanhou a evolução do Hardware e vários fabricantes de sistemas operacionais optaram por dividí-lo em partes: Uma parte principal que cuidaria dos recursos "genéricos" e uma parte que cuidaria de recursos específicos.

O Kernel
A parte principal passou a ser chamada de Kernel, ou cerne, em uma tradução literal. Esta parte é o cerne do sistema operacional. O Kernel de um sistema operacional está sempre executando e ligar um computador e esperar que ele inicie significa esperar que o kernel seja carregador. O Kernel irá gerenciar a parte "genérica" do computador de maneira a garantir o funcionamento da máquina para o usuário.

Ao kernel pode ser adicionadas novas partes específicas. A parte dos recursos específicos é conhecida como drivers, módulos ou drivers de dispositvo. Os drivers servem para ajudar o kernel a gerenciar hardwares específicos. Se você possui uma impressora laser em sua casa, por exemplo, há a necessidade de instalar o driver para este dispositivo. Do contrário, o mesmo não irá ser reconhecido pelo seu computador e não irá funcionar adequadamente.


O Kernel do Linux
De maneira geral, podemos dizer que todo sistema operacional moderno possui um Kernel, porém ele só alcançou fama depois que o Linux ficou conhecido. Usuários Linux podem escolher e configurar o Kernel e os módulos de seu sistema operacional de maneira a melhorar o gerenciamento dos recursos de sua máquina.

Em sistemas Linux nem todo módulo é um driver de dispositivo. Recursos como a própria interface gráfica do computador podem ser tratadas por meio de módulos. Se um computador é um servidor, por exemplo, ele não precisará de interface gráfica para ser utilizado.

Quando os computadores possuem dispositivos "genéricos" distintos, é necessário versões distintas de kernel. Usemos como exemplo um celular destes bem modernos. Ele possui um sistema operacional, porém seu teclado não é igual ao de um computador, ele não tem HD, não tem mouse, não podemos chamar seu visor de monitor. Isto significa que o kernel de seu computador não irá funcionar no seu celular. Sim, existem kernels específicos para vários tipos de computadores que vão desde um palmtop até computadores enormes chamados mainframes.

Fontes:

O que são distibuições Linux?

Bem, eu sei que este assunto já foi bastante debatido e que boa parte do "pessoal da informática" sabe o que são distribuições Linux. Estou escrevendo este texto a pedidos do pessoal da Música que leu o post sobre distribuições Linux para áudio e que ficaram com dúvidas a este respeito. Por esta razão, me perdoem os Linuxers pela licensa poética do texto.

O que é o Linux?
O Linux (ou GNU/Linux) é um sistema operacional inicialmente escrito por Linus Torvalds do Departamento de Ciência da Computação da Universidade de Helsinki, Finlândia. Este sistema operacional teve sua primeira versão lançada em Outubro de 1991. Quando o Linus começou a escrever o Linux ele conseguiu o apoio de várias pessoas e entidades que ajudaram-no a transformar este sistema operacional no que ele é hoje. Atualmente o Linux é um sistema operacional utilizado em larga escala por ser gratuíto e possuir seu código-fonte disponível.

Para quem nunca ouviu falar no termo "código-fonte".
Um programa de computador é escrito em uma linguagem de programação e depois convertido em linguagem de máquina. A linguagem de máquina é numérica e normalmente são entendidas apenas por máquinas. A linguagem de programação é textual e normalmente entendida por alguns humanos. Este "texto" escrito em linguagem de programação é o chamado código-fonte. Com ele em mãos é possível alterar o código de máquina. Alterando o código de máquina altera-se o próprio aplicativo.

Voltando ao Linux...
Atualmente, todo curso de graduação em Ciência da Computação, Informática, Análise de Sistemas ou afins possuem a disciplina de Sistemas Operacionais. Imagine a seguinte situação: um aluno, no trabalho desta disciplina, precisa escrever um sistema de arquivos. Outros sistemas operacionais como o Windows ou o MacOs da Macintosh não disponibilizam seu código-fonte. Qual a solução mais simples? Utilizar o código-fonte do Linux e alterá-lo para seu trabalho, correto?

O sistema operacional das opções
Alunos, cientistas ou entusiastas da informática começaram a escrever novos programas e também disponibilizar o código-fonte. Novos programas com novos códigos-fontes geram novos programas com mais códigos-fontes. Resultado? Várias opções.

Ok, temos várias opções. Milhares de combinações possíveis. Um monte de coisas que não sabemos se funciona, quem fez e se o projeto ainda existe. Bacana, não? Como faço para garimpar nesta mina de códigos-fontes, instalar e utilizar o Linux?

Distribuições Linux
É neste ponto que entram as distribuições Linux. De maneira simples, uma distribuição (ou simplesmente distro) é a escolha entre as várias opções existentes no universo Linux. De maneira mais formal é o kernel do Linux, aplicações, manuais e instaladores. Não é necessário que você fique garimpando os melhores códigos. As ditribuições fazem isto. Garimpam, testam, criam, aprimoram, empacotam e distribuem. Por isto o termo.

Um usuário experiente pode ignorar as distribuições já existentes, ir atrás deste garimpo e fazer tudo do zero. A opção ainda existe. Mas aos usuário que não querem garimpar cabe escolher entre a distribuição que melhor lhe satisfaça.

As distribuições podem ser mantidas por projetos comunitários (como o Gentoo e o Debian), empresas (como Red Hat e Suse) ou mesmo indivíduos (como o Slackware, distribuo pelo Patrick Volkerding).

Há distribuições que executam a partir do próprio CD, chamadas de LiveCD ou que devem ser instaladas. Há distribuições que executam a partir de disquetes e que são extremamente simplistas. Há distribuições gratuítas e também distribuições pagas. Há distribuições que, para não começar do zero, são feitas baseadas em outras distribuições. Há distribuições específicas para trabalharem como servidores na Internet. Há distribuições específicas para trabalhar com áudio e multimídia. Isto significa que uma trará aplicativos para um servidor de Internet e a outra trará aplicativos para áudio e multimídia.

Fontes:

domingo, 24 de agosto de 2008

Todo adolescente deve ter um Revolver

Eu não sei qual seria a idade certa para isto. Bem provável que ao ingressar o ensino médio, o antigo segundo grau. Algo entre 14 e 15 anos. Todo adolescente deveria ganhar um Revolver. Não apenas ganhar mas aprender a usá-lo.

O Revolver é um divisor de águas. Quanto a isto, não há o que negar. Ter um Revolver também é passar por este divisor de águas. Eu comprei meu Revolver por volta dos 23 anos de idade. Deveria ter comprado antes. Apesar disto, não acho que embarquei tarde demais nas sensações que só um Revolver pode proporcionar.

Já diria a Fernandinha Takai do Pato Fu: "Mamãe ama é o meu Revolver". Tem de aprender a revolver. Sim. Revolver. Não Revólver. Revolver. Direita volver, esquerda revolver.


O Revolver marca o início de uma nova era na discografia dos Beatles. O que veio depois, só veio porque o passo mais importante já tinha sido dado: Era preciso Revolver.

Em Sgt. Pepper's Lonely Hearts Club Band a banda pensou em fazer um disco que não seria tocado ao vivo, podendo, com isto, extrapolar as possibilidades que o estúdio de gravação oferecia.

Isto foi apenas conseqüência do Revolver. A banda já tinha gravado EleanorRigby com um arranjo que a banda não conseguiria fazer ao vivo.

O que o Revolver tem?

1 - TAXMAN
2 - ELEANOR RIGBY
3 - I´M ONLY SLEEPING
4 - LOVE YOU TO
5 - HERE THERE AND EVERYWHERE
6 - YELLOW SUBMARINE
7 - SHE SAID SHE SAID
8 - GOOD DAY SUNSHINE
9 - AND YOUR BIRD CAN SING
10 - FOR NO ONE
11 - DR ROBERT
12 - I WANT TO TELL YOU
13 - GOT TO GET YOU INTO MY LIFE
14 - TOMORROW NEVER KNOWS

Bem, se você ainda não tem um Revolver, acho melhor começar a pensar em revolver!

Links:

terça-feira, 19 de agosto de 2008

O que é ALSA?

Tentando ajudar os novos usuários de Linux para multimídia é hora de explicar mais uma sigla que é bastante popular. Com vocês:

Advanced Linux Sound Architecture (ALSA)
Você acaba de comprar uma placa de som. Bonita, nova e cheirosa, tão sonhada e aguardada por meses. Ao abrir a caixa encontra a placa, um manual e o CD / Disquete (infelizmente os disquetes sobrevivem...) com o driver da placa. Ao manual, ninguém dá bola. É só "espetar" a placa de som, ligar a máquina e instalar o driver. Certeza que ela vai funcionar, certo?
Quase. Os fabricantes ainda não disponibilizam drivers de seus periféricos para o Linux. O tal CD com o driver só será útil para usuários Windows e, pelo jeito, não é o seu caso.

O que são os drivers?
No começo havia apenas a famosa placa de som Sound Blaster 16 bits que vinha com tal "kit multimídia" e tudo era muito simples. Atualmente existem placas de som com diversas configurações distintas. Várias entradas, várias saídas, entrada / saída para controlador MIDI, full-duplex (capacidade de gravar e ouvir ao mesmo tempo), com conexão USB, PCI e por ai vai. A função de deixar sua placa funcionando é do sistema operacional. O sistema operacional, com certeza, não conhece todas as placas de som do universo e por isto eles contam com uma ajudinha do fabricante para lhe explicar como conversar com sua placa de som. Esta "ajudinha do fabricante" é o tal driver de dispositivo. Quando o Sistema operacional consegue identificar sua placa a mesma se torna disponível para todas as aplicações que irão utilizá-la.

Bem, se o fabricante não tem Driver para Linux, o que fazer?
É neste ponto que entra o ALSA. Assim como você, muita gente precisa destes drivers. Esta gente se juntou, cada um escreveu um driver e o ALSA conta hoje com suporte a grande parte das placas de som do mercado. Bacana, não? Vai além. Mais do que escrever estes programas, o ALSA também partiu de outros objetivos como:
  • Síntese de MIDI baseada em hardware;
  • Mixagem em hardware de múltiplos canais;
  • Operação Full-duplex;
  • Drivers que trabalham com múltiplos processadores.
  • Suporte para aplicações que utilizam o OSS*
No momento da escrita deste post, o ALSA conta com suporte a 110 placas de som. Apesar de ser um número bastante significativo, o conselho dos usuários Linux ainda é: Verifique se há um driver ALSA para sua placa antes de adquirí-la.

Fontes:
* OSS (Open Sound System) é o antigo Sistema de som do Linux. Para saber mais, leia este blog.

segunda-feira, 18 de agosto de 2008

O que é Kernel RT?

Algumas distribuições de Linux para Áudio possuem Kernel RT e outras não. O que isto significa?

Um sistema operacional Multi-tarefas
Durante muito tempo os sistemas operacionais não suportavam a execução de vários programas simultaneamente. Estes sistemas operacionais, como o MS-DOS, eram chamados de Mono-tarefa.
Boa parte dos sistemas operacionais atuais permitem a execução de vários programas ao mesmo tempo. É bastante comum que, por exemplo, você esteja navegando na Internet e ouvindo música ao mesmo tempo. Estes sistemas operacionais, como o Linux ou o Windows, são chamados Multi-tarefas.
Bem, sabendo que o seu computador possui apenas um processador, como ele é capaz de executar vários programas ao mesmo tempo? A resposta é simples: Ele não é. Sim, seu computador executa apenas um programa de cada vez, porém, alterna entre os vários programas que estão executando deixando uma fatia de tempo (time slice) para cada um deles. É como o cinema, várias fotos piscando rapidamente dão a impressão de movimento. Vários programas alternando rapidamente dão a impressão de multi-tarefa. A realidade é que apenas um deles irá executar por vez. O responsável por alternar entre as várias tarefas é o sistema operacional, ou mais especificamente, seu escalonador.

O escalonador
O escalonador é uma parte do sistema operacional que irá cuidar da divisão das fatias de tempo (time slice) do processamento entre os vários programas em execução. Há uma série de algoritmos diferentes para escalonamento como, por exemplo, SJF ou FIFO e nem todos trabalham com fatias de tempo. Além de usar fatias de tempo, alguns destes algoritmos de escalonamento tratam os programas em execução com prioridades diferentes. O Linux utiliza esta abordagem. Assim, se um programa for mais importante, ele poderá executar por mais tempo e se ele for menos importante ele executará por menos tempo.

Prioridades
Para garantir que processos (ou tarefas, ou programas) mais importantes executem sempre que for necessário, há a possibilidade de atribuir-lhes uma prioridade maior. Os processos do Sistema operacional, por exemplo, costumam possuir maior prioridade que os processos do usuário. No Linux, os processos mais importantes possuem prioridade 0 (isto mesmo, zero) e conforme este valor cresce a importância do processo diminui. Os programas que não estão executando ficam esperando em uma fila. Os algoritmos de escalonamento fazem uma conta para tentar dividir de uma maneira justa o processador para todos os processos. Quem está esperando a mais tempo, por exemplo, pode ser chamado primeiro que alguém com maior prioridade. Para alterar entre um processo e outro, o escalonador utiliza um recurso chamado preempção.

Preempção
A preenpção é a alternância entre os vários processos da fila. Partimos da idéia de que apenas um deles está no processador. O escalonador pode preemptar um processo que já executou por tempo bastante e garantir com isto a sensação de multi-tarefa. Porém, além dos processos da fila, o usuário também pode requisitar algum processamento. Isto é feito, por exemplo, digitando no teclado ou movendo o mouse pela tela. Isto é chamado de interrupção de Hardware. Logicamente que cada dispositivo tem um endereço (chamado IRQ) que identifica se esta interrupção está vindo do teclado, da placa de rede, do mouse ou da placa de som, por exemplo. O tempo entre você pressionar uma tecla e o computador responder por isto, ou seja, atender a esta interrupção, é o que chamamos de latência.

Latência
Latência, como dito anteriormente, é o tempo que o computador demora para responder quando, por exemplo, uma tecla é pressionada no teclado. Nem todos computadores querem trabalhar com latência baixa. Imagine um servidor da Internet. Normalmente estes computadores não possui nem teclado nem mouse. Usuários não operam estas máquinas e, logicamente, elas não trabalham com preempção forçada. Isto significa que ninguém "fura fila" de execução. Seria o mesmo que dizer: Computador, faça isto. E ele responder: Agora não posso, estou gravando um arquivo. Para um servidor, é mais importante gravar o arquivo. A Latência, neste caso, é bastante alta.
Computadores Desktop trabalham com preempção voluntária do Kernel. Isto significa que, quando há uma interrupção dos usuário, o programa voluntariamente cede seu espaço no processador para que esta seja executada. Talvez ele termine de fazer o que estava fazendo se julgar que isto seja importante. A Latência, neste caso, é menor.
Aplicações que exigem que o tempo de resposta do processador sejam menor necessitam de uma alteração no Kernel do mesmo. Sistemas operacionais como o MacOS e o Windows não permitem alterações em seu Kernel. O Linux permite. Então temos um Kernel preemptível de baixa latência que, como seu próprio nome diz, ele possui uma latência ainda menor devido ao mesmo permitir preempção.
Foi com a intenção de diminuir este tempo de latência que um Húngaro chamado Ingo Molnar, desenvolvedor da Red Hat americana, iniciou o projeto de um Kernel com preempção completa, também chamado de Kernel RT.

Então este é o Kernel RT?
Sim, o Kernel RT foi modificado para permitir preempção completa e acelerar assim o tempo de resposta do processador as interrupções. Você não corre o risco de ouvir do computador "Espera um pouco" quando pedir ao mesmo para executar uma tarefa. Só para exemplificar, um dos parâmetros que o escalonador utiliza para a preempção é o System Timer Resolution. Existe um intervalo de tempo (time slice) para cada tarefa que o processador recebe para fazer. Cada sistema utiliza uns milésimos de segundos para gerenciar estes intervalos de tempo. Assim um sistema gasta 1/n segundos por intervalo; algo como 1/33 para o W95, 1/100 para a série o Windows NT, 1/250 para o Linux padrão e 1/1000 para o Linux com Kernel RT.

E aonde entra a parte Multimídia?
O tempo de resposta do processador afeta especialmente as aplicações gráficas e multimídias, não apenas em velocidade, mas também em qualidade. Com a utilização de um Kernel RT são menores as chances de um programa multipista não conseguir executar suas 18 faixas "simultaneamente". Com o tempo de 0,001 segundos de preempção entre uma faixa e outra fará o resultado final, com certeza, soar como um único som. O mesmo se aplicaria para gravações. É normal em um ambiente de produção musical gravar uma faixa enquanto se ouve outras 5 ou 6.
Devido a utilização mais pesada do processador, o Kernel RT só funciona com processadores mais recentes, não funcionando, por exemplo, com Pentium II.

É devido esta diferença de abordagem que algumas distribuições de Multimídia que possuem a finalidade de trabalhar com produção sonora optam por um Kernel RT e outras, que planejam executar em qualquer tipo de computador, não possuem tal característica.

Fontes:

quarta-feira, 13 de agosto de 2008

Distribuições de Linux para áudio

Para os que trabalham com produção musical no computador e procuram uma alternativa no mundo Linux, segue uma lista de distribuições com este propósito:

- Ubuntu Studio
Baseado na distribuição Ubuntu, o Ubuntu Studio acompanha as versões desta distribuição e possui pacotes adicionais em um repositório próprio para Música, Vídeo e Imagem. Possui Kernel RT e as opções de instalação para seus pacotes adicionais.
Site oficial: http://ubuntustudio.org/


- 64 Studio
Baseado na distribuição Debian, o 64 Studio é uma boa opção para máquinas com processador 64 bits. A distribuição também possui i386 para computadores 32 bits e também conta com Kernel RT. Sua versão 2.0 possui a vantagem adicional de ter sido lançada também para Live CD e em DVD para instalação.
Site oficial: http://64studio.com/


- Musix
Sim, o site oficial está correto e esta é uma distribuição Argentina. Possui a colaboração de brasileiros e é, sem dúvidas, uma boa alternativa para Multimídia. Possui kernel RT, um pacote variado de aplicações e, o que é melhor, vários exemplos. Esta é a razão de eu julgar o Musix é a melhor distribuição para iniciantes: Exemplos prontos para vários softwares. Baseada no Knopix esta distro está disponível em duas versões: Live CD e Live DVD.
Site oficial: http://musix.org.ar/en/index.html


- Jack Lab Audio Distribution
Também conhecido por sua sigla: JAD, esta distribuição é baseada no OpenSUSE. Possuindo opções de Live DVD e também de um DVD para instalação, o JAD também possui Kernel RT além de WineASIO para suporte completo para VST.
Site oficial: http://jacklab.net


- Planet CCRMA
Desenvolvido pela Universidade de Stanford, o Planet CCRMA (lê-se "Karma") não é propriamente uma distribuição mas um conjunto de pacotes RPM para ser utilizados em distribuições baseadas no Red Hat como o Fedora ou o CentOS. Entre estes pacotes há um Kernel de baixa latência, drivers para dispositivos de áudio e várias aplicações para esta finalidade.
Site oficial: http://ccrma.stanford.edu/planetccrma/software/


- Dyne:bolic
Produzido pela Dyne (http://dyne.org/), uma fundação de Software Livre para as Artes, o dyne:bolic é baseado em Knopix. É distribuído em Live CD e foi otimizado para trabalhar com máquinas de poucos recursos. Seus requisitos mínimos de Hardware: Pentium 1 com 64MB de RAM. Logicamente, esta estação deve possuir Leitor de CD.
Site Oficial: http://www.dynebolic.org/


- Pure:dyne
Entre as distribuições de propósitos específicos esta tem uma peculiaridade: o Pure:Dyne nasceu como uma versão do dyne:bolic com o propósito de trabalhar programação musical. Segundo a distribuição, o mesmo encontra-se pronto para trabalhar com softwares como Pure Data, Supercollider, Icecast, Csound e Fluxus, por exemplo. Distribuído em Live CD.
Site oficial: http://code.goto10.org/projects/puredyne/


- ArtistX
Distribuído em Live DVD o ArtistX é talvez a distribuição mais bonita para Áudio. Baseado no Debian possui um Menu KDE modificado para sua finalidade e muitas, mas muitas aplicações. Infelizmente não possui Kernel Real Time.
Site oficial: http://www.artistx.org/site2/


Distribuições descontinuadas

-AGNULA
AGNULA é um projeto que foi financiado pela Comissão Européia para o desenvolvimento de duas distribuições para áudio em Linux. Este projeto criou duas distribuições Linux para Áudio: uma baseada em Debian (DeMuDi - sigla para Debian Music Distribution) e outra baseada em Red-Hat (RehMuDi - sigla para Red-Hat Music Distribution). Até onde encontrei este projeto não continuou voluntariamente visto que o site oficial (http://www.agnula.info) e o site da comunidade (http://www.agnula.org) estão fora do ar. Segundo o site DistroWatch o projeto teve início em 01/04/2002 (Sim, primeiro de Abril!) e seria mantido por 2 anos.

Fonte: Estúdio Livre

- DeMuDi
DeMiDi é a sigla de Debian Multimedia Distribution. Esta distribuição não existe mais e foi descontinuada. O termo que se utiliza para isto é uma distro defunct (defunto). Foi desenvolvida por uma fundação Européia chamada AGNULA. Por esta razão é também chamado de A/DeMuDi. O site oficial não está no ar, mas consta como http://demudi.agnula.info/. Segundo o site DistroWatch o último release do DeMuDi foi liberado em Outubro de 2005.

- ReHMuDi
A distribuição Red Hat da AGNULA. Também um projeto descontinuado (defunct). Sobre esta distribuição não encontrei nenhum dado adicional.

- AudioSlack
Inspirado no Planet CCRMA, o Audioslack era um conjunto de pacotes de áudio para a distribuição Slackware. Também é um projeto descontinuado. Procurando mais informações encontrei o email do Luke Yelavich, team leader, encerrando o projeto. O site oficial consta como http://www.audioslack.com, porém o mesmo encontra-se desativado.

Fonte das Imagens: http://www.distrowatch.com