Caros
Sendo tudos muito quertos, quebro este silencio gritante...
Uns dias atras, estava conversando com meu amigao Faraohh, e ele me falou uma palavra, realmente chave - no sentido que ela (a palavra - ggg) fez pensar. Veja aluem pensa alto, e derepente as vezes mesmo sem saber, inspira um pensamento no outro; podemos ate dizer que nem precisamos avaliar este pensamento isoladamente, pois o que vale mais ainda do que ela, e as consequencias ela causou... e como jogar uns sementes no deserto, e um dia voltar ver alguns plantas - albeit esporadicas - crescendo.
Mas, voltando.... acho que aqui nesta lista, e pra discutir programacao acima das linguagens.
Entao, primeiramente, vou contar um pouco da minha historia como programador; sou programador de muitos anos (20+++). Comencei em (Turbo) Pascal, encarei o prompt e batch'es em DOS, logo pulei pra (Turbo) C(++), assim OO. Ao mesmo tempo tinha que programar em LISP (pq roda em 'under the hood' de AutoCAD). Depois foi para Perl - o que me serviu para ate hoje; mesmo que ano passado minha entrada na UFG inderetamente me encarou com PHP e mais uma volta para C/C++ - isto sem falar da diversas shells e scripts, mesmo que maiorias deles e melhor fazer em Perl mesmo.
Aqui ate esqueci do meu primeiro programa: em Basic, desenhando uma roda de bicicleta; isto foi em 82...
No fim das 80's conheci o Perl - sendo muito casca dura, primeiramente me fascinou (apos brigar tanto com gerencia de memoria em C, espeicalmente por strings) as funcoes (inversas) split e join. Me pos a tarefa de fazer isto em C++, cara, ate quebrar a cara... (visa que estes Larrys e Rasmus etc, sao cabecas!). Ae me entregei, largei de pensar em gerencia de memoria (sabendo que um computador e muito melhor disso qualquer maneira).
Nestes dias, internet nao era tao comum como hoje, o que aprendi na epocas, foi atraves de livros, pouco atraves da internet. O que me fez, acho, um programador com meu proprio estilo; duvido que outras podem compreender muito dos meus programas - o que e ruim! - mas acho isto um fato que nao se altera mais. Qual a conclusao? Tenho a necessidade de comunicar meus pensamentos sobre programacao, conversar, discutir sobre programacao - sem necessariamente entrar em discussoes religiosas: meu Debian e O melhor; nao, meu Perl e a melhor linguagen. Como -Larry (acho que foi ele) mesmo diz: 'Um verdadeiro programador da conta de fazer codigo aparecido com assembler em qualquer linguagem'.
Entao vamos a minha 'inspiracao'.... Faraohh estav tentando me convencer de usar frameworks, um conceito que sempre evitei, pois o meu 'vou criar um Perl em C++' persiste ate hoje. Nao me interessa tanto usar um framework, como me interessa como as caras fez isso... (so como um exemplo, estes dias estou implementando animacoes geometricas - ali a volta pra C/C++ - implementando tudo; usar Blender, Inkscape and the likes e para os outros (meninos). E sendo professor universitario POSSO fazer isto!). Isto e mais um motivo para meu estilo inortodoxo.
Por muito tempo tampouco queria saber de Bancos de Dados; tese central era que BDs sao para MUITOS dados. Sou da geracao que abrir e parsar (parse) um arquivo e de boa, cara, aprendi fazer isto em C; vai nessa pra quem quer quebrar cabeca. Entao, fiquei cabeca duro de novo, pra provar minha tese, implementei o SAdE (Sistema Administrativo Escolar) que rodou 5 anos na FAI, 4 na UEG em Ipora e agora esta no seu 3o ano na Secretaria de Educacao. Todos os dados em arquivos (tipo CSV, mas separados por \t).
Depois de muita luta, me convenci usar BDs (acho que alguem me provocou que nao daria conta...). Vendo os PHPs dos meninos de Ipora (uaaaaad), com HTML e PHP tudo misturado, nomes de variaveis GET/POST all over the place (tudo pra comunicar com o BD), pensei: deve ser possivel eliminar isto. Senao, estou fora desse...
Ae um dia, alguem me monstrou PHPMyAdmin; este me deu um luz. Sendo feito para o tipo admin, pensei: imagina uma interface geral assim, mas voltado para o usuario (leigo). Implementei isso em Perl - ja ate palestrei alguns vezes sobre isso), porem principalmente vendo somente uma tabela do banco, com alguns mas poucas possibilidades de definir relacoes entre tabelas diferentes (o deficil, um nivel acima). Tabela - tabelas.
Singular vs plural. Assim tambem numa tabela so; algumas colunas de dados e linhas por cada item; item vc itens. Criei assim uma interface com estes dois modos. No inicio queria um objeto pra cada item, porem tantos objetos em Perl fica muito lento. Assim criei o objeto Tabela dual: dependendo do contexto, funcionava singularmente (um item) ou pluralmente (varios itens). Os dados especificando as colunas, deixei gravado em arquivos (nome da chave, titulo da chave, def sql, etc..). De fato dividi as funcoes 'core' da classe Tabela em 3:
1: Setup - def das colunas, dados globais (dia de inicio, endereco da empresa, etc, etc). Edicao dos dados - e atualizacao dinamics das colunas da tabela (por ex. defini uma nova coluna no arquivos Tabela ja criava a coluna, criava a tabela inteira se for necessario).
2: Singular: Funcoes Show, Mostrar, Imprimir (alias sempre uso Latex para imprimir) - e Copiar (depois de ver as caras cadastrar livros na biblioteca, inventei esta).
3: Plural: Mostrar em Lista, Editar em Lista, Pesquisar, Pesquisar com Edicao dos itens encontradas, Imprimir em Lista, Pesquisar para Impressao.
Conformando as necessidades, comencei implementar certos variaveis especiais, por exemplo: Sum Vars (vars que somam sempre que demostra, adiciona uma linha total embaixo. SplitVars - que divide os itens em partes distintos, por ex clientes ativos, inativos, etc. DerivedVars, vars que precisam juntar varios dados individuais, ou ate ler dados em outras tabelas (SqlDerivedVars)
Bom, ano passado, o povo da UFG me encarou com PHP. Os primeiros programas (cadastro pra mestrado, incluindo profs. avaliadores tudo informatizado). Nao tinha tempo reimplementar tudo o objeto Tabela em PHP, os programas funcionam, mas sao uma merda! Continuando a necessidade de fazer PHP, uns tempos atras, me pois a esta tarefa transicional. (Caras, agredita em mim, vale a pena reescrever seu codigo de 'scratch', agiliza tantas coisas, muitas vezes diminui o codigo uns 30-40% e augmenta legibilidade muito mas - os legisladores devia descubrir isto tambem!).
Reescrevendo em PHP, tinha que modificar algumas coisas. PHP parece que nao permite - como Perl - dividir classes em varios arquivos. E mais, enforca organizar suas classes linearmente - 'one-string, quer dizer: uma classe pode herar somente uma classe (claro com seus subclasses). Desacostumado com isto, te faz apanahar!!! Entao, dividi em poucos classes e implementei. De longe esta implementacao e completa como o que fez em Perl (gastei mais do que um ano a versao Perl).
Ali chegou o Faraoooohhhhhhh, a palavra que ele diz ouvi tantas vezes, mais quanto ele estava falando em Frameworks, eu estava somente pensando nela. A palavra era simplesmente: camadas (gggg - ja dei ate aulas de rede, sem ter esse inspiracao!!!). Aliiiiii. Esses dias estou inspirado (e tinha que dividir isto com alguem que entende, vcs foram as vitimas...).
Por enquanto estou trabalahando com a seguinte hierarquia (downside-up):
- HTML: produz HTML, nao dou conta de conformar com as funcoes prefeitos
- CGI: Ler os GET & POST & COOKIES, etc. Escreve headers, ler e escreve html references, etc.
- AppTabela 1: Mexe com a disponibilizacao das funcoes setup/sing/plur acima.
- MySql: Estabelece sessao e comunica com o banco
- Login (authetication): Estabelece a sessao com os usuarios (usuarios em uma tabela separada). Tipos: Admin, Person, Public.
- Data: Define dados sobre os dados da tabela (colname, titulo, msqldef, especificos de HTML (Latex, veja depois), e permissoes.
As permissoes baseam-se em colunas na tabela - supostamente ID de usuarios - que podem ver, resp. escrever.
- Access (authorization): Permissoes no nivel de 'Funcoes core': Quem pode Show, Edit, etc - e enforcar o acesso no nivel de dados (anterior).
- Item: Implementa os necessarios por cada Item (Show, EditForm, Print, etc).
- Itens: Implementar os necessarios por varios Itens (ShowList, EditList, Pesquisar, Relatorios (versao imprimivel de pesquisar)
- Tabela: Junta todos acima numa interface, permitindo o usuario navegar entre as rutinas acima.
- Application: Junta varios os varios objetos (um pra cada tabela) numa interface via um menu de navegacao.
So pra ver minha frustracao: Queria produzir output Latex (ou seja: escrever minha tabela ou outra coisa pra um arquivo .tex, rodar pdflatex, e jogar o pdf resultante na cara da usuaria), assim preciso uma camada Latex. Filosoficalmente, qm e no nivel mais baixo, HTML ou Latex? E pq eu preciso me precupar com isso? Queira tambem, as vezes, producir texto pura, por ex num terminal.
Mais estou progredindo bastante estes dias, ja estou reescrevendo - de novo - Tabela1 em PHP, sendo agora Tabela2. E ja tenho uma aplicacao rodando usando Tabela1, SPC1, Sistema de Programa de Curso, todos os professores do IME (quais) estao cadastrando e publicando seus planos de ensino neste sistema. SPC2, pra semestre que vem, sera mais bacana ainda!
Entao, gente, era so isso. Espero que voces nao acharam muito chato - e que da pra entender!!!
Ole
--
########################################
Quem Leva Brincadeira somente por Brincadeira
E Sério somente Sério
De Fato Desentendeu Ambos - Piet Hein
########################################
Ole Peter Smith, IME, UFG
http://www.mat.ufg.br - ole at
mat.ufg.br
######################################
Live sure is a Mystery to be Lived
Not a Problem to be Solved
######################################