Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Nuevo proyecto: marave, un editor de textos relajado

Ma­ra­ve (na­da, in gua­ra­ní) es un edi­tor de tex­tos re­la­ja­do. Su me­ta es que te pue­das con­cen­trar en es­cri­bi­r, li­bre de dis­trc­cio­nes vi­sua­le­s.

Es­tá es­cri­to en Py­Q­t, por lo que de­be­ría fun­cio­nar en to­das las pla­ta­for­mas im­por­tan­tes, y es­tá li­be­ra­do ba­jo la li­cen­cia GPL­v2, así que es so­ftw­re li­bre.

Se pue­de en­con­trar el SVN ac­tua­li­za­do (no hay to­da­vía una ver­sión em­pa­que­ta­da) en http://­ma­ra­ve.­google­co­de.­com

Screens­ho­ts:

snapshot10snapshot9snapshot8

Sta­tus:

No es­tá ter­mi­na­do, pe­ro tie­ne es­to:

  • Se pue­­de edi­­tar tex­­to

  • In­­te­r­­faz mi­­ni­­ma­­lis­­ta, "e­­va­­nes­­cen­­te"

  • (O­p­­cio­­­na­­l) fee­­dba­­ck de au­­dio pa­­ra el te­­cla­­do

  • (O­p­­cio­­­na­­l) mú­­si­­ca re­­la­­jan­­te (re­­quie­­re in­­te­r­­ne­­t)

  • Se pue­­de pe­r­­so­­­na­­li­­zar el fo­n­­do, la ti­­po­­­gra­­fía, los co­­­lo­­­res y so­­­ni­­do­­s.

  • Co­­­rre­c­­tor or­­to­­­grá­­fi­­co (re­­quie­­re pyen­­chan­­t)

Tam­bién fal­tan al­gu­nas co­sas:

  • Bus­­car y Bus­­ca­­r/­­Ree­m­­pla­­zar no es­­tá he­­cho

  • Las pe­r­­so­­­na­­li­­za­­cio­­­nes no se gua­r­­dan

  • Fa­l­­ta li­m­­piar más la in­­te­r­­faz

  • No pi­­de gua­r­­dar cuan­­do cie­­rra

  • Gua­r­­da­­do au­­to­­­má­­ti­­co no es­­tá he­­cho

Y al me­nos un bug co­no­ci­do:

  • En wi­n­­do­­ws los wi­­dge­­ts no es­­tán bien ubi­­ca­­dos Arre­­gla­­do en SVN

Bre­ve his­to­ria:

Ha­ce unos días vi om­mw­ri­ter men­cio­na­do en un tweet o al­go si­mi­la­r.

Es­ta­ba pen­san­do "lin­do­", pe­ro una voz en mi ca­be­za me de­cía "e­so de­be ser fá­cil de ha­ce­r". Des­pués de to­do, la par­te di­fí­cil de crear un pro­gra­ma es ha­cer que ha­ga al­go, ¿no?

Bue­no, sí y no. Me las arre­glé pa­ra ha­cer al­go pa­re­ci­do en un día, pe­ro ha­cer que que­de exac­to co­mo yo quie­ro me vuel­ve lo­co :-)

Feliz cumpleblog para mí!

To­do em­pe­zó en ad­vo­ga­to don­de se lo pue­de leer aún hoy! (Por fa­vor léan­lo acá ;-)

Des­pués cam­bió a Py­D­S, una pla­ta­for­ma de blog py­thon de es­cri­to­rio con in­ter­fa­ce we­b, y hos­tea­do en Py­CS, un ser­vi­cio gra­tui­to.

En­ton­ces Py­CS se mu­rió, y em­pe­cé a ge­ne­rar un blog es­tá­ti­co hos­tea­do en el hos­ting gra­tis de mi IS­P. Eso era una ba­zo­fia.

Des­pués fun­dé mi pro­pia com­pa­ñía, tu­ve mis pro­pios ser­ver­s, y em­pe­cé a hos­tear­lo allí (¡Aún hoy es­te blog es HT­ML com­ple­ta­men­te es­tá­ti­co! ¿No se no­ta, no­?)

En­ton­ces Py­DS em­pe­zó a fun­cio­nar ma­l, y es­cri­bí mi pro­pio so­ftwa­re, que es una por­que­ría, tal vez 25% ter­mi­na­do pe­ro ha­ce las co­sas exac­ta­men­te co­mo yo quie­ro.

Ho­y, es­te blog es­tá agre­ga­do en Pla­ne­ta PyA­r, Pla­net Py­tho­n, Pla­net Qt, Pla­ne­ta LU­GLI, Y al­gún otro lu­ga­r.

Es­te año de­ci­dí ha­cer que sea bi­lin­güe (in­glés y es­pa­ño­l) pe­ro odio tra­du­cir­lo (lo es­cri­bo pri­me­ro en in­glé­s).

De acuer­do a las es­ta­dís­ti­cas dis­po­ni­ble­s, es, en pro­me­dio, más po­pu­lar que nun­ca (pe­ro mis pos­ts mas po­pu­la­res son vie­jo­s).

stats

És­tas son las pá­gi­nas más po­pu­la­res del úl­ti­mo año:

Lec­cio­nes:

  1. Ne­­ce­­si­­to es­­cri­­bir más so­­­bre Qt y/o em­­pe­­zar fla­­mes con gen­­te que es­­cri­­be so­­­bre IT.

  2. Ne­­ce­­si­­to bus­­car el ma­­te­­rial ob­­so­­­le­­to y po­­­ner no­­­ta­s.

  3. Te­­ner tu pro­­­pio ho­s­­ting y so­­­ft es me­­jo­­­r.

  4. 10 años es mu­­cho tie­m­­po: 860 po­s­­ts (o 913, de­­pen­­de co­­­mo los cuen­­te)

Con iterpipes, python puede reemplacar a bash para scripting. En serio.

O al me­nos así era has­ta que hoy me en­contré con iter­pi­pes en py­tho­n.­re­ddi­t.­com

Iter­pi­pes es "u­na bi­blio­te­ca pa­ra usar pi­pe­li­nes de she­ll usan­do sin­ta­xis pa­re­ci­da al she­ll" y ¿sa­bés qué? Es bri­llan­te.

Acá hay un ejem­plo de su pá­gi­na de PY­PI:

# Total lines in *.py files under /path/to/dir,
# use safe shell parameters formatting:

>>> total = cmd(
...     'find {} -name {} -print0 | xargs -0 wc -l | tail -1 | awk {}',
...     '/path/to/dir', '\*.py', '{print $1}')
>>> run(total | strip() | join | int)
315

Así se­ría en she­ll:

find /path/to/dir -name '*.py' -print0 | xargs -0 wc -l | tail -1 | awk '{print $1}'

Tal vez di­gas que la ver­sión de she­ll es más sen­ci­lla. Eso es una ilu­sión cau­sa­da por la den­si­dad del cam­po ma­li­co del she­ll: esa ver­sión tie­ne bugs.

Porqué tiene bugs? Porque si controlo qué hay adentro de /path/to/dir puedo hacer que falle [1], pero en python puedo manejar el error.

Tam­bién en la ma­yo­ría de los in­ten­tos de es­cri­bir ese co­man­do se­ría in­se­gu­ro por­que las re­glas de co­mi­llas y ca­rac­te­res de es­ca­pe de she­ll son de­men­tes.

La ver­sión de iter­pi­pes usa el equi­va­len­te de pre­pa­red sta­te­men­ts de SQL que de­be­ría ser más se­gu­ro.

Es ca­si im­po­si­ble ha­cer ese co­man­do en pu­ro she­ll y es­tar se­gu­ro de que es se­gu­ro.

Ade­más la ver­sión en she­ll pro­du­ce un string en vez de un en­te­ro, que es una ba­zo­fia si lo ne­ce­si­tás usar pa­ra al­go.

Y el be­ne­fi­cio más im­por­tan­te es, por su­pues­to, no cuan­do tra­tás de ha­cer que py­thon fun­cio­ne co­mo un she­ll, sino cuan­do po­dés de­jar de ha­cer co­mo que el she­ll es un len­gua­je de ver­da­d.

Comsideremos esta gema del script /etc/rc.shutdown en Arch Linux. DAEMONS es una lista de cosas que se arrancaron al inicio, y este script intenta detenerlas en orden inverso, a menos que el nombre empiece con "!":

# Shutdown daemons in reverse order
let i=${#DAEMONS[@]}-1
while [ $i -ge 0 ]; do
        if [ "${DAEMONS[$i]:0:1}" != '!' ]; then
                ck_daemon ${DAEMONS[$i]#@} || stop_daemon ${DAEMONS[$i]#@}
        fi
        let i=i-1
done

¿No es lin­do?

¿Y có­mo se ve­ría en py­tho­n? (tal vez ha­ya in­ver­ti­do el sig­ni­fi­ca­do de ck_­dae­mo­n):

# Shutdown daemons in reverse order
for daemon in reversed(DAEMONS):
    if daemon[0]=='!':
        continue
    if ck_daemon(daemon):
        stop_daemon(daemon)

Mien­tras que sto­p_­dae­mon so­lía ser es­to:

stop_daemon() {
    /etc/rc.d/$1 stop
}

Aho­ra se­rá es­to:

.. code-block:: python
def stop_daemon(daemon):

run(­cm­d('/e­tc/r­c.­d/{} sto­p',­dae­mo­n))

Va­mos gen­te, es­ta­mos en pleno si­glo 21, y el she­ll scrip­ting ya era feo en el 20.

Cómo me gano la vida

Si al­guien le pre­gun­ta a mi es­po­sa que ha­ce, só­lo ne­ce­si­ta de­cir "soy abo­ga­da". Si al­guien le pre­gun­ta a mi ma­má, va a de­cir "soy ma­es­tra ju­bi­la­da". To­dos en­tien­den qué ha­ce un abo­ga­do, o qué ha­cía una ma­es­tra ju­bi­la­da.

Si al­guien me pre­gun­ta... uf, eso es com­pli­ca­do. Nor­mal­men­te za­fo con al­go co­mo "Tra­ba­jo en in­for­má­ti­ca" pe­ro eso tie­ne va­rios pro­ble­ma­s:

  • Su­­po­­­nen que re­­pa­­ro PCs

  • Me em­­pie­­zan a de­­cir co­­­mo su co­m­­pu­­ta­­do­­­ra con wi­n­­do­­ws es­­ta­­ba len­­ta ha­s­­ta que in­s­­ta­­la­­ron una kro­­­po­­­tki­­na que les su­­pe­r­­ga­r­­bleó los fro­­­bno­­­z­­z­­les [4], y me pre­­gun­­tan que opino de ga­r­­blear los fro­­­bno­­­z­­z­­le­s, ¿sí o no?

Es di­fí­cil ex­pli­car que sí, tra­ba­jo con com­pu­ta­do­ras to­dos los día­s, pe­ro ca­si nun­ca abro una (de he­cho ten­go una fir­me po­lí­ti­ca de no to­car las com­pu­ta­do­ras de mis clien­tes), y que no ten­go idea de qué es un fro­bno­z­z­le.

He in­ten­ta­do de­cir "Tra­ba­jo con ser­vi­do­res, co­mo ser­vi­do­res de co­rreo y co­sas así. Los ins­ta­lo, doy so­por­te téc­ni­co y ha­go con­sul­to­ría, ex­pli­cán­do­le a las em­pre­sas la me­jor ma­ne­ra de me­jo­rar sus ser­vi­cio­s".

Ge­ne­ral­men­te ob­ten­go ojos vi­drio­sos y ca­ra de "¿uh?"

Po­dría men­tir y de­cir que pro­gra­mo, pe­ro no es cier­to. Si bien pro­gra­mo bas­tan­te, nor­mal­men­te no es por di­ne­ro, y lo po­co que ha­go por di­ne­ro es co­mo he­rra­mien­ta de sysad­mi­n.

Po­dría de­cir "soy un sysad­mi­n" pe­ro la ma­yo­ría no tie­ne idea de que es eso. Por lo me­nos tien­de a ter­mi­nar las con­ver­sacio­nes, así que eso es un pun­to a fa­vo­r.

Hoy en día pue­do de­cir "Ten­go una em­pre­sa", que es cier­to (so­mos bár­ba­ros, de­be­rías con­tra­tar­nos pa­ra lo que sea que ha­ce­mo­s, más de­ta­lles en http://www.­ne­t­ma­na­ger­s.­co­m.ar )

En­ton­ce­s, nor­mal­men­te me las arre­glo pa­ra res­pon­de­r, pe­ro ten­go un pro­ble­ma: no es­toy di­cien­do la ver­da­d, o si lo ha­go, no la di­go en es­píri­tu por­que no es­toy trans­mi­tien­do que es lo que mi tra­ba­jo es sino lo que ha­go.

En­ton­ce­s, es­toy tra­tan­do de ex­pli­car que corno ha­go de otra ma­ne­ra que sea ma­s... in­ter­na­men­te cier­ta, por así de­ci­r. Es­to es di­fí­ci­l, así que voy a tra­tar de de­jar que flu­ya, ca­paz que se en­tien­da aun­que no es­té bien ex­pli­ca­do.

Tra­ba­jo con com­pu­ta­do­ra­s. Las ha­go ha­cer lo que yo di­go. Cuan­do un usua­rio se sien­ta fren­te a un te­cla­do, tra­ta de ha­cer que si­ga sus ór­de­nes, con dis­tin­tos gra­dos de éxi­to. Yo siem­pre ten­go éxi­to.

A ve­ce­s, es­toy lo­guea­do en un sis­te­ma que ma­ne­ja da­tos pa­ra mi­les de per­so­na­s. Es­tán a mi cui­da­do. No, no son sus vi­das ni na­da, pe­ro una pe­que­ña par­te de su di­ver­sión o de su tra­ba­jo es­tá a mi cui­da­do. Los ayu­do y me in­te­re­sa. Quie­ro que su di­ver­sión o su tra­ba­jo sea tran­qui­lo y agra­da­ble.

A ve­ces la com­pu­ta­do­ra no ha­ce lo que ellos quie­ren. Voy a usar mi ha­bi­li­dad pa­ra que lo ha­ga. Es­cri­bi­ré pe­que­ños pro­gra­ma­s, bus­ca­ré otros en In­ter­ne­t, con cui­da­do voy a ar­mar el rom­pe­ca­be­zas y voy a ha­cer que lo que ne­ce­si­tan fun­cio­ne.

Pue­do es­cri­bir o ins­ta­lar y con­fi­gu­rar esos pro­gra­mas y lo ha­go bien por­que soy há­bi­l. Ten­go dé­ca­das de en­tre­na­mien­to y ex­pe­rien­cia, pe­ro más que na­da lo ha­go por­que me gus­ta el or­den y la fun­ció­n. Me gus­ta que las co­sas flu­yan sin im­pe­di­men­to­s, me gus­ta cuan­do un ac­ci­den­te afor­tu­na­do ha­ce que las co­sas sim­ple­men­te co­nec­ten.

Ha­go eso pa­ra vi­vi­r, sí por­que ne­ce­si­to ga­nar­me la vi­da. Y des­pués cuan­do ter­mi­nó la jor­na­da y mi hi­jo duer­me y ten­go un ra­to pa­ra mí, ¿qué ha­go? Ha­go las mis­mas co­sas por­que me di­vier­ten. Y es­cr­bi­ré 1300 pa­la­bras acer­ca de co­mo mo­ví los co­men­ta­rios de mi blog a otro ser­ver por­que fue di­ver­ti­do.

Ya sé, pa­ra la ma­yo­ría eso es abu­rri­dí­si­mo, aún si les pa­ga­ran, y lo odia­rían. Y esa es una de las mu­chas ra­zo­nes por las que soy un hom­bre afor­tu­na­do [5]: me di­vier­te ha­cer co­sas inu­u­sua­le­s. Si mi idea de di­ver­sión fue­ra ver "Go­s­sip Gir­l" na­die me pa­ga­ría pa­ra ha­cer­lo.

Pe­ro vol­vien­do a que ha­go, creo co­sas. No creo co­sas gran­des e im­pre­sio­nan­tes, no soy un ar­qui­tec­to, un cons­truc­tor de puen­tes. Creo co­sas chi­cas y úti­les que in­ten­to ten­gan un cier­to gus­to y ele­gan­cia. Soy más co­mo un or­fe­bre ha­cien­do cu­bier­to­s. Se­gu­ro, voy a tra­tar que sea lin­do, pe­ro lo im­por­tan­te es que cor­te un bi­fe.

Sí, tra­ba­jo con com­pu­ta­do­ra­s, pe­ro ¿có­mo trans­mi­te eso lo que sien­to cuan­do des­pués de un buen día de tra­ba­jo lo que era una pi­la de co­pu­ta­do­ras idio­tas y ca­bles es una má­qui­na que sir­ve pa­ra ha­cer 50000 lla­ma­das te­le­fó­ni­cas al día?

¿Có­mo ha­go pa­ra que al­guien vea la be­lle­za de 3 lí­neas de có­di­go que no ha­cen más que im­pri­mir unos nú­me­ro­s?

¿Có­mo pue­de al­guien que ha­ce otra co­sa ver que pien­so al­go y se vuel­ve rea­l? No, no real co­mo que hay una nu­be de hu­mo y ahí es­tá, sino que pri­me­ro hay que tra­ba­jar y pen­sar y mal­de­ci­r, lo que lo ha­ce real­men­te rea­l.

Ya sé que es­to sue­na to­do a mis­ti­cis­mo, pe­ro no lo es, es mi ho­nes­ta ver­da­d, real­men­te sien­to es­tas co­sas mien­tras tra­ba­jo, to­das es­tas co­sas son mi tra­ba­jo. A ve­ces cuan­do le en­cuen­tro la vuel­ta a al­go ten­go ga­nas de can­tar [7] así me sien­to.

Así que eso ha­go pa­ra vi­vi­r, tra­ba­jo con com­pu­ta­do­ra­s.


Contents © 2000-2023 Roberto Alsina