Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
####### # # E-scripts on "Projeto" - my project with Ramiro Dulcich. # # Note 1: use the eev command (defined in eev.el) and the # ee alias (in my .zshrc) to execute parts of this file. # Executing this file as a whole makes no sense. # An introduction to eev can be found here: # # (find-eev-quick-intro) # http://angg.twu.net/eev-intros/find-eev-quick-intro.html # # Note 2: be VERY careful and make sure you understand what # you're doing. # # Note 3: If you use a shell other than zsh things like |& # and the for loops may not work. # # Note 4: I always run as root. # # Note 5: some parts are too old and don't work anymore. Some # never worked. # # Note 6: the definitions for the find-xxxfile commands are on my # .emacs. # # Note 7: if you see a strange command check my .zshrc -- it may # be defined there as a function or an alias. # # Note 8: the sections without dates are always older than the # sections with dates. # # This file is at <http://angg.twu.net/e/projeto.e> # or at <http://angg.twu.net/e/projeto.e.html>. # See also <http://angg.twu.net/emacs.html>, # <http://angg.twu.net/.emacs[.html]>, # <http://angg.twu.net/.zshrc[.html]>, # <http://angg.twu.net/escripts.html>, # and <http://angg.twu.net/>. # ####### # «.bd-sem-bd» (to "bd-sem-bd") # «.preliminar-1» (to "preliminar-1") # «.upload» (to "upload") ##### # # e-mail (enviado pro computacaopuro101) # 2010aug17 # ##### # «bd-sem-bd» (to ".bd-sem-bd") Date: Tue, Aug 17, 2010 at 4:41 PM Subj: Projeto: BD sem BD Oi... Esse grupo ainda existe? É o seguinte: O Ramiro, professor do departamento de Serviço Social, tem um projeto de catalogar todas as instituições da região que aceitam estágiarios do curso de Serviço Social, e depois estender isto pra transformar num catálogo de todos os serviços de atendimento à população... Esse projeto inclui uma bolsa pra um aluno da Ciência de Computação, que cuidaria de montar um sisteminha com um banco de dados e uma interface web... Pois bem. Esse projeto já está rolando há alguns meses, eles já tem os dados de uns 100 serviços e de não sei quantos estagiários - tudo isso em planilhas em BrOffice -, e a aluna de CC que cuidava do tal sisteminha chegou a fazer o início de uma interface web chique, mas aí ela foi contratada pela Petrobrás e largou tudo pelo meio... O Ramiro tentou conseguir alguém mais de CC pro continuar o que ela tinha feito, mas todos os alunos que já terminaram matérias como Bancos de Dados já estão ocupados... Eu falei pro Ramiro que eu achava que seria muito mais prático a gente começar com algo que seria exatamente o oposto de uma interface web chique, com cara de coisa séria, profissional e moderna... que num primeiro momento uma solução puramente textual ("The Unix Way") seria muito mais prática. Eu propus que a gente começasse pegando uns poucos exemplos de serviços que ele já tem nas planilhas dele, e criasse um "banco de dados" (entre aspas, sim) com eles numa linguagem de programação do modo mais primitivo possível, como isto aqui (este exemplo está em Lua): -- A lista de servicos vai ter um monte de estruturas como esta servico = { nome = "Casa da Mulher", telefone = "2345-6789", endereco = "Rua Fulano de Tal, 42, Centro", cidade = "Rio das Ostras", responsavel = "Beltrano Silva", cargo = "Supervisor", horarios = "2as de 14 as 18, 4as de 10 as 12", projetos = { { nome = "Oficina de Violencia Domestica" }, { nome = "Saude da Mulher" }, }, dependencia = "Estadual", } -- Imprime PP(servico) PP(servico.nome) PP(servico.projetos) -- Registra servicos = {} table.insert(servicos, servico) A partir do momento que a gente tem os serviços registrados nesse formato fica bem fácil gerar todos os tipos de listagens que ele pode querer pra imprimir e disponibilizar na web - e também fica fácil gerar automaticamente código SQL com os dados de cada serviço pra exportar os dados pra um banco de dados "sério", ou o código Python ou Ruby que reconstrói essas estruturas em Python ou Ruby, ou algum output em HTML... Pra resumir: a minha proposta pro Ramiro era mudar o papel do aluno de CC no projeto dele: ao invés desse aluno trabalhar só com bancos de dados e interfaces web - o que me parece tedioso e com cara de coisa de curso técnico - ele trabalharia com interfaces textuais improvisadas, nas quais os "bancos de dados" seriam criados por comandos em linguagens como Lua, Awk, Python, Ruby etc, e criaria código pra transformar esses dados de mil modos, e os programas que fossem feitos pra transformar esses dados ficariam disponíveis na rede, e facilitariam o trabalho das próximas pessoas que viessem a se envolver com o projeto... E se o projeto for feito dessa forma aí eu viro uma espécie de co-orientador. Alguém se interessa? Posso dar mais detalhes ao vivo... [[]], Eduardo Ochs eduardoochs@gmail.com http://angg.twu.net/ P.S.: Jon Bentley: "Little Languages" (CACM version) http://classes.eclab.byu.edu/330/docs/p711-bentley.pdf Aho/Weinberger/Kernighan: "The Awk Programming Language" http://www.amazon.com/AWK-Programming-Language-Alfred-Aho/dp/020107981X/ (a biblioteca não tem esse, e não encontrei pra download) Obs: em 21/dez/2010 eu enviei um e-mail pro Ramiro e pro Daniel pedindo pra eu me desligar do projeto. ##### # # Versão preliminar 1 # 2010dec21 # ##### # «preliminar-1» (to ".preliminar-1") # (find-angg ".emacs" "projeto") * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) -- (find-fline "~/PROJETO/") -- (find-fline "~/PROJETO/dados_bd.lua") fields, records_short = ee_dofile "~/PROJETO/dados_bd.lua" ult_at = [[ -- Campos de estagio de Servico Social perto de Rio das Ostras - -- Versao muito preliminar! -- Para mais informacoes sobre estas listagens veja: -- http://projeto.twu.net/ -- Ultimas atualizacoes: -- 13/nov/2010 (banco de dados) -- 21/dez/2010 (esta pagina) ]] namify1 = function (record) local T = {} for i=1,#fields do T[fields[i]] = record[i] end return T end numberify1 = function (record) local T = {} for i=1,#fields do T[i] = record(fields[i]) end return T end records_long = map(namify1, records_short) -- PP(records_long) transpose = function (T) local T2 = {} for k,v in pairs(T) do T2[v] = k end return T2 end gather = function (T, f) local T2 = {} local v for i,v in ipairs(T) do if f then v = f(i) else v = T2[i] end T2[v] = T2[v] or {} tinsert(T2[v], i) end return T2 end PP(fields) tolong1 = function (record) local T = {} for i=1,#fields do tinsert(T, format("%-17s= %q", fields[i], record[i])) end return T end tolong2 = function (record) return "{ " .. concat(tolong1(record), ",\n ") .. "\n}" end tolong3 = function (n) return "-- " .. n .. "\n" .. tolong2(records_short[n]) end tolong4 = function () return mapconcat(tolong3, seq(1, #records_short), ",\n\n") end print(tolong4()) formatq = function (o) return format("%q", o) end toshort1 = function (record) return "{" .. mapconcat(formatq, record, ", ") .. "}" end toshort2 = function () return mapconcat(toshort1, records_short, ",\n") end to_unix = function (str) return string.gsub(str, "\r", "") end to_dos = function (str) return string.gsub(to_unix(str), "\n", "\r\n") end print(toshort2()) writefile("/tmp/db_long.txt", to_dos(ult_at .. tolong4())) writefile("/tmp/db_short.txt", to_dos(ult_at .. toshort2())) -- (find-fline "/tmp/db_long.txt") -- (find-fline "/tmp/db_short.txt") PP (tolong1(records_short[1])) print(tolong2(records_short[1])) print(mapconcat(tolong3, seq(1, #records_short), ",\n\n")) -- Pra separar por cidades: PP(gather(records_long, function (i) return records_long[i].Cidade end)) = #fields = #T[1] ##### # # upload # 2010dec21 # ##### # «upload» (to ".upload") * (eepitch-eshell) * (eepitch-kill) * (eepitch-eshell) cd /tmp/ ls -lAF echo (ee-projetopfile "") cp -v db_long.txt db_short.txt (ee-projetopfile "") # (find-projetopfile "") # http://projeto.twu.net/ # http://projeto.twu.net/db_long.txt # http://projeto.twu.net/db_short.txt # Local Variables: # coding: utf-8-unix # End: