Roberto Alsina: De San Isidro a Malta y de vuelta.

NO­TA Es­ta es la cró­ni­ca de un via­je que hi­ce en 2014, y te­nía es­cri­ta por la mi­ta­d. Ya bas­tan­te po­co es­cri­bo co­mo pa­ra en­ci­ma no pu­bli­car al­go que es­cri­bí! Así que acá va. Ter­mi­na abrup­ta­men­te, co­mo to­do.

An­tes que na­da: si quie­ren ver fo­to­s, es­tán acá si ven so­lo 3, aguan­ten que ten­go que arre­glar el plu­gin de ga­le­rias (yu­pi­i­i­i)

Es­toy sen­ta­do en el aero­puer­to de Pa­ler­mo, co­mien­do un ca­n­oli y to­man­do un ca­fe­ci­to, y no voy a de­jar que es­te via­je se me es­ca­pe ­de la me­mo­ria co­mo otro­s. Por­que nun­ca es­cri­bí los úl­ti­mos días en Lon­dres con Ro­sario, ni la es­ca­pa­da a Yo­se­mi­te con Lu­cio y Chi­pa­ca, y ser va­go no es­tá bue­no. Y por­que ten­go 5 ho­ras has­ta que sal­ga el avión y me em­bo­lo.

En­ton­ce­s... la em­pre­sa me man­dó a tra­ba­jar a Mal­ta unos día­s, y co­mo pa­sa ca­si siem­pre, hay un día de más al prin­ci­pio, un día de ­más al fi­na­l, y los pa­sa­jes son más ba­ra­tos si uno lle­ga el sá­ba­do y se va el do­min­go, así que... que hay cer­ca de Mal­ta que uno­ ­pue­da que­rer vi­si­ta­r? Bue­no, un mon­tón de co­sas, pe­ro la fa­mi­lia de mi vie­ja es ita­lia­na, y yo nun­ca pu­se ni un pie en Ita­lia has­ta ­la se­ma­na pa­sa­da. Cla­ro, es la otra pun­ta de ita­lia, ellos vi­vían en la ca­ña de la bo­ta, más o me­nos adon­de es­ta­ría el cie­rre, y ­Mal­ta que­da cer­ca de la pe­lo­ta que di­cha bo­ta es­tá pa­tean­do, Si­ci­lia.

Así que con mi fiel va­li­ji­ta en­ca­ré pa­ra Ita­lia, Ezei­za->­Ro­ma->­Pa­ler­mo­->????->­Mal­ta y vuel­ta.

El día del via­je era jus­to el 23 de ma­yo, que es el día que la es­cue­la de Ta­to te­nía ac­to, y Ta­to ha­cía de ca­ba­lle­ro co­lo­nia­l, a­sí que a las 6:30 AM es­ta­ba ha­cien­do he­bi­llas pa­ra za­pa­to con car­to­nes y pa­pel de alu­mi­nio, pe­ro lle­gó to­do a tiem­po, y es­ta­ba ­su­per ca­ba­lle­ro­so co­lo­nia­lo­so el mo­co­so.

Pe­ro cla­ro, el ac­to ter­mi­nó ti­po 9:30 y yo no te­nía ni he­cha la va­li­ja, así que co­rrí... ok, tro­té... ok, ca­mi­né tran­qui a ca­sa, hi­ce la va­li­ja y salí pa­ra Ezei­za con tiem­po, más o me­nos pa­ra lle­gar 2:30 an­tes, co­mo siem­pre.

Lle­go y la gen­te de la AFIP ha­bía de­ci­di­do que "la le­tra con san­gre en­tra" (si­c). Ha­ce me­ses que uno pue­de de­cla­rar los apa­ra­to­s ­que saca del país via in­ter­ne­t. Pe­ro na­die lo ha­cía, en­ton­ces en la ven­ta­ni­lla se ne­ga­ban a aten­der a los que no lo te­nían he­cho­. ­Pa­ra que no los lin­cha­ran, pu­sie­ron un kios­qui­to de in­ter­net (2 com­pus) y una se­ño­ra ayu­dan­do a ha­cer­lo ahi mis­mo. Ha­cías una ho­ri­ta de ­co­la en el kios­co, lle­na­bas el for­mu­la­rio, tro­ta­bas a la ven­ta­ni­lla, ha­cías me­dia ho­ri­ta de co­la, fir­ma­bas el for­mu­la­rio­, y lis­to!

Pe­ro cla­ro­... si te­nés 2 ho­ras pa­ra lle­gar al avió­n, me­dio que que­dás ju­ga­do­... por suer­te me di cuen­ta que era una vul­gar pa­gi­na we­b, y que el aero­puer­to tie­ne wi­fi gra­tis, así que la hi­ce en el ce­lu (des­pués de ha­cer 45 mi­nu­tos de co­la), fui a ha­cer la otra me­dia ho­ra, y lis­to!

Aun­que... bue­no, re­sul­ta que Ali­ta­lia no sa­le de ahí. Sa­le de la ter­mi­nal C. Y yo es­ta­ba en la A. Y el che­ckin cie­rra una ho­ra an­tes de­l ­vue­lo. En­ton­ces me que­da­ban 6 mi­nu­tos pa­ra cru­zar Ezei­za. NO PRO­BLE­M, lle­gué con los bo­fes en la ma­no, la chi­ca de Ali­ta­lia a­ma­ble­men­te me re­ci­bió la va­li­ja, aun­que lle­gué tres mi­nu­tos tar­de, ob­via­men­te no ha­bía co­la en mi­gra­cio­nes, y lle­gué cuan­do­ ­la gen­te ya es­ta­ba abor­dan­do.

El vue­lo ... te­nía un asien­to sin na­die ade­lan­te en la se­gun­da fi­la. La 1ra te­nia dos asien­to­s, la 3ra tres, y yo es­ta­ba en el pa­si­llo­. ­LU­GAR pa' las pa­ta­s! Aun­que... al la­do mío via­ja­ban dos vie­ji­to­s. El vie­ji­to mas­cu­lino me di­ce "a mi me di­je­ron que es­te asien­to da­ba al ­pa­si­llo, por­que ten­go un pro­ble­ma y ten­go que ir al ba­ño ca­da 30 mi­nu­to­s" y la vie­ji­ta fe­men­i­na de la ven­ta­ni­lla lla­ma a la aza­fa­ta ­por­que su asien­to no se re­cli­na.'A­sí que sa­qué el ca­ba­lle­ro in­te­rio­r, me aga­rré el asien­to de la ven­ta­ni­lla, la se­ño­ra vie­ji­ta tu­vo­ un asien­to que re­cli­na, el se­ñor vie­ji­to un asien­to en el pa­si­llo (que salía $500 ex­tra, pe­ro no se los co­bré), y yo me que­dé aco­va­cha­do­ en la ven­ta­ni­lla. Lo bue­no: la co­mi­da no es­tu­vo ma­l, y las ro­di­llas no to­ca­ban el asien­to de ade­lan­te, así que to­do bien.

Me vi "We are the Mi­ller­s" y otra que no me acuer­do, me leí más o me­nos la mi­tad del 2do li­bro de Kin­gki­ller Ch­ro­ni­cle, y lle­ga­mos a Ro­ma. ­De ahí su­per tran­qui (por­que te­nía 4 ho­ras pa­ra la com­bi­na­ció­n), me fuí a un bar y me to­mé mi pri­mer ca­fé en Ita­lia, y me co­mí mi pri­me­ra ­por­ción de tor­ta. En un es­ta­do de éx­ta­sis ali­men­ta­rio, y pen­san­do que es­te via­je pin­ta­ba bien hi­ce tiem­po, to­mé el vue­lo corti­to a ­Pa­ler­mo, y ahí me es­pe­ra­ba mi la­de­ro au­to­mo­triz (por­que le gus­ta ma­ne­ja­r) Lu­cio.

https://pbs.twimg.com/media/BoYubvwIQAALS7L.jpg

El asien­to en el vue­lo a Pa­ler­mo es­ta­ba bue­no­...

Ofen­di­dí­si­mo por­que no te­nía el car­te­li­to "Mr Al­si­na" de ri­gor nos fui­mos a bus­car el fiat 500 al­qui­la­do, y des­pués de me­dia ho­ra a­ve­ri­guan­do co­mo salir del pa­rkin­g... bue­no, sali­mos del pa­rkin­g. Y nos fui­mos a Pa­ler­mo.

Pa­ler­mo es­tá he­cho bol­sa. Es una ciu­dad que evi­den­te­men­te en al­gu­na épo­ca fué mu­cho más ri­ca que aho­ra, por­que es­tá lle­na de edi­fi­cio­s an­ti­guos y her­mo­sos ve­ni­dos aba­jo, y to­do es­tá su­cio. Pa­sea­mo­s, saca­mos fo­to­s, co­mi­mos (pi­z­za! En Ita­lia! YEAH) to­ma­mo­s, ca­mi­na­mo­s, e­tc. Y se nos aca­ba­ron las idea­s.

Re­sul­ta que otros ar­gen­ti­nos (Chi­pa­ca y Ra) es­ta­ban ha­cien­do al­go pa­re­ci­do pe­ro en la otra pun­ta de Si­ci­lia, en­ton­ces di­ji­mo­s... va­mo­s? ­Cuan­to se pue­de tar­dar en lle­ga­r? Bue­no, mu­cho, pe­ro igual nos me­ti­mos en la au­to­pis­ta con des­tino Si­ra­cu­sa. Por el ca­mi­no, vi­mos una­s 645968 ca­si­tas en la ci­ma de una co­li­na, aban­do­na­da y he­cha bol­sa. Mi­llo­nes y mi­llo­nes de na­ran­jo­s. Cien­tos de mi­les de otros ar­bo­li­to­s (o­li­vo­s?), to­dos los fia­ts del uni­ver­so.

Pa­ra lle­gar a Si­ra­cu­sa hay que pa­sar por Ca­ta­nia y cru­zar ca­si to­da Si­ci­lia. Cuan­do ya lle­vá­ba­mos unas 4 ho­ras en la au­to­pis­ta di­ji­mo­s "­va­ya­mos a un pue­bli­to" lo que se con­vir­tió en "a­ga­rre­mos la pr­óxi­ma sali­da", lo que nos lle­vó a Cal­ta­nisse­tta, tal vez la ciu­dad me­no­s ­tu­rís­ti­ca de Si­ci­lia, nos su­bi­mos a un es­ta­cio­na­mien­to en el te­cho de un ne­go­cio de al­gún ra­mo mis­te­rio­so, saca­mos una fo­to y vol­vi­mo­s a la ru­ta.

No lle­ga­mos a Si­ra­cu­sa, lle­ga­mos a Ca­ta­nia.

Un de­ta­lle de Ca­ta­nia: las ca­lles son ca­si to­das an­gos­ti­ta­s, y hay mu­cho trá­fi­co. Por ejem­plo, en­ca­ra­mos por una fe­ria ca­lle­je­ra, y de gol­pe un ti­po en una es­pe­cie de Tra­fic sim­ple­men­te en­ca­ró por el me­dio to­can­do bo­ci­na, con­fian­do en el ins­tin­to de su­per­vi­ven­cia ­Si­ci­liano pa­ra no con­ver­tir­se en ase­sino se­ria­l. Mu­je­res con ca­rri­tos de be­bé sal­tan­do aden­tro de los stan­ds pa­ra que no las pi­sen, ­pues­te­ros ha­cien­do ges­tos obs­ce­nos al gri­to de ba­ssssss­ta­rrrr­do!, co­sas así. Y así lle­ga­mos a una pla­za que se­gún Lu­cio "es igua­l a Cu­ba", una igle­sia her­mo­sa ce­rra­da y aban­do­na­da, pi­bes ju­gan­do a la pe­lo­ta, mon­ta­ñas de mu­gre

https://pbs.twimg.com/media/BobRTgLIIAADc9z.jpg:large

Agra­dez­can que la fo­to no trans­mi­te la spu­z­za.

Pe­ro eso no es na­da com­pa­ra­do con la po­li­cía en Pa­ler­mo. Los po­li­cías ma­ne­jan Al­fa Ro­meo. Y tie­nen si­re­na. Y el si­ci­liano es al­go así ­co­mo una ver­sión de­si­nhi­bi­da del ar­gen­to, así que en me­dia ho­ra pa­sa­ron tres pa­tru­lle­ros a 120 en una ca­lle­ci­ta me­die­va­l, con la si­re­na a to­do dar por­que de­be ser re di­ver­ti­do.

En Ca­ta­nia pro­bé mi pri­mer ca­n­oli si­ci­liano. Y dis­cul­pen que me pa­se el pr­óxi­mo pá­rra­fo ha­blan­do de lo que es, en el fon­do, una sim­ple ­fac­tu­ra. Igual que la ve­nus de mi­lo es una es­ta­tui­ta ro­ta, igual que cual­quier co­sa her­mo­sa, pre­cio­sa y ca­si per­fec­ta es un ejem­plo­ ­de una ca­te­go­ría que la de­gra­da por com­pa­ra­ció­n. Un ca­n­oli es una ma­sa ai­rea­da, li­ge­ra, dul­ce, en­vol­vien­do cre­ma pas­te­le­ra, o ja­lea, o nu­te­lla, o que­so, o ca­si cual­quier co­sa que sea blan­di­ta y de­li­cio­sa. He co­mi­do unos 30 ca­n­olis es­ta se­ma­na, y to­dos eran ­bue­no­s. La pa­rro­quia de acó­li­tos de la fac­tu­ra de­be­ría or­ga­ni­zar pe­re­gri­na­cio­nes pe­rió­di­cas a Si­ci­lia pa­ra que sus miem­bros pue­dan a­pre­ciar el ideal pla­tó­ni­co de la fac­tu­ra. Que se que­de Pa­rís con sus pa­té­ti­cos croissan­ts y sus in­fu­ma­bles pain au cho­co­la­t. He sa­bo­rea­do el ca­n­oli y aho­ra en­tien­do per­fec­ta­men­te es­to: Lea­ve the gun, take the Ca­n­oli.

Pe­ro bue­no, pa­sea­mos por Ca­ta­nia, el cen­tro es muy be­llo, hay una es­ta­tua ho­rro­ro­sa de un ele­fan­te, y nos fui­mos a un ho­tel don­de ­mi cuer­po di­jo "lle­vo 48 ho­ras an­dan­do sin pa­ra­r" y pro­ce­dió a pa­sar­se a mo­do hi­ber­na­ción has­ta la ma­ña­na si­guien­te.

Al día si­guien­te te­nía­mos el vue­lo a Mal­ta des­de Tra­pa­ni que es­tá ... sí, exac­ta­men­te en la OOOOOOOTRA pun­ta de Si­ci­lia. Así que fui­mos pa­ra ahí, y en el ca­mino bus­ca­mos en in­ter­net al­gún lu­gar pa­ra ver que no nos des­via­ra mu­cho. En­contra­mos Eri­ce. Google nos de­cía "8km 35 mi­nu­to­s". ­Lo que Google no nos de­cía es que eran 35 mi­nu­tos en ca­bra por­que eso no era un ca­mino pa­ra au­to. Em­pe­za­mos a su­bir por un ca­mi­ni­to de ­mon­ta­ña, bien pa­vi­men­ta­do, pe­ro muy em­pi­na­do, lleno de cur­vas ce­rra­dí­si­ma­s, y sin nin­gún au­to. Y su­bía, y su­bía, y su­bía. Y des­pués su­bía. Has­ta que google nos di­jo "de­re­cha". Y eso lle­va­ba a una hue­lla de tie­rra en la cual no po­día­mos dar vuel­ta, y sin guar­da rail del la­do­ ­del pre­ci­pi­cio. Ahí di­ji­mos fu­ck google, y vol­vi­mos pa­ra atrás (30 me­tros mar­cha atrás en un ca­mino de tie­rra a 50­cm de un pre­ci­pi­cio­...) y ­fui­mos a la iz­quier­da. Lle­ga­mos al ce­men­te­rio de Eri­ce, se­gui­mos y lle­ga­mos a Eri­ce.

Cla­ro, lle­ga­mos y es­tá­ba­mos "che, cuan­to tar­da­mos en lle­gar acá? 2 ho­ra­s? Y cuan­to fal­ta pa­ra el avió­n?" asi que es­tu­vi­mos un ra­to y vol­vi­mo­s ­po­r... EL OTRO ca­mino a Eri­ce, una au­to­pis­ta pa­no­rá­mi­ca con vis­ta al mar que Lu­cio se en­tu­sias­mó y la ba­ja­mos co­mo si fué­ra­mos en un Sca­lec­trix ­mien­tras yo sen­tía que me salía el es­tó­ma­go por las ore­ja­s.

Lle­ga­mos a Tra­pa­ni con me­dia ho­ra de mar­gen, to­ma­mos el vue­lo de Rya­nair y lle­ga­mos a Mal­ta.

Pa­ra los que nun­ca he­mos via­ja­do en Rya­nai­r, la pri­me­ra vez pue­de ser un po­co trau­má­ti­ca. Es in­ne­ga­ble que se vue­la ba­ra­to. Ape­nas 80 eu­ro­s ­pa­ra un vue­lo ida y vuel­ta in­ter­na­cio­na­l, es ba­ra­to. Cla­ro, tra­tan de ga­nar di­ne­ro por otros la­do­s.

Si no pa­gá­s, te asig­nan el asien­to al aza­r. Po­dés par­ti­ci­par en una ri­fa que cues­ta 2 eu­ros y el via­je pue­de ser gra­tis. Si no te im­pri­mis el boar­ding pa­ss, sa­le 70 eu­ro­s. Des­pa­char una va­li­ja? Cues­ta di­ne­ro. Si no la des­pa­chás y no te de­jan lle­var­la en la ca­bi­na? Cues­ta má­s ­di­ne­ro. No que­rés se­gu­ro? Te­nés que ele­gir el país "Do­n't in­su­re me", en­tre Den­ma­rk y Fin­lan­d. Y así.

La ca­bi­na es­tá su­cia por­que el avión lle­gó ha­ce 10 mi­nu­tos y no lo lim­pian en­tre vue­lo y vue­lo, así que uno ba­rre las mi­gas del asien­to, po­ne el tras­te y ... la aza­fa­ta se pa­sa el vue­lo ven­dien­do co­sas por el sis­te­ma de al­ta­vo­ce­s. "Mien­tras es­ta­mos en aguas in­ter­na­cio­na­le­s, pue­de ­com­prar Cal­vin Klein One 100­ml por so­lo 58 eu­ro­s!"... TO­DO EL VIA­JE.

A fa­vo­r: sa­le y lle­ga a tiem­po, es ba­ra­tí­si­mo, y po­dés usar elec­tró­ni­ca to­do el via­je.

Y así lle­gué a Mal­ta, don­de me pa­sé los si­guien­tes días sin ver na­da a más de 2 cua­dras del ho­te­l, has­ta que jun­té fuer­zas y salí un día a ­ca­mi­nar un po­co.

El vier­nes, an­tes de sali­r, de­ci­dí ha­cer una ex­cur­sión de ver­dad y me fuí a M'­di­na, la ciu­dad si­len­cio­sa.

Y has­ta acá me lle­ga­ron las ga­nas de es­cri­bir ha­ce mu­cho tiem­po, cuan­do es­ta­ba es­cri­bien­do es­to. El res­to del via­je es­tu­vo bue­no, vol­ví bien.

Martín Gaitán: El padronazo cordobés

Open Data Córdoba es un colectivo abierto y multidisciplinario sin fines de lucro cuyo objetivo principal es difundir y transparentar el uso de la tecnología y los datos masivos para beneficio del conjunto de la sociedad, especialmente en la provincia de Córdoba.

El grupo nació en época de elecciones, intentando echar un manto de luz a las sospechas fundadas de desprolijidades en el escrutinio provisorio de las legislativas de 2013. Luego de muchas otras iniciativas y bastante perseverancia docente de algunos de nuestros compañeros, nuestra contribución ha empezado a ser reconocida desde los medios locales, algunas agrupaciones políticas y otras organizaciones de la sociedad civil que abogan por la transparencia y el fortalecimiento de las instituciones.

En este contexto, el portal de noticias Cba24N, perteneciente al grupo de Servicios de Radio y Televisión (SRT) de la Universidad Nacional de Córdoba, nos ha invitado a realizar análisis de datos "en vivo" el próximo 25 de octubre, día de las elecciones nacionales.

Hay muchas ideas para ese día que ojalá podamos llevar adelante, aunque vale resaltar (atajarse) que se trata de una tarea totalmente voluntaria . Mientras tanto, el domingo pasado me dediqué a jugar con algunas agregaciones sobre el padrón de Córdoba para encontrar "notas de color" analizando nombres y apellidos de los votantes

Dime tu nombre y te diré cómo te llamas

Cinco de cada diez hombres... son la mitad, analizaba Les Luthiers con mucho humor y precisión científica. Este análisis del padrón no pretende conclusiones mucho más elaboradas que esa (ni alcanzar semejantes cotas de gracia), pero con las herramientas de software libre actuales es fácil analizar (y graficar) algunas curiosidades.

Por ejemplo ¿hay más cordobeses de apellido Pérez o González? ¿Cuántas personas tienen más de dos nombres? ¿Cuáles son los nombres más comunes de cada década?

Primero importo y configuro las herramientas principales, Pandas y Matplotlib

In [1]:
%matplotlib inline
import matplotlib
matplotlib.rcParams['lines.linewidth'] = 2
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
In [2]:
cba = pd.read_csv('padron_cba_2015.csv', usecols=['clase', 'apellido', 'nombres', 'sexo'])
In [3]:
cba.head()
Out[3]:
clase apellido nombres sexo
0 1938 ABACA CELINA DEL ROSARIO F
1 1963 ABADJIAN MARIA ALICIA SOL F
2 1979 ABAL CLARA F
3 1922 ABALO MARIA AZUCENA F
4 1925 ABALO YOLANDA JOSEFA F
In [4]:
len(cba.index)
Out[4]:
2783122
In [5]:
len(cba[cba['sexo'] == 'F'].index)/_, len(cba[cba['sexo'] == 'M'].index)/_
Out[5]:
(0.5139293211005482, 0.48607067889945177)
In [6]:
cba.ix[cba['clase'].argmin()]
Out[6]:
clase         1910
apellido    BASTUS
nombres     MIGUEL
sexo             M
Name: 328532, dtype: object

El padrón que conseguimos es el que la Justicia Electoral provee a los partidos políticos para sus tareas de fiscalización. En particular el de la provincia de Córdoba tiene 2.78 millones de votantes habilitados de los cuales el 51.4% son mujeres. El más viejo es Don Miguel Bastus, de 105 años.

Si bien el dataset del padrón incluye mucha información como circuito de cada votante y por supuesto el DNI y otros datos sensibles que por cuestiones de protección de la privacidad nunca publicaríamos, en particular me interesaba desagregar los nombres, que vienen en una sola columna, en dos o más y normalizarlos a un formato común (cada nombre o apellido comienza con mayúscula)

In [7]:
cba.apellido = cba.apellido.apply(lambda v: v.title())
cba.nombres = cba.nombres.apply(lambda v: v.title())

Para separar los nombres voy a usar un paquete que tiene un mínimo cuidado con casos particulares con los van, del, etc. que pueden aparecer en algunos apellidos.

In [8]:
from nameparser import HumanName
def s(n):
    hn = HumanName(n)
    if hn.middle:
        return [hn.first, hn.middle, hn.last]
    return [hn.first, hn.last, hn.middle]
In [9]:
s('María Francisca')  # devuelve hasta tres nombres
Out[9]:
['María', 'Francisca', '']
In [10]:
nombres_df = pd.DataFrame(cba['nombres'].apply(s).values.tolist(),
                              columns=['primer_nombre', 'segundo_nombre', 'tercer_nombre'])
In [11]:
cba = pd.concat((cba.drop('nombres', 1), nombres_df), axis=1)
cba.head()
Out[11]:
clase apellido sexo primer_nombre segundo_nombre tercer_nombre
0 1938 Abaca F Celina Del Rosario
1 1963 Abadjian F Maria Alicia Sol
2 1979 Abal F Clara
3 1922 Abalo F Maria Azucena
4 1925 Abalo F Yolanda Josefa

Ya tenemos el dataset como queríamos, podemos sacar algunas cuentas y, mejor, hacer algunos graficos!

Los 20 apellidos más comunes en Córdoba

Vemos que contra todo pronóstico, los Pérez apenas entran en el top 10 de apellidos más comunes y el 1.3% del padrón son los González! Quizás signifique el hallazgo de un nuevo focus group para campañas políticas.

In [12]:
cba.apellido.value_counts(normalize=True)[:20].sort(inplace=False).plot('barh');
Un nombre muy cordobés

La generación más jóven de votantes tiene entre 16 y 26 años. Entre las mujeres de esa edad, casi el 10% (más de 25 mil cordobesas) tiene como primer nombre María

In [14]:
cba[(cba['clase'] >= 1990) & (cba['sexo'] == 'F')].primer_nombre.value_counts(normalize=True)[:20].sort(inplace=False).plot('barh');

Para las votantes más longevas, de 60 para arriba, la proporción de Marías llega al 15%

In [15]:
cba[(cba['clase'] <= 1955) & (cba['sexo'] == 'F')].primer_nombre.value_counts(normalize=True)[:20].sort(inplace=False).plot('barh');

En el caso de los hombres jóvenes, Juan es el primer nombre más común, pero seguido de cerca por Franco y Matías.

In [16]:
cba[(cba['clase'] >= 1990) & (cba['sexo'] == 'M')].primer_nombre.value_counts(normalize=True)[:20].sort(inplace=False).plot('barh');

Y entre los hombres mayores la cosa está entre Juan y José

In [17]:
cba[(cba['clase'] <= 1955) & (cba['sexo'] == 'M')].primer_nombre.value_counts(normalize=True)[:20].sort(inplace=False).plot('barh');
La generación "Y(enifer)"

Se conoce como "Generación Y" a los nacidos alrededor de los '90. Es justamente la generación que está en la universidad o teniendo sus primeros trabajos, y tomando con pinzas semejante generalización, parece que tienen comportamientos particulares.

Si bien la denominación viene a cuento de ser la que sigue a la "generación X" con la que se denominaba a los que nacieron entre los '60 y '80, hay una curiosidad sobresaliente: al menos en Córdoba, esta generación es muchísimo más propensa a tener nombres que comienzan con "Y" (Yanina, Yenifer, Yesica, etc.). El pico se da justamente en la clase 1990, con casi 2500 personas.

In [18]:
cba[(cba['primer_nombre'].str.startswith('Y')) | (cba['segundo_nombre'].str.startswith('Y'))].groupby('clase').apellido.count().plot()
plt.title('Córdobeses/as cuyo primer o segundo nombre comienza con "Y"');
Cuestión de cantidad

Parece que lo más común es que los cordobeses tengan 2 nombres, pero esa tendencia se empezó a modificar en los '80 donde la cantidad de gente con 1 sólo nombre creció.

In [19]:
un_nombre = cba[(cba['segundo_nombre'] == '')].groupby('clase').apellido.count().plot(label='1 nombre')
dos_nombres = cba[(cba['tercer_nombre'] == '')].groupby('clase').apellido.count().plot(label='2 nombres')
tres_nombres = cba[(cba['tercer_nombre'] != '')].groupby('clase').apellido.count().plot(label='3 o más nombres')
plt.legend(loc='best')
plt.title('Cantidad de nombres a lo largo del siglo 20 en Córdoba');

De cualquier manera, no importa mucho cuantos nombres tengas: a todos se les dice "Chichí" y "Guaso".

El nombre más típico de la clase

Si agrupásemos a todos los hombres y mujeres del padrón según su edad, ¿cuál sería el nombre y apellido más probable para cada grupo?

Considerando que sólo se incluye a las personas vivas, sería una exageración decir que es el nombre más típico de ese año, pero es un indicio.

El siguiente algoritmo busca el primer nombre, segundo nombre y apellido más probable para hombres y mujeres nacidos en cada año. Si conocen a alguien que se llame exactamente así nacido en ese año, pueden contarle que tiene el nombre más protípico de su clase: ¡qué originalidad!

In [20]:
pd.set_option('display.max_rows', 200)
def nombre_del_año(sexo):

    nombre_por_clase = []
    for y in cba.clase.unique():
        electores = cba[(cba['clase'] == y) & (cba['sexo'] == sexo)]
        try:
            nombre_por_clase.append([y] + [electores[attr].value_counts().index[0] for attr in \
                                               ['primer_nombre', 'segundo_nombre', 'apellido']])
        except (KeyError, IndexError):
            continue
    return pd.DataFrame(nombre_por_clase, columns=['clase', 'primer_nombre', 'segundo_nombre', 'apellido']).sort('clase')

nombre_tipico_hombres = nombre_del_año('M')
nombre_tipico_mujeres = nombre_del_año('F')
In [21]:
nombre_tipico_hombres
Out[21]:
clase primer_nombre segundo_nombre apellido
84 1910 Miguel Bastus
85 1915 Hugo Candussi
73 1916 Jose Diaz
69 1917 Jose Gomez
32 1918 Jose Gomez
80 1919 Jose Diaz
63 1920 Jose Rodriguez
76 1921 Jose Lopez
3 1922 Jose Rodriguez
83 1923 Jose Sanchez
70 1924 Jose Gonzalez
4 1925 Jose Gonzalez
59 1926 Jose Gonzalez
41 1927 Jose Gonzalez
66 1928 Jose Gonzalez
79 1929 Jose Gonzalez
61 1930 Jose Gonzalez
21 1931 Jose Gonzalez
34 1932 Jose Gonzalez
74 1933 Juan Rodriguez
71 1934 Jose Rodriguez
58 1935 Juan Gonzalez
53 1936 Jose Rodriguez
42 1937 Juan Rodriguez
0 1938 Juan Rodriguez
78 1939 Juan Rodriguez
81 1940 Juan Gonzalez
49 1941 Juan Gonzalez
16 1942 Juan Rodriguez
28 1943 Juan Gonzalez
24 1944 Juan Gonzalez
36 1945 Juan Rodriguez
26 1946 Juan Gonzalez
64 1947 Juan Gonzalez
40 1948 Juan Alberto Lopez
15 1949 Juan Alberto Gonzalez
29 1950 Juan Alberto Gonzalez
44 1951 Juan Alberto Gonzalez
72 1952 Juan Alberto Gonzalez
6 1953 Juan Alberto Gonzalez
50 1954 Juan Alberto Rodriguez
38 1955 Juan Alberto Rodriguez
65 1956 Juan Alberto Gonzalez
47 1957 Juan Alberto Gonzalez
52 1958 Juan Alberto Gonzalez
67 1959 Juan Alberto Gonzalez
37 1960 Jose Alberto Gonzalez
17 1961 Jose Alberto Rodriguez
68 1962 Jose Alberto Gonzalez
1 1963 Jose Alberto Gonzalez
39 1964 Jose Alberto Gonzalez
18 1965 Jose Alberto Rodriguez
25 1966 Jose Alberto Gonzalez
77 1967 Jose Alberto Rodriguez
62 1968 Jose Alberto Gonzalez
27 1969 Jose Alberto Gonzalez
19 1970 Carlos Alberto Gonzalez
23 1971 Carlos Alberto Gonzalez
22 1972 Juan Alberto Gonzalez
75 1973 Juan Alejandro Gonzalez
14 1974 Juan Alberto Gonzalez
5 1975 Juan Alejandro Rodriguez
35 1976 Juan Alejandro Gonzalez
33 1977 Juan Alejandro Rodriguez
8 1978 Juan Alberto Rodriguez
2 1979 Diego Gonzalez
43 1980 Diego Gonzalez
55 1981 Diego Gonzalez
7 1982 Juan Gonzalez
9 1983 Juan Gonzalez
31 1984 Juan Gonzalez
12 1985 Juan Gonzalez
51 1986 Juan Gonzalez
46 1987 Juan Rodriguez
10 1988 Juan Gonzalez
60 1989 Juan Gonzalez
13 1990 Juan Gonzalez
57 1991 Juan Gonzalez
11 1992 Juan Gonzalez
54 1993 Franco Gonzalez
30 1994 Franco Gonzalez
56 1995 Franco Gonzalez
48 1996 Matias Gonzalez
45 1997 Juan Gonzalez
82 1998 Juan Rodriguez
20 1999 Juan Gonzalez
In [22]:
nombre_tipico_mujeres
Out[22]:
clase primer_nombre segundo_nombre apellido
84 1911 Maria Elvira Frencia
87 1912 Maria Magdalena Rocha
88 1913 Petrona Josefina Coronda
86 1914 Adela Cena
85 1915 Maria Camagni
73 1916 Maria Gonzalez
69 1917 Maria Diaz
32 1918 Maria Gonzalez
80 1919 Maria Gonzalez
63 1920 Maria Lopez
76 1921 Maria Gonzalez
3 1922 Maria Rodriguez
83 1923 Maria Garcia
70 1924 Maria Rodriguez
4 1925 Maria Fernandez
59 1926 Maria Rodriguez
41 1927 Maria Rodriguez
66 1928 Maria Lopez
79 1929 Maria Rodriguez
61 1930 Maria Gonzalez
21 1931 Maria Rodriguez
34 1932 Maria Rodriguez
74 1933 Maria Rodriguez
71 1934 Maria Rodriguez
58 1935 Maria Rodriguez
53 1936 Maria Gonzalez
42 1937 Maria Lopez
0 1938 Maria Gonzalez
78 1939 Maria Gonzalez
81 1940 Maria Gonzalez
49 1941 Maria Gonzalez
16 1942 Maria Rodriguez
28 1943 Maria Rodriguez
24 1944 Maria Gonzalez
36 1945 Maria Rodriguez
26 1946 Maria Maria Gonzalez
64 1947 Maria Maria Rodriguez
40 1948 Maria Maria Gonzalez
15 1949 Maria Maria Gonzalez
29 1950 Maria Maria Gonzalez
44 1951 Maria Maria Rodriguez
72 1952 Maria Maria Gonzalez
6 1953 Maria Maria Rodriguez
50 1954 Maria Maria Gonzalez
38 1955 Maria Maria Gonzalez
65 1956 Maria Beatriz Gonzalez
47 1957 Maria Beatriz Gonzalez
52 1958 Maria Beatriz Gonzalez
67 1959 Maria Beatriz Gonzalez
37 1960 Maria Beatriz Gonzalez
17 1961 Maria Beatriz Gonzalez
68 1962 Maria Beatriz Gonzalez
1 1963 Maria Beatriz Gonzalez
39 1964 Maria Beatriz Gonzalez
18 1965 Maria Beatriz Gonzalez
25 1966 Maria Beatriz Gonzalez
77 1967 Maria Beatriz Gonzalez
62 1968 Maria Beatriz Gonzalez
27 1969 Maria Alejandra Gonzalez
19 1970 Maria Alejandra Gonzalez
23 1971 Maria Alejandra Gonzalez
22 1972 Maria Alejandra Gonzalez
75 1973 Maria Alejandra Gonzalez
14 1974 Maria Alejandra Gonzalez
5 1975 Maria Alejandra Gonzalez
35 1976 Maria Alejandra Gonzalez
33 1977 Maria Gonzalez
8 1978 Maria Soledad Gonzalez
2 1979 Maria Soledad Gonzalez
43 1980 Maria Soledad Gonzalez
55 1981 Maria Soledad Gonzalez
7 1982 Maria Soledad Gonzalez
9 1983 Maria Soledad Rodriguez
31 1984 Maria Soledad Gonzalez
12 1985 Maria Gonzalez
51 1986 Maria Gonzalez
46 1987 Maria Gonzalez
10 1988 Maria Gonzalez
60 1989 Maria Rodriguez
13 1990 Maria Gonzalez
57 1991 Maria Gonzalez
11 1992 Maria Gonzalez
54 1993 Maria Gonzalez
30 1994 Maria Gonzalez
56 1995 Maria Gonzalez
48 1996 Maria Gonzalez
45 1997 Maria Gonzalez
82 1998 Maria Gonzalez
20 1999 Maria Gonzalez
Comparando apellidos: Gaitán vs Lobo

De chico tenía la idea (un poco errada) de que mi apellido no era muy común. Salvo algunos casos bochornosos, no conocí otros Gaitán en Neuquén que no sean de mi familia cercana, aunque sabía que había mucha parentela lejana en Córdoba y en otros países como Colombia era muy frecuente.

Los Lobo, el apellido de mi mujer, en cambio, parece que son muchos menos (y crecen demográficamente a menor ritmo) de lo que la "intuición" indica.

Comparemos:

In [23]:
gaitanes = cba[(cba['apellido'] == 'Gaitan')].groupby('clase').apellido.count()
lobos = cba[(cba['apellido'] == 'Lobo')].groupby('clase').apellido.count()
gaitanes.plot(label='Gaitán'), lobos.plot(label='Lobo')
plt.legend(loc='best')
Out[23]:
<matplotlib.legend.Legend at 0x7f36ffca3e80>

Haciendo la curva acumulada, puede verse el crecimiento absoluto de cada apellido a lo largo del siglo

In [24]:
gaitanes.cumsum().plot(label='Gaitán'), lobos.cumsum().plot(label='Lobo')
plt.legend(loc='best');

En Córdoba somos 4 veces más los Gaitán, aunque si la muestra fuese mi familia y la de mi esposa, sería casi al reves: ¡son 9 hermanos!

¡Hacé tu propia comparación!

¿Te interesa saber cuanta gente se llama como vos? Hicimos una pequeñisima aplicación web (de código libre que permite consultar la misma base de datos del padrón de Córdoba y generar gráficos similares a los últimos para los nombres y apellidos que vos elijas. Se puede probar acá http://lab.opendatacordoba.org

¿Qué más se podría analizar?

Dado que además de la clase contamos con la sección y circuito electoral de cada votante, se podrían analizar agregaciones geolocalizadas, por ejemplo para ver el nombre más tipico de cada departamento o provincia a lo largo del tiempo como en este estudio.

Teniendo algunas reglas de clasificación (o mejor, una base de datos) que ponderen con algún coeficiente de precisión la procedencia de un apellido, sería posible agrupar (y geolocalizar) ¿hay algun barrio de córdoba con más personas de raíces arábigas?

Comparar gráficas entre distintas ciudades del país abre otro sinnúmero de posibilidades. Por poner un simple ejemplo ¿Cuál es la región que más proporción de niñas llamadas Eva tuvo alredodor de 1950? ¿Qué partido ha ganado en las últimas elecciones allí?

Por supuesto, hay cosas más interesantes y significativas de las que ocuparse, pero quisimos encontrar algunas perlitas, que puedan distendernos ante tanto spot de campaña. Y de paso mostrar que, teniendo datos, con muy pocas lineas de código se pueden responder preguntas que de otra manera sólo pueden ser contestadas con especulaciones, generandose mitos amparados en la "intuición" popular o periodística, que puede ser mucho menos precisa que una consulta a las fuentes.

In [ ]:

Mariano Guerra: Om.next with devcards how to

Simple step by step guide to try om.next with devcards.

This assumes you have leiningen installed if not, go to http://leiningen.org/ and follow the instructions there.

Let's start by creating the basic devcards environment using the devcards template:

lein new devcards omnom
cd omnom
lein figwheel

The output should look something like this:

Figwheel: Starting server at http://localhost:3449
Focusing on build ids: devcards
Compiling "resources/public/js/compiled/omnom_devcards.js" from ["src"]...
Successfully compiled "resources/public/js/compiled/omnom_devcards.js" in 15.476 seconds.
Started Figwheel autobuilder

Launching ClojureScript REPL for build: devcards
Figwheel Controls:

    ...

  Switch REPL build focus:
          :cljs/quit                      ;; allows you to switch REPL to another build
    Docs: (doc function-name-here)
    Exit: Control+C or :cljs/quit
 Results: Stored in vars *1, *2, *3, *e holds last exception object
Prompt will show when figwheel connects to your application
To quit, type: :cljs/quit
cljs.user=>

then after it does all it's thing open http://localhost:3449/cards.html

it should look something like this:

../galleries/dev/omnom-1.png

click the omnom.core link, you should see this:

../galleries/dev/omnom-2.png

now we have to install the latest development snapshot for om to try om.next, in some folder outside your project run:

git clone https://github.com/omcljs/om.git
cd om
lein install

Now let's add the dependencies to our project, open project.clj and make the :dependencies section look like this:

:dependencies [[org.clojure/clojure "1.7.0"]
               [org.clojure/clojurescript "1.7.122"]
               [devcards "0.2.0-3"]
               [sablono "0.3.4"]
               [org.omcljs/om "0.9.0-SNAPSHOT"]
               [datascript "0.13.1"]]

Now restart fighwheel (press Ctrl + d) and run it again:

lein figwheel

reload the page.

open the file src/omnom/core.cljs and replace its content with this:

(ns omnom.core
  (:require
   [cljs.test :refer-macros [is async]]
   [goog.dom :as gdom]
   [om.next :as om :refer-macros [defui]]
   [om.dom :as dom]
   [datascript.core :as d]
   [sablono.core :as sab :include-macros true])
  (:require-macros
   [devcards.core :as dc :refer [defcard deftest]]))

(enable-console-print!)

(defcard first-card
  (sab/html [:div
             [:h1 "This is your first devcard!"]]))

(defui Hello
  Object
  (render [this]
    (dom/p nil (-> this om/props :text))))

(def hello (om/factory Hello))

(defcard simple-component
  "Test that Om Next component work as regular React components."
  (hello {:text "Hello, world!"}))

(def p
  (om/parser
    {:read   (fn [_ _ _] {:quote true})
     :mutate (fn [_ _ _] {:quote true})}))

(def r
  (om/reconciler
    {:parser p
     :ui->ref (fn [c] (-> c om/props :id))}))

(defui Binder
  Object
  (componentDidMount [this]
    (let [indexes @(get-in (-> this om/props :reconciler) [:config :indexer])]
      (om/update-state! this assoc :indexes indexes)))
  (render [this]
    (binding [om/*reconciler* (-> this om/props :reconciler)]
      (apply dom/div nil
        (hello {:id 0 :text "Goodbye, world!"})
        (when-let [indexes (get-in (om/get-state this)
                             [:indexes :ref->components])]
          [(dom/p nil (pr-str indexes))])))))

(def binder (om/factory Binder))

(defcard basic-nested-component
  "Test that component nesting works"
  (binder {:reconciler r}))

(deftest test-indexer
  "Test indexer"
  (let [idxr (get-in r [:config :indexer])]
    (is (not (nil? idxr)) "Indexer is not nil in the reconciler")
    (is (not (nil? @idxr)) "Indexer is IDeref")))


(defn main []
  ;; conditionally start the app based on wether the #main-app-area
  ;; node is on the page
  (if-let [node (.getElementById js/document "main-app-area")]
    (js/React.render (sab/html [:div "This is working"]) node)))

(main)

;; remember to run lein figwheel and then browse to
;; http://localhost:3449/cards.html

it should display the om cards if not try reloading the page.

now just keep adding cards!

Facundo Batista: Pico de segundo semestre


Ah, ¡qué semanas!

Vengo a recontrafull, pero fue un pico de un par de meses, ya se tranquiliza el segundo semestre. Bah, en un par de semanas se tranquiliza...

Se juntaron muchas cosas...

Estoy dando un curso de Python en Mercadolibre (bah, tres cursos) y eso me tiene ocupado los anocheceres de un día de la semana, o incluso de dos.

Pasó la charla que doy siempre en el postgrado para científicos en La Plata (de la mano de Manuel), y el PyDay en Junín (organizado por Juan), donde dí un taller de Intro a Python y además estrené una charla de programación asincrónica en Python 3.

Y el fin de semana pasado fue el cumpleaños de Felipe, que no sólo es que el sábado sea movidito (almuerzo con mi vieja, salón a la tarde para toda la familia y amigos con niños, más compañeritos del jardín, y cena con el resto de la familia), sino que hay mucha preparación los días anteriores.

Cumple 6 de Felu

Además, estuve corriendo para renovar la visa de USA, que me había expirado, y de repente pasé a necesitarla.

Todo eso teniendo en cuenta también que estoy bastante activo en varios proyectos de software libre.

  • CDPedia: Salió una nueva versión, la 0.8.3, principalmente con contenido actualizado y un par de fixes
  • fades: Con Nico sacamos la beta de la versión 4, con un montón de cambios! en breve sale el release final, una versión para no perderse!
  • Magicicada: seguimos laburando a full con Nati dandole forma para que sea ampliamente usable; estamos a un 80% de una gran beta inicial.
  • Encuentro: más allá de algunas acciones de mantenimiento que tuve que hacer, voy a tratar de incorporarle los videos de TED de Argentina...
  • Launcherposta: una nueva release, sólo en PyPI, con un par de fixes pequeños que fuí agregándole en algún momento.

En fin. Para ir cerrando ahora el año solamente (?!) me queda un viaje por laburo, más la PyCon Argentina en Noviembre (para la cual todavía tengo que preparar una charla con Joac).

Juanjo Conti: Fotos de la charla de Docker en RubyLit

Este jueves hubo meetup de RubyLit, el grupo de usuarios de Ruby del Litoral, y como tenía la cámara encima, saqué algunas fotos. Las comprto y aprovecho que tengo su atención para hacer una aclaracion: Ruby es la excusa (de los 15 que eramos, más de 10 no estábamos usando Ruby actualmente, pero no importa). La idea es juntarse con pares y discutir temas que nos interesan mientras comemos pizza.

De hecho, la charla que hubo no fue de Ruby, fue de Docker.

https://github.com/ggerman/pandora/tree/master/containers

Así que si no viniste a esta por que "no sabés Ruby", la próxima vení! o buscate una mejor excusa.

http://www.meetup.com/rubylit/

Juanjo Conti: La explicación (tarea de esta semana para el taller)

El enunciado era hacer un relato con un final divertido usando una situación de cuatro o cinco que había para elegir. Mi resultado:

(leer en forma ceremoniosa, con campanadas y aleteos de palomas de fondo)

Ayer por la tarde aconteció un hecho que, luego de que se difundiera de boca del capellán y de la encargada de recolectar las ofrendas, escandalizó a muchos hermanos de nuestra comunidad, y es por eso que como pastor de esta me veo en la obligación de robarle algunos minutos a la homilía para arrojar luz sobre ello.

Cómo sabrán, todos los sábados por la mañana dejo la parroquia muy temprano para dirigirme a alguna de las villas de la periferia a hacer trabajo pastoral, ya sea visita de enfermos, consuelo de afligidos o dispensación de la extremaunciones.

Como recorro a pie todos los puntos, ya que la colecta para el auto parroquial no alcanzó aún los objetivos esperados, termino a horas de la tarde y bastante cansado.

Sabrán también, y esto no es ningún secreto, que durante mis años de seminario desarrollé afición a las películas de La guerra de las galaxias, ya que eran las únicas que Monseñor Archundia nos permitía ver.

Cuando terminé con mi última visita, caí en la cuenta de que me encontraba a pocas cuadras del cine del barrio. Caminé hasta allí con el doble propósito de entrar a refrescarme con el aire acondicionado y averiguar si ya estaban dando La guerra de las galaxias 7. Doble también fue la Gracia: el aire acondicionado estaba puesto en veinte grados y la película se proyectaba en diez minutos. Compré mi entrada y me senté en una de las butacas del fondo a esperar. La película empezó a horario y no debió ser tan buena como sus antecesoras porque promediando, calculo yo, los tres cuartos de la misma, caí en un profundo sueño consecuencia de las horas de agobiante trabajo y del excelente sistema de aclimatación de la sala.

El hecho en cuestionamiento se debió a que cuando desperté, la película ya había terminado; La guerra de las galaxias 7 había sido reemplazada por una película condicionada. Erótica, si nos atenemos a lo que decía su ficha técnica.

Esa es, queridos hermanos, la razón por la cual se comenta que fui sorprendido mirando una película de alto voltaje. Ya escucharon mi explicación.

...

Ahora, si se me permite, me gustaría saber, me queda la duda, ¿cómo se enteraron de esto el capellán y la encargada de la recolección de las ofrendas?

Juanjo Conti: Idea/proyecto: poemario para programadores

Hace más o menos un año tengo una idea en la cabeza: crear un libro de poemas para programadores.

¿Qué es un "poema para programador"? La definición puede ser discutida, pero en este contexto sería un poema (¿común?) con algún condimente que hace que un programador le encuentre una vuelta más de rosca/lo entienda en otro sentido.

El "formato" de los poemas que contendría el libro es bastante variado, desde el verso libre hasta la métrica dura. Dejo dos ejemplos.

El programador:

Me desvela en la noche,
oscuro programa.
Códigos malévolos,
indescifrable anagrama.

Escribir instrucciones,
malditas sentencias.
Quien en un lugar programa,
en otro es ausencia.

Combinar comandos,
pensar algoritmos.
Manipular datos,
tipear a buen ritmo.

Exprime el cerebro,
modelando futuros.
La poesía se forma
de letras y números.

La noche no termina
hasta no verlo andando.
Máquina a cafeína
que sigue tipeando.

¡Error de sintaxis!:

La computadora nos grita en la cara.
¡Error de sintaxis!
Demasiados paréntesis.
¡Error de sintaxis!
Falta un punto y coma.
¡Error de sintaxis!
Carácter inválido en el nombre de la variable.
¡Error de sintaxis!
Llave no cerrada.
¡Error de sintaxis!
No se puede compilar el poema.

El libro, además de los poemas contendría:

  • Un prólogo titulado "¿Cómo leer un poema?" que hable sobre cómo leer en voz alta un poema, acaso la única forma de leerlo realmente.
  • Porciones de código que son poemas (tanto por contenido por lo que manifestaron). Por ejemplo, el primer ping.c.
  • Citas (no tan fidedignas) de algunos "padres" de la programación.
  • Un enlace al repositorio con todo el contenido del libro, listo para ser forkeado.

Distribución

Mi idea es que el libro sea financiado por empresas del sector informático. A cambio estas obtendrían publicidad: su logo estaría en la contratapa y se enviarían ejemplares (muchos) a conferencias para ser regalados entre los asistentes.

¿Habrá empresas interesadas en esta idea? ¿Habrá programadores interesados en el libro?

Update: el monto para las empresas rondaría los $3000. Con eso, asegurando 3 o 4 empresas aspiro a hacer una tirada inicial de 500 ejemplares.