Warning: this is an htmlized version!
The original is across this link,
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.
#
# 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:               raw-text-unix
#  ee-delimiter-hash:    "\n#*\n"
#  ee-delimiter-percent: "\n%*\n"
#  ee-anchor-format:     "«%s»"
#  End: