Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Publicaciones sobre programming (publicaciones antiguas, página 57)

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.

python-keyring está muy bueno

Es­tá bue­no cuan­do un pro­gra­ma pue­de re­cor­dar la pa­ssword que le da­s.

Es me­jor cuan­do al­ma­ce­na esa pa­ssword de for­ma se­gu­ra. Sin em­bar­go, no es tri­vial ha­cer­lo si te im­por­ta que el pro­gra­ma sea multi pla­ta­for­ma.

O al me­nos no lo era has­ta que Kang Zhang es­cri­bió py­thon ke­y­ring, un mó­duo que abs­trae el me­ca­nis­mo de al­ma­ce­na­mien­to de cla­ves de KDE, GNO­ME, OSX y Win­do­ws (y tie­ne un par de ba­cken­ds con ar­chi­vos por las du­da­s).

¿Có­mo fun­cio­na?

Se ins­ta­la de la for­ma ha­bi­tua­l. Si no es­tá dis­po­n­ble pa­ra tu dis­tro­/­sis­te­ma ope­ra­ti­vo, usá ea­s­y_ins­ta­ll:

easy_install keyring

Tam­bién se pue­de ob­te­ner via mer­cu­ria­l:

hg clone http://bitbucket.org/kang/python-keyring-lib/

La API es la sim­pli­ci­dad mis­ma. Así se guar­da un se­cre­to:

import keyring
keyring.set_password('keyring_demo','username','thisisabadpassword')

Tal vez te mues­tre es­te diá­lo­go (o al­go si­mi­lar en otras pla­ta­for­ma­s):

keyring1

Y aquí es­tá la prue­ba de que se guar­dó co­rrec­ta­men­te (es el ad­mi­nis­tra­dor de cla­ves de KDE):

keyring2

¿Y có­mo re­cu­pe­ra­mos el se­cre­to?

import keyring
print keyring.get_password('keyring_demo','username')

Y fun­cio­na así:

$ python load.py
thisisabadpassword

Co­mo se pue­de ve­r, la API es tan fá­cil co­mo pue­de se­r. Has­ta eli­gió el ba­ckend KWa­llet au­to­má­ti­ca­men­te por­que es­toy en KDE!

Py­tho­n-ke­y­ring es un mó­du­lo que re­suel­ve un pro­ble­ma rea­l, así que un aplau­so pa­ra Kang Zhang y Ta­rek Zia­dé (que tu­vo la idea).

Lo más astuto que escribí

Mien­tras la leía me dí cuen­ta de al­gu­nas co­sas:

  • Tie­­ne ca­­si exa­c­­ta­­men­­te 5 años de pu­­bli­­ca­­da

  • Es tal vez lo más in­­te­­li­­gen­­te que es­­cri­­bí (aun­­que eso no sea mu­­cho de­­ci­­r)

A ve­ces pa­sa que uno tie­ne una idea y pue­de dar­le for­ma. Co­mo me pa­re­ce que rel­men­te es al­go no com­ple­ta­men­te es­tú­pi­do, de­ci­dí tra­du­cir­lo al cas­te­llano (es­ta­ba só­lo en in­glé­s) y "re­pu­bli­car­lo" ho­y.

Es so­bre pro­gra­ma­ció­n, es so­bre evo­lu­ció­n, y es­pe­ro que les gus­te Ser una bue­na ra­na de La­mar­ck.

Migrando de Haloscan a Disqus (si podés comentar, funcionó ;-)

Si sos usua­rio de Ha­los­can, y es­tás em­pe­zan­do a pre­gun­tar­te que ha­ce­r... es­ta pá­gi­na te va a ex­pli­car una for­ma de lle­var­te tus co­men­ta­rios a Dis­qus, otro ser­vi­cio de co­men­ta­rios pa­ra blogs gra­tui­to.

Ha­ce unos po­cos días Ha­los­can anun­ció el fin de su ser­vi­cio de co­men­ta­rios gra­tui­tos pa­ra blogs. Adi­vi­ná en qué ser­vi­cio ten­go 9 años de co­men­ta­rio­s? Sí, en Ha­los­can.

Ofre­cen una mi­gra­ción sen­ci­lla a su pla­ta­for­ma Echo, que es un ser­vi­cio pa­go. Si bien Echo pa­re­ce una pla­ta­for­ma de co­men­ta­rios per­fec­ta­men­te dig­na, no ten­go ga­nas de gas­tar di­ne­ro en es­te bloh si pue­do evi­tar­lo. Ya bas­tan­te le doy tiem­po!

Por suer­te, los mu­cha­chos de Ha­los­can per­mi­ten ex­por­tar los co­men­ta­rios (an­tes ha­bía que pa­gar pa­ra eso­), así que gra­cias Ha­los­can, fué un gus­to!

En­ton­ces em­pe­cé a in­ves­ti­gar a don­de me po­día es­ca­pa­r. Pa­re­ce ha­ber dos sis­te­mas gran­des y gra­tui­tos de co­men­ta­rio­s:

Tén­ga­se en men­te que prin­ci­pal in­te­rés es no per­der mis co­men­ta­rio­s, no la ca­li­dad del ser­vi­cio. Ha­bien­do di­cho eso, los dos pa­re­cen ofre­cer más o me­nos las mis­mas ca­rac­te­rís­ti­ca­s.

Con­si­de­re­mos co­mo im­por­tar co­men­ta­rios en ca­da ser­vi­cio:

  • Dis­­qus: Pue­­de im­­po­r­­tar de blo­­­gger y al­­gún otro se­r­­vi­­cio ho­s­­tea­­do. No de Ha­­lo­s­­can.

  • In­­ten­­se De­­ba­­te: Pue­­de im­­po­r­­tar al­­gu­­nos se­r­­vi­­cios ho­s­­tea­­dos y al­­gu­­nos ar­­chi­­vo­­s. No el que Ha­­lo­s­­can me dió.

En­ton­ce que ha­go? Es­cri­bir un pro­gra­ma en Py­tho­n, por su­pues­to! Ahí ga­nó Dis­qus: tie­nen un API pú­bli­ca pa­ra los co­men­ta­rio­s.

En­ton­ce­s, to­do lo que hay que ha­cer es:

  1. En­­ten­­der el API de Dis­­qus

  2. En­­ten­­der los co­­­men­­ta­­rios de Ha­­lo­s­­can (es XM­­L)

  3. Crear los hi­­los ne­­ce­s­a­­rios en Dis­­qus

  4. Po­s­­tear los co­­­men­­ta­­rios de Ha­­lo­s­­can a Dis­­qus

  5. Arre­­glar el blog pa­­ra que los li­nks a Ha­­lo­s­­can fun­­cio­­­nen con Dis­­qus

Pan co­mi­do. Me lle­vó me­dio día, lo que a mi ta­ri­fa ac­tual es el equi­va­len­te de 3 años de Echo, pe­ro que gra­cia ten­dría pa­gar?

Así que, va­mos pa­so por pa­so.

1. Entender el API de Disqus

Por suer­te hay una bi­blio­te­ca ra­zo­na­ble: Dis­qus Py­thon Client li­bra­ry y do­cs pa­ra la API así que es­to no fué tan di­fí­ci­l.

Ins­ta­le la bi­blio­te­ca:

hg clone https://IanLewis@bitbucket.org/IanLewis/disqus-python-client/
cd disqus-python-client
python setup.py install

El uso que va­mos a dar­le al API es sen­ci­llo, así que si ha­ce fal­ta, lee la do­cu­men­ta­ción 15 mi­nu­to­s. Yo sa­qué to­do lo que ne­ce­si­ta­ba de es­te script pa­ra im­por­tar py­blo­x­som

Bá­si­ca­men­te:

  1. Ob­­te­r­­ner un key pa­­ra la API

  2. Lo­­­guea­r­­se

  3. Ob­­te­­ner el "fo­­­ro" co­­­rre­c­­to (Se pue­­de usar una cuen­­ta Dis­­qus pa­­ra más de un blo­­­g)

  4. Po­s­­tear en el hi­­lo ade­­cua­­do

2. Entender el archivo de comentarios de Haloscan

No só­lo es XM­L, ¡ Es XML fá­ci­l!

Es más o me­nos así:

<?xml version="1.0" encoding="iso-8859-1" ?>
<comments>
    <thread id="BB546">
      <comment>
        <datetime>2007-04-07T10:21:54-05:00</datetime>
        <name>superstoned</name>
        <email>josje@isblond.nl</email>
        <uri></uri>
        <ip>86.92.111.236</ip>
        <text><![CDATA[that is one hell of a cool website ;-)]]></text>
      </comment>
      <comment>
        <datetime>2007-04-07T16:14:53-05:00</datetime>
        <name>Remi Villatel</name>
        <email>maxilys@tele2.fr</email>
        <uri></uri>
        <ip>77.216.206.65</ip>
        <text><![CDATA[Thank you for these rare minutes of sweetness in this rough world...]]></text>
      </comment>
    </thread>
</comments>

En­ton­ce­s: un tag co­m­men­ts, que con­tie­ne una o más tags th­rea­d, que con­tie­nen uno o mas tags co­m­men­t. ¡Pan co­mi­do con Ele­men­tTree!

Hay una ob­via co­rres­pon­den­cia en­tre co­men­ta­rios y th­rea­ds en Ha­los­can y Dis­qus. Bien.

3. Crear los hilos necesarios en Disqus

Es­ta es la par­te com­pli­ca­da, por­que re­quie­re co­sas de tu blo­g.

  • Hay que te­­ner un pe­r­­ma­­li­nk por post

  • Ca­­da pe­r­­ma­­li­nk de­­be ser una pá­­gi­­na se­­pa­­ra­­da. No si­r­­ve un pe­r­­ma­­li­nk con # en la UR­­L.

  • Pa­­ra ca­­da po­s­­t, hay que sa­­ber el tí­­tu­­lo, el pe­r­­ma­­li­nk, y có­­­mo iden­­ti­­fi­­car los co­­­men­­ta­­rios en Ha­­lo­s­­can.

Por ejem­plo, su­pon­ga­mos que hay un post en //­ral­si­na.­me/we­blo­g/­pos­ts/A­D­V0.ht­ml con un li­nk de Ha­los­can co­mo és­te:

<a hre­f="ja­vas­crip­t:Ha­loS­can('A­D­V0');" tar­ge­t="_sel­f"> <s­cript ty­pe="­tex­t/­ja­vas­crip­t">­pos­tCoun­t('A­D­V0');</s­crip­t></a>

¿A­dón­de más sa­le ese 'A­D­VO­'? En el ar­chi­vo XML de Ha­los­can, por su­pues­to. Es el atri­bu­to "i­d" de un th­rea­d.

Ade­má­s, el tí­tu­lo de es­te post es "A­d­vo­ga­to post for 2000-01-17 17:19:57" (Es mi blog por su­pues­to ;-)

¿Te­nés esos da­to­s?

En­ton­ces va­mos a crear un th­read en Dis­qus con exac­ta­men­te los mis­mos da­tos:

  • URL

  • Th­­read ID

  • Ti­­tu­­lo

La ma­la no­ti­cia es... vas a ne­ce­si­tar te­ner es­ta in­for­ma­ción pa­ra to­do tu blog y guar­dar­la en al­gún la­do. Si te­nés suer­te, tal vez la pue­das sa­car de una ba­se de da­to­s, co­mo hi­ce yo. Si no­... bue­no, va a ser bas­tan­te tra­ba­jo :-(

Pa­ra los pro­pó­si­tos de es­ta ex­pli­ca­ción voy a asu­mir que ese da­to es­tá en un bo­ni­to dic­cio­na­rio in­de­xa­do por th­read id:

{
  id1: (url, title),
  id2: (url, title)
}

4. Postear los comentarios de Haloscan a Disqus

Aquí es­tá el có­di­go. No es­tá real­men­te pro­ba­do, por­que tu­ve que ha­cer va­rios in­ten­tos y arre­glos par­cia­le­s, pe­ro de­be­ría es­tar cer­ca de lo co­rrec­to. (do­wn­load):

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Read all comments from a CAIF file, the XML haloscan exports

from disqus import DisqusService
from xml.etree import ElementTree
from datetime import datetime
import time


# Obviously these should be YOUR comment threads ;-)
threads={
    'ADV0': ('//ralsina.me/weblog/posts/ADV0.html','My first post'),
    'ADV1': ('//ralsina.me/weblog/posts/ADV1.html','My second post'),
    }

key='USE YOUR API KEY HERE'
ds=DisqusService()
ds.login(key)
forum=ds.get_forum_list()[0]

def importThread(node):
    t_id=node.attrib['id']

    # Your haloscan thread data
    thr_data=threads[t_id]

    # A Disqus thread: it will be created if needed
    thread=ds.thread_by_identifier(forum,t_id,t_id)['thread']

    # Set the disqus thread data to match your blog
    ds.update_thread(forum, thread, url=thr_data[0], title=thr_data[1])


    # Now post all the comments in this thread
    for node in node.findall('comment'):
        dt=datetime.strptime(node.find('datetime').text[:19],'%Y-%m-%dT%H:%M:%S')
        name=node.find('name').text or 'Anonymous'
        email=node.find('email').text or ''
        uri=node.find('uri').text or ''
        text=node.find('text').text or 'No text'

        print '-'*80
        print 'Name:', name
        print 'Email:', email
        print 'Date:', dt
        print 'URL:', uri
        print
        print 'Text:'
        print text

        print ds.create_post(forum, thread, text, name, email,
                                   created_at=dt, author_url=uri)
        time.sleep(1)

def importComments(fname):
    tree=ElementTree.parse(fname)
    for node in tree.findall('thread'):
        importThread(node)


# Replace comments.xml with the file you downloaded from Haloscan
importComments('comments.xml')

Aho­ra, si tu­vi­mos suer­te, ya te­nés una lin­da y fun­cio­nal co­lec­ción de co­men­ta­rios en tu cuen­ta de Dis­qus, y la tran­qui­li­dad de que no se per­die­ron los da­to­s. Lis­to pa­ra el pa­so fi­na­l?

Nueva app 24-horas (no tan) pronto: foley

Apli­ca­cio­nes 24-ho­ras son pro­yec­tos pe­que­ño­s, au­to­con­te­ni­do­s, don­de in­ten­to crear una apli­ca­ción de­cen­te y útil en 24 ho­ra­s.

El con­cep­to es que:

  1. Voy a pen­sar en es­­ta apli­­ca­­ción por un tie­m­­po.

  2. La voy a di­se­­ñar en mi ca­­be­­­za o en no­­­tas es­­cri­­ta­s.

  3. Voy a pro­­­gra­­mar des­­de ce­­ro, por 24 ho­­­ra­s.

  4. Eso no es un día sino 24 ho­­­ras de tra­­ba­­jo. Ya no pue­­do tra­­ba­­jar 24 ho­­­ras co­­­rri­­da­s.

La úl­ti­ma vez es­to no salió exac­ta­men­te co­mo que­ría pe­ro fue di­ver­ti­do y edu­ca­ti­vo (al me­nos pa­ram mí ;-) y el re­sul­ta­do es una apli­ca­ción que no es­tá mal!

En­ton­ce­s, que va a ser fo­le­y? Una apli­ca­ción pa­ra to­mar no­tas orien­ta­da a es­tu­dian­tes y pú­bli­co de con­fe­ren­cia­s.

En tu úl­ti­mo even­to ner­d, ¿no­tas­te que to­dos es­ta­ban usan­do una com­pu­ta­do­ra?

¿Y en qué es­ta­ban to­man­do no­ta­s? ¿vi? ¿kw­ri­te? ¿O­pe­nO­ffi­ce? Sea lo que sea, no es­tá pen­sa­do pa­ra usar­lo con es­te fi­n.

¿En­ton­ces que ha­ría fo­ley dis­tin­to? To­da­vía no lo sé pe­ro ten­go idea­s:

  1. Una fue­r­­te orien­­ta­­ción a lí­­nea de tie­m­­po. Ca­­da pá­­rra­­fo con fe­­cha y ho­­­ra.

  2. So­­­po­r­­te pa­­ra Twi­­tte­­r/I­­den­­ti­­ca. ¿Que­­rés ha­­cer un li­­ve blog de tus no­­­ta­s? Un cli­­ck.

  3. Mu­l­­ti­­me­­dia in­­co­r­­po­­­ra­­da.

    • ¿Gra­­­ba­­­cio­­­­­nes de au­­­dio­­­/­­­vi­­­deo si­n­­­cro­­­­­ni­­­za­­­das con las no­­­­­ta­s?

    • ¿I­­­má­­­ge­­­nes im­­­po­­­r­­­ta­­­das y agre­­­ga­­­das a la lí­­­nea de tie­­m­­­po?

  4. Si me dan un PDF con sli­­des, po­­­ner ca­­da sli­­de en el mo­­­men­­to ade­­cua­­do del his­­to­­­ria­­l.

  5. Pu­­bli­­ca­­ción sen­­ci­­lla en we­­b: en­­co­n­­trar una ma­­ne­­ra de po­­­ner es­­to en una pá­­gi­­na web fá­­ci­l­­men­­te (la idea es un cli­­ck).

Lle­vo 10 mi­nu­tos pen­san­do en es­to, pe­ro le veo po­ten­cia­l.

La ma­la no­ti­cia es... ten­go una pi­la de tra­ba­jo que me da de co­me­r. Así que es­to re­cién se va a po­der en ene­ro. Igual que­ría pos­tear­lo pa­ra ob­te­ner res­pues­ta en la eta­pa de pla­nea­ció­n.

En­ton­ce­s, ¿al­gu­na idea?


Contents © 2000-2023 Roberto Alsina