<body>

Sitios web relacionados: PingBlog | Fotos

domingo, julio 16, 2006

Santaines, Maisanta y El Tato: No es lo único que se puede comprar en los buhoneros

Darth Tato Magazine
Nueva edición de Darth-Tato, ahora en Internet


Hay temas que son recurrentes y es debido a que hay gente los hace así; En vez de dejar un asunto quieto y moverse en otra dirección con sus vidas (normalmente hacia adelante) deciden hacerlo en circulos. No se puede hacer mucho en esos casos...

Por ejemplo, El "Tato" aún anda haciendo propaganda de su lista por la Internet. Repite una y otra vez que su base de datos no cuenta con duplicados , pero lo importante aquí es que el (ni nadie) tiene derecho de hacer persecución politica tal cual y como Luis Tascón logró al publicar la famosa lista o cuando otros sitios web comenzaron a distribuir a "Saintaines / Maisanta"

Maisanta, El Tato y otras listas simplemente son deplorables ya que violan la libertad de expresión, el derecho a disentir y la privacidad de quienes aparecen en ella. Chavistas y Opositores han pagado el precio de aparecer en ellas, mientras que los verdaderos actores de este desastre aún andan haciendo de las suyas.

¿Pero y a quien le importa?

Debería importarle a usted, ya que hay más información en la calle, al alcance de cualquiera, de la que debería:

Su privacidad en Venezuela
Usted puede adquirir todas estas listas, incluyendo a las del tato y maisanta en la estación del metro de la ciudad universitaria. El hecho de que la tengan allí significa que todo el mundo las tiene...


El Tato ofrece su lista "gratis" desde su página web, mientras que la de Maisanta podía ser adquirida por el sitio web de Mercado Libre o bajada de ciertos sitios en Internet. Pero todo el mundo sabe que esa no es la vía más fácil de conseguir esa información: A la salida del metro de la Ciudad Universitaria en Caracas usted puede conseguir (por un precio que oscila entre $1 y $5) las siguientes listas:
  • Antigua Diex (identificación de cada individuo, cedulas de identidad)
  • La nueva Onidex (identificación de cada individuo, cedulas de identidad)
  • Seguro social (cuanto dinero gana al año)
  • Tascón / Maisanta (intención de voto en el referendum presidencial Venezolano)
  • Tato (lista de Maisanta filtrada sólo para Chavistas, con información de antecedentes penales)
  • Setra (información de registro de vehiculos)
  • Seniat (Impuestos)
  • Movilnet (Compañia de telefonos)
  • Telcel (Compañia de telefonos)
  • Digitel (Compañia de telefonos)
Esto significa que con menos de Bs. 100000 (aproximadamente $45), usted puede adquirir una gran cantidad de información sobre sus vecinos. Por supuesto esta información:
  • No puede ser validada
  • Puede contener código que puede dañar su computadora
  • Puede que no funcione en lo absoluto ; Recuerde, son CDs piratas así que olvidese de control de calidad. Si perdonen la ironia ;)
En las manos equivocadas puede ser utilizada para:
  • Discriminar a la hora de solicitar servicios o trabajo (esto ocurre en la actualidad)
  • Extorsión
  • Secuestro Express
  • Robos
Y mejor paro de escribir. Todas las instituciones mencionadas arriba aparentemente tienen un control pobre sobre la información que manejan y aparentemente nuestro sistema no posee los mecanismos para penalizar a quienes distribuyen y hacen negocio con información robada.

Pero de nuevo hablemos del Tato. En los foros de CANTV.net me conseguí que un anonimo (como sobran) apodado "programador" escribió lo siguiente:
"El que critique la lista de el tato es que o no conoce la lista tascon, o nunca la han usado contra esa persona o contra uno de los suyos. Y creo que deben haber pocos afortunados."
Quisiera decir que "Programador" tiene razón, pero no es así. Familia y amigos si salieron afectados por la existencia de estas listas y es por eso que la existencia de cualquier lista es deplorable. Todos los Venezolanos conocen la lista de Tascón y es por eso que extraña que todavía hayan personas que piensen que otra lista (como la del Tato) es una buena idea.

NOTA: Como siempre sus comentarios y críticas constructivas son bienvenidas. Comentarios anonimos serán rechazados de inmediato. Tampoco me pidan copias de estas bases de datos pués no las tengo en mi poder (aunque usted no lo crea) así como tampoco puedo revizar si usted sale allí. Lo que si puedo decirle es que cualquier buhonero puede conseguirle una copia, más fácil de lo que usted cree.

Buscar en Technorati: , ,
Buscar en Blogalaxia: , ,

Etiquetas: , , , ,

sábado, abril 29, 2006

La legalización de la ilegalidad: Más sobre el tato y un poco de Barra Punto

eltato
El Tato continua


Después de pensarlo mucho, decidí poner un comentario en BarraPunto, hablando acerca de los últimos eventos relacionados con la Lista de Tascón.

Creo que no valió la pena, ya que enseguida los comentarios que llovieron fueron casi todos:
  • Anonimos
  • Poco articulados
  • Algunos ofensivos
Pero ninguno ofreció respuestas a la pregunta original, que era que hacer para que este tipo de cosas no se repita. Por otro lado ya me lo esperaba y creanme no ando en la busqueda de un mesias para la solución de este problema (y menos en un blog en Internet). En fin, fué un experimento interesante :)

Ahora, volviendo a la lista de el Tato, encontré lo siguiente:
  • La lista maisanta original tiene 1531177 (2423094 registros contando los duplicados), mientras que la de el Tato 1529611 (1531174 registros contando los duplicados). Supongo que 1566 Chavistas se salvaron de ser incluidos (sip "select count(distinct cedula) from patriot" no miente :)). De modo que la lista de el tato también tiene duplicados.
  • La lista pareciera no tener muchas diferencias. Haciendo un "select a.nombre, b.nombre, a.direccion, b.direccion, a.fecha_nac, b.fecha_nac, a.opositor, b.description from rep a, eltato b where a.cedula = b.cedula" y comparando lado a lado se nota que la lista original ya tenia esta información, excepto el campo description. En pocas palabras la lista de El Tato es solo un filtro de la lista de Maisanta pero con los Chavistas.
  • ¿La información es correcta? No lo es. hay varios "Chavistas" que tienen el campo "opositor" activado (valor=1), para un total de 36902, 2.4% (select count(a.nombre) from rep a, eltato b where a.cedula = b.cedula and a.opositor = 1). Es decir, los datos nunca estuvieron correctos desde el principio en la lista de Maisanta, el peligro de discriminar a Chavistas y Opositores con datos incompletos...
  • ¿Y cuanta información tiene el campo description? No mucha. Haciendo un "select distinct description from eltato" se ve que sólo tiene la palabra "APARECE EN EL CICPC" y que 33645 de los1531174 (2.10%) simplemente tienen el campo con el valor "null" (select count(*) from eltato where description is not null)
  • ¿Gente falsamente acusada de tener antecedentes penales?: "select count(a.nombre) from rep a, eltato b where a.cedula = b.cedula and a.opositor = 1 and b.description is not null" nos da un total de 36902 (2.4%).
En conclusión: La lista de el Tato es la misma lista Maisanta, excepto que tiene menos información (sólo Chavistas con cierta información extra) y 2.10% de ellos tienen antecedentes penales. De allí otro porcentaje tiene información en conflicto (Chavistas marcados como opositores, 2,4%) lo cual simplemente dice que ambas listas son inútiles y lo único que hacen es causar problemas.

Pero usted es inteligente y ya sabia eso, ¿no es así?

Buscar en Technorati: , , , ,
Buscar en Blogalaxia: , , , ,

Etiquetas: , , , ,

domingo, abril 23, 2006

La legalización de la ilegalidad: El Tato publica una lista, basada en la de Tascón

eltato
Instalando la lista de el Tato en Fedora Core 4. La instalación corrió, pero después no funcionó


Ya no sólo basta que la lista esté en mercado libre (y que aún no la hayan quitado) sino que además ahora un desarrollador denominado "El Tato" ofrece una versión modificada, pero sólo con los Chavistas.

En este y en un próximo articulo me voy a enfocar en los aspectos técnicos de la misma, tal y como lo hice con la lista original de Maisanta Santaines. Sin embargo debo decir las siguientes cosas:
  • El Tato está jugando el mismo juego de los Chavistas. Ojo por ojo y diente por diente. La gente no aprende a que al hacer este tipo de cosas lo que hacen es perpetuar el conflicto. Por otro lado, ya está en Internet, no hay ningún esfuerzo por parte de el gobierno o la oposición para evitar legalmente que se continue propagando asi que que carajo...
  • El Tato también esta violando la ley. Esa información no es dominio público, el no consultó con ese millón de personas antes de publicarla (al igual que quien hizo Maisanta). Pero de nuevo, la idea es que ambos bandos den golpes por debajo del cinturón así que hablar de un código ético aquí es risible.
Habiendo dicho esto, vamos a disecar el programa "La lista de Tato".

El programa es muy similar a Maisanta; Este tiene una base de datos llamada "Chavistas.dbf" y desgraciadamente no corre bien con Wine (al menos al primer intento, cosa que no ocurre con Maisanta). Tiene un ejecutable (ELTATO.EXE) el cual después de revizar con "strings ELTATO.EXE" me mostro lo siguiente:
WATCOM C Run-Time system code is provided on an "as is" basis and is (c) Copyright by WATCOM Systems Inc. 1988, 1989, 1990. All rights reserved
Copyright (C) 1986-1991 Phar Lap Software, Inc.
ndice tipo dBASE III - regener
Haga sus comentarios o sugerencias 24 horas al d
FoxPro Product Support fuera de Estados Unidos:
Consulte la caja del producto para obtener informaci
acerca del n
mero de tel
fono de su subsidiaria Microsoft.
Un programa escrito en Foxpro para Windows, igual que Maisanta pero con la diferencia de que Maisanta si corre bajo Linux usando Wine :)

Usando el código que escribí anteriormente (sip, es lo suficientemente generico) me puse a sacar el contenido de la lista a un archivo de texto en formato CSV:
[josevnz@localhost ~]$ java -classpath $HOME/sf/kodegeek/dist/SantaInes/SantaInes-1.0.jar:$HOME/jars/javadbf-0.4.0.jar:. com.kodegeek.blog.santaines.ExportSantaInesTables /home/josevnz/.wine/drive_c/Program\ Files/ElTaTo/Chavista.dbf > $HOME/temp/eltato.csv
¿Y cuantos "patriotas" en la lista?:
[josevnz@localhost ~]$ wc -l /home/josevnz/tmp/eltato.csv
1531174 /home/josevnz/tmp/eltato.csv

Y el siguiente paso fué importarlo en PostgreSQL. El esquema parece sencillo, lo resolví de esta manera:
-- "ElTato" is a cleanup effort on the Internet to fill the gaps on the PATRIOT table
CREATE TABLE ELTATO (
CEDULA BIGINT,
NOMBRE VARCHAR(100),
DIRECCION VARCHAR(255),
FECHA_NAC DATE NULL,
DIRECCION VARCHAR(255)
);
Y la importación hacia PostgreSQL:
santaines=# \copy ELTATO from '/home/josevnz/tmp/eltato.csv' with delimiter '@' null as 'null'
santaines=# select count(*) from ELTATO;
count
---------
1531174
(1 row)

En un próximo articulo les mostraré algunas cosas que descubrí en la nueva lista. Por ahora pueden revizar los cambios en CVS.

Buscar en Technorati: , , , ,
Buscar en Blogalaxia: , , , ,

Etiquetas: , , , ,

jueves, marzo 30, 2006

La legalización de la ilegalidad: Mercado Libre permite vender la Lista de Tascón por Internet

maisanta
Haciendo leña de el arbol caido


No salgo de mi asombro ante los pocos escrupulos que tiene la gente; Después de leer el articulo escrito por Topocho me encuentro conque un criminal está vendiendo la lista de Tascón por Internet, nada menos que por 10.000 Bs.

Este individuo (y quienes le compran el programa) están cometiendo al menos los siguientes delitos (usted adorne y adorne las palabras como mejor le parezca, yo sólo soy un pobre Ingeniero tratando de explicar):
  • Está vendiendo información que no le pertenece (el no la recolectó), así como el tampoco escribió el software (y aunque fuera Open Source estaría en violación de cualquier licencia ya que no puedes vender algo que no es tuyo).
  • Está violando la libertad de expresión y derecho de anonimato de millones de personas. La lista contiene 12 millones de entradas, al menos de cada una de las personas que ha participado en el proceso electoral de los últimos 10 años.
  • Se está aprovechando del clima de malestar politico existente en el país, sin importar quienes caigan en el proceso.
Esta era una de las cosas que me estaba esperando cuando escribí el articulo inicial, unos meses atrás. Si bien no creo que sea el primero (ni el último) espero por lo menos ver que Mercado Libre se muestre como una empresa responsable y cierre la cuenta de este estafador.

Esta fué la respuesta que obtuve a mi denuncia (hoy se cumple un día de haber mandado el correo):

From: crm.ml@mercadolibre.com
To: miemail :)
Subject: ¡Gracias por reportarnos un artículo!
Date: Wed, 29 Mar 2006 18:36:36 -0500 (EST)

Gracias por reportarnos este artículo. Nuestro equipo de Comunidad Segura estará investigando este caso a la brevedad y tomará las medidas correspondientes. Te agradecemos el esfuerzo que haces para ayudarnos a mantener una comunidad segura para comprar y vender.

Si tienes interés en conocer más sobre las Políticas de Publicación de Artículos de MercadoLibre te invitamos a que visites las páginas de Ayuda.


Si realmente tienen ganas de ayudar, escriban a Mercado Libre quejandose de este abusador para que su mercancia sea removida. La delicuencia y la negligencia van de la mano, no permita que esta práctica se salga de control.

Etiquetas: , , , ,

miércoles, marzo 08, 2006

¿Somos menos importantes Venezolanos los que vivimos en el exterior?: Si según Sicilia

Sicilia no sabe lo que es el buen trato a sus visitantes

Hay un dicho muy cierto: "A caballo regalado no se le miran los dientes"; La otra cara de la moneda también es cierta: "you get what you paid for".

¿Así que porqué debería sorprenderme lo siguiente?:

Lamentamos mucho que no pueda seguir estando en la Valla desde hoy.
La Valla es solo para sitios de personas residenciadas en Venezuela.
Detectamos revisando sus textos con Google que ud. reside en el
exterior.
Hemos pasado sus datos a un listado de gente que está en su misma
situación, es decir, que no pueden firgurar en la Valla porque residen
en el exterior.
Le mantendremos informado si las normas cambian y podemos albergarlo de
nuevo.

Fue un placer tenerle. Gracias por su interés.

El Equipo de El proyecto Sicilia

PD. Si se muda de vuelta a Venezuela necesitaremos una gran cantidad
de pruebas de ello. No lo intente si de verdad no se va a residenciar
en el país de nuevo porque igual
saldría de la Valla tarde o temprano.

"Sicilia Carlos"
Vaya. Realmente no recuerdo haber leido cuando me incribí que el sitio web era sólo para residenciados en el país lo cual me hubiera ahorrado el trabajo de preparar el logotipo (y al señor Sicilia y sus asociados de inscribir el sitio en su página). Siempre sobras las excusas pero no fué mi intención contradecir las reglas establecidas para poder ser listado y me disculpo por las molestias causadas.

Ahora bien, la "aclaratoria" de el correo enviado por Sicilia es ofensiva y ridicula. Les voy a explicar porqué:

  • La mayor parte de el tráfico que viene a mi Blog es por búsquedas en Google (%68), otro %10.23 viene directamente (bookmarks, RSS readers), Veneblogs con %5, La Cara Obscura de El Software con %1. Indeterminados suma casí todo el total, lo cual le deja a Sicilia menos de el %1.
  • La valla de Sicilia no es fácil de navegar y carga muy lento. Debido a que carga múltiples imagenes de logotipos pequeños estos hacen que el tiempo de carga se incremente, y la mejor forma de escoger un sitio web es por medio de la leyenda de texto (etiqueta "alt" de las imagenes) y una clasificación que recibes cuando la inscribes.
  • No es claro si las personas que van a pagar van a recibir un trato preferencial sobre los que no, así como si el costo va a estar basado en "clicks" o será una tarifa plana. Sin embargo si el tráfico de este sitio web es bajo (considerando que solamente gente dentro de el país podra anunciar en él) entonces una tarifa plana no es conveniente (ojo, todo este punto es pura especulación en este momento ya que los planes formales de cobro no han sido anunciados, lo cual es otro inconveniente).

Todo lo anterior indica que sale mejor hacer una buena escogencia de palabras clave para tener referencias en Technorati o Google, y si lo que se quiere es aumentar el ranking entonces se paga Google Ads (las reglas están bien definidas, se paga por click y es una institución global, sin discriminaciones por nacionalidad).

Me da mucha risa el hecho de ser discriminado por donde vivo (por las razones que no pienso ventilar en Internet ;)) y ahora, además de la Lista de Luis Tascón me tengo que preocupar por la lista de Sicilia :D

Si, el concepto de tener que probar que de verdad estoy en el país me quita el sueño...

Así que señor Sicilia, suerte en su proyecto cinematográfico y en su valla virtual.

Buscar en Technorati: , ,, ,

Etiquetas: , , , ,

lunes, enero 02, 2006

¿Como bajarse la lista de Tascón por Internet? (VI)

Finalmente, algunas estadísticas de interés sobre la base de datos. Ya anteriormente les mostraba como extraer la información de la base de datos.

Algunos hechos interesantes:
  • Número de abstencionistas: 3534950 (%28)
  • Número de firmas invalidas: 2182735 (%17)
  • Número de personas fallecidas hasta el 2004, inscritas en el rep: 93327 (%0.008)
  • Total de registrados en la base de datos: 12394109
Por ejemplo, esta es la información que está en la base de datos relacionada con el referendum revocatorio:

























sinovotantesestado
110504044451494AMAZONAS
37645149056186701VARGAS
13502935930709EMBAJADA
93816298972370AMACURO
67176151369218545NVA ESPARTA
30516114158144674COJEDES
43637149131192768APURE
65726269388335114GUARICO
106757261892368649MONAGAS
81782193493275275YARACUY
60039244794304833BARINAS
164189612507776696ARAGUA
276913675659952572CARABOBO
115252278791394043MERIDA
169264455771625035ANZOATEGUI
78192266939345131TRUJILLO
114022450697564719BOLIVAR
120361326659447020FALCON
75795367456443251SUCRE
148485390308538793TACHIRA
67141302897370038PORTUGUESA
183048589172772220LARA
3188299485581267387DTTO. CAPITAL
4195158843311303846MIRANDA
4401129721141412226ZULIA
Sin embargo no todos los datos tenían sentido; Buscando sin mucho esfuerzo me encontré con las siguientes cosas:
  • La persona más vieja en el registro nació en 1828-09-21, ¿178 años?
  • La persona más joven en el registro nació en 1990-11-21, ¿16 años?
  • Fallecidos y con firma valida en la base de datos rep: 6397 (¿estos votaron?)
  • Fallecidos y abstencionistas en la base de datos rep: 52123 (¿Murieron tantos en ese periodo?)
  • Número de votantes sin una dirección (sin contar direcciones basura): 2131170 (¿porqúe tantos?)
Esto me pone a dudar bastante acerca de la calidad de los datos dentro de la base de datos. Lo otro que pude verificar es que mucha de la información contenida allí está desactualizada, como direcciones, telefonos entre otros. Es raro ya que esta base de datos es relativamente nueva (año 2004), al menos que sea el producto de el ensamblaje de varias bases de datos distintas.

Quizas en el futuro juegue un poco más con la base de datos, dado la gran cantidad de información que tiene; En particular me gustaría correlacionar los datos de estas tablas con otras bases de datos con indicadores economicos, educación, etc. Independientemente de sus otras implicaciones, es una forma diferente de ver al país.

Bueno, de nuevo a la realidad. Los dejo con una hoja de cálculo en formato OpenOffice Calc para que se diviertan ustedes (no tiene ninguna información que permita identificar a particulares, sólo algunos datos agregados). Sólo tiene un par de reportes agregados, pero creo que les va a interesar.

Buscar en Technorati:

Etiquetas: , , , ,

domingo, enero 01, 2006

¿Como bajarse la lista de Tascón por Internet? (IV)



Primer escrito de el 2006, pero tema viejo.

Ya algunos me han escrito en este blog que esta no es la lista de Tascón, sino otra lista que está siendo distribuida con información de quienes votaron, por quienes votaron, entre otras cosas. Tienen razón, esta tiene mucho más información.

Bueno, después de no tener tiempo para nada, al fin pude terminar de exportar la lista a un archivo CSV. El programa corrió de la siguiente manera (les coloqué un enlace a un blog interesante en donde pueden ver la opciones de el JDK. Algunas dan dolor de cabeza):
[josevnz@localhost kodegeek]$ java -cp /home/josevnz/sf/kodegeek/eclipse:/home/josevnz/sf/kodegeek/lib/javadbf-0.4.0.jar:. -server -Xms200m -Xmx300m -Xcomp com.kodegeek.blog.santaines.ExportSantaInesTables /home/josevnz/.wine/drive_c/MaiSanta/repdbf.dbf > $HOME/repdbf.txt
Y el código que hace la exportación, en este caso trivial (no optimizado, pero hace el trabajo ya que corrige un montón de problemas al exportar los datos, además de que el comando \copy de PostgreSQL es muy débil manejando errores):
   1:package com.kodegeek.blog.santaines;
2:
3:import java.io.InputStream;
4:import java.io.FileInputStream;
5:import java.io.IOException;
6:
7:import java.util.Date;
8:
9:import java.text.DecimalFormat;
10:import java.text.DateFormat;
11:import java.text.SimpleDateFormat;
12:
13:import java.util.regex.Pattern;
14:
15:import com.linuxense.javadbf.DBFReader;
16:import com.linuxense.javadbf.DBFField;
17:import com.linuxense.javadbf.DBFException;
18:
19:/**
20: * This programs prints the contents of the 'Santaines'
DBF
file as a CSV file
21: * You can load the resulting files like this (use the
proper paths):
22: * \copy centros from '/home/josevnz/centros.txt' with delimiter '@' null as 'null'
23: *
24: * This app is not optimized, but it will let you to export
the
data from the DBF files
25: * on a reasonable amount of times, without too many errors.
26: * <b>License: GPL</b>
27: *
28: * @author josevnz
29: * @version 1.0 - 12/18/2005
30: */
31:public final class ExportSantaInesTables {
32:
33: private static final String FAKE_DATE = "1800-01-01";
34:
35: private static final Pattern isAfloatPattern =
Pattern.compile("\\d+\\.0");
36:
37: private static final Pattern [] unwantedChars = new Pattern[5];
38:
39: private static final DecimalFormat decform =
40: new DecimalFormat();
41:
42: private static final DecimalFormat decform2 =
43: new DecimalFormat();
44:
45: private static final DateFormat dateform =
46: new SimpleDateFormat ("yyyy-MM-dd");
47:
48: public static final String SQL_NULL = "null";
49:
50: /**
51: * Command line processing.
52: * @param args args[0], The full path of the DBF file to read
53: */
54: public static void main(String[] args) throws Exception {
55:
56: if ( ! (args != null && args.length == 1) ) {
57: throw new
IllegalArgumentException
("Provide the name of the file to process");
58: }
59:
60: unwantedChars[0] = Pattern.compile("\\p{Cntrl}");
61: unwantedChars[1] = Pattern.compile("\\P{Print}");
62: unwantedChars[2] = Pattern.compile("\uffff");
63: unwantedChars[3] = Pattern.compile("\uc722");
64: unwantedChars[4] = Pattern.compile("\\\\");
65:
66: decform.applyLocalizedPattern("#.#");
67:
68: decform2.applyLocalizedPattern("#");
69: decform2.setDecimalSeparatorAlwaysShown(false);
70: decform2.setMaximumFractionDigits(0);
71:
72: InputStream stream = null;
73: DBFReader dbf = null;
74: String csvSeparator = "@";
75:
76: if (System.getProperty("csv.separator") != null) {
77: csvSeparator = System.getProperty("csv.separator");
78: }
79:
80: try {
81: stream = new FileInputStream(args[0]);
82: dbf = new DBFReader(stream);
83: // Decide how to 'encode'
the field information while writting the CSV file
84: int fields = dbf.getFieldCount();
85: // Print a header with all the fields
86: if (System.getProperty("printHeader") != null) {
87: for (int i = 0; i < fields; i++) {
88: System.out.print(
dbf.getField(i).getName());
89: if (i < fields - 1) {
90: System.out.print(
csvSeparator);
91: }
92: }
93: System.out.println();
94: }
95:
96: // Prefetch the row types
97: byte [] types = new byte[fields];
98: for (int i = 0; i < fields; i++) {
99: types[i] = dbf.getField(i).getDataType();
100: }
101:
102: // Print the actual data
103: Object [] rows = null;
104: while ( (rows = dbf.nextRecord() ) != null) {
105: for (int i = 0; i < fields; i++) {
106: System.out.print(
107: encodeAsString(
rows[i], types[i], csvSeparator)
108: );
109: if (i < fields - 1) {
110: System.out.print(csvSeparator);
111: }
112: }
113: System.out.println();
114: }
115: } catch (DBFException dbfExp) {
116: throw dbfExp;
117: } catch (IOException ioExp) {
118: throw ioExp;
119: } finally {
120: if (stream != null) {
121: stream.close();
122: }
123: }
124:
125: }
126:
127: /**
128: * Fix the data output so PostgreSQL copy can load it. PostgreSQL
\copy
is pretty dumb...
129: * @param token
130: * @param type
131: * @param csvSeparator
132: * @return The given token as a parsed String
133: */
134: private static String encodeAsString(Object token, byte type,
String csvSeparator) {
135: String encoded = null;
136: if (token == null) {
137: return SQL_NULL;
138: }
139: switch (type) {
140: case DBFField.FIELD_TYPE_C: // Encode chars
141: encoded = ((String) token).trim().replaceAll(csvSeparator, "");
142: if (! encoded.equals("")) {
143:
144:
145: for (int i = 0; i < unwantedChars.length; i++) {
146: encoded = unwantedChars[i].
matcher
(encoded).replaceAll("");
147: }
148: } else {
149: encoded = SQL_NULL;
150: }
151: break;
152: case DBFField.FIELD_TYPE_L: // Booleans go "as is"
153: encoded = token.toString();
154: break;
155: case DBFField.FIELD_TYPE_D: // Encode date, format ISO 8601
156: if (token != null) {
157: encoded = "\"" + dateform.format( (Date) token) + "\"";
158: } else {
159: encoded = FAKE_DATE; // Fake a date
160: }
161: break;
162: case DBFField.FIELD_TYPE_N: // Field is numeric
163: /*
164: * Don't know how many decimal digits this field could
have
and the Java libray
165: * doesn't provide that information.
166: * For that reason, if it has zero decimals it will be
truncated.

167: * All the numeric fields on the Santaines database are
of the type 'numeric',
168: * so some magic is required...
169: */
170: Double number = (Double) token;
171: if (! isAfloatPattern.matcher(token.toString()).matches()) {
172: encoded = "" + decform.format(
number.floatValue()).replaceAll(",", "");
173: } else { // Truncate the floating number, print it with no ','.
174: encoded = "" + decform2.format(
number.longValue()).replaceAll(",", "");
175: }
176: break;
177: default: // We should never reach this
178: throw new IllegalStateException("Unmanaged type
found: " + type);
179: }
180: return encoded;
181: }
182:} // End of class
Una vez exportados todos los archivos, efectuamos la carga de los datos la hice utilizando el comando "copy" de PostgreSQL:
santaines=# \copy patriot from '/home/josevnz/patriota.txt' delimiters '@'
\.
santaines=# select count(*) from patriot;
count
---------
2423094
(1 row)
¿Que hay de los datos? Dado que esta base de datos va a ser de sólo lectura, estoy revizando como crear ciertos indices para optimizar el accesso. Lo otro es que tengo que sentarme un rato a escribir el código para hacer algunas preguntas, entre esas la calidad de los datos.

Ya en su momento colocaré el código en CVS, por ahora prefiero concentrame en ver que tantas cosas tiene esta lista adentro.

Buscar en Technorati:

Etiquetas: , , , ,

martes, diciembre 20, 2005

¿Como bajarse la lista de Tascón por Internet? (III)

Nada. Mi sueño mojado de trabajar directamente con los archivos .dbf no se va a dar, ya que los manejadores de JDBC que consegui son totalmente inútiles. Pero por otro lado les voy a mostrar como convertir los datos de el formato DBF a CSV y de allí los montamos en cualquier base de datos.

Lo que si conseguí fue una serie de clases en Java que (aunque con una funcionalidad muy limitada) me permitieron exportar los datos de cada archivo DBF a CVS:
java -cp /home/josevnz/sf/kodegeek/eclipse:/home/josevnz/sf/kodegeek/lib/javadbf-0.4.0.jar:. com.kodegeek.blog.santaines.ExportSantaInesTables /home/josevnz/.wine/drive_c/MaiSanta/PATRIOT.DBF > /home/josevnz/patriota.txt
En el proceso de exportación me di cuenta que la carga de datos fué hecha quizas de manera apresurada, ya que todos los campos de tipo de cadena de caracteres tenian espacios en blanco. Hubo tambien un intento de desnormalización ya que los datos de los fallecidos y votantes normales están divididos en dos tablas, pero las columnas son exactamente iguales (problemas de desempeño quizas teniendo ambos tipos juntos). Todo esto me hace pensar que los archivos DBF que vienen con la aplicación no son más que un vaciado de otra base de datos que existe en algún lado. Por ejemplo, si revizan el sitio de el diputado Luis Tascón, veran que utiliza PHP y Apache (cambió de IIS a Apache en el 2003). Dudo que detrás de esa configuración el haya tenido una base de datos Microsoft, así que quizas la base de datos original fué MySQL o quizas PostgreSQL. Eso nunca se sabrá :)

Bueno, ya está listo. Ahora ya podemos desempolvar el SQL un poco y podemos empezar a preguntar cosas sobre la lista de Tascón. Haciendo un poco de ingenieria reversa, encontramos que estas son las tablas:
-- This tables are using PostgreSQL specific syntax
-- To create the database, just to: createdb -U postgres santaines
-- And then load the tables: \copy centros from 'dir/file.txt' with delimiter ;

-- List of voting centers
CREATE TABLE CENTROS (
CENTRO INTEGER,
NOMBRE VARCHAR(52),
DIRECCION VARCHAR(150),
ESTADO VARCHAR(50),
MUNICIPIO VARCHAR(40),
PARROQUIA VARCHAR(50),
COD_EDO INTEGER,
COD_MUN INTEGER,
COD_PAR INTEGER,
CLAVE VARCHAR(7),
VOTANTES BIGINT,
NO INTEGER,
SI INTEGER,
EXTRANGE INTEGER,
NNO NUMERIC(6,2),
NSI NUMERIC(6,2)
);

-- Information about deceseaced people registered for voting (aprox. 2 Million)
-- Denormalized on purpose, it has the same fields as the 'REP' tables
CREATE TABLE FALLECID (
CEDULA BIGINT,
NACIONALI VARCHAR(10),
NOMBRE VARCHAR(41),
CENTRO INTEGER,
DIRECCION VARCHAR(151),
FECHA_NAC DATE,
OPOSITOR SMALLINT,
TELEFONO VARCHAR(13),
ABSTENCION BOOLEAN,
FIRMA_VALI BOOLEAN,
FIRMA_RECH BOOLEAN,
FALLECIDO BOOLEAN,
MISION_PAT BOOLEAN,
MISION_RIB BOOLEAN,
MISION_VUE BOOLEAN,
CONTRA_OPO BOOLEAN
);

-- List of goverment supporters. Yeah, a table with one column, poor design...
CREATE TABLE PATRIOT (
CEDULA BIGINT PRIMARY KEY
);

-- Information about voters. It doesn't include deceased people.
-- Aprox 10 million. Denormalizaed on purpose?
CREATE TABLE REP (
CEDULA BIGINT,
NACIONALI VARCHAR(10),
NOMBRE VARCHAR(41),
CENTRO INTEGER,
DIRECCION VARCHAR(150),
FECHA_NAC DATE,
OPOSITOR SMALLINT,
TELEFONO VARCHAR(13),
ABSTENCION BOOLEAN,
FIRMA_VALI BOOLEAN,
FIRMA_RECH BOOLEAN,
FALLECIDO BOOLEAN,
MISION_PAT BOOLEAN,
MISION_RIB BOOLEAN,
MISION_VUE BOOLEAN,
CONTRA_OPO BOOLEAN
);
Como puede ver, la cantidad de información es bastante detallada. Ninguna de las tablas tenía una clave compuesta. En vez de eso, utilizaron una secuencia numérica, en una columna la cual no pude exportar llamada '_row_id'. Como todo buen conjunto de datos, mucha información estaba incompleta, con formato pobre (nada que ver con la aplicación, es como los datos vienen en el mundo real).

Ya casi se me olvidaba, los indices usados en las consultas; Estos son algunos de los indices creados para agilizar las búsquedas, tal y como están en los archivos DBF:
CREATE INDEX CENTRO_IDX ON CENTROS(CENTRO);
CREATE INDEX REGION_IDX ON CENTROS(ESTADO, MUNICIPIO, PARROQUIA);
CREATE INDEX FALLECIDO_IDX ON FALLECID(CEDULA);
CREATE INDEX PATRIOT_IDX ON PATRIOT(CEDULA);
CREATE INDEX REP_IDX ON REP(CEDULA);
CREATE INDEX REPCENTRO_IDX ON REP(CENTRO);

¿Que viene después? Bueno, estoy cargando los datos, limpiandolos un poco antes de empezar a correr algunos comandos en SQL. El código (SQL y Java) lo pondré en SF.net dentro de poco, más no los datos.

Pero, por hacerlo a las patadas resulta que el programa nunca termina; Es decir, corre pero tar varias horas en escribir los contenidos de la base de datos principal. No entiendo, así que por ahora lo estoy depurando a ver en donde estoy gastando tiempo (tengo varias ideas, pero prefiero que una herramienta me muestre el desastre en toda su extensión por ahora):
java -Xrunhprof:cpu=samples,heap=all,format=a,file=santaines-profile.log -cp /home/josevnz/sf/kodegeek/eclipse:/home/josevnz/sf/kodegeek/lib/javadbf-0.4.0.jar:. com.kodegeek.blog.santaines.ExportSantaInesTables /home/josevnz/.wine/drive_c/MaiSanta/repdbf.dbf > $HOME/repdbf.txt
En fin, ya veremos como se mueve esto. Por ahora voy a terminar de exportar los datos.

Buscar en Technorati:

Etiquetas: , , , ,

jueves, diciembre 15, 2005

¿Como bajarse la lista de Tascón por Internet? (II)

Squirrel santaines
logré abrir la base de datos. No está encriptada, pero el manejador de JDBC no me ayuda mucho. Hora de pensar en métodos alternativos...


Al fin tengo algo de tiempo libre para jugar con el programa. Ya anteriormente lo habia instalado y después de examinar brevemente al programa, nos encontramos con que este fué hecho con Visual Foxpro. Después de navegar un poco por Internet, decidí bajarme un driver tipo IV para archivos .dbf y junto con mi programa de SQL favorito, Squirrell, decidí explorar la base de datos.

Como sabia que la BD es grande, decidí darle toda la memoria disponible a Squirrel:
[josevnz@localhost SQuirreL SQL Client]$ java -Xms200m -Xmx200m -jar squirrel-sql.jar
StelsDBF JDBC driver 0.9 (Beta version)


Missing mdx file:/home/josevnz/.wine/drive_c/MaiSanta/repdbf.mdx
Processing continues without mdx file
Sin embargo hay un problema con el driver, creo que trata de cargar demasiadas vainas en memoria y simplemente se tira 3 peos. Creo que la mejor estrategia a seguir es hacer un vaciado (dump) de todas las tablas para después importarlas en otra base de datos más estable, como MySQL o PostgreSQL. Al final escogí otro manejador, de la gente de HTTX y este se portó un poco mejor.

Aún mi exploración está en pañales, por lo menos ya tengo la estructura de las tablas, ahora falta ver si puedo exportar los datos a un formato más amigable.

Buscar en Technorati:

Etiquetas: , , , ,

martes, diciembre 13, 2005

¿La lista de Tascón de nuevo en Internet? (I)

Para aquellos que no siguen la politica Venezolana. La lista (llamada la lista de Luis Tascón) es la recopilación de nombres y cedulas de identidad de todas las personas que participaron en el referendo revocatorio en contra de el presidente de la Republica de Venezuela, Hugo Chavez Frías. Esta lista fué utilizada con fines nefastos (yo tengo familiares y amigos los cuales fueron chantajeados por esta), , violando así el secreto al voto. Unos dicen que no es así, otros en cambio dicen que el chantaje si ocurrió.

Yo quiero dejar atrás por un momento el lado politico de todo este asunto (ya bastante complicado de por sí) para enfocarme en el software.

Bajarselo pareciera trivial. Una periodista Venezolana (además de otros que ya han citado el programa con anterioridad) nos muestran que el programa se llama "santaines.exe". Con sólo buscar en Google y con un cliente de BitTorrent, nos podemos bajar el mencionado programa, ¿no es así?

Yo recuerdo haber usado el programa original en el sitio web de el diputado Luis Tascón. Sin embargo debo mencionar que no estaba muy entusiasmado de instalarlo, ya que entre otras cosas no hay veracidad alguna sobre quien lo distribuyó / programó originalmente o como se recolectó está información.

Pero la curiosidad pudo más, así que me decidí a jugar con él. Probé buscando con Bittorrent pero sin suerte, así que al final me lo baje de un sitio web, el cual lo tenia picado en pedazos.

Hmm. Los archivos están comprimidos y empaquetados con Rar. ¿Como lidiar con ellos en Linux?
Bueno, nos bajamos RAR (no es grátis, es Shareware) para Linux desde la página web y luego lo instalamos:
tar -tzvf rarlinux-3.5.1.tar.gz
make -f rar/makefile
Y después de eso:
[josevnz@localhost Tascon]$ ../rar/rar_static e '../*.rar'

RAR 3.51 Copyright (c) 1993-2005 Alexander Roshal 7 Oct 2005
Shareware version Type RAR -? for help

Extracting from ../MaiSanta1.10LuisTascon.part1.rar

Extracting AUTORUN.INF OK
Extracting leeme.txt OK
Extracting maisanta.ico OK
Extracting PRESENTA.pps OK
Extracting santaines.exe

Extracting from ../MaiSanta1.10LuisTascon.part2.rar

... MaiSanta1.10LuisTascon/santaines.exe

Extracting from ../MaiSanta1.10LuisTascon.part3.rar

... MaiSanta1.10LuisTascon/santaines.exe

Extracting from ../MaiSanta1.10LuisTascon.part4.rar

... MaiSanta1.10LuisTascon/santaines.exe OK
All OK
[josevnz@localhost Tascon]$ ls -lh
total 360M
-rw-rw-r-- 1 josevnz josevnz 31 Jul 20 2004 AUTORUN.INF
-rw-rw-r-- 1 josevnz josevnz 6.4K Jul 20 2004 leeme.txt
-rw-rw-r-- 1 josevnz josevnz 766 Jul 9 2004 maisanta.ico
-rw-rw-r-- 1 josevnz josevnz 5.3M Jul 20 2004 PRESENTA.pps
-rw-rw-r-- 1 josevnz josevnz 354M Jul 20 2004 santaines.exe
[josevnz@localhost Tascon]$ file santaines.exe
santaines.exe: MS-DOS executable (EXE), OS/2 or MS Windows
Bueno, ahora a estudiar un poco los programas; Desde Linux no se puede hacer mucho, al menos que trate de correr al instalador usando Wine. No estoy seguro que va a tratar de hacer este programa (no tengo el código fuente), así que correrlo dentro de un entorno más seguro como Linux no suena tan mal (y ni de vaina usando root, sólo mi usario no privilegiado). Lo otro es que una vez instalado tendré acceso a la base de datos.

Sino tiene Wine instalado, vayase al sitio web y utilice el RPM apropiado:
[root@localhost Desktop]# rpm -ihv wine-0.9.2-1fc4winehq.i686.rpm
Preparing... ########################################### [100%]
1:wine ########################################### [100%]
[root@localhost Desktop]#
No voy a describir como configurar Wine bajo Linux (el proceso en Fedora 4 es trivial). Lo que si les muestro es como instalarl santaines usando Wine:
[josevnz@localhost Tascon]$ wine santaines.exe

Instalación de el programa Santaines bajo Fedora 4
Santaines corriendo


Vaya, voy a poder disecar este programa por completo creo yo. Pero antes vamos a probar la interfaz de usuario:

Corriendo Santaines bajo Fedora 4 usando Wine
El programa corre sin problemas. Pude hacer busquedas sin ningún inconveniente


La aplicación es sólida. Corrió a una velocidad decente en mi laptop, usando Wine (lo cual es quizas más lento que correrlo bajo Windows nativo). Pero lo que me impresionó sin duda es que la base de datos es precisa hasta el más mínimo detalle. Pude comprobar los resultados por varias personas que conozco y las búsquedas me proporcionario información detallada como cedulas de identidad, fechas de nacimiento, inclinación politica y domicilio.

Las búsquedas están bien hechas y la aplicación definitivamente cumple su proposito. Es fácil de usar y el consumo de recursos es bajo. En pocas palabras, sirve su proposito.

Sin embargo no puedo dejar de pensar que cualquiera puede bajarse este programa desde Internet, y que nadie es el culpable (violación de la privacidad, libertad de expresion entre otras cosas me vienen a la mente). Vaya a saber usted como esta información puede ser (mal) utilizada, ya que está al alcance de cualquiera que tenga una conexión a Internet y una PC (no importa si es Windows o Linux como lo acabo de mostrar).

¿Que viene después? Bueno, esta versión que conseguí es vieja (06/07/2004) y quizas ya anda por allí una versión con la base de datos depurada. Lo cierto es que quiero ver que tanto tiene las base datos en bruto, para sacar de allí algunas estadísticas.

En otro articulo les mostraré que otras cosas curiosas encontré en este programa.

¿Quien dijo que el conocimiento no es poder?

Buscar en Technorati: ,

Etiquetas: , , , ,