sexta-feira, 3 de agosto de 2012

Você já leu a revista "Micro Sistemas" ?



Hoje eu encontrei um site muito interessante sobre a história da computação no Brasil, é algo como um mudeu digital chamado "Data Cassete". Nele eu pude ver digitalizados os exemplares da revista Micro Sistemas que eu lia quando estava começando a entender o que é um computador. Em suas páginas podemos observar como os tempos eram diferentes, naquela época quem operava um microcomputador tinha que ter muitas habilidades pois as máquinas não ficavam na mão de simples usuários, diferentemente dos ambientes empresariais dos mainframes, a pessoa geralmente precisava programar, digitar, imprimir, salvar os dados e, quando for o caso, até mesmo fazer uma manutenção no equipamento. Não era incomum as pessoas fazerem caras de assustadas quando dizíamos que trabalhávamos com "o computador".
Engraçado é ouvir minha enteada falar "para que serviam os primeiros computadores? naquela época não tinha internet, nem facebook, nem joguinhos... então eles não serviam para nada!!!".

segunda-feira, 30 de julho de 2012

Existe lógica em nossos pensamentos?

Outro dia estava conversando com um amigos sobre como as idéias são formadas, cada um de nós cria estratégias de pensamento desde pequenos para solucionar problemas genéricos, o problema é que algumas vezes nossas estratégias matemáticas entram em conflito com o cálculo matemático.
Para ver como eu me sairia, ele pegou uma edição da revista Superinteressante e me fez a seguinte pergunta:

Você foi a uma lanchonete e pediu um cafezinho e uma bala, sua conta foi de R$ 1,10. Sabendo que o cafezinho custa R$ 1,00 a mais que a bala, quanto custa uma bala?

A solução se apresentou de imediato em minha cabeça, sem qualquer raciocínio eu imaginei que a bala custa R$ 0,10, quase que ao mesmo tempo em que ele terminou de ler, então foi como se alguém estivesse falando lá dentro, tá fácil demais... pense mais um pouco...

A idéia mais simples, quem vem de imediato, é representada assim:



Para facilitar a reavaliação do problema eu reavaliei a sentença de palavras e desenhei a seguinte solução em minha mente:


O maior trabalho foi tentar explicar como isso se passou em minha cabeça para solucionar o problema provando que a bala custa R$ 0,05, afinal o cafezinho que custa R$ 1,05 acaba sendo R$ 1,00 a mais que a bala. Acredito que quando trabalhamos por muito tempo com programação e lógica o nosso raciocínio acaba sendo afetado. Ou será que sou só eu que sou maluco assim???

sexta-feira, 27 de julho de 2012

As linguagens de programação e eu

Linguagens de programação sempre me fascinaram, apesar da decepção do meu primeiro contato que foi com o Cobol  (foi entre 1982 e 1983), acho que o pior de tudo foi escrever tanto e não ter um computador para ver o programa em ação. Naquele tempo os cursos eram totalmente teóricos (dá para imaginar?), usávamos folhas de codificação, ou seja, era tudo feito no papel mesmo. Para minha sorte ao final do curso nós tivemos uma idéia de Basic e eu pude "brincar" um pouco com um CP-200 (só para constar, eu era o mais novo da turma).

Folha de codificação Cobol
Depois de codificado ainda era preciso digitar tudo em uma perfuradora de cartões, que eu fui conhecer uns 4 anos mais tarde, na UFES quando usei o Fortran nas matérias PD-1 e PD-2 (Processamento de Dados).


Esses cartões eram levados para o mainframe e o programa era compilado e executado, só o operador possuia um terminal console.

Mais tarde utilizei o Basic em meu primeiro computador, um TK-2000, o que me ajudou muito a entender o seu funcionamento foi a compra de um livro chamado "Listagem comentada da ROM do TK-2000", neste livro o autor mostrava como funcionava cada parte do Basic (em Assembly), como o pequeno computador tinha um montador Assembly eu pude me aventurar por este caminho para que a máquina pudesse fazer o que o Basic não dava conta de fazer.

Em 1988 eu comecei a trabalhar com um clone do IBM PC-XT, processador de 4,77Mhz e 512Kb de RAM. O trabalho era aprender a programar em linguagem de baixo nível naquela máquina, minha experiência com o TK-2000 ajudou muito, apesar da arquitetura ser muito diferente. Após estudar bastante o hardware e entender como funcionava sua linguagem de máquina, passei a codificar algumas coisas usado o "debug" do MS-DOS, após algum tempo comecei a entender como funcionava este sistema operacional, que era uma novidade para mim. Quando conseguimos uma cópia do TASM (Turbo Assembler) da Borland, ficamos maravilhados com a facilidade de se usar nomes de funções e variáveis, não precisava mais contar os bytes para saber o endereço de uma rotina para poder chamá-la pelo seu endereço de memória.
Algum tempo depois vim a conhecer a linguagem C (usando o Turbo-C) e Pascal (com o Turbo-Pascal), achei muito interessante o compilador C gerar um código intermediário em assembly que eu pudesse ler e entender como funcionavam os ponteiros e a passagem de parâmetros usando a pilha.

Programa escrito para Turbo Assembler


Ao trabalhar no banco eu passei a programar em Clipper, que era a linguagem quase padrão aqui no Brasil para programas que usavam banco de dados em ambiente de microcomputador com MS-DOS. Também fiz algumas coisas em LPS (uma espécie de Pascal da linha de minicomputadores Cobra-500) e outras menos importantes. Em Clipper cheguei a criar um "gerador de aplicações", era um framework bem completo que ajudava a criar a entrada de dados e geração de relatórios. Outro trabalho que me orgulhei de fazer foi construir um sistema de BBS usando Clipper e Assembly apenas para as rotinas de acesso ao modem.

Mesmo após o surgimento do ambiente gráfico eu demorei a aderir a nova tecnologia, comecei a fazer algumas coisas simples em Visual Basic, mas a adaptação foi lenta e desgastante. O mercado usava muito o Delphi mas nós não podíamos comprar a ferramenta. Em seguida fiz algumas coisas em ASP para implementações WEB, geralmente ligadas a banco de dados SQL Server.

Após sair daquele ambiente quase que exclusivo de ferramentas Microsoft eu passei a utilizar o PHP para WEB, uma linguagem realmente impressionante, a possibilidade de se usar arrays de tipos e índices mistos facilitava em muito o trabalho de desenvolvimento. Cheguei a criar algumas ferramentas de desenvolvimento rápido, mas hoje estão descontinuadas.

Atualmente preciso otimizar e dar manutenção em códigos Java, apesar de ter muitos recursos legais nesta linguagem, eu ainda não me acostumei com ela. Não sei se é a orientação à objetos ou o tipo de tratamento de erros, mas tem algumas coisas que realmente não me agradam. Mas é um mal necessário, por ser multiplataforma essa é a linguagem mais adequada ao sistema que desenvolvemos, pois ele precisa estar disponível tanto em ambiente Linux quanto Windows. Algumas rotinas são escritas em C e muita coisa em Shell Script (bash), assim é possível fazer o lado servidor da aplicação ter acesso a todos os recursos necessários.

Virtualização: Esse conceito é recente?

A primeira vez que eu ouvi falar desse conceito foi de um mainframe "/370" da IBM, naquele tempo eles tinham dois grandes bancos de dados e cada um rodava sob um sistema operacional diferente, seria caro demais uma empresa manter 2 mainframes, ao mesmo tempo existiam diversas aplicações para esses dois bancos que as empresas gostariam de utilizar. Assim a "Big Blue" desenvolveu um sistema chamado simplesmente de "VM", ele dividia o mainframe em duas máquinas virtuais onde os dois sistemas operacionais eram carregados simultaneamente, desta forma as empresas podiam ter esses ambientes no mesmo hardware. Para se ter uma idéia, a primeira versão dessa tecnologia foi lançada em 1972.

No ambiente de microcomputadores a Intel lançou com seus processadores 80386 (lançado em 1985) um modo especial chamado "VM86", que é o modo virtual 8086 onde o sistema operacional pode executar programas em um ambiente que simula um computador com processador 8086 (usado pelo PC-XT), que foi a forma utilizada pelo Windows para executar programas criados para MS-DOS e antigos aplicativos Windows 3.x em um subsistema de 16 bits dentro ambiente do processador de 32 bits. Nos processadores de 64 bits este suporte foi removido, foi incluido em seu lugar o suporte a um subsistema de 32 bits, para que seja compatível com esta arquitetura, os programas de 16 bits só podem ser executados nestas plataformas por meio de emulação.

Aplicativos de virtualização como VMWare, VirtualBox, Bochs, Xen e Qemu são bem mais recentes e já fazem parte do nosso cotidiano, hoje podemos instalar outros sistemas operacionais nestas máquinas virtuais mesmo que tenhamos um computadore com perfil para desktop. Diversas empresas já utilizam servidores para criar conjuntos de máquinas virtuais, que são usadas como servidores ou desktops remotos que podem ser acessados remotamente ou na rede local por meio de thin clients.

Intel VT-x


A tecnologia de virtualização para arquitetura x86 usada pela Intel se chama VT-x, e a AMD utiliza o AMD-V. Estes recursos fazem com que parte do trabalho de virtualização seja realizado pelo hardware e não pelo software, em termos técnicos temos um hypervisor rodando no ring-0 enquanto que os sistemas operacionais guest estão rodando no ring-1, desta forma o recurso de gerenciamento de memória da máquina pode ser controlado e acessado pelos vários sistemas operacionais respeitando os seus limites. Outros tipos de virtualização de hardware como o VT-c (virtualização de interface de rede) e AMD-vi / VT-d (virtualização de I/O e gerenciamento de memória que permite acesso a interrupções de hardware e DMA) estão disponíveis e nos mostram que cada dia mais os fabricantes de microprocessadores estão preocupados com este mercado emergente.

segunda-feira, 23 de julho de 2012

Como migrar para o mundo Linux?

É possível trabalhar apenas com Linux? Abandonando completamente o ambiente Microsoft Windows???

No meu caso bem que gostaria, mas meu trabalho acaba me impedindo, mas essa não é a realidade para a maioria das pessoas. Depois de trabalhar em um banco por 13 anos eu literalmente "pedi para sair", era analista de sistemas mas passei por várias funções como operador de computador, técnico de suporte e, nas horas vagas, desenvolvedor.
A empresa possuia mainframes em outros estados, onde era realizado o processamento mais "pesado", mas nas pontas nós tínhamos apenas os computadores de "médio" porte da linha Cobra-530, Cobra-480 e micros Cobra-305 com sistemas operacionais nada convencionais. O 305 usava um sistema chamado SOM (Sistema Operacional de Microcomputador) apesar de suportar o uso do CPM que a empresa não utilizava. Nos outros computadores o sistema usado se chamava SOD (Sistema Operacional em Disco), até que o sistema não era nada mal, a máquina tinha 1Mb de memória, processador Motorola 68000 @ 20Mhz e suportava trabalhar com 32 terminais seriais "pendurados" nele. Os terminais eram usados para a digitação de documentos em um tempo que as agências bancárias não possuiam computador (dá para imaginar uma coisa dessas?).

Trabalhando com microcomputadores
Passei a trabalhar no setor de microinformática com os clones do IBM/PC-XT com processadores Intel 8088 @ 4.77 Mhz e sistema operacional Sisne Plus, um sistema operacional nacional criado pela Scopus totalmente com o MS-DOS.
Após migrações para o Windows for workgroups 3.11 e posteriormente para o Windows NT 4.0 eu cheguei a um ponto em que não aguentava mais aquele restrito mundo "Microsoft", a empresa possuia um contrato em que os produtos da MS ficavam mais baratos que os concorrentes, então só era possível adquirir algum outro software caso a MS não tivesse alguma ferramenta que fizesse o trabalho. Fiz muitos treinamentos oficiais, mas nunca me animei para fazer a certificação.

Novos horizontes
Quando resolvi sair de lá tomei a decisão de voltar minha atenção para outros mercados e o Linux foi uma escolha que me pareceu interessante. Comecei a trabalhar em uma empresa que possuia um contrato com a Conectiva e trabalhava com suporte técnico e cabeamento de rede, com a minha chegada iniciamos uma nova frente, treinamento especializado, e montamos várias turmas de Linux (diversos módulos), SCO Unix, Programação PHP e outros.

Situação atual
No meu trabalho atual eu tenho utilizado quase que exclusivamente o ambiente Linux, mas ainda dependo de um desktop virtual para ler emails pois o cliente Notes para Linux pareceu pesado demais, além de algumas ferramentas da empresa que teimam em só funcionar no internet explorer.
Tenho utilizado no trabalho o CentOS, uma distribuição Linux que é totalmente baseada na RedHat Enterprise.
Em meu notebook utilizo o Ubuntu que reconheceu todo o hardware sem reclamar, uma partição pequena para o Windows 7 executar o acesso remoto ao trabalho e tenho mais 1 partição que uso como laboratório de testes quando não quero testar só pelo ambiente do VirtualBox.
Para a maioria das pessoas essa migração pode ser traumática, o maior problema sempre foi a questão dos jogos, poucos são os lançamentos para o ambiente Linux, e quem é muito ligado a esse tipo de diversão acaba ficando preso ao sistema da Microsoft e ao DirectX.

No meu caso o computador é usado basicamente como ferramenta de desenvolvimento e acesso à internet, então eu não preciso de uma máquina com alto poder de processamento nem gráficos avançados. As ferramentas de escritório podem ser substituídas facilmente pelo LibreOffice (antigo OpenOffice/brOffice).

Quanto ao ambiente de desenvolvimento, se for escrever código em C ou PHP, uso só o "vim" como editor de textos e o "gcc" como compilador, para Java eu preciso usar o "eclipse" que é a ferramenta adotada pela equipe de desenvolvimento.

Não conheço nada de edição gráfica, mas para qualquer "retoque" em fotos ou imagens eu recorro ao Gimp que faz muitas coisas tão bem quanto o Photoshop.

A gravação de CD ou DVD eu faço com o "cdrecord", mas não gosto da versão que vem com a distribuição pois uso discos DVD+RW que ele não consegue apagar corretamente, eu baixo o fonte do autor do software e compilo uma versão que funciona melhor. Alguns amigos preferem usar o "k3b" que possui uma interface gráfica, mas eu sempre tive o azar de não conseguir fazer o que queria com ele, então continuo com a ferramenta em linha de comando.

Para reprodução de vídeo e áudio eu sempre usei o "mplayer", mas tenho usado o "VLC" algumas vezes.

WindowsLinux
Microsoft OfficeLibreOffice
Internet ExplorerFirefox
PhotoshopGimp
Visual StudioEclipse
Nero (gravador de CD/DVD)cdrecord (linha de comando)
Media Playermplayer e VLC

Como deve ter percebido, foi um caminho longo até chegar ao ponto em que me sinto muito mais confortável em uma estação Linux, na verdade hoje eu me sinto completamente preso em outro ambiente porque não tenho o mesmo leque de ferramentas disponíveis. Se eu fosse um heavy-user de games ou de software que só existem em outras plataformas, com toda certeza as coisas não seriam assim. Se você deseja o mesmo, só resta uma coisa a ser feita, leia muito e

Sistemas operacionais alternativos

De tempos em tempo eu procuro na internet por sistemas operacionais não convencionais... só para ver se tem alguma novidade interessante...

Com isso, ao longo do tempo, eu pude ver alguns projetos crescerem, como o ReactOS, uma versão aberta de um sistema baseado na arquitetura do Windows NT, pode parecer meio antiquado mas até mesmo os sistemas Windows mais modernos ainda são baseados nesta arquitetura. As primeiras versões eram muito instáveis e com uma performance sofrível, achei mesmo que eles não conseguiriam dar conta do trabalho... mas para minha surpresa eles já possuem um sistema razoável, é claro que não dá para comparar o desenvolvimento com outros sistemas que possuem muito mais investimento e pessoas à disposição para codificar e resolver problemas, além de terem maior liberdade sobre a direção que o sistema vai tomar pois, no caso do ReactOS, a premissa básica é ser compatível com outro sistema operacional, o que não dá muita margem para ficar inventando coisas novas para não perder essa "compatibilidade".

Acompanhei também o desenvolvimento de uma linha de produtos feitos para executar programas feitos para o MS-DOS como o FreeDOS (um projeto que cresceu muito), o DR-DOS/OpenDOS (originalmente da Digital Research, agora desenvolvido pela DRDOS Inc., é um sistema comercial)  e o DOSBox (um emulador de DOS que pode ser executado no Linux para rodar programas antigos, geralmente jogos).

Tive a oportunidade de testar também o QNX, um tipo de Unix que pode ser executado em plataforma intel que possui características peculiares, é um RTOS (Sistema Operacional de Tempo Real) e muito estável, que fizeram dele uma boa escolha para processos indústriais, hospitais e até mesmo usinas nucleares.

Durante um tempo também experimentei um pouco dos vários Unix BSD (FreeBSD, OpenBSD e NetBSD), mais tarde um li um artigo que comentava sobre o Darwin OS, que é um tipo de Unix BSD que está por baixo do ambiente gráfico dos sistemas Mac OS X e iOS da Apple.

Alguns outros sistemas só possuem espaço em meios acadêmicos, como o Minix que é um "mini" Unix, desenvolvido por Andrew Tanenbaum na universidade onde lecionava para ser usado como exemplo em seu livro "Operating Systems Design and Implementation".

Cheguei a encontrar até mesmo um sistema operacional escrito em JavaScript, é claro que não podemos esperar muito do JS/UIX, mesmo assim vale a pena dar uma olhadinha no seu funcionamento.

O que é um terminal "burro"?

Os chamados terminais "burros" são aqueles cujo único tipo de processamento do conteúdo que faziam era tratar os caracteres especiais de tela em modo texto, eram comandos de posicionamento de cursor, apagar um caracter, uma linha ou a tela inteira, definir a côr do texto ou do fundo, etc... existem alguns padrões como o VT-100 (um antigo terminal da DEC, monocromático) e um outro padrão conhecido como ANSY que suporta cores. Até mesmo o falecido MS-DOS possuia um device driver que fazia o tratamento dos comandos ANSY. Eles eram muito úteis quando tínhamos acesso aos serviços de BBS (Bouletim Board Service) e a maioria dos emuladores de terminal possuiam este suporte.
Um emulador de terminal é um software que reproduz no computador a mesma função de um terminal burro, ou seja, recebe os dados que vem pela linha de comunicação (geralmente uma porta serial) e faz o tratamento dos caracteres especiais para colocar na tela, e quando o usuário pressiona uma tecla, ele envia essa informação para o computador remoto que faz o tratamento.

DEC VT-100

Com a utilização do protocolo TCP/IP, a massificação da internet e conexão de computadores por rede local, a comunicação serial foi perdendo espaço, apesar de ainda ser amplamente utilizada na comunicação via modem. É possível ter acesso remoto como um terminal via rede, para isso podemos emular um terminal através do protocolo TCP/IP utilizando um software como o TELNET, caso você tenha um servidor TELNET na outra ponta então poderá acessar um sistema remotamente, é claro que isso atualmente não é mais recomendado, porque não existe criptografia nesse processo e a senha do usuário durante o login é transferida pela rede em "texto claro" e passível de ser observada nos pacotes que são transmitidos na rede. Para este tipo de acesso recomenda-se o uso do SSH que faz a mesma coisa em uma conexão criptografada. Mas ainda podemos usar o cliente TELNET para testar a conexão com outros servidores, como HTTP, MYSQL e SSH.
Usávamos um conjunto de teclado e monitor que nos permitia ter acesso remoto (as vezes até pelo uso de um modem) a um sistema executado em um computador com poder de processamento bem maior, depois disso os sistemas operacionais foram colocados no computador do usuário (com a chegada dos microcomputadores), mas para compartilhar recursos esses equipamentos foram colocados em rede, desta forma voltamos ao início do processo quando passamos  a usar ambientes de desktop remotos (como o Remote Desktop da Microsoft ou XDMCP no mundo Unix) que nos permite ter o mesmo de antes, um terminal "burro" que não faz processamentos locais, a maquina local é apenas uma nova interface de teclado e vídeo (que agora é gráfico em lugar de texto, que exige o auxílio de um dispositivo apontador, como o mouse).

Thin Client (pequena caixa do lado esquerdo)

Já faz algum tempo que existe no mercado os chamados Terminais ThinClient, eles são computadores com recursos extremamente pequenos, mas que possuem suporte a ambiente gráfico e protocolos de rede como RDP, VNC e XDMCP que o tornam um verdadeiro terminal de rede. E assim, mais uma vez, a computação faz o retorno ao ponto de partida, temos máquinas leves nas pontas que permitem o acesso a computadores com maiores recursos nos sistemas centralizados, como sempre foi no ambiente mainframe.